@voltras/node-sdk 0.1.1 → 0.2.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 (171) 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/bluetooth/index.js.map +1 -1
  13. package/dist/cjs/errors.js.map +1 -1
  14. package/dist/cjs/index.js +19 -10
  15. package/dist/cjs/index.js.map +1 -1
  16. package/dist/cjs/react/hooks.js +2 -6
  17. package/dist/cjs/react/hooks.js.map +1 -1
  18. package/dist/cjs/sdk/notification-dispatcher.js +47 -0
  19. package/dist/cjs/sdk/notification-dispatcher.js.map +1 -0
  20. package/dist/cjs/sdk/reconnect-handler.js +61 -0
  21. package/dist/cjs/sdk/reconnect-handler.js.map +1 -0
  22. package/dist/cjs/sdk/voltra-client.js +206 -72
  23. package/dist/cjs/sdk/voltra-client.js.map +1 -1
  24. package/dist/cjs/sdk/voltra-manager.js +13 -2
  25. package/dist/cjs/sdk/voltra-manager.js.map +1 -1
  26. package/dist/cjs/shared/index.js +5 -1
  27. package/dist/cjs/shared/index.js.map +1 -1
  28. package/dist/cjs/shared/logger.js +54 -0
  29. package/dist/cjs/shared/logger.js.map +1 -0
  30. package/dist/cjs/voltra/index.js +15 -12
  31. package/dist/cjs/voltra/index.js.map +1 -1
  32. package/dist/cjs/voltra/models/device.js +13 -0
  33. package/dist/cjs/voltra/models/device.js.map +1 -1
  34. package/dist/cjs/voltra/protocol/commands.js +127 -210
  35. package/dist/cjs/voltra/protocol/commands.js.map +1 -1
  36. package/dist/cjs/voltra/protocol/constants/ble-config.js +24 -0
  37. package/dist/cjs/voltra/protocol/constants/ble-config.js.map +1 -0
  38. package/dist/cjs/voltra/protocol/constants/connection-commands.js +55 -0
  39. package/dist/cjs/voltra/protocol/constants/connection-commands.js.map +1 -0
  40. package/dist/cjs/voltra/protocol/constants/enums.js +117 -0
  41. package/dist/cjs/voltra/protocol/constants/enums.js.map +1 -0
  42. package/dist/cjs/voltra/protocol/constants/index.js +32 -0
  43. package/dist/cjs/voltra/protocol/constants/index.js.map +1 -0
  44. package/dist/cjs/voltra/protocol/constants/message-types.js +70 -0
  45. package/dist/cjs/voltra/protocol/constants/message-types.js.map +1 -0
  46. package/dist/cjs/voltra/protocol/constants/timing.js +21 -0
  47. package/dist/cjs/voltra/protocol/constants/timing.js.map +1 -0
  48. package/dist/cjs/voltra/protocol/data/protocol-data.generated.js +7 -0
  49. package/dist/cjs/voltra/protocol/data/protocol-data.generated.js.map +1 -0
  50. package/dist/cjs/voltra/protocol/telemetry-decoder.js +122 -6
  51. package/dist/cjs/voltra/protocol/telemetry-decoder.js.map +1 -1
  52. package/dist/cjs/voltra/protocol/types.js +9 -0
  53. package/dist/cjs/voltra/protocol/types.js.map +1 -0
  54. package/dist/esm/bluetooth/adapters/native.js +36 -34
  55. package/dist/esm/bluetooth/adapters/native.js.map +1 -1
  56. package/dist/esm/bluetooth/adapters/node.js +9 -7
  57. package/dist/esm/bluetooth/adapters/node.js.map +1 -1
  58. package/dist/esm/bluetooth/adapters/web-bluetooth-base.js +6 -4
  59. package/dist/esm/bluetooth/adapters/web-bluetooth-base.js.map +1 -1
  60. package/dist/esm/bluetooth/adapters/web.js +7 -5
  61. package/dist/esm/bluetooth/adapters/web.js.map +1 -1
  62. package/dist/esm/bluetooth/controllers/scanner-controller.js +0 -2
  63. package/dist/esm/bluetooth/controllers/scanner-controller.js.map +1 -1
  64. package/dist/esm/bluetooth/index.js +1 -1
  65. package/dist/esm/bluetooth/index.js.map +1 -1
  66. package/dist/esm/errors.js.map +1 -1
  67. package/dist/esm/index.js +4 -7
  68. package/dist/esm/index.js.map +1 -1
  69. package/dist/esm/react/hooks.js +1 -5
  70. package/dist/esm/react/hooks.js.map +1 -1
  71. package/dist/esm/sdk/notification-dispatcher.js +44 -0
  72. package/dist/esm/sdk/notification-dispatcher.js.map +1 -0
  73. package/dist/esm/sdk/reconnect-handler.js +57 -0
  74. package/dist/esm/sdk/reconnect-handler.js.map +1 -0
  75. package/dist/esm/sdk/voltra-client.js +204 -70
  76. package/dist/esm/sdk/voltra-client.js.map +1 -1
  77. package/dist/esm/sdk/voltra-manager.js +13 -2
  78. package/dist/esm/sdk/voltra-manager.js.map +1 -1
  79. package/dist/esm/shared/index.js +1 -0
  80. package/dist/esm/shared/index.js.map +1 -1
  81. package/dist/esm/shared/logger.js +49 -0
  82. package/dist/esm/shared/logger.js.map +1 -0
  83. package/dist/esm/voltra/index.js +3 -8
  84. package/dist/esm/voltra/index.js.map +1 -1
  85. package/dist/esm/voltra/models/device.js +13 -0
  86. package/dist/esm/voltra/models/device.js.map +1 -1
  87. package/dist/esm/voltra/protocol/commands.js +117 -209
  88. package/dist/esm/voltra/protocol/commands.js.map +1 -1
  89. package/dist/esm/voltra/protocol/constants/ble-config.js +18 -0
  90. package/dist/esm/voltra/protocol/constants/ble-config.js.map +1 -0
  91. package/dist/esm/voltra/protocol/constants/connection-commands.js +49 -0
  92. package/dist/esm/voltra/protocol/constants/connection-commands.js.map +1 -0
  93. package/dist/esm/voltra/protocol/constants/enums.js +114 -0
  94. package/dist/esm/voltra/protocol/constants/enums.js.map +1 -0
  95. package/dist/esm/voltra/protocol/constants/index.js +12 -0
  96. package/dist/esm/voltra/protocol/constants/index.js.map +1 -0
  97. package/dist/esm/voltra/protocol/constants/message-types.js +64 -0
  98. package/dist/esm/voltra/protocol/constants/message-types.js.map +1 -0
  99. package/dist/esm/voltra/protocol/constants/timing.js +18 -0
  100. package/dist/esm/voltra/protocol/constants/timing.js.map +1 -0
  101. package/dist/esm/voltra/protocol/data/protocol-data.generated.js +5 -0
  102. package/dist/esm/voltra/protocol/data/protocol-data.generated.js.map +1 -0
  103. package/dist/esm/voltra/protocol/telemetry-decoder.js +124 -8
  104. package/dist/esm/voltra/protocol/telemetry-decoder.js.map +1 -1
  105. package/dist/esm/voltra/protocol/types.js +8 -0
  106. package/dist/esm/voltra/protocol/types.js.map +1 -0
  107. package/dist/types/bluetooth/adapters/native.d.ts.map +1 -1
  108. package/dist/types/bluetooth/adapters/node.d.ts.map +1 -1
  109. package/dist/types/bluetooth/adapters/web-bluetooth-base.d.ts.map +1 -1
  110. package/dist/types/bluetooth/adapters/web.d.ts.map +1 -1
  111. package/dist/types/bluetooth/controllers/scanner-controller.d.ts.map +1 -1
  112. package/dist/types/bluetooth/index.d.ts +1 -1
  113. package/dist/types/bluetooth/index.d.ts.map +1 -1
  114. package/dist/types/errors.d.ts.map +1 -1
  115. package/dist/types/index.d.ts +5 -4
  116. package/dist/types/index.d.ts.map +1 -1
  117. package/dist/types/react/hooks.d.ts.map +1 -1
  118. package/dist/types/sdk/index.d.ts +2 -1
  119. package/dist/types/sdk/index.d.ts.map +1 -1
  120. package/dist/types/sdk/notification-dispatcher.d.ts +29 -0
  121. package/dist/types/sdk/notification-dispatcher.d.ts.map +1 -0
  122. package/dist/types/sdk/reconnect-handler.d.ts +55 -0
  123. package/dist/types/sdk/reconnect-handler.d.ts.map +1 -0
  124. package/dist/types/sdk/types.d.ts +35 -0
  125. package/dist/types/sdk/types.d.ts.map +1 -1
  126. package/dist/types/sdk/voltra-client.d.ts +77 -2
  127. package/dist/types/sdk/voltra-client.d.ts.map +1 -1
  128. package/dist/types/sdk/voltra-manager.d.ts.map +1 -1
  129. package/dist/types/shared/index.d.ts +1 -0
  130. package/dist/types/shared/index.d.ts.map +1 -1
  131. package/dist/types/shared/logger.d.ts +39 -0
  132. package/dist/types/shared/logger.d.ts.map +1 -0
  133. package/dist/types/voltra/index.d.ts +3 -3
  134. package/dist/types/voltra/index.d.ts.map +1 -1
  135. package/dist/types/voltra/models/device.d.ts +11 -1
  136. package/dist/types/voltra/models/device.d.ts.map +1 -1
  137. package/dist/types/voltra/protocol/commands.d.ts +47 -87
  138. package/dist/types/voltra/protocol/commands.d.ts.map +1 -1
  139. package/dist/types/voltra/protocol/constants/ble-config.d.ts +16 -0
  140. package/dist/types/voltra/protocol/constants/ble-config.d.ts.map +1 -0
  141. package/dist/types/voltra/protocol/constants/connection-commands.d.ts +37 -0
  142. package/dist/types/voltra/protocol/constants/connection-commands.d.ts.map +1 -0
  143. package/dist/types/voltra/protocol/constants/enums.d.ts +72 -0
  144. package/dist/types/voltra/protocol/constants/enums.d.ts.map +1 -0
  145. package/dist/types/voltra/protocol/constants/index.d.ts +12 -0
  146. package/dist/types/voltra/protocol/constants/index.d.ts.map +1 -0
  147. package/dist/types/voltra/protocol/constants/message-types.d.ts +52 -0
  148. package/dist/types/voltra/protocol/constants/message-types.d.ts.map +1 -0
  149. package/dist/types/voltra/protocol/constants/timing.d.ts +18 -0
  150. package/dist/types/voltra/protocol/constants/timing.d.ts.map +1 -0
  151. package/dist/types/voltra/protocol/data/protocol-data.generated.d.ts +3 -0
  152. package/dist/types/voltra/protocol/data/protocol-data.generated.d.ts.map +1 -0
  153. package/dist/types/voltra/protocol/telemetry-decoder.d.ts +15 -2
  154. package/dist/types/voltra/protocol/telemetry-decoder.d.ts.map +1 -1
  155. package/dist/types/voltra/protocol/types.d.ts +247 -0
  156. package/dist/types/voltra/protocol/types.d.ts.map +1 -0
  157. package/package.json +9 -8
  158. package/dist/cjs/voltra/protocol/constants.js +0 -136
  159. package/dist/cjs/voltra/protocol/constants.js.map +0 -1
  160. package/dist/cjs/voltra/protocol/data/chains.json +0 -830
  161. package/dist/cjs/voltra/protocol/data/eccentric.json +0 -1598
  162. package/dist/cjs/voltra/protocol/data/protocol.json +0 -54
  163. package/dist/cjs/voltra/protocol/data/weights.json +0 -62
  164. package/dist/esm/voltra/protocol/constants.js +0 -130
  165. package/dist/esm/voltra/protocol/constants.js.map +0 -1
  166. package/dist/esm/voltra/protocol/data/chains.json +0 -830
  167. package/dist/esm/voltra/protocol/data/eccentric.json +0 -1598
  168. package/dist/esm/voltra/protocol/data/protocol.json +0 -54
  169. package/dist/esm/voltra/protocol/data/weights.json +0 -62
  170. package/dist/types/voltra/protocol/constants.d.ts +0 -103
  171. package/dist/types/voltra/protocol/constants.d.ts.map +0 -1
@@ -1,136 +0,0 @@
1
- "use strict";
2
- /**
3
- * Voltra Protocol Constants
4
- *
5
- * BLE configuration, authentication, and command constants for
6
- * Beyond Power Voltra resistance training devices.
7
- */
8
- var __importDefault = (this && this.__importDefault) || function (mod) {
9
- return (mod && mod.__esModule) ? mod : { "default": mod };
10
- };
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.PhaseNames = exports.MovementPhase = exports.TelemetryOffsets = exports.MessageTypes = exports.Workout = exports.Init = exports.Auth = exports.Timing = exports.BLE = void 0;
13
- const utils_1 = require("../../shared/utils");
14
- const protocol_json_1 = __importDefault(require("./data/protocol.json"));
15
- // =============================================================================
16
- // BLE Configuration
17
- // =============================================================================
18
- exports.BLE = {
19
- /** Main service UUID for Voltra devices */
20
- SERVICE_UUID: protocol_json_1.default.ble.service_uuid,
21
- /** Characteristic for receiving notifications */
22
- NOTIFY_CHAR_UUID: protocol_json_1.default.ble.notify_char_uuid,
23
- /** Characteristic for writing commands */
24
- WRITE_CHAR_UUID: protocol_json_1.default.ble.write_char_uuid,
25
- /** Device name prefix for scanning (e.g., "VTR-") */
26
- DEVICE_NAME_PREFIX: protocol_json_1.default.ble.device_name_prefix,
27
- };
28
- // =============================================================================
29
- // Timing Configuration
30
- // =============================================================================
31
- exports.Timing = {
32
- /** Delay between init commands (ms) */
33
- INIT_COMMAND_DELAY_MS: 20,
34
- /** Delay between dual commands like chains/eccentric (ms) */
35
- DUAL_COMMAND_DELAY_MS: 500,
36
- /** Timeout for authentication response (ms) */
37
- AUTH_TIMEOUT_MS: 3000,
38
- /** Minimum responses expected during auth */
39
- MIN_AUTH_RESPONSES: 2,
40
- /** Minimum responses expected after commands */
41
- MIN_COMMAND_RESPONSES: 4,
42
- };
43
- // =============================================================================
44
- // Authentication
45
- // =============================================================================
46
- /**
47
- * Device authentication identifiers.
48
- *
49
- * 41-byte device IDs that identify the connecting app.
50
- * Both iPhone and iPad IDs work - the Voltra doesn't care which.
51
- */
52
- exports.Auth = {
53
- /** iPhone identity from Beyond+ app */
54
- DEVICE_ID: (0, utils_1.hexToBytes)(protocol_json_1.default.auth.iphone),
55
- /** iPad identity (alternative) */
56
- DEVICE_ID_IPAD: (0, utils_1.hexToBytes)(protocol_json_1.default.auth.ipad),
57
- };
58
- // =============================================================================
59
- // Initialization
60
- // =============================================================================
61
- /**
62
- * Minimal 2-command init sequence (reduced from 22+ in Beyond+ app).
63
- */
64
- exports.Init = {
65
- SEQUENCE: protocol_json_1.default.init.commands.map(utils_1.hexToBytes),
66
- };
67
- // =============================================================================
68
- // Workout Commands
69
- // =============================================================================
70
- /**
71
- * Workout control commands.
72
- *
73
- * To start: set weight -> PREPARE -> SETUP -> GO
74
- * To stop: STOP
75
- */
76
- exports.Workout = {
77
- /** Prepare for workout (b04f=01) */
78
- PREPARE: (0, utils_1.hexToBytes)(protocol_json_1.default.workout.prepare),
79
- /** Setup workout mode (823e setup) */
80
- SETUP: (0, utils_1.hexToBytes)(protocol_json_1.default.workout.setup),
81
- /** Start resistance (893e=05) */
82
- GO: (0, utils_1.hexToBytes)(protocol_json_1.default.workout.go),
83
- /** Stop resistance (893e=04) */
84
- STOP: (0, utils_1.hexToBytes)(protocol_json_1.default.workout.stop),
85
- };
86
- // =============================================================================
87
- // Telemetry Message Types (loaded from protocol.json)
88
- // =============================================================================
89
- /**
90
- * Message type identifiers (first 4 bytes of notifications).
91
- * Values loaded from protocol.json for single source of truth.
92
- */
93
- exports.MessageTypes = {
94
- /** Real-time telemetry stream (~11 Hz) */
95
- TELEMETRY_STREAM: (0, utils_1.hexToBytes)(protocol_json_1.default.telemetry.message_types.stream),
96
- /** Rep completion summary */
97
- REP_SUMMARY: (0, utils_1.hexToBytes)(protocol_json_1.default.telemetry.message_types.rep_summary),
98
- /** Set completion summary */
99
- SET_SUMMARY: (0, utils_1.hexToBytes)(protocol_json_1.default.telemetry.message_types.set_summary),
100
- /** Status update */
101
- STATUS_UPDATE: (0, utils_1.hexToBytes)(protocol_json_1.default.telemetry.message_types.status_update),
102
- };
103
- /**
104
- * Byte offsets for parsing telemetry stream messages.
105
- * Values loaded from protocol.json for single source of truth.
106
- */
107
- exports.TelemetryOffsets = {
108
- SEQUENCE: protocol_json_1.default.telemetry.offsets.sequence, // 2 bytes, little-endian
109
- PHASE: protocol_json_1.default.telemetry.offsets.phase, // 1 byte
110
- POSITION: protocol_json_1.default.telemetry.offsets.position, // 2 bytes, little-endian unsigned
111
- FORCE: protocol_json_1.default.telemetry.offsets.force, // 2 bytes, little-endian signed
112
- VELOCITY: protocol_json_1.default.telemetry.offsets.velocity, // 2 bytes, little-endian unsigned
113
- };
114
- /**
115
- * Movement phase during workout.
116
- * Values match protocol.json telemetry.phases.
117
- */
118
- var MovementPhase;
119
- (function (MovementPhase) {
120
- MovementPhase[MovementPhase["IDLE"] = 0] = "IDLE";
121
- MovementPhase[MovementPhase["CONCENTRIC"] = 1] = "CONCENTRIC";
122
- MovementPhase[MovementPhase["HOLD"] = 2] = "HOLD";
123
- MovementPhase[MovementPhase["ECCENTRIC"] = 3] = "ECCENTRIC";
124
- MovementPhase[MovementPhase["UNKNOWN"] = -1] = "UNKNOWN";
125
- })(MovementPhase || (exports.MovementPhase = MovementPhase = {}));
126
- /**
127
- * Human-readable phase names.
128
- */
129
- exports.PhaseNames = {
130
- [MovementPhase.IDLE]: 'Idle',
131
- [MovementPhase.CONCENTRIC]: 'Pulling',
132
- [MovementPhase.HOLD]: 'Hold',
133
- [MovementPhase.ECCENTRIC]: 'Lowering',
134
- [MovementPhase.UNKNOWN]: 'Unknown',
135
- };
136
- //# sourceMappingURL=constants.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../../src/voltra/protocol/constants.ts"],"names":[],"mappings":"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"}