{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "type": "object",
  "additionalProperties": false,
  "required": [
    "id",
    "features",
    "direction",
    "address"
  ],
  "properties": {
    "id": {
      "type": "pubkey",
      "description": "the peer we connected to"
    },
    "features": {
      "type": "hex",
      "description": "BOLT 9 features bitmap offered by peer"
    },
    "direction": {
      "type": "string",
      "enum": [
        "in",
        "out"
      ],
      "description": "Whether they initiated connection or we did"
    },
    "address": {
      "type": "object",
      "description": "Address information (mainly useful if **direction** is *out*)",
      "additionalProperties": true,
      "required": [
        "type"
      ],
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "local socket",
            "ipv4",
            "ipv6",
            "torv2",
            "torv3"
          ],
          "description": "Type of connection (*torv2*/*torv3* only if **direction** is *out*)"
        }
      },
      "allOf": [
        {
          "if": {
            "properties": {
              "type": {
                "type": "string",
                "enum": [
                  "local socket"
                ]
              }
            }
          },
          "then": {
            "additionalProperties": false,
            "required": [
              "socket"
            ],
            "properties": {
              "type": {},
              "socket": {
                "type": "string",
                "description": "socket filename"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "type": "string",
                "enum": [
                  "ipv4",
                  "ipv6",
                  "torv2",
                  "torv3"
                ]
              }
            }
          },
          "then": {
            "additionalProperties": false,
            "required": [
              "address",
              "port"
            ],
            "properties": {
              "type": {},
              "address": {
                "type": "string",
                "description": "address in expected format for **type**"
              },
              "port": {
                "type": "u16",
                "description": "port number"
              }
            }
          }
        }
      ]
    }
  }
}
