From 8f6d9d6afbb5785f2e5d1e67eef697be7a534b1e Mon Sep 17 00:00:00 2001 From: TerrifiedBug Date: Mon, 9 Mar 2026 18:39:15 +0000 Subject: [PATCH 1/3] fix: align Vector component schemas with official spec (112/114 clean) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bump Vector to 0.53.0 and audit all VectorFlow component schemas against `vector generate-schema` to fix mismatches: - Bump Vector from 0.44.0 to 0.53.0 in agent and server Dockerfiles - Add encoding to required arrays for 25 sinks - Remove invalid TLS fields from 12 components (implicit via HTTPS/rediss) - Remove deprecated fields (http headers, elasticsearch suppress_type_name, splunk_hec token, databend tls) - Remove invalid fields (mqtt qos, pulsar dead_letter_queue_topic, etc.) - Fix required arrays for 8 components (kafka group_id, nats connection_name, vector address, opentelemetry grpc/http, throttle window_secs, etc.) - Fix aws_sns queue_url → topic_arn (Vector docs have copy-paste bug from SQS) - Add dependsOn for 6 modal components (syslog, socket, fluent, dnstap, statsd sources + socket sink) so fields show/hide based on selected mode --- agent/Dockerfile | 2 +- agent/install.sh | 2 +- docker/server/Dockerfile | 2 +- src/lib/vector/schemas/sinks/aws.ts | 14 +++---- src/lib/vector/schemas/sinks/azure.ts | 2 +- src/lib/vector/schemas/sinks/gcp.ts | 10 ++--- src/lib/vector/schemas/sinks/logging.ts | 6 +-- src/lib/vector/schemas/sinks/messaging.ts | 13 +++---- src/lib/vector/schemas/sinks/network.ts | 39 +++++-------------- src/lib/vector/schemas/sinks/observability.ts | 6 --- src/lib/vector/schemas/sinks/search-db.ts | 7 ---- src/lib/vector/schemas/sources/local.ts | 13 ------- src/lib/vector/schemas/sources/messaging.ts | 32 ++------------- src/lib/vector/schemas/sources/metrics.ts | 2 - src/lib/vector/schemas/sources/network.ts | 35 ++++++++--------- src/lib/vector/schemas/transforms.ts | 2 +- 16 files changed, 55 insertions(+), 132 deletions(-) diff --git a/agent/Dockerfile b/agent/Dockerfile index 20a33b59..a2cb0186 100644 --- a/agent/Dockerfile +++ b/agent/Dockerfile @@ -9,7 +9,7 @@ RUN CGO_ENABLED=0 go build -ldflags="-s -w -X github.com/TerrifiedBug/vectorflow # Stage 2: Download Vector FROM alpine:3.21 AS vector -ARG VECTOR_VERSION=0.44.0 +ARG VECTOR_VERSION=0.53.0 RUN apk add --no-cache curl && \ curl -sSfL -o /tmp/vector.tar.gz \ "https://packages.timber.io/vector/${VECTOR_VERSION}/vector-${VECTOR_VERSION}-x86_64-unknown-linux-musl.tar.gz" && \ diff --git a/agent/install.sh b/agent/install.sh index 04795b1d..9256a9cd 100755 --- a/agent/install.sh +++ b/agent/install.sh @@ -11,7 +11,7 @@ VECTOR_DATA_DIR="/var/lib/vector" CONFIG_DIR="/etc/vectorflow" ENV_FILE="${CONFIG_DIR}/agent.env" SERVICE_NAME="vf-agent" -VECTOR_VERSION="0.44.0" +VECTOR_VERSION="0.53.0" # Defaults VF_URL="" diff --git a/docker/server/Dockerfile b/docker/server/Dockerfile index 1e500556..84960ce5 100644 --- a/docker/server/Dockerfile +++ b/docker/server/Dockerfile @@ -12,7 +12,7 @@ RUN --mount=type=cache,target=/root/.local/share/pnpm/store \ # ---- Stage 2: Download Vector binary (cached unless VECTOR_VERSION changes) ---- FROM alpine:3.21 AS vector -ARG VECTOR_VERSION=0.44.0 +ARG VECTOR_VERSION=0.53.0 RUN apk add --no-cache curl && \ curl -sSfL -o /tmp/vector.tar.gz \ "https://packages.timber.io/vector/${VECTOR_VERSION}/vector-${VECTOR_VERSION}-x86_64-unknown-linux-musl.tar.gz" && \ diff --git a/src/lib/vector/schemas/sinks/aws.ts b/src/lib/vector/schemas/sinks/aws.ts index b13e0235..7d9ec0e7 100644 --- a/src/lib/vector/schemas/sinks/aws.ts +++ b/src/lib/vector/schemas/sinks/aws.ts @@ -205,7 +205,7 @@ export const awsSinks: VectorComponentDef[] = [ ...bufferSchema(), ...requestSchema(), }, - required: ["group_name", "stream_name"], + required: ["group_name", "stream_name", "encoding"], }, }, { @@ -277,7 +277,7 @@ export const awsSinks: VectorComponentDef[] = [ ...bufferSchema(), ...requestSchema(), }, - required: ["stream_name"], + required: ["stream_name", "encoding"], }, }, { @@ -316,7 +316,7 @@ export const awsSinks: VectorComponentDef[] = [ ...bufferSchema(), ...requestSchema(), }, - required: ["stream_name"], + required: ["stream_name", "encoding"], }, }, { @@ -357,7 +357,7 @@ export const awsSinks: VectorComponentDef[] = [ ...bufferSchema(), ...requestSchema(), }, - required: ["queue_url"], + required: ["queue_url", "encoding"], }, }, { @@ -372,9 +372,9 @@ export const awsSinks: VectorComponentDef[] = [ configSchema: { type: "object", properties: { - queue_url: { + topic_arn: { type: "string", - description: "SQS queue URL for SNS publishing", + description: "The ARN of the SNS topic to publish to", }, region: { type: "string", @@ -398,7 +398,7 @@ export const awsSinks: VectorComponentDef[] = [ ...bufferSchema(), ...requestSchema(), }, - required: ["queue_url"], + required: ["topic_arn", "encoding"], }, }, ]; diff --git a/src/lib/vector/schemas/sinks/azure.ts b/src/lib/vector/schemas/sinks/azure.ts index a909d425..daf9d3d6 100644 --- a/src/lib/vector/schemas/sinks/azure.ts +++ b/src/lib/vector/schemas/sinks/azure.ts @@ -68,7 +68,7 @@ export const azureSinks: VectorComponentDef[] = [ ...bufferSchema(), ...requestSchema(), }, - required: ["connection_string", "container_name"], + required: ["connection_string", "container_name", "encoding"], }, }, { diff --git a/src/lib/vector/schemas/sinks/gcp.ts b/src/lib/vector/schemas/sinks/gcp.ts index 4d6585ad..20102e61 100644 --- a/src/lib/vector/schemas/sinks/gcp.ts +++ b/src/lib/vector/schemas/sinks/gcp.ts @@ -121,7 +121,7 @@ export const gcpSinks: VectorComponentDef[] = [ ...bufferSchema(), ...requestSchema(), }, - required: ["bucket"], + required: ["bucket", "encoding"], }, }, { @@ -225,7 +225,7 @@ export const gcpSinks: VectorComponentDef[] = [ ...bufferSchema(), ...requestSchema(), }, - required: ["log_id"], + required: ["log_id", "resource"], }, }, { @@ -269,7 +269,7 @@ export const gcpSinks: VectorComponentDef[] = [ ...bufferSchema(), ...requestSchema(), }, - required: ["project_id"], + required: ["project_id", "resource"], }, }, { @@ -317,7 +317,7 @@ export const gcpSinks: VectorComponentDef[] = [ ...bufferSchema(), ...requestSchema(), }, - required: ["project", "topic"], + required: ["project", "topic", "encoding"], }, }, { @@ -406,7 +406,7 @@ export const gcpSinks: VectorComponentDef[] = [ ...bufferSchema(), ...requestSchema(), }, - required: ["customer_id", "log_type"], + required: ["customer_id", "log_type", "encoding"], }, }, ]; diff --git a/src/lib/vector/schemas/sinks/logging.ts b/src/lib/vector/schemas/sinks/logging.ts index d59f4d2a..24030646 100644 --- a/src/lib/vector/schemas/sinks/logging.ts +++ b/src/lib/vector/schemas/sinks/logging.ts @@ -91,7 +91,7 @@ export const loggingSinks: VectorComponentDef[] = [ ...bufferSchema(), ...requestSchema(), }, - required: ["endpoint"], + required: ["endpoint", "encoding"], }, }, { @@ -146,7 +146,7 @@ export const loggingSinks: VectorComponentDef[] = [ ...tlsSchema(), ...bufferSchema(), }, - required: ["endpoint"], + required: ["endpoint", "encoding"], }, }, { @@ -236,7 +236,7 @@ export const loggingSinks: VectorComponentDef[] = [ ...bufferSchema(), ...requestSchema(), }, - required: ["endpoint", "default_token"], + required: ["endpoint", "default_token", "encoding"], }, }, { diff --git a/src/lib/vector/schemas/sinks/messaging.ts b/src/lib/vector/schemas/sinks/messaging.ts index e1b271a3..1e000f03 100644 --- a/src/lib/vector/schemas/sinks/messaging.ts +++ b/src/lib/vector/schemas/sinks/messaging.ts @@ -74,7 +74,7 @@ export const messagingSinks: VectorComponentDef[] = [ ...tlsSchema(), ...bufferSchema(), }, - required: ["bootstrap_servers", "topic"], + required: ["bootstrap_servers", "topic", "encoding"], }, }, { @@ -148,7 +148,7 @@ export const messagingSinks: VectorComponentDef[] = [ ...tlsSchema(), ...bufferSchema(), }, - required: ["connection_string", "exchange"], + required: ["connection_string", "exchange", "encoding"], }, }, { @@ -247,7 +247,7 @@ export const messagingSinks: VectorComponentDef[] = [ ...tlsSchema(), ...bufferSchema(), }, - required: ["endpoint", "topic"], + required: ["endpoint", "topic", "encoding"], }, }, { @@ -322,12 +322,11 @@ export const messagingSinks: VectorComponentDef[] = [ "native_json", "protobuf", ]), - ...tlsSchema(), ...batchSchema({ max_bytes: "10MB", timeout_secs: "1" }), ...bufferSchema(), ...requestSchema(), }, - required: ["endpoint", "key"], + required: ["endpoint", "key", "encoding"], }, }, { @@ -436,7 +435,7 @@ export const messagingSinks: VectorComponentDef[] = [ ...tlsSchema(), ...bufferSchema(), }, - required: ["url", "subject"], + required: ["url", "subject", "encoding"], }, }, { @@ -524,7 +523,7 @@ export const messagingSinks: VectorComponentDef[] = [ ...tlsSchema(), ...bufferSchema(), }, - required: ["host", "topic"], + required: ["host", "topic", "encoding"], }, }, ]; diff --git a/src/lib/vector/schemas/sinks/network.ts b/src/lib/vector/schemas/sinks/network.ts index 3ce37730..6682250e 100644 --- a/src/lib/vector/schemas/sinks/network.ts +++ b/src/lib/vector/schemas/sinks/network.ts @@ -32,11 +32,6 @@ export const networkSinks: VectorComponentDef[] = [ description: "HTTP method", default: "post", }, - headers: { - type: "object", - additionalProperties: { type: "string" }, - description: "Additional HTTP headers (template-enabled)", - }, payload_prefix: { type: "string", description: "JSON prefix for payload body", @@ -68,7 +63,7 @@ export const networkSinks: VectorComponentDef[] = [ ...bufferSchema(), ...requestSchema(), }, - required: ["uri"], + required: ["uri", "encoding"], }, }, { @@ -87,6 +82,7 @@ export const networkSinks: VectorComponentDef[] = [ type: "string", description: "Socket address to connect to (e.g., 92.12.333.224:5000). Required for tcp and udp modes.", + dependsOn: { field: "mode", value: ["tcp", "udp"] }, }, mode: { type: "string", @@ -97,22 +93,13 @@ export const networkSinks: VectorComponentDef[] = [ type: "string", description: "Unix socket path (absolute path, required for unix_stream and unix_datagram modes)", - }, - keepalive: { - type: "object", - properties: { - time_secs: { - type: "number", - description: - "The time to wait before starting to send TCP keepalive probes on an idle connection", - }, - }, - description: "TCP keepalive settings (relevant when mode = tcp)", + dependsOn: { field: "mode", value: ["unix_datagram", "unix_stream"] }, }, send_buffer_bytes: { type: "number", description: "Configures the send buffer size (SO_SNDBUF) for the socket. Relevant for tcp and udp modes.", + dependsOn: { field: "mode", value: ["tcp", "udp"] }, }, ...encodingSchema([ "json", @@ -133,7 +120,7 @@ export const networkSinks: VectorComponentDef[] = [ ...tlsSchema(), ...bufferSchema(), }, - required: ["mode"], + required: ["mode", "encoding"], }, }, { @@ -163,11 +150,6 @@ export const networkSinks: VectorComponentDef[] = [ description: "Maximum wait time in seconds for Pong responses. Connection re-establishes on timeout. Ignored unless ping_interval is set.", }, - headers: { - type: "object", - additionalProperties: { type: "string" }, - description: "Custom headers for the WebSocket handshake", - }, ...authBasicBearerSchema(), ...encodingSchema([ "json", @@ -188,7 +170,7 @@ export const networkSinks: VectorComponentDef[] = [ ...tlsSchema(), ...bufferSchema(), }, - required: ["uri"], + required: ["uri", "encoding"], }, }, { @@ -227,7 +209,7 @@ export const networkSinks: VectorComponentDef[] = [ ...tlsSchema(), ...bufferSchema(), }, - required: ["address"], + required: ["address", "encoding"], }, }, { @@ -301,7 +283,7 @@ export const networkSinks: VectorComponentDef[] = [ ...compressionSchema(["gzip", "none", "zstd"], "none"), ...bufferSchema(), }, - required: ["path"], + required: ["path", "encoding"], }, }, { @@ -366,7 +348,7 @@ export const networkSinks: VectorComponentDef[] = [ ]), ...bufferSchema(), }, - required: [], + required: ["encoding"], }, }, { @@ -416,9 +398,8 @@ export const networkSinks: VectorComponentDef[] = [ ...compressionSchema(["gzip", "none", "snappy", "zlib", "zstd"], "gzip"), ...batchSchema({ max_bytes: "10MB", timeout_secs: "300" }), ...bufferSchema(), - ...requestSchema(), }, - required: ["endpoint", "prefix"], + required: ["endpoint", "prefix", "encoding"], }, }, ]; diff --git a/src/lib/vector/schemas/sinks/observability.ts b/src/lib/vector/schemas/sinks/observability.ts index fa9f6cd5..7d99c980 100644 --- a/src/lib/vector/schemas/sinks/observability.ts +++ b/src/lib/vector/schemas/sinks/observability.ts @@ -45,7 +45,6 @@ export const observabilitySinks: VectorComponentDef[] = [ ["gzip", "none", "snappy", "zlib", "zstd"], "gzip", ), - ...tlsSchema(), ...batchSchema({ max_bytes: "1MB", timeout_secs: "1" }), ...bufferSchema(), ...requestSchema(), @@ -84,7 +83,6 @@ export const observabilitySinks: VectorComponentDef[] = [ ["gzip", "none", "snappy", "zlib", "zstd"], "zstd", ), - ...tlsSchema(), ...batchSchema({ max_bytes: "100KB", timeout_secs: "1" }), ...bufferSchema(), ...requestSchema(), @@ -221,7 +219,6 @@ export const observabilitySinks: VectorComponentDef[] = [ items: { type: "string" }, description: "Tags to attach to events", }, - ...tlsSchema(), ...batchSchema({ max_bytes: "10MB", timeout_secs: "1" }), ...bufferSchema(), ...requestSchema(), @@ -257,7 +254,6 @@ export const observabilitySinks: VectorComponentDef[] = [ description: "Custom Sematext endpoint URL (overrides region setting)", }, - ...tlsSchema(), ...batchSchema({ max_bytes: "10MB", timeout_secs: "1" }), ...bufferSchema(), ...requestSchema(), @@ -298,7 +294,6 @@ export const observabilitySinks: VectorComponentDef[] = [ description: "Custom Sematext endpoint URL (overrides region setting)", }, - ...tlsSchema(), ...batchSchema({ timeout_secs: "1" }), ...bufferSchema(), ...requestSchema(), @@ -475,7 +470,6 @@ export const observabilitySinks: VectorComponentDef[] = [ default: "http://localhost:8080/alerts/event/vectordev?provider_id=test", }, - ...tlsSchema(), ...batchSchema({ max_bytes: "100KB", timeout_secs: "1" }), ...bufferSchema(), ...requestSchema(), diff --git a/src/lib/vector/schemas/sinks/search-db.ts b/src/lib/vector/schemas/sinks/search-db.ts index e3149142..c9a9106a 100644 --- a/src/lib/vector/schemas/sinks/search-db.ts +++ b/src/lib/vector/schemas/sinks/search-db.ts @@ -45,12 +45,6 @@ export const searchDbSinks: VectorComponentDef[] = [ description: "Document type for Elasticsearch indexing (ES 6.x and below)", default: "_doc", }, - suppress_type_name: { - type: "boolean", - description: - "Suppress the _type field in requests. Deprecated; use api_version instead", - default: false, - }, opensearch_service_type: { type: "string", enum: ["managed", "serverless"], @@ -436,7 +430,6 @@ export const searchDbSinks: VectorComponentDef[] = [ ...authBasicBearerSchema(), ...encodingSchema(["json", "csv"]), ...compressionSchema(["gzip", "none"], "none"), - ...tlsSchema(), ...batchSchema({ max_bytes: "10MB", timeout_secs: "1" }), ...bufferSchema(), ...requestSchema(), diff --git a/src/lib/vector/schemas/sources/local.ts b/src/lib/vector/schemas/sources/local.ts index 1c847e7a..afdeb914 100644 --- a/src/lib/vector/schemas/sources/local.ts +++ b/src/lib/vector/schemas/sources/local.ts @@ -143,19 +143,6 @@ export const localSources: VectorComponentDef[] = [ }, description: "Multiline aggregation configuration", }, - internal_metrics: { - type: "object", - properties: { - include_file_tag: { - type: "boolean", - description: - "Whether to include the file tag on internal metrics", - default: false, - }, - }, - description: "Configuration of internal metrics for this source", - }, - ...decodingSchema().decoding && { decoding: decodingSchema().decoding }, }, required: ["include"], }, diff --git a/src/lib/vector/schemas/sources/messaging.ts b/src/lib/vector/schemas/sources/messaging.ts index f13367fe..2340992f 100644 --- a/src/lib/vector/schemas/sources/messaging.ts +++ b/src/lib/vector/schemas/sources/messaging.ts @@ -104,7 +104,7 @@ export const messagingSources: VectorComponentDef[] = [ ...tlsSchema(), ...decodingSchema(), }, - required: ["bootstrap_servers", "topics"], + required: ["bootstrap_servers", "topics", "group_id"], }, }, { @@ -197,7 +197,7 @@ export const messagingSources: VectorComponentDef[] = [ ...tlsSchema(), ...decodingSchema(), }, - required: ["url", "subject"], + required: ["url", "subject", "connection_name"], }, }, { @@ -238,10 +238,6 @@ export const messagingSources: VectorComponentDef[] = [ description: "Number of messages per batch (default: 1000)", default: 1000, }, - dead_letter_queue_topic: { - type: "string", - description: "Topic for dead letter messages", - }, auth: { type: "object", properties: { @@ -311,10 +307,6 @@ export const messagingSources: VectorComponentDef[] = [ type: "string", description: "MQTT client identifier", }, - qos: { - type: "number", - description: "Quality of Service level (0, 1, or 2)", - }, keep_alive: { type: "number", description: "Connection keep-alive interval in seconds (default: 60)", @@ -386,7 +378,6 @@ export const messagingSources: VectorComponentDef[] = [ type: "string", description: "Field name to add the Redis key to each event", }, - ...tlsSchema(), ...decodingSchema(), }, required: ["url", "key"], @@ -526,12 +517,6 @@ export const messagingSources: VectorComponentDef[] = [ description: "Address to listen on (default: 0.0.0.0:443)", default: "0.0.0.0:443", }, - access_key: { - type: "string", - description: - "Deprecated: use access_keys instead. Firehose access key for request validation", - sensitive: true, - }, access_keys: { type: "array", items: { type: "string" }, @@ -551,7 +536,7 @@ export const messagingSources: VectorComponentDef[] = [ ...tlsSchema(), ...decodingSchema(), }, - required: ["address"], + required: ["address", "store_access_key"], }, }, { @@ -635,12 +620,6 @@ export const messagingSources: VectorComponentDef[] = [ description: "Address to listen on (default: 0.0.0.0:8088)", default: "0.0.0.0:8088", }, - token: { - type: "string", - description: - "Deprecated: use valid_tokens instead. HEC token for authentication", - sensitive: true, - }, valid_tokens: { type: "array", items: { type: "string" }, @@ -727,11 +706,6 @@ export const messagingSources: VectorComponentDef[] = [ type: "boolean", description: "Parse Datadog tags from incoming events", }, - log_namespace: { - type: "boolean", - description: "Use Vector namespaced log schema (default: false)", - default: false, - }, ...tlsSchema(), }, required: ["address"], diff --git a/src/lib/vector/schemas/sources/metrics.ts b/src/lib/vector/schemas/sources/metrics.ts index 51fdc0a8..3fc13674 100644 --- a/src/lib/vector/schemas/sources/metrics.ts +++ b/src/lib/vector/schemas/sources/metrics.ts @@ -223,7 +223,6 @@ export const metricSources: VectorComponentDef[] = [ description: "Namespace for metric names (default: mongodb)", default: "mongodb", }, - ...tlsSchema(), }, required: ["endpoints"], }, @@ -296,7 +295,6 @@ export const metricSources: VectorComponentDef[] = [ description: "Namespace for metric names (default: eventstoredb)", default: "eventstoredb", }, - ...tlsSchema(), }, required: [], }, diff --git a/src/lib/vector/schemas/sources/network.ts b/src/lib/vector/schemas/sources/network.ts index f50022f6..bcc3d1f1 100644 --- a/src/lib/vector/schemas/sources/network.ts +++ b/src/lib/vector/schemas/sources/network.ts @@ -23,6 +23,7 @@ export const networkSources: VectorComponentDef[] = [ type: "string", description: "The socket address to listen for connections on, or systemd{#N} for systemd socket activation", + dependsOn: { field: "mode", value: ["tcp", "udp"] }, }, mode: { type: "string", @@ -32,6 +33,7 @@ export const networkSources: VectorComponentDef[] = [ path: { type: "string", description: "Unix socket path. Must be an absolute path (when mode is unix)", + dependsOn: { field: "mode", value: "unix" }, }, max_length: { type: "number", @@ -56,6 +58,7 @@ export const networkSources: VectorComponentDef[] = [ type: "number", description: "Unix file mode bits to be applied to the unix socket file as its designated file permissions", + dependsOn: { field: "mode", value: "unix" }, }, ...tlsSchema(), }, @@ -77,11 +80,6 @@ export const networkSources: VectorComponentDef[] = [ type: "string", description: "The socket address to listen for connections on (e.g., 0.0.0.0:80)", }, - encoding: { - type: "string", - enum: ["text", "json", "ndjson", "binary"], - description: "Expected encoding of incoming data", - }, path: { type: "string", description: "The HTTP path to listen on", @@ -194,6 +192,7 @@ export const networkSources: VectorComponentDef[] = [ address: { type: "string", description: "Socket address to listen on (e.g., 0.0.0.0:9000)", + dependsOn: { field: "mode", value: ["tcp", "udp"] }, }, mode: { type: "string", @@ -203,6 +202,7 @@ export const networkSources: VectorComponentDef[] = [ path: { type: "string", description: "Unix socket path. Must be an absolute path (for unix modes)", + dependsOn: { field: "mode", value: ["unix_datagram", "unix_stream"] }, }, max_length: { type: "number", @@ -237,6 +237,7 @@ export const networkSources: VectorComponentDef[] = [ type: "number", description: "Unix file mode bits to be applied to the unix socket file as its designated file permissions", + dependsOn: { field: "mode", value: ["unix_datagram", "unix_stream"] }, }, ...tlsSchema(), ...decodingSchema(), @@ -260,6 +261,7 @@ export const networkSources: VectorComponentDef[] = [ type: "string", description: "The socket address to listen for connections on, or systemd{#N} for systemd socket activation", + dependsOn: { field: "mode", value: "tcp" }, }, mode: { type: "string", @@ -269,6 +271,7 @@ export const networkSources: VectorComponentDef[] = [ path: { type: "string", description: "The Unix socket path. Must be an absolute path (when mode is unix)", + dependsOn: { field: "mode", value: "unix" }, }, connection_limit: { type: "number", @@ -283,6 +286,7 @@ export const networkSources: VectorComponentDef[] = [ type: "number", description: "Unix file mode bits to be applied to the unix socket file as its designated file permissions", + dependsOn: { field: "mode", value: "unix" }, }, ...tlsSchema(), }, @@ -334,6 +338,7 @@ export const networkSources: VectorComponentDef[] = [ type: "string", description: "The socket address to listen for connections on, or systemd{#N} for systemd socket activation", + dependsOn: { field: "mode", value: ["tcp", "udp"] }, }, mode: { type: "string", @@ -343,6 +348,7 @@ export const networkSources: VectorComponentDef[] = [ path: { type: "string", description: "The Unix socket path. Must be an absolute path (when mode is unix)", + dependsOn: { field: "mode", value: "unix" }, }, sanitize: { type: "boolean", @@ -392,11 +398,13 @@ export const networkSources: VectorComponentDef[] = [ address: { type: "string", description: "TCP address to listen on (when mode is tcp)", + dependsOn: { field: "mode", value: "tcp" }, }, socket_path: { type: "string", description: "Absolute path to the socket file to read DNSTAP data from (when mode is unix)", + dependsOn: { field: "mode", value: "unix" }, }, raw_data_only: { type: "boolean", @@ -438,6 +446,7 @@ export const networkSources: VectorComponentDef[] = [ type: "number", description: "Unix file mode bits to be applied to the unix socket file as its designated file permissions", + dependsOn: { field: "mode", value: "unix" }, }, ...tlsSchema(), }, @@ -466,15 +475,9 @@ export const networkSources: VectorComponentDef[] = [ description: "Vector protocol version", default: "2", }, - shutdown_timeout_secs: { - type: "number", - description: - "The timeout before a connection is forcefully closed during shutdown in seconds", - default: 30, - }, ...tlsSchema(), }, - required: [], + required: ["address"], }, }, { @@ -516,9 +519,8 @@ export const networkSources: VectorComponentDef[] = [ }, description: "HTTP receiver configuration", }, - ...tlsSchema(), }, - required: [], + required: ["grpc", "http"], }, }, { @@ -559,11 +561,6 @@ export const networkSources: VectorComponentDef[] = [ description: "Timeout for the initial message to be sent in seconds", }, - headers: { - type: "object", - additionalProperties: { type: "string" }, - description: "Custom headers to include in the WebSocket handshake", - }, ...authBasicBearerSchema(), ...tlsSchema(), ...decodingSchema(), diff --git a/src/lib/vector/schemas/transforms.ts b/src/lib/vector/schemas/transforms.ts index db33ec68..a2b366f9 100644 --- a/src/lib/vector/schemas/transforms.ts +++ b/src/lib/vector/schemas/transforms.ts @@ -592,7 +592,7 @@ export const ALL_TRANSFORMS: VectorComponentDef[] = [ description: "VRL condition — matching events bypass throttle", }, }, - required: ["threshold"], + required: ["threshold", "window_secs"], }, }, ]; From 9f50752d89b0f9913154ff37767ba0da7350084f Mon Sep 17 00:00:00 2001 From: TerrifiedBug Date: Mon, 9 Mar 2026 18:58:56 +0000 Subject: [PATCH 2/3] fix: align encoding codecs, compression, enums, and defaults with Vector spec MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Deep value-level validation against `vector generate-schema`: Encoding codecs: - Remove invalid `ndjson` codec from all sinks and shared.ts default (NDJSON in Vector = codec:json + framing:newline_delimited) - Add missing `otlp` and `syslog` codecs to 20+ sinks - Standardize all sinks to Vector's canonical 13-codec list Compression options: - Add missing algorithms to AWS, GCP, network, and search-db sinks (snappy, zlib, zstd where missing) - Keep Kafka's unique list (lz4 instead of zlib) Enum value fixes: - source:http_server method — add DELETE, HEAD, OPTIONS, PATCH - source:http_client method — add DELETE, OPTIONS, PATCH - sink:http method — add trace - sink:clickhouse format — add arrow_stream - source:host_metrics collectors — add tcp - source:vector version — remove deprecated v1 - source:docker_logs multiline mode — halt_after → halt_with - sink:gcp_chronicle region — remove invalid australia-southeast1 Default value fixes: - source:aws_sqs visibility_timeout_secs — 30 → 300 (10x too low) --- src/lib/vector/schemas/shared.ts | 15 ++- src/lib/vector/schemas/sinks/aws.ts | 22 ++-- src/lib/vector/schemas/sinks/azure.ts | 2 + src/lib/vector/schemas/sinks/gcp.ts | 9 +- src/lib/vector/schemas/sinks/messaging.ts | 48 +++++--- src/lib/vector/schemas/sinks/network.ts | 108 +++++++++--------- src/lib/vector/schemas/sinks/observability.ts | 2 +- src/lib/vector/schemas/sinks/search-db.ts | 6 +- src/lib/vector/schemas/sources/container.ts | 2 +- src/lib/vector/schemas/sources/messaging.ts | 4 +- src/lib/vector/schemas/sources/metrics.ts | 5 +- src/lib/vector/schemas/sources/network.ts | 6 +- 12 files changed, 124 insertions(+), 105 deletions(-) diff --git a/src/lib/vector/schemas/shared.ts b/src/lib/vector/schemas/shared.ts index 3f156f3f..c099206b 100644 --- a/src/lib/vector/schemas/shared.ts +++ b/src/lib/vector/schemas/shared.ts @@ -175,14 +175,19 @@ export function requestSchema() { export function encodingSchema( codecs: string[] = [ + "avro", + "cef", + "csv", + "gelf", "json", - "ndjson", - "text", "logfmt", - "csv", - "avro", - "raw_message", + "native", "native_json", + "otlp", + "protobuf", + "raw_message", + "syslog", + "text", ], ) { return { diff --git a/src/lib/vector/schemas/sinks/aws.ts b/src/lib/vector/schemas/sinks/aws.ts index 7d9ec0e7..2bd833e1 100644 --- a/src/lib/vector/schemas/sinks/aws.ts +++ b/src/lib/vector/schemas/sinks/aws.ts @@ -129,8 +129,8 @@ export const awsSinks: VectorComponentDef[] = [ type: "string", description: "Timezone for date specifiers in templates (default: UTC)", }, - ...encodingSchema(["avro", "cef", "csv", "gelf", "json", "logfmt", "native", "native_json", "protobuf", "raw_message", "text"]), - ...compressionSchema(["none", "gzip"], "gzip"), + ...encodingSchema(["avro", "cef", "csv", "gelf", "json", "logfmt", "native", "native_json", "otlp", "protobuf", "raw_message", "syslog", "text"]), + ...compressionSchema(["gzip", "none", "snappy", "zlib", "zstd"], "gzip"), ...authAwsSchema(), ...tlsSchema(), ...batchSchema({ max_bytes: "10MB", timeout_secs: "300" }), @@ -197,8 +197,8 @@ export const awsSinks: VectorComponentDef[] = [ type: "string", description: "KMS key ARN for encrypting logs", }, - ...encodingSchema(["avro", "cef", "csv", "gelf", "json", "logfmt", "native", "native_json", "protobuf", "raw_message", "text"]), - ...compressionSchema(["none", "gzip"], "none"), + ...encodingSchema(["avro", "cef", "csv", "gelf", "json", "logfmt", "native", "native_json", "otlp", "protobuf", "raw_message", "syslog", "text"]), + ...compressionSchema(["gzip", "none", "snappy", "zlib", "zstd"], "none"), ...authAwsSchema(), ...tlsSchema(), ...batchSchema({ max_bytes: "1MB", timeout_secs: "1" }), @@ -232,7 +232,7 @@ export const awsSinks: VectorComponentDef[] = [ type: "string", description: "Custom endpoint for use with AWS-compatible services", }, - ...compressionSchema(["none", "gzip"], "none"), + ...compressionSchema(["gzip", "none", "snappy", "zlib", "zstd"], "none"), ...authAwsSchema(), ...tlsSchema(), ...batchSchema({ timeout_secs: "1" }), @@ -269,8 +269,8 @@ export const awsSinks: VectorComponentDef[] = [ type: "string", description: "Log field to use as the partition key for Kinesis records", }, - ...encodingSchema(["avro", "cef", "csv", "gelf", "json", "logfmt", "native", "native_json", "protobuf", "raw_message", "text"]), - ...compressionSchema(["none", "gzip"], "none"), + ...encodingSchema(["avro", "cef", "csv", "gelf", "json", "logfmt", "native", "native_json", "otlp", "protobuf", "raw_message", "syslog", "text"]), + ...compressionSchema(["gzip", "none", "snappy", "zlib", "zstd"], "none"), ...authAwsSchema(), ...tlsSchema(), ...batchSchema({ max_bytes: "4MB", timeout_secs: "1" }), @@ -308,8 +308,8 @@ export const awsSinks: VectorComponentDef[] = [ type: "string", description: "Custom endpoint for use with AWS-compatible services", }, - ...encodingSchema(["avro", "cef", "csv", "gelf", "json", "logfmt", "native", "native_json", "protobuf", "raw_message", "text"]), - ...compressionSchema(["none", "gzip"], "none"), + ...encodingSchema(["avro", "cef", "csv", "gelf", "json", "logfmt", "native", "native_json", "otlp", "protobuf", "raw_message", "syslog", "text"]), + ...compressionSchema(["gzip", "none", "snappy", "zlib", "zstd"], "none"), ...authAwsSchema(), ...tlsSchema(), ...batchSchema({ max_bytes: "5MB", timeout_secs: "1" }), @@ -351,7 +351,7 @@ export const awsSinks: VectorComponentDef[] = [ type: "string", description: "Deduplication ID for FIFO queues (template-enabled)", }, - ...encodingSchema(["avro", "cef", "csv", "gelf", "json", "logfmt", "native", "native_json", "protobuf", "raw_message", "text"]), + ...encodingSchema(["avro", "cef", "csv", "gelf", "json", "logfmt", "native", "native_json", "otlp", "protobuf", "raw_message", "syslog", "text"]), ...authAwsSchema(), ...tlsSchema(), ...bufferSchema(), @@ -392,7 +392,7 @@ export const awsSinks: VectorComponentDef[] = [ type: "string", description: "Deduplication ID for FIFO queues (template-enabled)", }, - ...encodingSchema(["avro", "cef", "csv", "gelf", "json", "logfmt", "native", "native_json", "protobuf", "raw_message", "text"]), + ...encodingSchema(["avro", "cef", "csv", "gelf", "json", "logfmt", "native", "native_json", "otlp", "protobuf", "raw_message", "syslog", "text"]), ...authAwsSchema(), ...tlsSchema(), ...bufferSchema(), diff --git a/src/lib/vector/schemas/sinks/azure.ts b/src/lib/vector/schemas/sinks/azure.ts index daf9d3d6..75052c2a 100644 --- a/src/lib/vector/schemas/sinks/azure.ts +++ b/src/lib/vector/schemas/sinks/azure.ts @@ -56,8 +56,10 @@ export const azureSinks: VectorComponentDef[] = [ "logfmt", "native", "native_json", + "otlp", "protobuf", "raw_message", + "syslog", "text", ]), ...compressionSchema( diff --git a/src/lib/vector/schemas/sinks/gcp.ts b/src/lib/vector/schemas/sinks/gcp.ts index 20102e61..8b371d71 100644 --- a/src/lib/vector/schemas/sinks/gcp.ts +++ b/src/lib/vector/schemas/sinks/gcp.ts @@ -108,8 +108,10 @@ export const gcpSinks: VectorComponentDef[] = [ "logfmt", "native", "native_json", + "otlp", "protobuf", "raw_message", + "syslog", "text", ]), ...compressionSchema( @@ -308,8 +310,10 @@ export const gcpSinks: VectorComponentDef[] = [ "logfmt", "native", "native_json", + "otlp", "protobuf", "raw_message", + "syslog", "text", ]), ...tlsSchema(), @@ -357,7 +361,6 @@ export const gcpSinks: VectorComponentDef[] = [ "us", "eu", "asia", - "australia-southeast1", "canada", "dammam", "doha", @@ -396,11 +399,13 @@ export const gcpSinks: VectorComponentDef[] = [ "logfmt", "native", "native_json", + "otlp", "protobuf", "raw_message", + "syslog", "text", ]), - ...compressionSchema(["gzip", "none"], "none"), + ...compressionSchema(["gzip", "none", "snappy", "zlib", "zstd"], "none"), ...tlsSchema(), ...batchSchema({ max_bytes: "1MB", timeout_secs: "15" }), ...bufferSchema(), diff --git a/src/lib/vector/schemas/sinks/messaging.ts b/src/lib/vector/schemas/sinks/messaging.ts index 1e000f03..99465c64 100644 --- a/src/lib/vector/schemas/sinks/messaging.ts +++ b/src/lib/vector/schemas/sinks/messaging.ts @@ -58,17 +58,19 @@ export const messagingSinks: VectorComponentDef[] = [ }, ...kafkaSaslSchema(), ...encodingSchema([ - "json", - "text", - "raw_message", "avro", "cef", "csv", "gelf", + "json", "logfmt", "native", "native_json", + "otlp", "protobuf", + "raw_message", + "syslog", + "text", ]), ...compressionSchema(["none", "gzip", "snappy", "lz4", "zstd"], "none"), ...tlsSchema(), @@ -133,17 +135,19 @@ export const messagingSinks: VectorComponentDef[] = [ description: "AMQP message properties", }, ...encodingSchema([ - "json", - "text", - "raw_message", "avro", "cef", "csv", "gelf", + "json", "logfmt", "native", "native_json", + "otlp", "protobuf", + "raw_message", + "syslog", + "text", ]), ...tlsSchema(), ...bufferSchema(), @@ -232,17 +236,19 @@ export const messagingSinks: VectorComponentDef[] = [ description: "Authentication configuration", }, ...encodingSchema([ - "json", - "text", - "raw_message", "avro", "cef", "csv", "gelf", + "json", "logfmt", "native", "native_json", + "otlp", "protobuf", + "raw_message", + "syslog", + "text", ]), ...tlsSchema(), ...bufferSchema(), @@ -310,17 +316,19 @@ export const messagingSinks: VectorComponentDef[] = [ description: "Sorted set-specific configuration", }, ...encodingSchema([ - "json", - "text", - "raw_message", "avro", "cef", "csv", "gelf", + "json", "logfmt", "native", "native_json", + "otlp", "protobuf", + "raw_message", + "syslog", + "text", ]), ...batchSchema({ max_bytes: "10MB", timeout_secs: "1" }), ...bufferSchema(), @@ -420,17 +428,19 @@ export const messagingSinks: VectorComponentDef[] = [ description: "Authentication configuration", }, ...encodingSchema([ - "json", - "text", - "raw_message", "avro", "cef", "csv", "gelf", + "json", "logfmt", "native", "native_json", + "otlp", "protobuf", + "raw_message", + "syslog", + "text", ]), ...tlsSchema(), ...bufferSchema(), @@ -508,17 +518,19 @@ export const messagingSinks: VectorComponentDef[] = [ sensitive: true, }, ...encodingSchema([ - "json", - "text", - "raw_message", "avro", "cef", "csv", "gelf", + "json", "logfmt", "native", "native_json", + "otlp", "protobuf", + "raw_message", + "syslog", + "text", ]), ...tlsSchema(), ...bufferSchema(), diff --git a/src/lib/vector/schemas/sinks/network.ts b/src/lib/vector/schemas/sinks/network.ts index 6682250e..1cfd8bed 100644 --- a/src/lib/vector/schemas/sinks/network.ts +++ b/src/lib/vector/schemas/sinks/network.ts @@ -28,7 +28,7 @@ export const networkSinks: VectorComponentDef[] = [ }, method: { type: "string", - enum: ["get", "post", "put", "patch", "delete", "head", "options"], + enum: ["delete", "get", "head", "options", "patch", "post", "put", "trace"], description: "HTTP method", default: "post", }, @@ -42,20 +42,19 @@ export const networkSinks: VectorComponentDef[] = [ }, ...authBasicBearerSchema(), ...encodingSchema([ + "avro", + "cef", + "csv", + "gelf", "json", - "ndjson", - "text", "logfmt", - "csv", - "avro", - "raw_message", "native", "native_json", - "gelf", - "cef", - "syslog", "otlp", "protobuf", + "raw_message", + "syslog", + "text", ]), ...compressionSchema(["none", "gzip", "snappy", "zlib", "zstd"]), ...tlsSchema(), @@ -102,20 +101,19 @@ export const networkSinks: VectorComponentDef[] = [ dependsOn: { field: "mode", value: ["tcp", "udp"] }, }, ...encodingSchema([ + "avro", + "cef", + "csv", + "gelf", "json", - "text", - "raw_message", - "ndjson", "logfmt", - "csv", - "avro", "native", "native_json", - "gelf", - "cef", - "syslog", "otlp", "protobuf", + "raw_message", + "syslog", + "text", ]), ...tlsSchema(), ...bufferSchema(), @@ -152,20 +150,19 @@ export const networkSinks: VectorComponentDef[] = [ }, ...authBasicBearerSchema(), ...encodingSchema([ + "avro", + "cef", + "csv", + "gelf", "json", - "text", - "raw_message", - "ndjson", "logfmt", - "csv", - "avro", "native", "native_json", - "gelf", - "cef", - "syslog", "otlp", "protobuf", + "raw_message", + "syslog", + "text", ]), ...tlsSchema(), ...bufferSchema(), @@ -191,20 +188,19 @@ export const networkSinks: VectorComponentDef[] = [ description: "Address to listen on (must include port, e.g., 0.0.0.0:80)", }, ...encodingSchema([ + "avro", + "cef", + "csv", + "gelf", "json", - "text", - "raw_message", - "ndjson", "logfmt", - "csv", - "avro", "native", "native_json", - "gelf", - "cef", - "syslog", "otlp", "protobuf", + "raw_message", + "syslog", + "text", ]), ...tlsSchema(), ...bufferSchema(), @@ -265,22 +261,21 @@ export const networkSinks: VectorComponentDef[] = [ default: 30, }, ...encodingSchema([ - "json", - "ndjson", - "text", + "avro", + "cef", "csv", - "raw_message", + "gelf", + "json", "logfmt", - "avro", "native", "native_json", - "gelf", - "cef", - "syslog", "otlp", "protobuf", + "raw_message", + "syslog", + "text", ]), - ...compressionSchema(["gzip", "none", "zstd"], "none"), + ...compressionSchema(["gzip", "none", "snappy", "zlib", "zstd"], "none"), ...bufferSchema(), }, required: ["path", "encoding"], @@ -332,19 +327,19 @@ export const networkSinks: VectorComponentDef[] = [ default: "stdout", }, ...encodingSchema([ + "avro", + "cef", + "csv", + "gelf", "json", - "text", "logfmt", - "csv", - "avro", - "raw_message", "native", "native_json", - "gelf", - "cef", - "syslog", "otlp", "protobuf", + "raw_message", + "syslog", + "text", ]), ...bufferSchema(), }, @@ -380,20 +375,19 @@ export const networkSinks: VectorComponentDef[] = [ "Directory prefix for organizing stored objects (template-enabled, should end with /)", }, ...encodingSchema([ - "json", - "ndjson", - "text", + "avro", + "cef", "csv", - "raw_message", + "gelf", + "json", "logfmt", - "avro", "native", "native_json", - "gelf", - "cef", - "syslog", "otlp", "protobuf", + "raw_message", + "syslog", + "text", ]), ...compressionSchema(["gzip", "none", "snappy", "zlib", "zstd"], "gzip"), ...batchSchema({ max_bytes: "10MB", timeout_secs: "300" }), diff --git a/src/lib/vector/schemas/sinks/observability.ts b/src/lib/vector/schemas/sinks/observability.ts index 7d99c980..62a0271b 100644 --- a/src/lib/vector/schemas/sinks/observability.ts +++ b/src/lib/vector/schemas/sinks/observability.ts @@ -361,7 +361,7 @@ export const observabilitySinks: VectorComponentDef[] = [ "Field for the nanosecond timestamp value (default: @timestamp.nanos)", default: "@timestamp.nanos", }, - ...encodingSchema(["json", "text"]), + ...encodingSchema(["avro", "cef", "csv", "gelf", "json", "logfmt", "native", "native_json", "otlp", "protobuf", "raw_message", "syslog", "text"]), ...compressionSchema( ["gzip", "none", "snappy", "zlib", "zstd"], "none", diff --git a/src/lib/vector/schemas/sinks/search-db.ts b/src/lib/vector/schemas/sinks/search-db.ts index c9a9106a..6bea5f81 100644 --- a/src/lib/vector/schemas/sinks/search-db.ts +++ b/src/lib/vector/schemas/sinks/search-db.ts @@ -200,7 +200,7 @@ export const searchDbSinks: VectorComponentDef[] = [ }, format: { type: "string", - enum: ["json_as_object", "json_as_string", "json_each_row"], + enum: ["arrow_stream", "json_as_object", "json_as_string", "json_each_row"], description: "Data format for parsing input data", default: "json_each_row", }, @@ -428,8 +428,8 @@ export const searchDbSinks: VectorComponentDef[] = [ default: "NULL", }, ...authBasicBearerSchema(), - ...encodingSchema(["json", "csv"]), - ...compressionSchema(["gzip", "none"], "none"), + ...encodingSchema(["avro", "cef", "csv", "gelf", "json", "logfmt", "native", "native_json", "otlp", "protobuf", "raw_message", "syslog", "text"]), + ...compressionSchema(["gzip", "none", "snappy", "zlib", "zstd"], "none"), ...batchSchema({ max_bytes: "10MB", timeout_secs: "1" }), ...bufferSchema(), ...requestSchema(), diff --git a/src/lib/vector/schemas/sources/container.ts b/src/lib/vector/schemas/sources/container.ts index 6a8fbc79..6a81fe7b 100644 --- a/src/lib/vector/schemas/sources/container.ts +++ b/src/lib/vector/schemas/sources/container.ts @@ -63,7 +63,7 @@ export const containerSources: VectorComponentDef[] = [ }, mode: { type: "string", - enum: ["halt_before", "halt_after", "continue_through", "continue_past"], + enum: ["halt_before", "halt_with", "continue_through", "continue_past"], description: "Multi-line mode", }, timeout_ms: { diff --git a/src/lib/vector/schemas/sources/messaging.ts b/src/lib/vector/schemas/sources/messaging.ts index 2340992f..fd4cc513 100644 --- a/src/lib/vector/schemas/sources/messaging.ts +++ b/src/lib/vector/schemas/sources/messaging.ts @@ -481,8 +481,8 @@ export const messagingSources: VectorComponentDef[] = [ visibility_timeout_secs: { type: "number", description: - "Visibility timeout for received messages in seconds (default: 30)", - default: 30, + "Visibility timeout for received messages in seconds (default: 300)", + default: 300, }, delete_message: { type: "boolean", diff --git a/src/lib/vector/schemas/sources/metrics.ts b/src/lib/vector/schemas/sources/metrics.ts index 3fc13674..fe44fd59 100644 --- a/src/lib/vector/schemas/sources/metrics.ts +++ b/src/lib/vector/schemas/sources/metrics.ts @@ -18,15 +18,16 @@ export const metricSources: VectorComponentDef[] = [ items: { type: "string", enum: [ + "cgroups", "cpu", "disk", "filesystem", - "load", "host", + "load", "memory", "network", "process", - "cgroups", + "tcp", ], }, description: "List of metric collectors to enable", diff --git a/src/lib/vector/schemas/sources/network.ts b/src/lib/vector/schemas/sources/network.ts index bcc3d1f1..6298c150 100644 --- a/src/lib/vector/schemas/sources/network.ts +++ b/src/lib/vector/schemas/sources/network.ts @@ -87,7 +87,7 @@ export const networkSources: VectorComponentDef[] = [ }, method: { type: "string", - enum: ["POST", "PUT", "GET"], + enum: ["DELETE", "GET", "HEAD", "OPTIONS", "PATCH", "POST", "PUT"], description: "HTTP method to accept", default: "POST", }, @@ -155,7 +155,7 @@ export const networkSources: VectorComponentDef[] = [ }, method: { type: "string", - enum: ["GET", "POST", "PUT", "HEAD"], + enum: ["DELETE", "GET", "HEAD", "OPTIONS", "PATCH", "POST", "PUT"], description: "HTTP method to use", default: "GET", }, @@ -471,7 +471,7 @@ export const networkSources: VectorComponentDef[] = [ }, version: { type: "string", - enum: ["1", "2"], + enum: ["2"], description: "Vector protocol version", default: "2", }, From d17d194df541ed203e36bb9a22d7c6d1fcd25061 Mon Sep 17 00:00:00 2001 From: TerrifiedBug Date: Mon, 9 Mar 2026 19:01:02 +0000 Subject: [PATCH 3/3] feat: add Vector docs link icon to component config header Small ExternalLink icon next to the component name in the detail panel that opens the Vector documentation for that component type. URL is computed from kind/type: vector.dev/docs/reference/configuration/{kind}s/{type}/ --- src/components/flow/detail-panel.tsx | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/components/flow/detail-panel.tsx b/src/components/flow/detail-panel.tsx index 1b6f77fd..8c26f23c 100644 --- a/src/components/flow/detail-panel.tsx +++ b/src/components/flow/detail-panel.tsx @@ -1,7 +1,7 @@ "use client"; import { useCallback, useEffect, useMemo, useState } from "react"; -import { Copy, Trash2, Lock, Info, MousePointerClick } from "lucide-react"; +import { Copy, Trash2, Lock, Info, MousePointerClick, ExternalLink } from "lucide-react"; import { useFlowStore } from "@/stores/flow-store"; import { SchemaForm } from "@/components/config-forms/schema-form"; import { VrlEditor } from "@/components/vrl-editor/vrl-editor"; @@ -255,8 +255,17 @@ export function DetailPanel({ pipelineId, isDeployed }: DetailPanelProps) {
- + {componentDef.displayName} + + +