Cuss2Connector
Provider component that connects to CUSS2 platform and makes device hooks available.
Props
options
Cuss2ConnectionOptions
CUSS2 connection options (cussUrl, clientId, clientSecret)
manualConnect
boolean
If true, connection will not be established automatically. Use connect() method instead
children
ReactNode
Child components that will have access to CUSS2 hooks
onConnect()
() => void
Optional callback when connection is established
onError()
() => void
Optional callback when connection fails
onDisconnect()
() => void
Optional callback when disconnected
Example
import { Cuss2Connector, Cuss2ConnectionOptions } from '@elevationai/cuss2-react';
const options: Cuss2ConnectionOptions = {
cussUrl: 'https://cloudsandbox.azurewebsites.net',
clientId: 'your-client-id',
clientSecret: 'your-client-secret'
};
function App() {
return (
<Cuss2Connector options={options}>
<KioskApp />
</Cuss2Connector>
);
}
useCuss2
Hook for accessing CUSS2 platform state and connection status.
Returns: Cuss2ContextValue
cuss2
Cuss2 | null
CUSS2 platform instance
state
ApplicationStateCodes | null
Current platform state (INITIALIZE, UNAVAILABLE, AVAILABLE, ACTIVE, etc.)
connected
boolean
Connection status to platform
platformData
PlatformData | null
Platform data stream
components
RecordAvailable components
environment
EnvironmentLevel | null
Environment level
connect()
() => Promise
Connect to CUSS2 platform
disconnect()
() => Promise
Disconnect from CUSS2 platform
Example
import { useCuss2 } from '@elevationai/cuss2-react';
function KioskStatus() {
const { cuss2, connected, state } = useCuss2();
if (!connected) {
return Connecting to platform...;
}
return (
<div>
Platform state: {state}
</div>
);
}
useBarcodeReader
Hook for barcode and QR code scanning with real-time data updates.
Returns: DeviceHookResult<BarcodeReader>
device
BarcodeReader | null
Barcode reader device instance
data
any
Most recent scan data
ready
boolean
Device is ready for use
enabled
boolean
Device is currently enabled
pending
boolean
Operation is in progress
status
MessageCodes | null
Current device status code
state
ComponentState | null
Device component state
Example
import { useBarcodeReader } from '@elevationai/cuss2-react';
function ScannerComponent() {
const { device, data, ready, enabled } = useBarcodeReader();
useEffect(() => {
if (device && ready && !enabled) {
device.enable();
}
}, [device, ready]);
useEffect(() => {
if (data) {
console.log('Scanned:', data);
}
}, [data]);
return (
<div>
{ready ? 'Scan barcode now' : 'Scanner not available'}
</div>
);
}
useCardReader
Hook for magnetic stripe card reading with payment support.
Returns: DeviceHookResult<CardReader>
device
CardReader | null
Card reader device instance
data
any
Most recent scan data
ready
boolean
Device is ready for use
enabled
boolean
Device is currently enabled
pending
boolean
Operation is in progress
status
MessageCodes | null
Current device status code
state
ComponentState | null
Device component state
Example
import { useCardReader } from '@elevationai/cuss2-react';
function PaymentComponent() {
const { device, data, ready, enabled } = useCardReader();
const [timeout, setTimeout] = useState(10000);
const handleRead = async () => {
if (device && enabled) {
try {
await device.read(timeout);
} catch (error) {
console.error('read failed:', error);
}
}
};
useEffect(() => {
if (data) {
console.log('Read data:', data);
}
}, [data]);
return (
<button onClick={handleRead} disabled={!ready || !enabled}>
Read
</button>
);
}
useDocumentReader
Hook for passport and ID document scanning with MRZ support.
Returns: DeviceHookResult<DocumentReader>
device
DocumentReader | null
Document reader device instance
data
any
Most recent scan data
ready
boolean
Device is ready for use
enabled
boolean
Device is currently enabled
pending
boolean
Operation is in progress
status
MessageCodes | null
Current device status code
state
ComponentState | null
Device component state
Example
import { useDocumentReader } from '@elevationai/cuss2-react';
function PassportScanner() {
const { device, data, ready, enabled } = useDocumentReader();
const [timeout, setTimeout] = useState(10000);
const handleRead = async () => {
if (device && enabled) {
try {
await device.read(timeout);
} catch (error) {
console.error('read failed:', error);
}
}
};
useEffect(() => {
if (data) {
console.log('Read data:', data);
}
}, [data]);
return (
<button onClick={handleRead} disabled={!ready || !enabled}>
Read
</button>
);
}
useBagTagPrinter
Hook for baggage tag printing with automatic asset management.
Returns: PrinterHookResult<BagTagPrinter>
device
BagTagPrinter | null
Bag Tag Printer device instance
data
any
Most recent scan data
ready
boolean
Device is ready for use
enabled
boolean
Device is currently enabled
pending
boolean
Operation is in progress
status
MessageCodes | null
Current device status code
state
ComponentState | null
Device component state
Example
import { useBagTagPrinter } from '@elevationai/cuss2-react';
function BagTagPrinter() {
const { device, ready, enabled } = useBagTagPrinter();
const [result, setResult] = useState(null);
// Example company logo (hexadecimal encoded - truncated for brevity)
const COMPANY_LOGO =
'LT0146940A0201010000000100163006400640000000000000000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFF000124001001E0164' +
'000000000000000000000000000000000000000000000000000000000000000000000000000000000000C0EF0BDE0A000000000000C2FC2F03' +
'DCFFC1FCC3FFC1E7C1FF81C1FE07DBFFC1FCC3FF9FC1FC7FC1FFC1F87FDAFFC1FCC2FFC1FE7FC1E3C3FFF9DAFFC1FCC2FFC1FDAFFC1FCC2F';
// Example bag tag data
const bagTagData = useMemo(() => ({
assets: 'BTT0801~J 500262=#01C0M5493450304#02C0M5493450304#03B1MA020250541=06#04B1MK200464141=06#05L0 A258250000#\n'
+ COMPANY_LOGO,
coupon: 'BTP080101#01THIS IS A#02BAG TAG#03123#04456#0501#'
}), []);
const printBagTag = async () => {
if (device && enabled) {
try {
// Two-phase print: setup() then print()
await device.setupITPS([bagTagData.assets]);
const res = await device.sendITPS([bagTagData.coupon]);
setResult({ action: 'Print', result: res });
} catch (error) {
console.error('Failed to print:', error);
setResult({ action: 'Print', error: String(error) });
}
}
};
return (
<button onClick={() => printBagTag()} disabled={!ready || !enabled}>
Print Bag Tag
</button>
);
}
useBoardingPassPrinter
Hook for boarding pass printing with ITPS format support.
Returns: PrinterHookResult<BoardingPassPrinter>
device
BoardingPassPrinter | null
Boarding Pass Printer device instance
data
any
Most recent scan data
ready
boolean
Device is ready for use
enabled
boolean
Device is currently enabled
pending
boolean
Operation is in progress
status
MessageCodes | null
Current device status code
state
ComponentState | null
Device component state
Example
import { useBoardingPassPrinter } from '@elevationai/cuss2-react';
function BoardingPassPrinter() {
const { device, ready, enabled } = useBoardingPassPrinter();
const [result, setResult] = useState(null);
// Example boarding pass data
const boardingPassData = useMemo(() => ({
assets: 'PT##$S6A#@;#TICK#CHEC#BOAR#0101110112011301210122012301C#0201A34#03BRB061661#0430G25F',
coupon: 'CP#A#01S#CP#C01#02@@01#03M1THIS IS A BARCODE#04THIS IS A BOARDING PASS#'
}), []);
const printBoardingPass = async (passenger: any) => {
if (device && enabled) {
try {
// Two-phase print: setup() then print()
await device.setupITPS([boardingPassData.assets]);
const res = await device.sendITPS([boardingPassData.coupon]);
setResult({ action: 'Print', result: res });
} catch (error) {
console.error('Failed to print:', error);
setResult({ action: 'Print', error: String(error) });
}
}
};
return (
<button onClick={() => printBoardingPass(passenger)} disabled={!ready}>
Print Boarding Pass
</button>
);
}
useKeypad
Hook for navigation keypad events for accessibility.
Returns: KeypadHookResult<Keypad>
device
Keypad | null
Keypad device instance
data
any
Most recent scan data
ready
boolean
Device is ready for use
enabled
boolean
Device is currently enabled
pending
boolean
Operation is in progress
status
MessageCodes | null
Current device status code
state
ComponentState | null
Device component state
keypadData
KeypadData
Keypad Data
Example
import { useKeypad } from '@elevationai/cuss2-react';
function NavigationComponent() {
const { device, data, ready, enabled, keypadData } = useKeypad();
useEffect(() => {
if (device && ready && !enabled) {
device.enable();
}
}, [device, ready]);
useEffect(() => {
if (keypadData) {
console.log('Keypad event:', keypadData);
}
}, [keypadData]);
return <div>Keypad navigation enabled</div>
}
useScale
Hook for luggage weighing with real-time updates.
Returns: DeviceHookResult<Scale>
device
Scale | null
Scale device instance
data
any
Most recent scan data
ready
boolean
Device is ready for use
enabled
boolean
Device is currently enabled
pending
boolean
Operation is in progress
status
MessageCodes | null
Current device status code
state
ComponentState | null
Device component state
Example
import { useScale } from '@elevationai/cuss2-react';
function WeightDisplay() {
const { device, data, ready, enabled } = useScale();
useEffect(() => {
if (data) {
console.log('Weight data:', data);
}
}, [data]);
const checkWeight = async () => {
if (device && enabled) {
try {
await device.read(15000);
} catch (error) {
console.error('Weight read failed:', error);
}
}
};
return (
<div>
<div>Current weight: {weight.toFixed(1)} kg</div>
<button onClick={checkWeight} disabled={!ready || !enabled}>
Weigh Bag
</button>
</div>
);
}
useAnnouncement
Hook for text-to-speech announcements and audio playback.
Returns: DeviceHookResult<Announcement>
device
Announcement | null
Announcement device instance
data
any
Most recent scan data
ready
boolean
Device is ready for use
enabled
boolean
Device is currently enabled
pending
boolean
Operation is in progress
status
MessageCodes | null
Current device status code
state
ComponentState | null
Device component state
Example
import { useAnnouncement } from '@elevationai/cuss2-react';
function AnnouncementComponent() {
const { device, ready, enabled } = useAnnouncement();
useEffect(() => {
if (device && ready && !enabled) {
device.enable();
}
}, [device, ready]);
const say = async (message: string) => {
if (device && enabled) {
try {
await device.say(message);
} catch (error) {
console.error('Announcement say failed:', error);
}
}
};
const pause = async () => {
if (device && enabled) {
try {
await device.pause();
} catch (error) {
console.error('Announcement pause failed:', error);
}
}
};
const resume = async () => {
if (device && enabled) {
try {
await device.resume();
} catch (error) {
console.error('Announcement resume failed:', error);
}
}
};
const stop = async () => {
if (device && enabled) {
try {
await device.stop();
} catch (error) {
console.error('Announcement stop failed:', error);
}
}
};
return (
<button onClick={() => say('Please scan your boarding pass')}>
Say
</button>
<button onClick={() => pause()}>
Pause
</button>
<button onClick={() => resume()}>
Resume
</button>
<button onClick={() => stop()}>
Stop
</button>
);
}
useHeadset
Hook for audio headset management for accessibility features.
Returns: DeviceHookResult<Headset>
device
Headset | null
Headset device instance
data
any
Most recent scan data
ready
boolean
Device is ready for use
enabled
boolean
Device is currently enabled
pending
boolean
Operation is in progress
status
MessageCodes | null
Current device status code
state
ComponentState | null
Device component state
Example
import { useHeadset } from '@elevationai/cuss2-react';
function HeadsetComponent() {
const { cuss2 } = useCuss2();
const { device, ready, enabled } = useHeadset();
useEffect(() => {
if (device && ready && !enabled) {
device.enable();
}
}, [device, ready]);
useEffect(() => {
if (cuss2) {
device.enable();
}
}, [cuss2]);
return (
<div>
{cuss2?.accessibleMode ? 'Accessible Mode On' : 'Accessible Mode Off'}
</div>
);
}
useCamera
Hook for camera capture for photo documentation.
Returns: DeviceHookResult<Camera>
device
Camera | null
Camera device instance
data
any
Most recent scan data
ready
boolean
Device is ready for use
enabled
boolean
Device is currently enabled
pending
boolean
Operation is in progress
status
MessageCodes | null
Current device status code
state
ComponentState | null
Device component state
Example
import { useCamera } from '@elevationai/cuss2-react';
function CameraComponent() {
const { device, data, ready, enabled } = useCamera();
useEffect(() => {
if (device && ready && !enabled) {
device.enable();
}
}, [device, ready]);
const capturePhoto = async () => {
if (device && enabled) {
try {
await device.read(10000);
} catch (error) {
console.error('Photo capture failed:', error);
}
}
};
useEffect(() => {
if (data) {
console.log('Photo captured:', data);
}
}, [data]);
return (
<button onClick={capturePhoto} disabled={!ready || !enabled}>
Take Photo
</button>
);
}
useBiometric
Hook for biometric verification (fingerprint, face recognition).
Returns: DeviceHookResult<Biometric>
device
Biometric | null
Biometric device instance
data
any
Most recent scan data
ready
boolean
Device is ready for use
enabled
boolean
Device is currently enabled
pending
boolean
Operation is in progress
status
MessageCodes | null
Current device status code
state
ComponentState | null
Device component state
Example
import { useBiometric } from '@elevationai/cuss2-react';
function BiometricComponent() {
const { device, data, ready, enabled } = useBiometric();
useEffect(() => {
if (device && ready && !enabled) {
device.enable();
}
}, [device, ready]);
const dataObj: CommonUseBiometricMessage = {
documentType: 'CHARACTERISTICS' | 'BIOMETRIC_PROVIDER_MESSAGE' | 'ERROR_RESPONSE';
/**
* An arbitrary tracking value that the CUSS application chooses and assigns when starting a biometric provider function. The CUSS platform must then echo this requested value in all subsequent responses or asynchronous event messages related to that biometric provider function. This correlation permits a CUSS application to match and associate request and response messages and is critical for the case where an application has more than one multi-step biometric provider function ongoing concurrently.
*/
sessionID?: string;
/**
* Component characteristics.
*/
characteristics?: {
characteristicsDocumentType: CharacteristicsDocumentType;
characteristicsDocumentReturnType: CharacteristicsDocumentType;
characteristicsRequest?: BiometricAnyType;
};
biometricProviderMessage?: BiometricProviderMessage;
/**
* Error code as reported from the CUSS platform.
*/
errorResponse?: 'DATA_ERROR' | 'FORMAT_ERROR' | 'ILLOGICAL';
};
const verifyIdentity = async () => {
if (device && enabled) {
try {
await device.send(dataObj);
} catch (error) {
console.error('Verification failed:', error);
}
}
};
useEffect(() => {
if (data) {
console.log('Biometric data:', data);
verifyWithBackend(data);
}
}, [data]);
return (
<button onClick={verifyIdentity} disabled={!ready || !enabled}>
Verify Identity
</button>
);
}