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