{
  "type": "object",
  "properties": {
    "providerId": {
      "type": "string"
    },
    "searchPageRegexp": {
      "type": "string",
      "title": "Search Page Regular Expression",
      "description": "A regular expression which matches the search page of the provider."
    },
    "includeParams": {
      "type": "array",
      "title": "Included Search Page Params",
      "description": "An array of params that should be included in the URL",
      "items": {
        "type": "object",
        "properties": {
          "key": {
            "type": "string",
            "description": "The key corresponding to the query parameter that contains what type of search page is being shown"
          },
          "values": {
            "type": "array",
            "description": "An array of possible values for the query parameter",
            "items": {
              "type": "string",
              "description": "The value corresponding to the query parameter that should be matched against"
            }
          },
          "canBeMissing": {
            "type": "boolean",
            "description": "Indicates if the parameter can be missing"
          }
        },
        "required": ["key", "values"]
      }
    },
    "filter_expression": {
      "type": "string",
      "title": "Filter Expression",
      "description": "A JEXL to filter records",
      "pattern": "^[a-zA-Z0-9-_=!\"{} .<>|&()]*$"
    },
    "excludeParams": {
      "type": "array",
      "title": "Exclude Parameters",
      "description": "An array of parameters that should be excluded from the search query",
      "items": {
        "type": "object",
        "properties": {
          "key": {
            "type": "string",
            "description": "The key corresponding to the query parameter that should not be included"
          },
          "values": {
            "type": "array",
            "description": "An array of possible values to exclude for the query parameter",
            "items": {
              "type": "string",
              "description": "The value corresponding to the query parameter that should not be included"
            }
          }
        },
        "required": ["key"]
      }
    }
  },
  "required": ["providerId", "searchPageRegexp"]
}
