typekro 0.33.10 → 0.35.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 (364) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/alchemy/clickhouse-schema/executor.d.ts +25 -0
  3. package/dist/alchemy/clickhouse-schema/executor.d.ts.map +1 -0
  4. package/dist/alchemy/clickhouse-schema/executor.js +144 -0
  5. package/dist/alchemy/clickhouse-schema/executor.js.map +1 -0
  6. package/dist/alchemy/clickhouse-schema/index.d.ts +12 -0
  7. package/dist/alchemy/clickhouse-schema/index.d.ts.map +1 -0
  8. package/dist/alchemy/clickhouse-schema/index.js +11 -0
  9. package/dist/alchemy/clickhouse-schema/index.js.map +1 -0
  10. package/dist/alchemy/clickhouse-schema/resource.d.ts +54 -0
  11. package/dist/alchemy/clickhouse-schema/resource.d.ts.map +1 -0
  12. package/dist/alchemy/clickhouse-schema/resource.js +158 -0
  13. package/dist/alchemy/clickhouse-schema/resource.js.map +1 -0
  14. package/dist/alchemy/clickhouse-schema/runner.d.ts +154 -0
  15. package/dist/alchemy/clickhouse-schema/runner.d.ts.map +1 -0
  16. package/dist/alchemy/clickhouse-schema/runner.js +613 -0
  17. package/dist/alchemy/clickhouse-schema/runner.js.map +1 -0
  18. package/dist/alchemy/clickhouse-schema/sql.d.ts +109 -0
  19. package/dist/alchemy/clickhouse-schema/sql.d.ts.map +1 -0
  20. package/dist/alchemy/clickhouse-schema/sql.js +368 -0
  21. package/dist/alchemy/clickhouse-schema/sql.js.map +1 -0
  22. package/dist/alchemy/clickhouse-schema/types.d.ts +394 -0
  23. package/dist/alchemy/clickhouse-schema/types.d.ts.map +1 -0
  24. package/dist/alchemy/clickhouse-schema/types.js +370 -0
  25. package/dist/alchemy/clickhouse-schema/types.js.map +1 -0
  26. package/dist/alchemy/index.d.ts +1 -0
  27. package/dist/alchemy/index.d.ts.map +1 -1
  28. package/dist/alchemy/index.js +2 -0
  29. package/dist/alchemy/index.js.map +1 -1
  30. package/dist/compositions/typekro-runtime/typekro-runtime.d.ts +0 -33
  31. package/dist/compositions/typekro-runtime/typekro-runtime.d.ts.map +1 -1
  32. package/dist/compositions/typekro-runtime/typekro-runtime.js +63 -1
  33. package/dist/compositions/typekro-runtime/typekro-runtime.js.map +1 -1
  34. package/dist/compositions/typekro-runtime/types.d.ts +8 -0
  35. package/dist/compositions/typekro-runtime/types.d.ts.map +1 -1
  36. package/dist/compositions/typekro-runtime/types.js +1 -0
  37. package/dist/compositions/typekro-runtime/types.js.map +1 -1
  38. package/dist/core/aspects/values-merge.d.ts +17 -0
  39. package/dist/core/aspects/values-merge.d.ts.map +1 -1
  40. package/dist/core/aspects/values-merge.js +67 -8
  41. package/dist/core/aspects/values-merge.js.map +1 -1
  42. package/dist/core/deployment/direct-factory.d.ts +9 -0
  43. package/dist/core/deployment/direct-factory.d.ts.map +1 -1
  44. package/dist/core/deployment/direct-factory.js +37 -3
  45. package/dist/core/deployment/direct-factory.js.map +1 -1
  46. package/dist/core/deployment/engine.d.ts +34 -0
  47. package/dist/core/deployment/engine.d.ts.map +1 -1
  48. package/dist/core/deployment/engine.js +173 -29
  49. package/dist/core/deployment/engine.js.map +1 -1
  50. package/dist/core/deployment/index.d.ts +2 -0
  51. package/dist/core/deployment/index.d.ts.map +1 -1
  52. package/dist/core/deployment/index.js +1 -0
  53. package/dist/core/deployment/index.js.map +1 -1
  54. package/dist/core/deployment/k8s-helpers.d.ts +73 -0
  55. package/dist/core/deployment/k8s-helpers.d.ts.map +1 -1
  56. package/dist/core/deployment/k8s-helpers.js +198 -4
  57. package/dist/core/deployment/k8s-helpers.js.map +1 -1
  58. package/dist/core/deployment/kro-factory.d.ts.map +1 -1
  59. package/dist/core/deployment/kro-factory.js +21 -1
  60. package/dist/core/deployment/kro-factory.js.map +1 -1
  61. package/dist/core/deployment/status-leaf-resolution.d.ts +101 -0
  62. package/dist/core/deployment/status-leaf-resolution.d.ts.map +1 -0
  63. package/dist/core/deployment/status-leaf-resolution.js +232 -0
  64. package/dist/core/deployment/status-leaf-resolution.js.map +1 -0
  65. package/dist/core/deployment/strategies/base-strategy.d.ts.map +1 -1
  66. package/dist/core/deployment/strategies/base-strategy.js +31 -3
  67. package/dist/core/deployment/strategies/base-strategy.js.map +1 -1
  68. package/dist/core/deployment/strategies/kro-strategy.d.ts.map +1 -1
  69. package/dist/core/deployment/strategies/kro-strategy.js +8 -1
  70. package/dist/core/deployment/strategies/kro-strategy.js.map +1 -1
  71. package/dist/core/kro/index.d.ts +6 -0
  72. package/dist/core/kro/index.d.ts.map +1 -0
  73. package/dist/core/kro/index.js +6 -0
  74. package/dist/core/kro/index.js.map +1 -0
  75. package/dist/core/kro/label-guard-capability.d.ts +141 -0
  76. package/dist/core/kro/label-guard-capability.d.ts.map +1 -0
  77. package/dist/core/kro/label-guard-capability.js +257 -0
  78. package/dist/core/kro/label-guard-capability.js.map +1 -0
  79. package/dist/core/kro/labels.d.ts +56 -0
  80. package/dist/core/kro/labels.d.ts.map +1 -0
  81. package/dist/core/kro/labels.js +62 -0
  82. package/dist/core/kro/labels.js.map +1 -0
  83. package/dist/core/kubernetes/api-capability.d.ts +196 -0
  84. package/dist/core/kubernetes/api-capability.d.ts.map +1 -0
  85. package/dist/core/kubernetes/api-capability.js +301 -0
  86. package/dist/core/kubernetes/api-capability.js.map +1 -0
  87. package/dist/core/kubernetes/index.d.ts +2 -0
  88. package/dist/core/kubernetes/index.d.ts.map +1 -1
  89. package/dist/core/kubernetes/index.js +2 -0
  90. package/dist/core/kubernetes/index.js.map +1 -1
  91. package/dist/core/kubernetes/naming.d.ts +100 -0
  92. package/dist/core/kubernetes/naming.d.ts.map +1 -0
  93. package/dist/core/kubernetes/naming.js +93 -0
  94. package/dist/core/kubernetes/naming.js.map +1 -0
  95. package/dist/core/planning/direct-runtime-adapter.d.ts.map +1 -1
  96. package/dist/core/planning/direct-runtime-adapter.js +54 -17
  97. package/dist/core/planning/direct-runtime-adapter.js.map +1 -1
  98. package/dist/core/planning/planner.d.ts.map +1 -1
  99. package/dist/core/planning/planner.js +17 -0
  100. package/dist/core/planning/planner.js.map +1 -1
  101. package/dist/core/planning/schema.d.ts.map +1 -1
  102. package/dist/core/planning/schema.js +7 -3
  103. package/dist/core/planning/schema.js.map +1 -1
  104. package/dist/core/references/cel-lexical-scanner.d.ts +100 -1
  105. package/dist/core/references/cel-lexical-scanner.d.ts.map +1 -1
  106. package/dist/core/references/cel-lexical-scanner.js +196 -2
  107. package/dist/core/references/cel-lexical-scanner.js.map +1 -1
  108. package/dist/core/references/cel.d.ts +249 -1
  109. package/dist/core/references/cel.d.ts.map +1 -1
  110. package/dist/core/references/cel.js +289 -8
  111. package/dist/core/references/cel.js.map +1 -1
  112. package/dist/core/serialization/arktype-ast.d.ts +21 -0
  113. package/dist/core/serialization/arktype-ast.d.ts.map +1 -0
  114. package/dist/core/serialization/arktype-ast.js +29 -0
  115. package/dist/core/serialization/arktype-ast.js.map +1 -0
  116. package/dist/core/serialization/cel-references.d.ts +133 -32
  117. package/dist/core/serialization/cel-references.d.ts.map +1 -1
  118. package/dist/core/serialization/cel-references.js +908 -109
  119. package/dist/core/serialization/cel-references.js.map +1 -1
  120. package/dist/core/serialization/schema.d.ts +16 -2
  121. package/dist/core/serialization/schema.d.ts.map +1 -1
  122. package/dist/core/serialization/schema.js +113 -21
  123. package/dist/core/serialization/schema.js.map +1 -1
  124. package/dist/core/types/composable.d.ts +7 -1
  125. package/dist/core/types/composable.d.ts.map +1 -1
  126. package/dist/core/types/deployment.d.ts +32 -2
  127. package/dist/core/types/deployment.d.ts.map +1 -1
  128. package/dist/core/types/serialization.d.ts +37 -0
  129. package/dist/core/types/serialization.d.ts.map +1 -1
  130. package/dist/core/validation/cel-dialect.d.ts +246 -0
  131. package/dist/core/validation/cel-dialect.d.ts.map +1 -0
  132. package/dist/core/validation/cel-dialect.js +1997 -0
  133. package/dist/core/validation/cel-dialect.js.map +1 -0
  134. package/dist/core/validation/cel-validator.d.ts.map +1 -1
  135. package/dist/core/validation/cel-validator.js +8 -1
  136. package/dist/core/validation/cel-validator.js.map +1 -1
  137. package/dist/core/validation/literal-status.d.ts +107 -0
  138. package/dist/core/validation/literal-status.d.ts.map +1 -0
  139. package/dist/core/validation/literal-status.js +346 -0
  140. package/dist/core/validation/literal-status.js.map +1 -0
  141. package/dist/core/validation/structural-spec-dependence.d.ts +179 -0
  142. package/dist/core/validation/structural-spec-dependence.d.ts.map +1 -0
  143. package/dist/core/validation/structural-spec-dependence.js +911 -0
  144. package/dist/core/validation/structural-spec-dependence.js.map +1 -0
  145. package/dist/factories/apisix/compositions/apisix-bootstrap.d.ts.map +1 -1
  146. package/dist/factories/apisix/compositions/apisix-bootstrap.js +9 -0
  147. package/dist/factories/apisix/compositions/apisix-bootstrap.js.map +1 -1
  148. package/dist/factories/clickhouse/compositions/clickhouse-cluster.d.ts +6 -0
  149. package/dist/factories/clickhouse/compositions/clickhouse-cluster.d.ts.map +1 -1
  150. package/dist/factories/clickhouse/compositions/clickhouse-cluster.js +273 -23
  151. package/dist/factories/clickhouse/compositions/clickhouse-cluster.js.map +1 -1
  152. package/dist/factories/clickhouse/resources/index.d.ts +1 -0
  153. package/dist/factories/clickhouse/resources/index.d.ts.map +1 -1
  154. package/dist/factories/clickhouse/resources/index.js +1 -0
  155. package/dist/factories/clickhouse/resources/index.js.map +1 -1
  156. package/dist/factories/clickhouse/resources/installation.d.ts.map +1 -1
  157. package/dist/factories/clickhouse/resources/installation.js +31 -4
  158. package/dist/factories/clickhouse/resources/installation.js.map +1 -1
  159. package/dist/factories/clickhouse/resources/s3-backup.d.ts +215 -0
  160. package/dist/factories/clickhouse/resources/s3-backup.d.ts.map +1 -0
  161. package/dist/factories/clickhouse/resources/s3-backup.js +410 -0
  162. package/dist/factories/clickhouse/resources/s3-backup.js.map +1 -0
  163. package/dist/factories/clickhouse/types.d.ts +416 -20
  164. package/dist/factories/clickhouse/types.d.ts.map +1 -1
  165. package/dist/factories/clickhouse/types.js +235 -11
  166. package/dist/factories/clickhouse/types.js.map +1 -1
  167. package/dist/factories/clickhouse/utils/helm-values-mapper.d.ts +42 -0
  168. package/dist/factories/clickhouse/utils/helm-values-mapper.d.ts.map +1 -1
  169. package/dist/factories/clickhouse/utils/helm-values-mapper.js +48 -0
  170. package/dist/factories/clickhouse/utils/helm-values-mapper.js.map +1 -1
  171. package/dist/factories/clickhouse/utils/index.d.ts +2 -0
  172. package/dist/factories/clickhouse/utils/index.d.ts.map +1 -1
  173. package/dist/factories/clickhouse/utils/index.js +2 -0
  174. package/dist/factories/clickhouse/utils/index.js.map +1 -1
  175. package/dist/factories/clickhouse/utils/s3-storage.d.ts +503 -0
  176. package/dist/factories/clickhouse/utils/s3-storage.d.ts.map +1 -0
  177. package/dist/factories/clickhouse/utils/s3-storage.js +1139 -0
  178. package/dist/factories/clickhouse/utils/s3-storage.js.map +1 -0
  179. package/dist/factories/clickhouse/utils/validation.d.ts +103 -0
  180. package/dist/factories/clickhouse/utils/validation.d.ts.map +1 -1
  181. package/dist/factories/clickhouse/utils/validation.js +129 -0
  182. package/dist/factories/clickhouse/utils/validation.js.map +1 -1
  183. package/dist/factories/clickhouse/utils/xml.d.ts +87 -0
  184. package/dist/factories/clickhouse/utils/xml.d.ts.map +1 -0
  185. package/dist/factories/clickhouse/utils/xml.js +151 -0
  186. package/dist/factories/clickhouse/utils/xml.js.map +1 -0
  187. package/dist/factories/clickstack/compositions/clickstack-bootstrap.d.ts +57 -0
  188. package/dist/factories/clickstack/compositions/clickstack-bootstrap.d.ts.map +1 -1
  189. package/dist/factories/clickstack/compositions/clickstack-bootstrap.js +266 -7
  190. package/dist/factories/clickstack/compositions/clickstack-bootstrap.js.map +1 -1
  191. package/dist/factories/clickstack/types.d.ts +205 -26
  192. package/dist/factories/clickstack/types.d.ts.map +1 -1
  193. package/dist/factories/clickstack/types.js +106 -8
  194. package/dist/factories/clickstack/types.js.map +1 -1
  195. package/dist/factories/clickstack/utils/collector-config.d.ts +104 -0
  196. package/dist/factories/clickstack/utils/collector-config.d.ts.map +1 -0
  197. package/dist/factories/clickstack/utils/collector-config.js +266 -0
  198. package/dist/factories/clickstack/utils/collector-config.js.map +1 -0
  199. package/dist/factories/clickstack/utils/helm-values-mapper.d.ts +26 -0
  200. package/dist/factories/clickstack/utils/helm-values-mapper.d.ts.map +1 -1
  201. package/dist/factories/clickstack/utils/helm-values-mapper.js +53 -12
  202. package/dist/factories/clickstack/utils/helm-values-mapper.js.map +1 -1
  203. package/dist/factories/clickstack/utils/index.d.ts +2 -0
  204. package/dist/factories/clickstack/utils/index.d.ts.map +1 -1
  205. package/dist/factories/clickstack/utils/index.js +2 -0
  206. package/dist/factories/clickstack/utils/index.js.map +1 -1
  207. package/dist/factories/clickstack/utils/storage.d.ts +449 -0
  208. package/dist/factories/clickstack/utils/storage.d.ts.map +1 -0
  209. package/dist/factories/clickstack/utils/storage.js +698 -0
  210. package/dist/factories/clickstack/utils/storage.js.map +1 -0
  211. package/dist/factories/cnpg/resources/helm.d.ts.map +1 -1
  212. package/dist/factories/cnpg/resources/helm.js +4 -4
  213. package/dist/factories/cnpg/resources/helm.js.map +1 -1
  214. package/dist/factories/cnpg/types.d.ts +10 -1
  215. package/dist/factories/cnpg/types.d.ts.map +1 -1
  216. package/dist/factories/cnpg/types.js.map +1 -1
  217. package/dist/factories/cnpg/utils/helm-values-mapper.d.ts +19 -2
  218. package/dist/factories/cnpg/utils/helm-values-mapper.d.ts.map +1 -1
  219. package/dist/factories/cnpg/utils/helm-values-mapper.js +22 -4
  220. package/dist/factories/cnpg/utils/helm-values-mapper.js.map +1 -1
  221. package/dist/factories/envoy-ai-gateway/compositions/gateway.d.ts.map +1 -1
  222. package/dist/factories/envoy-ai-gateway/compositions/gateway.js +16 -3
  223. package/dist/factories/envoy-ai-gateway/compositions/gateway.js.map +1 -1
  224. package/dist/factories/envoy-ai-gateway/constants.d.ts +5 -2
  225. package/dist/factories/envoy-ai-gateway/constants.d.ts.map +1 -1
  226. package/dist/factories/envoy-ai-gateway/constants.js +5 -2
  227. package/dist/factories/envoy-ai-gateway/constants.js.map +1 -1
  228. package/dist/factories/envoy-ai-gateway/resources/gateway.d.ts +12 -0
  229. package/dist/factories/envoy-ai-gateway/resources/gateway.d.ts.map +1 -1
  230. package/dist/factories/envoy-ai-gateway/resources/gateway.js +27 -104
  231. package/dist/factories/envoy-ai-gateway/resources/gateway.js.map +1 -1
  232. package/dist/factories/envoy-ai-gateway/types.d.ts +15 -47
  233. package/dist/factories/envoy-ai-gateway/types.d.ts.map +1 -1
  234. package/dist/factories/envoy-ai-gateway/types.js.map +1 -1
  235. package/dist/factories/gateway-api/constants.d.ts +27 -0
  236. package/dist/factories/gateway-api/constants.d.ts.map +1 -0
  237. package/dist/factories/gateway-api/constants.js +27 -0
  238. package/dist/factories/gateway-api/constants.js.map +1 -0
  239. package/dist/factories/gateway-api/index.d.ts +14 -0
  240. package/dist/factories/gateway-api/index.d.ts.map +1 -0
  241. package/dist/factories/gateway-api/index.js +14 -0
  242. package/dist/factories/gateway-api/index.js.map +1 -0
  243. package/dist/factories/gateway-api/readiness.d.ts +67 -0
  244. package/dist/factories/gateway-api/readiness.d.ts.map +1 -0
  245. package/dist/factories/gateway-api/readiness.js +213 -0
  246. package/dist/factories/gateway-api/readiness.js.map +1 -0
  247. package/dist/factories/gateway-api/resources/gateway.d.ts +91 -0
  248. package/dist/factories/gateway-api/resources/gateway.d.ts.map +1 -0
  249. package/dist/factories/gateway-api/resources/gateway.js +99 -0
  250. package/dist/factories/gateway-api/resources/gateway.js.map +1 -0
  251. package/dist/factories/gateway-api/resources/index.d.ts +2 -0
  252. package/dist/factories/gateway-api/resources/index.d.ts.map +1 -0
  253. package/dist/factories/gateway-api/resources/index.js +2 -0
  254. package/dist/factories/gateway-api/resources/index.js.map +1 -0
  255. package/dist/factories/gateway-api/types.d.ts +1269 -0
  256. package/dist/factories/gateway-api/types.d.ts.map +1 -0
  257. package/dist/factories/gateway-api/types.js +417 -0
  258. package/dist/factories/gateway-api/types.js.map +1 -0
  259. package/dist/factories/helm/readiness-evaluators.d.ts +21 -3
  260. package/dist/factories/helm/readiness-evaluators.d.ts.map +1 -1
  261. package/dist/factories/helm/readiness-evaluators.js +117 -11
  262. package/dist/factories/helm/readiness-evaluators.js.map +1 -1
  263. package/dist/factories/helm/types.d.ts +28 -0
  264. package/dist/factories/helm/types.d.ts.map +1 -1
  265. package/dist/factories/index.d.ts +2 -0
  266. package/dist/factories/index.d.ts.map +1 -1
  267. package/dist/factories/index.js +8 -0
  268. package/dist/factories/index.js.map +1 -1
  269. package/dist/factories/inngest/compositions/inngest-bootstrap.d.ts.map +1 -1
  270. package/dist/factories/inngest/compositions/inngest-bootstrap.js +10 -0
  271. package/dist/factories/inngest/compositions/inngest-bootstrap.js.map +1 -1
  272. package/dist/factories/kubernetes/admission/index.d.ts +2 -0
  273. package/dist/factories/kubernetes/admission/index.d.ts.map +1 -1
  274. package/dist/factories/kubernetes/admission/index.js +2 -0
  275. package/dist/factories/kubernetes/admission/index.js.map +1 -1
  276. package/dist/factories/kubernetes/admission/label-propagation-guard.d.ts +108 -0
  277. package/dist/factories/kubernetes/admission/label-propagation-guard.d.ts.map +1 -0
  278. package/dist/factories/kubernetes/admission/label-propagation-guard.js +247 -0
  279. package/dist/factories/kubernetes/admission/label-propagation-guard.js.map +1 -0
  280. package/dist/factories/kubernetes/admission/mutating-admission-policy.d.ts +286 -0
  281. package/dist/factories/kubernetes/admission/mutating-admission-policy.d.ts.map +1 -0
  282. package/dist/factories/kubernetes/admission/mutating-admission-policy.js +157 -0
  283. package/dist/factories/kubernetes/admission/mutating-admission-policy.js.map +1 -0
  284. package/dist/factories/opensearch/compositions/cluster.d.ts.map +1 -1
  285. package/dist/factories/opensearch/compositions/cluster.js +6 -1
  286. package/dist/factories/opensearch/compositions/cluster.js.map +1 -1
  287. package/dist/factories/ory/compositions/ory-identity-stack.d.ts +8 -8
  288. package/dist/factories/ory/types.d.ts +16 -16
  289. package/dist/factories/rook/compositions/object-storage-claim.d.ts +1 -1
  290. package/dist/factories/rook/compositions/rook-ceph-platform.js +8 -1
  291. package/dist/factories/rook/compositions/rook-ceph-platform.js.map +1 -1
  292. package/dist/factories/rook/types.d.ts +1 -1
  293. package/dist/factories/traefik/compositions/index.d.ts +6 -0
  294. package/dist/factories/traefik/compositions/index.d.ts.map +1 -0
  295. package/dist/factories/traefik/compositions/index.js +6 -0
  296. package/dist/factories/traefik/compositions/index.js.map +1 -0
  297. package/dist/factories/traefik/compositions/traefik-bootstrap.d.ts +185 -0
  298. package/dist/factories/traefik/compositions/traefik-bootstrap.d.ts.map +1 -0
  299. package/dist/factories/traefik/compositions/traefik-bootstrap.js +339 -0
  300. package/dist/factories/traefik/compositions/traefik-bootstrap.js.map +1 -0
  301. package/dist/factories/traefik/compositions/traefik-helm-repository.d.ts +16 -0
  302. package/dist/factories/traefik/compositions/traefik-helm-repository.d.ts.map +1 -0
  303. package/dist/factories/traefik/compositions/traefik-helm-repository.js +31 -0
  304. package/dist/factories/traefik/compositions/traefik-helm-repository.js.map +1 -0
  305. package/dist/factories/traefik/constants.d.ts +78 -0
  306. package/dist/factories/traefik/constants.d.ts.map +1 -0
  307. package/dist/factories/traefik/constants.js +104 -0
  308. package/dist/factories/traefik/constants.js.map +1 -0
  309. package/dist/factories/traefik/index.d.ts +25 -0
  310. package/dist/factories/traefik/index.d.ts.map +1 -0
  311. package/dist/factories/traefik/index.js +25 -0
  312. package/dist/factories/traefik/index.js.map +1 -0
  313. package/dist/factories/traefik/resources/common.d.ts +68 -0
  314. package/dist/factories/traefik/resources/common.d.ts.map +1 -0
  315. package/dist/factories/traefik/resources/common.js +59 -0
  316. package/dist/factories/traefik/resources/common.js.map +1 -0
  317. package/dist/factories/traefik/resources/gateway.d.ts +85 -0
  318. package/dist/factories/traefik/resources/gateway.d.ts.map +1 -0
  319. package/dist/factories/traefik/resources/gateway.js +109 -0
  320. package/dist/factories/traefik/resources/gateway.js.map +1 -0
  321. package/dist/factories/traefik/resources/helm.d.ts +56 -0
  322. package/dist/factories/traefik/resources/helm.d.ts.map +1 -0
  323. package/dist/factories/traefik/resources/helm.js +131 -0
  324. package/dist/factories/traefik/resources/helm.js.map +1 -0
  325. package/dist/factories/traefik/resources/index.d.ts +10 -0
  326. package/dist/factories/traefik/resources/index.d.ts.map +1 -0
  327. package/dist/factories/traefik/resources/index.js +10 -0
  328. package/dist/factories/traefik/resources/index.js.map +1 -0
  329. package/dist/factories/traefik/resources/middleware.d.ts +169 -0
  330. package/dist/factories/traefik/resources/middleware.d.ts.map +1 -0
  331. package/dist/factories/traefik/resources/middleware.js +225 -0
  332. package/dist/factories/traefik/resources/middleware.js.map +1 -0
  333. package/dist/factories/traefik/resources/routing.d.ts +113 -0
  334. package/dist/factories/traefik/resources/routing.d.ts.map +1 -0
  335. package/dist/factories/traefik/resources/routing.js +119 -0
  336. package/dist/factories/traefik/resources/routing.js.map +1 -0
  337. package/dist/factories/traefik/resources/tls.d.ts +85 -0
  338. package/dist/factories/traefik/resources/tls.d.ts.map +1 -0
  339. package/dist/factories/traefik/resources/tls.js +93 -0
  340. package/dist/factories/traefik/resources/tls.js.map +1 -0
  341. package/dist/factories/traefik/types.d.ts +2690 -0
  342. package/dist/factories/traefik/types.d.ts.map +1 -0
  343. package/dist/factories/traefik/types.js +1084 -0
  344. package/dist/factories/traefik/types.js.map +1 -0
  345. package/dist/factories/traefik/utils/helm-values-mapper.d.ts +198 -0
  346. package/dist/factories/traefik/utils/helm-values-mapper.d.ts.map +1 -0
  347. package/dist/factories/traefik/utils/helm-values-mapper.js +372 -0
  348. package/dist/factories/traefik/utils/helm-values-mapper.js.map +1 -0
  349. package/dist/factories/traefik/utils/index.d.ts +6 -0
  350. package/dist/factories/traefik/utils/index.d.ts.map +1 -0
  351. package/dist/factories/traefik/utils/index.js +6 -0
  352. package/dist/factories/traefik/utils/index.js.map +1 -0
  353. package/dist/factories/traefik/utils/middleware-validation.d.ts +42 -0
  354. package/dist/factories/traefik/utils/middleware-validation.d.ts.map +1 -0
  355. package/dist/factories/traefik/utils/middleware-validation.js +78 -0
  356. package/dist/factories/traefik/utils/middleware-validation.js.map +1 -0
  357. package/dist/factories/webapp/compositions/web-app-with-processing.d.ts.map +1 -1
  358. package/dist/factories/webapp/compositions/web-app-with-processing.js +10 -0
  359. package/dist/factories/webapp/compositions/web-app-with-processing.js.map +1 -1
  360. package/dist/index.d.ts +4 -3
  361. package/dist/index.d.ts.map +1 -1
  362. package/dist/index.js +3 -1
  363. package/dist/index.js.map +1 -1
  364. package/package.json +9 -1
@@ -0,0 +1,2690 @@
1
+ /**
2
+ * Traefik type definitions.
3
+ *
4
+ * **ArkType is the single source of truth.** Every configuration type in this
5
+ * file — the `traefik.io/v1alpha1` CRD specs, the middleware set, and the
6
+ * bootstrap composition's spec — is INFERRED from the ArkType schema declared
7
+ * next to it (`typeof XSchema.infer`), per `docs/advanced/integration-skill.md`
8
+ * Step 2. One declaration then validates at runtime, generates the KRO
9
+ * SimpleSchema, and types the factory, so the three cannot drift. Only STATUS
10
+ * types stay hand-written: they describe what a controller publishes rather
11
+ * than user input.
12
+ *
13
+ * Three layers live here:
14
+ *
15
+ * 1. **CRD spec schemas** — verified field-by-field against the
16
+ * `traefik.io/v1alpha1` CRDs shipped by chart 41.5.0 (Traefik v3.7.13), read
17
+ * back from a live API server with
18
+ * `kubectl get crd middlewares.traefik.io -o jsonpath='{.spec.versions[0].schema.openAPIV3Schema.properties.spec}'`.
19
+ * None of the Traefik CRDs has a `status` subresource, which is why the
20
+ * resource factories register an always-ready evaluator (see
21
+ * `resources/routing.ts`). Where a schema is stricter than the CRD it is
22
+ * deliberate and noted inline.
23
+ * 2. **Helm chart values** — {@link TraefikManagedHelmValues} is a CLOSED,
24
+ * precise description of the chart paths this factory maps, pins or reads
25
+ * back (verified against chart 41.5.0's `values.schema.json`). It carries no
26
+ * index signatures at any depth; {@link TraefikRawHelmValues} is the single,
27
+ * explicitly named raw-passthrough boundary for the rest of the chart.
28
+ * 3. **Bootstrap contract** — the runtime spec/status of the bootstrap
29
+ * composition. Following the ClickStack convention these carry only
30
+ * proxy-safe VALUES (names, namespaces, versions, ports, endpoints) that
31
+ * serialize cleanly as CEL refs in KRO mode. Choices that decide WHICH
32
+ * resources exist are build-time options on `makeTraefikBootstrap(...)`.
33
+ *
34
+ * @see https://doc.traefik.io/traefik/reference/routing-configuration/kubernetes/crd/
35
+ */
36
+ import type { TypeKroChartValues } from '../../core/types/common.js';
37
+ import type { Affinity, EnvVar, LabelSelector, SecurityContext, Toleration } from '../cert-manager/types.js';
38
+ import type { HelmReleaseCrdsPolicy } from '../helm/types.js';
39
+ /**
40
+ * Longest `name` this factory accepts, derived from {@link TRAEFIK_GENERATED_NAMES}.
41
+ *
42
+ * Exported so the schema test can assert the derivation rather than a number
43
+ * copied out of it.
44
+ */
45
+ export declare const TRAEFIK_NAME_LIMIT: import("../../core/kubernetes/naming.js").DerivedNameLimit;
46
+ /** Make every key of an inferred all-optional schema present and non-nullable. */
47
+ type AllPresent<T> = {
48
+ [K in keyof T]-?: NonNullable<T[K]>;
49
+ };
50
+ /** A Traefik duration: a Go duration string, or an integer of nanoseconds. */
51
+ export type TraefikDuration = string | number;
52
+ /** A Kubernetes Service port: a number or a named port. */
53
+ export type TraefikPortValue = string | number;
54
+ /** How Traefik derives the client IP from proxy headers. */
55
+ export declare const TraefikIpStrategySchema: import("arktype/internal/variants/object.ts").ObjectType<{
56
+ depth?: number;
57
+ excludedIPs?: string[];
58
+ ipv6Subnet?: number;
59
+ }, {}>;
60
+ /** How Traefik derives the client IP from proxy headers. */
61
+ export type TraefikIpStrategy = typeof TraefikIpStrategySchema.infer;
62
+ /**
63
+ * What a `rateLimit` / `inFlightReq` middleware keys its counters on.
64
+ *
65
+ * Exactly one of these should be set; Traefik falls back to the client IP when
66
+ * none is given.
67
+ */
68
+ export declare const TraefikSourceCriterionSchema: import("arktype/internal/variants/object.ts").ObjectType<{
69
+ requestHeaderName?: string;
70
+ requestHost?: boolean;
71
+ ipStrategy?: {
72
+ depth?: number;
73
+ excludedIPs?: string[];
74
+ ipv6Subnet?: number;
75
+ };
76
+ }, {}>;
77
+ /** What a `rateLimit` / `inFlightReq` middleware keys its counters on. */
78
+ export type TraefikSourceCriterion = typeof TraefikSourceCriterionSchema.infer;
79
+ /** Sticky-session cookie configuration for a load-balanced service. */
80
+ export declare const TraefikStickyCookieSchema: import("arktype/internal/variants/object.ts").ObjectType<{
81
+ cookie?: {
82
+ name?: string;
83
+ secure?: boolean;
84
+ httpOnly?: boolean;
85
+ sameSite?: "none" | "strict" | "None" | "lax" | "Lax" | "Strict";
86
+ maxAge?: number;
87
+ path?: string;
88
+ domain?: string;
89
+ };
90
+ }, {}>;
91
+ /** Sticky-session cookie configuration for a load-balanced service. */
92
+ export type TraefikStickyCookie = typeof TraefikStickyCookieSchema.infer;
93
+ /**
94
+ * Active health check performed by Traefik against a service's servers.
95
+ *
96
+ * The CRD spells the Host override `hostname`; there is no `host` field.
97
+ */
98
+ export declare const TraefikHealthCheckSchema: import("arktype/internal/variants/object.ts").ObjectType<{
99
+ path?: string;
100
+ hostname?: string;
101
+ scheme?: string;
102
+ mode?: string;
103
+ method?: string;
104
+ status?: number;
105
+ port?: number;
106
+ interval?: string | number;
107
+ unhealthyInterval?: string | number;
108
+ timeout?: string | number;
109
+ headers?: Record<string, string>;
110
+ followRedirects?: boolean;
111
+ }, {}>;
112
+ /** Active health check performed by Traefik against a service's servers. */
113
+ export type TraefikHealthCheck = typeof TraefikHealthCheckSchema.infer;
114
+ /** A reference to a `Middleware` resource. */
115
+ export declare const TraefikMiddlewareRefSchema: import("arktype/internal/variants/object.ts").ObjectType<{
116
+ name: string;
117
+ namespace?: string;
118
+ }, {}>;
119
+ /** A reference to a `Middleware` resource. */
120
+ export type TraefikMiddlewareRef = typeof TraefikMiddlewareRefSchema.infer;
121
+ /** Load-balancing strategy across a service's servers. */
122
+ export type TraefikLoadBalancerStrategy = 'wrr' | 'p2c' | 'hrw' | 'leasttime' | 'RoundRobin';
123
+ /** One backend of an `IngressRoute` route or a `TraefikService`. */
124
+ export declare const TraefikServiceRefSchema: import("arktype/internal/variants/object.ts").ObjectType<{
125
+ name: string;
126
+ namespace?: string;
127
+ kind?: "Service" | "TraefikService";
128
+ port?: string | number;
129
+ scheme?: string;
130
+ weight?: number;
131
+ strategy?: "wrr" | "p2c" | "hrw" | "leasttime" | "RoundRobin";
132
+ passHostHeader?: boolean;
133
+ nativeLB?: boolean;
134
+ nodePortLB?: boolean;
135
+ serversTransport?: string;
136
+ sticky?: {
137
+ cookie?: {
138
+ name?: string;
139
+ secure?: boolean;
140
+ httpOnly?: boolean;
141
+ sameSite?: "none" | "strict" | "None" | "lax" | "Lax" | "Strict";
142
+ maxAge?: number;
143
+ path?: string;
144
+ domain?: string;
145
+ };
146
+ };
147
+ healthCheck?: {
148
+ path?: string;
149
+ hostname?: string;
150
+ scheme?: string;
151
+ mode?: string;
152
+ method?: string;
153
+ status?: number;
154
+ port?: number;
155
+ interval?: string | number;
156
+ unhealthyInterval?: string | number;
157
+ timeout?: string | number;
158
+ headers?: Record<string, string>;
159
+ followRedirects?: boolean;
160
+ };
161
+ passiveHealthCheck?: {
162
+ failureWindow?: string | number;
163
+ maxFailedAttempts?: number;
164
+ };
165
+ responseForwarding?: {
166
+ flushInterval?: string;
167
+ };
168
+ middlewares?: {
169
+ name: string;
170
+ namespace?: string;
171
+ }[];
172
+ }, {}>;
173
+ /** One backend of an `IngressRoute` route or a `TraefikService`. */
174
+ export type TraefikServiceRef = typeof TraefikServiceRefSchema.infer;
175
+ /** TLS configuration attached to a router. */
176
+ export declare const TraefikRouterTLSSchema: import("arktype/internal/variants/object.ts").ObjectType<{
177
+ secretName?: string;
178
+ options?: {
179
+ name: string;
180
+ namespace?: string;
181
+ };
182
+ store?: {
183
+ name: string;
184
+ namespace?: string;
185
+ };
186
+ certResolver?: string;
187
+ domains?: {
188
+ main?: string;
189
+ sans?: string[];
190
+ }[];
191
+ }, {}>;
192
+ /** TLS configuration attached to a router. */
193
+ export type TraefikRouterTLS = typeof TraefikRouterTLSSchema.infer;
194
+ /** Per-route observability overrides. */
195
+ export declare const TraefikRouteObservabilitySchema: import("arktype/internal/variants/object.ts").ObjectType<{
196
+ accessLogs?: boolean;
197
+ metrics?: boolean;
198
+ tracing?: boolean;
199
+ traceVerbosity?: "minimal" | "detailed";
200
+ }, {}>;
201
+ /** Per-route observability overrides. */
202
+ export type TraefikRouteObservability = typeof TraefikRouteObservabilitySchema.infer;
203
+ /** One `IngressRoute.spec.routes[]` entry. */
204
+ export declare const TraefikIngressRouteRuleSchema: import("arktype/internal/variants/object.ts").ObjectType<{
205
+ match: string;
206
+ kind?: "Rule";
207
+ priority?: number;
208
+ syntax?: string;
209
+ services?: {
210
+ name: string;
211
+ namespace?: string;
212
+ kind?: "Service" | "TraefikService";
213
+ port?: string | number;
214
+ scheme?: string;
215
+ weight?: number;
216
+ strategy?: "wrr" | "p2c" | "hrw" | "leasttime" | "RoundRobin";
217
+ passHostHeader?: boolean;
218
+ nativeLB?: boolean;
219
+ nodePortLB?: boolean;
220
+ serversTransport?: string;
221
+ sticky?: {
222
+ cookie?: {
223
+ name?: string;
224
+ secure?: boolean;
225
+ httpOnly?: boolean;
226
+ sameSite?: "none" | "strict" | "None" | "lax" | "Lax" | "Strict";
227
+ maxAge?: number;
228
+ path?: string;
229
+ domain?: string;
230
+ };
231
+ };
232
+ healthCheck?: {
233
+ path?: string;
234
+ hostname?: string;
235
+ scheme?: string;
236
+ mode?: string;
237
+ method?: string;
238
+ status?: number;
239
+ port?: number;
240
+ interval?: string | number;
241
+ unhealthyInterval?: string | number;
242
+ timeout?: string | number;
243
+ headers?: Record<string, string>;
244
+ followRedirects?: boolean;
245
+ };
246
+ passiveHealthCheck?: {
247
+ failureWindow?: string | number;
248
+ maxFailedAttempts?: number;
249
+ };
250
+ responseForwarding?: {
251
+ flushInterval?: string;
252
+ };
253
+ middlewares?: {
254
+ name: string;
255
+ namespace?: string;
256
+ }[];
257
+ }[];
258
+ middlewares?: {
259
+ name: string;
260
+ namespace?: string;
261
+ }[];
262
+ observability?: {
263
+ accessLogs?: boolean;
264
+ metrics?: boolean;
265
+ tracing?: boolean;
266
+ traceVerbosity?: "minimal" | "detailed";
267
+ };
268
+ }, {}>;
269
+ /** One `IngressRoute.spec.routes[]` entry. */
270
+ export type TraefikIngressRouteRule = typeof TraefikIngressRouteRuleSchema.infer;
271
+ /** `IngressRoute.spec`. */
272
+ export declare const TraefikIngressRouteSpecSchema: import("arktype/internal/variants/object.ts").ObjectType<{
273
+ routes: {
274
+ match: string;
275
+ kind?: "Rule";
276
+ priority?: number;
277
+ syntax?: string;
278
+ services?: {
279
+ name: string;
280
+ namespace?: string;
281
+ kind?: "Service" | "TraefikService";
282
+ port?: string | number;
283
+ scheme?: string;
284
+ weight?: number;
285
+ strategy?: "wrr" | "p2c" | "hrw" | "leasttime" | "RoundRobin";
286
+ passHostHeader?: boolean;
287
+ nativeLB?: boolean;
288
+ nodePortLB?: boolean;
289
+ serversTransport?: string;
290
+ sticky?: {
291
+ cookie?: {
292
+ name?: string;
293
+ secure?: boolean;
294
+ httpOnly?: boolean;
295
+ sameSite?: "none" | "strict" | "None" | "lax" | "Lax" | "Strict";
296
+ maxAge?: number;
297
+ path?: string;
298
+ domain?: string;
299
+ };
300
+ };
301
+ healthCheck?: {
302
+ path?: string;
303
+ hostname?: string;
304
+ scheme?: string;
305
+ mode?: string;
306
+ method?: string;
307
+ status?: number;
308
+ port?: number;
309
+ interval?: string | number;
310
+ unhealthyInterval?: string | number;
311
+ timeout?: string | number;
312
+ headers?: Record<string, string>;
313
+ followRedirects?: boolean;
314
+ };
315
+ passiveHealthCheck?: {
316
+ failureWindow?: string | number;
317
+ maxFailedAttempts?: number;
318
+ };
319
+ responseForwarding?: {
320
+ flushInterval?: string;
321
+ };
322
+ middlewares?: {
323
+ name: string;
324
+ namespace?: string;
325
+ }[];
326
+ }[];
327
+ middlewares?: {
328
+ name: string;
329
+ namespace?: string;
330
+ }[];
331
+ observability?: {
332
+ accessLogs?: boolean;
333
+ metrics?: boolean;
334
+ tracing?: boolean;
335
+ traceVerbosity?: "minimal" | "detailed";
336
+ };
337
+ }[];
338
+ entryPoints?: string[];
339
+ ingressClassName?: string;
340
+ tls?: {
341
+ secretName?: string;
342
+ options?: {
343
+ name: string;
344
+ namespace?: string;
345
+ };
346
+ store?: {
347
+ name: string;
348
+ namespace?: string;
349
+ };
350
+ certResolver?: string;
351
+ domains?: {
352
+ main?: string;
353
+ sans?: string[];
354
+ }[];
355
+ };
356
+ parentRefs?: {
357
+ name: string;
358
+ namespace?: string;
359
+ }[];
360
+ }, {}>;
361
+ /** `IngressRoute.spec`. */
362
+ export type TraefikIngressRouteSpec = typeof TraefikIngressRouteSpecSchema.infer;
363
+ /** One backend of an `IngressRouteTCP` route. */
364
+ export declare const TraefikTCPServiceRefSchema: import("arktype/internal/variants/object.ts").ObjectType<{
365
+ name: string;
366
+ port: string | number;
367
+ namespace?: string;
368
+ weight?: number;
369
+ tls?: boolean;
370
+ nativeLB?: boolean;
371
+ nodePortLB?: boolean;
372
+ serversTransport?: string;
373
+ proxyProtocol?: {
374
+ version?: number;
375
+ };
376
+ }, {}>;
377
+ /** One backend of an `IngressRouteTCP` route. */
378
+ export type TraefikTCPServiceRef = typeof TraefikTCPServiceRefSchema.infer;
379
+ /** One `IngressRouteTCP.spec.routes[]` entry. */
380
+ export declare const TraefikIngressRouteTCPRuleSchema: import("arktype/internal/variants/object.ts").ObjectType<{
381
+ match: string;
382
+ priority?: number;
383
+ syntax?: "v3" | "v2";
384
+ services?: {
385
+ name: string;
386
+ port: string | number;
387
+ namespace?: string;
388
+ weight?: number;
389
+ tls?: boolean;
390
+ nativeLB?: boolean;
391
+ nodePortLB?: boolean;
392
+ serversTransport?: string;
393
+ proxyProtocol?: {
394
+ version?: number;
395
+ };
396
+ }[];
397
+ middlewares?: {
398
+ name: string;
399
+ namespace?: string;
400
+ }[];
401
+ }, {}>;
402
+ /** One `IngressRouteTCP.spec.routes[]` entry. */
403
+ export type TraefikIngressRouteTCPRule = typeof TraefikIngressRouteTCPRuleSchema.infer;
404
+ /** `IngressRouteTCP.spec`. */
405
+ export declare const TraefikIngressRouteTCPSpecSchema: import("arktype/internal/variants/object.ts").ObjectType<{
406
+ routes: {
407
+ match: string;
408
+ priority?: number;
409
+ syntax?: "v3" | "v2";
410
+ services?: {
411
+ name: string;
412
+ port: string | number;
413
+ namespace?: string;
414
+ weight?: number;
415
+ tls?: boolean;
416
+ nativeLB?: boolean;
417
+ nodePortLB?: boolean;
418
+ serversTransport?: string;
419
+ proxyProtocol?: {
420
+ version?: number;
421
+ };
422
+ }[];
423
+ middlewares?: {
424
+ name: string;
425
+ namespace?: string;
426
+ }[];
427
+ }[];
428
+ entryPoints?: string[];
429
+ ingressClassName?: string;
430
+ tls?: {
431
+ secretName?: string;
432
+ options?: {
433
+ name: string;
434
+ namespace?: string;
435
+ };
436
+ store?: {
437
+ name: string;
438
+ namespace?: string;
439
+ };
440
+ certResolver?: string;
441
+ domains?: {
442
+ main?: string;
443
+ sans?: string[];
444
+ }[];
445
+ passthrough?: boolean;
446
+ };
447
+ }, {}>;
448
+ /** `IngressRouteTCP.spec`. */
449
+ export type TraefikIngressRouteTCPSpec = typeof TraefikIngressRouteTCPSpecSchema.infer;
450
+ /**
451
+ * `TraefikService.spec` — exactly one composition mode should be set.
452
+ *
453
+ * `failover.errors` is required because the CRD requires it alongside
454
+ * `service` and `fallback`.
455
+ */
456
+ export declare const TraefikServiceSpecSchema: import("arktype/internal/variants/object.ts").ObjectType<{
457
+ weighted?: {
458
+ services?: {
459
+ name: string;
460
+ namespace?: string;
461
+ kind?: "Service" | "TraefikService";
462
+ port?: string | number;
463
+ scheme?: string;
464
+ weight?: number;
465
+ strategy?: "wrr" | "p2c" | "hrw" | "leasttime" | "RoundRobin";
466
+ passHostHeader?: boolean;
467
+ nativeLB?: boolean;
468
+ nodePortLB?: boolean;
469
+ serversTransport?: string;
470
+ sticky?: {
471
+ cookie?: {
472
+ name?: string;
473
+ secure?: boolean;
474
+ httpOnly?: boolean;
475
+ sameSite?: "none" | "strict" | "None" | "lax" | "Lax" | "Strict";
476
+ maxAge?: number;
477
+ path?: string;
478
+ domain?: string;
479
+ };
480
+ };
481
+ healthCheck?: {
482
+ path?: string;
483
+ hostname?: string;
484
+ scheme?: string;
485
+ mode?: string;
486
+ method?: string;
487
+ status?: number;
488
+ port?: number;
489
+ interval?: string | number;
490
+ unhealthyInterval?: string | number;
491
+ timeout?: string | number;
492
+ headers?: Record<string, string>;
493
+ followRedirects?: boolean;
494
+ };
495
+ passiveHealthCheck?: {
496
+ failureWindow?: string | number;
497
+ maxFailedAttempts?: number;
498
+ };
499
+ responseForwarding?: {
500
+ flushInterval?: string;
501
+ };
502
+ middlewares?: {
503
+ name: string;
504
+ namespace?: string;
505
+ }[];
506
+ }[];
507
+ sticky?: {
508
+ cookie?: {
509
+ name?: string;
510
+ secure?: boolean;
511
+ httpOnly?: boolean;
512
+ sameSite?: "none" | "strict" | "None" | "lax" | "Lax" | "Strict";
513
+ maxAge?: number;
514
+ path?: string;
515
+ domain?: string;
516
+ };
517
+ };
518
+ };
519
+ mirroring?: {
520
+ name: string;
521
+ namespace?: string;
522
+ kind?: "Service" | "TraefikService";
523
+ port?: string | number;
524
+ scheme?: string;
525
+ weight?: number;
526
+ strategy?: "wrr" | "p2c" | "hrw" | "leasttime" | "RoundRobin";
527
+ passHostHeader?: boolean;
528
+ nativeLB?: boolean;
529
+ nodePortLB?: boolean;
530
+ serversTransport?: string;
531
+ sticky?: {
532
+ cookie?: {
533
+ name?: string;
534
+ secure?: boolean;
535
+ httpOnly?: boolean;
536
+ sameSite?: "none" | "strict" | "None" | "lax" | "Lax" | "Strict";
537
+ maxAge?: number;
538
+ path?: string;
539
+ domain?: string;
540
+ };
541
+ };
542
+ healthCheck?: {
543
+ path?: string;
544
+ hostname?: string;
545
+ scheme?: string;
546
+ mode?: string;
547
+ method?: string;
548
+ status?: number;
549
+ port?: number;
550
+ interval?: string | number;
551
+ unhealthyInterval?: string | number;
552
+ timeout?: string | number;
553
+ headers?: Record<string, string>;
554
+ followRedirects?: boolean;
555
+ };
556
+ passiveHealthCheck?: {
557
+ failureWindow?: string | number;
558
+ maxFailedAttempts?: number;
559
+ };
560
+ responseForwarding?: {
561
+ flushInterval?: string;
562
+ };
563
+ middlewares?: {
564
+ name: string;
565
+ namespace?: string;
566
+ }[];
567
+ maxBodySize?: number;
568
+ mirrorBody?: boolean;
569
+ mirrors?: {
570
+ name: string;
571
+ namespace?: string;
572
+ kind?: "Service" | "TraefikService";
573
+ port?: string | number;
574
+ scheme?: string;
575
+ weight?: number;
576
+ strategy?: "wrr" | "p2c" | "hrw" | "leasttime" | "RoundRobin";
577
+ passHostHeader?: boolean;
578
+ nativeLB?: boolean;
579
+ nodePortLB?: boolean;
580
+ serversTransport?: string;
581
+ sticky?: {
582
+ cookie?: {
583
+ name?: string;
584
+ secure?: boolean;
585
+ httpOnly?: boolean;
586
+ sameSite?: "none" | "strict" | "None" | "lax" | "Lax" | "Strict";
587
+ maxAge?: number;
588
+ path?: string;
589
+ domain?: string;
590
+ };
591
+ };
592
+ healthCheck?: {
593
+ path?: string;
594
+ hostname?: string;
595
+ scheme?: string;
596
+ mode?: string;
597
+ method?: string;
598
+ status?: number;
599
+ port?: number;
600
+ interval?: string | number;
601
+ unhealthyInterval?: string | number;
602
+ timeout?: string | number;
603
+ headers?: Record<string, string>;
604
+ followRedirects?: boolean;
605
+ };
606
+ passiveHealthCheck?: {
607
+ failureWindow?: string | number;
608
+ maxFailedAttempts?: number;
609
+ };
610
+ responseForwarding?: {
611
+ flushInterval?: string;
612
+ };
613
+ middlewares?: {
614
+ name: string;
615
+ namespace?: string;
616
+ }[];
617
+ percent?: number;
618
+ }[];
619
+ };
620
+ failover?: {
621
+ service: {
622
+ name: string;
623
+ namespace?: string;
624
+ kind?: "Service" | "TraefikService";
625
+ port?: string | number;
626
+ scheme?: string;
627
+ weight?: number;
628
+ strategy?: "wrr" | "p2c" | "hrw" | "leasttime" | "RoundRobin";
629
+ passHostHeader?: boolean;
630
+ nativeLB?: boolean;
631
+ nodePortLB?: boolean;
632
+ serversTransport?: string;
633
+ sticky?: {
634
+ cookie?: {
635
+ name?: string;
636
+ secure?: boolean;
637
+ httpOnly?: boolean;
638
+ sameSite?: "none" | "strict" | "None" | "lax" | "Lax" | "Strict";
639
+ maxAge?: number;
640
+ path?: string;
641
+ domain?: string;
642
+ };
643
+ };
644
+ healthCheck?: {
645
+ path?: string;
646
+ hostname?: string;
647
+ scheme?: string;
648
+ mode?: string;
649
+ method?: string;
650
+ status?: number;
651
+ port?: number;
652
+ interval?: string | number;
653
+ unhealthyInterval?: string | number;
654
+ timeout?: string | number;
655
+ headers?: Record<string, string>;
656
+ followRedirects?: boolean;
657
+ };
658
+ passiveHealthCheck?: {
659
+ failureWindow?: string | number;
660
+ maxFailedAttempts?: number;
661
+ };
662
+ responseForwarding?: {
663
+ flushInterval?: string;
664
+ };
665
+ middlewares?: {
666
+ name: string;
667
+ namespace?: string;
668
+ }[];
669
+ };
670
+ fallback: {
671
+ name: string;
672
+ namespace?: string;
673
+ kind?: "Service" | "TraefikService";
674
+ port?: string | number;
675
+ scheme?: string;
676
+ weight?: number;
677
+ strategy?: "wrr" | "p2c" | "hrw" | "leasttime" | "RoundRobin";
678
+ passHostHeader?: boolean;
679
+ nativeLB?: boolean;
680
+ nodePortLB?: boolean;
681
+ serversTransport?: string;
682
+ sticky?: {
683
+ cookie?: {
684
+ name?: string;
685
+ secure?: boolean;
686
+ httpOnly?: boolean;
687
+ sameSite?: "none" | "strict" | "None" | "lax" | "Lax" | "Strict";
688
+ maxAge?: number;
689
+ path?: string;
690
+ domain?: string;
691
+ };
692
+ };
693
+ healthCheck?: {
694
+ path?: string;
695
+ hostname?: string;
696
+ scheme?: string;
697
+ mode?: string;
698
+ method?: string;
699
+ status?: number;
700
+ port?: number;
701
+ interval?: string | number;
702
+ unhealthyInterval?: string | number;
703
+ timeout?: string | number;
704
+ headers?: Record<string, string>;
705
+ followRedirects?: boolean;
706
+ };
707
+ passiveHealthCheck?: {
708
+ failureWindow?: string | number;
709
+ maxFailedAttempts?: number;
710
+ };
711
+ responseForwarding?: {
712
+ flushInterval?: string;
713
+ };
714
+ middlewares?: {
715
+ name: string;
716
+ namespace?: string;
717
+ }[];
718
+ };
719
+ errors: {
720
+ status?: string[];
721
+ maxRequestBodyBytes?: number;
722
+ };
723
+ };
724
+ highestRandomWeight?: {
725
+ services?: {
726
+ name: string;
727
+ namespace?: string;
728
+ kind?: "Service" | "TraefikService";
729
+ port?: string | number;
730
+ scheme?: string;
731
+ weight?: number;
732
+ strategy?: "wrr" | "p2c" | "hrw" | "leasttime" | "RoundRobin";
733
+ passHostHeader?: boolean;
734
+ nativeLB?: boolean;
735
+ nodePortLB?: boolean;
736
+ serversTransport?: string;
737
+ sticky?: {
738
+ cookie?: {
739
+ name?: string;
740
+ secure?: boolean;
741
+ httpOnly?: boolean;
742
+ sameSite?: "none" | "strict" | "None" | "lax" | "Lax" | "Strict";
743
+ maxAge?: number;
744
+ path?: string;
745
+ domain?: string;
746
+ };
747
+ };
748
+ healthCheck?: {
749
+ path?: string;
750
+ hostname?: string;
751
+ scheme?: string;
752
+ mode?: string;
753
+ method?: string;
754
+ status?: number;
755
+ port?: number;
756
+ interval?: string | number;
757
+ unhealthyInterval?: string | number;
758
+ timeout?: string | number;
759
+ headers?: Record<string, string>;
760
+ followRedirects?: boolean;
761
+ };
762
+ passiveHealthCheck?: {
763
+ failureWindow?: string | number;
764
+ maxFailedAttempts?: number;
765
+ };
766
+ responseForwarding?: {
767
+ flushInterval?: string;
768
+ };
769
+ middlewares?: {
770
+ name: string;
771
+ namespace?: string;
772
+ }[];
773
+ }[];
774
+ };
775
+ }, {}>;
776
+ /** `TraefikService.spec`. */
777
+ export type TraefikServiceSpec = typeof TraefikServiceSpecSchema.infer;
778
+ /** `ServersTransport.spec` — how Traefik dials upstream servers. */
779
+ export declare const TraefikServersTransportSpecSchema: import("arktype/internal/variants/object.ts").ObjectType<{
780
+ serverName?: string;
781
+ insecureSkipVerify?: boolean;
782
+ rootCAsSecrets?: string[];
783
+ rootCAs?: {
784
+ secret?: string;
785
+ configMap?: string;
786
+ }[];
787
+ certificatesSecrets?: string[];
788
+ maxIdleConnsPerHost?: number;
789
+ disableHTTP2?: boolean;
790
+ peerCertURI?: string;
791
+ minVersion?: string;
792
+ maxVersion?: string;
793
+ cipherSuites?: string[];
794
+ spiffe?: {
795
+ ids?: string[];
796
+ trustDomain?: string;
797
+ };
798
+ forwardingTimeouts?: {
799
+ dialTimeout?: string | number;
800
+ responseHeaderTimeout?: string | number;
801
+ idleConnTimeout?: string | number;
802
+ readIdleTimeout?: string | number;
803
+ pingTimeout?: string | number;
804
+ };
805
+ }, {}>;
806
+ /** `ServersTransport.spec`. */
807
+ export type TraefikServersTransportSpec = typeof TraefikServersTransportSpecSchema.infer;
808
+ /** Mutual-TLS behavior of a `TLSOption`. */
809
+ export declare const TraefikClientAuthSchema: import("arktype/internal/variants/object.ts").ObjectType<{
810
+ secretNames?: string[];
811
+ clientAuthType?: "NoClientCert" | "RequestClientCert" | "RequireAnyClientCert" | "VerifyClientCertIfGiven" | "RequireAndVerifyClientCert";
812
+ }, {}>;
813
+ /** Mutual-TLS behavior of a `TLSOption`. */
814
+ export type TraefikClientAuth = typeof TraefikClientAuthSchema.infer;
815
+ /**
816
+ * `TLSOption.spec`.
817
+ *
818
+ * `minVersion`/`maxVersion` are narrower than the CRD's bare string: those four
819
+ * are the values Traefik accepts, so a typo is caught here instead of by the
820
+ * proxy at runtime. The CRD's deprecated `preferServerCipherSuites` is
821
+ * deliberately absent — Traefik v3 ignores it.
822
+ */
823
+ export declare const TraefikTLSOptionSpecSchema: import("arktype/internal/variants/object.ts").ObjectType<{
824
+ minVersion?: "VersionTLS10" | "VersionTLS11" | "VersionTLS12" | "VersionTLS13";
825
+ maxVersion?: "VersionTLS10" | "VersionTLS11" | "VersionTLS12" | "VersionTLS13";
826
+ cipherSuites?: string[];
827
+ curvePreferences?: string[];
828
+ sniStrict?: boolean;
829
+ alpnProtocols?: string[];
830
+ disableSessionTickets?: boolean;
831
+ clientAuth?: {
832
+ secretNames?: string[];
833
+ clientAuthType?: "NoClientCert" | "RequestClientCert" | "RequireAnyClientCert" | "VerifyClientCertIfGiven" | "RequireAndVerifyClientCert";
834
+ };
835
+ }, {}>;
836
+ /** `TLSOption.spec`. */
837
+ export type TraefikTLSOptionSpec = typeof TraefikTLSOptionSpecSchema.infer;
838
+ /** `TLSStore.spec`. */
839
+ export declare const TraefikTLSStoreSpecSchema: import("arktype/internal/variants/object.ts").ObjectType<{
840
+ defaultCertificate?: {
841
+ secretName: string;
842
+ };
843
+ defaultGeneratedCert?: {
844
+ resolver?: string;
845
+ domain?: {
846
+ main?: string;
847
+ sans?: string[];
848
+ };
849
+ };
850
+ certificates?: {
851
+ secretName: string;
852
+ }[];
853
+ }, {}>;
854
+ /** `TLSStore.spec`. */
855
+ export type TraefikTLSStoreSpec = typeof TraefikTLSStoreSpecSchema.infer;
856
+ /**
857
+ * Delegate authentication and authorization to an in-cluster authorizer.
858
+ *
859
+ * `address` is required although the CRD allows it to be absent: a
860
+ * `forwardAuth` with no authorizer fails every request.
861
+ *
862
+ * @security `trustForwardHeader` defaults to `false` in
863
+ * {@link TRAEFIK_FORWARD_AUTH_SECURE_DEFAULTS}: trusting `X-Forwarded-*` from
864
+ * an untrusted client lets a caller spoof its own identity. `authResponseHeaders`
865
+ * is an explicit allowlist — only the listed headers are copied from the
866
+ * authorizer response onto the upstream request.
867
+ */
868
+ export declare const TraefikForwardAuthMiddlewareSchema: import("arktype/internal/variants/object.ts").ObjectType<{
869
+ address: string;
870
+ trustForwardHeader?: boolean;
871
+ authResponseHeaders?: string[];
872
+ authResponseHeadersRegex?: string;
873
+ authRequestHeaders?: string[];
874
+ addAuthCookiesToResponse?: string[];
875
+ authSigninURL?: string;
876
+ forwardBody?: boolean;
877
+ maxBodySize?: number;
878
+ maxResponseBodySize?: number;
879
+ headerField?: string;
880
+ preserveLocationHeader?: boolean;
881
+ preserveRequestMethod?: boolean;
882
+ tls?: {
883
+ caSecret?: string;
884
+ certSecret?: string;
885
+ insecureSkipVerify?: boolean;
886
+ };
887
+ }, {}>;
888
+ /** Delegate authentication and authorization to an in-cluster authorizer. */
889
+ export type TraefikForwardAuthMiddleware = typeof TraefikForwardAuthMiddlewareSchema.infer;
890
+ /** Redis (or Valkey) backend making a rate limit shared across Traefik replicas. */
891
+ export declare const TraefikRateLimitRedisSchema: import("arktype/internal/variants/object.ts").ObjectType<{
892
+ endpoints: string[];
893
+ secret?: string;
894
+ db?: number;
895
+ poolSize?: number;
896
+ minIdleConns?: number;
897
+ maxActiveConns?: number;
898
+ dialTimeout?: string | number;
899
+ readTimeout?: string | number;
900
+ writeTimeout?: string | number;
901
+ tls?: {
902
+ caSecret?: string;
903
+ certSecret?: string;
904
+ insecureSkipVerify?: boolean;
905
+ };
906
+ }, {}>;
907
+ /** Redis (or Valkey) backend making a rate limit shared across Traefik replicas. */
908
+ export type TraefikRateLimitRedis = typeof TraefikRateLimitRedisSchema.infer;
909
+ /**
910
+ * Token-bucket rate limit.
911
+ *
912
+ * Without `redis` each Traefik replica keeps its own counters, so the effective
913
+ * limit is `average × replicas`. Supply the Redis backend whenever the budget
914
+ * must hold for the whole edge.
915
+ */
916
+ export declare const TraefikRateLimitMiddlewareSchema: import("arktype/internal/variants/object.ts").ObjectType<{
917
+ average?: number;
918
+ burst?: number;
919
+ period?: string | number;
920
+ sourceCriterion?: {
921
+ requestHeaderName?: string;
922
+ requestHost?: boolean;
923
+ ipStrategy?: {
924
+ depth?: number;
925
+ excludedIPs?: string[];
926
+ ipv6Subnet?: number;
927
+ };
928
+ };
929
+ redis?: {
930
+ endpoints: string[];
931
+ secret?: string;
932
+ db?: number;
933
+ poolSize?: number;
934
+ minIdleConns?: number;
935
+ maxActiveConns?: number;
936
+ dialTimeout?: string | number;
937
+ readTimeout?: string | number;
938
+ writeTimeout?: string | number;
939
+ tls?: {
940
+ caSecret?: string;
941
+ certSecret?: string;
942
+ insecureSkipVerify?: boolean;
943
+ };
944
+ };
945
+ }, {}>;
946
+ /** Token-bucket rate limit. */
947
+ export type TraefikRateLimitMiddleware = typeof TraefikRateLimitMiddlewareSchema.infer;
948
+ /** Cap on requests being handled concurrently, per source. */
949
+ export declare const TraefikInFlightReqMiddlewareSchema: import("arktype/internal/variants/object.ts").ObjectType<{
950
+ amount?: number;
951
+ sourceCriterion?: {
952
+ requestHeaderName?: string;
953
+ requestHost?: boolean;
954
+ ipStrategy?: {
955
+ depth?: number;
956
+ excludedIPs?: string[];
957
+ ipv6Subnet?: number;
958
+ };
959
+ };
960
+ }, {}>;
961
+ /** Cap on requests being handled concurrently, per source. */
962
+ export type TraefikInFlightReqMiddleware = typeof TraefikInFlightReqMiddlewareSchema.infer;
963
+ /**
964
+ * CORS and browser security headers.
965
+ *
966
+ * The CRD's `sslRedirect`, `sslTemporaryRedirect`, `sslHost` and `sslForceHost`
967
+ * are deliberately absent: Traefik v3 dropped them in favour of the
968
+ * `redirectScheme` middleware, and the CRD keeps them only for v2 manifests.
969
+ */
970
+ export declare const TraefikHeadersMiddlewareSchema: import("arktype/internal/variants/object.ts").ObjectType<{
971
+ customRequestHeaders?: Record<string, string>;
972
+ customResponseHeaders?: Record<string, string>;
973
+ accessControlAllowCredentials?: boolean;
974
+ accessControlAllowHeaders?: string[];
975
+ accessControlAllowMethods?: string[];
976
+ accessControlAllowOriginList?: string[];
977
+ accessControlAllowOriginListRegex?: string[];
978
+ accessControlExposeHeaders?: string[];
979
+ accessControlMaxAge?: number;
980
+ addVaryHeader?: boolean;
981
+ allowedHosts?: string[];
982
+ hostsProxyHeaders?: string[];
983
+ sslProxyHeaders?: Record<string, string>;
984
+ stsSeconds?: number;
985
+ stsIncludeSubdomains?: boolean;
986
+ stsPreload?: boolean;
987
+ forceSTSHeader?: boolean;
988
+ frameDeny?: boolean;
989
+ customFrameOptionsValue?: string;
990
+ contentTypeNosniff?: boolean;
991
+ browserXssFilter?: boolean;
992
+ customBrowserXSSValue?: string;
993
+ contentSecurityPolicy?: string;
994
+ contentSecurityPolicyReportOnly?: string;
995
+ publicKey?: string;
996
+ referrerPolicy?: string;
997
+ permissionsPolicy?: string;
998
+ featurePolicy?: string;
999
+ isDevelopment?: boolean;
1000
+ }, {}>;
1001
+ /** CORS and browser security headers. */
1002
+ export type TraefikHeadersMiddleware = typeof TraefikHeadersMiddlewareSchema.infer;
1003
+ /** Redirect a request to another scheme, e.g. `web` → `websecure`. */
1004
+ export declare const TraefikRedirectSchemeMiddlewareSchema: import("arktype/internal/variants/object.ts").ObjectType<{
1005
+ scheme: "http" | "https";
1006
+ port?: string;
1007
+ permanent?: boolean;
1008
+ }, {}>;
1009
+ /** Redirect a request to another scheme. */
1010
+ export type TraefikRedirectSchemeMiddleware = typeof TraefikRedirectSchemeMiddlewareSchema.infer;
1011
+ /** Regex-based redirect. */
1012
+ export declare const TraefikRedirectRegexMiddlewareSchema: import("arktype/internal/variants/object.ts").ObjectType<{
1013
+ regex: string;
1014
+ replacement: string;
1015
+ permanent?: boolean;
1016
+ }, {}>;
1017
+ /** Regex-based redirect. */
1018
+ export type TraefikRedirectRegexMiddleware = typeof TraefikRedirectRegexMiddlewareSchema.infer;
1019
+ /** Remove one of `prefixes` from the request path before forwarding. */
1020
+ export declare const TraefikStripPrefixMiddlewareSchema: import("arktype/internal/variants/object.ts").ObjectType<{
1021
+ prefixes: string[];
1022
+ forceSlash?: boolean;
1023
+ }, {}>;
1024
+ /** Remove one of `prefixes` from the request path before forwarding. */
1025
+ export type TraefikStripPrefixMiddleware = typeof TraefikStripPrefixMiddlewareSchema.infer;
1026
+ /** Remove a regex-matched prefix from the request path. */
1027
+ export declare const TraefikStripPrefixRegexMiddlewareSchema: import("arktype/internal/variants/object.ts").ObjectType<{
1028
+ regex: string[];
1029
+ }, {}>;
1030
+ /** Remove a regex-matched prefix from the request path. */
1031
+ export type TraefikStripPrefixRegexMiddleware = typeof TraefikStripPrefixRegexMiddlewareSchema.infer;
1032
+ /** Prepend a prefix to the request path. */
1033
+ export declare const TraefikAddPrefixMiddlewareSchema: import("arktype/internal/variants/object.ts").ObjectType<{
1034
+ prefix: string;
1035
+ }, {}>;
1036
+ /** Prepend a prefix to the request path. */
1037
+ export type TraefikAddPrefixMiddleware = typeof TraefikAddPrefixMiddlewareSchema.infer;
1038
+ /** Replace the whole request path. */
1039
+ export declare const TraefikReplacePathMiddlewareSchema: import("arktype/internal/variants/object.ts").ObjectType<{
1040
+ path: string;
1041
+ }, {}>;
1042
+ /** Replace the whole request path. */
1043
+ export type TraefikReplacePathMiddleware = typeof TraefikReplacePathMiddlewareSchema.infer;
1044
+ /** Replace a regex-matched request path. */
1045
+ export declare const TraefikReplacePathRegexMiddlewareSchema: import("arktype/internal/variants/object.ts").ObjectType<{
1046
+ regex: string;
1047
+ replacement: string;
1048
+ }, {}>;
1049
+ /** Replace a regex-matched request path. */
1050
+ export type TraefikReplacePathRegexMiddleware = typeof TraefikReplacePathRegexMiddlewareSchema.infer;
1051
+ /**
1052
+ * Body buffering and size limits.
1053
+ *
1054
+ * `maxRequestBodyBytes` is the request-size cap an edge needs so an upstream
1055
+ * cannot be flooded; a `retryExpression` requires buffering to be able to
1056
+ * replay the body.
1057
+ */
1058
+ export declare const TraefikBufferingMiddlewareSchema: import("arktype/internal/variants/object.ts").ObjectType<{
1059
+ maxRequestBodyBytes?: number;
1060
+ memRequestBodyBytes?: number;
1061
+ maxResponseBodyBytes?: number;
1062
+ memResponseBodyBytes?: number;
1063
+ retryExpression?: string;
1064
+ }, {}>;
1065
+ /** Body buffering and size limits. */
1066
+ export type TraefikBufferingMiddleware = typeof TraefikBufferingMiddlewareSchema.infer;
1067
+ /** Retry a request against the next available server. */
1068
+ export declare const TraefikRetryMiddlewareSchema: import("arktype/internal/variants/object.ts").ObjectType<{
1069
+ attempts?: number;
1070
+ initialInterval?: string | number;
1071
+ timeout?: string | number;
1072
+ status?: string[];
1073
+ maxRequestBodyBytes?: number;
1074
+ disableRetryOnNetworkError?: boolean;
1075
+ retryNonIdempotentMethod?: boolean;
1076
+ }, {}>;
1077
+ /** Retry a request against the next available server. */
1078
+ export type TraefikRetryMiddleware = typeof TraefikRetryMiddlewareSchema.infer;
1079
+ /** Trip a circuit when the guard expression evaluates true. */
1080
+ export declare const TraefikCircuitBreakerMiddlewareSchema: import("arktype/internal/variants/object.ts").ObjectType<{
1081
+ expression?: string;
1082
+ checkPeriod?: string | number;
1083
+ fallbackDuration?: string | number;
1084
+ recoveryDuration?: string | number;
1085
+ responseCode?: number;
1086
+ }, {}>;
1087
+ /** Trip a circuit when the guard expression evaluates true. */
1088
+ export type TraefikCircuitBreakerMiddleware = typeof TraefikCircuitBreakerMiddlewareSchema.infer;
1089
+ /** Allow only the listed source ranges. */
1090
+ export declare const TraefikIpAllowListMiddlewareSchema: import("arktype/internal/variants/object.ts").ObjectType<{
1091
+ sourceRange: string[];
1092
+ ipStrategy?: {
1093
+ depth?: number;
1094
+ excludedIPs?: string[];
1095
+ ipv6Subnet?: number;
1096
+ };
1097
+ rejectStatusCode?: number;
1098
+ }, {}>;
1099
+ /** Allow only the listed source ranges. */
1100
+ export type TraefikIpAllowListMiddleware = typeof TraefikIpAllowListMiddlewareSchema.infer;
1101
+ /** HTTP basic or digest auth backed by a Secret of htpasswd users. */
1102
+ export declare const TraefikCredentialAuthMiddlewareSchema: import("arktype/internal/variants/object.ts").ObjectType<{
1103
+ secret: string;
1104
+ realm?: string;
1105
+ removeHeader?: boolean;
1106
+ headerField?: string;
1107
+ }, {}>;
1108
+ /** HTTP basic or digest auth backed by a Secret of htpasswd users. */
1109
+ export type TraefikCredentialAuthMiddleware = typeof TraefikCredentialAuthMiddlewareSchema.infer;
1110
+ /** Response compression. */
1111
+ export declare const TraefikCompressMiddlewareSchema: import("arktype/internal/variants/object.ts").ObjectType<{
1112
+ encodings?: string[];
1113
+ defaultEncoding?: string;
1114
+ includedContentTypes?: string[];
1115
+ excludedContentTypes?: string[];
1116
+ minResponseBodyBytes?: number;
1117
+ }, {}>;
1118
+ /** Response compression. */
1119
+ export type TraefikCompressMiddleware = typeof TraefikCompressMiddlewareSchema.infer;
1120
+ /**
1121
+ * Serve custom error pages from another service.
1122
+ *
1123
+ * `service` is required although the CRD allows it to be absent: without a
1124
+ * backend there is nothing to serve the error page from.
1125
+ */
1126
+ export declare const TraefikErrorsMiddlewareSchema: import("arktype/internal/variants/object.ts").ObjectType<{
1127
+ service: {
1128
+ name: string;
1129
+ namespace?: string;
1130
+ kind?: "Service" | "TraefikService";
1131
+ port?: string | number;
1132
+ scheme?: string;
1133
+ weight?: number;
1134
+ strategy?: "wrr" | "p2c" | "hrw" | "leasttime" | "RoundRobin";
1135
+ passHostHeader?: boolean;
1136
+ nativeLB?: boolean;
1137
+ nodePortLB?: boolean;
1138
+ serversTransport?: string;
1139
+ sticky?: {
1140
+ cookie?: {
1141
+ name?: string;
1142
+ secure?: boolean;
1143
+ httpOnly?: boolean;
1144
+ sameSite?: "none" | "strict" | "None" | "lax" | "Lax" | "Strict";
1145
+ maxAge?: number;
1146
+ path?: string;
1147
+ domain?: string;
1148
+ };
1149
+ };
1150
+ healthCheck?: {
1151
+ path?: string;
1152
+ hostname?: string;
1153
+ scheme?: string;
1154
+ mode?: string;
1155
+ method?: string;
1156
+ status?: number;
1157
+ port?: number;
1158
+ interval?: string | number;
1159
+ unhealthyInterval?: string | number;
1160
+ timeout?: string | number;
1161
+ headers?: Record<string, string>;
1162
+ followRedirects?: boolean;
1163
+ };
1164
+ passiveHealthCheck?: {
1165
+ failureWindow?: string | number;
1166
+ maxFailedAttempts?: number;
1167
+ };
1168
+ responseForwarding?: {
1169
+ flushInterval?: string;
1170
+ };
1171
+ middlewares?: {
1172
+ name: string;
1173
+ namespace?: string;
1174
+ }[];
1175
+ };
1176
+ status?: string[];
1177
+ statusRewrites?: Record<string, number>;
1178
+ query?: string;
1179
+ errorRequestHeaders?: string[];
1180
+ }, {}>;
1181
+ /** Serve custom error pages from another service. */
1182
+ export type TraefikErrorsMiddleware = typeof TraefikErrorsMiddlewareSchema.infer;
1183
+ /** Apply an ordered list of other middlewares. */
1184
+ export declare const TraefikChainMiddlewareSchema: import("arktype/internal/variants/object.ts").ObjectType<{
1185
+ middlewares: {
1186
+ name: string;
1187
+ namespace?: string;
1188
+ }[];
1189
+ }, {}>;
1190
+ /** Apply an ordered list of other middlewares. */
1191
+ export type TraefikChainMiddleware = typeof TraefikChainMiddlewareSchema.infer;
1192
+ /** Forward client-certificate information to the upstream. */
1193
+ export declare const TraefikPassTLSClientCertMiddlewareSchema: import("arktype/internal/variants/object.ts").ObjectType<{
1194
+ pem?: boolean;
1195
+ info?: {
1196
+ notAfter?: boolean;
1197
+ notBefore?: boolean;
1198
+ sans?: boolean;
1199
+ serialNumber?: boolean;
1200
+ subject?: {
1201
+ commonName?: boolean;
1202
+ country?: boolean;
1203
+ domainComponent?: boolean;
1204
+ locality?: boolean;
1205
+ organization?: boolean;
1206
+ organizationalUnit?: boolean;
1207
+ province?: boolean;
1208
+ serialNumber?: boolean;
1209
+ };
1210
+ issuer?: {
1211
+ commonName?: boolean;
1212
+ country?: boolean;
1213
+ domainComponent?: boolean;
1214
+ locality?: boolean;
1215
+ organization?: boolean;
1216
+ province?: boolean;
1217
+ serialNumber?: boolean;
1218
+ };
1219
+ };
1220
+ }, {}>;
1221
+ /** Forward client-certificate information to the upstream. */
1222
+ export type TraefikPassTLSClientCertMiddleware = typeof TraefikPassTLSClientCertMiddlewareSchema.infer;
1223
+ /** Auto-detect the response `Content-Type` when the upstream omits it. */
1224
+ export declare const TraefikContentTypeMiddlewareSchema: import("arktype/internal/variants/object.ts").ObjectType<{
1225
+ autoDetect?: boolean;
1226
+ }, {}>;
1227
+ /** Auto-detect the response `Content-Type` when the upstream omits it. */
1228
+ export type TraefikContentTypeMiddleware = typeof TraefikContentTypeMiddlewareSchema.infer;
1229
+ /** Allow otherwise-rejected percent-encoded characters in the request path. */
1230
+ export declare const TraefikEncodedCharactersMiddlewareSchema: import("arktype/internal/variants/object.ts").ObjectType<{
1231
+ allowEncodedSlash?: boolean;
1232
+ allowEncodedBackSlash?: boolean;
1233
+ allowEncodedNullCharacter?: boolean;
1234
+ allowEncodedSemicolon?: boolean;
1235
+ allowEncodedPercent?: boolean;
1236
+ allowEncodedQuestionMark?: boolean;
1237
+ allowEncodedHash?: boolean;
1238
+ }, {}>;
1239
+ /** Allow otherwise-rejected percent-encoded characters in the request path. */
1240
+ export type TraefikEncodedCharactersMiddleware = typeof TraefikEncodedCharactersMiddlewareSchema.infer;
1241
+ /** Bridge gRPC-Web clients to a gRPC upstream. */
1242
+ export declare const TraefikGrpcWebMiddlewareSchema: import("arktype/internal/variants/object.ts").ObjectType<{
1243
+ allowOrigins?: string[];
1244
+ }, {}>;
1245
+ /** Bridge gRPC-Web clients to a gRPC upstream. */
1246
+ export type TraefikGrpcWebMiddleware = typeof TraefikGrpcWebMiddlewareSchema.infer;
1247
+ /**
1248
+ * A Traefik plugin middleware.
1249
+ *
1250
+ * Keyed by the plugin name declared in `experimental.plugins`; the value shape
1251
+ * belongs to the plugin itself. This is one of the boundaries where `unknown`
1252
+ * is correct rather than lazy — the CRD marks it
1253
+ * `x-kubernetes-preserve-unknown-fields`, so there is no schema to model.
1254
+ */
1255
+ export declare const TraefikPluginMiddlewareSchema: import("arktype/internal/variants/object.ts").ObjectType<Record<string, unknown>, {}>;
1256
+ /** A Traefik plugin middleware, keyed by plugin name. */
1257
+ export type TraefikPluginMiddleware = typeof TraefikPluginMiddlewareSchema.infer;
1258
+ /**
1259
+ * Every OSS middleware keyed by its CRD field name, all keys optional.
1260
+ *
1261
+ * A `Middleware` object carries exactly one of them, which
1262
+ * {@link TraefikMiddlewareSpecSchema} enforces with `.narrow()` while keeping
1263
+ * this base object shape intact so KRO SimpleSchema generation can still
1264
+ * discover the fields.
1265
+ */
1266
+ declare const TraefikMiddlewareSpecMapSchema: import("arktype/internal/variants/object.ts").ObjectType<{
1267
+ addPrefix?: {
1268
+ prefix: string;
1269
+ };
1270
+ basicAuth?: {
1271
+ secret: string;
1272
+ realm?: string;
1273
+ removeHeader?: boolean;
1274
+ headerField?: string;
1275
+ };
1276
+ buffering?: {
1277
+ maxRequestBodyBytes?: number;
1278
+ memRequestBodyBytes?: number;
1279
+ maxResponseBodyBytes?: number;
1280
+ memResponseBodyBytes?: number;
1281
+ retryExpression?: string;
1282
+ };
1283
+ chain?: {
1284
+ middlewares: {
1285
+ name: string;
1286
+ namespace?: string;
1287
+ }[];
1288
+ };
1289
+ circuitBreaker?: {
1290
+ expression?: string;
1291
+ checkPeriod?: string | number;
1292
+ fallbackDuration?: string | number;
1293
+ recoveryDuration?: string | number;
1294
+ responseCode?: number;
1295
+ };
1296
+ compress?: {
1297
+ encodings?: string[];
1298
+ defaultEncoding?: string;
1299
+ includedContentTypes?: string[];
1300
+ excludedContentTypes?: string[];
1301
+ minResponseBodyBytes?: number;
1302
+ };
1303
+ contentType?: {
1304
+ autoDetect?: boolean;
1305
+ };
1306
+ digestAuth?: {
1307
+ secret: string;
1308
+ realm?: string;
1309
+ removeHeader?: boolean;
1310
+ headerField?: string;
1311
+ };
1312
+ encodedCharacters?: {
1313
+ allowEncodedSlash?: boolean;
1314
+ allowEncodedBackSlash?: boolean;
1315
+ allowEncodedNullCharacter?: boolean;
1316
+ allowEncodedSemicolon?: boolean;
1317
+ allowEncodedPercent?: boolean;
1318
+ allowEncodedQuestionMark?: boolean;
1319
+ allowEncodedHash?: boolean;
1320
+ };
1321
+ errors?: {
1322
+ service: {
1323
+ name: string;
1324
+ namespace?: string;
1325
+ kind?: "Service" | "TraefikService";
1326
+ port?: string | number;
1327
+ scheme?: string;
1328
+ weight?: number;
1329
+ strategy?: "wrr" | "p2c" | "hrw" | "leasttime" | "RoundRobin";
1330
+ passHostHeader?: boolean;
1331
+ nativeLB?: boolean;
1332
+ nodePortLB?: boolean;
1333
+ serversTransport?: string;
1334
+ sticky?: {
1335
+ cookie?: {
1336
+ name?: string;
1337
+ secure?: boolean;
1338
+ httpOnly?: boolean;
1339
+ sameSite?: "none" | "strict" | "None" | "lax" | "Lax" | "Strict";
1340
+ maxAge?: number;
1341
+ path?: string;
1342
+ domain?: string;
1343
+ };
1344
+ };
1345
+ healthCheck?: {
1346
+ path?: string;
1347
+ hostname?: string;
1348
+ scheme?: string;
1349
+ mode?: string;
1350
+ method?: string;
1351
+ status?: number;
1352
+ port?: number;
1353
+ interval?: string | number;
1354
+ unhealthyInterval?: string | number;
1355
+ timeout?: string | number;
1356
+ headers?: Record<string, string>;
1357
+ followRedirects?: boolean;
1358
+ };
1359
+ passiveHealthCheck?: {
1360
+ failureWindow?: string | number;
1361
+ maxFailedAttempts?: number;
1362
+ };
1363
+ responseForwarding?: {
1364
+ flushInterval?: string;
1365
+ };
1366
+ middlewares?: {
1367
+ name: string;
1368
+ namespace?: string;
1369
+ }[];
1370
+ };
1371
+ status?: string[];
1372
+ statusRewrites?: Record<string, number>;
1373
+ query?: string;
1374
+ errorRequestHeaders?: string[];
1375
+ };
1376
+ forwardAuth?: {
1377
+ address: string;
1378
+ trustForwardHeader?: boolean;
1379
+ authResponseHeaders?: string[];
1380
+ authResponseHeadersRegex?: string;
1381
+ authRequestHeaders?: string[];
1382
+ addAuthCookiesToResponse?: string[];
1383
+ authSigninURL?: string;
1384
+ forwardBody?: boolean;
1385
+ maxBodySize?: number;
1386
+ maxResponseBodySize?: number;
1387
+ headerField?: string;
1388
+ preserveLocationHeader?: boolean;
1389
+ preserveRequestMethod?: boolean;
1390
+ tls?: {
1391
+ caSecret?: string;
1392
+ certSecret?: string;
1393
+ insecureSkipVerify?: boolean;
1394
+ };
1395
+ };
1396
+ grpcWeb?: {
1397
+ allowOrigins?: string[];
1398
+ };
1399
+ headers?: {
1400
+ customRequestHeaders?: Record<string, string>;
1401
+ customResponseHeaders?: Record<string, string>;
1402
+ accessControlAllowCredentials?: boolean;
1403
+ accessControlAllowHeaders?: string[];
1404
+ accessControlAllowMethods?: string[];
1405
+ accessControlAllowOriginList?: string[];
1406
+ accessControlAllowOriginListRegex?: string[];
1407
+ accessControlExposeHeaders?: string[];
1408
+ accessControlMaxAge?: number;
1409
+ addVaryHeader?: boolean;
1410
+ allowedHosts?: string[];
1411
+ hostsProxyHeaders?: string[];
1412
+ sslProxyHeaders?: Record<string, string>;
1413
+ stsSeconds?: number;
1414
+ stsIncludeSubdomains?: boolean;
1415
+ stsPreload?: boolean;
1416
+ forceSTSHeader?: boolean;
1417
+ frameDeny?: boolean;
1418
+ customFrameOptionsValue?: string;
1419
+ contentTypeNosniff?: boolean;
1420
+ browserXssFilter?: boolean;
1421
+ customBrowserXSSValue?: string;
1422
+ contentSecurityPolicy?: string;
1423
+ contentSecurityPolicyReportOnly?: string;
1424
+ publicKey?: string;
1425
+ referrerPolicy?: string;
1426
+ permissionsPolicy?: string;
1427
+ featurePolicy?: string;
1428
+ isDevelopment?: boolean;
1429
+ };
1430
+ inFlightReq?: {
1431
+ amount?: number;
1432
+ sourceCriterion?: {
1433
+ requestHeaderName?: string;
1434
+ requestHost?: boolean;
1435
+ ipStrategy?: {
1436
+ depth?: number;
1437
+ excludedIPs?: string[];
1438
+ ipv6Subnet?: number;
1439
+ };
1440
+ };
1441
+ };
1442
+ ipAllowList?: {
1443
+ sourceRange: string[];
1444
+ ipStrategy?: {
1445
+ depth?: number;
1446
+ excludedIPs?: string[];
1447
+ ipv6Subnet?: number;
1448
+ };
1449
+ rejectStatusCode?: number;
1450
+ };
1451
+ passTLSClientCert?: {
1452
+ pem?: boolean;
1453
+ info?: {
1454
+ notAfter?: boolean;
1455
+ notBefore?: boolean;
1456
+ sans?: boolean;
1457
+ serialNumber?: boolean;
1458
+ subject?: {
1459
+ commonName?: boolean;
1460
+ country?: boolean;
1461
+ domainComponent?: boolean;
1462
+ locality?: boolean;
1463
+ organization?: boolean;
1464
+ organizationalUnit?: boolean;
1465
+ province?: boolean;
1466
+ serialNumber?: boolean;
1467
+ };
1468
+ issuer?: {
1469
+ commonName?: boolean;
1470
+ country?: boolean;
1471
+ domainComponent?: boolean;
1472
+ locality?: boolean;
1473
+ organization?: boolean;
1474
+ province?: boolean;
1475
+ serialNumber?: boolean;
1476
+ };
1477
+ };
1478
+ };
1479
+ plugin?: Record<string, unknown>;
1480
+ rateLimit?: {
1481
+ average?: number;
1482
+ burst?: number;
1483
+ period?: string | number;
1484
+ sourceCriterion?: {
1485
+ requestHeaderName?: string;
1486
+ requestHost?: boolean;
1487
+ ipStrategy?: {
1488
+ depth?: number;
1489
+ excludedIPs?: string[];
1490
+ ipv6Subnet?: number;
1491
+ };
1492
+ };
1493
+ redis?: {
1494
+ endpoints: string[];
1495
+ secret?: string;
1496
+ db?: number;
1497
+ poolSize?: number;
1498
+ minIdleConns?: number;
1499
+ maxActiveConns?: number;
1500
+ dialTimeout?: string | number;
1501
+ readTimeout?: string | number;
1502
+ writeTimeout?: string | number;
1503
+ tls?: {
1504
+ caSecret?: string;
1505
+ certSecret?: string;
1506
+ insecureSkipVerify?: boolean;
1507
+ };
1508
+ };
1509
+ };
1510
+ redirectRegex?: {
1511
+ regex: string;
1512
+ replacement: string;
1513
+ permanent?: boolean;
1514
+ };
1515
+ redirectScheme?: {
1516
+ scheme: "http" | "https";
1517
+ port?: string;
1518
+ permanent?: boolean;
1519
+ };
1520
+ replacePath?: {
1521
+ path: string;
1522
+ };
1523
+ replacePathRegex?: {
1524
+ regex: string;
1525
+ replacement: string;
1526
+ };
1527
+ retry?: {
1528
+ attempts?: number;
1529
+ initialInterval?: string | number;
1530
+ timeout?: string | number;
1531
+ status?: string[];
1532
+ maxRequestBodyBytes?: number;
1533
+ disableRetryOnNetworkError?: boolean;
1534
+ retryNonIdempotentMethod?: boolean;
1535
+ };
1536
+ stripPrefix?: {
1537
+ prefixes: string[];
1538
+ forceSlash?: boolean;
1539
+ };
1540
+ stripPrefixRegex?: {
1541
+ regex: string[];
1542
+ };
1543
+ }, {}>;
1544
+ /** Every OSS middleware keyed by its CRD field name. */
1545
+ export type TraefikMiddlewareSpecMap = AllPresent<typeof TraefikMiddlewareSpecMapSchema.infer>;
1546
+ /** The name of one middleware kind. */
1547
+ export type TraefikMiddlewareKind = keyof TraefikMiddlewareSpecMap;
1548
+ /**
1549
+ * `Middleware.spec` — exactly one middleware kind.
1550
+ *
1551
+ * The exactly-one invariant is a schema-level `.narrow()` rather than only a
1552
+ * factory guard, per `integration-skill.md` ("Schema invariants"): two keys in
1553
+ * one object is not a merge — Traefik applies one and silently drops the other.
1554
+ * The narrow delegates to {@link validateTraefikMiddlewareSpec} so the rule has
1555
+ * exactly one runtime implementation.
1556
+ */
1557
+ export declare const TraefikMiddlewareSpecSchema: import("arktype/internal/variants/object.ts").ObjectType<{
1558
+ addPrefix?: {
1559
+ prefix: string;
1560
+ };
1561
+ basicAuth?: {
1562
+ secret: string;
1563
+ realm?: string;
1564
+ removeHeader?: boolean;
1565
+ headerField?: string;
1566
+ };
1567
+ buffering?: {
1568
+ maxRequestBodyBytes?: number;
1569
+ memRequestBodyBytes?: number;
1570
+ maxResponseBodyBytes?: number;
1571
+ memResponseBodyBytes?: number;
1572
+ retryExpression?: string;
1573
+ };
1574
+ chain?: {
1575
+ middlewares: {
1576
+ name: string;
1577
+ namespace?: string;
1578
+ }[];
1579
+ };
1580
+ circuitBreaker?: {
1581
+ expression?: string;
1582
+ checkPeriod?: string | number;
1583
+ fallbackDuration?: string | number;
1584
+ recoveryDuration?: string | number;
1585
+ responseCode?: number;
1586
+ };
1587
+ compress?: {
1588
+ encodings?: string[];
1589
+ defaultEncoding?: string;
1590
+ includedContentTypes?: string[];
1591
+ excludedContentTypes?: string[];
1592
+ minResponseBodyBytes?: number;
1593
+ };
1594
+ contentType?: {
1595
+ autoDetect?: boolean;
1596
+ };
1597
+ digestAuth?: {
1598
+ secret: string;
1599
+ realm?: string;
1600
+ removeHeader?: boolean;
1601
+ headerField?: string;
1602
+ };
1603
+ encodedCharacters?: {
1604
+ allowEncodedSlash?: boolean;
1605
+ allowEncodedBackSlash?: boolean;
1606
+ allowEncodedNullCharacter?: boolean;
1607
+ allowEncodedSemicolon?: boolean;
1608
+ allowEncodedPercent?: boolean;
1609
+ allowEncodedQuestionMark?: boolean;
1610
+ allowEncodedHash?: boolean;
1611
+ };
1612
+ errors?: {
1613
+ service: {
1614
+ name: string;
1615
+ namespace?: string;
1616
+ kind?: "Service" | "TraefikService";
1617
+ port?: string | number;
1618
+ scheme?: string;
1619
+ weight?: number;
1620
+ strategy?: "wrr" | "p2c" | "hrw" | "leasttime" | "RoundRobin";
1621
+ passHostHeader?: boolean;
1622
+ nativeLB?: boolean;
1623
+ nodePortLB?: boolean;
1624
+ serversTransport?: string;
1625
+ sticky?: {
1626
+ cookie?: {
1627
+ name?: string;
1628
+ secure?: boolean;
1629
+ httpOnly?: boolean;
1630
+ sameSite?: "none" | "strict" | "None" | "lax" | "Lax" | "Strict";
1631
+ maxAge?: number;
1632
+ path?: string;
1633
+ domain?: string;
1634
+ };
1635
+ };
1636
+ healthCheck?: {
1637
+ path?: string;
1638
+ hostname?: string;
1639
+ scheme?: string;
1640
+ mode?: string;
1641
+ method?: string;
1642
+ status?: number;
1643
+ port?: number;
1644
+ interval?: string | number;
1645
+ unhealthyInterval?: string | number;
1646
+ timeout?: string | number;
1647
+ headers?: Record<string, string>;
1648
+ followRedirects?: boolean;
1649
+ };
1650
+ passiveHealthCheck?: {
1651
+ failureWindow?: string | number;
1652
+ maxFailedAttempts?: number;
1653
+ };
1654
+ responseForwarding?: {
1655
+ flushInterval?: string;
1656
+ };
1657
+ middlewares?: {
1658
+ name: string;
1659
+ namespace?: string;
1660
+ }[];
1661
+ };
1662
+ status?: string[];
1663
+ statusRewrites?: Record<string, number>;
1664
+ query?: string;
1665
+ errorRequestHeaders?: string[];
1666
+ };
1667
+ forwardAuth?: {
1668
+ address: string;
1669
+ trustForwardHeader?: boolean;
1670
+ authResponseHeaders?: string[];
1671
+ authResponseHeadersRegex?: string;
1672
+ authRequestHeaders?: string[];
1673
+ addAuthCookiesToResponse?: string[];
1674
+ authSigninURL?: string;
1675
+ forwardBody?: boolean;
1676
+ maxBodySize?: number;
1677
+ maxResponseBodySize?: number;
1678
+ headerField?: string;
1679
+ preserveLocationHeader?: boolean;
1680
+ preserveRequestMethod?: boolean;
1681
+ tls?: {
1682
+ caSecret?: string;
1683
+ certSecret?: string;
1684
+ insecureSkipVerify?: boolean;
1685
+ };
1686
+ };
1687
+ grpcWeb?: {
1688
+ allowOrigins?: string[];
1689
+ };
1690
+ headers?: {
1691
+ customRequestHeaders?: Record<string, string>;
1692
+ customResponseHeaders?: Record<string, string>;
1693
+ accessControlAllowCredentials?: boolean;
1694
+ accessControlAllowHeaders?: string[];
1695
+ accessControlAllowMethods?: string[];
1696
+ accessControlAllowOriginList?: string[];
1697
+ accessControlAllowOriginListRegex?: string[];
1698
+ accessControlExposeHeaders?: string[];
1699
+ accessControlMaxAge?: number;
1700
+ addVaryHeader?: boolean;
1701
+ allowedHosts?: string[];
1702
+ hostsProxyHeaders?: string[];
1703
+ sslProxyHeaders?: Record<string, string>;
1704
+ stsSeconds?: number;
1705
+ stsIncludeSubdomains?: boolean;
1706
+ stsPreload?: boolean;
1707
+ forceSTSHeader?: boolean;
1708
+ frameDeny?: boolean;
1709
+ customFrameOptionsValue?: string;
1710
+ contentTypeNosniff?: boolean;
1711
+ browserXssFilter?: boolean;
1712
+ customBrowserXSSValue?: string;
1713
+ contentSecurityPolicy?: string;
1714
+ contentSecurityPolicyReportOnly?: string;
1715
+ publicKey?: string;
1716
+ referrerPolicy?: string;
1717
+ permissionsPolicy?: string;
1718
+ featurePolicy?: string;
1719
+ isDevelopment?: boolean;
1720
+ };
1721
+ inFlightReq?: {
1722
+ amount?: number;
1723
+ sourceCriterion?: {
1724
+ requestHeaderName?: string;
1725
+ requestHost?: boolean;
1726
+ ipStrategy?: {
1727
+ depth?: number;
1728
+ excludedIPs?: string[];
1729
+ ipv6Subnet?: number;
1730
+ };
1731
+ };
1732
+ };
1733
+ ipAllowList?: {
1734
+ sourceRange: string[];
1735
+ ipStrategy?: {
1736
+ depth?: number;
1737
+ excludedIPs?: string[];
1738
+ ipv6Subnet?: number;
1739
+ };
1740
+ rejectStatusCode?: number;
1741
+ };
1742
+ passTLSClientCert?: {
1743
+ pem?: boolean;
1744
+ info?: {
1745
+ notAfter?: boolean;
1746
+ notBefore?: boolean;
1747
+ sans?: boolean;
1748
+ serialNumber?: boolean;
1749
+ subject?: {
1750
+ commonName?: boolean;
1751
+ country?: boolean;
1752
+ domainComponent?: boolean;
1753
+ locality?: boolean;
1754
+ organization?: boolean;
1755
+ organizationalUnit?: boolean;
1756
+ province?: boolean;
1757
+ serialNumber?: boolean;
1758
+ };
1759
+ issuer?: {
1760
+ commonName?: boolean;
1761
+ country?: boolean;
1762
+ domainComponent?: boolean;
1763
+ locality?: boolean;
1764
+ organization?: boolean;
1765
+ province?: boolean;
1766
+ serialNumber?: boolean;
1767
+ };
1768
+ };
1769
+ };
1770
+ plugin?: Record<string, unknown>;
1771
+ rateLimit?: {
1772
+ average?: number;
1773
+ burst?: number;
1774
+ period?: string | number;
1775
+ sourceCriterion?: {
1776
+ requestHeaderName?: string;
1777
+ requestHost?: boolean;
1778
+ ipStrategy?: {
1779
+ depth?: number;
1780
+ excludedIPs?: string[];
1781
+ ipv6Subnet?: number;
1782
+ };
1783
+ };
1784
+ redis?: {
1785
+ endpoints: string[];
1786
+ secret?: string;
1787
+ db?: number;
1788
+ poolSize?: number;
1789
+ minIdleConns?: number;
1790
+ maxActiveConns?: number;
1791
+ dialTimeout?: string | number;
1792
+ readTimeout?: string | number;
1793
+ writeTimeout?: string | number;
1794
+ tls?: {
1795
+ caSecret?: string;
1796
+ certSecret?: string;
1797
+ insecureSkipVerify?: boolean;
1798
+ };
1799
+ };
1800
+ };
1801
+ redirectRegex?: {
1802
+ regex: string;
1803
+ replacement: string;
1804
+ permanent?: boolean;
1805
+ };
1806
+ redirectScheme?: {
1807
+ scheme: "http" | "https";
1808
+ port?: string;
1809
+ permanent?: boolean;
1810
+ };
1811
+ replacePath?: {
1812
+ path: string;
1813
+ };
1814
+ replacePathRegex?: {
1815
+ regex: string;
1816
+ replacement: string;
1817
+ };
1818
+ retry?: {
1819
+ attempts?: number;
1820
+ initialInterval?: string | number;
1821
+ timeout?: string | number;
1822
+ status?: string[];
1823
+ maxRequestBodyBytes?: number;
1824
+ disableRetryOnNetworkError?: boolean;
1825
+ retryNonIdempotentMethod?: boolean;
1826
+ };
1827
+ stripPrefix?: {
1828
+ prefixes: string[];
1829
+ forceSlash?: boolean;
1830
+ };
1831
+ stripPrefixRegex?: {
1832
+ regex: string[];
1833
+ };
1834
+ }, {}>;
1835
+ /**
1836
+ * Exactly one key of `TMap`, with every other key typed `never`.
1837
+ *
1838
+ * The compile-time counterpart to the schema's `.narrow()`: this is what makes
1839
+ * `{ forwardAuth: ..., rateLimit: ... }` a compile error.
1840
+ */
1841
+ type ExactlyOne<TMap> = {
1842
+ [K in keyof TMap]: {
1843
+ readonly [P in K]: TMap[P];
1844
+ } & {
1845
+ readonly [P in Exclude<keyof TMap, K>]?: never;
1846
+ };
1847
+ }[keyof TMap];
1848
+ /** `Middleware.spec` — exactly one middleware kind. */
1849
+ export type TraefikMiddlewareSpec = ExactlyOne<TraefikMiddlewareSpecMap>;
1850
+ /**
1851
+ * Secure `forwardAuth` defaults applied by
1852
+ * `traefikForwardAuthMiddleware` (#172).
1853
+ *
1854
+ * @security `trustForwardHeader: false` means Traefik does not pass the
1855
+ * client's own `X-Forwarded-*` headers to the authorizer, so a caller cannot
1856
+ * assert its own identity or source address.
1857
+ */
1858
+ export declare const TRAEFIK_FORWARD_AUTH_SECURE_DEFAULTS: {
1859
+ readonly trustForwardHeader: false;
1860
+ };
1861
+ /**
1862
+ * Identity of a namespaced Traefik CRD, without its behaviour.
1863
+ *
1864
+ * Extracted as a shape rather than re-declared per factory so the middleware
1865
+ * builders' configs and {@link TraefikResourceConfig} cannot drift apart.
1866
+ *
1867
+ * These schemas are the source of truth for the TYPES and the target of the
1868
+ * schema tests; the factories do not run them over their input, because inside
1869
+ * a composition `name` may be a `KubernetesRef` proxy rather than a string and
1870
+ * every one of these constraints would reject it.
1871
+ */
1872
+ export declare const traefikResourceMetadataShape: {
1873
+ readonly name: import("arktype/internal/variants/string.ts").StringType<string, {}>;
1874
+ readonly namespace: import("arktype/internal/variants/string.ts").StringType<string, {}>;
1875
+ /** Extra labels merged onto the managed label set. */
1876
+ readonly 'labels?': "Record<string, string>";
1877
+ readonly 'annotations?': "Record<string, string>";
1878
+ /** Resource graph id. Required when `name` is a schema reference. */
1879
+ readonly 'id?': "string > 0";
1880
+ };
1881
+ /** Identity of a namespaced Traefik CRD, without its behaviour. */
1882
+ export declare const TraefikResourceMetadataSchema: import("arktype/internal/variants/object.ts").ObjectType<{
1883
+ name: string;
1884
+ namespace: string;
1885
+ labels?: Record<string, string>;
1886
+ annotations?: Record<string, string>;
1887
+ id?: string;
1888
+ }, {}>;
1889
+ /** Identity of a namespaced Traefik CRD, without its behaviour. */
1890
+ export type TraefikResourceMetadata = typeof TraefikResourceMetadataSchema.infer;
1891
+ /**
1892
+ * Configuration for `traefikGatewayClass`.
1893
+ *
1894
+ * A `GatewayClass` is cluster-scoped, and its spec is pinned to Traefik's
1895
+ * controller by the factory rather than supplied by the caller, so this config
1896
+ * is the shared Gateway API identity shape plus one Traefik-specific field —
1897
+ * fully inferred, with no `spec` to parameterise.
1898
+ */
1899
+ export declare const TraefikGatewayClassConfigSchema: import("arktype/internal/variants/object.ts").ObjectType<{
1900
+ name: string;
1901
+ description?: string;
1902
+ labels?: Record<string, string>;
1903
+ annotations?: Record<string, string>;
1904
+ id?: string;
1905
+ }, {}>;
1906
+ /** Configuration for `traefikGatewayClass`. */
1907
+ export type TraefikGatewayClassConfig = typeof TraefikGatewayClassConfigSchema.infer;
1908
+ /** Identity of a `Middleware`, without its behavior. */
1909
+ export declare const TraefikMiddlewareMetadataSchema: import("arktype/internal/variants/object.ts").ObjectType<{
1910
+ name: string;
1911
+ namespace: string;
1912
+ labels?: Record<string, string>;
1913
+ annotations?: Record<string, string>;
1914
+ id?: string;
1915
+ }, {}>;
1916
+ /** Identity of a `Middleware`, without its behavior. */
1917
+ export type TraefikMiddlewareMetadata = TraefikResourceMetadata;
1918
+ /**
1919
+ * Configuration for `traefikForwardAuthMiddleware`.
1920
+ *
1921
+ * `authResponseHeaders` is REQUIRED here although the CRD leaves it optional:
1922
+ * an implicit "copy everything" would let an authorizer bug leak headers to
1923
+ * the upstream, and a route with no allowlist silently drops the principal the
1924
+ * upstream expects.
1925
+ */
1926
+ export declare const TraefikForwardAuthMiddlewareConfigSchema: import("arktype/internal/variants/object.ts").ObjectType<{
1927
+ address: string;
1928
+ authResponseHeaders: string[];
1929
+ name: string;
1930
+ namespace: string;
1931
+ authRequestHeaders?: string[];
1932
+ trustForwardHeader?: boolean;
1933
+ forwardBody?: boolean;
1934
+ maxBodySize?: number;
1935
+ tls?: {
1936
+ caSecret?: string;
1937
+ certSecret?: string;
1938
+ insecureSkipVerify?: boolean;
1939
+ };
1940
+ labels?: Record<string, string>;
1941
+ annotations?: Record<string, string>;
1942
+ id?: string;
1943
+ }, {}>;
1944
+ /** Configuration for `traefikForwardAuthMiddleware`. */
1945
+ export type TraefikForwardAuthMiddlewareConfig = typeof TraefikForwardAuthMiddlewareConfigSchema.infer;
1946
+ /** Configuration for `traefikRateLimitMiddleware`. */
1947
+ export declare const TraefikRateLimitMiddlewareConfigSchema: import("arktype/internal/variants/object.ts").ObjectType<{
1948
+ average: number;
1949
+ burst: number;
1950
+ name: string;
1951
+ namespace: string;
1952
+ period?: string;
1953
+ redis?: {
1954
+ endpoints: string[];
1955
+ secret?: string;
1956
+ db?: number;
1957
+ poolSize?: number;
1958
+ minIdleConns?: number;
1959
+ maxActiveConns?: number;
1960
+ dialTimeout?: string | number;
1961
+ readTimeout?: string | number;
1962
+ writeTimeout?: string | number;
1963
+ tls?: {
1964
+ caSecret?: string;
1965
+ certSecret?: string;
1966
+ insecureSkipVerify?: boolean;
1967
+ };
1968
+ };
1969
+ requestHeaderName?: string;
1970
+ sourceCriterion?: {
1971
+ requestHeaderName?: string;
1972
+ requestHost?: boolean;
1973
+ ipStrategy?: {
1974
+ depth?: number;
1975
+ excludedIPs?: string[];
1976
+ ipv6Subnet?: number;
1977
+ };
1978
+ };
1979
+ labels?: Record<string, string>;
1980
+ annotations?: Record<string, string>;
1981
+ id?: string;
1982
+ }, {}>;
1983
+ /** Configuration for `traefikRateLimitMiddleware`. */
1984
+ export type TraefikRateLimitMiddlewareConfig = typeof TraefikRateLimitMiddlewareConfigSchema.infer;
1985
+ /** Configuration for `traefikInFlightReqMiddleware`. */
1986
+ export declare const TraefikInFlightReqMiddlewareConfigSchema: import("arktype/internal/variants/object.ts").ObjectType<{
1987
+ amount: number;
1988
+ name: string;
1989
+ namespace: string;
1990
+ requestHeaderName?: string;
1991
+ sourceCriterion?: {
1992
+ requestHeaderName?: string;
1993
+ requestHost?: boolean;
1994
+ ipStrategy?: {
1995
+ depth?: number;
1996
+ excludedIPs?: string[];
1997
+ ipv6Subnet?: number;
1998
+ };
1999
+ };
2000
+ labels?: Record<string, string>;
2001
+ annotations?: Record<string, string>;
2002
+ id?: string;
2003
+ }, {}>;
2004
+ /** Configuration for `traefikInFlightReqMiddleware`. */
2005
+ export type TraefikInFlightReqMiddlewareConfig = typeof TraefikInFlightReqMiddlewareConfigSchema.infer;
2006
+ /** Configuration for `traefikHeadersMiddleware`. */
2007
+ export declare const TraefikHeadersMiddlewareConfigSchema: import("arktype/internal/variants/object.ts").ObjectType<{
2008
+ headers: {
2009
+ customRequestHeaders?: Record<string, string>;
2010
+ customResponseHeaders?: Record<string, string>;
2011
+ accessControlAllowCredentials?: boolean;
2012
+ accessControlAllowHeaders?: string[];
2013
+ accessControlAllowMethods?: string[];
2014
+ accessControlAllowOriginList?: string[];
2015
+ accessControlAllowOriginListRegex?: string[];
2016
+ accessControlExposeHeaders?: string[];
2017
+ accessControlMaxAge?: number;
2018
+ addVaryHeader?: boolean;
2019
+ allowedHosts?: string[];
2020
+ hostsProxyHeaders?: string[];
2021
+ sslProxyHeaders?: Record<string, string>;
2022
+ stsSeconds?: number;
2023
+ stsIncludeSubdomains?: boolean;
2024
+ stsPreload?: boolean;
2025
+ forceSTSHeader?: boolean;
2026
+ frameDeny?: boolean;
2027
+ customFrameOptionsValue?: string;
2028
+ contentTypeNosniff?: boolean;
2029
+ browserXssFilter?: boolean;
2030
+ customBrowserXSSValue?: string;
2031
+ contentSecurityPolicy?: string;
2032
+ contentSecurityPolicyReportOnly?: string;
2033
+ publicKey?: string;
2034
+ referrerPolicy?: string;
2035
+ permissionsPolicy?: string;
2036
+ featurePolicy?: string;
2037
+ isDevelopment?: boolean;
2038
+ };
2039
+ name: string;
2040
+ namespace: string;
2041
+ labels?: Record<string, string>;
2042
+ annotations?: Record<string, string>;
2043
+ id?: string;
2044
+ }, {}>;
2045
+ /** Configuration for `traefikHeadersMiddleware`. */
2046
+ export type TraefikHeadersMiddlewareConfig = typeof TraefikHeadersMiddlewareConfigSchema.infer;
2047
+ /** Configuration for `traefikRedirectSchemeMiddleware`. */
2048
+ export declare const TraefikRedirectSchemeMiddlewareConfigSchema: import("arktype/internal/variants/object.ts").ObjectType<{
2049
+ name: string;
2050
+ namespace: string;
2051
+ scheme?: "http" | "https";
2052
+ permanent?: boolean;
2053
+ port?: string;
2054
+ labels?: Record<string, string>;
2055
+ annotations?: Record<string, string>;
2056
+ id?: string;
2057
+ }, {}>;
2058
+ /** Configuration for `traefikRedirectSchemeMiddleware`. */
2059
+ export type TraefikRedirectSchemeMiddlewareConfig = typeof TraefikRedirectSchemeMiddlewareConfigSchema.infer;
2060
+ /** Configuration for `traefikBufferingMiddleware`. */
2061
+ export declare const TraefikBufferingMiddlewareConfigSchema: import("arktype/internal/variants/object.ts").ObjectType<{
2062
+ buffering: {
2063
+ maxRequestBodyBytes?: number;
2064
+ memRequestBodyBytes?: number;
2065
+ maxResponseBodyBytes?: number;
2066
+ memResponseBodyBytes?: number;
2067
+ retryExpression?: string;
2068
+ };
2069
+ name: string;
2070
+ namespace: string;
2071
+ labels?: Record<string, string>;
2072
+ annotations?: Record<string, string>;
2073
+ id?: string;
2074
+ }, {}>;
2075
+ /** Configuration for `traefikBufferingMiddleware`. */
2076
+ export type TraefikBufferingMiddlewareConfig = typeof TraefikBufferingMiddlewareConfigSchema.infer;
2077
+ /** Configuration for `traefikChainMiddleware`. */
2078
+ export declare const TraefikChainMiddlewareConfigSchema: import("arktype/internal/variants/object.ts").ObjectType<{
2079
+ middlewares: {
2080
+ name: string;
2081
+ namespace?: string;
2082
+ }[];
2083
+ name: string;
2084
+ namespace: string;
2085
+ labels?: Record<string, string>;
2086
+ annotations?: Record<string, string>;
2087
+ id?: string;
2088
+ }, {}>;
2089
+ /** Configuration for `traefikChainMiddleware`. */
2090
+ export type TraefikChainMiddlewareConfig = typeof TraefikChainMiddlewareConfigSchema.infer;
2091
+ /** Kubernetes Service type usable for the Traefik entrypoint Service. */
2092
+ export type TraefikServiceType = 'LoadBalancer' | 'NodePort' | 'ClusterIP';
2093
+ /** A pod or container seccomp profile. */
2094
+ export interface TraefikSeccompProfile {
2095
+ type: 'RuntimeDefault' | 'Unconfined' | 'Localhost';
2096
+ localhostProfile?: string;
2097
+ }
2098
+ /**
2099
+ * Pod-level security context (chart `podSecurityContext`).
2100
+ *
2101
+ * Extends the repository's shared {@link SecurityContext} with the seccomp
2102
+ * profile the chart exposes and this factory pins.
2103
+ */
2104
+ export interface TraefikPodSecurityContext extends SecurityContext {
2105
+ seccompProfile?: TraefikSeccompProfile;
2106
+ }
2107
+ /**
2108
+ * Container-level security context (chart `securityContext`).
2109
+ *
2110
+ * Extends the shared {@link SecurityContext} with the container-only fields
2111
+ * this factory pins: no privilege escalation, a read-only root filesystem, and
2112
+ * all capabilities dropped.
2113
+ */
2114
+ export interface TraefikContainerSecurityContext extends SecurityContext {
2115
+ allowPrivilegeEscalation?: boolean;
2116
+ readOnlyRootFilesystem?: boolean;
2117
+ privileged?: boolean;
2118
+ capabilities?: {
2119
+ add?: string[];
2120
+ drop?: string[];
2121
+ };
2122
+ seccompProfile?: TraefikSeccompProfile;
2123
+ }
2124
+ /** One `topologySpreadConstraints[]` entry as the chart forwards it. */
2125
+ export interface TraefikTopologySpreadConstraint {
2126
+ maxSkew: number;
2127
+ topologyKey: string;
2128
+ whenUnsatisfiable: 'DoNotSchedule' | 'ScheduleAnyway';
2129
+ labelSelector?: LabelSelector;
2130
+ minDomains?: number;
2131
+ matchLabelKeys?: string[];
2132
+ nodeAffinityPolicy?: 'Honor' | 'Ignore';
2133
+ nodeTaintsPolicy?: 'Honor' | 'Ignore';
2134
+ }
2135
+ /** TLS material an OTLP exporter presents to the collector. */
2136
+ export interface TraefikOtlpTlsValues {
2137
+ ca?: string;
2138
+ cert?: string;
2139
+ key?: string;
2140
+ insecureSkipVerify?: boolean;
2141
+ }
2142
+ /** OTLP exporter shape shared by the chart's log/accessLog/metrics/tracing keys. */
2143
+ export interface TraefikOtlpValues {
2144
+ enabled?: boolean;
2145
+ serviceName?: string;
2146
+ resourceAttributes?: Record<string, string>;
2147
+ http?: {
2148
+ enabled?: boolean;
2149
+ endpoint?: string;
2150
+ headers?: Record<string, string>;
2151
+ tls?: TraefikOtlpTlsValues;
2152
+ };
2153
+ grpc?: {
2154
+ enabled?: boolean;
2155
+ endpoint?: string;
2156
+ insecure?: boolean;
2157
+ tls?: TraefikOtlpTlsValues;
2158
+ };
2159
+ }
2160
+ /** One entry of the chart's `ports` map (an entrypoint). */
2161
+ export interface TraefikPortValues {
2162
+ port?: number;
2163
+ exposedPort?: number;
2164
+ containerPort?: number;
2165
+ targetPort?: TraefikPortValue;
2166
+ nodePort?: number;
2167
+ protocol?: 'TCP' | 'UDP';
2168
+ asDefault?: boolean;
2169
+ expose?: {
2170
+ default?: boolean;
2171
+ };
2172
+ http?: {
2173
+ redirections?: {
2174
+ entryPoint?: {
2175
+ to?: string;
2176
+ scheme?: 'http' | 'https';
2177
+ permanent?: boolean;
2178
+ priority?: number;
2179
+ };
2180
+ };
2181
+ middlewares?: string[];
2182
+ maxHeaderBytes?: number;
2183
+ sanitizePath?: boolean;
2184
+ /**
2185
+ * TLS termination for the entrypoint. Nested under `http`, which is where
2186
+ * chart 41.5.0's `values.schema.json` puts it — `ports.<name>.tls` is
2187
+ * rejected by the schema (`additionalProperties 'tls' not allowed`).
2188
+ */
2189
+ tls?: {
2190
+ enabled?: boolean;
2191
+ options?: string;
2192
+ certResolver?: string;
2193
+ domains?: {
2194
+ main?: string;
2195
+ sans?: string[];
2196
+ }[];
2197
+ };
2198
+ };
2199
+ forwardedHeaders?: {
2200
+ trustedIPs?: string[];
2201
+ insecure?: boolean;
2202
+ notAppendXForwardedFor?: boolean;
2203
+ };
2204
+ proxyProtocol?: {
2205
+ trustedIPs?: string[];
2206
+ insecure?: boolean;
2207
+ };
2208
+ /** Entrypoint-level timeouts. Raise these for requests longer than 60s. */
2209
+ transport?: {
2210
+ respondingTimeouts?: {
2211
+ readTimeout?: TraefikDuration;
2212
+ writeTimeout?: TraefikDuration;
2213
+ idleTimeout?: TraefikDuration;
2214
+ };
2215
+ lifeCycle?: {
2216
+ requestAcceptGraceTimeout?: TraefikDuration;
2217
+ graceTimeOut?: TraefikDuration;
2218
+ };
2219
+ keepAliveMaxRequests?: number;
2220
+ keepAliveMaxTime?: TraefikDuration;
2221
+ };
2222
+ }
2223
+ /**
2224
+ * Plugin declarations for `experimental.plugins`.
2225
+ *
2226
+ * Each plugin owns its own value shape, so this stays an `unknown` map by
2227
+ * necessity — the same boundary as {@link TraefikPluginMiddleware}.
2228
+ */
2229
+ export declare const TraefikPluginChartConfigSchema: import("arktype/internal/variants/object.ts").ObjectType<Record<string, unknown>, {}>;
2230
+ /** Plugin declarations for `experimental.plugins`, keyed by plugin name. */
2231
+ export type TraefikPluginChartConfig = typeof TraefikPluginChartConfigSchema.infer;
2232
+ /**
2233
+ * The chart values this factory maps, pins, or reads back — a CLOSED type.
2234
+ *
2235
+ * Nothing here has an index signature: if a chart path is not listed, this
2236
+ * factory does not model it and it belongs in {@link TraefikRawHelmValues}.
2237
+ * That is what makes `applyTraefikSecurityPins`' precedence auditable — every
2238
+ * pinned path is a named field with a known type, so a pin that stopped
2239
+ * matching the chart would be a compile error rather than a silent no-op.
2240
+ *
2241
+ * Note the shapes that changed in the 3x chart line and are easy to get wrong:
2242
+ * the Service type lives under `service.spec.type` (not `service.type`), and
2243
+ * the Gateway API provider is `providers.kubernetesGateway`.
2244
+ */
2245
+ export interface TraefikManagedHelmValues {
2246
+ image?: {
2247
+ registry?: string;
2248
+ repository?: string;
2249
+ tag?: string;
2250
+ pullPolicy?: string;
2251
+ };
2252
+ commonLabels?: Record<string, string>;
2253
+ deployment?: {
2254
+ enabled?: boolean;
2255
+ kind?: 'Deployment' | 'DaemonSet';
2256
+ replicas?: number;
2257
+ annotations?: Record<string, string>;
2258
+ labels?: Record<string, string>;
2259
+ podAnnotations?: Record<string, string>;
2260
+ podLabels?: Record<string, string>;
2261
+ terminationGracePeriodSeconds?: number;
2262
+ minReadySeconds?: number;
2263
+ revisionHistoryLimit?: number;
2264
+ };
2265
+ /** @security Pinned off by the values mapper. */
2266
+ api?: {
2267
+ dashboard?: boolean;
2268
+ insecure?: boolean;
2269
+ debug?: boolean;
2270
+ basePath?: string;
2271
+ disableDashboardAd?: boolean;
2272
+ };
2273
+ /** @security Pinned off by the values mapper. */
2274
+ ingressRoute?: {
2275
+ dashboard?: {
2276
+ enabled?: boolean;
2277
+ };
2278
+ healthcheck?: {
2279
+ enabled?: boolean;
2280
+ };
2281
+ };
2282
+ ingressClass?: {
2283
+ enabled?: boolean;
2284
+ isDefaultClass?: boolean;
2285
+ name?: string;
2286
+ };
2287
+ providers?: {
2288
+ kubernetesCRD?: {
2289
+ enabled?: boolean;
2290
+ ingressClass?: string;
2291
+ namespaces?: string[];
2292
+ allowCrossNamespace?: boolean;
2293
+ allowExternalNameServices?: boolean;
2294
+ allowEmptyServices?: boolean;
2295
+ nativeLBByDefault?: boolean;
2296
+ defaultTLSResourcesNamespace?: string;
2297
+ };
2298
+ kubernetesIngress?: {
2299
+ enabled?: boolean;
2300
+ ingressClass?: string;
2301
+ namespaces?: string[];
2302
+ allowExternalNameServices?: boolean;
2303
+ allowEmptyServices?: boolean;
2304
+ /**
2305
+ * Service whose address Traefik copies onto `Ingress.status`. The chart
2306
+ * emits the flag only when it created the Service itself OR when
2307
+ * `pathOverride` names one — this factory owns the Service, so the mapper
2308
+ * always sets `pathOverride`.
2309
+ */
2310
+ publishedService?: {
2311
+ enabled?: boolean;
2312
+ pathOverride?: string;
2313
+ };
2314
+ };
2315
+ kubernetesGateway?: {
2316
+ enabled?: boolean;
2317
+ experimentalChannel?: boolean;
2318
+ namespaces?: string[];
2319
+ statusAddress?: {
2320
+ service?: {
2321
+ name?: string;
2322
+ namespace?: string;
2323
+ };
2324
+ ip?: string;
2325
+ hostname?: string;
2326
+ };
2327
+ };
2328
+ file?: {
2329
+ enabled?: boolean;
2330
+ watch?: boolean;
2331
+ content?: string;
2332
+ };
2333
+ };
2334
+ gateway?: {
2335
+ enabled?: boolean;
2336
+ name?: string;
2337
+ namespace?: string;
2338
+ };
2339
+ gatewayClass?: {
2340
+ enabled?: boolean;
2341
+ name?: string;
2342
+ labels?: Record<string, string>;
2343
+ };
2344
+ log?: {
2345
+ level?: string;
2346
+ format?: string;
2347
+ filePath?: string;
2348
+ otlp?: TraefikOtlpValues;
2349
+ };
2350
+ accessLog?: {
2351
+ enabled?: boolean;
2352
+ format?: string;
2353
+ filePath?: string;
2354
+ addInternals?: boolean;
2355
+ bufferingSize?: number;
2356
+ otlp?: TraefikOtlpValues;
2357
+ };
2358
+ metrics?: {
2359
+ addInternals?: boolean;
2360
+ otlp?: TraefikOtlpValues;
2361
+ };
2362
+ tracing?: {
2363
+ addInternals?: boolean;
2364
+ serviceName?: string;
2365
+ sampleRate?: number;
2366
+ otlp?: TraefikOtlpValues;
2367
+ };
2368
+ experimental?: {
2369
+ otlpLogs?: boolean;
2370
+ plugins?: TraefikPluginChartConfig;
2371
+ };
2372
+ ports?: Record<string, TraefikPortValues>;
2373
+ service?: {
2374
+ /**
2375
+ * Pinned OFF by the values mapper: the bootstrap composition OWNS the
2376
+ * entrypoint Service so its address can be projected without reading an
2377
+ * unmanaged resource before anything has been applied.
2378
+ */
2379
+ enabled?: boolean;
2380
+ single?: boolean;
2381
+ nameOverride?: string;
2382
+ annotations?: Record<string, string>;
2383
+ labels?: Record<string, string>;
2384
+ /** The Service type lives here in chart 3x, not at `service.type`. */
2385
+ spec?: {
2386
+ type?: TraefikServiceType;
2387
+ };
2388
+ };
2389
+ rbac?: {
2390
+ enabled?: boolean;
2391
+ namespaced?: boolean;
2392
+ };
2393
+ /**
2394
+ * Pinned to the release name by the values mapper so the resource-name anchor
2395
+ * — and therefore the name of the Service this factory owns — is
2396
+ * deterministic instead of depending on the chart's fullname template.
2397
+ */
2398
+ fullnameOverride?: string;
2399
+ /**
2400
+ * Pinned to `TRAEFIK_POD_NAME_LABEL_VALUE`. Feeds the chart's
2401
+ * `app.kubernetes.io/name` pod label, which the owned Service selects on.
2402
+ */
2403
+ nameOverride?: string;
2404
+ /**
2405
+ * Pinned to the release name. Feeds the chart's `app.kubernetes.io/instance`
2406
+ * pod label — otherwise derived from the Helm release name — so the owned
2407
+ * Service's selector is exact and stable regardless of how the release is
2408
+ * named.
2409
+ */
2410
+ instanceLabelOverride?: string;
2411
+ serviceAccount?: {
2412
+ name?: string;
2413
+ };
2414
+ serviceAccountAnnotations?: Record<string, string>;
2415
+ resources?: {
2416
+ requests?: Record<string, string>;
2417
+ limits?: Record<string, string>;
2418
+ };
2419
+ /** @security Pinned to a non-root, read-only-root-filesystem profile. */
2420
+ securityContext?: TraefikContainerSecurityContext;
2421
+ /** @security Pinned to a non-root profile. */
2422
+ podSecurityContext?: TraefikPodSecurityContext;
2423
+ additionalArguments?: string[];
2424
+ env?: EnvVar[];
2425
+ nodeSelector?: Record<string, string>;
2426
+ tolerations?: Toleration[];
2427
+ affinity?: Affinity;
2428
+ topologySpreadConstraints?: TraefikTopologySpreadConstraint[];
2429
+ priorityClassName?: string;
2430
+ global?: {
2431
+ checkNewVersion?: boolean;
2432
+ sendAnonymousUsage?: boolean;
2433
+ };
2434
+ }
2435
+ /**
2436
+ * The single raw Helm-values escape hatch.
2437
+ *
2438
+ * Chart surface this factory does not model reaches Helm through here
2439
+ * unchanged. `unknown` is correct at this boundary and nowhere else in the
2440
+ * values types: the shape belongs to whichever chart version is installed, so
2441
+ * TypeKro has nothing to validate it against.
2442
+ */
2443
+ export type TraefikRawHelmValues = Record<string, unknown>;
2444
+ /**
2445
+ * Chart values as they leave the mapper: the closed managed surface plus the
2446
+ * one raw passthrough boundary.
2447
+ *
2448
+ * Reading a managed path (`values.api?.dashboard`, `values.ports?.web`) is
2449
+ * fully typed; an unmodelled chart key is accepted but carries no type, which
2450
+ * is precisely the trade this split makes explicit.
2451
+ */
2452
+ export type TraefikHelmValues = TraefikManagedHelmValues & TraefikRawHelmValues;
2453
+ /** Chart values accepted by {@link TraefikHelmReleaseConfig}. */
2454
+ export type TraefikMappedHelmValues = TypeKroChartValues<TraefikHelmValues>;
2455
+ /** Configuration for the Traefik `HelmRepository`. */
2456
+ export declare const TraefikHelmRepositoryConfigSchema: import("arktype/internal/variants/object.ts").ObjectType<{
2457
+ name: string;
2458
+ namespace?: string;
2459
+ url?: string;
2460
+ interval?: string;
2461
+ id?: string;
2462
+ }, {}>;
2463
+ /** Configuration for the Traefik `HelmRepository`. */
2464
+ export type TraefikHelmRepositoryConfig = typeof TraefikHelmRepositoryConfigSchema.infer;
2465
+ /**
2466
+ * Configuration for the Traefik `HelmRelease`, minus `values`.
2467
+ *
2468
+ * @see TraefikHelmReleaseConfig for why `values` is declared separately.
2469
+ */
2470
+ export declare const TraefikHelmReleaseConfigSchema: import("arktype/internal/variants/object.ts").ObjectType<{
2471
+ name: string;
2472
+ namespace?: string;
2473
+ targetNamespace?: string;
2474
+ version?: string;
2475
+ repositoryName?: string;
2476
+ repositoryNamespace?: string;
2477
+ interval?: string;
2478
+ timeout?: string;
2479
+ createNamespace?: boolean;
2480
+ crds?: "Skip" | "Create" | "CreateReplace";
2481
+ id?: string;
2482
+ }, {}>;
2483
+ /**
2484
+ * Configuration for the Traefik `HelmRelease`.
2485
+ *
2486
+ * **Accepted exception to schema-first inference, for `values` only.** Every
2487
+ * other field is inferred from {@link TraefikHelmReleaseConfigSchema}. `values`
2488
+ * is typed {@link TraefikMappedHelmValues}, which is
2489
+ * `TypeKroChartValues<TraefikHelmValues>` — a union of the chart values with
2490
+ * `KubernetesRef`/`CelExpression` PROXY types. Those describe graph wiring
2491
+ * that exists only at build time, not data an ArkType schema could validate at
2492
+ * runtime: by the time this object reaches Flux the refs are resolved, and
2493
+ * while it is being built the tree is deliberately not plain JSON. A schema
2494
+ * field here could only be `unknown`, which would erase the typed chart
2495
+ * surface the mapper exists to provide. The values themselves ARE schema-
2496
+ * checked — one level down, by {@link TraefikManagedHelmValues} and the
2497
+ * mapper's own tests.
2498
+ */
2499
+ export type TraefikHelmReleaseConfig = typeof TraefikHelmReleaseConfigSchema.infer & {
2500
+ readonly values?: TraefikMappedHelmValues;
2501
+ };
2502
+ /**
2503
+ * Runtime spec of the `traefikBootstrap` composition.
2504
+ *
2505
+ * Only proxy-safe values live here. `dashboard` is typed as the literal
2506
+ * `false`: the dashboard and the insecure API are not switchable through this
2507
+ * contract, and the values mapper pins them off regardless (#172).
2508
+ */
2509
+ export declare const TraefikBootstrapConfigSchema: import("arktype/internal/variants/object.ts").ObjectType<{
2510
+ name: string;
2511
+ namespace?: string;
2512
+ chartVersion?: string;
2513
+ replicas?: number;
2514
+ ingressClass?: string;
2515
+ service?: {
2516
+ type?: "ClusterIP" | "NodePort" | "LoadBalancer";
2517
+ annotations?: Record<string, string>;
2518
+ };
2519
+ entrypoints?: {
2520
+ web?: {
2521
+ exposedPort?: number;
2522
+ };
2523
+ websecure?: {
2524
+ exposedPort?: number;
2525
+ readTimeout?: string;
2526
+ writeTimeout?: string;
2527
+ idleTimeout?: string;
2528
+ };
2529
+ };
2530
+ providers?: {
2531
+ crd?: boolean;
2532
+ gatewayApi?: boolean;
2533
+ kubernetesIngress?: boolean;
2534
+ };
2535
+ accessLogs?: boolean;
2536
+ logLevel?: "ERROR" | "TRACE" | "WARN" | "INFO" | "DEBUG" | "FATAL" | "PANIC";
2537
+ otlp?: {
2538
+ endpoint: string;
2539
+ insecure?: boolean;
2540
+ serviceName?: string;
2541
+ };
2542
+ dashboard?: false;
2543
+ }, {}>;
2544
+ /** Inferred runtime spec of {@link TraefikBootstrapConfigSchema}. */
2545
+ export type TraefikBootstrapConfig = typeof TraefikBootstrapConfigSchema.infer;
2546
+ /**
2547
+ * Status contract of the `traefikBootstrap` composition.
2548
+ *
2549
+ * `loadBalancer` mirrors the entrypoint Service's
2550
+ * `status.loadBalancer.ingress[0]` and stays empty for `ClusterIP` /
2551
+ * `NodePort` services or while a cloud controller is still provisioning an
2552
+ * address.
2553
+ *
2554
+ * `version` is the chart version Flux actually installed, read back from the
2555
+ * owned `HelmRelease`'s `status.history[]` — an OBSERVED value rather than the
2556
+ * requested one, so a pinned-but-unavailable version can never be reported as
2557
+ * though it were live. It is empty until Flux records its first release.
2558
+ *
2559
+ * EVERY field here is a projection of a resource this composition owns, so it
2560
+ * hydrates identically in direct and KRO mode. That rules out literals: KRO
2561
+ * drops literal status fields, so declaring one would require a field the
2562
+ * instance never carries (#188). The entrypoint NAMES are therefore not in
2563
+ * this contract — they are fixed by this composition and exported as
2564
+ * `TRAEFIK_WEB_ENTRYPOINT` / `TRAEFIK_WEBSECURE_ENTRYPOINT` instead. Read the
2565
+ * live port names off the Service named by `serviceName` if a consumer needs
2566
+ * them at runtime.
2567
+ */
2568
+ export declare const TraefikBootstrapStatusSchema: import("arktype/internal/variants/object.ts").ObjectType<{
2569
+ ready: boolean;
2570
+ failed: boolean;
2571
+ phase: "Ready" | "Failed" | "Installing";
2572
+ loadBalancer: {
2573
+ hostname: string;
2574
+ ip: string;
2575
+ };
2576
+ serviceName: string;
2577
+ version: string;
2578
+ }, {}>;
2579
+ /** Inferred status of {@link TraefikBootstrapStatusSchema}. */
2580
+ export type TraefikBootstrapStatus = typeof TraefikBootstrapStatusSchema.infer;
2581
+ /** Spec of the shared `HelmRepository` singleton composition. */
2582
+ export declare const TraefikHelmRepositorySingletonSpecSchema: import("arktype/internal/variants/object.ts").ObjectType<{
2583
+ name: string;
2584
+ namespace: string;
2585
+ url: string;
2586
+ }, {}>;
2587
+ /** Status of the shared `HelmRepository` singleton composition. */
2588
+ export declare const TraefikHelmRepositorySingletonStatusSchema: import("arktype/internal/variants/object.ts").ObjectType<{
2589
+ ready: boolean;
2590
+ }, {}>;
2591
+ /** A default `TLSOption` owned by the bootstrap composition. */
2592
+ export interface TraefikDefaultTlsOptionOptions {
2593
+ /** @default TRAEFIK_DEFAULT_TLS_OPTION_NAME */
2594
+ readonly name?: string;
2595
+ /** @default 'VersionTLS12' */
2596
+ readonly minVersion?: TraefikTLSOptionSpec['minVersion'];
2597
+ /** @default true */
2598
+ readonly sniStrict?: boolean;
2599
+ readonly cipherSuites?: readonly string[];
2600
+ readonly curvePreferences?: readonly string[];
2601
+ readonly clientAuth?: TraefikClientAuth;
2602
+ }
2603
+ /**
2604
+ * A default `TLSStore` owned by the bootstrap composition, so a cert-manager
2605
+ * `Certificate` can supply the certificate served when SNI matches nothing.
2606
+ */
2607
+ export interface TraefikDefaultTlsStoreOptions {
2608
+ /** Secret written by a cert-manager `Certificate`. */
2609
+ readonly defaultCertificateSecretName: string;
2610
+ /** @default TRAEFIK_DEFAULT_TLS_STORE_NAME */
2611
+ readonly name?: string;
2612
+ }
2613
+ /**
2614
+ * Build-time options for {@link makeTraefikBootstrap}.
2615
+ *
2616
+ * These decide WHICH resources the graph contains or how the values tree is
2617
+ * shaped, so they must be concrete at construction time. Plain JavaScript
2618
+ * branches on them are safe; branching on the runtime spec is not.
2619
+ */
2620
+ export interface TraefikBootstrapBuildOptions {
2621
+ /** Composition name. @default 'traefik-bootstrap' */
2622
+ readonly name?: string;
2623
+ /** KRO kind. @default 'TraefikBootstrap' */
2624
+ readonly kind?: string;
2625
+ /**
2626
+ * Lifecycle of the install namespace. Use `external` when a parent graph
2627
+ * already establishes it. @default 'owned'
2628
+ */
2629
+ readonly namespaceOwnership?: 'owned' | 'external';
2630
+ /**
2631
+ * Emit a permanent `web` → `websecure` redirect on the `web` entrypoint.
2632
+ *
2633
+ * Build-time rather than runtime spec because the chart disables the
2634
+ * redirect by the ABSENCE of `ports.web.http.redirections.entryPoint`, not by
2635
+ * a boolean — so it decides which configuration exists rather than what a
2636
+ * value is, and a schema reference could not express "no redirect".
2637
+ *
2638
+ * @default true
2639
+ */
2640
+ readonly redirectWebToWebsecure?: boolean;
2641
+ /** Create a cluster-default `TLSOption` alongside the release. */
2642
+ readonly defaultTlsOption?: TraefikDefaultTlsOptionOptions;
2643
+ /** Create a cluster-default `TLSStore` fed by a cert-manager Secret. */
2644
+ readonly defaultTlsStore?: TraefikDefaultTlsStoreOptions;
2645
+ /**
2646
+ * Flux CRD policy for the release, applied to `install.crds` AND
2647
+ * `upgrade.crds`.
2648
+ *
2649
+ * The default replaces the chart's `crds/` on every reconcile, which is what
2650
+ * keeps the `traefik.io/v1alpha1` CRDs in lockstep with the chart version.
2651
+ * Set `'Skip'` only when the CRDs are managed by something else — a
2652
+ * cluster-wide CRD pipeline, say — and accept that a chart bump then needs a
2653
+ * separate CRD rollout.
2654
+ *
2655
+ * @default DEFAULT_TRAEFIK_CRDS_POLICY (`'CreateReplace'`)
2656
+ */
2657
+ readonly crds?: HelmReleaseCrdsPolicy;
2658
+ /**
2659
+ * Raw chart values, merged BEFORE the mapped values and the security pins —
2660
+ * both of which win.
2661
+ *
2662
+ * This is the raw boundary, so it is typed as {@link TraefikRawHelmValues}
2663
+ * rather than as the managed surface: an override often has to reach a
2664
+ * SIBLING of a path TypeKro maps (`metrics.prometheus` next to the mapped
2665
+ * `metrics.otlp`, say), which a closed type would reject. Type safety on
2666
+ * this side of the boundary would be a fiction anyway — the shape belongs to
2667
+ * whichever chart version is installed. What TypeKro writes is checked
2668
+ * precisely; what a caller passes through is not, and the security pins
2669
+ * still overwrite it.
2670
+ *
2671
+ * **Build-time only, on purpose.** The guide's per-instance passthrough
2672
+ * pattern (a `spec.values` field serialized as
2673
+ * `json.unmarshal(json.marshal(schema.spec.values))` and merged last) does
2674
+ * not apply to this composition, because KRO's `map.merge()` is SHALLOW:
2675
+ * - merging raw values LAST would let any KRO instance re-enable
2676
+ * `api.dashboard` / `api.insecure` or hand the entrypoint Service back to
2677
+ * the chart, which this factory's contract (#172) forbids; and
2678
+ * - merging the pins last to prevent that would replace whole top-level
2679
+ * sections, silently discarding a user's sibling keys under `api`,
2680
+ * `ingressRoute`, `securityContext`, `podSecurityContext`, `service` and
2681
+ * `global`.
2682
+ *
2683
+ * A values contract with non-negotiable pins therefore has to resolve
2684
+ * precedence at build time, where the merge can be deep and auditable. Pass
2685
+ * chart surface this factory does not model here, at construction.
2686
+ */
2687
+ readonly values?: TraefikRawHelmValues;
2688
+ }
2689
+ export {};
2690
+ //# sourceMappingURL=types.d.ts.map