From 6a419e227b7afbe8abf69e1c07bad368fa09bf24 Mon Sep 17 00:00:00 2001 From: Jeremy LaCivita Date: Thu, 15 Jun 2023 13:58:33 -0400 Subject: [PATCH 1/2] chore(capabilities): Adding missing specs --- .../general/capabilities/image1.png | Bin 0 -> 14067 bytes .../general/capabilities/image2.png | Bin 0 -> 15714 bytes .../general/capabilities/image4.png | Bin 0 -> 22598 bytes .../capabilities/user-grants/image1.png | Bin 0 -> 16914 bytes .../capabilities/user-grants/image2.png | Bin 0 -> 23485 bytes .../capabilities/user-grants/image3.png | Bin 0 -> 29394 bytes .../capabilities/user-grants/image4.png | Bin 0 -> 18794 bytes .../capabilities/user-grants/image5.png | Bin 0 -> 25027 bytes .../capabilities/user-grants/image6.png | Bin 0 -> 32865 bytes .../capabilities/user-grants/image7.png | Bin 0 -> 45710 bytes .../general/capabilities/capabilities.md | 1174 +++++++++++++++++ .../general/capabilities/user-grants.md | 593 +++++++++ 12 files changed, 1767 insertions(+) create mode 100644 requirements/images/specifications/general/capabilities/image1.png create mode 100644 requirements/images/specifications/general/capabilities/image2.png create mode 100644 requirements/images/specifications/general/capabilities/image4.png create mode 100644 requirements/images/specifications/general/capabilities/user-grants/image1.png create mode 100644 requirements/images/specifications/general/capabilities/user-grants/image2.png create mode 100644 requirements/images/specifications/general/capabilities/user-grants/image3.png create mode 100644 requirements/images/specifications/general/capabilities/user-grants/image4.png create mode 100644 requirements/images/specifications/general/capabilities/user-grants/image5.png create mode 100644 requirements/images/specifications/general/capabilities/user-grants/image6.png create mode 100644 requirements/images/specifications/general/capabilities/user-grants/image7.png create mode 100644 requirements/specifications/general/capabilities/capabilities.md create mode 100644 requirements/specifications/general/capabilities/user-grants.md diff --git a/requirements/images/specifications/general/capabilities/image1.png b/requirements/images/specifications/general/capabilities/image1.png new file mode 100644 index 0000000000000000000000000000000000000000..049fc70bfc801a22ca4f9f290982cfaa7af30e49 GIT binary patch literal 14067 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 literal 0 HcmV?d00001 diff --git a/requirements/images/specifications/general/capabilities/image2.png b/requirements/images/specifications/general/capabilities/image2.png new file mode 100644 index 0000000000000000000000000000000000000000..7c0c10f7c9b0eeca22d2fc67a1f42f2ab1d1102a GIT binary patch literal 15714 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 literal 0 HcmV?d00001 diff --git a/requirements/images/specifications/general/capabilities/image4.png b/requirements/images/specifications/general/capabilities/image4.png new file mode 100644 index 0000000000000000000000000000000000000000..641c268472ba949afca8d0a585f0dd8bbd3632d6 GIT binary patch literal 22598 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 t)yP7{yrGO;fVFW{XPBA7Xg^5fM;>j z>zi*5#{@K}j3ph_6QiZSCq2e>)OoQw_%VRicNF+_T*oFRxAPAI&Z50$)9WzH_R36T2&=Xlmlndjp=& zA~8z$et_EOEL#W%shFS$W|6b5jhaoIa1Wv($pu=0_{<3Ah)?FPxmjbQwOpI?_#%p+ zVtmaVlhWU>pfuH|A47leOiV%KUB27r zlQ4Mu|N9U4EK}Yb+GWt@@^3yomY;FQopG1Fa6T5^p+4}Rf{~$-(Y^zQ`wUIaA27E# uaM0r5fjx$X7KVmj7OznMr$R9Ha)592|6L)oq+e-8TPKg7wXHhp8UG(p_rHSx literal 0 HcmV?d00001 diff --git a/requirements/images/specifications/general/capabilities/user-grants/image3.png b/requirements/images/specifications/general/capabilities/user-grants/image3.png new file mode 100644 index 0000000000000000000000000000000000000000..96d73b0ab490f6e8ea76136d11c964cd25493021 GIT binary patch literal 29394 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

+&C%v+v_F=#xuCtivh8T&v?8lsg$Nh{&+?sN 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 BU5fw! literal 0 HcmV?d00001 diff --git a/requirements/images/specifications/general/capabilities/user-grants/image5.png b/requirements/images/specifications/general/capabilities/user-grants/image5.png new file mode 100644 index 0000000000000000000000000000000000000000..26c583d2d3d7b8f2bec9c3dd9dfeafeb76af3c00 GIT binary patch literal 25027 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 literal 0 HcmV?d00001 diff --git a/requirements/images/specifications/general/capabilities/user-grants/image6.png b/requirements/images/specifications/general/capabilities/user-grants/image6.png new file mode 100644 index 0000000000000000000000000000000000000000..4761e5ea43f86552bea08db32369004b4e99a139 GIT binary patch literal 32865 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 Orx$chbjr1^-2N|1(hz(A literal 0 HcmV?d00001 diff --git a/requirements/specifications/general/capabilities/capabilities.md b/requirements/specifications/general/capabilities/capabilities.md new file mode 100644 index 000000000..4a24d1498 --- /dev/null +++ b/requirements/specifications/general/capabilities/capabilities.md @@ -0,0 +1,1174 @@ +# Capabilities + +Document Status: Candidate Specification + +See [Firebolt Requirements Governance](./governance.md) for more info. + +| Contributor | Organization | +| -------------- | -------------- | +| Andrew Bennett | Sky | +| Tim Dibben | Sky | +| Jeremy LaCivita | Comcast | +| Kevin Pearson | Comcast | +| Peter Yu | Comcast | + +## 1. Overview + +This document introduces Firebolt Capabilities, which enable discovery +of supported features, negotiation of App permissions, and end-user +grants for Apps to access sensitive features. + +Apps can detect if Capabilities are supported and available. If so, Apps +can **Use**, **Provide**, or **Manage** capabilities that they are given +access to. + +The most common case is for an App to `use` a Capability, the platform +to `provide` it, and the Distributor\'s Settings App to `manage` it: + +![Diagram Description automatically +generated](../../../images/specifications/general/capabilities/image1.png) + +However, Apps may also provide Capabilities back to the platform: + +![Diagram Description automatically +generated](../../../images/specifications/general/capabilities/image2.png) + +## 2. Table of Contents +- [1. Overview](#1-overview) +- [2. Table of Contents](#2-table-of-contents) +- [3. Introduction to Capabilities](#3-introduction-to-capabilities) + - [3.1. Capabilities](#31-capabilities) + - [3.2. Availability](#32-availability) + - [3.3. Permissions](#33-permissions) + - [3.4. Roles](#34-roles) + - [3.5. User Grants](#35-user-grants) + - [3.6. Capability Identifiers](#36-capability-identifiers) +- [4. How Capabilities Work](#4-how-capabilities-work) + - [4.1. Supported Capabilities](#41-supported-capabilities) + - [4.2. Available Capabilities](#42-available-capabilities) + - [4.3. Permitted Capabilities](#43-permitted-capabilities) + - [4.4. User Granted Capabilities](#44-user-granted-capabilities) + - [4.5. Invoking Capabilities](#45-invoking-capabilities) +- [5. Configuring Device Capabilities](#5-configuring-device-capabilities) + - [5.1. Device Supported Capabilities](#51-device-supported-capabilities) + - [5.2. Device Grant Policy Overrides](#52-device-grant-policy-overrides) +- [6. Capability Schemas](#6-capability-schemas) + - [6.1. Firebolt Specification Schema](#61-firebolt-specification-schema) + - [6.2. Firebolt Device Schema](#62-firebolt-device-schema) + - [6.3. CapabilitiesManifest](#63-capabilitiesmanifest) + - [6.4. CapabilityPolicy](#64-capabilitypolicy) + - [6.5. JavaScript](#65-javascript) + - [6.6. CapabilityKey](#66-capabilitykey) + - [6.7. CapabilityLevel](#67-capabilitylevel) + - [6.8. PermissionPolicy](#68-permissionpolicy) + - [6.9. CapabilityConfig](#69-capabilityconfig) +- [7. Capability to Feature Mapping](#7-capability-to-feature-mapping) + - [7.1. App installation](#71-app-installation) + - [7.2. Firebolt APIs](#72-firebolt-apis) + - [7.3. Extension APIs](#73-extension-apis) + - [7.4. W3C APIs](#74-w3c-apis) + - [7.5. Hidden Permissions](#75-hidden-permissions) +- [8. Firebolt Capability Catalog](#8-firebolt-capability-catalog) +- [9. APIs](#9-apis) + - [9.1. Core SDK APIs](#91-core-sdk-apis) + - [9.1.1. Supported](#911-supported) + - [9.1.2. Available](#912-available) + - [9.1.3. Permitted](#913-permitted) + - [9.1.4. Granted](#914-granted) + - [9.1.5. CapabilityInfo](#915-capabilityinfo) + - [9.1.6. CapabilityDenyReason](#916-capabilitydenyreason) + - [9.1.7. Info](#917-info) + - [9.1.8. PermissionInfo](#918-permissioninfo) + - [9.1.9. Request](#919-request) + - [9.1.10. onAvailable](#9110-onavailable) + - [9.1.11. onUnavailable](#9111-onunavailable) + - [9.1.12. onGranted](#9112-ongranted) + - [9.1.13. onRevoked](#9113-onrevoked) + - [9.2. Manage SDK APIs](#92-manage-sdk-apis) + - [9.2.1. Granted Method](#921-granted-method) + +## 3. Introduction to Capabilities + +This section defines the key concepts behind the Firebolt Capabilities +system. Each portion of this section provides a background and +conversational definitions of the terms used in the rest of this +document, and through all Firebolt Requirements Specifications. + +### 3.1. Capabilities + +A Capability is a discrete unit of functionality that a Firebolt device +might be able to perform. It is granular enough to enable appropriate +access controls across all Firebolt Apps, but useful enough to be a +meaningful functional unit that an App might care about. Bluetooth is a +good example of a Capability. + +The Firebolt Specification determines the range of possible +Capabilities. + +Firebolt platforms advertise which Capabilities are supported. The set +of capabilities supported by a device is an immutable set and will never +change at runtime. Supporting Wi-Fi and having an active Wi-Fi +connection are two different things. + +Firebolt platforms determine if an App is allowed to invoke the +different aspects of a Capability (see [Roles](#roles), below). + +Firebolt Apps list which Capabilities are required and optional for the +App to be installed. + +Firebolt Apps inspect which Capabilities are supported and active. + +Firebolt Distributors sign off on some, or all, of the App's listed +required and optional Capabilities. + +### 3.2. Availability + +A Capability may rely on intermittently available resources, for example +a network capability requires an Ethernet or Wi-Fi network connection. + +A supported capability is only considered available if those resources +could be used by the App right now (pending any needed [User +Grants](#user-grants)). For example, the needed resources are not +disabled, not tied up by other apps, and not experiencing any +intermittent network, hardware, or signal issues. + +A supported capability is always supported, but it may not always be +*available*. + +If a Capability requires Permissions, then it will never be available to +Apps without at least one Role assigned for that Capability (see +[Permissions](#permissions), below). + +Capabilities may be available to one App while not available to another +based on non-Permissions criteria. For example, the Video Pipeline may +be available to Apps in the Foreground or Background Lifecycle state, +but not Apps in the Inactive state. + +Firebolt platforms determine if a supported capability is available or +not. + +### 3.3. Permissions + +A Permission is what allows an App to attempt to invoke an aspect of a +Capability. Permissions to a Capability are granted to an App with a +[Role](#roles), by a Firebolt Distributor. + +Firebolt documents and APIs will use the term "Permission" +interchangeably with phrases like: + +- An App's Assigned Role for a Capability + +- App + Capability + Role + +- Etc. + +The Firebolt Specification determines which Capabilities require +Permissions. + +The Firebolt Specification determines which Permission requirements may +be overridden by Distributors. + +An App is considered to have Permission to a Capability if it is: + +- Listed with a Role in the App's manifest and signed by the App + provider + +- Listed and signed again by the Distributor on the App's behalf + +- Listed and signed by the App Publisher when running in self-signed developer + mode + +An App can invoke a Capability if: + +- It has permission, which includes a Role, for that capability + +- The capability is supported by the current device + +- The App is invoking aspects of the capability that it has the + appropriate Role for + +- The capability is [Available](#availability) at time of invocation + +See [Permitted Capabilities](#permitted-capabilities) for more info. + +### 3.4. Roles + +Every Firebolt Capability has exactly three roles: + +- Use + +- Manage + +- Provide + +While these roles will be defined on a case-by-case basis for each +capability, they should generally follow the guidelines set here. + +The `Use` role is for providing basic access so that an App can leverage +the standard use cases of the Capability. The `Use` role will not enable +an App to perform management tasks such as turning the Capability on and +off for the entire device. The `Use` role will not enable an App to +perform administrative tasks such as renaming HDMI inputs, etc. + +The `Manage` role is for providing access to a Capability's management +and administrative features. This role may be used to allow an App to +build a Settings UI for the Capability, for example. The `Manage` role +is not for creating tiers of permissions within a Capability, but for +separating out administrative APIs, for example turning a feature on and +off. + +Most Capabilities are provided by the platform, denoted by making the +`Provide` role `private` for that Capability. However, there are use +cases where Apps may provide Capabilities. The `Provide` role allows for +declaring that an App *implements* the Capability and can be registered +with the platform for fulfilling the Capability's features. This could +be used for functionality that needs to be customized from Distributor +to Distributor. The `Provide` role may also be used to allow Apps to +contribute to aggregated functionality, for example a federated search +feature. By providing a capability, an App is signing up to implement +any `Use` or `Manage` APIs required by that capability. + +Each role must be explicitly assigned. An App *never* inherits the +operations from one role by virtue of being granted another. Roles may +have overlapping functionality. + +A [Permission](#permissions) is the combination of a Capability w/ a +Role determines which specific operations are permitted. + +### 3.5. User Grants + +A User Grant allows some Permissions to depend on the User of the +Firebolt Device to explicitly grant access for one or all Apps to use a +specific Capability. This an additional layer of access control on top +of Permissions. + +The Firebolt Specification determines which Permissions require User +Grants by default. + +It is not possible to require a User Grant for a Capability that is open +to all Apps. + +Distributors may override any User Grant details that are defined by the +Firebolt Specification if that User Grant Policy is set to +`overridable: true`. + +**Proposal:** Consumers want to know that their Smart TV platform treats +security as a first-class design principal. As such, table-stakes User +Grant policies, e.g. App access to Bluetooth, may be denoted as +overridable: false in the Firebolt Specification, to remove any +possibility of a security flaw. + +An App is considered to have a User Grant to a Capability if it is: + +- Has Permission to the Capability + +- The User Grant is for the same Role as the Permission above + +- The Capability is **securely** approved by the device user + +If an App invokes a Capability but does not have an active User Grant, +then the platform will block invocation, prompt the user for a grant, +and then continue with the original invocation, e.g. the App does not +have to call the originating API again (assuming the user did give their +approval). + +See [User Granted Capabilities](#user-granted-capabilities) for more +info. + +### 3.6. Capability Identifiers + +Capabilities **MUST** be identified by an XRN. The structure of a Firebolt Capability URN is as follows: + +`xrn:firebolt:capability::` + +For example: + +`xrn:firebolt:capability:protocol:bluetooth` + +The `` is used to group capabilities together to +facilitate bulk permissions and **MUST** match the following regular +expression: + +`^[a-zA-Z0-9\-]{1,32}$` + +Note that categories are not related to individual SDK modules, which +group things to facilitate App development simplicity, not permissions +management across multiple SDKs. + +The `` identifies the specific capability when combined with the +`` and **MUST** match the following regular expression: + +`^[a-zA-Z0-9\-]{1,32}$` + +## 4. How Capabilities Work + +A given Capability may or may not be supported or available. +Additionally, a given Role may or may not be permitted or granted for a +given Capability. + +While support for a Capability is static and global, the other status +may differ from App to App. + +Determining the status of a Role and/or Capability is fundamental to +both the Platform and the Apps that run on it. + +### 4.1. Supported Capabilities + +Once an App has been launched, it may need to check if a certain +capability is supported, to present the appropriate user experience. For +example, an App may want to put Dolby Atmos badges next to its content, +but only if the platform supports Dolby Atmos. + +The Firebolt Specification determines which capabilities **MUST** be +supported by all Firebolt Devices, by listing those Capabilities in the +Firebolt Specification Schema as `level: "must"` in the Capabilities +array. + +For a capability to be supported, it **MUST** have *one* or *both* of +the following: + +> A supported capability **MUST** have the necessary hardware and +> software to invoke all required aspects of all Roles of the +> capability. +> +> **OR** +> +> A supported capability **MUST** have the necessary hardware and +> software to support a *certified*, after-market peripheral that +> provides the capability. Note that this includes peripherals that have +> not yet been connected to or installed on the device. + +However, a Firebolt device **MUST NOT** be considered to support a +capability if the capability is disabled by the static distributor +configuration. + +The platform **MUST** return accurate responses based on these +requirements to all [APIs](#apis) outlined below. + +### 4.2. Available Capabilities + +Once an App has been launched, it may need to check if a certain +capability is available, to start the appropriate user experience. For +example, an App that uses an external camera may need to check if the +user has set up their camera before proceeding to the main user +experience. + +A Capability is available to an App if **all** the following are true: + +> An available Capability **MUST** be supported. +> +> An available Capability **MUST** have a provider, either an App, an +> Extension SDK, or the OS itself. +> +> The provider of the Capability **MUST** consider it to be available +> +> An available Capability **MUST NOT** be currently disabled by any +> user, account, or device setting. +> +> An available Capability **MUST** either be approved for all Apps by +> the Firebolt Specification, **OR** have a Permission assigned to the +> App in question by the distributor or the providing App, for at least +> one Role. +> +> An available Capability **MUST** be considered available by at least +> one provider of the capability. This is specified by the requirements +> for each feature. + +An available Capability **MAY** be tied to a User Grant, regardless of +whether the user has granted it yet. Secure user grants gate permission, +not availability. + +The platform **MUST** return accurate responses based on these +requirements to all [APIs](#apis) outlined below. + +### 4.3. Permitted Capabilities + +Capabilities may be permitted to *all* Apps by the Firebolt +Specification Schema, or to individual Apps by the Distributor-signed +App Manifest. + +An App may need to know if a Capability is permitted to it once it has +been launched. For example, it may need to check if a certain capability +is permitted, to enable the correct features for the current +distributor. For example, an App that has just been installed might not +show a Returns true for capability/role combinations that do not r +Sign-up option when running on a distributor that has not allowed it to +`use` the `commerce:subscribe` capability, and only allow existing users +to sign in. + +Determining if a Capability is permitted requires knowing which **Role** +is being leveraged. + +Permitted capabilities **MUST** be denoted as `public` in the [Firebolt +Specification Schema](#_Firebolt_Specification_Schema). + +Additionally, **one** of the following **MUST** be true as well: + +> The Role **MUST** have `negotiable` set to `false` +> +> **OR** +> +> The Role **MUST** be approved for the capability by the distributor in +> the App Manifest + +A permitted Capability **MAY** be tied to a User Grant, regardless of +whether the user has granted it yet. + +The platform **MUST** return accurate responses based on these +requirements to all [APIs](#apis) outlined below. + +### 4.4. User Granted Capabilities + +Some Capabilities may require a User Grant. It is the App's choice +whether it requests these grants at launch or allows the platform to +interrupt the App's experience when User Grant-gated Capabilities are +invoked. + +Determining if a Capability has been granted by the user requires +knowing which Role is being used. + +For a Capability to be considered granted, it **MUST** be supported. + +Additionally, a Capability + Role is granted to an App if **one** of the +following is true: + +> A granted capability **MUST** have the Role securely granted to the +> App by the user and that grant must not be expired. +> +> **OR** +> +> A granted capability **MUST** have the Role permanently granted to the +> App by the App Manifest, e.g., if the user implicitly granted these by +> virtue of an end user license agreement. + +Firebolt platforms **MUST** support acquiring a user grant *at the +moment the Capability is invoked*, without requiring any reinvocation of +the Capability. + +See [User Grants](./user-grants.md), for more info. + +The platform **MUST** return accurate responses based on these +requirements to all [APIs](#apis) outlined below. + +### 4.5. Invoking Capabilities + +When invoking a Capability, there are several factors that determine +whether the calling App will be allowed. The primary factor is which +Role is being leveraged by the invocation. + +A given Capability & Role can be public or not, and it can be negotiable +or not. + +If a Role for a Capability is public and non-negotiable, then all Apps +are allowed to invoke it, without any explicit permission from the +platform distributor. This is subject to support, availability, and any +required User Grants. + +If a Role for a Capability is public and negotiable, then Apps **MUST** +be permitted by each distributor to use it on that distributor\'s +devices. + +If a Role for a Capability is private, then it **MUST NOT** be permitted +or granted to any Apps. + +A Role for a Capability **MUST NOT** be flagged as negotiable if it is +private. + +If a Capability is gated by a User Grant requirement, then any +invocation **MUST** check the grant status for the Role in question, and +potentially re-acquire a User Grant for the App to invoke it. + +The following flow diagrams show the order of operations for determining +if a Firebolt API, that depends on one or more capabilities, may be +invoked. The checks in this diagram **MUST** be executed in this order +to ensure that error codes are consistent and User Grant prompts are not +displayed to end users in situations where the API call will still not +be allowed for other reasons. + +![](../../../images/specifications/general/capabilities/image4.png) + +Note that determining user grants may involve presenting a UX to the end +user. During this time, a necessary capability may become unavailable. +Due to this, necessary Capabilities MUST be reevaluated for availability +after determining user grant status. For a more detailed flow diagram +for evaluating User Grants, see [User Grants](./user-grants.md). + +## 5. Configuring Device Capabilities + +The Firebolt Specification describes all the possible, non-Extension +capabilities that a particular version of Firebolt allows. Individual +Firebolt devices, however, may not support every Capability and may want +to override certain aspects of those Capabilities. + +Every Firebolt-compliant device **MUST** include an official, versioned +Firebolt JSON configuration that conforms to the [Firebolt Specification +Schema](#_Firebolt_Specification_Schema), so that the implementation +knows how to configure each capability, and which aspects are +overridable. + +Additionally, every Firebolt-compliant device **MUST** have a versioned + +Firebolt Device JSON configuration that conforms to the Firebolt Device +Schema, so that the implementation knows how each capability has been +overridden by the Distributor for this device. + +See [Firebolt Device Schema](#firebolt-device-schema) for more info. + +### 5.1. Device Supported Capabilities + +Firebolt-compliant devices **MUST** list all the Capabilities they +support in the Device Capabilities configuration file\'s `supported` +array. + +The `supported` array **MUST** contain a `CapabilityConfig` for every +Firebolt Capability supported by this device. + +The `supported` array **MUST** contain an entry for every Capability +from the Firebolt Specification Schema that has a level of `must`. + +The `supported` array **MAY** contain entries for any `should` or +`could` Capabilities. + +The supported array **MUST NOT** contain any entries for Capabilities +not found in the Firebolt Specification Schema. + +### 5.2. Device Grant Policy Overrides + +Firebolt-compliant devices **MAY** override any `GrantPolicies` that +have `overridable` set to `true`. + +This can be used to permanently disable a User Grant + +Firebolt-compliant devices **MUST NOT** override any `GrantPolicies` +that have `overridable` set to `false`. + +`GrantOverrides` are included in the `grantOverrides` array of the +`CapabilityConfig` for the Capability in question. + +If both the Firebolt Specification Schema and the Device Schema have +different, valid overrides for the same capability + appId, then the +device config **MUST** be used by that device. + +## 6. Capability Schemas + +This section describes how Capabilities are represented in the static +Firebolt configuration for a device. + +### 6.1. Firebolt Specification Schema + +Each version of Firebolt **MUST** have a single Firebolt Specification +Schema that is the source-of-truth for and contains all possible +capabilities provided by Apps or Firebolt platforms.\ +\ +See the [Firebolt Specification +Schema](https://github.com/rdkcentral/firebolt-schemas) on GitHub for +more info on exact semantics. + +**NOTE**: This is still in development, and shouldn\'t hold up the +Capabilities Spec + +This schema **MUST** have the following fields for specifying the +Capabilities of that version of the Firebolt Specification. Every field +of this object, and every sub-object it contains is **required** unless +noted by \'optional.\' + +| Property | Type | Description | +|---------------------|----------------|-----------------------------------| +| `version` | `string` | The Firebolt version that this Capability Manifest describes. | +| `capabilities` | `CapabilityPolicy[]` | All possible Firebolt capabilities for this version of Firebolt. | +| `javascript` | `JavaScript[]` | Mapping of W3C JavaScript APIs to Capabilities. | +| `signature` | `string` | Signature from the Firebolt Platform Owner over digest of all other fields. | + +Firebolt \"Bumblebee\" Firebolt Specification JSON can be seen here: + +**NOTE**: This is still in development, and shouldn\'t hold up the +Capabilities Spec + +### 6.2. Firebolt Device Schema + +Each Firebolt device will have a static configuration for overriding +which capabilities are supported, as well as any negotiable Capability +overrides. Every field of this object, and every sub-object it contains +is **required** unless noted by \'optional.\' + +| Property | Type | Description | +|--------------------|--------------------|---------------------------------| +| `version` | `string` | The Firebolt version that this Capability Manifest describes. | +| `capabilities` | `CapabilitiesManifest` | An object describing the Capabilities of this device | + +The `version` **MUST** match the `version` in the [Firebolt +Specification Schema](#_Firebolt_Specification_Schema). + +### 6.3. CapabilitiesManifest + +| Property | Type | Description | +|--------------------|--------------------|---------------------------------| +| `supported` | `string[]` | List of supported capabilities for this device. | +| `grantPolicies` | `Map` | An optional GrantPolicy override for each role: use, manage, provide. | + +See [GrantPolicy](./user-grants.md) in the User Grant requirements document, for more info. + +### 6.4. CapabilityPolicy + +A Firebolt Capability that must, should, or could be implemented by +Firebolt platforms. + +| Property | Type | Description | +|-----------|----------------------|---------------------------------------| +| `id` | `CapabilityKey` | The XRN of the Capability. | +| `level` | `CapabilityLevel` | Requirement level of this Capability. | +| `use` | `PermissionPolicy` | The policy for `use` permissions. | +| `manage` | `PermissionPolicy` | The policy for `manage` permissions. | +| `provide` | `PermissionPolicy` | The policy for `provide` permissions. | + +### 6.5. JavaScript + +A representation of how a specific set of JavaScript APIs is mapped to +capabilities. + +| Property | Type | Description | +|-----------|----------|----------------------------------------------------| +| `class` | `string` | The name of the JavaScript class. | +| `methods` | `string[]` | An array of method names from the class. | +| `uses` | `string[]` | An array of capabilities that these methods `use`, which will apply support, availability, permissions, and user grants as defined herein. | +| `manages` | `string[]` | An array of capabilities that these methods `manage`, which will apply support, availability, permissions, and user grants as defined herein. | +| `synchronous` | `boolean` | Does this API need to support a synchronous return value? If so, then User Grants must be acquired before calling it, or it will simply error out w/out prompting the user for a grant. | + +**Done**: how do User Grants impact synchronous methods? +Capabilities.request() (see above) + +### 6.6. CapabilityKey + +A `string` matching the pattern: + +`/`\^xrn:firebolt:capability:\[a-zA-Z0-9\\-\]{1,32}:\[a-zA-Z0-9\\-\]{1,32}\$/ + +### 6.7. CapabilityLevel + +A `string` enumeration. + +| Value | Description | +|----------------|--------------------------------------------------------| +| `must` | The capability **MUST** be implemented by all Firebolt platforms. | +| `should` | The capability **SHOULD** be implemented by all Firebolt platforms. Platforms without this capability will be reviewed regularly. | +| `could` | The capability is optional and **MAY** be implemented by Firebolt platforms. | + +### 6.8. PermissionPolicy + +An access policy for a particular role of a capability. + +| Property | Type | Description | +|------------------|--------------|-----------------------------------------| +| `public` | `boolean` | Is this role & capability potentially accessible by Apps. | +| `negotiable` | `boolean` | Is this role & capability negotiable between distributors and Apps. | +| `userGrant` | `GrantPolicy` | *Optional*. Does this capability/role require a user grant to be used. | + +If a Policy has `public` set to `false`, then it is a private +Role/Capability that cannot be given to an App. This could be used to +ensure that an important capability is always provided by the platform. +The value of `negotiable` does not matter in this case. + +If a Policy has `public` set to `true` and `negotiable` set to `false`, +then it a Role/Capability that *all* Apps may leverage without needing +to be permitted by the platform distributor. + +If a Policy has `public` set to `true` and `negotiable` set to `true`, +then it is a Role/Capability that can only be leveraged by Apps when +running on a distributor that has permitted access the App. + +### 6.9. CapabilityConfig + +A Firebolt Capability id, along with any user grant overrides. + +| Property | Type | Description | +|------------------|---------------|---------------------------------------| +| `id` | `CapabilityKey` | The XRN of the Capability. | +| `useGrantOverrides` | `GrantPolicy[]` | *Optional*. Does this capability & role require a user grant to be used. | +| `manageGrantOverrides` | `GrantPolicy[]` | *Optional*. Does this capability & role require a user grant to be used. | +| `provideGrantOverrides` | `GrantPolicy[]` | *Optional*. Does this capability & role require a user grant to be used. | + +## 7. Capability to Feature Mapping + +Capabilities denote functionality, and functionality can manifest in +several ways. + +### 7.1. App installation + +Some Apps may not be useful, and may even prove counter to their goals, +if installed on a device without certain capabilities. For example, a +Dolby Vision demonstration App that requires it only be installed on +devices that support Dolby Vision, to avoid playing back lower quality +content that users might mistake for Dolby Vision content. + +If an App includes a capability in one of its App Manifest's `required` +Capability lists: + +- `app.capabilities.used.required` + +- `app.capabilities.managed.required` + +- `app.capabilities.provided.required` + +Then that App **MUST NOT** be installable on Firebolt devices that do +not support that capability. + +Apps that have an unsupported capability inside one of its `optional` +lists **SHOULD NOT** be prevented from installation, unless there is +some other reason outside the scope of this document. + +### 7.2. Firebolt APIs + +Some Firebolt APIs may require the use of one or more Capabilities. +These methods MUST have all required Capabilities listed in the method's +OpenRPC schema. + +Capabilities are listed in one of three OpenRPC extensions attached to +the `'capabilities' `tag on the method: `x-uses`, `x-manages`, +`x-provides`. + +If a method lists more than one Capability for a role, then it may +specify that those capabilities are either all required, any combination +of them is required, or one and only one is required. This is done by +setting the `x-uses-operator` value to either `allOf`, `anyOf`, or +`oneOf`. This value defaults to `allOf` if not specified. An example of +this is an API to find and pair remotes, regardless of which connection +protocol is needed. This API requires `anyOf bluetooth:scan`, +`rf4ce:scan`, `wifi:scan`. If one or more of these capabilities is +available (and permitted) then the API will execute using the available +and permitted protocols. + +If a method *requires* a capability, and that capability requires a user +grant that the App does not have, then the platform **MUST** block and +initiate a User Grant flow. Once granted, the platform **MUST** return +the expected value without the App having to reinvoke the API. If not +granted after the User Grant flow, the platform **MUST** return an +error. + +Capabilities that enhance an API, but are not fundamentally required, +for example a `play` API optionally uses the `'hdr:dolbyvision'` +capability, **MUST NOT** be listed in the OpenRPC schema. + +If a method leverages an *optional* Capability that is unavailable or +unpermitted, it **MUST** leave out or defer the optional functionality. + +If a method leverages an *optional* Capability that requires a user +grant the App does not have, it **MUST** leave out the optional +functionality, and it **MUST NOT** request a user grant. + +### 7.3. Extension APIs + +Extension SDKs implement their methods in the cloud but rely on +Firebolt's Permissions and Capabilities model. + +Requirements for Extension SDKS is outside of the scope of this document. + +### 7.4. W3C APIs +Firebolt platforms may need to control access to certain W3C APIs. For +example, a platform may want to allow some Apps to use the +MediaDevices.getUserMedia API, but not all Apps. + +For each W3C JavaScript API that needs to be gated by a Permission, an +entry in the Firebolt Version Manifest's JavaScript capabilities configuration **MUST** exist, for example: + +```json +{ + JavaScript: [ + { + class: "MediaDevices", + methods: [ + "getUserMedia" + ], + uses: [ + "xrn:firebolt:capability:media:avinput" + ], + manages: [ + "xrn:firebolt:capability:media:avinput" + ] + } + ] +} +``` + +If a W3C API, e.g. MediaDevices, exists in the schema, then it requires +permissions to use. + +The requirements for invoking W3C APIs are the same as [Firebolt +APIs](#firebolt-apis). + +**Proposal**: W3C APIs that need to return synchronously **MUST NOT** +prompt the user to acquire any User Grants. Apps that use these APIs +**MUST** request the grant before invoking the APIs. + +### 7.5. Hidden Permissions + +A hidden permission arises when an API requires permission to one +Capability which in turn requires another Capability gated by a +different permission. This is not supported by Firebolt, and all +permission dependencies should be validated to avoid this. + +Firebolt Capabilities **MUST NOT** have hidden permissions. + +For example: + +- API `Module.methodOne()` requires permission to `use` the + `'contrived:capability1'` Capability + +- API `Module.methodTwo()` requires permission to `use` the + `'contrived:capability2'` Capability + +- `methodOne`'s implementation calls `methodTwo` + +There is now a hidden permission: `methodOne` requires both +`capability1` and `capabilty2`. + +Note that it's fine for a method to leverage an ungated, but also +unavailable Capability, such as a DIAL API failing because the network +capability is unavailable. + +## 8. Firebolt Capability Catalog + +**This isn't done**, but it's intended to be a real, proposed snapshot +(not examples) of the capabilities needed by Firebolt 0.6.0. I still +need to add [Extension Features](#extension-apis) and [W3C +Features](#w3c-apis). + + ++++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
CategoryNameHasUse RoleManage RoleProvide Role
accountuidNARead the app-specific account UIDReset one or all app specific account UIDsNA
advertisingframeworkAbility to use the Ad FrameworkRead the Ad Framework configurationWrite/Delete the Ad Framework configurationProvide cloud services for the Ad Framework Extension APIs
advertisingpolicyAbility to surface ad policy to appsRead Ad Policy settingsWrite/Delete Ad Policy SettingsProvide services for persisting Ad Policy Settings
deviceuidNARead the app-specific device UIDReset one or all app Specific device UIDsNA
contententitlementsAbility to surface app content entitlements in aggregated +experienceQuery entitlements across aggregated providersNAProvide entitlements upon request or as needed
contententityInfoAbility to surface app content metadata in aggregated +experienceQuery entity info metadata across aggregated providersNAProvide entity info metadata upon request or as needed
contentpurchasedContentAbility to surface app user’s purchased content in aggregated +experienceQuery purchased content lists across aggregated providersNAProvide a purchased content list upon request or as needed
contentwatchedAbility to surface app user’s watched content in aggregated +experienceQuery watched content across aggregated providersNAProvide watched content upon request or as needed
contentwatchNextAbility to surface app suggested watch next content in aggregated +experienceQuery suggestions for what to watch next content across aggregated +providersNAProvide suggestions for what to watch next upon request or as +needed
keyboardemailNARequest an email keyboard to be presented and an email returnedManage which apps can provide email keyboardsProvide an email keyboard upon request
lifecyclebackgroundAbility for apps to run in the backgroundPermission for a specific App to run in the backgroundPermission to push any app to the backgroundNA
lifecyclelaunchNAAbility to launch apps within an apps own familyAbility to launch any appNA
lifecyclesuspendAbility for apps to be suspendedNAPermission to suspend any appNA
inputhdmiAbility to switch HDMI inputsPermission to change the inputsPermission to give friendly names the inputsNA
protocolbluetoothBluetoothPermission to scan for devices and pair.Permission to enable/disable.NA
protocolwifiWi-Fi and WPS

Permission to

+
    +
  • scan for networks

  • +
  • pair to network

  • +
  • pair via WPS

  • +
Permission to enable/disable Wi-Fi
protocoltunerHas a tunerPermission to scan for and tune channelsPermission to name channels
intenttuneHas a tunerPermission to request the user be tuned to a channelNAPermission to provide mapping from Tune intents to actual antennae +stations value
+ +## 9. APIs + +### 9.1. Core SDK APIs + +The following APIs are exposed by the Firebolt Core SDK as part of the +`core:capabilities` domain/module. This module is intended for App +developers to have one place to check for all aspects of "can I do +this." Including supported, available, permitted, and granted +Capabilities. It also provides bulk operations for figuring out which +needed Capabilities are unavailable, in order to wait for them, and +which ones are ungranted, in order to request them. + +See the [Firebolt API +Documentation](https://developer.comcast.com/firebolt/core/sdk/latest/api/) +for details around syntax, errors, and permissions. + +#### 9.1.1. Supported + +Returns whether the platform supports the passed capability. + +`function Capabilities.supported(capability string): boolean` + +#### 9.1.2. Available + +Returns whether a capability is available now. + +`function Capabilities.available(capability string): boolean` + +#### 9.1.3. Permitted + +Returns whether the current App has permission to the passed capability +and role. Role defaults to `'use'`. Returns `true` for capability/role +combinations that do not require permission. + +`function Capabilities.permitted(capability: string, role?: string): boolean` + +#### 9.1.4. Granted + +Returns whether the current App has a user grant for passed capability +and role. Role defaults to `'use'`. Returns `true` for capabilities that +do not require a user grant. + +`function Capabilities.granted(capability: string, role?: string): boolean` + +#### 9.1.5. CapabilityInfo + +Object describing all aspects a given Role and Capability for the App in +question: + +`type CapabilityInfo {`\ +` capability: string,` + +` role: "use" | "provide" | "manage",` + +` supported: boolean,` + +` available: boolean,` + +` permitted: boolean,` + +` granted: boolean,` + +` details?: DenyReason[]` + +`}` + +The details array contains an ordered list of reasons why leveraging the +Role might be denied at the current time. + +#### 9.1.6. CapabilityDenyReason + +An string enumeration of reasons why a Capability might not be +invokable. Values in the CapabilityInfo.details array **MUST** be sorted +in the order of this table. + +| Value | Description | +|-----------------|-------------------------------------------------------| +| `unpermitted` | The App is not permitted to leverage the role in question by the current Distributor. | +| `unsupported` | The capability is not supported on this device. | +| `disabled` | The capability is disabled by a user setting. | +| `unavailable` | The capability is unavailable for some reason other than a user setting. | +| `grant-denied` | The User denied the App from using the role in question. | +| `ungranted` | The role in question has not been granted to the App by the User. | + +Some of these values are subsets of others: + +If the details array contains `grant-denied` then it **MUST** also +contain `ungranted`. + +If the details array contains `disabled` then it **MUST** also contain +`unavailable`. + +#### 9.1.7. Info + +Returns an array of `CapabilityInfo` objects for the passed in +capabilities. Typically used to determine which capabilities are +unsupported or unavailable, in bulk. + +`function Capabilities.info(role: string, capabilities: string[]): CapabilityInfo[]` + +#### 9.1.8. PermissionInfo + +Object describing a Capability / Role pair. + +`type PermissionInfo {`\ +` capability: string,` + +` role: "use" | "provide" | "manage"` + +`}` + +#### 9.1.9. Request + +Requests grants for all capability/role combinations in the `roles` +array. Method resolves when all requested capability/roles are granted. +Rejects otherwise. This method may block for extended periods pending +user interaction. + +`function Capabilities.request(grants:PermissionInfo[]): CapabilityInfo[]` + +#### 9.1.10. onAvailable + +Listens for all App permitted capabilities to become available. + +`function Capability.available(capability: string, CapabilityInfo => void): integer` + +#### 9.1.11. onUnavailable + +Listens for all App permitted capabilities to become unavailable. + +`function Capability.unavailable(capability: string, CapabilityInfo => void): integer` + +#### 9.1.12. onGranted + +Listens for all App permitted capabilities to become granted. + +`function Capability.granted(role: string, capability: string, CapabilityInfo => void): integer` + +#### 9.1.13. onRevoked + +Listens for all App permitted capabilities to become revoked. + +`function Capability.revoked(role: string, capability: string, CapabilityInfo => void): integer` + +### 9.2. Manage SDK APIs + +The following APIs are exposed by the Firebolt Manage SDK as part of the +`manage:usergrants` domain/module. This module is intended for +Management UIs that show a list of grants per App or Capability, and +allow users to revoke them. + +See the [Firebolt API +Documentation](https://developer.comcast.com/firebolt/core/sdk/latest/api/) +for details around syntax, errors, and permissions. + +#### 9.2.1. Granted Method + +Returns whether the user has granted this capability to an App + +`UserGrants.granted(appId: string, role: string, capability: string): boolean` \ No newline at end of file diff --git a/requirements/specifications/general/capabilities/user-grants.md b/requirements/specifications/general/capabilities/user-grants.md new file mode 100644 index 000000000..f87342a5c --- /dev/null +++ b/requirements/specifications/general/capabilities/user-grants.md @@ -0,0 +1,593 @@ +# User Grants + +Document status: Candidate Specification + +See [Firebolt Requirements Governance](../../../governance.md) for more info. + +| Contributor | Organization | +| -------------- | -------------- | +| Andrew Bennet | Sky | +| Tim Dibben | Sky | +| Jeremy LaCivita | Comcast | +| Kevin Pearson | Comcast | +| Peter Yu | Comcast | + +## 1. Overview + +This document describes the requirements for Firebolt User Grants. User +Grants enable end-user control over which Apps have access to +potentially sensitive Firebolt Capabilities. For example, a user might +want to explicitly approve of any App attempting to purchase new content +by entering an account-holder PIN on the RCU. + +User Grants are also common when two apps need to share data, for +example, Firebolt has a `Discovery.watched` method that allows apps to +inform Firebolt that a user has finished watching some content. This +method allows an app to **provide** the watch history capability and the +aggregated experience to **use** it. See Firebolt +[Capabilities](./capabilities.md) requirements for more info on the `use` and `provide` roles of a +capability. + +This sort of data exchange involves several parties: minimally the user, +the publisher of the OTT app, and the distributor of the Firebolt +device. Additionally, this exchange could also involve privacy laws of +the user\'s home geo-political state, local I.T. best practices around +PII, or even a particular product\'s public position on their privacy +offering to the market. Because of the importance and complexity of +personal data, Firebolt allows each distributor to configure which +Firebolt capabilities require User Grants and what policies should be +applied to acquiring those grants. + +![Diagram Description automatically +generated](../../../images/specifications/general/capabilities/user-grants/image1.png) + +Distributors can configure what kind of user grant is required for a +particular capability, e.g. a simple acknowledgement of an \"OK\" +button, an account-owner PIN entry, an account-owner three-factor +authentication challenge, etc. + +Distributors can also configure whether certain user grants are opt-in +or opt-out, and whether explicit prompting of the user is required. + +## 2. Table of Contents +- [1. Overview](#1-overview) +- [2. Table of Contents](#2-table-of-contents) +- [3. Introduction to User Grants](#3-introduction-to-user-grants) + - [3.1. Active Grant](#31-active-grant) + - [3.2. Denied Grant](#32-denied-grant) + - [3.3. Unset Grant](#33-unset-grant) + - [3.4. Granting Capability](#34-granting-capability) + - [3.5. Grant Policy](#35-grant-policy) + - [3.6. Privacy Setting](#36-privacy-setting) +- [4. User Grant Requirements](#4-user-grant-requirements) + - [4.1. Granting Capability](#41-granting-capability) + - [4.1.1. Acknowledgement](#411-acknowledgement) + - [4.1.2. Pin Challenge](#412-pin-challenge) + - [4.2. Grant Policy](#42-grant-policy) + - [4.2.1. Grant Requirements](#421-grant-requirements) + - [4.2.2. Grant Lifespan](#422-grant-lifespan) + - [4.2.3. Grant Privacy Setting](#423-grant-privacy-setting) + - [4.3. Distributor Overrides](#43-distributor-overrides) + - [4.4. Application Overrides](#44-application-overrides) +- [5. Grant Execution](#5-grant-execution) + - [5.1. Capability Check](#51-capability-check) + - [5.2. Grant Policy Resolution](#52-grant-policy-resolution) + - [5.3. Active Grant Check](#53-active-grant-check) + - [5.4. Grant Prompt and Resolution](#54-grant-prompt-and-resolution) +- [6. Schemas](#6-schemas) + - [6.1. Grant Policy](#61-grant-policy) + - [6.2. GrantRequirements](#62-grantrequirements) + - [6.3. GrantStep](#63-grantstep) + - [6.4. GrantKey](#64-grantkey) + - [6.4.1. GrantScope](#641-grantscope) + - [6.4.2. GrantLifespan](#642-grantlifespan) + - [6.4.3. PrivacySetting](#643-privacysetting) +- [7. APIs](#7-apis) + - [7.1. Manage SDK APIs](#71-manage-sdk-apis) + - [7.1.1. GrantInfo Object](#711-grantinfo-object) + - [7.1.2. App Method](#712-app-method) + - [7.1.3. Device Method](#713-device-method) + - [7.1.4. Capability Method](#714-capability-method) + - [7.1.5. Grant Method](#715-grant-method) + - [7.1.6. Deny Method](#716-deny-method) + - [7.1.7. Clear Method](#717-clear-method) + + +## 3. Introduction to User Grants + +This section defines the key concepts behind the Firebolt User Grant +system. User Grants build on top of [Firebolt +Capabilities](./capabilities.md). +Since Capabilities are fundamental to user grants, it is recommended to +read the Capabilities requirements first before reading this document. + +Each portion of this section provides a background and conversational +definitions of the terms used in the rest of this document, and through +other Firebolt Requirements Specifications. + +As described in the Overview, a User Grant allows an end user to +explicitly allow (or not allow) an app to use certain Firebolt +Capabilities. Firebolt Distributors need flexibility in configuring +which Capabilities require what types of user interaction, PIN vs +password, etc. + +The following concepts inform how the Firebolt User Grant APIs and +architecture are designed. + +### 3.1. Active Grant + +An **Active Grant** is a User Grant that has already been granted by the +user for a Capability to a specific app (if the Grant Policy is per-app) +or all apps. Active Grants do not need to be granted again (until they +expire) and may be revoked or expire. + +### 3.2. Denied Grant + +A **Denied Grant** is a User Grant that has already been explicitly +*denied* by the user for a Capability to a specific app (if the Grant +Policy is per-app) or all apps. Denied Grants do not need to be denied +again (until they expire) and may be revoked or expire. This serves to +allow the Grant Policy lifetime to be applied to explicit denials as +well. + +### 3.3. Unset Grant + +An **Unset Grant** is a User Grant that has no persisted state. This +could be because the user has never granted or denied it, or because it +was previously granted/denied, but has since expired. Additionally, the +user or platform may clear out an active or denied grant, which results +in this state. + +### 3.4. Granting Capability + +User grants typically require some sort of user experience. Firebolt +delegates display of these user experiences to (typically) first-party +apps, which must provide them as **Granting Capabilities**. Therefore, +it\'s quite possible that using a capability such as watch history +initiates a User Grant request which itself requires another capability, +e.g. the \"acknowledge\" capability, to fulfill the original API. + +In the following diagram, an OTT App is calling an API that would share +watch history data with the 1st party aggregated experience on the +device. This capability is configured with a [Grant +Policy](#grant-policy) (see below) that specifies use of an +Acknowledgement Challenge Capability. the \"Watch History\" capability +is what is being accessed, and the \"Acknowledgement Challenge\" +capability is how this device is configured to grant access to that +capability. Said another way, the Acknowledgement Challenge is the +*Granting Capability*. + +![Diagram Description automatically +generated](../../../images/specifications/general/capabilities/user-grants/image2.png) + +Note that the granting capability UI is provided by another app. The +Provider APIs for each granting capability type are out of scope for +this document. + +A granting capability is generally agnostic to the original capability +that it is helping to grant and can be reused by several capabilities +via a Grant Policy. + +### 3.5. Grant Policy + +A **Grant Policy** ties a set of user grant-related configuration values +to a capability. This allows a Firebolt distributor, or the Firebolt +specification itself, to define the business policy of a particular user +grant. + +Grant Policies specify details like how long the grant lasts and what is +the scope of the grant, e.g. a single app, or all apps. + +### 3.6. Privacy Setting + +A **Privacy Setting** is a link between a Grant Policy and any Firebolt API that is tagged with the Property pattern and returns a +`boolean`. This allows User Grant state to be linked to Privacy Settings +on the device or account. + +![Diagram Description automatically +generated](../../../images/specifications/general/capabilities/user-grants/image3.png) + +How Firebolt devices persist Privacy Settings is outside the scope of +this document. + +## 4. User Grant Requirements + +### 4.1. Granting Capability + +A granting capability **MUST** have the category portion of its +capability key set to `usergrant`. For example: + +`xrn:firebolt:capability:usergrant:acknowledge` + +In order for a granting capability to be available, it **MUST** be +provided by some app that is currently loaded. + +Each granting capability **MUST** have a schema, in the Firebolt +Specification Schema, to validate that any configuration associated with +it is valid. + +#### 4.1.1. Acknowledgement + +The Acknowledgement capability enables a user to acknowledge a user +grant by simply clicking a button. + +This capability has the following key: + +`xrn:firebolt:capability:usergrant:acknowledgechallenge` + +The configuration for this capability is always `null`, i.e., there is +no configuration. + +For more info on how an app can provide the acknowledge capability, see +Acknowledge Provider. **TODO**: add link. + +#### 4.1.2. Pin Challenge + +The Pin Challenge capability enables a user to confirm that they are the +account owner, or a delegate of, by responding to a numeric PIN +challenge. + +This capability has the following key: + +`xrn:firebolt:capability:usergrant:pinchallenge` + +For more info on how an app can provide the acknowledge capability, see +Pin Challenge Provider. **TODO**: add link. + +### 4.2. Grant Policy + +If a Capability is configured with a `GrantPolicy` then the User Grants +specified by the Grant Policy **MUST** be evaluated before a GrantPolicy +llowing access to that Capability. + +A Grant Policy **MUST** have a `scope` for the grant, which determines +whether the user will be granting the capability to the current app or +to all apps. + +A Grant Policy **MUST** have an `overridable` flag that determines if it +may be overridden downstream. For Grant Policies in the Firebolt Version +Manifest, the Device Manifest may override if `overridable` is `true`. +For Grant Policies in the Device Manifest, individual [App +Manifests](https://github.com/rdkcentral/firebolt-configuration/src/schemas/app-manifest/app/app.json) may override the grant if `overridable` is `true`. + +#### 4.2.1. Grant Requirements + +A Grant Policy **MUST** have at least one `GrantRequirements` object, +which itself has a list of zero or more [Granting +Capabilities](#granting-capability) and their configurations. If all the +granting capabilities are supported and available, then they all +**MUST** be invoked. This allows for multiple security checks, e.g. +allow watch history data to be collected if the user has opted into +usage data collection **and** they confirm via an acknowledgement +challenge UI. If one or more of the granting capabilities is not +supported or available, then the entire Grant Requirements block is not +valid for acquiring a user grant. + +A Grant Policy **MAY** have more than one `GrantRequirements` object, +which are ranked in order of preference. This allows for low-friction +but high-security methods to be preferred, e.g. allow in-app purchases +with a passive facial recognition scan, with higher-friction fallbacks +to ensure security on devices with less capabilities, e.g. allow in-app +purchases if the account owner performs a multi-factor authentication +flow. This list of `GrantRequirements` objects is stored in the Grant +Policy\'s `options` field. + +If a Grant Policy has more than one `GrantRequirements` option, then the +highest priority list with all its required capabilities supported and +available **MUST** be used. Note that the app which initiated the +original capability check **does not** need to have permission (or a +grant) to any of the granting capabilities that might be invoked. The +app is not using them, the Firebolt device is using them. + +#### 4.2.2. Grant Lifespan + +A Grant Policy **MUST** have a `lifespan`, which determines how long a +grant is valid for. + +> If the lifespan is set to `once`, then any grant resulting from this +> policy **MUST** be active for a single API transaction. +> +> If the lifespan is set to `forever`, then any grant resulting from +> this policy **MUST** be active until explicitly revoked. +> +> If the lifespan is set to `appActive`, then any grant resulting from +> this policy **MUST** be active until the app goes into one of the +> `inactive`, `suspended`, or `unloading` states. +> +> If the lifespan is set to `powerActive`, then any grant resulting from +> this policy **MUST** be active until the device power goes into any +> state other than `active`. +> +> If the lifespan is set to `seconds`, then any grant resulting from +> this policy **MUST** be active until `lifespanTtl` seconds have passed +> since the grant was issued. + +If a Grant Policy has the `lifespan` set to `seconds`, then the +`lifespanTtl` **MUST** be set to a non-zero, positive number of seconds. + +#### 4.2.3. Grant Privacy Setting + +A Grant Policy **MAY** have a `PrivacySetting` object, which +associates any Firebolt `boolean` property API with this Grant Policy. +The Privacy Setting points to the RPC name of the property\'s getter +method. + +The associated property API **MUST** have an `x-allow-value` extension +on the \"property\" tag set to true or false. + +If a Grant Policy has a Privacy Setting, then the `PrivacySetting` +**MUST** be evaluated **before** any `GrantRequirements`. + +> The Privacy Setting **MUST** have an `autoApplyPolicy` which **MUST** +> be one of the following values: +> +> `always` - Silently grant if the getter for the `property` returns the +> property\'s `x-allow-value`. Silently deny if the getter for the +> `property` returns `!x-allow-value`. +> +> `allowed` - Silently grant if the getter for the `property` returns +> the property\'s `x-allow-value`. +> +> `disallowed` - Silently deny if the getter for the `property` returns +> the property\'s `!x-allow-value`. +> +> `never` - Do not silently grant or deny based on this Grant Policy. +> +> If the Privacy Setting has `revokeGrantsOnDisallow` set to `true`, +> then **all active** user grants that resulted from this Grant Policy +> **MUST** be revoked if and when the property value specified by +> `property` ever changes to `!x-allow-value`. This enables +> distributors to decide whether changes to a Privacy Setting affects +> only new User Grants or existing, active User Grants as well. +> +> If the Privacy Setting has `updateProperty` set to `true`, then a +> successful user grant from this Grant Policy **MUST** also result in +> updating the property value specified by `property` to +> `x-allow-value`. +> +> If the Privacy Setting has `updateProperty` set to `true`, then a +> rejected **or expiring** user grant from this Grant Policy **MUST** +> also result in updating the property value specified by `property` to +> `!x-allow-value`. This is considered a \"disallow\" and +> **MUST** initiate evaluation of the `revokeGrantsOnDisallow` value. +> +> If the Grant Policy `scope` is set to `app` then the property +> specified by `property` **MUST** have a single context +> parameter of type `string` and the requesting appId **MUST** be passed +> to all get/set/subscribe calls fulfilling this section of requirements. + +### 4.3. Distributor Overrides + +Capability Grant Policies in the Firebolt Version Manifest are designed +to be overridden by Distributors to allow for different privacy use +cases across businesses and geographic regions. These overrides go in +the Device Manifest under the `grantPolicies` section of the +`capabilities` section. + +Distributor overrides **MUST** be for Grant Policies that are +`overridable`. + +See the [Firebolt Configuration Schemas +repository](https://github.com/rdkcentral/firebolt-configuration/) for +more information on the Firebolt Version Manifest and Device Manifest. + +### 4.4. Application Overrides + +Firebolt supports creating active grants via the App manifest, which +allows distributors and App publishers to decide that a particular app +will already be granted some capability. This is typically used for +first-party apps that come pre-installed but could be used for other +purposes. + +If an app has a role/capability listed in its App Manifest, then it is +considered to have an active grant for that capability if the manifest +has a valid signature. + +App Manifests overrides **MUST** be for Grant Policies that are +`overridable` and scoped to `app`. + +See the [Firebolt Configuration Schemas +repository](https://github.com/rdkcentral/firebolt-configuration/) for +more information on Firebolt App Manifests. + +## 5. Grant Execution + +When a Firebolt API is called the platform **MUST** first collate all +the device User Grant configurations that apply to every capability that +the API uses. This list **MUST** then be filtered to remove any User +Grants that have already been granted for the current capability for +this app and role. + +### 5.1. Capability Check + +First, all capabilities necessary to fulfill the API are collected. + +![](../../../images/specifications/general/capabilities/user-grants/image4.png) + +### 5.2. Grant Policy Resolution + +Next, each capability is checked to see if there is a Firebolt, +Distributor, or App Grant Policy that applies, and that none of them are +invalid, e.g. an override that is now allowed. + +![Diagram Description automatically +generated](../../../images/specifications/general/capabilities/user-grants/image5.png) + +### 5.3. Active Grant Check + +Then, each Grant Policy is evaluated to see if there is already an +active grant, or if it is linked to a Privacy Setting configured to skip +user-prompts. + +![Diagram Description automatically +generated](../../../images/specifications/general/capabilities/user-grants/image6.png) + +### 5.4. Grant Prompt and Resolution + +Finally, each needed Granting Capability is invoked to present a UX to +the end user, and any linked Privacy Settings are updated as +appropriate. If all succeeds, then the API is invoked. + +![Diagram Description automatically +generated](../../../images/specifications/general/capabilities/user-grants/image7.png) + +## 6. Schemas + +The following schemas give an overview of the schemas outlined by this +document. See the [Firebolt Configuration Schemas +repository](https://github.com/rdkcentral/firebolt-configuration/) for +the latest versions of these schemas. + +### 6.1. Grant Policy + +Grant Policies have the following properties. + +| Property | Type | Description | +|-------------|-----------------------|-------------------------------------| +| `options` | `GrantRequirements[]` | An array of GrantRequirements, any one of which could be used to Grant a requested capability/role to an App. The first one that is completely supported by the current device should be used. | +| `scope` | `string` | Whether the resulting user grant applies to all Apps or just the requesting App. | +| `lifespan` | `string` | How long the resulting user grant (or deny) will last. | +| `lifespanTtl` | `integer` | If lifespan is `'seconds'` this represents the number of seconds. | +| `privacySetting` | `PrivacySetting` | Links this Grant Policy to a privacy setting. | +| `overridable` | `boolean` | Whether a distributor may override this GrantPolicy with their own. | + +### 6.2. GrantRequirements + +A list of `GrantSteps` objects describing which capabilities and any +optional configuration needed to fulfill this grant policy. These +capabilities must be from the capability category `usergrant` which +denotes special capabilities that perform user grants, e.g. an +acknowledge challenge capability. + +| Property | Type | Description | +|-------------|-----------------|-------------------------------------------| +| `steps` | `GrantStep[]` | An array of GrantSteps, all of which need to be verified to fulfill this GrantPolicy. | + +### 6.3. GrantStep + +| Property | Type | Description | +|-------------|----------------|-------------------------------------------| +| `capability` | `string` | The Granting Capability to use for this step in the grant flow. | +| `configuration ` | `object` | The configuration for the Granting Capability, which is specific to each type. | + +### 6.4. GrantKey + +A CapabilityKey with the \ set to `usergrant`: + +`/\^xrn:firebolt:capability:usergrant:\[a-zA-Z0-9\\-\]{1,32}\$/` + +#### 6.4.1. GrantScope + +A `string` enumeration. + +| Value | Description | +|----------------|--------------------------------------------------------| +| `device` | The resulting user grant will apply to all Apps on the device. | +| `app` | The resulting user grant will apply to the requesting App only. | + +#### 6.4.2. GrantLifespan + +A `string` enumeration. + +The resulting user grant will only be valid: + +| Value | Description | +|----------------|--------------------------------------------------------| +| `once` | for a single usage, e.g. one API call. | +| `forever` | until the end of time. | +| `appActive` | until the app enters a non-Active Lifecycle state: inactive, suspended | +| `powerActive` | until the device leaves the Active power state. | +| `seconds` | until \ seconds have passed. | + +#### 6.4.3. PrivacySetting + +| Value | | Description | +|--------------------|----------|------------------------------------------| +| `property` | string | The fully qualified RPC method name of the associated property setter, e.g. `Privacy.limitAdTracking` | +| `autoApplyPolicy` | string | Set the auto grant policy to `always`, `allowed`, `disallowed`, `never` | +| `revokeGrantsOnDisallow` | boolean | Any grants made from this policy will be revoked if/when the property is ever set to the deny value | +| `updateProperty` | boolean | Whether to update the property value to match the grant. | + +## 7. APIs + +APIs for User Grants are covered in the [Capabilities Requirements +document](./capabilities.md). + +### 7.1. Manage SDK APIs + +These APIs are intended for trusted apps to expose a UI for end-users to +manage the grants given to the device and various apps. Permission for +these APIs should only be given to a trusted settings app performing +this function. + +#### 7.1.1. GrantInfo Object + +Object describing a persisted active or denied Grant. + +```typescript +type GrantInfo = { + appId: string, + state: "active" | "denied", + capability: string, + role: "use" | "manage" | "provide" + lifespan: "once" | "forever" | "appActive" | " powerActive" | "seconds" + expires: integer +} +``` + +#### 7.1.2. App Method + +Returns all active and denied user grants for the given App, **NOT** +including those granted to all apps via the device. + +```typescript +UserGrants.app(appId: string): GrantInfo[] +``` + +#### 7.1.3. Device Method + +Returns all active and denied user grants for the Device. + +```typescript +UserGrants.device(): GrantInfo[] +``` + +#### 7.1.4. Capability Method + +Returns all active and denied user grants for the given Capability. + +```typescript +UserGrants.capability(capability: string): GrantInfo [] +``` + +#### 7.1.5. Grant Method + +Grants a given Capability, to a specific app if appropriate. Calling +this results in a persisted Active Grant that lasts for the duration of +the Grant Policy lifespan. + + +```typescript +UserGrants.grant(role: string, capability: string, appId?:string): void +``` + +#### 7.1.6. Deny Method + +Denies a given Capability, to a specific app if appropriate. Calling +this results in a persisted Denied Grant that lasts for the duration of +the Grant Policy lifespan. + +```typescript +UserGrants.deny(role: string, capability: string, appId?: string):void +``` + +#### 7.1.7. Clear Method + +Clears any persisted active or denied grant for a Capability, for a +specific app if appropriate. This results in an Unset Grant. This method +may take a wildcard value of `'*'` for role, capability, or appId, in +order to clear grant state in bulk. + +```typescript +UserGrants.clear(role: string, capability: string, appId?:string): void +``` From dd05d3dd2600b0933ff3fd505d0557e3bafd9cb4 Mon Sep 17 00:00:00 2001 From: Jeremy LaCivita Date: Fri, 16 Jun 2023 12:21:28 -0400 Subject: [PATCH 2/2] fix: Cleanup of Capabilities requirements Remove dangling requirements or replaced them with "This concept is out of scope for this document" --- .../general/capabilities/capabilities.md | 654 ++---------------- 1 file changed, 70 insertions(+), 584 deletions(-) diff --git a/requirements/specifications/general/capabilities/capabilities.md b/requirements/specifications/general/capabilities/capabilities.md index 4a24d1498..30430ec06 100644 --- a/requirements/specifications/general/capabilities/capabilities.md +++ b/requirements/specifications/general/capabilities/capabilities.md @@ -2,7 +2,7 @@ Document Status: Candidate Specification -See [Firebolt Requirements Governance](./governance.md) for more info. +See [Firebolt Requirements Governance](../../../governance.md) for more info. | Contributor | Organization | | -------------- | -------------- | @@ -42,7 +42,6 @@ generated](../../../images/specifications/general/capabilities/image2.png) - [3.3. Permissions](#33-permissions) - [3.4. Roles](#34-roles) - [3.5. User Grants](#35-user-grants) - - [3.6. Capability Identifiers](#36-capability-identifiers) - [4. How Capabilities Work](#4-how-capabilities-work) - [4.1. Supported Capabilities](#41-supported-capabilities) - [4.2. Available Capabilities](#42-available-capabilities) @@ -53,46 +52,24 @@ generated](../../../images/specifications/general/capabilities/image2.png) - [5.1. Device Supported Capabilities](#51-device-supported-capabilities) - [5.2. Device Grant Policy Overrides](#52-device-grant-policy-overrides) - [6. Capability Schemas](#6-capability-schemas) - - [6.1. Firebolt Specification Schema](#61-firebolt-specification-schema) - - [6.2. Firebolt Device Schema](#62-firebolt-device-schema) - - [6.3. CapabilitiesManifest](#63-capabilitiesmanifest) - - [6.4. CapabilityPolicy](#64-capabilitypolicy) - - [6.5. JavaScript](#65-javascript) - - [6.6. CapabilityKey](#66-capabilitykey) - - [6.7. CapabilityLevel](#67-capabilitylevel) - - [6.8. PermissionPolicy](#68-permissionpolicy) - - [6.9. CapabilityConfig](#69-capabilityconfig) + - [6.1. Firebolt Specification Manifest](#61-firebolt-specification-manifest) + - [6.2. Firebolt Device Manifest](#62-firebolt-device-manifest) - [7. Capability to Feature Mapping](#7-capability-to-feature-mapping) - [7.1. App installation](#71-app-installation) - [7.2. Firebolt APIs](#72-firebolt-apis) - [7.3. Extension APIs](#73-extension-apis) - - [7.4. W3C APIs](#74-w3c-apis) - - [7.5. Hidden Permissions](#75-hidden-permissions) + - [7.4. Hidden Permissions](#74-hidden-permissions) - [8. Firebolt Capability Catalog](#8-firebolt-capability-catalog) - [9. APIs](#9-apis) - [9.1. Core SDK APIs](#91-core-sdk-apis) - - [9.1.1. Supported](#911-supported) - - [9.1.2. Available](#912-available) - - [9.1.3. Permitted](#913-permitted) - - [9.1.4. Granted](#914-granted) - - [9.1.5. CapabilityInfo](#915-capabilityinfo) - - [9.1.6. CapabilityDenyReason](#916-capabilitydenyreason) - - [9.1.7. Info](#917-info) - - [9.1.8. PermissionInfo](#918-permissioninfo) - - [9.1.9. Request](#919-request) - - [9.1.10. onAvailable](#9110-onavailable) - - [9.1.11. onUnavailable](#9111-onunavailable) - - [9.1.12. onGranted](#9112-ongranted) - - [9.1.13. onRevoked](#9113-onrevoked) - [9.2. Manage SDK APIs](#92-manage-sdk-apis) - - [9.2.1. Granted Method](#921-granted-method) ## 3. Introduction to Capabilities -This section defines the key concepts behind the Firebolt Capabilities -system. Each portion of this section provides a background and -conversational definitions of the terms used in the rest of this -document, and through all Firebolt Requirements Specifications. +This section is non-normative and defines the key concepts behind the +Firebolt Capabilities system. Each portion of this section provides a +background and conversational definitions of the terms used in the rest +of this document, and through all Firebolt Requirements Specifications. ### 3.1. Capabilities @@ -127,30 +104,25 @@ A Capability may rely on intermittently available resources, for example a network capability requires an Ethernet or Wi-Fi network connection. A supported capability is only considered available if those resources -could be used by the App right now (pending any needed [User -Grants](#user-grants)). For example, the needed resources are not -disabled, not tied up by other apps, and not experiencing any -intermittent network, hardware, or signal issues. +could be used by the App right now (without taking into account any needed permissions or [User Grants](#user-grants)). For example, the needed +resources are not disabled, not tied up by the platform, and not experiencing +any intermittent network, hardware, or signal issues. A supported capability is always supported, but it may not always be *available*. -If a Capability requires Permissions, then it will never be available to -Apps without at least one Role assigned for that Capability (see -[Permissions](#permissions), below). +Availability of a capability is a global status, not a per-app status. -Capabilities may be available to one App while not available to another -based on non-Permissions criteria. For example, the Video Pipeline may -be available to Apps in the Foreground or Background Lifecycle state, -but not Apps in the Inactive state. - -Firebolt platforms determine if a supported capability is available or -not. +If a Capability is available, then it is considered available globally. +Capabilities can not be available to one app, while simultaneously being +unavailable to another app. This is handled by permissions, or by +capability-specific error management, e.g. returning an error to an app that +attempts to use the video pipeline while in the Inactive Lifecycle state. ### 3.3. Permissions A Permission is what allows an App to attempt to invoke an aspect of a -Capability. Permissions to a Capability are granted to an App with a +Capability. Permissions to a Capability are assigned to an App with a [Role](#roles), by a Firebolt Distributor. Firebolt documents and APIs will use the term "Permission" @@ -233,7 +205,7 @@ operations from one role by virtue of being granted another. Roles may have overlapping functionality. A [Permission](#permissions) is the combination of a Capability w/ a -Role determines which specific operations are permitted. +Role and determines which specific operations are permitted. ### 3.5. User Grants @@ -252,13 +224,13 @@ Distributors may override any User Grant details that are defined by the Firebolt Specification if that User Grant Policy is set to `overridable: true`. -**Proposal:** Consumers want to know that their Smart TV platform treats +Consumers want to know that their Smart TV platform treats security as a first-class design principal. As such, table-stakes User Grant policies, e.g. App access to Bluetooth, may be denoted as overridable: false in the Firebolt Specification, to remove any possibility of a security flaw. -An App is considered to have a User Grant to a Capability if it is: +An App is considered to have a User Grant to a Capability if it: - Has Permission to the Capability @@ -275,53 +247,28 @@ approval). See [User Granted Capabilities](#user-granted-capabilities) for more info. -### 3.6. Capability Identifiers - -Capabilities **MUST** be identified by an XRN. The structure of a Firebolt Capability URN is as follows: - -`xrn:firebolt:capability::` - -For example: - -`xrn:firebolt:capability:protocol:bluetooth` - -The `` is used to group capabilities together to -facilitate bulk permissions and **MUST** match the following regular -expression: - -`^[a-zA-Z0-9\-]{1,32}$` - -Note that categories are not related to individual SDK modules, which -group things to facilitate App development simplicity, not permissions -management across multiple SDKs. - -The `` identifies the specific capability when combined with the -`` and **MUST** match the following regular expression: - -`^[a-zA-Z0-9\-]{1,32}$` - ## 4. How Capabilities Work A given Capability may or may not be supported or available. Additionally, a given Role may or may not be permitted or granted for a given Capability. -While support for a Capability is static and global, the other status -may differ from App to App. +While support and availability of a Capability is static and global, the +permission and grant status may differ from App to App. -Determining the status of a Role and/or Capability is fundamental to +Determining the status of a Role and Capability is fundamental to both the Platform and the Apps that run on it. ### 4.1. Supported Capabilities Once an App has been launched, it may need to check if a certain -capability is supported, to present the appropriate user experience. For +capability is supported to present the appropriate user experience. For example, an App may want to put Dolby Atmos badges next to its content, but only if the platform supports Dolby Atmos. The Firebolt Specification determines which capabilities **MUST** be supported by all Firebolt Devices, by listing those Capabilities in the -Firebolt Specification Schema as `level: "must"` in the Capabilities +[Firebolt Specification Schema](#61-firebolt-specification-schema) as `level: "must"` in the Capabilities array. For a capability to be supported, it **MUST** have *one* or *both* of @@ -353,7 +300,7 @@ example, an App that uses an external camera may need to check if the user has set up their camera before proceeding to the main user experience. -A Capability is available to an App if **all** the following are true: +A Capability is available if **all** the following are true: > An available Capability **MUST** be supported. > @@ -365,11 +312,6 @@ A Capability is available to an App if **all** the following are true: > An available Capability **MUST NOT** be currently disabled by any > user, account, or device setting. > -> An available Capability **MUST** either be approved for all Apps by -> the Firebolt Specification, **OR** have a Permission assigned to the -> App in question by the distributor or the providing App, for at least -> one Role. -> > An available Capability **MUST** be considered available by at least > one provider of the capability. This is specified by the requirements > for each feature. @@ -383,8 +325,8 @@ requirements to all [APIs](#apis) outlined below. ### 4.3. Permitted Capabilities -Capabilities may be permitted to *all* Apps by the Firebolt -Specification Schema, or to individual Apps by the Distributor-signed +Capabilities may be permitted to *all* Apps by the [Firebolt +Specification Schema](../../firebolt-specification.json), or to individual Apps by the Distributor-signed App Manifest. An App may need to know if a Capability is permitted to it once it has @@ -399,8 +341,7 @@ to sign in. Determining if a Capability is permitted requires knowing which **Role** is being leveraged. -Permitted capabilities **MUST** be denoted as `public` in the [Firebolt -Specification Schema](#_Firebolt_Specification_Schema). +Permitted capabilities **MUST** be denoted as `public` in the Specification Schema](#61-firebolt-specification-schema). Additionally, **one** of the following **MUST** be true as well: @@ -501,8 +442,7 @@ Firebolt devices, however, may not support every Capability and may want to override certain aspects of those Capabilities. Every Firebolt-compliant device **MUST** include an official, versioned -Firebolt JSON configuration that conforms to the [Firebolt Specification -Schema](#_Firebolt_Specification_Schema), so that the implementation +Firebolt JSON configuration that conforms to the Specification Schema](#61-firebolt-specification-schema), so that the implementation knows how to configure each capability, and which aspects are overridable. @@ -524,7 +464,7 @@ The `supported` array **MUST** contain a `CapabilityConfig` for every Firebolt Capability supported by this device. The `supported` array **MUST** contain an entry for every Capability -from the Firebolt Specification Schema that has a level of `must`. +from the Specification Schema](#61-firebolt-specification-schema) that has a level of `must`. The `supported` array **MAY** contain entries for any `should` or `could` Capabilities. @@ -554,143 +494,53 @@ device config **MUST** be used by that device. This section describes how Capabilities are represented in the static Firebolt configuration for a device. -### 6.1. Firebolt Specification Schema +### 6.1. Firebolt Specification Manifest Each version of Firebolt **MUST** have a single Firebolt Specification -Schema that is the source-of-truth for and contains all possible -capabilities provided by Apps or Firebolt platforms.\ -\ -See the [Firebolt Specification -Schema](https://github.com/rdkcentral/firebolt-schemas) on GitHub for -more info on exact semantics. - -**NOTE**: This is still in development, and shouldn\'t hold up the -Capabilities Spec - -This schema **MUST** have the following fields for specifying the -Capabilities of that version of the Firebolt Specification. Every field -of this object, and every sub-object it contains is **required** unless -noted by \'optional.\' - -| Property | Type | Description | -|---------------------|----------------|-----------------------------------| -| `version` | `string` | The Firebolt version that this Capability Manifest describes. | -| `capabilities` | `CapabilityPolicy[]` | All possible Firebolt capabilities for this version of Firebolt. | -| `javascript` | `JavaScript[]` | Mapping of W3C JavaScript APIs to Capabilities. | -| `signature` | `string` | Signature from the Firebolt Platform Owner over digest of all other fields. | - -Firebolt \"Bumblebee\" Firebolt Specification JSON can be seen here: - -**NOTE**: This is still in development, and shouldn\'t hold up the -Capabilities Spec - -### 6.2. Firebolt Device Schema - -Each Firebolt device will have a static configuration for overriding -which capabilities are supported, as well as any negotiable Capability -overrides. Every field of this object, and every sub-object it contains -is **required** unless noted by \'optional.\' - -| Property | Type | Description | -|--------------------|--------------------|---------------------------------| -| `version` | `string` | The Firebolt version that this Capability Manifest describes. | -| `capabilities` | `CapabilitiesManifest` | An object describing the Capabilities of this device | - -The `version` **MUST** match the `version` in the [Firebolt -Specification Schema](#_Firebolt_Specification_Schema). - -### 6.3. CapabilitiesManifest +Manifest that is the source-of-truth for and contains all possible +capabilities provided, used, or managed by Apps or Firebolt platforms. -| Property | Type | Description | -|--------------------|--------------------|---------------------------------| -| `supported` | `string[]` | List of supported capabilities for this device. | -| `grantPolicies` | `Map` | An optional GrantPolicy override for each role: use, manage, provide. | ++The Firebolt Specification Manifest **MUST** list all capabilities defined by that version of Firebolt. -See [GrantPolicy](./user-grants.md) in the User Grant requirements document, for more info. +The Firebolt Specification Manifest **MUST** specify whether each capability `must`, `should`, or `could` be implemented by Firebolt devices. -### 6.4. CapabilityPolicy +The Firebolt Specification Manifest **MUST** specify whether each role, i.e. `use`, `manage`, and `provide`, is a `public` permission that apps may call. -A Firebolt Capability that must, should, or could be implemented by -Firebolt platforms. +See [Invoking Capabilities](#46-invoking-capabilities), for more info on public and negotiable capabilities. -| Property | Type | Description | -|-----------|----------------------|---------------------------------------| -| `id` | `CapabilityKey` | The XRN of the Capability. | -| `level` | `CapabilityLevel` | Requirement level of this Capability. | -| `use` | `PermissionPolicy` | The policy for `use` permissions. | -| `manage` | `PermissionPolicy` | The policy for `manage` permissions. | -| `provide` | `PermissionPolicy` | The policy for `provide` permissions. | +The Firebolt Specification Manifest **MUST** include the entire Firebolt OpenRPC specification for all APIs in the 'apis` block. -### 6.5. JavaScript +The Firebolt Specification Manifest **MUST** specify which major versions of the Firebolt RPC APIs are required for backwards compatibility. -A representation of how a specific set of JavaScript APIs is mapped to -capabilities. +The [Firebolt Version Manifest JSON-Schema](https://github.com/rdkcentral/firebolt-configuration/blob/main/src/schemas/version-manifest/version-manifest.json) defines the JSON semantics for this file. -| Property | Type | Description | -|-----------|----------|----------------------------------------------------| -| `class` | `string` | The name of the JavaScript class. | -| `methods` | `string[]` | An array of method names from the class. | -| `uses` | `string[]` | An array of capabilities that these methods `use`, which will apply support, availability, permissions, and user grants as defined herein. | -| `manages` | `string[]` | An array of capabilities that these methods `manage`, which will apply support, availability, permissions, and user grants as defined herein. | -| `synchronous` | `boolean` | Does this API need to support a synchronous return value? If so, then User Grants must be acquired before calling it, or it will simply error out w/out prompting the user for a grant. | +The latest version of the firebolt-specification.json **MUST** be available at this URL: -**Done**: how do User Grants impact synchronous methods? -Capabilities.request() (see above) - -### 6.6. CapabilityKey - -A `string` matching the pattern: - -`/`\^xrn:firebolt:capability:\[a-zA-Z0-9\\-\]{1,32}:\[a-zA-Z0-9\\-\]{1,32}\$/ - -### 6.7. CapabilityLevel - -A `string` enumeration. - -| Value | Description | -|----------------|--------------------------------------------------------| -| `must` | The capability **MUST** be implemented by all Firebolt platforms. | -| `should` | The capability **SHOULD** be implemented by all Firebolt platforms. Platforms without this capability will be reviewed regularly. | -| `could` | The capability is optional and **MAY** be implemented by Firebolt platforms. | - -### 6.8. PermissionPolicy +``` +http://rdkcentral.github.io/firebolt/requirements/latest/specifications/firebolt-specification.json +``` -An access policy for a particular role of a capability. +The version of the firebolt-specification.json associated with this document **SHOULD** be available at [../../firebolt-specification.json](../../firebolt-specification.json). -| Property | Type | Description | -|------------------|--------------|-----------------------------------------| -| `public` | `boolean` | Is this role & capability potentially accessible by Apps. | -| `negotiable` | `boolean` | Is this role & capability negotiable between distributors and Apps. | -| `userGrant` | `GrantPolicy` | *Optional*. Does this capability/role require a user grant to be used. | +### 6.2. Firebolt Device Manifest -If a Policy has `public` set to `false`, then it is a private -Role/Capability that cannot be given to an App. This could be used to -ensure that an important capability is always provided by the platform. -The value of `negotiable` does not matter in this case. +Each Firebolt device will have a static configuration for overriding +which capabilities are supported, as well as any negotiable Capability +overrides. -If a Policy has `public` set to `true` and `negotiable` set to `false`, -then it a Role/Capability that *all* Apps may leverage without needing -to be permitted by the platform distributor. +The Device Manifest **MUST** specify which capabilities the device supports. -If a Policy has `public` set to `true` and `negotiable` set to `true`, -then it is a Role/Capability that can only be leveraged by Apps when -running on a distributor that has permitted access the App. +The Device Manfiest **MUST** include every capability from the Firebolt Specification Manifest that has a `level` of `must` in its supported list. -### 6.9. CapabilityConfig +The Device Manifest **MUST** specify which capabilities have distributor define Grant Policy Overrides. -A Firebolt Capability id, along with any user grant overrides. +The Device Manfiest **MUST NOT** have any Grant Policies that override Grant Policies from the Firebolt Specification Manifest that have `overridable` set to `false`. -| Property | Type | Description | -|------------------|---------------|---------------------------------------| -| `id` | `CapabilityKey` | The XRN of the Capability. | -| `useGrantOverrides` | `GrantPolicy[]` | *Optional*. Does this capability & role require a user grant to be used. | -| `manageGrantOverrides` | `GrantPolicy[]` | *Optional*. Does this capability & role require a user grant to be used. | -| `provideGrantOverrides` | `GrantPolicy[]` | *Optional*. Does this capability & role require a user grant to be used. | +The [Firebolt Device Manifest JSON-Schema](https://github.com/rdkcentral/firebolt-configuration/blob/main/src/schemas/device-manifest/device-manifest.json) defines the JSON semantics for this file. ## 7. Capability to Feature Mapping -Capabilities denote functionality, and functionality can manifest in -several ways. +Capabilities denote functionality, and functionality can manifest in several ways. ### 7.1. App installation @@ -719,8 +569,7 @@ some other reason outside the scope of this document. ### 7.2. Firebolt APIs Some Firebolt APIs may require the use of one or more Capabilities. -These methods MUST have all required Capabilities listed in the method's -OpenRPC schema. +These methods **MUST** have all required Capabilities listed in the method's OpenRPC schema. Capabilities are listed in one of three OpenRPC extensions attached to the `'capabilities' `tag on the method: `x-uses`, `x-manages`, @@ -728,14 +577,12 @@ the `'capabilities' `tag on the method: `x-uses`, `x-manages`, If a method lists more than one Capability for a role, then it may specify that those capabilities are either all required, any combination -of them is required, or one and only one is required. This is done by -setting the `x-uses-operator` value to either `allOf`, `anyOf`, or -`oneOf`. This value defaults to `allOf` if not specified. An example of +of them is required, or one and only one is required. The platform **MUST parse any `x-uses-operator` values which will have values of either `allOf`, `anyOf`, or `oneOf`. This value defaults to `allOf` if not specified. An example of this is an API to find and pair remotes, regardless of which connection -protocol is needed. This API requires `anyOf bluetooth:scan`, +protocol is needed. This API requires `anyOf` `bluetooth:scan`, `rf4ce:scan`, `wifi:scan`. If one or more of these capabilities is available (and permitted) then the API will execute using the available -and permitted protocols. +and permitted protocols. The same pattern applies to `x-manages-operator`. The `x-provides` extension only supports a single capability, so this pattern does not extend to providers. If a method *requires* a capability, and that capability requires a user grant that the App does not have, then the platform **MUST** block and @@ -746,7 +593,7 @@ error. Capabilities that enhance an API, but are not fundamentally required, for example a `play` API optionally uses the `'hdr:dolbyvision'` -capability, **MUST NOT** be listed in the OpenRPC schema. +capability, **MUST NOT** be listed in the OpenRPC schema. These are considered *optional* capabilities of the method implementation. If a method leverages an *optional* Capability that is unavailable or unpermitted, it **MUST** leave out or defer the optional functionality. @@ -760,46 +607,9 @@ functionality, and it **MUST NOT** request a user grant. Extension SDKs implement their methods in the cloud but rely on Firebolt's Permissions and Capabilities model. -Requirements for Extension SDKS is outside of the scope of this document. - -### 7.4. W3C APIs -Firebolt platforms may need to control access to certain W3C APIs. For -example, a platform may want to allow some Apps to use the -MediaDevices.getUserMedia API, but not all Apps. - -For each W3C JavaScript API that needs to be gated by a Permission, an -entry in the Firebolt Version Manifest's JavaScript capabilities configuration **MUST** exist, for example: - -```json -{ - JavaScript: [ - { - class: "MediaDevices", - methods: [ - "getUserMedia" - ], - uses: [ - "xrn:firebolt:capability:media:avinput" - ], - manages: [ - "xrn:firebolt:capability:media:avinput" - ] - } - ] -} -``` - -If a W3C API, e.g. MediaDevices, exists in the schema, then it requires -permissions to use. - -The requirements for invoking W3C APIs are the same as [Firebolt -APIs](#firebolt-apis). - -**Proposal**: W3C APIs that need to return synchronously **MUST NOT** -prompt the user to acquire any User Grants. Apps that use these APIs -**MUST** request the grant before invoking the APIs. +Requirements for Extension SDKS are outside of the scope of this document. -### 7.5. Hidden Permissions +### 7.4. Hidden Permissions A hidden permission arises when an API requires permission to one Capability which in turn requires another Capability gated by a @@ -827,348 +637,24 @@ capability is unavailable. ## 8. Firebolt Capability Catalog -**This isn't done**, but it's intended to be a real, proposed snapshot -(not examples) of the capabilities needed by Firebolt 0.6.0. I still -need to add [Extension Features](#extension-apis) and [W3C -Features](#w3c-apis). - - -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
CategoryNameHasUse RoleManage RoleProvide Role
accountuidNARead the app-specific account UIDReset one or all app specific account UIDsNA
advertisingframeworkAbility to use the Ad FrameworkRead the Ad Framework configurationWrite/Delete the Ad Framework configurationProvide cloud services for the Ad Framework Extension APIs
advertisingpolicyAbility to surface ad policy to appsRead Ad Policy settingsWrite/Delete Ad Policy SettingsProvide services for persisting Ad Policy Settings
deviceuidNARead the app-specific device UIDReset one or all app Specific device UIDsNA
contententitlementsAbility to surface app content entitlements in aggregated -experienceQuery entitlements across aggregated providersNAProvide entitlements upon request or as needed
contententityInfoAbility to surface app content metadata in aggregated -experienceQuery entity info metadata across aggregated providersNAProvide entity info metadata upon request or as needed
contentpurchasedContentAbility to surface app user’s purchased content in aggregated -experienceQuery purchased content lists across aggregated providersNAProvide a purchased content list upon request or as needed
contentwatchedAbility to surface app user’s watched content in aggregated -experienceQuery watched content across aggregated providersNAProvide watched content upon request or as needed
contentwatchNextAbility to surface app suggested watch next content in aggregated -experienceQuery suggestions for what to watch next content across aggregated -providersNAProvide suggestions for what to watch next upon request or as -needed
keyboardemailNARequest an email keyboard to be presented and an email returnedManage which apps can provide email keyboardsProvide an email keyboard upon request
lifecyclebackgroundAbility for apps to run in the backgroundPermission for a specific App to run in the backgroundPermission to push any app to the backgroundNA
lifecyclelaunchNAAbility to launch apps within an apps own familyAbility to launch any appNA
lifecyclesuspendAbility for apps to be suspendedNAPermission to suspend any appNA
inputhdmiAbility to switch HDMI inputsPermission to change the inputsPermission to give friendly names the inputsNA
protocolbluetoothBluetoothPermission to scan for devices and pair.Permission to enable/disable.NA
protocolwifiWi-Fi and WPS

Permission to

-
    -
  • scan for networks

  • -
  • pair to network

  • -
  • pair via WPS

  • -
Permission to enable/disable Wi-Fi
protocoltunerHas a tunerPermission to scan for and tune channelsPermission to name channels
intenttuneHas a tunerPermission to request the user be tuned to a channelNAPermission to provide mapping from Tune intents to actual antennae -stations value
+Firebolt Capabilities are enumeraged in the [Firebolt Specification Manifest](../../firebolt-specification.json). ## 9. APIs +All of the APIs below have full OpenRPC schemas in the [Firebolt OpenRPC JSON document](../../../specifications/firebolt-open-rpc.json). ### 9.1. Core SDK APIs -The following APIs are exposed by the Firebolt Core SDK as part of the -`core:capabilities` domain/module. This module is intended for App +Several APIs are exposed by the Firebolt Core SDK as part of the +`Capabilities` module. This module is intended for App developers to have one place to check for all aspects of "can I do this." Including supported, available, permitted, and granted Capabilities. It also provides bulk operations for figuring out which needed Capabilities are unavailable, in order to wait for them, and which ones are ungranted, in order to request them. -See the [Firebolt API -Documentation](https://developer.comcast.com/firebolt/core/sdk/latest/api/) -for details around syntax, errors, and permissions. - -#### 9.1.1. Supported - -Returns whether the platform supports the passed capability. - -`function Capabilities.supported(capability string): boolean` - -#### 9.1.2. Available - -Returns whether a capability is available now. - -`function Capabilities.available(capability string): boolean` - -#### 9.1.3. Permitted - -Returns whether the current App has permission to the passed capability -and role. Role defaults to `'use'`. Returns `true` for capability/role -combinations that do not require permission. - -`function Capabilities.permitted(capability: string, role?: string): boolean` - -#### 9.1.4. Granted - -Returns whether the current App has a user grant for passed capability -and role. Role defaults to `'use'`. Returns `true` for capabilities that -do not require a user grant. - -`function Capabilities.granted(capability: string, role?: string): boolean` - -#### 9.1.5. CapabilityInfo - -Object describing all aspects a given Role and Capability for the App in -question: - -`type CapabilityInfo {`\ -` capability: string,` - -` role: "use" | "provide" | "manage",` - -` supported: boolean,` - -` available: boolean,` - -` permitted: boolean,` - -` granted: boolean,` - -` details?: DenyReason[]` - -`}` - -The details array contains an ordered list of reasons why leveraging the -Role might be denied at the current time. - -#### 9.1.6. CapabilityDenyReason - -An string enumeration of reasons why a Capability might not be -invokable. Values in the CapabilityInfo.details array **MUST** be sorted -in the order of this table. - -| Value | Description | -|-----------------|-------------------------------------------------------| -| `unpermitted` | The App is not permitted to leverage the role in question by the current Distributor. | -| `unsupported` | The capability is not supported on this device. | -| `disabled` | The capability is disabled by a user setting. | -| `unavailable` | The capability is unavailable for some reason other than a user setting. | -| `grant-denied` | The User denied the App from using the role in question. | -| `ungranted` | The role in question has not been granted to the App by the User. | - -Some of these values are subsets of others: - -If the details array contains `grant-denied` then it **MUST** also -contain `ungranted`. - -If the details array contains `disabled` then it **MUST** also contain -`unavailable`. - -#### 9.1.7. Info - -Returns an array of `CapabilityInfo` objects for the passed in -capabilities. Typically used to determine which capabilities are -unsupported or unavailable, in bulk. - -`function Capabilities.info(role: string, capabilities: string[]): CapabilityInfo[]` - -#### 9.1.8. PermissionInfo - -Object describing a Capability / Role pair. - -`type PermissionInfo {`\ -` capability: string,` - -` role: "use" | "provide" | "manage"` - -`}` - -#### 9.1.9. Request - -Requests grants for all capability/role combinations in the `roles` -array. Method resolves when all requested capability/roles are granted. -Rejects otherwise. This method may block for extended periods pending -user interaction. - -`function Capabilities.request(grants:PermissionInfo[]): CapabilityInfo[]` - -#### 9.1.10. onAvailable - -Listens for all App permitted capabilities to become available. - -`function Capability.available(capability: string, CapabilityInfo => void): integer` - -#### 9.1.11. onUnavailable - -Listens for all App permitted capabilities to become unavailable. - -`function Capability.unavailable(capability: string, CapabilityInfo => void): integer` - -#### 9.1.12. onGranted - -Listens for all App permitted capabilities to become granted. - -`function Capability.granted(role: string, capability: string, CapabilityInfo => void): integer` - -#### 9.1.13. onRevoked - -Listens for all App permitted capabilities to become revoked. - -`function Capability.revoked(role: string, capability: string, CapabilityInfo => void): integer` - ### 9.2. Manage SDK APIs -The following APIs are exposed by the Firebolt Manage SDK as part of the -`manage:usergrants` domain/module. This module is intended for +Several APIs are exposed by the Firebolt Manage SDK as part of the +`UserGrants` module. This module is intended for Management UIs that show a list of grants per App or Capability, and allow users to revoke them. - -See the [Firebolt API -Documentation](https://developer.comcast.com/firebolt/core/sdk/latest/api/) -for details around syntax, errors, and permissions. - -#### 9.2.1. Granted Method - -Returns whether the user has granted this capability to an App - -`UserGrants.granted(appId: string, role: string, capability: string): boolean` \ No newline at end of file