{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "description": "Schema for the skill configuration file.",
  "additionalProperties": false,
  "type": "object",
  "required": [
    "name",
    "author",
    "version",
    "license",
    "protocols"
  ],
  "properties": {
    "name": {
      "$ref": "definitions.json#/definitions/resource_name"
    },
    "author": {
      "$ref": "definitions.json#/definitions/author"
    },
    "version": {
      "$ref": "definitions.json#/definitions/version"
    },
    "license": {
      "type": "string"
    },
    "fingerprint": {
      "type": "string"
    },
    "protocols": {
      "type": "array",
      "additionalProperties": false,
      "uniqueItems": true,
      "items": {
        "$ref": "definitions.json#/definitions/public_id"
      }
    },
    "handlers": {
      "type": "object",
      "additionalProperties": false,
      "uniqueItems": true,
      "patternProperties": {
        "^[^\\d\\W]\\w*\\Z": {
          "$ref": "#/definitions/handler"
        }
      }
    },
    "behaviours": {
      "type": "object",
      "uniqueItems": true,
      "patternProperties": {
        "^[^\\d\\W]\\w*\\Z": {
          "$ref": "#/definitions/behaviour"
        }
      }
    },
    "models": {
      "type": "object",
      "uniqueItems": true,
      "patternProperties": {
        "^[^\\d\\W]\\w*\\Z": {
          "$ref": "#/definitions/model"
        }
      }
    },
    "ledgers": {
      "type": "array",
      "uniqueItems": true,
      "items": {
        "type": "string"
      }
    },
    "dependencies": {
      "$ref": "definitions.json#/definitions/dependencies"
    },
    "description": {
      "type": "string"
    }
  },
  "definitions": {
    "behaviour": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "class_name"
      ],
      "properties": {
        "class_name": {
          "type": "string"
        },
        "args": {
          "type": "object"
        }
      }
    },
    "handler": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "class_name"
      ],
      "properties": {
        "class_name": {
          "type": "string"
        },
        "args": {
          "type": "object"
        }
      }
    },
    "model": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "class_name"
      ],
      "properties": {
        "class_name": {
          "type": "string"
        },
        "args": {
          "type": "object"
        }
      }
    }
  }
}
