{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "getToken": { "format": "function" },
    "getSessionSecret": { "format": "function" },
    "getRouterConfig": { "format": "function" },
    "workingDir": { "type": "string", "minLength": 1 },
    "port": { "type": ["string", "integer"], "minLength": 1, "format": "valid-port" },
    "httpsOptions": {
      "type" : ["object"]
    },
    "extensions": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "insertMiddleware": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
              "first": { "$ref": "#/definitions/middlewareList" },
              "beforeRequestHandler": { "$ref": "#/definitions/middlewareList" },
              "beforeErrorHandler": { "$ref": "#/definitions/middlewareList" },
              "firstWS": { "$ref": "#/definitions/middlewareList" },
              "beforeRequestHandlerWS": { "$ref": "#/definitions/middlewareList" }
            }
          }
        }
      }
    },
    "xsappConfig": { "type": "object" }
  },
  "definitions": {
    "middlewareList": {
      "type": "array",
      "items": {
        "anyOf": [
          { "format": "function" },
          {
            "type": "object",
            "additionalProperties": false,
            "properties": {
              "path": { "type": "string", "minLength": 1 },
              "handler": { "format": "function" }
            },
            "required": ["handler"]
          }
        ]
      }
    }
  }
}
