@firebolt-js/discovery-sdk
Version:
The Firebolt Discovery JS SDK
2,040 lines (2,039 loc) • 62.7 kB
JSON
{
"openrpc": "1.2.4",
"info": {
"title": "Firebolt Discovery SDK",
"version": "1.7.0",
"x-module-descriptions": {}
},
"methods": [
{
"name": "Content.requestUserInterest",
"tags": [
{
"name": "capabilities",
"x-provided-by": "Discovery.onRequestUserInterest",
"x-uses": [
"xrn:firebolt:capability:discovery:interest"
]
}
],
"summary": "Provide information about the entity currently displayed or selected on the screen.",
"description": "Provide information about the entity currently displayed or selected on the screen.",
"params": [
{
"name": "type",
"required": true,
"schema": {
"$ref": "#/x-schemas/Discovery/InterestType"
}
},
{
"name": "reason",
"required": true,
"schema": {
"$ref": "#/x-schemas/Discovery/InterestReason"
}
}
],
"result": {
"name": "interest",
"schema": {
"$ref": "#/components/schemas/InterestResult"
},
"summary": "The EntityDetails data."
},
"examples": [
{
"name": "Default Example",
"params": [
{
"name": "type",
"value": "interest"
},
{
"name": "reason",
"value": "playlist"
}
],
"result": {
"name": "interest",
"value": {
"appId": "cool-app",
"entity": {
"identifiers": {
"entityId": "345",
"entityType": "program",
"programType": "movie"
},
"info": {
"title": "Cool Runnings",
"synopsis": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Pulvinar sapien et ligula ullamcorper malesuada proin libero nunc.",
"releaseDate": "1993-01-01T00:00:00.000Z",
"contentRatings": [
{
"scheme": "US-Movie",
"rating": "PG"
},
{
"scheme": "CA-Movie",
"rating": "G"
}
]
}
}
}
}
}
]
},
{
"name": "Content.onUserInterest",
"tags": [
{
"name": "event"
},
{
"name": "capabilities",
"x-provided-by": "Discovery.userInterest",
"x-uses": [
"xrn:firebolt:capability:discovery:interest"
]
}
],
"summary": "Provide information about the entity currently displayed or selected on the screen.",
"description": "Provide information about the entity currently displayed or selected on the screen.",
"params": [
{
"name": "listen",
"required": true,
"schema": {
"type": "boolean"
}
}
],
"result": {
"name": "interest",
"schema": {
"anyOf": [
{
"$ref": "#/x-schemas/Types/ListenResponse"
},
{
"$ref": "#/components/schemas/InterestEvent"
}
]
},
"summary": "The EntityDetails data."
},
"examples": [
{
"name": "Default Example",
"params": [
{
"name": "listen",
"value": true
}
],
"result": {
"name": "interest",
"value": {
"appId": "cool-app",
"type": "interest",
"reason": "playlist",
"entity": {
"identifiers": {
"entityId": "345",
"entityType": "program",
"programType": "movie"
},
"info": {
"title": "Cool Runnings",
"synopsis": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Pulvinar sapien et ligula ullamcorper malesuada proin libero nunc.",
"releaseDate": "1993-01-01T00:00:00.000Z",
"contentRatings": [
{
"scheme": "US-Movie",
"rating": "PG"
},
{
"scheme": "CA-Movie",
"rating": "G"
}
]
}
}
}
}
}
]
}
],
"components": {
"schemas": {
"ChallengeRequestor": {
"title": "ChallengeRequestor",
"type": "object",
"required": [
"id",
"name"
],
"properties": {
"id": {
"type": "string",
"description": "The id of the app that requested the challenge"
},
"name": {
"type": "string",
"description": "The name of the app that requested the challenge"
}
}
},
"Challenge": {
"title": "Challenge",
"type": "object",
"required": [
"capability",
"requestor"
],
"properties": {
"capability": {
"type": "string",
"description": "The capability that is being requested by the user to approve"
},
"requestor": {
"description": "The identity of which app is requesting access to this capability",
"$ref": "#/components/schemas/ChallengeRequestor"
}
}
},
"InterestResult": {
"title": "InterestResult",
"type": "object",
"properties": {
"appId": {
"type": "string"
},
"entity": {
"$ref": "#/x-schemas/Entity/EntityDetails"
}
},
"required": [
"appId",
"entity"
]
},
"InterestEvent": {
"title": "InterestEvent",
"type": "object",
"properties": {
"appId": {
"type": "string"
},
"type": {
"$ref": "#/x-schemas/Discovery/InterestType"
},
"reason": {
"$ref": "#/x-schemas/Discovery/InterestReason"
},
"entity": {
"$ref": "#/x-schemas/Entity/EntityDetails"
}
},
"required": [
"appId",
"entity",
"type",
"reason"
]
},
"NetworkType": {
"title": "NetworkType",
"type": "string",
"enum": [
"wifi",
"ethernet",
"hybrid"
],
"description": "The type of network that is currently active"
},
"NetworkState": {
"title": "NetworkState",
"type": "string",
"enum": [
"connected",
"disconnected"
],
"description": "The type of network that is currently active"
},
"FederatedRequest": {
"title": "FederatedRequest",
"type": "object",
"properties": {
"correlationId": {
"type": "string"
}
},
"required": [
"correlationId"
],
"propertyNames": {
"enum": [
"correlationId",
"parameters"
]
},
"examples": [
{
"correlationId": "xyz"
}
]
},
"FederatedResponse": {
"title": "FederatedResponse",
"type": "object",
"properties": {
"correlationId": {
"type": "string"
}
},
"required": [
"correlationId",
"result"
],
"propertyNames": {
"enum": [
"correlationId",
"result"
]
},
"examples": [
{
"correlationId": "xyz"
}
]
},
"EntityInfoParameters": {
"title": "EntityInfoParameters",
"type": "object",
"properties": {
"entityId": {
"type": "string"
},
"assetId": {
"type": "string"
}
},
"required": [
"entityId"
],
"additionalProperties": false,
"examples": [
{
"entityId": "345"
}
]
},
"PurchasedContentParameters": {
"title": "PurchasedContentParameters",
"type": "object",
"properties": {
"limit": {
"type": "integer",
"minimum": -1
},
"offeringType": {
"$ref": "#/x-schemas/Entertainment/OfferingType"
},
"programType": {
"$ref": "#/x-schemas/Entertainment/ProgramType"
}
},
"required": [
"limit"
],
"additionalProperties": false,
"examples": [
{
"limit": 100
}
]
},
"Availability": {
"title": "Availability",
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"channel-lineup",
"program-lineup"
]
},
"id": {
"type": "string"
},
"catalogId": {
"type": "string"
},
"startTime": {
"type": "string",
"format": "date-time"
},
"endTime": {
"type": "string",
"format": "date-time"
}
},
"required": [
"type",
"id"
]
},
"HDMIPortId": {
"type": "string",
"pattern": "^HDMI[0-9]+$"
},
"EDIDVersion": {
"title": "EDIDVersion",
"type": "string",
"enum": [
"1.4",
"2.0",
"unknown"
]
},
"HDMISignalStatus": {
"type": "string",
"enum": [
"none",
"stable",
"unstable",
"unsupported",
"unknown"
]
},
"KeyboardParameters": {
"title": "KeyboardParameters",
"type": "object",
"required": [
"message"
],
"properties": {
"message": {
"description": "The message to display to the user so the user knows what they are entering",
"type": "string"
}
},
"examples": [
{
"type": "standard",
"message": "Enter your user name."
}
]
},
"EventObjectPrimitives": {
"title": "EventObjectPrimitives",
"anyOf": [
{
"type": "string",
"maxLength": 256
},
{
"type": "number"
},
{
"type": "integer"
},
{
"type": "boolean"
},
{
"type": "null"
}
]
},
"EventObject": {
"title": "EventObject",
"type": "object",
"maxProperties": 256,
"additionalProperties": {
"anyOf": [
{
"$ref": "#/components/schemas/EventObjectPrimitives"
},
{
"type": "array",
"maxItems": 256,
"items": {
"anyOf": [
{
"$ref": "#/components/schemas/EventObjectPrimitives"
},
{
"$ref": "#/components/schemas/EventObject"
}
]
}
},
{
"$ref": "#/components/schemas/EventObject"
}
]
}
},
"PinChallenge": {
"title": "PinChallenge",
"type": "object",
"required": [
"requestor",
"pinSpace"
],
"properties": {
"pinSpace": {
"type": "string",
"description": "The pin space that this challenge is for",
"enum": [
"purchase",
"content"
]
},
"capability": {
"type": "string",
"description": "The capability that is gated by a pin challenge"
},
"requestor": {
"description": "The identity of which app is requesting access to this capability",
"$ref": "#/components/schemas/ChallengeRequestor"
}
}
},
"ResultReason": {
"title": "ResultReason",
"type": "string",
"description": "The reason for the result of challenging the user",
"enum": [
"noPinRequired",
"noPinRequiredWindow",
"exceededPinFailures",
"correctPin",
"cancelled"
]
},
"AppInfo": {
"description": "Information about an app that a grant was for",
"type": "object",
"properties": {
"id": {
"type": "string"
},
"title": {
"type": "string"
}
},
"additionalProperties": false,
"required": [
"id"
]
},
"GrantState": {
"description": "The state the grant is in",
"type": "string",
"enum": [
"granted",
"denied"
]
},
"WifiSecurityMode": {
"title": "WifiSecurityMode",
"description": "Security Mode supported for Wifi",
"type": "string",
"enum": [
"none",
"wep64",
"wep128",
"wpaPskTkip",
"wpaPskAes",
"wpa2PskTkip",
"wpa2PskAes",
"wpaEnterpriseTkip",
"wpaEnterpriseAes",
"wpa2EnterpriseTkip",
"wpa2EnterpriseAes",
"wpa2Psk",
"wpa2Enterprise",
"wpa3PskAes",
"wpa3Sae"
]
},
"WifiSignalStrength": {
"title": "WifiSignalStrength",
"description": "Strength of Wifi signal, value is negative based on RSSI specification.",
"type": "integer",
"default": -255,
"minimum": -255,
"maximum": 0
},
"WifiFrequency": {
"title": "WifiFrequency",
"description": "Wifi Frequency in Ghz, example 2.4Ghz and 5Ghz.",
"type": "number",
"default": 0,
"minimum": 0
},
"AccessPoint": {
"title": "AccessPoint",
"description": "Properties of a scanned wifi list item.",
"type": "object",
"properties": {
"ssid": {
"type": "string",
"description": "Name of the wifi."
},
"securityMode": {
"$ref": "#/components/schemas/WifiSecurityMode"
},
"signalStrength": {
"$ref": "#/components/schemas/WifiSignalStrength"
},
"frequency": {
"$ref": "#/components/schemas/WifiFrequency"
}
}
}
}
},
"x-schemas": {
"Types": {
"uri": "https://meta.comcast.com/firebolt/types",
"SemanticVersion": {
"title": "SemanticVersion",
"type": "object",
"properties": {
"major": {
"type": "integer",
"minimum": 0
},
"minor": {
"type": "integer",
"minimum": 0
},
"patch": {
"type": "integer",
"minimum": 0
},
"readable": {
"type": "string"
}
},
"required": [
"major",
"minor",
"patch",
"readable"
],
"additionalProperties": false
},
"ListenResponse": {
"title": "ListenResponse",
"type": "object",
"required": [
"event",
"listening"
],
"properties": {
"event": {
"type": "string",
"pattern": "[a-zA-Z]+\\.on[A-Z][a-zA-Z]+"
},
"listening": {
"type": "boolean"
}
},
"additionalProperties": false
},
"ProviderRequest": {
"title": "ProviderRequest",
"type": "object",
"required": [
"correlationId"
],
"additionalProperties": false,
"properties": {
"correlationId": {
"type": "string",
"description": "The id that was passed in to the event that triggered a provider method to be called"
},
"parameters": {
"description": "The result of the provider response.",
"type": [
"object",
"null"
]
}
}
},
"AudioProfile": {
"title": "AudioProfile",
"type": "string",
"enum": [
"stereo",
"dolbyDigital5.1",
"dolbyDigital5.1+",
"dolbyAtmos"
]
},
"LocalizedString": {
"title": "LocalizedString",
"description": "Localized string supports either a simple `string` or a Map<string, string> of language codes to strings. When using a simple `string`, the current preferred langauge from `Localization.langauge()` is assumed.",
"oneOf": [
{
"type": "string"
},
{
"type": "object",
"additionalProperties": {
"type": "string"
}
}
],
"examples": [
"A simple string, with no language code",
{
"en": "This is english",
"es": "esto es español"
}
]
},
"FlatMap": {
"type": "object",
"additionalProperties": {
"oneOf": [
{
"type": "string"
},
{
"type": "number"
},
{
"type": "boolean"
}
]
}
},
"BooleanMap": {
"title": "BooleanMap",
"type": "object",
"additionalProperties": {
"type": "boolean"
}
},
"Timeout": {
"title": "Timeout",
"description": "Defines the timeout in seconds. If the threshold for timeout is passed for any operation without a result it will throw an error.",
"type": "integer",
"default": 0,
"minimum": 0,
"maximum": 9999
}
},
"Accessibility": {
"uri": "https://meta.comcast.com/firebolt/accessibility",
"ClosedCaptionsSettings": {
"title": "ClosedCaptionsSettings",
"type": "object",
"required": [
"enabled"
],
"properties": {
"enabled": {
"type": "boolean",
"description": "Whether or not closed-captions should be enabled by default"
},
"styles": {
"$ref": "#/x-schemas/Accessibility/ClosedCaptionsStyles"
},
"preferredLanguages": {
"type": "array",
"items": {
"$ref": "#/x-schemas/Localization/ISO639_2Language"
}
}
},
"examples": [
{
"enabled": true,
"styles": {
"fontFamily": "monospaced_serif",
"fontSize": 1,
"fontColor": "#ffffff",
"fontEdge": "none",
"fontEdgeColor": "#7F7F7F",
"fontOpacity": 100,
"backgroundColor": "#000000",
"backgroundOpacity": 100,
"textAlign": "center",
"textAlignVertical": "middle",
"windowColor": "white",
"windowOpacity": 50
},
"preferredLanguages": [
"eng",
"spa"
]
}
]
},
"VoiceGuidanceSettings": {
"title": "VoiceGuidanceSettings",
"type": "object",
"required": [
"enabled",
"navigationHints",
"rate"
],
"properties": {
"enabled": {
"type": "boolean",
"description": "Whether or not voice guidance should be enabled by default"
},
"navigationHints": {
"type": "boolean",
"description": "Whether or not voice guidance should include additional navigation hints"
},
"rate": {
"$ref": "#/x-schemas/Accessibility/SpeechRate",
"description": "The rate at which voice guidance speech will be read back to the user"
},
"speed": {
"$ref": "#/x-schemas/Accessibility/SpeechRate",
"description": "**DEPRECATED** Use rate instead. The rate at which voice guidance speech will be read back to the user"
}
},
"examples": [
{
"enabled": true,
"navigationHints": true,
"rate": 1,
"speed": 1
}
]
},
"SpeechRate": {
"title": "SpeechRate",
"type": "number",
"minimum": 0.1,
"maximum": 10
},
"ClosedCaptionsStyles": {
"title": "ClosedCaptionsStyles",
"type": "object",
"description": "The default styles to use when displaying closed-captions",
"properties": {
"fontFamily": {
"$ref": "#/x-schemas/Accessibility/FontFamily"
},
"fontSize": {
"$ref": "#/x-schemas/Accessibility/FontSize"
},
"fontColor": {
"$ref": "#/x-schemas/Accessibility/Color"
},
"fontEdge": {
"$ref": "#/x-schemas/Accessibility/FontEdge"
},
"fontEdgeColor": {
"$ref": "#/x-schemas/Accessibility/Color"
},
"fontOpacity": {
"$ref": "#/x-schemas/Accessibility/Opacity"
},
"backgroundColor": {
"$ref": "#/x-schemas/Accessibility/Color"
},
"backgroundOpacity": {
"$ref": "#/x-schemas/Accessibility/Opacity"
},
"textAlign": {
"$ref": "#/x-schemas/Accessibility/HorizontalAlignment"
},
"textAlignVertical": {
"$ref": "#/x-schemas/Accessibility/VerticalAlignment"
},
"windowColor": {
"$ref": "#/x-schemas/Accessibility/Color"
},
"windowOpacity": {
"$ref": "#/x-schemas/Accessibility/Opacity"
}
}
},
"FontFamily": {
"type": [
"string",
"null"
],
"enum": [
"monospaced_serif",
"proportional_serif",
"monospaced_sanserif",
"proportional_sanserif",
"smallcaps",
"cursive",
"casual",
null
]
},
"FontSize": {
"type": [
"number",
"null"
],
"minimum": 0
},
"Color": {
"type": [
"string",
"null"
]
},
"FontEdge": {
"type": [
"string",
"null"
],
"enum": [
"none",
"raised",
"depressed",
"uniform",
"drop_shadow_left",
"drop_shadow_right",
null
]
},
"Opacity": {
"type": [
"number",
"null"
],
"minimum": 0,
"maximum": 100
},
"HorizontalAlignment": {
"type": [
"string",
"null"
]
},
"VerticalAlignment": {
"type": [
"string",
"null"
]
}
},
"Localization": {
"uri": "https://meta.comcast.com/firebolt/localization",
"ISO639_2Language": {
"type": "string",
"pattern": "^[a-z]{3}$"
},
"Locality": {
"type": "string"
},
"CountryCode": {
"type": "string",
"pattern": "^[A-Z]{2}$"
},
"Language": {
"type": "string",
"pattern": "^[A-Za-z]{2}$"
},
"Locale": {
"type": "string",
"pattern": "^[a-zA-Z]+([a-zA-Z0-9\\-]*)$"
},
"TimeZone": {
"type": "string",
"pattern": "^[-+_/ A-Za-z 0-9]*$"
}
},
"Advertising": {
"uri": "https://meta.comcast.com/firebolt/advertising",
"SkipRestriction": {
"title": "SkipRestriction",
"$comment": "xrn:advertising:policy:skipRestriction:",
"type": "string",
"enum": [
"none",
"adsUnwatched",
"adsAll",
"all"
],
"description": "The advertisement skip restriction.\n\nApplies to fast-forward/rewind (e.g. trick mode), seeking over an entire opportunity (e.g. jump), seeking out of what's currently playing, and \"Skip this ad...\" features. Seeking over multiple ad opportunities only requires playback of the _last_ opportunity, not all opportunities, preceding the seek destination.\n\n| Value | Description |\n|--------------|--------------------------------------------------------------------------------|\n| none |No fast-forward, jump, or skip restrictions |\n| adsUnwatched | Restrict fast-forward, jump, and skip for unwatched ad opportunities only. |\n| adsAll | Restrict fast-forward, jump, and skip for all ad opportunities |\n| all | Restrict fast-forward, jump, and skip for all ad opportunities and all content |\n\nNamespace: `xrn:advertising:policy:skipRestriction:`\n\n"
}
},
"Capabilities": {
"uri": "https://meta.comcast.com/firebolt/capabilities",
"Capability": {
"title": "Capability",
"type": "string",
"description": "A Capability is a discrete unit of functionality that a Firebolt device might be able to perform.",
"pattern": "^xrn:firebolt:capability:([a-z0-9\\-]+)((:[a-z0-9\\-]+)?)$"
},
"CapabilityInfo": {
"title": "CapabilityInfo",
"type": "object",
"required": [
"supported",
"available",
"use",
"manage",
"provide"
],
"properties": {
"capability": {
"$ref": "#/x-schemas/Capabilities/Capability"
},
"supported": {
"type": "boolean",
"description": "Provides info whether the capability is supported"
},
"available": {
"type": "boolean",
"description": "Provides info whether the capability is available"
},
"use": {
"$ref": "#/x-schemas/Capabilities/CapPermissionStatus"
},
"manage": {
"$ref": "#/x-schemas/Capabilities/CapPermissionStatus"
},
"provide": {
"$ref": "#/x-schemas/Capabilities/CapPermissionStatus"
},
"details": {
"type": "array",
"items": {
"$ref": "#/x-schemas/Capabilities/DenyReason"
},
"minItems": 1,
"maxItems": 6
}
},
"additionalProperties": false,
"examples": [
{
"capability": "xrn:firebolt:capability:keyboard",
"supported": true,
"available": true,
"use": {
"permitted": true,
"granted": true
},
"manage": {
"permitted": true,
"granted": true
},
"provide": {
"permitted": true,
"granted": true
}
}
]
},
"Permission": {
"title": "Permission",
"description": "A capability combined with a Role, which an app may be permitted (by a distributor) or granted (by an end user).",
"type": "object",
"required": [
"capability"
],
"properties": {
"role": {
"$ref": "#/x-schemas/Capabilities/Role"
},
"capability": {
"$ref": "#/x-schemas/Capabilities/Capability"
}
},
"additionalProperties": false
},
"Role": {
"title": "Role",
"description": "Role provides access level for the app for a given capability.",
"type": "string",
"enum": [
"use",
"manage",
"provide"
]
},
"CapPermissionStatus": {
"type": "object",
"properties": {
"permitted": {
"type": "boolean",
"description": "Provides info whether the capability is permitted"
},
"granted": {
"oneOf": [
{
"type": "boolean",
"description": "Provides info whether the capability is granted"
},
{
"const": null
}
]
}
},
"additionalProperties": false
},
"DenyReason": {
"title": "DenyReason",
"description": "Reasons why a Capability might not be invokable",
"type": "string",
"enum": [
"unpermitted",
"unsupported",
"disabled",
"unavailable",
"grantDenied",
"ungranted"
]
}
},
"Discovery": {
"uri": "https://meta.comcast.com/firebolt/discovery",
"InterestType": {
"title": "InterestType",
"type": "string",
"enum": [
"interest",
"disinterest"
]
},
"InterestReason": {
"title": "InterestReason",
"type": "string",
"enum": [
"playlist",
"reaction",
"recording"
]
},
"EntityInfoResult": {
"title": "EntityInfoResult",
"description": "The result for an `entityInfo()` push or pull.",
"type": "object",
"properties": {
"expires": {
"type": "string",
"format": "date-time"
},
"entity": {
"$ref": "#/x-schemas/Entertainment/EntityInfo"
},
"related": {
"type": "array",
"items": {
"$ref": "#/x-schemas/Entertainment/EntityInfo"
}
}
},
"required": [
"expires",
"entity"
],
"additionalProperties": false
},
"PurchasedContentResult": {
"title": "PurchasedContentResult",
"type": "object",
"properties": {
"expires": {
"type": "string",
"format": "date-time"
},
"totalCount": {
"type": "integer",
"minimum": 0
},
"entries": {
"type": "array",
"items": {
"$ref": "#/x-schemas/Entertainment/EntityInfo"
}
}
},
"required": [
"expires",
"totalCount",
"entries"
],
"additionalProperties": false
}
},
"Entity": {
"uri": "https://meta.comcast.com/firebolt/entity",
"EntityDetails": {
"title": "EntityDetails",
"type": "object",
"required": [
"identifiers"
],
"properties": {
"identifiers": {
"$ref": "#/x-schemas/Entity/Entity"
},
"info": {
"$ref": "#/x-schemas/Entity/Metadata"
},
"waysToWatch": {
"type": "array",
"items": {
"$ref": "#/x-schemas/Entertainment/WayToWatch"
},
"description": "An array of ways a user is might watch this entity, regardless of entitlements."
}
}
},
"Entity": {
"oneOf": [
{
"$ref": "#/x-schemas/Entity/ProgramEntity"
},
{
"$ref": "#/x-schemas/Entity/MusicEntity"
},
{
"$ref": "#/x-schemas/Entity/ChannelEntity"
},
{
"$ref": "#/x-schemas/Entity/UntypedEntity"
},
{
"$ref": "#/x-schemas/Entity/PlaylistEntity"
}
]
},
"Metadata": {
"title": "Metadata",
"type": "object",
"properties": {
"title": {
"type": "string",
"description": "Title of the entity."
},
"synopsis": {
"type": "string",
"description": "Short description of the entity."
},
"seasonNumber": {
"type": "number",
"description": "For TV seasons, the season number. For TV episodes, the season that the episode belongs to."
},
"seasonCount": {
"type": "number",
"description": "For TV series, seasons, and episodes, the total number of seasons."
},
"episodeNumber": {
"type": "number",
"description": "For TV episodes, the episode number."
},
"episodeCount": {
"type": "number",
"description": "For TV seasons and episodes, the total number of episodes in the current season."
},
"releaseDate": {
"type": "string",
"format": "date-time",
"description": "The date that the program or entity was released or first aired."
},
"contentRatings": {
"type": "array",
"items": {
"$ref": "#/x-schemas/Entertainment/ContentRating"
},
"description": "A list of ContentRating objects, describing the entity's ratings in various rating schemes."
}
}
},
"ProgramEntity": {
"title": "ProgramEntity",
"oneOf": [
{
"$ref": "#/x-schemas/Entity/MovieEntity"
},
{
"$ref": "#/x-schemas/Entity/TVEpisodeEntity"
},
{
"$ref": "#/x-schemas/Entity/TVSeasonEntity"
},
{
"$ref": "#/x-schemas/Entity/TVSeriesEntity"
},
{
"$ref": "#/x-schemas/Entity/AdditionalEntity"
}
]
},
"MusicEntity": {
"title": "MusicEntity",
"type": "object",
"properties": {
"entityType": {
"const": "music"
},
"musicType": {
"$ref": "#/x-schemas/Entertainment/MusicType"
},
"entityId": {
"type": "string"
}
},
"required": [
"entityType",
"musicType",
"entityId"
]
},
"ChannelEntity": {
"title": "ChannelEntity",
"type": "object",
"properties": {
"entityType": {
"const": "channel"
},
"channelType": {
"type": "string",
"enum": [
"streaming",
"overTheAir"
]
},
"entityId": {
"type": "string",
"description": "ID of the channel, in the target App's scope."
},
"appContentData": {
"type": "string",
"maxLength": 256
}
},
"required": [
"entityType",
"channelType",
"entityId"
],
"additionalProperties": false
},
"UntypedEntity": {
"title": "UntypedEntity",
"allOf": [
{
"description": "A Firebolt compliant representation of the remaining entity types.",
"type": "object",
"required": [
"entityId"
],
"properties": {
"entityId": {
"type": "string"
},
"assetId": {
"type": "string"
},
"appContentData": {
"type": "string",
"maxLength": 256
}
},
"additionalProperties": false
}
],
"examples": [
{
"entityId": "an-entity"
}
]
},
"PlaylistEntity": {
"title": "PlaylistEntity",
"description": "A Firebolt compliant representation of a Playlist entity.",
"type": "object",
"required": [
"entityType",
"entityId"
],
"properties": {
"entityType": {
"const": "playlist"
},
"entityId": {
"type": "string"
},
"assetId": {
"type": "string"
},
"appContentData": {
"type": "string",
"maxLength": 256
}
},
"additionalProperties": false,
"examples": [
{
"entityType": "playlist",
"entityId": "playlist/xyz"
}
]
},
"MovieEntity": {
"title": "MovieEntity",
"description": "A Firebolt compliant representation of a Movie entity.",
"type": "object",
"required": [
"entityType",
"programType",
"entityId"
],
"properties": {
"entityType": {
"const": "program"
},
"programType": {
"const": "movie"
},
"entityId": {
"type": "string"
},
"assetId": {
"type": "string"
},
"appContentData": {
"type": "string",
"maxLength": 256
}
},
"additionalProperties": false,
"examples": [
{
"entityType": "program",
"programType": "movie",
"entityId": "el-camino"
}
]
},
"TVEpisodeEntity": {
"title": "TVEpisodeEntity",
"description": "A Firebolt compliant representation of a TV Episode entity.",
"type": "object",
"required": [
"entityType",
"programType",
"entityId",
"seriesId",
"seasonId"
],
"properties": {
"entityType": {
"const": "program"
},
"programType": {
"const": "episode"
},
"entityId": {
"type": "string"
},
"seriesId": {
"type": "string"
},
"seasonId": {
"type": "string"
},
"assetId": {
"type": "string"
},
"appContentData": {
"type": "string",
"maxLength": 256
}
},
"additionalProperties": false,
"examples": [
{
"entityType": "program",
"programType": "episode",
"entityId": "breaking-bad-pilot",
"seriesId": "breaking-bad",
"seasonId": "breaking-bad-season-1"
}
]
},
"TVSeasonEntity": {
"title": "TVSeasonEntity",
"description": "A Firebolt compliant representation of a TV Season entity.",
"type": "object",
"required": [
"entityType",
"programType",
"entityId",
"seriesId"
],
"properties": {
"entityType": {
"const": "program"
},
"programType": {
"const": "season"
},
"entityId": {
"type": "string"
},
"seriesId": {
"type": "string"
},
"assetId": {
"type": "string"
},
"appContentData": {
"type": "string",
"maxLength": 256
}
},
"additionalProperties": false,
"examples": [
{
"entityType": "program",
"programType": "season",
"entityId": "breaking-bad-season-1",
"seriesId": "breaking-bad"
}
]
},
"TVSeriesEntity": {
"title": "TVSeriesEntity",
"description": "A Firebolt compliant representation of a TV Series entity.",
"type": "object",
"required": [
"entityType",
"programType",
"entityId"
],
"properties": {
"entityType": {
"const": "program"
},
"programType": {
"const": "series"
},
"entityId": {
"type": "string"
},
"assetId": {
"type": "string"
},
"appContentData": {
"type": "string",
"maxLength": 256
}
},
"additionalProperties": false,
"examples": [
{
"entityType": "program",
"programType": "series",
"entityId": "breaking-bad"
}
]
},
"AdditionalEntity": {
"title": "AdditionalEntity",
"description": "A Firebolt compliant representation of the remaining program entity types.",
"type": "object",
"required": [
"entityType",
"programType",
"entityId"
],
"properties": {
"entityType": {
"const": "program"
},
"programType": {
"type": "string",
"enum": [
"concert",
"sportingEvent",
"preview",
"other",
"advertisement",
"musicVideo",
"minisode",
"extra"
]
},
"entityId": {
"type": "string"
},
"assetId": {
"type": "string"
},
"appContentData": {
"type": "string",
"maxLength": 256
}
},
"additionalProperties": false,
"examples": [
{
"entityType": "program",
"programType": "concert",
"entityId": "live-aid"
}
]
},
"PlayableEntity": {
"title": "PlayableEntity",
"anyOf": [
{
"$ref": "#/x-schemas/Entity/MovieEntity"
},
{
"$ref": "#/x-schemas/Entity/TVEpisodeEntity"
},
{
"$ref": "#/x-schemas/Entity/PlaylistEntity"
},
{
"$ref": "#/x-schemas/Entity/MusicEntity"
},
{
"$ref": "#/x-schemas/Entity/AdditionalEntity"
}
]
}
},
"Entertainment": {
"uri": "https://meta.comcast.com/firebolt/entertainment",
"WayToWatch": {
"title": "WayToWatch",
"type": "object",
"required": [
"identifiers",
"audioProfile"
],
"properties": {
"identifiers": {
"$ref": "#/x-schemas/Entertainment/ContentIdentifiers"
},
"expires": {
"type": "string",
"format": "date-time",
"description": "Time when the WayToWatch is no longer available."
},
"entitled": {
"type": "boolean",
"description": "Specify if the user is entitled to watch the entity."
},
"entitledExpires": {
"type": "string",
"format": "date-time",
"description": "Time when the entity is no longer entitled."
},
"offeringType": {
"$ref": "#/x-schemas/Entertainment/OfferingType"
},
"hasAds": {
"type": "boolean",
"description": "True if the streamable asset contains ads."
},
"price": {
"type": "number",
"description": "For \"buy\" and \"rent\" WayToWatch, the price to buy or rent in the user's preferred currency."
},
"videoQuality": {
"type": "array",
"items": {
"type": "string",
"enum": [
"SD",
"HD",
"UHD"
]
},
"description": "List of the video qualities available via the WayToWatch."
},
"audioProfile": {
"type": "array",
"items": {
"$ref": "#/x-schemas/Types/AudioProfile"
},
"description": "List of the audio types available via the WayToWatch."
},
"audioLanguages": {
"type": "array",
"items": {
"type": "string"
},
"description": "List of audio track languages available on the WayToWatch. The first is considered the primary language. Languages are expressed as ISO 639 1/2 codes."
},
"closedCaptions": {
"type": "array",
"items": {
"type": "string"
},
"description": "List of languages for which closed captions are available on the WayToWatch. Languages are expressed as ISO 639 1/2 codes."
},
"subtitles": {
"type": "array",
"items": {
"type": "string"
},
"description": "List of languages for which subtitles are available on the WayToWatch. Languages are expressed as ISO 639 1/2 codes."
},
"audioDescriptions": {
"type": "array",
"items": {
"type": "string"
},
"description": "List of languages for which audio descriptions (DVD) as available on the WayToWatch. Languages are expressed as ISO 639 1/2 codes."
}
},
"description": "A WayToWatch describes a way to watch a video program. It may describe a single\nstreamable asset or a set of streamable assets. For example, an app provider may\ndescribe HD, SD, and UHD assets as individual WayToWatch objects or rolled into\na single WayToWatch.\n\nIf the WayToWatch represents a single streamable asset, the provided\nContentIdentifiers must be sufficient to play back the specific asset when sent\nvia a playback intent or deep link. If the WayToWatch represents multiple\nstreamable assets, the provided ContentIdentifiers must be sufficient to\nplayback one of the assets represented with no user action. In this scenario,\nthe app SHOULD choose the best asset for the user based on their device and\nsettings. The ContentIdentifiers MUST also be sufficient for navigating the user\nto the appropriate entity or detail screen via an entity intent.\n\nThe app should set the `entitled` property to indicate if the user can watch, or\nnot watch, the asset without making a purchase. If the entitlement is known to\nexpire at a certain time (e.g., a rental), the app should also provide the\n`entitledExpires` property. If the entitlement is not expired, the UI will use\nthe `entitled` property to display watchable assets to the user, adjust how\nassets are presented to the user, and how intents into the app are generated.\nFor example, the the Aggregated Experience could render a \"Watch\" button for an\nentitled asset versus a \"Subscribe\" button for an non-entitled asset.\n\nThe app should set the `offeringType` to define how the content may be\nauthorized. The UI will use this to adjust how content is presented to the user.\n\nA single WayToWatch cannot represent streamable assets available via multiple\npurchase paths. If, for example, an asset has both Buy, Rent and Subscription\navailability, the three different entitlement paths MUST be represented as\nmultiple WayToWatch objects.\n\n`price` should be populated for WayToWatch objects with `buy` or `rent`\n`offeringType`. If the WayToWatch represents a set of assets with various price\npoints, the `price` provided must be the lowest available price."
},
"OfferingType": {
"title": "OfferingType",
"type": "string",
"enum": [
"free",
"subscribe",
"buy",
"rent"
],
"description": "The offering type of the WayToWatch."
},
"ContentIdentifiers": {
"title": "ContentIdentifiers",
"type": "object",
"properties": {
"assetId": {
"type": "string",
"description": "Identifies a particular playable asset. For example, the HD version of a particular movie separate from the UHD version."
},
"entityId": {
"type": "string",
"description": "Identifies an entity, such as a Movie, TV Series or TV Episode."
},
"seasonId": {
"type": "string",
"description": "The TV Season for a TV Episode."
},
"seriesId": {
"type": "string",
"description": "The TV Series for a TV Episode or TV Season."
},
"appContentData": {
"type": "string",
"description": "App-specific content identifiers.",
"maxLength": 1024
}
},
"description": "The ContentIdentifiers object is how the app identifies an entity or asset to\nthe Firebolt platform. These ids are used to look up metadata and deep link into\nthe app.\n\nApps do not need to provide all ids. They only need to provide the minimum\nrequired to target a playable stream or an entity detail screen via a deep link.\nIf an id isn't needed to get to those pages, it doesn't need to be included."
},
"ContentRating": {
"title": "ContentRating",
"type": "object",
"required": [
"scheme",
"rating"
],
"properties": {
"scheme": {
"type": "string",
"enum": [
"CA-Movie",
"CA-TV",
"CA-Movie-Fr",
"CA-TV-Fr",
"US-Movie",
"US-TV"
],
"description": "The rating scheme."
},
"rating": {
"type": "string",
"description": "The content rating."
},
"advisories": {
"type": "array",
"items": {
"type": "string"
},
"description": "Optional list of subratings or content advisories."
}
},
"description": "A ContentRating represents an age or content based of an entity. Supported rating schemes and associated types are below.\n\n## United States\n\n`US-Movie` (MPAA):\n\nRatings: `NR`, `G`, `PG`, `PG13`, `R`, `NC17`\n\nAdvisories: `AT`, `BN`, `SL`, `SS`, `N`, `V`\n\n`US-TV` (Vchip):\n\nRatings: `TVY`, `TVY7`, `TVG`, `TVPG`, `TV14`, `TVMA`\n\nAdvisories: `FV`, `D`, `L`, `S`, `V`\n\n## Canada\n\n`CA-Movie` (OFRB):\n\nRatings: `G`, `PG`, `14A`, `18A`, `R`, `E`\n\n`CA-TV` (AGVOT)\n\nRatings: `E`, `C`, `C8`, `G`, `PG`, `14+`, `18+`\n\nAdvisories: `C`, `C8`, `G`, `PG`, `14+`, `18+`\n\n`CA-Movie-Fr` (Canadian French language movies):\n\nRatings: `G`, `8+`, `13+`, `16+`, `18+`\n\n`CA-TV-Fr` (Canadian French language TV):\n\nRatings: `G`, `8+`, `13+`, `16+`, `18+`\n"
},
"MusicType": {
"title": "MusicType",
"type": "string",
"description": "In the case of a music `entityType`, specifies the type of music entity.",
"enum": [
"song",
"album"
]
},
"Entitlement": {
"title": "Entitlement",
"type": "object",
"properties": {
"entitlementId": {
"type": "string"
},
"startTime": {
"type": "string",
"format": "date-time"
},
"endTime": {
"type": "string",
"format": "date-time"
}
},
"required": [
"entitlementId"
]
},
"EntityInfo": {
"title": "EntityInfo",
"description": "An EntityInfo object represents an \"entity\" on the platform. Currently, only entities of type `program` are supported. `programType` must be supplied to identify the program type.\n\nAdditionally, EntityInfo objects must specify a properly formed\nContentIdentifiers object, `entityType`, and `title`. The app should provide\nthe `synopsis` property for a good user experience if the content\nmetadata is not available another way.\n\nThe ContentIdentifiers must be sufficient for navigating the user to the\nappropriate entity or detail screen via a `detail` intent or deep link.\n\nEntityInfo objects must provide at least one WayToWatch object when returned as\npart of an `entityInfo` method and a streamable asset is available to the user.\nIt is optional for the `purchasedContent` method, but recommended because the UI\nmay use those data.",
"type": "object",
"required": [
"identifiers",
"entityType",
"title"
],
"properties": {
"identifiers": {
"$ref": "#/x-schemas/Entertainment/ContentIdentifiers"
},
"title": {
"type": "string",
"description": "Title of the entity."
},
"entityType": {
"type": "string",
"enum": [
"program",
"music"
],
"description": "The type of the entity, e.g. `program` or `music`."
},
"programType": {
"$ref": "#/x-schemas/Entertainment/ProgramType"
},
"musicType": {
"$ref": "#/x-schemas/Entertainment/MusicType"
},
"synopsis": {
"type": "string",
"description": "Short description of the entity."
},
"seasonNumber": {
"type": "number",
"description": "For TV seasons, the season number. For TV episodes, the season that the episode belongs to."
},
"seasonCount": {
"type": "number",
"description": "For TV series, seasons, and episodes, the total number of seasons."
},
"episodeNumber": {
"type": "number",
"description": "For TV episodes, the episode number."
},
"episodeCount": {
"type": "number",
"description": "For TV seasons and episodes, the total number of episodes in the current season."
},
"releaseDate": {
"type": "string",
"format": "date-time",
"description": "The date that the program or entity was released or first aired."
},
"contentRatings": {
"type": "array",
"items": {
"$ref": "#/x-schemas/Entertainment/ContentRating"
},
"description": "A list of ContentRating objects, describing the entity's ratings in various rating schemes."
},
"waysToWatch": {
"type": "array",
"items": {
"$ref": "#/x-schemas/Entertainment/WayToWatch"
},
"description": "An array of ways a user is might watch this entity, regardless of entitlements."
}
},
"if": {
"properties": {
"entityType": {
"const": "program"
}
}
},
"then": {
"required": [
"programType"
],
"not": {
"required": [
"musicType"
]
}
},
"else": {
"required": [
"musicType"
],
"not": {
"required": [
"programType"
]
}
}
},
"ProgramType": {
"title": "ProgramType",
"type": "string",
"description": "In the case of a program `entityType`, specifies the program type.",
"enum": [
"movie",
"episode",
"season",
"series",
"other",
"preview",
"extra",
"concert",
"sportingEvent",
"advertisement",
"musicVideo",
"minisode"
]
}
},
"Policies": {
"uri": "https://meta.comcast.com/firebolt/policies",
"AgePolicy": {
"title": "AgePolicy",
"description": "The policy that describes various age groups to which content is directed. See distributor documentation for further details.",
"anyOf": [
{
"type": "string"
},
{
"type": "string",
"enum": [
"app:adult",
"app:child",
"app:teen"
]
}
]
}
},
"Intents": {
"uri": "https://meta.comcast.com/firebolt/intents",
"NavigationIntent": {
"title": "NavigationIntent",
"description": "A Firebolt compliant representation of a user intention to navigate to a specific place in an app.",
"anyOf": [
{
"$ref": "#/x-schemas/Intents/HomeIntent"
},
{
"$ref": "#/x-schemas/Intents/LaunchIntent"
},
{
"$ref": "#/x-schemas/Intents/EntityIntent"
},
{
"$ref": "#/x-schemas/Intents/PlaybackIntent"
},
{
"$ref": "#/x-schemas/Intents/SearchIntent"
},
{
"$ref": "#/x-schemas/Intents/SectionIntent"
},
{
"$ref": "#/x-schemas/Intents/TuneIntent"
},
{
"$ref": "#/x-schemas/Intents/PlayEntityIntent"
},
{
"$ref": "#/x-schemas/Intents/PlayQueryIntent"
}
]
},
"HomeIntent": {
"description": "A Firebolt compliant representation of a user intention to navigate an app to it's home screen, and bring that app to the foreground if needed.",
"title": "HomeIntent",
"allOf": [
{
"title": "HomeIntent",
"$ref": "#/x-schemas/Intents/Intent"
},
{
"title": "HomeIntent",
"$ref": "#/x-schemas/Intents/IntentProperties"
},
{
"title": "HomeIntent",
"type": "object",
"properties": {
"action": {
"const": "home"
}
},
"not": {
"required": [
"data"
]
}
}
],
"examples": [
{
"action": "home",
"context": {
"source": "voice"
}
}
]
},
"LaunchIntent": {
"description": "A Firebolt compliant representation of a user intention to launch an app.",
"title": "LaunchIntent",
"allOf": [
{
"$ref": "#/x-schemas/Intents/Intent"
},
{
"$ref": "#/x-schemas/Intents/IntentProperties"
},
{
"type": "object",
"properties": {
"action": {
"const": "launch"
}
},
"not": {
"required": [
"data"