{
  "description": "Channel represents a generic Channel. It is normally used when we want a Channel, but do not need a specific Channel implementation.",
  "type": "object",
  "properties": {
    "spec": {
      "description": "Spec defines the desired state of the Channel.",
      "type": "object",
      "properties": {
        "channelTemplate": {
          "description": "ChannelTemplate specifies which Channel CRD to use to create the CRD Channel backing this Channel. This is immutable after creation. Normally this is set by the Channel defaulter, not directly by the user.",
          "type": "object",
          "properties": {
            "apiVersion": {
              "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
              "type": "string"
            },
            "kind": {
              "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
              "type": "string"
            },
            "spec": {
              "description": "Spec defines the Spec to use for each channel created. Passed in verbatim to the Channel CRD as Spec section.",
              "type": "object",
              "x-kubernetes-preserve-unknown-fields": true
            }
          },
          "additionalProperties": false
        },
        "delivery": {
          "description": "DeliverySpec contains the default delivery spec for each subscription to this Channelable. Each subscription delivery spec, if any, overrides this global delivery spec.",
          "type": "object",
          "properties": {
            "backoffDelay": {
              "description": "BackoffDelay is the delay before retrying. More information on Duration format: - https://www.iso.org/iso-8601-date-and-time-format.html - https://en.wikipedia.org/wiki/ISO_8601  For linear policy, backoff delay is backoffDelay*<numberOfRetries>. For exponential policy, backoff delay is backoffDelay*2^<numberOfRetries>.",
              "type": "string"
            },
            "backoffPolicy": {
              "description": "BackoffPolicy is the retry backoff policy (linear, exponential).",
              "type": "string"
            },
            "deadLetterSink": {
              "description": "DeadLetterSink is the sink receiving event that could not be sent to a destination.",
              "type": "object",
              "properties": {
                "ref": {
                  "description": "Ref points to an Addressable.",
                  "type": "object",
                  "properties": {
                    "apiVersion": {
                      "description": "API version of the referent.",
                      "type": "string"
                    },
                    "kind": {
                      "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
                      "type": "string"
                    },
                    "name": {
                      "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names",
                      "type": "string"
                    },
                    "namespace": {
                      "description": "Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/ This is optional field, it gets defaulted to the object holding it if left out.",
                      "type": "string"
                    }
                  },
                  "additionalProperties": false
                },
                "uri": {
                  "description": "URI can be an absolute URL(non-empty scheme and non-empty host) pointing to the target or a relative URI. Relative URIs will be resolved using the base URI retrieved from Ref.",
                  "type": "string"
                },
                "CACerts": {
                  "description": "Certification Authority (CA) certificates in PEM format that the source trusts when sending events to the sink.",
                  "type": "string"
                },
                "audience": {
                  "description": "Audience is the OIDC audience. This only needs to be set if the target is not an Addressable and thus the Audience can't be received from the target itself. If specified, it takes precedence over the target's Audience.",
                  "type": "string"
                }
              },
              "additionalProperties": false
            },
            "retry": {
              "description": "Retry is the minimum number of retries the sender should attempt when sending an event before moving it to the dead letter sink.",
              "type": "integer",
              "format": "int32"
            }
          },
          "x-kubernetes-preserve-unknown-fields": true,
          "additionalProperties": false
        },
        "subscribers": {
          "description": "This is the list of subscriptions for this subscribable.",
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "delivery": {
                "description": "DeliverySpec contains options controlling the event delivery",
                "type": "object",
                "properties": {
                  "backoffDelay": {
                    "description": "BackoffDelay is the delay before retrying. More information on Duration format: - https://www.iso.org/iso-8601-date-and-time-format.html - https://en.wikipedia.org/wiki/ISO_8601  For linear policy, backoff delay is backoffDelay*<numberOfRetries>. For exponential policy, backoff delay is backoffDelay*2^<numberOfRetries>.",
                    "type": "string"
                  },
                  "backoffPolicy": {
                    "description": "BackoffPolicy is the retry backoff policy (linear, exponential).",
                    "type": "string"
                  },
                  "deadLetterSink": {
                    "description": "DeadLetterSink is the sink receiving event that could not be sent to a destination.",
                    "type": "object",
                    "properties": {
                      "ref": {
                        "description": "Ref points to an Addressable.",
                        "type": "object",
                        "properties": {
                          "apiVersion": {
                            "description": "API version of the referent.",
                            "type": "string"
                          },
                          "kind": {
                            "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
                            "type": "string"
                          },
                          "name": {
                            "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names",
                            "type": "string"
                          },
                          "namespace": {
                            "description": "Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/ This is optional field, it gets defaulted to the object holding it if left out.",
                            "type": "string"
                          }
                        },
                        "additionalProperties": false
                      },
                      "uri": {
                        "description": "URI can be an absolute URL(non-empty scheme and non-empty host) pointing to the target or a relative URI. Relative URIs will be resolved using the base URI retrieved from Ref.",
                        "type": "string"
                      }
                    },
                    "additionalProperties": false
                  },
                  "retry": {
                    "description": "Retry is the minimum number of retries the sender should attempt when sending an event before moving it to the dead letter sink.",
                    "type": "integer",
                    "format": "int32"
                  }
                },
                "x-kubernetes-preserve-unknown-fields": true,
                "additionalProperties": false
              },
              "generation": {
                "description": "Generation of the origin of the subscriber with uid:UID.",
                "type": "integer",
                "format": "int64"
              },
              "name": {
                "description": "The name of the subscription",
                "type": "string"
              },
              "replyUri": {
                "description": "ReplyURI is the endpoint for the reply",
                "type": "string"
              },
              "replyCACerts": {
                "description": "Certification Authority (CA) certificates in PEM format according to https://www.rfc-editor.org/rfc/rfc7468.",
                "type": "string"
              },
              "replyAudience": {
                "description": "ReplyAudience is the OIDC audience for the replyUri.",
                "type": "string"
              },
              "subscriberUri": {
                "description": "SubscriberURI is the endpoint for the subscriber",
                "type": "string"
              },
              "subscriberCACerts": {
                "description": "Certification Authority (CA) certificates in PEM format according to https://www.rfc-editor.org/rfc/rfc7468.",
                "type": "string"
              },
              "subscriberAudience": {
                "description": "SubscriberAudience is the OIDC audience for the subscriberUri.",
                "type": "string"
              },
              "uid": {
                "description": "UID is used to understand the origin of the subscriber.",
                "type": "string"
              },
              "auth": {
                "description": "Auth provides the relevant information for OIDC authentication.",
                "type": "object",
                "properties": {
                  "serviceAccountName": {
                    "description": "ServiceAccountName is the name of the generated service account used for this components OIDC authentication.",
                    "type": "string"
                  },
                  "serviceAccountNames": {
                    "description": "ServiceAccountNames is the list of names of the generated service accounts used for this components OIDC authentication.",
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  }
                },
                "additionalProperties": false
              }
            },
            "additionalProperties": false
          }
        }
      },
      "additionalProperties": false
    },
    "status": {
      "description": "Status represents the current state of the Channel. This data may be out of date.",
      "type": "object",
      "properties": {
        "address": {
          "description": "Channel is Addressable. It exposes the endpoint as an URI to get events delivered into the Channel mesh.",
          "type": "object",
          "properties": {
            "name": {
              "type": "string"
            },
            "url": {
              "type": "string"
            },
            "CACerts": {
              "type": "string"
            },
            "audience": {
              "type": "string"
            }
          },
          "additionalProperties": false
        },
        "addresses": {
          "description": "Channel is Addressable. It exposes the endpoints as URIs to get events delivered into the Channel mesh.",
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "name": {
                "type": "string"
              },
              "url": {
                "type": "string"
              },
              "CACerts": {
                "type": "string"
              },
              "audience": {
                "type": "string"
              }
            },
            "additionalProperties": false
          }
        },
        "annotations": {
          "description": "Annotations is additional Status fields for the Resource to save some additional State as well as convey more information to the user. This is roughly akin to Annotations on any k8s resource, just the reconciler conveying richer information outwards.",
          "type": "object",
          "x-kubernetes-preserve-unknown-fields": true
        },
        "channel": {
          "description": "Channel is an KReference to the Channel CRD backing this Channel.",
          "type": "object",
          "properties": {
            "apiVersion": {
              "description": "API version of the referent.",
              "type": "string"
            },
            "kind": {
              "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
              "type": "string"
            },
            "name": {
              "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names",
              "type": "string"
            },
            "namespace": {
              "description": "Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/ This is optional field, it gets defaulted to the object holding it if left out.",
              "type": "string"
            }
          },
          "additionalProperties": false
        },
        "policies": {
          "description": "List of applied EventPolicies",
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "apiVersion": {
                "description": "The API version of the applied EventPolicy. This indicates, which version of EventPolicy is supported by the resource.",
                "type": "string"
              },
              "name": {
                "description": "The name of the applied EventPolicy",
                "type": "string"
              }
            },
            "additionalProperties": false
          }
        },
        "conditions": {
          "description": "Conditions the latest available observations of a resource's current state.",
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "type",
              "status"
            ],
            "properties": {
              "lastTransitionTime": {
                "description": "LastTransitionTime is the last time the condition transitioned from one status to another. We use VolatileTime in place of metav1.Time to exclude this from creating equality.Semantic differences (all other things held constant).",
                "type": "string"
              },
              "message": {
                "description": "A human readable message indicating details about the transition.",
                "type": "string"
              },
              "reason": {
                "description": "The reason for the condition's last transition.",
                "type": "string"
              },
              "severity": {
                "description": "Severity with which to treat failures of this type of condition. When this is not specified, it defaults to Error.",
                "type": "string"
              },
              "status": {
                "description": "Status of the condition, one of True, False, Unknown.",
                "type": "string"
              },
              "type": {
                "description": "Type of condition.",
                "type": "string"
              }
            },
            "additionalProperties": false
          }
        },
        "deadLetterChannel": {
          "description": "DeadLetterChannel is a KReference and is set by the channel when it supports native error handling via a channel Failed messages are delivered here.",
          "type": "object",
          "properties": {
            "apiVersion": {
              "description": "API version of the referent.",
              "type": "string"
            },
            "kind": {
              "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
              "type": "string"
            },
            "name": {
              "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names",
              "type": "string"
            },
            "namespace": {
              "description": "Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/ This is optional field, it gets defaulted to the object holding it if left out.",
              "type": "string"
            }
          },
          "additionalProperties": false
        },
        "deadLetterSinkUri": {
          "description": "DeadLetterSinkURI is the resolved URI of the dead letter sink that will be used as a fallback when not specified by Triggers.",
          "type": "string"
        },
        "deadLetterSinkCACerts": {
          "description": "Certification Authority (CA) certificates in PEM format according to https://www.rfc-editor.org/rfc/rfc7468.",
          "type": "string"
        },
        "deadLetterSinkAudience": {
          "description": "OIDC audience of the dead letter sink.",
          "type": "string"
        },
        "observedGeneration": {
          "description": "ObservedGeneration is the 'Generation' of the Service that was last processed by the controller.",
          "type": "integer",
          "format": "int64"
        },
        "subscribers": {
          "description": "This is the list of subscription's statuses for this channel.",
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "message": {
                "description": "A human readable message indicating details of Ready status.",
                "type": "string"
              },
              "observedGeneration": {
                "description": "Generation of the origin of the subscriber with uid:UID.",
                "type": "integer",
                "format": "int64"
              },
              "ready": {
                "description": "Status of the subscriber.",
                "type": "string"
              },
              "uid": {
                "description": "UID is used to understand the origin of the subscriber.",
                "type": "string"
              },
              "auth": {
                "description": "Auth provides the relevant information for OIDC authentication.",
                "type": "object",
                "properties": {
                  "serviceAccountName": {
                    "description": "ServiceAccountName is the name of the generated service account used for this components OIDC authentication.",
                    "type": "string"
                  },
                  "serviceAccountNames": {
                    "description": "ServiceAccountNames is the list of names of the generated service accounts used for this components OIDC authentication.",
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  }
                },
                "additionalProperties": false
              }
            },
            "additionalProperties": false
          }
        }
      },
      "additionalProperties": false
    }
  }
}
