Package Exports
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (@featurevisor/roku) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
@featurevisor/roku
BrightScript SDK for Roku.
Visit https://featurevisor.com/docs/sdks/ for more information.
- Installation
- Usage
- Options
- API
featurevisorSDK.onActivationfeaturevisorSDK.onReadyfeaturevisorSDK.onRefreshfeaturevisorSDK.onUpdatefeaturevisorSDK.isEnabledfeaturevisorSDK.getVariationfeaturevisorSDK.getVariablefeaturevisorSDK.activatefeaturevisorSDK.clearfeaturevisorSDK.getRevisionfeaturevisorSDK.isReadyfeaturevisorSDK.refreshfeaturevisorSDK.setDatafilefeaturevisorSDK.setStickyFeaturesfeaturevisorSDK.startRefreshingfeaturevisorSDK.stopRefreshing
Installation
npm i -P @featurevisor/rokuUsage
Initialize the SDK (creates FeaturevisorInstance node).
For example, in the new MyFeaturevisorNode created:
' @import /components/libs/featurevisor/FeaturevisorSDK.brs from @featurevisor/roku
sub init()
m.featurevisorSDK = FeaturevisorSDK()
f = m.featurevisorSDK.createInstance({
datafileUrl: "<featurevisor-datafile-url>",
})
end subYou can also pass an existing instance to SDK, to not create a new instance, but to use an existing one to use FeaturevisorSDK methods that are invoked on it.
' @import /components/libs/featurevisor/FeaturevisorSDK.brs from @featurevisor/roku
sub init()
m.featurevisorSDK = FeaturevisorSDK()
f = m.featurevisorSDK.createInstance({
' options from an existing instance are kept but could be overridden
}, existingInstance)
end subOptions
Options you can pass when creating Featurevisor SDK instance:
bucketKeySeparator
- Type:
string - Required: no
- Defaults to:
.
configureAndInterceptStaticContext
- Type:
associativeArray - Required: no
The context for configureBucketKey, configureBucketValue, and interceptContext functions,
this object will be accessible via m in those functions.
configureBucketKey
- Type:
function - Required: no
Use it to take over bucketing key generation process.
' @import /components/libs/featurevisor/FeaturevisorSDK.brs from @featurevisor/roku
sub init()
m.featurevisorSDK = FeaturevisorSDK()
f = m.featurevisorSDK.createInstance({
configureBucketKey: function (feature as Dynamic, context as Object, bucketKey as String) as String
return bucketKey
end function,
})
end subconfigureBucketValue
- Type:
function - Required: no
Use it to take over bucketing process.
' @import /components/libs/featurevisor/FeaturevisorSDK.brs from @featurevisor/roku
sub init()
m.featurevisorSDK = FeaturevisorSDK()
f = m.featurevisorSDK.createInstance({
configureBucketValue: function (feature as Dynamic, context as Object, bucketValue as String) as Integer
return bucketValue ' 0 to 100000
end function,
})
end subdatafile
- Type:
associativeArray - Required: either
datafileordatafileUrlis required
Use it to pass the datafile object directly.
datafileUrl
- Type:
string - Required: either
datafileordatafileUrlis required
Use it to pass the URL to fetch the datafile from.
initialFeatures
- Type:
associativeArray - Required: no
Pass set of initial features with their variation and (optional) variables that you want the SDK to return until the datafile is fetched and parsed:
' @import /components/libs/featurevisor/FeaturevisorSDK.brs from @featurevisor/roku
sub init()
m.featurevisorSDK = FeaturevisorSDK()
f = m.featurevisorSDK.createInstance({
initialFeatures: {
myFeatureKey: {
enabled: true,
' optional
variation: "treatment",
variables: {
myVariableKey: "my-variable-value",
},
},
},
})
end subinterceptContext
- Type:
function - Required: no
Intercept given context before they are used to bucket the user:
' @import /components/libs/featurevisor/FeaturevisorSDK.brs from @featurevisor/roku
sub init()
defaultContext = {
platform: "roku",
locale: "en_US",
country: "US",
timezone: "America/New_York",
}
m.featurevisorSDK = FeaturevisorSDK()
f = m.featurevisorSDK.createInstance({
configureAndInterceptStaticContext: defaultContext,
interceptContext: function (context as Object) as Object
joinedContext = {}
joinedContext.append(m)
joinedContext.append(context)
return joinedContext
end function,
})
end subonActivation
- Type:
associativeArray - Required: no
- Structure:
{ callback: function, context?: associativeArray }
Capture activated features along with their evaluated variation:
' @import /components/libs/featurevisor/FeaturevisorSDK.brs from @featurevisor/roku
sub init()
m.featurevisorSDK = FeaturevisorSDK()
f = m.featurevisorSDK.createInstance({
onActivation: {
callback: sub (data as Object)
' feature has been activated
end sub,
context: {}, ' optional context for the callback
},
})
end subdata Object fields:
captureContextfeaturecontextvariationValue
captureContext will only contain attributes that are marked as capture: true in the Attributes' YAML files.
onReady
- Type:
associativeArray - Required: no
- Structure:
{ callback: function, context?: associativeArray }
Triggered maximum once when the SDK is ready to be used.
' @import /components/libs/featurevisor/FeaturevisorSDK.brs from @featurevisor/roku
sub init()
m.featurevisorSDK = FeaturevisorSDK()
f = m.featurevisorSDK.createInstance({
onReady: {
callback: sub ()
' agent has been createInstanced and it is ready
end sub,
context: {}, ' optional context for the callback
},
})
end subonRefresh
- Type:
associativeArray - Required: no
- Structure:
{ callback: function, context?: associativeArray }
Triggered every time the datafile is refreshed.
Works only when datafileUrl and refreshInterval are set.
' @import /components/libs/featurevisor/FeaturevisorSDK.brs from @featurevisor/roku
sub init()
m.featurevisorSDK = FeaturevisorSDK()
f = m.featurevisorSDK.createInstance({
onRefresh: {
callback: sub ()
' datafile has been refreshed
end sub,
context: {}, ' optional context for the callback
},
})
end subonUpdate
- Type:
associativeArray - Required: no
- Structure:
{ callback: function, context?: associativeArray }
Triggered every time the datafile is refreshed, and the newly fetched datafile is detected to have different content than last fetched one.
Works only when datafileUrl and refreshInterval are set.
' @import /components/libs/featurevisor/FeaturevisorSDK.brs from @featurevisor/roku
sub init()
m.featurevisorSDK = FeaturevisorSDK()
f = m.featurevisorSDK.createInstance({
onUpdate: {
callback: sub ()
' datafile has been updated (the revision has changed)
end sub,
context: {}, ' optional context for the callback
},
})
end subrefreshInterval
- Type:
integer(in seconds) - Required: no
Set the interval grater than zero to refresh the datafile.
' @import /components/libs/featurevisor/FeaturevisorSDK.brs from @featurevisor/roku
sub init()
m.featurevisorSDK = FeaturevisorSDK()
f = m.featurevisorSDK.createInstance({
datafileUrl: "<featurevisor-datafile-url>",
refreshInterval: 60 * 5, ' every 5 minutes
})
end substickyFeatures
- Type:
associativeArray - Required: no
If set, the SDK will skip evaluating the datafile and return variation and variable results from this object instead.
If a feature key is not present in this object, the SDK will continue to evaluate the datafile.
' @import /components/libs/featurevisor/FeaturevisorSDK.brs from @featurevisor/roku
sub init()
m.featurevisorSDK = FeaturevisorSDK()
f = m.featurevisorSDK.createInstance({
stickyFeatures: {
myFeatureKey: {
enabled: true,
' optional
variation: "treatment",
variables: {
myVariableKey: "my-variable-value",
},
},
},
})
end subAPI
Other methods that could be called before initialization:
featurevisorSDK.onActivation
featurevisorSDK.onActivation(func as Function, context = Invalid as Object)
featurevisorSDK.onReady
featurevisorSDK.onReady(func as Function, context = Invalid as Object)
featurevisorSDK.onRefresh
featurevisorSDK.onRefresh(func as Function, context = Invalid as Object)
featurevisorSDK.onUpdate
featurevisorSDK.onUpdate(func as Function, context = Invalid as Object)
These methods should be called once the SDK instance is created:
featurevisorSDK.isEnabled
featurevisorSDK.isEnabled(featureKey as String, context = {} as Object) as Boolean
featurevisorSDK.getVariation
featurevisorSDK.getVariation(feature as Dynamic, context = {} as Object) as Dynamic
featurevisorSDK.getVariable
featurevisorSDK.getVariable(feature as Dynamic, variableKey as String, context = {} as Object) as Object
Also supports additional type specific methods:
featurevisorSDK.getVariableBoolean(feature as Dynamic, variableKey as String, context = {} as Object) as BooleanfeaturevisorSDK.getVariableString(feature as Dynamic, variableKey as String, context = {} as Object) as DynamicfeaturevisorSDK.getVariableInteger(feature as Dynamic, variableKey as String, context = {} as Object) as IntegerfeaturevisorSDK.getVariableDouble(feature as Dynamic, variableKey as String, context = {} as Object) as FloatfeaturevisorSDK.getVariableArray(feature as Dynamic, variableKey as String, context = {} as Object) as ObjectfeaturevisorSDK.getVariableObject(feature as Dynamic, variableKey as String, context = {} as Object) as ObjectfeaturevisorSDK.getVariableJSON(feature as Dynamic, variableKey as String, context = {} as Object) as Dynamic
featurevisorSDK.activate
featurevisorSDK.activate(feature as Dynamic, context = {} as Object) as Object
Same as getVariation, but also calls the onActivation callback.
This is a convenience method meant to be called when you know the User has been exposed to your Feature, and you also want to track the activation.
featurevisorSDK.clear
featurevisorSDK.clear()
featurevisorSDK.getRevision
featurevisorSDK.getRevision() as String
featurevisorSDK.isReady
featurevisorSDK.isReady() as Boolean
Check if the instance is ready to be used.
featurevisorSDK.refresh
featurevisorSDK.refresh()
Manually refresh datafile.
featurevisorSDK.setDatafile
featurevisorSDK.setDatafile(datafile as Object)
featurevisorSDK.setStickyFeatures
featurevisorSDK.setStickyFeatures(stickyFeatures as Object)
featurevisorSDK.startRefreshing
featurevisorSDK.startRefreshing()
Start refreshing if refreshInterval was provided
featurevisorSDK.stopRefreshing
featurevisorSDK.stopRefreshing()
Cancel refreshing
License
MIT © Błażej Chełkowski