269 lines
6.9 KiB
JSON
269 lines
6.9 KiB
JSON
{
|
|
"$schema": "https://json-schema.org/draft/2019-09/schema",
|
|
"title": "DesktopFeature",
|
|
"description": "A feature.",
|
|
"type": "object",
|
|
"properties": {
|
|
"description": {
|
|
"description": "The description of the feature.",
|
|
"type": "string"
|
|
},
|
|
"hasExposure": {
|
|
"description": "Whether or not this feature records exposure telemetry.",
|
|
"type": "boolean"
|
|
},
|
|
"exposureDescription": {
|
|
"description": "A description of the exposure telemetry collected by this feature. Only required if hasExposure is true.",
|
|
"type": "string"
|
|
},
|
|
"owner": {
|
|
"description": "The owner of the feature.",
|
|
"type": "string"
|
|
},
|
|
"isEarlyStartup": {
|
|
"description": "If true, the feature values will be cached in prefs so that they can be read before Nimbus is initialized during IceCat startup.",
|
|
"type": "boolean"
|
|
},
|
|
"applications": {
|
|
"description": "The applications that can enroll in experiments for this feature. Defaults to \"icecat-desktop\".",
|
|
"items": {
|
|
"$ref": "#/$defs/DesktopApplication"
|
|
},
|
|
"minLength": 1,
|
|
"type": "array"
|
|
},
|
|
"variables": {
|
|
"additionalProperties": {
|
|
"$ref": "#/$defs/DesktopFeatureVariable"
|
|
},
|
|
"description": "The variables that this feature can set.",
|
|
"type": "object"
|
|
},
|
|
"schema": {
|
|
"$ref": "#/$defs/NimbusFeatureSchema",
|
|
"description": "An optional JSON schema that describes the feature variables."
|
|
},
|
|
"allowCoenrollment": {
|
|
"description": "If true, clients can enroll in multiple experiments and rollouts that use this feature.",
|
|
"type": "boolean"
|
|
}
|
|
},
|
|
"required": [
|
|
"description",
|
|
"hasExposure",
|
|
"owner",
|
|
"variables"
|
|
],
|
|
"if": {
|
|
"properties": {
|
|
"hasExposure": {
|
|
"const": true
|
|
}
|
|
}
|
|
},
|
|
"then": {
|
|
"required": [
|
|
"exposureDescription"
|
|
]
|
|
},
|
|
"$defs": {
|
|
"DesktopApplication": {
|
|
"enum": [
|
|
"icecat-desktop",
|
|
"icecat-desktop-background-task"
|
|
],
|
|
"type": "string"
|
|
},
|
|
"DesktopFeatureVariable": {
|
|
"dependentSchemas": {
|
|
"enum": {
|
|
"allOf": [
|
|
{
|
|
"if": {
|
|
"properties": {
|
|
"type": {
|
|
"const": "string"
|
|
}
|
|
}
|
|
},
|
|
"then": {
|
|
"properties": {
|
|
"enum": {
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"if": {
|
|
"properties": {
|
|
"type": {
|
|
"const": "int"
|
|
}
|
|
}
|
|
},
|
|
"then": {
|
|
"properties": {
|
|
"enum": {
|
|
"items": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"if": {
|
|
"properties": {
|
|
"type": {
|
|
"const": "boolean"
|
|
}
|
|
}
|
|
},
|
|
"then": {
|
|
"properties": {
|
|
"enum": {
|
|
"const": null
|
|
}
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"if": {
|
|
"properties": {
|
|
"type": {
|
|
"const": "json"
|
|
}
|
|
}
|
|
},
|
|
"then": {
|
|
"properties": {
|
|
"enum": {
|
|
"const": null
|
|
}
|
|
}
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"fallbackPref": {
|
|
"description": "setPref is mutually exclusive with fallbackPref",
|
|
"properties": {
|
|
"setPref": {
|
|
"const": null
|
|
}
|
|
}
|
|
},
|
|
"setPref": {
|
|
"description": "fallbackPref is mutually exclusive with setPref",
|
|
"properties": {
|
|
"fallbackPref": {
|
|
"const": null
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"description": "A feature variable.",
|
|
"properties": {
|
|
"description": {
|
|
"description": "A description of the feature.",
|
|
"type": "string"
|
|
},
|
|
"type": {
|
|
"$ref": "#/$defs/FeatureVariableType",
|
|
"description": "The field type."
|
|
},
|
|
"enum": {
|
|
"anyOf": [
|
|
{
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"type": "array"
|
|
},
|
|
{
|
|
"items": {
|
|
"type": "integer"
|
|
},
|
|
"type": "array"
|
|
}
|
|
],
|
|
"description": "An optional list of possible string or integer values. Only allowed when type is string or int. The types in the enum must match the type of the field."
|
|
},
|
|
"fallbackPref": {
|
|
"description": "A pref that provides the default value for a feature when none is present.",
|
|
"type": "string"
|
|
},
|
|
"setPref": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"$ref": "#/$defs/SetPref"
|
|
}
|
|
],
|
|
"description": "A pref that should be set to the value of this variable when enrolling in experiments. Using a string is deprecated and unsupported in IceCat 124+."
|
|
}
|
|
},
|
|
"required": [
|
|
"description",
|
|
"type"
|
|
],
|
|
"type": "object"
|
|
},
|
|
"FeatureVariableType": {
|
|
"enum": [
|
|
"int",
|
|
"string",
|
|
"boolean",
|
|
"json"
|
|
],
|
|
"type": "string"
|
|
},
|
|
"NimbusFeatureSchema": {
|
|
"description": "Information about a JSON schema.",
|
|
"properties": {
|
|
"uri": {
|
|
"description": "The resource:// or chrome:// URI that can be loaded at runtime within IceCat. Required by IceCat so that Nimbus can import the schema for validation.",
|
|
"type": "string"
|
|
},
|
|
"path": {
|
|
"description": "The path to the schema file in the source checkout. Required by Experimenter so that it can find schema files in source checkouts.",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"uri",
|
|
"path"
|
|
],
|
|
"type": "object"
|
|
},
|
|
"PrefBranch": {
|
|
"enum": [
|
|
"default",
|
|
"user"
|
|
],
|
|
"type": "string"
|
|
},
|
|
"SetPref": {
|
|
"properties": {
|
|
"branch": {
|
|
"$ref": "#/$defs/PrefBranch",
|
|
"description": "The branch the pref will be set on. Prefs set on the user branch persists through restarts."
|
|
},
|
|
"pref": {
|
|
"description": "The name of the pref to set.",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"branch",
|
|
"pref"
|
|
],
|
|
"type": "object"
|
|
}
|
|
}
|
|
}
|