homebridge-kasa-python 2.9.1 → 3.0.0-beta.1

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.
Files changed (57) hide show
  1. package/README.md +1 -1
  2. package/config.schema.json +17 -2
  3. package/dist/accessoryInformation.d.ts +2 -2
  4. package/dist/accessoryInformation.js +24 -28
  5. package/dist/accessoryInformation.js.map +1 -1
  6. package/dist/config.d.ts +5 -1
  7. package/dist/config.js +24 -16
  8. package/dist/config.js.map +1 -1
  9. package/dist/devices/baseDevice.d.ts +61 -0
  10. package/dist/devices/baseDevice.js +361 -0
  11. package/dist/devices/baseDevice.js.map +1 -0
  12. package/dist/devices/baseParent.d.ts +19 -0
  13. package/dist/devices/baseParent.js +150 -0
  14. package/dist/devices/baseParent.js.map +1 -0
  15. package/dist/devices/create.d.ts +3 -3
  16. package/dist/devices/create.js +21 -27
  17. package/dist/devices/create.js.map +1 -1
  18. package/dist/devices/descriptorHelpers.d.ts +14 -0
  19. package/dist/devices/descriptorHelpers.js +146 -0
  20. package/dist/devices/descriptorHelpers.js.map +1 -0
  21. package/dist/devices/deviceManager.d.ts +13 -13
  22. package/dist/devices/deviceManager.js +115 -137
  23. package/dist/devices/deviceManager.js.map +1 -1
  24. package/dist/devices/{kasaDevices.d.ts → deviceTypes.d.ts} +58 -42
  25. package/dist/devices/deviceTypes.js +20 -0
  26. package/dist/devices/deviceTypes.js.map +1 -0
  27. package/dist/devices/homekitLightBulb.d.ts +7 -28
  28. package/dist/devices/homekitLightBulb.js +42 -365
  29. package/dist/devices/homekitLightBulb.js.map +1 -1
  30. package/dist/devices/homekitPlug.d.ts +6 -25
  31. package/dist/devices/homekitPlug.js +21 -322
  32. package/dist/devices/homekitPlug.js.map +1 -1
  33. package/dist/devices/homekitPowerStrip.d.ts +6 -26
  34. package/dist/devices/homekitPowerStrip.js +25 -345
  35. package/dist/devices/homekitPowerStrip.js.map +1 -1
  36. package/dist/devices/homekitSwitch.d.ts +5 -26
  37. package/dist/devices/homekitSwitch.js +18 -302
  38. package/dist/devices/homekitSwitch.js.map +1 -1
  39. package/dist/devices/homekitSwitchWithChildren.d.ts +5 -29
  40. package/dist/devices/homekitSwitchWithChildren.js +24 -371
  41. package/dist/devices/homekitSwitchWithChildren.js.map +1 -1
  42. package/dist/energyCharacteristics.d.ts +8 -0
  43. package/dist/energyCharacteristics.js +88 -0
  44. package/dist/energyCharacteristics.js.map +1 -0
  45. package/dist/platform.d.ts +4 -2
  46. package/dist/platform.js +68 -63
  47. package/dist/platform.js.map +1 -1
  48. package/dist/python/kasaApi.py +68 -55
  49. package/dist/python/pythonChecker.js +2 -2
  50. package/dist/python/pythonChecker.js.map +1 -1
  51. package/package.json +15 -15
  52. package/requirements.txt +2 -2
  53. package/dist/devices/index.d.ts +0 -33
  54. package/dist/devices/index.js +0 -100
  55. package/dist/devices/index.js.map +0 -1
  56. package/dist/devices/kasaDevices.js +0 -102
  57. package/dist/devices/kasaDevices.js.map +0 -1
@@ -1,338 +1,37 @@
1
- import { EventEmitter } from 'node:events';
2
- import HomeKitDevice from './index.js';
3
- import { deferAndCombine } from '../utils.js';
1
+ import HomeKitDevice from './baseDevice.js';
2
+ import { buildOnDescriptor, buildOutletInUseDescriptor, buildEnergyDescriptors, } from './descriptorHelpers.js';
4
3
  export default class HomeKitDevicePlug extends HomeKitDevice {
5
4
  kasaDevice;
6
- isUpdating = false;
7
- previousKasaDevice;
8
- getSysInfo;
9
- pollingInterval;
10
- updateEmitter = new EventEmitter();
11
- static locks = new Map();
5
+ hasEnergy;
12
6
  constructor(platform, kasaDevice) {
13
7
  super(platform, kasaDevice, 7 /* Categories.OUTLET */, 'OUTLET');
14
8
  this.kasaDevice = kasaDevice;
15
- this.log.debug(`Initializing HomeKitDevicePlug for device: ${kasaDevice.sys_info.alias}`);
16
- this.checkService();
17
- this.getSysInfo = deferAndCombine(async () => {
18
- if (!this.deviceManager) {
19
- this.log.warn('Device manager is not available');
20
- return;
21
- }
22
- const host = this.kasaDevice.sys_info?.host;
23
- if (!host) {
24
- this.log.warn('No host found in sys_info for device');
25
- return;
26
- }
27
- try {
28
- this.previousKasaDevice = { ...this.kasaDevice };
29
- const updatedSysInfo = await this.deviceManager.getSysInfo(host);
30
- if (!updatedSysInfo) {
31
- this.log.warn('getSysInfo returned undefined');
32
- return;
33
- }
34
- this.kasaDevice.sys_info = updatedSysInfo;
35
- this.log.debug(`Updated sys_info for device: ${updatedSysInfo.alias ?? host}`);
36
- }
37
- catch (err) {
38
- const errorMsg = 'Error updating sys_info:';
39
- if (err instanceof Error) {
40
- this.log.error(`${errorMsg} ${err.message}`);
41
- }
42
- else {
43
- this.log.error(`${errorMsg} ${String(err)}`);
44
- }
45
- }
46
- }, platform.config.advancedOptions.waitTimeUpdate);
47
- platform.periodicDeviceDiscoveryEmitter.on('periodicDeviceDiscoveryComplete', () => {
48
- this.updateEmitter.emit('periodicDeviceDiscoveryComplete');
49
- });
9
+ this.hasEnergy = !!kasaDevice.sys_info.energy;
10
+ this.setupPrimaryService();
50
11
  }
51
12
  async initialize() {
52
- this.log.debug(`Initializing polling for device: ${this.kasaDevice.sys_info.alias}`);
53
13
  await this.startPolling();
54
14
  }
55
- async withLock(key, action) {
56
- let lock = HomeKitDevicePlug.locks.get(key);
57
- if (!lock) {
58
- lock = Promise.resolve();
59
- }
60
- const currentLock = lock.then(async () => {
61
- try {
62
- return await action();
63
- }
64
- finally {
65
- if (HomeKitDevicePlug.locks.get(key) === currentLock) {
66
- HomeKitDevicePlug.locks.delete(key);
67
- }
68
- }
69
- });
70
- HomeKitDevicePlug.locks.set(key, currentLock.then(() => { }));
71
- return currentLock;
72
- }
73
- checkService() {
74
- const serviceType = this.getServiceType();
75
- const service = this.homebridgeAccessory.getService(serviceType) ?? this.addService(serviceType, this.name);
76
- this.checkCharacteristics(service);
77
- }
78
- getServiceType() {
79
- const { Outlet } = this.platform.Service;
80
- return Outlet;
15
+ getPrimaryServiceType() {
16
+ return this.platform.Service.Outlet;
81
17
  }
82
- checkCharacteristics(service) {
83
- const characteristics = this.getCharacteristics();
84
- characteristics.forEach(({ type, name }) => {
85
- this.getOrAddCharacteristic(service, type, name);
18
+ buildPrimaryDescriptors() {
19
+ const C = this.platform.Characteristic;
20
+ const energyChars = this.platform.energyCharacteristics;
21
+ const onDescriptor = buildOnDescriptor(C, async (value, context) => {
22
+ await this.deviceManager.controlDevice(context.device.host, 'state', value);
86
23
  });
87
- }
88
- getCharacteristics() {
89
- const characteristics = [];
90
- characteristics.push({
91
- type: this.platform.Characteristic.On,
92
- name: this.platform.getCharacteristicName(this.platform.Characteristic.On),
93
- }, {
94
- type: this.platform.Characteristic.OutletInUse,
95
- name: this.platform.getCharacteristicName(this.platform.Characteristic.OutletInUse),
96
- });
97
- return characteristics;
98
- }
99
- getOrAddCharacteristic(service, characteristicType, characteristicName) {
100
- const characteristic = service.getCharacteristic(characteristicType) ??
101
- service.addCharacteristic(characteristicType);
102
- characteristic.onGet(this.handleOnGet.bind(this, service, characteristicType, characteristicName));
103
- if (characteristicType === this.platform.Characteristic.On) {
104
- characteristic.onSet(this.handleOnSet.bind(this, service, characteristicType, characteristicName));
24
+ const list = [
25
+ onDescriptor,
26
+ buildOutletInUseDescriptor(C, this.hasEnergy),
27
+ ];
28
+ if (this.platform.config.enableEnergyMonitoring && energyChars && this.kasaDevice.sys_info.energy) {
29
+ list.push(...buildEnergyDescriptors(energyChars));
105
30
  }
31
+ return list;
106
32
  }
107
- async handleOnGet(service, characteristicType, characteristicName) {
108
- if (this.kasaDevice.offline || this.platform.isShuttingDown) {
109
- this.log.warn(`Device is offline or platform is shutting down, cannot get value for characteristic ${characteristicName}`);
110
- return false;
111
- }
112
- try {
113
- let characteristicValue = service.getCharacteristic(characteristicType).value;
114
- if (!characteristicValue) {
115
- characteristicValue = this.getInitialValue(characteristicType);
116
- service.getCharacteristic(characteristicType).updateValue(characteristicValue);
117
- }
118
- this.log.debug(`Got value for characteristic ${characteristicName}: ${characteristicValue}`);
119
- return characteristicValue ?? false;
120
- }
121
- catch (error) {
122
- this.log.error(`Error getting current value for characteristic ${characteristicName} for device: ${this.name}:`, error);
123
- this.kasaDevice.offline = true;
124
- await this.stopPolling();
125
- return false;
126
- }
127
- }
128
- getInitialValue(characteristicType) {
129
- if (this.kasaDevice.feature_info.energy && this.kasaDevice.feature_info.energy === true && this.kasaDevice.sys_info.energy) {
130
- if (characteristicType === this.platform.Characteristic.On) {
131
- return this.kasaDevice.sys_info.state ?? false;
132
- }
133
- if (characteristicType === this.platform.Characteristic.OutletInUse) {
134
- return (this.kasaDevice.sys_info.energy.power ?? 0) > 1;
135
- }
136
- }
137
- else {
138
- if (characteristicType === this.platform.Characteristic.On || characteristicType === this.platform.Characteristic.OutletInUse) {
139
- return this.kasaDevice.sys_info.state ?? false;
140
- }
141
- }
142
- return false;
143
- }
144
- async handleOnSet(service, characteristicType, characteristicName, value) {
145
- const lockKey = `${this.kasaDevice.sys_info.device_id}`;
146
- await this.withLock(lockKey, async () => {
147
- if (this.kasaDevice.offline || this.platform.isShuttingDown) {
148
- this.log.warn(`Device is offline or platform is shutting down, cannot set value for characteristic ${characteristicName}`);
149
- return;
150
- }
151
- const task = async () => {
152
- if (this.deviceManager) {
153
- try {
154
- this.isUpdating = true;
155
- this.log.debug(`Setting value for characteristic ${characteristicName} to ${value}`);
156
- const characteristicKey = this.getCharacteristicKey(characteristicName);
157
- if (!characteristicKey) {
158
- throw new Error(`Characteristic key not found for ${characteristicName}`);
159
- }
160
- await this.deviceManager.controlDevice(this.kasaDevice.sys_info.host, characteristicKey, value);
161
- this.kasaDevice.sys_info[characteristicKey] = value;
162
- this.updateValue(service, service.getCharacteristic(characteristicType), this.name, value);
163
- if (this.kasaDevice.feature_info.energy && this.kasaDevice.feature_info.energy === true && this.kasaDevice.sys_info.energy) {
164
- const outlet_in_use = (Number(this.kasaDevice.sys_info.energy.power ?? 0) > 1);
165
- this.updateValue(service, service.getCharacteristic(this.platform.Characteristic.OutletInUse), this.name, outlet_in_use);
166
- }
167
- else {
168
- this.updateValue(service, service.getCharacteristic(this.platform.Characteristic.OutletInUse), this.name, value);
169
- }
170
- this.previousKasaDevice = JSON.parse(JSON.stringify(this.kasaDevice));
171
- this.log.debug(`Set value for characteristic ${characteristicName} to ${value} successfully`);
172
- }
173
- catch (error) {
174
- this.log.error(`Error setting current value for characteristic ${characteristicName} for device: ${this.name}:`, error);
175
- this.kasaDevice.offline = true;
176
- await this.stopPolling();
177
- }
178
- finally {
179
- this.isUpdating = false;
180
- this.updateEmitter.emit('updateComplete');
181
- }
182
- }
183
- else {
184
- throw new Error('Device manager is undefined.');
185
- }
186
- };
187
- await task();
188
- });
189
- }
190
- getCharacteristicKey(characteristicName) {
191
- const characteristicMap = {
192
- On: 'state',
193
- };
194
- return characteristicMap[characteristicName ?? ''];
195
- }
196
- async updateState() {
197
- const lockKey = `${this.kasaDevice.sys_info.device_id}`;
198
- await this.withLock(lockKey, async () => {
199
- if (this.kasaDevice.offline || this.platform.isShuttingDown) {
200
- await this.stopPolling();
201
- return;
202
- }
203
- if (this.isUpdating || this.platform.periodicDeviceDiscovering) {
204
- let periodicDiscoveryComplete = false;
205
- await Promise.race([
206
- new Promise((resolve) => this.updateEmitter.once('updateComplete', resolve)),
207
- new Promise((resolve) => {
208
- this.updateEmitter.once('periodicDeviceDiscoveryComplete', () => {
209
- periodicDiscoveryComplete = true;
210
- resolve();
211
- });
212
- }),
213
- ]);
214
- if (periodicDiscoveryComplete) {
215
- if (this.pollingInterval) {
216
- await new Promise((resolve) => setTimeout(resolve, this.platform.config.discoveryOptions.pollingInterval));
217
- }
218
- else {
219
- return;
220
- }
221
- }
222
- }
223
- this.isUpdating = true;
224
- const task = async () => {
225
- try {
226
- await this.getSysInfo();
227
- const service = this.getService();
228
- if (service && this.previousKasaDevice) {
229
- this.updateDeviceState(service);
230
- }
231
- else {
232
- this.log.warn(`Service not found for device: ${this.name} or previous Kasa device is undefined`);
233
- }
234
- }
235
- catch (error) {
236
- this.log.error('Error updating device state:', error);
237
- this.kasaDevice.offline = true;
238
- await this.stopPolling();
239
- }
240
- finally {
241
- this.isUpdating = false;
242
- this.updateEmitter.emit('updateComplete');
243
- }
244
- };
245
- await task();
246
- });
247
- }
248
- getService() {
249
- return this.homebridgeAccessory.getService(this.platform.Service.Outlet);
250
- ;
251
- }
252
- updateDeviceState(service) {
253
- const previousKasaDevice = this.previousKasaDevice;
254
- if (previousKasaDevice) {
255
- if (previousKasaDevice.sys_info.state !== this.kasaDevice.sys_info.state) {
256
- this.updateValue(service, service.getCharacteristic(this.platform.Characteristic.On), this.name, this.kasaDevice.sys_info.state ?? false);
257
- if (this.kasaDevice.feature_info.energy && this.kasaDevice.feature_info.energy === true && this.kasaDevice.sys_info.energy) {
258
- const outlet_in_use = (Number(this.kasaDevice.sys_info.energy.power ?? 0) > 1);
259
- this.updateValue(service, service.getCharacteristic(this.platform.Characteristic.OutletInUse), this.name, outlet_in_use);
260
- }
261
- else {
262
- this.updateValue(service, service.getCharacteristic(this.platform.Characteristic.OutletInUse), this.name, this.kasaDevice.sys_info.state ?? false);
263
- }
264
- this.log.debug(`Updated state for child device: ${this.name} to ${this.kasaDevice.sys_info.state}`);
265
- }
266
- }
267
- }
268
- updateAfterPeriodicDiscovery() {
269
- const serviceType = this.getServiceType();
270
- const service = this.homebridgeAccessory.getService(serviceType);
271
- if (service) {
272
- this.updateCharacteristics(service);
273
- }
274
- else {
275
- this.log.debug(`Service not found for device: ${this.name}`);
276
- }
277
- }
278
- updateCharacteristics(service) {
279
- const characteristics = this.getCharacteristics();
280
- characteristics.forEach(({ type, name }) => {
281
- if (type === this.platform.Characteristic.On) {
282
- const characteristic = service.getCharacteristic(type);
283
- if (characteristic) {
284
- const characteristicKey = this.getCharacteristicKey(name);
285
- if (this.kasaDevice.sys_info[characteristicKey] !== undefined) {
286
- const value = this.kasaDevice.sys_info[characteristicKey];
287
- this.log.debug(`Setting value for characteristic ${name} to ${value}`);
288
- this.updateValue(service, characteristic, this.name, value);
289
- if (this.kasaDevice.feature_info.energy && this.kasaDevice.feature_info.energy === true && this.kasaDevice.sys_info.energy) {
290
- const outlet_in_use = (Number(this.kasaDevice.sys_info.energy.power ?? 0) > 1);
291
- this.updateValue(service, service.getCharacteristic(this.platform.Characteristic.OutletInUse), this.name, outlet_in_use);
292
- }
293
- else {
294
- this.updateValue(service, service.getCharacteristic(this.platform.Characteristic.OutletInUse), this.name, this.kasaDevice.sys_info.state ?? false);
295
- }
296
- }
297
- }
298
- }
299
- });
300
- }
301
- async startPolling() {
302
- if (this.kasaDevice.offline || this.platform.isShuttingDown) {
303
- await this.stopPolling();
304
- return;
305
- }
306
- if (this.pollingInterval) {
307
- clearInterval(this.pollingInterval);
308
- }
309
- this.log.debug('Starting polling for device:', this.name);
310
- this.pollingInterval = setInterval(async () => {
311
- if (this.kasaDevice.offline || this.platform.isShuttingDown) {
312
- if (this.isUpdating) {
313
- this.isUpdating = false;
314
- this.updateEmitter.emit('updateComplete');
315
- }
316
- await this.stopPolling();
317
- }
318
- else {
319
- await this.updateState();
320
- }
321
- }, this.platform.config.discoveryOptions.pollingInterval);
322
- }
323
- async stopPolling() {
324
- if (this.pollingInterval) {
325
- clearInterval(this.pollingInterval);
326
- this.pollingInterval = undefined;
327
- this.log.debug('Stopped polling');
328
- }
329
- if (this.isUpdating) {
330
- this.log.debug('Waiting for ongoing polling task to complete for device:', this.name);
331
- await new Promise((resolve) => {
332
- this.isUpdating = false;
333
- this.updateEmitter.once('updateComplete', resolve);
334
- });
335
- }
33
+ async updateAllServicesAndCharacteristics(forceUpdate) {
34
+ await super.updateAllServicesAndCharacteristics(forceUpdate);
336
35
  }
337
36
  identify() {
338
37
  this.log.info('identify');
@@ -1 +1 @@
1
- {"version":3,"file":"homekitPlug.js","sourceRoot":"","sources":["../../src/devices/homekitPlug.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"homekitPlug.js","sourceRoot":"","sources":["../../src/devices/homekitPlug.ts"],"names":[],"mappings":"AAEA,OAAO,aAAa,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EACL,iBAAiB,EACjB,0BAA0B,EAC1B,sBAAsB,GACvB,MAAM,wBAAwB,CAAC;AAIhC,MAAM,CAAC,OAAO,OAAO,iBAAkB,SAAQ,aAAa;IAKjD;IAJD,SAAS,CAAU;IAE3B,YACE,QAA4B,EACrB,UAAgB;QAEvB,KAAK,CAAC,QAAQ,EAAE,UAAU,6BAAqB,QAAQ,CAAC,CAAC;QAFlD,eAAU,GAAV,UAAU,CAAM;QAGvB,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC;QAC9C,IAAI,CAAC,mBAAmB,EAAE,CAAC;IAC7B,CAAC;IAEM,KAAK,CAAC,UAAU;QACrB,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;IAC5B,CAAC;IAES,qBAAqB;QAC7B,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC;IACtC,CAAC;IAES,uBAAuB;QAC/B,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC;QACvC,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,qBAAqB,CAAC;QAExD,MAAM,YAAY,GAAG,iBAAiB,CACpC,CAAC,EACD,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;YACvB,MAAM,IAAI,CAAC,aAAc,CAAC,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;QAC/E,CAAC,CACF,CAAC;QAEF,MAAM,IAAI,GAA+B;YACvC,YAAY;YACZ,0BAA0B,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC;SAC9C,CAAC;QAEF,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,sBAAsB,IAAI,WAAW,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;YAClG,IAAI,CAAC,IAAI,CAAC,GAAG,sBAAsB,CAAC,WAAW,CAAC,CAAC,CAAC;QACpD,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAES,KAAK,CAAC,mCAAmC,CAAC,WAAoB;QACtE,MAAM,KAAK,CAAC,mCAAmC,CAAC,WAAW,CAAC,CAAC;IAC/D,CAAC;IAEM,QAAQ;QACb,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC5B,CAAC;CACF"}
@@ -1,32 +1,12 @@
1
- import HomeKitDevice from './index.js';
1
+ import HomeKitParentDevice from './baseParent.js';
2
2
  import type KasaPythonPlatform from '../platform.js';
3
- import type { PowerStrip } from './kasaDevices.js';
4
- export default class HomeKitDevicePowerStrip extends HomeKitDevice {
3
+ import type { PowerStrip, ChildDevice, CharacteristicDescriptor } from './deviceTypes.js';
4
+ export default class HomeKitDevicePowerStrip extends HomeKitParentDevice {
5
5
  kasaDevice: PowerStrip;
6
- isUpdating: boolean;
7
- private previousKasaDevice;
8
- private getSysInfo;
9
- private pollingInterval;
10
- private updateEmitter;
11
- private static locks;
6
+ private hasEnergy;
12
7
  constructor(platform: KasaPythonPlatform, kasaDevice: PowerStrip);
13
8
  initialize(): Promise<void>;
14
- private withLock;
15
- private checkService;
16
- private getServiceType;
17
- private checkCharacteristics;
18
- private getCharacteristics;
19
- private getOrAddCharacteristic;
20
- private handleOnGet;
21
- private getInitialValue;
22
- private handleOnSet;
23
- private getCharacteristicKey;
24
- protected updateState(): Promise<void>;
25
- private getService;
26
- private updateChildState;
27
- updateAfterPeriodicDiscovery(): void;
28
- private updateCharacteristics;
29
- startPolling(): Promise<void>;
30
- stopPolling(): Promise<void>;
9
+ protected getChildServiceType(_child: ChildDevice): typeof import("hap-nodejs/dist/lib/definitions/ServiceDefinitions.js").Outlet;
10
+ protected buildChildDescriptors(_child: ChildDevice): CharacteristicDescriptor[];
31
11
  identify(): void;
32
12
  }