{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "type": "object",
  "properties": {
    "catalog": {
      "type": "object",
      "properties": {
        "processors": {
          "type": "object",
          "properties": {
            "awsOrganization": {
              "type": "object",
              "properties": {
                "provider": {
                  "type": "object",
                  "properties": {
                    "roleArn": {
                      "type": "string",
                      "description": "The role to be assumed by this processor",
                      "deprecated": "Use `accountId` instead."
                    },
                    "accountId": {
                      "type": "string",
                      "description": "The AWS account ID to query for organizational data"
                    }
                  }
                }
              },
              "required": [
                "provider"
              ],
              "description": "AwsOrganizationCloudAccountProcessor configuration"
            }
          }
        },
        "providers": {
          "type": "object",
          "properties": {
            "awsS3": {
              "anyOf": [
                {
                  "type": "object",
                  "properties": {
                    "bucketName": {
                      "type": "string",
                      "description": "(Required) AWS S3 Bucket Name"
                    },
                    "prefix": {
                      "type": "string",
                      "description": "(Optional) AWS S3 Object key prefix If not set, all keys will be accepted, no filtering will be applied."
                    },
                    "region": {
                      "type": "string",
                      "description": "(Optional) AWS Region. If not set, AWS_REGION environment variable or aws config file will be used."
                    },
                    "accountId": {
                      "type": "string",
                      "description": "(Optional) AWS Account id. If not set, main account is used."
                    },
                    "schedule": {
                      "type": "object",
                      "properties": {
                        "frequency": {
                          "anyOf": [
                            {
                              "type": "object",
                              "properties": {
                                "cron": {
                                  "type": "string",
                                  "description": "A crontab style string."
                                }
                              },
                              "required": [
                                "cron"
                              ]
                            },
                            {
                              "type": "string"
                            },
                            {
                              "type": "object",
                              "properties": {
                                "years": {
                                  "type": "number"
                                },
                                "months": {
                                  "type": "number"
                                },
                                "weeks": {
                                  "type": "number"
                                },
                                "days": {
                                  "type": "number"
                                },
                                "hours": {
                                  "type": "number"
                                },
                                "minutes": {
                                  "type": "number"
                                },
                                "seconds": {
                                  "type": "number"
                                },
                                "milliseconds": {
                                  "type": "number"
                                }
                              },
                              "description": "Human friendly durations object."
                            },
                            {
                              "type": "object",
                              "properties": {
                                "trigger": {
                                  "type": "string",
                                  "const": "manual"
                                }
                              },
                              "required": [
                                "trigger"
                              ]
                            }
                          ],
                          "description": "How often you want the task to run. The system does its best to avoid overlapping invocations."
                        },
                        "timeout": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "object",
                              "properties": {
                                "years": {
                                  "type": "number"
                                },
                                "months": {
                                  "type": "number"
                                },
                                "weeks": {
                                  "type": "number"
                                },
                                "days": {
                                  "type": "number"
                                },
                                "hours": {
                                  "type": "number"
                                },
                                "minutes": {
                                  "type": "number"
                                },
                                "seconds": {
                                  "type": "number"
                                },
                                "milliseconds": {
                                  "type": "number"
                                }
                              },
                              "description": "Human friendly durations object."
                            }
                          ],
                          "description": "The maximum amount of time that a single task invocation can take, before it's considered timed out and gets \"released\" such that a new invocation is permitted to take place (possibly, then, on a different worker)."
                        },
                        "initialDelay": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "object",
                              "properties": {
                                "years": {
                                  "type": "number"
                                },
                                "months": {
                                  "type": "number"
                                },
                                "weeks": {
                                  "type": "number"
                                },
                                "days": {
                                  "type": "number"
                                },
                                "hours": {
                                  "type": "number"
                                },
                                "minutes": {
                                  "type": "number"
                                },
                                "seconds": {
                                  "type": "number"
                                },
                                "milliseconds": {
                                  "type": "number"
                                }
                              },
                              "description": "Human friendly durations object."
                            }
                          ],
                          "description": "The amount of time that should pass before the first invocation happens."
                        },
                        "scope": {
                          "type": "string",
                          "enum": [
                            "global",
                            "local"
                          ],
                          "description": "Sets the scope of concurrency control / locking to apply for invocations of this task."
                        }
                      },
                      "required": [
                        "frequency",
                        "timeout"
                      ],
                      "description": "(Optional) TaskScheduleDefinition for the refresh."
                    }
                  },
                  "required": [
                    "bucketName"
                  ]
                },
                {
                  "type": "object",
                  "additionalProperties": {
                    "type": "object",
                    "properties": {
                      "bucketName": {
                        "type": "string",
                        "description": "(Required) AWS S3 Bucket Name"
                      },
                      "prefix": {
                        "type": "string",
                        "description": "(Optional) AWS S3 Object key prefix If not set, all keys will be accepted, no filtering will be applied."
                      },
                      "region": {
                        "type": "string",
                        "description": "(Optional) AWS Region. If not set, AWS_REGION environment variable or aws config file will be used."
                      },
                      "accountId": {
                        "type": "string",
                        "description": "(Optional) AWS Account id. If not set, main account is used."
                      },
                      "schedule": {
                        "type": "object",
                        "properties": {
                          "frequency": {
                            "anyOf": [
                              {
                                "type": "object",
                                "properties": {
                                  "cron": {
                                    "type": "string",
                                    "description": "A crontab style string."
                                  }
                                },
                                "required": [
                                  "cron"
                                ]
                              },
                              {
                                "type": "string"
                              },
                              {
                                "type": "object",
                                "properties": {
                                  "years": {
                                    "type": "number"
                                  },
                                  "months": {
                                    "type": "number"
                                  },
                                  "weeks": {
                                    "type": "number"
                                  },
                                  "days": {
                                    "type": "number"
                                  },
                                  "hours": {
                                    "type": "number"
                                  },
                                  "minutes": {
                                    "type": "number"
                                  },
                                  "seconds": {
                                    "type": "number"
                                  },
                                  "milliseconds": {
                                    "type": "number"
                                  }
                                },
                                "description": "Human friendly durations object."
                              },
                              {
                                "type": "object",
                                "properties": {
                                  "trigger": {
                                    "type": "string",
                                    "const": "manual"
                                  }
                                },
                                "required": [
                                  "trigger"
                                ]
                              }
                            ],
                            "description": "How often you want the task to run. The system does its best to avoid overlapping invocations."
                          },
                          "timeout": {
                            "anyOf": [
                              {
                                "type": "string"
                              },
                              {
                                "type": "object",
                                "properties": {
                                  "years": {
                                    "type": "number"
                                  },
                                  "months": {
                                    "type": "number"
                                  },
                                  "weeks": {
                                    "type": "number"
                                  },
                                  "days": {
                                    "type": "number"
                                  },
                                  "hours": {
                                    "type": "number"
                                  },
                                  "minutes": {
                                    "type": "number"
                                  },
                                  "seconds": {
                                    "type": "number"
                                  },
                                  "milliseconds": {
                                    "type": "number"
                                  }
                                },
                                "description": "Human friendly durations object."
                              }
                            ],
                            "description": "The maximum amount of time that a single task invocation can take, before it's considered timed out and gets \"released\" such that a new invocation is permitted to take place (possibly, then, on a different worker)."
                          },
                          "initialDelay": {
                            "anyOf": [
                              {
                                "type": "string"
                              },
                              {
                                "type": "object",
                                "properties": {
                                  "years": {
                                    "type": "number"
                                  },
                                  "months": {
                                    "type": "number"
                                  },
                                  "weeks": {
                                    "type": "number"
                                  },
                                  "days": {
                                    "type": "number"
                                  },
                                  "hours": {
                                    "type": "number"
                                  },
                                  "minutes": {
                                    "type": "number"
                                  },
                                  "seconds": {
                                    "type": "number"
                                  },
                                  "milliseconds": {
                                    "type": "number"
                                  }
                                },
                                "description": "Human friendly durations object."
                              }
                            ],
                            "description": "The amount of time that should pass before the first invocation happens."
                          },
                          "scope": {
                            "type": "string",
                            "enum": [
                              "global",
                              "local"
                            ],
                            "description": "Sets the scope of concurrency control / locking to apply for invocations of this task."
                          }
                        },
                        "required": [
                          "frequency",
                          "timeout"
                        ],
                        "description": "(Optional) TaskScheduleDefinition for the refresh."
                      }
                    },
                    "required": [
                      "bucketName"
                    ]
                  }
                }
              ],
              "description": "AwsS3EntityProvider configuration\n\nUses \"default\" as default id for the single config variant."
            }
          }
        }
      }
    }
  }
}
