{ "type": "object", "required": ["webExtension"], "properties": { "default": { "$ref": "#/definitions/default" }, "defaultPrivate": { "$ref": "#/definitions/defaultPrivate" }, "orderHint": { "$ref": "#/definitions/orderHint" }, "appliesTo": { "type": "array", "title": "Applies To", "description": "This section defines the region/locales/application information for where a search engine is available, and any specifics for that region/locale/application. If there are no entries in the list, it is considered to be included everywhere", "items": { "$ref": "#/definitions/appliesToSection" } }, "telemetryId": { "type": "string", "title": "Telemetry Id", "description": "The telemetry Id as used for search telemetry." }, "webExtension": { "$ref": "#/definitions/webExtension" }, "urls": { "$ref": "#/definitions/urls" }, "params": { "$ref": "#/definitions/params" }, "extraParams": { "$ref": "#/definitions/extraParams" }, "suggestExtraParams": { "$ref": "#/definitions/extraParams" } }, "definitions": { "application": { "type": "object", "title": "Application Details", "properties": { "name": { "type": "array", "title": "Name", "description": "The application(s) this applies to (default/not specified is everywhere)", "items": { "type": "string", "pattern": "^[a-z]{0,100}$", "enum": ["", "firefox"] }, "uniqueItems": true }, "channel": { "type": "array", "title": "Channel", "description": "Which channel this belongs to (not set = everywhere). For ESR this is also keyed from the display version.", "items": { "type": "string", "pattern": "^[a-z]{0,100}$", "enum": ["default", "nightly", "aurora", "beta", "release", "esr"] }, "uniqueItems": true }, "distributions": { "type": "array", "title": "Distributions", "description": "Which distributions this applies to.", "items": { "type": "string", "pattern": "^[a-zA-Z0-9.-]{0,100}$" }, "uniqueItems": true }, "excludedDistributions": { "type": "array", "title": "Excluded Distributions", "description": "Which distributions this does not apply to.", "items": { "type": "string", "pattern": "^[a-zA-Z0-9.-]{0,100}$" }, "uniqueItems": true }, "minVersion": { "type": "string", "title": "Minimum Version", "pattern": "^[0-9a-z.]{0,20}$", "description": "The minimum version this applies to" }, "maxVersion": { "type": "string", "title": "Maximum Version", "pattern": "^[0-9a-z.]{0,20}$", "description": "The maximum version this applies to (less-than comparison)" } } }, "default": { "type": "string", "title": "Default Status", "pattern": "^[a-z-]{0,20}$", "description": "Whether or not this engine should be default.", "enum": ["yes", "yes-if-no-other", "no"] }, "defaultPrivate": { "type": "string", "title": "Default Status (PBM)", "pattern": "^[a-z-]{0,20}$", "description": "Whether or not this engine should be default in private browsing mode.", "enum": ["yes", "yes-if-no-other", "no"] }, "extraParams": { "type": "array", "title": "Extra Parameters", "description": "Extra parameters for the search engine (aka MozParams)", "items": { "type": "object", "properties": { "name": { "type": "string", "title": "Name", "pattern": "^[a-z]{0,20}$", "description": "Name of the parameter that will be used in the search query" }, "condition": { "type": "string", "title": "Condition", "pattern": "^[a-z]{0,10}$", "description": "The type of parameter (pref or purpose)", "enum": ["pref", "purpose"] }, "purpose": { "type": "string", "title": "Purpose", "pattern": "^[a-z{}]{0,100}$", "description": "The search purpose that triggers this parameter being appended.", "enum": [ "searchbar", "keyword", "contextmenu", "homepage", "newtab" ] }, "value": { "type": "string", "title": "Value", "pattern": "^[a-zA-Z0-9_]{0,100}$", "description": "If this is a purpose type, the value is used as the value of the parameter in the query" }, "pref": { "type": "string", "title": "Preference name", "pattern": "^[a-z0-9_]{0,100}$", "description": "The preference name to get the value from (i.e. browser.search.param.)." } } } }, "orderHint": { "type": "number", "title": "Order Hint", "description": "A hint to the display order (higher is a higher rank)" }, "searchUrlCodes": { "type": "array", "title": "Codes", "description": "A array of objects - map of parameter name to the parameter value.", "items": { "type": "object", "properties": { "name": { "type": "string", "title": "Name", "pattern": "^[a-zA-Z0-9.-]{0,100}$", "description": "Name of the parameter that will be used in the query" }, "value": { "type": "string", "title": "Value", "pattern": "^[a-zA-Z0-9_{}:/.-]{0,100}$", "description": "The value of parameter (pref or purpose)" } } } }, "params": { "type": "object", "title": "Parameters", "description": "Various parameters for the search engines", "properties": { "searchUrlGetParams": { "title": "Search URL GET Parameters", "description": "Extra parameters for search URLs (e.g. 'pc=foo').", "$ref": "#/definitions/searchUrlCodes" }, "suggestUrlGetParams": { "title": "Suggestion URL GET Parameters", "description": "Extra parameters for search suggestion URLs (e.g. 'pc=foo').", "$ref": "#/definitions/searchUrlCodes" }, "searchUrlPostParams": { "title": "Search URL POST Parameters", "description": "Extra parameters for search URLs (e.g. 'pc=foo').", "$ref": "#/definitions/searchUrlCodes" }, "suggestUrlPostParams": { "title": "Suggestion URL POST Parameters", "description": "Extra parameters for search suggestion URLs (e.g. 'pc=foo').", "$ref": "#/definitions/searchUrlCodes" } } }, "telemetryId": { "type": "string", "title": "Telemetry Id", "pattern": "^[a-zA-Z0-9-$_]{0,100}$", "description": "The telemetry Id as used for search telemetry." }, "webExtension": { "type": "object", "title": "WebExtension", "properties": { "id": { "type": "string", "title": "WebExtension Id", "description": "The identifier (local part) of the associated WebExtension should be of the format example@search.mozilla.org", "pattern": "^[a-zA-Z0-9-._]*@search.mozilla.org$" }, "locales": { "type": "array", "title": "WebExtension Locales", "description": "Overrides the WebExtension locales and specifies to use a particular one. Ideally this should only be used when really necessary, otherwise considered deprecated.", "items": { "type": "string", "pattern": "^[a-zA-Z0-9-$_]{0,100}$" } } } }, "urls": { "type": "object", "description": "Urls pertaining to this engine", "properties": { "trending": { "type": "object", "description": "Details of the url used to fetch trending suggestions", "properties": { "fullPath": { "type": "string", "title": "fullPath", "format": "uri", "description": "The url used to retrieve trending suggestions" }, "query": { "type": "string", "title": "query", "description": "The query parameters to send in a trending suggestions request", "pattern": "^[a-zA-Z0-9.={}&-]{0,100}$" } } } } }, "regionDetails": { "type": "array", "title": "Regions", "description": "Two-letter region codes.", "items": { "type": "string", "pattern": "^([a-z][a-z]|default)$", "minLength": 2, "maxLength": 7 } }, "localeDetails": { "type": "object", "title": "Locales", "description": "Locale codes.", "properties": { "matches": { "type": "array", "title": "Matches exactly the codes", "items": { "type": "string", "pattern": "^([a-z]{2,3}(-[a-zA-Z]{2,})?(-macos)?|default)$", "minLength": 2 } }, "startsWith": { "type": "array", "title": "Matches any code starting with", "items": { "type": "string", "pattern": "^[a-z]{2,3}$", "minLength": 2, "maxLength": 3 } } } }, "included": { "type": "object", "title": "Included Locations", "description": "The locations to which this section applies. Note: Regions and Locales are 'and'ed together.", "properties": { "everywhere": { "type": "boolean", "title": "Everywhere", "description": "Set to true to signify that this is included everywhere." }, "regions": { "$ref": "#/definitions/regionDetails" }, "locales": { "$ref": "#/definitions/localeDetails" } } }, "excluded": { "type": "object", "title": "Excluded Locations", "description": "The locations to which this section applies. Note: Regions and Locales are 'and'ed together.", "properties": { "regions": { "$ref": "#/definitions/regionDetails" }, "locales": { "$ref": "#/definitions/localeDetails" } } }, "appliesToSection": { "type": "object", "properties": { "default": { "$ref": "#/definitions/default" }, "defaultPrivate": { "$ref": "#/definitions/defaultPrivate" }, "orderHint": { "$ref": "#/definitions/orderHint" }, "included": { "$ref": "#/definitions/included" }, "excluded": { "$ref": "#/definitions/excluded" }, "application": { "$ref": "#/definitions/application" }, "webExtension": { "$ref": "#/definitions/webExtension" }, "urls": { "$ref": "#/definitions/urls" }, "telemetryId": { "$ref": "#/definitions/telemetryId" }, "params": { "$ref": "#/definitions/params" }, "extraParams": { "$ref": "#/definitions/extraParams" }, "experiment": { "type": "string", "title": "Experiment", "pattern": "^[a-zA-Z0-9-]{0,100}$", "description": "The experiment this section is associated with, if blank it is associated with any configuration." }, "override": { "type": "boolean", "title": "Override", "description": "This section will override previous appliesTo sections, but not add new locations where this engine is deployed to." }, "suggestExtraParams": { "$ref": "#/definitions/extraParams" } } } } }