{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://api-evangelist.com/helidon/json-schema/helidon-application-config.json",
  "title": "Helidon Application Configuration",
  "description": "JSON Schema for Helidon application configuration (application.yaml / microprofile-config.properties). Covers server, security, datasource, metrics, health, tracing, and WebServer settings for both Helidon SE and MP.",
  "type": "object",
  "properties": {
    "server": {
      "type": "object",
      "description": "Helidon WebServer configuration",
      "properties": {
        "host": {
          "type": "string",
          "default": "0.0.0.0",
          "description": "Server listen host"
        },
        "port": {
          "type": "integer",
          "default": 8080,
          "description": "Server listen port"
        },
        "backlog": {
          "type": "integer",
          "default": 1024,
          "description": "Server socket backlog"
        },
        "max-header-size": {
          "type": "integer",
          "default": 16384,
          "description": "Maximum header size in bytes"
        },
        "max-initial-line-length": {
          "type": "integer",
          "default": 4096
        },
        "max-payload-size": {
          "type": "integer",
          "description": "Maximum payload size in bytes"
        },
        "idle-connection-timeout-seconds": {
          "type": "integer",
          "default": 0,
          "description": "Idle connection timeout (0 for unlimited)"
        },
        "tls": {
          "type": "object",
          "properties": {
            "private-key": {
              "type": "object",
              "properties": {
                "keystore": {
                  "type": "object",
                  "properties": {
                    "resource": {
                      "type": "object",
                      "properties": {
                        "resource-path": { "type": "string" }
                      }
                    },
                    "passphrase": { "type": "string" },
                    "type": { "type": "string", "default": "PKCS12" }
                  }
                }
              }
            },
            "trust": {
              "type": "object",
              "properties": {
                "keystore": {
                  "type": "object",
                  "properties": {
                    "resource": {
                      "type": "object",
                      "properties": {
                        "resource-path": { "type": "string" }
                      }
                    },
                    "passphrase": { "type": "string" }
                  }
                }
              }
            }
          }
        },
        "static": {
          "type": "object",
          "properties": {
            "classpath": {
              "type": "object",
              "properties": {
                "location": { "type": "string" },
                "context": { "type": "string" }
              }
            }
          }
        },
        "features": {
          "type": "object",
          "properties": {
            "print-details": { "type": "boolean", "default": false }
          }
        }
      }
    },
    "security": {
      "type": "object",
      "description": "Helidon Security configuration",
      "properties": {
        "providers": {
          "type": "array",
          "items": {
            "type": "object",
            "additionalProperties": true
          },
          "description": "Ordered list of security providers"
        },
        "config": {
          "type": "object",
          "properties": {
            "require-encryption": { "type": "boolean", "default": true },
            "require-authentication": { "type": "boolean", "default": false },
            "require-authorization": { "type": "boolean", "default": false }
          }
        },
        "web-server": {
          "type": "object",
          "properties": {
            "defaults": {
              "type": "object",
              "properties": {
                "authenticate": { "type": "boolean" },
                "authorize": { "type": "boolean" }
              }
            },
            "paths": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "path": { "type": "string" },
                  "methods": {
                    "type": "array",
                    "items": { "type": "string" }
                  },
                  "authenticate": { "type": "boolean" },
                  "authorize": { "type": "boolean" },
                  "roles-allowed": {
                    "type": "array",
                    "items": { "type": "string" }
                  }
                }
              }
            }
          }
        }
      }
    },
    "javax.sql.DataSource": {
      "type": "object",
      "description": "JDBC DataSource configuration (Helidon MP)",
      "additionalProperties": {
        "type": "object",
        "properties": {
          "dataSourceClassName": { "type": "string" },
          "dataSource": {
            "type": "object",
            "properties": {
              "url": { "type": "string" },
              "user": { "type": "string" },
              "password": { "type": "string" }
            }
          },
          "maximumPoolSize": { "type": "integer", "default": 10 },
          "minimumIdle": { "type": "integer" }
        }
      }
    },
    "tracing": {
      "type": "object",
      "description": "Distributed tracing configuration",
      "properties": {
        "service": {
          "type": "string",
          "description": "Service name for tracing"
        },
        "protocol": { "type": "string" },
        "host": { "type": "string" },
        "port": { "type": "integer" },
        "path": { "type": "string" },
        "enabled": { "type": "boolean", "default": true },
        "sampler-type": {
          "type": "string",
          "enum": ["const", "probabilistic", "rate-limiting", "remote"]
        },
        "sampler-param": { "type": "number" }
      }
    },
    "mp": {
      "type": "object",
      "description": "MicroProfile configuration",
      "properties": {
        "metrics": {
          "type": "object",
          "properties": {
            "tags": {
              "type": "string",
              "description": "Global tags in key=value,key=value format"
            },
            "appName": { "type": "string" }
          }
        },
        "openapi": {
          "type": "object",
          "properties": {
            "filter": { "type": "string" },
            "model": {
              "type": "object",
              "properties": {
                "reader": { "type": "string" }
              }
            },
            "scan": {
              "type": "object",
              "properties": {
                "disable": { "type": "boolean", "default": false },
                "packages": { "type": "string" },
                "classes": { "type": "string" }
              }
            }
          }
        },
        "jwt": {
          "type": "object",
          "properties": {
            "verify": {
              "type": "object",
              "properties": {
                "publickey": {
                  "type": "object",
                  "properties": {
                    "location": { "type": "string" }
                  }
                },
                "issuer": { "type": "string" }
              }
            }
          }
        }
      }
    }
  },
  "additionalProperties": true
}
