@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,419 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* VoltraManager
|
|
4
|
+
*
|
|
5
|
+
* Main entry point for the Voltra SDK. Handles device discovery and connection.
|
|
6
|
+
* Returns VoltraClient instances for controlling individual devices.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```typescript
|
|
10
|
+
* import { VoltraManager } from '@voltras/node-sdk';
|
|
11
|
+
*
|
|
12
|
+
* const manager = new VoltraManager();
|
|
13
|
+
*
|
|
14
|
+
* // Scan for devices
|
|
15
|
+
* const devices = await manager.scan();
|
|
16
|
+
*
|
|
17
|
+
* // Connect to a device (returns a VoltraClient)
|
|
18
|
+
* const client = await manager.connect(devices[0]);
|
|
19
|
+
*
|
|
20
|
+
* // Or connect by name (scans + connects in one step)
|
|
21
|
+
* const client = await manager.connectByName('VTR-123456');
|
|
22
|
+
*
|
|
23
|
+
* // Use the client
|
|
24
|
+
* await client.setWeight(50);
|
|
25
|
+
* client.onFrame((frame) => console.log(frame.position));
|
|
26
|
+
*
|
|
27
|
+
* // Cleanup
|
|
28
|
+
* manager.dispose();
|
|
29
|
+
* ```
|
|
30
|
+
*/
|
|
31
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
32
|
+
exports.VoltraManager = void 0;
|
|
33
|
+
const device_filter_1 = require("../voltra/models/device-filter");
|
|
34
|
+
const constants_1 = require("../voltra/protocol/constants");
|
|
35
|
+
const voltra_client_1 = require("./voltra-client");
|
|
36
|
+
/**
|
|
37
|
+
* Main entry point for the Voltra SDK.
|
|
38
|
+
*/
|
|
39
|
+
class VoltraManager {
|
|
40
|
+
constructor(options = {}) {
|
|
41
|
+
// Connected devices
|
|
42
|
+
this.clients = new Map();
|
|
43
|
+
this.clientUnsubscribes = new Map();
|
|
44
|
+
// Discovered devices (from last scan)
|
|
45
|
+
this.discoveredDevices = [];
|
|
46
|
+
// Scanning state
|
|
47
|
+
this._isScanning = false;
|
|
48
|
+
this.scanAdapter = null;
|
|
49
|
+
// Event listeners
|
|
50
|
+
this.listeners = new Set();
|
|
51
|
+
// Disposed flag
|
|
52
|
+
this.disposed = false;
|
|
53
|
+
this.clientOptions = options.clientOptions ?? {};
|
|
54
|
+
if (options.adapterFactory) {
|
|
55
|
+
// Use provided factory
|
|
56
|
+
this.adapterFactory = options.adapterFactory;
|
|
57
|
+
this.platform = options.platform ?? 'web';
|
|
58
|
+
}
|
|
59
|
+
else if (options.platform) {
|
|
60
|
+
// Use specified platform
|
|
61
|
+
this.platform = options.platform;
|
|
62
|
+
this.adapterFactory = this.createAdapterFactory(options.platform);
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
// Auto-detect platform
|
|
66
|
+
this.platform = this.detectPlatform();
|
|
67
|
+
this.adapterFactory = this.createAdapterFactory(this.platform);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
// ===========================================================================
|
|
71
|
+
// Static Factory Methods
|
|
72
|
+
// ===========================================================================
|
|
73
|
+
/**
|
|
74
|
+
* Create a manager for web browsers.
|
|
75
|
+
*/
|
|
76
|
+
static forWeb(options) {
|
|
77
|
+
return new VoltraManager({ ...options, platform: 'web' });
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Create a manager for Node.js.
|
|
81
|
+
*/
|
|
82
|
+
static forNode(options) {
|
|
83
|
+
return new VoltraManager({ ...options, platform: 'node' });
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Create a manager for React Native.
|
|
87
|
+
* Note: Prefer importing from '@voltras/node-sdk/native' instead.
|
|
88
|
+
*/
|
|
89
|
+
static forNative(options) {
|
|
90
|
+
return new VoltraManager({ ...options, platform: 'native' });
|
|
91
|
+
}
|
|
92
|
+
// ===========================================================================
|
|
93
|
+
// Public Getters
|
|
94
|
+
// ===========================================================================
|
|
95
|
+
/**
|
|
96
|
+
* Get all connected device IDs.
|
|
97
|
+
*/
|
|
98
|
+
get connectedDeviceIds() {
|
|
99
|
+
return Array.from(this.clients.keys());
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Get number of connected devices.
|
|
103
|
+
*/
|
|
104
|
+
get connectedCount() {
|
|
105
|
+
return this.clients.size;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Check if scanning is in progress.
|
|
109
|
+
*/
|
|
110
|
+
get isScanning() {
|
|
111
|
+
return this._isScanning;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Get devices discovered in last scan.
|
|
115
|
+
*/
|
|
116
|
+
get devices() {
|
|
117
|
+
return [...this.discoveredDevices];
|
|
118
|
+
}
|
|
119
|
+
// ===========================================================================
|
|
120
|
+
// Device Access
|
|
121
|
+
// ===========================================================================
|
|
122
|
+
/**
|
|
123
|
+
* Get a connected device client by ID.
|
|
124
|
+
*/
|
|
125
|
+
getClient(deviceId) {
|
|
126
|
+
return this.clients.get(deviceId);
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Get all connected device clients.
|
|
130
|
+
*/
|
|
131
|
+
getAllClients() {
|
|
132
|
+
return Array.from(this.clients.values());
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Check if a device is connected.
|
|
136
|
+
*/
|
|
137
|
+
isConnected(deviceId) {
|
|
138
|
+
return this.clients.has(deviceId);
|
|
139
|
+
}
|
|
140
|
+
// ===========================================================================
|
|
141
|
+
// Discovery
|
|
142
|
+
// ===========================================================================
|
|
143
|
+
/**
|
|
144
|
+
* Scan for Voltra devices.
|
|
145
|
+
*
|
|
146
|
+
* @param options Scan options
|
|
147
|
+
* @returns Array of discovered Voltra devices
|
|
148
|
+
*/
|
|
149
|
+
async scan(options = {}) {
|
|
150
|
+
this.ensureNotDisposed();
|
|
151
|
+
const { timeout = 10000, filterVoltra = true } = options;
|
|
152
|
+
this._isScanning = true;
|
|
153
|
+
this.emit({ type: 'scanStarted' });
|
|
154
|
+
try {
|
|
155
|
+
// Create adapter for scanning if needed
|
|
156
|
+
if (!this.scanAdapter) {
|
|
157
|
+
this.scanAdapter = this.adapterFactory();
|
|
158
|
+
}
|
|
159
|
+
const devices = await this.scanAdapter.scan(timeout);
|
|
160
|
+
this.discoveredDevices = filterVoltra ? (0, device_filter_1.filterVoltraDevices)(devices) : devices;
|
|
161
|
+
this.emit({ type: 'scanStopped', devices: this.discoveredDevices });
|
|
162
|
+
return this.discoveredDevices;
|
|
163
|
+
}
|
|
164
|
+
finally {
|
|
165
|
+
this._isScanning = false;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
// ===========================================================================
|
|
169
|
+
// Connection
|
|
170
|
+
// ===========================================================================
|
|
171
|
+
/**
|
|
172
|
+
* Connect to a Voltra device.
|
|
173
|
+
*
|
|
174
|
+
* @param device Device to connect to
|
|
175
|
+
* @returns VoltraClient for the connected device
|
|
176
|
+
*/
|
|
177
|
+
async connect(device) {
|
|
178
|
+
this.ensureNotDisposed();
|
|
179
|
+
// Check if already connected
|
|
180
|
+
if (this.clients.has(device.id)) {
|
|
181
|
+
return this.clients.get(device.id);
|
|
182
|
+
}
|
|
183
|
+
// Create new adapter and client
|
|
184
|
+
const adapter = this.adapterFactory();
|
|
185
|
+
const client = new voltra_client_1.VoltraClient({
|
|
186
|
+
...this.clientOptions,
|
|
187
|
+
adapter,
|
|
188
|
+
});
|
|
189
|
+
try {
|
|
190
|
+
await client.connect(device);
|
|
191
|
+
// Store client
|
|
192
|
+
this.clients.set(device.id, client);
|
|
193
|
+
// Subscribe to client events
|
|
194
|
+
const unsubscribe = client.subscribe((event) => {
|
|
195
|
+
this.handleClientEvent(device.id, event);
|
|
196
|
+
});
|
|
197
|
+
this.clientUnsubscribes.set(device.id, unsubscribe);
|
|
198
|
+
// Emit connected event
|
|
199
|
+
this.emit({
|
|
200
|
+
type: 'deviceConnected',
|
|
201
|
+
deviceId: device.id,
|
|
202
|
+
deviceName: device.name ?? null,
|
|
203
|
+
client,
|
|
204
|
+
});
|
|
205
|
+
return client;
|
|
206
|
+
}
|
|
207
|
+
catch (error) {
|
|
208
|
+
client.dispose();
|
|
209
|
+
throw error;
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Scan for a device by name and connect to it.
|
|
214
|
+
* This is a convenience method that combines scan() and connect().
|
|
215
|
+
*
|
|
216
|
+
* @param namePattern Name or partial name to search for
|
|
217
|
+
* @param options Connection options
|
|
218
|
+
* @returns VoltraClient for the connected device
|
|
219
|
+
* @throws Error if no matching device is found
|
|
220
|
+
*
|
|
221
|
+
* @example
|
|
222
|
+
* ```typescript
|
|
223
|
+
* // Connect to device containing "VTR-123" in its name
|
|
224
|
+
* const client = await manager.connectByName('VTR-123');
|
|
225
|
+
*
|
|
226
|
+
* // Connect to exact name match
|
|
227
|
+
* const client = await manager.connectByName('VTR-123456', { matchMode: 'exact' });
|
|
228
|
+
* ```
|
|
229
|
+
*/
|
|
230
|
+
async connectByName(namePattern, options = {}) {
|
|
231
|
+
this.ensureNotDisposed();
|
|
232
|
+
const { matchMode = 'contains', timeout = 10000, filterVoltra = true } = options;
|
|
233
|
+
// Scan for devices
|
|
234
|
+
const devices = await this.scan({ timeout, filterVoltra });
|
|
235
|
+
// Find matching device
|
|
236
|
+
const device = devices.find((d) => {
|
|
237
|
+
if (!d.name)
|
|
238
|
+
return false;
|
|
239
|
+
switch (matchMode) {
|
|
240
|
+
case 'exact':
|
|
241
|
+
return d.name === namePattern;
|
|
242
|
+
case 'startsWith':
|
|
243
|
+
return d.name.startsWith(namePattern);
|
|
244
|
+
case 'contains':
|
|
245
|
+
default:
|
|
246
|
+
return d.name.includes(namePattern);
|
|
247
|
+
}
|
|
248
|
+
});
|
|
249
|
+
if (!device) {
|
|
250
|
+
throw new Error(`No Voltra device found matching "${namePattern}". ` +
|
|
251
|
+
`Found ${devices.length} device(s): ${devices.map((d) => d.name ?? d.id).join(', ') || 'none'}`);
|
|
252
|
+
}
|
|
253
|
+
return this.connect(device);
|
|
254
|
+
}
|
|
255
|
+
/**
|
|
256
|
+
* Connect to the first available Voltra device.
|
|
257
|
+
* Convenience method for single-device scenarios.
|
|
258
|
+
*
|
|
259
|
+
* @param options Scan options
|
|
260
|
+
* @returns VoltraClient for the connected device
|
|
261
|
+
* @throws Error if no devices are found
|
|
262
|
+
*/
|
|
263
|
+
async connectFirst(options = {}) {
|
|
264
|
+
const devices = await this.scan(options);
|
|
265
|
+
if (devices.length === 0) {
|
|
266
|
+
throw new Error('No Voltra devices found. Make sure your device is powered on.');
|
|
267
|
+
}
|
|
268
|
+
return this.connect(devices[0]);
|
|
269
|
+
}
|
|
270
|
+
/**
|
|
271
|
+
* Disconnect a specific device.
|
|
272
|
+
*/
|
|
273
|
+
async disconnect(deviceId) {
|
|
274
|
+
const client = this.clients.get(deviceId);
|
|
275
|
+
if (!client)
|
|
276
|
+
return;
|
|
277
|
+
const unsubscribe = this.clientUnsubscribes.get(deviceId);
|
|
278
|
+
unsubscribe?.();
|
|
279
|
+
this.clientUnsubscribes.delete(deviceId);
|
|
280
|
+
await client.disconnect();
|
|
281
|
+
client.dispose();
|
|
282
|
+
this.clients.delete(deviceId);
|
|
283
|
+
this.emit({ type: 'deviceDisconnected', deviceId });
|
|
284
|
+
}
|
|
285
|
+
/**
|
|
286
|
+
* Disconnect all devices.
|
|
287
|
+
*/
|
|
288
|
+
async disconnectAll() {
|
|
289
|
+
const deviceIds = Array.from(this.clients.keys());
|
|
290
|
+
await Promise.all(deviceIds.map((id) => this.disconnect(id)));
|
|
291
|
+
}
|
|
292
|
+
// ===========================================================================
|
|
293
|
+
// Event Subscriptions
|
|
294
|
+
// ===========================================================================
|
|
295
|
+
/**
|
|
296
|
+
* Subscribe to manager events.
|
|
297
|
+
*/
|
|
298
|
+
subscribe(listener) {
|
|
299
|
+
this.listeners.add(listener);
|
|
300
|
+
return () => this.listeners.delete(listener);
|
|
301
|
+
}
|
|
302
|
+
/**
|
|
303
|
+
* Subscribe to device connected events.
|
|
304
|
+
*/
|
|
305
|
+
onDeviceConnected(callback) {
|
|
306
|
+
const listener = (event) => {
|
|
307
|
+
if (event.type === 'deviceConnected') {
|
|
308
|
+
callback(event.client, event.deviceId, event.deviceName);
|
|
309
|
+
}
|
|
310
|
+
};
|
|
311
|
+
this.listeners.add(listener);
|
|
312
|
+
return () => this.listeners.delete(listener);
|
|
313
|
+
}
|
|
314
|
+
/**
|
|
315
|
+
* Subscribe to device disconnected events.
|
|
316
|
+
*/
|
|
317
|
+
onDeviceDisconnected(callback) {
|
|
318
|
+
const listener = (event) => {
|
|
319
|
+
if (event.type === 'deviceDisconnected') {
|
|
320
|
+
callback(event.deviceId);
|
|
321
|
+
}
|
|
322
|
+
};
|
|
323
|
+
this.listeners.add(listener);
|
|
324
|
+
return () => this.listeners.delete(listener);
|
|
325
|
+
}
|
|
326
|
+
// ===========================================================================
|
|
327
|
+
// Lifecycle
|
|
328
|
+
// ===========================================================================
|
|
329
|
+
/**
|
|
330
|
+
* Dispose of the manager and all connected devices.
|
|
331
|
+
*/
|
|
332
|
+
dispose() {
|
|
333
|
+
if (this.disposed)
|
|
334
|
+
return;
|
|
335
|
+
this.disposed = true;
|
|
336
|
+
this.disconnectAll().catch(() => { });
|
|
337
|
+
this.listeners.clear();
|
|
338
|
+
this.clientUnsubscribes.clear();
|
|
339
|
+
this.scanAdapter = null;
|
|
340
|
+
}
|
|
341
|
+
// ===========================================================================
|
|
342
|
+
// Private Methods
|
|
343
|
+
// ===========================================================================
|
|
344
|
+
detectPlatform() {
|
|
345
|
+
// Check for browser environment
|
|
346
|
+
if (typeof window !== 'undefined' &&
|
|
347
|
+
typeof navigator !== 'undefined' &&
|
|
348
|
+
'bluetooth' in navigator) {
|
|
349
|
+
return 'web';
|
|
350
|
+
}
|
|
351
|
+
// Check for Node.js environment
|
|
352
|
+
if (typeof process !== 'undefined' && process.versions?.node) {
|
|
353
|
+
return 'node';
|
|
354
|
+
}
|
|
355
|
+
// Default to native (React Native)
|
|
356
|
+
// Note: This fallback may not work well - users should specify platform
|
|
357
|
+
return 'native';
|
|
358
|
+
}
|
|
359
|
+
createAdapterFactory(platform) {
|
|
360
|
+
switch (platform) {
|
|
361
|
+
case 'web':
|
|
362
|
+
return () => {
|
|
363
|
+
// Dynamic import to avoid bundling issues
|
|
364
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
365
|
+
const { WebBLEAdapter } = require('../bluetooth/adapters/web');
|
|
366
|
+
return new WebBLEAdapter({ ble: constants_1.BLE });
|
|
367
|
+
};
|
|
368
|
+
case 'node':
|
|
369
|
+
return () => {
|
|
370
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
371
|
+
const { NodeBLEAdapter } = require('../bluetooth/adapters/node');
|
|
372
|
+
return new NodeBLEAdapter({ ble: constants_1.BLE });
|
|
373
|
+
};
|
|
374
|
+
case 'native':
|
|
375
|
+
return () => {
|
|
376
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
377
|
+
const { NativeBLEAdapter } = require('../bluetooth/adapters/native');
|
|
378
|
+
return new NativeBLEAdapter({ ble: constants_1.BLE });
|
|
379
|
+
};
|
|
380
|
+
default:
|
|
381
|
+
throw new Error(`Unknown platform: ${platform}`);
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
handleClientEvent(deviceId, event) {
|
|
385
|
+
switch (event.type) {
|
|
386
|
+
case 'disconnected':
|
|
387
|
+
if (this.clients.has(deviceId)) {
|
|
388
|
+
const unsubscribe = this.clientUnsubscribes.get(deviceId);
|
|
389
|
+
unsubscribe?.();
|
|
390
|
+
this.clientUnsubscribes.delete(deviceId);
|
|
391
|
+
const client = this.clients.get(deviceId);
|
|
392
|
+
client?.dispose();
|
|
393
|
+
this.clients.delete(deviceId);
|
|
394
|
+
this.emit({ type: 'deviceDisconnected', deviceId });
|
|
395
|
+
}
|
|
396
|
+
break;
|
|
397
|
+
case 'error':
|
|
398
|
+
this.emit({ type: 'deviceError', deviceId, error: event.error });
|
|
399
|
+
break;
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
emit(event) {
|
|
403
|
+
this.listeners.forEach((listener) => {
|
|
404
|
+
try {
|
|
405
|
+
listener(event);
|
|
406
|
+
}
|
|
407
|
+
catch (e) {
|
|
408
|
+
console.error('[VoltraManager] Event listener error:', e);
|
|
409
|
+
}
|
|
410
|
+
});
|
|
411
|
+
}
|
|
412
|
+
ensureNotDisposed() {
|
|
413
|
+
if (this.disposed) {
|
|
414
|
+
throw new Error('Manager has been disposed');
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
exports.VoltraManager = VoltraManager;
|
|
419
|
+
//# sourceMappingURL=voltra-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"voltra-manager.js","sourceRoot":"","sources":["../../../src/sdk/voltra-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.bytesEqual = exports.bytesToHex = exports.hexToBytes = exports.delay = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Shared Utilities
|
|
6
|
+
*/
|
|
7
|
+
var utils_1 = require("./utils");
|
|
8
|
+
Object.defineProperty(exports, "delay", { enumerable: true, get: function () { return utils_1.delay; } });
|
|
9
|
+
Object.defineProperty(exports, "hexToBytes", { enumerable: true, get: function () { return utils_1.hexToBytes; } });
|
|
10
|
+
Object.defineProperty(exports, "bytesToHex", { enumerable: true, get: function () { return utils_1.bytesToHex; } });
|
|
11
|
+
Object.defineProperty(exports, "bytesEqual", { enumerable: true, get: function () { return utils_1.bytesEqual; } });
|
|
12
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/shared/index.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACH,iCAAoE;AAA3D,8FAAA,KAAK,OAAA;AAAE,mGAAA,UAAU,OAAA;AAAE,mGAAA,UAAU,OAAA;AAAE,mGAAA,UAAU,OAAA"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Shared Utilities
|
|
4
|
+
*
|
|
5
|
+
* Common utilities used across SDK modules.
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.delay = delay;
|
|
9
|
+
exports.hexToBytes = hexToBytes;
|
|
10
|
+
exports.bytesToHex = bytesToHex;
|
|
11
|
+
exports.bytesEqual = bytesEqual;
|
|
12
|
+
/**
|
|
13
|
+
* Delay execution for a specified duration.
|
|
14
|
+
* @param ms Duration in milliseconds
|
|
15
|
+
*/
|
|
16
|
+
function delay(ms) {
|
|
17
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Convert hex string to Uint8Array.
|
|
21
|
+
* @param hex Hex string (e.g., "48656c6c6f")
|
|
22
|
+
*/
|
|
23
|
+
function hexToBytes(hex) {
|
|
24
|
+
const bytes = new Uint8Array(hex.length / 2);
|
|
25
|
+
for (let i = 0; i < bytes.length; i++) {
|
|
26
|
+
bytes[i] = parseInt(hex.substr(i * 2, 2), 16);
|
|
27
|
+
}
|
|
28
|
+
return bytes;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Convert Uint8Array to hex string.
|
|
32
|
+
* @param bytes Byte array
|
|
33
|
+
*/
|
|
34
|
+
function bytesToHex(bytes) {
|
|
35
|
+
return Array.from(bytes)
|
|
36
|
+
.map((b) => b.toString(16).padStart(2, '0'))
|
|
37
|
+
.join('');
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Check if two byte arrays are equal.
|
|
41
|
+
*/
|
|
42
|
+
function bytesEqual(a, b) {
|
|
43
|
+
if (a.length !== b.length)
|
|
44
|
+
return false;
|
|
45
|
+
for (let i = 0; i < a.length; i++) {
|
|
46
|
+
if (a[i] !== b[i])
|
|
47
|
+
return false;
|
|
48
|
+
}
|
|
49
|
+
return true;
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/shared/utils.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;AAMH,sBAEC;AAMD,gCAMC;AAMD,gCAIC;AAKD,gCAMC;AAvCD;;;GAGG;AACH,SAAgB,KAAK,CAAC,EAAU;IAC9B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED;;;GAGG;AACH,SAAgB,UAAU,CAAC,GAAW;IACpC,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC7C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,KAAK,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAChD,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;GAGG;AACH,SAAgB,UAAU,CAAC,KAAiB;IAC1C,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;SACrB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;SAC3C,IAAI,CAAC,EAAE,CAAC,CAAC;AACd,CAAC;AAED;;GAEG;AACH,SAAgB,UAAU,CAAC,CAAa,EAAE,CAAa;IACrD,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IACxC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAAE,OAAO,KAAK,CAAC;IAClC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Voltra Domain
|
|
4
|
+
*
|
|
5
|
+
* Voltra device management, telemetry processing, and workout control.
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.identifyMessageType = exports.encodeTelemetryFrame = exports.decodeTelemetryFrame = exports.decodeNotification = exports.PhaseNames = exports.MovementPhase = exports.BLE = exports.Workout = exports.Init = exports.Auth = exports.Timing = exports.TelemetryOffsets = exports.MessageTypes = exports.EccentricCommands = exports.ChainsCommands = exports.WeightCommands = exports.isEccentricPhase = exports.isConcentricPhase = exports.isActivePhase = exports.createFrame = exports.filterVoltraDevices = exports.isVoltraDevice = exports.VOLTRA_DEVICE_PREFIX = exports.VoltraConnectionStateModel = exports.isValidVoltraTransition = exports.DEFAULT_SETTINGS = exports.VoltraDevice = void 0;
|
|
9
|
+
// =============================================================================
|
|
10
|
+
// Models
|
|
11
|
+
// =============================================================================
|
|
12
|
+
// Device model
|
|
13
|
+
var device_1 = require("./models/device");
|
|
14
|
+
Object.defineProperty(exports, "VoltraDevice", { enumerable: true, get: function () { return device_1.VoltraDevice; } });
|
|
15
|
+
Object.defineProperty(exports, "DEFAULT_SETTINGS", { enumerable: true, get: function () { return device_1.DEFAULT_SETTINGS; } });
|
|
16
|
+
// Connection model
|
|
17
|
+
var connection_1 = require("./models/connection");
|
|
18
|
+
Object.defineProperty(exports, "isValidVoltraTransition", { enumerable: true, get: function () { return connection_1.isValidVoltraTransition; } });
|
|
19
|
+
Object.defineProperty(exports, "VoltraConnectionStateModel", { enumerable: true, get: function () { return connection_1.VoltraConnectionStateModel; } });
|
|
20
|
+
// Device filter
|
|
21
|
+
var device_filter_1 = require("./models/device-filter");
|
|
22
|
+
Object.defineProperty(exports, "VOLTRA_DEVICE_PREFIX", { enumerable: true, get: function () { return device_filter_1.VOLTRA_DEVICE_PREFIX; } });
|
|
23
|
+
Object.defineProperty(exports, "isVoltraDevice", { enumerable: true, get: function () { return device_filter_1.isVoltraDevice; } });
|
|
24
|
+
Object.defineProperty(exports, "filterVoltraDevices", { enumerable: true, get: function () { return device_filter_1.filterVoltraDevices; } });
|
|
25
|
+
// Telemetry models
|
|
26
|
+
var telemetry_1 = require("./models/telemetry");
|
|
27
|
+
Object.defineProperty(exports, "createFrame", { enumerable: true, get: function () { return telemetry_1.createFrame; } });
|
|
28
|
+
Object.defineProperty(exports, "isActivePhase", { enumerable: true, get: function () { return telemetry_1.isActivePhase; } });
|
|
29
|
+
Object.defineProperty(exports, "isConcentricPhase", { enumerable: true, get: function () { return telemetry_1.isConcentricPhase; } });
|
|
30
|
+
Object.defineProperty(exports, "isEccentricPhase", { enumerable: true, get: function () { return telemetry_1.isEccentricPhase; } });
|
|
31
|
+
// =============================================================================
|
|
32
|
+
// Protocol
|
|
33
|
+
// =============================================================================
|
|
34
|
+
// Command builders
|
|
35
|
+
var commands_1 = require("./protocol/commands");
|
|
36
|
+
Object.defineProperty(exports, "WeightCommands", { enumerable: true, get: function () { return commands_1.WeightCommands; } });
|
|
37
|
+
Object.defineProperty(exports, "ChainsCommands", { enumerable: true, get: function () { return commands_1.ChainsCommands; } });
|
|
38
|
+
Object.defineProperty(exports, "EccentricCommands", { enumerable: true, get: function () { return commands_1.EccentricCommands; } });
|
|
39
|
+
// Protocol constants
|
|
40
|
+
var constants_1 = require("./protocol/constants");
|
|
41
|
+
Object.defineProperty(exports, "MessageTypes", { enumerable: true, get: function () { return constants_1.MessageTypes; } });
|
|
42
|
+
Object.defineProperty(exports, "TelemetryOffsets", { enumerable: true, get: function () { return constants_1.TelemetryOffsets; } });
|
|
43
|
+
Object.defineProperty(exports, "Timing", { enumerable: true, get: function () { return constants_1.Timing; } });
|
|
44
|
+
Object.defineProperty(exports, "Auth", { enumerable: true, get: function () { return constants_1.Auth; } });
|
|
45
|
+
Object.defineProperty(exports, "Init", { enumerable: true, get: function () { return constants_1.Init; } });
|
|
46
|
+
Object.defineProperty(exports, "Workout", { enumerable: true, get: function () { return constants_1.Workout; } });
|
|
47
|
+
Object.defineProperty(exports, "BLE", { enumerable: true, get: function () { return constants_1.BLE; } });
|
|
48
|
+
Object.defineProperty(exports, "MovementPhase", { enumerable: true, get: function () { return constants_1.MovementPhase; } });
|
|
49
|
+
Object.defineProperty(exports, "PhaseNames", { enumerable: true, get: function () { return constants_1.PhaseNames; } });
|
|
50
|
+
// Telemetry decoder (low-level)
|
|
51
|
+
var telemetry_decoder_1 = require("./protocol/telemetry-decoder");
|
|
52
|
+
Object.defineProperty(exports, "decodeNotification", { enumerable: true, get: function () { return telemetry_decoder_1.decodeNotification; } });
|
|
53
|
+
Object.defineProperty(exports, "decodeTelemetryFrame", { enumerable: true, get: function () { return telemetry_decoder_1.decodeTelemetryFrame; } });
|
|
54
|
+
Object.defineProperty(exports, "encodeTelemetryFrame", { enumerable: true, get: function () { return telemetry_decoder_1.encodeTelemetryFrame; } });
|
|
55
|
+
Object.defineProperty(exports, "identifyMessageType", { enumerable: true, get: function () { return telemetry_decoder_1.identifyMessageType; } });
|
|
56
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/voltra/index.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAEH,gFAAgF;AAChF,SAAS;AACT,gFAAgF;AAEhF,eAAe;AACf,0CAMyB;AALvB,sGAAA,YAAY,OAAA;AACZ,0GAAA,gBAAgB,OAAA;AAMlB,mBAAmB;AACnB,kDAI6B;AAF3B,qHAAA,uBAAuB,OAAA;AACvB,wHAAA,0BAA0B,OAAA;AAG5B,gBAAgB;AAChB,wDAAmG;AAA1F,qHAAA,oBAAoB,OAAA;AAAE,+GAAA,cAAc,OAAA;AAAE,oHAAA,mBAAmB,OAAA;AAElE,mBAAmB;AACnB,gDAM4B;AAJ1B,wGAAA,WAAW,OAAA;AACX,0GAAA,aAAa,OAAA;AACb,8GAAA,iBAAiB,OAAA;AACjB,6GAAA,gBAAgB,OAAA;AAGlB,gFAAgF;AAChF,WAAW;AACX,gFAAgF;AAEhF,mBAAmB;AACnB,gDAK6B;AAJ3B,0GAAA,cAAc,OAAA;AACd,0GAAA,cAAc,OAAA;AACd,6GAAA,iBAAiB,OAAA;AAInB,qBAAqB;AACrB,kDAU8B;AAT5B,yGAAA,YAAY,OAAA;AACZ,6GAAA,gBAAgB,OAAA;AAChB,mGAAA,MAAM,OAAA;AACN,iGAAA,IAAI,OAAA;AACJ,iGAAA,IAAI,OAAA;AACJ,oGAAA,OAAO,OAAA;AACP,gGAAA,GAAG,OAAA;AACH,0GAAA,aAAa,OAAA;AACb,uGAAA,UAAU,OAAA;AAGZ,gCAAgC;AAChC,kEAOsC;AANpC,uHAAA,kBAAkB,OAAA;AAClB,yHAAA,oBAAoB,OAAA;AACpB,yHAAA,oBAAoB,OAAA;AACpB,wHAAA,mBAAmB,OAAA"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Voltra Connection Model
|
|
4
|
+
*
|
|
5
|
+
* Voltra-specific connection state that includes the authentication step.
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.VoltraConnectionStateModel = void 0;
|
|
9
|
+
exports.isValidVoltraTransition = isValidVoltraTransition;
|
|
10
|
+
/**
|
|
11
|
+
* Valid state transitions for Voltra connection.
|
|
12
|
+
*/
|
|
13
|
+
const VALID_VOLTRA_TRANSITIONS = {
|
|
14
|
+
disconnected: ['connecting'],
|
|
15
|
+
connecting: ['authenticating', 'disconnected'],
|
|
16
|
+
authenticating: ['connected', 'disconnected'],
|
|
17
|
+
connected: ['disconnected'],
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* Check if a Voltra state transition is valid.
|
|
21
|
+
*/
|
|
22
|
+
function isValidVoltraTransition(from, to) {
|
|
23
|
+
return VALID_VOLTRA_TRANSITIONS[from].includes(to);
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Voltra connection state model with validation.
|
|
27
|
+
*/
|
|
28
|
+
class VoltraConnectionStateModel {
|
|
29
|
+
constructor() {
|
|
30
|
+
this._state = 'disconnected';
|
|
31
|
+
}
|
|
32
|
+
get state() {
|
|
33
|
+
return this._state;
|
|
34
|
+
}
|
|
35
|
+
get isConnected() {
|
|
36
|
+
return this._state === 'connected';
|
|
37
|
+
}
|
|
38
|
+
get isConnecting() {
|
|
39
|
+
return this._state === 'connecting' || this._state === 'authenticating';
|
|
40
|
+
}
|
|
41
|
+
get isDisconnected() {
|
|
42
|
+
return this._state === 'disconnected';
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Transition to a new state.
|
|
46
|
+
* @throws Error if transition is invalid
|
|
47
|
+
*/
|
|
48
|
+
transitionTo(newState) {
|
|
49
|
+
if (!isValidVoltraTransition(this._state, newState)) {
|
|
50
|
+
throw new Error(`Invalid connection state transition: ${this._state} -> ${newState}`);
|
|
51
|
+
}
|
|
52
|
+
this._state = newState;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Force set state (for reconnection scenarios).
|
|
56
|
+
*/
|
|
57
|
+
forceState(state) {
|
|
58
|
+
this._state = state;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Reset to disconnected state.
|
|
62
|
+
*/
|
|
63
|
+
reset() {
|
|
64
|
+
this._state = 'disconnected';
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
exports.VoltraConnectionStateModel = VoltraConnectionStateModel;
|
|
68
|
+
//# sourceMappingURL=connection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connection.js","sourceRoot":"","sources":["../../../../src/voltra/models/connection.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAoBH,0DAKC;AAlBD;;GAEG;AACH,MAAM,wBAAwB,GAA2D;IACvF,YAAY,EAAE,CAAC,YAAY,CAAC;IAC5B,UAAU,EAAE,CAAC,gBAAgB,EAAE,cAAc,CAAC;IAC9C,cAAc,EAAE,CAAC,WAAW,EAAE,cAAc,CAAC;IAC7C,SAAS,EAAE,CAAC,cAAc,CAAC;CAC5B,CAAC;AAEF;;GAEG;AACH,SAAgB,uBAAuB,CACrC,IAA2B,EAC3B,EAAyB;IAEzB,OAAO,wBAAwB,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACrD,CAAC;AAED;;GAEG;AACH,MAAa,0BAA0B;IAAvC;QACU,WAAM,GAA0B,cAAc,CAAC;IA0CzD,CAAC;IAxCC,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,MAAM,KAAK,WAAW,CAAC;IACrC,CAAC;IAED,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,MAAM,KAAK,YAAY,IAAI,IAAI,CAAC,MAAM,KAAK,gBAAgB,CAAC;IAC1E,CAAC;IAED,IAAI,cAAc;QAChB,OAAO,IAAI,CAAC,MAAM,KAAK,cAAc,CAAC;IACxC,CAAC;IAED;;;OAGG;IACH,YAAY,CAAC,QAA+B;QAC1C,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC;YACpD,MAAM,IAAI,KAAK,CAAC,wCAAwC,IAAI,CAAC,MAAM,OAAO,QAAQ,EAAE,CAAC,CAAC;QACxF,CAAC;QACD,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC;IACzB,CAAC;IAED;;OAEG;IACH,UAAU,CAAC,KAA4B;QACrC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;IACtB,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,CAAC,MAAM,GAAG,cAAc,CAAC;IAC/B,CAAC;CACF;AA3CD,gEA2CC"}
|