@mentra/sdk 2.1.23 → 2.1.26
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/app/server/index.d.ts +2 -0
- package/dist/app/server/index.d.ts.map +1 -1
- package/dist/app/server/index.js +80 -18
- package/dist/app/session/dashboard.d.ts +7 -7
- package/dist/app/session/dashboard.d.ts.map +1 -1
- package/dist/app/session/dashboard.js +12 -12
- package/dist/app/session/events.d.ts.map +1 -1
- package/dist/app/session/index.d.ts +5 -1
- package/dist/app/session/index.d.ts.map +1 -1
- package/dist/app/session/index.js +14 -7
- package/dist/app/session/modules/camera.d.ts +17 -0
- package/dist/app/session/modules/camera.d.ts.map +1 -1
- package/dist/app/session/modules/camera.js +23 -0
- package/dist/app/session/modules/simple-storage.d.ts +30 -0
- package/dist/app/session/modules/simple-storage.d.ts.map +1 -0
- package/dist/app/session/modules/simple-storage.js +232 -0
- package/dist/constants/messages.d.ts +19 -0
- package/dist/constants/messages.d.ts.map +1 -0
- package/dist/constants/messages.js +57 -0
- package/dist/index.d.ts +2 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +18 -15
- package/dist/types/enums.d.ts +0 -20
- package/dist/types/enums.d.ts.map +1 -1
- package/dist/types/enums.js +2 -25
- package/dist/types/index.d.ts +0 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +0 -2
- package/dist/types/layouts.d.ts +3 -3
- package/dist/types/layouts.d.ts.map +1 -1
- package/dist/types/message-types.d.ts +1 -1
- package/dist/types/message-types.d.ts.map +1 -1
- package/dist/types/message-types.js +8 -13
- package/dist/types/messages/base.d.ts.map +1 -1
- package/dist/types/messages/cloud-to-app.d.ts.map +1 -1
- package/dist/types/messages/cloud-to-glasses.d.ts +0 -7
- package/dist/types/messages/cloud-to-glasses.d.ts.map +1 -1
- package/dist/types/messages/glasses-to-cloud.d.ts +91 -9
- package/dist/types/messages/glasses-to-cloud.d.ts.map +1 -1
- package/dist/types/messages/glasses-to-cloud.js +44 -1
- package/dist/types/models.d.ts.map +1 -1
- package/dist/types/webhooks.d.ts +4 -51
- package/dist/types/webhooks.d.ts.map +1 -1
- package/dist/types/webhooks.js +0 -27
- package/package.json +4 -1
- package/dist/types/user-session.d.ts +0 -73
- package/dist/types/user-session.d.ts.map +0 -1
- package/dist/types/user-session.js +0 -17
|
@@ -29,6 +29,8 @@ export interface AppServerConfig {
|
|
|
29
29
|
apiKey: string;
|
|
30
30
|
/** 🌐 Port number for the server (default: 7010) */
|
|
31
31
|
port?: number;
|
|
32
|
+
/** Cloud API URL (default: 'api.mentra.glass') */
|
|
33
|
+
cloudApiUrl?: string;
|
|
32
34
|
/** 🛣️ [DEPRECATED] do not set: The SDK will automatically expose an endpoint at '/webhook' */
|
|
33
35
|
webhookPath?: string;
|
|
34
36
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/app/server/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAgB,EAAE,KAAK,OAAO,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/app/server/index.ts"],"names":[],"mappings":"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"}
|
package/dist/app/server/index.js
CHANGED
|
@@ -12,10 +12,13 @@ exports.TpaServer = exports.AppServer = exports.GIVE_APP_CONTROL_OF_TOOL_RESPONS
|
|
|
12
12
|
*/
|
|
13
13
|
const express_1 = __importDefault(require("express"));
|
|
14
14
|
const path_1 = __importDefault(require("path"));
|
|
15
|
+
const fs_1 = __importDefault(require("fs"));
|
|
15
16
|
const index_1 = require("../session/index");
|
|
16
17
|
const webview_1 = require("../webview");
|
|
18
|
+
const messages_1 = require("../../constants/messages");
|
|
17
19
|
const types_1 = require("../../types");
|
|
18
20
|
const logger_1 = require("../../logging/logger");
|
|
21
|
+
const axios_1 = __importDefault(require("axios"));
|
|
19
22
|
exports.GIVE_APP_CONTROL_OF_TOOL_RESPONSE = "GIVE_APP_CONTROL_OF_TOOL_RESPONSE";
|
|
20
23
|
/**
|
|
21
24
|
* 🎯 App Server Implementation
|
|
@@ -157,11 +160,47 @@ class AppServer {
|
|
|
157
160
|
*/
|
|
158
161
|
start() {
|
|
159
162
|
return new Promise((resolve) => {
|
|
160
|
-
this.app.listen(this.config.port, () => {
|
|
163
|
+
this.app.listen(this.config.port, async () => {
|
|
161
164
|
this.logger.info(`🎯 App server running at http://localhost:${this.config.port}`);
|
|
162
165
|
if (this.config.publicDir) {
|
|
163
166
|
this.logger.info(`📂 Serving static files from ${this.config.publicDir}`);
|
|
164
167
|
}
|
|
168
|
+
// 🔑 Grab SDK version
|
|
169
|
+
try {
|
|
170
|
+
// Look for the actual installed @mentra/sdk package.json in node_modules
|
|
171
|
+
const sdkPkgPath = path_1.default.resolve(process.cwd(), "node_modules/@mentra/sdk/package.json");
|
|
172
|
+
let currentVersion = "unknown";
|
|
173
|
+
if (fs_1.default.existsSync(sdkPkgPath)) {
|
|
174
|
+
const sdkPkg = JSON.parse(fs_1.default.readFileSync(sdkPkgPath, "utf-8"));
|
|
175
|
+
// Get the actual installed version
|
|
176
|
+
currentVersion = sdkPkg.version || "not-found"; // located in the node module
|
|
177
|
+
}
|
|
178
|
+
else {
|
|
179
|
+
this.logger.debug({ sdkPkgPath }, "No @mentra/sdk package.json found at path");
|
|
180
|
+
}
|
|
181
|
+
// this.logger.debug(`Developer is using SDK version: ${currentVersion}`);
|
|
182
|
+
// Fetch latest SDK version from the API endpoint
|
|
183
|
+
let latest = "2.1.25"; // fallback version
|
|
184
|
+
try {
|
|
185
|
+
const cloudHost = "api.mentra.glass";
|
|
186
|
+
const response = await axios_1.default.get(`https://${cloudHost}/api/sdk/version`);
|
|
187
|
+
if (response.data && response.data.success && response.data.data) {
|
|
188
|
+
latest = response.data.data.latest; // Changed from "recommended" to "latest"
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
catch (fetchError) {
|
|
192
|
+
this.logger.debug({ fetchError }, "Failed to fetch latest SDK version from API, using fallback");
|
|
193
|
+
}
|
|
194
|
+
if (currentVersion === "not-found") {
|
|
195
|
+
this.logger.warn(`⚠️ @mentra/sdk not found in your project dependencies. Please install it with: npm install @mentra/sdk`);
|
|
196
|
+
}
|
|
197
|
+
else if (latest && latest !== currentVersion) {
|
|
198
|
+
this.logger.warn((0, messages_1.newSDKUpdate)(latest));
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
catch (err) {
|
|
202
|
+
this.logger.error(err, "Version check failed");
|
|
203
|
+
}
|
|
165
204
|
resolve();
|
|
166
205
|
});
|
|
167
206
|
});
|
|
@@ -214,11 +253,11 @@ class AppServer {
|
|
|
214
253
|
try {
|
|
215
254
|
const webhookRequest = req.body;
|
|
216
255
|
// Handle session request
|
|
217
|
-
if (
|
|
256
|
+
if (webhookRequest.type === types_1.WebhookRequestType.SESSION_REQUEST) {
|
|
218
257
|
await this.handleSessionRequest(webhookRequest, res);
|
|
219
258
|
}
|
|
220
259
|
// Handle stop request
|
|
221
|
-
else if (
|
|
260
|
+
else if (webhookRequest.type === types_1.WebhookRequestType.STOP_REQUEST) {
|
|
222
261
|
await this.handleStopRequest(webhookRequest, res);
|
|
223
262
|
}
|
|
224
263
|
// Unknown webhook type
|
|
@@ -316,7 +355,8 @@ class AppServer {
|
|
|
316
355
|
else if (info.permanent === true) {
|
|
317
356
|
this.logger.info(`🛑 Permanent disconnection detected for session ${sessionId}, calling onStop`);
|
|
318
357
|
// Keep track of the original session before removal
|
|
319
|
-
const session = this.activeSessions.get(sessionId);
|
|
358
|
+
// const session = this.activeSessions.get(sessionId);
|
|
359
|
+
const _session = this.activeSessions.get(sessionId);
|
|
320
360
|
// Call onStop with a reconnection failure reason
|
|
321
361
|
this.onStop(sessionId, userId, `Connection permanently lost: ${info.reason}`).catch((error) => {
|
|
322
362
|
this.logger.error(error, `❌ Error in onStop handler for permanent disconnection:`);
|
|
@@ -399,7 +439,7 @@ class AppServer {
|
|
|
399
439
|
// Find all active sessions for this user
|
|
400
440
|
const userSessions = [];
|
|
401
441
|
// Look through all active sessions
|
|
402
|
-
this.activeSessions.forEach((session,
|
|
442
|
+
this.activeSessions.forEach((session, _sessionId) => {
|
|
403
443
|
// Check if the session has this userId (not directly accessible)
|
|
404
444
|
// We're relying on the webhook handler to have already verified this
|
|
405
445
|
if (session.userId === userIdForSettings) {
|
|
@@ -493,18 +533,12 @@ class AppServer {
|
|
|
493
533
|
});
|
|
494
534
|
this.app.post("/photo-upload", upload.single("photo"), async (req, res) => {
|
|
495
535
|
try {
|
|
496
|
-
const { requestId, type } = req.body;
|
|
536
|
+
const { requestId, type, success, errorCode, errorMessage } = req.body;
|
|
497
537
|
const photoFile = req.file;
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
this.logger.error({ requestId }, "No photo file in upload");
|
|
501
|
-
return res.status(400).json({
|
|
502
|
-
success: false,
|
|
503
|
-
error: "No photo file provided",
|
|
504
|
-
});
|
|
505
|
-
}
|
|
538
|
+
console.log("Received photo response: ", req.body);
|
|
539
|
+
this.logger.info({ requestId, type, success, errorCode }, `📸 Received photo response: ${requestId} (type: ${type})`);
|
|
506
540
|
if (!requestId) {
|
|
507
|
-
this.logger.error("No requestId in photo
|
|
541
|
+
this.logger.error("No requestId in photo response");
|
|
508
542
|
return res.status(400).json({
|
|
509
543
|
success: false,
|
|
510
544
|
error: "No requestId provided",
|
|
@@ -519,6 +553,34 @@ class AppServer {
|
|
|
519
553
|
error: "No active session found for this photo request",
|
|
520
554
|
});
|
|
521
555
|
}
|
|
556
|
+
// Handle error response (no photo file, but has error info)
|
|
557
|
+
if (type === "photo_error" || !success) {
|
|
558
|
+
// Create error response object
|
|
559
|
+
const errorResponse = {
|
|
560
|
+
requestId,
|
|
561
|
+
success: false,
|
|
562
|
+
error: {
|
|
563
|
+
code: errorCode || "UNKNOWN_ERROR",
|
|
564
|
+
message: errorMessage || "Unknown error occurred",
|
|
565
|
+
},
|
|
566
|
+
};
|
|
567
|
+
// Deliver error to the session (logging happens in camera module)
|
|
568
|
+
session.camera.handlePhotoError(errorResponse);
|
|
569
|
+
// Respond to ASG client
|
|
570
|
+
return res.json({
|
|
571
|
+
success: true,
|
|
572
|
+
requestId,
|
|
573
|
+
message: "Photo error received successfully",
|
|
574
|
+
});
|
|
575
|
+
}
|
|
576
|
+
// Handle successful photo upload
|
|
577
|
+
if (!photoFile) {
|
|
578
|
+
this.logger.error({ requestId }, "No photo file in successful upload");
|
|
579
|
+
return res.status(400).json({
|
|
580
|
+
success: false,
|
|
581
|
+
error: "No photo file provided for successful upload",
|
|
582
|
+
});
|
|
583
|
+
}
|
|
522
584
|
// Create photo data object
|
|
523
585
|
const photoData = {
|
|
524
586
|
buffer: photoFile.buffer,
|
|
@@ -538,10 +600,10 @@ class AppServer {
|
|
|
538
600
|
});
|
|
539
601
|
}
|
|
540
602
|
catch (error) {
|
|
541
|
-
this.logger.error(error, "❌ Error handling photo
|
|
603
|
+
this.logger.error(error, "❌ Error handling photo response");
|
|
542
604
|
res.status(500).json({
|
|
543
605
|
success: false,
|
|
544
|
-
error: "Internal server error processing photo
|
|
606
|
+
error: "Internal server error processing photo response",
|
|
545
607
|
});
|
|
546
608
|
}
|
|
547
609
|
});
|
|
@@ -562,7 +624,7 @@ class AppServer {
|
|
|
562
624
|
* Find session that has a pending photo request for the given requestId
|
|
563
625
|
*/
|
|
564
626
|
findSessionByPhotoRequestId(requestId) {
|
|
565
|
-
for (const [
|
|
627
|
+
for (const [_sessionId, session] of this.activeSessions) {
|
|
566
628
|
if (session.camera.hasPhotoPendingRequest(requestId)) {
|
|
567
629
|
return session;
|
|
568
630
|
}
|
|
@@ -4,10 +4,10 @@
|
|
|
4
4
|
* Provides dashboard functionality for Apps, allowing them to write content
|
|
5
5
|
* to the dashboard and respond to dashboard mode changes.
|
|
6
6
|
*/
|
|
7
|
-
import { DashboardAPI, DashboardContentAPI, DashboardMode, DashboardSystemAPI } from
|
|
8
|
-
import { EventManager } from
|
|
9
|
-
import type { AppSession } from
|
|
10
|
-
import { AppToCloudMessage } from
|
|
7
|
+
import { DashboardAPI, DashboardContentAPI, DashboardMode, DashboardSystemAPI } from "../../types/dashboard";
|
|
8
|
+
import { EventManager } from "./events";
|
|
9
|
+
import type { AppSession } from "./index";
|
|
10
|
+
import { AppToCloudMessage } from "src/types";
|
|
11
11
|
/**
|
|
12
12
|
* Implementation of DashboardSystemAPI interface for system dashboard App
|
|
13
13
|
*/
|
|
@@ -36,9 +36,9 @@ export declare class DashboardContentManager implements DashboardContentAPI {
|
|
|
36
36
|
write(content: string, targets?: DashboardMode[]): void;
|
|
37
37
|
writeToMain(content: string): void;
|
|
38
38
|
writeToExpanded(content: string): void;
|
|
39
|
-
getCurrentMode(): Promise<DashboardMode |
|
|
40
|
-
onModeChange(callback: (mode: DashboardMode |
|
|
41
|
-
setCurrentMode(mode: DashboardMode |
|
|
39
|
+
getCurrentMode(): Promise<DashboardMode | "none">;
|
|
40
|
+
onModeChange(callback: (mode: DashboardMode | "none") => void): () => void;
|
|
41
|
+
setCurrentMode(mode: DashboardMode | "none"): void;
|
|
42
42
|
}
|
|
43
43
|
/**
|
|
44
44
|
* Dashboard Manager - Main class that manages dashboard functionality
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dashboard.d.ts","sourceRoot":"","sources":["../../../src/app/session/dashboard.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,aAAa,EACb,kBAAkB,EAInB,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"dashboard.d.ts","sourceRoot":"","sources":["../../../src/app/session/dashboard.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,aAAa,EACb,kBAAkB,EAInB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAGxC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAQ9C;;GAEG;AACH,qBAAa,sBAAuB,YAAW,kBAAkB;IAE7D,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,IAAI;gBAFJ,OAAO,EAAE,UAAU,EACnB,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,IAAI;IAGtC,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAIjC,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAIlC,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAIpC,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAIrC,WAAW,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI;IAWtC,OAAO,CAAC,mBAAmB;CAc5B;AAED;;GAEG;AACH,qBAAa,uBAAwB,YAAW,mBAAmB;IAK/D,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,IAAI;IACZ,OAAO,CAAC,MAAM;IAPhB,OAAO,CAAC,WAAW,CAAkC;gBAI3C,OAAO,EAAE,UAAU,EACnB,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,IAAI,EAC5B,MAAM,EAAE,YAAY;IAG9B,KAAK,CACH,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,aAAa,EAAyB,GAC9C,IAAI;IAYP,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAIlC,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAgBhC,cAAc,IAAI,OAAO,CAAC,aAAa,GAAG,MAAM,CAAC;IAQvD,YAAY,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM,KAAK,IAAI,GAAG,MAAM,IAAI;IAe1E,cAAc,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM,GAAG,IAAI;CASnD;AAED;;;GAGG;AACH,qBAAa,gBAAiB,YAAW,YAAY;IACnD,SAAgB,OAAO,EAAE,mBAAmB,CAAC;IAC7C,SAAgB,MAAM,CAAC,EAAE,kBAAkB,CAAC;gBAEhC,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,iBAAiB,KAAK,IAAI;CA0B5E"}
|
|
@@ -16,7 +16,7 @@ const message_types_1 = require("../../types/message-types");
|
|
|
16
16
|
const dotenv_1 = __importDefault(require("dotenv"));
|
|
17
17
|
// Load environment variables from .env file
|
|
18
18
|
dotenv_1.default.config();
|
|
19
|
-
const SYSTEM_DASHBOARD_PACKAGE_NAME = process.env.SYSTEM_DASHBOARD_PACKAGE_NAME ||
|
|
19
|
+
const SYSTEM_DASHBOARD_PACKAGE_NAME = process.env.SYSTEM_DASHBOARD_PACKAGE_NAME || "system.augmentos.dashboard";
|
|
20
20
|
/**
|
|
21
21
|
* Implementation of DashboardSystemAPI interface for system dashboard App
|
|
22
22
|
*/
|
|
@@ -27,16 +27,16 @@ class DashboardSystemManager {
|
|
|
27
27
|
this.send = send;
|
|
28
28
|
}
|
|
29
29
|
setTopLeft(content) {
|
|
30
|
-
this.updateSystemSection(
|
|
30
|
+
this.updateSystemSection("topLeft", content);
|
|
31
31
|
}
|
|
32
32
|
setTopRight(content) {
|
|
33
|
-
this.updateSystemSection(
|
|
33
|
+
this.updateSystemSection("topRight", content);
|
|
34
34
|
}
|
|
35
35
|
setBottomLeft(content) {
|
|
36
|
-
this.updateSystemSection(
|
|
36
|
+
this.updateSystemSection("bottomLeft", content);
|
|
37
37
|
}
|
|
38
38
|
setBottomRight(content) {
|
|
39
|
-
this.updateSystemSection(
|
|
39
|
+
this.updateSystemSection("bottomRight", content);
|
|
40
40
|
}
|
|
41
41
|
setViewMode(mode) {
|
|
42
42
|
const message = {
|
|
@@ -44,7 +44,7 @@ class DashboardSystemManager {
|
|
|
44
44
|
packageName: this.packageName,
|
|
45
45
|
sessionId: `${this.session.getSessionId()}-${this.packageName}`,
|
|
46
46
|
mode,
|
|
47
|
-
timestamp: new Date()
|
|
47
|
+
timestamp: new Date(),
|
|
48
48
|
};
|
|
49
49
|
this.send(message);
|
|
50
50
|
}
|
|
@@ -55,7 +55,7 @@ class DashboardSystemManager {
|
|
|
55
55
|
sessionId: `${this.session.getSessionId()}-${this.packageName}`,
|
|
56
56
|
section,
|
|
57
57
|
content,
|
|
58
|
-
timestamp: new Date()
|
|
58
|
+
timestamp: new Date(),
|
|
59
59
|
};
|
|
60
60
|
this.send(message);
|
|
61
61
|
}
|
|
@@ -71,7 +71,7 @@ class DashboardContentManager {
|
|
|
71
71
|
this.packageName = packageName;
|
|
72
72
|
this.send = send;
|
|
73
73
|
this.events = events;
|
|
74
|
-
this.currentMode =
|
|
74
|
+
this.currentMode = "none";
|
|
75
75
|
}
|
|
76
76
|
write(content, targets = [dashboard_1.DashboardMode.MAIN]) {
|
|
77
77
|
const message = {
|
|
@@ -80,7 +80,7 @@ class DashboardContentManager {
|
|
|
80
80
|
sessionId: `${this.session.getSessionId()}-${this.packageName}`,
|
|
81
81
|
content,
|
|
82
82
|
modes: targets,
|
|
83
|
-
timestamp: new Date()
|
|
83
|
+
timestamp: new Date(),
|
|
84
84
|
};
|
|
85
85
|
this.send(message);
|
|
86
86
|
}
|
|
@@ -94,7 +94,7 @@ class DashboardContentManager {
|
|
|
94
94
|
sessionId: `${this.session.getSessionId()}-${this.packageName}`,
|
|
95
95
|
content,
|
|
96
96
|
modes: [dashboard_1.DashboardMode.EXPANDED],
|
|
97
|
-
timestamp: new Date()
|
|
97
|
+
timestamp: new Date(),
|
|
98
98
|
};
|
|
99
99
|
this.send(message);
|
|
100
100
|
}
|
|
@@ -122,7 +122,7 @@ class DashboardContentManager {
|
|
|
122
122
|
// Internal methods to update state
|
|
123
123
|
setCurrentMode(mode) {
|
|
124
124
|
this.currentMode = mode;
|
|
125
|
-
this.events.emit(
|
|
125
|
+
this.events.emit("dashboard_mode_change", { mode });
|
|
126
126
|
}
|
|
127
127
|
}
|
|
128
128
|
exports.DashboardContentManager = DashboardContentManager;
|
|
@@ -138,7 +138,7 @@ class DashboardManager {
|
|
|
138
138
|
this.content = new DashboardContentManager(session, packageName, send, events);
|
|
139
139
|
// Add system API if this is the system dashboard App
|
|
140
140
|
if (packageName === SYSTEM_DASHBOARD_PACKAGE_NAME) {
|
|
141
|
-
session.logger.info({ service: "SDK:DashboardManager" },
|
|
141
|
+
session.logger.info({ service: "SDK:DashboardManager" }, "Initializing system dashboard manager");
|
|
142
142
|
this.system = new DashboardSystemManager(session, packageName, send);
|
|
143
143
|
}
|
|
144
144
|
else {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../../src/app/session/events.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,YAAY,MAAM,QAAQ,CAAC;AAClC,OAAO,EACL,UAAU,EACV,kBAAkB,EAClB,WAAW,EACX,cAAc,EAEd,WAAW,EACX,YAAY,EACZ,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,EACf,oBAAoB,EACpB,kBAAkB,EAClB,sBAAsB,EACtB,cAAc,EACd,GAAG,EACH,UAAU,EACV,aAAa,EACb,cAAc,EAKd,aAAa,EACb,gBAAgB,EAChB,UAAU,EACV,mBAAmB,EACnB,0BAA0B,EAC1B,YAAY,EACb,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,
|
|
1
|
+
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../../src/app/session/events.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,6 +8,7 @@ import { ExtendedStreamType, ButtonPress, HeadPosition, PhoneNotification, Phone
|
|
|
8
8
|
import { DashboardAPI } from "../../types/dashboard";
|
|
9
9
|
import { Logger } from "pino";
|
|
10
10
|
import { AppServer } from "../server";
|
|
11
|
+
import { SimpleStorage } from "./modules/simple-storage";
|
|
11
12
|
/**
|
|
12
13
|
* ⚙️ Configuration options for App Session
|
|
13
14
|
*
|
|
@@ -105,6 +106,8 @@ export declare class AppSession {
|
|
|
105
106
|
readonly camera: CameraModule;
|
|
106
107
|
/** 🔊 Audio interface for audio playback */
|
|
107
108
|
readonly audio: AudioManager;
|
|
109
|
+
/** 🔐 Simple key-value storage interface */
|
|
110
|
+
readonly simpleStorage: SimpleStorage;
|
|
108
111
|
readonly appServer: AppServer;
|
|
109
112
|
readonly logger: Logger;
|
|
110
113
|
readonly userId: string;
|
|
@@ -345,7 +348,7 @@ export declare class AppSession {
|
|
|
345
348
|
* @param roomId - Optional room ID for room-based messaging
|
|
346
349
|
* @returns Promise that resolves when message is sent
|
|
347
350
|
*/
|
|
348
|
-
broadcastToAppUsers(payload: any,
|
|
351
|
+
broadcastToAppUsers(payload: any, _roomId?: string): Promise<void>;
|
|
349
352
|
/**
|
|
350
353
|
* 📤 Send direct message to specific user
|
|
351
354
|
* @param targetUserId - User ID to send message to
|
|
@@ -432,4 +435,5 @@ export declare class TpaSession extends AppSession {
|
|
|
432
435
|
}
|
|
433
436
|
export { CameraModule, PhotoRequestOptions, RtmpStreamOptions, } from "./modules/camera";
|
|
434
437
|
export { AudioManager, AudioPlayOptions, AudioPlayResult, SpeakOptions, } from "./modules/audio";
|
|
438
|
+
export { SimpleStorage } from "./modules/simple-storage";
|
|
435
439
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/app/session/index.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,YAAY,EAAE,SAAS,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/app/session/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.AudioManager = exports.CameraModule = exports.TpaSession = exports.AppSession = void 0;
|
|
6
|
+
exports.SimpleStorage = exports.AudioManager = exports.CameraModule = exports.TpaSession = exports.AppSession = void 0;
|
|
7
7
|
/**
|
|
8
8
|
* 🎯 App Session Module
|
|
9
9
|
*
|
|
@@ -24,6 +24,7 @@ const events_2 = __importDefault(require("events"));
|
|
|
24
24
|
const node_fetch_1 = __importDefault(require("node-fetch"));
|
|
25
25
|
// Import the cloud-to-app specific type guards
|
|
26
26
|
const cloud_to_app_1 = require("../../types/messages/cloud-to-app");
|
|
27
|
+
const simple_storage_1 = require("./modules/simple-storage");
|
|
27
28
|
// List of event types that should never be subscribed to as streams
|
|
28
29
|
const APP_TO_APP_EVENT_TYPES = [
|
|
29
30
|
"app_message_received",
|
|
@@ -167,6 +168,7 @@ class AppSession {
|
|
|
167
168
|
// Initialize audio module with session reference
|
|
168
169
|
this.audio = new audio_1.AudioManager(this.config.packageName, this.sessionId || "unknown-session-id", this.send.bind(this), this, // Pass session reference
|
|
169
170
|
this.logger.child({ module: "audio" }));
|
|
171
|
+
this.simpleStorage = new simple_storage_1.SimpleStorage(this);
|
|
170
172
|
this.location = new location_1.LocationManager(this, this.send.bind(this));
|
|
171
173
|
}
|
|
172
174
|
/**
|
|
@@ -873,7 +875,7 @@ class AppSession {
|
|
|
873
875
|
}
|
|
874
876
|
else if ((0, types_1.isSettingsUpdate)(message)) {
|
|
875
877
|
// Store previous settings to check for changes
|
|
876
|
-
const
|
|
878
|
+
const _prevSettings = [...this.settingsData];
|
|
877
879
|
// Update internal settings storage
|
|
878
880
|
this.settingsData = message.settings || [];
|
|
879
881
|
// Update the settings manager with the new settings
|
|
@@ -1021,7 +1023,7 @@ class AppSession {
|
|
|
1021
1023
|
else if ((0, cloud_to_app_1.isPhotoResponse)(message)) {
|
|
1022
1024
|
// Legacy photo response handling - now photos come directly via webhook
|
|
1023
1025
|
// This branch can be removed in the future as all photos now go through /photo-upload
|
|
1024
|
-
this.logger.warn("Received legacy photo response - photos should now come via /photo-upload webhook");
|
|
1026
|
+
this.logger.warn({ message }, "Received legacy photo response - photos should now come via /photo-upload webhook");
|
|
1025
1027
|
}
|
|
1026
1028
|
// Handle unrecognized message types gracefully
|
|
1027
1029
|
else {
|
|
@@ -1111,7 +1113,7 @@ class AppSession {
|
|
|
1111
1113
|
}
|
|
1112
1114
|
// For specific stream types, perform targeted sanitization
|
|
1113
1115
|
switch (streamType) {
|
|
1114
|
-
case types_1.StreamType.TRANSCRIPTION:
|
|
1116
|
+
case types_1.StreamType.TRANSCRIPTION: {
|
|
1115
1117
|
// Ensure text field exists and is a string
|
|
1116
1118
|
if (typeof data.text !== "string") {
|
|
1117
1119
|
return {
|
|
@@ -1122,7 +1124,8 @@ class AppSession {
|
|
|
1122
1124
|
};
|
|
1123
1125
|
}
|
|
1124
1126
|
break;
|
|
1125
|
-
|
|
1127
|
+
}
|
|
1128
|
+
case types_1.StreamType.HEAD_POSITION: {
|
|
1126
1129
|
// Ensure position data has required numeric fields
|
|
1127
1130
|
// Handle HeadPosition - Note the property position instead of x,y,z
|
|
1128
1131
|
const pos = data;
|
|
@@ -1130,7 +1133,8 @@ class AppSession {
|
|
|
1130
1133
|
return { position: "up", timestamp: new Date() };
|
|
1131
1134
|
}
|
|
1132
1135
|
break;
|
|
1133
|
-
|
|
1136
|
+
}
|
|
1137
|
+
case types_1.StreamType.BUTTON_PRESS: {
|
|
1134
1138
|
// Ensure button type is valid
|
|
1135
1139
|
const btn = data;
|
|
1136
1140
|
if (!btn.buttonId || !btn.pressType) {
|
|
@@ -1141,6 +1145,7 @@ class AppSession {
|
|
|
1141
1145
|
};
|
|
1142
1146
|
}
|
|
1143
1147
|
break;
|
|
1148
|
+
}
|
|
1144
1149
|
}
|
|
1145
1150
|
return data;
|
|
1146
1151
|
}
|
|
@@ -1386,7 +1391,7 @@ class AppSession {
|
|
|
1386
1391
|
* @param roomId - Optional room ID for room-based messaging
|
|
1387
1392
|
* @returns Promise that resolves when message is sent
|
|
1388
1393
|
*/
|
|
1389
|
-
async broadcastToAppUsers(payload,
|
|
1394
|
+
async broadcastToAppUsers(payload, _roomId) {
|
|
1390
1395
|
try {
|
|
1391
1396
|
const messageId = this.generateMessageId();
|
|
1392
1397
|
const message = {
|
|
@@ -1562,3 +1567,5 @@ var camera_2 = require("./modules/camera");
|
|
|
1562
1567
|
Object.defineProperty(exports, "CameraModule", { enumerable: true, get: function () { return camera_2.CameraModule; } });
|
|
1563
1568
|
var audio_2 = require("./modules/audio");
|
|
1564
1569
|
Object.defineProperty(exports, "AudioManager", { enumerable: true, get: function () { return audio_2.AudioManager; } });
|
|
1570
|
+
var simple_storage_2 = require("./modules/simple-storage");
|
|
1571
|
+
Object.defineProperty(exports, "SimpleStorage", { enumerable: true, get: function () { return simple_storage_2.SimpleStorage; } });
|
|
@@ -117,6 +117,23 @@ export declare class CameraModule {
|
|
|
117
117
|
* @internal This method is used internally by AppSession
|
|
118
118
|
*/
|
|
119
119
|
handlePhotoReceived(photoData: PhotoData): void;
|
|
120
|
+
/**
|
|
121
|
+
* ❌ Handle photo error from /photo-upload endpoint
|
|
122
|
+
*
|
|
123
|
+
* This method is called internally when a photo error response is received.
|
|
124
|
+
* It rejects the corresponding pending promise with the error information.
|
|
125
|
+
*
|
|
126
|
+
* @param errorResponse - The error response received
|
|
127
|
+
* @internal This method is used internally by AppSession
|
|
128
|
+
*/
|
|
129
|
+
handlePhotoError(errorResponse: {
|
|
130
|
+
requestId: string;
|
|
131
|
+
success: false;
|
|
132
|
+
error: {
|
|
133
|
+
code: string;
|
|
134
|
+
message: string;
|
|
135
|
+
};
|
|
136
|
+
}): void;
|
|
120
137
|
/**
|
|
121
138
|
* 🔍 Check if there's a pending photo request for the given request ID
|
|
122
139
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"camera.d.ts","sourceRoot":"","sources":["../../../../src/app/session/modules/camera.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAEL,SAAS,EAIT,gBAAgB,EAEhB,mBAAmB,
|
|
1
|
+
{"version":3,"file":"camera.d.ts","sourceRoot":"","sources":["../../../../src/app/session/modules/camera.ts"],"names":[],"mappings":"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"}
|
|
@@ -183,6 +183,29 @@ class CameraModule {
|
|
|
183
183
|
this.logger.warn({ requestId }, `📸 Received photo for unknown request ID: ${requestId}`);
|
|
184
184
|
}
|
|
185
185
|
}
|
|
186
|
+
/**
|
|
187
|
+
* ❌ Handle photo error from /photo-upload endpoint
|
|
188
|
+
*
|
|
189
|
+
* This method is called internally when a photo error response is received.
|
|
190
|
+
* It rejects the corresponding pending promise with the error information.
|
|
191
|
+
*
|
|
192
|
+
* @param errorResponse - The error response received
|
|
193
|
+
* @internal This method is used internally by AppSession
|
|
194
|
+
*/
|
|
195
|
+
handlePhotoError(errorResponse) {
|
|
196
|
+
const { requestId, error } = errorResponse;
|
|
197
|
+
const pendingRequest = this.pendingPhotoRequests.get(requestId);
|
|
198
|
+
if (pendingRequest) {
|
|
199
|
+
this.logger.error({ requestId, errorCode: error.code, errorMessage: error.message }, `📸 Photo capture failed: ${error.code} - ${error.message}`);
|
|
200
|
+
// Reject the promise with the error information
|
|
201
|
+
pendingRequest.reject(`${error.code}: ${error.message}`);
|
|
202
|
+
// Clean up
|
|
203
|
+
this.pendingPhotoRequests.delete(requestId);
|
|
204
|
+
}
|
|
205
|
+
else {
|
|
206
|
+
this.logger.warn({ requestId, errorCode: error.code, errorMessage: error.message }, `📸 Received photo error for unknown request ID: ${requestId}`);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
186
209
|
/**
|
|
187
210
|
* 🔍 Check if there's a pending photo request for the given request ID
|
|
188
211
|
*
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Simple Storage SDK Module for MentraOS Apps
|
|
3
|
+
* Provides localStorage-like API with cloud synchronization
|
|
4
|
+
*/
|
|
5
|
+
import { AppSession } from "..";
|
|
6
|
+
/**
|
|
7
|
+
* Key-value storage with local caching and cloud sync
|
|
8
|
+
* Data is isolated by userId and packageName
|
|
9
|
+
*/
|
|
10
|
+
export declare class SimpleStorage {
|
|
11
|
+
private storage;
|
|
12
|
+
private appSession;
|
|
13
|
+
private userId;
|
|
14
|
+
private packageName;
|
|
15
|
+
private baseUrl;
|
|
16
|
+
constructor(appSession: AppSession);
|
|
17
|
+
private getBaseUrl;
|
|
18
|
+
private getAuthHeaders;
|
|
19
|
+
private fetchStorageFromCloud;
|
|
20
|
+
get(key: string): Promise<string | undefined>;
|
|
21
|
+
set(key: string, value: string): Promise<void>;
|
|
22
|
+
delete(key: string): Promise<boolean>;
|
|
23
|
+
clear(): Promise<boolean>;
|
|
24
|
+
keys(): Promise<string[]>;
|
|
25
|
+
size(): Promise<number>;
|
|
26
|
+
hasKey(key: string): Promise<boolean>;
|
|
27
|
+
getAllData(): Promise<Record<string, string>>;
|
|
28
|
+
setMultiple(data: Record<string, string>): Promise<void>;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=simple-storage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"simple-storage.d.ts","sourceRoot":"","sources":["../../../../src/app/session/modules/simple-storage.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAGhC;;;GAGG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,OAAO,CAAuC;IACtD,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,OAAO,CAAS;gBAEZ,UAAU,EAAE,UAAU;IAQlC,OAAO,CAAC,UAAU;IAOlB,OAAO,CAAC,cAAc;YASR,qBAAqB;IA8BtB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAe7C,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA+B9C,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAqCrC,KAAK,IAAI,OAAO,CAAC,OAAO,CAAC;IA6BzB,IAAI,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAazB,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC;IAavB,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAarC,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAa7C,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;CAgCtE"}
|