@voltras/node-sdk 0.1.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.
- package/LICENSE +21 -0
- package/README.md +272 -0
- package/dist/cjs/bluetooth/adapters/base.js +116 -0
- package/dist/cjs/bluetooth/adapters/base.js.map +1 -0
- package/dist/cjs/bluetooth/adapters/index.js +58 -0
- package/dist/cjs/bluetooth/adapters/index.js.map +1 -0
- package/dist/cjs/bluetooth/adapters/native.js +473 -0
- package/dist/cjs/bluetooth/adapters/native.js.map +1 -0
- package/dist/cjs/bluetooth/adapters/node.js +228 -0
- package/dist/cjs/bluetooth/adapters/node.js.map +1 -0
- package/dist/cjs/bluetooth/adapters/types.js +11 -0
- package/dist/cjs/bluetooth/adapters/types.js.map +1 -0
- package/dist/cjs/bluetooth/adapters/web-bluetooth-base.js +187 -0
- package/dist/cjs/bluetooth/adapters/web-bluetooth-base.js.map +1 -0
- package/dist/cjs/bluetooth/adapters/web.js +112 -0
- package/dist/cjs/bluetooth/adapters/web.js.map +1 -0
- package/dist/cjs/bluetooth/controllers/scanner-controller.js +145 -0
- package/dist/cjs/bluetooth/controllers/scanner-controller.js.map +1 -0
- package/dist/cjs/bluetooth/index.js +27 -0
- package/dist/cjs/bluetooth/index.js.map +1 -0
- package/dist/cjs/bluetooth/models/connection.js +68 -0
- package/dist/cjs/bluetooth/models/connection.js.map +1 -0
- package/dist/cjs/bluetooth/models/device.js +26 -0
- package/dist/cjs/bluetooth/models/device.js.map +1 -0
- package/dist/cjs/bluetooth/models/environment.js +106 -0
- package/dist/cjs/bluetooth/models/environment.js.map +1 -0
- package/dist/cjs/errors.js +167 -0
- package/dist/cjs/errors.js.map +1 -0
- package/dist/cjs/index.js +116 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/react/hooks.js +262 -0
- package/dist/cjs/react/hooks.js.map +1 -0
- package/dist/cjs/react/index.js +18 -0
- package/dist/cjs/react/index.js.map +1 -0
- package/dist/cjs/sdk/index.js +14 -0
- package/dist/cjs/sdk/index.js.map +1 -0
- package/dist/cjs/sdk/types.js +8 -0
- package/dist/cjs/sdk/types.js.map +1 -0
- package/dist/cjs/sdk/voltra-client.js +632 -0
- package/dist/cjs/sdk/voltra-client.js.map +1 -0
- package/dist/cjs/sdk/voltra-manager.js +419 -0
- package/dist/cjs/sdk/voltra-manager.js.map +1 -0
- package/dist/cjs/shared/index.js +12 -0
- package/dist/cjs/shared/index.js.map +1 -0
- package/dist/cjs/shared/utils.js +51 -0
- package/dist/cjs/shared/utils.js.map +1 -0
- package/dist/cjs/voltra/index.js +56 -0
- package/dist/cjs/voltra/index.js.map +1 -0
- package/dist/cjs/voltra/models/connection.js +68 -0
- package/dist/cjs/voltra/models/connection.js.map +1 -0
- package/dist/cjs/voltra/models/device-filter.js +28 -0
- package/dist/cjs/voltra/models/device-filter.js.map +1 -0
- package/dist/cjs/voltra/models/device.js +152 -0
- package/dist/cjs/voltra/models/device.js.map +1 -0
- package/dist/cjs/voltra/models/telemetry/frame.js +46 -0
- package/dist/cjs/voltra/models/telemetry/frame.js.map +1 -0
- package/dist/cjs/voltra/models/telemetry/index.js +14 -0
- package/dist/cjs/voltra/models/telemetry/index.js.map +1 -0
- package/dist/cjs/voltra/protocol/commands.js +230 -0
- package/dist/cjs/voltra/protocol/commands.js.map +1 -0
- package/dist/cjs/voltra/protocol/constants.js +136 -0
- package/dist/cjs/voltra/protocol/constants.js.map +1 -0
- package/dist/cjs/voltra/protocol/data/chains.json +830 -0
- package/dist/cjs/voltra/protocol/data/eccentric.json +1598 -0
- package/dist/cjs/voltra/protocol/data/protocol.json +54 -0
- package/dist/cjs/voltra/protocol/data/weights.json +62 -0
- package/dist/cjs/voltra/protocol/index.js +25 -0
- package/dist/cjs/voltra/protocol/index.js.map +1 -0
- package/dist/cjs/voltra/protocol/telemetry-decoder.js +146 -0
- package/dist/cjs/voltra/protocol/telemetry-decoder.js.map +1 -0
- package/dist/esm/bluetooth/adapters/base.js +112 -0
- package/dist/esm/bluetooth/adapters/base.js.map +1 -0
- package/dist/esm/bluetooth/adapters/index.js +51 -0
- package/dist/esm/bluetooth/adapters/index.js.map +1 -0
- package/dist/esm/bluetooth/adapters/native.js +469 -0
- package/dist/esm/bluetooth/adapters/native.js.map +1 -0
- package/dist/esm/bluetooth/adapters/node.js +191 -0
- package/dist/esm/bluetooth/adapters/node.js.map +1 -0
- package/dist/esm/bluetooth/adapters/types.js +10 -0
- package/dist/esm/bluetooth/adapters/types.js.map +1 -0
- package/dist/esm/bluetooth/adapters/web-bluetooth-base.js +183 -0
- package/dist/esm/bluetooth/adapters/web-bluetooth-base.js.map +1 -0
- package/dist/esm/bluetooth/adapters/web.js +108 -0
- package/dist/esm/bluetooth/adapters/web.js.map +1 -0
- package/dist/esm/bluetooth/controllers/scanner-controller.js +141 -0
- package/dist/esm/bluetooth/controllers/scanner-controller.js.map +1 -0
- package/dist/esm/bluetooth/index.js +17 -0
- package/dist/esm/bluetooth/index.js.map +1 -0
- package/dist/esm/bluetooth/models/connection.js +63 -0
- package/dist/esm/bluetooth/models/connection.js.map +1 -0
- package/dist/esm/bluetooth/models/device.js +22 -0
- package/dist/esm/bluetooth/models/device.js.map +1 -0
- package/dist/esm/bluetooth/models/environment.js +101 -0
- package/dist/esm/bluetooth/models/environment.js.map +1 -0
- package/dist/esm/errors.js +155 -0
- package/dist/esm/errors.js.map +1 -0
- package/dist/esm/index.js +72 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/react/hooks.js +257 -0
- package/dist/esm/react/hooks.js.map +1 -0
- package/dist/esm/react/index.js +12 -0
- package/dist/esm/react/index.js.map +1 -0
- package/dist/esm/sdk/index.js +9 -0
- package/dist/esm/sdk/index.js.map +1 -0
- package/dist/esm/sdk/types.js +7 -0
- package/dist/esm/sdk/types.js.map +1 -0
- package/dist/esm/sdk/voltra-client.js +628 -0
- package/dist/esm/sdk/voltra-client.js.map +1 -0
- package/dist/esm/sdk/voltra-manager.js +415 -0
- package/dist/esm/sdk/voltra-manager.js.map +1 -0
- package/dist/esm/shared/index.js +5 -0
- package/dist/esm/shared/index.js.map +1 -0
- package/dist/esm/shared/utils.js +45 -0
- package/dist/esm/shared/utils.js.map +1 -0
- package/dist/esm/voltra/index.js +26 -0
- package/dist/esm/voltra/index.js.map +1 -0
- package/dist/esm/voltra/models/connection.js +63 -0
- package/dist/esm/voltra/models/connection.js.map +1 -0
- package/dist/esm/voltra/models/device-filter.js +23 -0
- package/dist/esm/voltra/models/device-filter.js.map +1 -0
- package/dist/esm/voltra/models/device.js +148 -0
- package/dist/esm/voltra/models/device.js.map +1 -0
- package/dist/esm/voltra/models/telemetry/frame.js +40 -0
- package/dist/esm/voltra/models/telemetry/frame.js.map +1 -0
- package/dist/esm/voltra/models/telemetry/index.js +7 -0
- package/dist/esm/voltra/models/telemetry/index.js.map +1 -0
- package/dist/esm/voltra/protocol/commands.js +224 -0
- package/dist/esm/voltra/protocol/commands.js.map +1 -0
- package/dist/esm/voltra/protocol/constants.js +130 -0
- package/dist/esm/voltra/protocol/constants.js.map +1 -0
- package/dist/esm/voltra/protocol/data/chains.json +830 -0
- package/dist/esm/voltra/protocol/data/eccentric.json +1598 -0
- package/dist/esm/voltra/protocol/data/protocol.json +54 -0
- package/dist/esm/voltra/protocol/data/weights.json +62 -0
- package/dist/esm/voltra/protocol/index.js +9 -0
- package/dist/esm/voltra/protocol/index.js.map +1 -0
- package/dist/esm/voltra/protocol/telemetry-decoder.js +140 -0
- package/dist/esm/voltra/protocol/telemetry-decoder.js.map +1 -0
- package/dist/types/bluetooth/adapters/base.d.ts +85 -0
- package/dist/types/bluetooth/adapters/base.d.ts.map +1 -0
- package/dist/types/bluetooth/adapters/index.d.ts +35 -0
- package/dist/types/bluetooth/adapters/index.d.ts.map +1 -0
- package/dist/types/bluetooth/adapters/native.d.ts +109 -0
- package/dist/types/bluetooth/adapters/native.d.ts.map +1 -0
- package/dist/types/bluetooth/adapters/node.d.ts +91 -0
- package/dist/types/bluetooth/adapters/node.d.ts.map +1 -0
- package/dist/types/bluetooth/adapters/types.d.ts +102 -0
- package/dist/types/bluetooth/adapters/types.d.ts.map +1 -0
- package/dist/types/bluetooth/adapters/web-bluetooth-base.d.ts +90 -0
- package/dist/types/bluetooth/adapters/web-bluetooth-base.d.ts.map +1 -0
- package/dist/types/bluetooth/adapters/web.d.ts +57 -0
- package/dist/types/bluetooth/adapters/web.d.ts.map +1 -0
- package/dist/types/bluetooth/controllers/scanner-controller.d.ts +93 -0
- package/dist/types/bluetooth/controllers/scanner-controller.d.ts.map +1 -0
- package/dist/types/bluetooth/index.d.ts +14 -0
- package/dist/types/bluetooth/index.d.ts.map +1 -0
- package/dist/types/bluetooth/models/connection.d.ts +37 -0
- package/dist/types/bluetooth/models/connection.d.ts.map +1 -0
- package/dist/types/bluetooth/models/device.d.ts +25 -0
- package/dist/types/bluetooth/models/device.d.ts.map +1 -0
- package/dist/types/bluetooth/models/environment.d.ts +45 -0
- package/dist/types/bluetooth/models/environment.d.ts.map +1 -0
- package/dist/types/errors.d.ts +113 -0
- package/dist/types/errors.d.ts.map +1 -0
- package/dist/types/index.d.ts +55 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/react/hooks.d.ts +130 -0
- package/dist/types/react/hooks.d.ts.map +1 -0
- package/dist/types/react/index.d.ts +12 -0
- package/dist/types/react/index.d.ts.map +1 -0
- package/dist/types/sdk/index.d.ts +11 -0
- package/dist/types/sdk/index.d.ts.map +1 -0
- package/dist/types/sdk/types.d.ts +104 -0
- package/dist/types/sdk/types.d.ts.map +1 -0
- package/dist/types/sdk/voltra-client.d.ts +221 -0
- package/dist/types/sdk/voltra-client.d.ts.map +1 -0
- package/dist/types/sdk/voltra-manager.d.ts +226 -0
- package/dist/types/sdk/voltra-manager.d.ts.map +1 -0
- package/dist/types/shared/index.d.ts +5 -0
- package/dist/types/shared/index.d.ts.map +1 -0
- package/dist/types/shared/utils.d.ts +25 -0
- package/dist/types/shared/utils.d.ts.map +1 -0
- package/dist/types/voltra/index.d.ts +13 -0
- package/dist/types/voltra/index.d.ts.map +1 -0
- package/dist/types/voltra/models/connection.d.ts +37 -0
- package/dist/types/voltra/models/connection.d.ts.map +1 -0
- package/dist/types/voltra/models/device-filter.d.ts +19 -0
- package/dist/types/voltra/models/device-filter.d.ts.map +1 -0
- package/dist/types/voltra/models/device.d.ts +105 -0
- package/dist/types/voltra/models/device.d.ts.map +1 -0
- package/dist/types/voltra/models/telemetry/frame.d.ts +41 -0
- package/dist/types/voltra/models/telemetry/frame.d.ts.map +1 -0
- package/dist/types/voltra/models/telemetry/index.d.ts +8 -0
- package/dist/types/voltra/models/telemetry/index.d.ts.map +1 -0
- package/dist/types/voltra/protocol/commands.d.ts +99 -0
- package/dist/types/voltra/protocol/commands.d.ts.map +1 -0
- package/dist/types/voltra/protocol/constants.d.ts +103 -0
- package/dist/types/voltra/protocol/constants.d.ts.map +1 -0
- package/dist/types/voltra/protocol/index.d.ts +9 -0
- package/dist/types/voltra/protocol/index.d.ts.map +1 -0
- package/dist/types/voltra/protocol/telemetry-decoder.d.ts +45 -0
- package/dist/types/voltra/protocol/telemetry-decoder.d.ts.map +1 -0
- package/package.json +111 -0
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @voltras/node-sdk
|
|
3
|
+
*
|
|
4
|
+
* SDK for connecting to and controlling Voltra fitness devices.
|
|
5
|
+
*
|
|
6
|
+
* Use VoltraManager as the main entry point. It handles device discovery
|
|
7
|
+
* and returns VoltraClient instances for controlling individual devices.
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```typescript
|
|
11
|
+
* import { VoltraManager } from '@voltras/node-sdk';
|
|
12
|
+
*
|
|
13
|
+
* // Create manager (auto-detects platform for web/node)
|
|
14
|
+
* const manager = new VoltraManager();
|
|
15
|
+
*
|
|
16
|
+
* // Scan and connect
|
|
17
|
+
* const devices = await manager.scan();
|
|
18
|
+
* const client = await manager.connect(devices[0]);
|
|
19
|
+
*
|
|
20
|
+
* // Or connect by name in one step
|
|
21
|
+
* const client = await manager.connectByName('VTR-123456');
|
|
22
|
+
*
|
|
23
|
+
* // Control the device
|
|
24
|
+
* await client.setWeight(50);
|
|
25
|
+
* client.onFrame((frame) => console.log('Position:', frame.position));
|
|
26
|
+
* await client.startRecording();
|
|
27
|
+
* ```
|
|
28
|
+
*
|
|
29
|
+
* For React Native, specify the platform:
|
|
30
|
+
* ```typescript
|
|
31
|
+
* const manager = VoltraManager.forNative();
|
|
32
|
+
* // or
|
|
33
|
+
* const manager = new VoltraManager({ platform: 'native' });
|
|
34
|
+
* ```
|
|
35
|
+
*/
|
|
36
|
+
export { VoltraClient, VoltraManager, type Platform, type VoltraClientOptions, type VoltraClientState, type VoltraClientEvent, type VoltraClientEventListener, type VoltraManagerOptions, type VoltraManagerEvent, type VoltraManagerEventListener, type ConnectByNameOptions, type AdapterFactory, type FrameListener, type ScanOptions, } from './sdk';
|
|
37
|
+
export { WebBLEAdapter } from './bluetooth/adapters/web';
|
|
38
|
+
export { NodeBLEAdapter, type DeviceChooser } from './bluetooth/adapters/node';
|
|
39
|
+
export { NativeBLEAdapter } from './bluetooth/adapters/native';
|
|
40
|
+
export { createBLEAdapter } from './bluetooth/adapters';
|
|
41
|
+
export type { BLEAdapter, BLEServiceConfig, ConnectOptions, ConnectionState, NotificationCallback, ConnectionStateCallback, } from './bluetooth/adapters/types';
|
|
42
|
+
export type { DiscoveredDevice } from './bluetooth/models/device';
|
|
43
|
+
export { getDeviceDisplayName, sortBySignalStrength } from './bluetooth/models/device';
|
|
44
|
+
export { VOLTRA_DEVICE_PREFIX, isVoltraDevice, filterVoltraDevices, } from './voltra/models/device-filter';
|
|
45
|
+
export { VoltraDevice, DEFAULT_SETTINGS, type VoltraDeviceSettings, type VoltraRecordingState, type VoltraDeviceState, } from './voltra/models/device';
|
|
46
|
+
export type { VoltraConnectionState } from './voltra/models/connection';
|
|
47
|
+
export type { TelemetryFrame } from './voltra/models/telemetry';
|
|
48
|
+
export { createFrame } from './voltra/models/telemetry';
|
|
49
|
+
export { decodeTelemetryFrame, decodeNotification, encodeTelemetryFrame, identifyMessageType, type DecodeResult, type MessageType, } from './voltra/protocol/telemetry-decoder';
|
|
50
|
+
export { MovementPhase, PhaseNames, MessageTypes, TelemetryOffsets, } from './voltra/protocol/constants';
|
|
51
|
+
export { WeightCommands, ChainsCommands, EccentricCommands, type DualCommand, } from './voltra/protocol/commands';
|
|
52
|
+
export { BLE, Timing, Auth, Init, Workout, } from './voltra/protocol/constants';
|
|
53
|
+
export { VoltraSDKError, ConnectionError, AuthenticationError, TimeoutError, NotConnectedError, InvalidSettingError, BluetoothUnavailableError, CommandError, TelemetryError, ErrorCode, type ErrorCode as ErrorCodeType, } from './errors';
|
|
54
|
+
export { delay } from './shared/utils';
|
|
55
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAMH,OAAO,EACL,YAAY,EACZ,aAAa,EACb,KAAK,QAAQ,EACb,KAAK,mBAAmB,EACxB,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACtB,KAAK,yBAAyB,EAC9B,KAAK,oBAAoB,EACzB,KAAK,kBAAkB,EACvB,KAAK,0BAA0B,EAC/B,KAAK,oBAAoB,EACzB,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,KAAK,WAAW,GACjB,MAAM,OAAO,CAAC;AAMf,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,KAAK,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC/E,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAGxD,YAAY,EACV,UAAU,EACV,gBAAgB,EAChB,cAAc,EACd,eAAe,EACf,oBAAoB,EACpB,uBAAuB,GACxB,MAAM,4BAA4B,CAAC;AAMpC,YAAY,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAEvF,OAAO,EACL,oBAAoB,EACpB,cAAc,EACd,mBAAmB,GACpB,MAAM,+BAA+B,CAAC;AAMvC,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,KAAK,oBAAoB,EACzB,KAAK,oBAAoB,EACzB,KAAK,iBAAiB,GACvB,MAAM,wBAAwB,CAAC;AAEhC,YAAY,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAMxE,YAAY,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAExD,OAAO,EACL,oBAAoB,EACpB,kBAAkB,EAClB,oBAAoB,EACpB,mBAAmB,EACnB,KAAK,YAAY,EACjB,KAAK,WAAW,GACjB,MAAM,qCAAqC,CAAC;AAE7C,OAAO,EACL,aAAa,EACb,UAAU,EACV,YAAY,EACZ,gBAAgB,GACjB,MAAM,6BAA6B,CAAC;AAMrC,OAAO,EACL,cAAc,EACd,cAAc,EACd,iBAAiB,EACjB,KAAK,WAAW,GACjB,MAAM,4BAA4B,CAAC;AAMpC,OAAO,EACL,GAAG,EACH,MAAM,EACN,IAAI,EACJ,IAAI,EACJ,OAAO,GACR,MAAM,6BAA6B,CAAC;AAMrC,OAAO,EACL,cAAc,EACd,eAAe,EACf,mBAAmB,EACnB,YAAY,EACZ,iBAAiB,EACjB,mBAAmB,EACnB,yBAAyB,EACzB,YAAY,EACZ,cAAc,EACd,SAAS,EACT,KAAK,SAAS,IAAI,aAAa,GAChC,MAAM,UAAU,CAAC;AAMlB,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* React Hooks for Voltra SDK
|
|
3
|
+
*
|
|
4
|
+
* Clean, focused hooks for device scanning and state management.
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* ```tsx
|
|
8
|
+
* import { VoltraManager } from '@voltras/node-sdk';
|
|
9
|
+
* import { useVoltraScanner, useVoltraDevice } from '@voltras/node-sdk/react';
|
|
10
|
+
*
|
|
11
|
+
* function WorkoutScreen() {
|
|
12
|
+
* const manager = useMemo(() => new VoltraManager(), []);
|
|
13
|
+
* const [client, setClient] = useState<VoltraClient | null>(null);
|
|
14
|
+
*
|
|
15
|
+
* // Scanner state
|
|
16
|
+
* const { devices, isScanning, scan } = useVoltraScanner(manager);
|
|
17
|
+
*
|
|
18
|
+
* // Device state (when connected)
|
|
19
|
+
* const { connectionState, currentFrame, settings } = useVoltraDevice(client);
|
|
20
|
+
*
|
|
21
|
+
* const handleConnect = async (device: DiscoveredDevice) => {
|
|
22
|
+
* const connected = await manager.connect(device);
|
|
23
|
+
* setClient(connected);
|
|
24
|
+
* };
|
|
25
|
+
*
|
|
26
|
+
* return (
|
|
27
|
+
* <View>
|
|
28
|
+
* <Button onPress={() => scan()}>
|
|
29
|
+
* {isScanning ? 'Scanning...' : 'Scan'}
|
|
30
|
+
* </Button>
|
|
31
|
+
* {devices.map((d) => (
|
|
32
|
+
* <Button key={d.id} onPress={() => handleConnect(d)}>
|
|
33
|
+
* {d.name}
|
|
34
|
+
* </Button>
|
|
35
|
+
* ))}
|
|
36
|
+
* {connectionState === 'connected' && (
|
|
37
|
+
* <Text>Position: {currentFrame?.position}</Text>
|
|
38
|
+
* )}
|
|
39
|
+
* </View>
|
|
40
|
+
* );
|
|
41
|
+
* }
|
|
42
|
+
* ```
|
|
43
|
+
*/
|
|
44
|
+
import type { DiscoveredDevice } from '../bluetooth/models/device';
|
|
45
|
+
import type { TelemetryFrame } from '../voltra/models/telemetry';
|
|
46
|
+
import type { VoltraConnectionState } from '../voltra/models/connection';
|
|
47
|
+
import type { VoltraDeviceSettings, VoltraRecordingState } from '../voltra/models/device';
|
|
48
|
+
import type { VoltraManager } from '../sdk/voltra-manager';
|
|
49
|
+
import type { VoltraClient } from '../sdk/voltra-client';
|
|
50
|
+
import type { ScanOptions } from '../sdk/types';
|
|
51
|
+
/**
|
|
52
|
+
* Scanner state and controls.
|
|
53
|
+
*/
|
|
54
|
+
export interface VoltraScannerState {
|
|
55
|
+
/** Devices discovered in the last scan */
|
|
56
|
+
devices: DiscoveredDevice[];
|
|
57
|
+
/** Whether a scan is in progress */
|
|
58
|
+
isScanning: boolean;
|
|
59
|
+
/** Error from the last scan, if any */
|
|
60
|
+
error: Error | null;
|
|
61
|
+
/** Start scanning for devices */
|
|
62
|
+
scan: (options?: ScanOptions) => Promise<DiscoveredDevice[]>;
|
|
63
|
+
/** Clear discovered devices */
|
|
64
|
+
clear: () => void;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Hook for scanning for Voltra devices.
|
|
68
|
+
*
|
|
69
|
+
* @param manager VoltraManager instance
|
|
70
|
+
* @returns Scanner state and controls
|
|
71
|
+
*/
|
|
72
|
+
export declare function useVoltraScanner(manager: VoltraManager | null): VoltraScannerState;
|
|
73
|
+
/**
|
|
74
|
+
* Device state.
|
|
75
|
+
*/
|
|
76
|
+
export interface VoltraDeviceState {
|
|
77
|
+
/** Current connection state */
|
|
78
|
+
connectionState: VoltraConnectionState;
|
|
79
|
+
/** Whether connected */
|
|
80
|
+
isConnected: boolean;
|
|
81
|
+
/** Current recording state */
|
|
82
|
+
recordingState: VoltraRecordingState;
|
|
83
|
+
/** Whether recording is active */
|
|
84
|
+
isRecording: boolean;
|
|
85
|
+
/** Current device settings */
|
|
86
|
+
settings: VoltraDeviceSettings;
|
|
87
|
+
/** Most recent telemetry frame */
|
|
88
|
+
currentFrame: TelemetryFrame | null;
|
|
89
|
+
/** Last error, if any */
|
|
90
|
+
error: Error | null;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Hook for observing a Voltra device's state.
|
|
94
|
+
*
|
|
95
|
+
* @param client VoltraClient instance (or null if not connected)
|
|
96
|
+
* @returns Device state
|
|
97
|
+
*/
|
|
98
|
+
export declare function useVoltraDevice(client: VoltraClient | null): VoltraDeviceState;
|
|
99
|
+
/**
|
|
100
|
+
* Combined state for simple single-device use cases.
|
|
101
|
+
*/
|
|
102
|
+
export interface UseVoltraState extends VoltraScannerState, VoltraDeviceState {
|
|
103
|
+
/** The connected client, if any */
|
|
104
|
+
client: VoltraClient | null;
|
|
105
|
+
/** Connect to a device */
|
|
106
|
+
connect: (device: DiscoveredDevice) => Promise<VoltraClient>;
|
|
107
|
+
/** Disconnect current device */
|
|
108
|
+
disconnect: () => Promise<void>;
|
|
109
|
+
/** Set weight (shorthand) */
|
|
110
|
+
setWeight: (lbs: number) => Promise<void>;
|
|
111
|
+
/** Set chains (shorthand) */
|
|
112
|
+
setChains: (lbs: number) => Promise<void>;
|
|
113
|
+
/** Set eccentric (shorthand) */
|
|
114
|
+
setEccentric: (percent: number) => Promise<void>;
|
|
115
|
+
/** Start recording (shorthand) */
|
|
116
|
+
startRecording: () => Promise<void>;
|
|
117
|
+
/** Stop recording (shorthand) */
|
|
118
|
+
stopRecording: () => Promise<void>;
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* All-in-one hook for simple single-device scenarios.
|
|
122
|
+
* Combines scanner and device state.
|
|
123
|
+
*
|
|
124
|
+
* For multi-device scenarios, use useVoltraScanner and useVoltraDevice separately.
|
|
125
|
+
*
|
|
126
|
+
* @param manager VoltraManager instance
|
|
127
|
+
* @returns Combined state and controls
|
|
128
|
+
*/
|
|
129
|
+
export declare function useVoltra(manager: VoltraManager | null): UseVoltraState;
|
|
130
|
+
//# sourceMappingURL=hooks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../../src/react/hooks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AAGH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACzE,OAAO,KAAK,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC1F,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAMhD;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,0CAA0C;IAC1C,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAC5B,oCAAoC;IACpC,UAAU,EAAE,OAAO,CAAC;IACpB,uCAAuC;IACvC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,iCAAiC;IACjC,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC;IAC7D,+BAA+B;IAC/B,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,GAAG,kBAAkB,CAsDlF;AAMD;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,+BAA+B;IAC/B,eAAe,EAAE,qBAAqB,CAAC;IACvC,wBAAwB;IACxB,WAAW,EAAE,OAAO,CAAC;IACrB,8BAA8B;IAC9B,cAAc,EAAE,oBAAoB,CAAC;IACrC,kCAAkC;IAClC,WAAW,EAAE,OAAO,CAAC;IACrB,8BAA8B;IAC9B,QAAQ,EAAE,oBAAoB,CAAC;IAC/B,kCAAkC;IAClC,YAAY,EAAE,cAAc,GAAG,IAAI,CAAC;IACpC,yBAAyB;IACzB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;CACrB;AAkBD;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,GAAG,iBAAiB,CAiE9E;AAMD;;GAEG;AACH,MAAM,WAAW,cAAe,SAAQ,kBAAkB,EAAE,iBAAiB;IAC3E,mCAAmC;IACnC,MAAM,EAAE,YAAY,GAAG,IAAI,CAAC;IAC5B,0BAA0B;IAC1B,OAAO,EAAE,CAAC,MAAM,EAAE,gBAAgB,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC;IAC7D,gCAAgC;IAChC,UAAU,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAChC,6BAA6B;IAC7B,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1C,6BAA6B;IAC7B,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1C,gCAAgC;IAChC,YAAY,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACjD,kCAAkC;IAClC,cAAc,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACpC,iCAAiC;IACjC,aAAa,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CACpC;AAED;;;;;;;;GAQG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,GAAG,cAAc,CA2FvE"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* React Hooks for Voltra SDK
|
|
3
|
+
*
|
|
4
|
+
* Import from '@voltras/node-sdk/react'
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* ```tsx
|
|
8
|
+
* import { useVoltraScanner, useVoltraDevice, useVoltra } from '@voltras/node-sdk/react';
|
|
9
|
+
* ```
|
|
10
|
+
*/
|
|
11
|
+
export { useVoltraScanner, useVoltraDevice, useVoltra, type VoltraScannerState, type VoltraDeviceState, type UseVoltraState, } from './hooks';
|
|
12
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/react/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,SAAS,EACT,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,cAAc,GACpB,MAAM,SAAS,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SDK - High-level API
|
|
3
|
+
*
|
|
4
|
+
* VoltraManager is the main entry point. It handles device discovery and returns
|
|
5
|
+
* VoltraClient instances for controlling individual devices.
|
|
6
|
+
*/
|
|
7
|
+
export { VoltraClient } from './voltra-client';
|
|
8
|
+
export { VoltraManager } from './voltra-manager';
|
|
9
|
+
export type { VoltraClientOptions, VoltraClientState, VoltraClientEvent, VoltraClientEventListener, FrameListener, ScanOptions, DeviceChooser, } from './types';
|
|
10
|
+
export type { Platform, VoltraManagerOptions, VoltraManagerEvent, VoltraManagerEventListener, ConnectByNameOptions, AdapterFactory, } from './voltra-manager';
|
|
11
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/sdk/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD,YAAY,EACV,mBAAmB,EACnB,iBAAiB,EACjB,iBAAiB,EACjB,yBAAyB,EACzB,aAAa,EACb,WAAW,EACX,aAAa,GACd,MAAM,SAAS,CAAC;AAEjB,YAAY,EACV,QAAQ,EACR,oBAAoB,EACpB,kBAAkB,EAClB,0BAA0B,EAC1B,oBAAoB,EACpB,cAAc,GACf,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SDK Types
|
|
3
|
+
*
|
|
4
|
+
* Types for the high-level VoltraClient API.
|
|
5
|
+
*/
|
|
6
|
+
import type { BLEAdapter } from '../bluetooth/adapters/types';
|
|
7
|
+
import type { DiscoveredDevice } from '../bluetooth/models/device';
|
|
8
|
+
import type { TelemetryFrame } from '../voltra/models/telemetry';
|
|
9
|
+
import type { VoltraConnectionState } from '../voltra/models/connection';
|
|
10
|
+
import type { VoltraDeviceSettings, VoltraRecordingState } from '../voltra/models/device';
|
|
11
|
+
/**
|
|
12
|
+
* Options for creating a VoltraClient.
|
|
13
|
+
*/
|
|
14
|
+
export interface VoltraClientOptions {
|
|
15
|
+
/**
|
|
16
|
+
* Pre-configured BLE adapter to use.
|
|
17
|
+
* If not provided, you must call setAdapter() before connecting.
|
|
18
|
+
*/
|
|
19
|
+
adapter?: BLEAdapter;
|
|
20
|
+
/**
|
|
21
|
+
* Enable auto-reconnect on connection loss.
|
|
22
|
+
* Default: false
|
|
23
|
+
*/
|
|
24
|
+
autoReconnect?: boolean;
|
|
25
|
+
/**
|
|
26
|
+
* Maximum number of reconnect attempts.
|
|
27
|
+
* Default: 3
|
|
28
|
+
*/
|
|
29
|
+
maxReconnectAttempts?: number;
|
|
30
|
+
/**
|
|
31
|
+
* Delay between reconnect attempts in milliseconds.
|
|
32
|
+
* Default: 1000
|
|
33
|
+
*/
|
|
34
|
+
reconnectDelayMs?: number;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Options for scanning for devices.
|
|
38
|
+
*/
|
|
39
|
+
export interface ScanOptions {
|
|
40
|
+
/**
|
|
41
|
+
* Scan timeout in milliseconds.
|
|
42
|
+
* Default: 10000 (10 seconds)
|
|
43
|
+
*/
|
|
44
|
+
timeout?: number;
|
|
45
|
+
/**
|
|
46
|
+
* Only return Voltra devices (filter by name prefix).
|
|
47
|
+
* Default: true
|
|
48
|
+
*/
|
|
49
|
+
filterVoltra?: boolean;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Client event types.
|
|
53
|
+
*/
|
|
54
|
+
export type VoltraClientEvent = {
|
|
55
|
+
type: 'connectionStateChanged';
|
|
56
|
+
state: VoltraConnectionState;
|
|
57
|
+
} | {
|
|
58
|
+
type: 'connected';
|
|
59
|
+
deviceId: string;
|
|
60
|
+
deviceName: string | null;
|
|
61
|
+
} | {
|
|
62
|
+
type: 'disconnected';
|
|
63
|
+
deviceId: string;
|
|
64
|
+
} | {
|
|
65
|
+
type: 'reconnecting';
|
|
66
|
+
attempt: number;
|
|
67
|
+
maxAttempts: number;
|
|
68
|
+
} | {
|
|
69
|
+
type: 'recordingStateChanged';
|
|
70
|
+
state: VoltraRecordingState;
|
|
71
|
+
} | {
|
|
72
|
+
type: 'frame';
|
|
73
|
+
frame: TelemetryFrame;
|
|
74
|
+
} | {
|
|
75
|
+
type: 'error';
|
|
76
|
+
error: Error;
|
|
77
|
+
};
|
|
78
|
+
/**
|
|
79
|
+
* Client event listener.
|
|
80
|
+
*/
|
|
81
|
+
export type VoltraClientEventListener = (event: VoltraClientEvent) => void;
|
|
82
|
+
/**
|
|
83
|
+
* Frame listener (shorthand for subscribing to telemetry frames).
|
|
84
|
+
*/
|
|
85
|
+
export type FrameListener = (frame: TelemetryFrame) => void;
|
|
86
|
+
/**
|
|
87
|
+
* State snapshot of the client.
|
|
88
|
+
*/
|
|
89
|
+
export interface VoltraClientState {
|
|
90
|
+
connectionState: VoltraConnectionState;
|
|
91
|
+
isConnected: boolean;
|
|
92
|
+
isReconnecting: boolean;
|
|
93
|
+
connectedDeviceId: string | null;
|
|
94
|
+
connectedDeviceName: string | null;
|
|
95
|
+
settings: VoltraDeviceSettings;
|
|
96
|
+
recordingState: VoltraRecordingState;
|
|
97
|
+
isRecording: boolean;
|
|
98
|
+
error: Error | null;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Device chooser function for programmatic device selection (Node.js).
|
|
102
|
+
*/
|
|
103
|
+
export type DeviceChooser = (devices: DiscoveredDevice[]) => DiscoveredDevice | null;
|
|
104
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/sdk/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACzE,OAAO,KAAK,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAE1F;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC;;;OAGG;IACH,OAAO,CAAC,EAAE,UAAU,CAAC;IAErB;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB;;;OAGG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAE9B;;;OAGG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;;OAGG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,MAAM,iBAAiB,GACzB;IAAE,IAAI,EAAE,wBAAwB,CAAC;IAAC,KAAK,EAAE,qBAAqB,CAAA;CAAE,GAChE;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAClE;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAC1C;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GAC9D;IAAE,IAAI,EAAE,uBAAuB,CAAC;IAAC,KAAK,EAAE,oBAAoB,CAAA;CAAE,GAC9D;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,cAAc,CAAA;CAAE,GACxC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,KAAK,CAAA;CAAE,CAAC;AAEpC;;GAEG;AACH,MAAM,MAAM,yBAAyB,GAAG,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAC;AAE3E;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,CAAC;AAE5D;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,eAAe,EAAE,qBAAqB,CAAC;IACvC,WAAW,EAAE,OAAO,CAAC;IACrB,cAAc,EAAE,OAAO,CAAC;IACxB,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,QAAQ,EAAE,oBAAoB,CAAC;IAC/B,cAAc,EAAE,oBAAoB,CAAC;IACrC,WAAW,EAAE,OAAO,CAAC;IACrB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,EAAE,gBAAgB,EAAE,KAAK,gBAAgB,GAAG,IAAI,CAAC"}
|
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* VoltraClient
|
|
3
|
+
*
|
|
4
|
+
* High-level API for connecting to and controlling a single Voltra device.
|
|
5
|
+
* Handles connection lifecycle, authentication, device settings, and telemetry.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* import { VoltraClient, WebBLEAdapter, BLE } from '@voltras/node-sdk';
|
|
10
|
+
*
|
|
11
|
+
* const adapter = new WebBLEAdapter({ ble: BLE });
|
|
12
|
+
* const client = new VoltraClient({ adapter });
|
|
13
|
+
*
|
|
14
|
+
* // Connect to device
|
|
15
|
+
* const devices = await client.scan();
|
|
16
|
+
* await client.connect(devices[0]);
|
|
17
|
+
*
|
|
18
|
+
* // Configure settings
|
|
19
|
+
* await client.setWeight(50);
|
|
20
|
+
*
|
|
21
|
+
* // Listen for telemetry
|
|
22
|
+
* client.onFrame((frame) => {
|
|
23
|
+
* console.log('Position:', frame.position, 'Velocity:', frame.velocity);
|
|
24
|
+
* });
|
|
25
|
+
*
|
|
26
|
+
* // Start recording
|
|
27
|
+
* await client.startRecording();
|
|
28
|
+
* // ... workout ...
|
|
29
|
+
* await client.stopRecording();
|
|
30
|
+
*
|
|
31
|
+
* // Cleanup
|
|
32
|
+
* client.dispose();
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
import type { BLEAdapter } from '../bluetooth/adapters/types';
|
|
36
|
+
import type { DiscoveredDevice } from '../bluetooth/models/device';
|
|
37
|
+
import type { VoltraConnectionState } from '../voltra/models/connection';
|
|
38
|
+
import type { VoltraDeviceSettings, VoltraRecordingState } from '../voltra/models/device';
|
|
39
|
+
import type { VoltraClientOptions, VoltraClientState, VoltraClientEventListener, FrameListener, ScanOptions } from './types';
|
|
40
|
+
/**
|
|
41
|
+
* High-level client for connecting to and controlling a Voltra device.
|
|
42
|
+
*/
|
|
43
|
+
export declare class VoltraClient {
|
|
44
|
+
private readonly options;
|
|
45
|
+
private adapter;
|
|
46
|
+
private _connectionState;
|
|
47
|
+
private _connectedDeviceId;
|
|
48
|
+
private _connectedDeviceName;
|
|
49
|
+
private _settings;
|
|
50
|
+
private _recordingState;
|
|
51
|
+
private _isReconnecting;
|
|
52
|
+
private _reconnectAttempt;
|
|
53
|
+
private _error;
|
|
54
|
+
private _lastConnectedDevice;
|
|
55
|
+
private notificationUnsubscribe;
|
|
56
|
+
private listeners;
|
|
57
|
+
private frameListeners;
|
|
58
|
+
private disposed;
|
|
59
|
+
constructor(options?: VoltraClientOptions);
|
|
60
|
+
/**
|
|
61
|
+
* Get current connection state.
|
|
62
|
+
*/
|
|
63
|
+
get connectionState(): VoltraConnectionState;
|
|
64
|
+
/**
|
|
65
|
+
* Check if connected to a device.
|
|
66
|
+
*/
|
|
67
|
+
get isConnected(): boolean;
|
|
68
|
+
/**
|
|
69
|
+
* Check if currently reconnecting.
|
|
70
|
+
*/
|
|
71
|
+
get isReconnecting(): boolean;
|
|
72
|
+
/**
|
|
73
|
+
* Get connected device ID.
|
|
74
|
+
*/
|
|
75
|
+
get connectedDeviceId(): string | null;
|
|
76
|
+
/**
|
|
77
|
+
* Get connected device name.
|
|
78
|
+
*/
|
|
79
|
+
get connectedDeviceName(): string | null;
|
|
80
|
+
/**
|
|
81
|
+
* Get current device settings.
|
|
82
|
+
*/
|
|
83
|
+
get settings(): VoltraDeviceSettings;
|
|
84
|
+
/**
|
|
85
|
+
* Get current recording state.
|
|
86
|
+
*/
|
|
87
|
+
get recordingState(): VoltraRecordingState;
|
|
88
|
+
/**
|
|
89
|
+
* Check if currently recording.
|
|
90
|
+
*/
|
|
91
|
+
get isRecording(): boolean;
|
|
92
|
+
/**
|
|
93
|
+
* Get last error.
|
|
94
|
+
*/
|
|
95
|
+
get error(): Error | null;
|
|
96
|
+
/**
|
|
97
|
+
* Get full state snapshot.
|
|
98
|
+
*/
|
|
99
|
+
get state(): VoltraClientState;
|
|
100
|
+
/**
|
|
101
|
+
* Set the BLE adapter to use.
|
|
102
|
+
* Must be called before connect() if not provided in constructor.
|
|
103
|
+
*/
|
|
104
|
+
setAdapter(adapter: BLEAdapter): void;
|
|
105
|
+
/**
|
|
106
|
+
* Get the current adapter.
|
|
107
|
+
*/
|
|
108
|
+
getAdapter(): BLEAdapter | null;
|
|
109
|
+
/**
|
|
110
|
+
* Scan for Voltra devices.
|
|
111
|
+
*
|
|
112
|
+
* Note: In browser environments, this triggers the Web Bluetooth device picker.
|
|
113
|
+
* The returned array will contain only the user-selected device.
|
|
114
|
+
*
|
|
115
|
+
* @param options Scan options
|
|
116
|
+
* @returns Array of discovered Voltra devices
|
|
117
|
+
*/
|
|
118
|
+
scan(options?: ScanOptions): Promise<DiscoveredDevice[]>;
|
|
119
|
+
/**
|
|
120
|
+
* Connect to a Voltra device.
|
|
121
|
+
* Handles BLE connection, authentication, and initialization.
|
|
122
|
+
*
|
|
123
|
+
* @param device Device to connect to
|
|
124
|
+
*/
|
|
125
|
+
connect(device: DiscoveredDevice): Promise<void>;
|
|
126
|
+
/**
|
|
127
|
+
* Disconnect from the current device.
|
|
128
|
+
*/
|
|
129
|
+
disconnect(): Promise<void>;
|
|
130
|
+
/**
|
|
131
|
+
* Set weight in pounds.
|
|
132
|
+
*
|
|
133
|
+
* @param lbs Weight (5-200 in increments of 5)
|
|
134
|
+
*/
|
|
135
|
+
setWeight(lbs: number): Promise<void>;
|
|
136
|
+
/**
|
|
137
|
+
* Set chains (reverse resistance) in pounds.
|
|
138
|
+
*
|
|
139
|
+
* @param lbs Chains weight (0-100)
|
|
140
|
+
*/
|
|
141
|
+
setChains(lbs: number): Promise<void>;
|
|
142
|
+
/**
|
|
143
|
+
* Set eccentric load adjustment.
|
|
144
|
+
*
|
|
145
|
+
* @param percent Eccentric adjustment (-195 to +195)
|
|
146
|
+
*/
|
|
147
|
+
setEccentric(percent: number): Promise<void>;
|
|
148
|
+
/**
|
|
149
|
+
* Get available weight values.
|
|
150
|
+
*/
|
|
151
|
+
getAvailableWeights(): number[];
|
|
152
|
+
/**
|
|
153
|
+
* Get available chains values.
|
|
154
|
+
*/
|
|
155
|
+
getAvailableChains(): number[];
|
|
156
|
+
/**
|
|
157
|
+
* Get available eccentric values.
|
|
158
|
+
*/
|
|
159
|
+
getAvailableEccentric(): number[];
|
|
160
|
+
/**
|
|
161
|
+
* Prepare for recording (sends PREPARE + SETUP commands).
|
|
162
|
+
* Call this before starting a set to minimize latency.
|
|
163
|
+
*/
|
|
164
|
+
prepareRecording(): Promise<void>;
|
|
165
|
+
/**
|
|
166
|
+
* Start recording (engage motor).
|
|
167
|
+
* If not prepared, will prepare first.
|
|
168
|
+
*/
|
|
169
|
+
startRecording(): Promise<void>;
|
|
170
|
+
/**
|
|
171
|
+
* Stop recording (disengage motor and exit workout mode).
|
|
172
|
+
*/
|
|
173
|
+
stopRecording(): Promise<void>;
|
|
174
|
+
/**
|
|
175
|
+
* End the current set but stay in workout mode.
|
|
176
|
+
* Use this between sets when there are more sets to do.
|
|
177
|
+
*/
|
|
178
|
+
endSet(): Promise<void>;
|
|
179
|
+
/**
|
|
180
|
+
* Subscribe to client events.
|
|
181
|
+
*
|
|
182
|
+
* @param listener Event listener
|
|
183
|
+
* @returns Unsubscribe function
|
|
184
|
+
*/
|
|
185
|
+
subscribe(listener: VoltraClientEventListener): () => void;
|
|
186
|
+
/**
|
|
187
|
+
* Subscribe to telemetry frames.
|
|
188
|
+
* Shorthand for subscribing to 'frame' events.
|
|
189
|
+
*
|
|
190
|
+
* @param listener Frame listener
|
|
191
|
+
* @returns Unsubscribe function
|
|
192
|
+
*/
|
|
193
|
+
onFrame(listener: FrameListener): () => void;
|
|
194
|
+
/**
|
|
195
|
+
* Subscribe to connection state changes.
|
|
196
|
+
*
|
|
197
|
+
* @param listener State listener
|
|
198
|
+
* @returns Unsubscribe function
|
|
199
|
+
*/
|
|
200
|
+
onConnectionStateChange(listener: (state: VoltraConnectionState) => void): () => void;
|
|
201
|
+
/**
|
|
202
|
+
* Dispose of the client and release all resources.
|
|
203
|
+
* After calling dispose(), the client cannot be used.
|
|
204
|
+
*/
|
|
205
|
+
dispose(): void;
|
|
206
|
+
private authenticate;
|
|
207
|
+
private initialize;
|
|
208
|
+
private setupNotificationHandler;
|
|
209
|
+
private setupDisconnectHandler;
|
|
210
|
+
private handleUnexpectedDisconnect;
|
|
211
|
+
private cleanup;
|
|
212
|
+
private setConnectionState;
|
|
213
|
+
private setRecordingState;
|
|
214
|
+
private emit;
|
|
215
|
+
private ensureNotDisposed;
|
|
216
|
+
private ensureAdapter;
|
|
217
|
+
private ensureConnected;
|
|
218
|
+
private wrapError;
|
|
219
|
+
private getErrorMessage;
|
|
220
|
+
}
|
|
221
|
+
//# sourceMappingURL=voltra-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"voltra-client.d.ts","sourceRoot":"","sources":["../../../src/sdk/voltra-client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAwB,MAAM,6BAA6B,CAAC;AACpF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACzE,OAAO,KAAK,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAgB1F,OAAO,KAAK,EACV,mBAAmB,EACnB,iBAAiB,EAEjB,yBAAyB,EACzB,aAAa,EACb,WAAW,EACZ,MAAM,SAAS,CAAC;AAoBjB;;GAEG;AACH,qBAAa,YAAY;IAEvB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiD;IAGzE,OAAO,CAAC,OAAO,CAAoB;IAGnC,OAAO,CAAC,gBAAgB,CAAyC;IACjE,OAAO,CAAC,kBAAkB,CAAuB;IACjD,OAAO,CAAC,oBAAoB,CAAuB;IACnD,OAAO,CAAC,SAAS,CAAiD;IAClE,OAAO,CAAC,eAAe,CAAgC;IACvD,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,iBAAiB,CAAK;IAC9B,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,oBAAoB,CAAiC;IAG7D,OAAO,CAAC,uBAAuB,CAA6B;IAG5D,OAAO,CAAC,SAAS,CAA6C;IAC9D,OAAO,CAAC,cAAc,CAAiC;IAGvD,OAAO,CAAC,QAAQ,CAAS;gBAEb,OAAO,GAAE,mBAAwB;IAS7C;;OAEG;IACH,IAAI,eAAe,IAAI,qBAAqB,CAE3C;IAED;;OAEG;IACH,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED;;OAEG;IACH,IAAI,cAAc,IAAI,OAAO,CAE5B;IAED;;OAEG;IACH,IAAI,iBAAiB,IAAI,MAAM,GAAG,IAAI,CAErC;IAED;;OAEG;IACH,IAAI,mBAAmB,IAAI,MAAM,GAAG,IAAI,CAEvC;IAED;;OAEG;IACH,IAAI,QAAQ,IAAI,oBAAoB,CAEnC;IAED;;OAEG;IACH,IAAI,cAAc,IAAI,oBAAoB,CAEzC;IAED;;OAEG;IACH,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED;;OAEG;IACH,IAAI,KAAK,IAAI,KAAK,GAAG,IAAI,CAExB;IAED;;OAEG;IACH,IAAI,KAAK,IAAI,iBAAiB,CAY7B;IAMD;;;OAGG;IACH,UAAU,CAAC,OAAO,EAAE,UAAU,GAAG,IAAI;IAQrC;;OAEG;IACH,UAAU,IAAI,UAAU,GAAG,IAAI;IAQ/B;;;;;;;;OAQG;IACG,IAAI,CAAC,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAclE;;;;;OAKG;IACG,OAAO,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IA+CtD;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IA2BjC;;;;OAIG;IACG,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAgB3C;;;;OAIG;IACG,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkB3C;;;;OAIG;IACG,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBlD;;OAEG;IACH,mBAAmB,IAAI,MAAM,EAAE;IAI/B;;OAEG;IACH,kBAAkB,IAAI,MAAM,EAAE;IAI9B;;OAEG;IACH,qBAAqB,IAAI,MAAM,EAAE;IAQjC;;;OAGG;IACG,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IAkBvC;;;OAGG;IACG,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IAgBrC;;OAEG;IACG,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAkBpC;;;OAGG;IACG,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAiB7B;;;;;OAKG;IACH,SAAS,CAAC,QAAQ,EAAE,yBAAyB,GAAG,MAAM,IAAI;IAK1D;;;;;;OAMG;IACH,OAAO,CAAC,QAAQ,EAAE,aAAa,GAAG,MAAM,IAAI;IAK5C;;;;;OAKG;IACH,uBAAuB,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,qBAAqB,KAAK,IAAI,GAAG,MAAM,IAAI;IAcrF;;;OAGG;IACH,OAAO,IAAI,IAAI;YAwBD,YAAY;YASZ,UAAU;IAWxB,OAAO,CAAC,wBAAwB;IAgBhC,OAAO,CAAC,sBAAsB;YAoBhB,0BAA0B;IAoCxC,OAAO,CAAC,OAAO;IASf,OAAO,CAAC,kBAAkB;IAQ1B,OAAO,CAAC,iBAAiB;IAKzB,OAAO,CAAC,IAAI;IAUZ,OAAO,CAAC,iBAAiB;IAMzB,OAAO,CAAC,aAAa;IAMrB,OAAO,CAAC,eAAe;IAOvB,OAAO,CAAC,SAAS;IAajB,OAAO,CAAC,eAAe;CAGxB"}
|