@homebridge-plugins/homebridge-sharkiq 2.0.0-beta.12 → 2.0.0-beta.13

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/dist/platform.js CHANGED
@@ -1,341 +1,120 @@
1
- import { join } from 'node:path';
2
- import { RoboticVacuumAccessory } from './devices/RoboticVacuumAccessory.js';
3
- import { Login } from './login.js';
4
- import { PLUGIN_NAME } from './settings.js';
5
- import { get_ayla_api } from './sharkiq-js/ayla_api.js';
6
- import { global_vars } from './sharkiq-js/const.js';
7
- // SharkIQPlatform Main Class
1
+ import { RoboticVacuumAccessory, } from './devices/index.js';
2
+ import { PLATFORM_NAME, PLUGIN_NAME } from './settings.js';
3
+ /**
4
+ * MatterPlatform
5
+ * Demonstrates all available Matter device types in Homebridge
6
+ *
7
+ * Organized by official Matter Specification v1.4.1 categories
8
+ */
8
9
  export class SharkIQPlatform {
9
10
  log;
10
11
  config;
11
12
  api;
12
- Service;
13
- Characteristic;
14
- // this is used to track restored cached accessories
15
- accessories = [];
16
- // Device vacuums object array
17
- vacuumDevices = [];
18
- // Track restored Matter cached accessories (if running with Matter)
13
+ // Track restored HAP cached accessories (required for DynamicPlatformPlugin)
14
+ // This is commented out here as this plugin does not have any HAP accessories
15
+ // public readonly accessories: Map<string, PlatformAccessory> = new Map()
16
+ // Track restored Matter cached accessories
17
+ // Can contain either the serialized object restored from disk or a runtime Platform/MatterAccessory
19
18
  matterAccessories = new Map();
20
- // cache whether matter is enabled/available
21
- matterEnabled;
22
19
  constructor(log, config, api) {
23
20
  this.log = log;
24
21
  this.config = config;
25
22
  this.api = api;
26
- this.Service = this.api.hap.Service;
27
- this.Characteristic = this.api.hap.Characteristic;
28
23
  this.log.debug('Finished initializing platform:', this.config.name);
29
- // Start plugin and attempt to login
24
+ // Does the user have a version of Homebridge that is compatible with matter?
25
+ if (!this.api.isMatterAvailable?.()) {
26
+ this.log.warn('Matter is not available in this version of Homebridge. Please update Homebridge to use this plugin.');
27
+ }
28
+ // Check if the user has matter enabled, this means:
29
+ // - If the plugin is running on the main bridge, then the user must have enabled matter in the Homebridge settings page in the UI
30
+ // - If the plugin is running on a child bridge, then the user must have enabled matter on the plugin bridge settings section in the UI
31
+ // In reality, only the below check is needed, but they are both included here for completeness
32
+ // Remember to use a '?.' optional chaining operator in case the user is running an older version of Homebridge that does not have these APIs
33
+ if (!this.api.isMatterEnabled?.()) {
34
+ this.log.warn('Matter is not enabled in Homebridge. Please enable Matter in the Homebridge settings to use this plugin.');
35
+ return;
36
+ }
37
+ // Register Matter accessories when Homebridge has finished launching
30
38
  this.api.on('didFinishLaunching', () => {
31
- const serialNumbers = Array.isArray(this.config.vacuums) ? this.config.vacuums : [];
32
- this.login().then((devices) => {
33
- this.log.info(`Found ${devices.length} device(s) on your account.`);
34
- this.log.debug('Devices:', devices);
35
- // Build a list of DSNs returned by the API for logging
36
- const apiDsns = devices.map(d => (d._dsn && d._dsn.toString) ? d._dsn.toString() : String(d._dsn));
37
- this.log.info('DSNs on account:', apiDsns);
38
- if (serialNumbers.length > 0) {
39
- // If user provided DSNs in config, only add those that match
40
- for (let i = 0; i < devices.length; i++) {
41
- if (serialNumbers.includes(devices[i]._dsn)) {
42
- this.vacuumDevices.push(devices[i]);
43
- }
44
- }
45
- const selectedDsns = this.vacuumDevices.map(d => d._dsn && d._dsn.toString ? d._dsn.toString() : String(d._dsn));
46
- this.log.info('Selected DSNs from config:', selectedDsns);
47
- if (this.vacuumDevices.length === 0) {
48
- log.warn('None of the DSNs provided matched the vacuum(s) on your account.');
49
- }
50
- }
51
- else {
52
- // No DSNs provided in config — add all devices returned by the API
53
- this.log.info('No `vacuums` array specified in config; adding all devices from the account.');
54
- this.vacuumDevices = devices.slice();
55
- const addedDsns = this.vacuumDevices.map(d => d._dsn && d._dsn.toString ? d._dsn.toString() : String(d._dsn));
56
- this.log.info('Added DSNs:', addedDsns);
57
- }
58
- // Does the user have a version of Homebridge that is compatible with matter?
59
- if (!this.api.isMatterAvailable?.()) {
60
- this.log.warn('Matter is not available in this version of Homebridge. Please update Homebridge to use this plugin.');
61
- }
62
- // Check if the user has matter enabled, this means:
63
- // - If the plugin is running on the main bridge, then the user must have enabled matter in the Homebridge settings page in the UI
64
- // - If the plugin is running on a child bridge, then the user must have enabled matter on the plugin bridge settings section in the UI
65
- // In reality, only the below check is needed, but they are both included here for completeness
66
- // Remember to use a '?.' optional chaining operator in case the user is running an older version of Homebridge that does not have these APIs
67
- if (!this.api.isMatterEnabled?.()) {
68
- this.log.warn('Matter is not enabled in Homebridge. Please enable Matter in the Homebridge settings to use this plugin.');
69
- return;
70
- }
71
- this.discoverDevices();
72
- }).catch((error) => {
73
- log.error('Error with login.');
74
- log.error(error);
75
- });
39
+ this.log.debug('Executed didFinishLaunching callback');
40
+ this.registerMatterAccessories();
76
41
  });
77
- // Matter availability check (optional) - log helpful messages
78
- try {
79
- const isAvailable = this.api.isMatterAvailable?.();
80
- const isEnabled = this.api.isMatterEnabled?.();
81
- if (isAvailable === false) {
82
- this.log.info('Matter is not available in this version of Homebridge.');
83
- }
84
- else if (isAvailable && isEnabled === false) {
85
- this.log.warn('Matter is available but not enabled. Enable Matter in Homebridge settings to use Matter features.');
86
- }
87
- else if (isAvailable && isEnabled) {
88
- this.log.info('Matter is available and enabled. Matter accessories will be published when supported.');
89
- }
90
- else {
91
- this.log.debug('Matter availability check inconclusive (functions may be missing).');
92
- }
93
- }
94
- catch (e) {
95
- this.log.debug('Matter availability check skipped (not supported by this Homebridge version).');
96
- }
97
- // store a boolean for quick checks later
98
- this.matterEnabled = !!(this.api.matter && this.api.matter.publishExternalAccessories);
42
+ }
43
+ /**
44
+ * Required for DynamicPlatformPlugin
45
+ * Called when homebridge restores cached accessories from disk at startup
46
+ */
47
+ configureAccessory( /* accessory: PlatformAccessory */) {
48
+ // Note this is not used for Matter accessories - use configureMatterAccessory instead
49
+ // This plugin does not have any hap accessories, so here we can comment this out
50
+ // this.accessories.set(accessory.UUID, accessory)
99
51
  }
100
52
  /**
101
53
  * Called when homebridge restores cached Matter accessories from disk at startup.
102
- * This lets the platform keep track of cached Matter accessories if needed.
54
+ *
55
+ * This is where you can access the `accessory.context` object to retrieve
56
+ * any custom data you stored when the accessory was originally registered.
103
57
  */
104
58
  configureMatterAccessory(accessory) {
105
59
  this.log.debug('Loading cached Matter accessory:', accessory.displayName);
106
- // If we have a stored instance for this uuid, attach the published accessory object to it
107
- const stored = this.matterAccessories.get(accessory.uuid);
108
- if (stored && stored.instance && typeof stored.instance.attachToPublishedAccessory === 'function') {
109
- stored.accessory = accessory;
110
- try {
111
- stored.instance.attachToPublishedAccessory(accessory);
112
- }
113
- catch (e) {
114
- this.log.debug('Error attaching instance to published Matter accessory', e);
115
- }
116
- this.matterAccessories.set(accessory.uuid, stored);
117
- }
118
- else {
119
- // No instance cached; store accessory so future publish or restarts can map it
120
- this.matterAccessories.set(accessory.uuid, { instance: null, accessory });
121
- }
60
+ // store the serialized accessory; later code may replace this with a runtime MatterAccessory instance
61
+ this.matterAccessories.set(accessory.uuid, accessory);
122
62
  }
123
- // Attempt to login and fetch devices.
124
- login = async () => {
125
- const europe = this.config.europe || false;
126
- const storagePath = this.api.user.storagePath();
127
- const auth_file = join(storagePath, global_vars.FILE);
128
- const oauth_file = join(storagePath, global_vars.OAUTH.FILE);
129
- const oAuthCode = this.config.oAuthCode || '';
130
- const email = this.config.email || '';
131
- const password = this.config.password || '';
132
- // Log which login method is being used based on user configuration
133
- // Email/password takes precedence if both are provided (matches Login class logic)
134
- if (email && typeof email === 'string' && email.trim() !== ''
135
- && password && typeof password === 'string' && password.trim() !== '') {
136
- this.log.info('Valid email and password present, using email and password login method.');
137
- }
138
- else if (oAuthCode && typeof oAuthCode === 'string' && oAuthCode.trim() !== '') {
139
- this.log.info('Valid OAuth code present, using OAuth login method.');
140
- }
141
- if (email !== '' && password === '') {
142
- return Promise.reject(new Error('Password must be present in the config if email is provided.'));
143
- }
144
- else if (email === '' && password !== '') {
145
- return Promise.reject(new Error('Email must be present in the config if password is provided.'));
146
- }
147
- const login = new Login(this.log, auth_file, oauth_file, email, password, oAuthCode, europe);
148
- try {
149
- await login.checkLogin();
150
- const ayla_api = get_ayla_api(auth_file, this.log, europe);
151
- await ayla_api.sign_in();
152
- const devices = await ayla_api.get_devices();
153
- return devices;
154
- }
155
- catch (error) {
156
- return Promise.reject(error);
157
- }
158
- };
159
- // Restore accessory cache.
160
- configureAccessory(accessory) {
161
- this.log.info('Loading accessory from cache:', accessory.displayName);
162
- this.accessories.push(accessory);
63
+ /**
64
+ * Register all Matter accessories
65
+ */
66
+ async registerMatterAccessories() {
67
+ this.log.info('═'.repeat(80));
68
+ this.log.info('Homebridge Matter Plugin');
69
+ this.log.info('═'.repeat(80));
70
+ // Remove accessories that are disabled in config
71
+ await this.removeDisabledAccessories();
72
+ // Register devices by Matter specification sections
73
+ await this.registerSection12Robotic();
74
+ this.log.info('═'.repeat(80));
75
+ this.log.info('Finished registering Matter accessories');
76
+ this.log.info('═'.repeat(80));
163
77
  }
164
- // Add vacuums to Homebridge.
165
- discoverDevices() {
166
- // Build RoboticVacuumAccessory instances (Matter external accessories) for each vacuum device.
167
- for (const vacuumDevice of this.vacuumDevices) {
168
- // We will publish Matter external accessories only; RoboticVacuumAccessory will handle initial sync when ready.
169
- try {
170
- const rvc = new RoboticVacuumAccessory(this.api, this.log, vacuumDevice);
171
- // Store instance placeholder; the accessory object will be attached in configureMatterAccessory
172
- const serialNumber = vacuumDevice._dsn && vacuumDevice._dsn.toString ? vacuumDevice._dsn.toString() : String(vacuumDevice._dsn);
173
- const uuid = this.api.matter.uuid.generate(serialNumber);
174
- this.matterAccessories.set(uuid, { instance: rvc, accessory: null });
175
- }
176
- catch (err) {
177
- this.log.debug('Failed to instantiate RoboticVacuumAccessory for device', vacuumDevice, err);
178
- }
179
- }
180
- // Matter API is required; build Matter external accessories list from our vacuum devices using RoboticVacuumAccessory
181
- const apiMatter = this.api.matter;
182
- const matterAccessoriesToPublish = [];
183
- for (const vacuumDevice of this.vacuumDevices) {
184
- try {
185
- const rvc = new RoboticVacuumAccessory(this.api, this.log, vacuumDevice);
186
- const acc = rvc.toAccessory();
187
- // store instance with accessory placeholder; the actual published accessory object will be attached after publishing
188
- this.matterAccessories.set(acc.uuid, { instance: rvc, accessory: null });
189
- matterAccessoriesToPublish.push(acc);
190
- }
191
- catch (err) {
192
- this.log.debug('Failed to create RoboticVacuumAccessory for device', vacuumDevice, err);
193
- }
194
- }
195
- if (matterAccessoriesToPublish.length === 0) {
196
- this.log.warn('No Matter accessories to publish (no supported robotic vacuums found).');
197
- return;
198
- }
199
- this.log.info(`✓ Publishing ${matterAccessoriesToPublish.length} robotic device(s) as external Matter accessories`);
200
- for (const acc of matterAccessoriesToPublish) {
201
- this.log.info(` - ${acc.displayName}`);
202
- }
203
- try {
204
- // Publish and then attach the exact published accessory objects back to our instances
205
- // Some Homebridge builds expose the publish API directly on api.matter, while others nest it under api.matter.api.
206
- if (apiMatter && typeof apiMatter.publishExternalAccessories === 'function') {
207
- apiMatter.publishExternalAccessories(PLUGIN_NAME, matterAccessoriesToPublish);
208
- this.log.info('Matter accessories published using api.matter.publishExternalAccessories');
209
- }
210
- else if (apiMatter && apiMatter.api && typeof apiMatter.api.publishExternalAccessories === 'function') {
211
- // Some Homebridge builds expect PlatformAccessory instances from api.matter.api.platformAccessory
212
- const platformAccFactory = apiMatter.api.platformAccessory;
213
- let platformAccessoriesToPublish = matterAccessoriesToPublish;
214
- if (typeof platformAccFactory === 'function') {
215
- try {
216
- platformAccessoriesToPublish = matterAccessoriesToPublish.map((acc) => platformAccFactory(acc));
217
- }
218
- catch (e) {
219
- this.log.debug('Failed to convert accessories to platformAccessory instances, will try publishing raw objects', e);
220
- }
78
+ /**
79
+ * Remove accessories that are disabled in config
80
+ */
81
+ async removeDisabledAccessories() {
82
+ const configMap = [
83
+ { enabled: this.config.enableRobotVacuum, uuid: this.api.matter.uuid.generate('matter-robot-vacuum'), name: 'Robot Vacuum' },
84
+ ];
85
+ for (const { enabled, uuid, name } of configMap) {
86
+ if (enabled === false) {
87
+ const existingAccessory = this.matterAccessories.get(uuid);
88
+ if (existingAccessory) {
89
+ this.log.info(`Removing accessory '${name}' (disabled in config)`);
90
+ await this.api.matter.unregisterPlatformAccessories(PLUGIN_NAME, PLATFORM_NAME, [existingAccessory]);
91
+ this.matterAccessories.delete(uuid);
221
92
  }
222
- apiMatter.api.publishExternalAccessories(PLUGIN_NAME, platformAccessoriesToPublish);
223
- this.log.info('Matter accessories published using api.matter.api.publishExternalAccessories');
224
- }
225
- else {
226
- throw new Error('publishExternalAccessories API not found on api.matter or api.matter.api');
227
- }
228
- // After publish, the homebridge runtime will provide published accessory objects via the configureMatterAccessory hook.
229
- // We will expect configureMatterAccessory to be called for each published accessory and then attach listeners there.
230
- }
231
- catch (err) {
232
- this.log.error('Failed to publish Matter external accessories:', err);
233
- this.log.error('Detected matter object:', Boolean(apiMatter), 'api.matter keys:', apiMatter ? Object.keys(apiMatter) : []);
234
- // If nested api object exists, show its keys too for debugging
235
- if (apiMatter && apiMatter.api) {
236
- this.log.error('api.matter.api keys:', Object.keys(apiMatter.api));
237
93
  }
238
- this.log.error('Ensure Homebridge is running a Matter-capable build and that Matter is enabled.');
239
94
  }
240
- // Note: configureMatterAccessory will be called for cached/published Matter accessories and attach instances
241
95
  }
242
96
  /**
243
- * Publish Matter external accessories in a way that handles multiple Homebridge API shapes.
244
- *
245
- * Preferred path: publish serialized Matter accessory objects (SerializedMatterAccessory) via
246
- * `api.matter.publishExternalAccessories(pluginName, accessories)` — this is the canonical
247
- * method used by Homebridge Matter examples and allows each device to appear as its own
248
- * Matter bridge/device in Apple Home.
249
- *
250
- * Compatibility: some Homebridge builds expose the Matter API under `api.matter.api` and
251
- * expect `PlatformAccessory` instances produced by `api.matter.api.platformAccessory`.
252
- * This helper attempts the canonical serialized-object publish first, and will try to
253
- * convert to `PlatformAccessory` instances when required by the runtime.
97
+ * Section 12: Robotic Devices (Matter Spec § 12)
98
+ * ⚠️ IMPORTANT: RVC devices use a DIFFERENT PROCESS (same code) than other devices!
99
+ * When this runs, you'll see separate commissioning codes in the logs for the robot vacuum.
100
+ * Use those codes to pair the vacuum as a separate bridge in your Home app.
254
101
  */
255
- publishMatterAccessories(pluginName, accessories) {
256
- const apiMatter = this.api.matter;
257
- const tryPublishSerialized = () => {
258
- if (apiMatter && typeof apiMatter.publishExternalAccessories === 'function') {
259
- apiMatter.publishExternalAccessories(pluginName, accessories);
260
- this.log.info('Matter accessories published using api.matter.publishExternalAccessories');
261
- return true;
262
- }
263
- return false;
264
- };
265
- const tryPublishNestedApi = () => {
266
- if (apiMatter && apiMatter.api && typeof apiMatter.api.publishExternalAccessories === 'function') {
267
- // If the runtime provides a platformAccessory factory, try converting our plain serialized
268
- // accessory objects into the runtime's PlatformAccessory instances. If conversion fails,
269
- // we'll still attempt to publish the raw objects (some builds accept serialized objects
270
- // under the nested api as well).
271
- const platformAccFactory = apiMatter.api.platformAccessory;
272
- let platformAccessoriesToPublish = accessories;
273
- if (typeof platformAccFactory === 'function') {
274
- const converted = [];
275
- for (const acc of accessories) {
276
- try {
277
- const p = platformAccFactory(acc);
278
- this.log.debug('Converted accessory using platformAccessory factory:', p && p.constructor ? p.constructor.name : typeof p, Object.keys(p || {}));
279
- converted.push(p);
280
- }
281
- catch (e) {
282
- this.log.debug('platformAccessory factory threw for accessory, falling back to raw serialized object', e);
283
- // push the raw serialized object so we still attempt to publish
284
- converted.push(acc);
285
- }
286
- }
287
- platformAccessoriesToPublish = converted;
288
- }
289
- try {
290
- apiMatter.api.publishExternalAccessories(pluginName, platformAccessoriesToPublish);
291
- this.log.info('Matter accessories published using api.matter.api.publishExternalAccessories');
292
- }
293
- catch (pubErr) {
294
- // Log diagnostics about each object we tried to register to help debug the runtime TypeError
295
- this.log.error('publishExternalAccessories threw an error when called with the following accessory shapes:');
296
- for (const a of platformAccessoriesToPublish) {
297
- try {
298
- this.log.error(' - constructor:', a && a.constructor ? a.constructor.name : typeof a, 'keys:', a ? Object.keys(a) : []);
299
- }
300
- catch (diagErr) {
301
- this.log.error(' - (failed to introspect accessory):', diagErr);
302
- }
303
- }
304
- throw pubErr;
305
- }
306
- return true;
307
- }
308
- return false;
309
- };
310
- try {
311
- // Prefer canonical serialized publish first
312
- if (tryPublishSerialized()) {
313
- return;
314
- }
315
- // If canonical publish not available, attempt nested API publish
316
- if (tryPublishNestedApi()) {
317
- return;
318
- }
319
- // As a last resort, retry once after a short delay — some Homebridge builds initialize
320
- // the nested Matter object shortly after didFinishLaunching.
321
- setTimeout(() => {
322
- this.log.debug('Retrying Matter publish after short delay...');
323
- if (tryPublishSerialized()) {
324
- return;
325
- }
326
- if (tryPublishNestedApi()) {
327
- return;
328
- }
329
- this.log.error('publishExternalAccessories API not found on api.matter or api.matter.api');
330
- }, 250);
331
- }
332
- catch (err) {
333
- this.log.error('Failed to publish Matter external accessories:', err);
334
- this.log.error('Detected matter object:', Boolean(apiMatter), 'api.matter keys:', apiMatter ? Object.keys(apiMatter) : []);
335
- if (apiMatter && apiMatter.api) {
336
- this.log.error('api.matter.api keys:', Object.keys(apiMatter.api));
337
- }
338
- this.log.error('Ensure Homebridge is running a Matter-capable build and that Matter is enabled.');
102
+ async registerSection12Robotic() {
103
+ this.log.info('═'.repeat(80));
104
+ this.log.info('Section 12: Robotic Devices (Matter Spec § 12)');
105
+ this.log.info('═'.repeat(80));
106
+ const accessories = [];
107
+ // Robot Vacuum
108
+ if (this.config.enableRobotVacuum !== false) {
109
+ const device = new RoboticVacuumAccessory(this.api, this.log);
110
+ accessories.push(device.toAccessory());
111
+ }
112
+ if (accessories.length > 0) {
113
+ this.log.info(`✓ Registered ${accessories.length} robot vacuum device(s)`);
114
+ for (const acc of accessories) {
115
+ this.log.info(` - ${acc.displayName} (standalone for Apple Home compatibility)`);
116
+ }
117
+ await this.api.matter.registerPlatformAccessories(PLUGIN_NAME, PLATFORM_NAME, accessories);
339
118
  }
340
119
  }
341
120
  }
@@ -1 +1 @@
1
- {"version":3,"file":"platform.js","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"platform.js","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"AASA,OAAO,EACL,sBAAsB,GACvB,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAE1D;;;;;GAKG;AACH,MAAM,OAAO,eAAe;IAUR;IACA;IACA;IAXlB,6EAA6E;IAC7E,8EAA8E;IAC9E,0EAA0E;IAE1E,2CAA2C;IAC3C,oGAAoG;IACpF,iBAAiB,GAA6D,IAAI,GAAG,EAAE,CAAA;IAEvG,YACkB,GAAY,EACZ,MAAsB,EACtB,GAAQ;QAFR,QAAG,GAAH,GAAG,CAAS;QACZ,WAAM,GAAN,MAAM,CAAgB;QACtB,QAAG,GAAH,GAAG,CAAK;QAExB,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,iCAAiC,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;QAEnE,6EAA6E;QAC7E,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,iBAAiB,EAAE,EAAE,EAAE,CAAC;YACpC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,qGAAqG,CAAC,CAAA;QACtH,CAAC;QAED,oDAAoD;QACpD,kIAAkI;QAClI,uIAAuI;QACvI,+FAA+F;QAC/F,6IAA6I;QAC7I,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,EAAE,EAAE,CAAC;YAClC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,0GAA0G,CAAC,CAAA;YACzH,OAAM;QACR,CAAC;QAED,qEAAqE;QACrE,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,oBAAoB,EAAE,GAAG,EAAE;YACrC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAA;YACtD,IAAI,CAAC,yBAAyB,EAAE,CAAA;QAClC,CAAC,CAAC,CAAA;IACJ,CAAC;IAED;;;OAGG;IACH,kBAAkB,EAAC,kCAAkC;QACnD,sFAAsF;QACtF,iFAAiF;QACjF,kDAAkD;IACpD,CAAC;IAED;;;;;OAKG;IACH,wBAAwB,CAAC,SAAoC;QAC3D,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,kCAAkC,EAAE,SAAS,CAAC,WAAW,CAAC,CAAA;QACzE,sGAAsG;QACtG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,CAAA;IACvD,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,yBAAyB;QACrC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAA;QAC7B,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAA;QACzC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAA;QAE7B,iDAAiD;QACjD,MAAM,IAAI,CAAC,yBAAyB,EAAE,CAAA;QAEtC,oDAAoD;QACpD,MAAM,IAAI,CAAC,wBAAwB,EAAE,CAAA;QAErC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAA;QAC7B,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAA;QACxD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAA;IAC/B,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,yBAAyB;QACrC,MAAM,SAAS,GAAG;YAChB,EAAE,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,qBAAqB,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE;SAC7H,CAAA;QAED,KAAK,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,SAAS,EAAE,CAAC;YAChD,IAAI,OAAO,KAAK,KAAK,EAAE,CAAC;gBACtB,MAAM,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;gBAC1D,IAAI,iBAAiB,EAAE,CAAC;oBACtB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,uBAAuB,IAAI,wBAAwB,CAAC,CAAA;oBAClE,MAAM,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,6BAA6B,CAAC,WAAW,EAAE,aAAa,EAAE,CAAC,iBAA+C,CAAC,CAAC,CAAA;oBAClI,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;gBACrC,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACK,KAAK,CAAC,wBAAwB;QACpC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAA;QAC7B,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAA;QAC/D,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAA;QAE7B,MAAM,WAAW,GAAsB,EAAE,CAAA;QAEzC,eAAe;QACf,IAAI,IAAI,CAAC,MAAM,CAAC,iBAAiB,KAAK,KAAK,EAAE,CAAC;YAC5C,MAAM,MAAM,GAAG,IAAI,sBAAsB,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAA;YAC7D,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAA;QACxC,CAAC;QAED,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,gBAAgB,WAAW,CAAC,MAAM,yBAAyB,CAAC,CAAA;YAC1E,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;gBAC9B,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,WAAW,4CAA4C,CAAC,CAAA;YACnF,CAAC;YACD,MAAM,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,2BAA2B,CAAC,WAAW,EAAE,aAAa,EAAE,WAAW,CAAC,CAAA;QAC5F,CAAC;IACH,CAAC;CACF"}
@@ -1 +1,2 @@
1
- <!DOCTYPE html><html class="default" lang="en" data-base="../"><head><meta charset="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>default | @homebridge-plugins/homebridge-sharkiq</title><meta name="description" content="Documentation for @homebridge-plugins/homebridge-sharkiq"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async src="../assets/icons.js" id="tsd-icons-script"></script><script async src="../assets/search.js" id="tsd-search-script"></script><script async src="../assets/navigation.js" id="tsd-nav-script"></script></head><body><script>document.documentElement.dataset.theme = localStorage.getItem("tsd-theme") || "os";document.body.style.display="none";setTimeout(() => window.app?app.showPage():document.body.style.removeProperty("display"),500)</script><header class="tsd-page-toolbar"><div class="tsd-toolbar-contents container"><a href="../index.html" class="title">@homebridge-plugins/homebridge-sharkiq</a><div id="tsd-toolbar-links"></div><button id="tsd-search-trigger" class="tsd-widget" aria-label="Search"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-search"></use></svg></button><dialog id="tsd-search" aria-label="Search"><input role="combobox" id="tsd-search-input" aria-controls="tsd-search-results" aria-autocomplete="list" aria-expanded="true" autocapitalize="off" autocomplete="off" placeholder="Search the docs" maxLength="100"/><ul role="listbox" id="tsd-search-results"></ul><div id="tsd-search-status" aria-live="polite" aria-atomic="true"><div>Preparing search index...</div></div></dialog><a href="#" class="tsd-widget menu" id="tsd-toolbar-menu-trigger" data-toggle="menu" aria-label="Menu"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-menu"></use></svg></a></div></header><div class="container container-main"><div class="col-content"><div class="tsd-page-title"><ul class="tsd-breadcrumb" aria-label="Breadcrumb"><li><a href="" aria-current="page">default</a></li></ul><h1>Variable default</h1></div><div class="tsd-signature"><span class="tsd-kind-variable">default</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-symbol">(</span><span class="tsd-kind-parameter">api</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">API</span><span class="tsd-signature-symbol">)</span> <span class="tsd-signature-symbol">=&gt;</span> <span class="tsd-signature-type">void</span></div><div class="tsd-type-declaration"><h4>Type Declaration</h4><ul class="tsd-parameters"><li class="tsd-parameter-signature"><ul class="tsd-signatures"><li class="tsd-signature" id="__type"><span class="tsd-signature-symbol">(</span><span class="tsd-kind-parameter">api</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">API</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">void</span></li><li class="tsd-description"><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><span><span class="tsd-kind-parameter">api</span>: <span class="tsd-signature-type">API</span></span></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4></li></ul></li></ul></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/homebridge-plugins/homebridge-sharkiq/blob/4d18c8fe4368f4f582cfbb1610a54da0e4ee612c/src/index.ts#L7">index.ts:7</a></li></ul></aside></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-accordion"><summary class="tsd-accordion-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg><h3>Settings</h3></summary><div class="tsd-accordion-details"><div class="tsd-filter-visibility"><span class="settings-label">Member Visibility</span><ul id="tsd-filter-options"><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-inherited" name="inherited" checked/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Inherited</span></label></li></ul></div><div class="tsd-theme-toggle"><label class="settings-label" for="tsd-theme">Theme</label><select id="tsd-theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></details></div></div><div class="site-menu"><nav class="tsd-navigation"><a href="../modules.html">@homebridge-plugins/homebridge-sharkiq</a><ul class="tsd-small-nested-navigation" id="tsd-nav-container"><li>Loading...</li></ul></nav></div></div></div><footer></footer><div class="overlay"></div></body></html>
1
+ <!DOCTYPE html><html class="default" lang="en" data-base="../"><head><meta charset="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>default | @homebridge-plugins/homebridge-sharkiq</title><meta name="description" content="Documentation for @homebridge-plugins/homebridge-sharkiq"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async src="../assets/icons.js" id="tsd-icons-script"></script><script async src="../assets/search.js" id="tsd-search-script"></script><script async src="../assets/navigation.js" id="tsd-nav-script"></script></head><body><script>document.documentElement.dataset.theme = localStorage.getItem("tsd-theme") || "os";document.body.style.display="none";setTimeout(() => window.app?app.showPage():document.body.style.removeProperty("display"),500)</script><header class="tsd-page-toolbar"><div class="tsd-toolbar-contents container"><a href="../index.html" class="title">@homebridge-plugins/homebridge-sharkiq</a><div id="tsd-toolbar-links"></div><button id="tsd-search-trigger" class="tsd-widget" aria-label="Search"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-search"></use></svg></button><dialog id="tsd-search" aria-label="Search"><input role="combobox" id="tsd-search-input" aria-controls="tsd-search-results" aria-autocomplete="list" aria-expanded="true" autocapitalize="off" autocomplete="off" placeholder="Search the docs" maxLength="100"/><ul role="listbox" id="tsd-search-results"></ul><div id="tsd-search-status" aria-live="polite" aria-atomic="true"><div>Preparing search index...</div></div></dialog><a href="#" class="tsd-widget menu" id="tsd-toolbar-menu-trigger" data-toggle="menu" aria-label="Menu"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-menu"></use></svg></a></div></header><div class="container container-main"><div class="col-content"><div class="tsd-page-title"><ul class="tsd-breadcrumb" aria-label="Breadcrumb"><li><a href="" aria-current="page">default</a></li></ul><h1>Variable default</h1></div><div class="tsd-signature"><span class="tsd-kind-variable">default</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-symbol">(</span><span class="tsd-kind-parameter">api</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">API</span><span class="tsd-signature-symbol">)</span> <span class="tsd-signature-symbol">=&gt;</span> <span class="tsd-signature-type">void</span></div><div class="tsd-comment tsd-typography"><p>This method registers the platform with Homebridge</p>
2
+ </div><div class="tsd-type-declaration"><h4>Type Declaration</h4><ul class="tsd-parameters"><li class="tsd-parameter-signature"><ul class="tsd-signatures"><li class="tsd-signature" id="__type"><span class="tsd-signature-symbol">(</span><span class="tsd-kind-parameter">api</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">API</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">void</span></li><li class="tsd-description"><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><span><span class="tsd-kind-parameter">api</span>: <span class="tsd-signature-type">API</span></span></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4></li></ul></li></ul></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/homebridge-plugins/homebridge-sharkiq/blob/24bd8885f38688e93f25f6cf6df689cd1e55d5a5/src/index.ts#L9">index.ts:9</a></li></ul></aside></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-accordion"><summary class="tsd-accordion-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg><h3>Settings</h3></summary><div class="tsd-accordion-details"><div class="tsd-filter-visibility"><span class="settings-label">Member Visibility</span><ul id="tsd-filter-options"><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-inherited" name="inherited" checked/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Inherited</span></label></li></ul></div><div class="tsd-theme-toggle"><label class="settings-label" for="tsd-theme">Theme</label><select id="tsd-theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></details></div></div><div class="site-menu"><nav class="tsd-navigation"><a href="../modules.html">@homebridge-plugins/homebridge-sharkiq</a><ul class="tsd-small-nested-navigation" id="tsd-nav-container"><li>Loading...</li></ul></nav></div></div></div><footer></footer><div class="overlay"></div></body></html>
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@homebridge-plugins/homebridge-sharkiq",
3
3
  "displayName": "SharkIQ Plugin",
4
4
  "type": "module",
5
- "version": "2.0.0-beta.12",
5
+ "version": "2.0.0-beta.13",
6
6
  "description": "A Homebridge plugin to connect your Shark Vacuum to homebridge.",
7
7
  "author": {
8
8
  "name": "Bubba8291",
@@ -1,19 +0,0 @@
1
- import type { Logger } from 'homebridge';
2
- /**
3
- * Centralized error handling utilities
4
- */
5
- /**
6
- * Logs a rejected promise with consistent formatting
7
- * @param log - The logger instance
8
- * @param operation - Description of the operation that failed
9
- * @param error - Optional error details
10
- */
11
- export declare function logRejectedPromise(log: Logger, operation: string, error?: unknown): void;
12
- /**
13
- * Creates a promise rejection handler that logs the error
14
- * @param log - The logger instance
15
- * @param operation - Description of the operation that failed
16
- * @returns A function that can be used with .catch()
17
- */
18
- export declare function createPromiseRejectionHandler(log: Logger, operation: string): (error?: unknown) => void;
19
- //# sourceMappingURL=errorHandling.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"errorHandling.d.ts","sourceRoot":"","sources":["../src/errorHandling.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAExC;;GAEG;AAEH;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,GAAG,IAAI,CAKxF;AAED;;;;;GAKG;AACH,wBAAgB,6BAA6B,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,IAClE,QAAQ,OAAO,UAGxB"}
@@ -1,27 +0,0 @@
1
- /**
2
- * Centralized error handling utilities
3
- */
4
- /**
5
- * Logs a rejected promise with consistent formatting
6
- * @param log - The logger instance
7
- * @param operation - Description of the operation that failed
8
- * @param error - Optional error details
9
- */
10
- export function logRejectedPromise(log, operation, error) {
11
- log.debug(`Promise Rejected with ${operation}.`);
12
- if (error) {
13
- log.debug(`Error details: ${error}`);
14
- }
15
- }
16
- /**
17
- * Creates a promise rejection handler that logs the error
18
- * @param log - The logger instance
19
- * @param operation - Description of the operation that failed
20
- * @returns A function that can be used with .catch()
21
- */
22
- export function createPromiseRejectionHandler(log, operation) {
23
- return (error) => {
24
- logRejectedPromise(log, operation, error);
25
- };
26
- }
27
- //# sourceMappingURL=errorHandling.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"errorHandling.js","sourceRoot":"","sources":["../src/errorHandling.ts"],"names":[],"mappings":"AAEA;;GAEG;AAEH;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAAC,GAAW,EAAE,SAAiB,EAAE,KAAe;IAChF,GAAG,CAAC,KAAK,CAAC,yBAAyB,SAAS,GAAG,CAAC,CAAA;IAChD,IAAI,KAAK,EAAE,CAAC;QACV,GAAG,CAAC,KAAK,CAAC,kBAAkB,KAAK,EAAE,CAAC,CAAA;IACtC,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,6BAA6B,CAAC,GAAW,EAAE,SAAiB;IAC1E,OAAO,CAAC,KAAe,EAAE,EAAE;QACzB,kBAAkB,CAAC,GAAG,EAAE,SAAS,EAAE,KAAK,CAAC,CAAA;IAC3C,CAAC,CAAA;AACH,CAAC"}