@switchbot/openapi-cli 1.0.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 +278 -0
- package/dist/api/client.d.ts +12 -0
- package/dist/api/client.js +95 -0
- package/dist/api/client.js.map +1 -0
- package/dist/auth.d.ts +1 -0
- package/dist/auth.js +21 -0
- package/dist/auth.js.map +1 -0
- package/dist/commands/completion.d.ts +2 -0
- package/dist/commands/completion.js +259 -0
- package/dist/commands/completion.js.map +1 -0
- package/dist/commands/config.d.ts +2 -0
- package/dist/commands/config.js +37 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/devices.d.ts +2 -0
- package/dist/commands/devices.js +402 -0
- package/dist/commands/devices.js.map +1 -0
- package/dist/commands/scenes.d.ts +2 -0
- package/dist/commands/scenes.js +57 -0
- package/dist/commands/scenes.js.map +1 -0
- package/dist/commands/webhook.d.ts +2 -0
- package/dist/commands/webhook.js +167 -0
- package/dist/commands/webhook.js.map +1 -0
- package/dist/config.d.ts +7 -0
- package/dist/config.js +77 -0
- package/dist/config.js.map +1 -0
- package/dist/devices/catalog.d.ts +21 -0
- package/dist/devices/catalog.js +391 -0
- package/dist/devices/catalog.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +85 -0
- package/dist/index.js.map +1 -0
- package/dist/utils/flags.d.ts +10 -0
- package/dist/utils/flags.js +34 -0
- package/dist/utils/flags.js.map +1 -0
- package/dist/utils/output.d.ts +5 -0
- package/dist/utils/output.js +78 -0
- package/dist/utils/output.js.map +1 -0
- package/package.json +62 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webhook.js","sourceRoot":"","sources":["../../src/commands/webhook.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
ADDED
package/dist/config.js
ADDED
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import fs from 'node:fs';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import os from 'node:os';
|
|
4
|
+
import { getConfigPath } from './utils/flags.js';
|
|
5
|
+
function configFilePath() {
|
|
6
|
+
const override = getConfigPath();
|
|
7
|
+
if (override)
|
|
8
|
+
return path.resolve(override);
|
|
9
|
+
return path.join(os.homedir(), '.switchbot', 'config.json');
|
|
10
|
+
}
|
|
11
|
+
export function loadConfig() {
|
|
12
|
+
// Environment variables take priority (useful for CI)
|
|
13
|
+
const envToken = process.env.SWITCHBOT_TOKEN;
|
|
14
|
+
const envSecret = process.env.SWITCHBOT_SECRET;
|
|
15
|
+
if (envToken && envSecret) {
|
|
16
|
+
return { token: envToken, secret: envSecret };
|
|
17
|
+
}
|
|
18
|
+
const file = configFilePath();
|
|
19
|
+
if (!fs.existsSync(file)) {
|
|
20
|
+
console.error('No credentials configured. Please run: switchbot config set-token <token> <secret>\n' +
|
|
21
|
+
'Or set the SWITCHBOT_TOKEN and SWITCHBOT_SECRET environment variables.');
|
|
22
|
+
process.exit(1);
|
|
23
|
+
}
|
|
24
|
+
try {
|
|
25
|
+
const raw = fs.readFileSync(file, 'utf-8');
|
|
26
|
+
const cfg = JSON.parse(raw);
|
|
27
|
+
if (!cfg.token || !cfg.secret) {
|
|
28
|
+
console.error('Invalid config.json format. Please re-run: switchbot config set-token');
|
|
29
|
+
process.exit(1);
|
|
30
|
+
}
|
|
31
|
+
return cfg;
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
console.error('Failed to read config file. Please re-run: switchbot config set-token');
|
|
35
|
+
process.exit(1);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
export function saveConfig(token, secret) {
|
|
39
|
+
const file = configFilePath();
|
|
40
|
+
const dir = path.dirname(file);
|
|
41
|
+
if (!fs.existsSync(dir)) {
|
|
42
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
43
|
+
}
|
|
44
|
+
const cfg = { token, secret };
|
|
45
|
+
fs.writeFileSync(file, JSON.stringify(cfg, null, 2), { mode: 0o600 });
|
|
46
|
+
}
|
|
47
|
+
export function showConfig() {
|
|
48
|
+
const envToken = process.env.SWITCHBOT_TOKEN;
|
|
49
|
+
const envSecret = process.env.SWITCHBOT_SECRET;
|
|
50
|
+
if (envToken && envSecret) {
|
|
51
|
+
console.log('Credential source: environment variables');
|
|
52
|
+
console.log(`token : ${envToken}`);
|
|
53
|
+
console.log(`secret: ${maskSecret(envSecret)}`);
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
const file = configFilePath();
|
|
57
|
+
if (!fs.existsSync(file)) {
|
|
58
|
+
console.log('No credentials configured');
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
try {
|
|
62
|
+
const raw = fs.readFileSync(file, 'utf-8');
|
|
63
|
+
const cfg = JSON.parse(raw);
|
|
64
|
+
console.log(`Credential source: ${file}`);
|
|
65
|
+
console.log(`token : ${cfg.token}`);
|
|
66
|
+
console.log(`secret: ${maskSecret(cfg.secret)}`);
|
|
67
|
+
}
|
|
68
|
+
catch {
|
|
69
|
+
console.error('Failed to read config file');
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
function maskSecret(secret) {
|
|
73
|
+
if (secret.length <= 4)
|
|
74
|
+
return '****';
|
|
75
|
+
return secret.slice(0, 2) + '*'.repeat(secret.length - 4) + secret.slice(-2);
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Static catalog of SwitchBot device types, control commands and status fields.
|
|
3
|
+
* Sourced from https://github.com/OpenWonderLabs/SwitchBotAPI — keep in sync
|
|
4
|
+
* when the upstream API adds new device types.
|
|
5
|
+
*/
|
|
6
|
+
export interface CommandSpec {
|
|
7
|
+
command: string;
|
|
8
|
+
parameter: string;
|
|
9
|
+
description: string;
|
|
10
|
+
commandType?: 'command' | 'customize';
|
|
11
|
+
}
|
|
12
|
+
export interface DeviceCatalogEntry {
|
|
13
|
+
type: string;
|
|
14
|
+
category: 'physical' | 'ir';
|
|
15
|
+
aliases?: string[];
|
|
16
|
+
commands: CommandSpec[];
|
|
17
|
+
statusFields?: string[];
|
|
18
|
+
}
|
|
19
|
+
export declare const DEVICE_CATALOG: DeviceCatalogEntry[];
|
|
20
|
+
/** Find a catalog entry by exact name, alias, or case-insensitive substring. */
|
|
21
|
+
export declare function findCatalogEntry(query: string): DeviceCatalogEntry | DeviceCatalogEntry[] | null;
|
|
@@ -0,0 +1,391 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Static catalog of SwitchBot device types, control commands and status fields.
|
|
3
|
+
* Sourced from https://github.com/OpenWonderLabs/SwitchBotAPI — keep in sync
|
|
4
|
+
* when the upstream API adds new device types.
|
|
5
|
+
*/
|
|
6
|
+
const onOff = [
|
|
7
|
+
{ command: 'turnOn', parameter: '—', description: 'Power on' },
|
|
8
|
+
{ command: 'turnOff', parameter: '—', description: 'Power off' },
|
|
9
|
+
];
|
|
10
|
+
const onOffToggle = [
|
|
11
|
+
...onOff,
|
|
12
|
+
{ command: 'toggle', parameter: '—', description: 'Toggle power' },
|
|
13
|
+
];
|
|
14
|
+
const lightControls = [
|
|
15
|
+
{ command: 'setBrightness', parameter: '1-100', description: 'Set brightness percentage' },
|
|
16
|
+
{ command: 'setColor', parameter: 'R:G:B (0-255 each)', description: 'Set RGB color, e.g. "255:0:0"' },
|
|
17
|
+
{ command: 'setColorTemperature', parameter: '2700-6500', description: 'Set color temperature (Kelvin)' },
|
|
18
|
+
];
|
|
19
|
+
export const DEVICE_CATALOG = [
|
|
20
|
+
// ---------- Physical devices ----------
|
|
21
|
+
{
|
|
22
|
+
type: 'Bot',
|
|
23
|
+
category: 'physical',
|
|
24
|
+
commands: [
|
|
25
|
+
...onOff,
|
|
26
|
+
{ command: 'press', parameter: '—', description: 'Press the button (momentary)' },
|
|
27
|
+
],
|
|
28
|
+
statusFields: ['power', 'battery', 'deviceMode', 'version'],
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
type: 'Curtain',
|
|
32
|
+
category: 'physical',
|
|
33
|
+
aliases: ['Curtain3', 'Curtain 3'],
|
|
34
|
+
commands: [
|
|
35
|
+
...onOff,
|
|
36
|
+
{ command: 'pause', parameter: '—', description: 'Stop movement' },
|
|
37
|
+
{ command: 'setPosition', parameter: '0-100 (0=open, 100=closed)', description: 'Move to a position' },
|
|
38
|
+
{ command: 'setPosition', parameter: 'index,mode,position (e.g. "0,ff,80")', description: 'Multi-arg form: mode=0 Performance | 1 Silent | ff default' },
|
|
39
|
+
],
|
|
40
|
+
statusFields: ['calibrate', 'group', 'moving', 'slidePosition', 'battery', 'version'],
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
type: 'Smart Lock',
|
|
44
|
+
category: 'physical',
|
|
45
|
+
aliases: ['Smart Lock Pro'],
|
|
46
|
+
commands: [
|
|
47
|
+
{ command: 'lock', parameter: '—', description: 'Lock the door' },
|
|
48
|
+
{ command: 'unlock', parameter: '—', description: 'Unlock the door' },
|
|
49
|
+
{ command: 'deadbolt', parameter: '—', description: 'Pro only: engage deadbolt' },
|
|
50
|
+
],
|
|
51
|
+
statusFields: ['battery', 'version', 'lockState', 'doorState', 'calibrate'],
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
type: 'Smart Lock Lite',
|
|
55
|
+
category: 'physical',
|
|
56
|
+
commands: [
|
|
57
|
+
{ command: 'lock', parameter: '—', description: 'Lock the door' },
|
|
58
|
+
{ command: 'unlock', parameter: '—', description: 'Unlock the door' },
|
|
59
|
+
],
|
|
60
|
+
statusFields: ['battery', 'version', 'lockState', 'doorState', 'calibrate'],
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
type: 'Smart Lock Ultra',
|
|
64
|
+
category: 'physical',
|
|
65
|
+
commands: [
|
|
66
|
+
{ command: 'lock', parameter: '—', description: 'Lock the door' },
|
|
67
|
+
{ command: 'unlock', parameter: '—', description: 'Unlock the door' },
|
|
68
|
+
{ command: 'deadbolt', parameter: '—', description: 'Engage deadbolt' },
|
|
69
|
+
],
|
|
70
|
+
statusFields: ['battery', 'version', 'lockState', 'doorState', 'calibrate'],
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
type: 'Plug',
|
|
74
|
+
category: 'physical',
|
|
75
|
+
commands: onOffToggle,
|
|
76
|
+
statusFields: ['power', 'version'],
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
type: 'Plug Mini (US)',
|
|
80
|
+
category: 'physical',
|
|
81
|
+
aliases: ['Plug Mini (JP)'],
|
|
82
|
+
commands: onOffToggle,
|
|
83
|
+
statusFields: ['voltage', 'weight', 'electricityOfDay', 'electricCurrent', 'power', 'version'],
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
type: 'Relay Switch 1',
|
|
87
|
+
category: 'physical',
|
|
88
|
+
aliases: ['Relay Switch 1PM'],
|
|
89
|
+
commands: [
|
|
90
|
+
...onOffToggle,
|
|
91
|
+
{ command: 'setMode', parameter: '0=toggle | 1=edge | 2=detached | 3=momentary', description: 'Switch operating mode' },
|
|
92
|
+
],
|
|
93
|
+
statusFields: ['switchStatus', 'voltage', 'version', 'useTime', 'electricCurrent', 'power', 'usedElectricity'],
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
type: 'Relay Switch 2PM',
|
|
97
|
+
category: 'physical',
|
|
98
|
+
commands: [
|
|
99
|
+
{ command: 'turnOn', parameter: '1 | 2 (channel)', description: 'Turn on channel 1 or 2' },
|
|
100
|
+
{ command: 'turnOff', parameter: '1 | 2 (channel)', description: 'Turn off channel 1 or 2' },
|
|
101
|
+
{ command: 'toggle', parameter: '1 | 2 (channel)', description: 'Toggle channel 1 or 2' },
|
|
102
|
+
{ command: 'setMode', parameter: '"<channel>;<mode>" e.g. "1;0"', description: 'Per-channel mode (see Relay Switch 1 modes)' },
|
|
103
|
+
{ command: 'setPosition', parameter: '0-100 (roller percentage)', description: 'Roller-shade-pair mode only' },
|
|
104
|
+
],
|
|
105
|
+
statusFields: ['switch1Status', 'switch2Status', 'voltage', 'electricCurrent', 'power', 'usedElectricity'],
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
type: 'Humidifier',
|
|
109
|
+
category: 'physical',
|
|
110
|
+
commands: [
|
|
111
|
+
...onOff,
|
|
112
|
+
{ command: 'setMode', parameter: 'auto | 101 (34%) | 102 (67%) | 103 (100%) | 0-100', description: 'Set preset or target humidity' },
|
|
113
|
+
],
|
|
114
|
+
statusFields: ['power', 'humidity', 'temperature', 'nebulizationEfficiency', 'auto', 'childLock', 'sound', 'lackWater'],
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
type: 'Humidifier2',
|
|
118
|
+
category: 'physical',
|
|
119
|
+
aliases: ['Evaporative Humidifier'],
|
|
120
|
+
commands: [
|
|
121
|
+
...onOff,
|
|
122
|
+
{ command: 'setMode', parameter: '\'{"mode":1-8,"targetHumidify":0-100}\'', description: 'mode: 1=lv4 2=lv3 3=lv2 4=lv1 5=humidity 6=sleep 7=auto 8=drying' },
|
|
123
|
+
{ command: 'setChildLock', parameter: 'true | false', description: 'Enable or disable child lock' },
|
|
124
|
+
],
|
|
125
|
+
statusFields: ['power', 'humidity', 'temperature', 'mode', 'childLock', 'filterElement'],
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
type: 'Air Purifier VOC',
|
|
129
|
+
category: 'physical',
|
|
130
|
+
aliases: ['Air Purifier PM2.5', 'Air Purifier Table VOC', 'Air Purifier Table PM2.5'],
|
|
131
|
+
commands: [
|
|
132
|
+
...onOff,
|
|
133
|
+
{ command: 'setMode', parameter: '\'{"mode":1-4,"fanGear":1-3}\'', description: 'mode: 1=normal 2=auto 3=sleep 4=pet; fanGear only when mode=1' },
|
|
134
|
+
{ command: 'setChildLock', parameter: '0 | 1', description: 'Disable / enable child lock' },
|
|
135
|
+
],
|
|
136
|
+
statusFields: ['power', 'mode', 'childLock', 'filterElement'],
|
|
137
|
+
},
|
|
138
|
+
{
|
|
139
|
+
type: 'Color Bulb',
|
|
140
|
+
category: 'physical',
|
|
141
|
+
commands: [...onOffToggle, ...lightControls],
|
|
142
|
+
statusFields: ['power', 'brightness', 'color', 'colorTemperature', 'version'],
|
|
143
|
+
},
|
|
144
|
+
{
|
|
145
|
+
type: 'Strip Light',
|
|
146
|
+
category: 'physical',
|
|
147
|
+
commands: [...onOffToggle, ...lightControls.slice(0, 2)],
|
|
148
|
+
statusFields: ['power', 'brightness', 'color', 'version'],
|
|
149
|
+
},
|
|
150
|
+
{
|
|
151
|
+
type: 'Ceiling Light',
|
|
152
|
+
category: 'physical',
|
|
153
|
+
aliases: ['Ceiling Light Pro'],
|
|
154
|
+
commands: [
|
|
155
|
+
...onOffToggle,
|
|
156
|
+
{ command: 'setBrightness', parameter: '1-100', description: 'Set brightness percentage' },
|
|
157
|
+
{ command: 'setColorTemperature', parameter: '2700-6500', description: 'Set color temperature (Kelvin)' },
|
|
158
|
+
],
|
|
159
|
+
statusFields: ['power', 'brightness', 'colorTemperature', 'version'],
|
|
160
|
+
},
|
|
161
|
+
{
|
|
162
|
+
type: 'Smart Radiator Thermostat',
|
|
163
|
+
category: 'physical',
|
|
164
|
+
commands: [
|
|
165
|
+
...onOff,
|
|
166
|
+
{ command: 'setMode', parameter: '0=schedule 1=manual 2=off 3=eco 4=comfort 5=quickHeat', description: 'Operating mode' },
|
|
167
|
+
{ command: 'setManualModeTemperature', parameter: '5-30 (°C)', description: 'Target temperature in manual mode' },
|
|
168
|
+
],
|
|
169
|
+
statusFields: ['power', 'temperature', 'humidity', 'battery', 'version', 'mode', 'targetTemperature'],
|
|
170
|
+
},
|
|
171
|
+
{
|
|
172
|
+
type: 'Robot Vacuum Cleaner S1',
|
|
173
|
+
category: 'physical',
|
|
174
|
+
aliases: ['Robot Vacuum Cleaner S1 Plus', 'K10+'],
|
|
175
|
+
commands: [
|
|
176
|
+
{ command: 'start', parameter: '—', description: 'Start cleaning' },
|
|
177
|
+
{ command: 'stop', parameter: '—', description: 'Stop cleaning' },
|
|
178
|
+
{ command: 'dock', parameter: '—', description: 'Return to dock' },
|
|
179
|
+
{ command: 'PowLevel', parameter: '0-3', description: '0=Quiet 1=Standard 2=Strong 3=Max' },
|
|
180
|
+
],
|
|
181
|
+
statusFields: ['workingStatus', 'onlineStatus', 'battery', 'version'],
|
|
182
|
+
},
|
|
183
|
+
{
|
|
184
|
+
type: 'K10+ Pro Combo',
|
|
185
|
+
category: 'physical',
|
|
186
|
+
aliases: ['K20+ Pro'],
|
|
187
|
+
commands: [
|
|
188
|
+
{ command: 'startClean', parameter: '\'{"action":"sweep"|"mop","param":{"fanLevel":1-4,"times":1-2639999}}\'', description: 'Begin a cleaning session' },
|
|
189
|
+
{ command: 'pause', parameter: '—', description: 'Pause cleaning' },
|
|
190
|
+
{ command: 'dock', parameter: '—', description: 'Return to dock' },
|
|
191
|
+
{ command: 'setVolume', parameter: '0-100', description: 'Set voice volume' },
|
|
192
|
+
{ command: 'changeParam', parameter: '\'{"fanLevel":1-4,"waterLevel":1-2,"times":1-2639999}\'', description: 'Change parameters mid-run' },
|
|
193
|
+
],
|
|
194
|
+
statusFields: ['workingStatus', 'onlineStatus', 'battery', 'taskType'],
|
|
195
|
+
},
|
|
196
|
+
{
|
|
197
|
+
type: 'Floor Cleaning Robot S10',
|
|
198
|
+
category: 'physical',
|
|
199
|
+
aliases: ['Robot Vacuum Cleaner S10', 'Robot Vacuum Cleaner S20'],
|
|
200
|
+
commands: [
|
|
201
|
+
{ command: 'startClean', parameter: '\'{"action":"sweep"|"sweep_mop","param":{"fanLevel":1-4,"waterLevel":1-2,"times":1-2639999}}\'', description: 'Begin a cleaning session' },
|
|
202
|
+
{ command: 'pause', parameter: '—', description: 'Pause cleaning' },
|
|
203
|
+
{ command: 'dock', parameter: '—', description: 'Return to dock' },
|
|
204
|
+
{ command: 'addWaterForHumi', parameter: '—', description: 'Refill the humidifier water tank' },
|
|
205
|
+
{ command: 'selfClean', parameter: '1 | 2 | 3', description: '1=wash mop | 2=dry | 3=terminate self-clean' },
|
|
206
|
+
{ command: 'setVolume', parameter: '0-100', description: 'Set voice volume' },
|
|
207
|
+
{ command: 'changeParam', parameter: '\'{"fanLevel":1-4,"waterLevel":1-2,"times":1-2639999}\'', description: 'Change parameters mid-run' },
|
|
208
|
+
],
|
|
209
|
+
statusFields: ['workingStatus', 'onlineStatus', 'battery', 'taskType'],
|
|
210
|
+
},
|
|
211
|
+
{
|
|
212
|
+
type: 'Battery Circulator Fan',
|
|
213
|
+
category: 'physical',
|
|
214
|
+
aliases: ['Circulator Fan'],
|
|
215
|
+
commands: [
|
|
216
|
+
...onOffToggle,
|
|
217
|
+
{ command: 'setNightLightMode', parameter: 'off | 1 | 2', description: 'Night-light mode' },
|
|
218
|
+
{ command: 'setWindMode', parameter: 'direct | natural | sleep | baby', description: 'Wind mode' },
|
|
219
|
+
{ command: 'setWindSpeed', parameter: '1-100', description: 'Fan speed' },
|
|
220
|
+
{ command: 'closeDelay', parameter: 'seconds', description: 'Auto-off timer in seconds' },
|
|
221
|
+
],
|
|
222
|
+
statusFields: ['mode', 'version', 'battery', 'power', 'nightStatus', 'oscillation', 'verticalOscillation', 'chargingStatus', 'fanSpeed'],
|
|
223
|
+
},
|
|
224
|
+
{
|
|
225
|
+
type: 'Blind Tilt',
|
|
226
|
+
category: 'physical',
|
|
227
|
+
commands: [
|
|
228
|
+
...onOff,
|
|
229
|
+
{ command: 'setPosition', parameter: '"<direction>;<angle>" (up|down; 0,2,...,100)', description: 'Tilt direction + angle (0=closed, 100=open)' },
|
|
230
|
+
{ command: 'fullyOpen', parameter: '—', description: 'Open fully' },
|
|
231
|
+
{ command: 'closeUp', parameter: '—', description: 'Close up' },
|
|
232
|
+
{ command: 'closeDown', parameter: '—', description: 'Close down' },
|
|
233
|
+
],
|
|
234
|
+
statusFields: ['version', 'calibrate', 'group', 'moving', 'direction', 'slidePosition', 'battery'],
|
|
235
|
+
},
|
|
236
|
+
{
|
|
237
|
+
type: 'Roller Shade',
|
|
238
|
+
category: 'physical',
|
|
239
|
+
commands: [
|
|
240
|
+
...onOff,
|
|
241
|
+
{ command: 'setPosition', parameter: '0-100 (0=open, 100=closed)', description: 'Move to a position' },
|
|
242
|
+
],
|
|
243
|
+
statusFields: ['slidePosition', 'battery', 'version', 'moving'],
|
|
244
|
+
},
|
|
245
|
+
{
|
|
246
|
+
type: 'Garage Door Opener',
|
|
247
|
+
category: 'physical',
|
|
248
|
+
commands: onOff,
|
|
249
|
+
statusFields: ['switchStatus', 'version', 'online'],
|
|
250
|
+
},
|
|
251
|
+
{
|
|
252
|
+
type: 'Video Doorbell',
|
|
253
|
+
category: 'physical',
|
|
254
|
+
commands: [
|
|
255
|
+
{ command: 'enableMotionDetection', parameter: '—', description: 'Enable motion detection' },
|
|
256
|
+
{ command: 'disableMotionDetection', parameter: '—', description: 'Disable motion detection' },
|
|
257
|
+
],
|
|
258
|
+
statusFields: ['battery', 'version'],
|
|
259
|
+
},
|
|
260
|
+
{
|
|
261
|
+
type: 'Keypad',
|
|
262
|
+
category: 'physical',
|
|
263
|
+
aliases: ['Keypad Touch'],
|
|
264
|
+
commands: [
|
|
265
|
+
{ command: 'createKey', parameter: '\'{"name":"...","type":"permanent|timeLimit|disposable|urgent","password":"6-12 digits","startTime":<s>,"endTime":<s>}\'', description: 'Create a passcode (async; result via webhook)' },
|
|
266
|
+
{ command: 'deleteKey', parameter: '\'{"id":<passcode_id>}\'', description: 'Delete a passcode (async; result via webhook)' },
|
|
267
|
+
],
|
|
268
|
+
statusFields: ['version'],
|
|
269
|
+
},
|
|
270
|
+
{
|
|
271
|
+
type: 'Candle Warmer Lamp',
|
|
272
|
+
category: 'physical',
|
|
273
|
+
commands: [
|
|
274
|
+
...onOffToggle,
|
|
275
|
+
{ command: 'setBrightness', parameter: '1-100', description: 'Set brightness percentage' },
|
|
276
|
+
{ command: 'setColorTemperature', parameter: '2700-6500', description: 'Set color temperature (Kelvin)' },
|
|
277
|
+
],
|
|
278
|
+
statusFields: ['power', 'brightness', 'colorTemperature', 'version'],
|
|
279
|
+
},
|
|
280
|
+
// Status-only devices (no commands)
|
|
281
|
+
{
|
|
282
|
+
type: 'Meter',
|
|
283
|
+
category: 'physical',
|
|
284
|
+
aliases: ['Meter Plus', 'MeterPro', 'MeterPro(CO2)', 'WoIOSensor', 'Hub 2'],
|
|
285
|
+
commands: [],
|
|
286
|
+
statusFields: ['temperature', 'humidity', 'CO2', 'battery', 'version'],
|
|
287
|
+
},
|
|
288
|
+
{
|
|
289
|
+
type: 'Motion Sensor',
|
|
290
|
+
category: 'physical',
|
|
291
|
+
commands: [],
|
|
292
|
+
statusFields: ['battery', 'version', 'moveDetected', 'brightness', 'openState'],
|
|
293
|
+
},
|
|
294
|
+
{
|
|
295
|
+
type: 'Contact Sensor',
|
|
296
|
+
category: 'physical',
|
|
297
|
+
commands: [],
|
|
298
|
+
statusFields: ['battery', 'version', 'moveDetected', 'openState', 'brightness'],
|
|
299
|
+
},
|
|
300
|
+
{
|
|
301
|
+
type: 'Water Leak Detector',
|
|
302
|
+
category: 'physical',
|
|
303
|
+
commands: [],
|
|
304
|
+
statusFields: ['battery', 'version', 'status'],
|
|
305
|
+
},
|
|
306
|
+
// ---------- Virtual IR remotes ----------
|
|
307
|
+
{
|
|
308
|
+
type: 'Air Conditioner',
|
|
309
|
+
category: 'ir',
|
|
310
|
+
commands: [
|
|
311
|
+
...onOff,
|
|
312
|
+
{ command: 'setAll', parameter: '"<temp>,<mode>,<fan>,<on|off>"', description: 'mode: 1=auto 2=cool 3=dry 4=fan 5=heat; fan: 1=auto 2=low 3=mid 4=high' },
|
|
313
|
+
],
|
|
314
|
+
},
|
|
315
|
+
{
|
|
316
|
+
type: 'TV',
|
|
317
|
+
category: 'ir',
|
|
318
|
+
aliases: ['IPTV', 'Streamer', 'Set Top Box'],
|
|
319
|
+
commands: [
|
|
320
|
+
...onOff,
|
|
321
|
+
{ command: 'SetChannel', parameter: '1-999 (channel number)', description: 'Switch to a specific channel' },
|
|
322
|
+
{ command: 'volumeAdd', parameter: '—', description: 'Volume up' },
|
|
323
|
+
{ command: 'volumeSub', parameter: '—', description: 'Volume down' },
|
|
324
|
+
{ command: 'channelAdd', parameter: '—', description: 'Channel up' },
|
|
325
|
+
{ command: 'channelSub', parameter: '—', description: 'Channel down' },
|
|
326
|
+
],
|
|
327
|
+
},
|
|
328
|
+
{
|
|
329
|
+
type: 'DVD',
|
|
330
|
+
category: 'ir',
|
|
331
|
+
aliases: ['Speaker'],
|
|
332
|
+
commands: [
|
|
333
|
+
...onOff,
|
|
334
|
+
{ command: 'setMute', parameter: '—', description: 'Toggle mute' },
|
|
335
|
+
{ command: 'FastForward', parameter: '—', description: 'Fast forward' },
|
|
336
|
+
{ command: 'Rewind', parameter: '—', description: 'Rewind' },
|
|
337
|
+
{ command: 'Next', parameter: '—', description: 'Next track' },
|
|
338
|
+
{ command: 'Previous', parameter: '—', description: 'Previous track' },
|
|
339
|
+
{ command: 'Pause', parameter: '—', description: 'Pause' },
|
|
340
|
+
{ command: 'Play', parameter: '—', description: 'Play' },
|
|
341
|
+
{ command: 'Stop', parameter: '—', description: 'Stop' },
|
|
342
|
+
{ command: 'volumeAdd', parameter: '—', description: 'Volume up' },
|
|
343
|
+
{ command: 'volumeSub', parameter: '—', description: 'Volume down' },
|
|
344
|
+
],
|
|
345
|
+
},
|
|
346
|
+
{
|
|
347
|
+
type: 'Fan',
|
|
348
|
+
category: 'ir',
|
|
349
|
+
commands: [
|
|
350
|
+
...onOff,
|
|
351
|
+
{ command: 'swing', parameter: '—', description: 'Toggle swing' },
|
|
352
|
+
{ command: 'timer', parameter: '—', description: 'Toggle timer' },
|
|
353
|
+
{ command: 'lowSpeed', parameter: '—', description: 'Low speed' },
|
|
354
|
+
{ command: 'middleSpeed', parameter: '—', description: 'Medium speed' },
|
|
355
|
+
{ command: 'highSpeed', parameter: '—', description: 'High speed' },
|
|
356
|
+
],
|
|
357
|
+
},
|
|
358
|
+
{
|
|
359
|
+
type: 'Light',
|
|
360
|
+
category: 'ir',
|
|
361
|
+
commands: [
|
|
362
|
+
...onOff,
|
|
363
|
+
{ command: 'brightnessUp', parameter: '—', description: 'Brightness up' },
|
|
364
|
+
{ command: 'brightnessDown', parameter: '—', description: 'Brightness down' },
|
|
365
|
+
],
|
|
366
|
+
},
|
|
367
|
+
{
|
|
368
|
+
type: 'Others',
|
|
369
|
+
category: 'ir',
|
|
370
|
+
commands: [
|
|
371
|
+
{ command: '<buttonName>', parameter: '—', description: 'User-defined custom IR button (requires --type customize)', commandType: 'customize' },
|
|
372
|
+
],
|
|
373
|
+
},
|
|
374
|
+
];
|
|
375
|
+
/** Find a catalog entry by exact name, alias, or case-insensitive substring. */
|
|
376
|
+
export function findCatalogEntry(query) {
|
|
377
|
+
const q = query.trim().toLowerCase();
|
|
378
|
+
if (!q)
|
|
379
|
+
return null;
|
|
380
|
+
const names = (e) => [e.type, ...(e.aliases ?? [])];
|
|
381
|
+
const exact = DEVICE_CATALOG.find((e) => names(e).some((n) => n.toLowerCase() === q));
|
|
382
|
+
if (exact)
|
|
383
|
+
return exact;
|
|
384
|
+
const matches = DEVICE_CATALOG.filter((e) => names(e).some((n) => n.toLowerCase().includes(q)));
|
|
385
|
+
if (matches.length === 0)
|
|
386
|
+
return null;
|
|
387
|
+
if (matches.length === 1)
|
|
388
|
+
return matches[0];
|
|
389
|
+
return matches;
|
|
390
|
+
}
|
|
391
|
+
//# sourceMappingURL=catalog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../src/devices/catalog.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAiBH,MAAM,KAAK,GAAkB;IAC3B,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,EAAE,UAAU,EAAE;IAC9D,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,EAAE,WAAW,EAAE;CACjE,CAAC;AACF,MAAM,WAAW,GAAkB;IACjC,GAAG,KAAK;IACR,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,EAAE,cAAc,EAAE;CACnE,CAAC;AACF,MAAM,aAAa,GAAkB;IACnC,EAAE,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,2BAA2B,EAAE;IAC1F,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,oBAAoB,EAAE,WAAW,EAAE,+BAA+B,EAAE;IACtG,EAAE,OAAO,EAAE,qBAAqB,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,gCAAgC,EAAE;CAC1G,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAyB;IAClD,yCAAyC;IACzC;QACE,IAAI,EAAE,KAAK;QACX,QAAQ,EAAE,UAAU;QACpB,QAAQ,EAAE;YACR,GAAG,KAAK;YACR,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,EAAE,8BAA8B,EAAE;SAClF;QACD,YAAY,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,CAAC;KAC5D;IACD;QACE,IAAI,EAAE,SAAS;QACf,QAAQ,EAAE,UAAU;QACpB,OAAO,EAAE,CAAC,UAAU,EAAE,WAAW,CAAC;QAClC,QAAQ,EAAE;YACR,GAAG,KAAK;YACR,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,EAAE,eAAe,EAAE;YAClE,EAAE,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,4BAA4B,EAAE,WAAW,EAAE,oBAAoB,EAAE;YACtG,EAAE,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,uCAAuC,EAAE,WAAW,EAAE,4DAA4D,EAAE;SAC1J;QACD,YAAY,EAAE,CAAC,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,SAAS,EAAE,SAAS,CAAC;KACtF;IACD;QACE,IAAI,EAAE,YAAY;QAClB,QAAQ,EAAE,UAAU;QACpB,OAAO,EAAE,CAAC,gBAAgB,CAAC;QAC3B,QAAQ,EAAE;YACR,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,EAAE,eAAe,EAAE;YACjE,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,EAAE,iBAAiB,EAAE;YACrE,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,EAAE,2BAA2B,EAAE;SAClF;QACD,YAAY,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,CAAC;KAC5E;IACD;QACE,IAAI,EAAE,iBAAiB;QACvB,QAAQ,EAAE,UAAU;QACpB,QAAQ,EAAE;YACR,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,EAAE,eAAe,EAAE;YACjE,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,EAAE,iBAAiB,EAAE;SACtE;QACD,YAAY,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,CAAC;KAC5E;IACD;QACE,IAAI,EAAE,kBAAkB;QACxB,QAAQ,EAAE,UAAU;QACpB,QAAQ,EAAE;YACR,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,EAAE,eAAe,EAAE;YACjE,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,EAAE,iBAAiB,EAAE;YACrE,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,EAAE,iBAAiB,EAAE;SACxE;QACD,YAAY,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,CAAC;KAC5E;IACD;QACE,IAAI,EAAE,MAAM;QACZ,QAAQ,EAAE,UAAU;QACpB,QAAQ,EAAE,WAAW;QACrB,YAAY,EAAE,CAAC,OAAO,EAAE,SAAS,CAAC;KACnC;IACD;QACE,IAAI,EAAE,gBAAgB;QACtB,QAAQ,EAAE,UAAU;QACpB,OAAO,EAAE,CAAC,gBAAgB,CAAC;QAC3B,QAAQ,EAAE,WAAW;QACrB,YAAY,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,OAAO,EAAE,SAAS,CAAC;KAC/F;IACD;QACE,IAAI,EAAE,gBAAgB;QACtB,QAAQ,EAAE,UAAU;QACpB,OAAO,EAAE,CAAC,kBAAkB,CAAC;QAC7B,QAAQ,EAAE;YACR,GAAG,WAAW;YACd,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,8CAA8C,EAAE,WAAW,EAAE,uBAAuB,EAAE;SACxH;QACD,YAAY,EAAE,CAAC,cAAc,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,iBAAiB,EAAE,OAAO,EAAE,iBAAiB,CAAC;KAC/G;IACD;QACE,IAAI,EAAE,kBAAkB;QACxB,QAAQ,EAAE,UAAU;QACpB,QAAQ,EAAE;YACR,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,iBAAiB,EAAE,WAAW,EAAE,wBAAwB,EAAE;YAC1F,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,iBAAiB,EAAE,WAAW,EAAE,yBAAyB,EAAE;YAC5F,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,iBAAiB,EAAE,WAAW,EAAE,uBAAuB,EAAE;YACzF,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,+BAA+B,EAAE,WAAW,EAAE,6CAA6C,EAAE;YAC9H,EAAE,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,2BAA2B,EAAE,WAAW,EAAE,6BAA6B,EAAE;SAC/G;QACD,YAAY,EAAE,CAAC,eAAe,EAAE,eAAe,EAAE,SAAS,EAAE,iBAAiB,EAAE,OAAO,EAAE,iBAAiB,CAAC;KAC3G;IACD;QACE,IAAI,EAAE,YAAY;QAClB,QAAQ,EAAE,UAAU;QACpB,QAAQ,EAAE;YACR,GAAG,KAAK;YACR,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,mDAAmD,EAAE,WAAW,EAAE,+BAA+B,EAAE;SACrI;QACD,YAAY,EAAE,CAAC,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,wBAAwB,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,CAAC;KACxH;IACD;QACE,IAAI,EAAE,aAAa;QACnB,QAAQ,EAAE,UAAU;QACpB,OAAO,EAAE,CAAC,wBAAwB,CAAC;QACnC,QAAQ,EAAE;YACR,GAAG,KAAK;YACR,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,yCAAyC,EAAE,WAAW,EAAE,kEAAkE,EAAE;YAC7J,EAAE,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,cAAc,EAAE,WAAW,EAAE,8BAA8B,EAAE;SACpG;QACD,YAAY,EAAE,CAAC,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,EAAE,WAAW,EAAE,eAAe,CAAC;KACzF;IACD;QACE,IAAI,EAAE,kBAAkB;QACxB,QAAQ,EAAE,UAAU;QACpB,OAAO,EAAE,CAAC,oBAAoB,EAAE,wBAAwB,EAAE,0BAA0B,CAAC;QACrF,QAAQ,EAAE;YACR,GAAG,KAAK;YACR,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,gCAAgC,EAAE,WAAW,EAAE,+DAA+D,EAAE;YACjJ,EAAE,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,6BAA6B,EAAE;SAC5F;QACD,YAAY,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,eAAe,CAAC;KAC9D;IACD;QACE,IAAI,EAAE,YAAY;QAClB,QAAQ,EAAE,UAAU;QACpB,QAAQ,EAAE,CAAC,GAAG,WAAW,EAAE,GAAG,aAAa,CAAC;QAC5C,YAAY,EAAE,CAAC,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,kBAAkB,EAAE,SAAS,CAAC;KAC9E;IACD;QACE,IAAI,EAAE,aAAa;QACnB,QAAQ,EAAE,UAAU;QACpB,QAAQ,EAAE,CAAC,GAAG,WAAW,EAAE,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACxD,YAAY,EAAE,CAAC,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,SAAS,CAAC;KAC1D;IACD;QACE,IAAI,EAAE,eAAe;QACrB,QAAQ,EAAE,UAAU;QACpB,OAAO,EAAE,CAAC,mBAAmB,CAAC;QAC9B,QAAQ,EAAE;YACR,GAAG,WAAW;YACd,EAAE,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,2BAA2B,EAAE;YAC1F,EAAE,OAAO,EAAE,qBAAqB,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,gCAAgC,EAAE;SAC1G;QACD,YAAY,EAAE,CAAC,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,SAAS,CAAC;KACrE;IACD;QACE,IAAI,EAAE,2BAA2B;QACjC,QAAQ,EAAE,UAAU;QACpB,QAAQ,EAAE;YACR,GAAG,KAAK;YACR,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,uDAAuD,EAAE,WAAW,EAAE,gBAAgB,EAAE;YACzH,EAAE,OAAO,EAAE,0BAA0B,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,mCAAmC,EAAE;SAClH;QACD,YAAY,EAAE,CAAC,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,mBAAmB,CAAC;KACtG;IACD;QACE,IAAI,EAAE,yBAAyB;QAC/B,QAAQ,EAAE,UAAU;QACpB,OAAO,EAAE,CAAC,8BAA8B,EAAE,MAAM,CAAC;QACjD,QAAQ,EAAE;YACR,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,EAAE,gBAAgB,EAAE;YACnE,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,EAAE,eAAe,EAAE;YACjE,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,EAAE,gBAAgB,EAAE;YAClE,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,EAAE,mCAAmC,EAAE;SAC5F;QACD,YAAY,EAAE,CAAC,eAAe,EAAE,cAAc,EAAE,SAAS,EAAE,SAAS,CAAC;KACtE;IACD;QACE,IAAI,EAAE,gBAAgB;QACtB,QAAQ,EAAE,UAAU;QACpB,OAAO,EAAE,CAAC,UAAU,CAAC;QACrB,QAAQ,EAAE;YACR,EAAE,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,yEAAyE,EAAE,WAAW,EAAE,0BAA0B,EAAE;YACxJ,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,EAAE,gBAAgB,EAAE;YACnE,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,EAAE,gBAAgB,EAAE;YAClE,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE;YAC7E,EAAE,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,yDAAyD,EAAE,WAAW,EAAE,2BAA2B,EAAE;SAC3I;QACD,YAAY,EAAE,CAAC,eAAe,EAAE,cAAc,EAAE,SAAS,EAAE,UAAU,CAAC;KACvE;IACD;QACE,IAAI,EAAE,0BAA0B;QAChC,QAAQ,EAAE,UAAU;QACpB,OAAO,EAAE,CAAC,0BAA0B,EAAE,0BAA0B,CAAC;QACjE,QAAQ,EAAE;YACR,EAAE,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,gGAAgG,EAAE,WAAW,EAAE,0BAA0B,EAAE;YAC/K,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,EAAE,gBAAgB,EAAE;YACnE,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,EAAE,gBAAgB,EAAE;YAClE,EAAE,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,EAAE,kCAAkC,EAAE;YAC/F,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,6CAA6C,EAAE;YAC5G,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE;YAC7E,EAAE,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,yDAAyD,EAAE,WAAW,EAAE,2BAA2B,EAAE;SAC3I;QACD,YAAY,EAAE,CAAC,eAAe,EAAE,cAAc,EAAE,SAAS,EAAE,UAAU,CAAC;KACvE;IACD;QACE,IAAI,EAAE,wBAAwB;QAC9B,QAAQ,EAAE,UAAU;QACpB,OAAO,EAAE,CAAC,gBAAgB,CAAC;QAC3B,QAAQ,EAAE;YACR,GAAG,WAAW;YACd,EAAE,OAAO,EAAE,mBAAmB,EAAE,SAAS,EAAE,aAAa,EAAE,WAAW,EAAE,kBAAkB,EAAE;YAC3F,EAAE,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,iCAAiC,EAAE,WAAW,EAAE,WAAW,EAAE;YAClG,EAAE,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE;YACzE,EAAE,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,2BAA2B,EAAE;SAC1F;QACD,YAAY,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,UAAU,CAAC;KACzI;IACD;QACE,IAAI,EAAE,YAAY;QAClB,QAAQ,EAAE,UAAU;QACpB,QAAQ,EAAE;YACR,GAAG,KAAK;YACR,EAAE,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,8CAA8C,EAAE,WAAW,EAAE,6CAA6C,EAAE;YACjJ,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,EAAE,YAAY,EAAE;YACnE,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,EAAE,UAAU,EAAE;YAC/D,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,EAAE,YAAY,EAAE;SACpE;QACD,YAAY,EAAE,CAAC,SAAS,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,eAAe,EAAE,SAAS,CAAC;KACnG;IACD;QACE,IAAI,EAAE,cAAc;QACpB,QAAQ,EAAE,UAAU;QACpB,QAAQ,EAAE;YACR,GAAG,KAAK;YACR,EAAE,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,4BAA4B,EAAE,WAAW,EAAE,oBAAoB,EAAE;SACvG;QACD,YAAY,EAAE,CAAC,eAAe,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,CAAC;KAChE;IACD;QACE,IAAI,EAAE,oBAAoB;QAC1B,QAAQ,EAAE,UAAU;QACpB,QAAQ,EAAE,KAAK;QACf,YAAY,EAAE,CAAC,cAAc,EAAE,SAAS,EAAE,QAAQ,CAAC;KACpD;IACD;QACE,IAAI,EAAE,gBAAgB;QACtB,QAAQ,EAAE,UAAU;QACpB,QAAQ,EAAE;YACR,EAAE,OAAO,EAAE,uBAAuB,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,EAAE,yBAAyB,EAAE;YAC5F,EAAE,OAAO,EAAE,wBAAwB,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,EAAE,0BAA0B,EAAE;SAC/F;QACD,YAAY,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC;KACrC;IACD;QACE,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,UAAU;QACpB,OAAO,EAAE,CAAC,cAAc,CAAC;QACzB,QAAQ,EAAE;YACR,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,0HAA0H,EAAE,WAAW,EAAE,+CAA+C,EAAE;YAC7N,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,0BAA0B,EAAE,WAAW,EAAE,+CAA+C,EAAE;SAC9H;QACD,YAAY,EAAE,CAAC,SAAS,CAAC;KAC1B;IACD;QACE,IAAI,EAAE,oBAAoB;QAC1B,QAAQ,EAAE,UAAU;QACpB,QAAQ,EAAE;YACR,GAAG,WAAW;YACd,EAAE,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,2BAA2B,EAAE;YAC1F,EAAE,OAAO,EAAE,qBAAqB,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,gCAAgC,EAAE;SAC1G;QACD,YAAY,EAAE,CAAC,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,SAAS,CAAC;KACrE;IACD,oCAAoC;IACpC;QACE,IAAI,EAAE,OAAO;QACb,QAAQ,EAAE,UAAU;QACpB,OAAO,EAAE,CAAC,YAAY,EAAE,UAAU,EAAE,eAAe,EAAE,YAAY,EAAE,OAAO,CAAC;QAC3E,QAAQ,EAAE,EAAE;QACZ,YAAY,EAAE,CAAC,aAAa,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,CAAC;KACvE;IACD;QACE,IAAI,EAAE,eAAe;QACrB,QAAQ,EAAE,UAAU;QACpB,QAAQ,EAAE,EAAE;QACZ,YAAY,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,cAAc,EAAE,YAAY,EAAE,WAAW,CAAC;KAChF;IACD;QACE,IAAI,EAAE,gBAAgB;QACtB,QAAQ,EAAE,UAAU;QACpB,QAAQ,EAAE,EAAE;QACZ,YAAY,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,cAAc,EAAE,WAAW,EAAE,YAAY,CAAC;KAChF;IACD;QACE,IAAI,EAAE,qBAAqB;QAC3B,QAAQ,EAAE,UAAU;QACpB,QAAQ,EAAE,EAAE;QACZ,YAAY,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,CAAC;KAC/C;IAED,2CAA2C;IAC3C;QACE,IAAI,EAAE,iBAAiB;QACvB,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE;YACR,GAAG,KAAK;YACR,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,gCAAgC,EAAE,WAAW,EAAE,wEAAwE,EAAE;SAC1J;KACF;IACD;QACE,IAAI,EAAE,IAAI;QACV,QAAQ,EAAE,IAAI;QACd,OAAO,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,aAAa,CAAC;QAC5C,QAAQ,EAAE;YACR,GAAG,KAAK;YACR,EAAE,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,wBAAwB,EAAE,WAAW,EAAE,8BAA8B,EAAE;YAC3G,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,EAAE,WAAW,EAAE;YAClE,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,EAAE,aAAa,EAAE;YACpE,EAAE,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,EAAE,YAAY,EAAE;YACpE,EAAE,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,EAAE,cAAc,EAAE;SACvE;KACF;IACD;QACE,IAAI,EAAE,KAAK;QACX,QAAQ,EAAE,IAAI;QACd,OAAO,EAAE,CAAC,SAAS,CAAC;QACpB,QAAQ,EAAE;YACR,GAAG,KAAK;YACR,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,EAAE,aAAa,EAAE;YAClE,EAAE,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,EAAE,cAAc,EAAE;YACvE,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,EAAE,QAAQ,EAAE;YAC5D,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,EAAE,YAAY,EAAE;YAC9D,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,EAAE,gBAAgB,EAAE;YACtE,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,EAAE,OAAO,EAAE;YAC1D,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE;YACxD,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE;YACxD,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,EAAE,WAAW,EAAE;YAClE,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,EAAE,aAAa,EAAE;SACrE;KACF;IACD;QACE,IAAI,EAAE,KAAK;QACX,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE;YACR,GAAG,KAAK;YACR,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,EAAE,cAAc,EAAE;YACjE,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,EAAE,cAAc,EAAE;YACjE,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,EAAE,WAAW,EAAE;YACjE,EAAE,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,EAAE,cAAc,EAAE;YACvE,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,EAAE,YAAY,EAAE;SACpE;KACF;IACD;QACE,IAAI,EAAE,OAAO;QACb,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE;YACR,GAAG,KAAK;YACR,EAAE,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,EAAE,eAAe,EAAE;YACzE,EAAE,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,EAAE,iBAAiB,EAAE;SAC9E;KACF;IACD;QACE,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE;YACR,EAAE,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,EAAE,2DAA2D,EAAE,WAAW,EAAE,WAAW,EAAE;SAChJ;KACF;CACF,CAAC;AAEF,gFAAgF;AAChF,MAAM,UAAU,gBAAgB,CAAC,KAAa;IAC5C,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACrC,IAAI,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAEpB,MAAM,KAAK,GAAG,CAAC,CAAqB,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC;IAExE,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CACtC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,CAC5C,CAAC;IACF,IAAI,KAAK;QAAE,OAAO,KAAK,CAAC;IAExB,MAAM,OAAO,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAC1C,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAClD,CAAC;IACF,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACtC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC;IAC5C,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
package/dist/index.d.ts
ADDED
package/dist/index.js
ADDED
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { Command, CommanderError } from 'commander';
|
|
3
|
+
import { registerConfigCommand } from './commands/config.js';
|
|
4
|
+
import { registerDevicesCommand } from './commands/devices.js';
|
|
5
|
+
import { registerScenesCommand } from './commands/scenes.js';
|
|
6
|
+
import { registerWebhookCommand } from './commands/webhook.js';
|
|
7
|
+
import { registerCompletionCommand } from './commands/completion.js';
|
|
8
|
+
const program = new Command();
|
|
9
|
+
program
|
|
10
|
+
.name('switchbot')
|
|
11
|
+
.description('Command-line tool for SwitchBot API v1.1')
|
|
12
|
+
.version('1.0.0')
|
|
13
|
+
.option('--json', 'Output raw JSON response (disables tables; useful for pipes/scripts)')
|
|
14
|
+
.option('-v, --verbose', 'Log HTTP request/response details to stderr')
|
|
15
|
+
.option('--dry-run', 'Print mutating requests without sending them (GETs still execute)')
|
|
16
|
+
.option('--timeout <ms>', 'HTTP request timeout in milliseconds (default: 30000)')
|
|
17
|
+
.option('--config <path>', 'Override credential file location (default: ~/.switchbot/config.json)')
|
|
18
|
+
.showHelpAfterError('(run with --help to see usage)')
|
|
19
|
+
.showSuggestionAfterError();
|
|
20
|
+
registerConfigCommand(program);
|
|
21
|
+
registerDevicesCommand(program);
|
|
22
|
+
registerScenesCommand(program);
|
|
23
|
+
registerWebhookCommand(program);
|
|
24
|
+
registerCompletionCommand(program);
|
|
25
|
+
program.addHelpText('after', `
|
|
26
|
+
Credentials:
|
|
27
|
+
Provide SwitchBot API v1.1 credentials via either:
|
|
28
|
+
• environment variables SWITCHBOT_TOKEN and SWITCHBOT_SECRET (take priority), or
|
|
29
|
+
• ~/.switchbot/config.json written by 'switchbot config set-token'
|
|
30
|
+
• override the file path with --config <path>
|
|
31
|
+
|
|
32
|
+
Exit codes:
|
|
33
|
+
0 success (including --dry-run intercept)
|
|
34
|
+
1 runtime error (API error, network failure, missing credentials, etc.)
|
|
35
|
+
2 usage error (bad flag, unknown subcommand, invalid argument, unknown device type)
|
|
36
|
+
|
|
37
|
+
Environment:
|
|
38
|
+
SWITCHBOT_TOKEN credential token (takes priority over config file)
|
|
39
|
+
SWITCHBOT_SECRET credential secret (takes priority over config file)
|
|
40
|
+
NO_COLOR disable ANSI colors (auto-respected via chalk)
|
|
41
|
+
|
|
42
|
+
Examples:
|
|
43
|
+
$ switchbot config set-token <token> <secret>
|
|
44
|
+
$ switchbot devices list
|
|
45
|
+
$ switchbot devices list --json | jq '.deviceList[].deviceId'
|
|
46
|
+
$ switchbot devices describe <deviceId> # what commands does this device support?
|
|
47
|
+
$ switchbot devices commands <type> # offline lookup, e.g. Bot / Curtain / "Smart Lock"
|
|
48
|
+
$ switchbot devices status <deviceId> # live state: battery, position, temperature, …
|
|
49
|
+
$ switchbot devices command <deviceId> turnOn
|
|
50
|
+
$ switchbot devices command <deviceId> turnOn --dry-run
|
|
51
|
+
$ switchbot scenes execute <sceneId> --verbose
|
|
52
|
+
$ switchbot webhook setup https://your.host/hook
|
|
53
|
+
|
|
54
|
+
Discovery:
|
|
55
|
+
Don't know a device ID / what it supports?
|
|
56
|
+
switchbot devices list → find your deviceIds + types
|
|
57
|
+
switchbot devices describe <deviceId> → live: metadata + supported commands
|
|
58
|
+
switchbot devices status <deviceId> → live: current values (battery, position, …)
|
|
59
|
+
switchbot devices types → offline: list every known type
|
|
60
|
+
switchbot devices commands <type> → offline: commands + parameters + status fields for a type
|
|
61
|
+
|
|
62
|
+
Docs: https://github.com/OpenWonderLabs/SwitchBotAPI
|
|
63
|
+
`);
|
|
64
|
+
// Map commander usage errors (unknown option, missing argument, etc.) to exit code 2.
|
|
65
|
+
program.exitOverride((err) => {
|
|
66
|
+
// --help and --version print to stdout and exit 0
|
|
67
|
+
if (err.code === 'commander.helpDisplayed' || err.code === 'commander.version') {
|
|
68
|
+
process.exit(0);
|
|
69
|
+
}
|
|
70
|
+
// Everything else from commander (unknown option, missing argument,
|
|
71
|
+
// invalid choice, conflicting options, unknown command) is a usage error.
|
|
72
|
+
process.exit(2);
|
|
73
|
+
});
|
|
74
|
+
try {
|
|
75
|
+
await program.parseAsync();
|
|
76
|
+
}
|
|
77
|
+
catch (err) {
|
|
78
|
+
// exitOverride already handled CommanderErrors; anything that escapes is a
|
|
79
|
+
// runtime error (should be rare since actions use handleError).
|
|
80
|
+
if (err instanceof CommanderError) {
|
|
81
|
+
process.exit(err.exitCode ?? 2);
|
|
82
|
+
}
|
|
83
|
+
throw err;
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AAErE,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,WAAW,CAAC;KACjB,WAAW,CAAC,0CAA0C,CAAC;KACvD,OAAO,CAAC,OAAO,CAAC;KAChB,MAAM,CAAC,QAAQ,EAAE,sEAAsE,CAAC;KACxF,MAAM,CAAC,eAAe,EAAE,6CAA6C,CAAC;KACtE,MAAM,CAAC,WAAW,EAAE,mEAAmE,CAAC;KACxF,MAAM,CAAC,gBAAgB,EAAE,uDAAuD,CAAC;KACjF,MAAM,CAAC,iBAAiB,EAAE,uEAAuE,CAAC;KAClG,kBAAkB,CAAC,gCAAgC,CAAC;KACpD,wBAAwB,EAAE,CAAC;AAE9B,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,sBAAsB,CAAC,OAAO,CAAC,CAAC;AAChC,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,sBAAsB,CAAC,OAAO,CAAC,CAAC;AAChC,yBAAyB,CAAC,OAAO,CAAC,CAAC;AAEnC,OAAO,CAAC,WAAW,CAAC,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsC5B,CAAC,CAAC;AAEH,sFAAsF;AACtF,OAAO,CAAC,YAAY,CAAC,CAAC,GAAmB,EAAE,EAAE;IAC3C,kDAAkD;IAClD,IAAI,GAAG,CAAC,IAAI,KAAK,yBAAyB,IAAI,GAAG,CAAC,IAAI,KAAK,mBAAmB,EAAE,CAAC;QAC/E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,oEAAoE;IACpE,0EAA0E;IAC1E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC;IACH,MAAM,OAAO,CAAC,UAAU,EAAE,CAAC;AAC7B,CAAC;AAAC,OAAO,GAAG,EAAE,CAAC;IACb,2EAA2E;IAC3E,gEAAgE;IAChE,IAAI,GAAG,YAAY,cAAc,EAAE,CAAC;QAClC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC;IAClC,CAAC;IACD,MAAM,GAAG,CAAC;AACZ,CAAC"}
|