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.
- package/dist/.tsbuildinfo +1 -1
- package/dist/alchemy/clickhouse-schema/executor.d.ts +25 -0
- package/dist/alchemy/clickhouse-schema/executor.d.ts.map +1 -0
- package/dist/alchemy/clickhouse-schema/executor.js +144 -0
- package/dist/alchemy/clickhouse-schema/executor.js.map +1 -0
- package/dist/alchemy/clickhouse-schema/index.d.ts +12 -0
- package/dist/alchemy/clickhouse-schema/index.d.ts.map +1 -0
- package/dist/alchemy/clickhouse-schema/index.js +11 -0
- package/dist/alchemy/clickhouse-schema/index.js.map +1 -0
- package/dist/alchemy/clickhouse-schema/resource.d.ts +54 -0
- package/dist/alchemy/clickhouse-schema/resource.d.ts.map +1 -0
- package/dist/alchemy/clickhouse-schema/resource.js +158 -0
- package/dist/alchemy/clickhouse-schema/resource.js.map +1 -0
- package/dist/alchemy/clickhouse-schema/runner.d.ts +154 -0
- package/dist/alchemy/clickhouse-schema/runner.d.ts.map +1 -0
- package/dist/alchemy/clickhouse-schema/runner.js +613 -0
- package/dist/alchemy/clickhouse-schema/runner.js.map +1 -0
- package/dist/alchemy/clickhouse-schema/sql.d.ts +109 -0
- package/dist/alchemy/clickhouse-schema/sql.d.ts.map +1 -0
- package/dist/alchemy/clickhouse-schema/sql.js +368 -0
- package/dist/alchemy/clickhouse-schema/sql.js.map +1 -0
- package/dist/alchemy/clickhouse-schema/types.d.ts +394 -0
- package/dist/alchemy/clickhouse-schema/types.d.ts.map +1 -0
- package/dist/alchemy/clickhouse-schema/types.js +370 -0
- package/dist/alchemy/clickhouse-schema/types.js.map +1 -0
- package/dist/alchemy/index.d.ts +1 -0
- package/dist/alchemy/index.d.ts.map +1 -1
- package/dist/alchemy/index.js +2 -0
- package/dist/alchemy/index.js.map +1 -1
- package/dist/compositions/typekro-runtime/typekro-runtime.d.ts +0 -33
- package/dist/compositions/typekro-runtime/typekro-runtime.d.ts.map +1 -1
- package/dist/compositions/typekro-runtime/typekro-runtime.js +63 -1
- package/dist/compositions/typekro-runtime/typekro-runtime.js.map +1 -1
- package/dist/compositions/typekro-runtime/types.d.ts +8 -0
- package/dist/compositions/typekro-runtime/types.d.ts.map +1 -1
- package/dist/compositions/typekro-runtime/types.js +1 -0
- package/dist/compositions/typekro-runtime/types.js.map +1 -1
- package/dist/core/aspects/values-merge.d.ts +17 -0
- package/dist/core/aspects/values-merge.d.ts.map +1 -1
- package/dist/core/aspects/values-merge.js +67 -8
- package/dist/core/aspects/values-merge.js.map +1 -1
- package/dist/core/deployment/direct-factory.d.ts +9 -0
- package/dist/core/deployment/direct-factory.d.ts.map +1 -1
- package/dist/core/deployment/direct-factory.js +37 -3
- package/dist/core/deployment/direct-factory.js.map +1 -1
- package/dist/core/deployment/engine.d.ts +34 -0
- package/dist/core/deployment/engine.d.ts.map +1 -1
- package/dist/core/deployment/engine.js +173 -29
- package/dist/core/deployment/engine.js.map +1 -1
- package/dist/core/deployment/index.d.ts +2 -0
- package/dist/core/deployment/index.d.ts.map +1 -1
- package/dist/core/deployment/index.js +1 -0
- package/dist/core/deployment/index.js.map +1 -1
- package/dist/core/deployment/k8s-helpers.d.ts +73 -0
- package/dist/core/deployment/k8s-helpers.d.ts.map +1 -1
- package/dist/core/deployment/k8s-helpers.js +198 -4
- package/dist/core/deployment/k8s-helpers.js.map +1 -1
- package/dist/core/deployment/kro-factory.d.ts.map +1 -1
- package/dist/core/deployment/kro-factory.js +21 -1
- package/dist/core/deployment/kro-factory.js.map +1 -1
- package/dist/core/deployment/status-leaf-resolution.d.ts +101 -0
- package/dist/core/deployment/status-leaf-resolution.d.ts.map +1 -0
- package/dist/core/deployment/status-leaf-resolution.js +232 -0
- package/dist/core/deployment/status-leaf-resolution.js.map +1 -0
- package/dist/core/deployment/strategies/base-strategy.d.ts.map +1 -1
- package/dist/core/deployment/strategies/base-strategy.js +31 -3
- package/dist/core/deployment/strategies/base-strategy.js.map +1 -1
- package/dist/core/deployment/strategies/kro-strategy.d.ts.map +1 -1
- package/dist/core/deployment/strategies/kro-strategy.js +8 -1
- package/dist/core/deployment/strategies/kro-strategy.js.map +1 -1
- package/dist/core/kro/index.d.ts +6 -0
- package/dist/core/kro/index.d.ts.map +1 -0
- package/dist/core/kro/index.js +6 -0
- package/dist/core/kro/index.js.map +1 -0
- package/dist/core/kro/label-guard-capability.d.ts +141 -0
- package/dist/core/kro/label-guard-capability.d.ts.map +1 -0
- package/dist/core/kro/label-guard-capability.js +257 -0
- package/dist/core/kro/label-guard-capability.js.map +1 -0
- package/dist/core/kro/labels.d.ts +56 -0
- package/dist/core/kro/labels.d.ts.map +1 -0
- package/dist/core/kro/labels.js +62 -0
- package/dist/core/kro/labels.js.map +1 -0
- package/dist/core/kubernetes/api-capability.d.ts +196 -0
- package/dist/core/kubernetes/api-capability.d.ts.map +1 -0
- package/dist/core/kubernetes/api-capability.js +301 -0
- package/dist/core/kubernetes/api-capability.js.map +1 -0
- package/dist/core/kubernetes/index.d.ts +2 -0
- package/dist/core/kubernetes/index.d.ts.map +1 -1
- package/dist/core/kubernetes/index.js +2 -0
- package/dist/core/kubernetes/index.js.map +1 -1
- package/dist/core/kubernetes/naming.d.ts +100 -0
- package/dist/core/kubernetes/naming.d.ts.map +1 -0
- package/dist/core/kubernetes/naming.js +93 -0
- package/dist/core/kubernetes/naming.js.map +1 -0
- package/dist/core/planning/direct-runtime-adapter.d.ts.map +1 -1
- package/dist/core/planning/direct-runtime-adapter.js +54 -17
- package/dist/core/planning/direct-runtime-adapter.js.map +1 -1
- package/dist/core/planning/planner.d.ts.map +1 -1
- package/dist/core/planning/planner.js +17 -0
- package/dist/core/planning/planner.js.map +1 -1
- package/dist/core/planning/schema.d.ts.map +1 -1
- package/dist/core/planning/schema.js +7 -3
- package/dist/core/planning/schema.js.map +1 -1
- package/dist/core/references/cel-lexical-scanner.d.ts +100 -1
- package/dist/core/references/cel-lexical-scanner.d.ts.map +1 -1
- package/dist/core/references/cel-lexical-scanner.js +196 -2
- package/dist/core/references/cel-lexical-scanner.js.map +1 -1
- package/dist/core/references/cel.d.ts +249 -1
- package/dist/core/references/cel.d.ts.map +1 -1
- package/dist/core/references/cel.js +289 -8
- package/dist/core/references/cel.js.map +1 -1
- package/dist/core/serialization/arktype-ast.d.ts +21 -0
- package/dist/core/serialization/arktype-ast.d.ts.map +1 -0
- package/dist/core/serialization/arktype-ast.js +29 -0
- package/dist/core/serialization/arktype-ast.js.map +1 -0
- package/dist/core/serialization/cel-references.d.ts +133 -32
- package/dist/core/serialization/cel-references.d.ts.map +1 -1
- package/dist/core/serialization/cel-references.js +908 -109
- package/dist/core/serialization/cel-references.js.map +1 -1
- package/dist/core/serialization/schema.d.ts +16 -2
- package/dist/core/serialization/schema.d.ts.map +1 -1
- package/dist/core/serialization/schema.js +113 -21
- package/dist/core/serialization/schema.js.map +1 -1
- package/dist/core/types/composable.d.ts +7 -1
- package/dist/core/types/composable.d.ts.map +1 -1
- package/dist/core/types/deployment.d.ts +32 -2
- package/dist/core/types/deployment.d.ts.map +1 -1
- package/dist/core/types/serialization.d.ts +37 -0
- package/dist/core/types/serialization.d.ts.map +1 -1
- package/dist/core/validation/cel-dialect.d.ts +246 -0
- package/dist/core/validation/cel-dialect.d.ts.map +1 -0
- package/dist/core/validation/cel-dialect.js +1997 -0
- package/dist/core/validation/cel-dialect.js.map +1 -0
- package/dist/core/validation/cel-validator.d.ts.map +1 -1
- package/dist/core/validation/cel-validator.js +8 -1
- package/dist/core/validation/cel-validator.js.map +1 -1
- package/dist/core/validation/literal-status.d.ts +107 -0
- package/dist/core/validation/literal-status.d.ts.map +1 -0
- package/dist/core/validation/literal-status.js +346 -0
- package/dist/core/validation/literal-status.js.map +1 -0
- package/dist/core/validation/structural-spec-dependence.d.ts +179 -0
- package/dist/core/validation/structural-spec-dependence.d.ts.map +1 -0
- package/dist/core/validation/structural-spec-dependence.js +911 -0
- package/dist/core/validation/structural-spec-dependence.js.map +1 -0
- package/dist/factories/apisix/compositions/apisix-bootstrap.d.ts.map +1 -1
- package/dist/factories/apisix/compositions/apisix-bootstrap.js +9 -0
- package/dist/factories/apisix/compositions/apisix-bootstrap.js.map +1 -1
- package/dist/factories/clickhouse/compositions/clickhouse-cluster.d.ts +6 -0
- package/dist/factories/clickhouse/compositions/clickhouse-cluster.d.ts.map +1 -1
- package/dist/factories/clickhouse/compositions/clickhouse-cluster.js +273 -23
- package/dist/factories/clickhouse/compositions/clickhouse-cluster.js.map +1 -1
- package/dist/factories/clickhouse/resources/index.d.ts +1 -0
- package/dist/factories/clickhouse/resources/index.d.ts.map +1 -1
- package/dist/factories/clickhouse/resources/index.js +1 -0
- package/dist/factories/clickhouse/resources/index.js.map +1 -1
- package/dist/factories/clickhouse/resources/installation.d.ts.map +1 -1
- package/dist/factories/clickhouse/resources/installation.js +31 -4
- package/dist/factories/clickhouse/resources/installation.js.map +1 -1
- package/dist/factories/clickhouse/resources/s3-backup.d.ts +215 -0
- package/dist/factories/clickhouse/resources/s3-backup.d.ts.map +1 -0
- package/dist/factories/clickhouse/resources/s3-backup.js +410 -0
- package/dist/factories/clickhouse/resources/s3-backup.js.map +1 -0
- package/dist/factories/clickhouse/types.d.ts +416 -20
- package/dist/factories/clickhouse/types.d.ts.map +1 -1
- package/dist/factories/clickhouse/types.js +235 -11
- package/dist/factories/clickhouse/types.js.map +1 -1
- package/dist/factories/clickhouse/utils/helm-values-mapper.d.ts +42 -0
- package/dist/factories/clickhouse/utils/helm-values-mapper.d.ts.map +1 -1
- package/dist/factories/clickhouse/utils/helm-values-mapper.js +48 -0
- package/dist/factories/clickhouse/utils/helm-values-mapper.js.map +1 -1
- package/dist/factories/clickhouse/utils/index.d.ts +2 -0
- package/dist/factories/clickhouse/utils/index.d.ts.map +1 -1
- package/dist/factories/clickhouse/utils/index.js +2 -0
- package/dist/factories/clickhouse/utils/index.js.map +1 -1
- package/dist/factories/clickhouse/utils/s3-storage.d.ts +503 -0
- package/dist/factories/clickhouse/utils/s3-storage.d.ts.map +1 -0
- package/dist/factories/clickhouse/utils/s3-storage.js +1139 -0
- package/dist/factories/clickhouse/utils/s3-storage.js.map +1 -0
- package/dist/factories/clickhouse/utils/validation.d.ts +103 -0
- package/dist/factories/clickhouse/utils/validation.d.ts.map +1 -1
- package/dist/factories/clickhouse/utils/validation.js +129 -0
- package/dist/factories/clickhouse/utils/validation.js.map +1 -1
- package/dist/factories/clickhouse/utils/xml.d.ts +87 -0
- package/dist/factories/clickhouse/utils/xml.d.ts.map +1 -0
- package/dist/factories/clickhouse/utils/xml.js +151 -0
- package/dist/factories/clickhouse/utils/xml.js.map +1 -0
- package/dist/factories/clickstack/compositions/clickstack-bootstrap.d.ts +57 -0
- package/dist/factories/clickstack/compositions/clickstack-bootstrap.d.ts.map +1 -1
- package/dist/factories/clickstack/compositions/clickstack-bootstrap.js +266 -7
- package/dist/factories/clickstack/compositions/clickstack-bootstrap.js.map +1 -1
- package/dist/factories/clickstack/types.d.ts +205 -26
- package/dist/factories/clickstack/types.d.ts.map +1 -1
- package/dist/factories/clickstack/types.js +106 -8
- package/dist/factories/clickstack/types.js.map +1 -1
- package/dist/factories/clickstack/utils/collector-config.d.ts +104 -0
- package/dist/factories/clickstack/utils/collector-config.d.ts.map +1 -0
- package/dist/factories/clickstack/utils/collector-config.js +266 -0
- package/dist/factories/clickstack/utils/collector-config.js.map +1 -0
- package/dist/factories/clickstack/utils/helm-values-mapper.d.ts +26 -0
- package/dist/factories/clickstack/utils/helm-values-mapper.d.ts.map +1 -1
- package/dist/factories/clickstack/utils/helm-values-mapper.js +53 -12
- package/dist/factories/clickstack/utils/helm-values-mapper.js.map +1 -1
- package/dist/factories/clickstack/utils/index.d.ts +2 -0
- package/dist/factories/clickstack/utils/index.d.ts.map +1 -1
- package/dist/factories/clickstack/utils/index.js +2 -0
- package/dist/factories/clickstack/utils/index.js.map +1 -1
- package/dist/factories/clickstack/utils/storage.d.ts +449 -0
- package/dist/factories/clickstack/utils/storage.d.ts.map +1 -0
- package/dist/factories/clickstack/utils/storage.js +698 -0
- package/dist/factories/clickstack/utils/storage.js.map +1 -0
- package/dist/factories/cnpg/resources/helm.d.ts.map +1 -1
- package/dist/factories/cnpg/resources/helm.js +4 -4
- package/dist/factories/cnpg/resources/helm.js.map +1 -1
- package/dist/factories/cnpg/types.d.ts +10 -1
- package/dist/factories/cnpg/types.d.ts.map +1 -1
- package/dist/factories/cnpg/types.js.map +1 -1
- package/dist/factories/cnpg/utils/helm-values-mapper.d.ts +19 -2
- package/dist/factories/cnpg/utils/helm-values-mapper.d.ts.map +1 -1
- package/dist/factories/cnpg/utils/helm-values-mapper.js +22 -4
- package/dist/factories/cnpg/utils/helm-values-mapper.js.map +1 -1
- package/dist/factories/envoy-ai-gateway/compositions/gateway.d.ts.map +1 -1
- package/dist/factories/envoy-ai-gateway/compositions/gateway.js +16 -3
- package/dist/factories/envoy-ai-gateway/compositions/gateway.js.map +1 -1
- package/dist/factories/envoy-ai-gateway/constants.d.ts +5 -2
- package/dist/factories/envoy-ai-gateway/constants.d.ts.map +1 -1
- package/dist/factories/envoy-ai-gateway/constants.js +5 -2
- package/dist/factories/envoy-ai-gateway/constants.js.map +1 -1
- package/dist/factories/envoy-ai-gateway/resources/gateway.d.ts +12 -0
- package/dist/factories/envoy-ai-gateway/resources/gateway.d.ts.map +1 -1
- package/dist/factories/envoy-ai-gateway/resources/gateway.js +27 -104
- package/dist/factories/envoy-ai-gateway/resources/gateway.js.map +1 -1
- package/dist/factories/envoy-ai-gateway/types.d.ts +15 -47
- package/dist/factories/envoy-ai-gateway/types.d.ts.map +1 -1
- package/dist/factories/envoy-ai-gateway/types.js.map +1 -1
- package/dist/factories/gateway-api/constants.d.ts +27 -0
- package/dist/factories/gateway-api/constants.d.ts.map +1 -0
- package/dist/factories/gateway-api/constants.js +27 -0
- package/dist/factories/gateway-api/constants.js.map +1 -0
- package/dist/factories/gateway-api/index.d.ts +14 -0
- package/dist/factories/gateway-api/index.d.ts.map +1 -0
- package/dist/factories/gateway-api/index.js +14 -0
- package/dist/factories/gateway-api/index.js.map +1 -0
- package/dist/factories/gateway-api/readiness.d.ts +67 -0
- package/dist/factories/gateway-api/readiness.d.ts.map +1 -0
- package/dist/factories/gateway-api/readiness.js +213 -0
- package/dist/factories/gateway-api/readiness.js.map +1 -0
- package/dist/factories/gateway-api/resources/gateway.d.ts +91 -0
- package/dist/factories/gateway-api/resources/gateway.d.ts.map +1 -0
- package/dist/factories/gateway-api/resources/gateway.js +99 -0
- package/dist/factories/gateway-api/resources/gateway.js.map +1 -0
- package/dist/factories/gateway-api/resources/index.d.ts +2 -0
- package/dist/factories/gateway-api/resources/index.d.ts.map +1 -0
- package/dist/factories/gateway-api/resources/index.js +2 -0
- package/dist/factories/gateway-api/resources/index.js.map +1 -0
- package/dist/factories/gateway-api/types.d.ts +1269 -0
- package/dist/factories/gateway-api/types.d.ts.map +1 -0
- package/dist/factories/gateway-api/types.js +417 -0
- package/dist/factories/gateway-api/types.js.map +1 -0
- package/dist/factories/helm/readiness-evaluators.d.ts +21 -3
- package/dist/factories/helm/readiness-evaluators.d.ts.map +1 -1
- package/dist/factories/helm/readiness-evaluators.js +117 -11
- package/dist/factories/helm/readiness-evaluators.js.map +1 -1
- package/dist/factories/helm/types.d.ts +28 -0
- package/dist/factories/helm/types.d.ts.map +1 -1
- package/dist/factories/index.d.ts +2 -0
- package/dist/factories/index.d.ts.map +1 -1
- package/dist/factories/index.js +8 -0
- package/dist/factories/index.js.map +1 -1
- package/dist/factories/inngest/compositions/inngest-bootstrap.d.ts.map +1 -1
- package/dist/factories/inngest/compositions/inngest-bootstrap.js +10 -0
- package/dist/factories/inngest/compositions/inngest-bootstrap.js.map +1 -1
- package/dist/factories/kubernetes/admission/index.d.ts +2 -0
- package/dist/factories/kubernetes/admission/index.d.ts.map +1 -1
- package/dist/factories/kubernetes/admission/index.js +2 -0
- package/dist/factories/kubernetes/admission/index.js.map +1 -1
- package/dist/factories/kubernetes/admission/label-propagation-guard.d.ts +108 -0
- package/dist/factories/kubernetes/admission/label-propagation-guard.d.ts.map +1 -0
- package/dist/factories/kubernetes/admission/label-propagation-guard.js +247 -0
- package/dist/factories/kubernetes/admission/label-propagation-guard.js.map +1 -0
- package/dist/factories/kubernetes/admission/mutating-admission-policy.d.ts +286 -0
- package/dist/factories/kubernetes/admission/mutating-admission-policy.d.ts.map +1 -0
- package/dist/factories/kubernetes/admission/mutating-admission-policy.js +157 -0
- package/dist/factories/kubernetes/admission/mutating-admission-policy.js.map +1 -0
- package/dist/factories/opensearch/compositions/cluster.d.ts.map +1 -1
- package/dist/factories/opensearch/compositions/cluster.js +6 -1
- package/dist/factories/opensearch/compositions/cluster.js.map +1 -1
- package/dist/factories/ory/compositions/ory-identity-stack.d.ts +8 -8
- package/dist/factories/ory/types.d.ts +16 -16
- package/dist/factories/rook/compositions/object-storage-claim.d.ts +1 -1
- package/dist/factories/rook/compositions/rook-ceph-platform.js +8 -1
- package/dist/factories/rook/compositions/rook-ceph-platform.js.map +1 -1
- package/dist/factories/rook/types.d.ts +1 -1
- package/dist/factories/traefik/compositions/index.d.ts +6 -0
- package/dist/factories/traefik/compositions/index.d.ts.map +1 -0
- package/dist/factories/traefik/compositions/index.js +6 -0
- package/dist/factories/traefik/compositions/index.js.map +1 -0
- package/dist/factories/traefik/compositions/traefik-bootstrap.d.ts +185 -0
- package/dist/factories/traefik/compositions/traefik-bootstrap.d.ts.map +1 -0
- package/dist/factories/traefik/compositions/traefik-bootstrap.js +339 -0
- package/dist/factories/traefik/compositions/traefik-bootstrap.js.map +1 -0
- package/dist/factories/traefik/compositions/traefik-helm-repository.d.ts +16 -0
- package/dist/factories/traefik/compositions/traefik-helm-repository.d.ts.map +1 -0
- package/dist/factories/traefik/compositions/traefik-helm-repository.js +31 -0
- package/dist/factories/traefik/compositions/traefik-helm-repository.js.map +1 -0
- package/dist/factories/traefik/constants.d.ts +78 -0
- package/dist/factories/traefik/constants.d.ts.map +1 -0
- package/dist/factories/traefik/constants.js +104 -0
- package/dist/factories/traefik/constants.js.map +1 -0
- package/dist/factories/traefik/index.d.ts +25 -0
- package/dist/factories/traefik/index.d.ts.map +1 -0
- package/dist/factories/traefik/index.js +25 -0
- package/dist/factories/traefik/index.js.map +1 -0
- package/dist/factories/traefik/resources/common.d.ts +68 -0
- package/dist/factories/traefik/resources/common.d.ts.map +1 -0
- package/dist/factories/traefik/resources/common.js +59 -0
- package/dist/factories/traefik/resources/common.js.map +1 -0
- package/dist/factories/traefik/resources/gateway.d.ts +85 -0
- package/dist/factories/traefik/resources/gateway.d.ts.map +1 -0
- package/dist/factories/traefik/resources/gateway.js +109 -0
- package/dist/factories/traefik/resources/gateway.js.map +1 -0
- package/dist/factories/traefik/resources/helm.d.ts +56 -0
- package/dist/factories/traefik/resources/helm.d.ts.map +1 -0
- package/dist/factories/traefik/resources/helm.js +131 -0
- package/dist/factories/traefik/resources/helm.js.map +1 -0
- package/dist/factories/traefik/resources/index.d.ts +10 -0
- package/dist/factories/traefik/resources/index.d.ts.map +1 -0
- package/dist/factories/traefik/resources/index.js +10 -0
- package/dist/factories/traefik/resources/index.js.map +1 -0
- package/dist/factories/traefik/resources/middleware.d.ts +169 -0
- package/dist/factories/traefik/resources/middleware.d.ts.map +1 -0
- package/dist/factories/traefik/resources/middleware.js +225 -0
- package/dist/factories/traefik/resources/middleware.js.map +1 -0
- package/dist/factories/traefik/resources/routing.d.ts +113 -0
- package/dist/factories/traefik/resources/routing.d.ts.map +1 -0
- package/dist/factories/traefik/resources/routing.js +119 -0
- package/dist/factories/traefik/resources/routing.js.map +1 -0
- package/dist/factories/traefik/resources/tls.d.ts +85 -0
- package/dist/factories/traefik/resources/tls.d.ts.map +1 -0
- package/dist/factories/traefik/resources/tls.js +93 -0
- package/dist/factories/traefik/resources/tls.js.map +1 -0
- package/dist/factories/traefik/types.d.ts +2690 -0
- package/dist/factories/traefik/types.d.ts.map +1 -0
- package/dist/factories/traefik/types.js +1084 -0
- package/dist/factories/traefik/types.js.map +1 -0
- package/dist/factories/traefik/utils/helm-values-mapper.d.ts +198 -0
- package/dist/factories/traefik/utils/helm-values-mapper.d.ts.map +1 -0
- package/dist/factories/traefik/utils/helm-values-mapper.js +372 -0
- package/dist/factories/traefik/utils/helm-values-mapper.js.map +1 -0
- package/dist/factories/traefik/utils/index.d.ts +6 -0
- package/dist/factories/traefik/utils/index.d.ts.map +1 -0
- package/dist/factories/traefik/utils/index.js +6 -0
- package/dist/factories/traefik/utils/index.js.map +1 -0
- package/dist/factories/traefik/utils/middleware-validation.d.ts +42 -0
- package/dist/factories/traefik/utils/middleware-validation.d.ts.map +1 -0
- package/dist/factories/traefik/utils/middleware-validation.js +78 -0
- package/dist/factories/traefik/utils/middleware-validation.js.map +1 -0
- package/dist/factories/webapp/compositions/web-app-with-processing.d.ts.map +1 -1
- package/dist/factories/webapp/compositions/web-app-with-processing.js +10 -0
- package/dist/factories/webapp/compositions/web-app-with-processing.js.map +1 -1
- package/dist/index.d.ts +4 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- 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
|