@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,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bluetooth Domain
|
|
3
|
+
*
|
|
4
|
+
* Generic BLE connection management, device scanning, and environment detection.
|
|
5
|
+
* This domain provides reusable BLE infrastructure that can be configured
|
|
6
|
+
* for any BLE device.
|
|
7
|
+
*/
|
|
8
|
+
export { getDeviceDisplayName, sortBySignalStrength } from './models/device';
|
|
9
|
+
export { detectBLEEnvironment, isBLEAvailable, createNativeEnvironmentInfo } from './models/environment';
|
|
10
|
+
// Adapters
|
|
11
|
+
export {
|
|
12
|
+
// Adapters
|
|
13
|
+
WebBLEAdapter, NodeBLEAdapter, NativeBLEAdapter,
|
|
14
|
+
// Factory
|
|
15
|
+
createBLEAdapter, } from './adapters';
|
|
16
|
+
// Note: ScannerController is internal - use VoltraClient/VoltraManager for scanning
|
|
17
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/bluetooth/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAO7E,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAE,2BAA2B,EAAE,MAAM,sBAAsB,CAAC;AAEzG,WAAW;AACX,OAAO;AAQL,WAAW;AACX,aAAa,EACb,cAAc,EACd,gBAAgB;AAChB,UAAU;AACV,gBAAgB,GAEjB,MAAM,YAAY,CAAC;AAEpB,oFAAoF"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bluetooth Connection Model
|
|
3
|
+
*
|
|
4
|
+
* Represents generic BLE connection state and transitions.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Valid state transitions for BLE connection.
|
|
8
|
+
*/
|
|
9
|
+
const VALID_BLE_TRANSITIONS = {
|
|
10
|
+
disconnected: ['connecting'],
|
|
11
|
+
connecting: ['connected', 'disconnected'],
|
|
12
|
+
connected: ['disconnecting', 'disconnected'],
|
|
13
|
+
disconnecting: ['disconnected'],
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Check if a BLE state transition is valid.
|
|
17
|
+
*/
|
|
18
|
+
export function isValidBLETransition(from, to) {
|
|
19
|
+
return VALID_BLE_TRANSITIONS[from].includes(to);
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Generic BLE connection state model with validation.
|
|
23
|
+
*/
|
|
24
|
+
export class BLEConnectionStateModel {
|
|
25
|
+
constructor() {
|
|
26
|
+
this._state = 'disconnected';
|
|
27
|
+
}
|
|
28
|
+
get state() {
|
|
29
|
+
return this._state;
|
|
30
|
+
}
|
|
31
|
+
get isConnected() {
|
|
32
|
+
return this._state === 'connected';
|
|
33
|
+
}
|
|
34
|
+
get isConnecting() {
|
|
35
|
+
return this._state === 'connecting';
|
|
36
|
+
}
|
|
37
|
+
get isDisconnected() {
|
|
38
|
+
return this._state === 'disconnected';
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Transition to a new state.
|
|
42
|
+
* @throws Error if transition is invalid
|
|
43
|
+
*/
|
|
44
|
+
transitionTo(newState) {
|
|
45
|
+
if (!isValidBLETransition(this._state, newState)) {
|
|
46
|
+
throw new Error(`Invalid connection state transition: ${this._state} -> ${newState}`);
|
|
47
|
+
}
|
|
48
|
+
this._state = newState;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Force set state (for reconnection scenarios).
|
|
52
|
+
*/
|
|
53
|
+
forceState(state) {
|
|
54
|
+
this._state = state;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Reset to disconnected state.
|
|
58
|
+
*/
|
|
59
|
+
reset() {
|
|
60
|
+
this._state = 'disconnected';
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=connection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connection.js","sourceRoot":"","sources":["../../../../src/bluetooth/models/connection.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH;;GAEG;AACH,MAAM,qBAAqB,GAAqD;IAC9E,YAAY,EAAE,CAAC,YAAY,CAAC;IAC5B,UAAU,EAAE,CAAC,WAAW,EAAE,cAAc,CAAC;IACzC,SAAS,EAAE,CAAC,eAAe,EAAE,cAAc,CAAC;IAC5C,aAAa,EAAE,CAAC,cAAc,CAAC;CAChC,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,IAAwB,EAAE,EAAsB;IACnF,OAAO,qBAAqB,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAClD,CAAC;AAED;;GAEG;AACH,MAAM,OAAO,uBAAuB;IAApC;QACU,WAAM,GAAuB,cAAc,CAAC;IA0CtD,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,CAAC;IACtC,CAAC;IAED,IAAI,cAAc;QAChB,OAAO,IAAI,CAAC,MAAM,KAAK,cAAc,CAAC;IACxC,CAAC;IAED;;;OAGG;IACH,YAAY,CAAC,QAA4B;QACvC,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC;YACjD,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,KAAyB;QAClC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;IACtB,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,CAAC,MAAM,GAAG,cAAc,CAAC;IAC/B,CAAC;CACF"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bluetooth Device Model
|
|
3
|
+
*
|
|
4
|
+
* Represents a discovered BLE device from scanning.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Get display name for a device.
|
|
8
|
+
*/
|
|
9
|
+
export function getDeviceDisplayName(device) {
|
|
10
|
+
return device.name ?? `Device ${device.id.slice(0, 8)}`;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Sort devices by signal strength (strongest first).
|
|
14
|
+
*/
|
|
15
|
+
export function sortBySignalStrength(devices) {
|
|
16
|
+
return [...devices].sort((a, b) => {
|
|
17
|
+
const rssiA = a.rssi ?? -100;
|
|
18
|
+
const rssiB = b.rssi ?? -100;
|
|
19
|
+
return rssiB - rssiA; // Higher (less negative) is better
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=device.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"device.js","sourceRoot":"","sources":["../../../../src/bluetooth/models/device.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAcH;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAwB;IAC3D,OAAO,MAAM,CAAC,IAAI,IAAI,UAAU,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;AAC1D,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAA2B;IAC9D,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QAChC,MAAM,KAAK,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC;QAC7B,MAAM,KAAK,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC;QAC7B,OAAO,KAAK,GAAG,KAAK,CAAC,CAAC,mCAAmC;IAC3D,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bluetooth Environment Model
|
|
3
|
+
*
|
|
4
|
+
* Detects the current environment and BLE capabilities.
|
|
5
|
+
* This is a simplified version for the SDK that doesn't depend on Expo.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Warning messages for unsupported environments.
|
|
9
|
+
*/
|
|
10
|
+
const WARNING_MESSAGES = {
|
|
11
|
+
'expo-go': 'Bluetooth is not available in Expo Go. Run "npx expo run:ios --device" to build with native BLE support.',
|
|
12
|
+
simulator: 'Bluetooth is not available in the simulator. Connect a physical device to test BLE.',
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* Check if running in a browser environment.
|
|
16
|
+
*/
|
|
17
|
+
function isBrowserEnvironment() {
|
|
18
|
+
return (typeof window !== 'undefined' &&
|
|
19
|
+
typeof document !== 'undefined' &&
|
|
20
|
+
typeof navigator !== 'undefined');
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Check if running in Node.js environment.
|
|
24
|
+
*/
|
|
25
|
+
function isNodeEnvironment() {
|
|
26
|
+
return (typeof process !== 'undefined' && process.versions != null && process.versions.node != null);
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Detect the current BLE environment.
|
|
30
|
+
*
|
|
31
|
+
* This is a simplified version that works without React Native/Expo dependencies.
|
|
32
|
+
* For full environment detection in React Native apps, use the app's environment detection.
|
|
33
|
+
*/
|
|
34
|
+
export function detectBLEEnvironment() {
|
|
35
|
+
// Check for browser environment first
|
|
36
|
+
if (isBrowserEnvironment()) {
|
|
37
|
+
return {
|
|
38
|
+
environment: 'web',
|
|
39
|
+
bleSupported: true, // Via Web Bluetooth API
|
|
40
|
+
warningMessage: null,
|
|
41
|
+
isWeb: true,
|
|
42
|
+
requiresUserGesture: true, // Web Bluetooth requires user gesture for requestDevice()
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
// Check for Node.js environment
|
|
46
|
+
if (isNodeEnvironment()) {
|
|
47
|
+
return {
|
|
48
|
+
environment: 'node',
|
|
49
|
+
bleSupported: true, // Via webbluetooth npm package
|
|
50
|
+
warningMessage: null,
|
|
51
|
+
isWeb: false,
|
|
52
|
+
requiresUserGesture: false,
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
// Default to native (React Native apps should use their own environment detection)
|
|
56
|
+
return {
|
|
57
|
+
environment: 'native',
|
|
58
|
+
bleSupported: true,
|
|
59
|
+
warningMessage: null,
|
|
60
|
+
isWeb: false,
|
|
61
|
+
requiresUserGesture: false,
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Check if BLE is available in the current environment.
|
|
66
|
+
*/
|
|
67
|
+
export function isBLEAvailable(env) {
|
|
68
|
+
return env.bleSupported;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Create environment info for native React Native apps.
|
|
72
|
+
* Call this from your app with the detected environment.
|
|
73
|
+
*/
|
|
74
|
+
export function createNativeEnvironmentInfo(options) {
|
|
75
|
+
if (options.isExpoGo) {
|
|
76
|
+
return {
|
|
77
|
+
environment: 'expo-go',
|
|
78
|
+
bleSupported: false,
|
|
79
|
+
warningMessage: WARNING_MESSAGES['expo-go'],
|
|
80
|
+
isWeb: false,
|
|
81
|
+
requiresUserGesture: false,
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
if (options.isSimulator) {
|
|
85
|
+
return {
|
|
86
|
+
environment: 'simulator',
|
|
87
|
+
bleSupported: false,
|
|
88
|
+
warningMessage: WARNING_MESSAGES['simulator'],
|
|
89
|
+
isWeb: false,
|
|
90
|
+
requiresUserGesture: false,
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
return {
|
|
94
|
+
environment: 'native',
|
|
95
|
+
bleSupported: true,
|
|
96
|
+
warningMessage: null,
|
|
97
|
+
isWeb: false,
|
|
98
|
+
requiresUserGesture: false,
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=environment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"environment.js","sourceRoot":"","sources":["../../../../src/bluetooth/models/environment.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA4BH;;GAEG;AACH,MAAM,gBAAgB,GAA4C;IAChE,SAAS,EACP,0GAA0G;IAC5G,SAAS,EAAE,qFAAqF;CACjG,CAAC;AAEF;;GAEG;AACH,SAAS,oBAAoB;IAC3B,OAAO,CACL,OAAO,MAAM,KAAK,WAAW;QAC7B,OAAO,QAAQ,KAAK,WAAW;QAC/B,OAAO,SAAS,KAAK,WAAW,CACjC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB;IACxB,OAAO,CACL,OAAO,OAAO,KAAK,WAAW,IAAI,OAAO,CAAC,QAAQ,IAAI,IAAI,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,IAAI,IAAI,CAC5F,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB;IAClC,sCAAsC;IACtC,IAAI,oBAAoB,EAAE,EAAE,CAAC;QAC3B,OAAO;YACL,WAAW,EAAE,KAAK;YAClB,YAAY,EAAE,IAAI,EAAE,wBAAwB;YAC5C,cAAc,EAAE,IAAI;YACpB,KAAK,EAAE,IAAI;YACX,mBAAmB,EAAE,IAAI,EAAE,0DAA0D;SACtF,CAAC;IACJ,CAAC;IAED,gCAAgC;IAChC,IAAI,iBAAiB,EAAE,EAAE,CAAC;QACxB,OAAO;YACL,WAAW,EAAE,MAAM;YACnB,YAAY,EAAE,IAAI,EAAE,+BAA+B;YACnD,cAAc,EAAE,IAAI;YACpB,KAAK,EAAE,KAAK;YACZ,mBAAmB,EAAE,KAAK;SAC3B,CAAC;IACJ,CAAC;IAED,mFAAmF;IACnF,OAAO;QACL,WAAW,EAAE,QAAQ;QACrB,YAAY,EAAE,IAAI;QAClB,cAAc,EAAE,IAAI;QACpB,KAAK,EAAE,KAAK;QACZ,mBAAmB,EAAE,KAAK;KAC3B,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,GAAuB;IACpD,OAAO,GAAG,CAAC,YAAY,CAAC;AAC1B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,2BAA2B,CAAC,OAG3C;IACC,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;QACrB,OAAO;YACL,WAAW,EAAE,SAAS;YACtB,YAAY,EAAE,KAAK;YACnB,cAAc,EAAE,gBAAgB,CAAC,SAAS,CAAE;YAC5C,KAAK,EAAE,KAAK;YACZ,mBAAmB,EAAE,KAAK;SAC3B,CAAC;IACJ,CAAC;IAED,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;QACxB,OAAO;YACL,WAAW,EAAE,WAAW;YACxB,YAAY,EAAE,KAAK;YACnB,cAAc,EAAE,gBAAgB,CAAC,WAAW,CAAE;YAC9C,KAAK,EAAE,KAAK;YACZ,mBAAmB,EAAE,KAAK;SAC3B,CAAC;IACJ,CAAC;IAED,OAAO;QACL,WAAW,EAAE,QAAQ;QACrB,YAAY,EAAE,IAAI;QAClB,cAAc,EAAE,IAAI;QACpB,KAAK,EAAE,KAAK;QACZ,mBAAmB,EAAE,KAAK;KAC3B,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Custom SDK Error Types
|
|
3
|
+
*
|
|
4
|
+
* Provides typed errors for better error handling and developer experience.
|
|
5
|
+
* All SDK errors extend VoltraSDKError for easy catch-all handling.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* try {
|
|
10
|
+
* await client.connect();
|
|
11
|
+
* } catch (error) {
|
|
12
|
+
* if (error instanceof ConnectionError) {
|
|
13
|
+
* console.log('Connection failed:', error.code);
|
|
14
|
+
* } else if (error instanceof AuthenticationError) {
|
|
15
|
+
* console.log('Auth failed - device may need reset');
|
|
16
|
+
* } else if (error instanceof VoltraSDKError) {
|
|
17
|
+
* console.log('SDK error:', error.message);
|
|
18
|
+
* }
|
|
19
|
+
* }
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
/**
|
|
23
|
+
* Error codes for SDK errors.
|
|
24
|
+
* Use these for programmatic error handling.
|
|
25
|
+
*/
|
|
26
|
+
export const ErrorCode = {
|
|
27
|
+
// Connection errors
|
|
28
|
+
CONNECTION_FAILED: 'CONNECTION_FAILED',
|
|
29
|
+
CONNECTION_LOST: 'CONNECTION_LOST',
|
|
30
|
+
CONNECTION_TIMEOUT: 'CONNECTION_TIMEOUT',
|
|
31
|
+
NOT_CONNECTED: 'NOT_CONNECTED',
|
|
32
|
+
ALREADY_CONNECTED: 'ALREADY_CONNECTED',
|
|
33
|
+
// Authentication errors
|
|
34
|
+
AUTH_FAILED: 'AUTH_FAILED',
|
|
35
|
+
AUTH_TIMEOUT: 'AUTH_TIMEOUT',
|
|
36
|
+
AUTH_INVALID_RESPONSE: 'AUTH_INVALID_RESPONSE',
|
|
37
|
+
// Bluetooth errors
|
|
38
|
+
BLUETOOTH_UNAVAILABLE: 'BLUETOOTH_UNAVAILABLE',
|
|
39
|
+
BLUETOOTH_PERMISSION_DENIED: 'BLUETOOTH_PERMISSION_DENIED',
|
|
40
|
+
BLUETOOTH_ADAPTER_ERROR: 'BLUETOOTH_ADAPTER_ERROR',
|
|
41
|
+
// Device errors
|
|
42
|
+
DEVICE_NOT_FOUND: 'DEVICE_NOT_FOUND',
|
|
43
|
+
DEVICE_DISCONNECTED: 'DEVICE_DISCONNECTED',
|
|
44
|
+
// Command errors
|
|
45
|
+
COMMAND_FAILED: 'COMMAND_FAILED',
|
|
46
|
+
COMMAND_TIMEOUT: 'COMMAND_TIMEOUT',
|
|
47
|
+
INVALID_SETTING: 'INVALID_SETTING',
|
|
48
|
+
// Telemetry errors
|
|
49
|
+
TELEMETRY_DECODE_ERROR: 'TELEMETRY_DECODE_ERROR',
|
|
50
|
+
// General
|
|
51
|
+
TIMEOUT: 'TIMEOUT',
|
|
52
|
+
UNKNOWN: 'UNKNOWN',
|
|
53
|
+
};
|
|
54
|
+
/**
|
|
55
|
+
* Base error class for all SDK errors.
|
|
56
|
+
* Provides a consistent error interface with error codes.
|
|
57
|
+
*/
|
|
58
|
+
export class VoltraSDKError extends Error {
|
|
59
|
+
constructor(message, code = ErrorCode.UNKNOWN, cause) {
|
|
60
|
+
super(message);
|
|
61
|
+
this.name = 'VoltraSDKError';
|
|
62
|
+
this.code = code;
|
|
63
|
+
this.cause = cause;
|
|
64
|
+
// Maintains proper stack trace in V8 environments
|
|
65
|
+
if (Error.captureStackTrace) {
|
|
66
|
+
Error.captureStackTrace(this, this.constructor);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Thrown when a BLE connection fails or is lost.
|
|
72
|
+
*/
|
|
73
|
+
export class ConnectionError extends VoltraSDKError {
|
|
74
|
+
constructor(message, code = ErrorCode.CONNECTION_FAILED, cause) {
|
|
75
|
+
super(message, code, cause);
|
|
76
|
+
this.name = 'ConnectionError';
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Thrown when Voltra device authentication fails.
|
|
81
|
+
* This typically happens during the initial connection handshake.
|
|
82
|
+
*/
|
|
83
|
+
export class AuthenticationError extends VoltraSDKError {
|
|
84
|
+
constructor(message, code = ErrorCode.AUTH_FAILED, cause) {
|
|
85
|
+
super(message, code, cause);
|
|
86
|
+
this.name = 'AuthenticationError';
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Thrown when an operation times out.
|
|
91
|
+
*/
|
|
92
|
+
export class TimeoutError extends VoltraSDKError {
|
|
93
|
+
constructor(message, timeoutMs, cause) {
|
|
94
|
+
super(message, ErrorCode.TIMEOUT, cause);
|
|
95
|
+
this.name = 'TimeoutError';
|
|
96
|
+
this.timeoutMs = timeoutMs;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Thrown when an operation requires a connection but the device is not connected.
|
|
101
|
+
*/
|
|
102
|
+
export class NotConnectedError extends VoltraSDKError {
|
|
103
|
+
constructor(message = 'Device is not connected') {
|
|
104
|
+
super(message, ErrorCode.NOT_CONNECTED);
|
|
105
|
+
this.name = 'NotConnectedError';
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Thrown when an invalid setting value is provided.
|
|
110
|
+
* For example, setting weight to a value not supported by the device.
|
|
111
|
+
*/
|
|
112
|
+
export class InvalidSettingError extends VoltraSDKError {
|
|
113
|
+
constructor(setting, value, validValues, message) {
|
|
114
|
+
const msg = message ??
|
|
115
|
+
`Invalid value for ${setting}: ${value}${validValues ? `. Valid values: ${validValues.join(', ')}` : ''}`;
|
|
116
|
+
super(msg, ErrorCode.INVALID_SETTING);
|
|
117
|
+
this.name = 'InvalidSettingError';
|
|
118
|
+
this.setting = setting;
|
|
119
|
+
this.value = value;
|
|
120
|
+
this.validValues = validValues;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Thrown when Bluetooth is not available on the current platform.
|
|
125
|
+
*/
|
|
126
|
+
export class BluetoothUnavailableError extends VoltraSDKError {
|
|
127
|
+
constructor(reason) {
|
|
128
|
+
const message = reason
|
|
129
|
+
? `Bluetooth is not available: ${reason}`
|
|
130
|
+
: 'Bluetooth is not available on this device';
|
|
131
|
+
super(message, ErrorCode.BLUETOOTH_UNAVAILABLE);
|
|
132
|
+
this.name = 'BluetoothUnavailableError';
|
|
133
|
+
this.reason = reason;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Thrown when a command fails to execute on the device.
|
|
138
|
+
*/
|
|
139
|
+
export class CommandError extends VoltraSDKError {
|
|
140
|
+
constructor(message, command, cause) {
|
|
141
|
+
super(message, ErrorCode.COMMAND_FAILED, cause);
|
|
142
|
+
this.name = 'CommandError';
|
|
143
|
+
this.command = command;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Thrown when telemetry data cannot be decoded.
|
|
148
|
+
*/
|
|
149
|
+
export class TelemetryError extends VoltraSDKError {
|
|
150
|
+
constructor(message, cause) {
|
|
151
|
+
super(message, ErrorCode.TELEMETRY_DECODE_ERROR, cause);
|
|
152
|
+
this.name = 'TelemetryError';
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/errors.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,72 @@
|
|
|
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
|
+
// =============================================================================
|
|
37
|
+
// High-Level API
|
|
38
|
+
// =============================================================================
|
|
39
|
+
export { VoltraClient, VoltraManager, } from './sdk';
|
|
40
|
+
// =============================================================================
|
|
41
|
+
// Platform Adapters
|
|
42
|
+
// =============================================================================
|
|
43
|
+
export { WebBLEAdapter } from './bluetooth/adapters/web';
|
|
44
|
+
export { NodeBLEAdapter } from './bluetooth/adapters/node';
|
|
45
|
+
export { NativeBLEAdapter } from './bluetooth/adapters/native';
|
|
46
|
+
export { createBLEAdapter } from './bluetooth/adapters';
|
|
47
|
+
export { getDeviceDisplayName, sortBySignalStrength } from './bluetooth/models/device';
|
|
48
|
+
export { VOLTRA_DEVICE_PREFIX, isVoltraDevice, filterVoltraDevices, } from './voltra/models/device-filter';
|
|
49
|
+
// =============================================================================
|
|
50
|
+
// Voltra Device
|
|
51
|
+
// =============================================================================
|
|
52
|
+
export { VoltraDevice, DEFAULT_SETTINGS, } from './voltra/models/device';
|
|
53
|
+
export { createFrame } from './voltra/models/telemetry';
|
|
54
|
+
export { decodeTelemetryFrame, decodeNotification, encodeTelemetryFrame, identifyMessageType, } from './voltra/protocol/telemetry-decoder';
|
|
55
|
+
export { MovementPhase, PhaseNames, MessageTypes, TelemetryOffsets, } from './voltra/protocol/constants';
|
|
56
|
+
// =============================================================================
|
|
57
|
+
// Commands
|
|
58
|
+
// =============================================================================
|
|
59
|
+
export { WeightCommands, ChainsCommands, EccentricCommands, } from './voltra/protocol/commands';
|
|
60
|
+
// =============================================================================
|
|
61
|
+
// Protocol Constants
|
|
62
|
+
// =============================================================================
|
|
63
|
+
export { BLE, Timing, Auth, Init, Workout, } from './voltra/protocol/constants';
|
|
64
|
+
// =============================================================================
|
|
65
|
+
// Errors
|
|
66
|
+
// =============================================================================
|
|
67
|
+
export { VoltraSDKError, ConnectionError, AuthenticationError, TimeoutError, NotConnectedError, InvalidSettingError, BluetoothUnavailableError, CommandError, TelemetryError, ErrorCode, } from './errors';
|
|
68
|
+
// =============================================================================
|
|
69
|
+
// Utilities
|
|
70
|
+
// =============================================================================
|
|
71
|
+
export { delay } from './shared/utils';
|
|
72
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAEH,gFAAgF;AAChF,iBAAiB;AACjB,gFAAgF;AAEhF,OAAO,EACL,YAAY,EACZ,aAAa,GAad,MAAM,OAAO,CAAC;AAEf,gFAAgF;AAChF,oBAAoB;AACpB,gFAAgF;AAEhF,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,cAAc,EAAsB,MAAM,2BAA2B,CAAC;AAC/E,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAiBxD,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAEvF,OAAO,EACL,oBAAoB,EACpB,cAAc,EACd,mBAAmB,GACpB,MAAM,+BAA+B,CAAC;AAEvC,gFAAgF;AAChF,gBAAgB;AAChB,gFAAgF;AAEhF,OAAO,EACL,YAAY,EACZ,gBAAgB,GAIjB,MAAM,wBAAwB,CAAC;AAShC,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAExD,OAAO,EACL,oBAAoB,EACpB,kBAAkB,EAClB,oBAAoB,EACpB,mBAAmB,GAGpB,MAAM,qCAAqC,CAAC;AAE7C,OAAO,EACL,aAAa,EACb,UAAU,EACV,YAAY,EACZ,gBAAgB,GACjB,MAAM,6BAA6B,CAAC;AAErC,gFAAgF;AAChF,WAAW;AACX,gFAAgF;AAEhF,OAAO,EACL,cAAc,EACd,cAAc,EACd,iBAAiB,GAElB,MAAM,4BAA4B,CAAC;AAEpC,gFAAgF;AAChF,qBAAqB;AACrB,gFAAgF;AAEhF,OAAO,EACL,GAAG,EACH,MAAM,EACN,IAAI,EACJ,IAAI,EACJ,OAAO,GACR,MAAM,6BAA6B,CAAC;AAErC,gFAAgF;AAChF,SAAS;AACT,gFAAgF;AAEhF,OAAO,EACL,cAAc,EACd,eAAe,EACf,mBAAmB,EACnB,YAAY,EACZ,iBAAiB,EACjB,mBAAmB,EACnB,yBAAyB,EACzB,YAAY,EACZ,cAAc,EACd,SAAS,GAEV,MAAM,UAAU,CAAC;AAElB,gFAAgF;AAChF,YAAY;AACZ,gFAAgF;AAEhF,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC"}
|