typekro 0.33.9 → 0.34.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/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/expressions/composition/composition-analyzer-helpers.d.ts.map +1 -1
- package/dist/core/expressions/composition/composition-analyzer-helpers.js +20 -2
- package/dist/core/expressions/composition/composition-analyzer-helpers.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/core.d.ts.map +1 -1
- package/dist/core/serialization/core.js +13 -2
- package/dist/core/serialization/core.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/searxng/compositions/searxng-bootstrap.d.ts +1 -1
- package/dist/factories/searxng/compositions/searxng-bootstrap.d.ts.map +1 -1
- package/dist/factories/searxng/compositions/searxng-bootstrap.js +18 -13
- package/dist/factories/searxng/compositions/searxng-bootstrap.js.map +1 -1
- package/dist/factories/searxng/index.d.ts +3 -0
- package/dist/factories/searxng/index.d.ts.map +1 -1
- package/dist/factories/searxng/index.js +3 -0
- package/dist/factories/searxng/index.js.map +1 -1
- package/dist/factories/searxng/types.js +1 -1
- package/dist/factories/searxng/types.js.map +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,169 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Traefik `Middleware` resources.
|
|
3
|
+
*
|
|
4
|
+
* One factory, {@link traefikMiddleware}, covers the whole OSS middleware set
|
|
5
|
+
* through a discriminated union whose variants are mutually exclusive at the
|
|
6
|
+
* type level. On top of it sit typed builders for the middlewares an edge
|
|
7
|
+
* almost always needs, each of which carries the secure defaults from #172.
|
|
8
|
+
*/
|
|
9
|
+
import type { Composable, Enhanced } from '../../../core/types/index.js';
|
|
10
|
+
import type { TraefikBufferingMiddlewareConfig, TraefikChainMiddlewareConfig, TraefikForwardAuthMiddlewareConfig, TraefikHeadersMiddlewareConfig, TraefikInFlightReqMiddlewareConfig, TraefikMiddlewareSpec, TraefikRateLimitMiddlewareConfig, TraefikRedirectSchemeMiddlewareConfig } from '../types.js';
|
|
11
|
+
import { type TraefikResourceConfig } from './common.js';
|
|
12
|
+
import type { TraefikNoStatus } from './routing.js';
|
|
13
|
+
/**
|
|
14
|
+
* The builders' configuration types.
|
|
15
|
+
*
|
|
16
|
+
* They are DECLARED in `../types.js`, next to the ArkType schemas they are
|
|
17
|
+
* inferred from — the guide keeps every schema in one file — and re-exported
|
|
18
|
+
* here so the public import path stays `resources/middleware.js`.
|
|
19
|
+
*/
|
|
20
|
+
export type { TraefikBufferingMiddlewareConfig, TraefikChainMiddlewareConfig, TraefikForwardAuthMiddlewareConfig, TraefikHeadersMiddlewareConfig, TraefikInFlightReqMiddlewareConfig, TraefikMiddlewareMetadata, TraefikRateLimitMiddlewareConfig, TraefikRedirectSchemeMiddlewareConfig, } from '../types.js';
|
|
21
|
+
/**
|
|
22
|
+
* Create a Traefik `Middleware`.
|
|
23
|
+
*
|
|
24
|
+
* `spec` accepts exactly one middleware key. Setting two is a compile error,
|
|
25
|
+
* and is re-checked here because Traefik resolves such an object by applying
|
|
26
|
+
* one middleware and silently dropping the other.
|
|
27
|
+
*
|
|
28
|
+
* @throws {TypeKroError} `TRAEFIK_MIDDLEWARE_INVALID_SPEC` when the spec sets
|
|
29
|
+
* zero, several, or unknown middleware keys.
|
|
30
|
+
*
|
|
31
|
+
* @example
|
|
32
|
+
* ```typescript
|
|
33
|
+
* traefikMiddleware({
|
|
34
|
+
* name: 'strip-v1',
|
|
35
|
+
* namespace: 'edge',
|
|
36
|
+
* spec: { stripPrefix: { prefixes: ['/v1'] } },
|
|
37
|
+
* id: 'stripV1',
|
|
38
|
+
* });
|
|
39
|
+
* ```
|
|
40
|
+
*/
|
|
41
|
+
export declare function traefikMiddleware(config: Composable<TraefikResourceConfig<TraefikMiddlewareSpec>>): Enhanced<TraefikMiddlewareSpec, TraefikNoStatus>;
|
|
42
|
+
/**
|
|
43
|
+
* Create a `forwardAuth` `Middleware` with the secure edge defaults.
|
|
44
|
+
*
|
|
45
|
+
* `trustForwardHeader` is `false` unless explicitly overridden, and
|
|
46
|
+
* `authResponseHeaders` is an explicit allowlist.
|
|
47
|
+
*
|
|
48
|
+
* @example The Example orders-api authorizer, returning principal/tier/customer
|
|
49
|
+
* ```typescript
|
|
50
|
+
* traefikForwardAuthMiddleware({
|
|
51
|
+
* name: 'orders-api-authz',
|
|
52
|
+
* namespace: 'edge',
|
|
53
|
+
* address: 'http://orders-authorizer.edge.svc.cluster.local:8080/authorize',
|
|
54
|
+
* authResponseHeaders: ['X-Edge-Principal', 'X-Edge-Tier', 'X-Edge-Customer'],
|
|
55
|
+
* authRequestHeaders: ['Authorization', 'X-Edge-Api-Key'],
|
|
56
|
+
* id: 'ordersApiAuthz',
|
|
57
|
+
* });
|
|
58
|
+
* ```
|
|
59
|
+
*/
|
|
60
|
+
export declare function traefikForwardAuthMiddleware(config: Composable<TraefikForwardAuthMiddlewareConfig>): Enhanced<TraefikMiddlewareSpec, TraefikNoStatus>;
|
|
61
|
+
/**
|
|
62
|
+
* Create a `rateLimit` `Middleware`.
|
|
63
|
+
*
|
|
64
|
+
* @example Per-principal budget shared across replicas through Valkey
|
|
65
|
+
* ```typescript
|
|
66
|
+
* traefikRateLimitMiddleware({
|
|
67
|
+
* name: 'orders-api-rate-limit',
|
|
68
|
+
* namespace: 'edge',
|
|
69
|
+
* average: 50,
|
|
70
|
+
* burst: 100,
|
|
71
|
+
* period: '1s',
|
|
72
|
+
* requestHeaderName: 'X-Edge-Principal',
|
|
73
|
+
* redis: {
|
|
74
|
+
* endpoints: ['valkey-primary.edge.svc.cluster.local:6379'],
|
|
75
|
+
* secret: 'valkey-auth',
|
|
76
|
+
* db: 3,
|
|
77
|
+
* },
|
|
78
|
+
* id: 'ordersApiRateLimit',
|
|
79
|
+
* });
|
|
80
|
+
* ```
|
|
81
|
+
*/
|
|
82
|
+
export declare function traefikRateLimitMiddleware(config: Composable<TraefikRateLimitMiddlewareConfig>): Enhanced<TraefikMiddlewareSpec, TraefikNoStatus>;
|
|
83
|
+
/**
|
|
84
|
+
* Create an `inFlightReq` `Middleware` — a concurrency cap that protects an
|
|
85
|
+
* upstream from a slow-request pile-up that a rate limit alone would allow.
|
|
86
|
+
*
|
|
87
|
+
* @example
|
|
88
|
+
* ```typescript
|
|
89
|
+
* traefikInFlightReqMiddleware({
|
|
90
|
+
* name: 'orders-api-concurrency',
|
|
91
|
+
* namespace: 'edge',
|
|
92
|
+
* amount: 20,
|
|
93
|
+
* requestHeaderName: 'X-Edge-Customer',
|
|
94
|
+
* id: 'ordersApiConcurrency',
|
|
95
|
+
* });
|
|
96
|
+
* ```
|
|
97
|
+
*/
|
|
98
|
+
export declare function traefikInFlightReqMiddleware(config: Composable<TraefikInFlightReqMiddlewareConfig>): Enhanced<TraefikMiddlewareSpec, TraefikNoStatus>;
|
|
99
|
+
/**
|
|
100
|
+
* Create a `headers` `Middleware` for CORS and browser security headers.
|
|
101
|
+
*
|
|
102
|
+
* @example
|
|
103
|
+
* ```typescript
|
|
104
|
+
* traefikHeadersMiddleware({
|
|
105
|
+
* name: 'orders-api-headers',
|
|
106
|
+
* namespace: 'edge',
|
|
107
|
+
* headers: {
|
|
108
|
+
* accessControlAllowOriginList: ['https://console.example.com'],
|
|
109
|
+
* accessControlAllowMethods: ['GET', 'POST', 'OPTIONS'],
|
|
110
|
+
* accessControlAllowHeaders: ['authorization', 'content-type'],
|
|
111
|
+
* accessControlAllowCredentials: true,
|
|
112
|
+
* accessControlMaxAge: 600,
|
|
113
|
+
* addVaryHeader: true,
|
|
114
|
+
* frameDeny: true,
|
|
115
|
+
* contentTypeNosniff: true,
|
|
116
|
+
* referrerPolicy: 'strict-origin-when-cross-origin',
|
|
117
|
+
* stsSeconds: 31_536_000,
|
|
118
|
+
* stsIncludeSubdomains: true,
|
|
119
|
+
* },
|
|
120
|
+
* id: 'ordersApiHeaders',
|
|
121
|
+
* });
|
|
122
|
+
* ```
|
|
123
|
+
*/
|
|
124
|
+
export declare function traefikHeadersMiddleware(config: Composable<TraefikHeadersMiddlewareConfig>): Enhanced<TraefikMiddlewareSpec, TraefikNoStatus>;
|
|
125
|
+
/**
|
|
126
|
+
* Create a `redirectScheme` `Middleware`, the route-level counterpart to the
|
|
127
|
+
* entrypoint-level `web` → `websecure` redirect.
|
|
128
|
+
*
|
|
129
|
+
* Prefer the entrypoint redirect (`entrypoints.web.redirectToWebsecure` on the
|
|
130
|
+
* bootstrap spec) for a blanket policy; use this middleware when only some
|
|
131
|
+
* routes should redirect.
|
|
132
|
+
*/
|
|
133
|
+
export declare function traefikRedirectSchemeMiddleware(config: Composable<TraefikRedirectSchemeMiddlewareConfig>): Enhanced<TraefikMiddlewareSpec, TraefikNoStatus>;
|
|
134
|
+
/**
|
|
135
|
+
* Create a `buffering` `Middleware` enforcing request/response body limits.
|
|
136
|
+
*
|
|
137
|
+
* @example A 1 MiB request-body cap
|
|
138
|
+
* ```typescript
|
|
139
|
+
* traefikBufferingMiddleware({
|
|
140
|
+
* name: 'orders-api-body-limit',
|
|
141
|
+
* namespace: 'edge',
|
|
142
|
+
* buffering: { maxRequestBodyBytes: 1_048_576, memRequestBodyBytes: 262_144 },
|
|
143
|
+
* id: 'ordersApiBodyLimit',
|
|
144
|
+
* });
|
|
145
|
+
* ```
|
|
146
|
+
*/
|
|
147
|
+
export declare function traefikBufferingMiddleware(config: Composable<TraefikBufferingMiddlewareConfig>): Enhanced<TraefikMiddlewareSpec, TraefikNoStatus>;
|
|
148
|
+
/**
|
|
149
|
+
* Create a `chain` `Middleware` bundling an ordered middleware list into one
|
|
150
|
+
* reference, so several routes can share the same edge policy.
|
|
151
|
+
*
|
|
152
|
+
* @example
|
|
153
|
+
* ```typescript
|
|
154
|
+
* traefikChainMiddleware({
|
|
155
|
+
* name: 'orders-api-edge',
|
|
156
|
+
* namespace: 'edge',
|
|
157
|
+
* middlewares: [
|
|
158
|
+
* { name: 'orders-api-headers' },
|
|
159
|
+
* { name: 'orders-api-authz' },
|
|
160
|
+
* { name: 'orders-api-rate-limit' },
|
|
161
|
+
* { name: 'orders-api-concurrency' },
|
|
162
|
+
* { name: 'orders-api-body-limit' },
|
|
163
|
+
* ],
|
|
164
|
+
* id: 'ordersApiEdgeChain',
|
|
165
|
+
* });
|
|
166
|
+
* ```
|
|
167
|
+
*/
|
|
168
|
+
export declare function traefikChainMiddleware(config: Composable<TraefikChainMiddlewareConfig>): Enhanced<TraefikMiddlewareSpec, TraefikNoStatus>;
|
|
169
|
+
//# sourceMappingURL=middleware.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../../../../src/factories/traefik/resources/middleware.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAGzE,OAAO,KAAK,EACV,gCAAgC,EAEhC,4BAA4B,EAE5B,kCAAkC,EAClC,8BAA8B,EAE9B,kCAAkC,EAElC,qBAAqB,EAErB,gCAAgC,EAEhC,qCAAqC,EACtC,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,KAAK,qBAAqB,EAG3B,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAEpD;;;;;;GAMG;AACH,YAAY,EACV,gCAAgC,EAChC,4BAA4B,EAC5B,kCAAkC,EAClC,8BAA8B,EAC9B,kCAAkC,EAClC,yBAAyB,EACzB,gCAAgC,EAChC,qCAAqC,GACtC,MAAM,aAAa,CAAC;AASrB;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,UAAU,CAAC,qBAAqB,CAAC,qBAAqB,CAAC,CAAC,GAC/D,QAAQ,CAAC,qBAAqB,EAAE,eAAe,CAAC,CAMlD;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,UAAU,CAAC,kCAAkC,CAAC,GACrD,QAAQ,CAAC,qBAAqB,EAAE,eAAe,CAAC,CAYlD;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,UAAU,CAAC,gCAAgC,CAAC,GACnD,QAAQ,CAAC,qBAAqB,EAAE,eAAe,CAAC,CAclD;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,UAAU,CAAC,kCAAkC,CAAC,GACrD,QAAQ,CAAC,qBAAqB,EAAE,eAAe,CAAC,CAWlD;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,UAAU,CAAC,8BAA8B,CAAC,GACjD,QAAQ,CAAC,qBAAqB,EAAE,eAAe,CAAC,CAElD;AAED;;;;;;;GAOG;AACH,wBAAgB,+BAA+B,CAC7C,MAAM,EAAE,UAAU,CAAC,qCAAqC,CAAC,GACxD,QAAQ,CAAC,qBAAqB,EAAE,eAAe,CAAC,CAOlD;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,UAAU,CAAC,gCAAgC,CAAC,GACnD,QAAQ,CAAC,qBAAqB,EAAE,eAAe,CAAC,CAElD;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,UAAU,CAAC,4BAA4B,CAAC,GAC/C,QAAQ,CAAC,qBAAqB,EAAE,eAAe,CAAC,CAGlD"}
|
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Traefik `Middleware` resources.
|
|
3
|
+
*
|
|
4
|
+
* One factory, {@link traefikMiddleware}, covers the whole OSS middleware set
|
|
5
|
+
* through a discriminated union whose variants are mutually exclusive at the
|
|
6
|
+
* type level. On top of it sit typed builders for the middlewares an edge
|
|
7
|
+
* almost always needs, each of which carries the secure defaults from #172.
|
|
8
|
+
*/
|
|
9
|
+
import { createResource } from '../../shared.js';
|
|
10
|
+
import { TRAEFIK_API_VERSION } from '../constants.js';
|
|
11
|
+
import { assertTraefikMiddlewareSpec } from '../utils/middleware-validation.js';
|
|
12
|
+
import { traefikResourceDefinition, traefikStatuslessReadinessEvaluator, } from './common.js';
|
|
13
|
+
function middlewareResource(metadata, spec) {
|
|
14
|
+
return traefikMiddleware({ ...metadata, spec });
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Create a Traefik `Middleware`.
|
|
18
|
+
*
|
|
19
|
+
* `spec` accepts exactly one middleware key. Setting two is a compile error,
|
|
20
|
+
* and is re-checked here because Traefik resolves such an object by applying
|
|
21
|
+
* one middleware and silently dropping the other.
|
|
22
|
+
*
|
|
23
|
+
* @throws {TypeKroError} `TRAEFIK_MIDDLEWARE_INVALID_SPEC` when the spec sets
|
|
24
|
+
* zero, several, or unknown middleware keys.
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```typescript
|
|
28
|
+
* traefikMiddleware({
|
|
29
|
+
* name: 'strip-v1',
|
|
30
|
+
* namespace: 'edge',
|
|
31
|
+
* spec: { stripPrefix: { prefixes: ['/v1'] } },
|
|
32
|
+
* id: 'stripV1',
|
|
33
|
+
* });
|
|
34
|
+
* ```
|
|
35
|
+
*/
|
|
36
|
+
export function traefikMiddleware(config) {
|
|
37
|
+
assertTraefikMiddlewareSpec(config.spec, config.name);
|
|
38
|
+
return createResource(traefikResourceDefinition(TRAEFIK_API_VERSION, 'Middleware', config), { scope: 'namespaced' }).withReadinessEvaluator(traefikStatuslessReadinessEvaluator('Middleware'));
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Create a `forwardAuth` `Middleware` with the secure edge defaults.
|
|
42
|
+
*
|
|
43
|
+
* `trustForwardHeader` is `false` unless explicitly overridden, and
|
|
44
|
+
* `authResponseHeaders` is an explicit allowlist.
|
|
45
|
+
*
|
|
46
|
+
* @example The Example orders-api authorizer, returning principal/tier/customer
|
|
47
|
+
* ```typescript
|
|
48
|
+
* traefikForwardAuthMiddleware({
|
|
49
|
+
* name: 'orders-api-authz',
|
|
50
|
+
* namespace: 'edge',
|
|
51
|
+
* address: 'http://orders-authorizer.edge.svc.cluster.local:8080/authorize',
|
|
52
|
+
* authResponseHeaders: ['X-Edge-Principal', 'X-Edge-Tier', 'X-Edge-Customer'],
|
|
53
|
+
* authRequestHeaders: ['Authorization', 'X-Edge-Api-Key'],
|
|
54
|
+
* id: 'ordersApiAuthz',
|
|
55
|
+
* });
|
|
56
|
+
* ```
|
|
57
|
+
*/
|
|
58
|
+
export function traefikForwardAuthMiddleware(config) {
|
|
59
|
+
const forwardAuth = {
|
|
60
|
+
address: config.address,
|
|
61
|
+
// @security Never inherit the client's own X-Forwarded-* by default.
|
|
62
|
+
trustForwardHeader: config.trustForwardHeader ?? false,
|
|
63
|
+
authResponseHeaders: [...config.authResponseHeaders],
|
|
64
|
+
...(config.authRequestHeaders ? { authRequestHeaders: [...config.authRequestHeaders] } : {}),
|
|
65
|
+
...(config.forwardBody === undefined ? {} : { forwardBody: config.forwardBody }),
|
|
66
|
+
...(config.maxBodySize === undefined ? {} : { maxBodySize: config.maxBodySize }),
|
|
67
|
+
...(config.tls ? { tls: config.tls } : {}),
|
|
68
|
+
};
|
|
69
|
+
return middlewareResource(metadataOf(config), { forwardAuth });
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Create a `rateLimit` `Middleware`.
|
|
73
|
+
*
|
|
74
|
+
* @example Per-principal budget shared across replicas through Valkey
|
|
75
|
+
* ```typescript
|
|
76
|
+
* traefikRateLimitMiddleware({
|
|
77
|
+
* name: 'orders-api-rate-limit',
|
|
78
|
+
* namespace: 'edge',
|
|
79
|
+
* average: 50,
|
|
80
|
+
* burst: 100,
|
|
81
|
+
* period: '1s',
|
|
82
|
+
* requestHeaderName: 'X-Edge-Principal',
|
|
83
|
+
* redis: {
|
|
84
|
+
* endpoints: ['valkey-primary.edge.svc.cluster.local:6379'],
|
|
85
|
+
* secret: 'valkey-auth',
|
|
86
|
+
* db: 3,
|
|
87
|
+
* },
|
|
88
|
+
* id: 'ordersApiRateLimit',
|
|
89
|
+
* });
|
|
90
|
+
* ```
|
|
91
|
+
*/
|
|
92
|
+
export function traefikRateLimitMiddleware(config) {
|
|
93
|
+
const sourceCriterion = config.sourceCriterion ??
|
|
94
|
+
(config.requestHeaderName === undefined
|
|
95
|
+
? undefined
|
|
96
|
+
: { requestHeaderName: config.requestHeaderName });
|
|
97
|
+
const rateLimit = {
|
|
98
|
+
average: config.average,
|
|
99
|
+
burst: config.burst,
|
|
100
|
+
period: config.period ?? '1s',
|
|
101
|
+
...(sourceCriterion ? { sourceCriterion } : {}),
|
|
102
|
+
...(config.redis ? { redis: config.redis } : {}),
|
|
103
|
+
};
|
|
104
|
+
return middlewareResource(metadataOf(config), { rateLimit });
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Create an `inFlightReq` `Middleware` — a concurrency cap that protects an
|
|
108
|
+
* upstream from a slow-request pile-up that a rate limit alone would allow.
|
|
109
|
+
*
|
|
110
|
+
* @example
|
|
111
|
+
* ```typescript
|
|
112
|
+
* traefikInFlightReqMiddleware({
|
|
113
|
+
* name: 'orders-api-concurrency',
|
|
114
|
+
* namespace: 'edge',
|
|
115
|
+
* amount: 20,
|
|
116
|
+
* requestHeaderName: 'X-Edge-Customer',
|
|
117
|
+
* id: 'ordersApiConcurrency',
|
|
118
|
+
* });
|
|
119
|
+
* ```
|
|
120
|
+
*/
|
|
121
|
+
export function traefikInFlightReqMiddleware(config) {
|
|
122
|
+
const sourceCriterion = config.sourceCriterion ??
|
|
123
|
+
(config.requestHeaderName === undefined
|
|
124
|
+
? undefined
|
|
125
|
+
: { requestHeaderName: config.requestHeaderName });
|
|
126
|
+
const inFlightReq = {
|
|
127
|
+
amount: config.amount,
|
|
128
|
+
...(sourceCriterion ? { sourceCriterion } : {}),
|
|
129
|
+
};
|
|
130
|
+
return middlewareResource(metadataOf(config), { inFlightReq });
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Create a `headers` `Middleware` for CORS and browser security headers.
|
|
134
|
+
*
|
|
135
|
+
* @example
|
|
136
|
+
* ```typescript
|
|
137
|
+
* traefikHeadersMiddleware({
|
|
138
|
+
* name: 'orders-api-headers',
|
|
139
|
+
* namespace: 'edge',
|
|
140
|
+
* headers: {
|
|
141
|
+
* accessControlAllowOriginList: ['https://console.example.com'],
|
|
142
|
+
* accessControlAllowMethods: ['GET', 'POST', 'OPTIONS'],
|
|
143
|
+
* accessControlAllowHeaders: ['authorization', 'content-type'],
|
|
144
|
+
* accessControlAllowCredentials: true,
|
|
145
|
+
* accessControlMaxAge: 600,
|
|
146
|
+
* addVaryHeader: true,
|
|
147
|
+
* frameDeny: true,
|
|
148
|
+
* contentTypeNosniff: true,
|
|
149
|
+
* referrerPolicy: 'strict-origin-when-cross-origin',
|
|
150
|
+
* stsSeconds: 31_536_000,
|
|
151
|
+
* stsIncludeSubdomains: true,
|
|
152
|
+
* },
|
|
153
|
+
* id: 'ordersApiHeaders',
|
|
154
|
+
* });
|
|
155
|
+
* ```
|
|
156
|
+
*/
|
|
157
|
+
export function traefikHeadersMiddleware(config) {
|
|
158
|
+
return middlewareResource(metadataOf(config), { headers: config.headers });
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Create a `redirectScheme` `Middleware`, the route-level counterpart to the
|
|
162
|
+
* entrypoint-level `web` → `websecure` redirect.
|
|
163
|
+
*
|
|
164
|
+
* Prefer the entrypoint redirect (`entrypoints.web.redirectToWebsecure` on the
|
|
165
|
+
* bootstrap spec) for a blanket policy; use this middleware when only some
|
|
166
|
+
* routes should redirect.
|
|
167
|
+
*/
|
|
168
|
+
export function traefikRedirectSchemeMiddleware(config) {
|
|
169
|
+
const redirectScheme = {
|
|
170
|
+
scheme: config.scheme ?? 'https',
|
|
171
|
+
permanent: config.permanent ?? true,
|
|
172
|
+
...(config.port === undefined ? {} : { port: config.port }),
|
|
173
|
+
};
|
|
174
|
+
return middlewareResource(metadataOf(config), { redirectScheme });
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Create a `buffering` `Middleware` enforcing request/response body limits.
|
|
178
|
+
*
|
|
179
|
+
* @example A 1 MiB request-body cap
|
|
180
|
+
* ```typescript
|
|
181
|
+
* traefikBufferingMiddleware({
|
|
182
|
+
* name: 'orders-api-body-limit',
|
|
183
|
+
* namespace: 'edge',
|
|
184
|
+
* buffering: { maxRequestBodyBytes: 1_048_576, memRequestBodyBytes: 262_144 },
|
|
185
|
+
* id: 'ordersApiBodyLimit',
|
|
186
|
+
* });
|
|
187
|
+
* ```
|
|
188
|
+
*/
|
|
189
|
+
export function traefikBufferingMiddleware(config) {
|
|
190
|
+
return middlewareResource(metadataOf(config), { buffering: config.buffering });
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Create a `chain` `Middleware` bundling an ordered middleware list into one
|
|
194
|
+
* reference, so several routes can share the same edge policy.
|
|
195
|
+
*
|
|
196
|
+
* @example
|
|
197
|
+
* ```typescript
|
|
198
|
+
* traefikChainMiddleware({
|
|
199
|
+
* name: 'orders-api-edge',
|
|
200
|
+
* namespace: 'edge',
|
|
201
|
+
* middlewares: [
|
|
202
|
+
* { name: 'orders-api-headers' },
|
|
203
|
+
* { name: 'orders-api-authz' },
|
|
204
|
+
* { name: 'orders-api-rate-limit' },
|
|
205
|
+
* { name: 'orders-api-concurrency' },
|
|
206
|
+
* { name: 'orders-api-body-limit' },
|
|
207
|
+
* ],
|
|
208
|
+
* id: 'ordersApiEdgeChain',
|
|
209
|
+
* });
|
|
210
|
+
* ```
|
|
211
|
+
*/
|
|
212
|
+
export function traefikChainMiddleware(config) {
|
|
213
|
+
const chain = { middlewares: [...config.middlewares] };
|
|
214
|
+
return middlewareResource(metadataOf(config), { chain });
|
|
215
|
+
}
|
|
216
|
+
function metadataOf(config) {
|
|
217
|
+
return {
|
|
218
|
+
name: config.name,
|
|
219
|
+
namespace: config.namespace,
|
|
220
|
+
...(config.labels ? { labels: config.labels } : {}),
|
|
221
|
+
...(config.annotations ? { annotations: config.annotations } : {}),
|
|
222
|
+
...(config.id ? { id: config.id } : {}),
|
|
223
|
+
};
|
|
224
|
+
}
|
|
225
|
+
//# sourceMappingURL=middleware.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"middleware.js","sourceRoot":"","sources":["../../../../src/factories/traefik/resources/middleware.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Traefik routing resources: `IngressRoute`, `IngressRouteTCP`,
|
|
3
|
+
* `TraefikService` and `ServersTransport`.
|
|
4
|
+
*
|
|
5
|
+
* Every one of these kinds is status-less; see
|
|
6
|
+
* {@link traefikStatuslessReadinessEvaluator} for why they are registered as
|
|
7
|
+
* always-ready rather than condition-based.
|
|
8
|
+
*/
|
|
9
|
+
import type { Composable, Enhanced } from '../../../core/types/index.js';
|
|
10
|
+
import type { TraefikIngressRouteSpec, TraefikIngressRouteTCPSpec, TraefikServersTransportSpec, TraefikServiceSpec } from '../types.js';
|
|
11
|
+
import { type TraefikResourceConfig } from './common.js';
|
|
12
|
+
/** Traefik CRDs have no status subresource, so their status type is empty. */
|
|
13
|
+
export type TraefikNoStatus = Record<string, never>;
|
|
14
|
+
/**
|
|
15
|
+
* Create a Traefik `IngressRoute`.
|
|
16
|
+
*
|
|
17
|
+
* The HTTP router: it binds rule expressions on one or more entrypoints to
|
|
18
|
+
* backend services, with an ordered middleware chain and optional TLS.
|
|
19
|
+
*
|
|
20
|
+
* Set `ingressClassName` whenever the installation sets
|
|
21
|
+
* `providers.kubernetesCRD.ingressClass` — `traefikBootstrap` does, from
|
|
22
|
+
* `spec.ingressClass`. Traefik then processes only the CRDs whose class
|
|
23
|
+
* matches, which is what keeps two installations from stealing each other's
|
|
24
|
+
* routes; a route without it is silently ignored and the edge answers `404`.
|
|
25
|
+
*
|
|
26
|
+
* @example An authenticated, rate-limited API route terminating TLS
|
|
27
|
+
* ```typescript
|
|
28
|
+
* traefikIngressRoute({
|
|
29
|
+
* name: 'orders-api',
|
|
30
|
+
* namespace: 'edge',
|
|
31
|
+
* spec: {
|
|
32
|
+
* entryPoints: ['websecure'],
|
|
33
|
+
* ingressClassName: 'traefik',
|
|
34
|
+
* routes: [
|
|
35
|
+
* {
|
|
36
|
+
* match: 'Host(`api.example.com`) && PathPrefix(`/v1`)',
|
|
37
|
+
* kind: 'Rule',
|
|
38
|
+
* middlewares: [{ name: 'orders-api-authz' }, { name: 'orders-api-rate-limit' }],
|
|
39
|
+
* services: [{ name: 'orders-api', port: 8080 }],
|
|
40
|
+
* },
|
|
41
|
+
* ],
|
|
42
|
+
* tls: { secretName: 'orders-api-tls' },
|
|
43
|
+
* },
|
|
44
|
+
* id: 'ordersApiRoute',
|
|
45
|
+
* });
|
|
46
|
+
* ```
|
|
47
|
+
*/
|
|
48
|
+
export declare function traefikIngressRoute(config: Composable<TraefikResourceConfig<TraefikIngressRouteSpec>>): Enhanced<TraefikIngressRouteSpec, TraefikNoStatus>;
|
|
49
|
+
/**
|
|
50
|
+
* Create a Traefik `IngressRouteTCP`.
|
|
51
|
+
*
|
|
52
|
+
* The TCP router, matched on SNI. Use `tls.passthrough` to hand the TLS
|
|
53
|
+
* handshake to the backend instead of terminating it at the edge.
|
|
54
|
+
*
|
|
55
|
+
* @example
|
|
56
|
+
* ```typescript
|
|
57
|
+
* traefikIngressRouteTCP({
|
|
58
|
+
* name: 'postgres',
|
|
59
|
+
* namespace: 'edge',
|
|
60
|
+
* spec: {
|
|
61
|
+
* entryPoints: ['postgres'],
|
|
62
|
+
* routes: [{ match: 'HostSNI(`db.example.com`)', services: [{ name: 'pg-rw', port: 5432 }] }],
|
|
63
|
+
* tls: { passthrough: true },
|
|
64
|
+
* },
|
|
65
|
+
* id: 'postgresRoute',
|
|
66
|
+
* });
|
|
67
|
+
* ```
|
|
68
|
+
*/
|
|
69
|
+
export declare function traefikIngressRouteTCP(config: Composable<TraefikResourceConfig<TraefikIngressRouteTCPSpec>>): Enhanced<TraefikIngressRouteTCPSpec, TraefikNoStatus>;
|
|
70
|
+
/**
|
|
71
|
+
* Create a Traefik `TraefikService`.
|
|
72
|
+
*
|
|
73
|
+
* A composed backend — weighted round-robin, mirroring, failover, or highest
|
|
74
|
+
* random weight — referenced from a route with `kind: 'TraefikService'`.
|
|
75
|
+
*
|
|
76
|
+
* @example Canary split between two Deployments
|
|
77
|
+
* ```typescript
|
|
78
|
+
* traefikService({
|
|
79
|
+
* name: 'orders-api-canary',
|
|
80
|
+
* namespace: 'edge',
|
|
81
|
+
* spec: {
|
|
82
|
+
* weighted: {
|
|
83
|
+
* services: [
|
|
84
|
+
* { name: 'orders-api', port: 8080, weight: 9 },
|
|
85
|
+
* { name: 'orders-api-next', port: 8080, weight: 1 },
|
|
86
|
+
* ],
|
|
87
|
+
* },
|
|
88
|
+
* },
|
|
89
|
+
* id: 'ordersApiCanary',
|
|
90
|
+
* });
|
|
91
|
+
* ```
|
|
92
|
+
*/
|
|
93
|
+
export declare function traefikService(config: Composable<TraefikResourceConfig<TraefikServiceSpec>>): Enhanced<TraefikServiceSpec, TraefikNoStatus>;
|
|
94
|
+
/**
|
|
95
|
+
* Create a Traefik `ServersTransport`.
|
|
96
|
+
*
|
|
97
|
+
* Controls how Traefik dials the upstream: TLS trust, connection pooling and
|
|
98
|
+
* the forwarding timeouts. An edge fronting requests longer than Traefik's 60s
|
|
99
|
+
* default must raise `forwardingTimeouts.responseHeaderTimeout` here as well
|
|
100
|
+
* as the entrypoint's `respondingTimeouts`.
|
|
101
|
+
*
|
|
102
|
+
* @example
|
|
103
|
+
* ```typescript
|
|
104
|
+
* traefikServersTransport({
|
|
105
|
+
* name: 'orders-api-slow',
|
|
106
|
+
* namespace: 'edge',
|
|
107
|
+
* spec: { forwardingTimeouts: { responseHeaderTimeout: '120s', idleConnTimeout: '150s' } },
|
|
108
|
+
* id: 'ordersApiTransport',
|
|
109
|
+
* });
|
|
110
|
+
* ```
|
|
111
|
+
*/
|
|
112
|
+
export declare function traefikServersTransport(config: Composable<TraefikResourceConfig<TraefikServersTransportSpec>>): Enhanced<TraefikServersTransportSpec, TraefikNoStatus>;
|
|
113
|
+
//# sourceMappingURL=routing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"routing.d.ts","sourceRoot":"","sources":["../../../../src/factories/traefik/resources/routing.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAGzE,OAAO,KAAK,EACV,uBAAuB,EACvB,0BAA0B,EAC1B,2BAA2B,EAC3B,kBAAkB,EACnB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,KAAK,qBAAqB,EAG3B,MAAM,aAAa,CAAC;AAErB,8EAA8E;AAC9E,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AAEpD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,UAAU,CAAC,qBAAqB,CAAC,uBAAuB,CAAC,CAAC,GACjE,QAAQ,CAAC,uBAAuB,EAAE,eAAe,CAAC,CAKpD;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,UAAU,CAAC,qBAAqB,CAAC,0BAA0B,CAAC,CAAC,GACpE,QAAQ,CAAC,0BAA0B,EAAE,eAAe,CAAC,CAKvD;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,UAAU,CAAC,qBAAqB,CAAC,kBAAkB,CAAC,CAAC,GAC5D,QAAQ,CAAC,kBAAkB,EAAE,eAAe,CAAC,CAK/C;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,UAAU,CAAC,qBAAqB,CAAC,2BAA2B,CAAC,CAAC,GACrE,QAAQ,CAAC,2BAA2B,EAAE,eAAe,CAAC,CAKxD"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Traefik routing resources: `IngressRoute`, `IngressRouteTCP`,
|
|
3
|
+
* `TraefikService` and `ServersTransport`.
|
|
4
|
+
*
|
|
5
|
+
* Every one of these kinds is status-less; see
|
|
6
|
+
* {@link traefikStatuslessReadinessEvaluator} for why they are registered as
|
|
7
|
+
* always-ready rather than condition-based.
|
|
8
|
+
*/
|
|
9
|
+
import { createResource } from '../../shared.js';
|
|
10
|
+
import { TRAEFIK_API_VERSION } from '../constants.js';
|
|
11
|
+
import { traefikResourceDefinition, traefikStatuslessReadinessEvaluator, } from './common.js';
|
|
12
|
+
/**
|
|
13
|
+
* Create a Traefik `IngressRoute`.
|
|
14
|
+
*
|
|
15
|
+
* The HTTP router: it binds rule expressions on one or more entrypoints to
|
|
16
|
+
* backend services, with an ordered middleware chain and optional TLS.
|
|
17
|
+
*
|
|
18
|
+
* Set `ingressClassName` whenever the installation sets
|
|
19
|
+
* `providers.kubernetesCRD.ingressClass` — `traefikBootstrap` does, from
|
|
20
|
+
* `spec.ingressClass`. Traefik then processes only the CRDs whose class
|
|
21
|
+
* matches, which is what keeps two installations from stealing each other's
|
|
22
|
+
* routes; a route without it is silently ignored and the edge answers `404`.
|
|
23
|
+
*
|
|
24
|
+
* @example An authenticated, rate-limited API route terminating TLS
|
|
25
|
+
* ```typescript
|
|
26
|
+
* traefikIngressRoute({
|
|
27
|
+
* name: 'orders-api',
|
|
28
|
+
* namespace: 'edge',
|
|
29
|
+
* spec: {
|
|
30
|
+
* entryPoints: ['websecure'],
|
|
31
|
+
* ingressClassName: 'traefik',
|
|
32
|
+
* routes: [
|
|
33
|
+
* {
|
|
34
|
+
* match: 'Host(`api.example.com`) && PathPrefix(`/v1`)',
|
|
35
|
+
* kind: 'Rule',
|
|
36
|
+
* middlewares: [{ name: 'orders-api-authz' }, { name: 'orders-api-rate-limit' }],
|
|
37
|
+
* services: [{ name: 'orders-api', port: 8080 }],
|
|
38
|
+
* },
|
|
39
|
+
* ],
|
|
40
|
+
* tls: { secretName: 'orders-api-tls' },
|
|
41
|
+
* },
|
|
42
|
+
* id: 'ordersApiRoute',
|
|
43
|
+
* });
|
|
44
|
+
* ```
|
|
45
|
+
*/
|
|
46
|
+
export function traefikIngressRoute(config) {
|
|
47
|
+
return createResource(traefikResourceDefinition(TRAEFIK_API_VERSION, 'IngressRoute', config), { scope: 'namespaced' }).withReadinessEvaluator(traefikStatuslessReadinessEvaluator('IngressRoute'));
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Create a Traefik `IngressRouteTCP`.
|
|
51
|
+
*
|
|
52
|
+
* The TCP router, matched on SNI. Use `tls.passthrough` to hand the TLS
|
|
53
|
+
* handshake to the backend instead of terminating it at the edge.
|
|
54
|
+
*
|
|
55
|
+
* @example
|
|
56
|
+
* ```typescript
|
|
57
|
+
* traefikIngressRouteTCP({
|
|
58
|
+
* name: 'postgres',
|
|
59
|
+
* namespace: 'edge',
|
|
60
|
+
* spec: {
|
|
61
|
+
* entryPoints: ['postgres'],
|
|
62
|
+
* routes: [{ match: 'HostSNI(`db.example.com`)', services: [{ name: 'pg-rw', port: 5432 }] }],
|
|
63
|
+
* tls: { passthrough: true },
|
|
64
|
+
* },
|
|
65
|
+
* id: 'postgresRoute',
|
|
66
|
+
* });
|
|
67
|
+
* ```
|
|
68
|
+
*/
|
|
69
|
+
export function traefikIngressRouteTCP(config) {
|
|
70
|
+
return createResource(traefikResourceDefinition(TRAEFIK_API_VERSION, 'IngressRouteTCP', config), { scope: 'namespaced' }).withReadinessEvaluator(traefikStatuslessReadinessEvaluator('IngressRouteTCP'));
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Create a Traefik `TraefikService`.
|
|
74
|
+
*
|
|
75
|
+
* A composed backend — weighted round-robin, mirroring, failover, or highest
|
|
76
|
+
* random weight — referenced from a route with `kind: 'TraefikService'`.
|
|
77
|
+
*
|
|
78
|
+
* @example Canary split between two Deployments
|
|
79
|
+
* ```typescript
|
|
80
|
+
* traefikService({
|
|
81
|
+
* name: 'orders-api-canary',
|
|
82
|
+
* namespace: 'edge',
|
|
83
|
+
* spec: {
|
|
84
|
+
* weighted: {
|
|
85
|
+
* services: [
|
|
86
|
+
* { name: 'orders-api', port: 8080, weight: 9 },
|
|
87
|
+
* { name: 'orders-api-next', port: 8080, weight: 1 },
|
|
88
|
+
* ],
|
|
89
|
+
* },
|
|
90
|
+
* },
|
|
91
|
+
* id: 'ordersApiCanary',
|
|
92
|
+
* });
|
|
93
|
+
* ```
|
|
94
|
+
*/
|
|
95
|
+
export function traefikService(config) {
|
|
96
|
+
return createResource(traefikResourceDefinition(TRAEFIK_API_VERSION, 'TraefikService', config), { scope: 'namespaced' }).withReadinessEvaluator(traefikStatuslessReadinessEvaluator('TraefikService'));
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Create a Traefik `ServersTransport`.
|
|
100
|
+
*
|
|
101
|
+
* Controls how Traefik dials the upstream: TLS trust, connection pooling and
|
|
102
|
+
* the forwarding timeouts. An edge fronting requests longer than Traefik's 60s
|
|
103
|
+
* default must raise `forwardingTimeouts.responseHeaderTimeout` here as well
|
|
104
|
+
* as the entrypoint's `respondingTimeouts`.
|
|
105
|
+
*
|
|
106
|
+
* @example
|
|
107
|
+
* ```typescript
|
|
108
|
+
* traefikServersTransport({
|
|
109
|
+
* name: 'orders-api-slow',
|
|
110
|
+
* namespace: 'edge',
|
|
111
|
+
* spec: { forwardingTimeouts: { responseHeaderTimeout: '120s', idleConnTimeout: '150s' } },
|
|
112
|
+
* id: 'ordersApiTransport',
|
|
113
|
+
* });
|
|
114
|
+
* ```
|
|
115
|
+
*/
|
|
116
|
+
export function traefikServersTransport(config) {
|
|
117
|
+
return createResource(traefikResourceDefinition(TRAEFIK_API_VERSION, 'ServersTransport', config), { scope: 'namespaced' }).withReadinessEvaluator(traefikStatuslessReadinessEvaluator('ServersTransport'));
|
|
118
|
+
}
|
|
119
|
+
//# sourceMappingURL=routing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"routing.js","sourceRoot":"","sources":["../../../../src/factories/traefik/resources/routing.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAOtD,OAAO,EAEL,yBAAyB,EACzB,mCAAmC,GACpC,MAAM,aAAa,CAAC;AAKrB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,MAAM,UAAU,mBAAmB,CACjC,MAAkE;IAElE,OAAO,cAAc,CACnB,yBAAyB,CAAC,mBAAmB,EAAE,cAAc,EAAE,MAAM,CAAC,EACtE,EAAE,KAAK,EAAE,YAAY,EAAE,CACxB,CAAC,sBAAsB,CAAC,mCAAmC,CAAC,cAAc,CAAC,CAAC,CAAC;AAChF,CAAC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,sBAAsB,CACpC,MAAqE;IAErE,OAAO,cAAc,CACnB,yBAAyB,CAAC,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,CAAC,EACzE,EAAE,KAAK,EAAE,YAAY,EAAE,CACxB,CAAC,sBAAsB,CAAC,mCAAmC,CAAC,iBAAiB,CAAC,CAAC,CAAC;AACnF,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,UAAU,cAAc,CAC5B,MAA6D;IAE7D,OAAO,cAAc,CACnB,yBAAyB,CAAC,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,CAAC,EACxE,EAAE,KAAK,EAAE,YAAY,EAAE,CACxB,CAAC,sBAAsB,CAAC,mCAAmC,CAAC,gBAAgB,CAAC,CAAC,CAAC;AAClF,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,uBAAuB,CACrC,MAAsE;IAEtE,OAAO,cAAc,CACnB,yBAAyB,CAAC,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,CAAC,EAC1E,EAAE,KAAK,EAAE,YAAY,EAAE,CACxB,CAAC,sBAAsB,CAAC,mCAAmC,CAAC,kBAAkB,CAAC,CAAC,CAAC;AACpF,CAAC"}
|