@mentra/sdk 2.1.31-beta.6 → 3.0.0-alpha.3
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/README.md +54 -9
- package/dist/MiniAppServer.d.ts +58 -0
- package/dist/MiniAppServer.d.ts.map +1 -0
- package/dist/app/server/index.d.ts +143 -88
- package/dist/app/server/index.d.ts.map +1 -1
- package/dist/app/session/events.d.ts +20 -3
- package/dist/app/session/events.d.ts.map +1 -1
- package/dist/app/session/index.d.ts +56 -3
- package/dist/app/session/index.d.ts.map +1 -1
- package/dist/app/session/modules/audio-output-stream.d.ts +108 -0
- package/dist/app/session/modules/audio-output-stream.d.ts.map +1 -0
- package/dist/app/session/modules/audio.d.ts +36 -1
- package/dist/app/session/modules/audio.d.ts.map +1 -1
- package/dist/app/session/modules/camera-managed-extension.d.ts +37 -33
- package/dist/app/session/modules/camera-managed-extension.d.ts.map +1 -1
- package/dist/app/session/modules/camera.d.ts +108 -50
- package/dist/app/session/modules/camera.d.ts.map +1 -1
- package/dist/app/session/modules/index.d.ts +4 -3
- package/dist/app/session/modules/index.d.ts.map +1 -1
- package/dist/app/session/modules/led.d.ts.map +1 -1
- package/dist/app/session/modules/location.d.ts.map +1 -1
- package/dist/app/session/settings.d.ts +5 -1
- package/dist/app/session/settings.d.ts.map +1 -1
- package/dist/app/webview/index.d.ts +67 -9
- package/dist/app/webview/index.d.ts.map +1 -1
- package/dist/constants/log-messages/updates.d.ts +32 -9
- package/dist/constants/log-messages/updates.d.ts.map +1 -1
- package/dist/constants/log-messages/warning.d.ts +12 -0
- package/dist/constants/log-messages/warning.d.ts.map +1 -1
- package/dist/display-utils.d.ts +3 -1
- package/dist/display-utils.d.ts.map +1 -1
- package/dist/display-utils.js +443 -26
- package/dist/display-utils.js.map +10 -6
- package/dist/index.d.ts +22 -14
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8877 -4236
- package/dist/index.js.map +63 -31
- package/dist/internal/_SessionManager.d.ts +76 -0
- package/dist/internal/_SessionManager.d.ts.map +1 -0
- package/dist/logging/clean-transport.d.ts +50 -0
- package/dist/logging/clean-transport.d.ts.map +1 -0
- package/dist/logging/errors.d.ts +90 -0
- package/dist/logging/errors.d.ts.map +1 -0
- package/dist/logging/logger.d.ts +72 -1
- package/dist/logging/logger.d.ts.map +1 -1
- package/dist/logging/telemetry-transport.d.ts +51 -0
- package/dist/logging/telemetry-transport.d.ts.map +1 -0
- package/dist/session/DataStreamRouter.d.ts +219 -0
- package/dist/session/DataStreamRouter.d.ts.map +1 -0
- package/dist/session/MentraSession.d.ts +102 -0
- package/dist/session/MentraSession.d.ts.map +1 -0
- package/dist/session/index.d.ts +2 -0
- package/dist/session/index.d.ts.map +1 -0
- package/dist/session/internal/_ConnectionManager.d.ts +43 -0
- package/dist/session/internal/_ConnectionManager.d.ts.map +1 -0
- package/dist/session/internal/_MessageRouter.d.ts +11 -0
- package/dist/session/internal/_MessageRouter.d.ts.map +1 -0
- package/dist/session/internal/_SubscriptionManager.d.ts +32 -0
- package/dist/session/internal/_SubscriptionManager.d.ts.map +1 -0
- package/dist/session/internal/_V2AudioStreamShim.d.ts +12 -0
- package/dist/session/internal/_V2AudioStreamShim.d.ts.map +1 -0
- package/dist/session/internal/_V2CameraShim.d.ts +51 -0
- package/dist/session/internal/_V2CameraShim.d.ts.map +1 -0
- package/dist/session/internal/_V2EventManagerShim.d.ts +51 -0
- package/dist/session/internal/_V2EventManagerShim.d.ts.map +1 -0
- package/dist/session/internal/_V2SessionShim.d.ts +165 -0
- package/dist/session/internal/_V2SessionShim.d.ts.map +1 -0
- package/dist/session/internal/_V2SettingsShim.d.ts +17 -0
- package/dist/session/internal/_V2SettingsShim.d.ts.map +1 -0
- package/dist/session/managers/CameraManager.d.ts +197 -0
- package/dist/session/managers/CameraManager.d.ts.map +1 -0
- package/dist/session/managers/DashboardManager.d.ts +131 -0
- package/dist/session/managers/DashboardManager.d.ts.map +1 -0
- package/dist/session/managers/DeviceManager.d.ts +332 -0
- package/dist/session/managers/DeviceManager.d.ts.map +1 -0
- package/dist/session/managers/DisplayManager.d.ts +171 -0
- package/dist/session/managers/DisplayManager.d.ts.map +1 -0
- package/dist/session/managers/LedManager.d.ts +131 -0
- package/dist/session/managers/LedManager.d.ts.map +1 -0
- package/dist/session/managers/LocationManager.d.ts +255 -0
- package/dist/session/managers/LocationManager.d.ts.map +1 -0
- package/dist/session/managers/MicManager.d.ts +252 -0
- package/dist/session/managers/MicManager.d.ts.map +1 -0
- package/dist/session/managers/PermissionsManager.d.ts +182 -0
- package/dist/session/managers/PermissionsManager.d.ts.map +1 -0
- package/dist/session/managers/PhoneManager.d.ts +295 -0
- package/dist/session/managers/PhoneManager.d.ts.map +1 -0
- package/dist/session/managers/SpeakerManager.d.ts +285 -0
- package/dist/session/managers/SpeakerManager.d.ts.map +1 -0
- package/dist/session/managers/StorageManager.d.ts +289 -0
- package/dist/session/managers/StorageManager.d.ts.map +1 -0
- package/dist/session/managers/TimeUtils.d.ts +175 -0
- package/dist/session/managers/TimeUtils.d.ts.map +1 -0
- package/dist/session/managers/TranscriptionManager.d.ts +195 -0
- package/dist/session/managers/TranscriptionManager.d.ts.map +1 -0
- package/dist/session/managers/TranslationManager.d.ts +189 -0
- package/dist/session/managers/TranslationManager.d.ts.map +1 -0
- package/dist/session.d.ts +41 -0
- package/dist/session.d.ts.map +1 -0
- package/dist/session.js +4168 -0
- package/dist/session.js.map +44 -0
- package/dist/transport/Transport.d.ts +119 -0
- package/dist/transport/Transport.d.ts.map +1 -0
- package/dist/transport/WebSocketTransport.d.ts +73 -0
- package/dist/transport/WebSocketTransport.d.ts.map +1 -0
- package/dist/types/index.d.ts +31 -5
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/message-types.d.ts +25 -9
- package/dist/types/message-types.d.ts.map +1 -1
- package/dist/types/messages/app-to-cloud.d.ts +113 -16
- package/dist/types/messages/app-to-cloud.d.ts.map +1 -1
- package/dist/types/messages/cloud-to-app.d.ts +50 -4
- package/dist/types/messages/cloud-to-app.d.ts.map +1 -1
- package/dist/types/messages/cloud-to-glasses.d.ts +43 -14
- package/dist/types/messages/cloud-to-glasses.d.ts.map +1 -1
- package/dist/types/messages/glasses-to-cloud.d.ts +5 -5
- package/dist/types/messages/glasses-to-cloud.d.ts.map +1 -1
- package/dist/types/models.d.ts +17 -0
- package/dist/types/models.d.ts.map +1 -1
- package/dist/types/rtmp-stream.d.ts +4 -4
- package/dist/types/rtmp-stream.d.ts.map +1 -1
- package/dist/types/streams.d.ts +6 -1
- package/dist/types/streams.d.ts.map +1 -1
- package/dist/types/webhooks.d.ts +11 -0
- package/dist/types/webhooks.d.ts.map +1 -1
- package/dist/utils/error-utils.d.ts +139 -0
- package/dist/utils/error-utils.d.ts.map +1 -0
- package/dist/utils/permissions-utils.d.ts +30 -7
- package/dist/utils/permissions-utils.d.ts.map +1 -1
- package/node_modules/@mentra/types/dist/applet.d.ts +5 -1
- package/node_modules/@mentra/types/dist/applet.d.ts.map +1 -1
- package/node_modules/@mentra/types/dist/capabilities/even-realities-g2.d.ts +12 -0
- package/node_modules/@mentra/types/dist/capabilities/even-realities-g2.d.ts.map +1 -0
- package/node_modules/@mentra/types/dist/capabilities/even-realities-g2.js +61 -0
- package/node_modules/@mentra/types/dist/capabilities/mentra-display.d.ts +12 -0
- package/node_modules/@mentra/types/dist/capabilities/mentra-display.d.ts.map +1 -0
- package/node_modules/@mentra/types/dist/capabilities/mentra-display.js +54 -0
- package/node_modules/@mentra/types/dist/capabilities/none.d.ts +13 -0
- package/node_modules/@mentra/types/dist/capabilities/none.d.ts.map +1 -0
- package/node_modules/@mentra/types/dist/capabilities/none.js +67 -0
- package/node_modules/@mentra/types/dist/enums.d.ts +8 -2
- package/node_modules/@mentra/types/dist/enums.d.ts.map +1 -1
- package/node_modules/@mentra/types/dist/enums.js +9 -2
- package/node_modules/@mentra/types/dist/hardware.d.ts +3 -1
- package/node_modules/@mentra/types/dist/hardware.d.ts.map +1 -1
- package/node_modules/@mentra/types/dist/hardware.js +12 -2
- package/node_modules/@mentra/types/dist/index.d.ts +1 -1
- package/node_modules/@mentra/types/dist/index.d.ts.map +1 -1
- package/node_modules/@mentra/types/dist/index.js +2 -1
- package/node_modules/@mentra/types/package.json +2 -2
- package/package.json +24 -12
- package/dist/examples/managed-rtmp-streaming-example.d.ts +0 -2
- package/dist/examples/managed-rtmp-streaming-example.d.ts.map +0 -1
- package/dist/examples/managed-rtmp-streaming-with-restream-example.d.ts +0 -11
- package/dist/examples/managed-rtmp-streaming-with-restream-example.d.ts.map +0 -1
- package/dist/examples/rtmp-streaming-example.d.ts +0 -2
- package/dist/examples/rtmp-streaming-example.d.ts.map +0 -1
- package/node_modules/@mentra/types/src/applet.ts +0 -51
- package/node_modules/@mentra/types/src/capabilities/even-realities-g1.ts +0 -63
- package/node_modules/@mentra/types/src/capabilities/mentra-live.ts +0 -103
- package/node_modules/@mentra/types/src/capabilities/simulated-glasses.ts +0 -76
- package/node_modules/@mentra/types/src/capabilities/vuzix-z100.ts +0 -60
- package/node_modules/@mentra/types/src/cli.ts +0 -169
- package/node_modules/@mentra/types/src/device.ts +0 -43
- package/node_modules/@mentra/types/src/enums.ts +0 -36
- package/node_modules/@mentra/types/src/hardware.ts +0 -172
- package/node_modules/@mentra/types/src/index.ts +0 -64
- package/node_modules/@mentra/types/tsconfig.json +0 -22
- package/node_modules/@mentra/types/tsconfig.tsbuildinfo +0 -1
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 🎯 App Session Module
|
|
3
|
+
*
|
|
4
|
+
* Manages an active Third Party App session with MentraOS Cloud.
|
|
5
|
+
* Handles real-time communication, event subscriptions, and display management.
|
|
6
|
+
*/
|
|
1
7
|
import { EventManager, EventData } from "./events";
|
|
2
8
|
import { LayoutManager } from "./layouts";
|
|
3
9
|
import { SettingsManager } from "./settings";
|
|
@@ -125,6 +131,20 @@ export declare class AppSession {
|
|
|
125
131
|
private glassesConnectionState;
|
|
126
132
|
/** Dedicated emitter for App-to-App events */
|
|
127
133
|
private appEvents;
|
|
134
|
+
/**
|
|
135
|
+
* Pending handlers waiting for AUDIO_STREAM_READY responses from the cloud.
|
|
136
|
+
* Key: streamId, Value: handler function that receives the raw message.
|
|
137
|
+
* Used by AudioOutputStream.waitForReady() to resolve the relay URL.
|
|
138
|
+
* @internal
|
|
139
|
+
*/
|
|
140
|
+
_audioStreamReadyHandlers: Map<string, (msg: any) => void>;
|
|
141
|
+
/** Per-session ring buffer of recent log entries for incident telemetry uploads */
|
|
142
|
+
private telemetryBuffer;
|
|
143
|
+
/** Interval that sends app-level pings to keep the app-ws connection alive.
|
|
144
|
+
* Bidirectional traffic (ping → cloud, pong ← cloud) prevents load balancer
|
|
145
|
+
* idle timeouts from killing the WebSocket. See: cloud/issues/046-sdk-app-ws-liveness */
|
|
146
|
+
private pingInterval;
|
|
147
|
+
private static readonly PING_INTERVAL_MS;
|
|
128
148
|
constructor(config: AppSessionConfig);
|
|
129
149
|
/**
|
|
130
150
|
* Get the current session ID
|
|
@@ -359,6 +379,24 @@ export declare class AppSession {
|
|
|
359
379
|
* 📨 Handle incoming messages from cloud
|
|
360
380
|
*/
|
|
361
381
|
private handleMessage;
|
|
382
|
+
/**
|
|
383
|
+
* 🏓 Start the app-level ping interval.
|
|
384
|
+
* Clears any existing interval first so reconnects don't double-up.
|
|
385
|
+
*/
|
|
386
|
+
private startPingInterval;
|
|
387
|
+
/**
|
|
388
|
+
* 🏓 Stop the app-level ping interval.
|
|
389
|
+
*/
|
|
390
|
+
private stopPingInterval;
|
|
391
|
+
/**
|
|
392
|
+
* 📤 Handle a REQUEST_TELEMETRY message from cloud.
|
|
393
|
+
* Collects recent log entries from the AppServer's telemetry buffer and
|
|
394
|
+
* POSTs them back to the cloud's incident endpoint so the support team
|
|
395
|
+
* can diagnose production issues.
|
|
396
|
+
*
|
|
397
|
+
* @param request - The REQUEST_TELEMETRY message from cloud
|
|
398
|
+
*/
|
|
399
|
+
private handleTelemetryRequest;
|
|
362
400
|
/**
|
|
363
401
|
* 🧪 Validate incoming message structure
|
|
364
402
|
* @param message - Message to validate
|
|
@@ -394,6 +432,18 @@ export declare class AppSession {
|
|
|
394
432
|
* Always uses current WebSocket connection
|
|
395
433
|
*/
|
|
396
434
|
sendMessage(message: AppToCloudMessage): void;
|
|
435
|
+
/**
|
|
436
|
+
* 📤 Send raw binary data over the WebSocket.
|
|
437
|
+
* Used by AudioOutputStream to push audio frames to the cloud relay.
|
|
438
|
+
*
|
|
439
|
+
* Binary frame format for audio streaming:
|
|
440
|
+
* [36 bytes: streamId UUID as ASCII] [N bytes: audio data]
|
|
441
|
+
*
|
|
442
|
+
* @param data - Binary data to send
|
|
443
|
+
* @throws {Error} If WebSocket is not connected
|
|
444
|
+
* @internal
|
|
445
|
+
*/
|
|
446
|
+
sendBinary(data: Uint8Array | Buffer): void;
|
|
397
447
|
/**
|
|
398
448
|
* 📤 Send message to cloud with validation and error handling
|
|
399
449
|
* @throws {Error} If WebSocket is not connected
|
|
@@ -512,8 +562,11 @@ export type TpaSessionConfig = AppSessionConfig;
|
|
|
512
562
|
export declare class TpaSession extends AppSession {
|
|
513
563
|
constructor(config: TpaSessionConfig);
|
|
514
564
|
}
|
|
515
|
-
export { CameraModule
|
|
516
|
-
export { LedModule
|
|
517
|
-
export { AudioManager
|
|
565
|
+
export { CameraModule } from "./modules/camera";
|
|
566
|
+
export { LedModule } from "./modules/led";
|
|
567
|
+
export { AudioManager } from "./modules/audio";
|
|
518
568
|
export { SimpleStorage } from "./modules/simple-storage";
|
|
569
|
+
export type { PhotoRequestOptions, StreamOptions } from "./modules/camera";
|
|
570
|
+
export type { LedControlOptions } from "./modules/led";
|
|
571
|
+
export type { AudioPlayOptions, AudioPlayResult, SpeakOptions } from "./modules/audio";
|
|
519
572
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/app/session/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/app/session/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AudioOutputStream — streams audio from an SDK app to the phone via the cloud relay.
|
|
3
|
+
*
|
|
4
|
+
* The developer writes MP3 bytes (or PCM that the SDK encodes to MP3) into this
|
|
5
|
+
* stream. Each write sends a WS binary frame to the cloud:
|
|
6
|
+
*
|
|
7
|
+
* [36 bytes: streamId UUID as ASCII] [N bytes: audio data]
|
|
8
|
+
*
|
|
9
|
+
* The cloud pipes those bytes into an HTTP chunked response that the phone's
|
|
10
|
+
* ExoPlayer/AVPlayer plays like internet radio. Zero transcoding on the cloud.
|
|
11
|
+
*
|
|
12
|
+
* Lifecycle:
|
|
13
|
+
* const output = await session.audio.createOutputStream({ format: "mp3" })
|
|
14
|
+
* output.write(mp3Chunk) // as many times as needed
|
|
15
|
+
* output.end() // graceful close — phone finishes buffered audio
|
|
16
|
+
* output.flush() // interrupt — discard everything, silence immediately
|
|
17
|
+
*
|
|
18
|
+
* See: cloud/issues/041-sdk-audio-output-streaming/
|
|
19
|
+
*/
|
|
20
|
+
import { EventEmitter } from "events";
|
|
21
|
+
import type { Logger } from "pino";
|
|
22
|
+
export interface AudioOutputStreamOptions {
|
|
23
|
+
/**
|
|
24
|
+
* Format of the audio being written.
|
|
25
|
+
*
|
|
26
|
+
* - "mp3": You're writing MP3 bytes directly (ElevenLabs, OpenAI TTS, Cartesia, etc.)
|
|
27
|
+
* The SDK passes them straight through — zero encoding overhead.
|
|
28
|
+
*
|
|
29
|
+
* - "pcm16": You're writing raw 16-bit signed PCM samples (Gemini Live, OpenAI Realtime).
|
|
30
|
+
* The SDK will encode to MP3 before sending. Requires sampleRate and channels.
|
|
31
|
+
*/
|
|
32
|
+
format?: "mp3" | "pcm16";
|
|
33
|
+
/** PCM sample rate in Hz (required when format is "pcm16"). Default: 24000 */
|
|
34
|
+
sampleRate?: number;
|
|
35
|
+
/** Number of audio channels (required when format is "pcm16"). Default: 1 (mono) */
|
|
36
|
+
channels?: number;
|
|
37
|
+
/** MP3 bitrate in kbps for PCM encoding. Default: 128 */
|
|
38
|
+
bitrate?: number;
|
|
39
|
+
/**
|
|
40
|
+
* Volume level 0.0–1.0 for playback on the phone. Default: 1.0
|
|
41
|
+
*/
|
|
42
|
+
volume?: number;
|
|
43
|
+
/**
|
|
44
|
+
* Track ID for playback (0=speaker, 1=app_audio, 2=tts). Default: 1
|
|
45
|
+
*/
|
|
46
|
+
trackId?: number;
|
|
47
|
+
/**
|
|
48
|
+
* Whether starting this stream should stop other audio. Default: true
|
|
49
|
+
*/
|
|
50
|
+
stopOtherAudio?: boolean;
|
|
51
|
+
}
|
|
52
|
+
export type AudioOutputStreamState = "created" | "streaming" | "ending" | "ended" | "error";
|
|
53
|
+
export declare class AudioOutputStream extends EventEmitter {
|
|
54
|
+
readonly streamId: string;
|
|
55
|
+
streamUrl: string | null;
|
|
56
|
+
private _state;
|
|
57
|
+
private session;
|
|
58
|
+
private logger;
|
|
59
|
+
private options;
|
|
60
|
+
private encoder;
|
|
61
|
+
private streamIdBytes;
|
|
62
|
+
constructor(streamId: string, session: any, logger: Logger, opts?: AudioOutputStreamOptions);
|
|
63
|
+
/** Current state of the stream */
|
|
64
|
+
get state(): AudioOutputStreamState;
|
|
65
|
+
/**
|
|
66
|
+
* Initialize the stream — sends AUDIO_STREAM_START to the cloud and waits
|
|
67
|
+
* for AUDIO_STREAM_READY with the relay URL. Then tells the phone to play it.
|
|
68
|
+
*
|
|
69
|
+
* Called internally by `session.audio.createOutputStream()`.
|
|
70
|
+
* Do NOT call this directly — use `createOutputStream()` instead.
|
|
71
|
+
*
|
|
72
|
+
* @internal
|
|
73
|
+
*/
|
|
74
|
+
open(): Promise<void>;
|
|
75
|
+
/**
|
|
76
|
+
* Write audio data to the stream.
|
|
77
|
+
*
|
|
78
|
+
* - If format is "mp3", the bytes are sent directly to the cloud.
|
|
79
|
+
* - If format is "pcm16", the bytes are encoded to MP3 first.
|
|
80
|
+
*
|
|
81
|
+
* @param data - Audio data as Buffer, Uint8Array, or ArrayBuffer
|
|
82
|
+
*/
|
|
83
|
+
write(data: Buffer | Uint8Array | ArrayBuffer): void;
|
|
84
|
+
/**
|
|
85
|
+
* End the stream gracefully.
|
|
86
|
+
*
|
|
87
|
+
* If using PCM encoding, flushes any remaining encoder buffer first.
|
|
88
|
+
* The phone will finish playing any buffered audio, then stop.
|
|
89
|
+
*/
|
|
90
|
+
end(): Promise<void>;
|
|
91
|
+
/**
|
|
92
|
+
* Flush/interrupt — discard all buffered audio and stop playback immediately.
|
|
93
|
+
*
|
|
94
|
+
* Use this when the user starts talking and you want to silence the AI response.
|
|
95
|
+
*/
|
|
96
|
+
flush(): Promise<void>;
|
|
97
|
+
/**
|
|
98
|
+
* Send a binary frame over the WebSocket.
|
|
99
|
+
* Frame format: [36 bytes streamId] [N bytes audio data]
|
|
100
|
+
*/
|
|
101
|
+
private sendBinaryFrame;
|
|
102
|
+
/**
|
|
103
|
+
* Wait for the cloud to respond with AUDIO_STREAM_READY.
|
|
104
|
+
* Returns the relay URL.
|
|
105
|
+
*/
|
|
106
|
+
private waitForReady;
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=audio-output-stream.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audio-output-stream.d.ts","sourceRoot":"","sources":["../../../../src/app/session/modules/audio-output-stream.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAC,YAAY,EAAC,MAAM,QAAQ,CAAA;AACnC,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,MAAM,CAAA;AAKhC,MAAM,WAAW,wBAAwB;IACvC;;;;;;;;OAQG;IACH,MAAM,CAAC,EAAE,KAAK,GAAG,OAAO,CAAA;IAExB,8EAA8E;IAC9E,UAAU,CAAC,EAAE,MAAM,CAAA;IAEnB,oFAAoF;IACpF,QAAQ,CAAC,EAAE,MAAM,CAAA;IAEjB,yDAAyD;IACzD,OAAO,CAAC,EAAE,MAAM,CAAA;IAEhB;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;IAEf;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;IAEhB;;OAEG;IACH,cAAc,CAAC,EAAE,OAAO,CAAA;CACzB;AAED,MAAM,MAAM,sBAAsB,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,OAAO,GAAG,OAAO,CAAA;AAY3F,qBAAa,iBAAkB,SAAQ,YAAY;IACjD,SAAgB,QAAQ,EAAE,MAAM,CAAA;IACzB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAO;IAEtC,OAAO,CAAC,MAAM,CAAoC;IAClD,OAAO,CAAC,OAAO,CAAK;IACpB,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,OAAO,CAKd;IACD,OAAO,CAAC,OAAO,CAA0B;IACzC,OAAO,CAAC,aAAa,CAAY;gBAErB,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,GAAE,wBAA6B;IAoB/F,kCAAkC;IAClC,IAAI,KAAK,IAAI,sBAAsB,CAElC;IAED;;;;;;;;OAQG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IA4C3B;;;;;;;OAOG;IACH,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,WAAW,GAAG,IAAI;IAyBpD;;;;;OAKG;IACG,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;IA4B1B;;;;OAIG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAkC5B;;;OAGG;IACH,OAAO,CAAC,eAAe;IAcvB;;;OAGG;IACH,OAAO,CAAC,YAAY;CA6BrB"}
|
|
@@ -2,10 +2,11 @@
|
|
|
2
2
|
* 🔊 Audio Module
|
|
3
3
|
*
|
|
4
4
|
* Audio functionality for App Sessions.
|
|
5
|
-
* Handles audio playback on connected glasses.
|
|
5
|
+
* Handles audio playback and audio output streaming on connected glasses.
|
|
6
6
|
*/
|
|
7
7
|
import { AudioPlayResponse } from "../../../types";
|
|
8
8
|
import { Logger } from "pino";
|
|
9
|
+
import { AudioOutputStream, AudioOutputStreamOptions } from "./audio-output-stream";
|
|
9
10
|
/**
|
|
10
11
|
* Options for audio playback
|
|
11
12
|
*/
|
|
@@ -94,6 +95,8 @@ export declare class AudioManager {
|
|
|
94
95
|
private logger;
|
|
95
96
|
/** Map to store pending audio play request promises */
|
|
96
97
|
private pendingAudioRequests;
|
|
98
|
+
/** Current active output stream (one at a time) */
|
|
99
|
+
private activeOutputStream;
|
|
97
100
|
/**
|
|
98
101
|
* Create a new AudioManager
|
|
99
102
|
*
|
|
@@ -201,6 +204,38 @@ export declare class AudioManager {
|
|
|
201
204
|
* @returns Number of requests that were cancelled
|
|
202
205
|
*/
|
|
203
206
|
cancelAllAudioRequests(): number;
|
|
207
|
+
/**
|
|
208
|
+
* Create a real-time audio output stream.
|
|
209
|
+
*
|
|
210
|
+
* This opens a streaming relay on the cloud and tells the phone to play it.
|
|
211
|
+
* You write audio chunks to the returned stream, and they play on the glasses
|
|
212
|
+
* speaker in real-time — like internet radio.
|
|
213
|
+
*
|
|
214
|
+
* **MP3 pass-through** (most common — ElevenLabs, Cartesia, OpenAI TTS, Azure):
|
|
215
|
+
* ```typescript
|
|
216
|
+
* const output = await session.audio.createOutputStream({ format: "mp3" })
|
|
217
|
+
* elevenlabs.on("chunk", (mp3) => output.write(mp3))
|
|
218
|
+
* elevenlabs.on("end", () => output.end())
|
|
219
|
+
* ```
|
|
220
|
+
*
|
|
221
|
+
* **PCM encoding** (Gemini Live, OpenAI Realtime — requires `lamejs`):
|
|
222
|
+
* ```typescript
|
|
223
|
+
* const output = await session.audio.createOutputStream({
|
|
224
|
+
* format: "pcm16",
|
|
225
|
+
* sampleRate: 24000,
|
|
226
|
+
* channels: 1,
|
|
227
|
+
* })
|
|
228
|
+
* realtimeApi.on("audio", (pcm) => output.write(pcm))
|
|
229
|
+
* ```
|
|
230
|
+
*
|
|
231
|
+
* @param options - Stream configuration
|
|
232
|
+
* @returns The AudioOutputStream (already connected and playing)
|
|
233
|
+
*/
|
|
234
|
+
createOutputStream(options?: AudioOutputStreamOptions): Promise<AudioOutputStream>;
|
|
235
|
+
/**
|
|
236
|
+
* Get the currently active output stream (if any).
|
|
237
|
+
*/
|
|
238
|
+
getActiveOutputStream(): AudioOutputStream | null;
|
|
204
239
|
/**
|
|
205
240
|
* 🔄 Update the session ID when reconnecting
|
|
206
241
|
* @param newSessionId - The new session ID
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audio.d.ts","sourceRoot":"","sources":["../../../../src/app/session/modules/audio.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAmB,iBAAiB,EAA0C,MAAM,gBAAgB,CAAA;AAC3G,OAAO,EAAC,MAAM,EAAC,MAAM,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"audio.d.ts","sourceRoot":"","sources":["../../../../src/app/session/modules/audio.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,31 +8,35 @@ import { ManagedStreamStatus, StreamStatusCheckResponse, RestreamDestination } f
|
|
|
8
8
|
import { VideoConfig, AudioConfig, StreamConfig } from "../../../types/rtmp-stream";
|
|
9
9
|
import { Logger } from "pino";
|
|
10
10
|
/**
|
|
11
|
-
* Configuration options for a managed stream
|
|
11
|
+
* Configuration options for a managed stream.
|
|
12
|
+
* By default, managed streams use WebRTC (WHIP ingest → WHEP playback) for low latency.
|
|
13
|
+
* If restreamDestinations are provided, the stream automatically falls back to
|
|
14
|
+
* SRT ingest with HLS/DASH playback (required for RTMP fan-out).
|
|
12
15
|
*/
|
|
13
16
|
export interface ManagedStreamOptions {
|
|
14
|
-
/** Stream quality preset */
|
|
15
|
-
quality?: "720p" | "1080p";
|
|
16
|
-
/** Enable WebRTC for ultra-low latency viewing */
|
|
17
|
-
enableWebRTC?: boolean;
|
|
18
17
|
/** Optional video configuration settings */
|
|
19
18
|
video?: VideoConfig;
|
|
20
19
|
/** Optional audio configuration settings */
|
|
21
20
|
audio?: AudioConfig;
|
|
22
21
|
/** Optional stream configuration settings */
|
|
23
22
|
stream?: StreamConfig;
|
|
24
|
-
/** Optional RTMP destinations to re-stream to (YouTube, Twitch, etc)
|
|
23
|
+
/** Optional RTMP destinations to re-stream to (YouTube, Twitch, etc).
|
|
24
|
+
* When present, stream uses SRT ingest + HLS/DASH playback instead of WebRTC. */
|
|
25
25
|
restreamDestinations?: RestreamDestination[];
|
|
26
|
+
/** Controls stream start/stop sounds. Defaults to true if omitted. */
|
|
27
|
+
sound?: boolean;
|
|
26
28
|
}
|
|
27
29
|
/**
|
|
28
|
-
* Result returned when starting a managed stream
|
|
30
|
+
* Result returned when starting a managed stream.
|
|
31
|
+
* In WebRTC mode (default): use webrtcUrl for low-latency playback.
|
|
32
|
+
* In SRT mode (when restreamDestinations provided): use hlsUrl/dashUrl for playback.
|
|
29
33
|
*/
|
|
30
34
|
export interface ManagedStreamResult {
|
|
31
|
-
/** HLS URL for viewing the stream */
|
|
35
|
+
/** HLS URL for viewing the stream (functional in SRT mode only) */
|
|
32
36
|
hlsUrl: string;
|
|
33
|
-
/** DASH URL for viewing the stream */
|
|
37
|
+
/** DASH URL for viewing the stream (functional in SRT mode only) */
|
|
34
38
|
dashUrl: string;
|
|
35
|
-
/** WebRTC URL
|
|
39
|
+
/** WebRTC (WHEP) URL for low-latency playback (functional in WebRTC mode, the default) */
|
|
36
40
|
webrtcUrl?: string;
|
|
37
41
|
/** Cloudflare Stream player/preview URL for embedding */
|
|
38
42
|
previewUrl?: string;
|
|
@@ -45,27 +49,27 @@ export interface ManagedStreamResult {
|
|
|
45
49
|
* 📹 Managed Streaming Extension for Camera Module
|
|
46
50
|
*
|
|
47
51
|
* Provides managed streaming capabilities where the cloud handles
|
|
48
|
-
*
|
|
52
|
+
* ingest and returns playback URLs.
|
|
49
53
|
*
|
|
50
54
|
* @example
|
|
51
55
|
* ```typescript
|
|
52
|
-
* // Start a
|
|
53
|
-
* const urls = await session.camera.
|
|
54
|
-
*
|
|
55
|
-
*
|
|
56
|
+
* // Start a livestream (WebRTC by default for low latency)
|
|
57
|
+
* const urls = await session.camera.startLivestream();
|
|
58
|
+
* console.log('WebRTC URL:', urls.webrtcUrl);
|
|
59
|
+
*
|
|
60
|
+
* // Or with restream destinations (uses SRT + HLS/DASH instead)
|
|
61
|
+
* const urls = await session.camera.startLivestream({
|
|
62
|
+
* restreamDestinations: [{ url: 'rtmp://...', name: 'YouTube' }]
|
|
56
63
|
* });
|
|
57
64
|
* console.log('HLS URL:', urls.hlsUrl);
|
|
58
|
-
* console.log('DASH URL:', urls.dashUrl);
|
|
59
|
-
* console.log('Player URL:', urls.previewUrl);
|
|
60
|
-
* console.log('Thumbnail:', urls.thumbnailUrl);
|
|
61
65
|
*
|
|
62
|
-
* // Monitor
|
|
63
|
-
* session.camera.
|
|
64
|
-
* console.log('
|
|
66
|
+
* // Monitor livestream status
|
|
67
|
+
* session.camera.onLivestreamStatus((status) => {
|
|
68
|
+
* console.log('Livestream status:', status.status);
|
|
65
69
|
* });
|
|
66
70
|
*
|
|
67
|
-
* // Stop
|
|
68
|
-
* await session.camera.
|
|
71
|
+
* // Stop livestream
|
|
72
|
+
* await session.camera.stopLivestream();
|
|
69
73
|
* ```
|
|
70
74
|
*/
|
|
71
75
|
export declare class CameraManagedExtension {
|
|
@@ -91,18 +95,18 @@ export declare class CameraManagedExtension {
|
|
|
91
95
|
*
|
|
92
96
|
* @example
|
|
93
97
|
* ```typescript
|
|
94
|
-
*
|
|
95
|
-
*
|
|
96
|
-
*
|
|
97
|
-
* video: { fps: 30 },
|
|
98
|
+
* // Default: WebRTC for low latency
|
|
99
|
+
* const urls = await session.camera.startLivestream({
|
|
100
|
+
* video: { frameRate: 30 },
|
|
98
101
|
* audio: { sampleRate: 48000 }
|
|
99
102
|
* });
|
|
103
|
+
* console.log('WebRTC URL:', urls.webrtcUrl);
|
|
100
104
|
*
|
|
101
|
-
* //
|
|
105
|
+
* // With restream: falls back to SRT + HLS/DASH
|
|
106
|
+
* const urls = await session.camera.startLivestream({
|
|
107
|
+
* restreamDestinations: [{ url: 'rtmp://...', name: 'YouTube' }]
|
|
108
|
+
* });
|
|
102
109
|
* console.log('HLS URL:', urls.hlsUrl);
|
|
103
|
-
* console.log('DASH URL:', urls.dashUrl);
|
|
104
|
-
* console.log('Player URL:', urls.previewUrl); // Embeddable player
|
|
105
|
-
* console.log('Thumbnail:', urls.thumbnailUrl);
|
|
106
110
|
* ```
|
|
107
111
|
*/
|
|
108
112
|
startManagedStream(options?: ManagedStreamOptions): Promise<ManagedStreamResult>;
|
|
@@ -144,7 +148,7 @@ export declare class CameraManagedExtension {
|
|
|
144
148
|
previewUrl?: string;
|
|
145
149
|
thumbnailUrl?: string;
|
|
146
150
|
activeViewers?: number;
|
|
147
|
-
|
|
151
|
+
streamUrl?: string;
|
|
148
152
|
requestingAppId?: string;
|
|
149
153
|
};
|
|
150
154
|
}>;
|
|
@@ -174,7 +178,7 @@ export declare class CameraManagedExtension {
|
|
|
174
178
|
*
|
|
175
179
|
* @example
|
|
176
180
|
* ```typescript
|
|
177
|
-
* const cleanup = session.camera.
|
|
181
|
+
* const cleanup = session.camera.onLivestreamStatus((status) => {
|
|
178
182
|
* console.log('Status:', status.status);
|
|
179
183
|
* if (status.status === 'active') {
|
|
180
184
|
* console.log('Stream is live!');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"camera-managed-extension.d.ts","sourceRoot":"","sources":["../../../../src/app/session/modules/camera-managed-extension.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAGL,mBAAmB,EAEnB,yBAAyB,EAGzB,mBAAmB,EACpB,MAAM,gBAAgB,
|
|
1
|
+
{"version":3,"file":"camera-managed-extension.d.ts","sourceRoot":"","sources":["../../../../src/app/session/modules/camera-managed-extension.ts"],"names":[],"mappings":"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"}
|