{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://www.therealer.com/docs/api/schemas/mqtt-catalog-response.schema.json",
  "title": "Realer MQTT catalog response",
  "type": "object",
  "required": ["code", "mqtt", "mqtt_routes"],
  "properties": {
    "code": {
      "type": "integer",
      "enum": [2000]
    },
    "mqtt": {
      "type": "object",
      "required": ["broker_url", "protocol", "client_id", "qos", "retain_policy", "feed_data_ack_topic", "feed_data_ack_subscribe_scope", "credential_endpoint"],
      "properties": {
        "broker_url": { "type": "string" },
        "protocol": { "type": "string" },
        "client_id": { "type": "string" },
        "qos": { "type": "integer" },
        "retain_policy": { "type": "string" },
        "feed_data_ack_topic": { "type": "string" },
        "feed_data_ack_subscribe_scope": { "type": "string" },
        "credential_endpoint": {
          "type": "object",
          "required": ["endpoint", "http_method", "body"],
          "properties": {
            "endpoint": { "type": "string" },
            "http_method": { "type": "string" },
            "body": { "type": "object" }
          },
          "additionalProperties": true
        }
      },
      "additionalProperties": true
    },
    "mqtt_routes": {
      "type": "array",
      "items": {
        "type": "object",
        "required": ["id", "state", "acl_version", "source_type", "source_id", "resource_id", "mqtt"],
        "oneOf": [
          {
            "properties": {
              "source_type": { "const": "command" },
              "mqtt": {
                "type": "object",
                "required": ["feed_data_topic", "feed_data_publish_scope", "desired_topic", "desired_subscribe_scope"]
              }
            }
          },
          {
            "properties": {
              "source_type": { "const": "sensor" },
              "mqtt": {
                "type": "object",
                "required": ["feed_data_topic", "feed_data_publish_scope"]
              }
            }
          }
        ],
        "properties": {
          "id": { "type": "string" },
          "state": { "type": "string" },
          "acl_version": { "type": "integer" },
          "source_type": {
            "type": "string",
            "enum": ["command", "sensor"]
          },
          "source_id": { "type": "string" },
          "resource_id": { "type": "string" },
          "mqtt": {
            "type": "object",
            "required": ["feed_data_topic", "feed_data_publish_scope"],
            "properties": {
              "feed_data_topic": { "type": "string" },
              "feed_data_publish_scope": {
                "type": "string",
                "enum": ["iot:mqtt:feed-data:write"]
              },
              "desired_topic": { "type": "string" },
              "desired_subscribe_scope": {
                "type": "string",
                "enum": ["iot:mqtt:desired:read"]
              }
            },
            "additionalProperties": true
          }
        },
        "additionalProperties": true
      }
    }
  },
  "additionalProperties": true
}
