router/pkg/config/fixtures/full.yaml (338 lines of code) (raw):

# yaml-language-server: $schema=../config.schema.json version: "1" # General router options graph: token: "mytoken" log_level: "info" listen_addr: "localhost:3002" controlplane_url: "https://cosmo-cp.wundergraph.com" playground_enabled: true playground_path: "/" playground: enabled: false path: "/my-playground" concurrency_limit: 1500 introspection_enabled: true json_log: true shutdown_delay: 15s grace_period: 20s poll_interval: 10s health_check_path: "/health" readiness_check_path: "/health/ready" liveness_check_path: "/health/live" router_registration: true graphql_path: /graphql dev_mode: false instance_id: "" graphql_metrics: enabled: true collector_endpoint: "https://cosmo-metrics.wundergraph.com" localhost_fallback_inside_docker: true # Cross-Origin Resource Sharing (CORS) cors: allow_origins: ["*"] allow_methods: - HEAD - GET - POST allow_headers: - Origin - Content-Length - Content-Type allow_credentials: true max_age: 5m access_logs: enabled: true router: fields: - key: "hello" value_from: context_field: "operation_name" - key: "request_information" value_from: expression: "request.error ?? 'success'" subgraphs: enabled: true fields: - key: "response_field" value_from: response_header: "X-Response-Field" compliance: anonymize_ip: enabled: true method: redact # hash or redact # Config for custom modules # See "https://cosmo-docs.wundergraph.com/router/metrics-and-monitoring" for more information telemetry: # Common options service_name: "cosmo-router" # If no exporter is specified it uses https://cosmo-otel.wundergraph.com for tracing and metrics # OpenTelemetry Tracing tracing: enabled: true sampling_rate: 1 export_graphql_variables: true with_new_root: false propagation: # https://www.w3.org/TR/trace-context/ trace_context: true # https://www.w3.org/TR/baggage/ baggage: false # https://www.jaegertracing.io/ (compliant with opentracing) jaeger: false # https://github.com/openzipkin/b3-propagation (zipkin) b3: false datadog: true exporters: # If no exporters are defined, the default one is used - exporter: http # or grpc disabled: false endpoint: https://my-otel-collector.example.com # headers: {Authorization: Bearer <my-token>} batch_timeout: 10s export_timeout: 30s path: "/v1/traces" headers: {} # OpenTelemetry Metrics metrics: otlp: enabled: true router_runtime: true graphql_cache: true engine_stats: subscriptions: true exclude_metric_labels: [] exclude_metrics: [] # If no exporters are defined, the default one is used exporters: - exporter: http # or grpc disabled: false headers: {} path: "/v1/metrics" endpoint: https://my-otel-collector.example.com # headers: {Authorization: Bearer <my-token>} # Expose OpenTelemetry metrics for scraping prometheus: enabled: true path: "/metrics" listen_addr: "127.0.0.1:8088" graphql_cache: true engine_stats: subscriptions: true exclude_metrics: [] exclude_metric_labels: [] exclude_scope_info: true cache_control_policy: enabled: true value: "max-age=180, public" subgraphs: - name: "products" value: "max-age=60, public" # Config for custom modules # See "https://cosmo-docs.wundergraph.com/router/custom-modules" for more information modules: myModule: # Arbitrary values, unmarshalled by the module value: 1 cluster: name: "my-cluster" # Traffic configuration # See "https://cosmo-docs.wundergraph.com/router/traffic-shaping" for more information traffic_shaping: # Apply to all requests from clients to the router router: # Is the maximum size of the request body in MB, mib max_request_body_size: 5MB max_header_bytes: 4MiB decompression_enabled: false all: # Rules are applied to all subgraph requests. # Subgraphs transport options request_timeout: 60s dial_timeout: 30s tls_handshake_timeout: 0s response_header_timeout: 0s expect_continue_timeout: 0s keep_alive_idle_timeout: 0s keep_alive_probe_interval: 30s # Retry retry: # Rule is only applied to GraphQL operations of type "query" enabled: true algorithm: "backoff_jitter" max_attempts: 5 interval: 3s max_duration: 10s subgraphs: products: # Will only affect this subgraph request_timeout: 120s # Header manipulation # See "https://cosmo-docs.wundergraph.com/router/proxy-capabilities" for more information headers: all: # Header rules for all subgraph requests. request: - op: "propagate" # Forward a client header named: X-Test-Header # Exact match (Use the canonical version) - op: "propagate" matching: (?i)^X-Custom-.* # Regex match (Case insensitive) - op: "propagate" named: "X-User-Id" default: "123" # Set the value when the header was not set - op: "set" name: "X-API-Key" value: "some-secret" - op: "set" name: "x-operation-name" value_from: context_field: "operation_name" response: - op: "propagate" algorithm: "append" named: "X-Custom-Header" subgraphs: specific-subgraph: # Will only affect this subgraph request: - op: "propagate" named: Subgraph-Secret default: "some-secret" response: - op: "set" name: "X-Subgraph-Key" value: "some-subgraph-secret" cookie_whitelist: - "cookie1" - "cookie2" # Authentication and Authorization # See https://cosmo-docs.wundergraph.com/router/authentication-and-authorization for more information authentication: jwt: jwks: - url: "https://example.com/.well-known/jwks.json" refresh_interval: 1m algorithms: ["RS256"] - url: "https://example.com/.well-known/jwks2.json" refresh_interval: 2m algorithms: ["RS256", "HS256"] - url: "https://example.com/.well-known/jwks3.json" header_name: Authorization header_value_prefix: Bearer header_sources: - type: header name: X-Authorization value_prefixes: [Bearer, Token] - type: header name: authz authorization: require_authentication: false # Set to true to disable requests without authentication cdn: url: https://cosmo-cdn.wundergraph.com cache_size: 100MB events: providers: nats: - id: default url: "nats://localhost:4222" - id: my-nats url: "nats://localhost:4222" authentication: # token: "token" user_info: username: "admin" password: "admin" kafka: - id: my-kafka brokers: - "localhost:9092" tls: enabled: true authentication: sasl_plain: username: "admin" password: "admin" engine: enable_single_flight: true enable_request_tracing: true enable_execution_plan_cache_response_header: false max_concurrent_resolvers: 32 enable_net_poll: true enable_subgraph_fetch_operation_name: true websocket_client_poll_timeout: "1s" websocket_client_conn_buffer_size: 128 websocket_client_read_timeout: "5s" execution_plan_cache_size: 1024 resolver_max_recyclable_parser_size: 4096 debug: report_websocket_connections: false report_memory_usage: false rate_limit: enabled: true strategy: "simple" storage: cluster_enabled: true urls: - "test@localhost:8000" - "test2@localhost:8001" key_prefix: "cosmo_rate_limit" simple_strategy: rate: 60 burst: 60 period: "60s" reject_exceeding_requests: true override_routing_url: subgraphs: some-subgraph: http://router:3002/graphql overrides: subgraphs: some-subgraph: routing_url: http://router:3002/graphql subscription_url: http://router:3002/graphql/ws subscription_protocol: ws subscription_websocket_subprotocol: graphql-ws websocket: enabled: true absinthe_protocol: enabled: true handler_path: /absinthe/socket forward_initial_payload: true forward_upgrade_headers: enabled: true allow_list: - "Authorization" forward_upgrade_query_params: enabled: true allow_list: - "Authorization" authentication: from_initial_payload: enabled: true key: "Authorization" export_token: enabled: true header_key: "Authorization" storage_providers: s3: - id: "s3" endpoint: "localhost:10000" bucket: "cosmo" access_key: "Pj6opX3288YukriGCzIr" secret_key: "WNMg9X4fzMva18henO6XLX4qRHEArwYdT7Yt84w9" region: "us-east-1" secure: false redis: - id: "my_redis" cluster_enabled: false urls: - "test@localhost:8000" - "test2@localhost:8001" security: complexity_calculation_cache: enabled: true size: 1024 complexity_limits: depth: enabled: true limit: 5 ignore_persisted_operations: true total_fields: enabled: true limit: 7 ignore_persisted_operations: true root_fields: enabled: true limit: 3 ignore_persisted_operations: true root_field_aliases: enabled: true limit: 4 ignore_persisted_operations: true persisted_operations: safelist: enabled: true log_unknown: true cache: size: 100MB storage: provider_id: s3 object_prefix: "5ef73d80-cae4-4d0e-98a7-1e9fa922c1a4/92c25b45-a75b-4954-b8f6-6592a9b203eb/operations/foo" automatic_persisted_queries: enabled: true cache: size: 100MB ttl: 900 storage: provider_id: redis object_prefix: "cosmo_apq" execution_config: storage: provider_id: s3 object_path: "5ef73d80-cae4-4d0e-98a7-1e9fa922c1a4/92c25b45-a75b-4954-b8f6-6592a9b203eb/routerconfigs/latest.json" router_config_path: "latest.json" client_header: name: "Client-Name" version: "Client_Version"