{ "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "urn:ksp:schema:std.store:v2", "title": "KSP standard Store configuration", "type": "object", "additionalProperties": false, "required": [ "format_version", "default_profile", "profiles" ], "properties": { "format_version": { "enum": [ 1, 2 ] }, "default_profile": { "$ref": "#/$defs/profileId" }, "profiles": { "type": "array", "minItems": 1 } }, "oneOf": [ { "properties": { "format_version": { "const": 1 }, "profiles": { "items": { "$ref": "#/$defs/profileV1" } } } }, { "properties": { "format_version": { "const": 2 }, "profiles": { "items": { "$ref": "#/$defs/profileV2" } } } } ], "$defs": { "profileId": { "type": "string", "pattern": "^[a-z0-9][a-z0-9._-]*$" }, "networkId": { "type": "string", "minLength": 1, "maxLength": 128, "pattern": "^[A-Za-z0-9_.:-]+$" }, "duration100To60000": { "type": "integer", "minimum": 100, "maximum": 60000 }, "profileV1": { "type": "object", "additionalProperties": false, "required": [ "profile_id", "network", "backend", "postgres" ], "properties": { "profile_id": { "$ref": "#/$defs/profileId" }, "network": { "$ref": "#/$defs/networkId" }, "backend": { "const": "postgres" }, "postgres": { "$ref": "#/$defs/postgresV1" } } }, "profileV2": { "type": "object", "additionalProperties": false, "required": [ "profile_id", "network", "backend", "postgres" ], "properties": { "profile_id": { "$ref": "#/$defs/profileId" }, "network": { "$ref": "#/$defs/networkId" }, "backend": { "const": "postgres" }, "postgres": { "$ref": "#/$defs/postgresV2" } } }, "postgresV1": { "type": "object", "additionalProperties": false, "required": [ "connection_uri", "pool", "tls", "bootstrap", "shutdown_timeout_ms" ], "properties": { "connection_uri": { "type": "string", "minLength": 1 }, "pool": { "$ref": "#/$defs/pool" }, "tls": { "$ref": "#/$defs/tls" }, "bootstrap": { "$ref": "#/$defs/bootstrapV1" }, "shutdown_timeout_ms": { "type": "integer", "minimum": 100, "maximum": 30000 } } }, "postgresV2": { "type": "object", "additionalProperties": false, "required": [ "connection_uri", "pool", "tls", "bootstrap", "shutdown_timeout_ms" ], "properties": { "connection_uri": { "type": "string", "minLength": 1 }, "pool": { "$ref": "#/$defs/pool" }, "tls": { "$ref": "#/$defs/tls" }, "bootstrap": { "$ref": "#/$defs/bootstrapV2" }, "shutdown_timeout_ms": { "type": "integer", "minimum": 100, "maximum": 30000 } } }, "pool": { "type": "object", "additionalProperties": false, "required": [ "max_connections", "connect_timeout_ms", "wait_timeout_ms", "create_timeout_ms", "recycle_timeout_ms" ], "properties": { "max_connections": { "type": "integer", "minimum": 1, "maximum": 64 }, "connect_timeout_ms": { "$ref": "#/$defs/duration100To60000" }, "wait_timeout_ms": { "$ref": "#/$defs/duration100To60000" }, "create_timeout_ms": { "$ref": "#/$defs/duration100To60000" }, "recycle_timeout_ms": { "$ref": "#/$defs/duration100To60000" } } }, "tls": { "type": "object", "additionalProperties": false, "required": [ "mode" ], "properties": { "mode": { "enum": [ "disabled", "verify_full" ] } } }, "bootstrapV1": { "type": "object", "additionalProperties": false, "required": [ "auto_migrate", "migration_timeout_ms", "migration_lock_timeout_ms" ], "properties": { "auto_migrate": { "type": "boolean" }, "migration_timeout_ms": { "type": "integer", "minimum": 1000, "maximum": 300000 }, "migration_lock_timeout_ms": { "type": "integer", "minimum": 100, "maximum": 120000 } } }, "bootstrapV2": { "type": "object", "additionalProperties": false, "required": [ "schema_autocreate", "schema_autoupdate", "migration_timeout_ms", "migration_lock_timeout_ms" ], "properties": { "schema_autocreate": { "type": "boolean" }, "schema_autoupdate": { "type": "boolean" }, "migration_timeout_ms": { "type": "integer", "minimum": 1000, "maximum": 300000 }, "migration_lock_timeout_ms": { "type": "integer", "minimum": 100, "maximum": 120000 } } } } }