@mentra/sdk 2.1.9 → 2.1.11

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.
@@ -1,20 +1,3 @@
1
- /**
2
- * 🎨 Layout Manager Module
3
- *
4
- * Manages AR display layouts for Apps. This class provides an easy-to-use interface
5
- * for showing different types of content in the user's AR view.
6
- *
7
- * @example
8
- * ```typescript
9
- * const layouts = new LayoutManager('org.example.myapp', sendMessage);
10
- *
11
- * // Show a simple message
12
- * layouts.showTextWall('Hello AR World!');
13
- *
14
- * // Show a card with title
15
- * layouts.showReferenceCard('Weather', 'Sunny and 75°F');
16
- * ```
17
- */
18
1
  import { DisplayRequest, ViewType } from "../../types";
19
2
  export declare class LayoutManager {
20
3
  private packageName;
@@ -125,9 +108,13 @@ export declare class LayoutManager {
125
108
  * );
126
109
  * ```
127
110
  */
128
- showBitmapView(data: string, options?: {
111
+ showBitmapView(base64Bitmap: string, options?: {
129
112
  view?: ViewType;
130
- }): void;
113
+ padding?: {
114
+ left: number;
115
+ top: number;
116
+ };
117
+ }): Promise<void>;
131
118
  /**
132
119
  * 📊 Shows a dashboard card with left and right text
133
120
  *
@@ -1 +1 @@
1
- {"version":3,"file":"layouts.d.ts","sourceRoot":"","sources":["../../../src/app/session/layouts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,EACL,cAAc,EAOd,QAAQ,EAKT,MAAM,aAAa,CAAC;AAErB,qBAAa,aAAa;IAQtB,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,WAAW;IARrB;;;;;OAKG;gBAEO,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,CAAC,OAAO,EAAE,cAAc,KAAK,IAAI;IAGxD;;;;;;;;OAQG;IACH,OAAO,CAAC,kBAAkB;IAoH1B;;;;;;;;;;;;;;;;;OAiBG;IACH,YAAY,CACV,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,QAAQ,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE;IAuCpD;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,kBAAkB,CAChB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,QAAQ,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE;IAYpD;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,iBAAiB,CACf,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,QAAQ,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE;IAYpD;;;;;;;;;;;;;;;;OAgBG;IACH,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,QAAQ,CAAA;KAAE;IAQ1D;;;;;;;;;;;;;;;;OAgBG;IACH,iBAAiB,CACf,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,QAAQ,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE;IAgBpD;;;;;;;;;;;;;;;OAeG;IACH,SAAS,CAAC,OAAO,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,QAAQ,CAAA;KAAE;IAOvC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA6BG;IACH,mBAAmB,CACjB,eAAe,EAAE,MAAM,EAAE,EACzB,UAAU,GAAE,MAAa,EACzB,MAAM,GAAE,OAAe,EACvB,OAAO,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,QAAQ,CAAA;KAAE,GAC5B;QAAE,IAAI,EAAE,MAAM,IAAI,CAAA;KAAE;CAiCxB"}
1
+ {"version":3,"file":"layouts.d.ts","sourceRoot":"","sources":["../../../src/app/session/layouts.ts"],"names":[],"mappings":"AAkBA,OAAO,EACL,cAAc,EAOd,QAAQ,EAKT,MAAM,aAAa,CAAC;AAErB,qBAAa,aAAa;IAQtB,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,WAAW;IARrB;;;;;OAKG;gBAEO,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,CAAC,OAAO,EAAE,cAAc,KAAK,IAAI;IAGxD;;;;;;;;OAQG;IACH,OAAO,CAAC,kBAAkB;IAoH1B;;;;;;;;;;;;;;;;;OAiBG;IACH,YAAY,CACV,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,QAAQ,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE;IAuCpD;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,kBAAkB,CAChB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,QAAQ,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE;IAYpD;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,iBAAiB,CACf,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,QAAQ,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE;IAYpD;;;;;;;;;;;;;;;;OAgBG;IACG,cAAc,CAClB,YAAY,EAAE,MAAM,EACpB,OAAO,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,QAAQ,CAAC;QAAC,OAAO,CAAC,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,GAAG,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE;IAoBxE;;;;;;;;;;;;;;;;OAgBG;IACH,iBAAiB,CACf,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,QAAQ,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE;IAgBpD;;;;;;;;;;;;;;;OAeG;IACH,SAAS,CAAC,OAAO,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,QAAQ,CAAA;KAAE;IAOvC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA6BG;IACH,mBAAmB,CACjB,eAAe,EAAE,MAAM,EAAE,EACzB,UAAU,GAAE,MAAa,EACzB,MAAM,GAAE,OAAe,EACvB,OAAO,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,QAAQ,CAAA;KAAE,GAC5B;QAAE,IAAI,EAAE,MAAM,IAAI,CAAA;KAAE;CAiCxB"}
@@ -18,6 +18,7 @@ exports.LayoutManager = void 0;
18
18
  * layouts.showReferenceCard('Weather', 'Sunny and 75°F');
19
19
  * ```
20
20
  */
21
+ const bitmap_utils_1 = require("src/utils/bitmap-utils");
21
22
  const types_1 = require("../../types");
22
23
  class LayoutManager {
23
24
  /**
@@ -254,10 +255,16 @@ class LayoutManager {
254
255
  * );
255
256
  * ```
256
257
  */
257
- showBitmapView(data, options) {
258
+ async showBitmapView(base64Bitmap, options) {
259
+ const padding = options?.padding ?? { left: 50, top: 35 };
260
+ const bitmapFrame = await bitmap_utils_1.BitmapUtils.padBase64Bitmap(base64Bitmap, padding);
261
+ const validation = bitmap_utils_1.BitmapUtils.validateBase64Bitmap(bitmapFrame);
262
+ if (!validation.isValid) {
263
+ throw new Error(`❌ Frame validation failed: ${validation.errors.join(", ")}`);
264
+ }
258
265
  const layout = {
259
266
  layoutType: types_1.LayoutType.BITMAP_VIEW,
260
- data: data,
267
+ data: bitmapFrame,
261
268
  };
262
269
  this.sendMessage(this.createDisplayEvent(layout, options?.view));
263
270
  }
@@ -1,6 +1,6 @@
1
- import { AppSettingType, AppType } from './enums';
1
+ import { AppSettingType, AppType } from "./enums";
2
2
  export interface ToolParameterSchema {
3
- type: 'string' | 'number' | 'boolean';
3
+ type: "string" | "number" | "boolean";
4
4
  description: string;
5
5
  enum?: string[];
6
6
  required?: boolean;
@@ -24,6 +24,7 @@ export interface DeveloperProfile {
24
24
  export declare enum PermissionType {
25
25
  MICROPHONE = "MICROPHONE",
26
26
  LOCATION = "LOCATION",
27
+ BACKGROUND_LOCATION = "BACKGROUND_LOCATION",
27
28
  CALENDAR = "CALENDAR",
28
29
  CAMERA = "CAMERA",
29
30
  NOTIFICATIONS = "NOTIFICATIONS",
@@ -62,7 +63,7 @@ export interface AppI {
62
63
  settings?: AppSettings;
63
64
  tools?: ToolSchema[];
64
65
  isPublic?: boolean;
65
- appStoreStatus?: 'DEVELOPMENT' | 'SUBMITTED' | 'REJECTED' | 'PUBLISHED';
66
+ appStoreStatus?: "DEVELOPMENT" | "SUBMITTED" | "REJECTED" | "PUBLISHED";
66
67
  }
67
68
  /**
68
69
  * Base interface for all app settings
@@ -1 +1 @@
1
- {"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../src/types/models.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../src/types/models.ts"],"names":[],"mappings":"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"}
@@ -10,6 +10,7 @@ var PermissionType;
10
10
  (function (PermissionType) {
11
11
  PermissionType["MICROPHONE"] = "MICROPHONE";
12
12
  PermissionType["LOCATION"] = "LOCATION";
13
+ PermissionType["BACKGROUND_LOCATION"] = "BACKGROUND_LOCATION";
13
14
  PermissionType["CALENDAR"] = "CALENDAR";
14
15
  PermissionType["CAMERA"] = "CAMERA";
15
16
  // Legacy notification permission (backward compatibility)
@@ -21,7 +22,7 @@ var PermissionType;
21
22
  })(PermissionType || (exports.PermissionType = PermissionType = {}));
22
23
  // Legacy permission mapping for backward compatibility
23
24
  exports.LEGACY_PERMISSION_MAP = new Map([
24
- [PermissionType.NOTIFICATIONS, [PermissionType.READ_NOTIFICATIONS]]
25
+ [PermissionType.NOTIFICATIONS, [PermissionType.READ_NOTIFICATIONS]],
25
26
  ]);
26
27
  /**
27
28
  * Validate a App configuration object
@@ -29,12 +30,12 @@ exports.LEGACY_PERMISSION_MAP = new Map([
29
30
  * @returns True if the config is valid
30
31
  */
31
32
  function validateAppConfig(config) {
32
- if (!config || typeof config !== 'object')
33
+ if (!config || typeof config !== "object")
33
34
  return false;
34
35
  // Check required string properties
35
- if (typeof config.name !== 'string' ||
36
- typeof config.description !== 'string' ||
37
- typeof config.version !== 'string') {
36
+ if (typeof config.name !== "string" ||
37
+ typeof config.description !== "string" ||
38
+ typeof config.version !== "string") {
38
39
  return false;
39
40
  }
40
41
  // Check settings array
@@ -43,50 +44,56 @@ function validateAppConfig(config) {
43
44
  // Validate each setting
44
45
  return config.settings.every((setting) => {
45
46
  // Group settings just need a title
46
- if (setting.type === 'group') {
47
- return typeof setting.title === 'string';
47
+ if (setting.type === "group") {
48
+ return typeof setting.title === "string";
48
49
  }
49
50
  // TITLE_VALUE settings just need label and value
50
- if (setting.type === 'titleValue') {
51
- return typeof setting.label === 'string' && 'value' in setting;
51
+ if (setting.type === "titleValue") {
52
+ return typeof setting.label === "string" && "value" in setting;
52
53
  }
53
54
  // Regular settings need key and label
54
- if (typeof setting.key !== 'string' || typeof setting.label !== 'string') {
55
+ if (typeof setting.key !== "string" || typeof setting.label !== "string") {
55
56
  return false;
56
57
  }
57
58
  // Type-specific validation
58
59
  switch (setting.type) {
59
60
  case enums_1.AppSettingType.TOGGLE:
60
- return typeof setting.defaultValue === 'boolean';
61
+ return typeof setting.defaultValue === "boolean";
61
62
  case enums_1.AppSettingType.TEXT:
62
63
  case enums_1.AppSettingType.TEXT_NO_SAVE_BUTTON:
63
- return setting.defaultValue === undefined || typeof setting.defaultValue === 'string';
64
+ return (setting.defaultValue === undefined ||
65
+ typeof setting.defaultValue === "string");
64
66
  case enums_1.AppSettingType.SELECT:
65
67
  case enums_1.AppSettingType.SELECT_WITH_SEARCH:
66
- return Array.isArray(setting.options) &&
67
- setting.options.every((opt) => typeof opt.label === 'string' && 'value' in opt);
68
+ return (Array.isArray(setting.options) &&
69
+ setting.options.every((opt) => typeof opt.label === "string" && "value" in opt));
68
70
  case enums_1.AppSettingType.MULTISELECT:
69
- return Array.isArray(setting.options) &&
70
- setting.options.every((opt) => typeof opt.label === 'string' && 'value' in opt) &&
71
- (setting.defaultValue === undefined || Array.isArray(setting.defaultValue));
71
+ return (Array.isArray(setting.options) &&
72
+ setting.options.every((opt) => typeof opt.label === "string" && "value" in opt) &&
73
+ (setting.defaultValue === undefined ||
74
+ Array.isArray(setting.defaultValue)));
72
75
  case enums_1.AppSettingType.SLIDER:
73
- return typeof setting.defaultValue === 'number' &&
74
- typeof setting.min === 'number' &&
75
- typeof setting.max === 'number' &&
76
- setting.min <= setting.max;
76
+ return (typeof setting.defaultValue === "number" &&
77
+ typeof setting.min === "number" &&
78
+ typeof setting.max === "number" &&
79
+ setting.min <= setting.max);
77
80
  case enums_1.AppSettingType.NUMERIC_INPUT:
78
- return (setting.defaultValue === undefined || typeof setting.defaultValue === 'number') &&
79
- (setting.min === undefined || typeof setting.min === 'number') &&
80
- (setting.max === undefined || typeof setting.max === 'number') &&
81
- (setting.step === undefined || typeof setting.step === 'number') &&
82
- (setting.placeholder === undefined || typeof setting.placeholder === 'string');
81
+ return ((setting.defaultValue === undefined ||
82
+ typeof setting.defaultValue === "number") &&
83
+ (setting.min === undefined || typeof setting.min === "number") &&
84
+ (setting.max === undefined || typeof setting.max === "number") &&
85
+ (setting.step === undefined || typeof setting.step === "number") &&
86
+ (setting.placeholder === undefined ||
87
+ typeof setting.placeholder === "string"));
83
88
  case enums_1.AppSettingType.TIME_PICKER:
84
- return (setting.defaultValue === undefined || typeof setting.defaultValue === 'number') &&
85
- (setting.showSeconds === undefined || typeof setting.showSeconds === 'boolean');
89
+ return ((setting.defaultValue === undefined ||
90
+ typeof setting.defaultValue === "number") &&
91
+ (setting.showSeconds === undefined ||
92
+ typeof setting.showSeconds === "boolean"));
86
93
  case enums_1.AppSettingType.GROUP:
87
- return typeof setting.title === 'string';
94
+ return typeof setting.title === "string";
88
95
  case enums_1.AppSettingType.TITLE_VALUE:
89
- return typeof setting.label === 'string' && 'value' in setting;
96
+ return typeof setting.label === "string" && "value" in setting;
90
97
  default:
91
98
  return false;
92
99
  }
@@ -57,6 +57,7 @@ export interface LoadFramesOptions {
57
57
  * Utility class for working with bitmap images in MentraOS applications
58
58
  */
59
59
  export declare class BitmapUtils {
60
+ static convert24BitTo1BitBMP(input24BitBmp: Buffer): Promise<Buffer>;
60
61
  /**
61
62
  * Load a BMP file as hex string from filesystem
62
63
  *
@@ -66,13 +67,17 @@ export declare class BitmapUtils {
66
67
  *
67
68
  * @example
68
69
  * ```typescript
69
- * const bmpHex = await BitmapUtils.loadBmpAsHex('./assets/icon.bmp');
70
- * session.layouts.showBitmapView(bmpHex);
70
+ * const bmpBase64 = await BitmapUtils.loadBmpFromFileAsBase64('./assets/icon.bmp');
71
+ * session.layouts.showBitmapView(bmpBase64);
71
72
  * ```
72
73
  */
73
- static loadBmpFromFileAsHex(filePath: string): Promise<string>;
74
- static convert24BitTo1BitBMP(input24BitBmp: Buffer): Promise<Buffer>;
75
- static loadBmpFromDataAsHex(bmpData: Buffer): Promise<string>;
74
+ static fileToBase64(filePath: string): Promise<string>;
75
+ static bufferToBase64(bmpData: Buffer): Promise<string>;
76
+ static padBase64Bitmap(bmpBase64: string, padding?: {
77
+ left: number;
78
+ top: number;
79
+ }): Promise<string>;
80
+ static padBmpForGlasses(bmpData: Buffer, leftPadding?: number, topPadding?: number): Promise<Buffer>;
76
81
  /**
77
82
  * Load multiple BMP frames as hex array for animations
78
83
  *
@@ -110,7 +115,7 @@ export declare class BitmapUtils {
110
115
  * }
111
116
  * ```
112
117
  */
113
- static validateBmpHex(hexString: string): BitmapValidation;
118
+ static validateBase64Bitmap(bmpFrame: string): BitmapValidation;
114
119
  /**
115
120
  * Convert bitmap data between different formats
116
121
  *
@@ -1 +1 @@
1
- {"version":3,"file":"bitmap-utils.d.ts","sourceRoot":"","sources":["../../src/utils/bitmap-utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAMH;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,uCAAuC;IACvC,OAAO,EAAE,OAAO,CAAC;IACjB,qCAAqC;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,4CAA4C;IAC5C,WAAW,EAAE,MAAM,CAAC;IACpB,yCAAyC;IACzC,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,2CAA2C;IAC3C,QAAQ,CAAC,EAAE;QACT,iDAAiD;QACjD,UAAU,CAAC,EAAE;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,CAAC;QAC/C,8BAA8B;QAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,gEAAgE;IAChE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,yCAAyC;IACzC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,yDAAyD;IACzD,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,8DAA8D;IAC9D,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED;;GAEG;AACH,qBAAa,WAAW;IACtB;;;;;;;;;;;;OAYG;WACU,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;WAevD,qBAAqB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;WA+G7D,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAkDnE;;;;;;;;;;;;;;;;;;;OAmBG;WACU,aAAa,CACxB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,MAAM,EAAE,CAAC;IAgEpB;;;;;;;;;;;;;;;OAeG;IACH,MAAM,CAAC,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,gBAAgB;IA+F1D;;;;;;;;;;;;;OAaG;IACH,MAAM,CAAC,aAAa,CAClB,IAAI,EAAE,MAAM,GAAG,MAAM,EACrB,UAAU,EAAE,KAAK,GAAG,QAAQ,GAAG,QAAQ,EACvC,QAAQ,EAAE,KAAK,GAAG,QAAQ,GAAG,QAAQ,GACpC,MAAM,GAAG,MAAM;IA+BlB;;;;;;;;;;;OAWG;IACH,MAAM,CAAC,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG;QACvC,SAAS,EAAE,MAAM,CAAC;QAClB,WAAW,EAAE,MAAM,CAAC;QACpB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,UAAU,EAAE,OAAO,CAAC;KACrB;CAsCF"}
1
+ {"version":3,"file":"bitmap-utils.d.ts","sourceRoot":"","sources":["../../src/utils/bitmap-utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAMH;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,uCAAuC;IACvC,OAAO,EAAE,OAAO,CAAC;IACjB,qCAAqC;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,4CAA4C;IAC5C,WAAW,EAAE,MAAM,CAAC;IACpB,yCAAyC;IACzC,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,2CAA2C;IAC3C,QAAQ,CAAC,EAAE;QACT,iDAAiD;QACjD,UAAU,CAAC,EAAE;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,CAAC;QAC/C,8BAA8B;QAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,gEAAgE;IAChE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,yCAAyC;IACzC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,yDAAyD;IACzD,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,8DAA8D;IAC9D,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED;;GAEG;AACH,qBAAa,WAAW;WACT,qBAAqB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA+G1E;;;;;;;;;;;;OAYG;WACU,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;WAe/C,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;WAIhD,eAAe,CAC1B,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,GACtC,OAAO,CAAC,MAAM,CAAC;WAUL,gBAAgB,CAC3B,OAAO,EAAE,MAAM,EACf,WAAW,GAAE,MAAW,EACxB,UAAU,GAAE,MAAW,GACtB,OAAO,CAAC,MAAM,CAAC;IAkDlB;;;;;;;;;;;;;;;;;;;OAmBG;WACU,aAAa,CACxB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,MAAM,EAAE,CAAC;IAgEpB;;;;;;;;;;;;;;;OAeG;IACH,MAAM,CAAC,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,gBAAgB;IAgG/D;;;;;;;;;;;;;OAaG;IACH,MAAM,CAAC,aAAa,CAClB,IAAI,EAAE,MAAM,GAAG,MAAM,EACrB,UAAU,EAAE,KAAK,GAAG,QAAQ,GAAG,QAAQ,EACvC,QAAQ,EAAE,KAAK,GAAG,QAAQ,GAAG,QAAQ,GACpC,MAAM,GAAG,MAAM;IA+BlB;;;;;;;;;;;OAWG;IACH,MAAM,CAAC,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG;QACvC,SAAS,EAAE,MAAM,CAAC;QAClB,WAAW,EAAE,MAAM,CAAC;QACpB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,UAAU,EAAE,OAAO,CAAC;KACrB;CAsCF"}
@@ -60,31 +60,6 @@ const jimp_1 = require("jimp");
60
60
  * Utility class for working with bitmap images in MentraOS applications
61
61
  */
62
62
  class BitmapUtils {
63
- /**
64
- * Load a BMP file as hex string from filesystem
65
- *
66
- * @param filePath - Path to the BMP file
67
- * @returns Promise resolving to hex-encoded bitmap data
68
- * @throws Error if file cannot be read or is not a valid BMP
69
- *
70
- * @example
71
- * ```typescript
72
- * const bmpHex = await BitmapUtils.loadBmpAsHex('./assets/icon.bmp');
73
- * session.layouts.showBitmapView(bmpHex);
74
- * ```
75
- */
76
- static async loadBmpFromFileAsHex(filePath) {
77
- try {
78
- const bmpData = await fs.readFile(filePath);
79
- return this.loadBmpFromDataAsHex(bmpData);
80
- }
81
- catch (error) {
82
- if (error instanceof Error) {
83
- throw new Error(`Failed to load BMP file ${filePath}: ${error.message}`);
84
- }
85
- throw new Error(`Failed to load BMP file ${filePath}: Unknown error`);
86
- }
87
- }
88
63
  static async convert24BitTo1BitBMP(input24BitBmp) {
89
64
  // Read header information from 24-bit BMP
90
65
  const width = input24BitBmp.readUInt32LE(18);
@@ -179,7 +154,40 @@ class BitmapUtils {
179
154
  }
180
155
  return output1BitBmp;
181
156
  }
182
- static async loadBmpFromDataAsHex(bmpData) {
157
+ /**
158
+ * Load a BMP file as hex string from filesystem
159
+ *
160
+ * @param filePath - Path to the BMP file
161
+ * @returns Promise resolving to hex-encoded bitmap data
162
+ * @throws Error if file cannot be read or is not a valid BMP
163
+ *
164
+ * @example
165
+ * ```typescript
166
+ * const bmpBase64 = await BitmapUtils.loadBmpFromFileAsBase64('./assets/icon.bmp');
167
+ * session.layouts.showBitmapView(bmpBase64);
168
+ * ```
169
+ */
170
+ static async fileToBase64(filePath) {
171
+ try {
172
+ const bmpData = await fs.readFile(filePath);
173
+ return this.bufferToBase64(bmpData);
174
+ }
175
+ catch (error) {
176
+ if (error instanceof Error) {
177
+ throw new Error(`Failed to load BMP file ${filePath}: ${error.message}`);
178
+ }
179
+ throw new Error(`Failed to load BMP file ${filePath}: Unknown error`);
180
+ }
181
+ }
182
+ static async bufferToBase64(bmpData) {
183
+ return bmpData.toString("base64");
184
+ }
185
+ static async padBase64Bitmap(bmpBase64, padding) {
186
+ const buffer = Buffer.from(bmpBase64, "base64");
187
+ const paddedBuffer = await this.padBmpForGlasses(buffer, padding?.left, padding?.top);
188
+ return paddedBuffer.toString("base64");
189
+ }
190
+ static async padBmpForGlasses(bmpData, leftPadding = 50, topPadding = 35) {
183
191
  try {
184
192
  // Basic BMP validation - check for BMP signature
185
193
  if (bmpData.length < 14 || bmpData[0] !== 0x42 || bmpData[1] !== 0x4d) {
@@ -195,7 +203,7 @@ class BitmapUtils {
195
203
  const paddedImage = new jimp_1.Jimp({
196
204
  width: 576,
197
205
  height: 135,
198
- color: 0xffffffff,
206
+ color: 0x00000000,
199
207
  });
200
208
  // // Calculate position to place the original image (with padding)
201
209
  const leftPadding = 50; // 45px padding on left
@@ -207,7 +215,7 @@ class BitmapUtils {
207
215
  }
208
216
  // No padding needed, just return as hex
209
217
  console.log(`finalBmpData: ${finalBmpData.length} bytes`);
210
- return finalBmpData.toString("hex");
218
+ return finalBmpData;
211
219
  }
212
220
  catch (error) {
213
221
  if (error instanceof Error) {
@@ -245,9 +253,9 @@ class BitmapUtils {
245
253
  const fileName = filePattern.replace("{i}", frameNumber.toString());
246
254
  const filePath = path.join(basePath, fileName);
247
255
  try {
248
- const frameHex = await this.loadBmpFromFileAsHex(filePath);
256
+ const frameBase64 = await this.fileToBase64(filePath);
249
257
  if (validateFrames) {
250
- const validation = this.validateBmpHex(frameHex);
258
+ const validation = this.validateBase64Bitmap(frameBase64);
251
259
  if (!validation.isValid) {
252
260
  const errorMsg = `Frame ${frameNumber} validation failed: ${validation.errors.join(", ")}`;
253
261
  if (skipMissingFrames) {
@@ -260,7 +268,7 @@ class BitmapUtils {
260
268
  }
261
269
  console.log(`✅ Frame ${frameNumber} validated (${validation.blackPixels} black pixels)`);
262
270
  }
263
- frames.push(frameHex);
271
+ frames.push(frameBase64);
264
272
  }
265
273
  catch (error) {
266
274
  const errorMsg = `Failed to load frame ${frameNumber} (${fileName}): ${error instanceof Error ? error.message : "Unknown error"}`;
@@ -298,12 +306,13 @@ class BitmapUtils {
298
306
  * }
299
307
  * ```
300
308
  */
301
- static validateBmpHex(hexString) {
309
+ static validateBase64Bitmap(bmpFrame) {
302
310
  const errors = [];
303
311
  let byteCount = 0;
304
312
  let blackPixels = 0;
305
313
  const metadata = {};
306
314
  try {
315
+ const hexString = Buffer.from(bmpFrame, "base64").toString("hex");
307
316
  // Basic hex validation
308
317
  if (typeof hexString !== "string" || hexString.length === 0) {
309
318
  errors.push("Hex string is empty or invalid");
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mentra/sdk",
3
- "version": "2.1.9",
3
+ "version": "2.1.11",
4
4
  "description": "Build apps for MentraOS smartglasses. This SDK provides everything you need to create real-time smartglasses applications.",
5
5
  "source": "src/index.ts",
6
6
  "main": "dist/index.js",