@mentra/sdk 2.1.31-beta.6 → 3.0.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (169) hide show
  1. package/README.md +54 -9
  2. package/dist/MiniAppServer.d.ts +58 -0
  3. package/dist/MiniAppServer.d.ts.map +1 -0
  4. package/dist/app/server/index.d.ts +152 -88
  5. package/dist/app/server/index.d.ts.map +1 -1
  6. package/dist/app/session/events.d.ts +20 -3
  7. package/dist/app/session/events.d.ts.map +1 -1
  8. package/dist/app/session/index.d.ts +56 -3
  9. package/dist/app/session/index.d.ts.map +1 -1
  10. package/dist/app/session/modules/audio-output-stream.d.ts +108 -0
  11. package/dist/app/session/modules/audio-output-stream.d.ts.map +1 -0
  12. package/dist/app/session/modules/audio.d.ts +36 -1
  13. package/dist/app/session/modules/audio.d.ts.map +1 -1
  14. package/dist/app/session/modules/camera-managed-extension.d.ts +37 -33
  15. package/dist/app/session/modules/camera-managed-extension.d.ts.map +1 -1
  16. package/dist/app/session/modules/camera.d.ts +108 -50
  17. package/dist/app/session/modules/camera.d.ts.map +1 -1
  18. package/dist/app/session/modules/index.d.ts +4 -3
  19. package/dist/app/session/modules/index.d.ts.map +1 -1
  20. package/dist/app/session/modules/led.d.ts.map +1 -1
  21. package/dist/app/session/modules/location.d.ts.map +1 -1
  22. package/dist/app/session/settings.d.ts +5 -1
  23. package/dist/app/session/settings.d.ts.map +1 -1
  24. package/dist/app/webview/index.d.ts +67 -9
  25. package/dist/app/webview/index.d.ts.map +1 -1
  26. package/dist/constants/log-messages/updates.d.ts +32 -9
  27. package/dist/constants/log-messages/updates.d.ts.map +1 -1
  28. package/dist/constants/log-messages/warning.d.ts +12 -0
  29. package/dist/constants/log-messages/warning.d.ts.map +1 -1
  30. package/dist/display-utils.d.ts +3 -1
  31. package/dist/display-utils.d.ts.map +1 -1
  32. package/dist/display-utils.js +443 -26
  33. package/dist/display-utils.js.map +10 -6
  34. package/dist/index.d.ts +22 -14
  35. package/dist/index.d.ts.map +1 -1
  36. package/dist/index.js +8824 -4229
  37. package/dist/index.js.map +63 -31
  38. package/dist/internal/_SessionManager.d.ts +76 -0
  39. package/dist/internal/_SessionManager.d.ts.map +1 -0
  40. package/dist/logging/clean-transport.d.ts +50 -0
  41. package/dist/logging/clean-transport.d.ts.map +1 -0
  42. package/dist/logging/errors.d.ts +90 -0
  43. package/dist/logging/errors.d.ts.map +1 -0
  44. package/dist/logging/logger.d.ts +72 -1
  45. package/dist/logging/logger.d.ts.map +1 -1
  46. package/dist/logging/telemetry-transport.d.ts +51 -0
  47. package/dist/logging/telemetry-transport.d.ts.map +1 -0
  48. package/dist/session/DataStreamRouter.d.ts +219 -0
  49. package/dist/session/DataStreamRouter.d.ts.map +1 -0
  50. package/dist/session/MentraSession.d.ts +102 -0
  51. package/dist/session/MentraSession.d.ts.map +1 -0
  52. package/dist/session/index.d.ts +2 -0
  53. package/dist/session/index.d.ts.map +1 -0
  54. package/dist/session/internal/_ConnectionManager.d.ts +43 -0
  55. package/dist/session/internal/_ConnectionManager.d.ts.map +1 -0
  56. package/dist/session/internal/_MessageRouter.d.ts +11 -0
  57. package/dist/session/internal/_MessageRouter.d.ts.map +1 -0
  58. package/dist/session/internal/_SubscriptionManager.d.ts +32 -0
  59. package/dist/session/internal/_SubscriptionManager.d.ts.map +1 -0
  60. package/dist/session/internal/_V2AudioStreamShim.d.ts +12 -0
  61. package/dist/session/internal/_V2AudioStreamShim.d.ts.map +1 -0
  62. package/dist/session/internal/_V2CameraShim.d.ts +52 -0
  63. package/dist/session/internal/_V2CameraShim.d.ts.map +1 -0
  64. package/dist/session/internal/_V2EventManagerShim.d.ts +52 -0
  65. package/dist/session/internal/_V2EventManagerShim.d.ts.map +1 -0
  66. package/dist/session/internal/_V2SessionShim.d.ts +169 -0
  67. package/dist/session/internal/_V2SessionShim.d.ts.map +1 -0
  68. package/dist/session/internal/_V2SettingsShim.d.ts +17 -0
  69. package/dist/session/internal/_V2SettingsShim.d.ts.map +1 -0
  70. package/dist/session/managers/CameraManager.d.ts +198 -0
  71. package/dist/session/managers/CameraManager.d.ts.map +1 -0
  72. package/dist/session/managers/DashboardManager.d.ts +131 -0
  73. package/dist/session/managers/DashboardManager.d.ts.map +1 -0
  74. package/dist/session/managers/DeviceManager.d.ts +348 -0
  75. package/dist/session/managers/DeviceManager.d.ts.map +1 -0
  76. package/dist/session/managers/DisplayManager.d.ts +171 -0
  77. package/dist/session/managers/DisplayManager.d.ts.map +1 -0
  78. package/dist/session/managers/LedManager.d.ts +116 -0
  79. package/dist/session/managers/LedManager.d.ts.map +1 -0
  80. package/dist/session/managers/LocationManager.d.ts +224 -0
  81. package/dist/session/managers/LocationManager.d.ts.map +1 -0
  82. package/dist/session/managers/MicManager.d.ts +252 -0
  83. package/dist/session/managers/MicManager.d.ts.map +1 -0
  84. package/dist/session/managers/PermissionsManager.d.ts +139 -0
  85. package/dist/session/managers/PermissionsManager.d.ts.map +1 -0
  86. package/dist/session/managers/PhoneManager.d.ts +351 -0
  87. package/dist/session/managers/PhoneManager.d.ts.map +1 -0
  88. package/dist/session/managers/SpeakerManager.d.ts +285 -0
  89. package/dist/session/managers/SpeakerManager.d.ts.map +1 -0
  90. package/dist/session/managers/StorageManager.d.ts +289 -0
  91. package/dist/session/managers/StorageManager.d.ts.map +1 -0
  92. package/dist/session/managers/TimeUtils.d.ts +175 -0
  93. package/dist/session/managers/TimeUtils.d.ts.map +1 -0
  94. package/dist/session/managers/TranscriptionManager.d.ts +195 -0
  95. package/dist/session/managers/TranscriptionManager.d.ts.map +1 -0
  96. package/dist/session/managers/TranslationManager.d.ts +189 -0
  97. package/dist/session/managers/TranslationManager.d.ts.map +1 -0
  98. package/dist/session.d.ts +41 -0
  99. package/dist/session.d.ts.map +1 -0
  100. package/dist/session.js +4110 -0
  101. package/dist/session.js.map +44 -0
  102. package/dist/transport/Transport.d.ts +119 -0
  103. package/dist/transport/Transport.d.ts.map +1 -0
  104. package/dist/transport/WebSocketTransport.d.ts +73 -0
  105. package/dist/transport/WebSocketTransport.d.ts.map +1 -0
  106. package/dist/types/index.d.ts +31 -5
  107. package/dist/types/index.d.ts.map +1 -1
  108. package/dist/types/message-types.d.ts +25 -9
  109. package/dist/types/message-types.d.ts.map +1 -1
  110. package/dist/types/messages/app-to-cloud.d.ts +113 -16
  111. package/dist/types/messages/app-to-cloud.d.ts.map +1 -1
  112. package/dist/types/messages/cloud-to-app.d.ts +50 -4
  113. package/dist/types/messages/cloud-to-app.d.ts.map +1 -1
  114. package/dist/types/messages/cloud-to-glasses.d.ts +43 -14
  115. package/dist/types/messages/cloud-to-glasses.d.ts.map +1 -1
  116. package/dist/types/messages/glasses-to-cloud.d.ts +5 -5
  117. package/dist/types/messages/glasses-to-cloud.d.ts.map +1 -1
  118. package/dist/types/models.d.ts +17 -0
  119. package/dist/types/models.d.ts.map +1 -1
  120. package/dist/types/rtmp-stream.d.ts +4 -4
  121. package/dist/types/rtmp-stream.d.ts.map +1 -1
  122. package/dist/types/streams.d.ts +6 -1
  123. package/dist/types/streams.d.ts.map +1 -1
  124. package/dist/types/webhooks.d.ts +11 -0
  125. package/dist/types/webhooks.d.ts.map +1 -1
  126. package/dist/utils/error-utils.d.ts +139 -0
  127. package/dist/utils/error-utils.d.ts.map +1 -0
  128. package/dist/utils/permissions-utils.d.ts +30 -7
  129. package/dist/utils/permissions-utils.d.ts.map +1 -1
  130. package/node_modules/@mentra/types/dist/applet.d.ts +5 -1
  131. package/node_modules/@mentra/types/dist/applet.d.ts.map +1 -1
  132. package/node_modules/@mentra/types/dist/capabilities/even-realities-g2.d.ts +12 -0
  133. package/node_modules/@mentra/types/dist/capabilities/even-realities-g2.d.ts.map +1 -0
  134. package/node_modules/@mentra/types/dist/capabilities/even-realities-g2.js +61 -0
  135. package/node_modules/@mentra/types/dist/capabilities/mentra-display.d.ts +12 -0
  136. package/node_modules/@mentra/types/dist/capabilities/mentra-display.d.ts.map +1 -0
  137. package/node_modules/@mentra/types/dist/capabilities/mentra-display.js +54 -0
  138. package/node_modules/@mentra/types/dist/capabilities/none.d.ts +13 -0
  139. package/node_modules/@mentra/types/dist/capabilities/none.d.ts.map +1 -0
  140. package/node_modules/@mentra/types/dist/capabilities/none.js +67 -0
  141. package/node_modules/@mentra/types/dist/enums.d.ts +8 -2
  142. package/node_modules/@mentra/types/dist/enums.d.ts.map +1 -1
  143. package/node_modules/@mentra/types/dist/enums.js +9 -2
  144. package/node_modules/@mentra/types/dist/hardware.d.ts +3 -1
  145. package/node_modules/@mentra/types/dist/hardware.d.ts.map +1 -1
  146. package/node_modules/@mentra/types/dist/hardware.js +12 -2
  147. package/node_modules/@mentra/types/dist/index.d.ts +1 -1
  148. package/node_modules/@mentra/types/dist/index.d.ts.map +1 -1
  149. package/node_modules/@mentra/types/dist/index.js +2 -1
  150. package/node_modules/@mentra/types/package.json +2 -2
  151. package/package.json +24 -12
  152. package/dist/examples/managed-rtmp-streaming-example.d.ts +0 -2
  153. package/dist/examples/managed-rtmp-streaming-example.d.ts.map +0 -1
  154. package/dist/examples/managed-rtmp-streaming-with-restream-example.d.ts +0 -11
  155. package/dist/examples/managed-rtmp-streaming-with-restream-example.d.ts.map +0 -1
  156. package/dist/examples/rtmp-streaming-example.d.ts +0 -2
  157. package/dist/examples/rtmp-streaming-example.d.ts.map +0 -1
  158. package/node_modules/@mentra/types/src/applet.ts +0 -51
  159. package/node_modules/@mentra/types/src/capabilities/even-realities-g1.ts +0 -63
  160. package/node_modules/@mentra/types/src/capabilities/mentra-live.ts +0 -103
  161. package/node_modules/@mentra/types/src/capabilities/simulated-glasses.ts +0 -76
  162. package/node_modules/@mentra/types/src/capabilities/vuzix-z100.ts +0 -60
  163. package/node_modules/@mentra/types/src/cli.ts +0 -169
  164. package/node_modules/@mentra/types/src/device.ts +0 -43
  165. package/node_modules/@mentra/types/src/enums.ts +0 -36
  166. package/node_modules/@mentra/types/src/hardware.ts +0 -172
  167. package/node_modules/@mentra/types/src/index.ts +0 -64
  168. package/node_modules/@mentra/types/tsconfig.json +0 -22
  169. package/node_modules/@mentra/types/tsconfig.tsbuildinfo +0 -1
package/README.md CHANGED
@@ -1,14 +1,56 @@
1
1
  # @mentra/sdk
2
2
 
3
- Build apps for MentraOS smartglasses. This SDK provides everything you need to create real-time smartglasses applications.
3
+ Build apps for MentraOS smart glasses.
4
+
5
+ ## Quick Start
6
+
7
+ ```typescript
8
+ import { MiniAppServer } from "@mentra/sdk";
9
+
10
+ const app = new MiniAppServer({
11
+ packageName: "com.example.myapp",
12
+ apiKey: process.env.API_KEY!,
13
+ port: 3000,
14
+ });
15
+
16
+ app.onSession((session) => {
17
+ session.transcription.on((data) => {
18
+ session.display.showTextWall(data.text);
19
+ });
20
+ });
21
+
22
+ await app.start();
23
+ ```
24
+
25
+ ## Session Managers
26
+
27
+ | Manager | Access | What it does |
28
+ |---------|--------|-------------|
29
+ | Transcription | `session.transcription` | Real-time speech-to-text |
30
+ | Translation | `session.translation` | Real-time translation |
31
+ | Display | `session.display` | Show text and graphics on the glasses |
32
+ | Camera | `session.camera` | Take photos and stream video |
33
+ | Speaker | `session.speaker` | Play audio and text-to-speech |
34
+ | Mic | `session.mic` | Raw audio input and voice activity detection |
35
+ | Device | `session.device` | Hardware state, battery, connection, events |
36
+ | Phone | `session.phone` | Notifications, calendar, phone battery |
37
+ | Location | `session.location` | GPS coordinates |
38
+ | Storage | `session.storage` | Persistent key-value storage |
39
+ | Permissions | `session.permissions` | Check app permissions at runtime |
40
+ | LED | `session.led` | Control the LED light |
41
+ | Dashboard | `session.dashboard` | Write to the system dashboard view |
42
+ | Time | `session.time` | Timezone-aware time utilities |
43
+
44
+ ## Migrating from v2?
45
+
46
+ See the [migration guide](https://docs.mentra.glass/app-devs/migration/overview). Your existing code still works — v3 includes a compatibility layer.
4
47
 
5
48
  ## Prerequisites
6
49
 
7
- - Node.js (v18 or later)
8
- - Bun
50
+ - Node.js (v18 or later) or Bun
9
51
  - Basic TypeScript knowledge
10
52
 
11
- ## 🚀 Building Your First App
53
+ ## Getting Started
12
54
 
13
55
  The quickest way to get started is using our example app. This guide assumes you have a pair of [compatible smart glasses](https://mentra.glass/os) connected to a phone running the [MentraOS app](https://mentra.glass/install).
14
56
 
@@ -92,11 +134,14 @@ We are going to use ngrok to expose your local app to the internet. This is usef
92
134
 
93
135
  For more information, visit the [MentraOS-Cloud-Example-App repository](https://github.com/Mentra-Community/MentraOS-Cloud-Example-App). For a more in-depth example with app settings support, see the [Extended Example](https://github.com/Mentra-Community/MentraOS-Extended-Example-App).
94
136
 
95
- ## Next Steps
137
+ ## Documentation
96
138
 
97
- - Check out the [documentation](https://docs.mentra.glass) for more information
98
- - Join our [Discord community](https://discord.gg/5ukNvkEAqT) for help and support
139
+ - [Getting Started](https://docs.mentra.glass/app-devs/getting-started/quickstart)
140
+ - [API Reference](https://docs.mentra.glass/app-devs/core-concepts/session)
141
+ - [Migration Guide (v2 → v3)](https://docs.mentra.glass/app-devs/migration/overview)
142
+ - [Full API Map](https://docs.mentra.glass/app-devs/migration/api-map)
143
+ - [Discord Community](https://discord.gg/5ukNvkEAqT)
99
144
 
100
- ## 📄 License
145
+ ## License
101
146
 
102
- MIT License.
147
+ MIT
@@ -0,0 +1,58 @@
1
+ import type { Context } from "hono";
2
+ import type { ToolCall } from "./types";
3
+ import type { AuthVariables, SessionWebhookRequest, StopWebhookRequest } from "./types";
4
+ import { AppServer, type AppServerConfig } from "./app/server";
5
+ import { AppSession } from "./app/session";
6
+ import { MentraSession } from "./session";
7
+ import { type _ToolCallHandler } from "./internal/_SessionManager";
8
+ export type MiniAppServerConfig = AppServerConfig;
9
+ export type SessionHandler = (session: MentraSession) => void | Promise<void>;
10
+ export type StopHandler = (session: MentraSession | null, reason: string) => void | Promise<void>;
11
+ export type ToolCallHandler = _ToolCallHandler;
12
+ /**
13
+ * v3 cloud/server host for Mentra mini apps.
14
+ *
15
+ * `MiniAppServer` is the cloud-only entry point. It handles HTTP endpoints
16
+ * (webhooks, tools, settings, health, photo-upload) and creates MentraSession
17
+ * instances for each connected user.
18
+ *
19
+ * Naming:
20
+ * - `MiniAppServer` is cloud/server-specific (not needed for local apps).
21
+ * - `MentraSession` is the per-user session abstraction (same everywhere).
22
+ *
23
+ * This class extends the v2 `AppServer` during the transition period.
24
+ * When a v3-style callback is registered via `app.onSession((session) => {...})`,
25
+ * webhook lifecycle flows through `_SessionManager` → `MentraSession` → v3 runtime.
26
+ * When a v2-style subclass overrides `onSession(session, sessionId, userId)`,
27
+ * it goes through the old `AppServer` path entirely.
28
+ *
29
+ * @example
30
+ * ```ts
31
+ * const app = new MiniAppServer({ packageName: "com.example.myapp", apiKey: "..." })
32
+ *
33
+ * app.onSession((session) => {
34
+ * session.transcription.on((data) => {
35
+ * session.display.showText(data.text)
36
+ * })
37
+ * })
38
+ *
39
+ * await app.start()
40
+ * ```
41
+ */
42
+ export declare class MiniAppServer extends AppServer {
43
+ private readonly _sessions;
44
+ constructor(config: MiniAppServerConfig);
45
+ onSession(handler: SessionHandler): this;
46
+ onSession(session: AppSession, sessionId: string, userId: string): Promise<void>;
47
+ onStop(handler: StopHandler): this;
48
+ onStop(sessionId: string, userId: string, reason: string): Promise<void>;
49
+ onToolCall(handler: ToolCallHandler): this;
50
+ onToolCall(toolCall: ToolCall): Promise<string | undefined>;
51
+ protected handleSessionWebhookRequest(request: SessionWebhookRequest, c: Context<{
52
+ Variables: AuthVariables;
53
+ }>): Promise<Response>;
54
+ protected handleStopWebhookRequest(request: StopWebhookRequest, c: Context<{
55
+ Variables: AuthVariables;
56
+ }>): Promise<Response>;
57
+ }
58
+ //# sourceMappingURL=MiniAppServer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MiniAppServer.d.ts","sourceRoot":"","sources":["../src/MiniAppServer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACpC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,KAAK,EAAE,aAAa,EAAE,qBAAqB,EAAE,kBAAkB,EAAmB,MAAM,SAAS,CAAC;AACzG,OAAO,EAAE,SAAS,EAAE,KAAK,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAmB,KAAK,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AASpF,MAAM,MAAM,mBAAmB,GAAG,eAAe,CAAC;AAElD,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,EAAE,aAAa,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAC9E,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAClG,MAAM,MAAM,eAAe,GAAG,gBAAgB,CAAC;AAE/C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,qBAAa,aAAc,SAAQ,SAAS;IAC1C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAkB;gBAEhC,MAAM,EAAE,mBAAmB;IAgBhC,SAAS,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI;IAC/B,SAAS,CAAC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBzF,MAAM,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI;IACzB,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAUjF,UAAU,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI;IACjC,UAAU,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;cAYlD,2BAA2B,CAClD,OAAO,EAAE,qBAAqB,EAC9B,CAAC,EAAE,OAAO,CAAC;QAAE,SAAS,EAAE,aAAa,CAAA;KAAE,CAAC,GACvC,OAAO,CAAC,QAAQ,CAAC;cAgCK,wBAAwB,CAC/C,OAAO,EAAE,kBAAkB,EAC3B,CAAC,EAAE,OAAO,CAAC;QAAE,SAAS,EAAE,aAAa,CAAA;KAAE,CAAC,GACvC,OAAO,CAAC,QAAQ,CAAC;CAgBrB"}
@@ -1,29 +1,24 @@
1
- /**
2
- * 🚀 App Server Module
3
- *
4
- * Creates and manages a server for Apps in the MentraOS ecosystem.
5
- * Handles webhook endpoints, session management, and cleanup.
6
- */
7
- import { type Express } from "express";
8
- import { AppSession } from "../session/index";
9
- import { ToolCall } from "../../types";
1
+ import { Hono } from "hono";
2
+ import type { Context } from "hono";
10
3
  import { Logger } from "pino";
11
- import { PhotoData } from "../../types/photo-data";
4
+ import { SessionWebhookRequest, StopWebhookRequest, ToolCall, AuthVariables } from "../../types";
5
+ import { AppSession } from "../session/index";
6
+ import type { PhotoData } from "../../types/photo-data";
12
7
  export declare const GIVE_APP_CONTROL_OF_TOOL_RESPONSE: string;
13
8
  /**
14
- * Pending photo request stored at AppServer level
9
+ * Pending photo request stored at AppServer level for reconnection resilience.
15
10
  * This allows O(1) lookup when photo uploads arrive via HTTP,
16
11
  * and survives session reconnections.
17
12
  * See: cloud/issues/019-sdk-photo-request-architecture
18
13
  */
19
- export interface PendingPhotoRequest {
14
+ interface PendingPhotoRequest {
20
15
  userId: string;
21
16
  sessionId: string;
22
17
  session: AppSession;
23
18
  resolve: (photo: PhotoData) => void;
24
19
  reject: (error: Error) => void;
25
20
  timestamp: number;
26
- timeoutId?: NodeJS.Timeout;
21
+ timeoutId?: ReturnType<typeof setTimeout>;
27
22
  }
28
23
  /**
29
24
  * 🔧 Configuration options for App Server
@@ -63,11 +58,35 @@ export interface AppServerConfig {
63
58
  cookieSecret?: string;
64
59
  /** App instructions string shown to the user */
65
60
  appInstructions?: string;
61
+ /**
62
+ * Enable verbose SDK logging. Shows all internal SDK messages in the terminal
63
+ * (WebSocket lifecycle, subscription updates, message routing, etc.).
64
+ * Useful for debugging connection and streaming issues.
65
+ *
66
+ * Can also be enabled with the MENTRA_VERBOSE=true environment variable.
67
+ * This config option takes priority over the env var.
68
+ */
69
+ verbose?: boolean;
70
+ /**
71
+ * SDK log level. Controls which log messages appear in the terminal.
72
+ * - 'error': Only errors
73
+ * - 'warn': Errors and warnings
74
+ * - 'info': Normal operation (default)
75
+ * - 'debug': Everything including SDK internals (implies verbose)
76
+ *
77
+ * Can also be set with the MENTRA_LOG_LEVEL environment variable.
78
+ * This config option takes priority over the env var.
79
+ */
80
+ logLevel?: "error" | "warn" | "info" | "debug";
66
81
  }
82
+ type AppHono = Hono<{
83
+ Variables: AuthVariables;
84
+ }>;
67
85
  /**
68
86
  * 🎯 App Server Implementation
69
87
  *
70
- * Base class for creating App servers. Handles:
88
+ * Base class for creating App servers, now extending Hono for a modern API.
89
+ * Handles:
71
90
  * - 🔄 Session lifecycle management
72
91
  * - 📡 Webhook endpoints for MentraOS Cloud
73
92
  * - 📂 Static file serving
@@ -77,6 +96,13 @@ export interface AppServerConfig {
77
96
  * @example
78
97
  * ```typescript
79
98
  * class MyAppServer extends AppServer {
99
+ * constructor(config: AppServerConfig) {
100
+ * super(config)
101
+ *
102
+ * // Add custom API routes (Hono syntax)
103
+ * this.get("/api/custom", (c) => c.json({ message: "Hello!" }))
104
+ * }
105
+ *
80
106
  * protected async onSession(session: AppSession, sessionId: string, userId: string) {
81
107
  * // Handle new user sessions here
82
108
  * session.events.onTranscription((data) => {
@@ -88,24 +114,22 @@ export interface AppServerConfig {
88
114
  * const server = new MyAppServer({
89
115
  * packageName: 'org.example.myapp',
90
116
  * apiKey: 'your_api_key',
91
- * publicDir: "/public",
92
117
  * });
93
118
  *
94
119
  * await server.start();
95
120
  * ```
96
121
  */
97
- export declare class AppServer {
98
- private config;
99
- /** Express app instance */
100
- private app;
122
+ export declare class AppServer extends Hono<{
123
+ Variables: AuthVariables;
124
+ }> {
125
+ /** Server configuration */
126
+ protected config: AppServerConfig;
101
127
  /** Map of active user sessions by sessionId */
102
128
  private activeSessions;
103
129
  /** Map of active user sessions by userId */
104
130
  private activeSessionsByUserId;
105
- /** Array of cleanup handlers to run on shutdown */
106
- private cleanupHandlers;
107
- /** App instructions string shown to the user */
108
- private appInstructions;
131
+ /** Guards against running cleanup twice (double Ctrl-C, SIGINT+SIGTERM, etc.) */
132
+ private _cleanupPromise;
109
133
  /**
110
134
  * Pending photo requests by requestId - owned by AppServer for HTTP endpoint access.
111
135
  * This is the single source of truth for pending photo requests.
@@ -116,9 +140,21 @@ export declare class AppServer {
116
140
  * See: cloud/issues/019-sdk-photo-request-architecture
117
141
  */
118
142
  private pendingPhotoRequests;
143
+ /** Array of cleanup handlers to run on shutdown */
144
+ private cleanupHandlers;
145
+ /** App instructions string shown to the user */
146
+ private appInstructions;
119
147
  readonly logger: Logger;
120
148
  constructor(config: AppServerConfig);
121
- getExpressApp(): Express;
149
+ /**
150
+ * @deprecated Use `this.get()`, `this.post()`, etc. directly since AppServer now extends Hono
151
+ * This method is kept for backward compatibility during migration.
152
+ */
153
+ getExpressApp(): AppHono;
154
+ /**
155
+ * Get the Hono app instance (returns this since AppServer extends Hono)
156
+ */
157
+ getHonoApp(): AppHono;
122
158
  /**
123
159
  * 👥 Session Handler
124
160
  * Override this method to handle new App sessions.
@@ -148,15 +184,37 @@ export declare class AppServer {
148
184
  * @returns Optional string response that will be sent back to MentraOS Cloud
149
185
  */
150
186
  protected onToolCall(toolCall: ToolCall): Promise<string | undefined>;
187
+ protected getActiveSessionById(sessionId: string): AppSession | null;
188
+ protected getActiveSessionForUser(userId: string): AppSession | null;
189
+ protected setActiveSession(sessionId: string, userId: string, session: AppSession): void;
190
+ protected removeActiveSession(sessionId: string, userId: string): void;
151
191
  /**
152
- * 🚀 Start the Server
153
- * Starts listening for incoming connections and webhook calls.
192
+ * 🚀 Initialize the App
193
+ * Sets up logging and checks SDK version.
194
+ * After calling this, use Bun.serve() with app.fetch to start the server.
195
+ *
196
+ * @example
197
+ * ```typescript
198
+ * const app = new MyAppServer({ ... })
199
+ * await app.start()
154
200
  *
155
- * @returns Promise that resolves when server is ready
201
+ * Bun.serve({
202
+ * port: 3333,
203
+ * routes: { "/*": indexHtml },
204
+ * fetch: app.fetch,
205
+ * })
206
+ * ```
207
+ *
208
+ * @returns Promise that resolves when initialization is complete
156
209
  */
157
210
  start(): Promise<void>;
158
211
  /**
159
- * 🛑 Stop the Server
212
+ * Check and log SDK version (dist-tag aware).
213
+ * Hits npm registry directly — no dependency on our backend.
214
+ */
215
+ private checkSDKVersion;
216
+ /**
217
+ * Stop the Server
160
218
  * Gracefully shuts down the server and cleans up all sessions.
161
219
  */
162
220
  stop(): Promise<void>;
@@ -171,48 +229,94 @@ export declare class AppServer {
171
229
  */
172
230
  protected generateToken(userId: string, sessionId: string, secretKey: string): string;
173
231
  /**
174
- * 🧹 Add Cleanup Handler
232
+ * Add Cleanup Handler
175
233
  * Register a function to be called during server shutdown.
176
234
  *
177
235
  * @param handler - Function to call during cleanup
178
236
  */
179
237
  protected addCleanupHandler(handler: () => void): void;
180
238
  /**
181
- * 🎯 Setup Webhook Endpoint
239
+ * Register a pending photo request.
240
+ * Called by CameraModule when a photo is requested.
241
+ * Stores the request at AppServer level for O(1) lookup when HTTP response arrives.
242
+ *
243
+ * @param requestId - Unique identifier for this photo request
244
+ * @param request - Request details including session, resolve/reject callbacks
245
+ */
246
+ registerPhotoRequest(requestId: string, request: Omit<PendingPhotoRequest, "timeoutId">): void;
247
+ /**
248
+ * Get a pending photo request by ID.
249
+ *
250
+ * @param requestId - The request ID to look up
251
+ * @returns The pending request, or undefined if not found
252
+ */
253
+ getPhotoRequest(requestId: string): PendingPhotoRequest | undefined;
254
+ /**
255
+ * Complete a photo request (success or error).
256
+ * Clears the timeout and removes from the pending map.
257
+ *
258
+ * @param requestId - The request ID to complete
259
+ * @returns The pending request that was completed, or undefined if not found
260
+ */
261
+ completePhotoRequest(requestId: string): PendingPhotoRequest | undefined;
262
+ /**
263
+ * Clean up all pending photo requests for a session.
264
+ * Called when a session permanently disconnects.
265
+ *
266
+ * @param sessionId - The session ID to clean up requests for
267
+ */
268
+ cleanupPhotoRequestsForSession(sessionId: string): void;
269
+ /**
270
+ * Setup Webhook Endpoint
182
271
  * Creates the webhook endpoint that MentraOS Cloud calls to start new sessions.
183
272
  */
184
273
  private setupWebhook;
185
274
  /**
186
- * 🛠️ Setup Tool Call Endpoint
275
+ * Setup Tool Call Endpoint
187
276
  * Creates a /tool endpoint for handling tool calls from MentraOS Cloud.
188
277
  */
189
278
  private setupToolCallEndpoint;
190
279
  /**
191
280
  * Handle a session request webhook
192
281
  */
193
- private handleSessionRequest;
282
+ protected handleSessionWebhookRequest(request: SessionWebhookRequest, c: Context<{
283
+ Variables: AuthVariables;
284
+ }>): Promise<Response>;
194
285
  /**
195
286
  * Handle a stop request webhook
196
287
  */
197
- private handleStopRequest;
288
+ protected handleStopWebhookRequest(request: StopWebhookRequest, c: Context<{
289
+ Variables: AuthVariables;
290
+ }>): Promise<Response>;
198
291
  /**
199
- * ❤️ Setup Health Check Endpoint
292
+ * Setup Health Check Endpoint
200
293
  * Creates a /health endpoint for monitoring server status.
201
294
  */
202
295
  private setupHealthCheck;
203
296
  /**
204
- * ⚙️ Setup Settings Endpoint
297
+ * Setup Settings Endpoint
205
298
  * Creates a /settings endpoint that the MentraOS Cloud can use to update settings.
206
299
  */
207
300
  private setupSettingsEndpoint;
208
301
  /**
209
- * 📂 Setup Static File Serving
210
- * Configures Express to serve static files from the specified directory.
302
+ * Setup Static File Serving
303
+ * Configures Hono to serve static files from the specified directory.
211
304
  */
212
305
  private setupPublicDir;
213
306
  /**
214
- * 🛑 Setup Shutdown Handlers
215
- * Registers process signal handlers for graceful shutdown.
307
+ * Setup Shutdown Handlers
308
+ *
309
+ * Both SIGINT (Ctrl+C) and SIGTERM (Kubernetes) → fast exit.
310
+ *
311
+ * We never release ownership on shutdown (cloud will resurrect), so
312
+ * there is nothing useful to clean up. The only thing worth doing is
313
+ * a best-effort SimpleStorage flush, which we fire-and-forget.
314
+ *
315
+ * process.exit() does NOT work reliably under `bun --watch` — it
316
+ * intercepts the call. Instead we remove all JS signal handlers and
317
+ * re-raise the signal so the OS default handler terminates us.
318
+ *
319
+ * See: cloud/issues/086-sdk-fast-shutdown
216
320
  */
217
321
  private setupShutdown;
218
322
  /**
@@ -238,70 +342,30 @@ export declare class AppServer {
238
342
  */
239
343
  private setupPhotoUploadEndpoint;
240
344
  /**
241
- * Register a pending photo request.
242
- * Called by CameraModule when a photo is requested.
243
- * Stores the request at AppServer level for O(1) lookup when HTTP response arrives.
244
- *
245
- * @param requestId - Unique identifier for this photo request
246
- * @param request - Request details including session, resolve/reject callbacks
247
- */
248
- registerPhotoRequest(requestId: string, request: Omit<PendingPhotoRequest, "timeoutId">): void;
249
- /**
250
- * Get a pending photo request by ID.
251
- *
252
- * @param requestId - The request ID to look up
253
- * @returns The pending request, or undefined if not found
254
- */
255
- getPhotoRequest(requestId: string): PendingPhotoRequest | undefined;
256
- /**
257
- * Complete a photo request (success or error).
258
- * Clears the timeout and removes from the pending map.
259
- *
260
- * @param requestId - The request ID to complete
261
- * @returns The pending request that was completed, or undefined if not found
345
+ * Setup Mentra Auth Redirect Endpoint
346
+ * Creates a /mentra-auth endpoint that redirects to the MentraOS OAuth flow.
262
347
  */
263
- completePhotoRequest(requestId: string): PendingPhotoRequest | undefined;
348
+ private setupMentraAuthRedirect;
264
349
  /**
265
- * Clean up all pending photo requests for a session.
266
- * Called when a session permanently disconnects.
350
+ * Setup SDK-owned webview auth routes.
267
351
  *
268
- * @param sessionId - The session ID to clean up requests for
269
- */
270
- cleanupPhotoRequestsForSession(sessionId: string): void;
271
- /**
272
- * 🔐 Setup Mentra Auth Redirect Endpoint
273
- * Creates a /mentra-auth endpoint that redirects to the MentraOS OAuth flow.
352
+ * Canonical v3 path is under the internal SDK namespace. The legacy
353
+ * `/api/mentra/auth` path remains as a compatibility alias during the
354
+ * transition so older Hono examples and early adopters keep working.
274
355
  */
275
- private setupMentraAuthRedirect;
356
+ private setupMentraWebviewAuth;
276
357
  }
277
358
  /**
278
359
  * @deprecated Use `AppServerConfig` instead. `TpaServerConfig` is deprecated and will be removed in a future version.
279
360
  * This is an alias for backward compatibility only.
280
- *
281
- * @example
282
- * ```typescript
283
- * // ❌ Deprecated - Don't use this
284
- * const config: TpaServerConfig = { ... };
285
- *
286
- * // ✅ Use this instead
287
- * const config: AppServerConfig = { ... };
288
- * ```
289
361
  */
290
362
  export type TpaServerConfig = AppServerConfig;
291
363
  /**
292
364
  * @deprecated Use `AppServer` instead. `TpaServer` is deprecated and will be removed in a future version.
293
365
  * This is an alias for backward compatibility only.
294
- *
295
- * @example
296
- * ```typescript
297
- * // ❌ Deprecated - Don't use this
298
- * class MyServer extends TpaServer { ... }
299
- *
300
- * // ✅ Use this instead
301
- * class MyServer extends AppServer { ... }
302
- * ```
303
366
  */
304
367
  export declare class TpaServer extends AppServer {
305
368
  constructor(config: TpaServerConfig);
306
369
  }
370
+ export {};
307
371
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/app/server/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/app/server/index.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,8 @@
2
2
  * 🎮 Event Manager Module
3
3
  */
4
4
  import EventEmitter from "events";
5
- import { StreamType, ExtendedStreamType, AppSettings, WebSocketError, ButtonPress, HeadPosition, PhoneNotification, TranscriptionData, TranslationData, GlassesBatteryUpdate, PhoneBatteryUpdate, GlassesConnectionState, LocationUpdate, Vad, AudioChunk, CalendarEvent, VpsCoordinates, CustomMessage, RtmpStreamStatus, PhotoTaken, ManagedStreamStatus, PhoneNotificationDismissed, Capabilities, TouchEvent } from "../../types";
5
+ import type { Logger } from "pino";
6
+ import { StreamType, ExtendedStreamType, AppSettings, WebSocketError, ButtonPress, HeadPosition, PhoneNotification, TranscriptionData, TranslationData, GlassesBatteryUpdate, PhoneBatteryUpdate, GlassesConnectionState, LocationUpdate, Vad, AudioChunk, CalendarEvent, VpsCoordinates, CustomMessage, StreamStatus, PhotoTaken, ManagedStreamStatus, PhoneNotificationDismissed, Capabilities, TouchEvent } from "../../types";
6
7
  import { DashboardMode } from "../../types/dashboard";
7
8
  import { PermissionErrorDetail } from "../../types/messages/cloud-to-app";
8
9
  /** 🎯 Type-safe event handler function */
@@ -61,7 +62,7 @@ export interface StreamDataTypes {
61
62
  [StreamType.PHONE_NOTIFICATION_DISMISSED]: PhoneNotificationDismissed;
62
63
  [StreamType.AUDIO_CHUNK]: AudioChunk;
63
64
  [StreamType.VIDEO]: ArrayBuffer;
64
- [StreamType.RTMP_STREAM_STATUS]: RtmpStreamStatus;
65
+ [StreamType.STREAM_STATUS]: StreamStatus;
65
66
  [StreamType.MANAGED_STREAM_STATUS]: ManagedStreamStatus;
66
67
  [StreamType.VPS_COORDINATES]: VpsCoordinates;
67
68
  [StreamType.PHOTO_TAKEN]: PhotoTaken;
@@ -82,7 +83,8 @@ export declare class EventManager {
82
83
  private handlers;
83
84
  private lastLanguageTranscriptioCleanupHandler;
84
85
  private lastLanguageTranslationCleanupHandler;
85
- constructor(subscribe: (type: ExtendedStreamType) => void, unsubscribe: (type: ExtendedStreamType) => void, packageName: string, baseUrl: string);
86
+ private logger;
87
+ constructor(subscribe: (type: ExtendedStreamType) => void, unsubscribe: (type: ExtendedStreamType) => void, packageName: string, baseUrl: string, logger: Logger);
86
88
  onTranscription(handler: Handler<TranscriptionData>): () => void;
87
89
  /**
88
90
  * 🎤 Listen for transcription events in a specific language
@@ -187,6 +189,18 @@ export declare class EventManager {
187
189
  * instead of being stored separately, preventing drift between the two.
188
190
  */
189
191
  getRegisteredStreams(): ExtendedStreamType[];
192
+ /**
193
+ * 🔍 Find a registered stream that matches the incoming stream type.
194
+ *
195
+ * For non-language streams: exact match (existing behavior).
196
+ * For language streams: compare base type + transcribeLanguage
197
+ * (+ translateLanguage for translations), ignoring query params like ?hints=.
198
+ *
199
+ * This allows the SDK to receive data from a cloud stream whose subscription
200
+ * string doesn't include the same query params as the handler's subscription.
201
+ * For example, incoming "transcription:en-US" matches handler "transcription:en-US?hints=ja".
202
+ */
203
+ findMatchingStream(incoming: ExtendedStreamType): ExtendedStreamType | null;
190
204
  /**
191
205
  * 📡 Emit an event to all registered handlers with error isolation
192
206
  */
@@ -196,6 +210,9 @@ export declare class EventManager {
196
210
  * @param action - The action identifier to filter by
197
211
  * @param handler - Function to handle the message
198
212
  * @returns Cleanup function to remove the handler
213
+ * @deprecated Use settings.onMentraosChange() instead for system settings.
214
+ * This method was used for datetime updates but is no longer needed.
215
+ * Will be removed in a future version.
199
216
  */
200
217
  onCustomMessage(action: string, handler: (payload: any) => void): () => void;
201
218
  onVpsCoordinates(handler: Handler<VpsCoordinates>): () => void;
@@ -1 +1 @@
1
- {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../../src/app/session/events.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../../src/app/session/events.ts"],"names":[],"mappings":"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"}