@elevated-libs/cuss2
About Elevated CUSS Library
Interact with a CUSS 2 API using a simple interface leveraging the asyncronicity of event driven architectures. By using the Elevated CUSS library you will get:
- Simple device interfaces
- Subscribable events for all CUSS states and device status
CUSS (Common Use Self-Service) is a modern Typescript library facilitating application development of Self-Service check-in apps, self-tagging apps and self bag-drop apps.
You can have CUSS 2 NOW and run a modern browser entirely without plugins or Java. Finally, your Information Security department will be able to sign off on your CUSS applications.
We have also created typescript angular and react libs facilitating rapid development of CUSS applications.
The library and corresponding app platform also ensure backwards compatibility to legacy 1.X versions of CUSS.
The Sandbox
While you are developing your application, you can use the Elevated CUSS Sandbox to test against real platform responses. Watch your application respond correctly to CUSS Events like a paper jam or a required device unavailable.
Getting Started
-
Request an access token from the Elevation Software Team.
-
Generate an .npmrc
file and add the token to this file.
To install the lib run:
npm install @elevated-libs/cuss2
To begin using the library, you will need to import the library into your project and set up a connection.
import { Cuss2 } from "@elevated-libs/cuss2";
const serviceState: { cuss2: Cuss2 | any} = { ref: null };
const connect = async (cuss2URL: string, clientId: string, clientSecret: string): Promise<Cuss2 | null> => {
if (serviceState.ref) {
return serviceState.ref;
}
const cuss2 = await Cuss2.connect(cuss2URL, clientId, clientSecret);
serviceState.cuss2 = cuss2;
return ref;
};
const { clientId, clientSecret, platformURL } = platformConfig;
connect(platformURL, clientId, clientSecret)
.then(checkDevices)
.catch(connectionFailure);
State Transitions
One of the most important aspect in a CUSS platform, is the ability to transition between application states correctly, that is why we tried to simplify all different aspect of the transitions through a simple rxjs subscription.
sequenceDiagram
Platform->>+App: Platform Initialize App
App-->>Platform: Request Unavailable
App-->>Platform: Check for required components
App-->>Platform: Request Available
const cuss2 = await Cuss2.connect(cuss2URL, clientId, clientSecret);
await cuss2.requestUnavailableState();
if (cuss2?.boardingPassPrinter) {
await cuss2.requestAvailableState();
}
cuss2.activated.subscribe(() => {
console.log('Application is active');
});
cuss2.deactivated.subscribe(() => {
console.log('Application is not longer active');
});
Interacting with CUSS Devices
The library provides a simple and intuitive interface to interact with common CUSS devices, that enable developer to develop complex platform interactions without any unnecessary boilerplate.
sequenceDiagram
App-->>Component: Query
Component-->>App: RC_OK
App-->>Component: Enable
App-->>Component: Interactions
App-->>Component: Disable
MediaOutputs
const cuss2 = await Cuss2.connect(cuss2URL, clientId, clientSecret);
const res: PlatformData = await cuss2?.boardingPassPrinter.query();
if (res.meta.componentState !== ComponentState.READY) {
console.log('Component is not ready')
} else {
await cuss2.boardingPassPrinter.enable();
await cuss2.boardingPassPrinter.setup(<PECTAB>);
await cuss2.boardingPassPrinter.send(<PECTAB>);
await cuss2.boardingPassPrinter.setupAndPrintRaw([<PECTAB_ARRAY>], <STREAM>);
await cuss2.boardingPassPrinter.disable();
}
MediaInput
const cuss2 = await Cuss2.connect(cuss2URL, clientId, clientSecret);
const res: PlatformData = await cuss2?.barcodeReader.query();
if (res.meta.componentState !== ComponentState.READY) {
console.log('Component is not ready')
} else {
await cuss2.barcodeReader.enable();
cuss2.barcodeReader.data.asObservable().subscribe((data: DataRecordList) => {
console.log(`Barcode Data ${data}`);
await cuss2.barcodeReader.disable();
});
}
Methods and Components
Below are the methods you can use to interact with the CUSS 2.0 API and a list of components.
Method | Description |
---|
announcement(componentID, rawData) | Method | Description |
---|
play(componentID, rawData) | Play the announcement | pause(componentID) | Pause the announcement | resume(componentID) | Resume the announcement | stop(componentID) | Stop the announcement |
|
cancel(componentID) | Sends a cancel command to a given component (device). |
checkRequiredComponentsAndSyncState() | Check if all required components are available and move application to the appropriate state based on status. |
connect(url, client_id, client_secret, options opt) | Connect to the cuss platform. |
disable(componentID) | Sends disable command to a given component (device). |
enable(componentID) | Sends enable command to a given component (device). |
getComponents() | Get a list of components. |
getEnvironment() | Get the current environment level. |
getStatus(componentID) | Get the status of a given component (device). |
queryComponents() | Query each component for its current state. |
requestActiveState() | Request the platform to change the application state to Active state. |
requestReload() | Request the platform to reload the application. |
setup(componentID, dataExchange) | Send setup instructions to a given component (device). |
staterequest(state, reasonCode, reason) | Sends request to the platform for the application to change states. |
authorize(url, client_id, client_secret, timeout) | Retrieve a token from the CUSS Oauth Server using a client id and client secret. |
connect(baseURL, client_id, client_secret, tokenURL) | Connects to a CUSS Platform at the provided URL. |
Components | Description |
---|
Announcement | A component that announces messages. |
BagTagPrinter | A component that prints bag tags. |
BarcodeReader | A component that reads barcodes. |
BoardingPassPrinter | A component that prints boarding passes. |
CardReader | A component that reads cards. |
Dispenser | A part of a printer that dispenses printed media. |
DocumentReader | A component that reads documents. |
Feeder | A part of a printer that feeds paper. |
Headset | A component that provides audio feedback. |
Illumination | A component that controls illumination. |
Keypad | A component that provides keypad input. |
Card Reader
Besides inheriting from all the Media Input methods, the library provides an automatic way to setup a card reader component to read ISO track data without truncation. This feature is only available on Platforms data provide a card reader component interface on CUSS 2 Platforms. The magtripe capabilities are officcially removed from CUSS 2 specification.
const cuss2 = await Cuss2.connect(cuss2URL, clientId, clientSecret);
const res: PlatformData = await cuss2?.cardReader.query();
if (res.meta.componentState !== ComponentState.READY) {
console.log('Component is not ready')
} else {
await cuss2.cardReader.readPayment(5000);
cuss2.cardReader.data.asObservable().subscribe((data: DataRecordList) => {
console.log(`card Reader Data ${data}`);
});
}