@mentra/engine 3.2.0-dev.221 → 3.2.0-dev.223

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.
Files changed (69) hide show
  1. package/build/generated/releaseMetadata.js +5 -5
  2. package/build/generated/releaseMetadata.js.map +1 -1
  3. package/build/index.d.ts +2 -0
  4. package/build/index.d.ts.map +1 -1
  5. package/build/index.js +1 -0
  6. package/build/index.js.map +1 -1
  7. package/build/services/AcsMeetingService.d.ts +360 -10
  8. package/build/services/AcsMeetingService.d.ts.map +1 -1
  9. package/build/services/AcsMeetingService.js +836 -19
  10. package/build/services/AcsMeetingService.js.map +1 -1
  11. package/build/services/AudioPlaybackService.d.ts +6 -0
  12. package/build/services/AudioPlaybackService.d.ts.map +1 -1
  13. package/build/services/AudioPlaybackService.js +4 -3
  14. package/build/services/AudioPlaybackService.js.map +1 -1
  15. package/build/services/GlassesMicProbe.d.ts +78 -0
  16. package/build/services/GlassesMicProbe.d.ts.map +1 -0
  17. package/build/services/GlassesMicProbe.js +258 -0
  18. package/build/services/GlassesMicProbe.js.map +1 -0
  19. package/build/services/LocalMiniappRuntime.d.ts +83 -0
  20. package/build/services/LocalMiniappRuntime.d.ts.map +1 -1
  21. package/build/services/LocalMiniappRuntime.js +714 -39
  22. package/build/services/LocalMiniappRuntime.js.map +1 -1
  23. package/build/services/MentraJSLogPipeline.d.ts +39 -0
  24. package/build/services/MentraJSLogPipeline.d.ts.map +1 -1
  25. package/build/services/MentraJSLogPipeline.js +59 -3
  26. package/build/services/MentraJSLogPipeline.js.map +1 -1
  27. package/build/services/MentraJSRouter.d.ts +1 -1
  28. package/build/services/MentraJSRouter.d.ts.map +1 -1
  29. package/build/services/MentraJSRouter.js +2 -2
  30. package/build/services/MentraJSRouter.js.map +1 -1
  31. package/build/services/MicStateCoordinator.d.ts +22 -0
  32. package/build/services/MicStateCoordinator.d.ts.map +1 -1
  33. package/build/services/MicStateCoordinator.js +34 -3
  34. package/build/services/MicStateCoordinator.js.map +1 -1
  35. package/build/services/PhoneStreamCoordinator.d.ts +8 -0
  36. package/build/services/PhoneStreamCoordinator.d.ts.map +1 -1
  37. package/build/services/PhoneStreamCoordinator.js +2 -0
  38. package/build/services/PhoneStreamCoordinator.js.map +1 -1
  39. package/build/services/SoftapCallTransport.d.ts +365 -0
  40. package/build/services/SoftapCallTransport.d.ts.map +1 -0
  41. package/build/services/SoftapCallTransport.js +722 -0
  42. package/build/services/SoftapCallTransport.js.map +1 -0
  43. package/build/services/SoftapCleanupBarrier.d.ts +45 -0
  44. package/build/services/SoftapCleanupBarrier.d.ts.map +1 -0
  45. package/build/services/SoftapCleanupBarrier.js +51 -0
  46. package/build/services/SoftapCleanupBarrier.js.map +1 -0
  47. package/build/utils/pcm16.d.ts +35 -0
  48. package/build/utils/pcm16.d.ts.map +1 -0
  49. package/build/utils/pcm16.js +85 -0
  50. package/build/utils/pcm16.js.map +1 -0
  51. package/build/utils/softapTrace.d.ts +39 -0
  52. package/build/utils/softapTrace.d.ts.map +1 -0
  53. package/build/utils/softapTrace.js +124 -0
  54. package/build/utils/softapTrace.js.map +1 -0
  55. package/package.json +7 -7
  56. package/src/generated/releaseMetadata.ts +5 -5
  57. package/src/index.ts +2 -0
  58. package/src/services/AcsMeetingService.ts +956 -22
  59. package/src/services/AudioPlaybackService.ts +12 -3
  60. package/src/services/GlassesMicProbe.ts +300 -0
  61. package/src/services/LocalMiniappRuntime.ts +775 -42
  62. package/src/services/MentraJSLogPipeline.ts +70 -3
  63. package/src/services/MentraJSRouter.ts +2 -2
  64. package/src/services/MicStateCoordinator.ts +35 -3
  65. package/src/services/PhoneStreamCoordinator.ts +10 -0
  66. package/src/services/SoftapCallTransport.ts +928 -0
  67. package/src/services/SoftapCleanupBarrier.ts +72 -0
  68. package/src/utils/pcm16.ts +93 -0
  69. package/src/utils/softapTrace.ts +133 -0
@@ -1,10 +1,10 @@
1
1
  export const ENGINE_RELEASE_METADATA = Object.freeze({
2
2
  "schemaVersion": 1,
3
3
  "familyBaseVersion": "3.2.0",
4
- "releaseIdentity": "3.2.0-dev.221",
5
- "releaseSetId": "mentra-3.2.0-dev.221",
6
- "sourceCommit": "3837a3055e7a69e18553ce51c3a97579d2ad3b83",
7
- "otaManifestUrl": "https://github.com/Mentra-Community/MentraOS/releases/download/mentra-builds-v3.2.0/mentra-live-ota-3.2.0-dev.221.json",
8
- "otaManifestSha256": "657e9616ad0c464ee57d827c05b53393e45559992c13b15adbb06e0c903eb870"
4
+ "releaseIdentity": "3.2.0-dev.223",
5
+ "releaseSetId": "mentra-3.2.0-dev.223",
6
+ "sourceCommit": "03c06ea8306e617803295e8707e9a57f2b64a8ef",
7
+ "otaManifestUrl": "https://github.com/Mentra-Community/MentraOS/releases/download/mentra-builds-v3.2.0/mentra-live-ota-3.2.0-dev.223.json",
8
+ "otaManifestSha256": "41657c616a7d88d0f12fb2dddb0f7ead6fa38b6859500c22067faededcd80d4c"
9
9
  });
10
10
  //# sourceMappingURL=releaseMetadata.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"releaseMetadata.js","sourceRoot":"","sources":["../../src/generated/releaseMetadata.ts"],"names":[],"mappings":"AAWA,MAAM,CAAC,MAAM,uBAAuB,GAAoC,MAAM,CAAC,MAAM,CAAC;IACpF,eAAe,EAAE,CAAC;IAClB,mBAAmB,EAAE,OAAO;IAC5B,iBAAiB,EAAE,eAAe;IAClC,cAAc,EAAE,sBAAsB;IACtC,cAAc,EAAE,0CAA0C;IAC1D,gBAAgB,EAAE,wHAAwH;IAC1I,mBAAmB,EAAE,kEAAkE;CACxF,CAAC,CAAA","sourcesContent":["/** Generated by release CI. Do not edit in a release checkout. */\nexport interface EngineReleaseMetadata {\n schemaVersion: 1\n familyBaseVersion: string | null\n releaseIdentity: string | null\n releaseSetId: string | null\n sourceCommit: string | null\n otaManifestUrl: string | null\n otaManifestSha256: string | null\n}\n\nexport const ENGINE_RELEASE_METADATA: Readonly<EngineReleaseMetadata> = Object.freeze({\n \"schemaVersion\": 1,\n \"familyBaseVersion\": \"3.2.0\",\n \"releaseIdentity\": \"3.2.0-dev.221\",\n \"releaseSetId\": \"mentra-3.2.0-dev.221\",\n \"sourceCommit\": \"3837a3055e7a69e18553ce51c3a97579d2ad3b83\",\n \"otaManifestUrl\": \"https://github.com/Mentra-Community/MentraOS/releases/download/mentra-builds-v3.2.0/mentra-live-ota-3.2.0-dev.221.json\",\n \"otaManifestSha256\": \"657e9616ad0c464ee57d827c05b53393e45559992c13b15adbb06e0c903eb870\"\n})\n"]}
1
+ {"version":3,"file":"releaseMetadata.js","sourceRoot":"","sources":["../../src/generated/releaseMetadata.ts"],"names":[],"mappings":"AAWA,MAAM,CAAC,MAAM,uBAAuB,GAAoC,MAAM,CAAC,MAAM,CAAC;IACpF,eAAe,EAAE,CAAC;IAClB,mBAAmB,EAAE,OAAO;IAC5B,iBAAiB,EAAE,eAAe;IAClC,cAAc,EAAE,sBAAsB;IACtC,cAAc,EAAE,0CAA0C;IAC1D,gBAAgB,EAAE,wHAAwH;IAC1I,mBAAmB,EAAE,kEAAkE;CACxF,CAAC,CAAA","sourcesContent":["/** Generated by release CI. Do not edit in a release checkout. */\nexport interface EngineReleaseMetadata {\n schemaVersion: 1\n familyBaseVersion: string | null\n releaseIdentity: string | null\n releaseSetId: string | null\n sourceCommit: string | null\n otaManifestUrl: string | null\n otaManifestSha256: string | null\n}\n\nexport const ENGINE_RELEASE_METADATA: Readonly<EngineReleaseMetadata> = Object.freeze({\n \"schemaVersion\": 1,\n \"familyBaseVersion\": \"3.2.0\",\n \"releaseIdentity\": \"3.2.0-dev.223\",\n \"releaseSetId\": \"mentra-3.2.0-dev.223\",\n \"sourceCommit\": \"03c06ea8306e617803295e8707e9a57f2b64a8ef\",\n \"otaManifestUrl\": \"https://github.com/Mentra-Community/MentraOS/releases/download/mentra-builds-v3.2.0/mentra-live-ota-3.2.0-dev.223.json\",\n \"otaManifestSha256\": \"41657c616a7d88d0f12fb2dddb0f7ead6fa38b6859500c22067faededcd80d4c\"\n})\n"]}
package/build/index.d.ts CHANGED
@@ -41,6 +41,8 @@ export { decideDevLaunchRoute, type DecideDevLaunchOptions, type DevLaunchResult
41
41
  export { decideDevOpenRoute, type DevOpenDecision, } from "./utils/devMiniappSnapshot";
42
42
  export { HardwareCompatibility, type CompatibilityResult } from "./utils/hardware";
43
43
  export { BgTimer, throttle, debounce } from "./utils/timers";
44
+ export { default as glassesMicProbe, parseMicProbeParams } from "./services/GlassesMicProbe";
45
+ export type { MicProbeA2dpMode, MicProbeOptions, MicProbeSample } from "./services/GlassesMicProbe";
44
46
  export { HardwareType, HardwareRequirementLevel, DeviceTypes, ControllerTypes, HARDWARE_CAPABILITIES, getModelCapabilities, simulatedGlasses, evenRealitiesG1, evenRealitiesG2, mentraLive, nimo, vuzixZ100, mentraDisplay, } from "./types";
45
47
  export type { HardwareRequirement, CameraCapabilities, DisplayCapabilities, MicrophoneCapabilities, SpeakerCapabilities, IMUCapabilities, ButtonCapabilities, LightCapabilities, PowerCapabilities, Capabilities, AppletType, AppPermissionType, AppletPermission, AppletInterface, ClientApp, } from "./types";
46
48
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/build/index.js CHANGED
@@ -42,6 +42,7 @@ export { decideDevLaunchRoute, } from "./utils/devMiniappLaunch";
42
42
  export { decideDevOpenRoute, } from "./utils/devMiniappSnapshot";
43
43
  export { HardwareCompatibility } from "./utils/hardware";
44
44
  export { BgTimer, throttle, debounce } from "./utils/timers";
45
+ export { default as glassesMicProbe, parseMicProbeParams } from "./services/GlassesMicProbe";
45
46
  // Hardware types and capability profiles.
46
47
  export { HardwareType, HardwareRequirementLevel, DeviceTypes, ControllerTypes, HARDWARE_CAPABILITIES, getModelCapabilities, simulatedGlasses, evenRealitiesG1, evenRealitiesG2, mentraLive, nimo, vuzixZ100, mentraDisplay, } from "./types";
47
48
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,2EAA2E;AAC3E,OAAO,EAAC,MAAM,EAAC,MAAM,UAAU,CAAA;AA2B/B,2EAA2E;AAC3E,6EAA6E;AAC7E,yEAAyE;AACzE,qEAAqE;AACrE,kDAAkD;AAClD,OAAO,EAAC,QAAQ,EAAE,UAAU,EAAC,MAAM,mBAAmB,CAAA;AACtD,OAAO,EAAC,wBAAwB,EAAE,gCAAgC,EAAC,MAAM,+BAA+B,CAAA;AAExG,8CAA8C;AAC9C,OAAO,EAAC,oBAAoB,EAAC,MAAM,kBAAkB,CAAA;AAGrD,2DAA2D;AAC3D,OAAO,EACL,kBAAkB,EAClB,cAAc,EACd,sBAAsB,EACtB,mBAAmB,GAGpB,MAAM,6BAA6B,CAAA;AACpC,yEAAyE;AACzE,OAAO,EACL,eAAe,EACf,yBAAyB,GAI1B,MAAM,kCAAkC,CAAA;AAazC,uEAAuE;AACvE,2DAA2D;AAC3D,OAAO,EACL,wBAAwB,EACxB,WAAW,EACX,iBAAiB,EACjB,mBAAmB,EACnB,yBAAyB,EACzB,sBAAsB,EACtB,qBAAqB,EACrB,gBAAgB,EAChB,sBAAsB,EACtB,sBAAsB,EACtB,mBAAmB,GACpB,MAAM,6BAA6B,CAAA;AACpC,OAAO,EAAC,kBAAkB,EAAC,MAAM,4BAA4B,CAAA;AAW7D,OAAO,EACL,iBAAiB,EACjB,8BAA8B,EAC9B,oBAAoB,EACpB,uBAAuB,EACvB,kCAAkC,EAClC,gBAAgB,EAChB,sBAAsB,EACtB,yBAAyB,EACzB,mCAAmC,GACpC,MAAM,yBAAyB,CAAA;AAEhC,OAAO,EACL,2BAA2B,EAC3B,uCAAuC,EACvC,sBAAsB,EACtB,0BAA0B,EAC1B,kCAAkC,EAClC,2BAA2B,EAC3B,kBAAkB,EAClB,eAAe,EACf,uCAAuC,EACvC,yCAAyC,GAC1C,MAAM,4BAA4B,CAAA;AAMnC,OAAO,EAAC,uBAAuB,EAAC,MAAM,6CAA6C,CAAA;AACnF,OAAO,EAAC,wBAAwB,EAAC,MAAM,wCAAwC,CAAA;AAe/E,+EAA+E;AAC/E,OAAO,EAAC,eAAe,EAAC,MAAM,qBAAqB,CAAA;AAEnD,yEAAyE;AACzE,6CAA6C;AAC7C,OAAO,EACL,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,6BAA6B,EAC7B,gBAAgB,EAChB,eAAe,EACf,sBAAsB,EACtB,OAAO,EACP,QAAQ,EACR,OAAO,EACP,gBAAgB,EAChB,kBAAkB,EAClB,UAAU,EACV,UAAU,EACV,UAAU,EACV,YAAY,EACZ,aAAa,EACb,uBAAuB,EACvB,iBAAiB,EACjB,sBAAsB,EACtB,gBAAgB,EAChB,4BAA4B,EAC5B,gBAAgB,GAGjB,MAAM,eAAe,CAAA;AAEtB,4EAA4E;AAC5E,OAAO,EACL,oBAAoB,GAIrB,MAAM,0BAA0B,CAAA;AACjC,OAAO,EACL,kBAAkB,GAEnB,MAAM,4BAA4B,CAAA;AACnC,OAAO,EAAC,qBAAqB,EAA2B,MAAM,kBAAkB,CAAA;AAChF,OAAO,EAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAC,MAAM,gBAAgB,CAAA;AAE1D,0CAA0C;AAC1C,OAAO,EACL,YAAY,EACZ,wBAAwB,EACxB,WAAW,EACX,eAAe,EACf,qBAAqB,EACrB,oBAAoB,EACpB,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,UAAU,EACV,IAAI,EACJ,SAAS,EACT,aAAa,GACd,MAAM,SAAS,CAAA","sourcesContent":["/**\n * `@mentra/engine` — the OEM-facing main entry.\n *\n * The `engine` namespace (configure/start/stop + typed domain facades), the\n * public contract/read-model types, and the pure helpers host UI legitimately\n * renders with (decision functions, sort/order helpers, policy constants,\n * capability tables, timers). Judgment rule: read models, commands, pure\n * functions and types belong here; anything that mutates runtime state or\n * exposes a raw store/service remains private to the MentraOS host.\n * See cloud-v2/docs/issues/020-glasses-status-boundary/integration-review.md §D.\n */\n\n// The namespaced OEM-facing engine API (the \"(A) host API\"). See ./engine.\nexport {engine} from \"./engine\"\nexport type {\n ReportAttachmentInput,\n ReportContext,\n ReportDetails,\n ReportStatus,\n ReportTrigger,\n ReportSubmitResult,\n EngineSubmitReportInput,\n} from \"./facades/reports\"\nexport type {IslandNotification, IslandNotificationKind} from \"./facades/notifications\"\nexport type {WifiSearchResult} from \"./facades/glassesWifi\"\nexport type {IdentitySnapshot} from \"./services/PairingIdentity\"\nexport type {DisplayMirrorEvent} from \"./facades/displayMirror\"\nexport type {\n IslandConfigureOptions,\n IslandAuth,\n IslandConfigValues,\n IslandAnalytics,\n IslandUiSeams,\n ScanQrOptions,\n ScanQrResult,\n SubjectTokenType,\n LocalMiniappPolicy,\n ManagedMiniappPolicyEntry,\n} from \"./runtime/bootstrap\"\n\n// Settings contract: the typed key registry (schema descriptors — the same\n// surface engine.settings.descriptor()/keys() reads), the per-key React hook\n// (the hook layer, same precedent as the apps hooks below), and the pure\n// device-model key helpers. The raw useSettingsStore stays internal;\n// imperative access goes through engine.settings.\nexport {SETTINGS, useSetting} from \"./stores/settings\"\nexport {MENTRA_LIVE_SETTING_KEYS, getBluetoothSettingKeysForDevice} from \"./stores/bluetoothSettingKeys\"\n\n// Runtime-shared constants and contract DTOs.\nexport {ISLAND_SETTINGS_KEYS} from \"./runtime/config\"\nexport type {CloudClientStatusSnapshot, MiniappAuthToken, InteropAuditEvent, TtsSynthesisResult} from \"./runtime/config\"\n\n// Pure readiness predicates over glasses connection state.\nexport {\n isGlassesConnected,\n isGlassesReady,\n isGlassesLinkLayerBusy,\n waitForGlassesReady,\n type GlassesConnectionStatus,\n type WaitForGlassesReadyOptions,\n} from \"./services/GlassesReadiness\"\n// Pure connect/reconnect decision helpers (host UI renders the outcome).\nexport {\n decideReconnect,\n decideConnectButtonAction,\n type ReconnectDecision,\n type ReconnectDecisionInput,\n type ConnectButtonAction,\n} from \"./services/ConnectionCoordinator\"\n\n// OTA read-model types for host OTA UI (progress screen, error mapping,\n// progress section) — the check/install machinery itself is internal.\nexport type {\n VersionInfo,\n MtkPatch,\n BesFirmware,\n VersionJson,\n OtaCheckResult,\n OtaCheckCurrentGlassesResult,\n OtaCheckCurrentGlassesOptions,\n} from \"./services/OtaUpdateCheckService\"\n// OTA install policy (watchdog timings + failure copy) + display-state\n// derivation, consumed by the OTA screens and their tests.\nexport {\n MINIMUM_OTA_STATUS_BUILD,\n MAX_RETRIES,\n RETRY_INTERVAL_MS,\n PROGRESS_TIMEOUT_MS,\n DOWNLOAD_STUCK_TIMEOUT_MS,\n MTK_INSTALL_TIMEOUT_MS,\n GLOBAL_OTA_TIMEOUT_MS,\n PING_INTERVAL_MS,\n QUERY_REPLY_TIMEOUT_MS,\n BES_RESTART_TIMEOUT_MS,\n OtaProgressMessages,\n} from \"./services/otaInstallPolicy\"\nexport {deriveDisplayState} from \"./services/otaDisplayState\"\nexport type {DisplayState} from \"./services/otaDisplayState\"\nexport type {\n OtaProgress,\n OtaProgressStatus,\n OtaStatus,\n OtaUpdateInfo,\n ReleaseChangelog,\n OtaSnapshot,\n OtaInstallSnapshot,\n} from \"./facades/ota\"\nexport {\n beginOtaAutoChain,\n clearOtaAutoChainReconnectWait,\n isOtaAutoChainActive,\n otaAutoChainFingerprint,\n otaAutoChainReconnectWaitRemaining,\n stopOtaAutoChain,\n tryAdvanceOtaAutoChain,\n MAX_OTA_AUTO_CHAIN_PASSES,\n OTA_AUTO_CHAIN_RECONNECT_TIMEOUT_MS,\n} from \"./services/OtaAutoChain\"\nexport type {OtaAutoChainAdvanceResult} from \"./services/OtaAutoChain\"\nexport {\n BES_INSTALL_RESTART_MESSAGE,\n OTA_ERROR_BES_RESTART_REQUIRED_COPY_KEY,\n OTA_ERROR_ENGLISH_COPY,\n OTA_ERROR_GENERIC_COPY_KEY,\n OTA_ERROR_UNKNOWN_GLASSES_COPY_KEY,\n OTA_GLASSES_ERROR_COPY_KEYS,\n getOtaErrorMessage,\n otaErrorCopyKey,\n shouldRequireGlassesRebootForBesFailure,\n shouldShowChangeWifiForOtaDownloadFailure,\n} from \"./services/OtaErrorMapping\"\n\n// Gallery read models: engine.gallery.onNotice payload types, the media\n// permission helper + display-name derivation host gallery UI uses, and the\n// glasses-camera DTO types (re-exported through the host @/types/asg shim).\nexport type {GalleryNotice, GalleryNoticeCode} from \"./services/asg/galleryNotices\"\nexport {MediaLibraryPermissions} from \"./utils/permissions/MediaLibraryPermissions\"\nexport {deriveGalleryDisplayName} from \"./utils/permissions/galleryDisplayName\"\nexport type {\n PhotoInfo,\n CaptureFile,\n CaptureGroup,\n GalleryResponse,\n ServerStatus,\n HealthResponse,\n GalleryEvent,\n} from \"./types/asg\"\n\n// Bluetooth SDK event types host UI subscribes to via engine facades (the\n// BluetoothSdk singleton passthrough itself is internal).\nexport type {PairFailureEvent, GlassesNotReadyEvent} from \"@mentra/bluetooth-sdk\"\n\n// Cloud connection status enum (read model; the connection store is internal).\nexport {WebSocketStatus} from \"./stores/connection\"\n\n// App-list hook layer + pure list helpers (the raw useAppStatusStore and\n// installAppStoreHooks wiring are internal).\nexport {\n DUMMY_APPLET,\n saveAppsOrder,\n getAppsOrder,\n sortAppsByPackageNamePriority,\n saveLastOpenTime,\n getLastOpenTime,\n sortAppsByLastOpenTime,\n useApps,\n useStart,\n useStop,\n useSetForeground,\n useClearForeground,\n useRefresh,\n useStopAll,\n useInstall,\n useUninstall,\n useActiveApps,\n useActiveBackgroundApps,\n useBackgroundApps,\n useActiveForegroundApp,\n useForegroundApp,\n useActiveBackgroundAppsCount,\n useLocalMiniApps,\n type StartOptions,\n type OrderMap,\n} from \"./stores/apps\"\n\n// Pure dev-miniapp launch-route decision (registration itself is internal).\nexport {\n decideDevLaunchRoute,\n type DecideDevLaunchOptions,\n type DevLaunchResult,\n type DevManifest,\n} from \"./utils/devMiniappLaunch\"\nexport {\n decideDevOpenRoute,\n type DevOpenDecision,\n} from \"./utils/devMiniappSnapshot\"\nexport {HardwareCompatibility, type CompatibilityResult} from \"./utils/hardware\"\nexport {BgTimer, throttle, debounce} from \"./utils/timers\"\n\n// Hardware types and capability profiles.\nexport {\n HardwareType,\n HardwareRequirementLevel,\n DeviceTypes,\n ControllerTypes,\n HARDWARE_CAPABILITIES,\n getModelCapabilities,\n simulatedGlasses,\n evenRealitiesG1,\n evenRealitiesG2,\n mentraLive,\n nimo,\n vuzixZ100,\n mentraDisplay,\n} from \"./types\"\nexport type {\n HardwareRequirement,\n CameraCapabilities,\n DisplayCapabilities,\n MicrophoneCapabilities,\n SpeakerCapabilities,\n IMUCapabilities,\n ButtonCapabilities,\n LightCapabilities,\n PowerCapabilities,\n Capabilities,\n AppletType,\n AppPermissionType,\n AppletPermission,\n AppletInterface,\n ClientApp,\n} from \"./types\"\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,2EAA2E;AAC3E,OAAO,EAAC,MAAM,EAAC,MAAM,UAAU,CAAA;AA2B/B,2EAA2E;AAC3E,6EAA6E;AAC7E,yEAAyE;AACzE,qEAAqE;AACrE,kDAAkD;AAClD,OAAO,EAAC,QAAQ,EAAE,UAAU,EAAC,MAAM,mBAAmB,CAAA;AACtD,OAAO,EAAC,wBAAwB,EAAE,gCAAgC,EAAC,MAAM,+BAA+B,CAAA;AAExG,8CAA8C;AAC9C,OAAO,EAAC,oBAAoB,EAAC,MAAM,kBAAkB,CAAA;AAGrD,2DAA2D;AAC3D,OAAO,EACL,kBAAkB,EAClB,cAAc,EACd,sBAAsB,EACtB,mBAAmB,GAGpB,MAAM,6BAA6B,CAAA;AACpC,yEAAyE;AACzE,OAAO,EACL,eAAe,EACf,yBAAyB,GAI1B,MAAM,kCAAkC,CAAA;AAazC,uEAAuE;AACvE,2DAA2D;AAC3D,OAAO,EACL,wBAAwB,EACxB,WAAW,EACX,iBAAiB,EACjB,mBAAmB,EACnB,yBAAyB,EACzB,sBAAsB,EACtB,qBAAqB,EACrB,gBAAgB,EAChB,sBAAsB,EACtB,sBAAsB,EACtB,mBAAmB,GACpB,MAAM,6BAA6B,CAAA;AACpC,OAAO,EAAC,kBAAkB,EAAC,MAAM,4BAA4B,CAAA;AAW7D,OAAO,EACL,iBAAiB,EACjB,8BAA8B,EAC9B,oBAAoB,EACpB,uBAAuB,EACvB,kCAAkC,EAClC,gBAAgB,EAChB,sBAAsB,EACtB,yBAAyB,EACzB,mCAAmC,GACpC,MAAM,yBAAyB,CAAA;AAEhC,OAAO,EACL,2BAA2B,EAC3B,uCAAuC,EACvC,sBAAsB,EACtB,0BAA0B,EAC1B,kCAAkC,EAClC,2BAA2B,EAC3B,kBAAkB,EAClB,eAAe,EACf,uCAAuC,EACvC,yCAAyC,GAC1C,MAAM,4BAA4B,CAAA;AAMnC,OAAO,EAAC,uBAAuB,EAAC,MAAM,6CAA6C,CAAA;AACnF,OAAO,EAAC,wBAAwB,EAAC,MAAM,wCAAwC,CAAA;AAe/E,+EAA+E;AAC/E,OAAO,EAAC,eAAe,EAAC,MAAM,qBAAqB,CAAA;AAEnD,yEAAyE;AACzE,6CAA6C;AAC7C,OAAO,EACL,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,6BAA6B,EAC7B,gBAAgB,EAChB,eAAe,EACf,sBAAsB,EACtB,OAAO,EACP,QAAQ,EACR,OAAO,EACP,gBAAgB,EAChB,kBAAkB,EAClB,UAAU,EACV,UAAU,EACV,UAAU,EACV,YAAY,EACZ,aAAa,EACb,uBAAuB,EACvB,iBAAiB,EACjB,sBAAsB,EACtB,gBAAgB,EAChB,4BAA4B,EAC5B,gBAAgB,GAGjB,MAAM,eAAe,CAAA;AAEtB,4EAA4E;AAC5E,OAAO,EACL,oBAAoB,GAIrB,MAAM,0BAA0B,CAAA;AACjC,OAAO,EACL,kBAAkB,GAEnB,MAAM,4BAA4B,CAAA;AACnC,OAAO,EAAC,qBAAqB,EAA2B,MAAM,kBAAkB,CAAA;AAChF,OAAO,EAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAC,MAAM,gBAAgB,CAAA;AAC1D,OAAO,EAAC,OAAO,IAAI,eAAe,EAAE,mBAAmB,EAAC,MAAM,4BAA4B,CAAA;AAG1F,0CAA0C;AAC1C,OAAO,EACL,YAAY,EACZ,wBAAwB,EACxB,WAAW,EACX,eAAe,EACf,qBAAqB,EACrB,oBAAoB,EACpB,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,UAAU,EACV,IAAI,EACJ,SAAS,EACT,aAAa,GACd,MAAM,SAAS,CAAA","sourcesContent":["/**\n * `@mentra/engine` — the OEM-facing main entry.\n *\n * The `engine` namespace (configure/start/stop + typed domain facades), the\n * public contract/read-model types, and the pure helpers host UI legitimately\n * renders with (decision functions, sort/order helpers, policy constants,\n * capability tables, timers). Judgment rule: read models, commands, pure\n * functions and types belong here; anything that mutates runtime state or\n * exposes a raw store/service remains private to the MentraOS host.\n * See cloud-v2/docs/issues/020-glasses-status-boundary/integration-review.md §D.\n */\n\n// The namespaced OEM-facing engine API (the \"(A) host API\"). See ./engine.\nexport {engine} from \"./engine\"\nexport type {\n ReportAttachmentInput,\n ReportContext,\n ReportDetails,\n ReportStatus,\n ReportTrigger,\n ReportSubmitResult,\n EngineSubmitReportInput,\n} from \"./facades/reports\"\nexport type {IslandNotification, IslandNotificationKind} from \"./facades/notifications\"\nexport type {WifiSearchResult} from \"./facades/glassesWifi\"\nexport type {IdentitySnapshot} from \"./services/PairingIdentity\"\nexport type {DisplayMirrorEvent} from \"./facades/displayMirror\"\nexport type {\n IslandConfigureOptions,\n IslandAuth,\n IslandConfigValues,\n IslandAnalytics,\n IslandUiSeams,\n ScanQrOptions,\n ScanQrResult,\n SubjectTokenType,\n LocalMiniappPolicy,\n ManagedMiniappPolicyEntry,\n} from \"./runtime/bootstrap\"\n\n// Settings contract: the typed key registry (schema descriptors — the same\n// surface engine.settings.descriptor()/keys() reads), the per-key React hook\n// (the hook layer, same precedent as the apps hooks below), and the pure\n// device-model key helpers. The raw useSettingsStore stays internal;\n// imperative access goes through engine.settings.\nexport {SETTINGS, useSetting} from \"./stores/settings\"\nexport {MENTRA_LIVE_SETTING_KEYS, getBluetoothSettingKeysForDevice} from \"./stores/bluetoothSettingKeys\"\n\n// Runtime-shared constants and contract DTOs.\nexport {ISLAND_SETTINGS_KEYS} from \"./runtime/config\"\nexport type {CloudClientStatusSnapshot, MiniappAuthToken, InteropAuditEvent, TtsSynthesisResult} from \"./runtime/config\"\n\n// Pure readiness predicates over glasses connection state.\nexport {\n isGlassesConnected,\n isGlassesReady,\n isGlassesLinkLayerBusy,\n waitForGlassesReady,\n type GlassesConnectionStatus,\n type WaitForGlassesReadyOptions,\n} from \"./services/GlassesReadiness\"\n// Pure connect/reconnect decision helpers (host UI renders the outcome).\nexport {\n decideReconnect,\n decideConnectButtonAction,\n type ReconnectDecision,\n type ReconnectDecisionInput,\n type ConnectButtonAction,\n} from \"./services/ConnectionCoordinator\"\n\n// OTA read-model types for host OTA UI (progress screen, error mapping,\n// progress section) — the check/install machinery itself is internal.\nexport type {\n VersionInfo,\n MtkPatch,\n BesFirmware,\n VersionJson,\n OtaCheckResult,\n OtaCheckCurrentGlassesResult,\n OtaCheckCurrentGlassesOptions,\n} from \"./services/OtaUpdateCheckService\"\n// OTA install policy (watchdog timings + failure copy) + display-state\n// derivation, consumed by the OTA screens and their tests.\nexport {\n MINIMUM_OTA_STATUS_BUILD,\n MAX_RETRIES,\n RETRY_INTERVAL_MS,\n PROGRESS_TIMEOUT_MS,\n DOWNLOAD_STUCK_TIMEOUT_MS,\n MTK_INSTALL_TIMEOUT_MS,\n GLOBAL_OTA_TIMEOUT_MS,\n PING_INTERVAL_MS,\n QUERY_REPLY_TIMEOUT_MS,\n BES_RESTART_TIMEOUT_MS,\n OtaProgressMessages,\n} from \"./services/otaInstallPolicy\"\nexport {deriveDisplayState} from \"./services/otaDisplayState\"\nexport type {DisplayState} from \"./services/otaDisplayState\"\nexport type {\n OtaProgress,\n OtaProgressStatus,\n OtaStatus,\n OtaUpdateInfo,\n ReleaseChangelog,\n OtaSnapshot,\n OtaInstallSnapshot,\n} from \"./facades/ota\"\nexport {\n beginOtaAutoChain,\n clearOtaAutoChainReconnectWait,\n isOtaAutoChainActive,\n otaAutoChainFingerprint,\n otaAutoChainReconnectWaitRemaining,\n stopOtaAutoChain,\n tryAdvanceOtaAutoChain,\n MAX_OTA_AUTO_CHAIN_PASSES,\n OTA_AUTO_CHAIN_RECONNECT_TIMEOUT_MS,\n} from \"./services/OtaAutoChain\"\nexport type {OtaAutoChainAdvanceResult} from \"./services/OtaAutoChain\"\nexport {\n BES_INSTALL_RESTART_MESSAGE,\n OTA_ERROR_BES_RESTART_REQUIRED_COPY_KEY,\n OTA_ERROR_ENGLISH_COPY,\n OTA_ERROR_GENERIC_COPY_KEY,\n OTA_ERROR_UNKNOWN_GLASSES_COPY_KEY,\n OTA_GLASSES_ERROR_COPY_KEYS,\n getOtaErrorMessage,\n otaErrorCopyKey,\n shouldRequireGlassesRebootForBesFailure,\n shouldShowChangeWifiForOtaDownloadFailure,\n} from \"./services/OtaErrorMapping\"\n\n// Gallery read models: engine.gallery.onNotice payload types, the media\n// permission helper + display-name derivation host gallery UI uses, and the\n// glasses-camera DTO types (re-exported through the host @/types/asg shim).\nexport type {GalleryNotice, GalleryNoticeCode} from \"./services/asg/galleryNotices\"\nexport {MediaLibraryPermissions} from \"./utils/permissions/MediaLibraryPermissions\"\nexport {deriveGalleryDisplayName} from \"./utils/permissions/galleryDisplayName\"\nexport type {\n PhotoInfo,\n CaptureFile,\n CaptureGroup,\n GalleryResponse,\n ServerStatus,\n HealthResponse,\n GalleryEvent,\n} from \"./types/asg\"\n\n// Bluetooth SDK event types host UI subscribes to via engine facades (the\n// BluetoothSdk singleton passthrough itself is internal).\nexport type {PairFailureEvent, GlassesNotReadyEvent} from \"@mentra/bluetooth-sdk\"\n\n// Cloud connection status enum (read model; the connection store is internal).\nexport {WebSocketStatus} from \"./stores/connection\"\n\n// App-list hook layer + pure list helpers (the raw useAppStatusStore and\n// installAppStoreHooks wiring are internal).\nexport {\n DUMMY_APPLET,\n saveAppsOrder,\n getAppsOrder,\n sortAppsByPackageNamePriority,\n saveLastOpenTime,\n getLastOpenTime,\n sortAppsByLastOpenTime,\n useApps,\n useStart,\n useStop,\n useSetForeground,\n useClearForeground,\n useRefresh,\n useStopAll,\n useInstall,\n useUninstall,\n useActiveApps,\n useActiveBackgroundApps,\n useBackgroundApps,\n useActiveForegroundApp,\n useForegroundApp,\n useActiveBackgroundAppsCount,\n useLocalMiniApps,\n type StartOptions,\n type OrderMap,\n} from \"./stores/apps\"\n\n// Pure dev-miniapp launch-route decision (registration itself is internal).\nexport {\n decideDevLaunchRoute,\n type DecideDevLaunchOptions,\n type DevLaunchResult,\n type DevManifest,\n} from \"./utils/devMiniappLaunch\"\nexport {\n decideDevOpenRoute,\n type DevOpenDecision,\n} from \"./utils/devMiniappSnapshot\"\nexport {HardwareCompatibility, type CompatibilityResult} from \"./utils/hardware\"\nexport {BgTimer, throttle, debounce} from \"./utils/timers\"\nexport {default as glassesMicProbe, parseMicProbeParams} from \"./services/GlassesMicProbe\"\nexport type {MicProbeA2dpMode, MicProbeOptions, MicProbeSample} from \"./services/GlassesMicProbe\"\n\n// Hardware types and capability profiles.\nexport {\n HardwareType,\n HardwareRequirementLevel,\n DeviceTypes,\n ControllerTypes,\n HARDWARE_CAPABILITIES,\n getModelCapabilities,\n simulatedGlasses,\n evenRealitiesG1,\n evenRealitiesG2,\n mentraLive,\n nimo,\n vuzixZ100,\n mentraDisplay,\n} from \"./types\"\nexport type {\n HardwareRequirement,\n CameraCapabilities,\n DisplayCapabilities,\n MicrophoneCapabilities,\n SpeakerCapabilities,\n IMUCapabilities,\n ButtonCapabilities,\n LightCapabilities,\n PowerCapabilities,\n Capabilities,\n AppletType,\n AppPermissionType,\n AppletPermission,\n AppletInterface,\n ClientApp,\n} from \"./types\"\n"]}
@@ -3,7 +3,8 @@
3
3
  * WHEP + ACS; this service maps that into miniapp envelopes and pipes
4
4
  * incoming PCM into AudioPlaybackService (A2DP / PcmStreamPlayer).
5
5
  */
6
- import { ACS_CALL_MIC, type ResolvedAudioSource, type SourceReason } from "./acsAudioSource";
6
+ import { ACS_CALL_MIC, type AcsAudioSource, type ResolvedAudioSource, type SourceReason } from "./acsAudioSource";
7
+ import type { SoftapProgress } from "./SoftapCallTransport";
7
8
  export { ACS_CALL_MIC };
8
9
  export type { ResolvedAudioSource, SourceReason };
9
10
  type MeetingPhase = "idle" | "connecting" | "lobby" | "connected" | "disconnected" | "error";
@@ -15,6 +16,17 @@ export type ActiveStream = "none" | "virtual" | "local";
15
16
  * networks); the ACS call itself may still be `connected` with a frozen last frame.
16
17
  */
17
18
  export type MediaSourceState = "idle" | "connecting" | "live" | "failed";
19
+ /**
20
+ * How the wearer's voice is reaching ACS.
21
+ *
22
+ * `ble-lc3` is the glasses microphone over Bluetooth, decoded on the phone and pushed into the ACS
23
+ * raw outgoing stream. `whip` is the glasses microphone on the WebRTC track they publish (SoftAP or
24
+ * Cloudflare). `phone` is the phone's own microphone. `none` means the source we committed to went
25
+ * away mid-call, which is a reportable failure rather than a reason to open a different microphone.
26
+ */
27
+ export type MicTransport = "ble-lc3" | "whip" | "phone" | "none";
28
+ /** Error surfaced when the pinned glasses microphone stops producing audio during a call. */
29
+ export declare const GLASSES_MIC_UNAVAILABLE = "GLASSES_MIC_UNAVAILABLE";
18
30
  export type MeetingParticipantState = "idle" | "connecting" | "connected" | "lobby" | "hold" | "disconnected";
19
31
  export interface MeetingParticipant {
20
32
  id: string;
@@ -23,6 +35,22 @@ export interface MeetingParticipant {
23
35
  isMuted: boolean;
24
36
  isSpeaking: boolean;
25
37
  }
38
+ /**
39
+ * One runtime participant capability.
40
+ *
41
+ * `allowed` is nullable because "denied" and "not known yet" are different facts. ACS delivers
42
+ * capabilities asynchronously, so every call is briefly unknown, and collapsing that into `false`
43
+ * would hide controls on calls that do in fact permit them.
44
+ */
45
+ export interface MeetingCapability {
46
+ allowed: boolean | null;
47
+ reason: string | null;
48
+ }
49
+ export interface MeetingCapabilities {
50
+ /** Whether this participant may end the Teams group call for everyone. Presenters only. */
51
+ hangUpForEveryone: MeetingCapability;
52
+ }
53
+ export declare function parseMeetingCapabilities(raw: unknown): MeetingCapabilities | undefined;
26
54
  export interface MeetingState {
27
55
  state: MeetingPhase;
28
56
  muted: boolean;
@@ -35,15 +63,42 @@ export interface MeetingState {
35
63
  audioSafety?: AudioSafety;
36
64
  mediaSource?: MediaSourceState;
37
65
  participants?: MeetingParticipant[];
66
+ /** Runtime capabilities. Omitted by natives that predate them; read that as unknown. */
67
+ capabilities?: MeetingCapabilities;
68
+ /** Which microphone path is carrying the wearer's voice, decided at join time. */
69
+ micTransport?: MicTransport;
70
+ /**
71
+ * SoftAP join checklist, attached only to the state events the SoftAP orchestrator emits while
72
+ * it walks hotspot → scoped join → ACS join → publish → live. Native ACS events never carry it,
73
+ * so a consumer keeps the last one it saw rather than treating its absence as a reset.
74
+ */
75
+ softap?: SoftapProgress;
38
76
  }
39
77
  /**
40
- * The call microphone is [ACS_CALL_MIC]. Flip that constant to `"glasses"`
41
- * to restore glasses WHIP → Cloudflare → WHEP PCM. Do not use ACS
42
- * LocalOutgoingAudioStream for phone: that path makes ACS own the route
78
+ * The call microphone is [ACS_CALL_MIC], and `preferred_mic` governs MentraOS STT capture rather
79
+ * than this call.
80
+ *
81
+ * `"glasses"` selects the wearer's own microphone. Which *transport* carries it is a separate
82
+ * decision made per call by [glassesLc3UplinkSupported]: BLE LC3 into the ACS raw outgoing stream
83
+ * where the host and native both support it, otherwise the glasses' published WebRTC audio track.
84
+ * `"phone"` selects the phone's microphone via `PhoneMicCapturer`; do not route it through ACS
85
+ * `LocalOutgoingAudioStream`, because that hands ACS the audio route
43
86
  * (MODE_IN_COMMUNICATION + forced speaker) and opens an echo loop.
44
- * preferred_mic governs MentraOS STT capture, not this call.
45
87
  */
46
88
  export declare function resolveAcsAudioSource(): ResolvedAudioSource;
89
+ /**
90
+ * SoftAP video (camera → H.264 → WHIP → WHEP → ACS) is slower than BLE LC3.
91
+ * Hold glasses PCM this long so the talk track does not lead the picture.
92
+ * Set from SoftAP+LC3 clap correlator (2026-09-10): leads 70/201/173/300/142 ms,
93
+ * median 173, rounded to 170. `AVSYNC clap audioLeadMs` is still the re-cal.
94
+ */
95
+ export declare const SOFTAP_LC3_AUDIO_DELAY_MS = 170;
96
+ export declare function glassesLc3UplinkSupported(args: {
97
+ videoSource: AcsVideoSource;
98
+ audioSource: AcsAudioSource;
99
+ hasPushOutgoingPcm: boolean;
100
+ platform: string;
101
+ }): boolean;
47
102
  export declare function parseMeetingParticipants(raw: unknown): MeetingParticipant[] | undefined;
48
103
  export type AcsOutgoingVideo = {
49
104
  width: number;
@@ -52,29 +107,131 @@ export type AcsOutgoingVideo = {
52
107
  maxBitrateBps: number;
53
108
  };
54
109
  export declare function parseAcsOutgoingVideo(raw: unknown): AcsOutgoingVideo | undefined;
110
+ /**
111
+ * Where the glasses video comes from.
112
+ *
113
+ * A union rather than a nullable URL because the two transports need different inputs: WHEP is
114
+ * given a URL, while SoftAP produces one only after the host binds a local listener. Collapsing
115
+ * them into `whepUrl?: string` is what lets an empty string reach the subscriber and fail seconds
116
+ * later as an opaque HTTP error.
117
+ */
118
+ export type AcsVideoSource = {
119
+ type: "whep";
120
+ url: string;
121
+ } | {
122
+ type: "softap";
123
+ ssid?: string;
124
+ passphrase?: string;
125
+ bindAddress?: string;
126
+ };
127
+ /**
128
+ * Validates a `videoSource` from a miniapp.
129
+ *
130
+ * Throws rather than defaulting to WHEP. A miniapp that asks for SoftAP and silently gets a
131
+ * Cloudflare call — or vice versa — is a bug that shows up as unexplained latency or a black tile,
132
+ * not as an error anyone can act on.
133
+ */
134
+ export declare function parseAcsVideoSource(raw: unknown): AcsVideoSource;
135
+ /**
136
+ * The app's default network after a hotspot join.
137
+ *
138
+ * `usable` is the only field to branch on; the rest is for the note the wearer sees and the trace.
139
+ * A held cellular request brings the radio up but does not promise the default route has switched
140
+ * or validated, so this is asked separately rather than inferred from the hold.
141
+ */
142
+ export interface DefaultNetworkStatus {
143
+ transport: string;
144
+ validated: boolean;
145
+ present: boolean;
146
+ usable: boolean;
147
+ detail: string;
148
+ }
55
149
  type NativeModule = {
150
+ prepareAgent?(options: {
151
+ token: string;
152
+ displayName?: string;
153
+ }): Promise<MeetingState>;
56
154
  join(options: {
57
155
  meetingUrl: string;
58
156
  token: string;
157
+ /** Legacy field, still sent for whep so an older native keeps working. */
59
158
  whepUrl: string;
159
+ videoSource: AcsVideoSource;
60
160
  displayName?: string;
61
161
  dumpPcmWav?: boolean;
62
162
  audioSource?: "glasses" | "phone";
163
+ audioDelayMs?: number;
63
164
  video?: AcsOutgoingVideo;
64
- }): Promise<MeetingState>;
165
+ }): Promise<MeetingState & {
166
+ ingestUrl?: string;
167
+ }>;
65
168
  leave(): Promise<void>;
169
+ /**
170
+ * Leave, and resolve only once the hang-up, the agent disposal, and the network releases have
171
+ * actually finished.
172
+ *
173
+ * [leave] queues its work on the session executor and returns immediately, so awaiting it proves
174
+ * nothing about cleanup — which is what let a fast Stop/Start start a second call on top of the
175
+ * first one's teardown. Absent on natives that predate the signal.
176
+ */
177
+ leaveAndAwait?(options: {
178
+ timeoutMs: number;
179
+ }): Promise<{
180
+ completed: boolean;
181
+ }>;
182
+ /**
183
+ * End the group call for everyone, then tear this device down. Rejects when the capability is
184
+ * denied or ACS refuses — and has still left the call. Absent on natives that predate End.
185
+ */
186
+ endForEveryone?(): Promise<MeetingState>;
66
187
  setMuted(muted: boolean): Promise<MeetingState>;
67
188
  setAudioSource(source: "glasses" | "phone"): Promise<MeetingState>;
68
189
  updateVideoSource(whepUrl: string): Promise<void>;
69
190
  /** Force a WHEP rebuild on the current URL. Absent on natives that predate it. */
70
191
  restartVideoSource?(): Promise<void>;
192
+ /**
193
+ * Join the glasses hotspot as a scoped, internet-less network; resolves with this phone's
194
+ * address on it. Absent on natives that predate SoftAP, and rejects on iOS.
195
+ */
196
+ joinScopedNetwork?(ssid: string, passphrase: string): Promise<string>;
197
+ beginTrace?(traceId: string): Promise<void>;
198
+ leaveScopedNetwork?(): Promise<void>;
199
+ /**
200
+ * TCP-probe the hotspot gateway over the scoped network. Absent on natives that predate it.
201
+ * `detail` is a one-line human summary (address, port, latency or the failure).
202
+ */
203
+ probeScopedGateway?(): Promise<{
204
+ reachable: boolean;
205
+ detail: string;
206
+ }>;
207
+ /** The joined hotspot: `prefix` is what the media path must stay inside. */
208
+ scopedNetworkInfo?(): Promise<{
209
+ available: boolean;
210
+ localIpv4: string | null;
211
+ prefix: string | null;
212
+ }>;
213
+ /**
214
+ * Wait for the app's default network to be validated, after the hotspot join changed it.
215
+ * Absent on natives that predate the cellular transition handling.
216
+ */
217
+ awaitValidatedDefaultNetwork?(): Promise<DefaultNetworkStatus>;
71
218
  getState(): Promise<MeetingState>;
219
+ /**
220
+ * Hand one chunk of already-decoded microphone PCM to the ACS uplink. Synchronous on purpose:
221
+ * this runs ~100×/s and a promise per chunk would cost more than the copy does.
222
+ *
223
+ * Absent on natives that predate the BLE LC3 uplink, which is exactly what
224
+ * [glassesLc3UplinkSupported] tests for.
225
+ */
226
+ pushOutgoingPcm?(base64: string, sampleRate: number, channels: number): void;
72
227
  addListener(event: string, listener: (event: Record<string, unknown>) => void): {
73
228
  remove: () => void;
74
229
  };
75
230
  };
76
231
  /** Test seam: skip the native require and inject a fake ACS module. */
77
232
  export declare function setAcsMeetingNativeForTests(mod: NativeModule | null | undefined): void;
233
+ /** Test seam: exercise the BLE LC3 path without flipping the production kill switch. */
234
+ export declare function setSoftapBleLc3UplinkForTests(enabled: boolean | null): void;
78
235
  /**
79
236
  * Phone connectivity feed. Only the subset of `@react-native-community/netinfo`
80
237
  * this service needs, so tests can inject a fake and hosts without the package
@@ -90,6 +247,15 @@ type PhoneNetworkSource = {
90
247
  };
91
248
  /** Test seam: inject a fake phone-network feed (or `null` to disable it). */
92
249
  export declare function setAcsMeetingPhoneNetworkForTests(source: PhoneNetworkSource | null | undefined): void;
250
+ /**
251
+ * Encode one microphone buffer for `pushOutgoingPcm`.
252
+ *
253
+ * Hermes has no Node `Buffer`. Using it here is how a live SoftAP call selected `ble-lc3`,
254
+ * pinned the glasses, and still sent Teams a minute of silence: every `mic_pcm` event threw
255
+ * `Property 'Buffer' doesn't exist` before native saw a byte. `btoa` is what React Native
256
+ * actually has.
257
+ */
258
+ export declare function pcmToBase64(pcm: ArrayBuffer): string;
93
259
  declare class AcsMeetingService {
94
260
  private owner;
95
261
  private pcmStreamId;
@@ -102,26 +268,210 @@ declare class AcsMeetingService {
102
268
  private onState;
103
269
  /** WHEP URL native is (or should be) subscribed to; what a host-triggered restart re-feeds. */
104
270
  private whepUrl;
271
+ /** Transport for the active call, so recovery picks the right repair. */
272
+ private videoSource;
273
+ /**
274
+ * SoftAP only: the URL the glasses must publish to. An output of the join rather than an input,
275
+ * because it is not known until native has bound a listener and been given a port.
276
+ */
277
+ private ingestUrl;
105
278
  private phoneNetworkUnsub;
106
279
  private lastPhoneNetworkKey;
107
280
  private lastMediaRestartAt;
281
+ /** Callers parked in [waitForFirstFrame], woken by the next `mediaSource` verdict. */
282
+ private readonly firstFrameWaiters;
283
+ private scopedLostSub;
284
+ private readonly scopedLostListeners;
285
+ /**
286
+ * Set before the scoped network is released, so the loss we are about to cause is not reported as
287
+ * one that happened to us. Android emits `onLost` for a deliberate release, and a naive wiring
288
+ * turns every successful Leave and End into a mid-call network error.
289
+ */
290
+ private scopedTerminating;
291
+ /**
292
+ * Bumped by every join and every release, and captured by everything that can outlive a call:
293
+ * the `mic_pcm` listener and the in-flight `native.join`.
294
+ *
295
+ * A leave during a slow join is the case this exists for. Without it the join resolves into a
296
+ * torn-down host, subscribes a microphone listener nobody will ever unsubscribe, and pushes the
297
+ * wearer's voice at a native session that has already left the meeting.
298
+ */
299
+ private callGeneration;
300
+ private micTransport;
301
+ private micSub;
302
+ /** True between the pin/requirement being taken and released, so release is exactly once. */
303
+ private micUplinkActive;
304
+ private micFramesForwarded;
305
+ /** Frames since the last health line, so the rate and the call total stay separate facts. */
306
+ private micFramesWindow;
307
+ private micDropsStale;
308
+ private micDropsNonGlasses;
309
+ private micGaps;
310
+ private micGapMsMax;
311
+ private lastGlassesFrameAt;
312
+ private lastMicUplinkLogAt;
313
+ private lastMicDropLogAt;
314
+ /** PCM level over the current health window; read and reset by [logMicUplink]. */
315
+ private micLevel;
316
+ private lastMicLevel;
317
+ /** Guards [releaseHostState] so a remote hang-up followed by an explicit leave releases once. */
318
+ private hostStateReleased;
108
319
  setStateHandler(handler: (packageName: string, state: MeetingState) => void): void;
109
320
  getState(): MeetingState;
110
321
  ownerPackage(): string | null;
322
+ /**
323
+ * The WHIP URL the glasses must POST their offer to, for a SoftAP call. Null for every other
324
+ * transport and until the join has bound a listener; the orchestrator reads it between the ACS
325
+ * join and telling the glasses to publish.
326
+ */
327
+ softApIngestUrl(): string | null;
328
+ /**
329
+ * Whether this call is taking the wearer's voice over BLE LC3, which means the glasses must
330
+ * publish video only. Read by the SoftAP orchestrator between the meeting join and the publish.
331
+ */
332
+ glassesLc3UplinkActive(): boolean;
333
+ /**
334
+ * Join the glasses hotspot as a scoped, internet-less network, returning this phone's address on
335
+ * it. Called before the ACS join, because the local WHIP listener has to bind to that address.
336
+ *
337
+ * A host without the native function is not a host that silently skips the join — the SoftAP call
338
+ * has no network to run on, so this reports the reason instead.
339
+ */
340
+ joinScopedNetwork(ssid: string, passphrase: string): Promise<string | undefined>;
341
+ /**
342
+ * Subscribe to "the glasses hotspot went away while we still wanted it".
343
+ *
344
+ * Only unexpected losses arrive here. Native drops the framework callback for a network it
345
+ * released itself, and [leaveScopedNetwork] raises the terminal intent before releasing, so a
346
+ * normal Leave or End cannot manufacture a mid-call failure.
347
+ */
348
+ onScopedNetworkLost(listener: (error: {
349
+ code: string;
350
+ message: string;
351
+ }) => void): () => void;
352
+ private bindScopedNetworkLost;
353
+ /** Raise the terminal intent so the release we are about to do is not read as a failure. */
354
+ beginScopedTeardown(): void;
355
+ /**
356
+ * Wait until the phone's default network is validated again after the hotspot join.
357
+ *
358
+ * Joining the glasses hotspot takes the phone off Wi-Fi, and ACS needs the internet for the very
359
+ * next step. Waiting is what turns a 40-second join timeout with device-wide DNS failures into a
360
+ * short, named wait — or an honest failure. Null when the host cannot tell.
361
+ */
362
+ awaitValidatedDefaultNetwork(): Promise<DefaultNetworkStatus | null>;
363
+ /**
364
+ * Can this phone reach the glasses over the hotspot it just joined? Null when the host cannot
365
+ * tell (no native support), so the orchestrator narrates nothing rather than a guess.
366
+ */
367
+ probeScopedGateway(): Promise<{
368
+ reachable: boolean;
369
+ detail: string;
370
+ } | null>;
371
+ /** Safe to call when nothing was joined: teardown runs after failed starts too. */
372
+ leaveScopedNetwork(): Promise<void>;
373
+ /**
374
+ * Resolves once the host reports a frame actually reached ACS, which is the only signal that
375
+ * remote participants can see the camera.
376
+ *
377
+ * Rejects if the feed fails first, and on timeout. A SoftAP call that connects but never paints
378
+ * is the failure this exists to catch: without it the orchestrator would report `live` on the
379
+ * strength of an ACS join that says nothing about video.
380
+ *
381
+ * @param timeoutMs how long to wait before treating the silence as a failure
382
+ */
383
+ waitForFirstFrame(timeoutMs: number): Promise<void>;
384
+ /** Wake every `waitForFirstFrame` caller with the outcome the host just reported. */
385
+ private settleFirstFrameWaiters;
386
+ /**
387
+ * Sign in to ACS before the glasses hotspot exists.
388
+ *
389
+ * SoftAP DNS cannot resolve Teams hosts. Doing this on the phone's existing internet is what
390
+ * stops `createCallAgent` from hanging until the hotspot is torn down.
391
+ */
392
+ prepareAgent(args: {
393
+ token: string;
394
+ displayName?: string;
395
+ }): Promise<void>;
111
396
  join(packageName: string, args: {
112
397
  meetingUrl: string;
113
398
  token: string;
114
- whepUrl: string;
399
+ videoSource: AcsVideoSource;
115
400
  displayName?: string;
116
401
  video?: AcsOutgoingVideo;
117
402
  }): Promise<MeetingState>;
118
403
  leave(packageName: string): Promise<void>;
119
404
  /**
120
- * Drop everything the host set up around a session: the network watcher, return
121
- * audio, native listeners, ownership. Runs after native has been told to leave
122
- * (or after a join that never produced a native call).
405
+ * Leave, and do not resolve until native reports its cleanup is finished.
406
+ *
407
+ * The difference from [leave] is the whole point: native's `leave()` queues the hang-up, the
408
+ * agent disposal, and the network releases on its session executor and returns straight away, so
409
+ * a caller that awaits it and then starts the next call is racing the previous one's teardown.
410
+ *
411
+ * Falls back to [leave] on builds that predate the signal and says so, rather than pretending to
412
+ * a guarantee it cannot give.
413
+ *
414
+ * @param timeoutMs how long native may take before it reports the cleanup as stuck
415
+ */
416
+ leaveAndAwait(packageName: string, timeoutMs?: number): Promise<{
417
+ completed: boolean;
418
+ reason?: string;
419
+ }>;
420
+ /**
421
+ * End the Teams group call for everyone.
422
+ *
423
+ * Host state is released either way: native tears this device down whatever the hang-up did, so
424
+ * holding the meeting slot open after a rejection would leave the miniapp unable to start another
425
+ * call. The rejection still propagates — the caller has to be able to say "you left, but the
426
+ * meeting may still be active" instead of claiming a clean end.
427
+ */
428
+ endForEveryone(packageName: string): Promise<MeetingState>;
429
+ /** Whether the wearer may end this meeting for everyone, as ACS last reported it. */
430
+ hangUpForEveryoneCapability(): MeetingCapability;
431
+ /**
432
+ * Drop everything the host set up around a session: the microphone uplink, the network watcher,
433
+ * return audio, native listeners, ownership.
434
+ *
435
+ * Idempotent, because there are now several terminal paths into it and they overlap. A remote
436
+ * hang-up arrives as a native `disconnected`, and the miniapp usually calls `leave` right after
437
+ * seeing it; releasing the microphone pin twice would clear a pin the *next* call had already
438
+ * taken. Every release also bumps the call generation, which is what stops a `mic_pcm` event
439
+ * already queued on the JS thread from reaching a native session that is gone.
123
440
  */
124
441
  private releaseHostState;
442
+ /**
443
+ * Start forwarding the glasses microphone into ACS for this call.
444
+ *
445
+ * Order matters and is the whole point: pin the Bluetooth SDK to the glasses *before* asking it
446
+ * for PCM, so the first frame the mic requirement produces is already from the right source and
447
+ * the phone microphone is never opened even for one buffer. `generation` is captured by the
448
+ * listener so a frame that lands after this call ended is dropped rather than pushed at a native
449
+ * session that has left the meeting.
450
+ */
451
+ private startGlassesMicUplink;
452
+ /** Release the microphone claims this call took. Safe to call when it never took them. */
453
+ private stopGlassesMicUplink;
454
+ /**
455
+ * Report a call whose pinned microphone stopped delivering. There is deliberately no fallback:
456
+ * the wearer agreed to be heard from the glasses, and quietly switching to the phone in the
457
+ * middle of a meeting puts the room they are standing in on the call.
458
+ */
459
+ private reportGlassesMicUnavailable;
460
+ /**
461
+ * Record that this call has no wearer audio path.
462
+ *
463
+ * The state has to carry it, not just the field: a call that reported `ble-lc3` and then failed
464
+ * to start the uplink looks identical from the miniapp's side to one that is working, and the
465
+ * wearer finds out by being asked to repeat themselves.
466
+ */
467
+ private markMicTransportNone;
468
+ private logMicUplink;
469
+ /** Level of the last uplink window, for tests and dev screens. `null` until a window closed. */
470
+ lastGlassesMicLevel(): {
471
+ meanAbs: number;
472
+ peak: number;
473
+ } | null;
474
+ private logMicDrop;
125
475
  setMuted(packageName: string, muted: boolean): Promise<MeetingState>;
126
476
  updateVideoSource(packageName: string, whepUrl: string): Promise<void>;
127
477
  readState(packageName: string): Promise<MeetingState>;
@@ -1 +1 @@
1
- {"version":3,"file":"AcsMeetingService.d.ts","sourceRoot":"","sources":["../../src/services/AcsMeetingService.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AcsMeetingService.d.ts","sourceRoot":"","sources":["../../src/services/AcsMeetingService.ts"],"names":[],"mappings":"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"}