Metrics Module
Version Metrics 1.4.1
Table of Contents
Usage
To use the Metrics module, you can import it into your project from the Firebolt SDK:
import { Metrics } from '@firebolt-js/sdk'
Overview
Methods for sending metrics
Methods
action
Inform the platform of something not covered by other Metrics APIs.
function action(
category: string,
type: string,
parameters: FlatMap,
): Promise<boolean>
Parameters:
Param | Type | Required | Description |
---|---|---|---|
category |
string |
true | The category of action being logged. Must be ‘user’ for user-initated actions or ‘app’ for all other actions values: 'user' \| 'app' |
type |
string |
true | A short, indexible identifier for the action, e.g. ‘SignIn Prompt Displayed’ maxLength: 256 |
parameters |
FlatMap |
false |
Promise resolution:
Capabilities:
Role | Capability |
---|---|
uses | xrn:firebolt:capability:metrics:general |
Examples
Send foo action
JavaScript:
import { Metrics } from '@firebolt-js/sdk'
let success = await Metrics.action('user', 'The user did foo', null)
console.log(success)
Value of success
:
true
JSON-RPC:
Request:
{
"jsonrpc": "2.0",
"id": 1,
"method": "Metrics.action",
"params": {
"category": "user",
"type": "The user did foo"
}
}
Response:
{
"jsonrpc": "2.0",
"id": 1,
"result": true
}
appInfo
Inform the platform about an app’s build info.
function appInfo(build: string): Promise<null>
Parameters:
Param | Type | Required | Description |
---|---|---|---|
build |
string |
true | The build / version of this app. |
Promise resolution:
Capabilities:
Role | Capability |
---|---|
uses | xrn:firebolt:capability:metrics:general |
Examples
Send appInfo metric
JavaScript:
import { Metrics } from '@firebolt-js/sdk'
let result = await Metrics.appInfo('1.2.2')
console.log(result)
Value of result
:
null
JSON-RPC:
Request:
{
"jsonrpc": "2.0",
"id": 1,
"method": "Metrics.appInfo",
"params": {
"build": "1.2.2"
}
}
Response:
{
"jsonrpc": "2.0",
"id": 1,
"result": null
}
error
Inform the platform of an error that has occured in your app.
function error(
type: ErrorType,
code: string,
description: string,
visible: boolean,
parameters: FlatMap,
): Promise<boolean>
Parameters:
Param | Type | Required | Description |
---|---|---|---|
type |
ErrorType |
true | The type of error values: 'network' \| 'media' \| 'restriction' \| 'entitlement' \| 'other' |
code |
string |
true | an app-specific error code |
description |
string |
true | A short description of the error |
visible |
boolean |
true | Whether or not this error was visible to the user. |
parameters |
FlatMap |
false | Optional additional parameters to be logged with the error |
Promise resolution:
Capabilities:
Role | Capability |
---|---|
uses | xrn:firebolt:capability:metrics:general |
Examples
Send error metric
JavaScript:
import { Metrics } from '@firebolt-js/sdk'
let success = await Metrics.error(
'media',
'MEDIA-STALLED',
'playback stalled',
true,
null,
)
console.log(success)
Value of success
:
true
JSON-RPC:
Request:
{
"jsonrpc": "2.0",
"id": 1,
"method": "Metrics.error",
"params": {
"type": "media",
"code": "MEDIA-STALLED",
"description": "playback stalled",
"visible": true
}
}
Response:
{
"jsonrpc": "2.0",
"id": 1,
"result": true
}
mediaEnded
Called when playback has stopped because the end of the media was reached.
function mediaEnded(entityId: string): Promise<boolean>
Parameters:
Param | Type | Required | Description |
---|---|---|---|
entityId |
string |
true | The entityId of the media. |
Promise resolution:
Capabilities:
Role | Capability |
---|---|
uses | xrn:firebolt:capability:metrics:media |
Examples
Send ended metric.
JavaScript:
import { Metrics } from '@firebolt-js/sdk'
let success = await Metrics.mediaEnded('345')
console.log(success)
Value of success
:
true
JSON-RPC:
Request:
{
"jsonrpc": "2.0",
"id": 1,
"method": "Metrics.mediaEnded",
"params": {
"entityId": "345"
}
}
Response:
{
"jsonrpc": "2.0",
"id": 1,
"result": true
}
mediaLoadStart
Called when setting the URL of a media asset to play, in order to infer load time.
function mediaLoadStart(entityId: string): Promise<boolean>
Parameters:
Param | Type | Required | Description |
---|---|---|---|
entityId |
string |
true | The entityId of the media. |
Promise resolution:
Capabilities:
Role | Capability |
---|---|
uses | xrn:firebolt:capability:metrics:media |
Examples
Send loadstart metric.
JavaScript:
import { Metrics } from '@firebolt-js/sdk'
let success = await Metrics.mediaLoadStart('345')
console.log(success)
Value of success
:
true
JSON-RPC:
Request:
{
"jsonrpc": "2.0",
"id": 1,
"method": "Metrics.mediaLoadStart",
"params": {
"entityId": "345"
}
}
Response:
{
"jsonrpc": "2.0",
"id": 1,
"result": true
}
mediaPause
Called when media playback will pause due to an intentional pause operation.
function mediaPause(entityId: string): Promise<boolean>
Parameters:
Param | Type | Required | Description |
---|---|---|---|
entityId |
string |
true | The entityId of the media. |
Promise resolution:
Capabilities:
Role | Capability |
---|---|
uses | xrn:firebolt:capability:metrics:media |
Examples
Send pause metric.
JavaScript:
import { Metrics } from '@firebolt-js/sdk'
let success = await Metrics.mediaPause('345')
console.log(success)
Value of success
:
true
JSON-RPC:
Request:
{
"jsonrpc": "2.0",
"id": 1,
"method": "Metrics.mediaPause",
"params": {
"entityId": "345"
}
}
Response:
{
"jsonrpc": "2.0",
"id": 1,
"result": true
}
mediaPlay
Called when media playback should start due to autoplay, user-initiated play, or unpausing.
function mediaPlay(entityId: string): Promise<boolean>
Parameters:
Param | Type | Required | Description |
---|---|---|---|
entityId |
string |
true | The entityId of the media. |
Promise resolution:
Capabilities:
Role | Capability |
---|---|
uses | xrn:firebolt:capability:metrics:media |
Examples
Send play metric.
JavaScript:
import { Metrics } from '@firebolt-js/sdk'
let success = await Metrics.mediaPlay('345')
console.log(success)
Value of success
:
true
JSON-RPC:
Request:
{
"jsonrpc": "2.0",
"id": 1,
"method": "Metrics.mediaPlay",
"params": {
"entityId": "345"
}
}
Response:
{
"jsonrpc": "2.0",
"id": 1,
"result": true
}
mediaPlaying
Called when media playback actually starts due to autoplay, user-initiated play, unpausing, or recovering from a buffering interuption.
function mediaPlaying(entityId: string): Promise<boolean>
Parameters:
Param | Type | Required | Description |
---|---|---|---|
entityId |
string |
true | The entityId of the media. |
Promise resolution:
Capabilities:
Role | Capability |
---|---|
uses | xrn:firebolt:capability:metrics:media |
Examples
Send playing metric.
JavaScript:
import { Metrics } from '@firebolt-js/sdk'
let success = await Metrics.mediaPlaying('345')
console.log(success)
Value of success
:
true
JSON-RPC:
Request:
{
"jsonrpc": "2.0",
"id": 1,
"method": "Metrics.mediaPlaying",
"params": {
"entityId": "345"
}
}
Response:
{
"jsonrpc": "2.0",
"id": 1,
"result": true
}
mediaProgress
Called every 60 seconds as media playback progresses.
function mediaProgress(
entityId: string,
progress: MediaPosition,
): Promise<boolean>
Parameters:
Param | Type | Required | Description |
---|---|---|---|
entityId |
string |
true | The entityId of the media. |
progress |
MediaPosition |
true | Progress of playback, as a decimal percentage (0-0.999) for content with a known duration, or an integer number of seconds (0-86400) for content with an unknown duration. |
Promise resolution:
Capabilities:
Role | Capability |
---|---|
uses | xrn:firebolt:capability:metrics:media |
Examples
Send progress metric.
JavaScript:
import { Metrics } from '@firebolt-js/sdk'
let success = await Metrics.mediaProgress('345', 0.75)
console.log(success)
Value of success
:
true
JSON-RPC:
Request:
{
"jsonrpc": "2.0",
"id": 1,
"method": "Metrics.mediaProgress",
"params": {
"entityId": "345",
"progress": 0.75
}
}
Response:
{
"jsonrpc": "2.0",
"id": 1,
"result": true
}
mediaRateChange
Called when the playback rate of media is changed.
function mediaRateChange(entityId: string, rate: number): Promise<boolean>
Parameters:
Param | Type | Required | Description |
---|---|---|---|
entityId |
string |
true | The entityId of the media. |
rate |
number |
true | The new playback rate. |
Promise resolution:
Capabilities:
Role | Capability |
---|---|
uses | xrn:firebolt:capability:metrics:media |
Examples
Send ratechange metric.
JavaScript:
import { Metrics } from '@firebolt-js/sdk'
let success = await Metrics.mediaRateChange('345', 2)
console.log(success)
Value of success
:
true
JSON-RPC:
Request:
{
"jsonrpc": "2.0",
"id": 1,
"method": "Metrics.mediaRateChange",
"params": {
"entityId": "345",
"rate": 2
}
}
Response:
{
"jsonrpc": "2.0",
"id": 1,
"result": true
}
mediaRenditionChange
Called when the playback rendition (e.g. bitrate, dimensions, profile, etc) is changed.
function mediaRenditionChange(
entityId: string,
bitrate: number,
width: number,
height: number,
profile: string,
): Promise<boolean>
Parameters:
Param | Type | Required | Description |
---|---|---|---|
entityId |
string |
true | The entityId of the media. |
bitrate |
number |
true | The new bitrate in kbps. |
width |
number |
true | The new resolution width. |
height |
number |
true | The new resolution height. |
profile |
string |
false | A description of the new profile, e.g. ‘HDR’ etc. |
Promise resolution:
Capabilities:
Role | Capability |
---|---|
uses | xrn:firebolt:capability:metrics:media |
Examples
Send renditionchange metric.
JavaScript:
import { Metrics } from '@firebolt-js/sdk'
let success = await Metrics.mediaRenditionChange(
'345',
5000,
1920,
1080,
'HDR+',
)
console.log(success)
Value of success
:
true
JSON-RPC:
Request:
{
"jsonrpc": "2.0",
"id": 1,
"method": "Metrics.mediaRenditionChange",
"params": {
"entityId": "345",
"bitrate": 5000,
"width": 1920,
"height": 1080,
"profile": "HDR+"
}
}
Response:
{
"jsonrpc": "2.0",
"id": 1,
"result": true
}
mediaSeeked
Called when a seek is completed during media playback.
function mediaSeeked(
entityId: string,
position: MediaPosition,
): Promise<boolean>
Parameters:
Param | Type | Required | Description |
---|---|---|---|
entityId |
string |
true | The entityId of the media. |
position |
MediaPosition |
true | Resulting position of the seek operation, as a decimal percentage (0-0.999) for content with a known duration, or an integer number of seconds (0-86400) for content with an unknown duration. |
Promise resolution:
Capabilities:
Role | Capability |
---|---|
uses | xrn:firebolt:capability:metrics:media |
Examples
Send seeked metric.
JavaScript:
import { Metrics } from '@firebolt-js/sdk'
let success = await Metrics.mediaSeeked('345', 0.51)
console.log(success)
Value of success
:
true
JSON-RPC:
Request:
{
"jsonrpc": "2.0",
"id": 1,
"method": "Metrics.mediaSeeked",
"params": {
"entityId": "345",
"position": 0.51
}
}
Response:
{
"jsonrpc": "2.0",
"id": 1,
"result": true
}
mediaSeeking
Called when a seek is initiated during media playback.
function mediaSeeking(entityId: string, target: MediaPosition): Promise<boolean>
Parameters:
Param | Type | Required | Description |
---|---|---|---|
entityId |
string |
true | The entityId of the media. |
target |
MediaPosition |
true | Target destination of the seek, as a decimal percentage (0-0.999) for content with a known duration, or an integer number of seconds (0-86400) for content with an unknown duration. |
Promise resolution:
Capabilities:
Role | Capability |
---|---|
uses | xrn:firebolt:capability:metrics:media |
Examples
Send seeking metric.
JavaScript:
import { Metrics } from '@firebolt-js/sdk'
let success = await Metrics.mediaSeeking('345', 0.5)
console.log(success)
Value of success
:
true
JSON-RPC:
Request:
{
"jsonrpc": "2.0",
"id": 1,
"method": "Metrics.mediaSeeking",
"params": {
"entityId": "345",
"target": 0.5
}
}
Response:
{
"jsonrpc": "2.0",
"id": 1,
"result": true
}
mediaWaiting
Called when media playback will halt due to a network, buffer, or other unintentional constraint.
function mediaWaiting(entityId: string): Promise<boolean>
Parameters:
Param | Type | Required | Description |
---|---|---|---|
entityId |
string |
true | The entityId of the media. |
Promise resolution:
Capabilities:
Role | Capability |
---|---|
uses | xrn:firebolt:capability:metrics:media |
Examples
Send waiting metric.
JavaScript:
import { Metrics } from '@firebolt-js/sdk'
let success = await Metrics.mediaWaiting('345')
console.log(success)
Value of success
:
true
JSON-RPC:
Request:
{
"jsonrpc": "2.0",
"id": 1,
"method": "Metrics.mediaWaiting",
"params": {
"entityId": "345"
}
}
Response:
{
"jsonrpc": "2.0",
"id": 1,
"result": true
}
page
Inform the platform that your user has navigated to a page or view.
function page(pageId: string): Promise<boolean>
Parameters:
Param | Type | Required | Description |
---|---|---|---|
pageId |
string |
true | Page ID of the content. |
Promise resolution:
Capabilities:
Role | Capability |
---|---|
uses | xrn:firebolt:capability:metrics:general |
Examples
Send page metric
JavaScript:
import { Metrics } from '@firebolt-js/sdk'
let success = await Metrics.page('xyz')
console.log(success)
Value of success
:
true
JSON-RPC:
Request:
{
"jsonrpc": "2.0",
"id": 1,
"method": "Metrics.page",
"params": {
"pageId": "xyz"
}
}
Response:
{
"jsonrpc": "2.0",
"id": 1,
"result": true
}
Send startContent metric w/ entity
JavaScript:
import { Metrics } from '@firebolt-js/sdk'
let success = await Metrics.page('home')
console.log(success)
Value of success
:
true
JSON-RPC:
Request:
{
"jsonrpc": "2.0",
"id": 1,
"method": "Metrics.page",
"params": {
"pageId": "home"
}
}
Response:
{
"jsonrpc": "2.0",
"id": 1,
"result": true
}
ready
This is an private RPC method.
Inform the platform that your app is minimally usable. This method is called automatically by Lifecycle.ready()
Result:
Capabilities:
Role | Capability |
---|---|
uses | xrn:firebolt:capability:metrics:general |
Examples
Send ready metric
JSON-RPC:
Request:
{
"jsonrpc": "2.0",
"id": 1,
"method": "Metrics.ready",
"params": {}
}
Response:
{
"jsonrpc": "2.0",
"id": 1,
"result": true
}
signIn
This is an private RPC method.
Log a sign in event, called by Discovery.signIn().
Result:
Capabilities:
Role | Capability |
---|---|
uses | xrn:firebolt:capability:metrics:general |
Examples
Send signIn metric
JSON-RPC:
Request:
{
"jsonrpc": "2.0",
"id": 1,
"method": "Metrics.signIn",
"params": {}
}
Response:
{
"jsonrpc": "2.0",
"id": 1,
"result": true
}
Send signIn metric with entitlements
JSON-RPC:
Request:
{
"jsonrpc": "2.0",
"id": 1,
"method": "Metrics.signIn",
"params": {
"entitlements": [
{
"entitlementId": "123",
"startTime": "2025-01-01T00:00:00.000Z",
"endTime": "2025-01-01T00:00:00.000Z"
}
]
}
}
Response:
{
"jsonrpc": "2.0",
"id": 1,
"result": true
}
signOut
This is an private RPC method.
Log a sign out event, called by Discovery.signOut().
Result:
Capabilities:
Role | Capability |
---|---|
uses | xrn:firebolt:capability:metrics:general |
Examples
Send signOut metric
JSON-RPC:
Request:
{
"jsonrpc": "2.0",
"id": 1,
"method": "Metrics.signOut",
"params": {}
}
Response:
{
"jsonrpc": "2.0",
"id": 1,
"result": true
}
startContent
Inform the platform that your user has started content.
function startContent(entityId: string): Promise<boolean>
Parameters:
Param | Type | Required | Description |
---|---|---|---|
entityId |
string |
false | Optional entity ID of the content. |
Promise resolution:
Capabilities:
Role | Capability |
---|---|
uses | xrn:firebolt:capability:metrics:general |
Examples
Send startContent metric
JavaScript:
import { Metrics } from '@firebolt-js/sdk'
let success = await Metrics.startContent(null)
console.log(success)
Value of success
:
true
JSON-RPC:
Request:
{
"jsonrpc": "2.0",
"id": 1,
"method": "Metrics.startContent",
"params": {}
}
Response:
{
"jsonrpc": "2.0",
"id": 1,
"result": true
}
Send startContent metric w/ entity
JavaScript:
import { Metrics } from '@firebolt-js/sdk'
let success = await Metrics.startContent('abc')
console.log(success)
Value of success
:
true
JSON-RPC:
Request:
{
"jsonrpc": "2.0",
"id": 1,
"method": "Metrics.startContent",
"params": {
"entityId": "abc"
}
}
Response:
{
"jsonrpc": "2.0",
"id": 1,
"result": true
}
stopContent
Inform the platform that your user has stopped content.
function stopContent(entityId: string): Promise<boolean>
Parameters:
Param | Type | Required | Description |
---|---|---|---|
entityId |
string |
false | Optional entity ID of the content. |
Promise resolution:
Capabilities:
Role | Capability |
---|---|
uses | xrn:firebolt:capability:metrics:general |
Examples
Send stopContent metric
JavaScript:
import { Metrics } from '@firebolt-js/sdk'
let success = await Metrics.stopContent(null)
console.log(success)
Value of success
:
true
JSON-RPC:
Request:
{
"jsonrpc": "2.0",
"id": 1,
"method": "Metrics.stopContent",
"params": {}
}
Response:
{
"jsonrpc": "2.0",
"id": 1,
"result": true
}
Send stopContent metric w/ entity
JavaScript:
import { Metrics } from '@firebolt-js/sdk'
let success = await Metrics.stopContent('abc')
console.log(success)
Value of success
:
true
JSON-RPC:
Request:
{
"jsonrpc": "2.0",
"id": 1,
"method": "Metrics.stopContent",
"params": {
"entityId": "abc"
}
}
Response:
{
"jsonrpc": "2.0",
"id": 1,
"result": true
}
Types
ErrorType
ErrorType: {
NETWORK: 'network',
MEDIA: 'media',
RESTRICTION: 'restriction',
ENTITLEMENT: 'entitlement',
OTHER: 'other',
},
MediaPosition
Represents a position inside playback content, as a decimal percentage (0-0.999) for content with a known duration, or an integer number of seconds (0-86400) for content with an unknown duration.
type MediaPosition = void | number | number