{ "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "urn:ksp:schema:std.transport:v3", "title": "KSP standard HTTP + WebSocket + Yellowstone gRPC Transport configuration", "oneOf": [ { "$ref": "#/$defs/documentV1" }, { "$ref": "#/$defs/documentV2" }, { "$ref": "#/$defs/documentV3" } ], "$defs": { "profileId": { "type": "string", "pattern": "^[a-z0-9][a-z0-9._-]*$" }, "descriptor": { "type": "string", "minLength": 1, "pattern": "^\\S(?:.*\\S)?$" }, "positiveMs": { "type": "integer", "minimum": 1, "maximum": 4294967295 }, "positiveU32": { "type": "integer", "minimum": 1, "maximum": 4294967295 }, "positiveUsize": { "type": "integer", "minimum": 1, "maximum": 4294967295 }, "retry": { "type": "object", "additionalProperties": false, "required": [ "max_retries", "initial_backoff_ms", "max_backoff_ms" ], "properties": { "max_retries": { "type": "integer", "minimum": 0, "maximum": 100 }, "initial_backoff_ms": { "$ref": "#/$defs/positiveMs" }, "max_backoff_ms": { "$ref": "#/$defs/positiveMs" } } }, "limits": { "type": "object", "additionalProperties": false, "properties": { "requests_per_second": { "$ref": "#/$defs/positiveU32" }, "burst_capacity": { "$ref": "#/$defs/positiveU32" }, "max_concurrent_requests": { "$ref": "#/$defs/positiveU32" }, "pause_after_rate_limit_ms": { "$ref": "#/$defs/positiveMs" } } }, "role": { "type": "object", "additionalProperties": false, "required": [ "role", "enabled", "request_kinds", "priority", "limits" ], "properties": { "role": { "$ref": "#/$defs/descriptor" }, "enabled": { "type": "boolean" }, "request_kinds": { "type": "array", "minItems": 1, "uniqueItems": true, "items": { "$ref": "#/$defs/descriptor" }, "allOf": [ { "if": { "contains": { "const": "*" } }, "then": { "maxItems": 1 } } ] }, "priority": { "type": "integer", "minimum": 0, "maximum": 4294967295 }, "limits": { "$ref": "#/$defs/limits" } } }, "httpEndpoint": { "type": "object", "additionalProperties": false, "required": [ "name", "enabled", "provider", "cluster", "url", "connect_timeout_ms", "request_timeout_ms", "roles" ], "properties": { "name": { "$ref": "#/$defs/descriptor" }, "enabled": { "type": "boolean" }, "provider": { "$ref": "#/$defs/descriptor" }, "cluster": { "$ref": "#/$defs/descriptor" }, "url": { "type": "string", "minLength": 1 }, "connect_timeout_ms": { "$ref": "#/$defs/positiveMs" }, "request_timeout_ms": { "$ref": "#/$defs/positiveMs" }, "max_idle_connections_per_host": { "type": "integer", "minimum": 1 }, "roles": { "type": "array", "minItems": 1, "items": { "$ref": "#/$defs/role" } } } }, "wsReconnect": { "type": "object", "additionalProperties": false, "required": [ "max_retries", "initial_backoff_ms", "max_backoff_ms" ], "properties": { "max_retries": { "type": "integer", "minimum": 0, "maximum": 100 }, "initial_backoff_ms": { "$ref": "#/$defs/positiveMs" }, "max_backoff_ms": { "$ref": "#/$defs/positiveMs" } } }, "wsReconnectOverride": { "type": "object", "additionalProperties": false, "minProperties": 1, "properties": { "max_retries": { "type": "integer", "minimum": 0, "maximum": 100 }, "initial_backoff_ms": { "$ref": "#/$defs/positiveMs" }, "max_backoff_ms": { "$ref": "#/$defs/positiveMs" } } }, "wsSession": { "type": "object", "additionalProperties": false, "required": [ "command_timeout_ms", "close_timeout_ms", "reconnect", "resubscribe", "command_queue_capacity", "notification_queue_capacity", "max_active_subscriptions", "max_pending_requests", "max_message_size_bytes", "max_frame_size_bytes", "max_write_buffer_size_bytes" ], "properties": { "command_timeout_ms": { "$ref": "#/$defs/positiveMs" }, "close_timeout_ms": { "$ref": "#/$defs/positiveMs" }, "reconnect": { "$ref": "#/$defs/wsReconnect" }, "resubscribe": { "enum": [ "never", "active_subscriptions" ] }, "command_queue_capacity": { "$ref": "#/$defs/positiveUsize" }, "notification_queue_capacity": { "$ref": "#/$defs/positiveUsize" }, "max_active_subscriptions": { "$ref": "#/$defs/positiveUsize" }, "max_pending_requests": { "$ref": "#/$defs/positiveUsize" }, "max_message_size_bytes": { "$ref": "#/$defs/positiveUsize" }, "max_frame_size_bytes": { "$ref": "#/$defs/positiveUsize" }, "max_write_buffer_size_bytes": { "$ref": "#/$defs/positiveUsize" } } }, "wsSessionOverride": { "type": "object", "additionalProperties": false, "minProperties": 1, "properties": { "command_timeout_ms": { "$ref": "#/$defs/positiveMs" }, "close_timeout_ms": { "$ref": "#/$defs/positiveMs" }, "reconnect": { "$ref": "#/$defs/wsReconnectOverride" }, "resubscribe": { "enum": [ "never", "active_subscriptions" ] }, "command_queue_capacity": { "$ref": "#/$defs/positiveUsize" }, "notification_queue_capacity": { "$ref": "#/$defs/positiveUsize" }, "max_active_subscriptions": { "$ref": "#/$defs/positiveUsize" }, "max_pending_requests": { "$ref": "#/$defs/positiveUsize" }, "max_message_size_bytes": { "$ref": "#/$defs/positiveUsize" }, "max_frame_size_bytes": { "$ref": "#/$defs/positiveUsize" }, "max_write_buffer_size_bytes": { "$ref": "#/$defs/positiveUsize" } } }, "wsEndpoint": { "type": "object", "additionalProperties": false, "required": [ "name", "enabled", "provider", "cluster", "kind", "url" ], "properties": { "name": { "$ref": "#/$defs/descriptor" }, "enabled": { "type": "boolean" }, "provider": { "$ref": "#/$defs/descriptor" }, "cluster": { "$ref": "#/$defs/descriptor" }, "kind": { "enum": [ "solana_standard", "helius_laserstream" ] }, "url": { "type": "string", "minLength": 1 }, "session": { "$ref": "#/$defs/wsSessionOverride" }, "capabilities": { "type": "array", "minItems": 1, "maxItems": 10, "uniqueItems": true, "items": { "enum": [ "account", "block", "logs", "program", "root", "signature", "slot", "slots_updates", "vote", "helius_transaction" ] } } } }, "profileV1": { "type": "object", "additionalProperties": false, "required": [ "profile_id", "endpoints" ], "properties": { "profile_id": { "$ref": "#/$defs/profileId" }, "endpoints": { "type": "array", "minItems": 1, "items": { "$ref": "#/$defs/httpEndpoint" } } } }, "profileV2": { "type": "object", "additionalProperties": false, "required": [ "profile_id", "endpoints", "ws_endpoints" ], "properties": { "profile_id": { "$ref": "#/$defs/profileId" }, "endpoints": { "type": "array", "minItems": 1, "items": { "$ref": "#/$defs/httpEndpoint" } }, "ws_endpoints": { "type": "array", "minItems": 1, "items": { "$ref": "#/$defs/wsEndpoint" } } } }, "documentV1": { "type": "object", "additionalProperties": false, "required": [ "format_version", "retry", "default_profile", "profiles" ], "properties": { "format_version": { "const": 1 }, "retry": { "$ref": "#/$defs/retry" }, "default_profile": { "$ref": "#/$defs/profileId" }, "profiles": { "type": "array", "minItems": 1, "items": { "$ref": "#/$defs/profileV1" } } } }, "documentV2": { "type": "object", "additionalProperties": false, "required": [ "format_version", "retry", "ws_defaults", "default_profile", "profiles" ], "properties": { "format_version": { "const": 2 }, "retry": { "$ref": "#/$defs/retry" }, "ws_defaults": { "$ref": "#/$defs/wsSession" }, "default_profile": { "$ref": "#/$defs/profileId" }, "profiles": { "type": "array", "minItems": 1, "items": { "$ref": "#/$defs/profileV2" } } } }, "grpcPositiveMs": { "type": "integer", "minimum": 1, "maximum": 300000 }, "grpcCapacity": { "type": "integer", "minimum": 1, "maximum": 65536 }, "grpcMessageSize": { "type": "integer", "minimum": 1, "maximum": 536870912 }, "grpcReconnect": { "type": "object", "additionalProperties": false, "required": [ "max_retries", "initial_backoff_ms", "max_backoff_ms" ], "properties": { "max_retries": { "type": "integer", "minimum": 0, "maximum": 100 }, "initial_backoff_ms": { "$ref": "#/$defs/grpcPositiveMs" }, "max_backoff_ms": { "$ref": "#/$defs/grpcPositiveMs" } } }, "grpcReconnectOverride": { "type": "object", "additionalProperties": false, "minProperties": 1, "properties": { "max_retries": { "type": "integer", "minimum": 0, "maximum": 100 }, "initial_backoff_ms": { "$ref": "#/$defs/grpcPositiveMs" }, "max_backoff_ms": { "$ref": "#/$defs/grpcPositiveMs" } } }, "grpcSession": { "type": "object", "additionalProperties": false, "required": [ "connect_timeout_ms", "unary_timeout_ms", "close_timeout_ms", "reconnect", "request_channel_capacity", "update_channel_capacity", "max_inbound_message_size_bytes", "max_outbound_message_size_bytes" ], "properties": { "connect_timeout_ms": { "$ref": "#/$defs/grpcPositiveMs" }, "unary_timeout_ms": { "$ref": "#/$defs/grpcPositiveMs" }, "close_timeout_ms": { "$ref": "#/$defs/grpcPositiveMs" }, "reconnect": { "$ref": "#/$defs/grpcReconnect" }, "request_channel_capacity": { "$ref": "#/$defs/grpcCapacity" }, "update_channel_capacity": { "$ref": "#/$defs/grpcCapacity" }, "max_inbound_message_size_bytes": { "$ref": "#/$defs/grpcMessageSize" }, "max_outbound_message_size_bytes": { "$ref": "#/$defs/grpcMessageSize" } } }, "grpcSessionOverride": { "type": "object", "additionalProperties": false, "minProperties": 1, "properties": { "connect_timeout_ms": { "$ref": "#/$defs/grpcPositiveMs" }, "unary_timeout_ms": { "$ref": "#/$defs/grpcPositiveMs" }, "close_timeout_ms": { "$ref": "#/$defs/grpcPositiveMs" }, "reconnect": { "$ref": "#/$defs/grpcReconnectOverride" }, "request_channel_capacity": { "$ref": "#/$defs/grpcCapacity" }, "update_channel_capacity": { "$ref": "#/$defs/grpcCapacity" }, "max_inbound_message_size_bytes": { "$ref": "#/$defs/grpcMessageSize" }, "max_outbound_message_size_bytes": { "$ref": "#/$defs/grpcMessageSize" } } }, "grpcMetadata": { "type": "object", "additionalProperties": false, "required": [ "key", "value" ], "properties": { "key": { "type": "string", "minLength": 1, "maxLength": 128, "pattern": "^[0-9a-z_.-]+$" }, "value": { "type": "string", "maxLength": 8192 } } }, "grpcEndpoint": { "type": "object", "additionalProperties": false, "required": [ "name", "enabled", "provider", "cluster", "protocol", "url" ], "properties": { "name": { "$ref": "#/$defs/descriptor" }, "enabled": { "type": "boolean" }, "provider": { "$ref": "#/$defs/descriptor" }, "cluster": { "$ref": "#/$defs/descriptor" }, "protocol": { "const": "solana_yellowstone" }, "url": { "type": "string", "minLength": 1, "maxLength": 8192 }, "metadata": { "type": "array", "maxItems": 64, "items": { "$ref": "#/$defs/grpcMetadata" } }, "secret_metadata": { "type": "array", "maxItems": 64, "items": { "$ref": "#/$defs/grpcMetadata" } }, "session": { "$ref": "#/$defs/grpcSessionOverride" } } }, "profileV3": { "type": "object", "additionalProperties": false, "required": [ "profile_id", "endpoints", "ws_endpoints" ], "properties": { "profile_id": { "$ref": "#/$defs/profileId" }, "endpoints": { "type": "array", "minItems": 1, "items": { "$ref": "#/$defs/httpEndpoint" } }, "ws_endpoints": { "type": "array", "minItems": 1, "items": { "$ref": "#/$defs/wsEndpoint" } }, "grpc_endpoints": { "type": "array", "minItems": 1, "maxItems": 128, "items": { "$ref": "#/$defs/grpcEndpoint" } } } }, "documentV3": { "type": "object", "additionalProperties": false, "required": [ "format_version", "retry", "ws_defaults", "grpc_defaults", "default_profile", "profiles" ], "properties": { "format_version": { "const": 3 }, "retry": { "$ref": "#/$defs/retry" }, "ws_defaults": { "$ref": "#/$defs/wsSession" }, "grpc_defaults": { "$ref": "#/$defs/grpcSession" }, "default_profile": { "$ref": "#/$defs/profileId" }, "profiles": { "type": "array", "minItems": 1, "items": { "$ref": "#/$defs/profileV3" } } } } } }