@mentra/sdk 2.1.12 → 2.1.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,6 @@
1
- import { Response, NextFunction } from 'express';
2
- import { AuthenticatedRequest } from '../../types';
1
+ import { Response, NextFunction } from "express";
2
+ import { AuthenticatedRequest } from "../../types";
3
+ import { AppSession } from "../session";
3
4
  /**
4
5
  * Extracts the temporary token from a URL string.
5
6
  * @param url The URL string, typically window.location.href.
@@ -36,11 +37,12 @@ export declare function createAuthMiddleware(options: {
36
37
  packageName: string;
37
38
  cookieName?: string;
38
39
  cookieSecret: string;
40
+ getAppSessionForUser?: (userId: string) => AppSession | null;
39
41
  cookieOptions?: {
40
42
  httpOnly?: boolean;
41
43
  secure?: boolean;
42
44
  maxAge?: number;
43
- sameSite?: boolean | 'lax' | 'strict' | 'none';
45
+ sameSite?: boolean | "lax" | "strict" | "none";
44
46
  path?: string;
45
47
  };
46
48
  }): (req: AuthenticatedRequest, res: Response, next: NextFunction) => Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/app/webview/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAUnD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAQ3D;AAED;;;;;;;;GAQG;AACH,wBAAsB,aAAa,CACjC,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAmC7B;AAsID;;;;;;;;;;;;GAYG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE;IAC5C,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE;QACd,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,QAAQ,CAAC,EAAE,OAAO,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;QAC/C,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;CACH,IAuBe,KAAK,oBAAoB,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,mBAiG3E"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/app/webview/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAKnD,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAMxC;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAQ3D;AAED;;;;;;;;GAQG;AACH,wBAAsB,aAAa,CACjC,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAyC7B;AA6JD;;;;;;;;;;;;GAYG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE;IAC5C,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,oBAAoB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,UAAU,GAAG,IAAI,CAAC;IAC7D,aAAa,CAAC,EAAE;QACd,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,QAAQ,CAAC,EAAE,OAAO,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;QAC/C,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;CACH,IA+BG,KAAK,oBAAoB,EACzB,KAAK,QAAQ,EACb,MAAM,YAAY,mBA0JrB"}
@@ -45,7 +45,8 @@ const axios_1 = __importDefault(require("axios"));
45
45
  // Example: app.use(require('cookie-parser')());
46
46
  const crypto = __importStar(require("crypto"));
47
47
  const jsrsasign_1 = require("jsrsasign");
48
- const userTokenPublicKey = process.env.MENTRAOS_CLOUD_USER_TOKEN_PUBLIC_KEY || "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0Yt2RtNOdeKQxWMY0c84\nADpY1Jy58YWZhaEgP2A5tBwFUKgy/TH9gQLWZjQ3dQ/6XXO8qq0kluoYFqM7ZDRF\nzJ0E4Yi0WQncioLRcCx4q8pDmqY9vPKgv6PruJdFWca0l0s3gZ3BqSeWum/C23xK\nFPHPwi8gvRdc6ALrkcHeciM+7NykU8c0EY8PSitNL+Tchti95kGu+j6APr5vNewi\nzRpQGOdqaLWe+ahHmtj6KtUZjm8o6lan4f/o08C6litizguZXuw2Nn/Kd9fFI1xF\nIVNJYMy9jgGaOi71+LpGw+vIpwAawp/7IvULDppvY3DdX5nt05P1+jvVJXPxMKzD\nTQIDAQAB\n-----END PUBLIC KEY-----";
48
+ const userTokenPublicKey = process.env.MENTRAOS_CLOUD_USER_TOKEN_PUBLIC_KEY ||
49
+ "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0Yt2RtNOdeKQxWMY0c84\nADpY1Jy58YWZhaEgP2A5tBwFUKgy/TH9gQLWZjQ3dQ/6XXO8qq0kluoYFqM7ZDRF\nzJ0E4Yi0WQncioLRcCx4q8pDmqY9vPKgv6PruJdFWca0l0s3gZ3BqSeWum/C23xK\nFPHPwi8gvRdc6ALrkcHeciM+7NykU8c0EY8PSitNL+Tchti95kGu+j6APr5vNewi\nzRpQGOdqaLWe+ahHmtj6KtUZjm8o6lan4f/o08C6litizguZXuw2Nn/Kd9fFI1xF\nIVNJYMy9jgGaOi71+LpGw+vIpwAawp/7IvULDppvY3DdX5nt05P1+jvVJXPxMKzD\nTQIDAQAB\n-----END PUBLIC KEY-----";
49
50
  /**
50
51
  * Extracts the temporary token from a URL string.
51
52
  * @param url The URL string, typically window.location.href.
@@ -54,7 +55,7 @@ const userTokenPublicKey = process.env.MENTRAOS_CLOUD_USER_TOKEN_PUBLIC_KEY || "
54
55
  function extractTempToken(url) {
55
56
  try {
56
57
  const parsedUrl = new URL(url);
57
- return parsedUrl.searchParams.get('aos_temp_token');
58
+ return parsedUrl.searchParams.get("aos_temp_token");
58
59
  }
59
60
  catch (e) {
60
61
  console.error("Error parsing URL for temp token:", e);
@@ -76,12 +77,14 @@ async function exchangeToken(cloudApiUrl, tempToken, apiKey, packageName) {
76
77
  try {
77
78
  const response = await axios_1.default.post(endpoint, { aos_temp_token: tempToken, packageName: packageName }, {
78
79
  headers: {
79
- 'Content-Type': 'application/json',
80
- 'Authorization': `Bearer ${apiKey}`,
80
+ "Content-Type": "application/json",
81
+ Authorization: `Bearer ${apiKey}`,
81
82
  },
82
83
  timeout: 10000, // 10 second timeout
83
84
  });
84
- if (response.status === 200 && response.data.success && response.data.userId) {
85
+ if (response.status === 200 &&
86
+ response.data.success &&
87
+ response.data.userId) {
85
88
  return { userId: response.data.userId };
86
89
  }
87
90
  else {
@@ -94,13 +97,13 @@ async function exchangeToken(cloudApiUrl, tempToken, apiKey, packageName) {
94
97
  if (axios_1.default.isAxiosError(error)) {
95
98
  const status = error.response?.status;
96
99
  const data = error.response?.data;
97
- const message = data?.error || error.message || 'Unknown error during token exchange';
100
+ const message = data?.error || error.message || "Unknown error during token exchange";
98
101
  console.error(`Token exchange failed with status ${status}: ${message}`);
99
102
  throw new Error(`Token exchange failed: ${message}`);
100
103
  }
101
104
  else {
102
- console.error('Unexpected error during token exchange:', error);
103
- throw new Error('An unexpected error occurred during token exchange.');
105
+ console.error("Unexpected error during token exchange:", error);
106
+ throw new Error("An unexpected error occurred during token exchange.");
104
107
  }
105
108
  }
106
109
  }
@@ -115,9 +118,9 @@ function signSession(userId, secret) {
115
118
  const timestamp = Date.now();
116
119
  const data = `${userId}|${timestamp}`;
117
120
  const signature = crypto
118
- .createHmac('sha256', secret)
121
+ .createHmac("sha256", secret)
119
122
  .update(data)
120
- .digest('hex');
123
+ .digest("hex");
121
124
  return `${data}|${signature}`;
122
125
  }
123
126
  /**
@@ -129,7 +132,7 @@ function signSession(userId, secret) {
129
132
  */
130
133
  function verifySession(token, secret, maxAge) {
131
134
  try {
132
- const parts = token.split('|');
135
+ const parts = token.split("|");
133
136
  if (parts.length !== 3)
134
137
  return null;
135
138
  const [userId, timestampStr, signature] = parts;
@@ -142,9 +145,9 @@ function verifySession(token, secret, maxAge) {
142
145
  // Verify signature
143
146
  const data = `${userId}|${timestamp}`;
144
147
  const expectedSignature = crypto
145
- .createHmac('sha256', secret)
148
+ .createHmac("sha256", secret)
146
149
  .update(data)
147
- .digest('hex');
150
+ .digest("hex");
148
151
  if (signature !== expectedSignature) {
149
152
  console.log(`Session token signature mismatch: ${signature} !== ${expectedSignature}`);
150
153
  return null;
@@ -193,18 +196,22 @@ async function verifySignedUserToken(signedUserToken) {
193
196
  function verifyFrontendToken(frontendToken, apiKey) {
194
197
  try {
195
198
  // Check if the token contains a user ID and hash separated by a colon
196
- const tokenParts = frontendToken.split(':');
199
+ const tokenParts = frontendToken.split(":");
197
200
  if (tokenParts.length === 2) {
198
201
  // Format: userId:hash
199
202
  const [tokenUserId, tokenHash] = tokenParts;
200
203
  // Align the hashing algorithm with server-side `hashWithApiKey`
201
204
  // 1. Hash the API key first (server only stores the hashed version)
202
- const hashedApiKey = crypto.createHash('sha256').update(apiKey).digest('hex');
205
+ const hashedApiKey = crypto
206
+ .createHash("sha256")
207
+ .update(apiKey)
208
+ .digest("hex");
203
209
  // 2. Create the expected hash using userId + hashedApiKey (same order & update calls)
204
- const expectedHash = crypto.createHash('sha256')
210
+ const expectedHash = crypto
211
+ .createHash("sha256")
205
212
  .update(tokenUserId)
206
213
  .update(hashedApiKey)
207
- .digest('hex');
214
+ .digest("hex");
208
215
  if (tokenHash === expectedHash) {
209
216
  return tokenUserId;
210
217
  }
@@ -220,10 +227,12 @@ function verifyFrontendToken(frontendToken, apiKey) {
220
227
  }
221
228
  }
222
229
  function validateCloudApiUrlChecksum(checksum, cloudApiUrl, apiKey) {
223
- const hashedApiKey = crypto.createHash('sha256').update(apiKey).digest('hex');
224
- const expectedChecksum = crypto.createHash('sha256').update(cloudApiUrl)
230
+ const hashedApiKey = crypto.createHash("sha256").update(apiKey).digest("hex");
231
+ const expectedChecksum = crypto
232
+ .createHash("sha256")
233
+ .update(cloudApiUrl)
225
234
  .update(hashedApiKey)
226
- .digest('hex');
235
+ .digest("hex");
227
236
  return expectedChecksum === checksum;
228
237
  }
229
238
  /**
@@ -240,47 +249,56 @@ function validateCloudApiUrlChecksum(checksum, cloudApiUrl, apiKey) {
240
249
  * @param options.cookieOptions Options for the session cookie (default: { httpOnly: true, secure: process.env.NODE_ENV === 'production' }).
241
250
  */
242
251
  function createAuthMiddleware(options) {
243
- const { apiKey, packageName, cookieName = 'aos_session', cookieSecret, cookieOptions = {
252
+ const { apiKey, packageName, cookieName = "aos_session", cookieSecret, getAppSessionForUser, cookieOptions = {
244
253
  httpOnly: true,
245
- secure: process.env.NODE_ENV === 'production',
254
+ secure: process.env.NODE_ENV === "production",
246
255
  maxAge: 30 * 24 * 60 * 60 * 1000, // 30 days by default
247
- sameSite: process.env.NODE_ENV === 'production' ? 'none' : 'lax',
248
- path: '/'
249
- } } = options;
256
+ sameSite: process.env.NODE_ENV === "production" ? "none" : "lax",
257
+ path: "/",
258
+ }, } = options;
250
259
  if (!apiKey) {
251
260
  throw new Error("API Key are required for the auth middleware.");
252
261
  }
253
- if (!cookieSecret || typeof cookieSecret !== 'string' || cookieSecret.length < 8) {
262
+ if (!cookieSecret ||
263
+ typeof cookieSecret !== "string" ||
264
+ cookieSecret.length < 8) {
254
265
  throw new Error("A strong cookieSecret (at least 8 characters) is required for secure session management.");
255
266
  }
256
267
  return async (req, res, next) => {
257
268
  // First check for temporary token in the query string
258
- const tempToken = req.query['aos_temp_token'];
259
- const frontendToken = req.headers.authorization?.replace('Bearer ', '') || req.query['aos_frontend_token'];
260
- const signedUserToken = req.query['aos_signed_user_token'];
269
+ const tempToken = req.query["aos_temp_token"];
270
+ const frontendToken = req.headers.authorization?.replace("Bearer ", "") ||
271
+ req.query["aos_frontend_token"];
272
+ const signedUserToken = req.query["aos_signed_user_token"];
261
273
  // first check for signed user token
262
274
  if (signedUserToken) {
263
275
  const userId = await verifySignedUserToken(signedUserToken);
264
276
  if (userId) {
265
277
  // Set the user ID on the request
266
278
  req.authUserId = userId;
279
+ if (getAppSessionForUser) {
280
+ const appSession = getAppSessionForUser(userId);
281
+ if (appSession) {
282
+ req.activeSession = appSession;
283
+ }
284
+ }
267
285
  // Create a signed session token and store it in a cookie
268
286
  const signedSession = signSession(userId, cookieSecret);
269
287
  res.cookie(cookieName, signedSession, cookieOptions);
270
- console.log('[auth.middleware] User ID verified from signed user token: ', userId);
288
+ console.log("[auth.middleware] User ID verified from signed user token: ", userId);
271
289
  return next();
272
290
  }
273
291
  else {
274
- console.log('[auth.middleware] Signed user token invalid');
292
+ console.log("[auth.middleware] Signed user token invalid");
275
293
  }
276
294
  }
277
295
  // If temporary token exists, authenticate with it
278
296
  if (tempToken) {
279
297
  try {
280
- let cloudApiUrl = `https://prod.augmentos.cloud`;
281
- const cloudApiUrlFromQuery = req.query['cloudApiUrl'];
298
+ let cloudApiUrl = `https://api.mentra.glass`;
299
+ const cloudApiUrlFromQuery = req.query["cloudApiUrl"];
282
300
  if (cloudApiUrlFromQuery) {
283
- const cloudApiUrlChecksum = req.query['cloudApiUrlChecksum'];
301
+ const cloudApiUrlChecksum = req.query["cloudApiUrlChecksum"];
284
302
  if (validateCloudApiUrlChecksum(cloudApiUrlChecksum, cloudApiUrlFromQuery, apiKey)) {
285
303
  console.log(`Cloud API is being routed to alternate url at request of the server: ${cloudApiUrlFromQuery}`);
286
304
  cloudApiUrl = cloudApiUrlFromQuery;
@@ -292,10 +310,16 @@ function createAuthMiddleware(options) {
292
310
  const { userId } = await exchangeToken(cloudApiUrl, tempToken, apiKey, packageName);
293
311
  // Set the user ID on the request
294
312
  req.authUserId = userId;
313
+ if (getAppSessionForUser) {
314
+ const appSession = getAppSessionForUser(userId);
315
+ if (appSession) {
316
+ req.activeSession = appSession;
317
+ }
318
+ }
295
319
  // Create a signed session token and store it in a cookie
296
320
  const signedSession = signSession(userId, cookieSecret);
297
321
  res.cookie(cookieName, signedSession, cookieOptions);
298
- console.log('[auth.middleware] User ID verified from temporary token: ', userId);
322
+ console.log("[auth.middleware] User ID verified from temporary token: ", userId);
299
323
  return next();
300
324
  }
301
325
  catch (error) {
@@ -308,14 +332,20 @@ function createAuthMiddleware(options) {
308
332
  const userId = verifyFrontendToken(frontendToken, apiKey);
309
333
  if (userId) {
310
334
  req.authUserId = userId;
335
+ if (getAppSessionForUser) {
336
+ const appSession = getAppSessionForUser(userId);
337
+ if (appSession) {
338
+ req.activeSession = appSession;
339
+ }
340
+ }
311
341
  // Create a signed session token and store it in a cookie
312
342
  const signedSession = signSession(userId, cookieSecret);
313
343
  res.cookie(cookieName, signedSession, cookieOptions);
314
- console.log('[auth.middleware] User ID verified from frontend user token: ', userId);
344
+ console.log("[auth.middleware] User ID verified from frontend user token: ", userId);
315
345
  return next();
316
346
  }
317
347
  else {
318
- console.log('[auth.middleware] Frontend token invalid');
348
+ console.log("[auth.middleware] Frontend token invalid");
319
349
  }
320
350
  }
321
351
  // No valid temporary token, check for existing session cookie
@@ -326,6 +356,12 @@ function createAuthMiddleware(options) {
326
356
  const userId = verifySession(sessionCookie, cookieSecret, cookieOptions.maxAge);
327
357
  if (userId) {
328
358
  req.authUserId = userId;
359
+ if (getAppSessionForUser) {
360
+ const appSession = getAppSessionForUser(userId);
361
+ if (appSession) {
362
+ req.activeSession = appSession;
363
+ }
364
+ }
329
365
  return next();
330
366
  }
331
367
  // Invalid or expired session, clear the cookie
package/dist/index.d.ts CHANGED
@@ -1,35 +1,35 @@
1
- export * from './types/token';
2
- export * from './types/message-types';
3
- export * from './types/messages/base';
4
- export * from './types/messages/glasses-to-cloud';
5
- export * from './types/messages/cloud-to-glasses';
6
- export * from './types/messages/app-to-cloud';
1
+ export * from "./types/token";
2
+ export * from "./types/message-types";
3
+ export * from "./types/messages/base";
4
+ export * from "./types/messages/glasses-to-cloud";
5
+ export * from "./types/messages/cloud-to-glasses";
6
+ export * from "./types/messages/app-to-cloud";
7
7
  export * from "./utils/bitmap-utils";
8
8
  export * from "./utils/animation-utils";
9
9
  export { AppConnectionAck, AppConnectionError, AppStopped, SettingsUpdate as AppSettingsUpdate, // Alias to avoid conflict with cloud-to-glasses SettingsUpdate
10
- DataStream, CloudToAppMessage, TranslationData, ToolCall, StandardConnectionError, CustomMessage, ManagedStreamStatus, OutputStatus, MentraosSettingsUpdate, TranscriptionData, AudioChunk, PermissionError, PermissionErrorDetail, AudioPlayResponse, isAppConnectionAck, isAppConnectionError, isAppStopped, isSettingsUpdate, isDataStream, isAudioChunk, isDashboardModeChanged, isDashboardAlwaysOnChanged, isManagedStreamStatus, isPhotoResponse as isPhotoResponseFromCloud, isRtmpStreamStatus as isRtmpStreamStatusFromCloud } from './types/messages/cloud-to-app';
11
- export * from './types/streams';
12
- export * from './types/layouts';
13
- export * from './types/dashboard';
14
- export * from './types/rtmp-stream';
15
- export * from './types/enums';
16
- export * from './types/models';
17
- export * from './types/user-session';
18
- export * from './types/webhooks';
19
- export * from './types/capabilities';
10
+ CapabilitiesUpdate, DataStream, CloudToAppMessage, TranslationData, ToolCall, StandardConnectionError, CustomMessage, ManagedStreamStatus, OutputStatus, MentraosSettingsUpdate, TranscriptionData, AudioChunk, PermissionError, PermissionErrorDetail, AudioPlayResponse, isAppConnectionAck, isAppConnectionError, isAppStopped, isSettingsUpdate, isCapabilitiesUpdate, isDataStream, isAudioChunk, isDashboardModeChanged, isDashboardAlwaysOnChanged, isManagedStreamStatus, isPhotoResponse as isPhotoResponseFromCloud, isRtmpStreamStatus as isRtmpStreamStatusFromCloud, } from "./types/messages/cloud-to-app";
11
+ export * from "./types/streams";
12
+ export * from "./types/layouts";
13
+ export * from "./types/dashboard";
14
+ export * from "./types/rtmp-stream";
15
+ export * from "./types/enums";
16
+ export * from "./types/models";
17
+ export * from "./types/user-session";
18
+ export * from "./types/webhooks";
19
+ export * from "./types/capabilities";
20
20
  export * from "./app/index";
21
21
  export * from "./logging/logger";
22
- export { ButtonPress, HeadPosition, GlassesBatteryUpdate, PhoneBatteryUpdate, GlassesConnectionState, LocationUpdate, CalendarEvent, Vad, PhoneNotification, PhoneNotificationDismissed, StartApp, StopApp, ConnectionInit, DashboardState, OpenDashboard, GlassesToCloudMessage, PhotoResponse, RtmpStreamStatus, KeepAliveAck } from './types/messages/glasses-to-cloud';
23
- export { ConnectionAck, ConnectionError, AuthError, DisplayEvent, AppStateChange, MicrophoneStateChange, CloudToGlassesMessage, PhotoRequestToGlasses, SettingsUpdate, StartRtmpStream, StopRtmpStream, KeepRtmpStreamAlive } from './types/messages/cloud-to-glasses';
24
- export { AppConnectionInit, AppSubscriptionUpdate, RtmpStreamRequest, RtmpStreamStopRequest, AppToCloudMessage, PhotoRequest } from './types/messages/app-to-cloud';
25
- export { TextWall, DoubleTextWall, DashboardCard, ReferenceCard, Layout, DisplayRequest, BitmapView, ClearView, } from './types/layouts';
26
- export { isButtonPress, isHeadPosition, isConnectionInit, isStartApp, isStopApp, isPhotoResponse as isPhotoResponseFromGlasses, isRtmpStreamStatus as isRtmpStreamStatusFromGlasses, isKeepAliveAck, isPhoneNotificationDismissed } from './types/messages/glasses-to-cloud';
27
- export { isConnectionAck, isDisplayEvent, isAppStateChange, isPhotoRequest, isSettingsUpdate as isSettingsUpdateToGlasses, isStartRtmpStream, isStopRtmpStream, isKeepRtmpStreamAlive } from './types/messages/cloud-to-glasses';
28
- export { isAppConnectionInit, isAppSubscriptionUpdate, isDisplayRequest, isRtmpStreamRequest, isRtmpStreamStopRequest, isPhotoRequest as isPhotoRequestFromApp } from './types/messages/app-to-cloud';
29
- export { BaseAppSetting, AppSetting, AppSettings, AppConfig, validateAppConfig, ToolSchema, ToolParameterSchema } from './types/models';
30
- export { VideoConfig, AudioConfig, StreamConfig, StreamStatusHandler } from './types/rtmp-stream';
31
- export * from './app/session/modules';
32
- export { PhotoData } from './types/photo-data';
22
+ export { ButtonPress, HeadPosition, GlassesBatteryUpdate, PhoneBatteryUpdate, GlassesConnectionState, LocationUpdate, CalendarEvent, Vad, PhoneNotification, PhoneNotificationDismissed, StartApp, StopApp, ConnectionInit, DashboardState, OpenDashboard, GlassesToCloudMessage, PhotoResponse, RtmpStreamStatus, KeepAliveAck, } from "./types/messages/glasses-to-cloud";
23
+ export { ConnectionAck, ConnectionError, AuthError, DisplayEvent, AppStateChange, MicrophoneStateChange, CloudToGlassesMessage, PhotoRequestToGlasses, SettingsUpdate, StartRtmpStream, StopRtmpStream, KeepRtmpStreamAlive, } from "./types/messages/cloud-to-glasses";
24
+ export { AppConnectionInit, AppSubscriptionUpdate, RtmpStreamRequest, RtmpStreamStopRequest, AppToCloudMessage, PhotoRequest, } from "./types/messages/app-to-cloud";
25
+ export { TextWall, DoubleTextWall, DashboardCard, ReferenceCard, Layout, DisplayRequest, BitmapView, ClearView, } from "./types/layouts";
26
+ export { isButtonPress, isHeadPosition, isConnectionInit, isStartApp, isStopApp, isPhotoResponse as isPhotoResponseFromGlasses, isRtmpStreamStatus as isRtmpStreamStatusFromGlasses, isKeepAliveAck, isPhoneNotificationDismissed, } from "./types/messages/glasses-to-cloud";
27
+ export { isConnectionAck, isDisplayEvent, isAppStateChange, isPhotoRequest, isSettingsUpdate as isSettingsUpdateToGlasses, isStartRtmpStream, isStopRtmpStream, isKeepRtmpStreamAlive, } from "./types/messages/cloud-to-glasses";
28
+ export { isAppConnectionInit, isAppSubscriptionUpdate, isDisplayRequest, isRtmpStreamRequest, isRtmpStreamStopRequest, isPhotoRequest as isPhotoRequestFromApp, } from "./types/messages/app-to-cloud";
29
+ export { BaseAppSetting, AppSetting, AppSettings, AppConfig, validateAppConfig, ToolSchema, ToolParameterSchema, } from "./types/models";
30
+ export { VideoConfig, AudioConfig, StreamConfig, StreamStatusHandler, } from "./types/rtmp-stream";
31
+ export * from "./app/session/modules";
32
+ export { PhotoData } from "./types/photo-data";
33
33
  /**
34
34
  * WebSocket error information
35
35
  */
@@ -38,7 +38,7 @@ export interface WebSocketError {
38
38
  message: string;
39
39
  details?: unknown;
40
40
  }
41
- import { Request } from 'express';
41
+ import { Request } from "express";
42
42
  export interface AuthenticatedRequest extends Request {
43
43
  authUserId?: string;
44
44
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,cAAc,eAAe,CAAC;AAG9B,cAAc,uBAAuB,CAAC;AAGtC,cAAc,uBAAuB,CAAC;AAGtC,cAAc,mCAAmC,CAAC;AAClD,cAAc,mCAAmC,CAAC;AAClD,cAAc,+BAA+B,CAAC;AAG9C,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AAGxC,OAAO,EAEL,gBAAgB,EAChB,kBAAkB,EAClB,UAAU,EACV,cAAc,IAAI,iBAAiB,EAAG,+DAA+D;AACrG,UAAU,EACV,iBAAiB,EACjB,eAAe,EACf,QAAQ,EACR,uBAAuB,EACvB,aAAa,EACb,mBAAmB,EACnB,YAAY,EACZ,sBAAsB,EACtB,iBAAiB,EACjB,UAAU,EACV,eAAe,EACf,qBAAqB,EACrB,iBAAiB,EAEjB,kBAAkB,EAClB,oBAAoB,EACpB,YAAY,EACZ,gBAAgB,EAChB,YAAY,EACZ,YAAY,EACZ,sBAAsB,EACtB,0BAA0B,EAC1B,qBAAqB,EAGrB,eAAe,IAAI,wBAAwB,EAC3C,kBAAkB,IAAI,2BAA2B,EAClD,MAAM,+BAA+B,CAAC;AAGvC,cAAc,iBAAiB,CAAC;AAGhC,cAAc,iBAAiB,CAAC;AAGhC,cAAc,mBAAmB,CAAC;AAGlC,cAAc,qBAAqB,CAAC;AAGpC,cAAc,eAAe,CAAC;AAG9B,cAAc,gBAAgB,CAAC;AAG/B,cAAc,sBAAsB,CAAC;AAGrC,cAAc,kBAAkB,CAAC;AAGjC,cAAc,sBAAsB,CAAC;AAGrC,cAAc,aAAa,CAAC;AAG5B,cAAc,kBAAkB,CAAC;AAOjC,OAAO,EACL,WAAW,EACX,YAAY,EACZ,oBAAoB,EACpB,kBAAkB,EAClB,sBAAsB,EACtB,cAAc,EACd,aAAa,EACb,GAAG,EACH,iBAAiB,EACjB,0BAA0B,EAC1B,QAAQ,EACR,OAAO,EACP,cAAc,EACd,cAAc,EACd,aAAa,EACb,qBAAqB,EACrB,aAAa,EACb,gBAAgB,EAChB,YAAY,EACb,MAAM,mCAAmC,CAAC;AAG3C,OAAO,EACL,aAAa,EACb,eAAe,EACf,SAAS,EACT,YAAY,EACZ,cAAc,EACd,qBAAqB,EACrB,qBAAqB,EACrB,qBAAqB,EACrB,cAAc,EACd,eAAe,EACf,cAAc,EACd,mBAAmB,EACpB,MAAM,mCAAmC,CAAC;AAG3C,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,iBAAiB,EACjB,qBAAqB,EACrB,iBAAiB,EACjB,YAAY,EACb,MAAM,+BAA+B,CAAC;AAGvC,OAAO,EACL,QAAQ,EACR,cAAc,EACd,aAAa,EACb,aAAa,EACb,MAAM,EACN,cAAc,EACd,UAAU,EACV,SAAS,GACV,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EACL,aAAa,EACb,cAAc,EACd,gBAAgB,EAChB,UAAU,EACV,SAAS,EACT,eAAe,IAAI,0BAA0B,EAC7C,kBAAkB,IAAI,6BAA6B,EACnD,cAAc,EACd,4BAA4B,EAC7B,MAAM,mCAAmC,CAAC;AAE3C,OAAO,EACL,eAAe,EACf,cAAc,EACd,gBAAgB,EAChB,cAAc,EACd,gBAAgB,IAAI,yBAAyB,EAC7C,iBAAiB,EACjB,gBAAgB,EAChB,qBAAqB,EACtB,MAAM,mCAAmC,CAAC;AAE3C,OAAO,EACL,mBAAmB,EACnB,uBAAuB,EACvB,gBAAgB,EAChB,mBAAmB,EACnB,uBAAuB,EACvB,cAAc,IAAI,qBAAqB,EACxC,MAAM,+BAA+B,CAAC;AAGvC,OAAO,EACL,cAAc,EACd,UAAU,EACV,WAAW,EACX,SAAS,EACT,iBAAiB,EACjB,UAAU,EACV,mBAAmB,EACpB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EACL,WAAW,EACX,WAAW,EACX,YAAY,EACZ,mBAAmB,EACpB,MAAM,qBAAqB,CAAC;AAG7B,cAAc,uBAAuB,CAAC;AAGtC,OAAO,EACL,SAAS,EACV,MAAM,oBAAoB,CAAC;AAE5B;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,MAAM,WAAW,oBAAqB,SAAQ,OAAO;IACnD,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -15,7 +15,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
15
15
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
16
16
  };
17
17
  Object.defineProperty(exports, "__esModule", { value: true });
18
- exports.validateAppConfig = exports.isPhotoRequestFromApp = exports.isRtmpStreamStopRequest = exports.isRtmpStreamRequest = exports.isDisplayRequest = exports.isAppSubscriptionUpdate = exports.isAppConnectionInit = exports.isKeepRtmpStreamAlive = exports.isStopRtmpStream = exports.isStartRtmpStream = exports.isSettingsUpdateToGlasses = exports.isPhotoRequest = exports.isAppStateChange = exports.isDisplayEvent = exports.isConnectionAck = exports.isPhoneNotificationDismissed = exports.isKeepAliveAck = exports.isRtmpStreamStatusFromGlasses = exports.isPhotoResponseFromGlasses = exports.isStopApp = exports.isStartApp = exports.isConnectionInit = exports.isHeadPosition = exports.isButtonPress = exports.isRtmpStreamStatusFromCloud = exports.isPhotoResponseFromCloud = exports.isManagedStreamStatus = exports.isDashboardAlwaysOnChanged = exports.isDashboardModeChanged = exports.isAudioChunk = exports.isDataStream = exports.isSettingsUpdate = exports.isAppStopped = exports.isAppConnectionError = exports.isAppConnectionAck = void 0;
18
+ exports.validateAppConfig = exports.isPhotoRequestFromApp = exports.isRtmpStreamStopRequest = exports.isRtmpStreamRequest = exports.isDisplayRequest = exports.isAppSubscriptionUpdate = exports.isAppConnectionInit = exports.isKeepRtmpStreamAlive = exports.isStopRtmpStream = exports.isStartRtmpStream = exports.isSettingsUpdateToGlasses = exports.isPhotoRequest = exports.isAppStateChange = exports.isDisplayEvent = exports.isConnectionAck = exports.isPhoneNotificationDismissed = exports.isKeepAliveAck = exports.isRtmpStreamStatusFromGlasses = exports.isPhotoResponseFromGlasses = exports.isStopApp = exports.isStartApp = exports.isConnectionInit = exports.isHeadPosition = exports.isButtonPress = exports.isRtmpStreamStatusFromCloud = exports.isPhotoResponseFromCloud = exports.isManagedStreamStatus = exports.isDashboardAlwaysOnChanged = exports.isDashboardModeChanged = exports.isAudioChunk = exports.isDataStream = exports.isCapabilitiesUpdate = exports.isSettingsUpdate = exports.isAppStopped = exports.isAppConnectionError = exports.isAppConnectionAck = void 0;
19
19
  __exportStar(require("./types/token"), exports);
20
20
  // Message type enums
21
21
  __exportStar(require("./types/message-types"), exports);
@@ -35,6 +35,7 @@ Object.defineProperty(exports, "isAppConnectionAck", { enumerable: true, get: fu
35
35
  Object.defineProperty(exports, "isAppConnectionError", { enumerable: true, get: function () { return cloud_to_app_1.isAppConnectionError; } });
36
36
  Object.defineProperty(exports, "isAppStopped", { enumerable: true, get: function () { return cloud_to_app_1.isAppStopped; } });
37
37
  Object.defineProperty(exports, "isSettingsUpdate", { enumerable: true, get: function () { return cloud_to_app_1.isSettingsUpdate; } });
38
+ Object.defineProperty(exports, "isCapabilitiesUpdate", { enumerable: true, get: function () { return cloud_to_app_1.isCapabilitiesUpdate; } });
38
39
  Object.defineProperty(exports, "isDataStream", { enumerable: true, get: function () { return cloud_to_app_1.isDataStream; } });
39
40
  Object.defineProperty(exports, "isAudioChunk", { enumerable: true, get: function () { return cloud_to_app_1.isAudioChunk; } });
40
41
  Object.defineProperty(exports, "isDashboardModeChanged", { enumerable: true, get: function () { return cloud_to_app_1.isDashboardModeChanged; } });
@@ -1,30 +1,30 @@
1
- export * from './token';
2
- export * from './message-types';
3
- export * from './messages/base';
4
- export * from './messages/glasses-to-cloud';
5
- export * from './messages/cloud-to-glasses';
6
- export * from './messages/app-to-cloud';
1
+ export * from "./token";
2
+ export * from "./message-types";
3
+ export * from "./messages/base";
4
+ export * from "./messages/glasses-to-cloud";
5
+ export * from "./messages/cloud-to-glasses";
6
+ export * from "./messages/app-to-cloud";
7
7
  export { AppConnectionAck, AppConnectionError, AppStopped, SettingsUpdate as AppSettingsUpdate, // Alias to avoid conflict with cloud-to-glasses SettingsUpdate
8
- DataStream, CloudToAppMessage, AudioPlayResponse, TranslationData, ToolCall, StandardConnectionError, CustomMessage, ManagedStreamStatus, OutputStatus, MentraosSettingsUpdate, TranscriptionData, AudioChunk, PermissionError, PermissionErrorDetail, isAppConnectionAck, isAppConnectionError, isAppStopped, isSettingsUpdate, isDataStream, isAudioChunk, isAudioPlayResponse, isDashboardModeChanged, isDashboardAlwaysOnChanged, isManagedStreamStatus, isPhotoResponse as isPhotoResponseFromCloud, isRtmpStreamStatus as isRtmpStreamStatusFromCloud } from './messages/cloud-to-app';
9
- export * from './streams';
10
- export * from './layouts';
11
- export * from './dashboard';
12
- export * from './rtmp-stream';
13
- export * from './enums';
14
- export * from './models';
15
- export * from './user-session';
16
- export * from './webhooks';
17
- export * from './capabilities';
18
- export * from './photo-data';
19
- export { ButtonPress, HeadPosition, GlassesBatteryUpdate, PhoneBatteryUpdate, GlassesConnectionState, LocationUpdate, CalendarEvent, Vad, PhoneNotification, PhoneNotificationDismissed, StartApp, StopApp, ConnectionInit, DashboardState, OpenDashboard, GlassesToCloudMessage, PhotoResponse, RtmpStreamStatus, KeepAliveAck } from './messages/glasses-to-cloud';
20
- export { ConnectionAck, ConnectionError, AuthError, DisplayEvent, AppStateChange, MicrophoneStateChange, CloudToGlassesMessage, PhotoRequestToGlasses, AudioPlayRequestToGlasses, AudioStopRequestToGlasses, SettingsUpdate, StartRtmpStream, StopRtmpStream, KeepRtmpStreamAlive } from './messages/cloud-to-glasses';
21
- export { AppConnectionInit, AppSubscriptionUpdate, AudioPlayRequest, AudioStopRequest, RtmpStreamRequest, RtmpStreamStopRequest, AppToCloudMessage, PhotoRequest } from './messages/app-to-cloud';
22
- export { TextWall, DoubleTextWall, DashboardCard, ReferenceCard, Layout, DisplayRequest } from './layouts';
23
- export { isButtonPress, isHeadPosition, isConnectionInit, isStartApp, isStopApp, isPhotoResponse as isPhotoResponseFromGlasses, isRtmpStreamStatus as isRtmpStreamStatusFromGlasses, isKeepAliveAck } from './messages/glasses-to-cloud';
24
- export { isConnectionAck, isDisplayEvent, isAppStateChange, isPhotoRequest, isAudioPlayRequestToGlasses, isAudioStopRequestToGlasses, isSettingsUpdate as isSettingsUpdateToGlasses, isStartRtmpStream, isStopRtmpStream, isKeepRtmpStreamAlive } from './messages/cloud-to-glasses';
25
- export { isAppConnectionInit, isAppSubscriptionUpdate, isDisplayRequest, isAudioPlayRequest, isAudioStopRequest, isRtmpStreamRequest, isRtmpStreamStopRequest, isPhotoRequest as isPhotoRequestFromApp } from './messages/app-to-cloud';
26
- export { BaseAppSetting, AppSetting, AppSettings, AppConfig, validateAppConfig, ToolSchema, ToolParameterSchema } from './models';
27
- export { VideoConfig, AudioConfig, StreamConfig, StreamStatusHandler } from './rtmp-stream';
8
+ CapabilitiesUpdate, DataStream, CloudToAppMessage, AudioPlayResponse, TranslationData, ToolCall, StandardConnectionError, CustomMessage, ManagedStreamStatus, OutputStatus, MentraosSettingsUpdate, TranscriptionData, AudioChunk, PermissionError, PermissionErrorDetail, isAppConnectionAck, isAppConnectionError, isAppStopped, isSettingsUpdate, isCapabilitiesUpdate, isDataStream, isAudioChunk, isAudioPlayResponse, isDashboardModeChanged, isDashboardAlwaysOnChanged, isManagedStreamStatus, isPhotoResponse as isPhotoResponseFromCloud, isRtmpStreamStatus as isRtmpStreamStatusFromCloud, } from "./messages/cloud-to-app";
9
+ export * from "./streams";
10
+ export * from "./layouts";
11
+ export * from "./dashboard";
12
+ export * from "./rtmp-stream";
13
+ export * from "./enums";
14
+ export * from "./models";
15
+ export * from "./user-session";
16
+ export * from "./webhooks";
17
+ export * from "./capabilities";
18
+ export * from "./photo-data";
19
+ export { ButtonPress, HeadPosition, GlassesBatteryUpdate, PhoneBatteryUpdate, GlassesConnectionState, LocationUpdate, CalendarEvent, Vad, PhoneNotification, PhoneNotificationDismissed, StartApp, StopApp, ConnectionInit, DashboardState, OpenDashboard, GlassesToCloudMessage, PhotoResponse, RtmpStreamStatus, KeepAliveAck, } from "./messages/glasses-to-cloud";
20
+ export { ConnectionAck, ConnectionError, AuthError, DisplayEvent, AppStateChange, MicrophoneStateChange, CloudToGlassesMessage, PhotoRequestToGlasses, AudioPlayRequestToGlasses, AudioStopRequestToGlasses, SettingsUpdate, StartRtmpStream, StopRtmpStream, KeepRtmpStreamAlive, } from "./messages/cloud-to-glasses";
21
+ export { AppConnectionInit, AppSubscriptionUpdate, AudioPlayRequest, AudioStopRequest, RtmpStreamRequest, RtmpStreamStopRequest, AppToCloudMessage, PhotoRequest, } from "./messages/app-to-cloud";
22
+ export { TextWall, DoubleTextWall, DashboardCard, ReferenceCard, Layout, DisplayRequest, } from "./layouts";
23
+ export { isButtonPress, isHeadPosition, isConnectionInit, isStartApp, isStopApp, isPhotoResponse as isPhotoResponseFromGlasses, isRtmpStreamStatus as isRtmpStreamStatusFromGlasses, isKeepAliveAck, } from "./messages/glasses-to-cloud";
24
+ export { isConnectionAck, isDisplayEvent, isAppStateChange, isPhotoRequest, isAudioPlayRequestToGlasses, isAudioStopRequestToGlasses, isSettingsUpdate as isSettingsUpdateToGlasses, isStartRtmpStream, isStopRtmpStream, isKeepRtmpStreamAlive, } from "./messages/cloud-to-glasses";
25
+ export { isAppConnectionInit, isAppSubscriptionUpdate, isDisplayRequest, isAudioPlayRequest, isAudioStopRequest, isRtmpStreamRequest, isRtmpStreamStopRequest, isPhotoRequest as isPhotoRequestFromApp, } from "./messages/app-to-cloud";
26
+ export { BaseAppSetting, AppSetting, AppSettings, AppConfig, validateAppConfig, ToolSchema, ToolParameterSchema, } from "./models";
27
+ export { VideoConfig, AudioConfig, StreamConfig, StreamStatusHandler, } from "./rtmp-stream";
28
28
  /**
29
29
  * WebSocket error information
30
30
  */
@@ -33,8 +33,10 @@ export interface WebSocketError {
33
33
  message: string;
34
34
  details?: unknown;
35
35
  }
36
- import { Request } from 'express';
36
+ import { Request } from "express";
37
+ import { AppSession } from "src/app/session";
37
38
  export interface AuthenticatedRequest extends Request {
38
39
  authUserId?: string;
40
+ activeSession: AppSession;
39
41
  }
40
42
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
@@ -15,7 +15,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
15
15
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
16
16
  };
17
17
  Object.defineProperty(exports, "__esModule", { value: true });
18
- exports.validateAppConfig = exports.isPhotoRequestFromApp = exports.isRtmpStreamStopRequest = exports.isRtmpStreamRequest = exports.isAudioStopRequest = exports.isAudioPlayRequest = exports.isDisplayRequest = exports.isAppSubscriptionUpdate = exports.isAppConnectionInit = exports.isKeepRtmpStreamAlive = exports.isStopRtmpStream = exports.isStartRtmpStream = exports.isSettingsUpdateToGlasses = exports.isAudioStopRequestToGlasses = exports.isAudioPlayRequestToGlasses = exports.isPhotoRequest = exports.isAppStateChange = exports.isDisplayEvent = exports.isConnectionAck = exports.isKeepAliveAck = exports.isRtmpStreamStatusFromGlasses = exports.isPhotoResponseFromGlasses = exports.isStopApp = exports.isStartApp = exports.isConnectionInit = exports.isHeadPosition = exports.isButtonPress = exports.isRtmpStreamStatusFromCloud = exports.isPhotoResponseFromCloud = exports.isManagedStreamStatus = exports.isDashboardAlwaysOnChanged = exports.isDashboardModeChanged = exports.isAudioPlayResponse = exports.isAudioChunk = exports.isDataStream = exports.isSettingsUpdate = exports.isAppStopped = exports.isAppConnectionError = exports.isAppConnectionAck = void 0;
18
+ exports.validateAppConfig = exports.isPhotoRequestFromApp = exports.isRtmpStreamStopRequest = exports.isRtmpStreamRequest = exports.isAudioStopRequest = exports.isAudioPlayRequest = exports.isDisplayRequest = exports.isAppSubscriptionUpdate = exports.isAppConnectionInit = exports.isKeepRtmpStreamAlive = exports.isStopRtmpStream = exports.isStartRtmpStream = exports.isSettingsUpdateToGlasses = exports.isAudioStopRequestToGlasses = exports.isAudioPlayRequestToGlasses = exports.isPhotoRequest = exports.isAppStateChange = exports.isDisplayEvent = exports.isConnectionAck = exports.isKeepAliveAck = exports.isRtmpStreamStatusFromGlasses = exports.isPhotoResponseFromGlasses = exports.isStopApp = exports.isStartApp = exports.isConnectionInit = exports.isHeadPosition = exports.isButtonPress = exports.isRtmpStreamStatusFromCloud = exports.isPhotoResponseFromCloud = exports.isManagedStreamStatus = exports.isDashboardAlwaysOnChanged = exports.isDashboardModeChanged = exports.isAudioPlayResponse = exports.isAudioChunk = exports.isDataStream = exports.isCapabilitiesUpdate = exports.isSettingsUpdate = exports.isAppStopped = exports.isAppConnectionError = exports.isAppConnectionAck = void 0;
19
19
  __exportStar(require("./token"), exports);
20
20
  // Message type enums
21
21
  __exportStar(require("./message-types"), exports);
@@ -32,6 +32,7 @@ Object.defineProperty(exports, "isAppConnectionAck", { enumerable: true, get: fu
32
32
  Object.defineProperty(exports, "isAppConnectionError", { enumerable: true, get: function () { return cloud_to_app_1.isAppConnectionError; } });
33
33
  Object.defineProperty(exports, "isAppStopped", { enumerable: true, get: function () { return cloud_to_app_1.isAppStopped; } });
34
34
  Object.defineProperty(exports, "isSettingsUpdate", { enumerable: true, get: function () { return cloud_to_app_1.isSettingsUpdate; } });
35
+ Object.defineProperty(exports, "isCapabilitiesUpdate", { enumerable: true, get: function () { return cloud_to_app_1.isCapabilitiesUpdate; } });
35
36
  Object.defineProperty(exports, "isDataStream", { enumerable: true, get: function () { return cloud_to_app_1.isDataStream; } });
36
37
  Object.defineProperty(exports, "isAudioChunk", { enumerable: true, get: function () { return cloud_to_app_1.isAudioChunk; } });
37
38
  Object.defineProperty(exports, "isAudioPlayResponse", { enumerable: true, get: function () { return cloud_to_app_1.isAudioPlayResponse; } });
@@ -82,6 +82,7 @@ export declare enum CloudToAppMessageType {
82
82
  CONNECTION_ERROR = "tpa_connection_error",
83
83
  APP_STOPPED = "app_stopped",
84
84
  SETTINGS_UPDATE = "settings_update",
85
+ CAPABILITIES_UPDATE = "capabilities_update",
85
86
  DASHBOARD_MODE_CHANGED = "dashboard_mode_changed",
86
87
  DASHBOARD_ALWAYS_ON_CHANGED = "dashboard_always_on_changed",
87
88
  DATA_STREAM = "data_stream",
@@ -1 +1 @@
1
- {"version":3,"file":"message-types.d.ts","sourceRoot":"","sources":["../../src/types/message-types.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,oBAAY,yBAAyB;IAEnC,eAAe,oBAAoB;IACnC,gBAAgB,qBAAqB;IAIrC,SAAS,cAAuB;IAChC,QAAQ,aAAsB;IAE9B,eAAe,oBAAoB;IACnC,cAAc,mBAA4B;IAG1C,cAAc,mBAA4B;IAG1C,kBAAkB,uBAAgC;IAClD,cAAc,mBAAmB;IAajC,YAAY,iBAA0B;IACtC,aAAa,kBAA2B;IACxC,sBAAsB,2BAAoC;IAC1D,oBAAoB,yBAAkC;IACtD,wBAAwB,6BAAsC;IAC9D,eAAe,oBAA6B;IAC5C,eAAe,oBAA6B;IAC5C,GAAG,QAAiB;IACpB,kBAAkB,uBAAgC;IAClD,4BAA4B,iCAA0C;IACtE,cAAc,mBAA4B;IAC1C,gCAAgC,4BAA8C;IAC9E,kBAAkB,uBAAgC;IAClD,WAAW,gBAAyB;IACpC,mBAAmB,wBAAwB;CAC5C;AAED;;GAEG;AACH,oBAAY,yBAAyB;IAEnC,cAAc,mBAAmB;IACjC,gBAAgB,qBAAqB;IACrC,UAAU,eAAe;IAGzB,aAAa,kBAAkB;IAC/B,gBAAgB,qBAAqB;IACrC,uBAAuB,4BAA4B;IACnD,aAAa,kBAAkB;IAC/B,kBAAkB,uBAAuB;IACzC,kBAAkB,uBAAuB;IACzC,eAAe,oBAAoB;IAGnC,iBAAiB,sBAAsB;IACvC,gBAAgB,qBAAqB;IACrC,sBAAsB,2BAA2B;IAGjD,qBAAqB,0BAA0B;IAC/C,0BAA0B,+BAA+B;IAGzD,iBAAiB,sBAAsB;IACvC,uBAAuB,4BAA4B;IAEnD,eAAe,oBAAoB;CACpC;AAED;;GAEG;AACH,oBAAY,qBAAqB;IAE/B,eAAe,wBAAwB;IACvC,mBAAmB,wBAAwB;IAC3C,qBAAqB,0BAA0B;IAG/C,eAAe,kBAAkB;IACjC,aAAa,kBAAkB;IAC/B,kBAAkB,uBAAuB;IACzC,kBAAkB,uBAAuB;IAGzC,mBAAmB,wBAAwB;IAC3C,gBAAgB,qBAAqB;IAGrC,sBAAsB,2BAA2B;IACjD,mBAAmB,wBAAwB;IAG3C,wBAAwB,6BAA6B;IACrD,qBAAqB,0BAA0B;IAC/C,uBAAuB,4BAA4B;IAGnD,qBAAqB,0BAA0B;IAC/C,kBAAkB,uBAAuB;IACzC,kBAAkB,uBAAuB;IACzC,aAAa,kBAAkB;IAC/B,cAAc,mBAAmB;CAClC;AAED;;GAEG;AACH,oBAAY,qBAAqB;IAE/B,cAAc,uBAAuB;IACrC,gBAAgB,yBAAyB;IAGzC,WAAW,gBAAgB;IAC3B,eAAe,oBAAoB;IAGnC,sBAAsB,2BAA2B;IACjD,2BAA2B,gCAAgC;IAG3D,WAAW,gBAAgB;IAG3B,cAAc,mBAAmB;IACjC,mBAAmB,wBAAwB;IAC3C,kBAAkB,uBAAuB;IACzC,qBAAqB,0BAA0B;IAE/C,eAAe,oBAAoB;IAGnC,gBAAgB,qBAAqB;IAGrC,cAAc,mBAAmB;IAGjC,oBAAoB,yBAAyB;IAC7C,eAAe,oBAAoB;IACnC,aAAa,kBAAkB;IAC/B,gBAAgB,qBAAqB;IACrC,2BAA2B,gCAAgC;CAC5D;AAED;;GAEG;AACH,eAAO,MAAM,kBAAkB,oNAMrB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,UAAU,imBAcb,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,aAAa,uIAIhB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,WAAW,qjBAad,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,qBAAqB,wPAMxB,CAAC"}
1
+ {"version":3,"file":"message-types.d.ts","sourceRoot":"","sources":["../../src/types/message-types.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,oBAAY,yBAAyB;IAEnC,eAAe,oBAAoB;IACnC,gBAAgB,qBAAqB;IAIrC,SAAS,cAAuB;IAChC,QAAQ,aAAsB;IAE9B,eAAe,oBAAoB;IACnC,cAAc,mBAA4B;IAG1C,cAAc,mBAA4B;IAG1C,kBAAkB,uBAAgC;IAClD,cAAc,mBAAmB;IAajC,YAAY,iBAA0B;IACtC,aAAa,kBAA2B;IACxC,sBAAsB,2BAAoC;IAC1D,oBAAoB,yBAAkC;IACtD,wBAAwB,6BAAsC;IAC9D,eAAe,oBAA6B;IAC5C,eAAe,oBAA6B;IAC5C,GAAG,QAAiB;IACpB,kBAAkB,uBAAgC;IAClD,4BAA4B,iCAA0C;IACtE,cAAc,mBAA4B;IAC1C,gCAAgC,4BAA8C;IAC9E,kBAAkB,uBAAgC;IAClD,WAAW,gBAAyB;IACpC,mBAAmB,wBAAwB;CAC5C;AAED;;GAEG;AACH,oBAAY,yBAAyB;IAEnC,cAAc,mBAAmB;IACjC,gBAAgB,qBAAqB;IACrC,UAAU,eAAe;IAGzB,aAAa,kBAAkB;IAC/B,gBAAgB,qBAAqB;IACrC,uBAAuB,4BAA4B;IACnD,aAAa,kBAAkB;IAC/B,kBAAkB,uBAAuB;IACzC,kBAAkB,uBAAuB;IACzC,eAAe,oBAAoB;IAGnC,iBAAiB,sBAAsB;IACvC,gBAAgB,qBAAqB;IACrC,sBAAsB,2BAA2B;IAGjD,qBAAqB,0BAA0B;IAC/C,0BAA0B,+BAA+B;IAGzD,iBAAiB,sBAAsB;IACvC,uBAAuB,4BAA4B;IAEnD,eAAe,oBAAoB;CACpC;AAED;;GAEG;AACH,oBAAY,qBAAqB;IAE/B,eAAe,wBAAwB;IACvC,mBAAmB,wBAAwB;IAC3C,qBAAqB,0BAA0B;IAG/C,eAAe,kBAAkB;IACjC,aAAa,kBAAkB;IAC/B,kBAAkB,uBAAuB;IACzC,kBAAkB,uBAAuB;IAGzC,mBAAmB,wBAAwB;IAC3C,gBAAgB,qBAAqB;IAGrC,sBAAsB,2BAA2B;IACjD,mBAAmB,wBAAwB;IAG3C,wBAAwB,6BAA6B;IACrD,qBAAqB,0BAA0B;IAC/C,uBAAuB,4BAA4B;IAGnD,qBAAqB,0BAA0B;IAC/C,kBAAkB,uBAAuB;IACzC,kBAAkB,uBAAuB;IACzC,aAAa,kBAAkB;IAC/B,cAAc,mBAAmB;CAClC;AAED;;GAEG;AACH,oBAAY,qBAAqB;IAE/B,cAAc,uBAAuB;IACrC,gBAAgB,yBAAyB;IAGzC,WAAW,gBAAgB;IAC3B,eAAe,oBAAoB;IACnC,mBAAmB,wBAAwB;IAG3C,sBAAsB,2BAA2B;IACjD,2BAA2B,gCAAgC;IAG3D,WAAW,gBAAgB;IAG3B,cAAc,mBAAmB;IACjC,mBAAmB,wBAAwB;IAC3C,kBAAkB,uBAAuB;IACzC,qBAAqB,0BAA0B;IAE/C,eAAe,oBAAoB;IAGnC,gBAAgB,qBAAqB;IAGrC,cAAc,mBAAmB;IAGjC,oBAAoB,yBAAyB;IAC7C,eAAe,oBAAoB;IACnC,aAAa,kBAAkB;IAC/B,gBAAgB,qBAAqB;IACrC,2BAA2B,gCAAgC;CAC5D;AAED;;GAEG;AACH,eAAO,MAAM,kBAAkB,oNAMrB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,UAAU,imBAcb,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,aAAa,uIAIhB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,WAAW,qjBAad,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,qBAAqB,wPAMxB,CAAC"}
@@ -118,6 +118,7 @@ var CloudToAppMessageType;
118
118
  // Updates
119
119
  CloudToAppMessageType["APP_STOPPED"] = "app_stopped";
120
120
  CloudToAppMessageType["SETTINGS_UPDATE"] = "settings_update";
121
+ CloudToAppMessageType["CAPABILITIES_UPDATE"] = "capabilities_update";
121
122
  // Dashboard updates
122
123
  CloudToAppMessageType["DASHBOARD_MODE_CHANGED"] = "dashboard_mode_changed";
123
124
  CloudToAppMessageType["DASHBOARD_ALWAYS_ON_CHANGED"] = "dashboard_always_on_changed";
@@ -148,7 +149,7 @@ exports.ControlActionTypes = [
148
149
  GlassesToCloudMessageType.START_APP,
149
150
  GlassesToCloudMessageType.STOP_APP,
150
151
  GlassesToCloudMessageType.DASHBOARD_STATE,
151
- GlassesToCloudMessageType.OPEN_DASHBOARD
152
+ GlassesToCloudMessageType.OPEN_DASHBOARD,
152
153
  ];
153
154
  /**
154
155
  * Event message types (subset of GlassesToCloudMessageType)
@@ -166,7 +167,7 @@ exports.EventTypes = [
166
167
  GlassesToCloudMessageType.PHONE_NOTIFICATION_DISMISSED,
167
168
  GlassesToCloudMessageType.CALENDAR_EVENT,
168
169
  GlassesToCloudMessageType.MENTRAOS_SETTINGS_UPDATE_REQUEST,
169
- GlassesToCloudMessageType.CORE_STATUS_UPDATE
170
+ GlassesToCloudMessageType.CORE_STATUS_UPDATE,
170
171
  ];
171
172
  /**
172
173
  * Response message types (subset of CloudToGlassesMessageType)
@@ -174,7 +175,7 @@ exports.EventTypes = [
174
175
  exports.ResponseTypes = [
175
176
  CloudToGlassesMessageType.CONNECTION_ACK,
176
177
  CloudToGlassesMessageType.CONNECTION_ERROR,
177
- CloudToGlassesMessageType.AUTH_ERROR
178
+ CloudToGlassesMessageType.AUTH_ERROR,
178
179
  ];
179
180
  /**
180
181
  * Update message types (subset of CloudToGlassesMessageType)
@@ -191,7 +192,7 @@ exports.UpdateTypes = [
191
192
  CloudToGlassesMessageType.DASHBOARD_ALWAYS_ON_CHANGE,
192
193
  CloudToGlassesMessageType.START_RTMP_STREAM,
193
194
  CloudToGlassesMessageType.STOP_RTMP_STREAM,
194
- CloudToGlassesMessageType.KEEP_RTMP_STREAM_ALIVE
195
+ CloudToGlassesMessageType.KEEP_RTMP_STREAM_ALIVE,
195
196
  ];
196
197
  /**
197
198
  * Dashboard message types
@@ -201,5 +202,5 @@ exports.DashboardMessageTypes = [
201
202
  AppToCloudMessageType.DASHBOARD_MODE_CHANGE,
202
203
  AppToCloudMessageType.DASHBOARD_SYSTEM_UPDATE,
203
204
  CloudToAppMessageType.DASHBOARD_MODE_CHANGED,
204
- CloudToAppMessageType.DASHBOARD_ALWAYS_ON_CHANGED
205
+ CloudToAppMessageType.DASHBOARD_ALWAYS_ON_CHANGED,
205
206
  ];