@moddable/typings 8.2.3 → 8.3.0

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 (45) hide show
  1. package/embedded/RTC.d.ts +1 -0
  2. package/embedded/display.d.ts +1 -0
  3. package/embedded/storage/files.d.ts +2 -0
  4. package/embedded/storage/flash.d.ts +1 -0
  5. package/embedded/storage/key-value.d.ts +1 -0
  6. package/embedded/update.d.ts +1 -1
  7. package/embedded_io/analog.d.ts +2 -0
  8. package/embedded_io/audio/in.d.ts +1 -0
  9. package/embedded_io/audio/out.d.ts +2 -0
  10. package/embedded_io/ble/central.d.ts +3 -1
  11. package/embedded_io/ble/peripheral.d.ts +6 -3
  12. package/embedded_io/crypt/digest.d.ts +47 -0
  13. package/embedded_io/digital.d.ts +1 -0
  14. package/embedded_io/digitalbank.d.ts +1 -0
  15. package/embedded_io/i2c.d.ts +4 -0
  16. package/embedded_io/pulsecount.d.ts +2 -0
  17. package/embedded_io/pwm.d.ts +2 -0
  18. package/embedded_io/serial.d.ts +1 -0
  19. package/embedded_io/socket/listener.d.ts +2 -0
  20. package/embedded_io/socket/{tls.d.ts → tcp/tls.d.ts} +4 -3
  21. package/embedded_io/socket/tcp.d.ts +3 -1
  22. package/embedded_io/socket/udp.d.ts +2 -0
  23. package/embedded_io/spi.d.ts +2 -0
  24. package/embedded_network/dns/resolver/udp.d.ts +1 -0
  25. package/embedded_network/dnssd.d.ts +6 -4
  26. package/embedded_network/http/client.d.ts +3 -1
  27. package/embedded_network/http/server.d.ts +4 -2
  28. package/embedded_network/interface/ethernet.d.ts +1 -0
  29. package/embedded_network/interface/wifi.d.ts +1 -0
  30. package/embedded_network/mdns.d.ts +6 -4
  31. package/embedded_network/mqtt/client.d.ts +4 -2
  32. package/embedded_network/ntp/client.d.ts +3 -1
  33. package/embedded_network/websocket/client.d.ts +1 -0
  34. package/package.json +1 -1
  35. package/pebble/accelerometer.d.ts +1 -0
  36. package/pebble/battery.d.ts +1 -0
  37. package/pebble/button.d.ts +31 -4
  38. package/pebble/compass.d.ts +1 -0
  39. package/pebble/dictation.d.ts +1 -0
  40. package/pebble/global.d.ts +7 -1
  41. package/pebble/health.d.ts +144 -0
  42. package/pebble/location.d.ts +1 -0
  43. package/pebble/message.d.ts +1 -0
  44. package/tsconfig.es2024.json +2 -1
  45. package/tsconfig.es2025.json +1 -1
package/embedded/RTC.d.ts CHANGED
@@ -37,6 +37,7 @@ declare module "embedded:RTC" {
37
37
  time: number;
38
38
  configure(options: RTCConfigureOptions): void;
39
39
  }
40
+ export interface RTC extends Disposable {}
40
41
 
41
42
  export default RTC;
42
43
  }
@@ -63,6 +63,7 @@ declare module "embedded:display" {
63
63
  get width(): number;
64
64
  get height(): number;
65
65
  }
66
+ interface Display extends Disposable {}
66
67
 
67
68
  export default Display;
68
69
  }
@@ -39,6 +39,7 @@ declare module "embedded:storage/files" {
39
39
  setSize(length: number): void;
40
40
  flush(): void;
41
41
  }
42
+ export interface File extends Disposable {}
42
43
 
43
44
  export interface DirectoryOpenFileOptions {
44
45
  path: string;
@@ -72,4 +73,5 @@ declare module "embedded:storage/files" {
72
73
  scan(path?: string): IterableIterator<string>;
73
74
  [Symbol.iterator](): IterableIterator<string>;
74
75
  }
76
+ export interface Directory extends Disposable {}
75
77
  }
@@ -46,6 +46,7 @@ declare module "embedded:storage/flash" {
46
46
 
47
47
  format: "buffer";
48
48
  }
49
+ export interface Flash extends Disposable {}
49
50
 
50
51
  const FlashStorage: {
51
52
  open(options: FlashOpenOptions): Flash;
@@ -41,6 +41,7 @@ declare module "embedded:storage/key-value" {
41
41
 
42
42
  format: StorageFormat;
43
43
  }
44
+ export interface Storage extends Disposable {}
44
45
 
45
46
  const KeyValueStorage: {
46
47
  open(options: StorageOpenOptions): Storage;
@@ -27,7 +27,7 @@ declare module "embedded:update" {
27
27
  byteLength?: number;
28
28
  }
29
29
 
30
- export interface Updater {
30
+ export interface Updater extends Disposable {
31
31
  close(): void;
32
32
  complete(): void;
33
33
  write(bytes: ByteBuffer): void;
@@ -31,9 +31,11 @@ declare module "embedded:io/analog" {
31
31
  readonly resolution: number;
32
32
  onReadable?: () => void;
33
33
  read(): number;
34
+ close(): void;
34
35
  get format(): "number"
35
36
  set format(value: "number")
36
37
  target?: any;
37
38
  }
39
+ interface Analog extends Disposable {}
38
40
  export default Analog;
39
41
  }
@@ -45,6 +45,7 @@ declare module "embedded:io/audio/in" {
45
45
  get format(): "buffer"
46
46
  set format(value: "buffer")
47
47
  }
48
+ interface AudioIn extends Disposable {}
48
49
 
49
50
  export { AudioIn as default };
50
51
  }
@@ -36,6 +36,7 @@ declare module "embedded:io/audio/out" {
36
36
  write(buffer: ByteBuffer): void;
37
37
  start(): void;
38
38
  stop(options?: { flush?: boolean }): void;
39
+ close(): void;
39
40
 
40
41
  readonly audioType: AudioType;
41
42
  readonly bitsPerSample: 8 | 16;
@@ -45,6 +46,7 @@ declare module "embedded:io/audio/out" {
45
46
  set format(value: "buffer")
46
47
  volume: number;
47
48
  }
49
+ interface AudioOut extends Disposable {}
48
50
 
49
51
  export { AudioOut as default };
50
52
  }
@@ -23,6 +23,7 @@ declare module "embedded:io/bluetoothle/central" {
23
23
  close(): void;
24
24
  read(): Advertisement;
25
25
  }
26
+ interface GAPClient extends Disposable {}
26
27
 
27
28
  interface GATTClientNotifiedValue extends ArrayBuffer {
28
29
  handle: number
@@ -100,6 +101,7 @@ declare module "embedded:io/bluetoothle/central" {
100
101
  writeWithOutResponse: 4;
101
102
  };
102
103
  }
103
-
104
+ interface GATTClient extends Disposable {}
105
+
104
106
  export { GATTClient, GAPClient };
105
107
  }
@@ -13,11 +13,13 @@ declare module "embedded:io/bluetoothle/peripheral" {
13
13
  onWarning?(this: GATTServer, message: string): void;
14
14
  }
15
15
 
16
- interface GATTServerConnection {
16
+ interface GATTServerConnection extends Disposable {
17
17
  close(): void;
18
18
  notify(characteristic: GATTServerCharacteristic, value: ArrayBuffer, callback?: (error?: Error) => void): void;
19
19
  replyToPasskey(action: "input" | "compareNumber" | "outOfBand", value: number | boolean | ArrayBuffer): void;
20
- get maxinumWrite(): number;
20
+ disconnect(): void;
21
+ readonly maxinumWrite: number;
22
+ readonly remoteAddress: string | undefined;
21
23
  }
22
24
 
23
25
  interface GATTServerService {
@@ -56,7 +58,7 @@ declare module "embedded:io/bluetoothle/peripheral" {
56
58
  class GATTServer {
57
59
  constructor(options: GATTServerOptions);
58
60
 
59
- close?(): void;
61
+ close(): void;
60
62
  addService(service: GATTServerService): void;
61
63
  deleteService(service: GATTServerService): void;
62
64
  startAdvertising(scan: GATTServerAdvertisingRecords, response?: GATTServerAdvertisingRecords): void;
@@ -86,6 +88,7 @@ declare module "embedded:io/bluetoothle/peripheral" {
86
88
  dualModeHost: 16;
87
89
  }
88
90
  }
91
+ interface GATTServer extends Disposable {}
89
92
 
90
93
  export { GATTServer };
91
94
  }
@@ -0,0 +1,47 @@
1
+ /*
2
+ * Copyright (c) 2026 Moddable Tech, Inc.
3
+ *
4
+ * This file is part of the Moddable SDK Tools.
5
+ *
6
+ * The Moddable SDK Tools is free software: you can redistribute it and/or modify
7
+ * it under the terms of the GNU General Public License as published by
8
+ * the Free Software Foundation, either version 3 of the License, or
9
+ * (at your option) any later version.
10
+ *
11
+ * The Moddable SDK Tools is distributed in the hope that it will be useful,
12
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ * GNU General Public License for more details.
15
+ *
16
+ * You should have received a copy of the GNU General Public License
17
+ * along with the Moddable SDK Tools. If not, see <http://www.gnu.org/licenses/>.
18
+ *
19
+ */
20
+
21
+ declare module "embedded:io/crypt/digest" {
22
+ export type DigestAlgorithm = "MD5" | "SHA1" | "SHA224" | "SHA256" | "SHA384" | "SHA512" | "GHASH";
23
+
24
+ interface DigestOptionsBase {
25
+ algorithm: DigestAlgorithm;
26
+ }
27
+ interface DigestOptionsGHASH extends DigestOptionsBase {
28
+ algorithm: "GHASH";
29
+ H: ByteBuffer;
30
+ additionalData?: ByteBuffer;
31
+ }
32
+ type DigestOptions = DigestOptionsBase | DigestOptionsGHASH;
33
+
34
+ class Digest {
35
+ constructor(options: DigestOptions);
36
+ write(data: ByteBuffer): void;
37
+ read(): ArrayBuffer;
38
+ read(buffer: ByteBuffer): number;
39
+ reset(): void;
40
+ close(): void;
41
+ readonly blockSize: number;
42
+ readonly outputSize: number;
43
+ }
44
+ interface Digest extends Disposable {}
45
+
46
+ export default Digest;
47
+ }
@@ -64,6 +64,7 @@ declare module "embedded:io/digital" {
64
64
  get format(): "number"
65
65
  set format(value: "number")
66
66
  }
67
+ interface Digital extends Disposable {}
67
68
 
68
69
  export default Digital;
69
70
  }
@@ -57,6 +57,7 @@ declare module "embedded:io/digitalbank" {
57
57
  get format(): "number"
58
58
  set format(value: "number")
59
59
  }
60
+ interface DigitalBank extends Disposable {}
60
61
 
61
62
  export default DigitalBank;
62
63
  }
@@ -36,9 +36,13 @@ declare module "embedded:io/i2c" {
36
36
  write(value: ByteBuffer, stop?: boolean): void;
37
37
  read(byteLength: number, stop?: boolean): ArrayBuffer;
38
38
  read(buffer: ByteBuffer, stop?: boolean): number;
39
+ writeRead(writeBuffer: ByteBuffer, readByteLength: number, stop?: boolean): ArrayBuffer;
40
+ writeRead(writeBuffer: ByteBuffer, readBuffer: ByteBuffer, stop?: boolean): number;
41
+ close(): void;
39
42
  get format(): "buffer"
40
43
  set format(value: "buffer")
41
44
  }
45
+ interface I2C extends Disposable {}
42
46
 
43
47
  export default I2C;
44
48
  }
@@ -31,9 +31,11 @@ declare module "embedded:io/pulsecount" {
31
31
  });
32
32
  read(): number;
33
33
  write(count: number): void;
34
+ close(): void;
34
35
  get format(): "number";
35
36
  set format(value: "number");
36
37
  }
38
+ interface PulseCount extends Disposable {}
37
39
 
38
40
  export default PulseCount;
39
41
  }
@@ -31,8 +31,10 @@ declare module "embedded:io/pwm" {
31
31
  readonly resolution: number;
32
32
  readonly hz: number;
33
33
  write(value: number): void;
34
+ close(): void;
34
35
  get format(): "number"
35
36
  set format(value: "number")
36
37
  }
38
+ interface PWM extends Disposable {}
37
39
  export default PWM;
38
40
  }
@@ -56,6 +56,7 @@ declare module "embedded:io/serial" {
56
56
  get format(): "number" | "buffer"
57
57
  set format(value: "number" | "buffer")
58
58
  }
59
+ interface Serial extends Disposable {}
59
60
 
60
61
  export default Serial;
61
62
  }
@@ -29,9 +29,11 @@ declare module "embedded:io/socket/listener" {
29
29
  target?: any;
30
30
  })
31
31
  read(): TCP | undefined
32
+ close(): void;
32
33
  get format(): "socket/tcp"
33
34
  set format(value: "socket/tcp")
34
35
  readonly port: number;
35
36
  }
37
+ interface Listener extends Disposable {}
36
38
  export default Listener;
37
39
  }
@@ -5,12 +5,13 @@ declare module "embedded:io/socket/tcp/tls" {
5
5
  secure: Record<string, any> // should be called "tls" according to std?
6
6
  }
7
7
  export default class TLSSocket {
8
- constructor(options: Options)
9
- close(): undefined
8
+ constructor(options: Options)
9
+ close(): void
10
10
  read(count: number|ArrayBufferLike) : undefined|ArrayBufferLike
11
11
  write(buffer: ArrayBufferLike) : number
12
- set format(format: string)
12
+ set format(format: string)
13
13
  get format() : string
14
14
  }
15
+ interface TLSSocket extends Disposable {}
15
16
  }
16
17
 
@@ -36,7 +36,7 @@ declare module "embedded:io/socket/tcp" {
36
36
  target?: any;
37
37
  };
38
38
 
39
- export default class TCP {
39
+ class TCP {
40
40
  constructor(options: Options)
41
41
  readonly remoteAddress: string | undefined;
42
42
  readonly remotePort: number | undefined;
@@ -47,4 +47,6 @@ declare module "embedded:io/socket/tcp" {
47
47
  get format(): "number" | "buffer"
48
48
  set format(value: "number" | "buffer")
49
49
  }
50
+ interface TCP extends Disposable {}
51
+ export default TCP;
50
52
  }
@@ -36,9 +36,11 @@ declare module "embedded:io/socket/udp" {
36
36
  address: string;
37
37
  port: number;
38
38
  };
39
+ close(): void;
39
40
  get format(): "buffer"
40
41
  set format(value: "buffer")
41
42
  }
43
+ interface UDP extends Disposable {}
42
44
 
43
45
  export default UDP
44
46
  }
@@ -38,8 +38,10 @@ declare module "embedded:io/spi" {
38
38
  write(buffer: ByteBuffer): void;
39
39
  transfer(buffer: ByteBuffer): void;
40
40
  flush(deselect?: boolean): void;
41
+ close(): void;
41
42
  get format(): "buffer";
42
43
  set format(value: "buffer");
43
44
  }
45
+ interface SPI extends Disposable {}
44
46
  export default SPI;
45
47
  }
@@ -32,6 +32,7 @@ declare module "embedded:network/dns/resolver/udp" {
32
32
  resolve(options: Options): void
33
33
 
34
34
  }
35
+ interface Resolver extends Disposable {}
35
36
 
36
37
  export default Resolver
37
38
  }
@@ -38,7 +38,7 @@ declare module "embedded:network/dnssd" {
38
38
  onError?(): void;
39
39
  }
40
40
 
41
- export interface ClaimHandle {
41
+ export interface ClaimHandle extends Disposable {
42
42
  close(): void;
43
43
  }
44
44
 
@@ -57,7 +57,7 @@ declare module "embedded:network/dnssd" {
57
57
  onLost?(service: ServiceObject): void;
58
58
  }
59
59
 
60
- export interface DiscoverHandle {
60
+ export interface DiscoverHandle extends Disposable {
61
61
  close(): void;
62
62
  }
63
63
 
@@ -69,16 +69,18 @@ declare module "embedded:network/dnssd" {
69
69
  txt?: Map<string, string | ByteBuffer>;
70
70
  }
71
71
 
72
- export interface AdvertiseHandle {
72
+ export interface AdvertiseHandle extends Disposable {
73
73
  close(): void;
74
74
  updateTXT(txt: Map<string, string | ByteBuffer>): void;
75
75
  }
76
76
 
77
- export default class DNSSD {
77
+ class DNSSD {
78
78
  constructor(options: DNSSDOptions);
79
79
  close(): void;
80
80
  claim(options: ClaimOptions): ClaimHandle;
81
81
  discover(options: DiscoverOptions): DiscoverHandle;
82
82
  advertise(options: AdvertiseOptions): AdvertiseHandle;
83
83
  }
84
+ interface DNSSD extends Disposable {}
85
+ export default DNSSD;
84
86
  }
@@ -44,10 +44,12 @@ declare module "embedded:network/http/client" {
44
44
  write(value: ByteBuffer|undefined): void;
45
45
  }
46
46
 
47
- export default class HTTPClient {
47
+ class HTTPClient {
48
48
  constructor(options: ClientOptions)
49
49
  request(options: RequestOptions): HTTPRequest
50
50
  close(): void
51
51
  }
52
+ interface HTTPClient extends Disposable {}
53
+ export default HTTPClient;
52
54
 
53
55
  }
@@ -42,7 +42,7 @@ declare module "embedded:network/http/server" {
42
42
  onError?(this: HTTPConnection): void;
43
43
  }
44
44
 
45
- export interface HTTPConnection {
45
+ export interface HTTPConnection extends Disposable {
46
46
  close(): void;
47
47
  detach(): TCP;
48
48
  accept(options: HTTPConnectionHandlers): void;
@@ -59,9 +59,11 @@ declare module "embedded:network/http/server" {
59
59
  onConnect(this: HTTPServer, connection: HTTPConnection): void;
60
60
  }
61
61
 
62
- export default class HTTPServer {
62
+ class HTTPServer {
63
63
  constructor(options: HTTPServerOptions);
64
64
  close(): void;
65
65
  readonly port: number;
66
66
  }
67
+ interface HTTPServer extends Disposable {}
68
+ export default HTTPServer;
67
69
  }
@@ -51,6 +51,7 @@ declare module "embedded:network/interface/ethernet" {
51
51
  readonly address: string | undefined;
52
52
  readonly MAC: string | undefined;
53
53
  }
54
+ interface Ethernet extends Disposable {}
54
55
 
55
56
  export default Ethernet;
56
57
  }
@@ -71,6 +71,7 @@ declare module "embedded:network/interface/wifi" {
71
71
  readonly SSID: string | undefined;
72
72
  readonly RSSI: number | undefined;
73
73
  }
74
+ interface WiFi extends Disposable {}
74
75
 
75
76
  export default WiFi;
76
77
  }
@@ -57,24 +57,26 @@ declare module "embedded:network/mdns" {
57
57
  txt?: Map<string, string | undefined>;
58
58
  }
59
59
 
60
- export interface ClaimInstance {
60
+ export interface ClaimInstance extends Disposable {
61
61
  close(): void;
62
62
  }
63
63
 
64
- export interface AdvertiseInstance {
64
+ export interface AdvertiseInstance extends Disposable {
65
65
  close(): void;
66
66
  updateTXT(txt?: Map<string, string | undefined>): void;
67
67
  }
68
68
 
69
- export interface DiscoverInstance {
69
+ export interface DiscoverInstance extends Disposable {
70
70
  close(): void;
71
71
  }
72
72
 
73
- export default class DNSSD {
73
+ class DNSSD {
74
74
  constructor(options: DNSSDOptions);
75
75
  close(): void;
76
76
  claim(options: ClaimOptions): ClaimInstance;
77
77
  advertise(options: AdvertiseOptions): AdvertiseInstance;
78
78
  discover(options: DiscoverOptions): DiscoverInstance;
79
79
  }
80
+ interface DNSSD extends Disposable {}
81
+ export default DNSSD;
80
82
  }
@@ -48,7 +48,7 @@ declare module "embedded:network/mqtt/client" {
48
48
  items?: any[], // being lazy here
49
49
  }
50
50
 
51
- export default class MQTTClient {
51
+ class MQTTClient {
52
52
  constructor(options: Options)
53
53
  read(count: number): ArrayBuffer
54
54
  read(buffer: ByteBuffer): number
@@ -68,6 +68,8 @@ declare module "embedded:network/mqtt/client" {
68
68
  static UNSUBACK: 11
69
69
  static PINGREQ: 12
70
70
  static PINGRESP: 13
71
- static DISCONNECT: 14
71
+ static DISCONNECT: 14
72
72
  }
73
+ interface MQTTClient extends Disposable {}
74
+ export default MQTTClient;
73
75
  }
@@ -34,10 +34,12 @@ declare module "embedded:network/ntp/client" {
34
34
  (error: Error): void;
35
35
  }
36
36
 
37
- export default class NTP<T = any> {
37
+ class NTP<T = any> {
38
38
  target?: T;
39
39
  constructor(options: NTPOptions<T>);
40
40
  close(): void;
41
41
  getTime(callback: NTPCallback): void;
42
42
  }
43
+ interface NTP<T = any> extends Disposable {}
44
+ export default NTP;
43
45
  }
@@ -69,6 +69,7 @@ declare module "embedded:network/websocket/client" {
69
69
  static readonly ping: 9;
70
70
  static readonly pong: 10;
71
71
  }
72
+ interface WebSocketClient extends Disposable {}
72
73
 
73
74
  export default WebSocketClient;
74
75
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@moddable/typings",
3
- "version": "8.2.3",
3
+ "version": "8.3.0",
4
4
  "main": "",
5
5
  "types": [
6
6
  "xs.d.ts",
@@ -42,5 +42,6 @@ declare class Accelerometer {
42
42
  configure(options: AccelerometerConfigureOptions): void;
43
43
  sample(): AccelerometerSample;
44
44
  }
45
+ interface Accelerometer extends Disposable {}
45
46
 
46
47
  export default Accelerometer;
@@ -34,5 +34,6 @@ declare class Battery {
34
34
  configure(options: {}): void;
35
35
  sample(): BatterySample;
36
36
  }
37
+ interface Battery extends Disposable {}
37
38
 
38
39
  export default Battery;
@@ -20,14 +20,40 @@
20
20
 
21
21
  export type ButtonType = "back" | "up" | "down" | "select";
22
22
 
23
- interface PebbleButtonSingleOptions {
23
+ export type RecognizerType = "single" | "long" | "multi" | "raw";
24
+
25
+ export interface SingleRecognizerOptions {
26
+ repeat?: number;
27
+ }
28
+
29
+ export interface LongRecognizerOptions {
30
+ delay?: number;
31
+ }
32
+
33
+ export interface MultiRecognizerOptions {
34
+ min?: number;
35
+ max?: number;
36
+ lastOnly?: boolean;
37
+ timeout?: number;
38
+ }
39
+
40
+ type OnPush = (pushed: 0 | 1, type: ButtonType, recognizer: RecognizerType, count: number, repeat: boolean) => void;
41
+
42
+ interface PebbleButtonRecognizers {
43
+ single?: boolean | SingleRecognizerOptions;
44
+ long?: boolean | LongRecognizerOptions;
45
+ multi?: boolean | MultiRecognizerOptions;
46
+ raw?: boolean;
47
+ }
48
+
49
+ interface PebbleButtonSingleOptions extends PebbleButtonRecognizers {
24
50
  type: ButtonType;
25
- onPush: (pushed: 0 | 1, type: ButtonType) => void;
51
+ onPush: OnPush;
26
52
  }
27
53
 
28
- interface PebbleButtonMultipleOptions {
54
+ interface PebbleButtonMultipleOptions extends PebbleButtonRecognizers {
29
55
  types: ButtonType[];
30
- onPush: (pushed: 0 | 1, type: ButtonType) => void;
56
+ onPush: OnPush;
31
57
  }
32
58
 
33
59
  type PebbleButtonOptions = PebbleButtonSingleOptions | PebbleButtonMultipleOptions;
@@ -36,5 +62,6 @@ declare class PebbleButton {
36
62
  constructor(options: PebbleButtonOptions);
37
63
  close(): void;
38
64
  }
65
+ interface PebbleButton extends Disposable {}
39
66
 
40
67
  export default PebbleButton;
@@ -36,5 +36,6 @@ declare class Compass {
36
36
  configure(options: CompassConfigureOptions): void;
37
37
  sample(): CompassSample;
38
38
  }
39
+ interface Compass extends Disposable {}
39
40
 
40
41
  export default Compass;
@@ -38,5 +38,6 @@ declare class Dictation {
38
38
  read(): string | undefined;
39
39
  readonly format: "string";
40
40
  }
41
+ interface Dictation extends Disposable {}
41
42
 
42
43
  export default Dictation;
@@ -59,7 +59,9 @@ interface WakeupEvent {
59
59
 
60
60
  type TimeEventType = "secondchange" | "minutechange" | "hourchange" | "daychange";
61
61
 
62
- type PebbleEventType = TimeEventType | "connected" | "resize" | "willFocus" | "didFocus" | "wakeup";
62
+ type HealthEventSubtype = "significant" | "movement" | "sleep" | "metric" | "heart rate";
63
+
64
+ type PebbleEventType = TimeEventType | "connected" | "resize" | "willFocus" | "didFocus" | "wakeup" | "health";
63
65
 
64
66
  type TimeChangeCallback = (event: TimeChangeEvent) => void;
65
67
 
@@ -71,6 +73,8 @@ type FocusCallback = (inFocus: boolean) => void;
71
73
 
72
74
  type WakeupCallback = (event: WakeupEvent) => void;
73
75
 
76
+ type HealthCallback = (subtype: HealthEventSubtype) => void;
77
+
74
78
  interface watch {
75
79
  addEventListener(event: TimeEventType, callback: TimeChangeCallback): void;
76
80
  addEventListener(event: "connected", callback: ConnectedCallback): void;
@@ -78,12 +82,14 @@ interface watch {
78
82
  addEventListener(event: "willFocus", callback: FocusCallback): void;
79
83
  addEventListener(event: "didFocus", callback: FocusCallback): void;
80
84
  addEventListener(event: "wakeup", callback: WakeupCallback): void;
85
+ addEventListener(event: "health", callback: HealthCallback): void;
81
86
  removeEventListener(event: TimeEventType, callback: TimeChangeCallback): void;
82
87
  removeEventListener(event: "connected", callback: ConnectedCallback): void;
83
88
  removeEventListener(event: "resize", callback: ResizeCallback): void;
84
89
  removeEventListener(event: "willFocus", callback: FocusCallback): void;
85
90
  removeEventListener(event: "didFocus", callback: FocusCallback): void;
86
91
  removeEventListener(event: "wakeup", callback: WakeupCallback): void;
92
+ removeEventListener(event: "health", callback: HealthCallback): void;
87
93
  light(enable?: boolean): void;
88
94
  exit(reason?: number): void;
89
95
  readonly connected: ConnectionState;
@@ -0,0 +1,144 @@
1
+ /*
2
+ * Copyright (c) 2026 Moddable Tech, Inc.
3
+ *
4
+ * This file is part of the Moddable SDK Tools.
5
+ *
6
+ * The Moddable SDK Tools is free software: you can redistribute it and/or modify
7
+ * it under the terms of the GNU General Public License as published by
8
+ * the Free Software Foundation, either version 3 of the License, or
9
+ * (at your option) any later version.
10
+ *
11
+ * The Moddable SDK Tools is distributed in the hope that it will be useful,
12
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ * GNU General Public License for more details.
15
+ *
16
+ * You should have received a copy of the GNU General Public License
17
+ * along with the Moddable SDK Tools. If not, see <http://www.gnu.org/licenses/>.
18
+ *
19
+ */
20
+
21
+ type HealthMetricName =
22
+ | "step count"
23
+ | "active seconds"
24
+ | "walked distance"
25
+ | "sleep seconds"
26
+ | "sleep restful seconds"
27
+ | "resting calories"
28
+ | "active calories"
29
+ | "heart rate"
30
+ | "heart rate raw";
31
+
32
+ type HealthAggregation = "sum" | "average" | "min" | "max";
33
+
34
+ type HealthScope = "once" | "weekly" | "weekday or weekend" | "daily";
35
+
36
+ type HealthIterationDirection = "past" | "future";
37
+
38
+ type HealthMeasurementSystem = "metric" | "imperial" | undefined;
39
+
40
+ interface HealthMetricQueryOptions {
41
+ metric: HealthMetricName;
42
+ start?: Date | number;
43
+ end?: Date | number;
44
+ aggregation?: HealthAggregation;
45
+ scope?: HealthScope;
46
+ }
47
+
48
+ interface HealthMetricAccessibleOptions {
49
+ metric: HealthMetricName;
50
+ start: Date | number;
51
+ end: Date | number;
52
+ aggregation?: HealthAggregation;
53
+ scope?: HealthScope;
54
+ }
55
+
56
+ type HealthActivity = typeof Health.activity[
57
+ "sleep" | "restfulSleep" | "walk" | "run" | "openWorkout"
58
+ ];
59
+
60
+ interface HealthActivityIterateOptions {
61
+ activities: number;
62
+ start: Date | number;
63
+ end: Date | number;
64
+ direction?: HealthIterationDirection;
65
+ callback: (activity: HealthActivity, start: number, end: number) => boolean;
66
+ }
67
+
68
+ interface HealthActivityAccessibleOptions {
69
+ activities: number;
70
+ start: Date | number;
71
+ end: Date | number;
72
+ }
73
+
74
+ interface HealthMetricAlertOptions {
75
+ metric: HealthMetricName;
76
+ threshold: number;
77
+ }
78
+
79
+ declare class HealthMetricAlert {
80
+ constructor(options: HealthMetricAlertOptions);
81
+ close(): void;
82
+ }
83
+ interface HealthMetricAlert extends Disposable {}
84
+
85
+ interface HealthMinuteHistoryOptions {
86
+ length: number;
87
+ start: Date | number;
88
+ end: Date | number;
89
+ }
90
+
91
+ interface HealthMinuteRecord {
92
+ steps: number;
93
+ orientation: number;
94
+ vmc: number;
95
+ light: number;
96
+ heartRate: number;
97
+ }
98
+
99
+ interface HealthMinuteHistory extends Array<HealthMinuteRecord | undefined> {
100
+ start: number;
101
+ end: number;
102
+ }
103
+
104
+ declare class Health {
105
+ static metric: {
106
+ get(name: HealthMetricName): number;
107
+ query(options: HealthMetricQueryOptions): number;
108
+ accessible(options: HealthMetricAccessibleOptions): number;
109
+ readonly Alert: typeof HealthMetricAlert;
110
+ };
111
+
112
+ static activity: {
113
+ get(): number;
114
+ iterate(options: HealthActivityIterateOptions): void;
115
+ accessible(options: HealthActivityAccessibleOptions): number;
116
+
117
+ readonly sleep: 1;
118
+ readonly restfulSleep: 2;
119
+ readonly walk: 4;
120
+ readonly run: 8;
121
+ readonly openWorkout: 16;
122
+ };
123
+
124
+ static heartRate: {
125
+ /** Write-only. Assign desired sample period in milliseconds; assign 0 to restore automatic sampling. */
126
+ samplePeriod: number;
127
+ readonly samplePeriodExpiration: number;
128
+ };
129
+
130
+ static history: {
131
+ byMinute(options: HealthMinuteHistoryOptions): HealthMinuteHistory;
132
+ };
133
+
134
+ static access: {
135
+ readonly available: 1;
136
+ readonly permission: 2;
137
+ readonly supported: 4;
138
+ readonly data: 8;
139
+ };
140
+
141
+ static displayMeasurementSystem(metric: HealthMetricName): HealthMeasurementSystem;
142
+ }
143
+
144
+ export default Health;
@@ -46,5 +46,6 @@ declare class Location {
46
46
  configure(options: LocationConfiguration): void;
47
47
  sample(): LocationSample | undefined;
48
48
  }
49
+ interface Location extends Disposable {}
49
50
 
50
51
  export default Location;
@@ -42,5 +42,6 @@ declare class Message {
42
42
  get input(): number;
43
43
  get output(): number;
44
44
  }
45
+ interface Message extends Disposable {}
45
46
 
46
47
  export default Message;
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "_comment": "Base tsconfig for projects using @moddable/typings. Project tsconfig.json should `extends` this and add its own outDir, include, sourceMap, etc.",
3
3
  "compilerOptions": {
4
- "lib": ["es2024"],
4
+ "lib": ["es2024", "esnext.disposable"],
5
5
  "module": "preserve",
6
6
  "moduleResolution": "bundler",
7
7
  "target": "ES2024",
@@ -11,6 +11,7 @@
11
11
  "embedded:io/socket/*": ["./embedded_io/socket/*"],
12
12
  "embedded:io/audio/*": ["./embedded_io/audio/*"],
13
13
  "embedded:io/bluetoothle/*": ["./embedded_io/ble/*"],
14
+ "embedded:io/crypt/*": ["./embedded_io/crypt/*"],
14
15
  "embedded:network/*": ["./embedded_network/*"],
15
16
  "embedded:network/http/*": ["./embedded_network/http/*"],
16
17
  "embedded:network/interface/*": ["./embedded_network/interface/*"],
@@ -2,7 +2,7 @@
2
2
  "_comment": "ES2025 overrides on top of the ES2024 base. Used when TypeScript >= 6 (see typesVersions in package.json).",
3
3
  "extends": "./tsconfig.es2024.json",
4
4
  "compilerOptions": {
5
- "lib": ["es2025"],
5
+ "lib": ["es2025", "esnext.disposable"],
6
6
  "target": "ES2025"
7
7
  }
8
8
  }