@voltras/node-sdk 0.1.2 → 0.2.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 (158) hide show
  1. package/README.md +122 -31
  2. package/dist/cjs/bluetooth/adapters/native.js +36 -34
  3. package/dist/cjs/bluetooth/adapters/native.js.map +1 -1
  4. package/dist/cjs/bluetooth/adapters/node.js +9 -7
  5. package/dist/cjs/bluetooth/adapters/node.js.map +1 -1
  6. package/dist/cjs/bluetooth/adapters/web-bluetooth-base.js +6 -4
  7. package/dist/cjs/bluetooth/adapters/web-bluetooth-base.js.map +1 -1
  8. package/dist/cjs/bluetooth/adapters/web.js +7 -5
  9. package/dist/cjs/bluetooth/adapters/web.js.map +1 -1
  10. package/dist/cjs/bluetooth/controllers/scanner-controller.js +0 -2
  11. package/dist/cjs/bluetooth/controllers/scanner-controller.js.map +1 -1
  12. package/dist/cjs/index.js +19 -10
  13. package/dist/cjs/index.js.map +1 -1
  14. package/dist/cjs/react/hooks.js +2 -6
  15. package/dist/cjs/react/hooks.js.map +1 -1
  16. package/dist/cjs/sdk/notification-dispatcher.js +47 -0
  17. package/dist/cjs/sdk/notification-dispatcher.js.map +1 -0
  18. package/dist/cjs/sdk/reconnect-handler.js +61 -0
  19. package/dist/cjs/sdk/reconnect-handler.js.map +1 -0
  20. package/dist/cjs/sdk/voltra-client.js +206 -72
  21. package/dist/cjs/sdk/voltra-client.js.map +1 -1
  22. package/dist/cjs/shared/index.js +5 -1
  23. package/dist/cjs/shared/index.js.map +1 -1
  24. package/dist/cjs/shared/logger.js +54 -0
  25. package/dist/cjs/shared/logger.js.map +1 -0
  26. package/dist/cjs/voltra/index.js +15 -12
  27. package/dist/cjs/voltra/index.js.map +1 -1
  28. package/dist/cjs/voltra/models/device.js +13 -0
  29. package/dist/cjs/voltra/models/device.js.map +1 -1
  30. package/dist/cjs/voltra/protocol/commands.js +127 -210
  31. package/dist/cjs/voltra/protocol/commands.js.map +1 -1
  32. package/dist/cjs/voltra/protocol/constants/ble-config.js +24 -0
  33. package/dist/cjs/voltra/protocol/constants/ble-config.js.map +1 -0
  34. package/dist/cjs/voltra/protocol/constants/connection-commands.js +55 -0
  35. package/dist/cjs/voltra/protocol/constants/connection-commands.js.map +1 -0
  36. package/dist/cjs/voltra/protocol/constants/enums.js +117 -0
  37. package/dist/cjs/voltra/protocol/constants/enums.js.map +1 -0
  38. package/dist/cjs/voltra/protocol/constants/index.js +33 -0
  39. package/dist/cjs/voltra/protocol/constants/index.js.map +1 -0
  40. package/dist/cjs/voltra/protocol/constants/message-types.js +75 -0
  41. package/dist/cjs/voltra/protocol/constants/message-types.js.map +1 -0
  42. package/dist/cjs/voltra/protocol/constants/timing.js +21 -0
  43. package/dist/cjs/voltra/protocol/constants/timing.js.map +1 -0
  44. package/dist/cjs/voltra/protocol/data/protocol-data.generated.js +7 -0
  45. package/dist/cjs/voltra/protocol/data/protocol-data.generated.js.map +1 -0
  46. package/dist/cjs/voltra/protocol/telemetry-decoder.js +130 -6
  47. package/dist/cjs/voltra/protocol/telemetry-decoder.js.map +1 -1
  48. package/dist/cjs/voltra/protocol/types.js +9 -0
  49. package/dist/cjs/voltra/protocol/types.js.map +1 -0
  50. package/dist/esm/bluetooth/adapters/native.js +36 -34
  51. package/dist/esm/bluetooth/adapters/native.js.map +1 -1
  52. package/dist/esm/bluetooth/adapters/node.js +9 -7
  53. package/dist/esm/bluetooth/adapters/node.js.map +1 -1
  54. package/dist/esm/bluetooth/adapters/web-bluetooth-base.js +6 -4
  55. package/dist/esm/bluetooth/adapters/web-bluetooth-base.js.map +1 -1
  56. package/dist/esm/bluetooth/adapters/web.js +7 -5
  57. package/dist/esm/bluetooth/adapters/web.js.map +1 -1
  58. package/dist/esm/bluetooth/controllers/scanner-controller.js +0 -2
  59. package/dist/esm/bluetooth/controllers/scanner-controller.js.map +1 -1
  60. package/dist/esm/index.js +3 -6
  61. package/dist/esm/index.js.map +1 -1
  62. package/dist/esm/react/hooks.js +1 -5
  63. package/dist/esm/react/hooks.js.map +1 -1
  64. package/dist/esm/sdk/notification-dispatcher.js +44 -0
  65. package/dist/esm/sdk/notification-dispatcher.js.map +1 -0
  66. package/dist/esm/sdk/reconnect-handler.js +57 -0
  67. package/dist/esm/sdk/reconnect-handler.js.map +1 -0
  68. package/dist/esm/sdk/voltra-client.js +204 -70
  69. package/dist/esm/sdk/voltra-client.js.map +1 -1
  70. package/dist/esm/shared/index.js +1 -0
  71. package/dist/esm/shared/index.js.map +1 -1
  72. package/dist/esm/shared/logger.js +49 -0
  73. package/dist/esm/shared/logger.js.map +1 -0
  74. package/dist/esm/voltra/index.js +3 -8
  75. package/dist/esm/voltra/index.js.map +1 -1
  76. package/dist/esm/voltra/models/device.js +13 -0
  77. package/dist/esm/voltra/models/device.js.map +1 -1
  78. package/dist/esm/voltra/protocol/commands.js +117 -209
  79. package/dist/esm/voltra/protocol/commands.js.map +1 -1
  80. package/dist/esm/voltra/protocol/constants/ble-config.js +18 -0
  81. package/dist/esm/voltra/protocol/constants/ble-config.js.map +1 -0
  82. package/dist/esm/voltra/protocol/constants/connection-commands.js +49 -0
  83. package/dist/esm/voltra/protocol/constants/connection-commands.js.map +1 -0
  84. package/dist/esm/voltra/protocol/constants/enums.js +114 -0
  85. package/dist/esm/voltra/protocol/constants/enums.js.map +1 -0
  86. package/dist/esm/voltra/protocol/constants/index.js +12 -0
  87. package/dist/esm/voltra/protocol/constants/index.js.map +1 -0
  88. package/dist/esm/voltra/protocol/constants/message-types.js +69 -0
  89. package/dist/esm/voltra/protocol/constants/message-types.js.map +1 -0
  90. package/dist/esm/voltra/protocol/constants/timing.js +18 -0
  91. package/dist/esm/voltra/protocol/constants/timing.js.map +1 -0
  92. package/dist/esm/voltra/protocol/data/protocol-data.generated.js +5 -0
  93. package/dist/esm/voltra/protocol/data/protocol-data.generated.js.map +1 -0
  94. package/dist/esm/voltra/protocol/telemetry-decoder.js +132 -8
  95. package/dist/esm/voltra/protocol/telemetry-decoder.js.map +1 -1
  96. package/dist/esm/voltra/protocol/types.js +8 -0
  97. package/dist/esm/voltra/protocol/types.js.map +1 -0
  98. package/dist/types/bluetooth/adapters/native.d.ts.map +1 -1
  99. package/dist/types/bluetooth/adapters/node.d.ts.map +1 -1
  100. package/dist/types/bluetooth/adapters/web-bluetooth-base.d.ts.map +1 -1
  101. package/dist/types/bluetooth/adapters/web.d.ts.map +1 -1
  102. package/dist/types/bluetooth/controllers/scanner-controller.d.ts.map +1 -1
  103. package/dist/types/index.d.ts +4 -3
  104. package/dist/types/index.d.ts.map +1 -1
  105. package/dist/types/react/hooks.d.ts.map +1 -1
  106. package/dist/types/sdk/index.d.ts +2 -1
  107. package/dist/types/sdk/index.d.ts.map +1 -1
  108. package/dist/types/sdk/notification-dispatcher.d.ts +29 -0
  109. package/dist/types/sdk/notification-dispatcher.d.ts.map +1 -0
  110. package/dist/types/sdk/reconnect-handler.d.ts +55 -0
  111. package/dist/types/sdk/reconnect-handler.d.ts.map +1 -0
  112. package/dist/types/sdk/types.d.ts +35 -0
  113. package/dist/types/sdk/types.d.ts.map +1 -1
  114. package/dist/types/sdk/voltra-client.d.ts +77 -2
  115. package/dist/types/sdk/voltra-client.d.ts.map +1 -1
  116. package/dist/types/shared/index.d.ts +1 -0
  117. package/dist/types/shared/index.d.ts.map +1 -1
  118. package/dist/types/shared/logger.d.ts +39 -0
  119. package/dist/types/shared/logger.d.ts.map +1 -0
  120. package/dist/types/voltra/index.d.ts +3 -3
  121. package/dist/types/voltra/index.d.ts.map +1 -1
  122. package/dist/types/voltra/models/device.d.ts +11 -1
  123. package/dist/types/voltra/models/device.d.ts.map +1 -1
  124. package/dist/types/voltra/protocol/commands.d.ts +47 -87
  125. package/dist/types/voltra/protocol/commands.d.ts.map +1 -1
  126. package/dist/types/voltra/protocol/constants/ble-config.d.ts +16 -0
  127. package/dist/types/voltra/protocol/constants/ble-config.d.ts.map +1 -0
  128. package/dist/types/voltra/protocol/constants/connection-commands.d.ts +37 -0
  129. package/dist/types/voltra/protocol/constants/connection-commands.d.ts.map +1 -0
  130. package/dist/types/voltra/protocol/constants/enums.d.ts +72 -0
  131. package/dist/types/voltra/protocol/constants/enums.d.ts.map +1 -0
  132. package/dist/types/voltra/protocol/constants/index.d.ts +12 -0
  133. package/dist/types/voltra/protocol/constants/index.d.ts.map +1 -0
  134. package/dist/types/voltra/protocol/constants/message-types.d.ts +57 -0
  135. package/dist/types/voltra/protocol/constants/message-types.d.ts.map +1 -0
  136. package/dist/types/voltra/protocol/constants/timing.d.ts +18 -0
  137. package/dist/types/voltra/protocol/constants/timing.d.ts.map +1 -0
  138. package/dist/types/voltra/protocol/data/protocol-data.generated.d.ts +3 -0
  139. package/dist/types/voltra/protocol/data/protocol-data.generated.d.ts.map +1 -0
  140. package/dist/types/voltra/protocol/telemetry-decoder.d.ts +15 -2
  141. package/dist/types/voltra/protocol/telemetry-decoder.d.ts.map +1 -1
  142. package/dist/types/voltra/protocol/types.d.ts +249 -0
  143. package/dist/types/voltra/protocol/types.d.ts.map +1 -0
  144. package/package.json +9 -8
  145. package/dist/cjs/voltra/protocol/constants.js +0 -136
  146. package/dist/cjs/voltra/protocol/constants.js.map +0 -1
  147. package/dist/cjs/voltra/protocol/data/chains.json +0 -830
  148. package/dist/cjs/voltra/protocol/data/eccentric.json +0 -1598
  149. package/dist/cjs/voltra/protocol/data/protocol.json +0 -54
  150. package/dist/cjs/voltra/protocol/data/weights.json +0 -62
  151. package/dist/esm/voltra/protocol/constants.js +0 -130
  152. package/dist/esm/voltra/protocol/constants.js.map +0 -1
  153. package/dist/esm/voltra/protocol/data/chains.json +0 -830
  154. package/dist/esm/voltra/protocol/data/eccentric.json +0 -1598
  155. package/dist/esm/voltra/protocol/data/protocol.json +0 -54
  156. package/dist/esm/voltra/protocol/data/weights.json +0 -62
  157. package/dist/types/voltra/protocol/constants.d.ts +0 -103
  158. package/dist/types/voltra/protocol/constants.d.ts.map +0 -1
@@ -1,99 +1,59 @@
1
1
  /**
2
- * Voltra Protocol Command Builders
2
+ * Voltra Protocol Commands
3
3
  *
4
- * Builds commands for setting weight, chains, and eccentric resistance.
4
+ * Simple key-value mapping from operations to commands.
5
+ * Commands are loaded from the consolidated protocol.json.
6
+ * All commands are pre-computed lookup values.
5
7
  */
6
- interface ChainsValue {
7
- step1_seq: string;
8
- step1_checksum: string;
9
- step2_seq: string;
10
- step2_checksum: string;
11
- }
12
- interface ChainsData {
13
- format: {
14
- step1: {
15
- prefix: string;
16
- mode: string;
17
- register: string;
18
- padding: string;
19
- };
20
- step2: {
21
- prefix: string;
22
- mode: string;
23
- register: string;
24
- padding: string;
25
- };
26
- };
27
- values: Record<string, ChainsValue>;
28
- }
8
+ import { TrainingMode } from './constants';
29
9
  /**
30
- * Weight command builder for 5-200 lbs in 5 lb increments.
10
+ * Get weight command for specified pounds.
11
+ * @param lbs Weight in pounds (5-200)
12
+ * @returns Command bytes, or null if not available
31
13
  */
32
- export declare const WeightCommands: {
33
- MIN: number;
34
- MAX: number;
35
- INCREMENT: number;
36
- /** Get available weight values */
37
- getAvailable(): number[];
38
- /** Check if a weight value is valid */
39
- isValid(pounds: number): boolean;
40
- /**
41
- * Get the command to set a specific weight.
42
- * @param pounds Weight in pounds (5-200 in increments of 5)
43
- * @returns 21-byte command, or null if weight not available
44
- */
45
- get(pounds: number): Uint8Array | null;
46
- _build(pounds: number, seq: string, checksum: string, format: {
47
- prefix: string;
48
- mode: string;
49
- register: string;
50
- padding: string;
51
- }): Uint8Array;
52
- };
14
+ export declare function getWeightCommand(lbs: number): Uint8Array | null;
53
15
  /**
54
- * Dual command result for chains and eccentric.
16
+ * Get chains command for specified pounds.
17
+ * @param lbs Chains weight in pounds (0-100)
18
+ * @returns Command bytes, or null if not available
55
19
  */
56
- export interface DualCommand {
57
- step1: Uint8Array;
58
- step2: Uint8Array;
59
- }
20
+ export declare function getChainsCommand(lbs: number): Uint8Array | null;
60
21
  /**
61
- * Chains (reverse resistance) command builder for 0-100 lbs.
62
- * Requires dual commands: send step1, wait 500ms, send step2.
22
+ * Get eccentric command for specified value.
23
+ * @param value Eccentric adjustment (-195 to +195)
24
+ * @returns Command bytes, or null if not available
63
25
  */
64
- export declare const ChainsCommands: {
65
- MIN: number;
66
- MAX: number;
67
- /** Get available chains values */
68
- getAvailable(): number[];
69
- /** Check if a chains value is valid */
70
- isValid(pounds: number): boolean;
71
- /**
72
- * Get dual commands to set chains weight.
73
- * @param pounds Chains weight (0-100)
74
- * @returns Tuple of (step1, step2) commands, or null if not available
75
- */
76
- get(pounds: number): DualCommand | null;
77
- _build(pounds: number, step: 1 | 2, seq: string, checksum: string, format: ChainsData["format"]): Uint8Array;
78
- };
26
+ export declare function getEccentricCommand(value: number): Uint8Array | null;
79
27
  /**
80
- * Eccentric load adjustment command builder for -195 to +195.
81
- * Requires dual commands: send step1, wait 500ms, send step2.
28
+ * Get available weight values.
82
29
  */
83
- export declare const EccentricCommands: {
84
- MIN: number;
85
- MAX: number;
86
- /** Get available eccentric values */
87
- getAvailable(): number[];
88
- /** Check if an eccentric value is valid */
89
- isValid(value: number): boolean;
90
- /**
91
- * Get dual commands to set eccentric load.
92
- * @param value Eccentric adjustment (-195 to +195)
93
- * @returns Tuple of (step1, step2) commands, or null if not available
94
- */
95
- get(value: number): DualCommand | null;
96
- _build(value: number, step: 1 | 2): Uint8Array;
97
- };
98
- export {};
30
+ export declare function getAvailableWeights(): number[];
31
+ /**
32
+ * Get available chains values.
33
+ */
34
+ export declare function getAvailableChains(): number[];
35
+ /**
36
+ * Get available eccentric values.
37
+ */
38
+ export declare function getAvailableEccentric(): number[];
39
+ /**
40
+ * Get inverse chains command for specified pounds.
41
+ * @param lbs Inverse chains weight in pounds (0-100)
42
+ * @returns Command bytes, or null if not available
43
+ */
44
+ export declare function getInverseChainsCommand(lbs: number): Uint8Array | null;
45
+ /**
46
+ * Get available inverse chains values.
47
+ */
48
+ export declare function getAvailableInverseChains(): number[];
49
+ /**
50
+ * Get mode command for specified training mode.
51
+ * @param mode Training mode to set
52
+ * @returns Command bytes, or null if invalid mode
53
+ */
54
+ export declare function getModeCommand(mode: TrainingMode): Uint8Array | null;
55
+ /**
56
+ * Get available training modes.
57
+ */
58
+ export declare function getAvailableModes(): TrainingMode[];
99
59
  //# sourceMappingURL=commands.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../../../src/voltra/protocol/commands.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAmBH,UAAU,WAAW;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,UAAU,UAAU;IAClB,MAAM,EAAE;QACN,KAAK,EAAE;YAAE,MAAM,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAC;YAAC,QAAQ,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAE,CAAC;QAC3E,KAAK,EAAE;YAAE,MAAM,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAC;YAAC,QAAQ,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAE,CAAC;KAC5E,CAAC;IACF,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;CACrC;AAoBD;;GAEG;AACH,eAAO,MAAM,cAAc;;;;IAKzB,kCAAkC;oBAClB,MAAM,EAAE;IAMxB,uCAAuC;oBACvB,MAAM,GAAG,OAAO;IAIhC;;;;OAIG;gBACS,MAAM,GAAG,UAAU,GAAG,IAAI;mBAc5B,MAAM,OACT,MAAM,YACD,MAAM,UACR;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,GAC1E,UAAU;CAwCd,CAAC;AAMF;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,UAAU,CAAC;IAClB,KAAK,EAAE,UAAU,CAAC;CACnB;AAED;;;GAGG;AACH,eAAO,MAAM,cAAc;;;IAIzB,kCAAkC;oBAClB,MAAM,EAAE;IAMxB,uCAAuC;oBACvB,MAAM,GAAG,OAAO;IAIhC;;;;OAIG;gBACS,MAAM,GAAG,WAAW,GAAG,IAAI;mBAkB7B,MAAM,QACR,CAAC,GAAG,CAAC,OACN,MAAM,YACD,MAAM,UACR,UAAU,CAAC,QAAQ,CAAC,GAC3B,UAAU;CAyCd,CAAC;AAMF;;;GAGG;AACH,eAAO,MAAM,iBAAiB;;;IAI5B,qCAAqC;oBACrB,MAAM,EAAE;IAMxB,2CAA2C;mBAC5B,MAAM,GAAG,OAAO;IAI/B;;;;OAIG;eACQ,MAAM,GAAG,WAAW,GAAG,IAAI;kBAaxB,MAAM,QAAQ,CAAC,GAAG,CAAC,GAAG,UAAU;CA8C/C,CAAC"}
1
+ {"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../../../src/voltra/protocol/commands.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,YAAY,EAAwB,MAAM,aAAa,CAAC;AA4CjE;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAE/D;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAE/D;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAEpE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,EAAE,CAI9C;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,EAAE,CAI7C;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,EAAE,CAIhD;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAEtE;AAED;;GAEG;AACH,wBAAgB,yBAAyB,IAAI,MAAM,EAAE,CAIpD;AAkBD;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,YAAY,GAAG,UAAU,GAAG,IAAI,CAEpE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,YAAY,EAAE,CAElD"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * BLE Configuration
3
+ *
4
+ * Service UUIDs, characteristic UUIDs, and device naming for Voltra devices.
5
+ */
6
+ export declare const BLE: {
7
+ /** Main service UUID for Voltra devices */
8
+ readonly SERVICE_UUID: string;
9
+ /** Characteristic for receiving notifications */
10
+ readonly NOTIFY_CHAR_UUID: string;
11
+ /** Characteristic for writing commands */
12
+ readonly WRITE_CHAR_UUID: string;
13
+ /** Device name prefix for scanning (e.g., "VTR-") */
14
+ readonly DEVICE_NAME_PREFIX: string;
15
+ };
16
+ //# sourceMappingURL=ble-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ble-config.d.ts","sourceRoot":"","sources":["../../../../../src/voltra/protocol/constants/ble-config.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,eAAO,MAAM,GAAG;IACd,2CAA2C;;IAE3C,iDAAiD;;IAEjD,0CAA0C;;IAE1C,qDAAqD;;CAE7C,CAAC"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Connection Commands
3
+ *
4
+ * Authentication, initialization, and workout control commands.
5
+ */
6
+ /**
7
+ * Device authentication identifiers.
8
+ */
9
+ export declare const Auth: {
10
+ /** Primary device identity */
11
+ readonly DEVICE_ID: Uint8Array<ArrayBufferLike>;
12
+ /** Alternative device identity */
13
+ readonly DEVICE_ID_IPAD: Uint8Array<ArrayBufferLike>;
14
+ };
15
+ /**
16
+ * Device initialization sequence.
17
+ */
18
+ export declare const Init: {
19
+ readonly SEQUENCE: Uint8Array<ArrayBufferLike>[];
20
+ };
21
+ /**
22
+ * Workout control commands.
23
+ *
24
+ * To start: set weight -> PREPARE -> SETUP -> GO
25
+ * To stop: STOP
26
+ */
27
+ export declare const Workout: {
28
+ /** Prepare device for workout */
29
+ readonly PREPARE: Uint8Array<ArrayBufferLike>;
30
+ /** Configure workout mode */
31
+ readonly SETUP: Uint8Array<ArrayBufferLike>;
32
+ /** Start resistance/tracking */
33
+ readonly GO: Uint8Array<ArrayBufferLike>;
34
+ /** Stop resistance/tracking */
35
+ readonly STOP: Uint8Array<ArrayBufferLike>;
36
+ };
37
+ //# sourceMappingURL=connection-commands.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connection-commands.d.ts","sourceRoot":"","sources":["../../../../../src/voltra/protocol/constants/connection-commands.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAYH;;GAEG;AACH,eAAO,MAAM,IAAI;IACf,8BAA8B;;IAE9B,kCAAkC;;CAE1B,CAAC;AAMX;;GAEG;AACH,eAAO,MAAM,IAAI;;CAEP,CAAC;AAMX;;;;;GAKG;AACH,eAAO,MAAM,OAAO;IAClB,iCAAiC;;IAEjC,6BAA6B;;IAE7B,gCAAgC;;IAEhC,+BAA+B;;CAEvB,CAAC"}
@@ -0,0 +1,72 @@
1
+ /**
2
+ * Protocol Enums
3
+ *
4
+ * Movement phases, training modes, and parameter IDs with
5
+ * their human-readable name maps.
6
+ */
7
+ /**
8
+ * Movement phase during workout.
9
+ * Values match protocol.json telemetry.phases.
10
+ */
11
+ export declare enum MovementPhase {
12
+ IDLE = 0,// protocol.telemetry.phases.idle
13
+ CONCENTRIC = 1,// protocol.telemetry.phases.concentric - Pulling (muscle shortening)
14
+ HOLD = 2,// protocol.telemetry.phases.hold - Top of rep / transition
15
+ ECCENTRIC = 3,// protocol.telemetry.phases.eccentric - Releasing (muscle lengthening)
16
+ UNKNOWN = -1
17
+ }
18
+ /**
19
+ * Human-readable phase names.
20
+ */
21
+ export declare const PhaseNames: Record<MovementPhase, string>;
22
+ /**
23
+ * Parameter IDs for device commands.
24
+ * These identify which parameter is being set in 19-byte commands.
25
+ */
26
+ export declare enum ParameterId {
27
+ /** Base weight setting */
28
+ BASE_WEIGHT = 34366,
29
+ /** Chains resistance */
30
+ CHAINS = 34622,
31
+ /** Eccentric adjustment */
32
+ ECCENTRIC = 34878,
33
+ /** Training mode */
34
+ TRAINING_MODE = 45135,
35
+ /** Inverse chains resistance */
36
+ INVERSE_CHAINS = 45139
37
+ }
38
+ /**
39
+ * Human-readable parameter names.
40
+ */
41
+ export declare const ParameterNames: Record<ParameterId, string>;
42
+ /**
43
+ * Training mode values for ParameterId.TRAINING_MODE.
44
+ * Values are 2-byte little-endian uint16.
45
+ */
46
+ export declare enum TrainingMode {
47
+ /** Idle (0x0000) */
48
+ Idle = 0,
49
+ /** Weight Training (0x0001) */
50
+ WeightTraining = 1,
51
+ /** Resistance Band (0x0002) */
52
+ ResistanceBand = 2,
53
+ /** Rowing (0x0003) */
54
+ Rowing = 3,
55
+ /** Damper (0x0004) */
56
+ Damper = 4,
57
+ /** Custom Curves (0x0006) */
58
+ CustomCurves = 6,
59
+ /** Isokinetic (0x0007) */
60
+ Isokinetic = 7,
61
+ /** Isometric (0x0008) */
62
+ Isometric = 8
63
+ }
64
+ /**
65
+ * Human-readable training mode names.
66
+ */
67
+ export declare const TrainingModeNames: Record<TrainingMode, string>;
68
+ /**
69
+ * Valid training mode values (for validation).
70
+ */
71
+ export declare const VALID_TRAINING_MODES: readonly TrainingMode[];
72
+ //# sourceMappingURL=enums.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enums.d.ts","sourceRoot":"","sources":["../../../../../src/voltra/protocol/constants/enums.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH;;;GAGG;AACH,oBAAY,aAAa;IACvB,IAAI,IAAI,CAAE,iCAAiC;IAC3C,UAAU,IAAI,CAAE,qEAAqE;IACrF,IAAI,IAAI,CAAE,2DAA2D;IACrE,SAAS,IAAI,CAAE,uEAAuE;IACtF,OAAO,KAAK;CACb;AAED;;GAEG;AACH,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,aAAa,EAAE,MAAM,CAMpD,CAAC;AAMF;;;GAGG;AACH,oBAAY,WAAW;IACrB,0BAA0B;IAC1B,WAAW,QAAS;IACpB,wBAAwB;IACxB,MAAM,QAAS;IACf,2BAA2B;IAC3B,SAAS,QAAS;IAClB,oBAAoB;IACpB,aAAa,QAAS;IACtB,gCAAgC;IAChC,cAAc,QAAS;CACxB;AAED;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,CAMtD,CAAC;AAMF;;;GAGG;AACH,oBAAY,YAAY;IACtB,oBAAoB;IACpB,IAAI,IAAS;IACb,+BAA+B;IAC/B,cAAc,IAAS;IACvB,+BAA+B;IAC/B,cAAc,IAAS;IACvB,sBAAsB;IACtB,MAAM,IAAS;IACf,sBAAsB;IACtB,MAAM,IAAS;IACf,6BAA6B;IAC7B,YAAY,IAAS;IACrB,0BAA0B;IAC1B,UAAU,IAAS;IACnB,yBAAyB;IACzB,SAAS,IAAS;CACnB;AAED;;GAEG;AACH,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,YAAY,EAAE,MAAM,CAS1D,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,oBAAoB,EAAE,SAAS,YAAY,EAS9C,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Protocol Constants
3
+ *
4
+ * Re-exports all protocol constants from focused modules.
5
+ * Import from this barrel to keep existing import paths working.
6
+ */
7
+ export { BLE } from './ble-config';
8
+ export { Timing } from './timing';
9
+ export { Auth, Init, Workout } from './connection-commands';
10
+ export { MessageTypes, TelemetryOffsets, NotificationConfigs, Uint16ParamIds, ParamIdHex, TrainingModeValues, } from './message-types';
11
+ export { MovementPhase, PhaseNames, ParameterId, ParameterNames, TrainingMode, TrainingModeNames, VALID_TRAINING_MODES, } from './enums';
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/voltra/protocol/constants/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,mBAAmB,EACnB,cAAc,EACd,UAAU,EACV,kBAAkB,GACnB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,aAAa,EACb,UAAU,EACV,WAAW,EACX,cAAc,EACd,YAAY,EACZ,iBAAiB,EACjB,oBAAoB,GACrB,MAAM,SAAS,CAAC"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Message Types & Telemetry Configuration
3
+ *
4
+ * Notification message identifiers, telemetry byte offsets,
5
+ * notification parsing configs, and parameter ID mappings.
6
+ * All values loaded from protocol.json for single source of truth.
7
+ */
8
+ /**
9
+ * Message type identifiers (first 4 bytes of notifications).
10
+ */
11
+ export declare const MessageTypes: {
12
+ /** Real-time telemetry stream (~11 Hz) */
13
+ readonly TELEMETRY_STREAM: Uint8Array<ArrayBufferLike>;
14
+ /** Rep completion summary */
15
+ readonly REP_SUMMARY: Uint8Array<ArrayBufferLike>;
16
+ /** Set completion summary */
17
+ readonly SET_SUMMARY: Uint8Array<ArrayBufferLike>;
18
+ /** Status update */
19
+ readonly STATUS_UPDATE: Uint8Array<ArrayBufferLike>;
20
+ };
21
+ /**
22
+ * Byte offsets for parsing telemetry stream messages.
23
+ */
24
+ export declare const TelemetryOffsets: {
25
+ readonly SEQUENCE: number;
26
+ readonly PHASE: number;
27
+ readonly POSITION: number;
28
+ readonly FORCE: number;
29
+ readonly VELOCITY: number;
30
+ };
31
+ /**
32
+ * Notification parsing configurations loaded from protocol.json.
33
+ * Used to parse various notification types from the device.
34
+ */
35
+ export declare const NotificationConfigs: import("../types").NotificationsConfig;
36
+ /**
37
+ * Parameter IDs as hex strings (for matching in notifications).
38
+ */
39
+ export declare const ParamIdHex: {
40
+ readonly BASE_WEIGHT: string;
41
+ readonly CHAINS: string;
42
+ readonly ECCENTRIC: string;
43
+ readonly TRAINING_MODE: string;
44
+ readonly INVERSE_CHAINS: string;
45
+ readonly UNKNOWN_893E: string;
46
+ };
47
+ /**
48
+ * Param IDs that use 2-byte (uint16) values in notifications.
49
+ * All other param IDs use 1-byte (uint8) values.
50
+ */
51
+ export declare const Uint16ParamIds: ReadonlySet<string>;
52
+ /**
53
+ * Training mode values from protocol.json.
54
+ * These map to the TrainingMode enum values.
55
+ */
56
+ export declare const TrainingModeValues: import("../types").TrainingModesConfig;
57
+ //# sourceMappingURL=message-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message-types.d.ts","sourceRoot":"","sources":["../../../../../src/voltra/protocol/constants/message-types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAYH;;GAEG;AACH,eAAO,MAAM,YAAY;IACvB,0CAA0C;;IAE1C,6BAA6B;;IAE7B,6BAA6B;;IAE7B,oBAAoB;;CAEZ,CAAC;AAMX;;GAEG;AACH,eAAO,MAAM,gBAAgB;;;;;;CAMnB,CAAC;AAMX;;;GAGG;AACH,eAAO,MAAM,mBAAmB,wCAAmC,CAAC;AAEpE;;GAEG;AACH,eAAO,MAAM,UAAU;;;;;;;CAOb,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,cAAc,EAAE,WAAW,CAAC,MAAM,CAAoD,CAAC;AAEpG;;;GAGG;AACH,eAAO,MAAM,kBAAkB,wCAAmC,CAAC"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Timing Configuration
3
+ *
4
+ * Delays and timeouts for device communication.
5
+ */
6
+ export declare const Timing: {
7
+ /** Delay between init commands (ms) */
8
+ readonly INIT_COMMAND_DELAY_MS: 20;
9
+ /** Delay between dual commands like chains/eccentric (ms) */
10
+ readonly DUAL_COMMAND_DELAY_MS: 500;
11
+ /** Timeout for authentication response (ms) */
12
+ readonly AUTH_TIMEOUT_MS: 3000;
13
+ /** Minimum responses expected during auth */
14
+ readonly MIN_AUTH_RESPONSES: 2;
15
+ /** Minimum responses expected after commands */
16
+ readonly MIN_COMMAND_RESPONSES: 4;
17
+ };
18
+ //# sourceMappingURL=timing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timing.d.ts","sourceRoot":"","sources":["../../../../../src/voltra/protocol/constants/timing.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,eAAO,MAAM,MAAM;IACjB,uCAAuC;;IAEvC,6DAA6D;;IAE7D,+CAA+C;;IAE/C,6CAA6C;;IAE7C,gDAAgD;;CAExC,CAAC"}
@@ -0,0 +1,3 @@
1
+ declare const _default: any;
2
+ export default _default;
3
+ //# sourceMappingURL=protocol-data.generated.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protocol-data.generated.d.ts","sourceRoot":"","sources":["../../../../../src/voltra/protocol/data/protocol-data.generated.ts"],"names":[],"mappings":";AAIA,wBAEE"}
@@ -3,14 +3,18 @@
3
3
  *
4
4
  * Low-level protocol decoder for Voltra BLE telemetry notifications.
5
5
  * Only handles parsing bytes into typed data - no business logic.
6
+ * Uses offset-based lookups from protocol.json - no hardcoded byte positions.
6
7
  */
8
+ import { TrainingMode } from './constants';
7
9
  import { type TelemetryFrame } from '../models/telemetry/frame';
10
+ import type { DeviceSettings } from './types';
8
11
  /**
9
12
  * Types of messages that can be decoded.
10
13
  */
11
- export type MessageType = 'telemetry_stream' | 'rep_summary' | 'set_summary' | 'status_update' | 'unknown';
14
+ export type MessageType = 'telemetry_stream' | 'rep_summary' | 'set_summary' | 'status_update' | 'mode_confirmation' | 'multi_param' | 'settings_update' | 'device_init' | 'unknown';
12
15
  /**
13
16
  * Identify the message type from raw bytes.
17
+ * Uses header matching from protocol.json configurations.
14
18
  */
15
19
  export declare function identifyMessageType(data: Uint8Array): MessageType;
16
20
  /**
@@ -24,7 +28,16 @@ export type DecodeResult = {
24
28
  } | {
25
29
  type: 'set_boundary';
26
30
  } | {
27
- type: 'status';
31
+ type: 'mode_confirmation';
32
+ mode: TrainingMode;
33
+ } | {
34
+ type: 'settings_update';
35
+ settings: DeviceSettings;
36
+ } | {
37
+ type: 'device_status';
38
+ battery: number;
39
+ } | {
40
+ type: 'unknown';
28
41
  data: Uint8Array;
29
42
  } | null;
30
43
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"telemetry-decoder.d.ts","sourceRoot":"","sources":["../../../../src/voltra/protocol/telemetry-decoder.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAe,KAAK,cAAc,EAAE,MAAM,2BAA2B,CAAC;AA4C7E;;GAEG;AACH,MAAM,MAAM,WAAW,GACnB,kBAAkB,GAClB,aAAa,GACb,aAAa,GACb,eAAe,GACf,SAAS,CAAC;AAEd;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,UAAU,GAAG,WAAW,CAgBjE;AAMD;;GAEG;AACH,MAAM,MAAM,YAAY,GACpB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,cAAc,CAAA;CAAE,GACxC;IAAE,IAAI,EAAE,cAAc,CAAA;CAAE,GACxB;IAAE,IAAI,EAAE,cAAc,CAAA;CAAE,GACxB;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,UAAU,CAAA;CAAE,GACpC,IAAI,CAAC;AAMT;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,UAAU,GAAG,cAAc,GAAG,IAAI,CAuB5E;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,UAAU,GAAG,YAAY,CAuBjE;AAMD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,cAAc,GAAG,UAAU,CAyBtE"}
1
+ {"version":3,"file":"telemetry-decoder.d.ts","sourceRoot":"","sources":["../../../../src/voltra/protocol/telemetry-decoder.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAOL,YAAY,EAEb,MAAM,aAAa,CAAC;AACrB,OAAO,EAAe,KAAK,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAE7E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AA2C9C;;GAEG;AACH,MAAM,MAAM,WAAW,GACnB,kBAAkB,GAClB,aAAa,GACb,aAAa,GACb,eAAe,GACf,mBAAmB,GACnB,aAAa,GACb,iBAAiB,GACjB,aAAa,GACb,SAAS,CAAC;AAEd;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,UAAU,GAAG,WAAW,CAgCjE;AAMD;;GAEG;AACH,MAAM,MAAM,YAAY,GACpB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,cAAc,CAAA;CAAE,GACxC;IAAE,IAAI,EAAE,cAAc,CAAA;CAAE,GACxB;IAAE,IAAI,EAAE,cAAc,CAAA;CAAE,GACxB;IAAE,IAAI,EAAE,mBAAmB,CAAC;IAAC,IAAI,EAAE,YAAY,CAAA;CAAE,GACjD;IAAE,IAAI,EAAE,iBAAiB,CAAC;IAAC,QAAQ,EAAE,cAAc,CAAA;CAAE,GACrD;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAC1C;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,UAAU,CAAA;CAAE,GACrC,IAAI,CAAC;AAMT;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,UAAU,GAAG,cAAc,GAAG,IAAI,CAuB5E;AAyGD;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,UAAU,GAAG,YAAY,CA+BjE;AAMD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,cAAc,GAAG,UAAU,CA0BtE"}