Message Types
This page documents the WebSocket message interfaces used for real-time communication in the MentraOS SDK.
BaseMessage​
The fundamental structure for all messages exchanged within the MentraOS system.
interface BaseMessage {
/** A string identifying the specific type of the message. */
type: string;
/** Optional timestamp indicating when the message was created. */
timestamp?: Date;
/** Optional session identifier, used for routing messages related to a specific user session. */
sessionId?: string;
}
App to Cloud Messages​
AppConnectionInit​
Message sent by App to initiate connection with cloud.
interface AppConnectionInit extends BaseMessage {
type: AppToCloudMessageType.CONNECTION_INIT;
packageName: string;
sessionId: string; // Session ID obtained from webhook
apiKey: string; // App's API Key
}
Note: This message is automatically sent by the SDK when appSession.connect()
is called.
AppSubscriptionUpdate​
Message sent by App to update its active event subscriptions.
interface AppSubscriptionUpdate extends BaseMessage {
type: AppToCloudMessageType.SUBSCRIPTION_UPDATE;
packageName: string;
subscriptions: ExtendedStreamType[]; // List of StreamType or language-specific strings
}
Note: This message is automatically sent by the SDK when appSession.subscribe()
is called or when subscription settings change.
DisplayRequest​
Message sent from a App to request displaying a layout. Covered in detail in the Layout Types section.
interface DisplayRequest extends BaseMessage {
type: AppToCloudMessageType.DISPLAY_REQUEST;
packageName: string;
view: ViewType;
layout: Layout;
durationMs?: number;
forceDisplay?: boolean;
}
Note: This message is automatically sent by the SDK when using appSession.layouts
methods.
DashboardContentUpdate​
Message sent from a App to update dashboard content.
interface DashboardContentUpdate extends BaseMessage {
type: AppToCloudMessageType.DASHBOARD_CONTENT_UPDATE;
packageName: string;
sessionId: string;
content: string;
modes: DashboardMode[]; // Target dashboard modes
timestamp: Date;
}
Note: This message is automatically sent by the SDK when using session.dashboard.content
methods.
Cloud to App Messages​
AppConnectionAck​
Message sent by cloud to App confirming successful connection and providing initial settings/config.
interface AppConnectionAck extends BaseMessage {
type: CloudToAppMessageType.CONNECTION_ACK;
settings?: AppSettings; // Current user settings for this App
config?: AppConfig; // App configuration fetched by the cloud (optional)
}
When this message is received, the SDK fires the onConnected
event handler with the settings.
AppConnectionError​
Message sent by cloud to App indicating a connection failure.
interface AppConnectionError extends BaseMessage {
type: CloudToAppMessageType.CONNECTION_ERROR;
message: string; // Error description
code?: string; // Optional error code
}
AppStopped​
Message sent by cloud to App indicating the session has been stopped.
interface AppStopped extends BaseMessage {
type: CloudToAppMessageType.APP_STOPPED;
reason: "user_disabled" | "system_stop" | "error"; // Reason for stopping
message?: string; // Optional additional details
}
When this message is received, the SDK triggers the disconnect process and fires the onDisconnected
event handler.
SettingsUpdate​
Message sent by cloud to App when the user updates the App's settings.
interface SettingsUpdate extends BaseMessage {
type: CloudToAppMessageType.SETTINGS_UPDATE;
packageName: string;
settings: AppSettings; // The complete new set of settings
}
When this message is received, the SDK updates its internal settings and fires the onSettingsUpdate
event handler.
DataStream​
Wrapper message sent by cloud to App carrying data for a subscribed stream.
interface DataStream extends BaseMessage {
type: CloudToAppMessageType.DATA_STREAM; // Wrapper type
streamType: StreamType; // The actual type of the data payload
data: unknown; // The payload, type depends on streamType
}
The SDK unwraps this message and dispatches it to the appropriate event handlers based on the streamType
.
DashboardModeChanged​
Message sent by cloud to App when the dashboard mode changes.
interface DashboardModeChanged extends BaseMessage {
type: CloudToAppMessageType.DASHBOARD_MODE_CHANGED;
mode: DashboardMode; // The new dashboard mode
}
When this message is received, the SDK fires any registered onModeChange
callbacks with the new mode.
DashboardAlwaysOnChanged​
Message sent by cloud to App when the always-on dashboard state changes.
interface DashboardAlwaysOnChanged extends BaseMessage {
type: CloudToAppMessageType.DASHBOARD_ALWAYS_ON_CHANGED;
enabled: boolean; // Whether always-on dashboard is now enabled
}
When this message is received, the SDK fires any registered always-on change callbacks.
Stream Data Messages​
Stream data can either be sent wrapped in a DataStream
message or directly as its own message type.
TranscriptionData​
Data for real-time speech transcription. See Event Types for details.
interface TranscriptionData extends BaseMessage {
type: StreamType.TRANSCRIPTION;
text: string;
isFinal: boolean;
// Other properties...
}
TranslationData​
Data for real-time speech translation. See Event Types for details.
interface TranslationData extends BaseMessage {
type: StreamType.TRANSLATION;
text: string;
isFinal: boolean;
// Other properties...
}
AudioChunk​
Raw audio data chunk. See Event Types for details.
interface AudioChunk extends BaseMessage {
type: StreamType.AUDIO_CHUNK;
arrayBuffer: ArrayBufferLike;
sampleRate?: number;
}
Error-Related Messages​
WebSocketError​
Structure for reporting WebSocket-specific errors.
interface WebSocketError {
/** An error code string. */
code: string;
/** A human-readable description of the error. */
message: string;
/** Optional additional details about the error. */
details?: unknown;
}
When a WebSocket error occurs, the SDK fires the onError
event handler with this object.
Message Type Enums​
Four enums are used to identify the types of messages exchanged between different components:
AppToCloudMessageType​
Message types sent FROM App TO cloud.
enum AppToCloudMessageType {
CONNECTION_INIT = 'tpa_connection_init',
SUBSCRIPTION_UPDATE = 'subscription_update',
DISPLAY_REQUEST = 'display_event',
DASHBOARD_CONTENT_UPDATE = 'dashboard_content_update'
}
CloudToAppMessageType​
Message types sent FROM cloud TO App.
enum CloudToAppMessageType {
CONNECTION_ACK = 'tpa_connection_ack',
CONNECTION_ERROR = 'tpa_connection_error',
APP_STOPPED = 'app_stopped',
SETTINGS_UPDATE = 'settings_update',
DATA_STREAM = 'data_stream',
DASHBOARD_MODE_CHANGED = 'dashboard_mode_changed',
DASHBOARD_ALWAYS_ON_CHANGED = 'dashboard_always_on_changed',
WEBSOCKET_ERROR = 'websocket_error'
}
GlassesToCloudMessageType​
Message types sent FROM glasses TO cloud.
enum GlassesToCloudMessageType {
CONNECTION_INIT = 'connection_init',
START_APP = 'start_app',
STOP_APP = 'stop_app',
// Many more types...
}
CloudToGlassesMessageType​
Message types sent FROM cloud TO glasses.
enum CloudToGlassesMessageType {
CONNECTION_ACK = 'connection_ack',
CONNECTION_ERROR = 'connection_error',
AUTH_ERROR = 'auth_error',
// More types...
}
Type Guards​
The SDK provides type guard functions to identify message types:
// For App to Cloud messages
function isAppConnectionInit(message: AppToCloudMessage): message is AppConnectionInit;
function isAppSubscriptionUpdate(message: AppToCloudMessage): message is AppSubscriptionUpdate;
function isDisplayRequest(message: AppToCloudMessage): message is DisplayRequest;
function isDashboardContentUpdate(message: AppToCloudMessage): message is DashboardContentUpdate;
function isDashboardModeChange(message: AppToCloudMessage): message is DashboardModeChange;
function isDashboardSystemUpdate(message: AppToCloudMessage): message is DashboardSystemUpdate;
// For Cloud to App messages
function isAppConnectionAck(message: CloudToAppMessage): message is AppConnectionAck;
function isAppConnectionError(message: CloudToAppMessage): message is AppConnectionError;
function isAppStopped(message: CloudToAppMessage): message is AppStopped;
function isSettingsUpdate(message: CloudToAppMessage): message is SettingsUpdate;
function isDataStream(message: CloudToAppMessage): message is DataStream | AudioChunk;
function isAudioChunk(message: CloudToAppMessage): message is AudioChunk;
function isDashboardModeChanged(message: CloudToAppMessage): message is DashboardModeChanged;
function isDashboardAlwaysOnChanged(message: CloudToAppMessage): message is DashboardAlwaysOnChanged;
WebSocket Connection Flow​
-
Initialization:
- When
appSession.connect()
is called, the SDK establishes a WebSocket connection to the URL provided - It sends a
AppConnectionInit
message with the App's credentials
- When
-
Authentication:
- The cloud validates the credentials
- If valid, it sends back a
AppConnectionAck
with the user's settings - If invalid, it sends back a
AppConnectionError
-
Subscribing to Streams:
- The App can call
appSession.subscribe()
to receive specific event types - The SDK sends a
AppSubscriptionUpdate
message to the cloud
- The App can call
-
Receiving Data:
- The cloud sends data for subscribed streams either directly or wrapped in a
DataStream
message - The SDK dispatches this data to the appropriate event handlers
- The cloud sends data for subscribed streams either directly or wrapped in a
-
Session Termination:
- When a session is stopped, the cloud sends an
AppStopped
message - The SDK handles cleanup and fires the
onDisconnected
event handler
- When a session is stopped, the cloud sends an