{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "id": "https://specs.openstack.org/openstack/service-types-authority/_downloads/published-schema.json#",
  "type": "object",
  "required": ["services", "version", "sha", "forward", "reverse"],
  "additionalProperties": false,
  "properties": {
    "version": {
      "type": "string",
      "description": "DateTime based version in ISO Format (https://tools.ietf.org/html/rfc3339#section-5.6",
      "format": "date-time"
    },
    "sha": {
      "type": "string",
      "description": "sha of the git commit from which the file was generated",
      "pattern": "^[a-f0-9]{40}"
    },
    "services": {
      "type": "array",
      "items": {
        "$ref": "https://specs.openstack.org/openstack/service-types-authority/_downloads/schema.json#/definitions/service"
      }
    },
    "forward": {
      "type": "object",
      "description": "Mapping of official service-type to historical aliases",
      "patternProperties": {
        "^([a-z][a-z-]*[a-z]+|ec2-api)$": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Ordered list of historical aliases"
        }
      },
      "additionalProperties": false
    },
    "reverse": {
      "type": "object",
      "description": "Reverse mapping of historical alias to official service-type",
      "patternProperties": {
        "^.*$": {
          "type": "string",
          "pattern": "^([a-z][a-z-]*[a-z]+|ec2-api)$",
          "description": "Official service-type"
        }
      }
    },
    "retired": {
      "type": "boolean",
      "description": "Whether the project that provides the API has been retired.",
      "default": false
    },
    "primary_service_by_project": {
      "type": "object",
      "description": "Mapping of project name to the service data for the primary service",
      "patternProperties": {
        "^.*$": {
          "$ref": "https://specs.openstack.org/openstack/service-types-authority/_downloads/schema.json#/definitions/service"
        }
      }
    },
    "all_types_by_service_type": {
      "type": "object",
      "description": "Mapping of official service-type to official type and aliases",
      "patternProperties": {
        "^([a-z][a-z-]*[a-z]+|ec2-api)$": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Ordered list of official type and historical aliases."
        }
      },
      "additionalProperties": false
    },
    "service_types_by_project": {
      "type": "object",
      "description": "Mapping of project name to list of service-types for the project",
      "patternProperties": {
        "^([a-z][a-z-]*[a-z]+|ec2-api)$": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "List of service types associated with a project"
        }
      }
    }
  }
}
