node-switchbot 4.0.0-beta.2 → 4.0.0-beta.3
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/BLE.md +63 -0
- package/CHANGELOG.md +34 -0
- package/README.md +6 -0
- package/dist/devices/wo-hand.d.ts +35 -0
- package/dist/devices/wo-hand.d.ts.map +1 -1
- package/dist/devices/wo-hand.js +87 -0
- package/dist/devices/wo-hand.js.map +1 -1
- package/dist/utils/bot-ble.d.ts +36 -0
- package/dist/utils/bot-ble.d.ts.map +1 -0
- package/dist/utils/bot-ble.js +107 -0
- package/dist/utils/bot-ble.js.map +1 -0
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +2 -0
- package/dist/utils/index.js.map +1 -1
- package/docs/assets/hierarchy.js +1 -1
- package/docs/assets/search.js +1 -1
- package/docs/classes/APIError.html +2 -2
- package/docs/classes/APINotAvailableError.html +2 -2
- package/docs/classes/BLEConnection.html +9 -9
- package/docs/classes/BLENotAvailableError.html +2 -2
- package/docs/classes/BLEScanner.html +8 -8
- package/docs/classes/CommandFailedError.html +2 -2
- package/docs/classes/ConnectionTimeoutError.html +2 -2
- package/docs/classes/DeviceManager.html +13 -13
- package/docs/classes/DeviceNotFoundError.html +2 -2
- package/docs/classes/DiscoveryError.html +2 -2
- package/docs/classes/OpenAPIClient.html +24 -24
- package/docs/classes/SwitchBot.html +11 -11
- package/docs/classes/SwitchBotDevice.html +23 -23
- package/docs/classes/SwitchBotError.html +2 -2
- package/docs/classes/ValidationError.html +2 -2
- package/docs/classes/WoAirPurifier.html +27 -27
- package/docs/classes/WoAirPurifierTable.html +27 -27
- package/docs/classes/WoBlindTilt.html +29 -29
- package/docs/classes/WoBulb.html +28 -28
- package/docs/classes/WoCeilingLight.html +28 -28
- package/docs/classes/WoContact.html +23 -23
- package/docs/classes/WoCurtain.html +27 -27
- package/docs/classes/WoHand.html +36 -28
- package/docs/classes/WoHub2.html +23 -23
- package/docs/classes/WoHub3.html +23 -23
- package/docs/classes/WoHumi.html +27 -27
- package/docs/classes/WoHumi2.html +27 -27
- package/docs/classes/WoIOSensorTH.html +23 -23
- package/docs/classes/WoKeypad.html +23 -23
- package/docs/classes/WoLeak.html +23 -23
- package/docs/classes/WoPlugMiniJP.html +26 -26
- package/docs/classes/WoPlugMiniUS.html +26 -26
- package/docs/classes/WoPresence.html +23 -23
- package/docs/classes/WoRelaySwitch1.html +26 -26
- package/docs/classes/WoRelaySwitch1PM.html +26 -26
- package/docs/classes/WoRemote.html +23 -23
- package/docs/classes/WoSensorTH.html +23 -23
- package/docs/classes/WoSensorTHPlus.html +23 -23
- package/docs/classes/WoSensorTHPro.html +23 -23
- package/docs/classes/WoSensorTHProCO2.html +23 -23
- package/docs/classes/WoSmartLock.html +25 -25
- package/docs/classes/WoSmartLockPro.html +26 -26
- package/docs/classes/WoStrip.html +28 -28
- package/docs/enums/LogLevel.html +2 -2
- package/docs/enums/SwitchBotBLEModel.html +2 -2
- package/docs/enums/SwitchBotBLEModelName.html +2 -2
- package/docs/functions/updateBaseURL.html +1 -1
- package/docs/hierarchy.html +1 -1
- package/docs/index.html +1 -1
- package/docs/interfaces/APICommandRequest.html +2 -2
- package/docs/interfaces/APICommandResponse.html +2 -2
- package/docs/interfaces/APIDevice.html +2 -2
- package/docs/interfaces/APIDeviceStatus.html +2 -2
- package/docs/interfaces/APIErrorResponse.html +2 -2
- package/docs/interfaces/APIResponse.html +2 -2
- package/docs/interfaces/AirPurifierCommands.html +2 -2
- package/docs/interfaces/AirPurifierServiceData.html +5 -5
- package/docs/interfaces/AirPurifierStatus.html +7 -7
- package/docs/interfaces/BLEAdvertisement.html +2 -2
- package/docs/interfaces/BLEScanOptions.html +5 -5
- package/docs/interfaces/BLEServiceData.html +5 -5
- package/docs/interfaces/BlindTiltCommands.html +2 -2
- package/docs/interfaces/BlindTiltServiceData.html +5 -5
- package/docs/interfaces/BlindTiltStatus.html +6 -6
- package/docs/interfaces/BotCommands.html +2 -2
- package/docs/interfaces/BotServiceData.html +5 -5
- package/docs/interfaces/BotStatus.html +6 -6
- package/docs/interfaces/BulbCommands.html +2 -2
- package/docs/interfaces/BulbServiceData.html +5 -5
- package/docs/interfaces/BulbStatus.html +6 -6
- package/docs/interfaces/CeilingLightCommands.html +2 -2
- package/docs/interfaces/CeilingLightServiceData.html +5 -5
- package/docs/interfaces/CeilingLightStatus.html +6 -6
- package/docs/interfaces/CommandResult.html +6 -6
- package/docs/interfaces/ContactServiceData.html +5 -5
- package/docs/interfaces/ContactStatus.html +6 -6
- package/docs/interfaces/CurtainCommands.html +2 -2
- package/docs/interfaces/CurtainServiceData.html +5 -5
- package/docs/interfaces/CurtainStatus.html +6 -6
- package/docs/interfaces/DeviceInfo.html +13 -13
- package/docs/interfaces/DeviceListResponse.html +2 -2
- package/docs/interfaces/DeviceStatus.html +6 -6
- package/docs/interfaces/DiscoveryOptions.html +7 -7
- package/docs/interfaces/HubServiceData.html +5 -5
- package/docs/interfaces/HubStatus.html +6 -6
- package/docs/interfaces/HumidifierCommands.html +2 -2
- package/docs/interfaces/HumidifierServiceData.html +6 -6
- package/docs/interfaces/HumidifierStatus.html +6 -6
- package/docs/interfaces/KeypadStatus.html +6 -6
- package/docs/interfaces/LeakServiceData.html +5 -5
- package/docs/interfaces/LeakStatus.html +6 -6
- package/docs/interfaces/LockCommands.html +2 -2
- package/docs/interfaces/LockServiceData.html +6 -6
- package/docs/interfaces/LockStatus.html +6 -6
- package/docs/interfaces/MeterServiceData.html +5 -5
- package/docs/interfaces/MeterStatus.html +6 -6
- package/docs/interfaces/MotionServiceData.html +5 -5
- package/docs/interfaces/MotionStatus.html +6 -6
- package/docs/interfaces/PlugCommands.html +2 -2
- package/docs/interfaces/PlugServiceData.html +5 -5
- package/docs/interfaces/PlugStatus.html +6 -6
- package/docs/interfaces/PresenceServiceData.html +5 -5
- package/docs/interfaces/PresenceStatus.html +6 -6
- package/docs/interfaces/RelaySwitchCommands.html +2 -2
- package/docs/interfaces/RelaySwitchServiceData.html +5 -5
- package/docs/interfaces/RelaySwitchStatus.html +6 -6
- package/docs/interfaces/RemoteStatus.html +6 -6
- package/docs/interfaces/SceneListResponse.html +2 -2
- package/docs/interfaces/StripCommands.html +2 -2
- package/docs/interfaces/StripServiceData.html +5 -5
- package/docs/interfaces/StripStatus.html +6 -6
- package/docs/interfaces/SwitchBotConfig.html +15 -15
- package/docs/interfaces/WebhookConfig.html +2 -2
- package/docs/interfaces/WebhookDetails.html +2 -2
- package/docs/interfaces/WebhookQueryResponse.html +2 -2
- package/docs/interfaces/WebhookSetupResponse.html +2 -2
- package/docs/media/BLE.md +63 -0
- package/docs/types/ConnectionType.html +1 -1
- package/docs/types/PhysicalDeviceType.html +1 -1
- package/docs/types/VirtualDeviceType.html +1 -1
- package/docs/variables/urls.html +1 -1
- package/package.json +2 -2
- package/tsconfig.build.json +17 -0
package/BLE.md
CHANGED
|
@@ -587,6 +587,69 @@ switchbot
|
|
|
587
587
|
});
|
|
588
588
|
```
|
|
589
589
|
|
|
590
|
+
#### Password Protection
|
|
591
|
+
|
|
592
|
+
The Bot (WoHand) supports password protection via BLE to prevent unauthorized control. When a password is set, all BLE commands (press, turnOn, turnOff, up, down) will be automatically encrypted.
|
|
593
|
+
|
|
594
|
+
**Password Requirements:**
|
|
595
|
+
- Exactly 4 characters
|
|
596
|
+
- Alphanumeric only (letters and numbers)
|
|
597
|
+
- Case-sensitive
|
|
598
|
+
|
|
599
|
+
**Setting a Password:**
|
|
600
|
+
|
|
601
|
+
```typescript
|
|
602
|
+
// Using device options during construction
|
|
603
|
+
const bot = new WoHand({
|
|
604
|
+
id: 'c1:2e:45:3e:20:08',
|
|
605
|
+
password: 'A1b2' // Your 4-character password
|
|
606
|
+
});
|
|
607
|
+
|
|
608
|
+
// Or set/change password on existing device
|
|
609
|
+
await bot.setPassword('A1b2');
|
|
610
|
+
```
|
|
611
|
+
|
|
612
|
+
**Clearing a Password:**
|
|
613
|
+
|
|
614
|
+
```typescript
|
|
615
|
+
// Remove password protection
|
|
616
|
+
await bot.clearPassword();
|
|
617
|
+
```
|
|
618
|
+
|
|
619
|
+
**Checking Password Status:**
|
|
620
|
+
|
|
621
|
+
```typescript
|
|
622
|
+
// Check if device has password configured
|
|
623
|
+
if (bot.hasPassword()) {
|
|
624
|
+
console.log('Device is password protected');
|
|
625
|
+
}
|
|
626
|
+
```
|
|
627
|
+
|
|
628
|
+
**Example with Password:**
|
|
629
|
+
|
|
630
|
+
```typescript
|
|
631
|
+
switchbot
|
|
632
|
+
.discover({ model: "H", quick: true })
|
|
633
|
+
.then((device_list) => {
|
|
634
|
+
const bot = device_list[0];
|
|
635
|
+
// Set password for protected Bot
|
|
636
|
+
bot.setPassword('MyP4');
|
|
637
|
+
return bot.press();
|
|
638
|
+
})
|
|
639
|
+
.then(() => {
|
|
640
|
+
console.log("Password-protected Bot pressed successfully");
|
|
641
|
+
})
|
|
642
|
+
.catch((error) => {
|
|
643
|
+
console.error(error);
|
|
644
|
+
});
|
|
645
|
+
```
|
|
646
|
+
|
|
647
|
+
**Notes:**
|
|
648
|
+
- Password encryption uses CRC32 checksums for secure command transmission
|
|
649
|
+
- All control methods (press, turnOn, turnOff, up, down) automatically use encrypted commands when password is set
|
|
650
|
+
- Password is stored in memory only and must be set each time the application starts
|
|
651
|
+
- If the wrong password is configured, BLE commands will fail silently (Bot will not respond)
|
|
652
|
+
|
|
590
653
|
### `WoCurtain` Object
|
|
591
654
|
|
|
592
655
|
The `WoCurtain` object represents a Curtain, which is created through the discovery process triggered by the [`switchBotBLE.discover()`](#discover-method) method.
|
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,40 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this project will be documented in this file. This project uses [Semantic Versioning](https://semver.org/)
|
|
4
4
|
|
|
5
|
+
## [Unreleased]
|
|
6
|
+
|
|
7
|
+
### Features
|
|
8
|
+
|
|
9
|
+
* **Bot Password Protection**: Added BLE password support for Bot (WoHand) devices
|
|
10
|
+
* Password encryption using CRC32 checksums
|
|
11
|
+
* Password validation (4 alphanumeric characters, case-sensitive)
|
|
12
|
+
* Methods: `setPassword()`, `clearPassword()`, `hasPassword()`
|
|
13
|
+
* Automatic encrypted command execution when password is set
|
|
14
|
+
* Example: `examples/bot-password.js`
|
|
15
|
+
* Based on [homebridge-switchbot PR #1337](https://github.com/OpenWonderLabs/homebridge-switchbot/pull/1337)
|
|
16
|
+
|
|
17
|
+
* **Advanced Resilience Features**: Enterprise-grade reliability enhancements
|
|
18
|
+
* Retry logic with exponential backoff and jitter (RetryExecutor)
|
|
19
|
+
* Circuit breaker pattern to prevent cascading failures (CLOSED/OPEN/HALF_OPEN states)
|
|
20
|
+
* Connection intelligence tracking per-device success/failure rates
|
|
21
|
+
* Custom fallback handler system with built-in logging, metrics, and alerting handlers
|
|
22
|
+
* Intelligent connection selection based on historical performance
|
|
23
|
+
|
|
24
|
+
### Documentation
|
|
25
|
+
|
|
26
|
+
* Added password protection section to [BLE.md](BLE.md)
|
|
27
|
+
* Updated [README.md](README.md) with password examples
|
|
28
|
+
* Created comprehensive password protection example
|
|
29
|
+
* Updated examples index with bot-password.js
|
|
30
|
+
|
|
31
|
+
### Tests
|
|
32
|
+
|
|
33
|
+
* Added 14 comprehensive password protection tests
|
|
34
|
+
* All 54 tests passing (up from 40 in v4.0.0)
|
|
35
|
+
* Validation of CRC32 encryption, command building, and response parsing
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
5
39
|
## [4.0.0](https://github.com/OpenWonderLabs/node-switchbot/compare/v3.6.6...v4.0.0) (2026-03-03)
|
|
6
40
|
|
|
7
41
|
### ⚠ BREAKING CHANGES
|
package/README.md
CHANGED
|
@@ -66,6 +66,12 @@ await bot.turnOn()
|
|
|
66
66
|
await bot.turnOff()
|
|
67
67
|
await bot.press()
|
|
68
68
|
|
|
69
|
+
// Bot with Password Protection (BLE only)
|
|
70
|
+
const protectedBot = new WoHand({ id: 'YOUR_BOT_ID', password: 'A1b2' })
|
|
71
|
+
await protectedBot.setPassword('A1b2') // Set 4-char alphanumeric password
|
|
72
|
+
await protectedBot.press() // Commands are automatically encrypted
|
|
73
|
+
await protectedBot.clearPassword() // Remove password protection
|
|
74
|
+
|
|
69
75
|
// Curtain - Position control
|
|
70
76
|
await curtain.open()
|
|
71
77
|
await curtain.close()
|
|
@@ -1,9 +1,25 @@
|
|
|
1
|
+
import type { OpenAPIClient } from '../api.js';
|
|
2
|
+
import type { BLEConnection } from '../ble.js';
|
|
1
3
|
import type { BotCommands, BotStatus } from '../types/device.js';
|
|
4
|
+
import type { DeviceInfo } from '../types/index.js';
|
|
2
5
|
import { SwitchBotDevice } from './base.js';
|
|
3
6
|
/**
|
|
4
7
|
* Bot (WoHand) Device - Press or switch button device
|
|
8
|
+
* Supports optional BLE password protection
|
|
5
9
|
*/
|
|
6
10
|
export declare class WoHand extends SwitchBotDevice implements BotCommands {
|
|
11
|
+
private password?;
|
|
12
|
+
constructor(info: DeviceInfo, options?: {
|
|
13
|
+
bleConnection?: BLEConnection;
|
|
14
|
+
apiClient?: OpenAPIClient;
|
|
15
|
+
enableFallback?: boolean;
|
|
16
|
+
preferredConnection?: 'ble' | 'api';
|
|
17
|
+
enableConnectionIntelligence?: boolean;
|
|
18
|
+
enableCircuitBreaker?: boolean;
|
|
19
|
+
enableRetry?: boolean;
|
|
20
|
+
password?: string;
|
|
21
|
+
logLevel?: number;
|
|
22
|
+
});
|
|
7
23
|
/**
|
|
8
24
|
* Turn on (switch mode)
|
|
9
25
|
*/
|
|
@@ -16,6 +32,25 @@ export declare class WoHand extends SwitchBotDevice implements BotCommands {
|
|
|
16
32
|
* Press (press mode)
|
|
17
33
|
*/
|
|
18
34
|
press(): Promise<boolean>;
|
|
35
|
+
/**
|
|
36
|
+
* Execute password-protected Bot command
|
|
37
|
+
* @param action - Bot action to perform
|
|
38
|
+
* @returns True if command was successful
|
|
39
|
+
*/
|
|
40
|
+
private executePasswordCommand;
|
|
41
|
+
/**
|
|
42
|
+
* Set or update Bot password
|
|
43
|
+
* @param password - 4-character alphanumeric password (case-sensitive)
|
|
44
|
+
*/
|
|
45
|
+
setPassword(password: string): void;
|
|
46
|
+
/**
|
|
47
|
+
* Clear Bot password
|
|
48
|
+
*/
|
|
49
|
+
clearPassword(): void;
|
|
50
|
+
/**
|
|
51
|
+
* Check if password is configured
|
|
52
|
+
*/
|
|
53
|
+
hasPassword(): boolean;
|
|
19
54
|
/**
|
|
20
55
|
* Get device status
|
|
21
56
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wo-hand.d.ts","sourceRoot":"","sources":["../../src/devices/wo-hand.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;
|
|
1
|
+
{"version":3,"file":"wo-hand.d.ts","sourceRoot":"","sources":["../../src/devices/wo-hand.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AAC9C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AAC9C,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAChE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAInD,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAE3C;;;GAGG;AACH,qBAAa,MAAO,SAAQ,eAAgB,YAAW,WAAW;IAChE,OAAO,CAAC,QAAQ,CAAC,CAAQ;gBAGvB,IAAI,EAAE,UAAU,EAChB,OAAO,GAAE;QACP,aAAa,CAAC,EAAE,aAAa,CAAA;QAC7B,SAAS,CAAC,EAAE,aAAa,CAAA;QACzB,cAAc,CAAC,EAAE,OAAO,CAAA;QACxB,mBAAmB,CAAC,EAAE,KAAK,GAAG,KAAK,CAAA;QACnC,4BAA4B,CAAC,EAAE,OAAO,CAAA;QACtC,oBAAoB,CAAC,EAAE,OAAO,CAAA;QAC9B,WAAW,CAAC,EAAE,OAAO,CAAA;QACrB,QAAQ,CAAC,EAAE,MAAM,CAAA;QACjB,QAAQ,CAAC,EAAE,MAAM,CAAA;KACb;IAiBR;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC;IAchC;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC;IAcjC;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,OAAO,CAAC;IAc/B;;;;OAIG;YACW,sBAAsB;IAkCpC;;;OAGG;IACH,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAMnC;;OAEG;IACH,aAAa,IAAI,IAAI;IAKrB;;OAEG;IACH,WAAW,IAAI,OAAO;IAItB;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,SAAS,CAAC;CAmCtC"}
|
package/dist/devices/wo-hand.js
CHANGED
|
@@ -3,15 +3,38 @@
|
|
|
3
3
|
* devices/wo-hand.ts: SwitchBot v4.0.0 - Bot (WoHand) Device
|
|
4
4
|
*/
|
|
5
5
|
import { DEVICE_COMMANDS } from '../settings.js';
|
|
6
|
+
import { BOT_BLE_ACTIONS, buildBotBleCommand, parseBotBleResponse, validateBotPassword } from '../utils/index.js';
|
|
6
7
|
import { SwitchBotDevice } from './base.js';
|
|
7
8
|
/**
|
|
8
9
|
* Bot (WoHand) Device - Press or switch button device
|
|
10
|
+
* Supports optional BLE password protection
|
|
9
11
|
*/
|
|
10
12
|
export class WoHand extends SwitchBotDevice {
|
|
13
|
+
password;
|
|
14
|
+
constructor(info, options = {}) {
|
|
15
|
+
super(info, options);
|
|
16
|
+
// Validate and store password if provided
|
|
17
|
+
if (options.password) {
|
|
18
|
+
try {
|
|
19
|
+
validateBotPassword(options.password);
|
|
20
|
+
this.password = options.password;
|
|
21
|
+
this.logger.info('Bot password configured');
|
|
22
|
+
}
|
|
23
|
+
catch (error) {
|
|
24
|
+
this.logger.error('Invalid password format', error);
|
|
25
|
+
throw error;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
11
29
|
/**
|
|
12
30
|
* Turn on (switch mode)
|
|
13
31
|
*/
|
|
14
32
|
async turnOn() {
|
|
33
|
+
// Use password-protected command if password is configured
|
|
34
|
+
if (this.password) {
|
|
35
|
+
return await this.executePasswordCommand(BOT_BLE_ACTIONS.TURN_ON);
|
|
36
|
+
}
|
|
37
|
+
// Standard command
|
|
15
38
|
const result = await this.sendCommand(DEVICE_COMMANDS.BOT.TURN_ON, 'turnOn');
|
|
16
39
|
return result.success;
|
|
17
40
|
}
|
|
@@ -19,6 +42,11 @@ export class WoHand extends SwitchBotDevice {
|
|
|
19
42
|
* Turn off (switch mode)
|
|
20
43
|
*/
|
|
21
44
|
async turnOff() {
|
|
45
|
+
// Use password-protected command if password is configured
|
|
46
|
+
if (this.password) {
|
|
47
|
+
return await this.executePasswordCommand(BOT_BLE_ACTIONS.TURN_OFF);
|
|
48
|
+
}
|
|
49
|
+
// Standard command
|
|
22
50
|
const result = await this.sendCommand(DEVICE_COMMANDS.BOT.TURN_OFF, 'turnOff');
|
|
23
51
|
return result.success;
|
|
24
52
|
}
|
|
@@ -26,9 +54,68 @@ export class WoHand extends SwitchBotDevice {
|
|
|
26
54
|
* Press (press mode)
|
|
27
55
|
*/
|
|
28
56
|
async press() {
|
|
57
|
+
// Use password-protected command if password is configured
|
|
58
|
+
if (this.password) {
|
|
59
|
+
return await this.executePasswordCommand(BOT_BLE_ACTIONS.PRESS);
|
|
60
|
+
}
|
|
61
|
+
// Standard command
|
|
29
62
|
const result = await this.sendCommand(DEVICE_COMMANDS.BOT.PRESS, 'press');
|
|
30
63
|
return result.success;
|
|
31
64
|
}
|
|
65
|
+
/**
|
|
66
|
+
* Execute password-protected Bot command
|
|
67
|
+
* @param action - Bot action to perform
|
|
68
|
+
* @returns True if command was successful
|
|
69
|
+
*/
|
|
70
|
+
async executePasswordCommand(action) {
|
|
71
|
+
if (!this.password) {
|
|
72
|
+
throw new Error('Password not configured for this Bot device');
|
|
73
|
+
}
|
|
74
|
+
if (!this.hasBLE()) {
|
|
75
|
+
throw new Error('BLE not available - password-protected commands require BLE connection');
|
|
76
|
+
}
|
|
77
|
+
try {
|
|
78
|
+
// Build encrypted command
|
|
79
|
+
const command = buildBotBleCommand(action, this.password);
|
|
80
|
+
this.logger.debug('Sending password-protected command', { action });
|
|
81
|
+
// Send command via BLE
|
|
82
|
+
await this.bleConnection.write(this.info.mac, command);
|
|
83
|
+
// Read response
|
|
84
|
+
const responseBuffer = await this.bleConnection.read(this.info.mac);
|
|
85
|
+
// Parse and validate response
|
|
86
|
+
parseBotBleResponse(responseBuffer);
|
|
87
|
+
this.info.activeConnection = 'ble';
|
|
88
|
+
this.emit('command', { type: 'ble', success: true, encrypted: true });
|
|
89
|
+
return true;
|
|
90
|
+
}
|
|
91
|
+
catch (error) {
|
|
92
|
+
this.logger.error('Password-protected command failed', error);
|
|
93
|
+
this.emit('error', { type: 'ble', error, encrypted: true });
|
|
94
|
+
throw error;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Set or update Bot password
|
|
99
|
+
* @param password - 4-character alphanumeric password (case-sensitive)
|
|
100
|
+
*/
|
|
101
|
+
setPassword(password) {
|
|
102
|
+
validateBotPassword(password);
|
|
103
|
+
this.password = password;
|
|
104
|
+
this.logger.info('Bot password updated');
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Clear Bot password
|
|
108
|
+
*/
|
|
109
|
+
clearPassword() {
|
|
110
|
+
this.password = undefined;
|
|
111
|
+
this.logger.info('Bot password cleared');
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Check if password is configured
|
|
115
|
+
*/
|
|
116
|
+
hasPassword() {
|
|
117
|
+
return !!this.password;
|
|
118
|
+
}
|
|
32
119
|
/**
|
|
33
120
|
* Get device status
|
|
34
121
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wo-hand.js","sourceRoot":"","sources":["../../src/devices/wo-hand.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"wo-hand.js","sourceRoot":"","sources":["../../src/devices/wo-hand.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAChD,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AACjH,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAE3C;;;GAGG;AACH,MAAM,OAAO,MAAO,SAAQ,eAAe;IACjC,QAAQ,CAAS;IAEzB,YACE,IAAgB,EAChB,UAUI,EAAE;QAEN,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;QAEpB,0CAA0C;QAC1C,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;YACrB,IAAI,CAAC;gBACH,mBAAmB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;gBACrC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAA;gBAChC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAA;YAC7C,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAA;gBACnD,MAAM,KAAK,CAAA;YACb,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM;QACV,2DAA2D;QAC3D,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,OAAO,MAAM,IAAI,CAAC,sBAAsB,CAAC,eAAe,CAAC,OAAO,CAAC,CAAA;QACnE,CAAC;QAED,mBAAmB;QACnB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CACnC,eAAe,CAAC,GAAG,CAAC,OAAO,EAC3B,QAAQ,CACT,CAAA;QACD,OAAO,MAAM,CAAC,OAAO,CAAA;IACvB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO;QACX,2DAA2D;QAC3D,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,OAAO,MAAM,IAAI,CAAC,sBAAsB,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAA;QACpE,CAAC;QAED,mBAAmB;QACnB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CACnC,eAAe,CAAC,GAAG,CAAC,QAAQ,EAC5B,SAAS,CACV,CAAA;QACD,OAAO,MAAM,CAAC,OAAO,CAAA;IACvB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK;QACT,2DAA2D;QAC3D,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,OAAO,MAAM,IAAI,CAAC,sBAAsB,CAAC,eAAe,CAAC,KAAK,CAAC,CAAA;QACjE,CAAC;QAED,mBAAmB;QACnB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CACnC,eAAe,CAAC,GAAG,CAAC,KAAK,EACzB,OAAO,CACR,CAAA;QACD,OAAO,MAAM,CAAC,OAAO,CAAA;IACvB,CAAC;IAED;;;;OAIG;IACK,KAAK,CAAC,sBAAsB,CAAC,MAA0B;QAC7D,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAA;QAChE,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,wEAAwE,CAAC,CAAA;QAC3F,CAAC;QAED,IAAI,CAAC;YACH,0BAA0B;YAC1B,MAAM,OAAO,GAAG,kBAAkB,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAA;YACzD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,oCAAoC,EAAE,EAAE,MAAM,EAAE,CAAC,CAAA;YAEnE,uBAAuB;YACvB,MAAM,IAAI,CAAC,aAAc,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAI,EAAE,OAAO,CAAC,CAAA;YAExD,gBAAgB;YAChB,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,aAAc,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAI,CAAC,CAAA;YAErE,8BAA8B;YAC9B,mBAAmB,CAAC,cAAc,CAAC,CAAA;YAEnC,IAAI,CAAC,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAA;YAClC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;YAErE,OAAO,IAAI,CAAA;QACb,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,mCAAmC,EAAE,KAAK,CAAC,CAAA;YAC7D,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;YAC3D,MAAM,KAAK,CAAA;QACb,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,WAAW,CAAC,QAAgB;QAC1B,mBAAmB,CAAC,QAAQ,CAAC,CAAA;QAC7B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;QACxB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAA;IAC1C,CAAC;IAED;;OAEG;IACH,aAAa;QACX,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAA;QACzB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAA;IAC1C,CAAC;IAED;;OAEG;IACH,WAAW;QACT,OAAO,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAA;IACxB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,SAAS;QACb,IAAI,CAAC;YACH,6BAA6B;YAC7B,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;gBAClB,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE,CAAA;gBAC3C,OAAO;oBACL,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE;oBACtB,cAAc,EAAE,KAAK;oBACrB,KAAK,EAAE,SAAS,CAAC,KAAK,IAAI,KAAK;oBAC/B,IAAI,EAAE,SAAS,CAAC,IAAI,IAAI,OAAO;oBAC/B,OAAO,EAAE,SAAS,CAAC,OAAO;oBAC1B,OAAO,EAAE,SAAS,CAAC,OAAO;oBAC1B,SAAS,EAAE,IAAI,IAAI,EAAE;iBACtB,CAAA;YACH,CAAC;YAED,kBAAkB;YAClB,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;gBAClB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE,CAAA;gBACzC,OAAO;oBACL,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE;oBACtB,cAAc,EAAE,KAAK;oBACrB,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK;oBACnC,IAAI,EAAE,OAAO,CAAC,IAAI;oBAClB,OAAO,EAAE,OAAO,CAAC,OAAO;oBACxB,SAAS,EAAE,IAAI,IAAI,EAAE;iBACtB,CAAA;YACH,CAAC;YAED,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAA;QACnD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,sBAAsB,EAAE,KAAK,CAAC,CAAA;YAChD,MAAM,KAAK,CAAA;QACb,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { Buffer } from 'node:buffer';
|
|
2
|
+
/**
|
|
3
|
+
* Bot BLE action types
|
|
4
|
+
*/
|
|
5
|
+
export type BotBleAction = 0x00 | 0x01 | 0x02;
|
|
6
|
+
/**
|
|
7
|
+
* Valid Bot BLE action values
|
|
8
|
+
*/
|
|
9
|
+
export declare const BOT_BLE_ACTIONS: {
|
|
10
|
+
PRESS: BotBleAction;
|
|
11
|
+
TURN_ON: BotBleAction;
|
|
12
|
+
TURN_OFF: BotBleAction;
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* Validate Bot BLE password format
|
|
16
|
+
* Password must be exactly 4 alphanumeric characters (case-sensitive)
|
|
17
|
+
* @param password - Password to validate
|
|
18
|
+
* @throws Error if password format is invalid
|
|
19
|
+
*/
|
|
20
|
+
export declare function validateBotPassword(password: string): void;
|
|
21
|
+
/**
|
|
22
|
+
* Build Bot BLE command buffer
|
|
23
|
+
* @param action - Bot action (0x00=press, 0x01=on, 0x02=off)
|
|
24
|
+
* @param password - Optional 4-character password for encrypted commands
|
|
25
|
+
* @returns Command buffer ready to send via BLE
|
|
26
|
+
* @throws Error if action or password format is invalid
|
|
27
|
+
*/
|
|
28
|
+
export declare function buildBotBleCommand(action: BotBleAction, password?: string): Buffer;
|
|
29
|
+
/**
|
|
30
|
+
* Parse Bot BLE response buffer
|
|
31
|
+
* @param response - Response buffer from Bot device
|
|
32
|
+
* @returns True if command was successful
|
|
33
|
+
* @throws Error if response indicates failure
|
|
34
|
+
*/
|
|
35
|
+
export declare function parseBotBleResponse(response: Buffer): boolean;
|
|
36
|
+
//# sourceMappingURL=bot-ble.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bot-ble.d.ts","sourceRoot":"","sources":["../../src/utils/bot-ble.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAmCpC;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAA;AAE7C;;GAEG;AACH,eAAO,MAAM,eAAe;WACX,YAAY;aACV,YAAY;cACX,YAAY;CAC/B,CAAA;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAM1D;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,YAAY,EACpB,QAAQ,CAAC,EAAE,MAAM,GAChB,MAAM,CAgCR;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAc7D"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
/* Copyright(C) 2024-2026, donavanbecker (https://github.com/donavanbecker). All rights reserved.
|
|
2
|
+
*
|
|
3
|
+
* utils/bot-ble.ts: SwitchBot v4.0.0 - Bot BLE Password Helpers
|
|
4
|
+
*/
|
|
5
|
+
import { Buffer } from 'node:buffer';
|
|
6
|
+
/**
|
|
7
|
+
* CRC32 polynomial for password encryption
|
|
8
|
+
*/
|
|
9
|
+
const CRC32_POLYNOMIAL = 0xEDB88320;
|
|
10
|
+
/**
|
|
11
|
+
* Precomputed CRC32 lookup table
|
|
12
|
+
*/
|
|
13
|
+
const CRC32_TABLE = new Uint32Array(256);
|
|
14
|
+
// Initialize CRC32 table
|
|
15
|
+
for (let i = 0; i < 256; i++) {
|
|
16
|
+
let crc = i;
|
|
17
|
+
for (let j = 0; j < 8; j++) {
|
|
18
|
+
crc = (crc & 1) !== 0 ? (crc >>> 1) ^ CRC32_POLYNOMIAL : (crc >>> 1);
|
|
19
|
+
}
|
|
20
|
+
CRC32_TABLE[i] = crc >>> 0;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Calculate CRC32 checksum of a string
|
|
24
|
+
* @param input - String to calculate CRC32 for
|
|
25
|
+
* @returns CRC32 checksum as unsigned 32-bit integer
|
|
26
|
+
*/
|
|
27
|
+
function calculateCRC32(input) {
|
|
28
|
+
let crc = 0xFFFFFFFF;
|
|
29
|
+
for (let i = 0; i < input.length; i++) {
|
|
30
|
+
const byte = input.charCodeAt(i);
|
|
31
|
+
crc = (crc >>> 8) ^ CRC32_TABLE[(crc ^ byte) & 0xFF];
|
|
32
|
+
}
|
|
33
|
+
return (crc ^ 0xFFFFFFFF) >>> 0;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Valid Bot BLE action values
|
|
37
|
+
*/
|
|
38
|
+
export const BOT_BLE_ACTIONS = {
|
|
39
|
+
PRESS: 0x00,
|
|
40
|
+
TURN_ON: 0x01,
|
|
41
|
+
TURN_OFF: 0x02,
|
|
42
|
+
};
|
|
43
|
+
/**
|
|
44
|
+
* Validate Bot BLE password format
|
|
45
|
+
* Password must be exactly 4 alphanumeric characters (case-sensitive)
|
|
46
|
+
* @param password - Password to validate
|
|
47
|
+
* @throws Error if password format is invalid
|
|
48
|
+
*/
|
|
49
|
+
export function validateBotPassword(password) {
|
|
50
|
+
if (!/^[A-Z0-9]{4}$/i.test(password)) {
|
|
51
|
+
throw new Error('Invalid Bot password. Password must be exactly 4 alphanumeric characters (case-sensitive).');
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Build Bot BLE command buffer
|
|
56
|
+
* @param action - Bot action (0x00=press, 0x01=on, 0x02=off)
|
|
57
|
+
* @param password - Optional 4-character password for encrypted commands
|
|
58
|
+
* @returns Command buffer ready to send via BLE
|
|
59
|
+
* @throws Error if action or password format is invalid
|
|
60
|
+
*/
|
|
61
|
+
export function buildBotBleCommand(action, password) {
|
|
62
|
+
// Validate action
|
|
63
|
+
const validActions = [
|
|
64
|
+
BOT_BLE_ACTIONS.PRESS,
|
|
65
|
+
BOT_BLE_ACTIONS.TURN_ON,
|
|
66
|
+
BOT_BLE_ACTIONS.TURN_OFF,
|
|
67
|
+
];
|
|
68
|
+
if (!validActions.includes(action)) {
|
|
69
|
+
throw new Error(`Invalid Bot BLE action: 0x${action.toString(16)}. Expected 0x00, 0x01, or 0x02.`);
|
|
70
|
+
}
|
|
71
|
+
// Plain command (no password)
|
|
72
|
+
if (!password) {
|
|
73
|
+
return Buffer.from([0x57, 0x01, action]);
|
|
74
|
+
}
|
|
75
|
+
// Encrypted command (with password)
|
|
76
|
+
validateBotPassword(password);
|
|
77
|
+
const crc = calculateCRC32(password);
|
|
78
|
+
// Command format: [0x57, 0x11, CRC32_BE (4 bytes), action]
|
|
79
|
+
return Buffer.from([
|
|
80
|
+
0x57,
|
|
81
|
+
0x11,
|
|
82
|
+
(crc >>> 24) & 0xFF, // MSB first (big-endian)
|
|
83
|
+
(crc >>> 16) & 0xFF,
|
|
84
|
+
(crc >>> 8) & 0xFF,
|
|
85
|
+
crc & 0xFF, // LSB
|
|
86
|
+
action,
|
|
87
|
+
]);
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Parse Bot BLE response buffer
|
|
91
|
+
* @param response - Response buffer from Bot device
|
|
92
|
+
* @returns True if command was successful
|
|
93
|
+
* @throws Error if response indicates failure
|
|
94
|
+
*/
|
|
95
|
+
export function parseBotBleResponse(response) {
|
|
96
|
+
if (response.length !== 3) {
|
|
97
|
+
throw new Error(`Invalid Bot response length: ${response.length}, expected 3`);
|
|
98
|
+
}
|
|
99
|
+
const statusCode = response.readUInt8(0);
|
|
100
|
+
// Success codes: 0x01 (success) or 0x05 (success, encrypted)
|
|
101
|
+
if (statusCode === 0x01 || statusCode === 0x05) {
|
|
102
|
+
return true;
|
|
103
|
+
}
|
|
104
|
+
// Error response
|
|
105
|
+
throw new Error(`Bot command failed with status: 0x${response.toString('hex')}`);
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=bot-ble.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bot-ble.js","sourceRoot":"","sources":["../../src/utils/bot-ble.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/index.d.ts
CHANGED
|
@@ -94,6 +94,7 @@ export declare function debounce<T extends (...args: any[]) => any>(fn: T, delay
|
|
|
94
94
|
* Throttle function
|
|
95
95
|
*/
|
|
96
96
|
export declare function throttle<T extends (...args: any[]) => any>(fn: T, limitMs: number): (...args: Parameters<T>) => void;
|
|
97
|
+
export { BOT_BLE_ACTIONS, type BotBleAction, buildBotBleCommand, parseBotBleResponse, validateBotPassword, } from './bot-ble.js';
|
|
97
98
|
export { CircuitBreaker, type CircuitBreakerConfig, CircuitBreakerState, type CircuitBreakerStats } from './circuit-breaker.js';
|
|
98
99
|
export { type ConnectionStats, ConnectionTracker } from './connection-tracker.js';
|
|
99
100
|
export { createAlertHandler, createLoggingFallbackHandler, createMetricsCollectionHandler, type FallbackEvent, type FallbackHandler, FallbackHandlerManager, type FallbackHandlerOptions, } from './fallback-handler.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/index.js
CHANGED
|
@@ -203,6 +203,8 @@ export function throttle(fn, limitMs) {
|
|
|
203
203
|
}
|
|
204
204
|
};
|
|
205
205
|
}
|
|
206
|
+
// Export Bot BLE password utilities
|
|
207
|
+
export { BOT_BLE_ACTIONS, buildBotBleCommand, parseBotBleResponse, validateBotPassword, } from './bot-ble.js';
|
|
206
208
|
export { CircuitBreaker, CircuitBreakerState } from './circuit-breaker.js';
|
|
207
209
|
export { ConnectionTracker } from './connection-tracker.js';
|
|
208
210
|
export { createAlertHandler, createLoggingFallbackHandler, createMetricsCollectionHandler, FallbackHandlerManager, } from './fallback-handler.js';
|
package/dist/utils/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"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"}
|
package/docs/assets/hierarchy.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
window.hierarchyData = "
|
|
1
|
+
window.hierarchyData = "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"
|