{
  "$id": "https://raw.githubusercontent.com/finos-labs/architecture-as-code/main/calm/draft/2024-04/meta/core.json",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "defs": {
    "authentication": {
      "enum": [
        "Basic",
        "OAuth2",
        "Kerberos",
        "SPNEGO",
        "Certificate"
      ]
    },
    "composed-of-type": {
      "properties": {
        "container": {
          "type": "string"
        },
        "nodes": {
          "items": {
            "type": "string"
          },
          "minItems": 1,
          "type": "array"
        }
      },
      "required": [
        "container",
        "nodes"
      ],
      "type": "object"
    },
    "connects-type": {
      "properties": {
        "destination": {
          "$ref": "interface.json#/defs/node-interface"
        },
        "source": {
          "$ref": "interface.json#/defs/node-interface"
        }
      },
      "required": [
        "source",
        "destination"
      ],
      "type": "object"
    },
    "data-classification": {
      "enum": [
        "Public",
        "Confidential",
        "Highly Restricted",
        "MNPI",
        "PII"
      ]
    },
    "deployed-in-type": {
      "properties": {
        "container": {
          "type": "string"
        },
        "nodes": {
          "items": {
            "type": "string"
          },
          "minItems": 1,
          "type": "array"
        }
      },
      "type": "object"
    },
    "interacts-type": {
      "properties": {
        "actor": {
          "type": "string"
        },
        "nodes": {
          "items": {
            "type": "string"
          },
          "minItems": 1,
          "type": "array"
        }
      },
      "required": [
        "actor",
        "nodes"
      ],
      "type": "object"
    },
    "node": {
      "additionalProperties": true,
      "properties": {
        "data-classification": {
          "$ref": "#/defs/data-classification"
        },
        "description": {
          "type": "string"
        },
        "detailed-architecture": {
          "type": "string"
        },
        "instance": {
          "type": "string"
        },
        "interfaces": {
          "items": {
            "$ref": "interface.json#/defs/interface-type"
          },
          "type": "array"
        },
        "name": {
          "type": "string"
        },
        "node-type": {
          "$ref": "#/defs/node-type-definition"
        },
        "run-as": {
          "type": "string"
        },
        "unique-id": {
          "type": "string"
        }
      },
      "required": [
        "unique-id",
        "node-type",
        "name",
        "description"
      ],
      "type": "object"
    },
    "node-type-definition": {
      "enum": [
        "actor",
        "system",
        "service",
        "database",
        "internal-network",
        "ldap",
        "webclient"
      ]
    },
    "protocol": {
      "enum": [
        "HTTP",
        "HTTPS",
        "FTP",
        "SFTP",
        "JDBC",
        "WebSocket",
        "SocketIO",
        "LDAP",
        "AMQP",
        "TLS",
        "mTLS",
        "TCP"
      ]
    },
    "relationship": {
      "additionalProperties": true,
      "properties": {
        "authentication": {
          "$ref": "#/defs/authentication"
        },
        "description": {
          "type": "string"
        },
        "protocol": {
          "$ref": "#/defs/protocol"
        },
        "relationship-type": {
          "oneOf": [
            {
              "required": [
                "deployed-in"
              ]
            },
            {
              "required": [
                "composed-of"
              ]
            },
            {
              "required": [
                "interacts"
              ]
            },
            {
              "required": [
                "connects"
              ]
            }
          ],
          "properties": {
            "composed-of": {
              "$ref": "#/defs/composed-of-type"
            },
            "connects": {
              "$ref": "#/defs/connects-type"
            },
            "deployed-in": {
              "$ref": "#/defs/deployed-in-type"
            },
            "interacts": {
              "$ref": "#/defs/interacts-type"
            }
          },
          "type": "object"
        },
        "unique-id": {
          "type": "string"
        }
      },
      "required": [
        "unique-id",
        "relationship-type"
      ],
      "type": "object"
    }
  },
  "properties": {
    "nodes": {
      "items": {
        "$ref": "#/defs/node"
      },
      "type": "array"
    },
    "relationships": {
      "items": {
        "$ref": "#/defs/relationship"
      },
      "type": "array"
    }
  },
  "title": "Common Architecture Language Model (CALM) Vocab"
}