@mentra/miniapp 3.2.1-dev.277 → 3.2.1-dev.279
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/modules/mic.d.ts +33 -0
- package/dist/modules/mic.d.ts.map +1 -1
- package/dist/modules/mic.js +46 -0
- package/dist/modules/mic.js.map +1 -1
- package/dist/protocol.d.ts +12 -0
- package/dist/protocol.d.ts.map +1 -1
- package/dist/protocol.js +12 -0
- package/dist/protocol.js.map +1 -1
- package/package.json +2 -2
- package/src/modules/mic.ts +58 -0
- package/src/protocol.ts +14 -0
package/dist/modules/mic.d.ts
CHANGED
|
@@ -16,6 +16,15 @@
|
|
|
16
16
|
*/
|
|
17
17
|
import { MiniappSession } from "../session";
|
|
18
18
|
import type { AudioChunkData, UnsubscribeFn, VadData } from "./events";
|
|
19
|
+
/** @internal Which microphone a session wants. */
|
|
20
|
+
export type MicAcquireSource = "glasses" | "phone";
|
|
21
|
+
/** @internal What the session is for. The host maps this to hardware settings. */
|
|
22
|
+
export type MicAcquireUseCase = "voice_call" | "transcription" | "voice_assistant" | "diagnostic";
|
|
23
|
+
/** @internal A held microphone session. Release is idempotent. */
|
|
24
|
+
export interface MicLease {
|
|
25
|
+
readonly sessionId: number;
|
|
26
|
+
release(): Promise<void>;
|
|
27
|
+
}
|
|
19
28
|
export declare class MicModule {
|
|
20
29
|
private readonly session;
|
|
21
30
|
/** All active unsubscribe functions for stop() to tear down at once. */
|
|
@@ -48,6 +57,30 @@ export declare class MicModule {
|
|
|
48
57
|
* Requires `MICROPHONE` in the miniapp manifest.
|
|
49
58
|
*/
|
|
50
59
|
setLoudnessGateEnabled(enabled: boolean): Promise<void>;
|
|
60
|
+
/**
|
|
61
|
+
* Take a semantic microphone session.
|
|
62
|
+
*
|
|
63
|
+
* @internal Host-gated, not part of the documented miniapp surface. The
|
|
64
|
+
* `voice_call` use case is restricted to an allowlist of packages and
|
|
65
|
+
* `diagnostic` is engine-only; anything else is rejected with
|
|
66
|
+
* `PERMISSION_DENIED`.
|
|
67
|
+
*
|
|
68
|
+
* You say what you are doing; the Mentra App decides what that requires of
|
|
69
|
+
* the microphone hardware. There is deliberately no way to ask for a gain,
|
|
70
|
+
* a gate, or a threshold from here.
|
|
71
|
+
*
|
|
72
|
+
* Ordering contract for a meeting: acquire *before* `meeting.join()`, and
|
|
73
|
+
* release only *after* `meeting.leave()` resolves or after a terminal
|
|
74
|
+
* meeting state arrives. Releasing earlier unpins the microphone while the
|
|
75
|
+
* call is still reading it, and the call reports the wearer's microphone as
|
|
76
|
+
* unavailable during what was a normal hang-up.
|
|
77
|
+
*
|
|
78
|
+
* Requires `MICROPHONE` in the miniapp manifest.
|
|
79
|
+
*/
|
|
80
|
+
acquire(options: {
|
|
81
|
+
source: MicAcquireSource;
|
|
82
|
+
useCase: MicAcquireUseCase;
|
|
83
|
+
}): Promise<MicLease>;
|
|
51
84
|
/**
|
|
52
85
|
* Tear down every subscription this module owns. Useful when a component
|
|
53
86
|
* is unmounting and wants to free everything at once without tracking
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mic.d.ts","sourceRoot":"","sources":["../../src/modules/mic.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,EAAC,cAAc,EAAC,MAAM,YAAY,CAAA;AACzC,OAAO,KAAK,EAAC,cAAc,EAAE,aAAa,EAAE,OAAO,EAAC,MAAM,UAAU,CAAA;AAEpE,qBAAa,SAAS;IAIR,OAAO,CAAC,QAAQ,CAAC,OAAO;IAHpC,wEAAwE;IACxE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA2B;gBAErB,OAAO,EAAE,cAAc;IAEpD;;;OAGG;IACH,eAAe,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,GAAG,aAAa;IAIhE;;;OAGG;IACH,YAAY,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,IAAI,GAAG,aAAa;IAIpE;;;;;;;OAOG;IACH,gCAAgC,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAOjE;;;;;;OAMG;IACH,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAOvD;;;;OAIG;IACH,IAAI,IAAI,IAAI;IAWZ,mEAAmE;IACnE,IAAI,aAAa,IAAI,OAAO,CAE3B;IAID,OAAO,CAAC,KAAK;CAOd"}
|
|
1
|
+
{"version":3,"file":"mic.d.ts","sourceRoot":"","sources":["../../src/modules/mic.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,EAAC,cAAc,EAAC,MAAM,YAAY,CAAA;AACzC,OAAO,KAAK,EAAC,cAAc,EAAE,aAAa,EAAE,OAAO,EAAC,MAAM,UAAU,CAAA;AAEpE,kDAAkD;AAClD,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,OAAO,CAAA;AAElD,kFAAkF;AAClF,MAAM,MAAM,iBAAiB,GAAG,YAAY,GAAG,eAAe,GAAG,iBAAiB,GAAG,YAAY,CAAA;AAEjG,kEAAkE;AAClE,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CACzB;AAED,qBAAa,SAAS;IAIR,OAAO,CAAC,QAAQ,CAAC,OAAO;IAHpC,wEAAwE;IACxE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA2B;gBAErB,OAAO,EAAE,cAAc;IAEpD;;;OAGG;IACH,eAAe,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,GAAG,aAAa;IAIhE;;;OAGG;IACH,YAAY,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,IAAI,GAAG,aAAa;IAIpE;;;;;;;OAOG;IACH,gCAAgC,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAOjE;;;;;;OAMG;IACH,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAOvD;;;;;;;;;;;;;;;;;;;OAmBG;IACG,OAAO,CAAC,OAAO,EAAE;QAAC,MAAM,EAAE,gBAAgB,CAAC;QAAC,OAAO,EAAE,iBAAiB,CAAA;KAAC,GAAG,OAAO,CAAC,QAAQ,CAAC;IA0BjG;;;;OAIG;IACH,IAAI,IAAI,IAAI;IAWZ,mEAAmE;IACnE,IAAI,aAAa,IAAI,OAAO,CAE3B;IAID,OAAO,CAAC,KAAK;CAOd"}
|
package/dist/modules/mic.js
CHANGED
|
@@ -62,6 +62,52 @@ export class MicModule {
|
|
|
62
62
|
enabled,
|
|
63
63
|
});
|
|
64
64
|
}
|
|
65
|
+
/**
|
|
66
|
+
* Take a semantic microphone session.
|
|
67
|
+
*
|
|
68
|
+
* @internal Host-gated, not part of the documented miniapp surface. The
|
|
69
|
+
* `voice_call` use case is restricted to an allowlist of packages and
|
|
70
|
+
* `diagnostic` is engine-only; anything else is rejected with
|
|
71
|
+
* `PERMISSION_DENIED`.
|
|
72
|
+
*
|
|
73
|
+
* You say what you are doing; the Mentra App decides what that requires of
|
|
74
|
+
* the microphone hardware. There is deliberately no way to ask for a gain,
|
|
75
|
+
* a gate, or a threshold from here.
|
|
76
|
+
*
|
|
77
|
+
* Ordering contract for a meeting: acquire *before* `meeting.join()`, and
|
|
78
|
+
* release only *after* `meeting.leave()` resolves or after a terminal
|
|
79
|
+
* meeting state arrives. Releasing earlier unpins the microphone while the
|
|
80
|
+
* call is still reading it, and the call reports the wearer's microphone as
|
|
81
|
+
* unavailable during what was a normal hang-up.
|
|
82
|
+
*
|
|
83
|
+
* Requires `MICROPHONE` in the miniapp manifest.
|
|
84
|
+
*/
|
|
85
|
+
async acquire(options) {
|
|
86
|
+
const result = await this.session.sendRequest({
|
|
87
|
+
type: MiniappRequestType.MIC_ACQUIRE,
|
|
88
|
+
source: options.source,
|
|
89
|
+
useCase: options.useCase,
|
|
90
|
+
});
|
|
91
|
+
// A host that predates this request resolves it with nothing rather than rejecting. Say so,
|
|
92
|
+
// instead of throwing a destructuring error the caller cannot act on.
|
|
93
|
+
if (typeof result?.sessionId !== "number") {
|
|
94
|
+
throw new Error("This version of the Mentra App does not support microphone sessions");
|
|
95
|
+
}
|
|
96
|
+
const { sessionId } = result;
|
|
97
|
+
let released = false;
|
|
98
|
+
return {
|
|
99
|
+
sessionId,
|
|
100
|
+
release: async () => {
|
|
101
|
+
if (released)
|
|
102
|
+
return;
|
|
103
|
+
released = true;
|
|
104
|
+
await this.session.sendRequest({
|
|
105
|
+
type: MiniappRequestType.MIC_RELEASE,
|
|
106
|
+
sessionId,
|
|
107
|
+
});
|
|
108
|
+
},
|
|
109
|
+
};
|
|
110
|
+
}
|
|
65
111
|
/**
|
|
66
112
|
* Tear down every subscription this module owns. Useful when a component
|
|
67
113
|
* is unmounting and wants to free everything at once without tracking
|
package/dist/modules/mic.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mic.js","sourceRoot":"","sources":["../../src/modules/mic.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAC,kBAAkB,EAAE,iBAAiB,EAAC,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"mic.js","sourceRoot":"","sources":["../../src/modules/mic.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAC,kBAAkB,EAAE,iBAAiB,EAAC,MAAM,aAAa,CAAA;AAgBjE,MAAM,OAAO,SAAS;IAIpB,YAA6B,OAAuB;QAAvB,YAAO,GAAP,OAAO,CAAgB;QAHpD,wEAAwE;QACvD,WAAM,GAAG,IAAI,GAAG,EAAiB,CAAA;IAEK,CAAC;IAExD;;;OAGG;IACH,eAAe,CAAC,OAAgC;QAC9C,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,iBAAiB,CAAC,GAAG,EAAE,OAAkC,CAAC,CAAC,CAAA;IACvG,CAAC;IAED;;;OAGG;IACH,YAAY,CAAC,OAAuC;QAClD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,iBAAiB,CAAC,WAAW,EAAE,OAAkC,CAAC,CAAC,CAAA;IAC/G,CAAC;IAED;;;;;;;OAOG;IACH,gCAAgC,CAAC,OAAgB;QAC/C,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,CAAO;YACpC,IAAI,EAAE,kBAAkB,CAAC,mBAAmB;YAC5C,OAAO;SACR,CAAC,CAAA;IACJ,CAAC;IAED;;;;;;OAMG;IACH,sBAAsB,CAAC,OAAgB;QACrC,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,CAAO;YACpC,IAAI,EAAE,kBAAkB,CAAC,6BAA6B;YACtD,OAAO;SACR,CAAC,CAAA;IACJ,CAAC;IAED;;;;;;;;;;;;;;;;;;;OAmBG;IACH,KAAK,CAAC,OAAO,CAAC,OAA+D;QAC3E,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAkC;YAC7E,IAAI,EAAE,kBAAkB,CAAC,WAAW;YACpC,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,OAAO,EAAE,OAAO,CAAC,OAAO;SACzB,CAAC,CAAA;QACF,4FAA4F;QAC5F,sEAAsE;QACtE,IAAI,OAAO,MAAM,EAAE,SAAS,KAAK,QAAQ,EAAE,CAAC;YAC1C,MAAM,IAAI,KAAK,CAAC,qEAAqE,CAAC,CAAA;QACxF,CAAC;QACD,MAAM,EAAC,SAAS,EAAC,GAAG,MAAM,CAAA;QAC1B,IAAI,QAAQ,GAAG,KAAK,CAAA;QACpB,OAAO;YACL,SAAS;YACT,OAAO,EAAE,KAAK,IAAI,EAAE;gBAClB,IAAI,QAAQ;oBAAE,OAAM;gBACpB,QAAQ,GAAG,IAAI,CAAA;gBACf,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAO;oBACnC,IAAI,EAAE,kBAAkB,CAAC,WAAW;oBACpC,SAAS;iBACV,CAAC,CAAA;YACJ,CAAC;SACF,CAAA;IACH,CAAC;IAED;;;;OAIG;IACH,IAAI;QACF,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAC5B,IAAI,CAAC;gBACH,CAAC,EAAE,CAAA;YACL,CAAC;YAAC,MAAM,CAAC;gBACP,YAAY;YACd,CAAC;QACH,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAA;IACrB,CAAC;IAED,mEAAmE;IACnE,IAAI,aAAa;QACf,OAAO,IAAI,CAAC,OAAO,CAAC,sBAAsB,CAAC,YAAY,CAAC,CAAA;IAC1D,CAAC;IAED,2EAA2E;IAEnE,KAAK,CAAC,KAAoB;QAChC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;QACtB,OAAO,GAAG,EAAE;YACV,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;YACzB,KAAK,EAAE,CAAA;QACT,CAAC,CAAA;IACH,CAAC;CACF"}
|
package/dist/protocol.d.ts
CHANGED
|
@@ -97,6 +97,14 @@ export declare enum MiniappRequestType {
|
|
|
97
97
|
MIC_SET_VAD_ENABLED = "miniapp_mic_set_vad_enabled",
|
|
98
98
|
/** Explicitly enable/disable the center-mic loudness gate ("Barrier"). */
|
|
99
99
|
MIC_SET_LOUDNESS_GATE_ENABLED = "miniapp_mic_set_loudness_gate_enabled",
|
|
100
|
+
/**
|
|
101
|
+
* Take a semantic microphone session. The host decides what the use case
|
|
102
|
+
* requires of the hardware; the caller never names a gain or a threshold.
|
|
103
|
+
* Host-gated per use case — see `MicModule.acquire`.
|
|
104
|
+
*/
|
|
105
|
+
MIC_ACQUIRE = "miniapp_mic_acquire",
|
|
106
|
+
/** Release a session taken with MIC_ACQUIRE. */
|
|
107
|
+
MIC_RELEASE = "miniapp_mic_release",
|
|
100
108
|
/**
|
|
101
109
|
* Enable or disable Wi-Fi ADB (wireless debugging) on Mentra Live.
|
|
102
110
|
* SYSTEM-only — host rejects with NOT_PERMITTED for non-system callers.
|
|
@@ -295,6 +303,10 @@ export declare enum MiniappErrorCode {
|
|
|
295
303
|
TTS_LOCAL_UNAVAILABLE = "TTS_LOCAL_UNAVAILABLE",
|
|
296
304
|
/** Not connected / pre-ACK and transport closed. */
|
|
297
305
|
NOT_CONNECTED = "NOT_CONNECTED",
|
|
306
|
+
/** A meeting join needs a microphone session the caller does not hold. */
|
|
307
|
+
MIC_SESSION_REQUIRED = "MIC_SESSION_REQUIRED",
|
|
308
|
+
/** A different microphone source is already live; only one can be pinned. */
|
|
309
|
+
MIC_SOURCE_CONFLICT = "MIC_SOURCE_CONFLICT",
|
|
298
310
|
/**
|
|
299
311
|
* Caller is not a system app — SYSTEM-only APIs (interop list/start/stop/invoke,
|
|
300
312
|
* setWifiAdbState) reject with this code.
|
package/dist/protocol.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../src/protocol.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,oBAAY,kBAAkB;IAC5B,8EAA8E;IAC9E,OAAO,oBAAoB;IAE3B,yDAAyD;IACzD,YAAY,yBAAyB;IAErC,8DAA8D;IAC9D,SAAS,sBAAsB;IAE/B;;;;OAIG;IACH,OAAO,oBAAoB;IAE3B,uEAAuE;IACvE,MAAM,mBAAmB;IAEzB,8EAA8E;IAC9E,UAAU,uBAAuB;IAEjC,sDAAsD;IACtD,UAAU,uBAAuB;IAEjC,2DAA2D;IAC3D,KAAK,kBAAkB;IAEvB;;;;;OAKG;IACH,mBAAmB,gCAAgC;IACnD,oBAAoB,iCAAiC;IACrD,oBAAoB,iCAAiC;IACrD,oBAAoB,iCAAiC;IAErD,mCAAmC;IACnC,OAAO,oBAAoB;IAE3B,8BAA8B;IAC9B,aAAa,0BAA0B;IAEvC,wDAAwD;IACxD,oBAAoB,iCAAiC;IAErD,0DAA0D;IAC1D,gBAAgB,6BAA6B;IAC7C,gDAAgD;IAChD,eAAe,4BAA4B;IAC3C,mFAAmF;IACnF,kBAAkB,+BAA+B;IACjD,0FAA0F;IAC1F,6BAA6B,0CAA0C;IACvE,qFAAqF;IACrF,6BAA6B,0CAA0C;IACvE,sFAAsF;IACtF,oBAAoB,iCAAiC;IACrD,sFAAsF;IACtF,wBAAwB,qCAAqC;IAC7D;;;;6EAIyE;IACzE,0BAA0B,uCAAuC;IACjE;;sFAEkF;IAClF,6BAA6B,0CAA0C;IACvE;4DACwD;IACxD,wBAAwB,qCAAqC;IAC7D,iFAAiF;IACjF,6BAA6B,0CAA0C;IAEvE,kCAAkC;IAClC,WAAW,wBAAwB;IACnC,WAAW,wBAAwB;IACnC,cAAc,2BAA2B;IACzC,YAAY,yBAAyB;IACrC,aAAa,0BAA0B;IACvC,WAAW,wBAAwB;IACnC,eAAe,4BAA4B;IAC3C,oBAAoB,iCAAiC;IACrD,aAAa,0BAA0B;IAEvC,iCAAiC;IACjC,UAAU,uBAAuB;IAEjC,2EAA2E;IAC3E,cAAc,2BAA2B;IAEzC;;;;OAIG;IACH,eAAe,4BAA4B;IAE3C,kGAAkG;IAClG,mBAAmB,gCAAgC;IACnD,0EAA0E;IAC1E,6BAA6B,0CAA0C;
|
|
1
|
+
{"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../src/protocol.ts"],"names":[],"mappings":"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"}
|
package/dist/protocol.js
CHANGED
|
@@ -101,6 +101,14 @@ export var MiniappRequestType;
|
|
|
101
101
|
MiniappRequestType["MIC_SET_VAD_ENABLED"] = "miniapp_mic_set_vad_enabled";
|
|
102
102
|
/** Explicitly enable/disable the center-mic loudness gate ("Barrier"). */
|
|
103
103
|
MiniappRequestType["MIC_SET_LOUDNESS_GATE_ENABLED"] = "miniapp_mic_set_loudness_gate_enabled";
|
|
104
|
+
/**
|
|
105
|
+
* Take a semantic microphone session. The host decides what the use case
|
|
106
|
+
* requires of the hardware; the caller never names a gain or a threshold.
|
|
107
|
+
* Host-gated per use case — see `MicModule.acquire`.
|
|
108
|
+
*/
|
|
109
|
+
MiniappRequestType["MIC_ACQUIRE"] = "miniapp_mic_acquire";
|
|
110
|
+
/** Release a session taken with MIC_ACQUIRE. */
|
|
111
|
+
MiniappRequestType["MIC_RELEASE"] = "miniapp_mic_release";
|
|
104
112
|
/**
|
|
105
113
|
* Enable or disable Wi-Fi ADB (wireless debugging) on Mentra Live.
|
|
106
114
|
* SYSTEM-only — host rejects with NOT_PERMITTED for non-system callers.
|
|
@@ -319,6 +327,10 @@ export var MiniappErrorCode;
|
|
|
319
327
|
MiniappErrorCode["TTS_LOCAL_UNAVAILABLE"] = "TTS_LOCAL_UNAVAILABLE";
|
|
320
328
|
/** Not connected / pre-ACK and transport closed. */
|
|
321
329
|
MiniappErrorCode["NOT_CONNECTED"] = "NOT_CONNECTED";
|
|
330
|
+
/** A meeting join needs a microphone session the caller does not hold. */
|
|
331
|
+
MiniappErrorCode["MIC_SESSION_REQUIRED"] = "MIC_SESSION_REQUIRED";
|
|
332
|
+
/** A different microphone source is already live; only one can be pinned. */
|
|
333
|
+
MiniappErrorCode["MIC_SOURCE_CONFLICT"] = "MIC_SOURCE_CONFLICT";
|
|
322
334
|
// ----- Inter-miniapp interop -----
|
|
323
335
|
/**
|
|
324
336
|
* Caller is not a system app — SYSTEM-only APIs (interop list/start/stop/invoke,
|
package/dist/protocol.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"protocol.js","sourceRoot":"","sources":["../src/protocol.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,+EAA+E;AAC/E,iDAAiD;AACjD,+EAA+E;AAE/E,MAAM,CAAN,IAAY,
|
|
1
|
+
{"version":3,"file":"protocol.js","sourceRoot":"","sources":["../src/protocol.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mentra/miniapp",
|
|
3
|
-
"version": "3.2.1-dev.
|
|
3
|
+
"version": "3.2.1-dev.279",
|
|
4
4
|
"description": "SDK for building MentraOS local miniapps (browser/WebView)",
|
|
5
5
|
"author": "Mentra Labs",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -57,7 +57,7 @@
|
|
|
57
57
|
}
|
|
58
58
|
},
|
|
59
59
|
"dependencies": {
|
|
60
|
-
"@mentra/cloud-protocol": "3.2.1-dev.
|
|
60
|
+
"@mentra/cloud-protocol": "3.2.1-dev.279",
|
|
61
61
|
"eventemitter3": "^5.0.1"
|
|
62
62
|
},
|
|
63
63
|
"devDependencies": {
|
package/src/modules/mic.ts
CHANGED
|
@@ -19,6 +19,18 @@ import {MiniappRequestType, MiniappStreamType} from "../protocol"
|
|
|
19
19
|
import {MiniappSession} from "../session"
|
|
20
20
|
import type {AudioChunkData, UnsubscribeFn, VadData} from "./events"
|
|
21
21
|
|
|
22
|
+
/** @internal Which microphone a session wants. */
|
|
23
|
+
export type MicAcquireSource = "glasses" | "phone"
|
|
24
|
+
|
|
25
|
+
/** @internal What the session is for. The host maps this to hardware settings. */
|
|
26
|
+
export type MicAcquireUseCase = "voice_call" | "transcription" | "voice_assistant" | "diagnostic"
|
|
27
|
+
|
|
28
|
+
/** @internal A held microphone session. Release is idempotent. */
|
|
29
|
+
export interface MicLease {
|
|
30
|
+
readonly sessionId: number
|
|
31
|
+
release(): Promise<void>
|
|
32
|
+
}
|
|
33
|
+
|
|
22
34
|
export class MicModule {
|
|
23
35
|
/** All active unsubscribe functions for stop() to tear down at once. */
|
|
24
36
|
private readonly unsubs = new Set<UnsubscribeFn>()
|
|
@@ -70,6 +82,52 @@ export class MicModule {
|
|
|
70
82
|
})
|
|
71
83
|
}
|
|
72
84
|
|
|
85
|
+
/**
|
|
86
|
+
* Take a semantic microphone session.
|
|
87
|
+
*
|
|
88
|
+
* @internal Host-gated, not part of the documented miniapp surface. The
|
|
89
|
+
* `voice_call` use case is restricted to an allowlist of packages and
|
|
90
|
+
* `diagnostic` is engine-only; anything else is rejected with
|
|
91
|
+
* `PERMISSION_DENIED`.
|
|
92
|
+
*
|
|
93
|
+
* You say what you are doing; the Mentra App decides what that requires of
|
|
94
|
+
* the microphone hardware. There is deliberately no way to ask for a gain,
|
|
95
|
+
* a gate, or a threshold from here.
|
|
96
|
+
*
|
|
97
|
+
* Ordering contract for a meeting: acquire *before* `meeting.join()`, and
|
|
98
|
+
* release only *after* `meeting.leave()` resolves or after a terminal
|
|
99
|
+
* meeting state arrives. Releasing earlier unpins the microphone while the
|
|
100
|
+
* call is still reading it, and the call reports the wearer's microphone as
|
|
101
|
+
* unavailable during what was a normal hang-up.
|
|
102
|
+
*
|
|
103
|
+
* Requires `MICROPHONE` in the miniapp manifest.
|
|
104
|
+
*/
|
|
105
|
+
async acquire(options: {source: MicAcquireSource; useCase: MicAcquireUseCase}): Promise<MicLease> {
|
|
106
|
+
const result = await this.session.sendRequest<{sessionId: number} | undefined>({
|
|
107
|
+
type: MiniappRequestType.MIC_ACQUIRE,
|
|
108
|
+
source: options.source,
|
|
109
|
+
useCase: options.useCase,
|
|
110
|
+
})
|
|
111
|
+
// A host that predates this request resolves it with nothing rather than rejecting. Say so,
|
|
112
|
+
// instead of throwing a destructuring error the caller cannot act on.
|
|
113
|
+
if (typeof result?.sessionId !== "number") {
|
|
114
|
+
throw new Error("This version of the Mentra App does not support microphone sessions")
|
|
115
|
+
}
|
|
116
|
+
const {sessionId} = result
|
|
117
|
+
let released = false
|
|
118
|
+
return {
|
|
119
|
+
sessionId,
|
|
120
|
+
release: async () => {
|
|
121
|
+
if (released) return
|
|
122
|
+
released = true
|
|
123
|
+
await this.session.sendRequest<void>({
|
|
124
|
+
type: MiniappRequestType.MIC_RELEASE,
|
|
125
|
+
sessionId,
|
|
126
|
+
})
|
|
127
|
+
},
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
|
|
73
131
|
/**
|
|
74
132
|
* Tear down every subscription this module owns. Useful when a component
|
|
75
133
|
* is unmounting and wants to free everything at once without tracking
|
package/src/protocol.ts
CHANGED
|
@@ -119,6 +119,14 @@ export enum MiniappRequestType {
|
|
|
119
119
|
MIC_SET_VAD_ENABLED = "miniapp_mic_set_vad_enabled",
|
|
120
120
|
/** Explicitly enable/disable the center-mic loudness gate ("Barrier"). */
|
|
121
121
|
MIC_SET_LOUDNESS_GATE_ENABLED = "miniapp_mic_set_loudness_gate_enabled",
|
|
122
|
+
/**
|
|
123
|
+
* Take a semantic microphone session. The host decides what the use case
|
|
124
|
+
* requires of the hardware; the caller never names a gain or a threshold.
|
|
125
|
+
* Host-gated per use case — see `MicModule.acquire`.
|
|
126
|
+
*/
|
|
127
|
+
MIC_ACQUIRE = "miniapp_mic_acquire",
|
|
128
|
+
/** Release a session taken with MIC_ACQUIRE. */
|
|
129
|
+
MIC_RELEASE = "miniapp_mic_release",
|
|
122
130
|
|
|
123
131
|
/**
|
|
124
132
|
* Enable or disable Wi-Fi ADB (wireless debugging) on Mentra Live.
|
|
@@ -376,6 +384,12 @@ export enum MiniappErrorCode {
|
|
|
376
384
|
/** Not connected / pre-ACK and transport closed. */
|
|
377
385
|
NOT_CONNECTED = "NOT_CONNECTED",
|
|
378
386
|
|
|
387
|
+
/** A meeting join needs a microphone session the caller does not hold. */
|
|
388
|
+
MIC_SESSION_REQUIRED = "MIC_SESSION_REQUIRED",
|
|
389
|
+
|
|
390
|
+
/** A different microphone source is already live; only one can be pinned. */
|
|
391
|
+
MIC_SOURCE_CONFLICT = "MIC_SOURCE_CONFLICT",
|
|
392
|
+
|
|
379
393
|
// ----- Inter-miniapp interop -----
|
|
380
394
|
/**
|
|
381
395
|
* Caller is not a system app — SYSTEM-only APIs (interop list/start/stop/invoke,
|