{ "groups": { "messagegroups": { "$include": "../message/model.json#/groups/messagegroups" }, "endpoints": { "singular": "endpoint", "modelversion": "1.0-rc1", "compatiblewith": "https://xregistry.io/xreg/domains/endpoint/specs/model.json", "attributes": { "usage": { "name": "usage", "type": "string", "description": "Client's expected usage of this endpoint", "enum": [ "subscriber", "consumer", "producer" ], "strict": true }, "channel": { "name": "channel", "type": "string", "description": "The name of the channel" }, "deprecated": { "name": "deprecated", "type": "object", "description": "Indicates whether the endpoint is deprecated", "attributes": { "effective": { "name": "effective", "type": "timestamp", "description": "tbd" }, "removal": { "name": "removal", "type": "timestamp", "description": "tbd" }, "alternative": { "name": "alternative", "type": "url", "description": "tbd" }, "docs": { "name": "docs", "type": "url", "description": "tbd" }, "*": { "name": "*", "type": "any" } } }, "envelope": { "name": "envelope", "type": "string", "description": "Envelope metadata format identifier. If set, all definitions MUST use this format value", "ifvalues": { "CloudEvents/1.0": { "siblingattributes": { "envelopeoptions": { "name": "envelopeoptions", "type": "object", "description": "Envelope metadata constraints", "attributes": { "mode": { "name": "mode", "type": "string", "enum": [ "binary", "structured" ] }, "format": { "name": "format", "type": "string" }, "*": { "name": "*", "type": "any" } } } } } } }, "protocol": { "name": "protocol", "type": "string", "description": "Endpoint protocol identifier. If set, all definitions MUST use this protocol value", "ifvalues": { "AMQP/1.0": { "siblingattributes": { "protocoloptions": { "name": "protocoloptions", "type": "object", "namecharset": "extended", "description": "Configuration information for this endpoint", "attributes": { "endpoints": { "name": "endpoints", "type": "array", "description": "The network addresses that are for communication with the endpoint. The endpoints are ordered by preference, with the first endpoint being the preferred endpoint. Some protocol implementations might not support multiple endpoints, in which case all but the first endpoint might be ignored. Whether the URI just identifies a network host or links directly to a resource managed by the network host is protocol specific", "item": { "type": "object", "attributes": { "url": { "name": "url", "type": "url", "description": "AMQP Addressing URL" }, "*": { "name": "*", "type": "any" } } } }, "authorization": { "name": "authorization", "type": "array", "description": "Authorization options. These are hints for the adapter for interacting with the authorization endpoint. This is not a credentials configuration", "item": { "type": "object", "attributes": { "type": { "name": "type", "type": "string", "description": "The authentication/authorization type. OAuth2, Plain, APIKey, and X509Cert are well-defined" }, "resourceuri": { "name": "resourceuri", "type": "uri", "description": "The resource uri for which authorization shall be granted (if applicable)" }, "authorityuri": { "name": "authorityuri", "type": "uri", "description": "The authority uri where authorization shall be requested (if applicable)" }, "granttypes": { "name": "granttypes", "type": "array", "description": "The grant types that can be requested (if applicable)", "item": { "type": "string" } }, "*": { "name": "*", "type": "any" } } } }, "deployed": { "name": "deployed", "type": "boolean", "description": "If `true`, the endpoint metadata represents a public, live endpoint that is available for communication and a strict validator MAY test the liveness of the endpoint", "required": true, "default": false }, "node": { "name": "node", "type": "string", "description": "The AMQP node name. Commonly the name of a queue or a topic. Corresponds to the 'address' in source or target of the attach frame." }, "durable": { "name": "durable", "type": "boolean", "description": "The AMQP durable flag. Whether the node is durable or transient", "required": true, "default": false }, "link-properties": { "name": "link-properties", "type": "map", "description": "An optional map of AMQP link properties to use with the endpoint", "item": { "type": "string" } }, "connection-properties": { "name": "connection-properties", "type": "map", "description": "An optional map of AMQP connection properties to use with the endpoint", "item": { "type": "string" } }, "distribution-mode": { "name": "distribution-mode", "type": "string", "enum": [ "move", "copy" ], "description": "The AMQP distribution mode for receivers. Can be 'move' or 'copy'. A value of 'move' indicates an exclusive lock on the message. A value of 'copy' indicates a non-exclusive lock on the message", "required": true, "default": "move" }, "connection-capabilities": { "name": "connection-capabilities", "type": "array", "description": "The AMQP capabilities to use with the endpoint", "item": { "type": "string" } }, "node-capabilities": { "name": "node-capabilities", "type": "array", "description": "The AMQP node capabilities to use with the endpoint", "item": { "type": "string" } }, "*": { "name": "*", "type": "any" } } } } }, "MQTT/5.0": { "siblingattributes": { "protocoloptions": { "name": "protocoloptions", "type": "object", "description": "Configuration information for this endpoint", "attributes": { "endpoints": { "name": "endpoints", "type": "array", "description": "The network addresses that are for communication with the endpoint. The endpoints are ordered by preference, with the first endpoint being the preferred endpoint. Some protocol implementations might not support multiple endpoints, in which case all but the first endpoint might be ignored. Whether the URI just identifies a network host or links directly to a resource managed by the network host is protocol specific", "item": { "type": "object", "attributes": { "uri": { "name": "uri", "type": "uri", "description": "MQTT URI (mqtt, mqtts, or ws scheme)" }, "*": { "name": "*", "type": "any" } } } }, "authorization": { "name": "authorization", "type": "array", "description": "Authorization options. These are hints for the adapter for interacting with the authorization endpoint. This is not a credentials configuration", "item": { "type": "object", "attributes": { "type": { "name": "type", "type": "string", "description": "The authentication/authorization type. OAuth2, Plain, APIKey, and X509Cert are well-defined" }, "resourceurl": { "name": "resourceurl", "type": "url", "description": "The resource uri for which authorization shall be granted (if applicable)" }, "authorityuri": { "name": "authorityuri", "type": "uri", "description": "The authority uri where authorization shall be requested (if applicable)" }, "granttypes": { "name": "granttypes", "type": "array", "description": "The grant types that can be requested (if applicable)", "item": { "type": "string" } }, "*": { "name": "*", "type": "any" } } } }, "deployed": { "name": "deployed", "type": "boolean", "description": "If `true`, the endpoint metadata represents a public, live endpoint that is available for communication and a strict validator MAY test the liveness of the endpoint", "required": true, "default": false }, "topic": { "name": "topic", "type": "string", "description": "The MQTT topic path that is used for communication with the endpoint unless overridden by the message" }, "qos": { "name": "qos", "type": "uinteger", "description": "The MQTT QoS level. May be 0, 1, or 2", "required": true, "default": 0, "enum": [ 0, 1, 2 ] }, "retain": { "name": "retain", "type": "boolean", "description": "The MQTT retain flag to use for publishers on ths endpoint", "required": true, "default": false }, "cleansession": { "name": "cleansession", "type": "boolean", "description": "The MQTT clean session flag to use for publishers on this endpoint", "required": true, "default": true }, "willtopic": { "name": "willtopic", "type": "string", "description": "The MQTT will topic to configure for publishers on this endpoint" }, "willmessage": { "name": "willmessage", "type": "xid", "target": "/messagegroups/messages", "description": "The MQTT will message definition to configure for publishers on this endpoint. This MUST be a reference to a message definition" }, "*": { "name": "*", "type": "any" } } } } }, "MQTT/3.1.1": { "siblingattributes": { "protocoloptions": { "name": "protocoloptions", "type": "object", "description": "Configuration information for this endpoint", "attributes": { "endpoints": { "name": "endpoints", "type": "array", "description": "The network addresses that are for communication with the endpoint. The endpoints are ordered by preference, with the first endpoint being the preferred endpoint. Some protocol implementations might not support multiple endpoints, in which case all but the first endpoint might be ignored. Whether the URI just identifies a network host or links directly to a resource managed by the network host is protocol specific", "item": { "type": "object", "attributes": { "uri": { "name": "uri", "type": "uri", "description": "MQTT URI (mqtt, mqtts, or ws scheme)" }, "*": { "name": "*", "type": "any" } } } }, "authorization": { "name": "authorization", "type": "array", "description": "Authorization options. These are hints for the adapter for interacting with the authorization endpoint. This is not a credentials configuration", "item": { "type": "object", "attributes": { "type": { "name": "type", "type": "string", "description": "The authentication/authorization type. OAuth2, Plain, APIKey, and X509Cert are well-defined" }, "resourceurl": { "name": "resourceurl", "type": "url", "description": "The resource uri for which authorization shall be granted (if applicable)" }, "authorityuri": { "name": "authorityuri", "type": "uri", "description": "The authority uri where authorization shall be requested (if applicable)" }, "granttypes": { "name": "granttypes", "type": "array", "description": "The grant types that can be requested (if applicable)", "item": { "type": "string" } }, "*": { "name": "*", "type": "any" } } } }, "deployed": { "name": "deployed", "type": "boolean", "description": "If `true`, the endpoint metadata represents a public, live endpoint that is available for communication and a strict validator MAY test the liveness of the endpoint", "required": true, "default": false }, "topic": { "name": "topic", "type": "string", "description": "MQTT topic path that is used for communication with the endpoint unless overridden by the message" }, "qos": { "name": "qos", "type": "uinteger", "description": "The MQTT QoS level. May be 0, 1, or 2", "required": true, "default": 0, "enum": [ 0, 1, 2 ] }, "retain": { "name": "retain", "type": "boolean", "description": "The MQTT retain flag to use for publishers on ths endpoint", "required": true, "default": false }, "cleansession": { "name": "cleansession", "type": "boolean", "description": "The MQTT clean session flag to use for publishers on this endpoint", "required": true, "default": true }, "willtopic": { "name": "willtopic", "type": "string", "description": "The MQTT will topic to configure for publishers on this endpoint" }, "willmessage": { "name": "willmessage", "type": "xid", "target": "/messagegroups/messages", "description": "The MQTT will message definition to configure for publishers on this endpoint. This MUST be a reference to a message definition" }, "*": { "name": "*", "type": "any" } } } } }, "HTTP": { "siblingattributes": { "protocoloptions": { "name": "protocoloptions", "type": "object", "description": "Configuration information for this endpoint", "attributes": { "endpoints": { "name": "endpoints", "type": "array", "description": "The network addresses that are for communication with the endpoint. The endpoints are ordered by preference, with the first endpoint being the preferred endpoint. Some protocol implementations might not support multiple endpoints, in which case all but the first endpoint might be ignored. Whether the URI just identifies a network host or links directly to a resource managed by the network host is protocol specific", "item": { "type": "object", "attributes": { "uri": { "name": "uri", "type": "uri", "description": "HTTP URI" }, "*": { "name": "*", "type": "any" } } } }, "authorization": { "name": "authorization", "type": "array", "description": "Authorization options. These are hints for the adapter for interacting with the authorization endpoint. This is not a credentials configuration", "item": { "type": "object", "attributes": { "type": { "name": "type", "type": "string", "description": "The authentication/authorization type. OAuth2, Plain, APIKey, and X509Cert are well-defined" }, "resourceurl": { "name": "resourceurl", "type": "url", "description": "The resource uri for which authorization shall be granted (if applicable)" }, "authorityuri": { "name": "authorityuri", "type": "uri", "description": "The authority uri where authorization shall be requested (if applicable)" }, "granttypes": { "name": "granttypes", "type": "array", "description": "The grant types that can be requested (if applicable)", "item": { "type": "string" } }, "*": { "name": "*", "type": "any" } } } }, "deployed": { "name": "deployed", "type": "boolean", "description": "If `true`, the endpoint metadata represents a public, live endpoint that is available for communication and a strict validator MAY test the liveness of the endpoint", "required": true, "default": false }, "method": { "name": "method", "type": "string", "description": "The HTTP method name", "required": true, "default": "POST" }, "headers": { "name": "headers", "type": "array", "description": "HTTP headers to use with the endpoint. The same header may be specified multiple times with different values. The HTTP header names are case insensitive", "item": { "type": "object", "attributes": { "name": { "name": "name", "type": "string", "description": "HTTP header name", "required": true }, "value": { "name": "value", "type": "string", "description": "HTTP header value" } } } }, "query": { "name": "query", "type": "map", "description": "HTTP query parameters", "item": { "type": "string" } }, "*": { "name": "*", "type": "any" } } } } }, "KAFKA": { "siblingattributes": { "protocoloptions": { "name": "protocoloptions", "type": "object", "description": "Configuration information for this endpoint", "attributes": { "endpoints": { "name": "endpoints", "type": "array", "description": "The network addresses that are for communication with the endpoint. The endpoints are ordered by preference, with the first endpoint being the preferred endpoint. Some protocol implementations might not support multiple endpoints, in which case all but the first endpoint might be ignored. Whether the URI just identifies a network host or links directly to a resource managed by the network host is protocol specific", "item": { "type": "object", "namecharset": "extended", "attributes": { "bootstrap.servers": { "name": "bootstrap.servers", "type": "array", "description": "The Kafka bootstrap servers", "item": { "type": "string" } }, "security.protocol": { "name": "security.protocol", "type": "string", "description": "The Kafka security protocol", "required": true, "default": "PLAINTEXT" }, "sasl.mechanism": { "name": "sasl.mechanism", "type": "string", "description": "The Kafka SASL mechanism", "required": true, "default": "PLAIN" }, "*": { "name": "*", "type": "any" } } } }, "authorization": { "name": "authorization", "type": "array", "description": "Authorization options. These are hints for the adapter for interacting with the authorization endpoint. This is not a credentials configuration", "item": { "type": "object", "attributes": { "type": { "name": "type", "type": "string", "description": "The authentication/authorization type. OAuth2, Plain, APIKey, and X509Cert are well-defined" }, "resourceurl": { "name": "resourceurl", "type": "url", "description": "The resource uri for which authorization shall be granted (if applicable)" }, "authorityuri": { "name": "authorityuri", "type": "uri", "description": "The authority uri where authorization shall be requested (if applicable)" }, "granttypes": { "name": "granttypes", "type": "array", "description": "The grant types that can be requested (if applicable)", "item": { "type": "string" } }, "*": { "name": "*", "type": "any" } } } }, "deployed": { "name": "deployed", "type": "boolean", "description": "If `true`, the endpoint metadata represents a public, live endpoint that is available for communication and a strict validator MAY test the liveness of the endpoint", "required": true, "default": false }, "topic": { "name": "topic", "type": "string", "description": "Apache Kafka topic name" }, "acks": { "name": "acks", "type": "integer", "description": "The Apache Kafka acks setting to use. If no acks setting is specified, the default is -1", "required": true, "default": 1 }, "key": { "name": "key", "type": "string", "description": "The Apache Kafka record key" }, "partition": { "name": "partition", "type": "integer", "description": "The Apache Kafka partition number to use when writing to or receiving from Apache Kafka" }, "consumergroup": { "name": "consumergroup", "type": "string", "description": "The Apache Kafka consumer group name to use for consumers" }, "headers": { "name": "headers", "type": "map", "description": "The Apache Kafka headers for publishers on this endpoint", "item": { "type": "string" } }, "keyserializer": { "name": "keyserializer", "type": "string", "description": "The Kafka key serializer", "required": true, "default": "org.apache.kafka.common.serialization.StringSerializer" }, "valueserializer": { "name": "valueserializer", "type": "string", "description": "The Kafka value serializer", "required": true, "default": "org.apache.kafka.common.serialization.StringSerializer" }, "*": { "name": "*", "type": "any" } } } } }, "NATS": { "siblingattributes": { "protocoloptions": { "name": "protocoloptions", "type": "object", "description": "Configuration information for this endpoint", "attributes": { "endpoints": { "name": "endpoints", "type": "array", "description": "The network addresses that are for communication with the endpoint. The endpoints are ordered by preference, with the first endpoint being the preferred endpoint. Some protocol implementations might not support multiple endpoints, in which case all but the first endpoint might be ignored. Whether the URI just identifies a network host or links directly to a resource managed by the network host is protocol specific", "item": { "type": "object", "attributes": { "uri": { "name": "uri", "type": "uri", "description": "NATS URI" }, "*": { "name": "*", "type": "any" } } } }, "authorization": { "name": "authorization", "type": "array", "description": "Authorization options. These are hints for the adapter for interacting with the authorization endpoint. This is not a credentials configuration", "item": { "type": "object", "attributes": { "type": { "name": "type", "type": "string", "description": "The authentication/authorization type. OAuth2, Plain, APIKey, and X509Cert are well-defined" }, "resourceurl": { "name": "resourceurl", "type": "url", "description": "The resource uri for which authorization shall be granted (if applicable)" }, "authorityuri": { "name": "authorityuri", "type": "uri", "description": "The authority uri where authorization shall be requested (if applicable)" }, "granttypes": { "name": "granttypes", "type": "array", "description": "The grant types that can be requested (if applicable)", "item": { "type": "string" } }, "*": { "name": "*", "type": "any" } } } }, "deployed": { "name": "deployed", "type": "boolean", "description": "If `true`, the endpoint metadata represents a public, live endpoint that is available for communication and a strict validator MAY test the liveness of the endpoint", "required": true, "default": false }, "subject": { "name": "subject", "type": "string", "description": "The NATS subject" }, "*": { "name": "*", "type": "any" } } } } } } }, "messagegroups": { "name": "messagegroups", "type": "array", "description": "The message groups that are supported by this endpoint", "item": { "type": "xid" } }, "*": { "name": "*", "type": "any" } }, "resources": { "messages": { "$include": "../message/model.json#/groups/messagegroups/resources/messages" } } } } }