@mentra/sdk 2.1.1 โ 2.1.2-alpha.1
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.
- package/dist/app/session/events.d.ts +4 -2
- package/dist/app/session/events.d.ts.map +1 -1
- package/dist/app/session/events.js +3 -0
- package/dist/app/session/index.d.ts +21 -5
- package/dist/app/session/index.d.ts.map +1 -1
- package/dist/app/session/index.js +80 -21
- package/dist/app/session/modules/audio.d.ts +190 -0
- package/dist/app/session/modules/audio.d.ts.map +1 -0
- package/dist/app/session/modules/audio.js +317 -0
- package/dist/app/session/modules/camera-managed-extension.d.ts +154 -0
- package/dist/app/session/modules/camera-managed-extension.d.ts.map +1 -0
- package/dist/app/session/modules/camera-managed-extension.js +239 -0
- package/dist/app/session/modules/camera.d.ts +55 -1
- package/dist/app/session/modules/camera.d.ts.map +1 -1
- package/dist/app/session/modules/camera.js +72 -0
- package/dist/app/session/modules/index.d.ts +4 -0
- package/dist/app/session/modules/index.d.ts.map +1 -0
- package/dist/app/session/modules/index.js +19 -0
- package/dist/app/session/modules/location.d.ts +16 -0
- package/dist/app/session/modules/location.d.ts.map +1 -0
- package/dist/app/session/modules/location.js +55 -0
- package/dist/app/webview/index.d.ts.map +1 -1
- package/dist/app/webview/index.js +0 -1
- package/dist/examples/managed-rtmp-streaming-example.d.ts +2 -0
- package/dist/examples/managed-rtmp-streaming-example.d.ts.map +1 -0
- package/dist/examples/managed-rtmp-streaming-example.js +158 -0
- package/dist/examples/managed-rtmp-streaming-with-restream-example.d.ts +11 -0
- package/dist/examples/managed-rtmp-streaming-with-restream-example.d.ts.map +1 -0
- package/dist/examples/managed-rtmp-streaming-with-restream-example.js +124 -0
- package/dist/index.d.ts +4 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -1
- package/dist/types/enums.d.ts +3 -1
- package/dist/types/enums.d.ts.map +1 -1
- package/dist/types/enums.js +2 -0
- package/dist/types/index.d.ts +6 -6
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +7 -1
- package/dist/types/message-types.d.ts +16 -4
- package/dist/types/message-types.d.ts.map +1 -1
- package/dist/types/message-types.js +19 -3
- package/dist/types/messages/app-to-cloud.d.ts +76 -3
- package/dist/types/messages/app-to-cloud.d.ts.map +1 -1
- package/dist/types/messages/app-to-cloud.js +28 -0
- package/dist/types/messages/cloud-to-app.d.ts +45 -1
- package/dist/types/messages/cloud-to-app.d.ts.map +1 -1
- package/dist/types/messages/cloud-to-app.js +8 -0
- package/dist/types/messages/cloud-to-glasses.d.ts +38 -1
- package/dist/types/messages/cloud-to-glasses.d.ts.map +1 -1
- package/dist/types/messages/cloud-to-glasses.js +8 -0
- package/dist/types/messages/glasses-to-cloud.d.ts +21 -4
- package/dist/types/messages/glasses-to-cloud.d.ts.map +1 -1
- package/dist/types/messages/glasses-to-cloud.js +7 -3
- package/dist/types/models.d.ts +13 -0
- package/dist/types/models.d.ts.map +1 -1
- package/dist/types/models.js +9 -0
- package/dist/types/streams.d.ts +7 -1
- package/dist/types/streams.d.ts.map +1 -1
- package/dist/types/streams.js +6 -2
- package/package.json +1 -1
@@ -2,7 +2,7 @@
|
|
2
2
|
* ๐ฎ Event Manager Module
|
3
3
|
*/
|
4
4
|
import EventEmitter from 'events';
|
5
|
-
import { StreamType, ExtendedStreamType, AppSettings, WebSocketError, ButtonPress, HeadPosition, PhoneNotification, TranscriptionData, TranslationData, GlassesBatteryUpdate, PhoneBatteryUpdate, GlassesConnectionState, LocationUpdate, Vad,
|
5
|
+
import { StreamType, ExtendedStreamType, AppSettings, WebSocketError, ButtonPress, HeadPosition, PhoneNotification, TranscriptionData, TranslationData, GlassesBatteryUpdate, PhoneBatteryUpdate, GlassesConnectionState, LocationUpdate, Vad, AudioChunk, CalendarEvent, VpsCoordinates, CustomMessage, RtmpStreamStatus, PhotoTaken, ManagedStreamStatus, PhoneNotificationDismissed } from '../../types';
|
6
6
|
import { DashboardMode } from '../../types/dashboard';
|
7
7
|
import { PermissionErrorDetail } from '../../types/messages/cloud-to-app';
|
8
8
|
/** ๐ฏ Type-safe event handler function */
|
@@ -52,10 +52,11 @@ export interface StreamDataTypes {
|
|
52
52
|
[StreamType.LOCATION_UPDATE]: LocationUpdate;
|
53
53
|
[StreamType.CALENDAR_EVENT]: CalendarEvent;
|
54
54
|
[StreamType.VAD]: Vad;
|
55
|
-
[StreamType.
|
55
|
+
[StreamType.PHONE_NOTIFICATION_DISMISSED]: PhoneNotificationDismissed;
|
56
56
|
[StreamType.AUDIO_CHUNK]: AudioChunk;
|
57
57
|
[StreamType.VIDEO]: ArrayBuffer;
|
58
58
|
[StreamType.RTMP_STREAM_STATUS]: RtmpStreamStatus;
|
59
|
+
[StreamType.MANAGED_STREAM_STATUS]: ManagedStreamStatus;
|
59
60
|
[StreamType.VPS_COORDINATES]: VpsCoordinates;
|
60
61
|
[StreamType.PHOTO_TAKEN]: PhotoTaken;
|
61
62
|
[StreamType.OPEN_DASHBOARD]: never;
|
@@ -95,6 +96,7 @@ export declare class EventManager {
|
|
95
96
|
onHeadPosition(handler: Handler<HeadPosition>): () => void;
|
96
97
|
onButtonPress(handler: Handler<ButtonPress>): () => void;
|
97
98
|
onPhoneNotifications(handler: Handler<PhoneNotification>): () => void;
|
99
|
+
onPhoneNotificationDismissed(handler: Handler<PhoneNotificationDismissed>): () => void;
|
98
100
|
onGlassesBattery(handler: Handler<GlassesBatteryUpdate>): () => void;
|
99
101
|
onPhoneBattery(handler: Handler<PhoneBatteryUpdate>): () => void;
|
100
102
|
onVoiceActivity(handler: Handler<Vad>): () => void;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../../src/app/session/events.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,YAAY,MAAM,QAAQ,CAAC;AAClC,OAAO,EACL,UAAU,EACV,kBAAkB,EAClB,WAAW,EACX,cAAc,EAEd,WAAW,EACX,YAAY,EACZ,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,EACf,oBAAoB,EACpB,kBAAkB,EAClB,sBAAsB,EACtB,cAAc,EACd,GAAG,EACH,
|
1
|
+
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../../src/app/session/events.ts"],"names":[],"mappings":"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"}
|
@@ -71,6 +71,9 @@ class EventManager {
|
|
71
71
|
onPhoneNotifications(handler) {
|
72
72
|
return this.addHandler(types_1.StreamType.PHONE_NOTIFICATION, handler);
|
73
73
|
}
|
74
|
+
onPhoneNotificationDismissed(handler) {
|
75
|
+
return this.addHandler(types_1.StreamType.PHONE_NOTIFICATION_DISMISSED, handler);
|
76
|
+
}
|
74
77
|
onGlassesBattery(handler) {
|
75
78
|
return this.addHandler(types_1.StreamType.GLASSES_BATTERY_UPDATE, handler);
|
76
79
|
}
|
@@ -1,8 +1,10 @@
|
|
1
1
|
import { EventManager, EventData } from './events';
|
2
2
|
import { LayoutManager } from './layouts';
|
3
3
|
import { SettingsManager } from './settings';
|
4
|
+
import { LocationManager } from './modules/location';
|
4
5
|
import { CameraModule } from './modules/camera';
|
5
|
-
import {
|
6
|
+
import { AudioManager } from './modules/audio';
|
7
|
+
import { ExtendedStreamType, ButtonPress, HeadPosition, PhoneNotification, PhoneNotificationDismissed, TranscriptionData, TranslationData, AppSettings, AppSetting, AppConfig, VpsCoordinates, PhotoTaken, SubscriptionRequest, Capabilities } from '../../types';
|
6
8
|
import { DashboardAPI } from '../../types/dashboard';
|
7
9
|
import { Logger } from 'pino';
|
8
10
|
import { AppServer } from '../server';
|
@@ -71,6 +73,8 @@ export declare class AppSession {
|
|
71
73
|
private reconnectAttempts;
|
72
74
|
/** Active event subscriptions */
|
73
75
|
private subscriptions;
|
76
|
+
/** Map to store rate options for streams */
|
77
|
+
private streamRates;
|
74
78
|
/** Resource tracker for automatic cleanup */
|
75
79
|
private resources;
|
76
80
|
/** Internal settings storage - use public settings API instead */
|
@@ -95,8 +99,12 @@ export declare class AppSession {
|
|
95
99
|
readonly settings: SettingsManager;
|
96
100
|
/** ๐ Dashboard management interface */
|
97
101
|
readonly dashboard: DashboardAPI;
|
102
|
+
/** ๐ Location management interface */
|
103
|
+
readonly location: LocationManager;
|
98
104
|
/** ๐ท Camera interface for photos and streaming */
|
99
105
|
readonly camera: CameraModule;
|
106
|
+
/** ๐ Audio interface for audio playback */
|
107
|
+
readonly audio: AudioManager;
|
100
108
|
readonly appServer: AppServer;
|
101
109
|
readonly logger: Logger;
|
102
110
|
readonly userId: string;
|
@@ -159,6 +167,13 @@ export declare class AppSession {
|
|
159
167
|
* @deprecated Use session.events.onPhoneNotifications() instead
|
160
168
|
*/
|
161
169
|
onPhoneNotifications(handler: (data: PhoneNotification) => void): () => void;
|
170
|
+
/**
|
171
|
+
* ๐ฑ Listen for phone notification dismissed events
|
172
|
+
* @param handler - Function to handle notification dismissal data
|
173
|
+
* @returns Cleanup function to remove the handler
|
174
|
+
* @deprecated Use session.events.onPhoneNotificationDismissed() instead
|
175
|
+
*/
|
176
|
+
onPhoneNotificationDismissed(handler: (data: PhoneNotificationDismissed) => void): () => void;
|
162
177
|
/**
|
163
178
|
* ๐ก Listen for VPS coordinates updates
|
164
179
|
* @param handler - Function to handle VPS coordinates
|
@@ -175,14 +190,14 @@ export declare class AppSession {
|
|
175
190
|
onPhotoTaken(handler: (data: PhotoTaken) => void): () => void;
|
176
191
|
/**
|
177
192
|
* ๐ฌ Subscribe to a specific event stream
|
178
|
-
* @param
|
193
|
+
* @param sub - A string or a rich subscription object
|
179
194
|
*/
|
180
|
-
subscribe(
|
195
|
+
subscribe(sub: SubscriptionRequest): void;
|
181
196
|
/**
|
182
197
|
* ๐ญ Unsubscribe from a specific event stream
|
183
|
-
* @param
|
198
|
+
* @param sub - The subscription to remove
|
184
199
|
*/
|
185
|
-
unsubscribe(
|
200
|
+
unsubscribe(sub: SubscriptionRequest): void;
|
186
201
|
/**
|
187
202
|
* ๐ฏ Generic event listener (pub/sub style)
|
188
203
|
* @param event - Event name to listen for
|
@@ -416,4 +431,5 @@ export declare class TpaSession extends AppSession {
|
|
416
431
|
constructor(config: TpaSessionConfig);
|
417
432
|
}
|
418
433
|
export { CameraModule, PhotoRequestOptions, RtmpStreamOptions } from './modules/camera';
|
434
|
+
export { AudioManager, AudioPlayOptions, AudioPlayResult, SpeakOptions } from './modules/audio';
|
419
435
|
//# sourceMappingURL=index.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/app/session/index.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,YAAY,EAAE,SAAS,EAAmB,MAAM,UAAU,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,YAAY,EAA0C,MAAM,kBAAkB,CAAC;
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/app/session/index.ts"],"names":[],"mappings":"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"}
|
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
4
|
};
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
-
exports.CameraModule = exports.TpaSession = exports.AppSession = void 0;
|
6
|
+
exports.AudioManager = exports.CameraModule = exports.TpaSession = exports.AppSession = void 0;
|
7
7
|
/**
|
8
8
|
* ๐ฏ App Session Module
|
9
9
|
*
|
@@ -14,11 +14,14 @@ const ws_1 = require("ws");
|
|
14
14
|
const events_1 = require("./events");
|
15
15
|
const layouts_1 = require("./layouts");
|
16
16
|
const settings_1 = require("./settings");
|
17
|
+
const location_1 = require("./modules/location");
|
17
18
|
const camera_1 = require("./modules/camera");
|
19
|
+
const audio_1 = require("./modules/audio");
|
18
20
|
const resource_tracker_1 = require("../../utils/resource-tracker");
|
19
21
|
const types_1 = require("../../types");
|
20
22
|
const axios_1 = __importDefault(require("axios"));
|
21
23
|
const events_2 = __importDefault(require("events"));
|
24
|
+
const node_fetch_1 = __importDefault(require("node-fetch"));
|
22
25
|
// Import the cloud-to-app specific type guards
|
23
26
|
const cloud_to_app_1 = require("../../types/messages/cloud-to-app");
|
24
27
|
// List of event types that should never be subscribed to as streams
|
@@ -66,6 +69,8 @@ class AppSession {
|
|
66
69
|
this.reconnectAttempts = 0;
|
67
70
|
/** Active event subscriptions */
|
68
71
|
this.subscriptions = new Set();
|
72
|
+
/** Map to store rate options for streams */
|
73
|
+
this.streamRates = new Map();
|
69
74
|
/** Resource tracker for automatic cleanup */
|
70
75
|
this.resources = new resource_tracker_1.ResourceTracker();
|
71
76
|
/** Internal settings storage - use public settings API instead */
|
@@ -156,6 +161,10 @@ class AppSession {
|
|
156
161
|
// Initialize camera module with session reference
|
157
162
|
this.camera = new camera_1.CameraModule(this.config.packageName, this.sessionId || 'unknown-session-id', this.send.bind(this), this, // Pass session reference
|
158
163
|
this.logger.child({ module: 'camera' }));
|
164
|
+
// Initialize audio module with session reference
|
165
|
+
this.audio = new audio_1.AudioManager(this.config.packageName, this.sessionId || 'unknown-session-id', this.send.bind(this), this, // Pass session reference
|
166
|
+
this.logger.child({ module: 'audio' }));
|
167
|
+
this.location = new location_1.LocationManager(this, this.send.bind(this));
|
159
168
|
}
|
160
169
|
/**
|
161
170
|
* Get the current session ID
|
@@ -230,6 +239,15 @@ class AppSession {
|
|
230
239
|
onPhoneNotifications(handler) {
|
231
240
|
return this.events.onPhoneNotifications(handler);
|
232
241
|
}
|
242
|
+
/**
|
243
|
+
* ๐ฑ Listen for phone notification dismissed events
|
244
|
+
* @param handler - Function to handle notification dismissal data
|
245
|
+
* @returns Cleanup function to remove the handler
|
246
|
+
* @deprecated Use session.events.onPhoneNotificationDismissed() instead
|
247
|
+
*/
|
248
|
+
onPhoneNotificationDismissed(handler) {
|
249
|
+
return this.events.onPhoneNotificationDismissed(handler);
|
250
|
+
}
|
233
251
|
/**
|
234
252
|
* ๐ก Listen for VPS coordinates updates
|
235
253
|
* @param handler - Function to handle VPS coordinates
|
@@ -255,28 +273,49 @@ class AppSession {
|
|
255
273
|
// =====================================
|
256
274
|
/**
|
257
275
|
* ๐ฌ Subscribe to a specific event stream
|
258
|
-
* @param
|
276
|
+
* @param sub - A string or a rich subscription object
|
259
277
|
*/
|
260
|
-
subscribe(
|
278
|
+
subscribe(sub) {
|
279
|
+
let type;
|
280
|
+
let rate;
|
281
|
+
if (typeof sub === 'string') {
|
282
|
+
type = sub;
|
283
|
+
}
|
284
|
+
else {
|
285
|
+
// it's a LocationStreamRequest object
|
286
|
+
type = sub.stream;
|
287
|
+
rate = sub.rate;
|
288
|
+
}
|
261
289
|
if (APP_TO_APP_EVENT_TYPES.includes(type)) {
|
262
290
|
this.logger.warn(`[AppSession] Attempted to subscribe to App-to-App event type '${type}', which is not a valid stream. Use the event handler (e.g., onAppMessage) instead.`);
|
263
291
|
return;
|
264
292
|
}
|
265
293
|
this.subscriptions.add(type);
|
294
|
+
if (rate) {
|
295
|
+
this.streamRates.set(type, rate);
|
296
|
+
}
|
266
297
|
if (this.ws?.readyState === 1) {
|
267
298
|
this.updateSubscriptions();
|
268
299
|
}
|
269
300
|
}
|
270
301
|
/**
|
271
302
|
* ๐ญ Unsubscribe from a specific event stream
|
272
|
-
* @param
|
303
|
+
* @param sub - The subscription to remove
|
273
304
|
*/
|
274
|
-
unsubscribe(
|
305
|
+
unsubscribe(sub) {
|
306
|
+
let type;
|
307
|
+
if (typeof sub === 'string') {
|
308
|
+
type = sub;
|
309
|
+
}
|
310
|
+
else {
|
311
|
+
type = sub.stream;
|
312
|
+
}
|
275
313
|
if (APP_TO_APP_EVENT_TYPES.includes(type)) {
|
276
314
|
this.logger.warn(`[AppSession] Attempted to unsubscribe from App-to-App event type '${type}', which is not a valid stream.`);
|
277
315
|
return;
|
278
316
|
}
|
279
317
|
this.subscriptions.delete(type);
|
318
|
+
this.streamRates.delete(type); // also remove from our rate map
|
280
319
|
if (this.ws?.readyState === 1) {
|
281
320
|
this.updateSubscriptions();
|
282
321
|
}
|
@@ -306,6 +345,10 @@ class AppSession {
|
|
306
345
|
if (this.camera) {
|
307
346
|
this.camera.updateSessionId(sessionId);
|
308
347
|
}
|
348
|
+
// Update the sessionId in the audio module
|
349
|
+
if (this.audio) {
|
350
|
+
this.audio.updateSessionId(sessionId);
|
351
|
+
}
|
309
352
|
return new Promise((resolve, reject) => {
|
310
353
|
try {
|
311
354
|
// Clear previous resources if reconnecting
|
@@ -523,6 +566,10 @@ class AppSession {
|
|
523
566
|
if (this.camera) {
|
524
567
|
this.camera.cancelAllRequests();
|
525
568
|
}
|
569
|
+
// Clean up audio module
|
570
|
+
if (this.audio) {
|
571
|
+
this.audio.cancelAllRequests();
|
572
|
+
}
|
526
573
|
// Use the resource tracker to clean up everything
|
527
574
|
this.resources.dispose();
|
528
575
|
// Clean up additional resources not handled by the tracker
|
@@ -787,6 +834,14 @@ class AppSession {
|
|
787
834
|
// Update camera module's internal stream state
|
788
835
|
this.camera.updateStreamState(message);
|
789
836
|
}
|
837
|
+
else if ((0, cloud_to_app_1.isManagedStreamStatus)(message)) {
|
838
|
+
// Emit as a standard stream event if subscribed
|
839
|
+
if (this.subscriptions.has(types_1.StreamType.MANAGED_STREAM_STATUS)) {
|
840
|
+
this.events.emit(types_1.StreamType.MANAGED_STREAM_STATUS, message);
|
841
|
+
}
|
842
|
+
// Update camera module's managed stream state
|
843
|
+
this.camera.handleManagedStreamStatus(message);
|
844
|
+
}
|
790
845
|
else if ((0, types_1.isSettingsUpdate)(message)) {
|
791
846
|
// Store previous settings to check for changes
|
792
847
|
const prevSettings = [...this.settingsData];
|
@@ -917,6 +972,12 @@ class AppSession {
|
|
917
972
|
});
|
918
973
|
});
|
919
974
|
}
|
975
|
+
else if ((0, types_1.isAudioPlayResponse)(message)) {
|
976
|
+
// Delegate audio play response handling to the audio module
|
977
|
+
if (this.audio) {
|
978
|
+
this.audio.handleAudioPlayResponse(message);
|
979
|
+
}
|
980
|
+
}
|
920
981
|
else if ((0, cloud_to_app_1.isPhotoResponse)(message)) {
|
921
982
|
// Legacy photo response handling - now photos come directly via webhook
|
922
983
|
// This branch can be removed in the future as all photos now go through /photo-upload
|
@@ -924,19 +985,7 @@ class AppSession {
|
|
924
985
|
}
|
925
986
|
// Handle unrecognized message types gracefully
|
926
987
|
else {
|
927
|
-
|
928
|
-
messageType: message.type,
|
929
|
-
fullMessage: message,
|
930
|
-
messageKeys: Object.keys(message || {}),
|
931
|
-
messageStringified: JSON.stringify(message, null, 2)
|
932
|
-
});
|
933
|
-
// Log all message object details for debugging
|
934
|
-
this.logger.warn(`Unrecognized message type: ${message.type}. Full message details:`, {
|
935
|
-
messageType: message.type,
|
936
|
-
fullMessage: message,
|
937
|
-
messageKeys: Object.keys(message || {}),
|
938
|
-
messageStringified: JSON.stringify(message, null, 2)
|
939
|
-
});
|
988
|
+
this.logger.warn(`Unrecognized message type: ${message.type}`);
|
940
989
|
this.events.emit('error', new Error(`Unrecognized message type: ${message.type}`));
|
941
990
|
}
|
942
991
|
}
|
@@ -1073,10 +1122,18 @@ class AppSession {
|
|
1073
1122
|
*/
|
1074
1123
|
updateSubscriptions() {
|
1075
1124
|
this.logger.info(`[AppSession] updateSubscriptions: sending subscriptions to cloud:`, Array.from(this.subscriptions));
|
1125
|
+
// [MODIFIED] builds the array of SubscriptionRequest objects to send to the cloud
|
1126
|
+
const subscriptionPayload = Array.from(this.subscriptions).map(stream => {
|
1127
|
+
const rate = this.streamRates.get(stream);
|
1128
|
+
if (rate && stream === types_1.StreamType.LOCATION_STREAM) {
|
1129
|
+
return { stream: 'location_stream', rate: rate };
|
1130
|
+
}
|
1131
|
+
return stream;
|
1132
|
+
});
|
1076
1133
|
const message = {
|
1077
1134
|
type: types_1.AppToCloudMessageType.SUBSCRIPTION_UPDATE,
|
1078
1135
|
packageName: this.config.packageName,
|
1079
|
-
subscriptions:
|
1136
|
+
subscriptions: subscriptionPayload, // [MODIFIED]
|
1080
1137
|
sessionId: this.sessionId,
|
1081
1138
|
timestamp: new Date()
|
1082
1139
|
};
|
@@ -1232,7 +1289,7 @@ class AppSession {
|
|
1232
1289
|
userId: this.userId,
|
1233
1290
|
includeUserProfiles: includeProfiles
|
1234
1291
|
};
|
1235
|
-
const response = await
|
1292
|
+
const response = await (0, node_fetch_1.default)(url, {
|
1236
1293
|
method: 'POST',
|
1237
1294
|
headers: {
|
1238
1295
|
'Authorization': `Bearer ${appApiKey}`,
|
@@ -1450,6 +1507,8 @@ class TpaSession extends AppSession {
|
|
1450
1507
|
}
|
1451
1508
|
}
|
1452
1509
|
exports.TpaSession = TpaSession;
|
1453
|
-
// Export
|
1510
|
+
// Export module types for developers
|
1454
1511
|
var camera_2 = require("./modules/camera");
|
1455
1512
|
Object.defineProperty(exports, "CameraModule", { enumerable: true, get: function () { return camera_2.CameraModule; } });
|
1513
|
+
var audio_2 = require("./modules/audio");
|
1514
|
+
Object.defineProperty(exports, "AudioManager", { enumerable: true, get: function () { return audio_2.AudioManager; } });
|
@@ -0,0 +1,190 @@
|
|
1
|
+
/**
|
2
|
+
* ๐ Audio Module
|
3
|
+
*
|
4
|
+
* Audio functionality for App Sessions.
|
5
|
+
* Handles audio playback on connected glasses.
|
6
|
+
*/
|
7
|
+
import { AudioPlayResponse } from '../../../types';
|
8
|
+
import { Logger } from 'pino';
|
9
|
+
/**
|
10
|
+
* Options for audio playback
|
11
|
+
*/
|
12
|
+
export interface AudioPlayOptions {
|
13
|
+
/** URL to audio file for download and play */
|
14
|
+
audioUrl: string;
|
15
|
+
/** Volume level 0.0-1.0, defaults to 1.0 */
|
16
|
+
volume?: number;
|
17
|
+
/** Whether to stop other audio playback, defaults to true */
|
18
|
+
stopOtherAudio?: boolean;
|
19
|
+
}
|
20
|
+
/**
|
21
|
+
* Options for text-to-speech
|
22
|
+
*/
|
23
|
+
export interface SpeakOptions {
|
24
|
+
/** Voice ID to use (optional, defaults to server's ELEVENLABS_DEFAULT_VOICE_ID) */
|
25
|
+
voice_id?: string;
|
26
|
+
/** Model ID to use (optional, defaults to eleven_flash_v2_5) */
|
27
|
+
model_id?: string;
|
28
|
+
/** Voice settings object (optional) */
|
29
|
+
voice_settings?: {
|
30
|
+
stability?: number;
|
31
|
+
similarity_boost?: number;
|
32
|
+
style?: number;
|
33
|
+
use_speaker_boost?: boolean;
|
34
|
+
speed?: number;
|
35
|
+
};
|
36
|
+
/** Volume level 0.0-1.0, defaults to 1.0 */
|
37
|
+
volume?: number;
|
38
|
+
}
|
39
|
+
/**
|
40
|
+
* Result of audio playback attempt
|
41
|
+
*/
|
42
|
+
export interface AudioPlayResult {
|
43
|
+
/** Whether the audio playback was successful */
|
44
|
+
success: boolean;
|
45
|
+
/** Error message if playback failed */
|
46
|
+
error?: string;
|
47
|
+
/** Duration of the audio file in seconds (if available) */
|
48
|
+
duration?: number;
|
49
|
+
}
|
50
|
+
/**
|
51
|
+
* ๐ Audio Module Implementation
|
52
|
+
*
|
53
|
+
* Audio management for App Sessions.
|
54
|
+
* Provides methods for:
|
55
|
+
* - ๐ต Playing audio on glasses
|
56
|
+
* - โน๏ธ Stopping audio playback
|
57
|
+
* - ๐ Monitoring audio request status
|
58
|
+
* - ๐งน Cleanup and cancellation
|
59
|
+
*
|
60
|
+
* @example
|
61
|
+
* ```typescript
|
62
|
+
* // Play audio
|
63
|
+
* const result = await session.audio.playAudio({
|
64
|
+
* audioUrl: 'https://example.com/sound.mp3',
|
65
|
+
* volume: 0.8
|
66
|
+
* });
|
67
|
+
*
|
68
|
+
* // Stop all audio
|
69
|
+
* session.audio.stopAudio();
|
70
|
+
* ```
|
71
|
+
*/
|
72
|
+
export declare class AudioManager {
|
73
|
+
private send;
|
74
|
+
private packageName;
|
75
|
+
private sessionId;
|
76
|
+
private session?;
|
77
|
+
private logger;
|
78
|
+
/** Map to store pending audio play request promises */
|
79
|
+
private pendingAudioRequests;
|
80
|
+
/**
|
81
|
+
* Create a new AudioManager
|
82
|
+
*
|
83
|
+
* @param packageName - The App package name
|
84
|
+
* @param sessionId - The current session ID
|
85
|
+
* @param send - Function to send messages to the cloud
|
86
|
+
* @param session - Reference to the parent AppSession (optional)
|
87
|
+
* @param logger - Logger instance for debugging
|
88
|
+
*/
|
89
|
+
constructor(packageName: string, sessionId: string, send: (message: any) => void, session?: any, logger?: Logger);
|
90
|
+
/**
|
91
|
+
* ๐ Play audio on the connected glasses
|
92
|
+
* @param options - Audio playback configuration
|
93
|
+
* @returns Promise that resolves with playback result
|
94
|
+
*
|
95
|
+
* @example
|
96
|
+
* ```typescript
|
97
|
+
* // Play audio from URL
|
98
|
+
* const result = await session.audio.playAudio({
|
99
|
+
* audioUrl: 'https://example.com/sound.mp3',
|
100
|
+
* volume: 0.8
|
101
|
+
* });
|
102
|
+
* ```
|
103
|
+
*/
|
104
|
+
playAudio(options: AudioPlayOptions): Promise<AudioPlayResult>;
|
105
|
+
/**
|
106
|
+
* ๐ Stop audio playback on the connected glasses
|
107
|
+
*
|
108
|
+
* @example
|
109
|
+
* ```typescript
|
110
|
+
* // Stop all currently playing audio
|
111
|
+
* session.audio.stopAudio();
|
112
|
+
* ```
|
113
|
+
*/
|
114
|
+
stopAudio(): void;
|
115
|
+
/**
|
116
|
+
* ๐ฃ๏ธ Convert text to speech and play it on the connected glasses
|
117
|
+
* @param text - Text to convert to speech (required)
|
118
|
+
* @param options - Text-to-speech configuration (optional)
|
119
|
+
* @returns Promise that resolves with playback result
|
120
|
+
*
|
121
|
+
* @example
|
122
|
+
* ```typescript
|
123
|
+
* // Basic text-to-speech
|
124
|
+
* const result = await session.audio.speak('Hello, world!');
|
125
|
+
*
|
126
|
+
* // With custom voice settings
|
127
|
+
* const result = await session.audio.speak('Hello, world!', {
|
128
|
+
* voice_id: 'your_voice_id',
|
129
|
+
* voice_settings: {
|
130
|
+
* stability: 0.5,
|
131
|
+
* speed: 1.2
|
132
|
+
* },
|
133
|
+
* volume: 0.8
|
134
|
+
* });
|
135
|
+
* ```
|
136
|
+
*/
|
137
|
+
speak(text: string, options?: SpeakOptions): Promise<AudioPlayResult>;
|
138
|
+
/**
|
139
|
+
* ๐ฅ Handle audio play response from cloud
|
140
|
+
*
|
141
|
+
* This method is called internally when an audio play response is received.
|
142
|
+
* It resolves the corresponding pending promise with the response data.
|
143
|
+
*
|
144
|
+
* @param response - The audio play response received
|
145
|
+
* @internal This method is used internally by AppSession
|
146
|
+
*/
|
147
|
+
handleAudioPlayResponse(response: AudioPlayResponse): void;
|
148
|
+
/**
|
149
|
+
* ๐ Check if there are pending audio requests
|
150
|
+
* @param requestId - Optional specific request ID to check
|
151
|
+
* @returns True if there are pending requests (or specific request exists)
|
152
|
+
*/
|
153
|
+
hasPendingRequest(requestId?: string): boolean;
|
154
|
+
/**
|
155
|
+
* ๐ Get the number of pending audio requests
|
156
|
+
* @returns Number of pending requests
|
157
|
+
*/
|
158
|
+
getPendingRequestCount(): number;
|
159
|
+
/**
|
160
|
+
* ๐ Get all pending request IDs
|
161
|
+
* @returns Array of pending request IDs
|
162
|
+
*/
|
163
|
+
getPendingRequestIds(): string[];
|
164
|
+
/**
|
165
|
+
* โ Cancel a specific audio request
|
166
|
+
* @param requestId - The request ID to cancel
|
167
|
+
* @returns True if the request was found and cancelled
|
168
|
+
*/
|
169
|
+
cancelAudioRequest(requestId: string): boolean;
|
170
|
+
/**
|
171
|
+
* ๐งน Cancel all pending audio requests
|
172
|
+
* @returns Number of requests that were cancelled
|
173
|
+
*/
|
174
|
+
cancelAllAudioRequests(): number;
|
175
|
+
/**
|
176
|
+
* ๐ Update the session ID when reconnecting
|
177
|
+
* @param newSessionId - The new session ID
|
178
|
+
* @internal Used by AppSession during reconnection
|
179
|
+
*/
|
180
|
+
updateSessionId(newSessionId: string): void;
|
181
|
+
/**
|
182
|
+
* ๐งน Cancel all pending requests (cleanup)
|
183
|
+
* @returns Object with count of cancelled requests
|
184
|
+
* @internal Used by AppSession during cleanup
|
185
|
+
*/
|
186
|
+
cancelAllRequests(): {
|
187
|
+
audioRequests: number;
|
188
|
+
};
|
189
|
+
}
|
190
|
+
//# sourceMappingURL=audio.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"audio.d.ts","sourceRoot":"","sources":["../../../../src/app/session/modules/audio.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAEL,iBAAiB,EAGlB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAE9B;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,8CAA8C;IAC9C,QAAQ,EAAE,MAAM,CAAC;IACjB,4CAA4C;IAC5C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,6DAA6D;IAC7D,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,mFAAmF;IACnF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gEAAgE;IAChE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,uCAAuC;IACvC,cAAc,CAAC,EAAE;QACf,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,iBAAiB,CAAC,EAAE,OAAO,CAAC;QAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,4CAA4C;IAC5C,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,gDAAgD;IAChD,OAAO,EAAE,OAAO,CAAC;IACjB,uCAAuC;IACvC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,IAAI,CAAyB;IACrC,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,OAAO,CAAC,CAAM;IACtB,OAAO,CAAC,MAAM,CAAS;IAEvB,uDAAuD;IACvD,OAAO,CAAC,oBAAoB,CAGvB;IAEL;;;;;;;;OAQG;gBACS,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,IAAI,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,MAAM;IAYhH;;;;;;;;;;;;;OAaG;IACG,SAAS,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC;IA0DpE;;;;;;;;OAQG;IACH,SAAS,IAAI,IAAI;IAoBjB;;;;;;;;;;;;;;;;;;;;;OAqBG;IACG,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,eAAe,CAAC;IA4C/E;;;;;;;;OAQG;IACH,uBAAuB,CAAC,QAAQ,EAAE,iBAAiB,GAAG,IAAI;IA4B1D;;;;OAIG;IACH,iBAAiB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO;IAO9C;;;OAGG;IACH,sBAAsB,IAAI,MAAM;IAIhC;;;OAGG;IACH,oBAAoB,IAAI,MAAM,EAAE;IAIhC;;;;OAIG;IACH,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAW9C;;;OAGG;IACH,sBAAsB,IAAI,MAAM;IAmBhC;;;;OAIG;IACH,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI;IAK3C;;;;OAIG;IACH,iBAAiB,IAAI;QAAE,aAAa,EAAE,MAAM,CAAA;KAAE;CAI/C"}
|