{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "Market Pulse configuration",
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "protocol": {
      "type": "string",
      "default": "capp.market-config.v1",
      "const": "capp.market-config.v1"
    },
    "providerMode": {
      "type": "string",
      "default": "jupiter",
      "enum": [
        "jupiter",
        "http-candles",
        "manual"
      ]
    },
    "apiKey": {
      "type": "string",
      "default": "",
      "maxLength": 2048,
      "pattern": "^[^\\r\\n]*$"
    },
    "adapterUrl": {
      "type": "string",
      "default": "",
      "maxLength": 2048
    },
    "adapterToken": {
      "type": "string",
      "default": "",
      "maxLength": 2048,
      "pattern": "^[^\\r\\n]*$"
    },
    "symbols": {
      "type": "array",
      "minItems": 1,
      "maxItems": 50,
      "items": {
        "type": "object",
        "required": [
          "id",
          "label"
        ],
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^[A-Za-z0-9._:-]{1,96}$"
          },
          "label": {
            "type": "string",
            "minLength": 1,
            "maxLength": 64
          }
        }
      }
    },
    "pollMs": {
      "type": "integer",
      "default": 15000,
      "minimum": 1000,
      "maximum": 300000
    },
    "rateMode": {
      "type": "string",
      "default": "conservative",
      "enum": [
        "conservative",
        "custom"
      ]
    },
    "budgetPerMinute": {
      "type": "integer",
      "default": 30,
      "minimum": 1,
      "maximum": 6000
    },
    "candleMs": {
      "type": "integer",
      "default": 15000,
      "minimum": 1000,
      "maximum": 3600000
    },
    "chartType": {
      "type": "string",
      "default": "candles",
      "enum": [
        "candles",
        "ohlc",
        "line",
        "area"
      ]
    },
    "historyLimit": {
      "type": "integer",
      "default": 2400,
      "minimum": 100,
      "maximum": 10000
    },
    "staleAfterMs": {
      "type": "integer",
      "default": 60000,
      "minimum": 15000,
      "maximum": 600000
    },
    "requestTimeoutMs": {
      "type": "integer",
      "default": 10000,
      "minimum": 1000,
      "maximum": 30000
    },
    "showVolume": {
      "type": "boolean",
      "default": true
    },
    "showMA": {
      "type": "boolean",
      "default": false
    },
    "showEMA": {
      "type": "boolean",
      "default": false
    },
    "enabled": {
      "type": "boolean",
      "default": true
    },
    "remember": {
      "type": "boolean",
      "default": true
    },
    "extensions": {
      "type": "object",
      "default": {}
    }
  }
}
