{ "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "urn:ksp:schema:std.transport:v2", "title": "KSP standard HTTP + WebSocket Transport configuration", "oneOf": [ { "$ref": "#/$defs/documentV1" }, { "$ref": "#/$defs/documentV2" } ], "$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" ] }, "url": { "type": "string", "minLength": 1 }, "session": { "$ref": "#/$defs/wsSessionOverride" } } }, "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" } } } } } }