typekro 0.44.1 → 0.45.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 (459) hide show
  1. package/dist/core/kubernetes/bun-api-client.d.ts +0 -10
  2. package/dist/core/kubernetes/bun-api-client.d.ts.map +1 -1
  3. package/dist/core/kubernetes/bun-api-client.js +77 -3
  4. package/dist/core/kubernetes/bun-api-client.js.map +1 -1
  5. package/dist/core/references/schema-proxy.d.ts +17 -0
  6. package/dist/core/references/schema-proxy.d.ts.map +1 -1
  7. package/dist/core/references/schema-proxy.js +53 -3
  8. package/dist/core/references/schema-proxy.js.map +1 -1
  9. package/dist/core/serialization/schema.d.ts.map +1 -1
  10. package/dist/core/serialization/schema.js +52 -20
  11. package/dist/core/serialization/schema.js.map +1 -1
  12. package/dist/core/types/serialization.d.ts +5 -2
  13. package/dist/core/types/serialization.d.ts.map +1 -1
  14. package/dist/factories/apisix/resources/helm.d.ts +2 -2
  15. package/dist/factories/apisix/resources/helm.d.ts.map +1 -1
  16. package/dist/factories/apisix/resources/helm.js +7 -11
  17. package/dist/factories/apisix/resources/helm.js.map +1 -1
  18. package/dist/factories/aws-load-balancer-controller/compositions/bootstrap.d.ts +38 -0
  19. package/dist/factories/aws-load-balancer-controller/compositions/bootstrap.d.ts.map +1 -0
  20. package/dist/factories/aws-load-balancer-controller/compositions/bootstrap.js +101 -0
  21. package/dist/factories/aws-load-balancer-controller/compositions/bootstrap.js.map +1 -0
  22. package/dist/factories/aws-load-balancer-controller/compositions/helm-repository.d.ts +10 -0
  23. package/dist/factories/aws-load-balancer-controller/compositions/helm-repository.d.ts.map +1 -0
  24. package/dist/factories/aws-load-balancer-controller/compositions/helm-repository.js +25 -0
  25. package/dist/factories/aws-load-balancer-controller/compositions/helm-repository.js.map +1 -0
  26. package/dist/factories/aws-load-balancer-controller/compositions/index.d.ts +3 -0
  27. package/dist/factories/aws-load-balancer-controller/compositions/index.d.ts.map +1 -0
  28. package/dist/factories/aws-load-balancer-controller/compositions/index.js +3 -0
  29. package/dist/factories/aws-load-balancer-controller/compositions/index.js.map +1 -0
  30. package/dist/factories/aws-load-balancer-controller/constants.d.ts +21 -0
  31. package/dist/factories/aws-load-balancer-controller/constants.d.ts.map +1 -0
  32. package/dist/factories/aws-load-balancer-controller/constants.js +29 -0
  33. package/dist/factories/aws-load-balancer-controller/constants.js.map +1 -0
  34. package/dist/factories/aws-load-balancer-controller/index.d.ts +17 -0
  35. package/dist/factories/aws-load-balancer-controller/index.d.ts.map +1 -0
  36. package/dist/factories/aws-load-balancer-controller/index.js +16 -0
  37. package/dist/factories/aws-load-balancer-controller/index.js.map +1 -0
  38. package/dist/factories/aws-load-balancer-controller/resources/elbv2.d.ts +45 -0
  39. package/dist/factories/aws-load-balancer-controller/resources/elbv2.d.ts.map +1 -0
  40. package/dist/factories/aws-load-balancer-controller/resources/elbv2.js +148 -0
  41. package/dist/factories/aws-load-balancer-controller/resources/elbv2.js.map +1 -0
  42. package/dist/factories/aws-load-balancer-controller/resources/helm.d.ts +36 -0
  43. package/dist/factories/aws-load-balancer-controller/resources/helm.d.ts.map +1 -0
  44. package/dist/factories/aws-load-balancer-controller/resources/helm.js +96 -0
  45. package/dist/factories/aws-load-balancer-controller/resources/helm.js.map +1 -0
  46. package/dist/factories/aws-load-balancer-controller/resources/index.d.ts +3 -0
  47. package/dist/factories/aws-load-balancer-controller/resources/index.d.ts.map +1 -0
  48. package/dist/factories/aws-load-balancer-controller/resources/index.js +3 -0
  49. package/dist/factories/aws-load-balancer-controller/resources/index.js.map +1 -0
  50. package/dist/factories/aws-load-balancer-controller/types.d.ts +267 -0
  51. package/dist/factories/aws-load-balancer-controller/types.d.ts.map +1 -0
  52. package/dist/factories/aws-load-balancer-controller/types.js +81 -0
  53. package/dist/factories/aws-load-balancer-controller/types.js.map +1 -0
  54. package/dist/factories/aws-load-balancer-controller/utils/helm-values-mapper.d.ts +27 -0
  55. package/dist/factories/aws-load-balancer-controller/utils/helm-values-mapper.d.ts.map +1 -0
  56. package/dist/factories/aws-load-balancer-controller/utils/helm-values-mapper.js +171 -0
  57. package/dist/factories/aws-load-balancer-controller/utils/helm-values-mapper.js.map +1 -0
  58. package/dist/factories/aws-load-balancer-controller/utils/index.d.ts +2 -0
  59. package/dist/factories/aws-load-balancer-controller/utils/index.d.ts.map +1 -0
  60. package/dist/factories/aws-load-balancer-controller/utils/index.js +2 -0
  61. package/dist/factories/aws-load-balancer-controller/utils/index.js.map +1 -0
  62. package/dist/factories/cert-manager/compositions/cert-manager-bootstrap.d.ts +6 -4
  63. package/dist/factories/cert-manager/compositions/cert-manager-bootstrap.d.ts.map +1 -1
  64. package/dist/factories/cert-manager/compositions/cert-manager-bootstrap.js +22 -196
  65. package/dist/factories/cert-manager/compositions/cert-manager-bootstrap.js.map +1 -1
  66. package/dist/factories/cert-manager/resources/helm.d.ts.map +1 -1
  67. package/dist/factories/cert-manager/resources/helm.js +30 -51
  68. package/dist/factories/cert-manager/resources/helm.js.map +1 -1
  69. package/dist/factories/cert-manager/types.d.ts +54 -6
  70. package/dist/factories/cert-manager/types.d.ts.map +1 -1
  71. package/dist/factories/cert-manager/types.js +45 -12
  72. package/dist/factories/cert-manager/types.js.map +1 -1
  73. package/dist/factories/cert-manager/utils/helm-values-mapper.js +203 -76
  74. package/dist/factories/cert-manager/utils/helm-values-mapper.js.map +1 -1
  75. package/dist/factories/cilium/resources/helm.d.ts.map +1 -1
  76. package/dist/factories/cilium/resources/helm.js +23 -0
  77. package/dist/factories/cilium/resources/helm.js.map +1 -1
  78. package/dist/factories/cilium/types.d.ts +2 -1
  79. package/dist/factories/cilium/types.d.ts.map +1 -1
  80. package/dist/factories/cilium/types.js.map +1 -1
  81. package/dist/factories/clickhouse/resources/helm.d.ts.map +1 -1
  82. package/dist/factories/clickhouse/resources/helm.js +2 -1
  83. package/dist/factories/clickhouse/resources/helm.js.map +1 -1
  84. package/dist/factories/clickhouse/types.d.ts +2 -1
  85. package/dist/factories/clickhouse/types.d.ts.map +1 -1
  86. package/dist/factories/clickhouse/types.js.map +1 -1
  87. package/dist/factories/clickstack/resources/helm.d.ts.map +1 -1
  88. package/dist/factories/clickstack/resources/helm.js +3 -2
  89. package/dist/factories/clickstack/resources/helm.js.map +1 -1
  90. package/dist/factories/clickstack/types.d.ts +3 -3
  91. package/dist/factories/clickstack/types.d.ts.map +1 -1
  92. package/dist/factories/clickstack/types.js.map +1 -1
  93. package/dist/factories/cnpg/resources/helm.d.ts.map +1 -1
  94. package/dist/factories/cnpg/resources/helm.js +2 -1
  95. package/dist/factories/cnpg/resources/helm.js.map +1 -1
  96. package/dist/factories/cnpg/types.d.ts +2 -1
  97. package/dist/factories/cnpg/types.d.ts.map +1 -1
  98. package/dist/factories/cnpg/types.js.map +1 -1
  99. package/dist/factories/crowdsec/compositions/crowdsec-bootstrap.d.ts +33 -0
  100. package/dist/factories/crowdsec/compositions/crowdsec-bootstrap.d.ts.map +1 -0
  101. package/dist/factories/crowdsec/compositions/crowdsec-bootstrap.js +174 -0
  102. package/dist/factories/crowdsec/compositions/crowdsec-bootstrap.js.map +1 -0
  103. package/dist/factories/crowdsec/compositions/crowdsec-helm-repository.d.ts +10 -0
  104. package/dist/factories/crowdsec/compositions/crowdsec-helm-repository.d.ts.map +1 -0
  105. package/dist/factories/crowdsec/compositions/crowdsec-helm-repository.js +25 -0
  106. package/dist/factories/crowdsec/compositions/crowdsec-helm-repository.js.map +1 -0
  107. package/dist/factories/crowdsec/compositions/index.d.ts +3 -0
  108. package/dist/factories/crowdsec/compositions/index.d.ts.map +1 -0
  109. package/dist/factories/crowdsec/compositions/index.js +3 -0
  110. package/dist/factories/crowdsec/compositions/index.js.map +1 -0
  111. package/dist/factories/crowdsec/constants.d.ts +38 -0
  112. package/dist/factories/crowdsec/constants.d.ts.map +1 -0
  113. package/dist/factories/crowdsec/constants.js +42 -0
  114. package/dist/factories/crowdsec/constants.js.map +1 -0
  115. package/dist/factories/crowdsec/index.d.ts +12 -0
  116. package/dist/factories/crowdsec/index.d.ts.map +1 -0
  117. package/dist/factories/crowdsec/index.js +12 -0
  118. package/dist/factories/crowdsec/index.js.map +1 -0
  119. package/dist/factories/crowdsec/resources/helm.d.ts +52 -0
  120. package/dist/factories/crowdsec/resources/helm.d.ts.map +1 -0
  121. package/dist/factories/crowdsec/resources/helm.js +78 -0
  122. package/dist/factories/crowdsec/resources/helm.js.map +1 -0
  123. package/dist/factories/crowdsec/resources/index.d.ts +2 -0
  124. package/dist/factories/crowdsec/resources/index.d.ts.map +1 -0
  125. package/dist/factories/crowdsec/resources/index.js +2 -0
  126. package/dist/factories/crowdsec/resources/index.js.map +1 -0
  127. package/dist/factories/crowdsec/types.d.ts +266 -0
  128. package/dist/factories/crowdsec/types.d.ts.map +1 -0
  129. package/dist/factories/crowdsec/types.js +43 -0
  130. package/dist/factories/crowdsec/types.js.map +1 -0
  131. package/dist/factories/crowdsec/utils/helm-values-mapper.d.ts +40 -0
  132. package/dist/factories/crowdsec/utils/helm-values-mapper.d.ts.map +1 -0
  133. package/dist/factories/crowdsec/utils/helm-values-mapper.js +473 -0
  134. package/dist/factories/crowdsec/utils/helm-values-mapper.js.map +1 -0
  135. package/dist/factories/crowdsec/utils/index.d.ts +3 -0
  136. package/dist/factories/crowdsec/utils/index.d.ts.map +1 -0
  137. package/dist/factories/crowdsec/utils/index.js +3 -0
  138. package/dist/factories/crowdsec/utils/index.js.map +1 -0
  139. package/dist/factories/crowdsec/utils/net.js +68 -0
  140. package/dist/factories/crowdsec/utils/net.js.map +1 -0
  141. package/dist/factories/crowdsec/utils/traefik-bouncer.d.ts +48 -0
  142. package/dist/factories/crowdsec/utils/traefik-bouncer.d.ts.map +1 -0
  143. package/dist/factories/crowdsec/utils/traefik-bouncer.js +302 -0
  144. package/dist/factories/crowdsec/utils/traefik-bouncer.js.map +1 -0
  145. package/dist/factories/dagster/resources/helm.d.ts.map +1 -1
  146. package/dist/factories/dagster/resources/helm.js +2 -0
  147. package/dist/factories/dagster/resources/helm.js.map +1 -1
  148. package/dist/factories/dagster/types.d.ts +2 -2
  149. package/dist/factories/dagster/types.d.ts.map +1 -1
  150. package/dist/factories/dagster/types.js.map +1 -1
  151. package/dist/factories/envoy-ai-gateway/resources/helm.d.ts.map +1 -1
  152. package/dist/factories/envoy-ai-gateway/resources/helm.js +17 -14
  153. package/dist/factories/envoy-ai-gateway/resources/helm.js.map +1 -1
  154. package/dist/factories/envoy-ai-gateway/types.d.ts +2 -2
  155. package/dist/factories/envoy-ai-gateway/types.d.ts.map +1 -1
  156. package/dist/factories/external-dns/resources/helm.d.ts.map +1 -1
  157. package/dist/factories/external-dns/resources/helm.js +2 -0
  158. package/dist/factories/external-dns/resources/helm.js.map +1 -1
  159. package/dist/factories/external-dns/types.d.ts +2 -1
  160. package/dist/factories/external-dns/types.d.ts.map +1 -1
  161. package/dist/factories/external-dns/types.js.map +1 -1
  162. package/dist/factories/harbor/resources/helm.d.ts.map +1 -1
  163. package/dist/factories/harbor/resources/helm.js +11 -7
  164. package/dist/factories/harbor/resources/helm.js.map +1 -1
  165. package/dist/factories/harbor/types.d.ts +2 -1
  166. package/dist/factories/harbor/types.d.ts.map +1 -1
  167. package/dist/factories/harbor/types.js.map +1 -1
  168. package/dist/factories/hatchet/resources/helm.d.ts.map +1 -1
  169. package/dist/factories/hatchet/resources/helm.js +13 -10
  170. package/dist/factories/hatchet/resources/helm.js.map +1 -1
  171. package/dist/factories/hatchet/types.d.ts +2 -1
  172. package/dist/factories/hatchet/types.d.ts.map +1 -1
  173. package/dist/factories/hatchet/types.js.map +1 -1
  174. package/dist/factories/helm/helm-release.d.ts.map +1 -1
  175. package/dist/factories/helm/helm-release.js +3 -31
  176. package/dist/factories/helm/helm-release.js.map +1 -1
  177. package/dist/factories/helm/index.d.ts +3 -1
  178. package/dist/factories/helm/index.d.ts.map +1 -1
  179. package/dist/factories/helm/index.js +1 -0
  180. package/dist/factories/helm/index.js.map +1 -1
  181. package/dist/factories/helm/lifecycle.d.ts +32 -0
  182. package/dist/factories/helm/lifecycle.d.ts.map +1 -0
  183. package/dist/factories/helm/lifecycle.js +165 -0
  184. package/dist/factories/helm/lifecycle.js.map +1 -0
  185. package/dist/factories/helm/types.d.ts +22 -0
  186. package/dist/factories/helm/types.d.ts.map +1 -1
  187. package/dist/factories/inngest/resources/helm.d.ts.map +1 -1
  188. package/dist/factories/inngest/resources/helm.js +2 -0
  189. package/dist/factories/inngest/resources/helm.js.map +1 -1
  190. package/dist/factories/inngest/types.d.ts +2 -1
  191. package/dist/factories/inngest/types.d.ts.map +1 -1
  192. package/dist/factories/inngest/types.js.map +1 -1
  193. package/dist/factories/karpenter/compositions/index.d.ts +3 -0
  194. package/dist/factories/karpenter/compositions/index.d.ts.map +1 -0
  195. package/dist/factories/karpenter/compositions/index.js +3 -0
  196. package/dist/factories/karpenter/compositions/index.js.map +1 -0
  197. package/dist/factories/karpenter/compositions/karpenter-bootstrap.d.ts +34 -0
  198. package/dist/factories/karpenter/compositions/karpenter-bootstrap.d.ts.map +1 -0
  199. package/dist/factories/karpenter/compositions/karpenter-bootstrap.js +150 -0
  200. package/dist/factories/karpenter/compositions/karpenter-bootstrap.js.map +1 -0
  201. package/dist/factories/karpenter/compositions/karpenter-helm-repository.d.ts +10 -0
  202. package/dist/factories/karpenter/compositions/karpenter-helm-repository.d.ts.map +1 -0
  203. package/dist/factories/karpenter/compositions/karpenter-helm-repository.js +25 -0
  204. package/dist/factories/karpenter/compositions/karpenter-helm-repository.js.map +1 -0
  205. package/dist/factories/karpenter/constants.d.ts +67 -0
  206. package/dist/factories/karpenter/constants.d.ts.map +1 -0
  207. package/dist/factories/karpenter/constants.js +65 -0
  208. package/dist/factories/karpenter/constants.js.map +1 -0
  209. package/dist/factories/karpenter/index.d.ts +14 -0
  210. package/dist/factories/karpenter/index.d.ts.map +1 -0
  211. package/dist/factories/karpenter/index.js +14 -0
  212. package/dist/factories/karpenter/index.js.map +1 -0
  213. package/dist/factories/karpenter/resources/ec2-node-class.d.ts +26 -0
  214. package/dist/factories/karpenter/resources/ec2-node-class.d.ts.map +1 -0
  215. package/dist/factories/karpenter/resources/ec2-node-class.js +48 -0
  216. package/dist/factories/karpenter/resources/ec2-node-class.js.map +1 -0
  217. package/dist/factories/karpenter/resources/helm.d.ts +48 -0
  218. package/dist/factories/karpenter/resources/helm.d.ts.map +1 -0
  219. package/dist/factories/karpenter/resources/helm.js +117 -0
  220. package/dist/factories/karpenter/resources/helm.js.map +1 -0
  221. package/dist/factories/karpenter/resources/index.d.ts +5 -0
  222. package/dist/factories/karpenter/resources/index.d.ts.map +1 -0
  223. package/dist/factories/karpenter/resources/index.js +5 -0
  224. package/dist/factories/karpenter/resources/index.js.map +1 -0
  225. package/dist/factories/karpenter/resources/node-pool.d.ts +32 -0
  226. package/dist/factories/karpenter/resources/node-pool.d.ts.map +1 -0
  227. package/dist/factories/karpenter/resources/node-pool.js +80 -0
  228. package/dist/factories/karpenter/resources/node-pool.js.map +1 -0
  229. package/dist/factories/karpenter/resources/readiness.d.ts +21 -0
  230. package/dist/factories/karpenter/resources/readiness.d.ts.map +1 -0
  231. package/dist/factories/karpenter/resources/readiness.js +60 -0
  232. package/dist/factories/karpenter/resources/readiness.js.map +1 -0
  233. package/dist/factories/karpenter/types.d.ts +433 -0
  234. package/dist/factories/karpenter/types.d.ts.map +1 -0
  235. package/dist/factories/karpenter/types.js +59 -0
  236. package/dist/factories/karpenter/types.js.map +1 -0
  237. package/dist/factories/karpenter/utils/helm-values-mapper.d.ts +24 -0
  238. package/dist/factories/karpenter/utils/helm-values-mapper.d.ts.map +1 -0
  239. package/dist/factories/karpenter/utils/helm-values-mapper.js +89 -0
  240. package/dist/factories/karpenter/utils/helm-values-mapper.js.map +1 -0
  241. package/dist/factories/karpenter/utils/index.d.ts +3 -0
  242. package/dist/factories/karpenter/utils/index.d.ts.map +1 -0
  243. package/dist/factories/karpenter/utils/index.js +3 -0
  244. package/dist/factories/karpenter/utils/index.js.map +1 -0
  245. package/dist/factories/karpenter/utils/validation.d.ts +42 -0
  246. package/dist/factories/karpenter/utils/validation.d.ts.map +1 -0
  247. package/dist/factories/karpenter/utils/validation.js +441 -0
  248. package/dist/factories/karpenter/utils/validation.js.map +1 -0
  249. package/dist/factories/keda/compositions/index.d.ts +3 -0
  250. package/dist/factories/keda/compositions/index.d.ts.map +1 -0
  251. package/dist/factories/keda/compositions/index.js +3 -0
  252. package/dist/factories/keda/compositions/index.js.map +1 -0
  253. package/dist/factories/keda/compositions/keda-bootstrap.d.ts +30 -0
  254. package/dist/factories/keda/compositions/keda-bootstrap.d.ts.map +1 -0
  255. package/dist/factories/keda/compositions/keda-bootstrap.js +102 -0
  256. package/dist/factories/keda/compositions/keda-bootstrap.js.map +1 -0
  257. package/dist/factories/keda/compositions/keda-helm-repository.d.ts +10 -0
  258. package/dist/factories/keda/compositions/keda-helm-repository.d.ts.map +1 -0
  259. package/dist/factories/keda/compositions/keda-helm-repository.js +25 -0
  260. package/dist/factories/keda/compositions/keda-helm-repository.js.map +1 -0
  261. package/dist/factories/keda/constants.d.ts +27 -0
  262. package/dist/factories/keda/constants.d.ts.map +1 -0
  263. package/dist/factories/keda/constants.js +27 -0
  264. package/dist/factories/keda/constants.js.map +1 -0
  265. package/dist/factories/keda/index.d.ts +14 -0
  266. package/dist/factories/keda/index.d.ts.map +1 -0
  267. package/dist/factories/keda/index.js +14 -0
  268. package/dist/factories/keda/index.js.map +1 -0
  269. package/dist/factories/keda/resources/helm.d.ts +26 -0
  270. package/dist/factories/keda/resources/helm.d.ts.map +1 -0
  271. package/dist/factories/keda/resources/helm.js +84 -0
  272. package/dist/factories/keda/resources/helm.js.map +1 -0
  273. package/dist/factories/keda/resources/index.d.ts +7 -0
  274. package/dist/factories/keda/resources/index.d.ts.map +1 -0
  275. package/dist/factories/keda/resources/index.js +7 -0
  276. package/dist/factories/keda/resources/index.js.map +1 -0
  277. package/dist/factories/keda/resources/readiness.d.ts +28 -0
  278. package/dist/factories/keda/resources/readiness.d.ts.map +1 -0
  279. package/dist/factories/keda/resources/readiness.js +70 -0
  280. package/dist/factories/keda/resources/readiness.js.map +1 -0
  281. package/dist/factories/keda/resources/scaled-job.d.ts +23 -0
  282. package/dist/factories/keda/resources/scaled-job.d.ts.map +1 -0
  283. package/dist/factories/keda/resources/scaled-job.js +43 -0
  284. package/dist/factories/keda/resources/scaled-job.js.map +1 -0
  285. package/dist/factories/keda/resources/scaled-object.d.ts +33 -0
  286. package/dist/factories/keda/resources/scaled-object.d.ts.map +1 -0
  287. package/dist/factories/keda/resources/scaled-object.js +78 -0
  288. package/dist/factories/keda/resources/scaled-object.js.map +1 -0
  289. package/dist/factories/keda/resources/trigger-authentication.d.ts +28 -0
  290. package/dist/factories/keda/resources/trigger-authentication.d.ts.map +1 -0
  291. package/dist/factories/keda/resources/trigger-authentication.js +52 -0
  292. package/dist/factories/keda/resources/trigger-authentication.js.map +1 -0
  293. package/dist/factories/keda/resources/triggers.d.ts +17 -0
  294. package/dist/factories/keda/resources/triggers.d.ts.map +1 -0
  295. package/dist/factories/keda/resources/triggers.js +21 -0
  296. package/dist/factories/keda/resources/triggers.js.map +1 -0
  297. package/dist/factories/keda/types.d.ts +580 -0
  298. package/dist/factories/keda/types.d.ts.map +1 -0
  299. package/dist/factories/keda/types.js +75 -0
  300. package/dist/factories/keda/types.js.map +1 -0
  301. package/dist/factories/keda/utils/helm-values-mapper.d.ts +21 -0
  302. package/dist/factories/keda/utils/helm-values-mapper.d.ts.map +1 -0
  303. package/dist/factories/keda/utils/helm-values-mapper.js +130 -0
  304. package/dist/factories/keda/utils/helm-values-mapper.js.map +1 -0
  305. package/dist/factories/keda/utils/index.d.ts +3 -0
  306. package/dist/factories/keda/utils/index.d.ts.map +1 -0
  307. package/dist/factories/keda/utils/index.js +3 -0
  308. package/dist/factories/keda/utils/index.js.map +1 -0
  309. package/dist/factories/keda/utils/validation.d.ts +52 -0
  310. package/dist/factories/keda/utils/validation.d.ts.map +1 -0
  311. package/dist/factories/keda/utils/validation.js +482 -0
  312. package/dist/factories/keda/utils/validation.js.map +1 -0
  313. package/dist/factories/kubernetes/policy/limit-range.d.ts.map +1 -1
  314. package/dist/factories/kubernetes/policy/limit-range.js +27 -1
  315. package/dist/factories/kubernetes/policy/limit-range.js.map +1 -1
  316. package/dist/factories/nats/resources/helm.d.ts +2 -2
  317. package/dist/factories/nats/resources/helm.d.ts.map +1 -1
  318. package/dist/factories/nats/resources/helm.js +2 -1
  319. package/dist/factories/nats/resources/helm.js.map +1 -1
  320. package/dist/factories/opensearch/resources/helm.d.ts.map +1 -1
  321. package/dist/factories/opensearch/resources/helm.js +2 -1
  322. package/dist/factories/opensearch/resources/helm.js.map +1 -1
  323. package/dist/factories/opensearch/types.d.ts +2 -1
  324. package/dist/factories/opensearch/types.d.ts.map +1 -1
  325. package/dist/factories/opensearch/types.js.map +1 -1
  326. package/dist/factories/ory/resources/helm.d.ts.map +1 -1
  327. package/dist/factories/ory/resources/helm.js +2 -0
  328. package/dist/factories/ory/resources/helm.js.map +1 -1
  329. package/dist/factories/ory/types.d.ts +2 -2
  330. package/dist/factories/ory/types.d.ts.map +1 -1
  331. package/dist/factories/ory/types.js.map +1 -1
  332. package/dist/factories/pebble/resources/helm.d.ts.map +1 -1
  333. package/dist/factories/pebble/resources/helm.js +2 -0
  334. package/dist/factories/pebble/resources/helm.js.map +1 -1
  335. package/dist/factories/pebble/types.d.ts +2 -1
  336. package/dist/factories/pebble/types.d.ts.map +1 -1
  337. package/dist/factories/pebble/types.js.map +1 -1
  338. package/dist/factories/rook/resources/helm.d.ts.map +1 -1
  339. package/dist/factories/rook/resources/helm.js +3 -2
  340. package/dist/factories/rook/resources/helm.js.map +1 -1
  341. package/dist/factories/rook/types.d.ts +2 -1
  342. package/dist/factories/rook/types.d.ts.map +1 -1
  343. package/dist/factories/rook/types.js.map +1 -1
  344. package/dist/factories/traefik/compositions/traefik-bootstrap.d.ts +43 -36
  345. package/dist/factories/traefik/compositions/traefik-bootstrap.d.ts.map +1 -1
  346. package/dist/factories/traefik/compositions/traefik-bootstrap.js +70 -38
  347. package/dist/factories/traefik/compositions/traefik-bootstrap.js.map +1 -1
  348. package/dist/factories/traefik/constants.d.ts +6 -0
  349. package/dist/factories/traefik/constants.d.ts.map +1 -1
  350. package/dist/factories/traefik/constants.js +6 -0
  351. package/dist/factories/traefik/constants.js.map +1 -1
  352. package/dist/factories/traefik/resources/common.d.ts +1 -1
  353. package/dist/factories/traefik/resources/common.js +1 -1
  354. package/dist/factories/traefik/resources/helm.d.ts.map +1 -1
  355. package/dist/factories/traefik/resources/helm.js +14 -9
  356. package/dist/factories/traefik/resources/helm.js.map +1 -1
  357. package/dist/factories/traefik/resources/middleware.d.ts +35 -1
  358. package/dist/factories/traefik/resources/middleware.d.ts.map +1 -1
  359. package/dist/factories/traefik/resources/middleware.js +71 -0
  360. package/dist/factories/traefik/resources/middleware.js.map +1 -1
  361. package/dist/factories/traefik/resources/tls.d.ts +22 -1
  362. package/dist/factories/traefik/resources/tls.d.ts.map +1 -1
  363. package/dist/factories/traefik/resources/tls.js +40 -0
  364. package/dist/factories/traefik/resources/tls.js.map +1 -1
  365. package/dist/factories/traefik/types.d.ts +176 -9
  366. package/dist/factories/traefik/types.d.ts.map +1 -1
  367. package/dist/factories/traefik/types.js +111 -2
  368. package/dist/factories/traefik/types.js.map +1 -1
  369. package/dist/factories/traefik/utils/access-log.d.ts +18 -0
  370. package/dist/factories/traefik/utils/access-log.d.ts.map +1 -0
  371. package/dist/factories/traefik/utils/access-log.js +98 -0
  372. package/dist/factories/traefik/utils/access-log.js.map +1 -0
  373. package/dist/factories/traefik/utils/aws-nlb.d.ts +55 -0
  374. package/dist/factories/traefik/utils/aws-nlb.d.ts.map +1 -0
  375. package/dist/factories/traefik/utils/aws-nlb.js +121 -0
  376. package/dist/factories/traefik/utils/aws-nlb.js.map +1 -0
  377. package/dist/factories/traefik/utils/helm-values-mapper.d.ts +30 -40
  378. package/dist/factories/traefik/utils/helm-values-mapper.d.ts.map +1 -1
  379. package/dist/factories/traefik/utils/helm-values-mapper.js +308 -41
  380. package/dist/factories/traefik/utils/helm-values-mapper.js.map +1 -1
  381. package/dist/factories/traefik/utils/index.d.ts +5 -0
  382. package/dist/factories/traefik/utils/index.d.ts.map +1 -1
  383. package/dist/factories/traefik/utils/index.js +5 -0
  384. package/dist/factories/traefik/utils/index.js.map +1 -1
  385. package/dist/factories/traefik/utils/middleware-validation.d.ts +0 -17
  386. package/dist/factories/traefik/utils/middleware-validation.d.ts.map +1 -1
  387. package/dist/factories/traefik/utils/middleware-validation.js +15 -17
  388. package/dist/factories/traefik/utils/middleware-validation.js.map +1 -1
  389. package/dist/factories/traefik/utils/plugins.d.ts +38 -0
  390. package/dist/factories/traefik/utils/plugins.d.ts.map +1 -0
  391. package/dist/factories/traefik/utils/plugins.js +175 -0
  392. package/dist/factories/traefik/utils/plugins.js.map +1 -0
  393. package/dist/factories/traefik/utils/proxy-trust.d.ts +48 -0
  394. package/dist/factories/traefik/utils/proxy-trust.d.ts.map +1 -0
  395. package/dist/factories/traefik/utils/proxy-trust.js +514 -0
  396. package/dist/factories/traefik/utils/proxy-trust.js.map +1 -0
  397. package/dist/factories/traefik/utils/trusted-range.d.ts +29 -0
  398. package/dist/factories/traefik/utils/trusted-range.d.ts.map +1 -0
  399. package/dist/factories/traefik/utils/trusted-range.js +80 -0
  400. package/dist/factories/traefik/utils/trusted-range.js.map +1 -0
  401. package/dist/factories/valkey/resources/helm.d.ts.map +1 -1
  402. package/dist/factories/valkey/resources/helm.js +2 -1
  403. package/dist/factories/valkey/resources/helm.js.map +1 -1
  404. package/dist/factories/valkey/types.d.ts +2 -1
  405. package/dist/factories/valkey/types.d.ts.map +1 -1
  406. package/dist/factories/valkey/types.js.map +1 -1
  407. package/dist/factories/vpa/compositions/index.d.ts +3 -0
  408. package/dist/factories/vpa/compositions/index.d.ts.map +1 -0
  409. package/dist/factories/vpa/compositions/index.js +3 -0
  410. package/dist/factories/vpa/compositions/index.js.map +1 -0
  411. package/dist/factories/vpa/compositions/vpa-bootstrap.d.ts +30 -0
  412. package/dist/factories/vpa/compositions/vpa-bootstrap.d.ts.map +1 -0
  413. package/dist/factories/vpa/compositions/vpa-bootstrap.js +104 -0
  414. package/dist/factories/vpa/compositions/vpa-bootstrap.js.map +1 -0
  415. package/dist/factories/vpa/compositions/vpa-helm-repository.d.ts +10 -0
  416. package/dist/factories/vpa/compositions/vpa-helm-repository.d.ts.map +1 -0
  417. package/dist/factories/vpa/compositions/vpa-helm-repository.js +25 -0
  418. package/dist/factories/vpa/compositions/vpa-helm-repository.js.map +1 -0
  419. package/dist/factories/vpa/constants.d.ts +77 -0
  420. package/dist/factories/vpa/constants.d.ts.map +1 -0
  421. package/dist/factories/vpa/constants.js +67 -0
  422. package/dist/factories/vpa/constants.js.map +1 -0
  423. package/dist/factories/vpa/index.d.ts +14 -0
  424. package/dist/factories/vpa/index.d.ts.map +1 -0
  425. package/dist/factories/vpa/index.js +14 -0
  426. package/dist/factories/vpa/index.js.map +1 -0
  427. package/dist/factories/vpa/resources/helm.d.ts +28 -0
  428. package/dist/factories/vpa/resources/helm.d.ts.map +1 -0
  429. package/dist/factories/vpa/resources/helm.js +88 -0
  430. package/dist/factories/vpa/resources/helm.js.map +1 -0
  431. package/dist/factories/vpa/resources/index.d.ts +4 -0
  432. package/dist/factories/vpa/resources/index.d.ts.map +1 -0
  433. package/dist/factories/vpa/resources/index.js +4 -0
  434. package/dist/factories/vpa/resources/index.js.map +1 -0
  435. package/dist/factories/vpa/resources/readiness.d.ts +24 -0
  436. package/dist/factories/vpa/resources/readiness.d.ts.map +1 -0
  437. package/dist/factories/vpa/resources/readiness.js +66 -0
  438. package/dist/factories/vpa/resources/readiness.js.map +1 -0
  439. package/dist/factories/vpa/resources/vertical-pod-autoscaler.d.ts +42 -0
  440. package/dist/factories/vpa/resources/vertical-pod-autoscaler.d.ts.map +1 -0
  441. package/dist/factories/vpa/resources/vertical-pod-autoscaler.js +93 -0
  442. package/dist/factories/vpa/resources/vertical-pod-autoscaler.js.map +1 -0
  443. package/dist/factories/vpa/types.d.ts +312 -0
  444. package/dist/factories/vpa/types.d.ts.map +1 -0
  445. package/dist/factories/vpa/types.js +96 -0
  446. package/dist/factories/vpa/types.js.map +1 -0
  447. package/dist/factories/vpa/utils/helm-values-mapper.d.ts +18 -0
  448. package/dist/factories/vpa/utils/helm-values-mapper.d.ts.map +1 -0
  449. package/dist/factories/vpa/utils/helm-values-mapper.js +121 -0
  450. package/dist/factories/vpa/utils/helm-values-mapper.js.map +1 -0
  451. package/dist/factories/vpa/utils/index.d.ts +3 -0
  452. package/dist/factories/vpa/utils/index.d.ts.map +1 -0
  453. package/dist/factories/vpa/utils/index.js +3 -0
  454. package/dist/factories/vpa/utils/index.js.map +1 -0
  455. package/dist/factories/vpa/utils/validation.d.ts +42 -0
  456. package/dist/factories/vpa/utils/validation.d.ts.map +1 -0
  457. package/dist/factories/vpa/utils/validation.js +225 -0
  458. package/dist/factories/vpa/utils/validation.js.map +1 -0
  459. package/package.json +21 -1
@@ -0,0 +1,473 @@
1
+ /**
2
+ * CrowdSec Helm values mapping for the official `crowdsec` chart 0.24.2.
3
+ *
4
+ * The detection policy (acquisitions, collections, allowlist, simulation,
5
+ * AppSec) is rendered into CrowdSec config FILES, so it comes from the
6
+ * build-time options and is always concrete. The runtime spec only supplies
7
+ * values that land in the tree as-is (names, resources, replicas), which may be
8
+ * schema references in KRO mode and are never branched on here.
9
+ */
10
+ import { dump } from 'js-yaml';
11
+ import { TypeKroError } from '../../../core/errors.js';
12
+ import { Cel } from '../../../core/references/cel.js';
13
+ import { isCelExpression, isKubernetesRef } from '../../../utils/type-guards.js';
14
+ import { CROWDSEC_APPSEC_PORT, CROWDSEC_KUBECTL_IMAGE_TAG, DEFAULT_CROWDSEC_COLLECTIONS, } from '../constants.js';
15
+ import { isCidr, isIp } from './net.js';
16
+ // Defaults sized from a kind run with the Traefik collections and CRS loaded.
17
+ // Requests are always set so no CrowdSec pod is BestEffort. No CPU limits:
18
+ // AppSec sits on the request path, and throttling LAPI delays every pull.
19
+ const DEFAULT_LAPI_RESOURCES = {
20
+ requests: { cpu: '100m', memory: '256Mi' },
21
+ limits: { memory: '512Mi' },
22
+ };
23
+ const DEFAULT_AGENT_RESOURCES = {
24
+ requests: { cpu: '100m', memory: '192Mi' },
25
+ limits: { memory: '384Mi' },
26
+ };
27
+ const DEFAULT_APPSEC_RESOURCES = {
28
+ requests: { cpu: '200m', memory: '384Mi' },
29
+ limits: { memory: '768Mi' },
30
+ };
31
+ // The chart's own default for `api.server.auto_registration.allowed_ranges`.
32
+ const DEFAULT_AUTO_REGISTRATION_RANGES = [
33
+ '127.0.0.1/32',
34
+ '192.168.0.0/16',
35
+ '10.0.0.0/8',
36
+ '172.16.0.0/12',
37
+ ];
38
+ /** Default acquisition: the pods `traefikBootstrap` creates with its defaults. */
39
+ export const DEFAULT_CROWDSEC_ACQUISITIONS = [
40
+ { namespace: 'traefik', podName: 'traefik-*' },
41
+ ];
42
+ /** File names this factory writes into the chart's config maps. */
43
+ export const CROWDSEC_GENERATED_FILES = {
44
+ allowlist: 'typekro-allowlist.yaml',
45
+ appsecPolicy: 'typekro-appsec-policy.yaml',
46
+ };
47
+ /** Name of the AppSec config holding the body limit and the exclusions. */
48
+ export const CROWDSEC_APPSEC_POLICY_NAME = 'typekro/appsec-policy';
49
+ const BOUNCER_NAME = /^[A-Za-z0-9_]+$/;
50
+ const DNS_LABEL = /^(?=.{1,63}$)[a-z0-9](?:[-a-z0-9]*[a-z0-9])?$/;
51
+ function fail(message, context) {
52
+ throw new TypeKroError(message, 'CROWDSEC_INVALID_OPTIONS', context);
53
+ }
54
+ // Every option string lands in the values tree, where KRO would read `${` as CEL.
55
+ function assertNoCel(options) {
56
+ const strings = [
57
+ options.allowlist?.reason,
58
+ options.centralApi?.enrollment?.instanceName,
59
+ ...(options.centralApi?.enrollment?.tags ?? []),
60
+ ...(options.collections ?? []),
61
+ ...(options.simulation?.global ? (options.simulation.enforce ?? []) : []),
62
+ ...(options.simulation && !options.simulation.global
63
+ ? (options.simulation.simulate ?? [])
64
+ : []),
65
+ ...(options.lapi?.autoRegistrationRanges ?? []),
66
+ ...(options.appsec?.exclusions ?? []).flatMap((e) => [e.ruleName, e.ruleTag, e.pathPrefix]),
67
+ ...(options.storage?.type === 'postgres'
68
+ ? [options.storage.host, options.storage.database, options.storage.user]
69
+ : []),
70
+ ...[...(options.lapi?.env ?? []), ...(options.agent?.env ?? [])].flatMap((env) => [
71
+ env.name,
72
+ env.value,
73
+ JSON.stringify(env.valueFrom ?? null),
74
+ ]),
75
+ options.networkPolicy?.traefikNamespace,
76
+ options.networkPolicy?.metricsNamespace,
77
+ ];
78
+ for (const value of strings) {
79
+ if (value?.includes('${'))
80
+ fail(`"${value}" contains "\${", which KRO would parse as CEL.`);
81
+ }
82
+ }
83
+ /**
84
+ * Throw on option combinations the chart would accept but CrowdSec would run
85
+ * wrongly, or not at all.
86
+ *
87
+ * @throws {TypeKroError} `CROWDSEC_INVALID_OPTIONS`
88
+ */
89
+ export function assertCrowdsecBootstrapOptions(options) {
90
+ assertNoCel(options);
91
+ const storage = options.storage ?? { type: 'sqlite' };
92
+ const replicas = options.lapi?.replicas ?? 1;
93
+ if (!Number.isInteger(replicas) || replicas < 1) {
94
+ fail(`lapi.replicas must be a positive integer, got ${replicas}.`);
95
+ }
96
+ if (replicas > 1 && storage.type === 'sqlite') {
97
+ fail('lapi.replicas > 1 needs storage.type "postgres": SQLite lives on one ReadWriteOnce volume.');
98
+ }
99
+ const acquisitions = options.acquisitions ?? DEFAULT_CROWDSEC_ACQUISITIONS;
100
+ if (acquisitions.length === 0)
101
+ fail('At least one acquisition is required.');
102
+ for (const acquisition of acquisitions) {
103
+ // The chart interpolates both into a file glob.
104
+ if (!/^[a-z0-9*?.-]+$/.test(acquisition.podName) ||
105
+ !/^[a-z0-9-]+$/.test(acquisition.namespace)) {
106
+ fail(`Acquisition ${acquisition.namespace}/${acquisition.podName} is not a namespace and pod-name glob.`);
107
+ }
108
+ }
109
+ for (const namespace of [
110
+ options.networkPolicy?.traefikNamespace,
111
+ options.networkPolicy?.metricsNamespace,
112
+ ]) {
113
+ if (namespace !== undefined && !DNS_LABEL.test(namespace)) {
114
+ fail(`networkPolicy namespace "${namespace}" is not a DNS-1123 label.`);
115
+ }
116
+ }
117
+ const names = new Set();
118
+ for (const bouncer of options.bouncers ?? []) {
119
+ if (!BOUNCER_NAME.test(bouncer.name)) {
120
+ fail(`Bouncer name "${bouncer.name}" must match ${BOUNCER_NAME}; it becomes an env var.`);
121
+ }
122
+ if (names.has(bouncer.name))
123
+ fail(`Bouncer "${bouncer.name}" is declared twice.`);
124
+ names.add(bouncer.name);
125
+ }
126
+ for (const ip of options.allowlist?.ips ?? []) {
127
+ if (!isIp(ip))
128
+ fail(`Allowlist IP "${ip}" is not an IPv4 or IPv6 address.`);
129
+ }
130
+ for (const cidr of options.allowlist?.cidrs ?? []) {
131
+ if (!isCidr(cidr))
132
+ fail(`Allowlist CIDR "${cidr}" is not a valid range.`);
133
+ }
134
+ // The bouncer talks plain http to LAPI; with chart TLS on it could not
135
+ // connect, and a fail-open bouncer would then let everything through.
136
+ const rawTls = options.values?.tls;
137
+ if (rawTls?.enabled === true) {
138
+ fail('values.tls.enabled is not supported: the Traefik bouncer reaches LAPI over http.');
139
+ }
140
+ const enrollment = options.centralApi?.enrollment;
141
+ if (enrollment?.tags?.some((tag) => /\s/.test(tag) || tag.length === 0)) {
142
+ fail('Enrollment tags must be non-empty and contain no whitespace.');
143
+ }
144
+ const appsec = options.appsec;
145
+ if (appsec) {
146
+ if (appsec.virtualPatching === false && appsec.crs === false) {
147
+ fail('appsec needs virtualPatching or crs; omit appsec to disable it.');
148
+ }
149
+ const size = appsec.maxBodySize;
150
+ if (size !== undefined && (!Number.isInteger(size) || size <= 0)) {
151
+ fail(`appsec.maxBodySize must be a positive integer, got ${size}.`);
152
+ }
153
+ for (const exclusion of appsec.exclusions ?? []) {
154
+ const selectors = [exclusion.ruleId, exclusion.ruleName, exclusion.ruleTag].filter((value) => value !== undefined);
155
+ if (selectors.length !== 1) {
156
+ fail('Each appsec exclusion sets exactly one of ruleId, ruleName or ruleTag.');
157
+ }
158
+ for (const text of [exclusion.ruleName, exclusion.ruleTag, exclusion.pathPrefix]) {
159
+ if (text !== undefined && /['"\\\n]/.test(text)) {
160
+ fail(`Appsec exclusion value "${text}" may not contain quotes, backslashes or newlines.`);
161
+ }
162
+ }
163
+ if (exclusion.pathPrefix !== undefined && !exclusion.pathPrefix.startsWith('/')) {
164
+ fail(`Appsec exclusion pathPrefix "${exclusion.pathPrefix}" must start with "/".`);
165
+ }
166
+ }
167
+ }
168
+ }
169
+ function isGraphValue(value) {
170
+ return isKubernetesRef(value) || isCelExpression(value);
171
+ }
172
+ function isPlainObject(value) {
173
+ return (value !== null && typeof value === 'object' && !Array.isArray(value) && !isGraphValue(value));
174
+ }
175
+ // Deep merge where refs, CEL and arrays are leaves and `override` wins.
176
+ function merge(base, override) {
177
+ const result = { ...base };
178
+ for (const [key, value] of Object.entries(override)) {
179
+ const current = result[key];
180
+ result[key] = isPlainObject(current) && isPlainObject(value) ? merge(current, value) : value;
181
+ }
182
+ return result;
183
+ }
184
+ function yaml(value, quoted = false) {
185
+ return dump(value, { lineWidth: -1, noRefs: true, forceQuotes: quoted, quotingType: '"' });
186
+ }
187
+ function placementValues(placement, defaultSpread) {
188
+ const spread = placement?.topologySpreadConstraints ?? defaultSpread;
189
+ return {
190
+ ...(placement?.nodeSelector ? { nodeSelector: { ...placement.nodeSelector } } : {}),
191
+ ...(placement?.tolerations ? { tolerations: [...placement.tolerations] } : {}),
192
+ ...(placement?.affinity ? { affinity: placement.affinity } : {}),
193
+ ...(spread ? { topologySpreadConstraints: [...spread] } : {}),
194
+ ...(placement?.priorityClassName ? { priorityClassName: placement.priorityClassName } : {}),
195
+ };
196
+ }
197
+ function softSpread(name, component) {
198
+ return [
199
+ {
200
+ maxSkew: 1,
201
+ topologyKey: 'kubernetes.io/hostname',
202
+ whenUnsatisfiable: 'ScheduleAnyway',
203
+ labelSelector: { matchLabels: { 'k8s-app': name, type: component } },
204
+ },
205
+ ];
206
+ }
207
+ function secretEnv(name, ref) {
208
+ return { name, valueFrom: { secretKeyRef: { name: ref.name, key: ref.key } } };
209
+ }
210
+ /** The parser (and postoverflow) whitelist this factory renders, or `undefined`. */
211
+ export function renderCrowdsecAllowlist(allowlist) {
212
+ const ips = allowlist?.ips ?? [];
213
+ const cidrs = allowlist?.cidrs ?? [];
214
+ if (ips.length === 0 && cidrs.length === 0)
215
+ return undefined;
216
+ return yaml({
217
+ name: 'typekro/allowlist',
218
+ description: 'IPs and ranges allowlisted by the TypeKro CrowdSec bootstrap',
219
+ whitelist: {
220
+ reason: allowlist?.reason ?? 'typekro allowlist',
221
+ ...(ips.length > 0 ? { ip: [...ips] } : {}),
222
+ ...(cidrs.length > 0 ? { cidr: [...cidrs] } : {}),
223
+ },
224
+ });
225
+ }
226
+ /** `simulation.yaml`, or `''` when simulation is not configured. */
227
+ export function renderCrowdsecSimulation(simulation) {
228
+ if (!simulation)
229
+ return '';
230
+ // CrowdSec's `exclusions` invert the global flag: under global simulation
231
+ // they enforce, otherwise they are the only scenarios simulated.
232
+ const exclusions = simulation.global ? simulation.enforce : simulation.simulate;
233
+ return yaml({ simulation: simulation.global, exclusions: [...(exclusions ?? [])] });
234
+ }
235
+ function exclusionCall(exclusion, band) {
236
+ if (exclusion.ruleId !== undefined)
237
+ return `Remove${band}RuleByID(${exclusion.ruleId})`;
238
+ if (exclusion.ruleName !== undefined)
239
+ return `Remove${band}RuleByName('${exclusion.ruleName}')`;
240
+ return `Remove${band}RuleByTag('${exclusion.ruleTag}')`;
241
+ }
242
+ /** The AppSec config carrying the body limit and the rule exclusions. */
243
+ export function renderCrowdsecAppsecPolicy(options) {
244
+ const appsec = options.appsec ?? {};
245
+ const remediation = appsec.inBandRemediation ?? (options.simulation?.global ? 'allow' : 'ban');
246
+ const onLoad = [
247
+ `SetMaxBodySize(${appsec.maxBodySize ?? 10_485_760})`,
248
+ `SetBodySizeExceededAction('${appsec.bodySizeExceededAction ?? 'partial'}')`,
249
+ ];
250
+ const preEval = [];
251
+ for (const exclusion of appsec.exclusions ?? []) {
252
+ const phase = exclusion.phase ?? 'both';
253
+ const calls = [
254
+ ...(phase === 'outofband' ? [] : [exclusionCall(exclusion, 'InBand')]),
255
+ ...(phase === 'inband' ? [] : [exclusionCall(exclusion, 'OutBand')]),
256
+ ];
257
+ if (exclusion.pathPrefix === undefined)
258
+ onLoad.push(...calls);
259
+ else
260
+ preEval.push({ filter: `req.URL.Path startsWith '${exclusion.pathPrefix}'`, apply: calls });
261
+ }
262
+ return yaml({
263
+ name: CROWDSEC_APPSEC_POLICY_NAME,
264
+ // Loaded last, so it sets the remediation for every config before it.
265
+ default_remediation: remediation,
266
+ on_load: [{ apply: onLoad }],
267
+ ...(preEval.length > 0 ? { pre_eval: preEval } : {}),
268
+ });
269
+ }
270
+ function clusterIpOnly() {
271
+ return { type: 'ClusterIP', externalIPs: [], loadBalancerIP: '', loadBalancerClass: '' };
272
+ }
273
+ function configYamlLocal(options) {
274
+ const storage = options.storage ?? { type: 'sqlite' };
275
+ const server = {
276
+ auto_registration: {
277
+ enabled: true,
278
+ // CrowdSec expands `$VAR` from the env. Not `${VAR}`: KRO would parse it as CEL.
279
+ token: '$REGISTRATION_TOKEN',
280
+ allowed_ranges: [
281
+ ...(options.lapi?.autoRegistrationRanges ?? DEFAULT_AUTO_REGISTRATION_RANGES),
282
+ ],
283
+ },
284
+ };
285
+ if (options.centralApi && options.centralApi.communityBlocklist === false) {
286
+ server.online_client = { pull: { community: false } };
287
+ }
288
+ // The password reaches CrowdSec as the plain scalar `password: $DB_PASSWORD`
289
+ // whatever this file says: CrowdSec 1.8 first decodes config.yaml and this
290
+ // file, merges and re-encodes them (go-cs-lib's YAML patcher), and only then
291
+ // expands `$VAR` and parses the result, so no quoting or block style set here
292
+ // survives. It then puts the password unquoted into a key=value Postgres
293
+ // connection string. CrowdSec offers no password file or DSN alternative, so
294
+ // the password must read back unchanged as a plain YAML scalar and contain no
295
+ // whitespace or backslash; the docs say so (the value lives in a Secret, so it
296
+ // cannot be checked here).
297
+ return yaml({
298
+ api: { server },
299
+ ...(storage.type === 'postgres'
300
+ ? {
301
+ db_config: {
302
+ type: 'postgresql',
303
+ user: storage.user,
304
+ password: '$DB_PASSWORD',
305
+ db_name: storage.database,
306
+ host: storage.host,
307
+ port: storage.port ?? 5432,
308
+ sslmode: storage.sslMode ?? 'require',
309
+ },
310
+ }
311
+ : {}),
312
+ }, true);
313
+ }
314
+ function collections(options) {
315
+ return [...new Set([...DEFAULT_CROWDSEC_COLLECTIONS, ...(options.collections ?? [])])].join(' ');
316
+ }
317
+ /**
318
+ * Map the runtime spec and the build options to chart values.
319
+ *
320
+ * `options.values` is merged first; the mapped values win, and the network
321
+ * pins (no LAPI Ingress, ClusterIP Services only) are applied last.
322
+ */
323
+ export function mapCrowdsecConfigToHelmValues(spec, options = {}) {
324
+ assertCrowdsecBootstrapOptions(options);
325
+ const storage = options.storage ?? { type: 'sqlite' };
326
+ const sqlite = storage.type === 'sqlite';
327
+ const acquisitions = options.acquisitions ?? DEFAULT_CROWDSEC_ACQUISITIONS;
328
+ const capi = options.centralApi !== undefined;
329
+ const appsec = options.appsec;
330
+ const allowlist = renderCrowdsecAllowlist(options.allowlist);
331
+ const simulation = renderCrowdsecSimulation(options.simulation);
332
+ const metrics = {
333
+ enabled: true,
334
+ serviceMonitor: { enabled: options.metrics?.serviceMonitor ?? false },
335
+ podMonitor: { enabled: options.metrics?.podMonitor ?? false },
336
+ };
337
+ const lapiEnv = [];
338
+ if (!capi)
339
+ lapiEnv.push({ name: 'DISABLE_ONLINE_API', value: 'true' });
340
+ const enrollment = options.centralApi?.enrollment;
341
+ if (enrollment) {
342
+ lapiEnv.push(secretEnv('ENROLL_KEY', enrollment.keySecretRef));
343
+ if (enrollment.instanceName) {
344
+ lapiEnv.push({ name: 'ENROLL_INSTANCE_NAME', value: enrollment.instanceName });
345
+ }
346
+ if (enrollment.tags?.length)
347
+ lapiEnv.push({ name: 'ENROLL_TAGS', value: enrollment.tags.join(' ') });
348
+ }
349
+ for (const bouncer of options.bouncers ?? []) {
350
+ lapiEnv.push(secretEnv(`BOUNCER_KEY_${bouncer.name}`, bouncer.keySecretRef));
351
+ }
352
+ if (storage.type === 'postgres')
353
+ lapiEnv.push(secretEnv('DB_PASSWORD', storage.passwordSecretRef));
354
+ lapiEnv.push(...(options.lapi?.env ?? []));
355
+ const mapped = {
356
+ container_runtime: options.agent?.containerRuntime ?? 'containerd',
357
+ // Upstream defaults the register Jobs' kubectl image to `latest`.
358
+ image: { kubectl: { tag: CROWDSEC_KUBECTL_IMAGE_TAG } },
359
+ config: {
360
+ parsers: {
361
+ 's02-enrich': allowlist ? { [CROWDSEC_GENERATED_FILES.allowlist]: allowlist } : {},
362
+ },
363
+ 'simulation.yaml': simulation,
364
+ 'config.yaml.local': configYamlLocal(options),
365
+ },
366
+ lapi: {
367
+ replicas: options.lapi?.replicas ?? 1,
368
+ env: lapiEnv,
369
+ resources: Cel.default(spec.lapi?.resources, DEFAULT_LAPI_RESOURCES),
370
+ // SQLite on one RWO volume cannot overlap two pods during a rollout.
371
+ strategy: { type: sqlite ? 'Recreate' : 'RollingUpdate' },
372
+ persistentVolume: {
373
+ data: {
374
+ enabled: sqlite,
375
+ ...(sqlite && storage.size ? { size: storage.size } : {}),
376
+ ...(sqlite && storage.storageClassName
377
+ ? { storageClassName: storage.storageClassName }
378
+ : {}),
379
+ },
380
+ // Config comes from values, never from a stale copy on a volume.
381
+ config: { enabled: false },
382
+ },
383
+ // Credentials in Secrets let replicas share one identity. The chart only
384
+ // grants its register Jobs RBAC when CAPI is on, so both follow it.
385
+ storeCAPICredentialsInSecret: capi,
386
+ storeLAPICscliCredentialsInSecret: capi,
387
+ metrics,
388
+ ...placementValues(options.lapi?.placement, softSpread(spec.name, 'lapi')),
389
+ },
390
+ agent: {
391
+ isDeployment: false,
392
+ acquisition: acquisitions.map((a) => ({
393
+ namespace: a.namespace,
394
+ podName: a.podName,
395
+ program: a.program ?? 'traefik',
396
+ })),
397
+ env: [{ name: 'COLLECTIONS', value: collections(options) }, ...(options.agent?.env ?? [])],
398
+ resources: Cel.default(spec.agent?.resources, DEFAULT_AGENT_RESOURCES),
399
+ metrics,
400
+ ...placementValues(options.agent?.placement, undefined),
401
+ },
402
+ appsec: appsec
403
+ ? appsecValues(spec, options, allowlist, simulation, metrics)
404
+ : { enabled: false },
405
+ };
406
+ const merged = merge({ ...(options.values ?? {}) }, mapped);
407
+ return merge(merged, {
408
+ // @security LAPI holds every bouncer key and decision: never published.
409
+ // ClusterIP alone is not enough: the chart also renders `externalIPs`,
410
+ // `loadBalancerIP` and `loadBalancerClass` from values, whatever the type.
411
+ lapi: { ingress: { enabled: false }, service: clusterIpOnly() },
412
+ agent: { service: clusterIpOnly() },
413
+ appsec: { service: clusterIpOnly() },
414
+ // @security The bouncer speaks http to LAPI (see assertCrowdsecBootstrapOptions).
415
+ tls: { enabled: false },
416
+ });
417
+ }
418
+ function appsecValues(spec, options, allowlist, simulation, metrics) {
419
+ const appsec = options.appsec ?? {};
420
+ const configs = [
421
+ ...(appsec.virtualPatching === false ? [] : ['crowdsecurity/appsec-default']),
422
+ ...(appsec.crs === false ? [] : ['crowdsecurity/crs']),
423
+ CROWDSEC_APPSEC_POLICY_NAME,
424
+ ];
425
+ const appsecCollections = [
426
+ // `appsec-default` loads rules from both of these collections.
427
+ ...(appsec.virtualPatching === false
428
+ ? []
429
+ : ['crowdsecurity/appsec-virtual-patching', 'crowdsecurity/appsec-generic-rules']),
430
+ ...(appsec.crs === false ? [] : ['crowdsecurity/appsec-crs']),
431
+ ];
432
+ return {
433
+ enabled: true,
434
+ replicas: Cel.default(spec.appsec?.replicas, 1),
435
+ strategy: { type: 'RollingUpdate' },
436
+ acquisitions: [
437
+ {
438
+ source: 'appsec',
439
+ listen_addr: `0.0.0.0:${CROWDSEC_APPSEC_PORT}`,
440
+ path: '/',
441
+ appsec_configs: configs,
442
+ labels: { type: 'appsec' },
443
+ },
444
+ ],
445
+ configs: { [CROWDSEC_GENERATED_FILES.appsecPolicy]: renderCrowdsecAppsecPolicy(options) },
446
+ env: [{ name: 'COLLECTIONS', value: appsecCollections.join(' ') }],
447
+ // The chart mounts parsers only on agents; AppSec alerts are allowlisted
448
+ // after the overflow instead.
449
+ postoverflows: {
450
+ 's01-whitelist': allowlist ? { [CROWDSEC_GENERATED_FILES.allowlist]: allowlist } : {},
451
+ },
452
+ // The chart mounts simulation.yaml only on agents; AppSec scenarios
453
+ // (out-of-band CRS bans) must honour it too.
454
+ ...(simulation
455
+ ? {
456
+ extraVolumes: [
457
+ { name: 'typekro-simulation', configMap: { name: 'crowdsec-simulation' } },
458
+ ],
459
+ extraVolumeMounts: [
460
+ {
461
+ name: 'typekro-simulation',
462
+ mountPath: '/etc/crowdsec/simulation.yaml',
463
+ subPath: 'simulation.yaml',
464
+ },
465
+ ],
466
+ }
467
+ : {}),
468
+ resources: Cel.default(spec.appsec?.resources, DEFAULT_APPSEC_RESOURCES),
469
+ metrics,
470
+ ...placementValues(appsec.placement, softSpread(spec.name, 'appsec')),
471
+ };
472
+ }
473
+ //# sourceMappingURL=helm-values-mapper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helm-values-mapper.js","sourceRoot":"","sources":["../../../../src/factories/crowdsec/utils/helm-values-mapper.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export * from './helm-values-mapper.js';
2
+ export * from './traefik-bouncer.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/factories/crowdsec/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export * from './helm-values-mapper.js';
2
+ export * from './traefik-bouncer.js';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/factories/crowdsec/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC"}
@@ -0,0 +1,68 @@
1
+ // Address and value-shape checks shared by the CrowdSec values mapper and the
2
+ // Traefik bouncer helper. Internal: not re-exported from `typekro/crowdsec`.
3
+ import { isIP } from 'node:net';
4
+ import { REQUIRED_FIELD_SENTINEL } from '../../../core/serialization/schema.js';
5
+ import { isCelExpression, isKubernetesRef } from '../../../utils/type-guards.js';
6
+ // What a schema proxy stringifies to inside a template literal.
7
+ const KUBERNETES_REF_MARKER_PREFIX = '__KUBERNETES_REF_';
8
+ /**
9
+ * A value only known at reconcile time: a schema or resource reference, a CEL
10
+ * expression, a template literal over a reference, or the placeholder the
11
+ * defaults-extraction pass substitutes for required fields. Never validated or
12
+ * branched on as if it were the user's value.
13
+ */
14
+ export function isDeferredValue(value) {
15
+ return (isKubernetesRef(value) ||
16
+ isCelExpression(value) ||
17
+ (typeof value === 'string' &&
18
+ (value.includes(KUBERNETES_REF_MARKER_PREFIX) || value.includes(REQUIRED_FIELD_SENTINEL))));
19
+ }
20
+ /**
21
+ * An IPv4 or IPv6 address as Go's `net.ParseIP` reads it: no port, no zone, no
22
+ * leading zeros in IPv4 octets; IPv4-mapped IPv6 (`::ffff:192.0.2.1`) is fine.
23
+ */
24
+ export function isIp(value) {
25
+ return !value.includes('%') && isIP(value) !== 0;
26
+ }
27
+ /** An `address/bits` range, as Go's `net.ParseCIDR` reads it. */
28
+ export function isCidr(value) {
29
+ const [address, bits, extra] = value.split('/');
30
+ if (address === undefined || bits === undefined || extra !== undefined || !/^\d+$/.test(bits)) {
31
+ return false;
32
+ }
33
+ return isIp(address) && Number(bits) <= (isIP(address) === 6 ? 128 : 32);
34
+ }
35
+ // The eight 16-bit groups of a valid IPv6 address (dotted IPv4 tail included).
36
+ function ipv6Groups(address) {
37
+ let text = address.toLowerCase();
38
+ const dotted = /^(.*:)(\d+)\.(\d+)\.(\d+)\.(\d+)$/.exec(text);
39
+ if (dotted) {
40
+ const [, head = '', a, b, c, d] = dotted;
41
+ const octets = [a, b, c, d].map(Number);
42
+ text = `${head}${((octets[0] << 8) | octets[1]).toString(16)}:${((octets[2] << 8) | octets[3]).toString(16)}`;
43
+ }
44
+ const [head = '', tail] = text.split('::');
45
+ const left = head === '' ? [] : head.split(':');
46
+ const right = tail === undefined || tail === '' ? [] : tail.split(':');
47
+ const fill = tail === undefined ? [] : Array(8 - left.length - right.length).fill('0');
48
+ return [...left, ...fill, ...right].map((group) => Number.parseInt(group, 16));
49
+ }
50
+ /** An IPv4-mapped IPv6 address (`::ffff:a.b.c.d`), which Go treats as IPv4. */
51
+ function isIpv4Mapped(address) {
52
+ if (isIP(address) !== 6)
53
+ return false;
54
+ const groups = ipv6Groups(address);
55
+ return groups.slice(0, 5).every((group) => group === 0) && groups[5] === 0xffff;
56
+ }
57
+ /**
58
+ * A range that matches every address: any `/0`, or an IPv4-mapped range with
59
+ * at most 96 bits (`::ffff:0.0.0.0/96`). Go's `net.IPNet` matches IPv4 clients
60
+ * against the last 32 bits of such a mask, which are then all zero.
61
+ */
62
+ export function isAnyAddressRange(value) {
63
+ if (!isCidr(value))
64
+ return false;
65
+ const [address = '', bits = ''] = value.split('/');
66
+ return Number(bits) === 0 || (isIpv4Mapped(address) && Number(bits) <= 96);
67
+ }
68
+ //# sourceMappingURL=net.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"net.js","sourceRoot":"","sources":["../../../../src/factories/crowdsec/utils/net.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Traefik side of CrowdSec: the bouncer plugin declaration and a Middleware
3
+ * spec that runs it. Both are plain objects; pass them to `makeTraefikBootstrap`
4
+ * (`plugins`) and `traefikMiddleware`. The only thing taken from the Traefik
5
+ * factories is the plugin-name rule, a runtime constant that appears in no
6
+ * CrowdSec type, so `typekro/crowdsec` declarations stay free of Traefik.
7
+ */
8
+ import type { CrowdsecBouncerMiddlewareOptions, CrowdsecBouncerMiddlewareSpec, CrowdsecSecretKeyRef, CrowdsecTraefikPluginDeclaration } from '../types.js';
9
+ /**
10
+ * Declare the bouncer plugin for Traefik's `experimental.plugins`.
11
+ *
12
+ * Defaults to the pinned v1.7.1 and its archive hash. Another version needs
13
+ * its own `hash`: the SHA-256 of the archive Traefik downloads.
14
+ *
15
+ * @throws {TypeKroError} `CROWDSEC_INVALID_PLUGIN` for a missing or malformed hash or version.
16
+ */
17
+ export declare function crowdsecTraefikPlugin(options?: {
18
+ version?: string;
19
+ hash?: string;
20
+ }): CrowdsecTraefikPluginDeclaration;
21
+ /**
22
+ * A `urn:k8s:secret:<name>:<key>` reference, which Traefik's CRD provider
23
+ * resolves inside plugin configuration from the Middleware's namespace.
24
+ *
25
+ * @throws {TypeKroError} `CROWDSEC_INVALID_SECRET_REF` for an empty name or key, or one with ":".
26
+ */
27
+ export declare function crowdsecSecretUrn(secret: CrowdsecSecretKeyRef): string;
28
+ /**
29
+ * Build a Traefik `Middleware.spec` that runs the bouncer in stream mode.
30
+ *
31
+ * It only ever bans: no captcha provider is configured, so a captcha decision
32
+ * is enforced as a ban. `failOpen` (the default) lets traffic through while
33
+ * LAPI or AppSec is unreachable; `failOpen: false` blocks it instead.
34
+ *
35
+ * @example
36
+ * ```typescript
37
+ * traefikMiddleware({
38
+ * name: 'crowdsec',
39
+ * namespace: 'traefik',
40
+ * spec: crowdsecBouncerMiddleware({
41
+ * lapiHost: 'crowdsec-service.crowdsec.svc.cluster.local:8080',
42
+ * apiKeySecret: { name: 'crowdsec-bouncer', key: 'api-key' },
43
+ * }),
44
+ * });
45
+ * ```
46
+ */
47
+ export declare function crowdsecBouncerMiddleware(options: CrowdsecBouncerMiddlewareOptions): CrowdsecBouncerMiddlewareSpec;
48
+ //# sourceMappingURL=traefik-bouncer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"traefik-bouncer.d.ts","sourceRoot":"","sources":["../../../../src/factories/crowdsec/utils/traefik-bouncer.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAgBH,OAAO,KAAK,EACV,gCAAgC,EAChC,6BAA6B,EAC7B,oBAAoB,EACpB,gCAAgC,EACjC,MAAM,aAAa,CAAC;AAqGrB;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,GAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAO,GAChD,gCAAgC,CAsBlC;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,oBAAoB,GAAG,MAAM,CAyBtE;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,gCAAgC,GACxC,6BAA6B,CA+I/B"}