---
source: apollo-router/src/configuration/tests.rs
assertion_line: 28
expression: "&schema"
---
{
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"definitions": {
"AWSSigV4Config": {
"description": "Configure AWS sigv4 auth.",
"oneOf": [
{
"additionalProperties": false,
"properties": {
"hardcoded": {
"$ref": "#/definitions/AWSSigV4HardcodedConfig"
}
},
"required": [
"hardcoded"
],
"type": "object"
},
{
"additionalProperties": false,
"properties": {
"default_chain": {
"$ref": "#/definitions/DefaultChainConfig"
}
},
"required": [
"default_chain"
],
"type": "object"
}
]
},
"AWSSigV4HardcodedConfig": {
"additionalProperties": false,
"description": "Hardcoded Config using access_key and secret.\nPrefer using DefaultChain instead.",
"properties": {
"access_key_id": {
"description": "The ID for this access key.",
"type": "string"
},
"assume_role": {
"anyOf": [
{
"$ref": "#/definitions/AssumeRoleProvider"
},
{
"type": "null"
}
],
"description": "Specify assumed role configuration."
},
"region": {
"description": "The AWS region this chain applies to.",
"type": "string"
},
"secret_access_key": {
"description": "The secret key used to sign requests.",
"type": "string"
},
"service_name": {
"description": "The service you're trying to access, eg: \"s3\", \"vpc-lattice-svcs\", etc.",
"type": "string"
}
},
"required": [
"access_key_id",
"secret_access_key",
"region",
"service_name"
],
"type": "object"
},
"ActiveRequestsAttributes": {
"additionalProperties": false,
"properties": {
"http.request.method": {
"default": false,
"description": "The HTTP request method",
"type": "boolean"
},
"server.address": {
"default": false,
"description": "The server address",
"type": "boolean"
},
"server.port": {
"default": false,
"description": "The server port",
"type": "boolean"
},
"url.scheme": {
"default": false,
"description": "The URL scheme",
"type": "boolean"
}
},
"type": "object"
},
"ActiveSubgraphRequests": {
"oneOf": [
{
"const": "count",
"description": "The number of active subgraph requests as a count.",
"type": "string"
},
{
"const": "bool",
"description": "Whether there are any active subgraph requests as a boolean.",
"type": "string"
}
]
},
"ActualCostMode": {
"oneOf": [
{
"const": "by_subgraph",
"description": "Computes the cost of each subgraph response and sums them to get the total query cost.",
"type": "string"
},
{
"const": "by_response_shape",
"deprecated": true,
"description": "Computes the cost based on the final structure of the composed response, not including any\ninterim structures from subgraph responses that did not make it to the composed response.",
"type": "string"
}
]
},
"All": {
"enum": [
"all"
],
"type": "string"
},
"ApolloMetricsReferenceMode": {
"description": "Apollo usage report reference generation modes.",
"oneOf": [
{
"const": "extended",
"description": "Use the extended mode to report input object fields and enum value references as well as object fields.",
"type": "string"
},
{
"const": "standard",
"description": "Use the standard mode that only reports referenced object fields.",
"type": "string"
}
]
},
"ApolloSignatureNormalizationAlgorithm": {
"description": "Apollo usage report signature normalization algorithm",
"oneOf": [
{
"const": "legacy",
"description": "Use the algorithm that matches the JavaScript-based implementation.",
"type": "string"
},
{
"const": "enhanced",
"description": "Use a new algorithm that includes input object forms, normalized aliases and variable names, and removes some\nedge cases from the JS implementation that affected normalization.",
"type": "string"
}
]
},
"ApolloTelemetryConfig": {
"additionalProperties": false,
"properties": {
"buffer_size": {
"default": 10000,
"description": "The buffer size for sending traces to Apollo. Increase this if you are experiencing lost traces.",
"format": "uint",
"minimum": 1,
"type": "integer"
},
"client_name_header": {
"default": "apollographql-client-name",
"description": "The name of the header to extract from requests when populating 'client name' for traces and metrics in Apollo Studio.",
"type": [
"string",
"null"
]
},
"client_version_header": {
"default": "apollographql-client-version",
"description": "The name of the header to extract from requests when populating 'client version' for traces and metrics in Apollo Studio.",
"type": [
"string",
"null"
]
},
"endpoint": {
"default": "https://usage-reporting.api.apollographql.com/api/ingress/traces",
"description": "The Apollo Studio endpoint for exporting traces and metrics.",
"type": "string"
},
"errors": {
"allOf": [
{
"$ref": "#/definitions/ErrorsConfiguration"
}
],
"description": "Configure the way errors are transmitted to Apollo Studio"
},
"experimental_local_field_metrics": {
"default": false,
"description": "Enable field metrics that are generated without FTV1 to be sent to Apollo Studio.",
"type": "boolean"
},
"experimental_otlp_endpoint": {
"default": "https://usage-reporting.api.apollographql.com/",
"description": "The Apollo Studio endpoint for exporting traces and metrics.",
"type": "string"
},
"experimental_otlp_metrics_protocol": {
"allOf": [
{
"$ref": "#/definitions/Protocol"
}
],
"default": "grpc",
"description": "OTLP protocol used for OTel metrics.\nNote this is only intended for use in tests."
},
"experimental_otlp_tracing_protocol": {
"allOf": [
{
"$ref": "#/definitions/Protocol"
}
],
"default": "grpc",
"description": "OTLP protocol used for OTel traces.\nNote this only applies if OTel traces are enabled and is only intended for use in tests."
},
"field_level_instrumentation_sampler": {
"allOf": [
{
"$ref": "#/definitions/SamplerOption"
}
],
"description": "Field level instrumentation for subgraphs via ftv1. ftv1 tracing can cause performance issues as it is transmitted in band with subgraph responses."
},
"library_name_header": {
"default": "apollographql-library-name",
"description": "The name of the header to extract from requests when populating 'library name' for traces and metrics in Apollo Studio.\nValid values must match the regex `^[ a-zA-Z0-9.@/_\\-]{1,60}$`. Invalid values result in a `400` response.",
"type": [
"string",
"null"
]
},
"library_version_header": {
"default": "apollographql-library-version",
"description": "The name of the header to extract from requests when populating 'library version' for traces and metrics in Apollo Studio.\nValid values must match the regex `^[ a-zA-Z0-9.@/_\\-]{1,60}$`. Invalid values result in a `400` response.",
"type": [
"string",
"null"
]
},
"metrics": {
"allOf": [
{
"$ref": "#/definitions/MetricsConfiguration"
}
],
"description": "Configuration for metrics."
},
"metrics_reference_mode": {
"allOf": [
{
"$ref": "#/definitions/ApolloMetricsReferenceMode"
}
],
"description": "Set the Apollo usage report reference reporting mode to use."
},
"otlp_tracing_sampler": {
"allOf": [
{
"$ref": "#/definitions/SamplerOption"
}
],
"description": "Percentage of traces to send via the OTel protocol when sending to Apollo Studio."
},
"send_headers": {
"allOf": [
{
"$ref": "#/definitions/ForwardHeaders"
}
],
"description": "To configure which request header names and values are included in trace data that's sent to Apollo Studio."
},
"send_variable_values": {
"allOf": [
{
"$ref": "#/definitions/ForwardValues"
}
],
"description": "To configure which GraphQL variable values are included in trace data that's sent to Apollo Studio"
},
"signature_normalization_algorithm": {
"allOf": [
{
"$ref": "#/definitions/ApolloSignatureNormalizationAlgorithm"
}
],
"default": "enhanced",
"description": "Set the signature normalization algorithm to use when sending Apollo usage reports."
},
"subgraph_metrics": {
"default": false,
"description": "Enable sending additional subgraph metrics to Apollo Studio via OTLP",
"type": "boolean"
},
"tracing": {
"allOf": [
{
"$ref": "#/definitions/TracingConfiguration"
}
],
"description": "Configuration for tracing."
}
},
"type": "object"
},
"ApolloUsageReportsBatchProcessorConfiguration": {
"properties": {
"max_export_timeout": {
"default": {
"nanos": 0,
"secs": 30
},
"description": "The maximum duration to export a batch of data.\nThe default value is 30 seconds.",
"type": "string"
},
"max_queue_size": {
"default": 2048,
"description": "The maximum queue size to buffer spans for delayed processing. If the\nqueue gets full it drops the reports. The default value is 2048.",
"format": "uint",
"minimum": 0,
"type": "integer"
},
"scheduled_delay": {
"default": {
"nanos": 0,
"secs": 5
},
"description": "The delay interval in milliseconds between two consecutive processing\nof batches. The default value is 5 seconds.",
"type": "string"
}
},
"type": "object"
},
"Apq": {
"additionalProperties": false,
"description": "Automatic Persisted Queries (APQ) configuration",
"properties": {
"enabled": {
"default": true,
"description": "Activates Automatic Persisted Queries (enabled by default)",
"type": "boolean"
},
"router": {
"allOf": [
{
"$ref": "#/definitions/Router"
}
],
"default": {
"cache": {
"in_memory": {
"limit": 512
},
"redis": null
}
}
},
"subgraph": {
"allOf": [
{
"$ref": "#/definitions/SubgraphSubgraphApqConfiguration"
}
],
"default": {
"all": {
"enabled": false
},
"subgraphs": {}
}
}
},
"type": "object"
},
"AssumeRoleProvider": {
"additionalProperties": false,
"description": "Specify assumed role configuration.",
"properties": {
"external_id": {
"description": "Unique identifier that might be required when you assume a role in another account.",
"type": [
"string",
"null"
]
},
"role_arn": {
"description": "Amazon Resource Name (ARN)\nfor the role assumed when making requests",
"type": "string"
},
"session_name": {
"description": "Uniquely identify a session when the same role is assumed by different principals or for different reasons.",
"type": "string"
}
},
"required": [
"role_arn",
"session_name"
],
"type": "object"
},
"AttributeArray": {
"anyOf": [
{
"description": "Array of bools",
"items": {
"type": "boolean"
},
"type": "array"
},
{
"description": "Array of integers",
"items": {
"format": "int64",
"type": "integer"
},
"type": "array"
},
{
"description": "Array of floats",
"items": {
"format": "double",
"type": "number"
},
"type": "array"
},
{
"description": "Array of strings",
"items": {
"type": "string"
},
"type": "array"
}
]
},
"AttributeValue": {
"anyOf": [
{
"description": "bool values",
"type": "boolean"
},
{
"description": "i64 values",
"format": "int64",
"type": "integer"
},
{
"description": "f64 values",
"format": "double",
"type": "number"
},
{
"description": "String values",
"type": "string"
},
{
"allOf": [
{
"$ref": "#/definitions/AttributeArray"
}
],
"description": "Array of homogeneous values"
}
]
},
"AuthConfig": {
"oneOf": [
{
"additionalProperties": false,
"properties": {
"aws_sig_v4": {
"$ref": "#/definitions/AWSSigV4Config"
}
},
"required": [
"aws_sig_v4"
],
"type": "object"
}
]
},
"AuthenticationConfig": {
"additionalProperties": false,
"description": "Authentication",
"properties": {
"connector": {
"anyOf": [
{
"$ref": "#/definitions/AuthenticationConnectorConfig"
},
{
"type": "null"
}
],
"description": "Connector configuration"
},
"router": {
"anyOf": [
{
"$ref": "#/definitions/AuthenticationRouterConfig"
},
{
"type": "null"
}
],
"description": "Router configuration"
},
"subgraph": {
"anyOf": [
{
"$ref": "#/definitions/AuthenticationSubgraphConfig"
},
{
"type": "null"
}
],
"description": "Subgraph configuration"
}
},
"type": "object"
},
"AuthenticationConnectorConfig": {
"additionalProperties": false,
"description": "Configure connector authentication",
"properties": {
"sources": {
"additionalProperties": {
"$ref": "#/definitions/AuthConfig"
},
"default": {},
"description": "Create a configuration that will apply only to a specific source.",
"type": "object"
}
},
"type": "object"
},
"AuthenticationRouterConfig": {
"additionalProperties": false,
"properties": {
"jwt": {
"allOf": [
{
"$ref": "#/definitions/JWTConf"
}
],
"description": "The JWT configuration"
}
},
"required": [
"jwt"
],
"type": "object"
},
"AuthenticationSubgraphConfig": {
"additionalProperties": false,
"description": "Configure subgraph authentication",
"properties": {
"all": {
"anyOf": [
{
"$ref": "#/definitions/AuthConfig"
},
{
"type": "null"
}
],
"default": null,
"description": "Configuration that will apply to all subgraphs."
},
"subgraphs": {
"additionalProperties": {
"$ref": "#/definitions/AuthConfig"
},
"default": {},
"description": "Create a configuration that will apply only to a specific subgraph.",
"type": "object"
}
},
"type": "object"
},
"AuthorizationConfig": {
"description": "Authorization plugin",
"properties": {
"directives": {
"allOf": [
{
"$ref": "#/definitions/AuthorizationDirectivesConfig"
}
],
"description": "`@authenticated`, `@requiresScopes` and `@policy` directives"
},
"require_authentication": {
"default": false,
"description": "Reject unauthenticated requests",
"type": "boolean"
}
},
"type": "object"
},
"AuthorizationDirectivesConfig": {
"properties": {
"dry_run": {
"default": false,
"description": "generates the authorization error messages without modying the query",
"type": "boolean"
},
"enabled": {
"default": true,
"description": "enables the `@authenticated` and `@requiresScopes` directives",
"type": "boolean"
},
"errors": {
"allOf": [
{
"$ref": "#/definitions/AuthorizationErrorConfig"
}
],
"default": {
"log": true,
"response": "errors"
},
"description": "authorization errors behaviour"
},
"reject_unauthorized": {
"default": false,
"description": "refuse a query entirely if any part would be filtered",
"type": "boolean"
}
},
"type": "object"
},
"AuthorizationErrorConfig": {
"properties": {
"log": {
"default": true,
"description": "log authorization errors",
"type": "boolean"
},
"response": {
"allOf": [
{
"$ref": "#/definitions/ErrorLocation"
}
],
"default": "errors",
"description": "location of authorization errors in the GraphQL response"
}
},
"type": "object"
},
"BatchProcessorConfig": {
"description": "Batch processor configuration",
"properties": {
"max_concurrent_exports": {
"default": 1,
"description": "Maximum number of concurrent exports\n\nLimits the number of spawned tasks for exports and thus memory consumed\nby an exporter. A value of 1 will cause exports to be performed\nsynchronously on the BatchSpanProcessor task.\nThe default is 1.",
"format": "uint",
"minimum": 0,
"type": "integer"
},
"max_export_batch_size": {
"default": 512,
"description": "The maximum number of spans to process in a single batch. If there are\nmore than one batch worth of spans then it processes multiple batches\nof spans one batch after the other without any delay. The default value\nis 512.",
"format": "uint",
"minimum": 0,
"type": "integer"
},
"max_export_timeout": {
"default": {
"nanos": 0,
"secs": 30
},
"description": "The maximum duration to export a batch of data.\nThe default value is 30 seconds.",
"type": "string"
},
"max_queue_size": {
"default": 2048,
"description": "The maximum queue size to buffer spans for delayed processing. If the\nqueue gets full it drops the spans. The default value is 2048.",
"format": "uint",
"minimum": 0,
"type": "integer"
},
"scheduled_delay": {
"default": {
"nanos": 0,
"secs": 5
},
"description": "The delay interval in milliseconds between two consecutive processing\nof batches. The default value is 5 seconds.",
"type": "string"
}
},
"type": "object"
},
"Batching": {
"additionalProperties": false,
"description": "Configuration for Batching",
"properties": {
"enabled": {
"default": false,
"description": "Activates Batching (disabled by default)",
"type": "boolean"
},
"maximum_size": {
"default": null,
"description": "Maximum size for a batch",
"format": "uint",
"minimum": 0,
"type": [
"integer",
"null"
]
},
"mode": {
"allOf": [
{
"$ref": "#/definitions/BatchingMode"
}
],
"description": "Batching mode"
},
"subgraph": {
"anyOf": [
{
"$ref": "#/definitions/SubgraphCommonBatchingConfigConfiguration"
},
{
"type": "null"
}
],
"description": "Subgraph options for batching"
}
},
"required": [
"mode"
],
"type": "object"
},
"BatchingMode": {
"oneOf": [
{
"const": "batch_http_link",
"description": "batch_http_link",
"type": "string"
}
]
},
"BodyConf": {
"anyOf": [
{
"description": "Send entire body (true) or nothing (false)",
"type": "boolean"
},
{
"allOf": [
{
"$ref": "#/definitions/BodyFieldsConf"
}
],
"description": "Send specific fields"
}
],
"description": "Configuration for which body fields to send to coprocessor"
},
"BodyFieldsConf": {
"additionalProperties": false,
"description": "Configuration for selective body fields",
"properties": {
"data": {
"default": false,
"description": "Send the data field",
"type": "boolean"
},
"errors": {
"default": false,
"description": "Send the errors field",
"type": "boolean"
},
"extensions": {
"default": false,
"description": "Send the extensions field",
"type": "boolean"
}
},
"type": "object"
},
"CSRFConfig": {
"additionalProperties": false,
"description": "CSRF protection configuration.\n\nSee <https://owasp.org/www-community/attacks/csrf> for an explanation on CSRF attacks.",
"properties": {
"required_headers": {
"default": [
"x-apollo-operation-name",
"apollo-require-preflight"
],
"description": "Override the headers to check for by setting\ncustom_headers\nNote that if you set required_headers here,\nyou may also want to have a look at your `CORS` configuration,\nand make sure you either:\n- did not set any `allow_headers` list (so it defaults to `mirror_request`)\n- added your required headers to the allow_headers list, as shown in the\n `examples/cors-and-csrf/custom-headers.router.yaml` files.",
"items": {
"type": "string"
},
"type": "array"
},
"unsafe_disabled": {
"default": false,
"description": "The CSRF plugin is enabled by default.\n\nSetting `unsafe_disabled: true` *disables* CSRF protection.",
"type": "boolean"
}
},
"type": "object"
},
"Cache": {
"additionalProperties": false,
"description": "Cache configuration",
"properties": {
"in_memory": {
"allOf": [
{
"$ref": "#/definitions/InMemoryCache"
}
],
"default": {
"limit": 512
},
"description": "Configures the in memory cache (always active)"
},
"redis": {
"anyOf": [
{
"$ref": "#/definitions/RedisCache"
},
{
"type": "null"
}
],
"default": null,
"description": "Configures and activates the Redis cache"
}
},
"type": "object"
},
"CacheControlSelector": {
"oneOf": [
{
"const": "scope",
"description": "Returns the scope, either `public` or `private`",
"type": "string"
},
{
"const": "no_store",
"description": "Boolean to know the value of no-store",
"type": "string"
},
{
"const": "max_age",
"description": "Value of s-maxage or max-age in cache-control",
"type": "string"
}
]
},
"CacheKind": {
"enum": [
"hit",
"miss"
],
"type": "string"
},
"CacheStatus": {
"enum": [
"hit",
"miss",
"partial_hit",
"status"
],
"type": "string"
},
"CallbackMode": {
"additionalProperties": false,
"description": "Using a callback url",
"properties": {
"heartbeat_interval": {
"allOf": [
{
"$ref": "#/definitions/HeartbeatInterval"
}
],
"default": "enabled",
"description": "Heartbeat interval for callback mode (default: 5secs)"
},
"listen": {
"anyOf": [
{
"$ref": "#/definitions/ListenAddr"
},
{
"type": "null"
}
],
"description": "Listen address on which the callback must listen (default: 127.0.0.1:4000)",
"writeOnly": true
},
"path": {
"description": "Specify on which path you want to listen for callbacks (default: /callback)",
"type": [
"string",
"null"
],
"writeOnly": true
},
"public_url": {
"description": "URL used to access this router instance, including the path configured on the Router",
"type": "string"
},
"subgraphs": {
"default": [],
"description": "Specify on which subgraph we enable the callback mode for subscription\nIf empty it applies to all subgraphs (passthrough mode takes precedence)",
"items": {
"type": "string"
},
"type": "array",
"uniqueItems": true
}
},
"required": [
"public_url"
],
"type": "object"
},
"Client": {
"additionalProperties": false,
"description": "HTTP client configuration",
"properties": {
"dns_resolution_strategy": {
"anyOf": [
{
"$ref": "#/definitions/DnsResolutionStrategy"
},
{
"type": "null"
}
],
"description": "Specify a DNS resolution strategy to use when resolving the coprocessor URL."
},
"experimental_http2": {
"anyOf": [
{
"$ref": "#/definitions/Http2Config"
},
{
"type": "null"
}
],
"description": "Use HTTP/2 to communicate with the coprocessor."
},
"experimental_http2_keep_alive_interval": {
"default": null,
"description": "Configure the interval for HTTP/2 keep-alive pings. Requires HTTP/2 to be enabled. If\nunset (the default), keep-alive pings are disabled.",
"type": [
"string",
"null"
]
},
"experimental_http2_keep_alive_timeout": {
"default": null,
"description": "Configure the timeout for HTTP/2 keep-alive pings. Requires HTTP/2 to be enabled and\n`experimental_http2_keep_alive_interval` to be set. Defaults to 20 seconds.",
"type": [
"string",
"null"
]
},
"pool_idle_timeout": {
"default": {
"nanos": 0,
"secs": 15
},
"description": "Specify a timeout for idle sockets being kept-alive in the client's connection pool",
"type": [
"string",
"null"
]
}
},
"type": "object"
},
"CommonBatchingConfig": {
"description": "Common options for configuring subgraph batching",
"properties": {
"enabled": {
"description": "Whether this batching config should be enabled",
"type": "boolean"
}
},
"required": [
"enabled"
],
"type": "object"
},
"Compression": {
"oneOf": [
{
"const": "gzip",
"description": "gzip",
"type": "string"
},
{
"const": "deflate",
"description": "deflate",
"type": "string"
},
{
"const": "br",
"description": "brotli",
"type": "string"
},
{
"const": "identity",
"description": "identity",
"type": "string"
}
]
},
"ConditionConnectorSelector": {
"description": "Specify a condition for when an [instrument][] should be mutated or an [event][] should be triggered.\n\n[instrument]: https://www.apollographql.com/docs/graphos/routing/observability/telemetry/instrumentation/instruments\n[event]: https://www.apollographql.com/docs/graphos/routing/observability/telemetry/instrumentation/events",
"oneOf": [
{
"additionalProperties": false,
"description": "A condition to check a selection against a value.",
"properties": {
"eq": {
"items": {
"$ref": "#/definitions/ConnectorSelectorOrValue"
},
"maxItems": 2,
"minItems": 2,
"type": "array"
}
},
"required": [
"eq"
],
"type": "object"
},
{
"additionalProperties": false,
"description": "The first selection must be greater than the second selection.",
"properties": {
"gt": {
"items": {
"$ref": "#/definitions/ConnectorSelectorOrValue"
},
"maxItems": 2,
"minItems": 2,
"type": "array"
}
},
"required": [
"gt"
],
"type": "object"
},
{
"additionalProperties": false,
"description": "The first selection must be less than the second selection.",
"properties": {
"lt": {
"items": {
"$ref": "#/definitions/ConnectorSelectorOrValue"
},
"maxItems": 2,
"minItems": 2,
"type": "array"
}
},
"required": [
"lt"
],
"type": "object"
},
{
"additionalProperties": false,
"description": "A condition to check a selection against a selector.",
"properties": {
"exists": {
"$ref": "#/definitions/ConnectorSelector"
}
},
"required": [
"exists"
],
"type": "object"
},
{
"additionalProperties": false,
"description": "All sub-conditions must be true.",
"properties": {
"all": {
"items": {
"$ref": "#/definitions/ConditionConnectorSelector"
},
"type": "array"
}
},
"required": [
"all"
],
"type": "object"
},
{
"additionalProperties": false,
"description": "At least one sub-conditions must be true.",
"properties": {
"any": {
"items": {
"$ref": "#/definitions/ConditionConnectorSelector"
},
"type": "array"
}
},
"required": [
"any"
],
"type": "object"
},
{
"additionalProperties": false,
"description": "The sub-condition must not be true",
"properties": {
"not": {
"$ref": "#/definitions/ConditionConnectorSelector"
}
},
"required": [
"not"
],
"type": "object"
},
{
"const": "true",
"description": "Static true condition",
"type": "string"
},
{
"const": "false",
"description": "Static false condition",
"type": "string"
}
]
},
"ConditionGraphQLSelector": {
"description": "Specify a condition for when an [instrument][] should be mutated or an [event][] should be triggered.\n\n[instrument]: https://www.apollographql.com/docs/graphos/routing/observability/telemetry/instrumentation/instruments\n[event]: https://www.apollographql.com/docs/graphos/routing/observability/telemetry/instrumentation/events",
"oneOf": [
{
"additionalProperties": false,
"description": "A condition to check a selection against a value.",
"properties": {
"eq": {
"items": {
"$ref": "#/definitions/GraphQLSelectorOrValue"
},
"maxItems": 2,
"minItems": 2,
"type": "array"
}
},
"required": [
"eq"
],
"type": "object"
},
{
"additionalProperties": false,
"description": "The first selection must be greater than the second selection.",
"properties": {
"gt": {
"items": {
"$ref": "#/definitions/GraphQLSelectorOrValue"
},
"maxItems": 2,
"minItems": 2,
"type": "array"
}
},
"required": [
"gt"
],
"type": "object"
},
{
"additionalProperties": false,
"description": "The first selection must be less than the second selection.",
"properties": {
"lt": {
"items": {
"$ref": "#/definitions/GraphQLSelectorOrValue"
},
"maxItems": 2,
"minItems": 2,
"type": "array"
}
},
"required": [
"lt"
],
"type": "object"
},
{
"additionalProperties": false,
"description": "A condition to check a selection against a selector.",
"properties": {
"exists": {
"$ref": "#/definitions/GraphQLSelector"
}
},
"required": [
"exists"
],
"type": "object"
},
{
"additionalProperties": false,
"description": "All sub-conditions must be true.",
"properties": {
"all": {
"items": {
"$ref": "#/definitions/ConditionGraphQLSelector"
},
"type": "array"
}
},
"required": [
"all"
],
"type": "object"
},
{
"additionalProperties": false,
"description": "At least one sub-conditions must be true.",
"properties": {
"any": {
"items": {
"$ref": "#/definitions/ConditionGraphQLSelector"
},
"type": "array"
}
},
"required": [
"any"
],
"type": "object"
},
{
"additionalProperties": false,
"description": "The sub-condition must not be true",
"properties": {
"not": {
"$ref": "#/definitions/ConditionGraphQLSelector"
}
},
"required": [
"not"
],
"type": "object"
},
{
"const": "true",
"description": "Static true condition",
"type": "string"
},
{
"const": "false",
"description": "Static false condition",
"type": "string"
}
]
},
"ConditionHttpClientSelector": {
"description": "Specify a condition for when an [instrument][] should be mutated or an [event][] should be triggered.\n\n[instrument]: https://www.apollographql.com/docs/graphos/routing/observability/telemetry/instrumentation/instruments\n[event]: https://www.apollographql.com/docs/graphos/routing/observability/telemetry/instrumentation/events",
"oneOf": [
{
"additionalProperties": false,
"description": "A condition to check a selection against a value.",
"properties": {
"eq": {
"items": {
"$ref": "#/definitions/HttpClientSelectorOrValue"
},
"maxItems": 2,
"minItems": 2,
"type": "array"
}
},
"required": [
"eq"
],
"type": "object"
},
{
"additionalProperties": false,
"description": "The first selection must be greater than the second selection.",
"properties": {
"gt": {
"items": {
"$ref": "#/definitions/HttpClientSelectorOrValue"
},
"maxItems": 2,
"minItems": 2,
"type": "array"
}
},
"required": [
"gt"
],
"type": "object"
},
{
"additionalProperties": false,
"description": "The first selection must be less than the second selection.",
"properties": {
"lt": {
"items": {
"$ref": "#/definitions/HttpClientSelectorOrValue"
},
"maxItems": 2,
"minItems": 2,
"type": "array"
}
},
"required": [
"lt"
],
"type": "object"
},
{
"additionalProperties": false,
"description": "A condition to check a selection against a selector.",
"properties": {
"exists": {
"$ref": "#/definitions/HttpClientSelector"
}
},
"required": [
"exists"
],
"type": "object"
},
{
"additionalProperties": false,
"description": "All sub-conditions must be true.",
"properties": {
"all": {
"items": {
"$ref": "#/definitions/ConditionHttpClientSelector"
},
"type": "array"
}
},
"required": [
"all"
],
"type": "object"
},
{
"additionalProperties": false,
"description": "At least one sub-conditions must be true.",
"properties": {
"any": {
"items": {
"$ref": "#/definitions/ConditionHttpClientSelector"
},
"type": "array"
}
},
"required": [
"any"
],
"type": "object"
},
{
"additionalProperties": false,
"description": "The sub-condition must not be true",
"properties": {
"not": {
"$ref": "#/definitions/ConditionHttpClientSelector"
}
},
"required": [
"not"
],
"type": "object"
},
{
"const": "true",
"description": "Static true condition",
"type": "string"
},
{
"const": "false",
"description": "Static false condition",
"type": "string"
}
]
},
"ConditionRouterSelector": {
"description": "Specify a condition for when an [instrument][] should be mutated or an [event][] should be triggered.\n\n[instrument]: https://www.apollographql.com/docs/graphos/routing/observability/telemetry/instrumentation/instruments\n[event]: https://www.apollographql.com/docs/graphos/routing/observability/telemetry/instrumentation/events",
"oneOf": [
{
"additionalProperties": false,
"description": "A condition to check a selection against a value.",
"properties": {
"eq": {
"items": {
"$ref": "#/definitions/RouterSelectorOrValue"
},
"maxItems": 2,
"minItems": 2,
"type": "array"
}
},
"required": [
"eq"
],
"type": "object"
},
{
"additionalProperties": false,
"description": "The first selection must be greater than the second selection.",
"properties": {
"gt": {
"items": {
"$ref": "#/definitions/RouterSelectorOrValue"
},
"maxItems": 2,
"minItems": 2,
"type": "array"
}
},
"required": [
"gt"
],
"type": "object"
},
{
"additionalProperties": false,
"description": "The first selection must be less than the second selection.",
"properties": {
"lt": {
"items": {
"$ref": "#/definitions/RouterSelectorOrValue"
},
"maxItems": 2,
"minItems": 2,
"type": "array"
}
},
"required": [
"lt"
],
"type": "object"
},
{
"additionalProperties": false,
"description": "A condition to check a selection against a selector.",
"properties": {
"exists": {
"$ref": "#/definitions/RouterSelector"
}
},
"required": [
"exists"
],
"type": "object"
},
{
"additionalProperties": false,
"description": "All sub-conditions must be true.",
"properties": {
"all": {
"items": {
"$ref": "#/definitions/ConditionRouterSelector"
},
"type": "array"
}
},
"required": [
"all"
],
"type": "object"
},
{
"additionalProperties": false,
"description": "At least one sub-conditions must be true.",
"properties": {
"any": {
"items": {
"$ref": "#/definitions/ConditionRouterSelector"
},
"type": "array"
}
},
"required": [
"any"
],
"type": "object"
},
{
"additionalProperties": false,
"description": "The sub-condition must not be true",
"properties": {
"not": {
"$ref": "#/definitions/ConditionRouterSelector"
}
},
"required": [
"not"
],
"type": "object"
},
{
"const": "true",
"description": "Static true condition",
"type": "string"
},
{
"const": "false",
"description": "Static false condition",
"type": "string"
}
]
},
"ConditionSubgraphSelector": {
"description": "Specify a condition for when an [instrument][] should be mutated or an [event][] should be triggered.\n\n[instrument]: https://www.apollographql.com/docs/graphos/routing/observability/telemetry/instrumentation/instruments\n[event]: https://www.apollographql.com/docs/graphos/routing/observability/telemetry/instrumentation/events",
"oneOf": [
{
"additionalProperties": false,
"description": "A condition to check a selection against a value.",
"properties": {
"eq": {
"items": {
"$ref": "#/definitions/SubgraphSelectorOrValue"
},
"maxItems": 2,
"minItems": 2,
"type": "array"
}
},
"required": [
"eq"
],
"type": "object"
},
{
"additionalProperties": false,
"description": "The first selection must be greater than the second selection.",
"properties": {
"gt": {
"items": {
"$ref": "#/definitions/SubgraphSelectorOrValue"
},
"maxItems": 2,
"minItems": 2,
"type": "array"
}
},
"required": [
"gt"
],
"type": "object"
},
{
"additionalProperties": false,
"description": "The first selection must be less than the second selection.",
"properties": {
"lt": {
"items": {
"$ref": "#/definitions/SubgraphSelectorOrValue"
},
"maxItems": 2,
"minItems": 2,
"type": "array"
}
},
"required": [
"lt"
],
"type": "object"
},
{
"additionalProperties": false,
"description": "A condition to check a selection against a selector.",
"properties": {
"exists": {
"$ref": "#/definitions/SubgraphSelector"
}
},
"required": [
"exists"
],
"type": "object"
},
{
"additionalProperties": false,
"description": "All sub-conditions must be true.",
"properties": {
"all": {
"items": {
"$ref": "#/definitions/ConditionSubgraphSelector"
},
"type": "array"
}
},
"required": [
"all"
],
"type": "object"
},
{
"additionalProperties": false,
"description": "At least one sub-conditions must be true.",
"properties": {
"any": {
"items": {
"$ref": "#/definitions/ConditionSubgraphSelector"
},
"type": "array"
}
},
"required": [
"any"
],
"type": "object"
},
{
"additionalProperties": false,
"description": "The sub-condition must not be true",
"properties": {
"not": {
"$ref": "#/definitions/ConditionSubgraphSelector"
}
},
"required": [
"not"
],
"type": "object"
},
{
"const": "true",
"description": "Static true condition",
"type": "string"
},
{
"const": "false",
"description": "Static false condition",
"type": "string"
}
]
},
"ConditionSupergraphSelector": {
"description": "Specify a condition for when an [instrument][] should be mutated or an [event][] should be triggered.\n\n[instrument]: https://www.apollographql.com/docs/graphos/routing/observability/telemetry/instrumentation/instruments\n[event]: https://www.apollographql.com/docs/graphos/routing/observability/telemetry/instrumentation/events",
"oneOf": [
{
"additionalProperties": false,
"description": "A condition to check a selection against a value.",
"properties": {
"eq": {
"items": {
"$ref": "#/definitions/SupergraphSelectorOrValue"
},
"maxItems": 2,
"minItems": 2,
"type": "array"
}
},
"required": [
"eq"
],
"type": "object"
},
{
"additionalProperties": false,
"description": "The first selection must be greater than the second selection.",
"properties": {
"gt": {
"items": {
"$ref": "#/definitions/SupergraphSelectorOrValue"
},
"maxItems": 2,
"minItems": 2,
"type": "array"
}
},
"required": [
"gt"
],
"type": "object"
},
{
"additionalProperties": false,
"description": "The first selection must be less than the second selection.",
"properties": {
"lt": {
"items": {
"$ref": "#/definitions/SupergraphSelectorOrValue"
},
"maxItems": 2,
"minItems": 2,
"type": "array"
}
},
"required": [
"lt"
],
"type": "object"
},
{
"additionalProperties": false,
"description": "A condition to check a selection against a selector.",
"properties": {
"exists": {
"$ref": "#/definitions/SupergraphSelector"
}
},
"required": [
"exists"
],
"type": "object"
},
{
"additionalProperties": false,
"description": "All sub-conditions must be true.",
"properties": {
"all": {
"items": {
"$ref": "#/definitions/ConditionSupergraphSelector"
},
"type": "array"
}
},
"required": [
"all"
],
"type": "object"
},
{
"additionalProperties": false,
"description": "At least one sub-conditions must be true.",
"properties": {
"any": {
"items": {
"$ref": "#/definitions/ConditionSupergraphSelector"
},
"type": "array"
}
},
"required": [
"any"
],
"type": "object"
},
{
"additionalProperties": false,
"description": "The sub-condition must not be true",
"properties": {
"not": {
"$ref": "#/definitions/ConditionSupergraphSelector"
}
},
"required": [
"not"
],
"type": "object"
},
{
"const": "true",
"description": "Static true condition",
"type": "string"
},
{
"const": "false",
"description": "Static false condition",
"type": "string"
}
]
},
"ConditionalConnectorSelector": {
"anyOf": [
{
"$ref": "#/definitions/ConnectorSelector"
},
{
"properties": {
"condition": {
"$ref": "#/definitions/ConditionConnectorSelector"
}
},
"type": "object"
}
]
},
"ConditionalHttpClientSelector": {
"anyOf": [
{
"$ref": "#/definitions/HttpClientSelector"
},
{
"properties": {
"condition": {
"$ref": "#/definitions/ConditionHttpClientSelector"
}
},
"type": "object"
}
]
},
"ConditionalRouterSelector": {
"anyOf": [
{
"$ref": "#/definitions/RouterSelector"
},
{
"properties": {
"condition": {
"$ref": "#/definitions/ConditionRouterSelector"
}
},
"type": "object"
}
]
},
"ConditionalSubgraphSelector": {
"anyOf": [
{
"$ref": "#/definitions/SubgraphSelector"
},
{
"properties": {
"condition": {
"$ref": "#/definitions/ConditionSubgraphSelector"
}
},
"type": "object"
}
]
},
"ConditionalSupergraphSelector": {
"anyOf": [
{
"$ref": "#/definitions/SupergraphSelector"
},
{
"properties": {
"condition": {
"$ref": "#/definitions/ConditionSupergraphSelector"
}
},
"type": "object"
}
]
},
"Conf": {
"description": "Configuration for the test plugin",
"properties": {
"name": {
"description": "The name of the test",
"type": "string"
}
},
"required": [
"name"
],
"type": "object"
},
"Conf2": {
"description": "The fleet detector plugin has no configuration.",
"type": "object"
},
"Conf3": {
"anyOf": [
{
"additionalProperties": {
"type": "string"
},
"description": "Subgraph URL mappings",
"type": "object"
}
],
"description": "Subgraph URL mappings"
},
"Config": {
"additionalProperties": false,
"description": "Configuration for chaos testing, trying to reproduce bugs that require uncommon conditions.\nYou probably don't want this in production!\n\n## How Chaos Reloading Works\n\nThe chaos system automatically captures and replays the last known schema and configuration\nevents to force hot reloads even when the underlying content hasn't actually changed. This\nis particularly useful for memory leak detection during hot reload scenarios.\nIf configured, it will activate upon the first config event that is encountered.\n\n### Schema Reloading (`force_schema_reload`)\nWhen enabled, the router will periodically replay the last schema event with a timestamp\ncomment injected into the SDL (e.g., `# Chaos reload timestamp: 1234567890`). This ensures\nthe schema is seen as \"different\" and triggers a full hot reload, even though the functional\nschema content is identical.\n\n### Configuration Reloading (`force_config_reload`)\nWhen enabled, the router will periodically replay the last configuration event. The\nconfiguration is cloned and re-emitted, which triggers the router's configuration change\ndetection and reload logic.\n\n### Example Usage\n```yaml\nexperimental_chaos:\n force_schema_reload: \"30s\" # Trigger schema reload every 30 seconds\n force_config_reload: \"2m\" # Trigger config reload every 2 minutes\n```",
"properties": {
"force_config_reload": {
"default": null,
"description": "Force a hot reload of the configuration at regular intervals by replaying the last\nconfiguration event. This triggers the router's configuration change detection even\nwhen the configuration content hasn't actually changed.\n\nThe system automatically captures the last configuration event and replays it to\nforce configuration reload processing.",
"type": [
"string",
"null"
]
},
"force_schema_reload": {
"default": null,
"description": "Force a hot reload of the schema at regular intervals by injecting a timestamp comment\ninto the SDL. This ensures schema reloads occur even when the functional schema content\nhasn't changed, which is useful for testing memory leaks during schema hot reloads.\n\nThe system automatically captures the last schema event and replays it with a timestamp\ncomment added to make it appear \"different\" to the reload detection logic.",
"type": [
"string",
"null"
]
}
},
"type": "object"
},
"Config2": {
"description": "This is a broken plugin for testing purposes only.",
"properties": {
"enabled": {
"description": "Enable the broken plugin.",
"type": "boolean"
}
},
"required": [
"enabled"
],
"type": "object"
},
"Config3": {
"description": "Restricted plugin (for testing purposes only)",
"properties": {
"enabled": {
"description": "Enable the restricted plugin (for testing purposes only)",
"type": "boolean"
}
},
"required": [
"enabled"
],
"type": "object"
},
"Config4": {
"description": "The enhanced client-awareness plugin has no configuration.",
"type": "object"
},
"Config5": {
"additionalProperties": false,
"description": "Configuration for the diagnostics plugin\n\n**Platform Requirements**: This plugin is supported on all platforms.\nHeap dump functionality is only available on Linux platforms due to\njemalloc requirements. Other diagnostic features work across platforms.",
"properties": {
"enabled": {
"default": false,
"description": "Enable the diagnostics plugin",
"type": "boolean"
},
"listen": {
"allOf": [
{
"$ref": "#/definitions/ListenAddr"
}
],
"default": "127.0.0.1:8089",
"description": "The socket address and port to listen on\nDefaults to 127.0.0.1:8089\nDo not expose this endpoint to the internet as it exposes sensitive information."
},
"output_directory": {
"default": "/tmp/router-diagnostics",
"description": "Directory path for memory dump files\nDefaults to \"/tmp/router-diagnostics\" on Unix, or temp directory on other platforms\n\nThis directory will be created automatically if it doesn't exist.\nNote: Memory dumps are only generated on Linux platforms.",
"type": "string"
}
},
"type": "object"
},
"Config6": {
"additionalProperties": false,
"description": "Configuration for entity caching",
"properties": {
"enabled": {
"default": false,
"description": "Enable or disable the entity caching feature",
"type": "boolean"
},
"expose_keys_in_context": {
"default": false,
"description": "Expose cache keys in context",
"type": "boolean"
},
"invalidation": {
"anyOf": [
{
"$ref": "#/definitions/InvalidationEndpointConfig"
},
{
"type": "null"
}
],
"description": "Global invalidation configuration"
},
"metrics": {
"allOf": [
{
"$ref": "#/definitions/Metrics"
}
],
"description": "Entity caching evaluation metrics"
},
"subgraph": {
"allOf": [
{
"$ref": "#/definitions/SubgraphSubgraphConfiguration"
}
],
"description": "Configure invalidation per subgraph"
}
},
"required": [
"subgraph"
],
"type": "object"
},
"Config7": {
"description": "Configuration for the progressive override plugin",
"type": "object"
},
"Config8": {
"additionalProperties": false,
"description": "Configuration for response caching",
"properties": {
"debug": {
"default": false,
"description": "Enable debug mode for the debugger",
"type": "boolean"
},
"enabled": {
"default": false,
"description": "Enable or disable the response caching feature",
"type": "boolean"
},
"invalidation": {
"anyOf": [
{
"$ref": "#/definitions/InvalidationEndpointConfig2"
},
{
"type": "null"
}
],
"description": "Global invalidation configuration"
},
"private_queries_buffer_size": {
"default": 2048,
"description": "Buffer size for known private queries (default: 2048)",
"format": "uint",
"minimum": 1,
"type": "integer"
},
"subgraph": {
"allOf": [
{
"$ref": "#/definitions/SubgraphSubgraphConfiguration2"
}
],
"description": "Configure invalidation per subgraph"
}
},
"required": [
"subgraph"
],
"type": "object"
},
"Config9": {
"additionalProperties": false,
"description": "Redis cache configuration",
"properties": {
"fetch_timeout": {
"default": {
"nanos": 0,
"secs": 0
},
"description": "Timeout for Redis fetch commands (default: 150ms)",
"type": [
"string",
"null"
]
},
"insert_timeout": {
"default": {
"nanos": 0,
"secs": 0
},
"description": "Timeout for Redis insert commands (default: 500ms)\n\nInserts are processed asynchronously, so this will not affect response duration.",
"type": [
"string",
"null"
]
},
"invalidate_timeout": {
"default": {
"nanos": 0,
"secs": 0
},
"description": "Timeout for Redis invalidation commands (default: 1s)",
"type": [
"string",
"null"
]
},
"maintenance_timeout": {
"default": {
"nanos": 0,
"secs": 0
},
"description": "Timeout for Redis maintenance commands (default: 500ms)\n\nMaintenance tasks are processed asynchronously, so this will not affect response duration.",
"type": [
"string",
"null"
]
},
"metrics_interval": {
"default": {
"nanos": 0,
"secs": 0
},
"description": "Interval for collecting Redis metrics (default: 1s)",
"type": [
"string",
"null"
]
},
"namespace": {
"description": "namespace used to prefix Redis keys",
"type": [
"string",
"null"
]
},
"password": {
"description": "Redis password if not provided in the URLs. This field takes precedence over the password in the URL",
"type": [
"string",
"null"
]
},
"pool_size": {
"default": 5,
"description": "The size of the Redis connection pool (default: 5)",
"format": "uint32",
"minimum": 0,
"type": "integer"
},
"required_to_start": {
"default": false,
"description": "Prevents the router from starting if it cannot connect to Redis",
"type": "boolean"
},
"tls": {
"anyOf": [
{
"$ref": "#/definitions/TlsClient"
},
{
"type": "null"
}
],
"default": null,
"description": "TLS client configuration"
},
"urls": {
"description": "List of URLs to the Redis cluster",
"items": {
"format": "uri",
"type": "string"
},
"type": "array"
},
"username": {
"description": "Redis username if not provided in the URLs. This field takes precedence over the username in the URL",
"type": [
"string",
"null"
]
}
},
"required": [
"urls"
],
"type": "object"
},
"ConnectorConfiguration": {
"properties": {
"all": {
"allOf": [
{
"$ref": "#/definitions/TlsClient"
}
],
"default": {
"certificate_authorities": null,
"client_authentication": null
},
"description": "Options applying to all sources"
},
"sources": {
"additionalProperties": {
"$ref": "#/definitions/TlsClient"
},
"default": {},
"description": "Map of subgraph_name.connector_source_name to configuration",
"type": "object"
}
},
"type": "object"
},
"ConnectorHeadersConfiguration": {
"additionalProperties": false,
"properties": {
"all": {
"anyOf": [
{
"$ref": "#/definitions/HeadersLocation"
},
{
"type": "null"
}
],
"description": "Options applying to all sources across all subgraphs"
},
"sources": {
"additionalProperties": {
"$ref": "#/definitions/HeadersLocation"
},
"description": "Map of subgraph_name.connector_source_name to configuration",
"type": "object"
}
},
"type": "object"
},
"ConnectorRequestConf": {
"additionalProperties": false,
"description": "What information is passed to a connector request stage",
"properties": {
"body": {
"default": false,
"description": "Send the body",
"type": "boolean"
},
"condition": {
"allOf": [
{
"$ref": "#/definitions/ConditionConnectorSelector"
}
],
"description": "Condition to trigger this stage"
},
"context": {
"allOf": [
{
"$ref": "#/definitions/ContextConf"
}
],
"description": "Send the context"
},
"headers": {
"default": false,
"description": "Send the headers",
"type": "boolean"
},
"method": {
"default": false,
"description": "Send the method",
"type": "boolean"
},
"service_name": {
"default": false,
"description": "Send the service name",
"type": "boolean"
},
"uri": {
"default": false,
"description": "Send the connector URI",
"type": "boolean"
},
"url": {
"default": null,
"description": "The coprocessor URL for this stage (overrides the global URL if specified)",
"type": [
"string",
"null"
]
}
},
"type": "object"
},
"ConnectorResponseConf": {
"additionalProperties": false,
"description": "What information is passed to a connector response stage",
"properties": {
"body": {
"default": false,
"description": "Send the body",
"type": "boolean"
},
"condition": {
"allOf": [
{
"$ref": "#/definitions/ConditionConnectorSelector"
}
],
"description": "Condition to trigger this stage"
},
"context": {
"allOf": [
{
"$ref": "#/definitions/ContextConf"
}
],
"description": "Send the context"
},
"headers": {
"default": false,
"description": "Send the headers",
"type": "boolean"
},
"service_name": {
"default": false,
"description": "Send the service name",
"type": "boolean"
},
"status_code": {
"default": false,
"description": "Send the http status",
"type": "boolean"
},
"url": {
"default": null,
"description": "The coprocessor URL for this stage (overrides the global URL if specified)",
"type": [
"string",
"null"
]
}
},
"type": "object"
},
"ConnectorSelector": {
"anyOf": [
{
"additionalProperties": false,
"properties": {
"subgraph_name": {
"description": "The subgraph name",
"type": "boolean"
}
},
"required": [
"subgraph_name"
],
"type": "object"
},
{
"additionalProperties": false,
"properties": {
"connector_source": {
"allOf": [
{
"$ref": "#/definitions/ConnectorSource"
}
],
"description": "The connector source."
}
},
"required": [
"connector_source"
],
"type": "object"
},
{
"additionalProperties": false,
"properties": {
"connector_http_request_header": {
"description": "The name of a connector HTTP request header.",
"type": "string"
},
"default": {
"description": "Optional default value.",
"type": [
"string",
"null"
]
}
},
"required": [
"connector_http_request_header"
],
"type": "object"
},
{
"additionalProperties": false,
"properties": {
"connector_http_response_header": {
"description": "The name of a connector HTTP response header.",
"type": "string"
},
"default": {
"description": "Optional default value.",
"type": [
"string",
"null"
]
}
},
"required": [
"connector_http_response_header"
],
"type": "object"
},
{
"additionalProperties": false,
"properties": {
"connector_http_response_status": {
"allOf": [
{
"$ref": "#/definitions/ResponseStatus"
}
],
"description": "The connector HTTP response status code."
}
},
"required": [
"connector_http_response_status"
],
"type": "object"
},
{
"additionalProperties": false,
"properties": {
"connector_http_response_body_size": {
"description": "The connector HTTP response body size (wire bytes before decompression).",
"type": "boolean"
}
},
"required": [
"connector_http_response_body_size"
],
"type": "object"
},
{
"additionalProperties": false,
"properties": {
"connector_http_method": {
"description": "The connector HTTP method.",
"type": "boolean"
}
},
"required": [
"connector_http_method"
],
"type": "object"
},
{
"additionalProperties": false,
"properties": {
"connector_url_template": {
"description": "The connector URL template.",
"type": "boolean"
}
},
"required": [
"connector_url_template"
],
"type": "object"
},
{
"additionalProperties": false,
"properties": {
"static": {
"allOf": [
{
"$ref": "#/definitions/AttributeValue"
}
],
"description": "A static value"
}
},
"required": [
"static"
],
"type": "object"
},
{
"additionalProperties": false,
"properties": {
"error": {
"allOf": [
{
"$ref": "#/definitions/ErrorRepr"
}
],
"description": "Critical error if it happens"
}
},
"required": [
"error"
],
"type": "object"
},
{
"additionalProperties": false,
"properties": {
"connector_request_mapping_problems": {
"allOf": [
{
"$ref": "#/definitions/MappingProblems"
}
],
"description": "Request mapping problems, if any"
}
},
"required": [
"connector_request_mapping_problems"
],
"type": "object"
},
{
"additionalProperties": false,
"properties": {
"connector_response_mapping_problems": {
"allOf": [
{
"$ref": "#/definitions/MappingProblems"
}
],
"description": "Response mapping problems, if any"
}
},
"required": [
"connector_response_mapping_problems"
],
"type": "object"
},
{
"additionalProperties": false,
"properties": {
"default": {
"anyOf": [
{
"$ref": "#/definitions/AttributeValue"
},
{
"type": "null"
}
],
"description": "Optional default value."
},
"request_context": {
"description": "The request context key.",
"type": "string"
}
},
"required": [
"request_context"
],
"type": "object"
},
{
"additionalProperties": false,
"properties": {
"default": {
"description": "Optional default value.",
"type": [
"string",
"null"
]
},
"supergraph_operation_name": {
"allOf": [
{
"$ref": "#/definitions/OperationName"
}
],
"description": "The supergraph query operation name."
}
},
"required": [
"supergraph_operation_name"
],
"type": "object"
},
{
"additionalProperties": false,
"properties": {
"supergraph_operation_kind": {
"allOf": [
{
"$ref": "#/definitions/OperationKind"
}
],
"description": "The supergraph query operation kind (query|mutation|subscription)."
}
},
"required": [
"supergraph_operation_kind"
],
"type": "object"
},
{
"additionalProperties": false,
"properties": {
"connector_on_response_error": {
"description": "Boolean set to true if the response's `is_successful` condition is false. If this is not\nset, returns true when the response contains a non-200 status code",
"type": "boolean"
}
},
"required": [
"connector_on_response_error"
],
"type": "object"
},
{
"additionalProperties": false,
"description": "The context ID of the request (unique per request).",
"properties": {
"context_id": {
"description": "The context ID",
"type": "boolean"
}
},
"required": [
"context_id"
],
"type": "object"
}
]
},
"ConnectorSelectorOrValue": {
"anyOf": [
{
"allOf": [
{
"$ref": "#/definitions/AttributeValue"
}
],
"description": "A constant value."
},
{
"allOf": [
{
"$ref": "#/definitions/ConnectorSelector"
}
],
"description": "Selector to extract a value from the pipeline."
}
]
},
"ConnectorShaping": {
"additionalProperties": false,
"properties": {
"compression": {
"anyOf": [
{
"$ref": "#/definitions/Compression"
},
{
"type": "null"
}
],
"description": "Enable compression for connectors (available compressions are deflate, br, gzip)"
},
"dns_resolution_strategy": {
"anyOf": [
{
"$ref": "#/definitions/DnsResolutionStrategy"
},
{
"type": "null"
}
],
"description": "DNS resolution strategy for connectors"
},
"experimental_http2": {
"anyOf": [
{
"$ref": "#/definitions/Http2Config"
},
{
"type": "null"
}
],
"description": "Enable HTTP2 for connectors"
},
"experimental_http2_keep_alive_interval": {
"default": null,
"description": "Configure the interval for HTTP/2 keep-alive pings. Requires HTTP/2 to be enabled. If\nunset (the default), keep-alive pings are disabled.",
"type": [
"string",
"null"
]
},
"experimental_http2_keep_alive_timeout": {
"default": null,
"description": "Configure the timeout for HTTP/2 keep-alive pings. Requires HTTP/2 to be enabled and\n`experimental_http2_keep_alive_interval` to be set. Defaults to 20 seconds.",
"type": [
"string",
"null"
]
},
"global_rate_limit": {
"anyOf": [
{
"$ref": "#/definitions/RateLimitConf"
},
{
"type": "null"
}
],
"description": "Enable global rate limiting"
},
"pool_idle_timeout": {
"default": {
"nanos": 0,
"secs": 15
},
"description": "Specify a timeout for idle sockets being kept-alive in the client's connection pool",
"type": [
"string",
"null"
]
},
"timeout": {
"default": null,
"description": "Enable timeout for connectors requests",
"type": "string"
}
},
"type": "object"
},
"ConnectorSource": {
"oneOf": [
{
"const": "name",
"description": "The name of the connector source.",
"type": "string"
}
]
},
"ConnectorSpans": {
"additionalProperties": false,
"properties": {
"attributes": {
"allOf": [
{
"$ref": "#/definitions/ExtendedConnectorAttributesWithConditionalConnectorSelector"
}
],
"description": "Custom attributes that are attached to the connector span."
}
},
"type": "object"
},
"ConnectorStage": {
"additionalProperties": false,
"description": "The connector stage request/response configuration",
"properties": {
"request": {
"allOf": [
{
"$ref": "#/definitions/ConnectorRequestConf"
}
],
"description": "The request configuration"
},
"response": {
"allOf": [
{
"$ref": "#/definitions/ConnectorResponseConf"
}
],
"description": "The response configuration"
}
},
"type": "object"
},
"ConnectorStages": {
"description": "Configures the connector coprocessor stages",
"properties": {
"all": {
"$ref": "#/definitions/ConnectorStage"
}
},
"type": "object"
},
"ConnectorValue": {
"anyOf": [
{
"$ref": "#/definitions/Standard"
},
{
"$ref": "#/definitions/ConnectorSelector"
}
]
},
"ConnectorsConfig": {
"additionalProperties": false,
"description": "Configuration for Apollo Connectors.\n\nhttps://www.apollographql.com/docs/graphos/routing/configuration/yaml#connectors",
"properties": {
"debug_extensions": {
"default": false,
"description": "Enables connector debugging information on response extensions if the feature is enabled",
"type": "boolean"
},
"expose_sources_in_context": {
"default": false,
"description": "When enabled, adds an entry to the context for use in coprocessors\n\n```json\n{\n \"context\": {\n \"entries\": {\n \"apollo_connectors::sources_in_query_plan\": [\n { \"subgraph_name\": \"subgraph\", \"source_name\": \"source\" }\n ]\n }\n }\n}\n```",
"type": "boolean"
},
"max_requests_per_operation_per_source": {
"default": null,
"description": "The maximum number of requests for a connector source",
"format": "uint",
"minimum": 0,
"type": [
"integer",
"null"
]
},
"preview_connect_v0_2": {
"default": null,
"deprecated": true,
"description": "Enables Connect spec v0.2 during the preview.",
"type": [
"boolean",
"null"
]
},
"preview_connect_v0_3": {
"default": null,
"deprecated": true,
"description": "Feature gate for Connect spec v0.3. Set to `true` to enable the using\nthe v0.3 spec during the preview phase.",
"type": [
"boolean",
"null"
]
},
"preview_connect_v0_4": {
"default": null,
"description": "Feature gate for Connect spec v0.3. Set to `true` to enable the using\nthe v0.3 spec during the preview phase.",
"type": [
"boolean",
"null"
]
},
"sources": {
"additionalProperties": {
"$ref": "#/definitions/SourceConfiguration"
},
"default": {},
"description": "Map of subgraph_name.connector_source_name to source configuration",
"type": "object"
},
"subgraphs": {
"additionalProperties": {
"$ref": "#/definitions/SubgraphConnectorConfiguration"
},
"default": {},
"deprecated": true,
"description": "A map of subgraph name to connectors config for that subgraph",
"type": "object"
}
},
"type": "object"
},
"ConnectorsShapingConfig": {
"additionalProperties": false,
"properties": {
"all": {
"anyOf": [
{
"$ref": "#/definitions/ConnectorShaping"
},
{
"type": "null"
}
],
"description": "Applied on all connectors"
},
"sources": {
"additionalProperties": {
"$ref": "#/definitions/ConnectorShaping"
},
"description": "Applied on specific connector sources",
"type": "object"
}
},
"type": "object"
},
"ContextConf": {
"anyOf": [
{
"description": "Deprecated configuration using a boolean",
"type": "boolean"
},
{
"$ref": "#/definitions/NewContextConf"
}
],
"description": "Configures the context"
},
"CooperativeCancellation": {
"additionalProperties": false,
"properties": {
"enabled": {
"default": true,
"description": "When true, cooperative cancellation is enabled.",
"type": "boolean"
},
"memory_limit": {
"default": null,
"description": "Enable memory limit for query planning.",
"type": [
"string",
"null"
]
},
"mode": {
"allOf": [
{
"$ref": "#/definitions/Mode"
}
],
"default": "measure",
"description": "When enabled, this sets whether the router will cancel query planning or\nmerely emit a metric when it would have happened."
},
"timeout": {
"default": null,
"description": "Enable timeout for query planning.",
"type": [
"string",
"null"
]
}
},
"type": "object"
},
"CoprocessorConfig": {
"additionalProperties": false,
"description": "Configures the externalization plugin",
"properties": {
"client": {
"anyOf": [
{
"$ref": "#/definitions/Client"
},
{
"type": "null"
}
]
},
"connector": {
"allOf": [
{
"$ref": "#/definitions/ConnectorStages"
}
],
"description": "The connector stage request/response configuration"
},
"execution": {
"allOf": [
{
"$ref": "#/definitions/ExecutionStage"
}
],
"description": "The execution stage request/response configuration"
},
"response_validation": {
"default": true,
"description": "Response validation defaults to true",
"type": "boolean"
},
"router": {
"allOf": [
{
"$ref": "#/definitions/RouterStage"
}
],
"description": "The router stage request/response configuration"
},
"subgraph": {
"allOf": [
{
"$ref": "#/definitions/SubgraphStages"
}
],
"description": "The subgraph stage request/response configuration"
},
"supergraph": {
"allOf": [
{
"$ref": "#/definitions/SupergraphStage"
}
],
"description": "The supergraph stage request/response configuration"
},
"timeout": {
"default": {
"nanos": 0,
"secs": 1
},
"description": "The timeout for external requests",
"type": "string"
},
"url": {
"description": "The url you'd like to offload processing to (can be overridden per-stage). Supports HTTP/HTTPS (http://127.0.0.1:8081/urlpath) and Unix Domain Socket (unix:///path/to/socket) URLs",
"type": "string"
}
},
"required": [
"url"
],
"type": "object"
},
"Cors": {
"additionalProperties": false,
"description": "Cross origin request configuration.",
"properties": {
"allow_any_origin": {
"default": false,
"description": "Set to true to allow any origin. Defaults to false. This is the only way to allow Origin: null.",
"type": "boolean"
},
"allow_credentials": {
"default": false,
"description": "Set to true to add the `Access-Control-Allow-Credentials` header.",
"type": "boolean"
},
"allow_headers": {
"default": [],
"description": "The headers to allow.\n\nIf this value is not set, the router will mirror client's `Access-Control-Request-Headers`.\n\nNote that if you set headers here,\nyou also want to have a look at your `CSRF` plugins configuration,\nand make sure you either:\n- accept `x-apollo-operation-name` AND / OR `apollo-require-preflight`\n- defined `csrf` required headers in your yml configuration, as shown in the\n `examples/cors-and-csrf/custom-headers.router.yaml` files.",
"items": {
"type": "string"
},
"type": "array"
},
"expose_headers": {
"default": null,
"description": "Which response headers should be made available to scripts running in the browser,\nin response to a cross-origin request.",
"items": {
"type": "string"
},
"type": [
"array",
"null"
]
},
"max_age": {
"default": null,
"description": "The `Access-Control-Max-Age` header value in time units",
"type": "string"
},
"methods": {
"default": [
"GET",
"POST",
"OPTIONS"
],
"description": "Allowed request methods. See module documentation for default behavior.",
"items": {
"type": "string"
},
"type": "array"
},
"policies": {
"default": [
{
"allow_credentials": null,
"allow_headers": [],
"expose_headers": [],
"match_origins": [],
"max_age": null,
"methods": [
"GET",
"POST",
"OPTIONS"
],
"origins": [
"https://studio.apollographql.com"
],
"private_network_access": null
}
],
"description": "The origin(s) to allow requests from. The router matches request origins against policies\nin order, first by exact match, then by regex. See module documentation for default behavior.",
"items": {
"$ref": "#/definitions/Policy"
},
"type": [
"array",
"null"
]
}
},
"type": "object"
},
"CostValue": {
"oneOf": [
{
"const": "estimated",
"description": "The estimated cost of the operation using the currently configured cost model",
"type": "string"
},
{
"const": "actual",
"description": "The actual cost of the operation using the currently configured cost model",
"type": "string"
},
{
"const": "delta",
"description": "The delta between the estimated and actual cost of the operation using the currently configured cost model",
"type": "string"
},
{
"const": "result",
"description": "The result of the cost calculation. This is the error code returned by the cost calculation.",
"type": "string"
}
]
},
"DatadogConfig": {
"additionalProperties": false,
"properties": {
"batch_processor": {
"allOf": [
{
"$ref": "#/definitions/BatchProcessorConfig"
}
],
"description": "batch processor configuration"
},
"enable_span_mapping": {
"default": true,
"description": "Enable datadog span mapping for span name and resource name.",
"type": "boolean"
},
"enabled": {
"description": "Enable datadog",
"type": "boolean"
},
"endpoint": {
"allOf": [
{
"$ref": "#/definitions/UriEndpoint"
}
],
"description": "The endpoint to send to"
},
"fixed_span_names": {
"default": true,
"description": "Fixes the span names, this means that the APM view will show the original span names in the operation dropdown.",
"type": "boolean"
},
"resource_mapping": {
"additionalProperties": {
"type": "string"
},
"default": {},
"description": "Custom mapping to be used as the resource field in spans, defaults to:\nrouter -> http.route\nsupergraph -> graphql.operation.name\nquery_planning -> graphql.operation.name\nsubgraph -> subgraph.name\nsubgraph_request -> subgraph.name\nhttp_request -> http.route",
"type": "object"
},
"span_metrics": {
"additionalProperties": {
"type": "boolean"
},
"default": {
"connect": true,
"connect_request": true,
"execution": true,
"http_request": true,
"parse_query": true,
"query_planning": true,
"request": true,
"router": true,
"subgraph": true,
"subgraph_request": true,
"supergraph": true
},
"description": "Which spans will be eligible for span stats to be collected for viewing in the APM view.\nDefaults to true for `request`, `router`, `query_parsing`, `supergraph`, `execution`, `query_planning`, `subgraph`, `subgraph_request`, `connect`, `connect_request` and `http_request`.",
"type": "object"
}
},
"required": [
"enabled"
],
"type": "object"
},
"DeduplicationConfig": {
"additionalProperties": false,
"description": "Subscription deduplication configuration",
"properties": {
"enabled": {
"default": true,
"description": "Enable subgraph subscription deduplication. When enabled, multiple identical requests to the same subgraph will share one WebSocket connection in passthrough mode.\n(default: true)",
"type": "boolean"
},
"ignored_headers": {
"default": [],
"description": "List of headers to ignore for deduplication. Even if these headers are different, the subscription request is considered identical.\nFor example, if you forward the \"User-Agent\" header, but the subgraph doesn't depend on the value of that header,\nadding it to this list will let the router dedupe subgraph subscriptions even if the header value is different.",
"items": {
"type": "string"
},
"type": "array",
"uniqueItems": true
}
},
"type": "object"
},
"DefaultAttributeRequirementLevel": {
"oneOf": [
{
"const": "none",
"description": "No default attributes set on spans, you have to set it one by one in the configuration to enable some attributes",
"type": "string"
},
{
"const": "required",
"description": "Attributes that are marked as required in otel semantic conventions and apollo documentation will be included (default)",
"type": "string"
},
{
"const": "recommended",
"description": "Attributes that are marked as required or recommended in otel semantic conventions and apollo documentation will be included",
"type": "string"
}
]
},
"DefaultChainConfig": {
"additionalProperties": false,
"description": "Configuration of the DefaultChainProvider",
"properties": {
"assume_role": {
"anyOf": [
{
"$ref": "#/definitions/AssumeRoleProvider"
},
{
"type": "null"
}
],
"description": "Specify assumed role configuration."
},
"profile_name": {
"description": "The profile name used by this provider",
"type": [
"string",
"null"
]
},
"region": {
"description": "The AWS region this chain applies to.",
"type": "string"
},
"service_name": {
"description": "The service you're trying to access, eg: \"s3\", \"vpc-lattice-svcs\", etc.",
"type": "string"
}
},
"required": [
"region",
"service_name"
],
"type": "object"
},
"DemandControlConfig": {
"additionalProperties": false,
"description": "Demand control configuration",
"properties": {
"enabled": {
"description": "Enable demand control",
"type": "boolean"
},
"mode": {
"allOf": [
{
"$ref": "#/definitions/Mode2"
}
],
"description": "The mode that the demand control plugin should operate in.\n- Measure: The plugin will measure the cost of incoming requests but not reject them.\n- Enforce: The plugin will enforce the cost of incoming requests and reject them if the algorithm indicates that they should be rejected."
},
"strategy": {
"allOf": [
{
"$ref": "#/definitions/StrategyConfig"
}
],
"description": "The strategy used to reject requests."
}
},
"required": [
"enabled",
"mode",
"strategy"
],
"type": "object"
},
"Disabled": {
"enum": [
"disabled"
],
"type": "string"
},
"DisplayTraceIdFormat": {
"anyOf": [
{
"$ref": "#/definitions/TraceIdFormat"
},
{
"type": "boolean"
}
]
},
"DnsResolutionStrategy": {
"oneOf": [
{
"const": "ipv4_only",
"description": "Only query for `A` (IPv4) records",
"type": "string"
},
{
"const": "ipv6_only",
"description": "Only query for `AAAA` (IPv6) records",
"type": "string"
},
{
"const": "ipv4_and_ipv6",
"description": "Query for both `A` (IPv4) and `AAAA` (IPv6) records in parallel",
"type": "string"
},
{
"const": "ipv6_then_ipv4",
"description": "Query for `AAAA` (IPv6) records first; if that fails, query for `A` (IPv4) records",
"type": "string"
},
{
"const": "ipv4_then_ipv6",
"description": "Default: Query for `A` (IPv4) records first; if that fails, query for `AAAA` (IPv6) records",
"type": "string"
}
]
},
"DurationUnit": {
"oneOf": [
{
"const": "milliseconds",
"description": "Duration in milliseconds (integer)",
"type": "string"
},
{
"const": "seconds",
"description": "Duration in seconds (floating point)",
"type": "string"
},
{
"const": "nanoseconds",
"description": "Duration in nanoseconds (integer)",
"type": "string"
}
]
},
"Enabled": {
"enum": [
"enabled"
],
"type": "string"
},
"EntityType": {
"anyOf": [
{
"$ref": "#/definitions/All"
},
{
"type": "string"
}
]
},
"ErrorConfiguration": {
"additionalProperties": false,
"properties": {
"redact": {
"default": true,
"description": "Redact subgraph errors to Apollo Studio",
"type": "boolean"
},
"redaction_policy": {
"allOf": [
{
"$ref": "#/definitions/ErrorRedactionPolicy"
}
],
"description": "Allows additional dimension `extensions.code` to be sent with errors\neven when `redact` is set to `true`. Has no effect when `redact` is false."
},
"send": {
"default": true,
"description": "Send subgraph errors to Apollo Studio",
"type": "boolean"
}
},
"type": "object"
},
"ErrorLocation": {
"oneOf": [
{
"const": "errors",
"description": "store authorization errors in the response errors",
"type": "string"
},
{
"const": "extensions",
"description": "store authorization errors in the response extensions",
"type": "string"
},
{
"const": "disabled",
"description": "do not add the authorization errors to the GraphQL response",
"type": "string"
}
]
},
"ErrorMode": {
"anyOf": [
{
"description": "When `true`, Propagate the original error as is. Otherwise, redact it.",
"type": "boolean"
},
{
"description": "Allow specific extension keys with required redact_message",
"properties": {
"allow_extensions_keys": {
"description": "Allow specific extension keys",
"items": {
"type": "string"
},
"type": "array"
},
"redact_message": {
"description": "redact error messages for all subgraphs",
"type": "boolean"
}
},
"required": [
"allow_extensions_keys",
"redact_message"
],
"type": "object"
},
{
"description": "Deny specific extension keys with required redact_message",
"properties": {
"deny_extensions_keys": {
"description": "Deny specific extension keys",
"items": {
"type": "string"
},
"type": "array"
},
"redact_message": {
"description": "redact error messages for all subgraphs",
"type": "boolean"
}
},
"required": [
"deny_extensions_keys",
"redact_message"
],
"type": "object"
}
]
},
"ErrorRedactionPolicy": {
"description": "Allow some error fields to be send to Apollo Studio even when `redact` is true.",
"oneOf": [
{
"const": "strict",
"description": "Applies redaction to all error details.",
"type": "string"
},
{
"const": "extended",
"description": "Modifies the `redact` setting by excluding the `extensions.code` field in errors from redaction.",
"type": "string"
}
]
},
"ErrorRepr": {
"oneOf": [
{
"const": "reason",
"description": "The error reason",
"type": "string"
}
]
},
"ErrorsConfiguration": {
"additionalProperties": false,
"properties": {
"preview_extended_error_metrics": {
"allOf": [
{
"$ref": "#/definitions/ExtendedErrorMetricsMode"
}
],
"description": "Send error metrics via OTLP with additional dimensions [`extensions.service`, `extensions.code`]"
},
"subgraph": {
"allOf": [
{
"$ref": "#/definitions/SubgraphErrorConfig"
}
],
"description": "Handling of errors coming from subgraph"
}
},
"type": "object"
},
"Event": {
"description": "An event that can be logged as part of a trace.\nThe event has an implicit `type` attribute that matches the name of the event in the yaml\nand a message that can be used to provide additional information.",
"properties": {
"attributes": {
"allOf": [
{
"$ref": "#/definitions/ExtendedRouterAttributesWithRouterSelector"
}
],
"description": "The event attributes."
},
"condition": {
"allOf": [
{
"$ref": "#/definitions/ConditionRouterSelector"
}
],
"description": "The event conditions."
},
"level": {
"allOf": [
{
"$ref": "#/definitions/EventLevelConfig"
}
],
"description": "The log level of the event."
},
"message": {
"description": "The event message.",
"type": "string"
},
"on": {
"allOf": [
{
"$ref": "#/definitions/EventOn"
}
],
"description": "When to trigger the event."
}
},
"required": [
"level",
"message",
"on"
],
"type": "object"
},
"Event2": {
"description": "An event that can be logged as part of a trace.\nThe event has an implicit `type` attribute that matches the name of the event in the yaml\nand a message that can be used to provide additional information.",
"properties": {
"attributes": {
"allOf": [
{
"$ref": "#/definitions/ExtendedSupergraphAttributesWithSupergraphSelector"
}
],
"description": "The event attributes."
},
"condition": {
"allOf": [
{
"$ref": "#/definitions/ConditionSupergraphSelector"
}
],
"description": "The event conditions."
},
"level": {
"allOf": [
{
"$ref": "#/definitions/EventLevelConfig"
}
],
"description": "The log level of the event."
},
"message": {
"description": "The event message.",
"type": "string"
},
"on": {
"allOf": [
{
"$ref": "#/definitions/EventOn"
}
],
"description": "When to trigger the event."
}
},
"required": [
"level",
"message",
"on"
],
"type": "object"
},
"Event3": {
"description": "An event that can be logged as part of a trace.\nThe event has an implicit `type` attribute that matches the name of the event in the yaml\nand a message that can be used to provide additional information.",
"properties": {
"attributes": {
"allOf": [
{
"$ref": "#/definitions/ExtendedSubgraphAttributesWithSubgraphSelector"
}
],
"description": "The event attributes."
},
"condition": {
"allOf": [
{
"$ref": "#/definitions/ConditionSubgraphSelector"
}
],
"description": "The event conditions."
},
"level": {
"allOf": [
{
"$ref": "#/definitions/EventLevelConfig"
}
],
"description": "The log level of the event."
},
"message": {
"description": "The event message.",
"type": "string"
},
"on": {
"allOf": [
{
"$ref": "#/definitions/EventOn"
}
],
"description": "When to trigger the event."
}
},
"required": [
"level",
"message",
"on"
],
"type": "object"
},
"Event4": {
"description": "An event that can be logged as part of a trace.\nThe event has an implicit `type` attribute that matches the name of the event in the yaml\nand a message that can be used to provide additional information.",
"properties": {
"attributes": {
"allOf": [
{
"$ref": "#/definitions/ExtendedConnectorAttributesWithConnectorSelector"
}
],
"description": "The event attributes."
},
"condition": {
"allOf": [
{
"$ref": "#/definitions/ConditionConnectorSelector"
}
],
"description": "The event conditions."
},
"level": {
"allOf": [
{
"$ref": "#/definitions/EventLevelConfig"
}
],
"description": "The log level of the event."
},
"message": {
"description": "The event message.",
"type": "string"
},
"on": {
"allOf": [
{
"$ref": "#/definitions/EventOn"
}
],
"description": "When to trigger the event."
}
},
"required": [
"level",
"message",
"on"
],
"type": "object"
},
"Event5": {
"oneOf": [
{
"const": "event_duration",
"description": "For every supergraph response payload (including subscription events and defer events)",
"type": "string"
},
{
"const": "event_unit",
"description": "For every supergraph response payload (including subscription events and defer events)",
"type": "string"
},
{
"additionalProperties": false,
"description": "For every supergraph response payload (including subscription events and defer events)",
"properties": {
"event_custom": {
"$ref": "#/definitions/SupergraphSelector"
}
},
"required": [
"event_custom"
],
"type": "object"
}
]
},
"EventLevelConfig": {
"description": "Log level configuration for events. Use \"off\" to not log the event, or a level name to log the\nevent at that level and above.",
"enum": [
"info",
"warn",
"error",
"off"
],
"type": "string"
},
"EventOn": {
"description": "When to trigger the event.",
"oneOf": [
{
"const": "request",
"description": "Log the event on request",
"type": "string"
},
{
"const": "response",
"description": "Log the event on response",
"type": "string"
},
{
"const": "event_response",
"description": "Log the event on every chunks in the response",
"type": "string"
},
{
"const": "error",
"description": "Log the event on error",
"type": "string"
}
]
},
"Events": {
"additionalProperties": false,
"description": "Events are",
"properties": {
"connector": {
"allOf": [
{
"$ref": "#/definitions/ExtendedConnectorEventsConfigWithEvent"
}
],
"description": "Connector events"
},
"router": {
"allOf": [
{
"$ref": "#/definitions/ExtendedRouterEventsConfigWithEvent"
}
],
"description": "Router service events"
},
"subgraph": {
"allOf": [
{
"$ref": "#/definitions/ExtendedSubgraphEventsConfigWithEvent"
}
],
"description": "Supergraph service events"
},
"supergraph": {
"allOf": [
{
"$ref": "#/definitions/ExtendedSupergraphEventsConfigWithEvent"
}
],
"description": "Subgraph service events"
}
},
"type": "object"
},
"ExecutionRequestConf": {
"additionalProperties": false,
"description": "What information is passed to a router request/response stage",
"properties": {
"body": {
"default": false,
"description": "Send the body",
"type": "boolean"
},
"context": {
"allOf": [
{
"$ref": "#/definitions/ContextConf"
}
],
"description": "Send the context"
},
"headers": {
"default": false,
"description": "Send the headers",
"type": "boolean"
},
"method": {
"default": false,
"description": "Send the method",
"type": "boolean"
},
"query_plan": {
"default": false,
"description": "Send the query plan",
"type": "boolean"
},
"sdl": {
"default": false,
"description": "Send the SDL",
"type": "boolean"
},
"url": {
"default": null,
"description": "The coprocessor URL for this stage (overrides the global URL if specified)",
"type": [
"string",
"null"
]
}
},
"type": "object"
},
"ExecutionResponseConf": {
"additionalProperties": false,
"description": "What information is passed to a router request/response stage",
"properties": {
"body": {
"allOf": [
{
"$ref": "#/definitions/BodyConf"
}
],
"description": "Send the body (can be true/false or selective with data/errors/extensions)"
},
"context": {
"allOf": [
{
"$ref": "#/definitions/ContextConf"
}
],
"description": "Send the context"
},
"headers": {
"default": false,
"description": "Send the headers",
"type": "boolean"
},
"sdl": {
"default": false,
"description": "Send the SDL",
"type": "boolean"
},
"status_code": {
"default": false,
"description": "Send the HTTP status",
"type": "boolean"
},
"url": {
"default": null,
"description": "The coprocessor URL for this stage (overrides the global URL if specified)",
"type": [
"string",
"null"
]
}
},
"type": "object"
},
"ExecutionStage": {
"properties": {
"request": {
"allOf": [
{
"$ref": "#/definitions/ExecutionRequestConf"
}
],
"description": "The request configuration"
},
"response": {
"$ref": "#/definitions/ExecutionResponseConf"
}
},
"type": "object"
},
"Exporters": {
"additionalProperties": false,
"description": "Exporter configuration",
"properties": {
"logging": {
"allOf": [
{
"$ref": "#/definitions/Logging"
}
],
"description": "Logging configuration"
},
"metrics": {
"allOf": [
{
"$ref": "#/definitions/Metrics2"
}
],
"description": "Metrics configuration"
},
"tracing": {
"allOf": [
{
"$ref": "#/definitions/Tracing"
}
],
"description": "Tracing configuration"
}
},
"type": "object"
},
"ExposeQueryPlanConfig": {
"description": "Expose query plan",
"type": "boolean"
},
"ExposeTraceId": {
"additionalProperties": false,
"properties": {
"enabled": {
"default": false,
"description": "Expose the trace_id in response headers",
"type": "boolean"
},
"format": {
"allOf": [
{
"$ref": "#/definitions/TraceIdFormat"
}
],
"description": "Format of the trace ID in response headers"
},
"header_name": {
"description": "Choose the header name to expose trace_id (default: apollo-trace-id)",
"type": [
"string",
"null"
]
}
},
"type": "object"
},
"ExtendedCacheAttributesWithSubgraphSelector": {
"additionalProperties": {
"$ref": "#/definitions/SubgraphSelector"
},
"properties": {
"graphql.type.name": {
"anyOf": [
{
"$ref": "#/definitions/StandardAttribute"
},
{
"type": "null"
}
],
"description": "Entity type"
}
},
"type": "object"
},
"ExtendedCacheInstrumentsConfigWithInstrument": {
"additionalProperties": {
"$ref": "#/definitions/Instrument6"
},
"properties": {
"apollo.router.operations.entity.cache": {
"allOf": [
{
"$ref": "#/definitions/StandardInstrumentExtendedCacheAttributesWithSubgraphSelector"
}
],
"description": "A counter of times we have a cache hit or cache miss (deprecated)"
},
"apollo.router.response.cache": {
"allOf": [
{
"$ref": "#/definitions/StandardInstrumentExtendedCacheAttributesWithSubgraphSelector"
}
],
"description": "A counter of times we have a cache hit or cache miss"
}
},
"type": "object"
},
"ExtendedConnectorAttributesWithConditionalConnectorSelector": {
"additionalProperties": {
"$ref": "#/definitions/ConditionalConnectorSelector"
},
"properties": {
"connector.http.method": {
"anyOf": [
{
"$ref": "#/definitions/StandardAttribute"
},
{
"type": "null"
}
],
"description": "The HTTP method for the connector\nExamples:\n\n* GET\n* POST\n\nRequirement level: Required"
},
"connector.source.name": {
"anyOf": [
{
"$ref": "#/definitions/StandardAttribute"
},
{
"type": "null"
}
],
"description": "The name of the source for this connector, if defined\nExamples:\n\n* posts_api\n\nRequirement level: Conditionally Required: If the connector has a source defined"
},
"connector.url.template": {
"anyOf": [
{
"$ref": "#/definitions/StandardAttribute"
},
{
"type": "null"
}
],
"description": "The connector URL template, relative to the source base URL if one is defined\nExamples:\n\n* /users/{$this.id!}/post\n\nRequirement level: Required"
},
"subgraph.name": {
"anyOf": [
{
"$ref": "#/definitions/StandardAttribute"
},
{
"type": "null"
}
],
"description": "The name of the subgraph containing the connector\nExamples:\n\n* posts\n\nRequirement level: Required"
}
},
"type": "object"
},
"ExtendedConnectorAttributesWithConnectorSelector": {
"additionalProperties": {
"$ref": "#/definitions/ConnectorSelector"
},
"properties": {
"connector.http.method": {
"anyOf": [
{
"$ref": "#/definitions/StandardAttribute"
},
{
"type": "null"
}
],
"description": "The HTTP method for the connector\nExamples:\n\n* GET\n* POST\n\nRequirement level: Required"
},
"connector.source.name": {
"anyOf": [
{
"$ref": "#/definitions/StandardAttribute"
},
{
"type": "null"
}
],
"description": "The name of the source for this connector, if defined\nExamples:\n\n* posts_api\n\nRequirement level: Conditionally Required: If the connector has a source defined"
},
"connector.url.template": {
"anyOf": [
{
"$ref": "#/definitions/StandardAttribute"
},
{
"type": "null"
}
],
"description": "The connector URL template, relative to the source base URL if one is defined\nExamples:\n\n* /users/{$this.id!}/post\n\nRequirement level: Required"
},
"subgraph.name": {
"anyOf": [
{
"$ref": "#/definitions/StandardAttribute"
},
{
"type": "null"
}
],
"description": "The name of the subgraph containing the connector\nExamples:\n\n* posts\n\nRequirement level: Required"
}
},
"type": "object"
},
"ExtendedConnectorEventsConfigWithEvent": {
"additionalProperties": {
"$ref": "#/definitions/Event4"
},
"properties": {
"error": {
"allOf": [
{
"$ref": "#/definitions/StandardEventConfigConnectorSelector"
}
],
"description": "Log the connector HTTP error"
},
"request": {
"allOf": [
{
"$ref": "#/definitions/StandardEventConfigConnectorSelector"
}
],
"description": "Log the connector HTTP request"
},
"response": {
"allOf": [
{
"$ref": "#/definitions/StandardEventConfigConnectorSelector"
}
],
"description": "Log the connector HTTP response"
}
},
"type": "object"
},
"ExtendedConnectorInstrumentsConfigWithInstrument": {
"additionalProperties": {
"$ref": "#/definitions/Instrument4"
},
"properties": {
"http.client.request.body.size": {
"allOf": [
{
"$ref": "#/definitions/StandardInstrumentExtendedConnectorAttributesWithConnectorSelector"
}
],
"description": "Histogram of client request body size"
},
"http.client.request.duration": {
"allOf": [
{
"$ref": "#/definitions/StandardInstrumentExtendedConnectorAttributesWithConnectorSelector"
}
],
"description": "Histogram of client request duration"
},
"http.client.response.body.size": {
"allOf": [
{
"$ref": "#/definitions/StandardInstrumentExtendedConnectorAttributesWithConnectorSelector"
}
],
"description": "Histogram of client response body size"
}
},
"type": "object"
},
"ExtendedErrorMetricsMode": {
"description": "Extended Open Telemetry error metrics mode",
"oneOf": [
{
"const": "disabled",
"description": "Do not send extended OTLP error metrics",
"type": "string"
},
{
"const": "enabled",
"description": "Send extended OTLP error metrics to Apollo Studio with additional dimensions [`extensions.service`, `extensions.code`].\nIf enabled, it's also recommended to enable `redaction_policy: extended` on subgraphs to send the `extensions.code` for subgraph errors.",
"type": "string"
}
]
},
"ExtendedGraphQLAttributesWithGraphQLSelector": {
"additionalProperties": {
"$ref": "#/definitions/GraphQLSelector"
},
"properties": {
"graphql.field.name": {
"anyOf": [
{
"$ref": "#/definitions/StandardAttribute"
},
{
"type": "null"
}
],
"description": "The GraphQL field name"
},
"graphql.field.type": {
"anyOf": [
{
"$ref": "#/definitions/StandardAttribute"
},
{
"type": "null"
}
],
"description": "The GraphQL field type"
},
"graphql.list.length": {
"anyOf": [
{
"$ref": "#/definitions/StandardAttribute"
},
{
"type": "null"
}
],
"description": "If the field is a list, the length of the list"
},
"graphql.operation.name": {
"anyOf": [
{
"$ref": "#/definitions/StandardAttribute"
},
{
"type": "null"
}
],
"description": "The GraphQL operation name"
},
"graphql.type.name": {
"anyOf": [
{
"$ref": "#/definitions/StandardAttribute"
},
{
"type": "null"
}
],
"description": "The GraphQL type name"
}
},
"type": "object"
},
"ExtendedGraphQLInstrumentsConfigWithInstrument": {
"additionalProperties": {
"$ref": "#/definitions/Instrument5"
},
"properties": {
"field.execution": {
"allOf": [
{
"$ref": "#/definitions/StandardInstrumentExtendedGraphQLAttributesWithGraphQLSelector"
}
],
"description": "A counter of the number of times a field is used."
},
"list.length": {
"allOf": [
{
"$ref": "#/definitions/StandardInstrumentExtendedGraphQLAttributesWithGraphQLSelector"
}
],
"description": "A histogram of the length of a selected field in the GraphQL response"
}
},
"type": "object"
},
"ExtendedHttpClientAttributesWithConditionalHttpClientSelector": {
"additionalProperties": {
"$ref": "#/definitions/ConditionalHttpClientSelector"
},
"type": "object"
},
"ExtendedRouterAttributesWithConditionalRouterSelector": {
"additionalProperties": {
"$ref": "#/definitions/ConditionalRouterSelector"
},
"description": "Common attributes for http server and client.\nSee https://opentelemetry.io/docs/specs/semconv/http/http-spans/#common-attributes",
"properties": {
"baggage": {
"default": null,
"description": "All key values from trace baggage.",
"type": [
"boolean",
"null"
]
},
"client.name": {
"anyOf": [
{
"$ref": "#/definitions/StandardAttribute"
},
{
"type": "null"
}
],
"description": "Optional client name populated from the request headers."
},
"client.version": {
"anyOf": [
{
"$ref": "#/definitions/StandardAttribute"
},
{
"type": "null"
}
],
"description": "Optional client version populated from the request headers."
},
"dd.trace_id": {
"anyOf": [
{
"$ref": "#/definitions/StandardAttribute"
},
{
"type": "null"
}
],
"description": "The datadog trace ID.\nThis can be output in logs and used to correlate traces in Datadog."
},
"error.type": {
"anyOf": [
{
"$ref": "#/definitions/StandardAttribute"
},
{
"type": "null"
}
],
"description": "Describes a class of error the operation ended with.\nExamples:\n\n* timeout\n* name_resolution_error\n* 500\n\nRequirement level: Conditionally Required: If request has ended with an error."
},
"http.request.body.size": {
"anyOf": [
{
"$ref": "#/definitions/StandardAttribute"
},
{
"type": "null"
}
],
"description": "The size of the request payload body in bytes. This is the number of bytes transferred excluding headers and is often, but not always, present as the Content-Length header. For requests using transport encoding, this should be the compressed size.\nExamples:\n\n* 3495\n\nRequirement level: Recommended"
},
"http.request.method": {
"anyOf": [
{
"$ref": "#/definitions/StandardAttribute"
},
{
"type": "null"
}
],
"description": "HTTP request method.\nExamples:\n\n* GET\n* POST\n* HEAD\n\nRequirement level: Required"
},
"http.response.body.size": {
"anyOf": [
{
"$ref": "#/definitions/StandardAttribute"
},
{
"type": "null"
}
],
"description": "The size of the response payload body in bytes. This is the number of bytes transferred excluding headers and is often, but not always, present as the Content-Length header. For requests using transport encoding, this should be the compressed size.\nExamples:\n\n* 3495\n\nRequirement level: Recommended"
},
"http.response.status_code": {
"anyOf": [
{
"$ref": "#/definitions/StandardAttribute"
},
{
"type": "null"
}
],
"description": "HTTP response status code.\nExamples:\n\n* 200\n\nRequirement level: Conditionally Required: If and only if one was received/sent."
},
"http.route": {
"anyOf": [
{
"$ref": "#/definitions/StandardAttribute"
},
{
"type": "null"
}
],
"description": "The matched route (path template in the format used by the respective server framework).\nExamples:\n\n* /graphql\n\nRequirement level: Conditionally Required: If and only if itβs available"
},
"network.local.address": {
"anyOf": [
{
"$ref": "#/definitions/StandardAttribute"
},
{
"type": "null"
}
],
"description": "Local socket address. Useful in case of a multi-IP host.\nExamples:\n\n* 10.1.2.80\n* /tmp/my.sock\n\nRequirement level: Opt-In"
},
"network.local.port": {
"anyOf": [
{
"$ref": "#/definitions/StandardAttribute"
},
{
"type": "null"
}
],
"description": "Local socket port. Useful in case of a multi-port host.\nExamples:\n\n* 65123\n\nRequirement level: Opt-In"
},
"network.peer.address": {
"anyOf": [
{
"$ref": "#/definitions/StandardAttribute"
},
{
"type": "null"
}
],
"description": "Peer address of the network connection - IP address or Unix domain socket name.\nExamples:\n\n* 10.1.2.80\n* /tmp/my.sock\n\nRequirement level: Recommended"
},
"network.peer.port": {
"anyOf": [
{
"$ref": "#/definitions/StandardAttribute"
},
{
"type": "null"
}
],
"description": "Peer port number of the network connection.\nExamples:\n\n* 65123\n\nRequirement level: Recommended"
},
"network.protocol.name": {
"anyOf": [
{
"$ref": "#/definitions/StandardAttribute"
},
{
"type": "null"
}
],
"description": "OSI application layer or non-OSI equivalent.\nExamples:\n\n* http\n* spdy\n\nRequirement level: Recommended: if not default (http)."
},
"network.protocol.version": {
"anyOf": [
{
"$ref": "#/definitions/StandardAttribute"
},
{
"type": "null"
}
],
"description": "Version of the protocol specified in network.protocol.name.\nExamples:\n\n* 1.0\n* 1.1\n* 2\n* 3\n\nRequirement level: Recommended"
},
"network.transport": {
"anyOf": [
{
"$ref": "#/definitions/StandardAttribute"
},
{
"type": "null"
}
],
"description": "OSI transport layer.\nExamples:\n\n* tcp\n* udp\n\nRequirement level: Conditionally Required"
},
"network.type": {
"anyOf": [
{
"$ref": "#/definitions/StandardAttribute"
},
{
"type": "null"
}
],
"description": "OSI network layer or non-OSI equivalent.\nExamples:\n\n* ipv4\n* ipv6\n\nRequirement level: Recommended"
},
"server.address": {
"anyOf": [
{
"$ref": "#/definitions/StandardAttribute"
},
{
"type": "null"
}
],
"description": "Name of the local HTTP server that received the request.\nExamples:\n\n* example.com\n* 10.1.2.80\n* /tmp/my.sock\n\nRequirement level: Recommended"
},
"server.port": {
"anyOf": [
{
"$ref": "#/definitions/StandardAttribute"
},
{
"type": "null"
}
],
"description": "Port of the local HTTP server that received the request.\nExamples:\n\n* 80\n* 8080\n* 443\n\nRequirement level: Recommended"
},
"trace_id": {
"anyOf": [
{
"$ref": "#/definitions/StandardAttribute"
},
{
"type": "null"
}
],
"description": "The OpenTelemetry trace ID.\nThis can be output in logs."
},
"url.path": {
"anyOf": [
{
"$ref": "#/definitions/StandardAttribute"
},
{
"type": "null"
}
],
"description": "The URI path component\nExamples:\n\n* /search\n\nRequirement level: Required"
},
"url.query": {
"anyOf": [
{
"$ref": "#/definitions/StandardAttribute"
},
{
"type": "null"
}
],
"description": "The URI query component\nExamples:\n\n* q=OpenTelemetry\n\nRequirement level: Conditionally Required: If and only if one was received/sent."
},
"url.scheme": {
"anyOf": [
{
"$ref": "#/definitions/StandardAttribute"
},
{
"type": "null"
}
],
"description": "The URI scheme component identifying the used protocol.\nExamples:\n\n* http\n* https\n\nRequirement level: Required"
},
"user_agent.original": {
"anyOf": [
{
"$ref": "#/definitions/StandardAttribute"
},
{
"type": "null"
}
],
"description": "Value of the HTTP User-Agent header sent by the client.\nExamples:\n\n* CERN-LineMode/2.15\n* libwww/2.17b3\n\nRequirement level: Recommended"
}
},
"type": "object"
},
"ExtendedRouterAttributesWithRouterSelector": {
"additionalProperties": {
"$ref": "#/definitions/RouterSelector"
},
"description": "Common attributes for http server and client.\nSee https://opentelemetry.io/docs/specs/semconv/http/http-spans/#common-attributes",
"properties": {
"baggage": {
"default": null,
"description": "All key values from trace baggage.",
"type": [
"boolean",
"null"
]
},
"client.name": {
"anyOf": [
{
"$ref": "#/definitions/StandardAttribute"
},
{
"type": "null"
}
],
"description": "Optional client name populated from the request headers."
},
"client.version": {
"anyOf": [
{
"$ref": "#/definitions/StandardAttribute"
},
{
"type": "null"
}
],
"description": "Optional client version populated from the request headers."
},
"dd.trace_id": {
"anyOf": [
{
"$ref": "#/definitions/StandardAttribute"
},
{
"type": "null"
}
],
"description": "The datadog trace ID.\nThis can be output in logs and used to correlate traces in Datadog."
},
"error.type": {
"anyOf": [
{
"$ref": "#/definitions/StandardAttribute"
},
{
"type": "null"
}
],
"description": "Describes a class of error the operation ended with.\nExamples:\n\n* timeout\n* name_resolution_error\n* 500\n\nRequirement level: Conditionally Required: If request has ended with an error."
},
"http.request.body.size": {
"anyOf": [
{
"$ref": "#/definitions/StandardAttribute"
},
{
"type": "null"
}
],
"description": "The size of the request payload body in bytes. This is the number of bytes transferred excluding headers and is often, but not always, present as the Content-Length header. For requests using transport encoding, this should be the compressed size.\nExamples:\n\n* 3495\n\nRequirement level: Recommended"
},
"http.request.method": {
"anyOf": [
{
"$ref": "#/definitions/StandardAttribute"
},
{
"type": "null"
}
],
"description": "HTTP request method.\nExamples:\n\n* GET\n* POST\n* HEAD\n\nRequirement level: Required"
},
"http.response.body.size": {
"anyOf": [
{
"$ref": "#/definitions/StandardAttribute"
},
{
"type": "null"
}
],
"description": "The size of the response payload body in bytes. This is the number of bytes transferred excluding headers and is often, but not always, present as the Content-Length header. For requests using transport encoding, this should be the compressed size.\nExamples:\n\n* 3495\n\nRequirement level: Recommended"
},
"http.response.status_code": {
"anyOf": [
{
"$ref": "#/definitions/StandardAttribute"
},
{
"type": "null"
}
],
"description": "HTTP response status code.\nExamples:\n\n* 200\n\nRequirement level: Conditionally Required: If and only if one was received/sent."
},
"http.route": {
"anyOf": [
{
"$ref": "#/definitions/StandardAttribute"
},
{
"type": "null"
}
],
"description": "The matched route (path template in the format used by the respective server framework).\nExamples:\n\n* /graphql\n\nRequirement level: Conditionally Required: If and only if itβs available"
},
"network.local.address": {
"anyOf": [
{
"$ref": "#/definitions/StandardAttribute"
},
{
"type": "null"
}
],
"description": "Local socket address. Useful in case of a multi-IP host.\nExamples:\n\n* 10.1.2.80\n* /tmp/my.sock\n\nRequirement level: Opt-In"
},
"network.local.port": {
"anyOf": [
{
"$ref": "#/definitions/StandardAttribute"
},
{
"type": "null"
}
],
"description": "Local socket port. Useful in case of a multi-port host.\nExamples:\n\n* 65123\n\nRequirement level: Opt-In"
},
"network.peer.address": {
"anyOf": [
{
"$ref": "#/definitions/StandardAttribute"
},
{
"type": "null"
}
],
"description": "Peer address of the network connection - IP address or Unix domain socket name.\nExamples:\n\n* 10.1.2.80\n* /tmp/my.sock\n\nRequirement level: Recommended"
},
"network.peer.port": {
"anyOf": [
{
"$ref": "#/definitions/StandardAttribute"
},
{
"type": "null"
}
],
"description": "Peer port number of the network connection.\nExamples:\n\n* 65123\n\nRequirement level: Recommended"
},
"network.protocol.name": {
"anyOf": [
{
"$ref": "#/definitions/StandardAttribute"
},
{
"type": "null"
}
],
"description": "OSI application layer or non-OSI equivalent.\nExamples:\n\n* http\n* spdy\n\nRequirement level: Recommended: if not default (http)."
},
"network.protocol.version": {
"anyOf": [
{
"$ref": "#/definitions/StandardAttribute"
},
{
"type": "null"
}
],
"description": "Version of the protocol specified in network.protocol.name.\nExamples:\n\n* 1.0\n* 1.1\n* 2\n* 3\n\nRequirement level: Recommended"
},
"network.transport": {
"anyOf": [
{
"$ref": "#/definitions/StandardAttribute"
},
{
"type": "null"
}
],
"description": "OSI transport layer.\nExamples:\n\n* tcp\n* udp\n\nRequirement level: Conditionally Required"
},
"network.type": {
"anyOf": [
{
"$ref": "#/definitions/StandardAttribute"
},
{
"type": "null"
}
],
"description": "OSI network layer or non-OSI equivalent.\nExamples:\n\n* ipv4\n* ipv6\n\nRequirement level: Recommended"
},
"server.address": {
"anyOf": [
{
"$ref": "#/definitions/StandardAttribute"
},
{
"type": "null"
}
],
"description": "Name of the local HTTP server that received the request.\nExamples:\n\n* example.com\n* 10.1.2.80\n* /tmp/my.sock\n\nRequirement level: Recommended"
},
"server.port": {
"anyOf": [
{
"$ref": "#/definitions/StandardAttribute"
},
{
"type": "null"
}
],
"description": "Port of the local HTTP server that received the request.\nExamples:\n\n* 80\n* 8080\n* 443\n\nRequirement level: Recommended"
},
"trace_id": {
"anyOf": [
{
"$ref": "#/definitions/StandardAttribute"
},
{
"type": "null"
}
],
"description": "The OpenTelemetry trace ID.\nThis can be output in logs."
},
"url.path": {
"anyOf": [
{
"$ref": "#/definitions/StandardAttribute"
},
{
"type": "null"
}
],
"description": "The URI path component\nExamples:\n\n* /search\n\nRequirement level: Required"
},
"url.query": {
"anyOf": [
{
"$ref": "#/definitions/StandardAttribute"
},
{
"type": "null"
}
],
"description": "The URI query component\nExamples:\n\n* q=OpenTelemetry\n\nRequirement level: Conditionally Required: If and only if one was received/sent."
},
"url.scheme": {
"anyOf": [
{
"$ref": "#/definitions/StandardAttribute"
},
{
"type": "null"
}
],
"description": "The URI scheme component identifying the used protocol.\nExamples:\n\n* http\n* https\n\nRequirement level: Required"
},
"user_agent.original": {
"anyOf": [
{
"$ref": "#/definitions/StandardAttribute"
},
{
"type": "null"
}
],
"description": "Value of the HTTP User-Agent header sent by the client.\nExamples:\n\n* CERN-LineMode/2.15\n* libwww/2.17b3\n\nRequirement level: Recommended"
}
},
"type": "object"
},
"ExtendedRouterEventsConfigWithEvent": {
"additionalProperties": {
"$ref": "#/definitions/Event"
},
"properties": {
"error": {
"allOf": [
{
"$ref": "#/definitions/StandardEventConfigRouterSelector"
}
],
"description": "Log the router error"
},
"request": {
"allOf": [
{
"$ref": "#/definitions/StandardEventConfigRouterSelector"
}
],
"description": "Log the router request"
},
"response": {
"allOf": [
{
"$ref": "#/definitions/StandardEventConfigRouterSelector"
}
],
"description": "Log the router response"
}
},
"type": "object"
},
"ExtendedRouterInstrumentsConfigWithInstrument": {
"additionalProperties": {
"$ref": "#/definitions/Instrument"
},
"properties": {
"apollo.router.operations.subscriptions.terminated.client": {
"allOf": [
{
"$ref": "#/definitions/StandardInstrumentExtendedSubscriptionsTerminatedAttributesWithRouterSelector"
}
],
"description": "Counter of subscriptions terminated"
},
"apollo.router.overhead": {
"allOf": [
{
"$ref": "#/definitions/StandardInstrumentExtendedRouterOverheadAttributesWithRouterSelector"
}
],
"description": "Histogram of router overhead (time not spent in subgraph requests). The default unit is\nseconds, but this can be changed with selectors"
},
"http.server.active_requests": {
"allOf": [
{
"$ref": "#/definitions/StandardInstrumentActiveRequestsAttributes"
}
],
"description": "Counter of active requests"
},
"http.server.request.body.size": {
"allOf": [
{
"$ref": "#/definitions/StandardInstrumentExtendedRouterAttributesWithRouterSelector"
}
],
"description": "Histogram of server request body size"
},
"http.server.request.duration": {
"allOf": [
{
"$ref": "#/definitions/StandardInstrumentExtendedRouterAttributesWithRouterSelector"
}
],
"description": "Histogram of server request duration"
},
"http.server.response.body.size": {
"allOf": [
{
"$ref": "#/definitions/StandardInstrumentExtendedRouterAttributesWithRouterSelector"
}
],
"description": "Histogram of server response body size"
}
},
"type": "object"
},
"ExtendedRouterOverheadAttributesWithRouterSelector": {
"additionalProperties": {
"$ref": "#/definitions/RouterSelector"
},
"description": "Empty attributes struct for router overhead - no standard attributes, only custom selectors",
"type": "object"
},
"ExtendedSubgraphAttributesWithConditionalSubgraphSelector": {
"additionalProperties": {
"$ref": "#/definitions/ConditionalSubgraphSelector"
},
"properties": {
"http.request.resend_count": {
"anyOf": [
{
"$ref": "#/definitions/StandardAttribute"
},
{
"type": "null"
}
],
"description": "The number of times the request has been resent"
},
"subgraph.graphql.document": {
"anyOf": [
{
"$ref": "#/definitions/StandardAttribute"
},
{
"type": "null"
}
],
"description": "The GraphQL document being executed.\nExamples:\n\n* `query findBookById { bookById(id: ?) { name } }`\n\nRequirement level: Recommended"
},
"subgraph.graphql.operation.name": {
"anyOf": [
{
"$ref": "#/definitions/StandardAttribute"
},
{
"type": "null"
}
],
"description": "The name of the operation being executed.\nExamples:\n\n* findBookById\n\nRequirement level: Recommended"
},
"subgraph.graphql.operation.type": {
"anyOf": [
{
"$ref": "#/definitions/StandardAttribute"
},
{
"type": "null"
}
],
"description": "The type of the operation being executed.\nExamples:\n\n* query\n* subscription\n* mutation\n\nRequirement level: Recommended"
},
"subgraph.name": {
"anyOf": [
{
"$ref": "#/definitions/StandardAttribute"
},
{
"type": "null"
}
],
"description": "The name of the subgraph\nExamples:\n\n* products\n\nRequirement level: Required"
}
},
"type": "object"
},
"ExtendedSubgraphAttributesWithSubgraphSelector": {
"additionalProperties": {
"$ref": "#/definitions/SubgraphSelector"
},
"properties": {
"http.request.resend_count": {
"anyOf": [
{
"$ref": "#/definitions/StandardAttribute"
},
{
"type": "null"
}
],
"description": "The number of times the request has been resent"
},
"subgraph.graphql.document": {
"anyOf": [
{
"$ref": "#/definitions/StandardAttribute"
},
{
"type": "null"
}
],
"description": "The GraphQL document being executed.\nExamples:\n\n* `query findBookById { bookById(id: ?) { name } }`\n\nRequirement level: Recommended"
},
"subgraph.graphql.operation.name": {
"anyOf": [
{
"$ref": "#/definitions/StandardAttribute"
},
{
"type": "null"
}
],
"description": "The name of the operation being executed.\nExamples:\n\n* findBookById\n\nRequirement level: Recommended"
},
"subgraph.graphql.operation.type": {
"anyOf": [
{
"$ref": "#/definitions/StandardAttribute"
},
{
"type": "null"
}
],
"description": "The type of the operation being executed.\nExamples:\n\n* query\n* subscription\n* mutation\n\nRequirement level: Recommended"
},
"subgraph.name": {
"anyOf": [
{
"$ref": "#/definitions/StandardAttribute"
},
{
"type": "null"
}
],
"description": "The name of the subgraph\nExamples:\n\n* products\n\nRequirement level: Required"
}
},
"type": "object"
},
"ExtendedSubgraphEventsConfigWithEvent": {
"additionalProperties": {
"$ref": "#/definitions/Event3"
},
"properties": {
"error": {
"allOf": [
{
"$ref": "#/definitions/StandardEventConfigSubgraphSelector"
}
],
"description": "Log the subgraph error"
},
"request": {
"allOf": [
{
"$ref": "#/definitions/StandardEventConfigSubgraphSelector"
}
],
"description": "Log the subgraph request"
},
"response": {
"allOf": [
{
"$ref": "#/definitions/StandardEventConfigSubgraphSelector"
}
],
"description": "Log the subgraph response"
}
},
"type": "object"
},
"ExtendedSubgraphInstrumentsConfigWithInstrument": {
"additionalProperties": {
"$ref": "#/definitions/Instrument3"
},
"properties": {
"http.client.request.body.size": {
"allOf": [
{
"$ref": "#/definitions/StandardInstrumentExtendedSubgraphAttributesWithSubgraphSelector"
}
],
"description": "Histogram of client request body size"
},
"http.client.request.duration": {
"allOf": [
{
"$ref": "#/definitions/StandardInstrumentExtendedSubgraphAttributesWithSubgraphSelector"
}
],
"description": "Histogram of client request duration"
},
"http.client.response.body.size": {
"allOf": [
{
"$ref": "#/definitions/StandardInstrumentExtendedSubgraphAttributesWithSubgraphSelector"
}
],
"description": "Histogram of client response body size"
}
},
"type": "object"
},
"ExtendedSubscriptionsTerminatedAttributesWithRouterSelector": {
"additionalProperties": {
"$ref": "#/definitions/RouterSelector"
},
"properties": {
"client.name": {
"default": null,
"description": "The client name",
"type": [
"boolean",
"null"
]
},
"reason": {
"default": null,
"description": "The reason the subscription terminated",
"type": [
"boolean",
"null"
]
},
"subgraph.name": {
"default": null,
"description": "The subgraph name",
"type": [
"boolean",
"null"
]
}
},
"type": "object"
},
"ExtendedSupergraphAttributesWithConditionalSupergraphSelector": {
"additionalProperties": {
"$ref": "#/definitions/ConditionalSupergraphSelector"
},
"description": "Attributes for Cost",
"properties": {
"cost.actual": {
"anyOf": [
{
"$ref": "#/definitions/StandardAttribute"
},
{
"type": "null"
}
],
"description": "The actual cost of the operation using the currently configured cost model"
},
"cost.delta": {
"anyOf": [
{
"$ref": "#/definitions/StandardAttribute"
},
{
"type": "null"
}
],
"description": "The delta (estimated - actual) cost of the operation using the currently configured cost model"
},
"cost.estimated": {
"anyOf": [
{
"$ref": "#/definitions/StandardAttribute"
},
{
"type": "null"
}
],
"description": "The estimated cost of the operation using the currently configured cost model"
},
"cost.result": {
"anyOf": [
{
"$ref": "#/definitions/StandardAttribute"
},
{
"type": "null"
}
],
"description": "The cost result, this is an error code returned by the cost calculation or COST_OK"
},
"graphql.document": {
"anyOf": [
{
"$ref": "#/definitions/StandardAttribute"
},
{
"type": "null"
}
],
"description": "The GraphQL document being executed.\nExamples:\n\n* `query findBookById { bookById(id: ?) { name } }`\n\nRequirement level: Recommended"
},
"graphql.operation.name": {
"anyOf": [
{
"$ref": "#/definitions/StandardAttribute"
},
{
"type": "null"
}
],
"description": "The name of the operation being executed.\nExamples:\n\n* findBookById\n\nRequirement level: Recommended"
},
"graphql.operation.type": {
"anyOf": [
{
"$ref": "#/definitions/StandardAttribute"
},
{
"type": "null"
}
],
"description": "The type of the operation being executed.\nExamples:\n\n* query\n* subscription\n* mutation\n\nRequirement level: Recommended"
}
},
"type": "object"
},
"ExtendedSupergraphAttributesWithSupergraphSelector": {
"additionalProperties": {
"$ref": "#/definitions/SupergraphSelector"
},
"description": "Attributes for Cost",
"properties": {
"cost.actual": {
"anyOf": [
{
"$ref": "#/definitions/StandardAttribute"
},
{
"type": "null"
}
],
"description": "The actual cost of the operation using the currently configured cost model"
},
"cost.delta": {
"anyOf": [
{
"$ref": "#/definitions/StandardAttribute"
},
{
"type": "null"
}
],
"description": "The delta (estimated - actual) cost of the operation using the currently configured cost model"
},
"cost.estimated": {
"anyOf": [
{
"$ref": "#/definitions/StandardAttribute"
},
{
"type": "null"
}
],
"description": "The estimated cost of the operation using the currently configured cost model"
},
"cost.result": {
"anyOf": [
{
"$ref": "#/definitions/StandardAttribute"
},
{
"type": "null"
}
],
"description": "The cost result, this is an error code returned by the cost calculation or COST_OK"
},
"graphql.document": {
"anyOf": [
{
"$ref": "#/definitions/StandardAttribute"
},
{
"type": "null"
}
],
"description": "The GraphQL document being executed.\nExamples:\n\n* `query findBookById { bookById(id: ?) { name } }`\n\nRequirement level: Recommended"
},
"graphql.operation.name": {
"anyOf": [
{
"$ref": "#/definitions/StandardAttribute"
},
{
"type": "null"
}
],
"description": "The name of the operation being executed.\nExamples:\n\n* findBookById\n\nRequirement level: Recommended"
},
"graphql.operation.type": {
"anyOf": [
{
"$ref": "#/definitions/StandardAttribute"
},
{
"type": "null"
}
],
"description": "The type of the operation being executed.\nExamples:\n\n* query\n* subscription\n* mutation\n\nRequirement level: Recommended"
}
},
"type": "object"
},
"ExtendedSupergraphEventsConfigWithEvent": {
"additionalProperties": {
"$ref": "#/definitions/Event2"
},
"properties": {
"error": {
"allOf": [
{
"$ref": "#/definitions/StandardEventConfigSupergraphSelector"
}
],
"description": "Log the supergraph error"
},
"request": {
"allOf": [
{
"$ref": "#/definitions/StandardEventConfigSupergraphSelector"
}
],
"description": "Log the supergraph request"
},
"response": {
"allOf": [
{
"$ref": "#/definitions/StandardEventConfigSupergraphSelector"
}
],
"description": "Log the supergraph response"
}
},
"type": "object"
},
"ExtendedSupergraphInstrumentsConfigWithInstrument": {
"additionalProperties": {
"$ref": "#/definitions/Instrument2"
},
"properties": {
"cost.actual": {
"allOf": [
{
"$ref": "#/definitions/StandardInstrumentExtendedSupergraphAttributesWithSupergraphSelector"
}
],
"description": "A histogram of the actual cost of the operation using the currently configured cost model"
},
"cost.delta": {
"allOf": [
{
"$ref": "#/definitions/StandardInstrumentExtendedSupergraphAttributesWithSupergraphSelector"
}
],
"description": "A histogram of the delta between the estimated and actual cost of the operation using the currently configured cost model"
},
"cost.estimated": {
"allOf": [
{
"$ref": "#/definitions/StandardInstrumentExtendedSupergraphAttributesWithSupergraphSelector"
}
],
"description": "A histogram of the estimated cost of the operation using the currently configured cost model"
}
},
"type": "object"
},
"FieldName": {
"oneOf": [
{
"const": "string",
"description": "The GraphQL field name",
"type": "string"
}
]
},
"FieldType": {
"oneOf": [
{
"const": "name",
"description": "The GraphQL field name",
"type": "string"
},
{
"const": "type",
"description": "The GraphQL field type\n- `bool`\n- `number`\n- `scalar`\n- `object`\n- `list`",
"type": "string"
}
]
},
"FileUploadProtocols": {
"additionalProperties": false,
"description": "Configuration for the various protocols supported by the file upload plugin",
"properties": {
"multipart": {
"allOf": [
{
"$ref": "#/definitions/MultipartRequest"
}
],
"description": "Configuration for multipart requests.\n\nThis protocol conforms to [jaydenseric's multipart spec](https://github.com/jaydenseric/graphql-multipart-request-spec)"
}
},
"required": [
"multipart"
],
"type": "object"
},
"FileUploadsConfig": {
"additionalProperties": false,
"description": "Configuration for File Uploads plugin",
"properties": {
"enabled": {
"description": "Whether the file upload plugin should be enabled (default: false)",
"type": "boolean"
},
"protocols": {
"allOf": [
{
"$ref": "#/definitions/FileUploadProtocols"
}
],
"description": "Supported protocol configurations for file uploads"
}
},
"required": [
"enabled",
"protocols"
],
"type": "object"
},
"ForbidMutationsConfig": {
"description": "Forbid mutations configuration",
"type": "boolean"
},
"ForwardHeaders": {
"description": "Forward headers",
"oneOf": [
{
"const": "none",
"description": "Don't send any headers",
"type": "string"
},
{
"const": "all",
"description": "Send all headers",
"type": "string"
},
{
"additionalProperties": false,
"description": "Send only the headers specified",
"properties": {
"only": {
"default": null,
"description": "Send only the headers specified",
"items": {
"type": "string"
},
"type": "array"
}
},
"required": [
"only"
],
"type": "object"
},
{
"additionalProperties": false,
"description": "Send all headers except those specified",
"properties": {
"except": {
"default": null,
"description": "Send all headers except those specified",
"items": {
"type": "string"
},
"type": "array"
}
},
"required": [
"except"
],
"type": "object"
}
]
},
"ForwardValues": {
"description": "Forward GraphQL variables",
"oneOf": [
{
"const": "none",
"description": "Dont send any variables",
"type": "string"
},
{
"const": "all",
"description": "Send all variables",
"type": "string"
},
{
"additionalProperties": false,
"description": "Send only the variables specified",
"properties": {
"only": {
"default": null,
"description": "Send only the variables specified",
"items": {
"type": "string"
},
"type": "array"
}
},
"required": [
"only"
],
"type": "object"
},
{
"additionalProperties": false,
"description": "Send all variables except those specified",
"properties": {
"except": {
"default": null,
"description": "Send all variables except those specified",
"items": {
"type": "string"
},
"type": "array"
}
},
"required": [
"except"
],
"type": "object"
}
]
},
"GraphQLSelector": {
"anyOf": [
{
"additionalProperties": false,
"description": "If the field is a list, the length of the list",
"properties": {
"list_length": {
"$ref": "#/definitions/ListLength"
}
},
"required": [
"list_length"
],
"type": "object"
},
{
"additionalProperties": false,
"description": "The GraphQL field name",
"properties": {
"field_name": {
"$ref": "#/definitions/FieldName"
}
},
"required": [
"field_name"
],
"type": "object"
},
{
"additionalProperties": false,
"description": "The GraphQL field type",
"properties": {
"field_type": {
"$ref": "#/definitions/FieldType"
}
},
"required": [
"field_type"
],
"type": "object"
},
{
"additionalProperties": false,
"description": "The GraphQL type name",
"properties": {
"type_name": {
"$ref": "#/definitions/TypeName"
}
},
"required": [
"type_name"
],
"type": "object"
},
{
"additionalProperties": false,
"properties": {
"default": {
"description": "Optional default value.",
"type": [
"string",
"null"
]
},
"operation_name": {
"allOf": [
{
"$ref": "#/definitions/OperationName"
}
],
"description": "The operation name from the query."
}
},
"required": [
"operation_name"
],
"type": "object"
},
{
"additionalProperties": false,
"properties": {
"static": {
"allOf": [
{
"$ref": "#/definitions/AttributeValue"
}
],
"description": "A static value"
}
},
"required": [
"static"
],
"type": "object"
}
]
},
"GraphQLSelectorOrValue": {
"anyOf": [
{
"allOf": [
{
"$ref": "#/definitions/AttributeValue"
}
],
"description": "A constant value."
},
{
"allOf": [
{
"$ref": "#/definitions/GraphQLSelector"
}
],
"description": "Selector to extract a value from the pipeline."
}
]
},
"GraphQLValue": {
"anyOf": [
{
"$ref": "#/definitions/StandardUnit"
},
{
"$ref": "#/definitions/GraphQLSelector"
}
]
},
"GrpcExporter": {
"additionalProperties": false,
"properties": {
"ca": {
"default": null,
"description": "The optional certificate authority (CA) certificate to be used in TLS configuration.",
"type": [
"string",
"null"
]
},
"cert": {
"default": null,
"description": "The optional cert for tls config",
"type": [
"string",
"null"
]
},
"domain_name": {
"default": null,
"description": "The optional domain name for tls config.\nNote that domain name is will be defaulted to match the endpoint is not explicitly set.",
"type": [
"string",
"null"
]
},
"key": {
"default": null,
"description": "The optional private key file for TLS configuration.",
"type": [
"string",
"null"
]
},
"metadata": {
"additionalProperties": true,
"default": {},
"description": "gRPC metadata",
"type": "object"
}
},
"type": "object"
},
"Header": {
"additionalProperties": false,
"description": "Insert a header",
"properties": {
"name": {
"description": "The name of the header",
"type": "string"
},
"value": {
"description": "The value for the header",
"type": "string"
}
},
"required": [
"name",
"value"
],
"type": "object"
},
"HeadersConfig": {
"additionalProperties": false,
"description": "Configuration for header propagation",
"properties": {
"all": {
"anyOf": [
{
"$ref": "#/definitions/HeadersLocation"
},
{
"type": "null"
}
],
"description": "Rules to apply to all subgraphs"
},
"connector": {
"allOf": [
{
"$ref": "#/definitions/ConnectorHeadersConfiguration"
}
],
"description": "Rules for connectors"
},
"subgraphs": {
"additionalProperties": {
"$ref": "#/definitions/HeadersLocation"
},
"description": "Rules to specific subgraphs",
"type": "object"
}
},
"type": "object"
},
"HeadersLocation": {
"additionalProperties": false,
"properties": {
"request": {
"description": "Propagate/Insert/Remove headers from request",
"items": {
"$ref": "#/definitions/Operation"
},
"type": "array"
}
},
"required": [
"request"
],
"type": "object"
},
"HealthCheckConfig": {
"additionalProperties": false,
"description": "Configuration options pertaining to the health component.",
"properties": {
"enabled": {
"default": true,
"description": "Set to false to disable the health check",
"type": "boolean"
},
"listen": {
"allOf": [
{
"$ref": "#/definitions/ListenAddr"
}
],
"default": "127.0.0.1:8088",
"description": "The socket address and port to listen on\nDefaults to 127.0.0.1:8088"
},
"path": {
"default": "/health",
"description": "Optionally set a custom healthcheck path\nDefaults to /health",
"type": "string"
},
"readiness": {
"allOf": [
{
"$ref": "#/definitions/ReadinessConfig"
}
],
"default": {
"allowed": 100,
"interval": {
"sampling": "5s",
"unready": null
}
},
"description": "Optionally specify readiness configuration"
}
},
"type": "object"
},
"HeartbeatInterval": {
"anyOf": [
{
"allOf": [
{
"$ref": "#/definitions/Disabled"
}
],
"description": "disable heartbeat"
},
{
"allOf": [
{
"$ref": "#/definitions/Enabled"
}
],
"description": "enable with default interval of 5s"
},
{
"description": "enable with custom interval, e.g. '100ms', '10s' or '1m'",
"type": "string"
}
]
},
"HoistOrphanErrors": {
"additionalProperties": false,
"description": "Per-subgraph configuration for hoisting orphan errors.\n\n\"Orphan errors\" are errors from entity fetches that lack a valid `_entities` path.\nWhen hoisting is enabled, these errors are assigned to the nearest non-array\nancestor in the response path, preventing them from being duplicated across\nevery element in an array.",
"properties": {
"enabled": {
"default": false,
"description": "Enable hoisting of orphan errors for this subgraph.",
"type": "boolean"
}
},
"type": "object"
},
"Homepage": {
"additionalProperties": false,
"description": "Configuration options pertaining to the home page.",
"properties": {
"enabled": {
"default": true,
"description": "Set to false to disable the homepage",
"type": "boolean"
},
"graph_ref": {
"default": null,
"description": "Graph reference\nThis will allow you to redirect from the Apollo Router landing page back to Apollo Studio Explorer",
"type": [
"string",
"null"
]
}
},
"type": "object"
},
"Http2Config": {
"oneOf": [
{
"const": "enable",
"description": "Enable HTTP2 for subgraphs",
"type": "string"
},
{
"const": "disable",
"description": "Disable HTTP2 for subgraphs",
"type": "string"
},
{
"const": "http2only",
"description": "Only HTTP2 is active",
"type": "string"
}
]
},
"HttpClientSelector": {
"anyOf": [
{
"additionalProperties": false,
"description": "A header from the HTTP request",
"properties": {
"default": {
"description": "Optional default value.",
"type": [
"string",
"null"
]
},
"request_header": {
"description": "The name of the request header.",
"type": "string"
}
},
"required": [
"request_header"
],
"type": "object"
},
{
"additionalProperties": false,
"description": "A header from the HTTP response",
"properties": {
"default": {
"description": "Optional default value.",
"type": [
"string",
"null"
]
},
"response_header": {
"description": "The name of the response header.",
"type": "string"
}
},
"required": [
"response_header"
],
"type": "object"
}
]
},
"HttpClientSelectorOrValue": {
"anyOf": [
{
"allOf": [
{
"$ref": "#/definitions/AttributeValue"
}
],
"description": "A constant value."
},
{
"allOf": [
{
"$ref": "#/definitions/HttpClientSelector"
}
],
"description": "Selector to extract a value from the pipeline."
}
]
},
"HttpClientSpans": {
"additionalProperties": false,
"properties": {
"attributes": {
"allOf": [
{
"$ref": "#/definitions/ExtendedHttpClientAttributesWithConditionalHttpClientSelector"
}
],
"description": "Custom attributes that are attached to the HTTP client span."
}
},
"type": "object"
},
"HttpExporter": {
"additionalProperties": false,
"properties": {
"headers": {
"additionalProperties": {
"type": "string"
},
"default": {},
"description": "Headers to send on report requests",
"type": "object"
}
},
"type": "object"
},
"InMemoryCache": {
"additionalProperties": false,
"description": "In memory cache configuration",
"properties": {
"limit": {
"description": "Number of entries in the Least Recently Used cache",
"format": "uint",
"minimum": 1,
"type": "integer"
}
},
"required": [
"limit"
],
"type": "object"
},
"IncludeSubgraphErrorsConfig": {
"additionalProperties": false,
"description": "Configuration for exposing errors that originate from subgraphs",
"properties": {
"all": {
"allOf": [
{
"$ref": "#/definitions/ErrorMode"
}
],
"default": false,
"description": "Global configuration for error redaction. Applies to all subgraphs."
},
"subgraphs": {
"additionalProperties": {
"$ref": "#/definitions/SubgraphConfig2"
},
"default": {},
"description": "Overrides global configuration on a per-subgraph basis",
"type": "object"
}
},
"type": "object"
},
"Insert": {
"anyOf": [
{
"allOf": [
{
"$ref": "#/definitions/InsertStatic"
}
],
"description": "Insert static header"
},
{
"allOf": [
{
"$ref": "#/definitions/InsertFromContext"
}
],
"description": "Insert header with a value coming from context key (works only for a string in the context)"
},
{
"allOf": [
{
"$ref": "#/definitions/InsertFromBody"
}
],
"description": "Insert header with a value coming from body"
}
],
"description": "Insert header"
},
"InsertFromBody": {
"additionalProperties": false,
"description": "Insert header with a value coming from body",
"properties": {
"default": {
"description": "The default if the path in the body did not resolve to an element",
"type": [
"string",
"null"
]
},
"name": {
"description": "The target header name",
"type": "string"
},
"path": {
"description": "The path in the request body",
"type": "string"
}
},
"required": [
"name",
"path"
],
"type": "object"
},
"InsertFromContext": {
"additionalProperties": false,
"description": "Insert header with a value coming from context key",
"properties": {
"from_context": {
"description": "Specify context key to fetch value",
"type": "string"
},
"name": {
"description": "Specify header name",
"type": "string"
}
},
"required": [
"name",
"from_context"
],
"type": "object"
},
"InsertStatic": {
"additionalProperties": false,
"description": "Insert static header",
"properties": {
"name": {
"description": "The name of the header",
"type": "string"
},
"value": {
"description": "The value for the header",
"type": "string"
}
},
"required": [
"name",
"value"
],
"type": "object"
},
"Instrument": {
"additionalProperties": false,
"properties": {
"attributes": {
"allOf": [
{
"$ref": "#/definitions/ExtendedRouterAttributesWithRouterSelector"
}
],
"description": "Attributes to include on the instrument."
},
"condition": {
"allOf": [
{
"$ref": "#/definitions/ConditionRouterSelector"
}
],
"description": "The instrument conditions."
},
"description": {
"description": "The description of the instrument.",
"type": "string"
},
"type": {
"allOf": [
{
"$ref": "#/definitions/InstrumentType"
}
],
"description": "The type of instrument."
},
"unit": {
"description": "The units of the instrument, e.g. \"ms\", \"bytes\", \"requests\".",
"type": "string"
},
"value": {
"allOf": [
{
"$ref": "#/definitions/RouterValue"
}
],
"description": "The value of the instrument."
}
},
"required": [
"type",
"value",
"description",
"unit"
],
"type": "object"
},
"Instrument2": {
"additionalProperties": false,
"properties": {
"attributes": {
"allOf": [
{
"$ref": "#/definitions/ExtendedSupergraphAttributesWithSupergraphSelector"
}
],
"description": "Attributes to include on the instrument."
},
"condition": {
"allOf": [
{
"$ref": "#/definitions/ConditionSupergraphSelector"
}
],
"description": "The instrument conditions."
},
"description": {
"description": "The description of the instrument.",
"type": "string"
},
"type": {
"allOf": [
{
"$ref": "#/definitions/InstrumentType"
}
],
"description": "The type of instrument."
},
"unit": {
"description": "The units of the instrument, e.g. \"ms\", \"bytes\", \"requests\".",
"type": "string"
},
"value": {
"allOf": [
{
"$ref": "#/definitions/SupergraphValue"
}
],
"description": "The value of the instrument."
}
},
"required": [
"type",
"value",
"description",
"unit"
],
"type": "object"
},
"Instrument3": {
"additionalProperties": false,
"properties": {
"attributes": {
"allOf": [
{
"$ref": "#/definitions/ExtendedSubgraphAttributesWithSubgraphSelector"
}
],
"description": "Attributes to include on the instrument."
},
"condition": {
"allOf": [
{
"$ref": "#/definitions/ConditionSubgraphSelector"
}
],
"description": "The instrument conditions."
},
"description": {
"description": "The description of the instrument.",
"type": "string"
},
"type": {
"allOf": [
{
"$ref": "#/definitions/InstrumentType"
}
],
"description": "The type of instrument."
},
"unit": {
"description": "The units of the instrument, e.g. \"ms\", \"bytes\", \"requests\".",
"type": "string"
},
"value": {
"allOf": [
{
"$ref": "#/definitions/SubgraphValue"
}
],
"description": "The value of the instrument."
}
},
"required": [
"type",
"value",
"description",
"unit"
],
"type": "object"
},
"Instrument4": {
"additionalProperties": false,
"properties": {
"attributes": {
"allOf": [
{
"$ref": "#/definitions/ExtendedConnectorAttributesWithConnectorSelector"
}
],
"description": "Attributes to include on the instrument."
},
"condition": {
"allOf": [
{
"$ref": "#/definitions/ConditionConnectorSelector"
}
],
"description": "The instrument conditions."
},
"description": {
"description": "The description of the instrument.",
"type": "string"
},
"type": {
"allOf": [
{
"$ref": "#/definitions/InstrumentType"
}
],
"description": "The type of instrument."
},
"unit": {
"description": "The units of the instrument, e.g. \"ms\", \"bytes\", \"requests\".",
"type": "string"
},
"value": {
"allOf": [
{
"$ref": "#/definitions/ConnectorValue"
}
],
"description": "The value of the instrument."
}
},
"required": [
"type",
"value",
"description",
"unit"
],
"type": "object"
},
"Instrument5": {
"additionalProperties": false,
"properties": {
"attributes": {
"allOf": [
{
"$ref": "#/definitions/ExtendedGraphQLAttributesWithGraphQLSelector"
}
],
"description": "Attributes to include on the instrument."
},
"condition": {
"allOf": [
{
"$ref": "#/definitions/ConditionGraphQLSelector"
}
],
"description": "The instrument conditions."
},
"description": {
"description": "The description of the instrument.",
"type": "string"
},
"type": {
"allOf": [
{
"$ref": "#/definitions/InstrumentType"
}
],
"description": "The type of instrument."
},
"unit": {
"description": "The units of the instrument, e.g. \"ms\", \"bytes\", \"requests\".",
"type": "string"
},
"value": {
"allOf": [
{
"$ref": "#/definitions/GraphQLValue"
}
],
"description": "The value of the instrument."
}
},
"required": [
"type",
"value",
"description",
"unit"
],
"type": "object"
},
"Instrument6": {
"additionalProperties": false,
"properties": {
"attributes": {
"allOf": [
{
"$ref": "#/definitions/ExtendedCacheAttributesWithSubgraphSelector"
}
],
"description": "Attributes to include on the instrument."
},
"condition": {
"allOf": [
{
"$ref": "#/definitions/ConditionSubgraphSelector"
}
],
"description": "The instrument conditions."
},
"description": {
"description": "The description of the instrument.",
"type": "string"
},
"type": {
"allOf": [
{
"$ref": "#/definitions/InstrumentType"
}
],
"description": "The type of instrument."
},
"unit": {
"description": "The units of the instrument, e.g. \"ms\", \"bytes\", \"requests\".",
"type": "string"
},
"value": {
"allOf": [
{
"$ref": "#/definitions/SubgraphValue"
}
],
"description": "The value of the instrument."
}
},
"required": [
"type",
"value",
"description",
"unit"
],
"type": "object"
},
"InstrumentType": {
"oneOf": [
{
"const": "counter",
"description": "A monotonic counter https://opentelemetry.io/docs/specs/otel/metrics/data-model/#sums",
"type": "string"
},
{
"const": "histogram",
"description": "A histogram https://opentelemetry.io/docs/specs/otel/metrics/data-model/#histogram",
"type": "string"
}
]
},
"Instrumentation": {
"additionalProperties": false,
"description": "Instrumentation configuration",
"properties": {
"events": {
"allOf": [
{
"$ref": "#/definitions/Events"
}
],
"description": "Event configuration"
},
"instruments": {
"allOf": [
{
"$ref": "#/definitions/InstrumentsConfig"
}
],
"description": "Instrument configuration"
},
"spans": {
"allOf": [
{
"$ref": "#/definitions/Spans"
}
],
"description": "Span configuration"
}
},
"type": "object"
},
"InstrumentsConfig": {
"additionalProperties": false,
"properties": {
"cache": {
"allOf": [
{
"$ref": "#/definitions/ExtendedCacheInstrumentsConfigWithInstrument"
}
],
"description": "Cache instruments"
},
"connector": {
"allOf": [
{
"$ref": "#/definitions/ExtendedConnectorInstrumentsConfigWithInstrument"
}
],
"description": "Connector service instruments."
},
"default_requirement_level": {
"allOf": [
{
"$ref": "#/definitions/DefaultAttributeRequirementLevel"
}
],
"description": "The attributes and instruments to include by default in instruments based on their level as specified in the otel semantic conventions and Apollo documentation."
},
"graphql": {
"allOf": [
{
"$ref": "#/definitions/ExtendedGraphQLInstrumentsConfigWithInstrument"
}
],
"description": "GraphQL response field instruments."
},
"router": {
"allOf": [
{
"$ref": "#/definitions/ExtendedRouterInstrumentsConfigWithInstrument"
}
],
"description": "Router service instruments. For more information see documentation on Router lifecycle."
},
"subgraph": {
"allOf": [
{
"$ref": "#/definitions/ExtendedSubgraphInstrumentsConfigWithInstrument"
}
],
"description": "Subgraph service instruments. For more information see documentation on Router lifecycle."
},
"supergraph": {
"allOf": [
{
"$ref": "#/definitions/ExtendedSupergraphInstrumentsConfigWithInstrument"
}
],
"description": "Supergraph service instruments. For more information see documentation on Router lifecycle."
}
},
"type": "object"
},
"InvalidationEndpointConfig": {
"additionalProperties": false,
"properties": {
"concurrent_requests": {
"default": 10,
"description": "Number of concurrent invalidation requests",
"format": "uint32",
"minimum": 0,
"type": "integer"
},
"listen": {
"allOf": [
{
"$ref": "#/definitions/ListenAddr"
}
],
"description": "Listen address on which the invalidation endpoint must listen."
},
"path": {
"description": "Specify on which path you want to listen for invalidation endpoint.",
"type": "string"
},
"scan_count": {
"default": 1000,
"description": "Number of keys to return at once from a redis SCAN command",
"format": "uint32",
"minimum": 0,
"type": "integer"
}
},
"required": [
"path",
"listen"
],
"type": "object"
},
"InvalidationEndpointConfig2": {
"additionalProperties": false,
"properties": {
"listen": {
"allOf": [
{
"$ref": "#/definitions/ListenAddr"
}
],
"description": "Listen address on which the invalidation endpoint must listen."
},
"path": {
"description": "Specify on which path you want to listen for invalidation endpoint.",
"type": "string"
}
},
"required": [
"path",
"listen"
],
"type": "object"
},
"JWTConf": {
"additionalProperties": false,
"properties": {
"header_name": {
"default": "authorization",
"description": "HTTP header expected to contain JWT",
"type": "string"
},
"header_value_prefix": {
"default": "Bearer",
"description": "Header value prefix",
"type": "string"
},
"ignore_other_prefixes": {
"default": false,
"description": "Whether to ignore any mismatched prefixes",
"type": "boolean"
},
"jwks": {
"description": "List of JWKS used to verify tokens",
"items": {
"$ref": "#/definitions/JwksConf"
},
"type": "array"
},
"on_error": {
"allOf": [
{
"$ref": "#/definitions/OnError"
}
],
"description": "Control the behavior when an error occurs during the authentication process.\n\nDefaults to `Error`. When set to `Continue`, requests that fail JWT authentication will\ncontinue to be processed by the router, but without the JWT claims in the context. When set\nto `Error`, requests that fail JWT authentication will be rejected with a HTTP 403 error."
},
"sources": {
"description": "Alternative sources to extract the JWT",
"items": {
"$ref": "#/definitions/Source"
},
"type": "array"
}
},
"required": [
"jwks"
],
"type": "object"
},
"JwksConf": {
"additionalProperties": false,
"properties": {
"algorithms": {
"default": null,
"description": "List of accepted algorithms. Possible values are `HS256`, `HS384`, `HS512`, `ES256`, `ES384`, `RS256`, `RS384`, `RS512`, `PS256`, `PS384`, `PS512`, `EdDSA`",
"items": {
"type": "string"
},
"type": [
"array",
"null"
]
},
"allow_missing_exp": {
"default": false,
"description": "Allow tokens without an `exp` claim for this JWKS.\n\nExpired tokens with `exp` are still rejected.\nEnable only when required by your issuer and with strict issuer/audience constraints.",
"type": "boolean"
},
"audiences": {
"description": "Expected audiences for tokens verified by that JWKS\n\nIf not specified, the audience will not be checked.",
"items": {
"type": "string"
},
"type": [
"array",
"null"
],
"uniqueItems": true
},
"headers": {
"description": "List of headers to add to the JWKS request",
"items": {
"$ref": "#/definitions/Header"
},
"type": "array"
},
"issuers": {
"description": "Expected issuers for tokens verified by that JWKS\n\nIf not specified, the issuer will not be checked.",
"items": {
"type": "string"
},
"type": [
"array",
"null"
],
"uniqueItems": true
},
"poll_interval": {
"default": {
"nanos": 0,
"secs": 60
},
"description": "Polling interval for each JWKS endpoint in human-readable format; defaults to 60s",
"type": "string"
},
"url": {
"description": "Retrieve the JWK Set",
"type": "string"
}
},
"required": [
"url"
],
"type": "object"
},
"LicenseEnforcementConfig": {
"description": "The license enforcement plugin has no configuration.",
"type": "object"
},
"LimitsConfig": {
"additionalProperties": false,
"description": "Configuration for operation limits, parser limits, HTTP limits, etc.",
"properties": {
"http1_max_request_buf_size": {
"default": null,
"description": "Limit the maximum buffer size for the HTTP1 connection.\n\nDefault is ~400kib.",
"type": [
"string",
"null"
]
},
"http1_max_request_headers": {
"default": null,
"description": "Limit the maximum number of headers of incoming HTTP1 requests. Default is 100.\n\nIf router receives more headers than the buffer size, it responds to the client with\n\"431 Request Header Fields Too Large\".",
"format": "uint",
"minimum": 0,
"type": [
"integer",
"null"
]
},
"http2_max_headers_list_bytes": {
"default": null,
"description": "For HTTP2, limit the header list to a threshold of bytes. Default is 16kb.\n\nIf router receives more headers than allowed size of the header list, it responds to the client with\n\"431 Request Header Fields Too Large\".",
"type": [
"string",
"null"
]
},
"http_max_request_bytes": {
"default": 2000000,
"description": "Limit the size of incoming HTTP requests read from the network,\nto protect against running out of memory. Default: 2000000 (2 MB)",
"format": "uint",
"minimum": 0,
"type": "integer"
},
"introspection_max_depth": {
"default": true,
"description": "Limit the depth of nested list fields in introspection queries\nto protect avoid generating huge responses. Returns a GraphQL\nerror with `{ message: \"Maximum introspection depth exceeded\" }`\nwhen nested fields exceed the limit.\nDefault: true",
"type": "boolean"
},
"max_aliases": {
"default": null,
"description": "If set, requests with operations with more aliases than this maximum\nare rejected with a HTTP 400 Bad Request response and GraphQL error with\n`\"extensions\": {\"code\": \"MAX_ALIASES_LIMIT\"}`",
"format": "uint32",
"minimum": 0,
"type": [
"integer",
"null"
]
},
"max_depth": {
"default": null,
"description": "If set, requests with operations deeper than this maximum\nare rejected with a HTTP 400 Bad Request response and GraphQL error with\n`\"extensions\": {\"code\": \"MAX_DEPTH_LIMIT\"}`\n\nCounts depth of an operation, looking at its selection sets,Λ\nincluding fields in fragments and inline fragments. The following\nexample has a depth of 3.\n\n```graphql\nquery getProduct {\n book { # 1\n ...bookDetails\n }\n}\n\nfragment bookDetails on Book {\n details { # 2\n ... on ProductDetailsBook {\n country # 3\n }\n }\n}\n```",
"format": "uint32",
"minimum": 0,
"type": [
"integer",
"null"
]
},
"max_height": {
"default": null,
"description": "If set, requests with operations higher than this maximum\nare rejected with a HTTP 400 Bad Request response and GraphQL error with\n`\"extensions\": {\"code\": \"MAX_DEPTH_LIMIT\"}`\n\nHeight is based on simple merging of fields using the same name or alias,\nbut only within the same selection set.\nFor example `name` here is only counted once and the query has height 3, not 4:\n\n```graphql\nquery {\n name { first }\n name { last }\n}\n```\n\nThis may change in a future version of Apollo Router to do\n[full field merging across fragments][merging] instead.\n\n[merging]: https://spec.graphql.org/October2021/#sec-Field-Selection-Merging]",
"format": "uint32",
"minimum": 0,
"type": [
"integer",
"null"
]
},
"max_root_fields": {
"default": null,
"description": "If set, requests with operations with more root fields than this maximum\nare rejected with a HTTP 400 Bad Request response and GraphQL error with\n`\"extensions\": {\"code\": \"MAX_ROOT_FIELDS_LIMIT\"}`\n\nThis limit counts only the top level fields in a selection set,\nincluding fragments and inline fragments.",
"format": "uint32",
"minimum": 0,
"type": [
"integer",
"null"
]
},
"parser_max_recursion": {
"default": 500,
"description": "Limit recursion in the GraphQL parser to protect against stack overflow.\ndefault: 500",
"format": "uint",
"minimum": 0,
"type": "integer"
},
"parser_max_tokens": {
"default": 15000,
"description": "Limit the number of tokens the GraphQL parser processes before aborting.",
"format": "uint",
"minimum": 0,
"type": "integer"
},
"warn_only": {
"default": false,
"description": "If set to true (which is the default is dev mode),\nrequests that exceed a `max_*` limit are *not* rejected.\nInstead they are executed normally, and a warning is logged.",
"type": "boolean"
}
},
"type": "object"
},
"ListLength": {
"oneOf": [
{
"const": "value",
"description": "The length of the list",
"type": "string"
}
]
},
"ListenAddr": {
"anyOf": [
{
"description": "Socket address.",
"type": "string"
},
{
"description": "Unix socket.",
"type": "string"
}
],
"description": "Listening address."
},
"Logging": {
"additionalProperties": false,
"description": "Logging configuration.",
"properties": {
"common": {
"allOf": [
{
"$ref": "#/definitions/LoggingCommon"
}
],
"description": "Common configuration"
},
"stdout": {
"allOf": [
{
"$ref": "#/definitions/StdOut"
}
],
"description": "Settings for logging to stdout."
}
},
"type": "object"
},
"LoggingCommon": {
"additionalProperties": false,
"properties": {
"resource": {
"additionalProperties": {
"$ref": "#/definitions/AttributeValue"
},
"default": {},
"description": "The Open Telemetry resource",
"type": "object"
},
"service_name": {
"default": null,
"description": "Set a service.name resource in your metrics",
"type": [
"string",
"null"
]
},
"service_namespace": {
"default": null,
"description": "Set a service.namespace attribute in your metrics",
"type": [
"string",
"null"
]
}
},
"type": "object"
},
"MappingProblems": {
"oneOf": [
{
"const": "problems",
"description": "String representation of all problems",
"type": "string"
},
{
"const": "count",
"description": "The count of mapping problems",
"type": "string"
},
{
"const": "boolean",
"description": "Whether there are any mapping problems",
"type": "string"
}
]
},
"MetricAggregation": {
"oneOf": [
{
"additionalProperties": false,
"description": "An aggregation that summarizes a set of measurements as an histogram with\nexplicitly defined buckets.",
"properties": {
"histogram": {
"additionalProperties": false,
"properties": {
"buckets": {
"items": {
"format": "double",
"type": "number"
},
"type": "array"
}
},
"required": [
"buckets"
],
"type": "object"
}
},
"required": [
"histogram"
],
"type": "object"
},
{
"const": "drop",
"description": "Simply drop the metrics matching this view",
"type": "string"
}
]
},
"MetricView": {
"additionalProperties": false,
"properties": {
"aggregation": {
"anyOf": [
{
"$ref": "#/definitions/MetricAggregation"
},
{
"type": "null"
}
],
"description": "New aggregation settings to set"
},
"allowed_attribute_keys": {
"description": "An allow-list of attribute keys that will be preserved for the instrument.\n\nAny attribute recorded for the instrument with a key not in this set will be\ndropped. If the set is empty, all attributes will be dropped, if `None` all\nattributes will be kept.",
"items": {
"type": "string"
},
"type": [
"array",
"null"
],
"uniqueItems": true
},
"description": {
"description": "New description to set to the instrument",
"type": [
"string",
"null"
]
},
"name": {
"description": "The instrument name you're targeting",
"type": "string"
},
"rename": {
"description": "Rename the metric to this name\n\nThis allows you to customize metric names for both OTLP and Prometheus exporters.\nNote: Prometheus will apply additional transformations (dots to underscores, unit suffixes).\nApollo metrics are not affected by this rename - they will retain original names.",
"type": [
"string",
"null"
]
},
"unit": {
"description": "New unit to set to the instrument",
"type": [
"string",
"null"
]
}
},
"required": [
"name"
],
"type": "object"
},
"Metrics": {
"additionalProperties": false,
"description": "Per subgraph configuration for entity caching",
"properties": {
"enabled": {
"default": false,
"description": "enables metrics evaluating the benefits of entity caching",
"type": "boolean"
},
"separate_per_type": {
"default": false,
"description": "Adds the entity type name to attributes. This can greatly increase the cardinality",
"type": "boolean"
},
"ttl": {
"anyOf": [
{
"$ref": "#/definitions/Ttl"
},
{
"type": "null"
}
],
"description": "Metrics counter TTL"
}
},
"type": "object"
},
"Metrics2": {
"additionalProperties": false,
"description": "Metrics configuration",
"properties": {
"common": {
"allOf": [
{
"$ref": "#/definitions/MetricsCommon"
}
],
"description": "Common metrics configuration across all exporters"
},
"otlp": {
"allOf": [
{
"$ref": "#/definitions/OTLPConfig"
}
],
"description": "Open Telemetry native exporter configuration"
},
"prometheus": {
"allOf": [
{
"$ref": "#/definitions/PrometheusMetricsConfig"
}
],
"description": "Prometheus exporter configuration"
}
},
"type": "object"
},
"MetricsCommon": {
"additionalProperties": false,
"properties": {
"buckets": {
"default": [
0.001,
0.005,
0.015,
0.05,
0.1,
0.2,
0.3,
0.4,
0.5,
1.0,
5.0,
10.0
],
"description": "Custom buckets for all histograms",
"items": {
"format": "double",
"type": "number"
},
"type": "array"
},
"resource": {
"additionalProperties": {
"$ref": "#/definitions/AttributeValue"
},
"default": {},
"description": "The Open Telemetry resource",
"type": "object"
},
"service_name": {
"default": null,
"description": "Set a service.name resource in your metrics",
"type": [
"string",
"null"
]
},
"service_namespace": {
"default": null,
"description": "Set a service.namespace attribute in your metrics",
"type": [
"string",
"null"
]
},
"views": {
"description": "Views applied on metrics",
"items": {
"$ref": "#/definitions/MetricView"
},
"type": "array"
}
},
"type": "object"
},
"MetricsConfiguration": {
"additionalProperties": false,
"properties": {
"otlp": {
"allOf": [
{
"$ref": "#/definitions/OtlpMetricsConfiguration"
}
],
"description": "Configuration for exporting metrics via OTLP."
},
"usage_reports": {
"allOf": [
{
"$ref": "#/definitions/UsageReportsMetricsConfiguration"
}
],
"description": "Configuration for exporting metrics via Apollo usage reports."
}
},
"type": "object"
},
"Mode": {
"enum": [
"measure",
"enforce"
],
"type": "string"
},
"Mode2": {
"enum": [
"measure",
"enforce"
],
"type": "string"
},
"MultipartRequest": {
"additionalProperties": false,
"description": "Configuration for a multipart request for file uploads.\n\nThis protocol conforms to [jaydenseric's multipart spec](https://github.com/jaydenseric/graphql-multipart-request-spec)",
"properties": {
"enabled": {
"default": true,
"description": "Whether to enable the multipart protocol for file uploads (default: true)",
"type": "boolean"
},
"limits": {
"allOf": [
{
"$ref": "#/definitions/MultipartRequestLimits"
}
],
"description": "Resource limits for multipart requests"
},
"mode": {
"allOf": [
{
"$ref": "#/definitions/MultipartRequestMode"
}
],
"description": "The supported mode for the request (default: [MultipartRequestMode::Stream])"
}
},
"type": "object"
},
"MultipartRequestLimits": {
"additionalProperties": false,
"description": "Request limits for a multipart request",
"properties": {
"max_file_size": {
"description": "The maximum size of each file, in bytes (default: 5MB)",
"type": "string"
},
"max_files": {
"description": "The maximum amount of files allowed for a single query (default: 4)",
"format": "uint",
"minimum": 0,
"type": "integer"
}
},
"required": [
"max_files",
"max_file_size"
],
"type": "object"
},
"MultipartRequestMode": {
"description": "Supported mode for a multipart request",
"oneOf": [
{
"const": "stream",
"description": "The multipart request will not be loaded into memory and instead will\nbe streamed directly to the subgraph in the order received. This has some\nlimitations, mainly that the query _must_ be able to be streamed directly\nto the subgraph without buffering.\n\nIn practice, this means that certain queries will fail due to ordering of the\nfiles.",
"type": "string"
}
]
},
"MyTestPluginConfig": {
"description": "Config for the test plugin",
"type": "object"
},
"NewContextConf": {
"description": "Configures the context",
"oneOf": [
{
"const": "all",
"description": "Send all context keys to coprocessor",
"type": "string"
},
{
"const": "deprecated",
"description": "Send all context keys using deprecated names (from router 1.x) to coprocessor",
"type": "string"
},
{
"additionalProperties": false,
"description": "Only send the list of context keys to coprocessor",
"properties": {
"selective": {
"items": {
"type": "string"
},
"type": "array",
"uniqueItems": true
}
},
"required": [
"selective"
],
"type": "object"
}
]
},
"OTLPConfig": {
"additionalProperties": false,
"properties": {
"batch_processor": {
"allOf": [
{
"$ref": "#/definitions/BatchProcessorConfig"
}
],
"description": "Batch processor settings"
},
"enabled": {
"description": "Enable otlp",
"type": "boolean"
},
"endpoint": {
"default": null,
"description": "The endpoint to send data to",
"type": [
"string",
"null"
]
},
"grpc": {
"allOf": [
{
"$ref": "#/definitions/GrpcExporter"
}
],
"default": {
"ca": null,
"cert": null,
"domain_name": null,
"key": null,
"metadata": {}
},
"description": "gRPC configuration settings"
},
"http": {
"allOf": [
{
"$ref": "#/definitions/HttpExporter"
}
],
"default": {
"headers": {}
},
"description": "HTTP configuration settings"
},
"protocol": {
"allOf": [
{
"$ref": "#/definitions/Protocol"
}
],
"default": "grpc",
"description": "The protocol to use when sending data"
},
"temporality": {
"allOf": [
{
"$ref": "#/definitions/Temporality"
}
],
"default": "cumulative",
"description": "Temporality for export (default: `Cumulative`).\nNote that when exporting to Datadog agent use `Delta`."
}
},
"required": [
"enabled"
],
"type": "object"
},
"OnError": {
"enum": [
"Continue",
"Error"
],
"type": "string"
},
"Operation": {
"oneOf": [
{
"additionalProperties": false,
"properties": {
"insert": {
"$ref": "#/definitions/Insert"
}
},
"required": [
"insert"
],
"type": "object"
},
{
"additionalProperties": false,
"properties": {
"remove": {
"$ref": "#/definitions/Remove"
}
},
"required": [
"remove"
],
"type": "object"
},
{
"additionalProperties": false,
"properties": {
"propagate": {
"$ref": "#/definitions/Propagate"
}
},
"required": [
"propagate"
],
"type": "object"
}
]
},
"OperationKind": {
"oneOf": [
{
"const": "string",
"description": "The raw operation kind.",
"type": "string"
}
]
},
"OperationName": {
"oneOf": [
{
"const": "string",
"description": "The raw operation name.",
"type": "string"
},
{
"const": "hash",
"description": "A hash of the operation name.",
"type": "string"
}
]
},
"OtlpMetricsBatchProcessorConfiguration": {
"properties": {
"max_export_timeout": {
"default": {
"nanos": 0,
"secs": 30
},
"description": "The maximum duration to export a batch of data.\nThe default value is 30 seconds.",
"type": "string"
},
"scheduled_delay": {
"default": {
"nanos": 0,
"secs": 5
},
"description": "The delay interval in milliseconds between two consecutive processing\nof batches. The default value is 5 seconds.",
"type": "string"
}
},
"type": "object"
},
"OtlpMetricsConfiguration": {
"additionalProperties": false,
"properties": {
"batch_processor": {
"allOf": [
{
"$ref": "#/definitions/OtlpMetricsBatchProcessorConfiguration"
}
],
"description": "Batch processor config for OTLP metrics."
}
},
"type": "object"
},
"PersistedQueries": {
"additionalProperties": false,
"description": "Persisted Queries (PQ) configuration",
"properties": {
"enabled": {
"default": false,
"description": "Activates Persisted Queries (disabled by default)",
"type": "boolean"
},
"experimental_prewarm_query_plan_cache": {
"allOf": [
{
"$ref": "#/definitions/PersistedQueriesPrewarmQueryPlanCache"
}
],
"default": {
"on_reload": true,
"on_startup": false
},
"description": "Experimental feature to prewarm the query plan cache with persisted queries"
},
"hot_reload": {
"default": false,
"description": "Enables hot reloading of the local persisted query manifests",
"type": "boolean"
},
"local_manifests": {
"default": null,
"description": "Enables using a local copy of the persisted query manifest to safelist operations",
"items": {
"type": "string"
},
"type": [
"array",
"null"
]
},
"log_unknown": {
"default": false,
"description": "Enabling this field configures the router to log any freeform GraphQL request that is not in the persisted query list",
"type": "boolean"
},
"safelist": {
"allOf": [
{
"$ref": "#/definitions/PersistedQueriesSafelist"
}
],
"default": {
"enabled": false,
"require_id": false
},
"description": "Restricts execution of operations that are not found in the Persisted Query List"
}
},
"type": "object"
},
"PersistedQueriesPrewarmQueryPlanCache": {
"additionalProperties": false,
"description": "Persisted Queries (PQ) query plan cache prewarm configuration",
"properties": {
"on_reload": {
"default": true,
"description": "Enabling this field uses the persisted query list to pre-warm the query planner cache on schema and config changes (enabled by default)",
"type": "boolean"
},
"on_startup": {
"default": false,
"description": "Enabling this field uses the persisted query list to pre-warm the query planner cache on startup (disabled by default)",
"type": "boolean"
}
},
"type": "object"
},
"PersistedQueriesSafelist": {
"additionalProperties": false,
"description": "Persisted Queries (PQ) Safelisting configuration",
"properties": {
"enabled": {
"default": false,
"description": "Enables using the persisted query list as a safelist (disabled by default)",
"type": "boolean"
},
"require_id": {
"default": false,
"description": "Enabling this field configures the router to reject any request that does not include the persisted query ID",
"type": "boolean"
}
},
"type": "object"
},
"Plugins": {
"additionalProperties": false,
"patternProperties": {},
"properties": {
"apollo_testing.my_test_plugin": {
"$ref": "#/definitions/MyTestPluginConfig"
},
"experimental.broken": {
"$ref": "#/definitions/Config2"
},
"experimental.expose_query_plan": {
"$ref": "#/definitions/ExposeQueryPlanConfig"
},
"experimental.record": {
"$ref": "#/definitions/RecordConfig"
},
"experimental.restricted": {
"$ref": "#/definitions/Config3"
},
"test.always_fails_to_start": {
"$ref": "#/definitions/Conf"
},
"test.always_starts_and_stops": {
"$ref": "#/definitions/Conf"
}
},
"type": "object"
},
"Policy": {
"additionalProperties": false,
"description": "Configuration for a specific set of origins",
"properties": {
"allow_credentials": {
"default": null,
"description": "Set to true to add the `Access-Control-Allow-Credentials` header for these origins",
"type": [
"boolean",
"null"
]
},
"allow_headers": {
"default": [],
"description": "The headers to allow for these origins",
"items": {
"type": "string"
},
"type": "array"
},
"expose_headers": {
"default": [],
"description": "Which response headers should be made available to scripts running in the browser",
"items": {
"type": "string"
},
"type": "array"
},
"match_origins": {
"default": [],
"description": "Regex patterns to match origins against.",
"items": {
"type": "string"
},
"type": "array"
},
"max_age": {
"default": null,
"description": "The `Access-Control-Max-Age` header value in time units",
"type": "string"
},
"methods": {
"default": null,
"description": "Allowed request methods for these origins.",
"items": {
"type": "string"
},
"type": [
"array",
"null"
]
},
"origins": {
"default": [
"https://studio.apollographql.com"
],
"description": "The origins to allow requests from.",
"items": {
"type": "string"
},
"type": "array"
},
"private_network_access": {
"anyOf": [
{
"$ref": "#/definitions/PrivateNetworkAccessPolicy"
},
{
"type": "null"
}
],
"default": null,
"description": "When `Some`, the `Access-Control-Allow-Private-Network` header will be added as well as the\nrespective headers contained within the policy."
}
},
"type": "object"
},
"PrivateNetworkAccessPolicy": {
"additionalProperties": false,
"properties": {
"access_id": {
"default": null,
"description": "When specified, the `Private-Network-Access-ID` header will be added with the given ID.\nThe ID must be a 48-bit value presented as 6 hexadecimal bytes separated by colons, e.g.\n`01:23:45:67:89:0A`.",
"type": [
"string",
"null"
]
},
"access_name": {
"default": null,
"description": "When `Some`, the `Private-Network-Access-Name` header will be added with the given name.\nThe name can be at most 248 UTF-8 code units and match a RegEx equivalent to the ECMAScript\nRegEx `/^[a-z0-9_-.]+$/.`",
"type": [
"string",
"null"
]
}
},
"type": "object"
},
"PrometheusMetricsConfig": {
"additionalProperties": false,
"description": "Prometheus configuration",
"properties": {
"enabled": {
"default": false,
"description": "Set to true to enable",
"type": "boolean"
},
"listen": {
"allOf": [
{
"$ref": "#/definitions/ListenAddr"
}
],
"default": "127.0.0.1:9090",
"description": "The listen address"
},
"path": {
"default": "/metrics",
"description": "The path where prometheus will be exposed",
"type": "string"
},
"resource_selector": {
"allOf": [
{
"$ref": "#/definitions/ResourceSelectorConfig"
}
],
"description": "resource_selector is used to select which resource to export with every metrics."
}
},
"type": "object"
},
"Propagate": {
"anyOf": [
{
"additionalProperties": false,
"description": "Propagate header given a header name",
"properties": {
"default": {
"description": "Default value for the header.",
"type": [
"string",
"null"
]
},
"named": {
"description": "The source header name",
"type": "string"
},
"rename": {
"description": "An optional target header name",
"type": [
"string",
"null"
]
}
},
"required": [
"named"
],
"type": "object"
},
{
"additionalProperties": false,
"description": "Propagate header given a regex to match header name",
"properties": {
"matching": {
"default": null,
"description": "The regex on header name",
"type": "string"
}
},
"required": [
"matching"
],
"type": "object"
}
],
"description": "Propagate header"
},
"Propagation": {
"additionalProperties": false,
"description": "Configure propagation of traces. In general you won't have to do this as these are automatically configured\nalong with any exporter you configure.",
"properties": {
"aws_xray": {
"default": false,
"description": "Propagate AWS X-Ray",
"type": "boolean"
},
"baggage": {
"default": false,
"description": "Propagate baggage https://www.w3.org/TR/baggage/",
"type": "boolean"
},
"datadog": {
"default": null,
"description": "Propagate Datadog",
"type": [
"boolean",
"null"
]
},
"jaeger": {
"default": false,
"description": "Propagate Jaeger",
"type": "boolean"
},
"request": {
"allOf": [
{
"$ref": "#/definitions/RequestPropagation"
}
],
"description": "Select a custom request header to set your own trace_id (header value must be convertible from hexadecimal to set a correct trace_id)"
},
"trace_context": {
"default": false,
"description": "Propagate trace context https://www.w3.org/TR/trace-context/",
"type": "boolean"
},
"zipkin": {
"default": false,
"description": "Propagate Zipkin",
"type": "boolean"
}
},
"type": "object"
},
"Protocol": {
"enum": [
"grpc",
"http"
],
"type": "string"
},
"Query": {
"oneOf": [
{
"const": "string",
"description": "The raw query kind.",
"type": "string"
},
{
"const": "aliases",
"description": "The query aliases.",
"type": "string"
},
{
"const": "depth",
"description": "The query depth.",
"type": "string"
},
{
"const": "height",
"description": "The query height.",
"type": "string"
},
{
"const": "root_fields",
"description": "The query root fields.",
"type": "string"
}
]
},
"QueryPlanCache": {
"additionalProperties": false,
"description": "Cache configuration",
"properties": {
"in_memory": {
"allOf": [
{
"$ref": "#/definitions/InMemoryCache"
}
],
"default": {
"limit": 512
},
"description": "Configures the in memory cache (always active)"
},
"redis": {
"anyOf": [
{
"$ref": "#/definitions/QueryPlanRedisCache"
},
{
"type": "null"
}
],
"default": null,
"description": "Configures and activates the Redis cache"
}
},
"type": "object"
},
"QueryPlanRedisCache": {
"additionalProperties": false,
"description": "Redis cache configuration",
"properties": {
"namespace": {
"description": "namespace used to prefix Redis keys",
"type": [
"string",
"null"
]
},
"password": {
"description": "Redis password if not provided in the URLs. This field takes precedence over the password in the URL",
"type": [
"string",
"null"
]
},
"pool_size": {
"default": 1,
"description": "The size of the Redis connection pool",
"format": "uint32",
"minimum": 0,
"type": "integer"
},
"required_to_start": {
"default": false,
"description": "Prevents the router from starting if it cannot connect to Redis",
"type": "boolean"
},
"reset_ttl": {
"default": true,
"description": "When a TTL is set on a key, reset it when reading the data from that key",
"type": "boolean"
},
"timeout": {
"default": {
"nanos": 0,
"secs": 0
},
"description": "Redis request timeout (default: 500ms)",
"type": [
"string",
"null"
]
},
"tls": {
"anyOf": [
{
"$ref": "#/definitions/TlsClient"
},
{
"type": "null"
}
],
"default": null,
"description": "TLS client configuration"
},
"ttl": {
"default": {
"nanos": 0,
"secs": 2592000
},
"description": "TTL for entries",
"type": [
"string",
"null"
]
},
"urls": {
"description": "List of URLs to the Redis cluster",
"items": {
"format": "uri",
"type": "string"
},
"type": "array"
},
"username": {
"description": "Redis username if not provided in the URLs. This field takes precedence over the username in the URL",
"type": [
"string",
"null"
]
}
},
"required": [
"urls"
],
"type": "object"
},
"QueryPlanning": {
"additionalProperties": false,
"description": "Query planning cache configuration",
"properties": {
"cache": {
"allOf": [
{
"$ref": "#/definitions/QueryPlanCache"
}
],
"default": {
"in_memory": {
"limit": 512
},
"redis": null
},
"description": "Cache configuration"
},
"experimental_cooperative_cancellation": {
"allOf": [
{
"$ref": "#/definitions/CooperativeCancellation"
}
],
"default": {
"enabled": true,
"memory_limit": null,
"mode": "measure",
"timeout": null
},
"description": "Configures cooperative cancellation of query planning\n\nSee [`CooperativeCancellation`] for more details."
},
"experimental_paths_limit": {
"default": null,
"description": "Before creating query plans, for each path of fields in the query we compute all the\npossible options to traverse that path via the subgraphs. Multiple options can arise because\nfields in the path can be provided by multiple subgraphs, and abstract types (i.e. unions\nand interfaces) returned by fields sometimes require the query planner to traverse through\neach constituent object type. The number of options generated in this computation can grow\nlarge if the schema or query are sufficiently complex, and that will increase the time spent\nplanning.\n\nThis config allows specifying a per-path limit to the number of options considered. If any\npath's options exceeds this limit, query planning will abort and the operation will fail.\n\nThe default value is None, which specifies no limit.",
"format": "uint32",
"minimum": 0,
"type": [
"integer",
"null"
]
},
"experimental_plans_limit": {
"default": null,
"description": "Sets a limit to the number of generated query plans.\nThe planning process generates many different query plans as it\nexplores the graph, and the list can grow large. By using this\nlimit, we prevent that growth and still get a valid query plan,\nbut it may not be the optimal one.\n\nThe default limit is set to 10000, but it may change in the future",
"format": "uint32",
"minimum": 0,
"type": [
"integer",
"null"
]
},
"experimental_reuse_query_plans": {
"default": false,
"description": "If cache warm up is configured, this will allow the router to keep a query plan created with\nthe old schema, if it determines that the schema update does not affect the corresponding query",
"type": "boolean"
},
"warmed_up_queries": {
"default": null,
"description": "Warms up the cache on reloads by running the query plan over\na list of the most used queries (from the in memory cache)\nConfigures the number of queries warmed up. Defaults to 1/3 of\nthe in memory cache",
"format": "uint",
"minimum": 0,
"type": [
"integer",
"null"
]
}
},
"type": "object"
},
"RateLimit": {
"additionalProperties": false,
"properties": {
"capacity": {
"default": 1,
"description": "Number of log lines allowed in interval per message",
"format": "uint32",
"minimum": 0,
"type": "integer"
},
"enabled": {
"default": false,
"description": "Set to true to limit the rate of log messages",
"type": "boolean"
},
"interval": {
"default": {
"nanos": 0,
"secs": 1
},
"description": "Interval for rate limiting",
"type": "string"
}
},
"type": "object"
},
"RateLimitConf": {
"additionalProperties": false,
"properties": {
"capacity": {
"description": "Number of requests allowed",
"format": "uint64",
"minimum": 1,
"type": "integer"
},
"interval": {
"description": "Per interval",
"type": "string"
}
},
"required": [
"capacity",
"interval"
],
"type": "object"
},
"ReadinessConfig": {
"additionalProperties": false,
"description": "Configuration options pertaining to the readiness health sub-component.",
"properties": {
"allowed": {
"default": 100,
"description": "How many rejections are allowed in an interval (default: 100)\nIf this number is exceeded, the router will start to report unready.",
"format": "uint",
"minimum": 0,
"type": "integer"
},
"interval": {
"allOf": [
{
"$ref": "#/definitions/ReadinessIntervalConfig"
}
],
"default": {
"sampling": "5s",
"unready": null
},
"description": "The readiness interval configuration"
}
},
"type": "object"
},
"ReadinessIntervalConfig": {
"additionalProperties": false,
"description": "Configuration options pertaining to the readiness health interval sub-component.",
"properties": {
"sampling": {
"default": "0s",
"description": "The sampling interval (default: 5s)",
"type": [
"string",
"null"
]
},
"unready": {
"default": null,
"description": "The unready interval (default: 2 * sampling interval)",
"type": [
"string",
"null"
]
}
},
"type": "object"
},
"RecordConfig": {
"additionalProperties": false,
"description": "Request recording configuration.",
"properties": {
"enabled": {
"description": "The recording plugin is disabled by default.",
"type": "boolean"
},
"storage_path": {
"description": "The path to the directory where recordings will be stored. Defaults to\nthe current working directory.",
"type": [
"string",
"null"
]
}
},
"required": [
"enabled"
],
"type": "object"
},
"RedisCache": {
"additionalProperties": false,
"description": "Redis cache configuration",
"properties": {
"metrics_interval": {
"default": {
"nanos": 0,
"secs": 0
},
"description": "Interval for collecting Redis metrics (default: 1s)",
"type": [
"string",
"null"
]
},
"namespace": {
"description": "namespace used to prefix Redis keys",
"type": [
"string",
"null"
]
},
"password": {
"description": "Redis password if not provided in the URLs. This field takes precedence over the password in the URL",
"type": [
"string",
"null"
]
},
"pool_size": {
"default": 1,
"description": "The size of the Redis connection pool",
"format": "uint32",
"minimum": 0,
"type": "integer"
},
"required_to_start": {
"default": false,
"description": "Prevents the router from starting if it cannot connect to Redis",
"type": "boolean"
},
"reset_ttl": {
"default": true,
"description": "When a TTL is set on a key, reset it when reading the data from that key",
"type": "boolean"
},
"timeout": {
"default": {
"nanos": 0,
"secs": 0
},
"description": "Redis request timeout (default: 500ms)",
"type": [
"string",
"null"
]
},
"tls": {
"anyOf": [
{
"$ref": "#/definitions/TlsClient"
},
{
"type": "null"
}
],
"default": null,
"description": "TLS client configuration"
},
"ttl": {
"default": null,
"description": "TTL for entries",
"type": [
"string",
"null"
]
},
"urls": {
"description": "List of URLs to the Redis cluster",
"items": {
"format": "uri",
"type": "string"
},
"type": "array"
},
"username": {
"description": "Redis username if not provided in the URLs. This field takes precedence over the username in the URL",
"type": [
"string",
"null"
]
}
},
"required": [
"urls"
],
"type": "object"
},
"Remove": {
"description": "Remove header",
"oneOf": [
{
"additionalProperties": false,
"description": "Remove a header given a header name",
"properties": {
"named": {
"default": null,
"description": "Remove a header given a header name",
"type": "string"
}
},
"required": [
"named"
],
"type": "object"
},
{
"additionalProperties": false,
"description": "Remove a header given a regex matching header name",
"properties": {
"matching": {
"default": null,
"description": "Remove a header given a regex matching against the header name",
"type": "string"
}
},
"required": [
"matching"
],
"type": "object"
}
]
},
"RequestPropagation": {
"additionalProperties": false,
"properties": {
"format": {
"allOf": [
{
"$ref": "#/definitions/TraceIdFormat"
}
],
"description": "The trace ID format that will be used when propagating to subgraph services."
},
"header_name": {
"description": "Choose the header name to expose trace_id (default: apollo-trace-id)",
"type": "string"
}
},
"required": [
"header_name"
],
"type": "object"
},
"ResourceSelectorConfig": {
"oneOf": [
{
"const": "all",
"description": "Export all resource attributes with every metrics.",
"type": "string"
},
{
"const": "none",
"description": "Do not export any resource attributes with every metrics.",
"type": "string"
}
]
},
"ResponseStatus": {
"oneOf": [
{
"const": "code",
"description": "The http status code.",
"type": "string"
},
{
"const": "reason",
"description": "The http status reason.",
"type": "string"
}
]
},
"RhaiConfig": {
"additionalProperties": false,
"description": "Configuration for the Rhai Plugin",
"properties": {
"intern_strings": {
"default": true,
"description": "Whether to enable Rhai's internal string interning.\n\nString interning can reduce memory allocations and string comparison\ncost. But it also introduces synchronization overhead.\n\nSetting this to `false` can improve throughput and is recommended\nfor workloads with many concurrent Rhai executions.\n\nDefaults to `true`.",
"type": "boolean"
},
"main": {
"description": "The main entry point for Rhai script evaluation",
"type": [
"string",
"null"
]
},
"scripts": {
"description": "The directory where Rhai scripts can be found",
"type": [
"string",
"null"
]
}
},
"type": "object"
},
"Router": {
"additionalProperties": false,
"description": "Router level (APQ) configuration",
"properties": {
"cache": {
"allOf": [
{
"$ref": "#/definitions/Cache"
}
],
"default": {
"in_memory": {
"limit": 512
},
"redis": null
}
}
},
"type": "object"
},
"RouterRequestConf": {
"additionalProperties": false,
"description": "What information is passed to a router request/response stage",
"properties": {
"body": {
"default": false,
"description": "Send the body",
"type": "boolean"
},
"condition": {
"anyOf": [
{
"$ref": "#/definitions/ConditionRouterSelector"
},
{
"type": "null"
}
],
"description": "Condition to trigger this stage"
},
"context": {
"allOf": [
{
"$ref": "#/definitions/ContextConf"
}
],
"description": "Send the context"
},
"headers": {
"default": false,
"description": "Send the headers",
"type": "boolean"
},
"method": {
"default": false,
"description": "Send the method",
"type": "boolean"
},
"path": {
"default": false,
"description": "Send the path",
"type": "boolean"
},
"sdl": {
"default": false,
"description": "Send the SDL",
"type": "boolean"
},
"url": {
"default": null,
"description": "The coprocessor URL for this stage (overrides the global URL if specified)",
"type": [
"string",
"null"
]
}
},
"type": "object"
},
"RouterResponseConf": {
"additionalProperties": false,
"description": "What information is passed to a router request/response stage",
"properties": {
"body": {
"default": false,
"description": "Send the body",
"type": "boolean"
},
"condition": {
"allOf": [
{
"$ref": "#/definitions/ConditionRouterSelector"
}
],
"description": "Condition to trigger this stage"
},
"context": {
"allOf": [
{
"$ref": "#/definitions/ContextConf"
}
],
"description": "Send the context"
},
"headers": {
"default": false,
"description": "Send the headers",
"type": "boolean"
},
"sdl": {
"default": false,
"description": "Send the SDL",
"type": "boolean"
},
"status_code": {
"default": false,
"description": "Send the HTTP status",
"type": "boolean"
},
"url": {
"default": null,
"description": "The coprocessor URL for this stage (overrides the global URL if specified)",
"type": [
"string",
"null"
]
}
},
"type": "object"
},
"RouterSelector": {
"anyOf": [
{
"additionalProperties": false,
"description": "A value from baggage.",
"properties": {
"baggage": {
"description": "The name of the baggage item.",
"type": "string"
},
"default": {
"anyOf": [
{
"$ref": "#/definitions/AttributeValue"
},
{
"type": "null"
}
],
"description": "Optional default value."
}
},
"required": [
"baggage"
],
"type": "object"
},
{
"additionalProperties": false,
"description": "A value from an environment variable.",
"properties": {
"default": {
"description": "Optional default value.",
"type": [
"string",
"null"
]
},
"env": {
"description": "The name of the environment variable",
"type": "string"
}
},
"required": [
"env"
],
"type": "object"
},
{
"additionalProperties": false,
"description": "Critical error if it happens",
"properties": {
"error": {
"$ref": "#/definitions/ErrorRepr"
}
},
"required": [
"error"
],
"type": "object"
},
{
"additionalProperties": false,
"description": "Boolean set to true if the response body contains graphql error",
"properties": {
"on_graphql_error": {
"type": "boolean"
}
},
"required": [
"on_graphql_error"
],
"type": "object"
},
{
"additionalProperties": false,
"description": "The operation name from the query.",
"properties": {
"default": {
"description": "Optional default value.",
"type": [
"string",
"null"
]
},
"operation_name": {
"allOf": [
{
"$ref": "#/definitions/OperationName"
}
],
"description": "The operation name from the query."
}
},
"required": [
"operation_name"
],
"type": "object"
},
{
"additionalProperties": false,
"description": "A header from the request",
"properties": {
"default": {
"anyOf": [
{
"$ref": "#/definitions/AttributeValue"
},
{
"type": "null"
}
],
"description": "Optional default value."
},
"request_header": {
"description": "The name of the request header.",
"type": "string"
}
},
"required": [
"request_header"
],
"type": "object"
},
{
"additionalProperties": false,
"description": "A value from context.",
"properties": {
"default": {
"anyOf": [
{
"$ref": "#/definitions/AttributeValue"
},
{
"type": "null"
}
],
"description": "Optional default value."
},
"request_context": {
"description": "The request context key.",
"type": "string"
}
},
"required": [
"request_context"
],
"type": "object"
},
{
"additionalProperties": false,
"description": "The request method.",
"properties": {
"request_method": {
"description": "The request method enabled or not",
"type": "boolean"
}
},
"required": [
"request_method"
],
"type": "object"
},
{
"additionalProperties": false,
"description": "The body of the response",
"properties": {
"response_body": {
"description": "The response body enabled or not",
"type": "boolean"
}
},
"required": [
"response_body"
],
"type": "object"
},
{
"additionalProperties": false,
"description": "The body response errors",
"properties": {
"response_errors": {
"description": "The router response body json path of the chunks.",
"type": "string"
}
},
"required": [
"response_errors"
],
"type": "object"
},
{
"additionalProperties": false,
"description": "A header from the response",
"properties": {
"default": {
"anyOf": [
{
"$ref": "#/definitions/AttributeValue"
},
{
"type": "null"
}
],
"description": "Optional default value."
},
"response_header": {
"description": "The name of the request header.",
"type": "string"
}
},
"required": [
"response_header"
],
"type": "object"
},
{
"additionalProperties": false,
"description": "A value from context.",
"properties": {
"default": {
"anyOf": [
{
"$ref": "#/definitions/AttributeValue"
},
{
"type": "null"
}
],
"description": "Optional default value."
},
"response_context": {
"description": "The response context key.",
"type": "string"
}
},
"required": [
"response_context"
],
"type": "object"
},
{
"additionalProperties": false,
"description": "A status from the response",
"properties": {
"response_status": {
"allOf": [
{
"$ref": "#/definitions/ResponseStatus"
}
],
"description": "The http response status code."
}
},
"required": [
"response_status"
],
"type": "object"
},
{
"additionalProperties": false,
"description": "The size hint of the body.\nIf compression is enabled, this will be the uncompressed size.\nIts not possible to get the compressed size in selector as the\nbody has not yet been compressed at the time on_response is called.",
"properties": {
"response_size_hint": {
"description": "Extract response size hint in bytes",
"type": "boolean"
}
},
"required": [
"response_size_hint"
],
"type": "object"
},
{
"additionalProperties": false,
"description": "Router overhead duration (time not spent in subgraph requests)",
"properties": {
"router_overhead": {
"description": "Extract router overhead duration in seconds",
"type": "boolean"
}
},
"required": [
"router_overhead"
],
"type": "object"
},
{
"additionalProperties": false,
"description": "Total request duration from when the request was received",
"properties": {
"request_duration": {
"allOf": [
{
"$ref": "#/definitions/DurationUnit"
}
],
"description": "The unit for the duration (milliseconds, seconds, nanoseconds)"
}
},
"required": [
"request_duration"
],
"type": "object"
},
{
"additionalProperties": false,
"description": "Number of active subgraph requests at the time of overhead calculation",
"properties": {
"active_subgraph_requests": {
"allOf": [
{
"$ref": "#/definitions/ActiveSubgraphRequests"
}
],
"description": "The mode for extracting active subgraph request information"
}
},
"required": [
"active_subgraph_requests"
],
"type": "object"
},
{
"description": "Deprecated, should not be used anymore, use static field instead",
"type": "string"
},
{
"additionalProperties": false,
"properties": {
"static": {
"allOf": [
{
"$ref": "#/definitions/AttributeValue"
}
],
"description": "A static value"
}
},
"required": [
"static"
],
"type": "object"
},
{
"additionalProperties": false,
"description": "Apollo Studio operation id",
"properties": {
"studio_operation_id": {
"description": "Apollo Studio operation id",
"type": "boolean"
}
},
"required": [
"studio_operation_id"
],
"type": "object"
},
{
"additionalProperties": false,
"description": "The trace ID of the request.",
"properties": {
"trace_id": {
"allOf": [
{
"$ref": "#/definitions/TraceIdFormat"
}
],
"description": "The format of the trace ID."
}
},
"required": [
"trace_id"
],
"type": "object"
},
{
"additionalProperties": false,
"description": "The context ID of the request (unique per request).",
"properties": {
"context_id": {
"description": "The context ID",
"type": "boolean"
}
},
"required": [
"context_id"
],
"type": "object"
}
]
},
"RouterSelectorOrValue": {
"anyOf": [
{
"allOf": [
{
"$ref": "#/definitions/AttributeValue"
}
],
"description": "A constant value."
},
{
"allOf": [
{
"$ref": "#/definitions/RouterSelector"
}
],
"description": "Selector to extract a value from the pipeline."
}
]
},
"RouterShaping": {
"additionalProperties": false,
"properties": {
"concurrency_limit": {
"description": "The global concurrency limit",
"format": "uint",
"minimum": 0,
"type": [
"integer",
"null"
]
},
"global_rate_limit": {
"anyOf": [
{
"$ref": "#/definitions/RateLimitConf"
},
{
"type": "null"
}
],
"description": "Enable global rate limiting"
},
"timeout": {
"default": null,
"description": "Enable timeout for incoming requests",
"type": "string"
}
},
"type": "object"
},
"RouterSpans": {
"additionalProperties": false,
"properties": {
"attributes": {
"allOf": [
{
"$ref": "#/definitions/ExtendedRouterAttributesWithConditionalRouterSelector"
}
],
"description": "Custom attributes that are attached to the router span."
}
},
"type": "object"
},
"RouterStage": {
"properties": {
"request": {
"allOf": [
{
"$ref": "#/definitions/RouterRequestConf"
}
],
"description": "The request configuration"
},
"response": {
"allOf": [
{
"$ref": "#/definitions/RouterResponseConf"
}
],
"description": "The response configuration"
}
},
"type": "object"
},
"RouterValue": {
"anyOf": [
{
"$ref": "#/definitions/Standard"
},
{
"$ref": "#/definitions/RouterSelector"
}
]
},
"Sampler": {
"oneOf": [
{
"const": "always_on",
"description": "Always sample",
"type": "string"
},
{
"const": "always_off",
"description": "Never sample",
"type": "string"
}
]
},
"SamplerOption": {
"anyOf": [
{
"description": "Sample a given fraction. Fractions >= 1 will always sample.",
"format": "double",
"type": "number"
},
{
"$ref": "#/definitions/Sampler"
}
]
},
"Sandbox": {
"additionalProperties": false,
"description": "Configuration options pertaining to the sandbox page.",
"properties": {
"enabled": {
"default": false,
"description": "Set to true to enable sandbox",
"type": "boolean"
}
},
"type": "object"
},
"Server": {
"additionalProperties": false,
"properties": {
"http": {
"allOf": [
{
"$ref": "#/definitions/ServerHttpConfig"
}
],
"default": {
"header_read_timeout": {
"nanos": 0,
"secs": 10
},
"tls_handshake_timeout": {
"nanos": 0,
"secs": 10
}
},
"description": "The server http configuration"
}
},
"type": "object"
},
"ServerHttpConfig": {
"additionalProperties": false,
"description": "Configuration for HTTP",
"properties": {
"header_read_timeout": {
"default": {
"nanos": 0,
"secs": 10
},
"description": "Header read timeout in human-readable format; defaults to 10s",
"type": "string"
},
"tls_handshake_timeout": {
"default": {
"nanos": 0,
"secs": 10
},
"description": "TLS handshake timeout in human-readable format; defaults to 10s",
"type": "string"
}
},
"type": "object"
},
"Source": {
"oneOf": [
{
"additionalProperties": false,
"properties": {
"name": {
"default": "authorization",
"description": "HTTP header expected to contain JWT",
"type": "string"
},
"type": {
"const": "header",
"type": "string"
},
"value_prefix": {
"default": "Bearer",
"description": "Header value prefix",
"type": "string"
}
},
"required": [
"type"
],
"type": "object"
},
{
"additionalProperties": false,
"properties": {
"name": {
"description": "Name of the cookie containing the JWT",
"type": "string"
},
"type": {
"const": "cookie",
"type": "string"
}
},
"required": [
"type",
"name"
],
"type": "object"
}
]
},
"SourceConfiguration": {
"additionalProperties": false,
"description": "Configuration for a `@source` directive",
"properties": {
"$config": {
"additionalProperties": true,
"default": {},
"description": "Other values that can be used by connectors via `{$config.<key>}`",
"type": "object"
},
"max_requests_per_operation": {
"default": null,
"description": "The maximum number of requests for this source",
"format": "uint",
"minimum": 0,
"type": [
"integer",
"null"
]
},
"override_url": {
"default": null,
"description": "Override the `@source(http: {baseURL:})`",
"format": "uri",
"type": [
"string",
"null"
]
}
},
"type": "object"
},
"SpanMode": {
"description": "Span mode to create new or deprecated spans",
"oneOf": [
{
"const": "deprecated",
"description": "Keep the request span as root span and deprecated attributes. This option will eventually removed.",
"type": "string"
},
{
"const": "spec_compliant",
"description": "Use new OpenTelemetry spec compliant span attributes or preserve existing. This will be the default in future.",
"type": "string"
}
]
},
"Spans": {
"additionalProperties": false,
"properties": {
"connector": {
"allOf": [
{
"$ref": "#/definitions/ConnectorSpans"
}
],
"description": "Attributes to include on the connector span.\nConnector spans contain information about the connector request and response and therefore contain connector specific attributes."
},
"default_attribute_requirement_level": {
"allOf": [
{
"$ref": "#/definitions/DefaultAttributeRequirementLevel"
}
],
"description": "The attributes to include by default in spans based on their level as specified in the otel semantic conventions and Apollo documentation."
},
"http_client": {
"allOf": [
{
"$ref": "#/definitions/HttpClientSpans"
}
],
"description": "Attributes to include on the HTTP client span.\nHTTP client spans contain information about HTTP requests made to subgraphs, including any changes made by Rhai scripts."
},
"mode": {
"allOf": [
{
"$ref": "#/definitions/SpanMode"
}
],
"description": "Use new OpenTelemetry spec compliant span attributes or preserve existing. This will be defaulted in future to `spec_compliant`, eventually removed in future."
},
"router": {
"allOf": [
{
"$ref": "#/definitions/RouterSpans"
}
],
"description": "Configuration of router spans.\nLog events inherit attributes from the containing span, so attributes configured here will be included on log events for a request.\nRouter spans contain http request and response information and therefore contain http specific attributes."
},
"subgraph": {
"allOf": [
{
"$ref": "#/definitions/SubgraphSpans"
}
],
"description": "Attributes to include on the subgraph span.\nSubgraph spans contain information about the subgraph request and response and therefore contain subgraph specific attributes."
},
"supergraph": {
"allOf": [
{
"$ref": "#/definitions/SupergraphSpans"
}
],
"description": "Configuration of supergraph spans.\nSupergraph spans contain information about the graphql request and response and therefore contain graphql specific attributes."
}
},
"type": "object"
},
"Standard": {
"enum": [
"duration",
"unit"
],
"type": "string"
},
"StandardAttribute": {
"anyOf": [
{
"type": "boolean"
},
{
"additionalProperties": false,
"properties": {
"alias": {
"type": "string"
}
},
"required": [
"alias"
],
"type": "object"
}
]
},
"StandardEventConfigConnectorSelector": {
"anyOf": [
{
"$ref": "#/definitions/EventLevelConfig"
},
{
"properties": {
"condition": {
"$ref": "#/definitions/ConditionConnectorSelector"
},
"level": {
"$ref": "#/definitions/EventLevelConfig"
}
},
"required": [
"level",
"condition"
],
"type": "object"
}
]
},
"StandardEventConfigRouterSelector": {
"anyOf": [
{
"$ref": "#/definitions/EventLevelConfig"
},
{
"properties": {
"condition": {
"$ref": "#/definitions/ConditionRouterSelector"
},
"level": {
"$ref": "#/definitions/EventLevelConfig"
}
},
"required": [
"level",
"condition"
],
"type": "object"
}
]
},
"StandardEventConfigSubgraphSelector": {
"anyOf": [
{
"$ref": "#/definitions/EventLevelConfig"
},
{
"properties": {
"condition": {
"$ref": "#/definitions/ConditionSubgraphSelector"
},
"level": {
"$ref": "#/definitions/EventLevelConfig"
}
},
"required": [
"level",
"condition"
],
"type": "object"
}
]
},
"StandardEventConfigSupergraphSelector": {
"anyOf": [
{
"$ref": "#/definitions/EventLevelConfig"
},
{
"properties": {
"condition": {
"$ref": "#/definitions/ConditionSupergraphSelector"
},
"level": {
"$ref": "#/definitions/EventLevelConfig"
}
},
"required": [
"level",
"condition"
],
"type": "object"
}
]
},
"StandardInstrumentActiveRequestsAttributes": {
"anyOf": [
{
"type": "null"
},
{
"type": "boolean"
},
{
"additionalProperties": false,
"properties": {
"attributes": {
"$ref": "#/definitions/ActiveRequestsAttributes"
}
},
"required": [
"attributes"
],
"type": "object"
}
]
},
"StandardInstrumentExtendedCacheAttributesWithSubgraphSelector": {
"anyOf": [
{
"type": "null"
},
{
"type": "boolean"
},
{
"additionalProperties": false,
"properties": {
"attributes": {
"$ref": "#/definitions/ExtendedCacheAttributesWithSubgraphSelector"
}
},
"required": [
"attributes"
],
"type": "object"
}
]
},
"StandardInstrumentExtendedConnectorAttributesWithConnectorSelector": {
"anyOf": [
{
"type": "null"
},
{
"type": "boolean"
},
{
"additionalProperties": false,
"properties": {
"attributes": {
"$ref": "#/definitions/ExtendedConnectorAttributesWithConnectorSelector"
}
},
"required": [
"attributes"
],
"type": "object"
}
]
},
"StandardInstrumentExtendedGraphQLAttributesWithGraphQLSelector": {
"anyOf": [
{
"type": "null"
},
{
"type": "boolean"
},
{
"additionalProperties": false,
"properties": {
"attributes": {
"$ref": "#/definitions/ExtendedGraphQLAttributesWithGraphQLSelector"
}
},
"required": [
"attributes"
],
"type": "object"
}
]
},
"StandardInstrumentExtendedRouterAttributesWithRouterSelector": {
"anyOf": [
{
"type": "null"
},
{
"type": "boolean"
},
{
"additionalProperties": false,
"properties": {
"attributes": {
"$ref": "#/definitions/ExtendedRouterAttributesWithRouterSelector"
}
},
"required": [
"attributes"
],
"type": "object"
}
]
},
"StandardInstrumentExtendedRouterOverheadAttributesWithRouterSelector": {
"anyOf": [
{
"type": "null"
},
{
"type": "boolean"
},
{
"additionalProperties": false,
"properties": {
"attributes": {
"$ref": "#/definitions/ExtendedRouterOverheadAttributesWithRouterSelector"
}
},
"required": [
"attributes"
],
"type": "object"
}
]
},
"StandardInstrumentExtendedSubgraphAttributesWithSubgraphSelector": {
"anyOf": [
{
"type": "null"
},
{
"type": "boolean"
},
{
"additionalProperties": false,
"properties": {
"attributes": {
"$ref": "#/definitions/ExtendedSubgraphAttributesWithSubgraphSelector"
}
},
"required": [
"attributes"
],
"type": "object"
}
]
},
"StandardInstrumentExtendedSubscriptionsTerminatedAttributesWithRouterSelector": {
"anyOf": [
{
"type": "null"
},
{
"type": "boolean"
},
{
"additionalProperties": false,
"properties": {
"attributes": {
"$ref": "#/definitions/ExtendedSubscriptionsTerminatedAttributesWithRouterSelector"
}
},
"required": [
"attributes"
],
"type": "object"
}
]
},
"StandardInstrumentExtendedSupergraphAttributesWithSupergraphSelector": {
"anyOf": [
{
"type": "null"
},
{
"type": "boolean"
},
{
"additionalProperties": false,
"properties": {
"attributes": {
"$ref": "#/definitions/ExtendedSupergraphAttributesWithSupergraphSelector"
}
},
"required": [
"attributes"
],
"type": "object"
}
]
},
"StandardUnit": {
"enum": [
"unit"
],
"type": "string"
},
"StdOut": {
"additionalProperties": false,
"properties": {
"enabled": {
"default": true,
"description": "Set to true to log to stdout.",
"type": "boolean"
},
"format": {
"allOf": [
{
"$ref": "#/definitions/logging_format"
}
],
"description": "The format to log to stdout."
},
"rate_limit": {
"allOf": [
{
"$ref": "#/definitions/RateLimit"
}
],
"description": "Log rate limiting. The limit is set per type of log message"
},
"tty_format": {
"anyOf": [
{
"$ref": "#/definitions/logging_format"
},
{
"type": "null"
}
],
"description": "The format to log to stdout when you're running on an interactive terminal. When configured it will automatically use this `tty_format`` instead of the original `format` when an interactive terminal is detected"
}
},
"type": "object"
},
"StrategyConfig": {
"description": "Algorithm for calculating the cost of an incoming query.",
"oneOf": [
{
"additionalProperties": false,
"description": "A simple, statically-defined cost mapping for operations and types.\n\nOperation costs:\n- Mutation: 10\n- Query: 0\n- Subscription 0\n\nType costs:\n- Object: 1\n- Interface: 1\n- Union: 1\n- Scalar: 0\n- Enum: 0",
"properties": {
"static_estimated": {
"additionalProperties": false,
"properties": {
"actual_cost_mode": {
"allOf": [
{
"$ref": "#/definitions/ActualCostMode"
}
],
"description": "The strategy used to calculate the actual cost incurred by an operation.\n\n* `by_subgraph` (default) computes the cost of each subgraph response and sums them\n to get the total query cost.\n* `by_response_shape` computes the cost based on the final structure of the composed\n response, not including any interim structures from subgraph responses that did not\n make it to the composed response."
},
"list_size": {
"description": "The assumed length of lists returned by the operation.",
"format": "uint32",
"minimum": 0,
"type": "integer"
},
"max": {
"description": "The maximum cost of a query",
"format": "double",
"type": "number"
},
"subgraph": {
"allOf": [
{
"$ref": "#/definitions/SubgraphSubgraphStrategyConfigConfiguration"
}
],
"default": {
"all": {
"list_size": null,
"max": null
},
"subgraphs": {}
},
"description": "Cost control by subgraph"
}
},
"required": [
"list_size",
"max"
],
"type": "object"
}
},
"required": [
"static_estimated"
],
"type": "object"
},
{
"additionalProperties": false,
"properties": {
"test": {
"additionalProperties": false,
"properties": {
"error": {
"$ref": "#/definitions/TestError"
},
"stage": {
"$ref": "#/definitions/TestStage"
}
},
"required": [
"stage",
"error"
],
"type": "object"
}
},
"required": [
"test"
],
"type": "object"
}
]
},
"Subgraph": {
"additionalProperties": false,
"description": "Per subgraph configuration for entity caching",
"properties": {
"enabled": {
"default": true,
"description": "activates caching for this subgraph, overrides the global configuration",
"type": [
"boolean",
"null"
]
},
"invalidation": {
"anyOf": [
{
"$ref": "#/definitions/SubgraphInvalidationConfig"
},
{
"type": "null"
}
],
"default": null,
"description": "Invalidation configuration"
},
"private_id": {
"default": null,
"description": "Context key used to separate cache sections per user",
"type": [
"string",
"null"
]
},
"redis": {
"anyOf": [
{
"$ref": "#/definitions/RedisCache"
},
{
"type": "null"
}
],
"default": null,
"description": "Redis configuration"
},
"ttl": {
"anyOf": [
{
"$ref": "#/definitions/Ttl"
},
{
"type": "null"
}
],
"default": null,
"description": "expiration for all keys for this subgraph, unless overridden by the `Cache-Control` header in subgraph responses"
}
},
"type": "object"
},
"Subgraph2": {
"additionalProperties": false,
"description": "Per subgraph configuration for response caching",
"properties": {
"enabled": {
"default": true,
"description": "activates caching for this subgraph, overrides the global configuration",
"type": [
"boolean",
"null"
]
},
"invalidation": {
"anyOf": [
{
"$ref": "#/definitions/SubgraphInvalidationConfig2"
},
{
"type": "null"
}
],
"default": null,
"description": "Invalidation configuration"
},
"private_id": {
"default": null,
"description": "Context key used to separate cache sections per user",
"type": [
"string",
"null"
]
},
"redis": {
"anyOf": [
{
"$ref": "#/definitions/Config9"
},
{
"type": "null"
}
],
"default": null,
"description": "Redis configuration"
},
"ttl": {
"anyOf": [
{
"$ref": "#/definitions/Ttl2"
},
{
"type": "null"
}
],
"default": null,
"description": "expiration for all keys for this subgraph, unless overridden by the `Cache-Control` header in subgraph responses"
}
},
"type": "object"
},
"SubgraphApq": {
"additionalProperties": false,
"description": "Subgraph level Automatic Persisted Queries (APQ) configuration",
"properties": {
"enabled": {
"default": false,
"description": "Enable",
"type": "boolean"
}
},
"type": "object"
},
"SubgraphCommonBatchingConfigConfiguration": {
"description": "Configuration options pertaining to the subgraph server component.",
"properties": {
"all": {
"allOf": [
{
"$ref": "#/definitions/CommonBatchingConfig"
}
],
"default": {
"enabled": false
},
"description": "options applying to all subgraphs"
},
"subgraphs": {
"additionalProperties": {
"$ref": "#/definitions/CommonBatchingConfig"
},
"default": {},
"description": "per subgraph options",
"type": "object"
}
},
"type": "object"
},
"SubgraphConfig": {
"description": "Configuration for one subgraph for the `mock_subgraphs` plugin",
"properties": {
"entities": {
"default": [],
"description": "Entities that can be queried through Federationβs special `_entities` field\n\nIn maps directly in the top-level `Vec` (but not in other maps nested deeper),\nthe `__cacheTags` key is special.\nInstead of representing a field that can be selected, when its parent entity is selected\nits contents are added to the `response.extensions[\"apolloEntityCacheTags\"]` array.",
"items": {
"additionalProperties": true,
"type": "object"
},
"type": "array"
},
"headers": {
"additionalProperties": {
"type": "string"
},
"description": "HTTP headers for the subgraph response",
"type": "object"
},
"mutation": {
"additionalProperties": true,
"default": null,
"description": "Data for `mutation` operations",
"type": [
"object",
"null"
]
},
"query": {
"additionalProperties": true,
"default": {},
"description": "Data for `query` operations (excluding the special `_entities` field)\n\nIn maps nested in this one (but not at the top level), the `__cacheTags` key is special.\nInstead of representing a field that can be selected, when its parent field is selected\nits value is expected to be an array which is appended\nto the `response.extensions[\"apolloCacheTags\"]` array.",
"type": "object"
}
},
"type": "object"
},
"SubgraphConfig2": {
"anyOf": [
{
"description": "Enable or disable error redaction for a subgraph",
"type": "boolean"
},
{
"description": "Allow specific error extension keys for a subgraph",
"properties": {
"allow_extensions_keys": {
"description": "Allow specific extension keys for a subgraph. Will extending global allow list or override a global deny list",
"items": {
"type": "string"
},
"type": "array"
},
"exclude_global_keys": {
"default": [],
"description": "Exclude specific extension keys from global allow/deny list",
"items": {
"type": "string"
},
"type": "array"
},
"redact_message": {
"description": "Redact error messages for a subgraph",
"type": [
"boolean",
"null"
]
}
},
"required": [
"allow_extensions_keys"
],
"type": "object"
},
{
"description": "Deny specific error extension keys for a subgraph",
"properties": {
"deny_extensions_keys": {
"description": "Allow specific extension keys for a subgraph. Will extending global deny list or override a global allow list",
"items": {
"type": "string"
},
"type": "array"
},
"exclude_global_keys": {
"default": [],
"description": "Exclude specific extension keys from global allow/deny list",
"items": {
"type": "string"
},
"type": "array"
},
"redact_message": {
"description": "Redact error messages for a subgraph",
"type": [
"boolean",
"null"
]
}
},
"required": [
"deny_extensions_keys"
],
"type": "object"
},
{
"description": "Override global configuration, but don't allow or deny any new keys explicitly",
"properties": {
"exclude_global_keys": {
"default": [],
"description": "Exclude specific extension keys from global allow/deny list",
"items": {
"type": "string"
},
"type": "array"
},
"redact_message": {
"description": "Redact error messages for a subgraph",
"type": [
"boolean",
"null"
]
}
},
"type": "object"
}
]
},
"SubgraphConnectorConfiguration": {
"additionalProperties": false,
"description": "Configuration for a connector subgraph",
"properties": {
"$config": {
"additionalProperties": true,
"default": {},
"description": "Other values that can be used by connectors via `{$config.<key>}`",
"type": "object"
},
"sources": {
"additionalProperties": {
"$ref": "#/definitions/SourceConfiguration"
},
"default": {},
"description": "A map of `@source(name:)` to configuration for that source",
"type": "object"
}
},
"type": "object"
},
"SubgraphErrorConfig": {
"additionalProperties": false,
"properties": {
"all": {
"allOf": [
{
"$ref": "#/definitions/ErrorConfiguration"
}
],
"description": "Handling of errors coming from all subgraphs"
},
"subgraphs": {
"additionalProperties": {
"$ref": "#/definitions/ErrorConfiguration"
},
"description": "Handling of errors coming from specified subgraphs",
"type": "object"
}
},
"type": "object"
},
"SubgraphHoistOrphanErrorsConfiguration": {
"description": "Configuration options pertaining to the subgraph server component.",
"properties": {
"all": {
"allOf": [
{
"$ref": "#/definitions/HoistOrphanErrors"
}
],
"default": {
"enabled": false
},
"description": "options applying to all subgraphs"
},
"subgraphs": {
"additionalProperties": {
"$ref": "#/definitions/HoistOrphanErrors"
},
"default": {},
"description": "per subgraph options",
"type": "object"
}
},
"type": "object"
},
"SubgraphInvalidationConfig": {
"additionalProperties": false,
"properties": {
"enabled": {
"default": false,
"description": "Enable the invalidation",
"type": "boolean"
},
"shared_key": {
"default": "",
"description": "Shared key needed to request the invalidation endpoint",
"type": "string"
}
},
"type": "object"
},
"SubgraphInvalidationConfig2": {
"additionalProperties": false,
"properties": {
"enabled": {
"default": false,
"description": "Enable the invalidation",
"type": "boolean"
},
"shared_key": {
"default": "",
"description": "Shared key needed to request the invalidation endpoint",
"type": "string"
}
},
"type": "object"
},
"SubgraphPassthroughMode": {
"additionalProperties": false,
"properties": {
"all": {
"anyOf": [
{
"$ref": "#/definitions/WebSocketConfiguration"
},
{
"type": "null"
}
],
"default": null,
"description": "Configuration for all subgraphs"
},
"subgraphs": {
"additionalProperties": {
"$ref": "#/definitions/WebSocketConfiguration"
},
"default": {},
"description": "Configuration for specific subgraphs",
"type": "object"
}
},
"type": "object"
},
"SubgraphQuery": {
"oneOf": [
{
"const": "string",
"description": "The raw query kind.",
"type": "string"
}
]
},
"SubgraphRequestConf": {
"additionalProperties": false,
"description": "What information is passed to a subgraph request/response stage",
"properties": {
"body": {
"default": false,
"description": "Send the body",
"type": "boolean"
},
"condition": {
"allOf": [
{
"$ref": "#/definitions/ConditionSubgraphSelector"
}
],
"description": "Condition to trigger this stage"
},
"context": {
"allOf": [
{
"$ref": "#/definitions/ContextConf"
}
],
"description": "Send the context"
},
"headers": {
"default": false,
"description": "Send the headers",
"type": "boolean"
},
"method": {
"default": false,
"description": "Send the method URI",
"type": "boolean"
},
"service_name": {
"default": false,
"description": "Send the service name",
"type": "boolean"
},
"subgraph_request_id": {
"default": false,
"description": "Send the subgraph request id",
"type": "boolean"
},
"uri": {
"default": false,
"description": "Send the subgraph URI",
"type": "boolean"
},
"url": {
"default": null,
"description": "The coprocessor URL for this stage (overrides the global URL if specified)",
"type": [
"string",
"null"
]
}
},
"type": "object"
},
"SubgraphResponseConf": {
"additionalProperties": false,
"description": "What information is passed to a subgraph request/response stage",
"properties": {
"body": {
"allOf": [
{
"$ref": "#/definitions/BodyConf"
}
],
"description": "Send the body (can be true/false or selective with data/errors/extensions)"
},
"condition": {
"allOf": [
{
"$ref": "#/definitions/ConditionSubgraphSelector"
}
],
"description": "Condition to trigger this stage"
},
"context": {
"allOf": [
{
"$ref": "#/definitions/ContextConf"
}
],
"description": "Send the context"
},
"headers": {
"default": false,
"description": "Send the headers",
"type": "boolean"
},
"service_name": {
"default": false,
"description": "Send the service name",
"type": "boolean"
},
"status_code": {
"default": false,
"description": "Send the http status",
"type": "boolean"
},
"subgraph_request_id": {
"default": false,
"description": "Send the subgraph request id",
"type": "boolean"
},
"url": {
"default": null,
"description": "The coprocessor URL for this stage (overrides the global URL if specified)",
"type": [
"string",
"null"
]
}
},
"type": "object"
},
"SubgraphSelector": {
"anyOf": [
{
"additionalProperties": false,
"properties": {
"default": {
"description": "Optional default value.",
"type": [
"string",
"null"
]
},
"subgraph_operation_name": {
"allOf": [
{
"$ref": "#/definitions/OperationName"
}
],
"description": "The operation name from the subgraph query."
}
},
"required": [
"subgraph_operation_name"
],
"type": "object"
},
{
"additionalProperties": false,
"properties": {
"subgraph_operation_kind": {
"allOf": [
{
"$ref": "#/definitions/OperationKind"
}
],
"description": "The kind of the subgraph operation (query|mutation|subscription)."
}
},
"required": [
"subgraph_operation_kind"
],
"type": "object"
},
{
"additionalProperties": false,
"properties": {
"subgraph_name": {
"description": "The subgraph name",
"type": "boolean"
}
},
"required": [
"subgraph_name"
],
"type": "object"
},
{
"additionalProperties": false,
"properties": {
"default": {
"description": "Optional default value.",
"type": [
"string",
"null"
]
},
"subgraph_query": {
"allOf": [
{
"$ref": "#/definitions/SubgraphQuery"
}
],
"description": "The graphql query to the subgraph."
}
},
"required": [
"subgraph_query"
],
"type": "object"
},
{
"additionalProperties": false,
"properties": {
"default": {
"anyOf": [
{
"$ref": "#/definitions/AttributeValue"
},
{
"type": "null"
}
],
"description": "Optional default value."
},
"subgraph_query_variable": {
"description": "The name of a subgraph query variable.",
"type": "string"
}
},
"required": [
"subgraph_query_variable"
],
"type": "object"
},
{
"additionalProperties": false,
"properties": {
"default": {
"anyOf": [
{
"$ref": "#/definitions/AttributeValue"
},
{
"type": "null"
}
],
"description": "Optional default value."
},
"subgraph_response_data": {
"description": "The subgraph response body json path.",
"type": "string"
}
},
"required": [
"subgraph_response_data"
],
"type": "object"
},
{
"additionalProperties": false,
"properties": {
"default": {
"anyOf": [
{
"$ref": "#/definitions/AttributeValue"
},
{
"type": "null"
}
],
"description": "Optional default value."
},
"subgraph_response_errors": {
"description": "The subgraph response body json path.",
"type": "string"
}
},
"required": [
"subgraph_response_errors"
],
"type": "object"
},
{
"additionalProperties": false,
"properties": {
"default": {
"description": "Optional default value.",
"type": [
"string",
"null"
]
},
"subgraph_request_header": {
"description": "The name of a subgraph request header.",
"type": "string"
}
},
"required": [
"subgraph_request_header"
],
"type": "object"
},
{
"additionalProperties": false,
"properties": {
"subgraph_request_body_size": {
"description": "The subgraph request body size.",
"type": "boolean"
}
},
"required": [
"subgraph_request_body_size"
],
"type": "object"
},
{
"additionalProperties": false,
"properties": {
"default": {
"description": "Optional default value.",
"type": [
"string",
"null"
]
},
"subgraph_response_header": {
"description": "The name of a subgraph response header.",
"type": "string"
}
},
"required": [
"subgraph_response_header"
],
"type": "object"
},
{
"additionalProperties": false,
"properties": {
"subgraph_response_status": {
"allOf": [
{
"$ref": "#/definitions/ResponseStatus"
}
],
"description": "The subgraph http response status code."
}
},
"required": [
"subgraph_response_status"
],
"type": "object"
},
{
"additionalProperties": false,
"properties": {
"subgraph_response_body_size": {
"description": "The subgraph response body size.",
"type": "boolean"
}
},
"required": [
"subgraph_response_body_size"
],
"type": "object"
},
{
"additionalProperties": false,
"properties": {
"default": {
"anyOf": [
{
"$ref": "#/definitions/AttributeValue"
},
{
"type": "null"
}
],
"description": "Optional default value."
},
"subgraph_resend_count": {
"description": "The subgraph http resend count",
"type": "boolean"
}
},
"required": [
"subgraph_resend_count"
],
"type": "object"
},
{
"additionalProperties": false,
"properties": {
"default": {
"description": "Optional default value.",
"type": [
"string",
"null"
]
},
"supergraph_operation_name": {
"allOf": [
{
"$ref": "#/definitions/OperationName"
}
],
"description": "The supergraph query operation name."
}
},
"required": [
"supergraph_operation_name"
],
"type": "object"
},
{
"additionalProperties": false,
"properties": {
"supergraph_operation_kind": {
"allOf": [
{
"$ref": "#/definitions/OperationKind"
}
],
"description": "The supergraph query operation kind (query|mutation|subscription)."
}
},
"required": [
"supergraph_operation_kind"
],
"type": "object"
},
{
"additionalProperties": false,
"properties": {
"default": {
"description": "Optional default value.",
"type": [
"string",
"null"
]
},
"supergraph_query": {
"allOf": [
{
"$ref": "#/definitions/Query"
}
],
"description": "The supergraph query to the subgraph."
}
},
"required": [
"supergraph_query"
],
"type": "object"
},
{
"additionalProperties": false,
"properties": {
"default": {
"anyOf": [
{
"$ref": "#/definitions/AttributeValue"
},
{
"type": "null"
}
],
"description": "Optional default value."
},
"supergraph_query_variable": {
"description": "The supergraph query variable name.",
"type": "string"
}
},
"required": [
"supergraph_query_variable"
],
"type": "object"
},
{
"additionalProperties": false,
"properties": {
"default": {
"description": "Optional default value.",
"type": [
"string",
"null"
]
},
"supergraph_request_header": {
"description": "The supergraph request header name.",
"type": "string"
}
},
"required": [
"supergraph_request_header"
],
"type": "object"
},
{
"additionalProperties": false,
"properties": {
"default": {
"anyOf": [
{
"$ref": "#/definitions/AttributeValue"
},
{
"type": "null"
}
],
"description": "Optional default value."
},
"request_context": {
"description": "The request context key.",
"type": "string"
}
},
"required": [
"request_context"
],
"type": "object"
},
{
"additionalProperties": false,
"properties": {
"default": {
"anyOf": [
{
"$ref": "#/definitions/AttributeValue"
},
{
"type": "null"
}
],
"description": "Optional default value."
},
"response_context": {
"description": "The response context key.",
"type": "string"
}
},
"required": [
"response_context"
],
"type": "object"
},
{
"additionalProperties": false,
"properties": {
"subgraph_on_graphql_error": {
"description": "Boolean set to true if the response body contains graphql error",
"type": "boolean"
}
},
"required": [
"subgraph_on_graphql_error"
],
"type": "object"
},
{
"additionalProperties": false,
"properties": {
"baggage": {
"description": "The name of the baggage item.",
"type": "string"
},
"default": {
"anyOf": [
{
"$ref": "#/definitions/AttributeValue"
},
{
"type": "null"
}
],
"description": "Optional default value."
}
},
"required": [
"baggage"
],
"type": "object"
},
{
"additionalProperties": false,
"properties": {
"default": {
"description": "Optional default value.",
"type": [
"string",
"null"
]
},
"env": {
"description": "The name of the environment variable",
"type": "string"
}
},
"required": [
"env"
],
"type": "object"
},
{
"description": "Deprecated, should not be used anymore, use static field instead",
"type": "string"
},
{
"additionalProperties": false,
"properties": {
"static": {
"allOf": [
{
"$ref": "#/definitions/AttributeValue"
}
],
"description": "A static value"
}
},
"required": [
"static"
],
"type": "object"
},
{
"additionalProperties": false,
"properties": {
"error": {
"allOf": [
{
"$ref": "#/definitions/ErrorRepr"
}
],
"description": "Critical error if it happens"
}
},
"required": [
"error"
],
"type": "object"
},
{
"additionalProperties": false,
"properties": {
"cache": {
"allOf": [
{
"$ref": "#/definitions/CacheKind"
}
],
"description": "Select if you want to get cache hit or cache miss"
},
"entity_type": {
"anyOf": [
{
"$ref": "#/definitions/EntityType"
},
{
"type": "null"
}
],
"description": "Specify the entity type on which you want the cache data. (default: all)"
}
},
"required": [
"cache"
],
"type": "object"
},
{
"additionalProperties": false,
"properties": {
"entity_type": {
"anyOf": [
{
"$ref": "#/definitions/EntityType"
},
{
"type": "null"
}
],
"description": "Specify the entity type on which you want the cache data. (default: all)"
},
"response_cache": {
"allOf": [
{
"$ref": "#/definitions/CacheKind"
}
],
"description": "Select if you want to get response cache hit or response cache miss"
}
},
"required": [
"response_cache"
],
"type": "object"
},
{
"additionalProperties": false,
"properties": {
"entity_type": {
"anyOf": [
{
"$ref": "#/definitions/EntityType"
},
{
"type": "null"
}
],
"description": "Specify the entity type on which you want the cache data status. (default: all)"
},
"response_cache_status": {
"allOf": [
{
"$ref": "#/definitions/CacheStatus"
}
],
"description": "Select if you want to know if it's a cache hit (all data coming from cache), miss (all data coming from subgraph) or partial_hit (not all entities are coming from cache for example)"
}
},
"required": [
"response_cache_status"
],
"type": "object"
},
{
"additionalProperties": false,
"properties": {
"response_cache_control": {
"allOf": [
{
"$ref": "#/definitions/CacheControlSelector"
}
],
"description": "Select data you want from the computed cache control from response caching"
}
},
"required": [
"response_cache_control"
],
"type": "object"
},
{
"additionalProperties": false,
"description": "The context ID of the request (unique per request).",
"properties": {
"context_id": {
"description": "The context ID",
"type": "boolean"
}
},
"required": [
"context_id"
],
"type": "object"
}
]
},
"SubgraphSelectorOrValue": {
"anyOf": [
{
"allOf": [
{
"$ref": "#/definitions/AttributeValue"
}
],
"description": "A constant value."
},
{
"allOf": [
{
"$ref": "#/definitions/SubgraphSelector"
}
],
"description": "Selector to extract a value from the pipeline."
}
]
},
"SubgraphShaping": {
"additionalProperties": false,
"description": "Traffic shaping options",
"properties": {
"compression": {
"anyOf": [
{
"$ref": "#/definitions/Compression"
},
{
"type": "null"
}
],
"description": "Enable compression for subgraphs (available compressions are deflate, br, gzip)"
},
"deduplicate_query": {
"description": "Enable query deduplication",
"type": [
"boolean",
"null"
]
},
"dns_resolution_strategy": {
"anyOf": [
{
"$ref": "#/definitions/DnsResolutionStrategy"
},
{
"type": "null"
}
],
"description": "DNS resolution strategy for subgraphs"
},
"experimental_http2": {
"anyOf": [
{
"$ref": "#/definitions/Http2Config"
},
{
"type": "null"
}
],
"description": "Enable HTTP2 for subgraphs"
},
"experimental_http2_keep_alive_interval": {
"default": null,
"description": "Configure the interval for HTTP/2 keep-alive pings. Requires HTTP/2 to be enabled. If\nunset (the default), keep-alive pings are disabled.",
"type": [
"string",
"null"
]
},
"experimental_http2_keep_alive_timeout": {
"default": null,
"description": "Configure the timeout for HTTP/2 keep-alive pings. Requires HTTP/2 to be enabled and\n`experimental_http2_keep_alive_interval` to be set. Defaults to 20 seconds.",
"type": [
"string",
"null"
]
},
"global_rate_limit": {
"anyOf": [
{
"$ref": "#/definitions/RateLimitConf"
},
{
"type": "null"
}
],
"description": "Enable global rate limiting"
},
"pool_idle_timeout": {
"default": {
"nanos": 0,
"secs": 15
},
"description": "Specify a timeout for idle sockets being kept-alive in the client's connection pool",
"type": [
"string",
"null"
]
},
"timeout": {
"default": null,
"description": "Enable timeout for incoming requests",
"type": "string"
}
},
"type": "object"
},
"SubgraphSpans": {
"additionalProperties": false,
"properties": {
"attributes": {
"allOf": [
{
"$ref": "#/definitions/ExtendedSubgraphAttributesWithConditionalSubgraphSelector"
}
],
"description": "Custom attributes that are attached to the subgraph span."
}
},
"type": "object"
},
"SubgraphStage": {
"additionalProperties": false,
"description": "What information is passed to a subgraph request/response stage",
"properties": {
"request": {
"$ref": "#/definitions/SubgraphRequestConf"
},
"response": {
"$ref": "#/definitions/SubgraphResponseConf"
}
},
"type": "object"
},
"SubgraphStages": {
"additionalProperties": false,
"description": "What information is passed to a subgraph request/response stage",
"properties": {
"all": {
"$ref": "#/definitions/SubgraphStage"
}
},
"type": "object"
},
"SubgraphStrategyConfig": {
"properties": {
"list_size": {
"description": "The assumed length of lists returned by the operation for this subgraph.",
"format": "uint32",
"minimum": 0,
"type": [
"integer",
"null"
]
},
"max": {
"description": "The maximum query cost routed to this subgraph.",
"format": "double",
"type": [
"number",
"null"
]
}
},
"type": "object"
},
"SubgraphSubgraphApqConfiguration": {
"description": "Configuration options pertaining to the subgraph server component.",
"properties": {
"all": {
"allOf": [
{
"$ref": "#/definitions/SubgraphApq"
}
],
"default": {
"enabled": false
},
"description": "options applying to all subgraphs"
},
"subgraphs": {
"additionalProperties": {
"$ref": "#/definitions/SubgraphApq"
},
"default": {},
"description": "per subgraph options",
"type": "object"
}
},
"type": "object"
},
"SubgraphSubgraphConfiguration": {
"description": "Configuration options pertaining to the subgraph server component.",
"properties": {
"all": {
"allOf": [
{
"$ref": "#/definitions/Subgraph"
}
],
"default": {
"enabled": true,
"invalidation": null,
"private_id": null,
"redis": null,
"ttl": null
},
"description": "options applying to all subgraphs"
},
"subgraphs": {
"additionalProperties": {
"$ref": "#/definitions/Subgraph"
},
"default": {},
"description": "per subgraph options",
"type": "object"
}
},
"type": "object"
},
"SubgraphSubgraphConfiguration2": {
"description": "Configuration options pertaining to the subgraph server component.",
"properties": {
"all": {
"allOf": [
{
"$ref": "#/definitions/Subgraph2"
}
],
"default": {
"enabled": true,
"invalidation": null,
"private_id": null,
"redis": null,
"ttl": null
},
"description": "options applying to all subgraphs"
},
"subgraphs": {
"additionalProperties": {
"$ref": "#/definitions/Subgraph2"
},
"default": {},
"description": "per subgraph options",
"type": "object"
}
},
"type": "object"
},
"SubgraphSubgraphStrategyConfigConfiguration": {
"description": "Configuration options pertaining to the subgraph server component.",
"properties": {
"all": {
"allOf": [
{
"$ref": "#/definitions/SubgraphStrategyConfig"
}
],
"default": {
"list_size": null,
"max": null
},
"description": "options applying to all subgraphs"
},
"subgraphs": {
"additionalProperties": {
"$ref": "#/definitions/SubgraphStrategyConfig"
},
"default": {},
"description": "per subgraph options",
"type": "object"
}
},
"type": "object"
},
"SubgraphTlsClientConfiguration": {
"description": "Configuration options pertaining to the subgraph server component.",
"properties": {
"all": {
"allOf": [
{
"$ref": "#/definitions/TlsClient"
}
],
"default": {
"certificate_authorities": null,
"client_authentication": null
},
"description": "options applying to all subgraphs"
},
"subgraphs": {
"additionalProperties": {
"$ref": "#/definitions/TlsClient"
},
"default": {},
"description": "per subgraph options",
"type": "object"
}
},
"type": "object"
},
"SubgraphValue": {
"anyOf": [
{
"$ref": "#/definitions/Standard"
},
{
"$ref": "#/definitions/SubgraphSelector"
}
]
},
"SubscriptionConfig": {
"additionalProperties": false,
"description": "Subscriptions configuration",
"properties": {
"deduplication": {
"allOf": [
{
"$ref": "#/definitions/DeduplicationConfig"
}
],
"default": {
"enabled": true,
"ignored_headers": []
},
"description": "Configure subgraph subscription deduplication"
},
"enabled": {
"default": true,
"description": "Enable subscription",
"type": "boolean"
},
"max_opened_subscriptions": {
"default": null,
"description": "This is a limit to only have maximum X opened subscriptions at the same time. By default if it's not set there is no limit.",
"format": "uint",
"minimum": 0,
"type": [
"integer",
"null"
]
},
"mode": {
"allOf": [
{
"$ref": "#/definitions/SubscriptionModeConfig"
}
],
"default": {
"callback": null,
"passthrough": null
},
"description": "Select a subscription mode (callback or passthrough)"
},
"queue_capacity": {
"default": null,
"description": "It represent the capacity of the in memory queue to know how many events we can keep in a buffer",
"format": "uint",
"minimum": 0,
"type": [
"integer",
"null"
]
}
},
"type": "object"
},
"SubscriptionModeConfig": {
"additionalProperties": false,
"properties": {
"callback": {
"anyOf": [
{
"$ref": "#/definitions/CallbackMode"
},
{
"type": "null"
}
],
"description": "Enable callback mode for subgraph(s)"
},
"passthrough": {
"anyOf": [
{
"$ref": "#/definitions/SubgraphPassthroughMode"
},
{
"type": "null"
}
],
"description": "Enable passthrough mode for subgraph(s)"
}
},
"type": "object"
},
"Supergraph": {
"additionalProperties": false,
"description": "Configuration options pertaining to the supergraph server component.",
"properties": {
"connection_shutdown_timeout": {
"default": {
"nanos": 0,
"secs": 60
},
"description": "The timeout for shutting down connections during a router shutdown or a schema reload.",
"type": "string"
},
"defer_support": {
"default": true,
"description": "Set to false to disable defer support",
"type": "boolean"
},
"early_cancel": {
"default": false,
"description": "abort request handling when the client drops the connection.\nDefault: false.\nWhen set to true, some parts of the request pipeline like telemetry will not work properly,\nbut request handling will stop immediately when the client connection is closed.",
"type": "boolean"
},
"enable_result_coercion_errors": {
"default": false,
"description": "Enable errors generated during response reformatting and result coercion to be returned in\nresponses.\nDefault: false\nAll subgraph responses are checked and corrected to ensure alignment with the schema and\nquery. When enabled, misaligned values will generate errors which are included in errors\narray in the response.",
"type": "boolean"
},
"experimental_log_on_broken_pipe": {
"default": false,
"description": "Log a message if the client closes the connection before the response is sent.\nDefault: false.",
"type": "boolean"
},
"generate_query_fragments": {
"default": true,
"description": "Enable QP generation of fragments for subgraph requests\nDefault: true",
"type": "boolean"
},
"introspection": {
"default": false,
"description": "Enable introspection\nDefault: false",
"type": "boolean"
},
"listen": {
"allOf": [
{
"$ref": "#/definitions/ListenAddr"
}
],
"default": "127.0.0.1:4000",
"description": "The socket address and port to listen on\nDefaults to 127.0.0.1:4000"
},
"path": {
"default": "/",
"description": "The HTTP path on which GraphQL requests will be served.\ndefault: \"/\"",
"type": "string"
},
"query_planning": {
"allOf": [
{
"$ref": "#/definitions/QueryPlanning"
}
],
"default": {
"cache": {
"in_memory": {
"limit": 512
},
"redis": null
},
"experimental_cooperative_cancellation": {
"enabled": true,
"memory_limit": null,
"mode": "measure",
"timeout": null
},
"experimental_paths_limit": null,
"experimental_plans_limit": null,
"experimental_reuse_query_plans": false,
"warmed_up_queries": null
},
"description": "Query planning options"
},
"redact_query_validation_errors": {
"default": false,
"description": "Redact query validation errors to prevent potential information disclosure about the schema structure.\nWhen enabled, detailed validation errors are replaced with a generic \"invalid query\" message.\nDefault: false",
"type": "boolean"
},
"strict_variable_validation": {
"allOf": [
{
"$ref": "#/definitions/Mode"
}
],
"default": "enforce",
"description": "Determines how to handle queries which include additional fields of an input object.\n- `enforce` (default): rejects query\n- `measure`: permits query and the logs unknown fields"
}
},
"type": "object"
},
"SupergraphRequestConf": {
"additionalProperties": false,
"description": "What information is passed to a router request/response stage",
"properties": {
"body": {
"default": false,
"description": "Send the body",
"type": "boolean"
},
"condition": {
"allOf": [
{
"$ref": "#/definitions/ConditionSupergraphSelector"
}
],
"description": "Condition to trigger this stage"
},
"context": {
"allOf": [
{
"$ref": "#/definitions/ContextConf"
}
],
"description": "Send the context"
},
"headers": {
"default": false,
"description": "Send the headers",
"type": "boolean"
},
"method": {
"default": false,
"description": "Send the method",
"type": "boolean"
},
"sdl": {
"default": false,
"description": "Send the SDL",
"type": "boolean"
},
"url": {
"default": null,
"description": "The coprocessor URL for this stage (overrides the global URL if specified)",
"type": [
"string",
"null"
]
}
},
"type": "object"
},
"SupergraphResponseConf": {
"additionalProperties": false,
"description": "What information is passed to a router request/response stage",
"properties": {
"body": {
"allOf": [
{
"$ref": "#/definitions/BodyConf"
}
],
"description": "Send the body (can be true/false or selective with data/errors/extensions)"
},
"condition": {
"allOf": [
{
"$ref": "#/definitions/ConditionSupergraphSelector"
}
],
"description": "Condition to trigger this stage"
},
"context": {
"allOf": [
{
"$ref": "#/definitions/ContextConf"
}
],
"description": "Send the context"
},
"headers": {
"default": false,
"description": "Send the headers",
"type": "boolean"
},
"sdl": {
"default": false,
"description": "Send the SDL",
"type": "boolean"
},
"status_code": {
"default": false,
"description": "Send the HTTP status",
"type": "boolean"
},
"url": {
"default": null,
"description": "The coprocessor URL for this stage (overrides the global URL if specified)",
"type": [
"string",
"null"
]
}
},
"type": "object"
},
"SupergraphSelector": {
"anyOf": [
{
"additionalProperties": false,
"properties": {
"default": {
"description": "Optional default value.",
"type": [
"string",
"null"
]
},
"operation_name": {
"allOf": [
{
"$ref": "#/definitions/OperationName"
}
],
"description": "The operation name from the query."
}
},
"required": [
"operation_name"
],
"type": "object"
},
{
"additionalProperties": false,
"properties": {
"operation_kind": {
"allOf": [
{
"$ref": "#/definitions/OperationKind"
}
],
"description": "The operation kind from the query (query|mutation|subscription)."
}
},
"required": [
"operation_kind"
],
"type": "object"
},
{
"additionalProperties": false,
"properties": {
"default": {
"description": "Optional default value.",
"type": [
"string",
"null"
]
},
"query": {
"allOf": [
{
"$ref": "#/definitions/Query"
}
],
"description": "The graphql query."
}
},
"required": [
"query"
],
"type": "object"
},
{
"additionalProperties": false,
"properties": {
"default": {
"anyOf": [
{
"$ref": "#/definitions/AttributeValue"
},
{
"type": "null"
}
],
"description": "Optional default value."
},
"query_variable": {
"description": "The name of a graphql query variable.",
"type": "string"
}
},
"required": [
"query_variable"
],
"type": "object"
},
{
"additionalProperties": false,
"properties": {
"default": {
"description": "Optional default value.",
"type": [
"string",
"null"
]
},
"request_header": {
"description": "The name of the request header.",
"type": "string"
}
},
"required": [
"request_header"
],
"type": "object"
},
{
"additionalProperties": false,
"properties": {
"default": {
"description": "Optional default value.",
"type": [
"string",
"null"
]
},
"response_header": {
"description": "The name of the response header.",
"type": "string"
}
},
"required": [
"response_header"
],
"type": "object"
},
{
"additionalProperties": false,
"description": "A status from the response",
"properties": {
"response_status": {
"allOf": [
{
"$ref": "#/definitions/ResponseStatus"
}
],
"description": "The http response status code."
}
},
"required": [
"response_status"
],
"type": "object"
},
{
"additionalProperties": false,
"properties": {
"default": {
"anyOf": [
{
"$ref": "#/definitions/AttributeValue"
},
{
"type": "null"
}
],
"description": "Optional default value."
},
"request_context": {
"description": "The request context key.",
"type": "string"
}
},
"required": [
"request_context"
],
"type": "object"
},
{
"additionalProperties": false,
"properties": {
"default": {
"anyOf": [
{
"$ref": "#/definitions/AttributeValue"
},
{
"type": "null"
}
],
"description": "Optional default value."
},
"response_context": {
"description": "The response context key.",
"type": "string"
}
},
"required": [
"response_context"
],
"type": "object"
},
{
"additionalProperties": false,
"properties": {
"default": {
"anyOf": [
{
"$ref": "#/definitions/AttributeValue"
},
{
"type": "null"
}
],
"description": "Optional default value."
},
"response_data": {
"description": "The supergraph response body json path of the chunks.",
"type": "string"
}
},
"required": [
"response_data"
],
"type": "object"
},
{
"additionalProperties": false,
"properties": {
"default": {
"anyOf": [
{
"$ref": "#/definitions/AttributeValue"
},
{
"type": "null"
}
],
"description": "Optional default value."
},
"response_errors": {
"description": "The supergraph response body json path of the chunks.",
"type": "string"
}
},
"required": [
"response_errors"
],
"type": "object"
},
{
"additionalProperties": false,
"properties": {
"baggage": {
"description": "The name of the baggage item.",
"type": "string"
},
"default": {
"anyOf": [
{
"$ref": "#/definitions/AttributeValue"
},
{
"type": "null"
}
],
"description": "Optional default value."
}
},
"required": [
"baggage"
],
"type": "object"
},
{
"additionalProperties": false,
"properties": {
"default": {
"description": "Optional default value.",
"type": [
"string",
"null"
]
},
"env": {
"description": "The name of the environment variable",
"type": "string"
}
},
"required": [
"env"
],
"type": "object"
},
{
"description": "Deprecated, should not be used anymore, use static field instead",
"type": "string"
},
{
"additionalProperties": false,
"properties": {
"static": {
"allOf": [
{
"$ref": "#/definitions/AttributeValue"
}
],
"description": "A static value"
}
},
"required": [
"static"
],
"type": "object"
},
{
"additionalProperties": false,
"properties": {
"on_graphql_error": {
"description": "Boolean set to true if the response body contains graphql error",
"type": "boolean"
}
},
"required": [
"on_graphql_error"
],
"type": "object"
},
{
"additionalProperties": false,
"properties": {
"error": {
"allOf": [
{
"$ref": "#/definitions/ErrorRepr"
}
],
"description": "Critical error if it happens"
}
},
"required": [
"error"
],
"type": "object"
},
{
"additionalProperties": false,
"description": "Cost attributes",
"properties": {
"cost": {
"allOf": [
{
"$ref": "#/definitions/CostValue"
}
],
"description": "The cost value to select, one of: estimated, actual, delta."
}
},
"required": [
"cost"
],
"type": "object"
},
{
"additionalProperties": false,
"description": "Boolean returning true if it's the primary response and not events like subscription events or deferred responses",
"properties": {
"is_primary_response": {
"description": "Boolean returning true if it's the primary response and not events like subscription events or deferred responses",
"type": "boolean"
}
},
"required": [
"is_primary_response"
],
"type": "object"
},
{
"additionalProperties": false,
"description": "The context ID of the request (unique per request).",
"properties": {
"context_id": {
"description": "The context ID",
"type": "boolean"
}
},
"required": [
"context_id"
],
"type": "object"
}
]
},
"SupergraphSelectorOrValue": {
"anyOf": [
{
"allOf": [
{
"$ref": "#/definitions/AttributeValue"
}
],
"description": "A constant value."
},
{
"allOf": [
{
"$ref": "#/definitions/SupergraphSelector"
}
],
"description": "Selector to extract a value from the pipeline."
}
]
},
"SupergraphSpans": {
"additionalProperties": false,
"properties": {
"attributes": {
"allOf": [
{
"$ref": "#/definitions/ExtendedSupergraphAttributesWithConditionalSupergraphSelector"
}
],
"description": "Custom attributes that are attached to the supergraph span."
}
},
"type": "object"
},
"SupergraphStage": {
"properties": {
"request": {
"allOf": [
{
"$ref": "#/definitions/SupergraphRequestConf"
}
],
"description": "The request configuration"
},
"response": {
"$ref": "#/definitions/SupergraphResponseConf"
}
},
"type": "object"
},
"SupergraphValue": {
"anyOf": [
{
"$ref": "#/definitions/Standard"
},
{
"$ref": "#/definitions/Event5"
},
{
"$ref": "#/definitions/SupergraphSelector"
}
]
},
"TelemetryConfig": {
"additionalProperties": false,
"description": "Telemetry configuration",
"properties": {
"apollo": {
"allOf": [
{
"$ref": "#/definitions/ApolloTelemetryConfig"
}
],
"description": "Apollo reporting configuration"
},
"exporters": {
"allOf": [
{
"$ref": "#/definitions/Exporters"
}
],
"description": "Instrumentation configuration"
},
"instrumentation": {
"allOf": [
{
"$ref": "#/definitions/Instrumentation"
}
],
"description": "Instrumentation configuration"
}
},
"type": "object"
},
"Temporality": {
"oneOf": [
{
"const": "cumulative",
"description": "Export cumulative metrics.",
"type": "string"
},
{
"const": "delta",
"description": "Export delta metrics. `Delta` should be used when exporting to DataDog Agent.",
"type": "string"
}
]
},
"TestError": {
"enum": [
"estimated_cost_too_expensive",
"actual_cost_too_expensive"
],
"type": "string"
},
"TestStage": {
"enum": [
"execution_request",
"execution_response",
"subgraph_request",
"subgraph_response"
],
"type": "string"
},
"Tls": {
"additionalProperties": false,
"description": "TLS related configuration options.",
"properties": {
"connector": {
"allOf": [
{
"$ref": "#/definitions/ConnectorConfiguration"
}
],
"default": {
"all": {
"certificate_authorities": null,
"client_authentication": null
},
"sources": {}
},
"description": "Outgoing TLS configuration to Apollo Connectors."
},
"subgraph": {
"allOf": [
{
"$ref": "#/definitions/SubgraphTlsClientConfiguration"
}
],
"default": {
"all": {
"certificate_authorities": null,
"client_authentication": null
},
"subgraphs": {}
},
"description": "Outgoing TLS configuration to subgraphs."
},
"supergraph": {
"anyOf": [
{
"$ref": "#/definitions/TlsSupergraph"
},
{
"type": "null"
}
],
"default": null,
"description": "TLS server configuration\n\nThis will affect the GraphQL endpoint and any other endpoint targeting the same listen address."
}
},
"type": "object"
},
"TlsClient": {
"additionalProperties": false,
"description": "Configuration options pertaining to the subgraph server component.",
"properties": {
"certificate_authorities": {
"default": null,
"description": "list of certificate authorities in PEM format",
"type": [
"string",
"null"
]
},
"client_authentication": {
"anyOf": [
{
"$ref": "#/definitions/TlsClientAuth"
},
{
"type": "null"
}
],
"default": null,
"description": "client certificate authentication"
}
},
"type": "object"
},
"TlsClientAuth": {
"additionalProperties": false,
"description": "TLS client authentication",
"properties": {
"certificate_chain": {
"description": "list of certificates in PEM format",
"type": "string",
"writeOnly": true
},
"key": {
"description": "key in PEM format",
"type": "string",
"writeOnly": true
}
},
"required": [
"certificate_chain",
"key"
],
"type": "object"
},
"TlsSupergraph": {
"additionalProperties": false,
"description": "Configuration options pertaining to the supergraph server component.",
"properties": {
"certificate": {
"description": "server certificate in PEM format",
"type": "string",
"writeOnly": true
},
"certificate_chain": {
"description": "list of certificate authorities in PEM format",
"type": "string",
"writeOnly": true
},
"key": {
"description": "server key in PEM format",
"type": "string",
"writeOnly": true
}
},
"required": [
"certificate",
"key",
"certificate_chain"
],
"type": "object"
},
"TraceIdFormat": {
"oneOf": [
{
"const": "hexadecimal",
"description": "Format the Trace ID as a hexadecimal number\n\n(e.g. Trace ID 16 -> 00000000000000000000000000000010)",
"type": "string"
},
{
"const": "open_telemetry",
"description": "Format the Trace ID as a hexadecimal number\n\n(e.g. Trace ID 16 -> 00000000000000000000000000000010)",
"type": "string"
},
{
"const": "decimal",
"description": "Format the Trace ID as a decimal number\n\n(e.g. Trace ID 16 -> 16)",
"type": "string"
},
{
"const": "datadog",
"description": "Datadog",
"type": "string"
},
{
"const": "uuid",
"description": "UUID format with dashes\n(eg. 67e55044-10b1-426f-9247-bb680e5fe0c8)",
"type": "string"
}
]
},
"Tracing": {
"additionalProperties": false,
"description": "Tracing configuration",
"properties": {
"common": {
"allOf": [
{
"$ref": "#/definitions/TracingCommon"
}
],
"description": "Common configuration"
},
"datadog": {
"allOf": [
{
"$ref": "#/definitions/DatadogConfig"
}
],
"description": "Datadog exporter configuration"
},
"experimental_response_trace_id": {
"allOf": [
{
"$ref": "#/definitions/ExposeTraceId"
}
],
"description": "A way to expose trace id in response headers"
},
"otlp": {
"allOf": [
{
"$ref": "#/definitions/OTLPConfig"
}
],
"description": "OpenTelemetry native exporter configuration"
},
"propagation": {
"allOf": [
{
"$ref": "#/definitions/Propagation"
}
],
"description": "Propagation configuration"
},
"zipkin": {
"allOf": [
{
"$ref": "#/definitions/ZipkinConfig"
}
],
"description": "Zipkin exporter configuration"
}
},
"type": "object"
},
"TracingCommon": {
"additionalProperties": false,
"properties": {
"max_attributes_per_event": {
"default": 128,
"description": "The maximum attributes per event before discarding",
"format": "uint32",
"minimum": 0,
"type": "integer"
},
"max_attributes_per_link": {
"default": 128,
"description": "The maximum attributes per link before discarding",
"format": "uint32",
"minimum": 0,
"type": "integer"
},
"max_attributes_per_span": {
"default": 128,
"description": "The maximum attributes per span before discarding",
"format": "uint32",
"minimum": 0,
"type": "integer"
},
"max_events_per_span": {
"default": 128,
"description": "The maximum events per span before discarding",
"format": "uint32",
"minimum": 0,
"type": "integer"
},
"max_links_per_span": {
"default": 128,
"description": "The maximum links per span before discarding",
"format": "uint32",
"minimum": 0,
"type": "integer"
},
"parent_based_sampler": {
"default": true,
"description": "Whether to use parent based sampling",
"type": "boolean"
},
"preview_datadog_agent_sampling": {
"default": null,
"description": "Use datadog agent sampling. This means that all spans will be sent to the Datadog agent\nand the `sampling.priority` attribute will be used to control if the span will then be sent to Datadog",
"type": [
"boolean",
"null"
]
},
"resource": {
"additionalProperties": {
"$ref": "#/definitions/AttributeValue"
},
"default": {},
"description": "The Open Telemetry resource",
"type": "object"
},
"sampler": {
"allOf": [
{
"$ref": "#/definitions/SamplerOption"
}
],
"description": "The sampler, always_on, always_off or a decimal between 0.0 and 1.0"
},
"service_name": {
"default": null,
"description": "The trace service name",
"type": [
"string",
"null"
]
},
"service_namespace": {
"default": null,
"description": "The trace service namespace",
"type": [
"string",
"null"
]
}
},
"type": "object"
},
"TracingConfiguration": {
"additionalProperties": false,
"properties": {
"batch_processor": {
"allOf": [
{
"$ref": "#/definitions/BatchProcessorConfig"
}
],
"description": "Configuration for tracing batch processor."
}
},
"type": "object"
},
"TrafficShapingConfig": {
"additionalProperties": false,
"description": "Configuration for the traffic shaping plugin",
"properties": {
"all": {
"anyOf": [
{
"$ref": "#/definitions/SubgraphShaping"
},
{
"type": "null"
}
],
"description": "Applied on all subgraphs"
},
"connector": {
"allOf": [
{
"$ref": "#/definitions/ConnectorsShapingConfig"
}
],
"description": "Applied on specific subgraphs"
},
"deduplicate_variables": {
"default": null,
"description": "DEPRECATED, now always enabled: Enable variable deduplication optimization when sending requests to subgraphs (https://github.com/apollographql/router/issues/87)",
"type": [
"boolean",
"null"
]
},
"router": {
"anyOf": [
{
"$ref": "#/definitions/RouterShaping"
},
{
"type": "null"
}
],
"description": "Applied at the router level"
},
"subgraphs": {
"additionalProperties": {
"$ref": "#/definitions/SubgraphShaping"
},
"description": "Applied on specific subgraphs",
"type": "object"
}
},
"type": "object"
},
"Ttl": {
"description": "Per subgraph configuration for entity caching",
"type": "string"
},
"Ttl2": {
"description": "Per subgraph configuration for response caching",
"type": "string"
},
"TypeName": {
"oneOf": [
{
"const": "string",
"description": "The GraphQL type name",
"type": "string"
}
]
},
"UriEndpoint": {
"type": "string"
},
"UsageReportsMetricsConfiguration": {
"additionalProperties": false,
"properties": {
"batch_processor": {
"allOf": [
{
"$ref": "#/definitions/ApolloUsageReportsBatchProcessorConfiguration"
}
],
"description": "Batch processor config for Apollo usage report metrics."
}
},
"type": "object"
},
"WebSocketConfiguration": {
"additionalProperties": false,
"description": "WebSocket configuration for a specific subgraph",
"properties": {
"heartbeat_interval": {
"allOf": [
{
"$ref": "#/definitions/HeartbeatInterval"
}
],
"default": "disabled",
"description": "Heartbeat interval for graphql-ws protocol (default: disabled)"
},
"path": {
"default": null,
"description": "Path on which WebSockets are listening",
"type": [
"string",
"null"
]
},
"protocol": {
"allOf": [
{
"$ref": "#/definitions/WebSocketProtocol"
}
],
"default": "graphql_ws",
"description": "Which WebSocket GraphQL protocol to use for this subgraph possible values are: 'graphql_ws' | 'graphql_transport_ws' (default: graphql_ws)"
}
},
"type": "object"
},
"WebSocketProtocol": {
"oneOf": [
{
"const": "graphql_ws",
"description": "The modern graphql-ws protocol. The subprotocol name is \"graphql-transport-ws\".\n\nSpec URL: https://github.com/enisdenjo/graphql-ws/blob/0c0eb499c3a0278c6d9cc799064f22c5d24d2f60/PROTOCOL.md",
"type": "string"
},
{
"const": "graphql_transport_ws",
"description": "The legacy subscriptions-transport-ws protocol. Confusingly, the subprotocol name is\n\"graphql-ws\".\n\nhttps://github.com/apollographql/subscriptions-transport-ws/blob/36f3f6f780acc1a458b768db13fd39c65e5e6518/PROTOCOL.md",
"type": "string"
}
]
},
"ZipkinConfig": {
"additionalProperties": false,
"properties": {
"batch_processor": {
"allOf": [
{
"$ref": "#/definitions/BatchProcessorConfig"
}
],
"description": "Batch processor configuration"
},
"enabled": {
"description": "Enable zipkin",
"type": "boolean"
},
"endpoint": {
"allOf": [
{
"$ref": "#/definitions/UriEndpoint"
}
],
"description": "The endpoint to send to"
}
},
"required": [
"enabled"
],
"type": "object"
},
"logging_format": {
"oneOf": [
{
"additionalProperties": false,
"description": "Tracing subscriber https://docs.rs/tracing-subscriber/latest/tracing_subscriber/fmt/format/struct.Json.html",
"properties": {
"json": {
"additionalProperties": false,
"properties": {
"display_current_span": {
"default": false,
"description": "Include the current span in this log event.",
"type": "boolean"
},
"display_filename": {
"default": false,
"description": "Include the filename with the log event.",
"type": "boolean"
},
"display_level": {
"default": true,
"description": "Include the level with the log event. (default: true)",
"type": "boolean"
},
"display_line_number": {
"default": false,
"description": "Include the line number with the log event.",
"type": "boolean"
},
"display_resource": {
"default": true,
"description": "Include the resource with the log event. (default: true)",
"type": "boolean"
},
"display_span_id": {
"default": true,
"description": "Include the span id (if any) with the log event. (default: true)",
"type": "boolean"
},
"display_span_list": {
"default": true,
"description": "Include all of the containing span information with the log event. (default: true)",
"type": "boolean"
},
"display_target": {
"default": true,
"description": "Include the target with the log event. (default: true)",
"type": "boolean"
},
"display_thread_id": {
"default": false,
"description": "Include the thread_id with the log event.",
"type": "boolean"
},
"display_thread_name": {
"default": false,
"description": "Include the thread_name with the log event.",
"type": "boolean"
},
"display_timestamp": {
"default": true,
"description": "Include the timestamp with the log event. (default: true)",
"type": "boolean"
},
"display_trace_id": {
"allOf": [
{
"$ref": "#/definitions/DisplayTraceIdFormat"
}
],
"description": "Include the trace id (if any) with the log event. (default: true)"
},
"expand_json_string_values": {
"default": false,
"description": "Output string attribute values that contain valid JSON objects or arrays\nas native JSON rather than quoted strings. Useful for log aggregators\n(e.g. Splunk) that can index nested JSON fields. (default: false)",
"type": "boolean"
},
"span_attributes": {
"default": [],
"description": "List of span attributes to attach to the json log object",
"items": {
"type": "string"
},
"type": "array",
"uniqueItems": true
}
},
"type": "object"
}
},
"required": [
"json"
],
"type": "object"
},
{
"description": "Tracing subscriber https://docs.rs/tracing-subscriber/latest/tracing_subscriber/fmt/format/struct.Json.html",
"enum": [
"json"
],
"type": "string"
},
{
"additionalProperties": false,
"description": "Tracing subscriber https://docs.rs/tracing-subscriber/latest/tracing_subscriber/fmt/format/struct.Full.html",
"properties": {
"text": {
"additionalProperties": false,
"properties": {
"ansi_escape_codes": {
"default": true,
"description": "Process ansi escapes (default: true)",
"type": "boolean"
},
"display_current_span": {
"default": true,
"description": "Include the current span in this log event. (default: true)",
"type": "boolean"
},
"display_filename": {
"default": false,
"description": "Include the filename with the log event.",
"type": "boolean"
},
"display_level": {
"default": true,
"description": "Include the level with the log event. (default: true)",
"type": "boolean"
},
"display_line_number": {
"default": false,
"description": "Include the line number with the log event.",
"type": "boolean"
},
"display_resource": {
"default": false,
"description": "Include the resource with the log event.",
"type": "boolean"
},
"display_service_name": {
"default": false,
"description": "Include the service name with the log event.",
"type": "boolean"
},
"display_service_namespace": {
"default": false,
"description": "Include the service namespace with the log event.",
"type": "boolean"
},
"display_span_id": {
"default": false,
"description": "Include the span id (if any) with the log event. (default: false)",
"type": "boolean"
},
"display_span_list": {
"default": true,
"description": "Include all of the containing span information with the log event. (default: true)",
"type": "boolean"
},
"display_target": {
"default": false,
"description": "Include the target with the log event.",
"type": "boolean"
},
"display_thread_id": {
"default": false,
"description": "Include the thread_id with the log event.",
"type": "boolean"
},
"display_thread_name": {
"default": false,
"description": "Include the thread_name with the log event.",
"type": "boolean"
},
"display_timestamp": {
"default": true,
"description": "Include the timestamp with the log event. (default: true)",
"type": "boolean"
},
"display_trace_id": {
"allOf": [
{
"$ref": "#/definitions/DisplayTraceIdFormat"
}
],
"description": "Include the trace id (if any) with the log event. (default: false)"
}
},
"type": "object"
}
},
"required": [
"text"
],
"type": "object"
},
{
"description": "Tracing subscriber https://docs.rs/tracing-subscriber/latest/tracing_subscriber/fmt/format/struct.Full.html",
"enum": [
"text"
],
"type": "string"
}
]
}
},
"description": "The configuration for the router.\n\nCan be created through `serde::Deserialize` from various formats,\nor inline in Rust code with `serde_json::json!` and `serde_json::from_value`.",
"patternProperties": {
"^experimental_mock_subgraphs$": {
"additionalProperties": {
"$ref": "#/definitions/SubgraphConfig"
},
"type": "object"
},
"^response_cache$": {
"$ref": "#/definitions/Config8"
}
},
"properties": {
"apq": {
"allOf": [
{
"$ref": "#/definitions/Apq"
}
],
"default": {
"enabled": true,
"router": {
"cache": {
"in_memory": {
"limit": 512
},
"redis": null
}
},
"subgraph": {
"all": {
"enabled": false
},
"subgraphs": {}
}
},
"description": "Configures automatic persisted queries"
},
"authentication": {
"$ref": "#/definitions/AuthenticationConfig"
},
"authorization": {
"$ref": "#/definitions/AuthorizationConfig"
},
"batching": {
"allOf": [
{
"$ref": "#/definitions/Batching"
}
],
"default": {
"enabled": false,
"maximum_size": null,
"mode": "batch_http_link",
"subgraph": null
},
"description": "Batching configuration."
},
"connectors": {
"$ref": "#/definitions/ConnectorsConfig"
},
"coprocessor": {
"$ref": "#/definitions/CoprocessorConfig"
},
"cors": {
"allOf": [
{
"$ref": "#/definitions/Cors"
}
],
"default": {
"allow_any_origin": false,
"allow_credentials": false,
"allow_headers": [],
"expose_headers": null,
"max_age": null,
"methods": [
"GET",
"POST",
"OPTIONS"
],
"policies": [
{
"allow_credentials": null,
"allow_headers": [],
"expose_headers": [],
"match_origins": [],
"max_age": null,
"methods": [
"GET",
"POST",
"OPTIONS"
],
"origins": [
"https://studio.apollographql.com"
],
"private_network_access": null
}
]
},
"description": "Cross origin request headers."
},
"csrf": {
"$ref": "#/definitions/CSRFConfig"
},
"demand_control": {
"$ref": "#/definitions/DemandControlConfig"
},
"enhanced_client_awareness": {
"$ref": "#/definitions/Config4"
},
"experimental_chaos": {
"allOf": [
{
"$ref": "#/definitions/Config"
}
],
"default": {
"force_config_reload": null,
"force_schema_reload": null
},
"description": "Configuration for chaos testing, trying to reproduce bugs that require uncommon conditions.\nYou probably donβt want this in production!"
},
"experimental_diagnostics": {
"$ref": "#/definitions/Config5"
},
"experimental_hoist_orphan_errors": {
"allOf": [
{
"$ref": "#/definitions/SubgraphHoistOrphanErrorsConfiguration"
}
],
"default": {
"all": {
"enabled": false
},
"subgraphs": {}
},
"description": "When enabled for specific subgraphs, orphan errors (those without a valid\n`_entities` path) are assigned to the nearest non-array ancestor in the\nresponse path, preventing them from being duplicated across every array\nelement."
},
"experimental_type_conditioned_fetching": {
"default": false,
"description": "Type conditioned fetching configuration.",
"type": "boolean"
},
"fleet_detector": {
"$ref": "#/definitions/Conf2"
},
"forbid_mutations": {
"$ref": "#/definitions/ForbidMutationsConfig"
},
"headers": {
"$ref": "#/definitions/HeadersConfig"
},
"health_check": {
"$ref": "#/definitions/HealthCheckConfig"
},
"homepage": {
"allOf": [
{
"$ref": "#/definitions/Homepage"
}
],
"default": {
"enabled": true,
"graph_ref": null
},
"description": "Homepage configuration"
},
"include_subgraph_errors": {
"$ref": "#/definitions/IncludeSubgraphErrorsConfig"
},
"license_enforcement": {
"$ref": "#/definitions/LicenseEnforcementConfig"
},
"limits": {
"$ref": "#/definitions/LimitsConfig"
},
"override_subgraph_url": {
"$ref": "#/definitions/Conf3"
},
"persisted_queries": {
"allOf": [
{
"$ref": "#/definitions/PersistedQueries"
}
],
"default": {
"enabled": false,
"experimental_prewarm_query_plan_cache": {
"on_reload": true,
"on_startup": false
},
"hot_reload": false,
"local_manifests": null,
"log_unknown": false,
"safelist": {
"enabled": false,
"require_id": false
}
},
"description": "Configures managed persisted queries"
},
"plugins": {
"allOf": [
{
"$ref": "#/definitions/Plugins"
}
],
"default": null,
"description": "Plugin configuration"
},
"preview_entity_cache": {
"$ref": "#/definitions/Config6"
},
"preview_file_uploads": {
"$ref": "#/definitions/FileUploadsConfig"
},
"progressive_override": {
"$ref": "#/definitions/Config7"
},
"rhai": {
"$ref": "#/definitions/RhaiConfig"
},
"sandbox": {
"allOf": [
{
"$ref": "#/definitions/Sandbox"
}
],
"default": {
"enabled": false
},
"description": "Sandbox configuration"
},
"server": {
"allOf": [
{
"$ref": "#/definitions/Server"
}
],
"default": {
"http": {
"header_read_timeout": {
"nanos": 0,
"secs": 10
},
"tls_handshake_timeout": {
"nanos": 0,
"secs": 10
}
}
},
"description": "Configuration for the server"
},
"subscription": {
"$ref": "#/definitions/SubscriptionConfig"
},
"supergraph": {
"allOf": [
{
"$ref": "#/definitions/Supergraph"
}
],
"default": {
"connection_shutdown_timeout": {
"nanos": 0,
"secs": 60
},
"defer_support": true,
"early_cancel": false,
"enable_result_coercion_errors": false,
"experimental_log_on_broken_pipe": false,
"generate_query_fragments": true,
"introspection": false,
"listen": "127.0.0.1:4000",
"path": "/",
"query_planning": {
"cache": {
"in_memory": {
"limit": 512
},
"redis": null
},
"experimental_cooperative_cancellation": {
"enabled": true,
"memory_limit": null,
"mode": "measure",
"timeout": null
},
"experimental_paths_limit": null,
"experimental_plans_limit": null,
"experimental_reuse_query_plans": false,
"warmed_up_queries": null
},
"redact_query_validation_errors": false,
"strict_variable_validation": "enforce"
},
"description": "Configuration for the supergraph"
},
"telemetry": {
"$ref": "#/definitions/TelemetryConfig"
},
"tls": {
"allOf": [
{
"$ref": "#/definitions/Tls"
}
],
"default": {
"connector": {
"all": {
"certificate_authorities": null,
"client_authentication": null
},
"sources": {}
},
"subgraph": {
"all": {
"certificate_authorities": null,
"client_authentication": null
},
"subgraphs": {}
},
"supergraph": null
}
},
"traffic_shaping": {
"$ref": "#/definitions/TrafficShapingConfig"
}
},
"title": "Configuration",
"type": "object"
}