# Copyright 2018 New Vector Ltd # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. title: Protocol type: object properties: user_fields: description: |- Fields which may be used to identify a third-party user. These should be ordered to suggest the way that entities may be grouped, where higher groupings are ordered first. For example, the name of a network should be searched before the nickname of a user. type: array items: type: string description: Field used to identify a third-party user. example: ["network", "nickname"] location_fields: description: |- Fields which may be used to identify a third-party location. These should be ordered to suggest the way that entities may be grouped, where higher groupings are ordered first. For example, the name of a network should be searched before the name of a channel. type: array items: type: string description: Field used to identify a third-party location. example: ["network", "channel"] icon: description: A content URI representing an icon for the third-party protocol. type: string example: "mxc://example.org/aBcDeFgH" field_types: description: |- The type definitions for the fields defined in `user_fields` and `location_fields`. Each entry in those arrays MUST have an entry here. The `string` key for this object is the field name itself. May be an empty object if no fields are defined. type: object additionalProperties: title: Field Type description: Definition of valid values for a field. type: object properties: regexp: description: |- A regular expression for validation of a field's value. This may be relatively coarse to verify the value as the application service providing this protocol may apply additional validation or filtering. type: string placeholder: description: A placeholder serving as a valid example of the field value. type: string required: ['regexp', 'placeholder'] example: { "network": { "regexp": "([a-z0-9]+\\.)*[a-z0-9]+", "placeholder": "irc.example.org" }, "nickname": { "regexp": "[^\\s#]+", "placeholder": "username" }, "channel": { "regexp": "#[^\\s]+", "placeholder": "#foobar" } } instances: description: |- A list of objects representing independent instances of configuration. For example, multiple networks on IRC if multiple are provided by the same application service. type: array items: type: object title: Protocol Instance properties: desc: type: string description: A human-readable description for the protocol, such as the name. example: "Freenode" icon: type: string description: |- An optional content URI representing the protocol. Overrides the one provided at the higher level Protocol object. example: "mxc://example.org/JkLmNoPq" fields: type: object description: Preset values for `fields` the client may use to search by. example: { "network": "freenode" } network_id: type: string description: A unique identifier across all instances. example: "freenode" required: ['desc', 'fields', 'network_id'] required: ['user_fields', 'location_fields', 'icon', 'field_types', 'instances']