The OpenPass Roku SDK makes it easier to integrate OpenPass directly on your Roku channels.
The preferred installation method is via ropm
ropm install @openpass/openpass-roku-sdk
Copy openpass_openpassrokusdk
files inside your source folder
In order to use this SDK you will need the following requirements
-
Install Node.JS from here
-
Install the Roku Package Manager node module globally
npm i ropm -g
-
Install BrighterScript module globally
npm install brighterscript -g
-
At project root level run
ropm install
-
Enable Developer Mode on you Roku device, you can see more here
-
In order to use
npm scripts
to run the project locally, you will need to add the following ENV VARS to your system:
-
ROKU_HOST
: This is the IP Address of your Roku device. -
ROKU_DEV_PASSWORD
: This is the password you set for your Roku device whenDeveloper Mode
was enabled.
To add the variables to your system for Mac or Linux:
-
If using
zsh
as your shellecho 'export ROKU_DEV_PASSWORD=<YOUR_DEVICE_PASSWORD>' >> ~/.zshrc echo 'export ROKU_HOST=<YOUR_DEVICE_HOST_IP>' >> ~/.zshrc
-
If using
bash
as your shellecho 'export ROKU_DEV_PASSWORD=<YOUR_DEVICE_PASSWORD>' >> ~/.bash_profile echo 'export ROKU_HOST=<YOUR_DEVICE_HOST_IP>' >> ~/.bash_profile
To add the variables to your system if using Windows
setx ROKU_DEV_PASSWORD "<YOUR_DEVICE_PASSWORD>"
setx ROKU_HOST "<ROKU_HOST>"
- Install the package via ropm
ropm install @openpass/openpass-roku-sdk
- You will need to create 2 tasks nodes that will allow for specify a functions to be spawned in a different thread, you can do that like the following example:
create a task for Authorize Device flow: tasks/AuthorizeDeviceTask.brs
sub Init()
m.top.functionName = "AuthorizeDevice"
end sub
sub AuthorizeDevice()
' Your client Id
clientId = "YOUR_CLIENT_ID"
' Init client
m.op = openpass_openpassrokusdk_OpenPass()
' optionalParams = { polling_timeout: 200}
' optionalParams = { openpass_base_url: "www.differenturl.com", polling_timeout: 4000}
' optionalParams = { openpass_base_url: "www.differenturl.com"}
optionalParams = { enable_logging: true }
m.op.Init(clientId, AuthCallback, optionalParams)
' Start sign in process
m.op.SignIn()
' m.op.SignOut()
end sub
sub AuthCallback(state, data)
print state
_states = {
"SignedIn": 0,
"SignedOut": 1,
"Error": 2,
"Loading": 3,
"Polling": 4,
"Refreshable": 5 ' Signed In but needs to refresh
}
if state = _states.SignedIn
HandleSignedIn(data)
else if state = _states.Polling
HandlePolling(data)
' else if state = _states.Error
' HandleSignOut()
end if
end sub
sub HandleSignedIn(data)
authorizedDevice = CreateObject("roSGNode", "ContentNode")
authorizedDevice.addFields(data["device_token_success"])
m.top.authorizedDevice = authorizedDevice
end sub
sub HandlePolling(data)
authDevice = CreateObject("roSGNode", "ContentNode")
authDevice.addFields(data["authorize_device_success"])
m.top.authDevice =authDevice
end sub
and tasks/AuthorizeDeviceTask.xml
<?xml version="1.0" encoding="utf-8"?>
<component name="AuthorizeDeviceTask" extends="Task">
<interface>
<field id="authDevice" type="node" />
<field id="authorizedDevice" type="node" />
<field id="signedOut" type="node" />
</interface>
<!-- Import library -->
<script type="text/brightscript"
uri="pkg:/source/roku_modules/openpass_openpassrokusdk/dist/OpenPass.brs" />
<script type="text/brightscript" uri="AuthorizeDeviceTask.brs" />
</component>
- Implement your recently created tasks where you need:
sub DeviceAuthorization()
m.authTask = CreateObject("roSGNode", "AuthorizeDeviceTask")
m.authTask.ObserveField("authDevice", "OnAuthDeviceCompleted")
m.authTask.ObserveField("authorizedDevice", "OnAuthenticateTaskCompleted")
m.authTask.ObserveField("signedOut", "OnSignedOutComplete")
m.authTask.control = "run"
end sub
' Get device token
sub OnAuthDeviceCompleted()
print "authorize device"
print m.authTask.authDevice
m.SigningScreen.authDevice = m.authTask.authDevice
end sub
' Get Authorized information
sub OnAuthenticateTaskCompleted()
print "authorized"
print m.authTask.authorizedDevice
m.SigningScreen.authorizedDevice = m.authTask.authorizedDevice
' Do what you need with the response
end sub
sub OnSignedOutComplete()
print "signedOut"
end sub
The OpenPass SDK is a standalone headless library defined and managed by the Roku Package Manager. As such the OpenPass SDK
is the primary way for developing the SDK. Use VSCode to open openpass-roku-sdk
to begin development.
-
Start your dev Server:
yarn start
orbsc --watch --deploy --host <YOUR_DEVICE_HOST_IP> --password <YOUR_DEVICE_PASSWORD>
-
Lint the project:
yarn start
orbsc --create-package false --copy-to-staging false
See Tests README.
npm run docs
OpenPass is released under the MIT license. See LICENSE for details.