{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "minLength": 1,
      "maxLength": 160,
      "pattern": "^[a-zA-Z0-9_.:-]+$"
    },
    "namespace": {
      "type": "string",
      "minLength": 1,
      "maxLength": 100,
      "pattern": "^[a-zA-Z0-9_.:-]+$"
    },
    "role": {
      "default": "source",
      "type": "string",
      "enum": ["source","destination","ontology_store","event_source","event_sink","api","file_store","search_index","graph_store","other"]
    },
    "pluginCapabilityInstallationId": {
      "anyOf": [{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]
    },
    "contractKind": {
      "default": "source_stream",
      "type": "string",
      "enum": ["source_stream","source_query","read","write","call_api","subscribe_events","publish_events","ontology_fact_store","transactional_table"]
    },
    "target": {
      "type": "object",
      "propertyNames": {"type":"string"},
      "additionalProperties": {}
    },
    "schemaHints": {
      "default": {"primaryKey":[],"columns":[]},
      "type": "object",
      "properties": {"primaryKey":{"default":[],"type":"array","items":{"type":"string","minLength":1}},"columns":{"default":[],"type":"array","items":{"type":"string","minLength":1}}},
      "additionalProperties": {}
    },
    "freshness": {
      "anyOf": [{"type":"string","minLength":1,"maxLength":100},{"type":"null"}]
    },
    "ownerTeam": {
      "anyOf": [{"type":"string","minLength":1,"maxLength":100},{"type":"null"}]
    },
    "trustRank": {
      "default": "medium",
      "type": "string",
      "enum": ["low","medium","high"]
    },
    "description": {
      "default": "",
      "type": "string",
      "maxLength": 1000
    },
    "accepts": {
      "anyOf": [{"type":"string","minLength":1,"maxLength":100},{"type":"null"}]
    },
    "emits": {
      "default": "parquet",
      "type": "string",
      "minLength": 1,
      "maxLength": 100
    },
    "idempotencyKey": {
      "type": "string",
      "minLength": 8,
      "maxLength": 200
    }
  },
  "required": [
    "name",
    "namespace",
    "target",
    "idempotencyKey"
  ],
  "additionalProperties": false
}
