@switchbot/homebridge-switchbot 5.1.0-beta.9 → 5.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/.github/copilot-instructions.md +0 -63
- package/.github/scripts/normalize-changelog-header.cjs +1 -1
- package/.github/scripts/npm-version-script-esm-auto.js +1 -1
- package/.github/scripts/resolve-version-bump-esm.js +1 -1
- package/CHANGELOG.md +10 -9
- package/MIGRATION.md +0 -5
- package/README.md +0 -25
- package/config.schema.json +0 -11
- package/dist/{Platform.HAP.d.ts → SwitchBotHAPPlatform.d.ts} +16 -2
- package/dist/SwitchBotHAPPlatform.d.ts.map +1 -0
- package/dist/{Platform.HAP.js → SwitchBotHAPPlatform.js} +111 -40
- package/dist/SwitchBotHAPPlatform.js.map +1 -0
- package/dist/{Platform.Matter.d.ts → SwitchBotMatterPlatform.d.ts} +2 -4
- package/dist/SwitchBotMatterPlatform.d.ts.map +1 -0
- package/dist/{Platform.Matter.js → SwitchBotMatterPlatform.js} +6 -62
- package/dist/SwitchBotMatterPlatform.js.map +1 -0
- package/dist/deviceFactory.d.ts.map +1 -1
- package/dist/deviceFactory.js +5 -15
- package/dist/deviceFactory.js.map +1 -1
- package/dist/devices/genericDevice.d.ts +63 -5
- package/dist/devices/genericDevice.d.ts.map +1 -1
- package/dist/devices/genericDevice.js +251 -11
- package/dist/devices/genericDevice.js.map +1 -1
- package/dist/homebridge-ui/endpoints/config.d.ts.map +1 -1
- package/dist/homebridge-ui/endpoints/config.js +2 -9
- package/dist/homebridge-ui/endpoints/config.js.map +1 -1
- package/dist/homebridge-ui/homebridge-ui/endpoints/config.js +2 -9
- package/dist/homebridge-ui/homebridge-ui/endpoints/config.js.map +1 -1
- package/dist/homebridge-ui/homebridge-ui/utils/config-parser.js +0 -8
- package/dist/homebridge-ui/homebridge-ui/utils/config-parser.js.map +1 -1
- package/dist/homebridge-ui/public/css/styles.css +1 -61
- package/dist/homebridge-ui/public/index.html +2 -61
- package/dist/homebridge-ui/public/js/advanced-settings.d.ts.map +1 -1
- package/dist/homebridge-ui/public/js/advanced-settings.js +3 -4
- package/dist/homebridge-ui/public/js/advanced-settings.js.map +1 -1
- package/dist/homebridge-ui/public/js/advanced-settings.ts +3 -4
- package/dist/homebridge-ui/public/js/api.d.ts +0 -16
- package/dist/homebridge-ui/public/js/api.d.ts.map +1 -1
- package/dist/homebridge-ui/public/js/api.js +0 -48
- package/dist/homebridge-ui/public/js/api.js.map +1 -1
- package/dist/homebridge-ui/public/js/api.ts +1 -61
- package/dist/homebridge-ui/public/js/app.js +115 -267
- package/dist/homebridge-ui/public/js/app.js.map +4 -4
- package/dist/homebridge-ui/public/js/app.ts +4 -47
- package/dist/homebridge-ui/public/js/credentials.d.ts.map +1 -1
- package/dist/homebridge-ui/public/js/credentials.js +5 -11
- package/dist/homebridge-ui/public/js/credentials.js.map +1 -1
- package/dist/homebridge-ui/public/js/credentials.ts +5 -11
- package/dist/homebridge-ui/public/js/devices.d.ts.map +1 -1
- package/dist/homebridge-ui/public/js/devices.js +0 -6
- package/dist/homebridge-ui/public/js/devices.js.map +1 -1
- package/dist/homebridge-ui/public/js/devices.ts +0 -6
- package/dist/homebridge-ui/public/js/modals.d.ts +0 -1
- package/dist/homebridge-ui/public/js/modals.d.ts.map +1 -1
- package/dist/homebridge-ui/public/js/modals.js +0 -53
- package/dist/homebridge-ui/public/js/modals.js.map +1 -1
- package/dist/homebridge-ui/public/js/modals.ts +0 -58
- package/dist/homebridge-ui/public/js/render.d.ts.map +1 -1
- package/dist/homebridge-ui/public/js/render.js +1 -2
- package/dist/homebridge-ui/public/js/render.js.map +1 -1
- package/dist/homebridge-ui/public/js/render.ts +1 -2
- package/dist/homebridge-ui/settings.js.map +1 -1
- package/dist/homebridge-ui/utils/config-parser.d.ts +0 -8
- package/dist/homebridge-ui/utils/config-parser.d.ts.map +1 -1
- package/dist/homebridge-ui/utils/config-parser.js +0 -8
- package/dist/homebridge-ui/utils/config-parser.js.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/settings.d.ts +0 -11
- package/dist/settings.d.ts.map +1 -1
- package/dist/settings.js.map +1 -1
- package/dist/utils.d.ts +0 -5
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +0 -27
- package/dist/utils.js.map +1 -1
- package/docs/assets/highlight.css +15 -15
- package/docs/index.html +5 -22
- package/docs/variables/default.html +1 -1
- package/package.json +15 -9
- package/scripts/build-ui.js +0 -30
- package/src/{Platform.HAP.ts → SwitchBotHAPPlatform.ts} +112 -39
- package/src/{Platform.Matter.ts → SwitchBotMatterPlatform.ts} +8 -63
- package/src/deviceFactory.ts +5 -14
- package/src/devices/genericDevice.ts +271 -12
- package/src/homebridge-ui/endpoints/config.ts +2 -10
- package/src/homebridge-ui/public/css/styles.css +1 -61
- package/src/homebridge-ui/public/index.html +0 -59
- package/src/homebridge-ui/public/js/advanced-settings.ts +3 -4
- package/src/homebridge-ui/public/js/api.ts +1 -61
- package/src/homebridge-ui/public/js/app.ts +4 -47
- package/src/homebridge-ui/public/js/credentials.ts +5 -11
- package/src/homebridge-ui/public/js/devices.ts +0 -6
- package/src/homebridge-ui/public/js/modals.ts +0 -58
- package/src/homebridge-ui/public/js/render.ts +1 -2
- package/src/homebridge-ui/utils/config-parser.ts +0 -9
- package/src/index.ts +2 -2
- package/src/settings.ts +0 -12
- package/src/utils.ts +0 -31
- package/test/device/deviceFactory.spec.ts +9 -0
- package/test/device/getstate-cache.spec.ts +62 -0
- package/test/device/getstate-returns-status.spec.ts +89 -0
- package/test/device/water-detector-battery.spec.ts +81 -0
- package/test/device/water-detector-leak.spec.ts +43 -0
- package/test/hap-push-updates.spec.ts +150 -0
- package/test/platform/accessory-restore.spec.ts +2 -2
- package/test/platform/matter-childbridge.spec.ts +1 -1
- package/test/platform/matter-integration.spec.ts +1 -51
- package/test/platform/platform-edge.spec.ts +2 -2
- package/test/platform/platform.integration.spec.ts +1 -1
- package/test/utils/utils.spec.ts +0 -15
- package/.github/npm-version-script-esm.js +0 -97
- package/dist/Platform.HAP.d.ts.map +0 -1
- package/dist/Platform.HAP.js.map +0 -1
- package/dist/Platform.Matter.d.ts.map +0 -1
- package/dist/Platform.Matter.js.map +0 -1
- package/dist/homebridge-ui/homebridge-ui/utils/v4-detection.js +0 -23
- package/dist/homebridge-ui/homebridge-ui/utils/v4-detection.js.map +0 -1
- package/dist/homebridge-ui/public/js/legacy-view.d.ts +0 -3
- package/dist/homebridge-ui/public/js/legacy-view.d.ts.map +0 -1
- package/dist/homebridge-ui/public/js/legacy-view.js +0 -45
- package/dist/homebridge-ui/public/js/legacy-view.js.map +0 -1
- package/dist/homebridge-ui/public/js/legacy-view.ts +0 -107
- package/dist/homebridge-ui/utils/v4-detection.d.ts +0 -12
- package/dist/homebridge-ui/utils/v4-detection.d.ts.map +0 -1
- package/dist/homebridge-ui/utils/v4-detection.js +0 -23
- package/dist/homebridge-ui/utils/v4-detection.js.map +0 -1
- package/src/homebridge-ui/public/js/legacy-view.js +0 -45
- package/src/homebridge-ui/public/js/legacy-view.ts +0 -107
- package/src/homebridge-ui/utils/v4-detection.ts +0 -23
- package/test/homebridge-ui/config-parser.spec.ts +0 -61
|
@@ -1,66 +1,3 @@
|
|
|
1
|
-
# Matter and HomeKit Integration
|
|
2
|
-
|
|
3
|
-
## Matter Implementation
|
|
4
|
-
This plugin supports dual-mode device registration:
|
|
5
|
-
- **HAP mode** (HomeKit Accessory Protocol): Base implementation via `SwitchBotPlatform` class
|
|
6
|
-
- **Matter mode**: Extended via `SwitchBotMatterPlatform` class that overrides device registration and processing
|
|
7
|
-
|
|
8
|
-
When Homebridge's Matter API is available, `SwitchBotMatterPlatform` registers accessories with both HAP and Matter simultaneously. If the Matter API is not available, the plugin transparently falls back to HAP-only mode.
|
|
9
|
-
|
|
10
|
-
## Matter Device Type Mapping
|
|
11
|
-
All Matter device types use `api.matter.deviceTypes.*` objects from the homebridge-matter API. Device mapping aligns with the authoritative [homebridge-matter wiki](https://github.com/homebridge-plugins/homebridge-matter/wiki/Introduction) and Section 7 Sensors for sensor mapping.
|
|
12
|
-
|
|
13
|
-
| Device Type | HAP Service | Matter DeviceType | Matter Clusters |
|
|
14
|
-
|---------------------|-----------------------------|-----------------------|-------------------------|
|
|
15
|
-
| Bot | Switch | `OnOffSwitch` | onOff |
|
|
16
|
-
| Curtain | WindowCovering | `WindowCovering` | windowCovering |
|
|
17
|
-
| Contact Sensor | ContactSensor | `ContactSensor` | contactSensor |
|
|
18
|
-
| Motion Sensor | MotionSensor | `OccupancySensor` | occupancySensing |
|
|
19
|
-
| Meter/Hygrometer | HumiditySensor, TemperatureSensor | `TemperatureSensor`, `HumiditySensor` | temperatureMeasurement, relativeHumidityMeasurement |
|
|
20
|
-
| Lock | LockMechanism | `DoorLock` | doorLock |
|
|
21
|
-
| Light/Fan/Outlet | Lightbulb, Fan, Outlet | `DimmableLight`, `OnOffLight`, `Fan` | onOff, levelControl |
|
|
22
|
-
| IR Devices | Various (see IR mapping) | (varies) | (varies) |
|
|
23
|
-
|
|
24
|
-
## Authoritative Matter References
|
|
25
|
-
|
|
26
|
-
1. https://matter-js.github.io/docs/index.html
|
|
27
|
-
2. https://github.com/homebridge-plugins/homebridge-matter: Official Homebridge Matter plugin repository with extensive documentation and examples
|
|
28
|
-
- For all Matter cluster, attribute, and device type specifications, use the official homebridge-matter wiki:
|
|
29
|
-
- [Introduction](https://github.com/homebridge-plugins/homebridge-matter/wiki/Introduction)
|
|
30
|
-
- [Core Concepts](https://github.com/homebridge-plugins/homebridge-matter/wiki/Core-Concepts)
|
|
31
|
-
- [Getting Started](https://github.com/homebridge-plugins/homebridge-matter/wiki/Getting-Started)
|
|
32
|
-
- [State Management](https://github.com/homebridge-plugins/homebridge-matter/wiki/State-Management)
|
|
33
|
-
- [Monitoring External Changes](https://github.com/homebridge-plugins/homebridge-matter/wiki/Monitoring-External-Changes)
|
|
34
|
-
- [Best Practices](https://github.com/homebridge-plugins/homebridge-matter/wiki/Best-Practices)
|
|
35
|
-
- [Advanced Patterns](https://github.com/homebridge-plugins/homebridge-matter/wiki/Advanced-Patterns)
|
|
36
|
-
- [API Reference](https://github.com/homebridge-plugins/homebridge-matter/wiki/API-Reference)
|
|
37
|
-
- [Matter Types](https://github.com/homebridge-plugins/homebridge-matter/wiki/Matter-Types)
|
|
38
|
-
- [Value Conversions](https://github.com/homebridge-plugins/homebridge-matter/wiki/Value-Conversions)
|
|
39
|
-
- **Device References:**
|
|
40
|
-
- [Lighting Devices (§4)](https://github.com/homebridge-plugins/homebridge-matter/wiki/Section-4-Lighting) — DimmableLight, OnOffLight
|
|
41
|
-
- [Switches (§6)](https://github.com/homebridge-plugins/homebridge-matter/wiki/Section-6-Switches) — OnOffSwitch
|
|
42
|
-
- [Sensors (§7)](https://github.com/homebridge-plugins/homebridge-matter/wiki/Section-7-Sensors) — OccupancySensor, ContactSensor
|
|
43
|
-
- [Closure Devices (§8)](https://github.com/homebridge-plugins/homebridge-matter/wiki/Section-8-Closure) — WindowCovering
|
|
44
|
-
|
|
45
|
-
# Changelog Format Requirements
|
|
46
|
-
|
|
47
|
-
When generating a changelog release entry, always use this exact structure:
|
|
48
|
-
|
|
49
|
-
1. Release header with compare URL using `compare/tag/vX.Y.Z`:
|
|
50
|
-
|
|
51
|
-
```md
|
|
52
|
-
## [X.Y.Z](https://github.com/OpenWonderLabs/homebridge-switchbot/compare/tag/vX.Y.Z) (YYYY-MM-DD)
|
|
53
|
-
```
|
|
54
|
-
|
|
55
|
-
2. Standard sections as needed (`### Bug Fixes`, `### Enhancements`, `### Documentation`, etc.).
|
|
56
|
-
|
|
57
|
-
3. End each release entry with a full changelog comparison URL to the previous version:
|
|
58
|
-
|
|
59
|
-
```md
|
|
60
|
-
**Full Changelog**: https://github.com/OpenWonderLabs/homebridge-switchbot/compare/vX.Y.(Z-1)...vX.Y.Z
|
|
61
|
-
```
|
|
62
|
-
|
|
63
|
-
Do not omit either URL line when creating a new release entry.
|
|
64
1
|
# Homebridge SwitchBot Plugin Development Guide
|
|
65
2
|
|
|
66
3
|
Always reference these instructions first and fallback to search or bash commands only when you encounter unexpected information that does not match the info here.
|
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,13 @@
|
|
|
1
|
+
## [5.0.4](https://github.com/OpenWonderLabs/homebridge-switchbot/compare/v5.0.3...v5.0.4) (2026-07-10)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Bug Fixes
|
|
5
|
+
|
|
6
|
+
* restore Battery service for water detector ([#1387](https://github.com/OpenWonderLabs/homebridge-switchbot/issues/1387)) ([1c5caaa](https://github.com/OpenWonderLabs/homebridge-switchbot/commit/1c5caaa3753532e0fbccc21f2480c7150fa622de)), closes [#1357](https://github.com/OpenWonderLabs/homebridge-switchbot/issues/1357)
|
|
7
|
+
* water detector device mapping, HAP cache deserialization crash, and slow leak reads ([#1386](https://github.com/OpenWonderLabs/homebridge-switchbot/issues/1386)) ([7550e9b](https://github.com/OpenWonderLabs/homebridge-switchbot/commit/7550e9b861b987336e08ae33772470dbd9b4e210))
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
|
|
1
11
|
## [5.0.2](https://github.com/OpenWonderLabs/homebridge-switchbot/compare/v4.3.14...v5.0.2) (2026-04-26)
|
|
2
12
|
|
|
3
13
|
|
|
@@ -20,15 +30,6 @@
|
|
|
20
30
|
|
|
21
31
|
All notable changes to this project will be documented in this file. This project uses [Semantic Versioning](https://semver.org/)
|
|
22
32
|
|
|
23
|
-
## [5.1.0](https://github.com/OpenWonderLabs/homebridge-switchbot/compare/v5.0.0...v5.1.0) (2026-04-XX)
|
|
24
|
-
|
|
25
|
-
### What's Changed
|
|
26
|
-
- Add per-device `externalPublishProtocol` option (`none`/`hap`/`matter`) to publish selected devices as external accessories for HAP or Matter.
|
|
27
|
-
- Add Homebridge UI support to configure **Publish as External Device** when adding or editing devices.
|
|
28
|
-
- Add migration/readme documentation for external publishing behavior and defaults.
|
|
29
|
-
|
|
30
|
-
**Full Changelog**: https://github.com/OpenWonderLabs/homebridge-switchbot/compare/v5.0.0...v5.1.0
|
|
31
|
-
|
|
32
33
|
## [5.0.0](https://github.com/OpenWonderLabs/homebridge-switchbot/compare/v4.3.1...v5.0.0) (2026-04-10)
|
|
33
34
|
|
|
34
35
|
### ⚠️ Breaking Changes
|
package/MIGRATION.md
CHANGED
|
@@ -9,16 +9,11 @@ This document highlights important changes and recommended actions before upgrad
|
|
|
9
9
|
2. Configuration keys
|
|
10
10
|
- `enableMatter` (boolean) — enable Matter child-bridge registration.
|
|
11
11
|
- `preferMatter` (boolean) — prefer Matter for devices that support Matter descriptors; HAP fallback still available.
|
|
12
|
-
- `externalPublishProtocol` (per-device string) — controls per-device external publishing mode. Valid values: `none` (default), `hap`, `matter`.
|
|
13
12
|
- `openApiToken` + `openApiSecret` (string) — both are required for OpenAPI discovery/calls for cloud-reachable devices.
|
|
14
13
|
- `perDeviceMaxRetries`, `requestTimeout`, `maxRetries` — network retry/timing options for OpenAPI fallback.
|
|
15
14
|
|
|
16
15
|
- `writeDebounceMs` (number, milliseconds, default 100) — global write coalescing debounce window. Commands sent to the same device within this window are coalesced (last-write-wins) to reduce duplicate network/API commands. Set to `0` to disable coalescing if you require immediate, per-command delivery.
|
|
17
16
|
|
|
18
|
-
Upgrade guidance:
|
|
19
|
-
- Existing configs do not need changes; devices default to `externalPublishProtocol: "none"`.
|
|
20
|
-
- Set `hap` or `matter` only for devices you explicitly want published as external accessories.
|
|
21
|
-
|
|
22
17
|
3. Hybrid client
|
|
23
18
|
- The plugin dynamically imports `node-switchbot` when available and uses OpenAPI fallback when both `openApiToken` and `openApiSecret` are configured.
|
|
24
19
|
- If you rely on BLE-only operation, ensure devices and the host have BLE available.
|
package/README.md
CHANGED
|
@@ -45,31 +45,6 @@ Click **Save Advanced Settings** to apply changes. These settings match the opti
|
|
|
45
45
|
|
|
46
46
|
<!-- Optionally add a screenshot here -->
|
|
47
47
|
|
|
48
|
-
### Per-Device External Publishing (HAP or Matter)
|
|
49
|
-
|
|
50
|
-
Each device now supports an `externalPublishProtocol` option to control whether it is published as an external accessory.
|
|
51
|
-
|
|
52
|
-
- `none` (default): normal platform registration behavior.
|
|
53
|
-
- `hap`: publish this device as a HAP external accessory.
|
|
54
|
-
- `matter`: publish this device as a Matter external accessory.
|
|
55
|
-
|
|
56
|
-
Behavior notes:
|
|
57
|
-
|
|
58
|
-
- This is configured per device in the Homebridge UI under **Publish as External Device** when adding or editing a device.
|
|
59
|
-
- If the selected external publish API is not available on your Homebridge runtime, the plugin falls back to normal platform registration for that device.
|
|
60
|
-
- Use `hap` for HAP-focused setups and `matter` for Matter-focused setups; leave as `none` unless you specifically want external accessory publishing.
|
|
61
|
-
|
|
62
|
-
Example device config excerpt:
|
|
63
|
-
|
|
64
|
-
```json
|
|
65
|
-
{
|
|
66
|
-
"deviceId": "E7F8A1B2C3D4",
|
|
67
|
-
"configDeviceName": "Bedroom Bot",
|
|
68
|
-
"configDeviceType": "Bot",
|
|
69
|
-
"externalPublishProtocol": "hap"
|
|
70
|
-
}
|
|
71
|
-
```
|
|
72
|
-
|
|
73
48
|
|
|
74
49
|
- ### If using OpenAPI Connection
|
|
75
50
|
1. Download SwitchBot App on App Store or Google Play Store
|
package/config.schema.json
CHANGED
|
@@ -172,17 +172,6 @@
|
|
|
172
172
|
],
|
|
173
173
|
"default": "auto"
|
|
174
174
|
},
|
|
175
|
-
"externalPublishProtocol": {
|
|
176
|
-
"type": "string",
|
|
177
|
-
"title": "Publish as External Device",
|
|
178
|
-
"description": "Publish this device as an external accessory for a specific protocol. Select HAP or Matter to expose it externally, or None to keep normal platform publishing.",
|
|
179
|
-
"enum": [
|
|
180
|
-
"none",
|
|
181
|
-
"hap",
|
|
182
|
-
"matter"
|
|
183
|
-
],
|
|
184
|
-
"default": "none"
|
|
185
|
-
},
|
|
186
175
|
"room": {
|
|
187
176
|
"type": "string",
|
|
188
177
|
"title": "Room",
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { API, Logger, PlatformConfig } from 'homebridge';
|
|
2
1
|
import type { SwitchBotPluginConfig } from './settings.js';
|
|
2
|
+
import type { API, Logger, PlatformConfig } from 'homebridge';
|
|
3
3
|
/**
|
|
4
4
|
* Homebridge platform class for SwitchBot HAP (HomeKit Accessory Protocol) integration.
|
|
5
5
|
* Handles device discovery, registration, polling, and accessory lifecycle for HAP-enabled SwitchBot devices.
|
|
@@ -35,6 +35,8 @@ export declare class SwitchBotHAPPlatform {
|
|
|
35
35
|
private lastConfigHash;
|
|
36
36
|
/** Interval for periodic config reload */
|
|
37
37
|
private configReloadInterval;
|
|
38
|
+
/** Readable characteristics per device id, so a poll can push new values */
|
|
39
|
+
private hapPushTargets;
|
|
38
40
|
/** Timers for per-device OpenAPI polling */
|
|
39
41
|
private openApiPollTimers;
|
|
40
42
|
/** Timer for batched OpenAPI polling */
|
|
@@ -115,6 +117,18 @@ export declare class SwitchBotHAPPlatform {
|
|
|
115
117
|
*
|
|
116
118
|
* @returns {void}
|
|
117
119
|
*/
|
|
120
|
+
/**
|
|
121
|
+
* Read every registered characteristic for a device and notify HomeKit.
|
|
122
|
+
*
|
|
123
|
+
* The device state is cached and de-duplicated, so one call costs a single
|
|
124
|
+
* API request however many characteristics the accessory has.
|
|
125
|
+
*/
|
|
126
|
+
private _pushDeviceState;
|
|
127
|
+
/**
|
|
128
|
+
* Push once now, so the Home app shows a value without waiting for the first
|
|
129
|
+
* poll interval.
|
|
130
|
+
*/
|
|
131
|
+
private primeHapValues;
|
|
118
132
|
private _setupOpenApiPolling;
|
|
119
133
|
/**
|
|
120
134
|
* Called by Homebridge to restore cached HAP accessories on startup.
|
|
@@ -130,4 +144,4 @@ export declare class SwitchBotHAPPlatform {
|
|
|
130
144
|
configureMatterAccessory?(accessory: any): void;
|
|
131
145
|
}
|
|
132
146
|
export default SwitchBotHAPPlatform;
|
|
133
|
-
//# sourceMappingURL=
|
|
147
|
+
//# sourceMappingURL=SwitchBotHAPPlatform.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SwitchBotHAPPlatform.d.ts","sourceRoot":"","sources":["../src/SwitchBotHAPPlatform.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAA;AAC1D,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAO7D;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,oBAAoB;IAC/B,8BAA8B;IAC9B,GAAG,EAAE,GAAG,GAAG,SAAS,CAAA;IACpB,iCAAiC;IACjC,GAAG,EAAE,MAAM,CAAA;IACX,2BAA2B;IAC3B,MAAM,EAAE,qBAAqB,CAAA;IAC7B,mCAAmC;IACnC,OAAO,EAAE,GAAG,EAAE,CAAK;IACnB,gDAAgD;IAChD,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAC7B,sDAAsD;IACtD,OAAO,CAAC,cAAc,CAAa;IACnC,0CAA0C;IAC1C,OAAO,CAAC,oBAAoB,CAA8B;IAC1D,4EAA4E;IAC5E,OAAO,CAAC,cAAc,CAA0H;IAEhJ,4CAA4C;IAC5C,OAAO,CAAC,iBAAiB,CAAyC;IAClE,wCAAwC;IACxC,OAAO,CAAC,iBAAiB,CAA8B;IACvD,2CAA2C;IAC3C,OAAO,CAAC,oBAAoB,CAAI;IAChC,yDAAyD;IACzD,OAAO,CAAC,gBAAgB,CAAI;IAE5B;;;;;OAKG;gBACS,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,GAAG,CAAC,EAAE,GAAG;IA2C1D;;;;;;OAMG;IACG,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IA8DlC;;;;;;;;;;;;;;;;;;;;OAoBG;YACW,sBAAsB;IAiKpC;;;OAGG;IACH,mBAAmB,IAAI,MAAM;IAI7B;;;OAGG;IACH,mBAAmB,IAAI,IAAI;IAS3B;;;OAGG;IACH,OAAO,CAAC,aAAa;IAUrB;;;;;;OAMG;YACW,qBAAqB;IAiCnC;;;;OAIG;IACH,QAAQ,IAAI,IAAI;IAQhB;;;;;OAKG;IACH;;;;;OAKG;YACW,gBAAgB;IA8B9B;;;OAGG;IACH,OAAO,CAAC,cAAc;IAMtB,OAAO,CAAC,oBAAoB;IAoI5B;;;;OAIG;IACG,kBAAkB,CAAC,SAAS,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAUvD;;;;OAIG;IACH,wBAAwB,CAAC,CAAC,SAAS,EAAE,GAAG,GAAG,IAAI;CAShD;AAED,eAAe,oBAAoB,CAAA"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { createDevice } from './deviceFactory.js';
|
|
2
2
|
import { PLATFORM_NAME, PLUGIN_NAME } from './settings.js';
|
|
3
3
|
import { SwitchBotClient } from './switchbotClient.js';
|
|
4
|
-
import { normalizeTypeForMatter
|
|
4
|
+
import { normalizeTypeForMatter } from './utils.js';
|
|
5
5
|
/**
|
|
6
6
|
* Homebridge platform class for SwitchBot HAP (HomeKit Accessory Protocol) integration.
|
|
7
7
|
* Handles device discovery, registration, polling, and accessory lifecycle for HAP-enabled SwitchBot devices.
|
|
@@ -37,6 +37,8 @@ export class SwitchBotHAPPlatform {
|
|
|
37
37
|
lastConfigHash = '';
|
|
38
38
|
/** Interval for periodic config reload */
|
|
39
39
|
configReloadInterval = null;
|
|
40
|
+
/** Readable characteristics per device id, so a poll can push new values */
|
|
41
|
+
hapPushTargets = new Map();
|
|
40
42
|
/** Timers for per-device OpenAPI polling */
|
|
41
43
|
openApiPollTimers = new Map();
|
|
42
44
|
/** Timer for batched OpenAPI polling */
|
|
@@ -145,13 +147,12 @@ export class SwitchBotHAPPlatform {
|
|
|
145
147
|
_raw: raw,
|
|
146
148
|
};
|
|
147
149
|
const type = normalizeTypeForMatter(d.type);
|
|
148
|
-
const externalPublishProtocol = resolveExternalPublishProtocol(raw);
|
|
149
150
|
const deviceOpts = { id: d.id, type, name: d.name, encryptionKey: d.encryptionKey, keyId: d.keyId, log: this.log };
|
|
150
151
|
this.log.debug(`[HAP/Debug] Device options for ${d.name ?? d.id}:`, JSON.stringify(deviceOpts, null, 2));
|
|
151
152
|
try {
|
|
152
153
|
const created = await createDevice(deviceOpts, this.config, false);
|
|
153
154
|
this.devices.push(created);
|
|
154
|
-
createdDevices.push({ created, d, type
|
|
155
|
+
createdDevices.push({ created, d, type });
|
|
155
156
|
}
|
|
156
157
|
catch (e) {
|
|
157
158
|
this.log.error(`Failed to create HAP device ${d.id}:`, e instanceof Error ? e.stack || e.message : e);
|
|
@@ -159,6 +160,7 @@ export class SwitchBotHAPPlatform {
|
|
|
159
160
|
}
|
|
160
161
|
// Register HAP accessories after all devices are created for symmetry with Matter platform
|
|
161
162
|
await this.registerHAPAccessories(createdDevices);
|
|
163
|
+
this.primeHapValues();
|
|
162
164
|
this.lastConfigHash = newHash;
|
|
163
165
|
}
|
|
164
166
|
/**
|
|
@@ -183,14 +185,13 @@ export class SwitchBotHAPPlatform {
|
|
|
183
185
|
* If the Homebridge HAP API is not available, registration is skipped and a log message is emitted.
|
|
184
186
|
*/
|
|
185
187
|
async registerHAPAccessories(createdDevices) {
|
|
186
|
-
if (!this.api || !this.api.hap || typeof this.api.
|
|
188
|
+
if (!this.api || !this.api.hap || typeof this.api.registerPlatformAccessories !== 'function') {
|
|
187
189
|
this.log.info('HAP API not available to register accessories');
|
|
188
190
|
return;
|
|
189
191
|
}
|
|
190
192
|
const hap = this.api.hap;
|
|
191
193
|
const accessoriesToRegister = [];
|
|
192
|
-
const
|
|
193
|
-
for (const { created, d, type, externalPublishProtocol } of createdDevices) {
|
|
194
|
+
for (const { created, d, type } of createdDevices) {
|
|
194
195
|
try {
|
|
195
196
|
const uuid = hap.uuid.generate(`${d.id}`);
|
|
196
197
|
let accessory = this.accessories.get(uuid);
|
|
@@ -208,9 +209,7 @@ export class SwitchBotHAPPlatform {
|
|
|
208
209
|
}
|
|
209
210
|
}
|
|
210
211
|
if (!accessory) {
|
|
211
|
-
|
|
212
|
-
const PlatformAccessory = this.api.hap?.PlatformAccessory || this.api.platformAccessory;
|
|
213
|
-
accessory = new PlatformAccessory(d.name || type, uuid);
|
|
212
|
+
accessory = new this.api.platformAccessory(d.name || type, uuid);
|
|
214
213
|
try {
|
|
215
214
|
accessory.context = accessory.context || {};
|
|
216
215
|
accessory.context.deviceId = d.id;
|
|
@@ -219,12 +218,7 @@ export class SwitchBotHAPPlatform {
|
|
|
219
218
|
catch (e) {
|
|
220
219
|
// ignore context failures
|
|
221
220
|
}
|
|
222
|
-
|
|
223
|
-
externalAccessoriesToPublish.push(accessory);
|
|
224
|
-
}
|
|
225
|
-
else {
|
|
226
|
-
accessoriesToRegister.push(accessory);
|
|
227
|
-
}
|
|
221
|
+
accessoriesToRegister.push(accessory);
|
|
228
222
|
this.accessories.set(uuid, accessory);
|
|
229
223
|
}
|
|
230
224
|
else {
|
|
@@ -246,12 +240,40 @@ export class SwitchBotHAPPlatform {
|
|
|
246
240
|
// ignore
|
|
247
241
|
}
|
|
248
242
|
}
|
|
243
|
+
// Ensure AccessoryInformation service exists - required for cache deserialization.
|
|
244
|
+
// Without it, hap-nodejs _sideloadServices crashes on next start.
|
|
245
|
+
try {
|
|
246
|
+
const InfoService = hap.Service.AccessoryInformation;
|
|
247
|
+
if (InfoService) {
|
|
248
|
+
const info = accessory.getService(InfoService) || accessory.addService(InfoService);
|
|
249
|
+
const accDescForInfo = await created.createAccessory?.(this.api).catch?.(() => undefined);
|
|
250
|
+
const manufacturer = (accDescForInfo && accDescForInfo.manufacturer) || 'SwitchBot';
|
|
251
|
+
const model = (accDescForInfo && accDescForInfo.model) || type || 'SwitchBot Device';
|
|
252
|
+
const serial = (accDescForInfo && accDescForInfo.serialNumber) || d.id;
|
|
253
|
+
const firmware = (accDescForInfo && accDescForInfo.firmwareRevision) || '1.0.0';
|
|
254
|
+
try {
|
|
255
|
+
info.setCharacteristic(hap.Characteristic.Manufacturer, manufacturer);
|
|
256
|
+
info.setCharacteristic(hap.Characteristic.Model, model);
|
|
257
|
+
info.setCharacteristic(hap.Characteristic.SerialNumber, serial);
|
|
258
|
+
info.setCharacteristic(hap.Characteristic.FirmwareRevision, firmware);
|
|
259
|
+
}
|
|
260
|
+
catch (e) {
|
|
261
|
+
// ignore
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
catch (e) {
|
|
266
|
+
// ignore
|
|
267
|
+
}
|
|
249
268
|
// Add basic service descriptor from device (symmetrical to Matter: remove stale services/chars)
|
|
250
269
|
const accDesc = await created.createAccessory?.(this.api);
|
|
251
270
|
if (accDesc && accDesc.services) {
|
|
252
271
|
const serviceTypes = accDesc.services.map((s) => s.type);
|
|
253
272
|
for (const existingService of accessory.services.slice()) {
|
|
254
|
-
|
|
273
|
+
// Never remove AccessoryInformation - required for cache deserialization
|
|
274
|
+
if (existingService.constructor && existingService.constructor.name
|
|
275
|
+
&& existingService.constructor.name !== 'AccessoryInformation'
|
|
276
|
+
&& !serviceTypes.includes(existingService.constructor.name)) {
|
|
255
277
|
accessory.removeService(existingService);
|
|
256
278
|
}
|
|
257
279
|
}
|
|
@@ -283,9 +305,32 @@ export class SwitchBotHAPPlatform {
|
|
|
283
305
|
}
|
|
284
306
|
if (getterSetter && typeof getterSetter.get === 'function') {
|
|
285
307
|
service.getCharacteristic(Characteristic).onGet(getterSetter.get);
|
|
308
|
+
// Remember it so a poll can push the new value.
|
|
309
|
+
const target = this.hapPushTargets.get(d.id) ?? { device: created?.instance ?? created, entries: [] };
|
|
310
|
+
target.entries.push({ service, characteristic: Characteristic, get: getterSetter.get });
|
|
311
|
+
this.hapPushTargets.set(d.id, target);
|
|
286
312
|
}
|
|
287
313
|
if (getterSetter && typeof getterSetter.set === 'function') {
|
|
288
|
-
service.getCharacteristic(Characteristic).onSet(
|
|
314
|
+
service.getCharacteristic(Characteristic).onSet(async (value) => {
|
|
315
|
+
await getterSetter.set(value);
|
|
316
|
+
const refreshAfterSet = Array.isArray(getterSetter.refreshAfterSet) ? getterSetter.refreshAfterSet : [];
|
|
317
|
+
for (const refreshCharName of refreshAfterSet) {
|
|
318
|
+
const refreshGetterSetter = (s.characteristics || {})[refreshCharName];
|
|
319
|
+
if (!refreshGetterSetter || typeof refreshGetterSetter.get !== 'function') {
|
|
320
|
+
continue;
|
|
321
|
+
}
|
|
322
|
+
const RefreshCharacteristic = hap.Characteristic[refreshCharName];
|
|
323
|
+
if (!RefreshCharacteristic) {
|
|
324
|
+
continue;
|
|
325
|
+
}
|
|
326
|
+
try {
|
|
327
|
+
service.getCharacteristic(RefreshCharacteristic).updateValue(await refreshGetterSetter.get());
|
|
328
|
+
}
|
|
329
|
+
catch (e) {
|
|
330
|
+
this.log.debug?.(`Failed to refresh ${refreshCharName} after setting ${charName}`, e);
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
});
|
|
289
334
|
}
|
|
290
335
|
}
|
|
291
336
|
}
|
|
@@ -308,27 +353,6 @@ export class SwitchBotHAPPlatform {
|
|
|
308
353
|
else {
|
|
309
354
|
this.log.info('No HAP accessories to register');
|
|
310
355
|
}
|
|
311
|
-
if (externalAccessoriesToPublish.length > 0) {
|
|
312
|
-
if (typeof this.api.publishExternalAccessories === 'function') {
|
|
313
|
-
try {
|
|
314
|
-
this.api.publishExternalAccessories(PLUGIN_NAME, externalAccessoriesToPublish);
|
|
315
|
-
this.log.info(`Published ${externalAccessoriesToPublish.length} HAP external accessory(ies) with Homebridge`);
|
|
316
|
-
}
|
|
317
|
-
catch (e) {
|
|
318
|
-
this.log.warn('Failed to publish HAP external accessories', e);
|
|
319
|
-
}
|
|
320
|
-
}
|
|
321
|
-
else {
|
|
322
|
-
this.log.warn('HAP external accessory publishing API not available; falling back to regular platform registration');
|
|
323
|
-
try {
|
|
324
|
-
this.api.registerPlatformAccessories(PLUGIN_NAME, PLATFORM_NAME, externalAccessoriesToPublish);
|
|
325
|
-
this.log.info(`Registered ${externalAccessoriesToPublish.length} HAP accessory(ies) as fallback (external publishing unavailable)`);
|
|
326
|
-
}
|
|
327
|
-
catch (e) {
|
|
328
|
-
this.log.warn('Failed to register fallback HAP accessories', e);
|
|
329
|
-
}
|
|
330
|
-
}
|
|
331
|
-
}
|
|
332
356
|
}
|
|
333
357
|
/**
|
|
334
358
|
* Returns the timestamp (ms) of the last OpenAPI daily counter reset.
|
|
@@ -361,7 +385,6 @@ export class SwitchBotHAPPlatform {
|
|
|
361
385
|
id: d.deviceId ?? d.id,
|
|
362
386
|
type: d.configDeviceType ?? d.type,
|
|
363
387
|
name: d.configDeviceName ?? d.name,
|
|
364
|
-
externalPublishProtocol: resolveExternalPublishProtocol(d),
|
|
365
388
|
})));
|
|
366
389
|
}
|
|
367
390
|
/**
|
|
@@ -422,6 +445,52 @@ export class SwitchBotHAPPlatform {
|
|
|
422
445
|
*
|
|
423
446
|
* @returns {void}
|
|
424
447
|
*/
|
|
448
|
+
/**
|
|
449
|
+
* Read every registered characteristic for a device and notify HomeKit.
|
|
450
|
+
*
|
|
451
|
+
* The device state is cached and de-duplicated, so one call costs a single
|
|
452
|
+
* API request however many characteristics the accessory has.
|
|
453
|
+
*/
|
|
454
|
+
async _pushDeviceState(id) {
|
|
455
|
+
const target = this.hapPushTargets.get(id);
|
|
456
|
+
if (!target?.entries.length) {
|
|
457
|
+
return;
|
|
458
|
+
}
|
|
459
|
+
// Read once first. A device that could not be read must push nothing: the
|
|
460
|
+
// getters report a fallback for a missing field, and pushing that would
|
|
461
|
+
// replace a good value in HomeKit with one that looks like a measurement.
|
|
462
|
+
try {
|
|
463
|
+
const state = await target.device?.getState?.();
|
|
464
|
+
if (state?.unreadable) {
|
|
465
|
+
this.log.debug?.(`Skipped pushing updates for ${id}: device not readable`);
|
|
466
|
+
return;
|
|
467
|
+
}
|
|
468
|
+
}
|
|
469
|
+
catch (e) {
|
|
470
|
+
this.log.debug?.(`Skipped pushing updates for ${id}:`, e?.message);
|
|
471
|
+
return;
|
|
472
|
+
}
|
|
473
|
+
for (const { service, characteristic, get } of target.entries) {
|
|
474
|
+
try {
|
|
475
|
+
const value = await get();
|
|
476
|
+
if (value !== undefined && value !== null) {
|
|
477
|
+
service.getCharacteristic(characteristic).updateValue(value);
|
|
478
|
+
}
|
|
479
|
+
}
|
|
480
|
+
catch (e) {
|
|
481
|
+
this.log.debug?.(`Failed to push an update for ${id}:`, e?.message);
|
|
482
|
+
}
|
|
483
|
+
}
|
|
484
|
+
}
|
|
485
|
+
/**
|
|
486
|
+
* Push once now, so the Home app shows a value without waiting for the first
|
|
487
|
+
* poll interval.
|
|
488
|
+
*/
|
|
489
|
+
primeHapValues() {
|
|
490
|
+
for (const id of this.hapPushTargets.keys()) {
|
|
491
|
+
void this._pushDeviceState(id);
|
|
492
|
+
}
|
|
493
|
+
}
|
|
425
494
|
_setupOpenApiPolling() {
|
|
426
495
|
// Clear any existing timers
|
|
427
496
|
for (const t of this.openApiPollTimers.values())
|
|
@@ -495,6 +564,7 @@ export class SwitchBotHAPPlatform {
|
|
|
495
564
|
if (client && typeof client.getDevice === 'function') {
|
|
496
565
|
await client.getDevice(id);
|
|
497
566
|
this.openApiRequestsToday++;
|
|
567
|
+
await this._pushDeviceState(id);
|
|
498
568
|
this.log.debug(`[OpenAPI] Polled device ${id} (per-device interval ${perDeviceRate}s) [${this.openApiRequestsToday}/${dailyLimit}]`);
|
|
499
569
|
}
|
|
500
570
|
}
|
|
@@ -534,6 +604,7 @@ export class SwitchBotHAPPlatform {
|
|
|
534
604
|
try {
|
|
535
605
|
await client.getDevice(dev.deviceId ?? dev.id);
|
|
536
606
|
this.openApiRequestsToday++;
|
|
607
|
+
await this._pushDeviceState(dev.deviceId ?? dev.id);
|
|
537
608
|
this.log.debug(`[OpenAPI] Batched poll device ${dev.deviceId ?? dev.id} [${this.openApiRequestsToday}/${dailyLimit}]`);
|
|
538
609
|
}
|
|
539
610
|
catch (e) {
|
|
@@ -583,4 +654,4 @@ export class SwitchBotHAPPlatform {
|
|
|
583
654
|
}
|
|
584
655
|
}
|
|
585
656
|
export default SwitchBotHAPPlatform;
|
|
586
|
-
//# sourceMappingURL=
|
|
657
|
+
//# sourceMappingURL=SwitchBotHAPPlatform.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SwitchBotHAPPlatform.js","sourceRoot":"","sources":["../src/SwitchBotHAPPlatform.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { API, Logger, PlatformConfig } from 'homebridge';
|
|
2
1
|
import type { SwitchBotPluginConfig } from './settings.js';
|
|
2
|
+
import type { API, Logger, PlatformConfig } from 'homebridge';
|
|
3
3
|
/**
|
|
4
4
|
* Homebridge platform class for SwitchBot Matter integration.
|
|
5
5
|
* Handles device discovery, registration, polling, and accessory lifecycle for Matter-enabled SwitchBot devices.
|
|
@@ -87,9 +87,7 @@ export declare class SwitchBotMatterPlatform {
|
|
|
87
87
|
type: string;
|
|
88
88
|
useMatter: boolean;
|
|
89
89
|
matterAvailable: boolean;
|
|
90
|
-
externalPublishProtocol: 'none' | 'hap' | 'matter';
|
|
91
90
|
}[]): Promise<void>;
|
|
92
|
-
private publishMatterExternalAccessories;
|
|
93
91
|
/**
|
|
94
92
|
* Returns the timestamp (ms) of the last OpenAPI daily counter reset.
|
|
95
93
|
* @returns {number} Timestamp in ms
|
|
@@ -140,4 +138,4 @@ export declare class SwitchBotMatterPlatform {
|
|
|
140
138
|
configureMatterAccessory(accessory: any): void;
|
|
141
139
|
}
|
|
142
140
|
export default SwitchBotMatterPlatform;
|
|
143
|
-
//# sourceMappingURL=
|
|
141
|
+
//# sourceMappingURL=SwitchBotMatterPlatform.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SwitchBotMatterPlatform.d.ts","sourceRoot":"","sources":["../src/SwitchBotMatterPlatform.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAA;AAC1D,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAO7D;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,uBAAuB;IAClC,8BAA8B;IAC9B,GAAG,EAAE,GAAG,GAAG,SAAS,CAAA;IACpB,iCAAiC;IACjC,GAAG,EAAE,MAAM,CAAA;IACX,2BAA2B;IAC3B,MAAM,EAAE,qBAAqB,CAAA;IAC7B,mCAAmC;IACnC,OAAO,EAAE,GAAG,EAAE,CAAK;IACnB,gDAAgD;IAChD,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAC7B,sDAAsD;IACtD,OAAO,CAAC,cAAc,CAAa;IACnC,0CAA0C;IAC1C,OAAO,CAAC,oBAAoB,CAA8B;IAC1D,4CAA4C;IAC5C,OAAO,CAAC,iBAAiB,CAAyC;IAClE,wCAAwC;IACxC,OAAO,CAAC,iBAAiB,CAA8B;IACvD,2CAA2C;IAC3C,OAAO,CAAC,oBAAoB,CAAI;IAChC,yDAAyD;IACzD,OAAO,CAAC,gBAAgB,CAAI;IAE5B;;;;;OAKG;gBACS,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,GAAG,CAAC,EAAE,GAAG;IA2C1D;;;;;OAKG;IACG,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IAkDlC;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACG,yBAAyB,CAAC,cAAc,EAAE;QAAE,OAAO,EAAE,GAAG,CAAC;QAAC,CAAC,EAAE,GAAG,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,OAAO,CAAC;QAAC,eAAe,EAAE,OAAO,CAAA;KAAE,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAqGtJ;;;OAGG;IACH,mBAAmB,IAAI,MAAM;IAI7B;;;OAGG;IACH,mBAAmB,IAAI,IAAI;IAS3B;;;OAGG;IACH,OAAO,CAAC,aAAa;IAUrB;;;;;;OAMG;YACW,qBAAqB;IAiCnC;;;;OAIG;IACH,QAAQ,IAAI,IAAI;IAQhB;;;;;OAKG;IACH,OAAO,CAAC,oBAAoB;IAkI5B;;;;OAIG;IACG,kBAAkB,CAAC,SAAS,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAUvD;;;;OAIG;IACH,wBAAwB,CAAC,SAAS,EAAE,GAAG,GAAG,IAAI;CAS/C;AAED,eAAe,uBAAuB,CAAA"}
|