@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
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 🎤 MicManager — Microphone Input Control
|
|
3
|
+
*
|
|
4
|
+
* v3 manager that handles audio input from the user's glasses microphone.
|
|
5
|
+
* Provides subscriptions for raw PCM audio chunks and voice activity
|
|
6
|
+
* detection (VAD) events.
|
|
7
|
+
*
|
|
8
|
+
* Audio chunks arrive as binary WebSocket frames — MentraSession calls
|
|
9
|
+
* `handleBinaryAudio()` when it receives a binary frame that isn't
|
|
10
|
+
* destined for an output stream. VAD events arrive as JSON DATA_STREAM
|
|
11
|
+
* messages routed through the DataStreamRouter.
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```ts
|
|
15
|
+
* const mic = new MicManager(deps);
|
|
16
|
+
*
|
|
17
|
+
* // Listen for raw audio
|
|
18
|
+
* const stopChunks = mic.onChunk((chunk) => {
|
|
19
|
+
* console.log(`Got ${chunk.data.byteLength} bytes at ${chunk.sampleRate}Hz`);
|
|
20
|
+
* });
|
|
21
|
+
*
|
|
22
|
+
* // Listen for voice activity
|
|
23
|
+
* const stopVad = mic.onVoiceActivity((vad) => {
|
|
24
|
+
* console.log(vad.isSpeaking ? "Speech started" : "Speech ended");
|
|
25
|
+
* });
|
|
26
|
+
*
|
|
27
|
+
* // Check state
|
|
28
|
+
* console.log("Speaking:", mic.isSpeaking);
|
|
29
|
+
* console.log("Active:", mic.isActive);
|
|
30
|
+
*
|
|
31
|
+
* // Cleanup
|
|
32
|
+
* mic.stop();
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
/**
|
|
36
|
+
* Shared dependency bag injected by MentraSession.
|
|
37
|
+
* Keeps managers decoupled from the session implementation.
|
|
38
|
+
*/
|
|
39
|
+
export interface ManagerDeps {
|
|
40
|
+
/** DataStreamRouter — register for DATA_STREAM messages by streamType key. */
|
|
41
|
+
router: {
|
|
42
|
+
on(key: string, handler: (streamType: string, data: any, message: any) => void): () => void;
|
|
43
|
+
};
|
|
44
|
+
/** MessageHandlerRegistry — register for top-level message types. */
|
|
45
|
+
messageHandlers: {
|
|
46
|
+
register(type: string, handler: (msg: any) => void): () => void;
|
|
47
|
+
};
|
|
48
|
+
addSubscription: (stream: string) => void;
|
|
49
|
+
removeSubscription: (stream: string) => void;
|
|
50
|
+
sendMessage: (message: any) => void;
|
|
51
|
+
sendBinary: (data: ArrayBuffer | Uint8Array) => void;
|
|
52
|
+
logger: {
|
|
53
|
+
debug(...args: any[]): void;
|
|
54
|
+
info(...args: any[]): void;
|
|
55
|
+
warn(...args: any[]): void;
|
|
56
|
+
error(...args: any[]): void;
|
|
57
|
+
};
|
|
58
|
+
getPackageName: () => string;
|
|
59
|
+
getSessionId: () => string;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* A chunk of raw PCM audio data from the glasses microphone.
|
|
63
|
+
*
|
|
64
|
+
* Audio is always 16 kHz mono 16-bit signed PCM — the native format
|
|
65
|
+
* of the glasses microphone hardware.
|
|
66
|
+
*/
|
|
67
|
+
export interface AudioChunk {
|
|
68
|
+
/** Raw PCM audio data */
|
|
69
|
+
data: ArrayBuffer;
|
|
70
|
+
/** Sample rate in Hz (always 16000) */
|
|
71
|
+
sampleRate: number;
|
|
72
|
+
/** Number of audio channels (always 1 — mono) */
|
|
73
|
+
channels: number;
|
|
74
|
+
/** Timestamp when this chunk was received (ms since epoch) */
|
|
75
|
+
timestamp: number;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Voice activity detection event.
|
|
79
|
+
*
|
|
80
|
+
* Indicates whether the user is currently speaking. The glasses run
|
|
81
|
+
* on-device VAD and send status updates as the speech state changes.
|
|
82
|
+
*/
|
|
83
|
+
export interface VadEvent {
|
|
84
|
+
/** Whether speech is currently detected */
|
|
85
|
+
isSpeaking: boolean;
|
|
86
|
+
/** Timestamp when this event was received (ms since epoch) */
|
|
87
|
+
timestamp: number;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Manages microphone input from the user's glasses.
|
|
91
|
+
*
|
|
92
|
+
* Handles two types of incoming data:
|
|
93
|
+
*
|
|
94
|
+
* 1. **Raw PCM audio chunks** — arrive as binary WebSocket frames.
|
|
95
|
+
* MentraSession calls `handleBinaryAudio()` for each binary frame
|
|
96
|
+
* that isn't part of an output stream. Subscribers receive wrapped
|
|
97
|
+
* `AudioChunk` objects with metadata.
|
|
98
|
+
*
|
|
99
|
+
* 2. **Voice Activity Detection (VAD)** — arrives as JSON DATA_STREAM
|
|
100
|
+
* messages with `streamType: "VAD"`. The glasses send `status: true`
|
|
101
|
+
* when speech starts and `status: false` when it stops. The raw
|
|
102
|
+
* `status` field may be a boolean or string ("true"/"false") — this
|
|
103
|
+
* manager normalizes it to a clean boolean.
|
|
104
|
+
*
|
|
105
|
+
* Subscription lifecycle:
|
|
106
|
+
* - `onChunk()` adds an "audio_chunk" subscription when the first handler
|
|
107
|
+
* is registered, and removes it when the last handler unsubscribes.
|
|
108
|
+
* - `onVoiceActivity()` does the same for the "VAD" subscription.
|
|
109
|
+
* - `stop()` removes all handlers and unsubscribes from both streams.
|
|
110
|
+
*/
|
|
111
|
+
export declare class MicManager {
|
|
112
|
+
private readonly deps;
|
|
113
|
+
/** Registered handlers for audio chunk data */
|
|
114
|
+
private chunkHandlers;
|
|
115
|
+
/** Registered handlers for VAD events */
|
|
116
|
+
private vadHandlers;
|
|
117
|
+
/** Cleanup function for the VAD router subscription */
|
|
118
|
+
private vadRouterCleanup;
|
|
119
|
+
/** Cached latest VAD state — true when speech is detected */
|
|
120
|
+
private _isSpeaking;
|
|
121
|
+
/** Cached permission state */
|
|
122
|
+
private _hasPermission;
|
|
123
|
+
constructor(deps: ManagerDeps);
|
|
124
|
+
/**
|
|
125
|
+
* Whether speech is currently detected.
|
|
126
|
+
*
|
|
127
|
+
* This value is cached from the most recent VAD event. It is only
|
|
128
|
+
* updated while there is at least one `onVoiceActivity` subscriber.
|
|
129
|
+
*
|
|
130
|
+
* @example
|
|
131
|
+
* ```ts
|
|
132
|
+
* if (mic.isSpeaking) {
|
|
133
|
+
* // User is talking — maybe pause TTS
|
|
134
|
+
* }
|
|
135
|
+
* ```
|
|
136
|
+
*/
|
|
137
|
+
get isSpeaking(): boolean;
|
|
138
|
+
/**
|
|
139
|
+
* Whether this app has an active `onChunk` subscription.
|
|
140
|
+
*
|
|
141
|
+
* Returns true when at least one audio chunk handler is registered,
|
|
142
|
+
* meaning the microphone stream is subscribed and binary audio data
|
|
143
|
+
* is being delivered.
|
|
144
|
+
*/
|
|
145
|
+
get isActive(): boolean;
|
|
146
|
+
/**
|
|
147
|
+
* Whether the app has microphone permission.
|
|
148
|
+
*
|
|
149
|
+
* Updated when the cloud sends permission state changes. Apps that
|
|
150
|
+
* require microphone access should declare `MICROPHONE` in their
|
|
151
|
+
* hardware requirements.
|
|
152
|
+
*/
|
|
153
|
+
get hasPermission(): boolean;
|
|
154
|
+
/**
|
|
155
|
+
* 🎤 Subscribe to raw PCM audio chunks from the microphone.
|
|
156
|
+
*
|
|
157
|
+
* Audio is always 16 kHz mono 16-bit signed PCM. The first subscriber
|
|
158
|
+
* triggers an "audio_chunk" subscription to the cloud; the subscription
|
|
159
|
+
* is removed when the last handler unsubscribes.
|
|
160
|
+
*
|
|
161
|
+
* @param handler - Called with each audio chunk as it arrives
|
|
162
|
+
* @returns Cleanup function that removes this handler
|
|
163
|
+
*
|
|
164
|
+
* @example
|
|
165
|
+
* ```ts
|
|
166
|
+
* const stop = mic.onChunk((chunk) => {
|
|
167
|
+
* // chunk.data is an ArrayBuffer of PCM16 samples
|
|
168
|
+
* const samples = new Int16Array(chunk.data);
|
|
169
|
+
* processAudio(samples);
|
|
170
|
+
* });
|
|
171
|
+
*
|
|
172
|
+
* // Later: unsubscribe
|
|
173
|
+
* stop();
|
|
174
|
+
* ```
|
|
175
|
+
*/
|
|
176
|
+
onChunk(handler: (chunk: AudioChunk) => void): () => void;
|
|
177
|
+
/**
|
|
178
|
+
* 🗣️ Subscribe to voice activity detection events.
|
|
179
|
+
*
|
|
180
|
+
* VAD events indicate when the user starts or stops speaking. The
|
|
181
|
+
* `status` field from the glasses may be a boolean or a string
|
|
182
|
+
* ("true"/"false") — this manager normalizes it to a clean boolean.
|
|
183
|
+
*
|
|
184
|
+
* The first subscriber triggers a "VAD" subscription to the cloud and
|
|
185
|
+
* registers a handler on the DataStreamRouter. The subscription is
|
|
186
|
+
* removed when the last handler unsubscribes.
|
|
187
|
+
*
|
|
188
|
+
* @param handler - Called with each VAD event
|
|
189
|
+
* @returns Cleanup function that removes this handler
|
|
190
|
+
*
|
|
191
|
+
* @example
|
|
192
|
+
* ```ts
|
|
193
|
+
* const stop = mic.onVoiceActivity((vad) => {
|
|
194
|
+
* if (vad.isSpeaking) {
|
|
195
|
+
* console.log("User started speaking");
|
|
196
|
+
* } else {
|
|
197
|
+
* console.log("User stopped speaking");
|
|
198
|
+
* }
|
|
199
|
+
* });
|
|
200
|
+
*
|
|
201
|
+
* // Later: unsubscribe
|
|
202
|
+
* stop();
|
|
203
|
+
* ```
|
|
204
|
+
*/
|
|
205
|
+
onVoiceActivity(handler: (vad: VadEvent) => void): () => void;
|
|
206
|
+
/**
|
|
207
|
+
* 🛑 Stop all microphone subscriptions.
|
|
208
|
+
*
|
|
209
|
+
* Removes all registered chunk and VAD handlers, unsubscribes from
|
|
210
|
+
* both streams, and resets internal state. After calling `stop()`,
|
|
211
|
+
* `isActive` will be false and no more callbacks will fire.
|
|
212
|
+
*
|
|
213
|
+
* @example
|
|
214
|
+
* ```ts
|
|
215
|
+
* mic.onChunk(handleChunk);
|
|
216
|
+
* mic.onVoiceActivity(handleVad);
|
|
217
|
+
*
|
|
218
|
+
* // Later: clean up everything
|
|
219
|
+
* mic.stop();
|
|
220
|
+
* ```
|
|
221
|
+
*/
|
|
222
|
+
stop(): void;
|
|
223
|
+
/**
|
|
224
|
+
* Handle an incoming binary audio frame from the WebSocket transport.
|
|
225
|
+
*
|
|
226
|
+
* MentraSession calls this method when it receives a binary WebSocket
|
|
227
|
+
* frame that is identified as microphone audio (not part of an output
|
|
228
|
+
* stream). The raw bytes are wrapped with metadata and dispatched to
|
|
229
|
+
* all registered `onChunk` handlers.
|
|
230
|
+
*
|
|
231
|
+
* @param data - Raw binary audio data (PCM16, 16 kHz, mono)
|
|
232
|
+
*
|
|
233
|
+
* @remarks
|
|
234
|
+
* This is a public method so MentraSession can call it, but it is not
|
|
235
|
+
* intended to be called by app developers.
|
|
236
|
+
*
|
|
237
|
+
* @internal
|
|
238
|
+
*/
|
|
239
|
+
handleBinaryAudio(data: ArrayBuffer): void;
|
|
240
|
+
/**
|
|
241
|
+
* Process an incoming VAD DATA_STREAM message.
|
|
242
|
+
*
|
|
243
|
+
* The glasses send VAD with `status` that can be:
|
|
244
|
+
* - `true` / `false` (boolean)
|
|
245
|
+
* - `"true"` / `"false"` (string)
|
|
246
|
+
*
|
|
247
|
+
* This method normalizes the value to a clean boolean and caches it
|
|
248
|
+
* for the `isSpeaking` getter.
|
|
249
|
+
*/
|
|
250
|
+
private handleVadMessage;
|
|
251
|
+
}
|
|
252
|
+
//# sourceMappingURL=MicManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MicManager.d.ts","sourceRoot":"","sources":["../../../src/session/managers/MicManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PermissionsManager — App Permission State
|
|
3
|
+
*
|
|
4
|
+
* Tracks which permissions the current app has been granted based on
|
|
5
|
+
* the app's manifest/registration on the developer console. Permissions
|
|
6
|
+
* are populated when the session connects (from CONNECTION_ACK settings)
|
|
7
|
+
* and can be queried synchronously by other managers.
|
|
8
|
+
*
|
|
9
|
+
* This manager is read-only from the app's perspective — permissions are
|
|
10
|
+
* controlled by the platform, not the app.
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```ts
|
|
14
|
+
* // Check a single permission
|
|
15
|
+
* if (permissions.has("camera")) {
|
|
16
|
+
* // Safe to use camera APIs
|
|
17
|
+
* }
|
|
18
|
+
*
|
|
19
|
+
* // Get all permissions
|
|
20
|
+
* const all = permissions.getAll();
|
|
21
|
+
* console.log("Notifications allowed:", all.notifications);
|
|
22
|
+
*
|
|
23
|
+
* // React to permission changes
|
|
24
|
+
* const cleanup = permissions.onUpdate((perms) => {
|
|
25
|
+
* console.log("Permissions updated:", perms);
|
|
26
|
+
* });
|
|
27
|
+
* ```
|
|
28
|
+
*
|
|
29
|
+
* @module
|
|
30
|
+
*/
|
|
31
|
+
/**
|
|
32
|
+
* Permission types supported by the MentraOS platform.
|
|
33
|
+
*
|
|
34
|
+
* These correspond to capabilities and data streams that require
|
|
35
|
+
* explicit opt-in via the developer console app manifest.
|
|
36
|
+
*/
|
|
37
|
+
export type PermissionType = "location" | "microphone" | "camera" | "notifications" | "calendar";
|
|
38
|
+
/**
|
|
39
|
+
* Complete permission record mapping every permission type to its grant status.
|
|
40
|
+
*/
|
|
41
|
+
export type PermissionRecord = Record<PermissionType, boolean>;
|
|
42
|
+
/**
|
|
43
|
+
* Dependencies injected by MentraSession.
|
|
44
|
+
*/
|
|
45
|
+
export interface PermissionsManagerDeps {
|
|
46
|
+
/** Logger instance scoped to the session. */
|
|
47
|
+
logger: {
|
|
48
|
+
debug(...args: any[]): void;
|
|
49
|
+
info(...args: any[]): void;
|
|
50
|
+
warn(...args: any[]): void;
|
|
51
|
+
error(...args: any[]): void;
|
|
52
|
+
};
|
|
53
|
+
/** MessageHandlerRegistry — register for top-level message types. */
|
|
54
|
+
messageHandlers: {
|
|
55
|
+
register(type: string, handler: (msg: any) => void): () => void;
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Manages the permission state for the current app session.
|
|
60
|
+
*
|
|
61
|
+
* Permissions are populated from the CONNECTION_ACK payload when the
|
|
62
|
+
* session is established. Other managers (DeviceManager, PhoneManager)
|
|
63
|
+
* query this manager to gate access to protected streams.
|
|
64
|
+
*
|
|
65
|
+
* The manager emits updates whenever the permission set changes, allowing
|
|
66
|
+
* UI or logic to react to permission grants/revocations in real time.
|
|
67
|
+
*/
|
|
68
|
+
export declare class PermissionsManager {
|
|
69
|
+
/** Current permission state. */
|
|
70
|
+
private permissions;
|
|
71
|
+
/** Registered update listeners. */
|
|
72
|
+
private listeners;
|
|
73
|
+
/** Logger instance. */
|
|
74
|
+
private logger;
|
|
75
|
+
/** Message handler registry for cloud message subscriptions. */
|
|
76
|
+
private messageHandlers;
|
|
77
|
+
constructor(deps: PermissionsManagerDeps);
|
|
78
|
+
/**
|
|
79
|
+
* Check whether the app has been granted a specific permission.
|
|
80
|
+
*
|
|
81
|
+
* @param permission - The permission type to check
|
|
82
|
+
* @returns `true` if the permission is granted, `false` otherwise
|
|
83
|
+
*
|
|
84
|
+
* @example
|
|
85
|
+
* ```ts
|
|
86
|
+
* if (permissions.has("microphone")) {
|
|
87
|
+
* session.events.onTranscription(handler);
|
|
88
|
+
* }
|
|
89
|
+
* ```
|
|
90
|
+
*/
|
|
91
|
+
has(permission: PermissionType): boolean;
|
|
92
|
+
/**
|
|
93
|
+
* Get a snapshot of all permissions as a record.
|
|
94
|
+
*
|
|
95
|
+
* The returned object is a copy — mutations do not affect internal state.
|
|
96
|
+
*
|
|
97
|
+
* @returns A record mapping every {@link PermissionType} to its grant status
|
|
98
|
+
*
|
|
99
|
+
* @example
|
|
100
|
+
* ```ts
|
|
101
|
+
* const perms = permissions.getAll();
|
|
102
|
+
* console.log("Camera:", perms.camera);
|
|
103
|
+
* console.log("Location:", perms.location);
|
|
104
|
+
* ```
|
|
105
|
+
*/
|
|
106
|
+
getAll(): PermissionRecord;
|
|
107
|
+
/**
|
|
108
|
+
* Subscribe to permission updates.
|
|
109
|
+
*
|
|
110
|
+
* The handler is called whenever the permission set changes (e.g., on
|
|
111
|
+
* CONNECTION_ACK or a mid-session settings update). It receives a
|
|
112
|
+
* snapshot copy of the full permission record.
|
|
113
|
+
*
|
|
114
|
+
* @param handler - Callback invoked with the updated permission record
|
|
115
|
+
* @returns Cleanup function that removes the listener
|
|
116
|
+
*
|
|
117
|
+
* @example
|
|
118
|
+
* ```ts
|
|
119
|
+
* const cleanup = permissions.onUpdate((perms) => {
|
|
120
|
+
* if (!perms.camera) {
|
|
121
|
+
* console.warn("Camera permission revoked");
|
|
122
|
+
* }
|
|
123
|
+
* });
|
|
124
|
+
*
|
|
125
|
+
* // Later: stop listening
|
|
126
|
+
* cleanup();
|
|
127
|
+
* ```
|
|
128
|
+
*/
|
|
129
|
+
onUpdate(handler: (permissions: PermissionRecord) => void): () => void;
|
|
130
|
+
/**
|
|
131
|
+
* Listen for permission error events from the cloud.
|
|
132
|
+
* Fires when a bulk subscription is rejected due to missing permissions.
|
|
133
|
+
*
|
|
134
|
+
* @param handler - Callback invoked with the error details
|
|
135
|
+
* @returns Cleanup function that removes the listener
|
|
136
|
+
*
|
|
137
|
+
* @example
|
|
138
|
+
* ```ts
|
|
139
|
+
* const cleanup = permissions.onPermissionError((err) => {
|
|
140
|
+
* console.error("Permission error:", err.message, err.deniedPermissions);
|
|
141
|
+
* });
|
|
142
|
+
* ```
|
|
143
|
+
*/
|
|
144
|
+
onPermissionError(handler: (error: {
|
|
145
|
+
message: string;
|
|
146
|
+
deniedPermissions?: string[];
|
|
147
|
+
}) => void): () => void;
|
|
148
|
+
/**
|
|
149
|
+
* Listen for permission denied events from the cloud.
|
|
150
|
+
* Fires when an individual stream subscription is rejected.
|
|
151
|
+
*
|
|
152
|
+
* @param handler - Callback invoked with the denial details
|
|
153
|
+
* @returns Cleanup function that removes the listener
|
|
154
|
+
*
|
|
155
|
+
* @example
|
|
156
|
+
* ```ts
|
|
157
|
+
* const cleanup = permissions.onPermissionDenied((err) => {
|
|
158
|
+
* console.warn("Denied:", err.permission, err.streamType);
|
|
159
|
+
* });
|
|
160
|
+
* ```
|
|
161
|
+
*/
|
|
162
|
+
onPermissionDenied(handler: (error: {
|
|
163
|
+
message: string;
|
|
164
|
+
permission?: string;
|
|
165
|
+
streamType?: string;
|
|
166
|
+
}) => void): () => void;
|
|
167
|
+
/**
|
|
168
|
+
* Update permissions from connection settings or a settings update payload.
|
|
169
|
+
*
|
|
170
|
+
* Called internally by MentraSession when:
|
|
171
|
+
* - A CONNECTION_ACK is received with initial settings/permissions
|
|
172
|
+
* - A mid-session settings update includes permission changes
|
|
173
|
+
*
|
|
174
|
+
* Accepts flexible input — extracts permissions from nested structures
|
|
175
|
+
* commonly found in CONNECTION_ACK and settings_update payloads.
|
|
176
|
+
*
|
|
177
|
+
* @param settings - The raw settings object from the cloud message
|
|
178
|
+
* @internal
|
|
179
|
+
*/
|
|
180
|
+
updateFromSettings(settings: any): void;
|
|
181
|
+
}
|
|
182
|
+
//# sourceMappingURL=PermissionsManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PermissionsManager.d.ts","sourceRoot":"","sources":["../../../src/session/managers/PermissionsManager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAIH;;;;;GAKG;AACH,MAAM,MAAM,cAAc,GAAG,UAAU,GAAG,YAAY,GAAG,QAAQ,GAAG,eAAe,GAAG,UAAU,CAAC;AAEjG;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;AAE/D;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,6CAA6C;IAC7C,MAAM,EAAE;QACN,KAAK,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;QAC5B,IAAI,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;QAC3B,IAAI,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;QAC3B,KAAK,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;KAC7B,CAAC;IACF,qEAAqE;IACrE,eAAe,EAAE;QACf,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;KACjE,CAAC;CACH;AA4BD;;;;;;;;;GASG;AACH,qBAAa,kBAAkB;IAC7B,gCAAgC;IAChC,OAAO,CAAC,WAAW,CAAmB;IAEtC,mCAAmC;IACnC,OAAO,CAAC,SAAS,CAA2D;IAE5E,uBAAuB;IACvB,OAAO,CAAC,MAAM,CAAmC;IAEjD,gEAAgE;IAChE,OAAO,CAAC,eAAe,CAA4C;gBAEvD,IAAI,EAAE,sBAAsB;IAQxC;;;;;;;;;;;;OAYG;IACH,GAAG,CAAC,UAAU,EAAE,cAAc,GAAG,OAAO;IAIxC;;;;;;;;;;;;;OAaG;IACH,MAAM,IAAI,gBAAgB;IAI1B;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,QAAQ,CAAC,OAAO,EAAE,CAAC,WAAW,EAAE,gBAAgB,KAAK,IAAI,GAAG,MAAM,IAAI;IAOtE;;;;;;;;;;;;;OAaG;IACH,iBAAiB,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,KAAK,IAAI,GAAG,MAAM,IAAI;IAW1G;;;;;;;;;;;;;OAaG;IACH,kBAAkB,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,GAAG,MAAM,IAAI;IAavH;;;;;;;;;;;;OAYG;IACH,kBAAkB,CAAC,QAAQ,EAAE,GAAG,GAAG,IAAI;CAqDxC"}
|