homebridge-plejd 1.6.1 → 1.7.0-beta

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.
@@ -1,7 +1,7 @@
1
- import { plejdChalResp as plejdCharResp, plejdEncodeDecode, reverseBuffer, } from "./plejdUtils.js";
2
1
  import { randomBytes } from "crypto";
3
2
  import noble from "@abandonware/noble";
4
- import { PLEJD_PING_TIMEOUT, PLEJD_WRITE_TIMEOUT } from "./settings.js";
3
+ import { DEFAULT_BRIGHTNESS_TRANSITION_MS, PLEJD_PING_TIMEOUT, PLEJD_WRITE_TIMEOUT, } from "./constants.js";
4
+ import { delay, race, plejdChallageResp as plejdCharResp, plejdEncodeDecode, } from "./utils.js";
5
5
  /**
6
6
  * Plejd BLE UUIDs
7
7
  */
@@ -14,7 +14,7 @@ var PlejdCharacteristics;
14
14
  PlejdCharacteristics["Auth"] = "31ba000960854726be45040c957391b5";
15
15
  PlejdCharacteristics["Ping"] = "31ba000a60854726be45040c957391b5";
16
16
  })(PlejdCharacteristics || (PlejdCharacteristics = {}));
17
- var PlejdCommand;
17
+ export var PlejdCommand;
18
18
  (function (PlejdCommand) {
19
19
  PlejdCommand["OnOffState"] = "0097";
20
20
  PlejdCommand["StateBrightness"] = "00c8";
@@ -33,35 +33,67 @@ export class PlejdService {
33
33
  sendQueue = [];
34
34
  plejdTimeout = null;
35
35
  queueTimeout = null;
36
+ blacklistCleanupInterval = null;
37
+ isConnecting = false;
38
+ isAuthenticated = false;
39
+ deviceState = {
40
+ lastPingSuccess: Date.now(),
41
+ consecutivePingFailures: 0,
42
+ };
43
+ deviceBlacklist = new Map();
44
+ MAX_FAILURES = 5;
45
+ BLACKLIST_DURATION = 5 * 60 * 1000;
46
+ EXTENDED_BLACKLIST_DURATION = 30 * 60 * 1000;
36
47
  constructor(config, log, onUpdate) {
37
48
  this.config = config;
38
49
  this.log = log;
39
50
  this.onUpdate = onUpdate;
40
51
  }
52
+ /**
53
+ *
54
+ * @returns the current queue items
55
+ */
56
+ readQueue() {
57
+ return [...this.sendQueue];
58
+ }
41
59
  /**
42
60
  *
43
61
  * Update the state of a device
44
62
  *
45
63
  * @param identifier: The device identifier
46
64
  * @param isOn: The new state of the device
47
- * @param brightness: The new brightness of the device between 0-100
65
+ * @param targetBrightness: The new brightness of the device between 0-100
66
+ * @param currentBrightness: The current brightness of the device between 0-100
67
+ * @param transitionMS: split brightness into steps, adding a transition to the brightness change
48
68
  */
49
- updateState = async (identifier, isOn, brightness) => {
50
- const payload = Buffer.from(!brightness || brightness === 0
51
- ? identifier.toString(16).padStart(2, "0") +
69
+ updateState = async (identifier, isOn, opt) => {
70
+ if (isOn === false || !opt.targetBrightness || opt.targetBrightness === 0) {
71
+ const payload = identifier.toString(16).padStart(2, "0") +
52
72
  PlejdCommand.RequestNoResponse +
53
73
  PlejdCommand.OnOffState +
54
- (isOn ? "01" : "00")
55
- : identifier.toString(16).padStart(2, "0") +
74
+ "00";
75
+ this.sendQueue.unshift(Buffer.from(payload, "hex"));
76
+ return;
77
+ }
78
+ if (opt.targetBrightness === opt.currentBrightness) {
79
+ return;
80
+ }
81
+ // Plejd 8bit range 0-255, HomeKit uses 0-100
82
+ const brightnessDiff = Math.round(2.55 * (opt.targetBrightness - (opt.currentBrightness || 0)));
83
+ const trans = opt.transitionMS || DEFAULT_BRIGHTNESS_TRANSITION_MS;
84
+ const steps = trans > 0 ? Math.round(trans / PLEJD_WRITE_TIMEOUT) : 1;
85
+ const brightnessStep = Math.round(brightnessDiff / steps);
86
+ for (let x = 0; x < steps; x++) {
87
+ const payload = identifier.toString(16).padStart(2, "0") +
56
88
  PlejdCommand.RequestNoResponse +
57
89
  PlejdCommand.Brightness +
58
- "01" +
59
- Math.round(2.55 * brightness)
60
- .toString(16)
61
- .padStart(4, "0"), "hex");
62
- this.sendQueue.unshift(payload);
90
+ (isOn ? "01" : "00") +
91
+ brightnessStep.toString(16).padStart(4, "0");
92
+ this.sendQueue.unshift(Buffer.from(payload, "hex"));
93
+ }
63
94
  };
64
95
  configureBLE = () => {
96
+ this.startBlacklistCleanup();
65
97
  noble.on("stateChange", async (state) => {
66
98
  this.log.debug(`Noble State changed: ${state}`);
67
99
  await this.tryStartScanning();
@@ -72,25 +104,43 @@ export class PlejdService {
72
104
  };
73
105
  // -------------- Private -------------- \\
74
106
  onDiscover = async (peripheral) => {
107
+ if (peripheral.rssi < -90) {
108
+ this.log.info(`Skipping device with weak signal: ${peripheral.address} (${peripheral.rssi} dB)`);
109
+ return;
110
+ }
111
+ if (this.isDeviceBlacklisted(peripheral.address)) {
112
+ this.log.info(`Skipping blacklisted device: ${peripheral.address}`);
113
+ return;
114
+ }
115
+ if (this.isConnecting) {
116
+ this.log.debug("Connection already in progress, skipping...");
117
+ return;
118
+ }
75
119
  this.log.info(`Discovered | ${peripheral.advertisement.localName} | addr: ${peripheral.address} | Signal strength: ${this.mapRssiToQuality(peripheral.rssi)} (${peripheral.rssi} dB)`);
76
- this.log.debug(`Stopping scan`);
120
+ this.log.info(`Stopping scan`);
77
121
  await noble.stopScanningAsync();
78
122
  let retryCount = 0;
79
123
  const maxRetries = 3;
80
124
  const connectWithRetry = async () => {
81
125
  try {
126
+ if (retryCount > 0) {
127
+ await delay(2000);
128
+ }
129
+ this.isConnecting = true;
82
130
  this.log.debug(`Connecting to the new peripheral`);
83
131
  await peripheral.connectAsync();
84
132
  this.log.info(`Connected to mesh | ${peripheral.advertisement.localName} (addr: ${peripheral.address})`);
85
133
  peripheral.once("disconnect", async () => {
86
134
  this.log.info("Disconnected from mesh");
135
+ this.cleanup();
87
136
  if (retryCount < maxRetries) {
88
137
  retryCount++;
89
- this.log.debug(`Attempting to reconnect (attempt ${retryCount})`);
138
+ this.log.info(`Attempting to reconnect (attempt ${retryCount})`);
90
139
  await connectWithRetry();
91
140
  }
92
141
  else {
93
142
  this.log.error("Max reconnection attempts reached. Starting scan.");
143
+ await delay(5000);
94
144
  await this.tryStartScanning();
95
145
  }
96
146
  });
@@ -112,7 +162,7 @@ export class PlejdService {
112
162
  await this.tryDisconnect(peripheral);
113
163
  if (retryCount < maxRetries) {
114
164
  retryCount++;
115
- this.log.debug(`Attempting to reconnect (attempt ${retryCount})`);
165
+ this.log.info(`Attempting to reconnect (attempt ${retryCount})`);
116
166
  await connectWithRetry();
117
167
  }
118
168
  else {
@@ -121,6 +171,9 @@ export class PlejdService {
121
171
  await this.tryStartScanning();
122
172
  }
123
173
  }
174
+ finally {
175
+ this.isConnecting = false;
176
+ }
124
177
  };
125
178
  await connectWithRetry();
126
179
  };
@@ -145,7 +198,7 @@ export class PlejdService {
145
198
  }
146
199
  }
147
200
  discoverCaracteristics = async (peripheral) => {
148
- this.log.debug("Discovering characteristics");
201
+ this.log.info("Discovering characteristics");
149
202
  const services = [PlejdCharacteristics.Service];
150
203
  const characteristicIds = [
151
204
  PlejdCharacteristics.Data,
@@ -154,22 +207,23 @@ export class PlejdService {
154
207
  PlejdCharacteristics.Ping,
155
208
  ];
156
209
  const { characteristics } = await peripheral.discoverSomeServicesAndCharacteristicsAsync(services, characteristicIds);
157
- this.log.debug("Characteristics discovered");
210
+ this.log.info("Characteristics discovered");
158
211
  return characteristics;
159
212
  };
160
213
  setupDevice = async (peripheral, characteristics) => {
161
- this.log.debug("Locating relevant characteristics");
214
+ this.log.info("Locating relevant characteristics");
162
215
  const authChar = characteristics.find((char) => char.uuid === PlejdCharacteristics.Auth);
163
216
  const lastDataChar = characteristics.find((char) => char.uuid === PlejdCharacteristics.LastData);
164
217
  const pingChar = characteristics.find((char) => char.uuid === PlejdCharacteristics.Ping);
165
218
  const dataChar = peripheral?.services[0]?.characteristics?.find((char) => char.uuid === PlejdCharacteristics.Data) ?? null;
166
219
  if (!authChar || !lastDataChar || !pingChar || !dataChar) {
167
220
  this.log.error("Unable to extract characteristic during discovery", authChar, lastDataChar, pingChar);
221
+ await this.tryDisconnect(peripheral);
168
222
  return;
169
223
  }
170
- const addressBuffer = reverseBuffer(Buffer.from(String(peripheral.address).replace(/:/g, ""), "hex"));
171
- await this.authenticate(authChar);
172
- await this.setupCommunication(pingChar, lastDataChar, dataChar, addressBuffer);
224
+ const addressBuffer = Buffer.from(String(peripheral.address).replace(/:/g, ""), "hex").reverse();
225
+ await this.authenticate(peripheral, authChar);
226
+ await this.setupCommunication(peripheral, pingChar, lastDataChar, dataChar, addressBuffer);
173
227
  };
174
228
  handleQueuedMessages = (dataChar, addressBuffer) => {
175
229
  if (this.queueTimeout) {
@@ -182,9 +236,25 @@ export class PlejdService {
182
236
  return;
183
237
  }
184
238
  const data = plejdEncodeDecode(this.config.cryptoKey, addressBuffer, payload);
185
- this.log.debug(`BLE command sent to ${addressBuffer?.toString("hex") ?? "Unknown"} | ${data.length} bytes | ${data.toString("hex")}`);
239
+ this.log.info(`BLE command sent to ${addressBuffer?.toString("hex") ?? "Unknown"} | ${data.length} bytes | ${data.toString("hex")}`);
240
+ let retryCount = 0;
241
+ const maxRetries = 3;
242
+ const tryWrite = async () => {
243
+ try {
244
+ await race(() => dataChar.writeAsync(data, false));
245
+ }
246
+ catch (error) {
247
+ if (retryCount < maxRetries) {
248
+ retryCount++;
249
+ this.log.info(`Retrying write (${retryCount}/${maxRetries})`);
250
+ await delay(PLEJD_WRITE_TIMEOUT);
251
+ return tryWrite();
252
+ }
253
+ throw error;
254
+ }
255
+ };
186
256
  try {
187
- await dataChar.writeAsync(data, false);
257
+ await tryWrite();
188
258
  this.handleQueuedMessages(dataChar, addressBuffer);
189
259
  }
190
260
  catch (error) {
@@ -193,7 +263,7 @@ export class PlejdService {
193
263
  }
194
264
  }, PLEJD_WRITE_TIMEOUT);
195
265
  };
196
- startPlejdPing = (pingChar) => {
266
+ startPlejdPing = (peripheral, pingChar) => {
197
267
  if (this.plejdTimeout) {
198
268
  clearTimeout(this.plejdTimeout);
199
269
  }
@@ -201,14 +271,22 @@ export class PlejdService {
201
271
  if (pingChar) {
202
272
  try {
203
273
  const ping = randomBytes(1);
204
- await pingChar.writeAsync(ping, false);
205
- const pong = await pingChar.readAsync();
274
+ await race(() => pingChar.writeAsync(ping, false));
275
+ const pong = await race(() => pingChar.readAsync());
206
276
  if (((ping[0] + 1) & 0xff) !== pong[0]) {
207
277
  this.log.error("Ping pong communication failed, missing pong response");
208
278
  }
209
- this.startPlejdPing(pingChar);
279
+ this.deviceState.lastPingSuccess = Date.now();
280
+ this.deviceState.consecutivePingFailures = 0;
281
+ this.startPlejdPing(peripheral, pingChar);
210
282
  }
211
283
  catch (error) {
284
+ this.deviceState.consecutivePingFailures++;
285
+ const address = peripheral?.address;
286
+ if (address && this.deviceState.consecutivePingFailures >= 3) {
287
+ this.blacklistDevice(address, `Ping failed: ${error}`);
288
+ await this.tryDisconnect(peripheral);
289
+ }
212
290
  this.log.warn("Ping failed, device disconnected, will retry to connect to mesh: ", error);
213
291
  }
214
292
  }
@@ -232,7 +310,7 @@ export class PlejdService {
232
310
  this.log.debug("Handle BLE notification", d);
233
311
  switch (command) {
234
312
  case PlejdCommand.Time: {
235
- const arg = parseInt(reverseBuffer(decodedData.subarray(5, 9)).toString("hex"), 16);
313
+ const arg = parseInt(Buffer.from(decodedData.subarray(5, 9)).reverse().toString("hex"), 16);
236
314
  const date = new Date(arg * 1000);
237
315
  this.log.debug("Time sync: " + date.toString());
238
316
  break;
@@ -260,44 +338,73 @@ export class PlejdService {
260
338
  }
261
339
  }
262
340
  };
263
- setupCommunication = async (pingChar, lastDataChar, dataChar, addressBuffer) => {
264
- this.log.debug("Setting up ping pong communication with Plejd device");
265
- this.startPlejdPing(pingChar);
341
+ setupCommunication = async (peripheral, pingChar, lastDataChar, dataChar, addressBuffer) => {
342
+ this.log.info("Setting up ping pong communication with Plejd device");
343
+ this.startPlejdPing(peripheral, pingChar);
266
344
  this.log.debug("Starting queue handler for messages to Plejd device");
267
345
  this.handleQueuedMessages(dataChar, addressBuffer);
268
346
  try {
269
- this.log.debug("Subscribing to incomming messages");
270
- await lastDataChar.subscribeAsync();
347
+ this.log.info("Subscribing to incomming messages");
348
+ await race(() => lastDataChar.subscribeAsync());
271
349
  lastDataChar.on("data", async (data, isNotification) => {
272
350
  await this.handleNotification(data, isNotification, addressBuffer);
273
351
  });
274
352
  }
275
353
  catch (e) {
354
+ const address = peripheral?.address;
355
+ if (address) {
356
+ this.blacklistDevice(address, `Communication setup failed: ${e}`);
357
+ }
358
+ await this.tryDisconnect(peripheral);
276
359
  this.log.error("Failed to subscribe to Plejd device", e);
277
360
  }
278
361
  };
279
- authenticate = async (authChar) => {
362
+ authenticate = async (peripheral, authChar) => {
363
+ if (this.isAuthenticated) {
364
+ return;
365
+ }
280
366
  try {
281
- this.log.debug("Authenticating to Plejd device");
282
- await authChar.writeAsync(Buffer.from([0x00]), false);
283
- const data = await authChar.readAsync();
367
+ this.log.info("Authenticating to Plejd device");
368
+ await race(() => authChar.writeAsync(Buffer.from([0x00]), false));
369
+ await delay(100);
370
+ const data = await race(() => authChar.readAsync());
371
+ await delay(100);
284
372
  await authChar.writeAsync(plejdCharResp(this.config.cryptoKey, data), false);
285
- this.log.debug("Authentication successful");
373
+ await delay(100);
374
+ this.log.info("Authentication successful");
375
+ this.isAuthenticated = true;
286
376
  }
287
377
  catch (e) {
378
+ this.isAuthenticated = false;
379
+ const address = peripheral?.address;
380
+ if (address) {
381
+ this.blacklistDevice(address, `Authentication failed: ${e}`);
382
+ }
383
+ await this.tryDisconnect(peripheral);
288
384
  this.log.error("Failed to authenticate to Plejd device", e);
289
385
  }
290
386
  };
291
387
  tryStartScanning = async () => {
292
388
  try {
293
389
  if (noble._state === "poweredOn") {
390
+ this.cleanupBlacklist();
294
391
  this.log.info("Scanning for Plejd devices");
295
- await noble.startScanningAsync([PlejdCharacteristics.Service], false);
392
+ await delay(5000);
393
+ await race(() => noble.startScanningAsync([PlejdCharacteristics.Service], false), 10_000);
296
394
  noble.once("discover", async (peripheral) => await this.onDiscover(peripheral));
395
+ setTimeout(async () => {
396
+ if (!this.isAuthenticated) {
397
+ this.log.warn("No device found during scan, restarting scan");
398
+ await noble.stopScanningAsync();
399
+ await this.tryStartScanning();
400
+ }
401
+ }, 30000);
297
402
  }
298
403
  }
299
404
  catch (e) {
300
405
  this.log.error("Failed to start scanning for Plejd devices", e);
406
+ await delay(10000);
407
+ await this.tryStartScanning();
301
408
  }
302
409
  };
303
410
  tryDisconnect = async (peripheral) => {
@@ -308,5 +415,65 @@ export class PlejdService {
308
415
  this.log.debug("Failed to disconnect from previous peripheral", e);
309
416
  }
310
417
  };
418
+ isDeviceBlacklisted(address) {
419
+ const blacklistEntry = this.deviceBlacklist.get(address);
420
+ if (!blacklistEntry)
421
+ return false;
422
+ if (Date.now() > blacklistEntry.until) {
423
+ this.deviceBlacklist.delete(address);
424
+ return false;
425
+ }
426
+ return true;
427
+ }
428
+ blacklistDevice(address, reason) {
429
+ const entry = this.deviceBlacklist.get(address) ?? {
430
+ until: 0,
431
+ attempts: 0,
432
+ };
433
+ entry.attempts++;
434
+ const baseTime = entry.attempts >= this.MAX_FAILURES
435
+ ? this.EXTENDED_BLACKLIST_DURATION
436
+ : this.BLACKLIST_DURATION;
437
+ const duration = Math.min(baseTime * Math.pow(2, entry.attempts - 1), 24 * 60 * 60 * 1000);
438
+ entry.until = Date.now() + duration;
439
+ this.deviceBlacklist.set(address, entry);
440
+ this.log.warn(`Device ${address} blacklisted for ${duration / 1000} seconds. Reason: ${reason}. Failure attempts: ${entry.attempts}`);
441
+ }
442
+ cleanupBlacklist() {
443
+ const now = Date.now();
444
+ for (const [address, entry] of this.deviceBlacklist.entries()) {
445
+ if (now > entry.until) {
446
+ this.deviceBlacklist.delete(address);
447
+ }
448
+ }
449
+ }
450
+ startBlacklistCleanup() {
451
+ if (this.blacklistCleanupInterval) {
452
+ clearInterval(this.blacklistCleanupInterval);
453
+ }
454
+ this.blacklistCleanupInterval = setInterval(() => {
455
+ this.cleanupBlacklist();
456
+ }, 5 * 60 * 1000); // Clean every 5 minutes
457
+ }
458
+ cleanup() {
459
+ if (this.plejdTimeout) {
460
+ clearTimeout(this.plejdTimeout);
461
+ this.plejdTimeout = null;
462
+ }
463
+ if (this.queueTimeout) {
464
+ clearTimeout(this.queueTimeout);
465
+ this.queueTimeout = null;
466
+ }
467
+ if (this.blacklistCleanupInterval) {
468
+ clearInterval(this.blacklistCleanupInterval);
469
+ this.blacklistCleanupInterval = null;
470
+ }
471
+ this.sendQueue = [];
472
+ this.isAuthenticated = false;
473
+ this.deviceState = {
474
+ lastPingSuccess: Date.now(),
475
+ consecutivePingFailures: 0,
476
+ };
477
+ }
311
478
  }
312
479
  //# sourceMappingURL=plejdService.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"plejdService.js","sourceRoot":"","sources":["../src/plejdService.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plejdService.js","sourceRoot":"","sources":["../src/plejdService.ts"],"names":[],"mappings":"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"}
package/dist/utils.d.ts CHANGED
@@ -1 +1,6 @@
1
1
  export declare const delay: (ms: number) => Promise<unknown>;
2
+ export declare const race: <T>(operation: () => Promise<T>, timeoutMs?: number) => Promise<T>;
3
+ export declare const plejdChallageResp: (key: Buffer, chal: Buffer) => Buffer;
4
+ export declare const plejdEncodeDecode: (key: Buffer, addressBuffer: Buffer, data: Buffer) => Buffer;
5
+ export declare const isDimmable: (type: string) => boolean;
6
+ export declare const isAddon: (type: string) => boolean;
package/dist/utils.js CHANGED
@@ -1,2 +1,52 @@
1
- export const delay = (ms) => new Promise(resolve => setTimeout(resolve, ms));
1
+ import { createCipheriv, createHash } from "crypto";
2
+ import { PLEJD_LIGHTS, PLEJD_ADDONS } from "./constants.js";
3
+ export const delay = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
4
+ /*
5
+ * Set a timeout for a function
6
+ * @param operation - The function to run
7
+ * @param timeoutMs - The timeout in milliseconds (default 5000)
8
+ */
9
+ export const race = async (operation, timeoutMs = 5000) => {
10
+ return Promise.race([
11
+ operation(),
12
+ new Promise((_, reject) => setTimeout(() => reject(new Error("BLE operation timeout")), timeoutMs)),
13
+ ]);
14
+ };
15
+ export const plejdChallageResp = (key, chal) => {
16
+ const intermediate = createHash("sha256").update(xor(key, chal)).digest();
17
+ const part1 = Buffer.from(intermediate.subarray(0, 16));
18
+ const part2 = Buffer.from(intermediate.subarray(16));
19
+ return xor(part1, part2);
20
+ };
21
+ export const plejdEncodeDecode = (key, addressBuffer, data) => {
22
+ const buf = Buffer.concat([
23
+ addressBuffer,
24
+ addressBuffer,
25
+ addressBuffer.subarray(0, 4),
26
+ ]);
27
+ const cipher = createCipheriv("aes-128-ecb", key, "");
28
+ cipher.setAutoPadding(false);
29
+ let ct = cipher.update(buf).toString("hex");
30
+ ct += cipher.final().toString("hex");
31
+ const ctBuff = Buffer.from(ct, "hex");
32
+ let output = "";
33
+ for (let i = 0, length = data.length; i < length; i++) {
34
+ output += String.fromCharCode(data[i] ^ ctBuff[i % 16]);
35
+ }
36
+ return Buffer.from(output, "ascii");
37
+ };
38
+ export const isDimmable = (type) => {
39
+ const normalizedType = type.toLowerCase();
40
+ // Check if the model starts with any of the basic dimmer types
41
+ return PLEJD_LIGHTS.some((light) => normalizedType.includes(light.toLowerCase()) ||
42
+ normalizedType.includes("dim"));
43
+ };
44
+ export const isAddon = (type) => !!PLEJD_ADDONS.find((addon) => type.toLowerCase().includes(addon.toLowerCase()));
45
+ const xor = (first, second) => {
46
+ const result = Buffer.alloc(first.length);
47
+ for (let i = 0; i < first.length; i++) {
48
+ result[i] = first[i] ^ second[i];
49
+ }
50
+ return result;
51
+ };
2
52
  //# sourceMappingURL=utils.js.map
package/dist/utils.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,EAAU,EAAE,EAAE,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE5D,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,EAAU,EAAE,EAAE,CAClC,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAEpD;;;;GAIG;AACH,MAAM,CAAC,MAAM,IAAI,GAAG,KAAK,EACvB,SAA2B,EAC3B,SAAS,GAAG,IAAI,EACJ,EAAE;IACd,OAAO,OAAO,CAAC,IAAI,CAAC;QAClB,SAAS,EAAE;QACX,IAAI,OAAO,CAAI,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAC3B,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC,EAAE,SAAS,CAAC,CACxE;KACF,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,GAAW,EAAE,IAAY,EAAE,EAAE;IAC7D,MAAM,YAAY,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAE1E,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IACxD,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;IAErD,OAAO,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AAC3B,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAC/B,GAAW,EACX,aAAqB,EACrB,IAAY,EACJ,EAAE;IACV,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC;QACxB,aAAa;QACb,aAAa;QACb,aAAa,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;KAC7B,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,cAAc,CAAC,aAAa,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;IACtD,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IAE7B,IAAI,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC5C,EAAE,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACrC,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;IAEtC,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtD,MAAM,IAAI,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAC1D,CAAC;IAED,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AACtC,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,IAAY,EAAE,EAAE;IACzC,MAAM,cAAc,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IAC1C,+DAA+D;IAC/D,OAAO,YAAY,CAAC,IAAI,CACtB,CAAC,KAAK,EAAE,EAAE,CACR,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;QAC5C,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,CACjC,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,IAAY,EAAE,EAAE,CACtC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAC5B,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CACjD,CAAC;AAEJ,MAAM,GAAG,GAAG,CAAC,KAAa,EAAE,MAAc,EAAU,EAAE;IACpD,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC1C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACnC,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC"}
package/jest.config.js CHANGED
@@ -2,19 +2,18 @@ export default {
2
2
  transform: { "^.+\\.ts?$": "ts-jest" },
3
3
  preset: "ts-jest",
4
4
  testEnvironment: "node",
5
- testPathIgnorePatterns: ["/node_modules/", ".next", "dist", "supabase"],
5
+ testPathIgnorePatterns: ["/node_modules/", "dist", "cache"],
6
6
  coverageDirectory: "./coverage",
7
7
  coveragePathIgnorePatterns: [
8
8
  "node_modules",
9
9
  "tests",
10
- "src/generated",
11
10
  "dist",
11
+ "cache",
12
12
  "**/*/**.spec*",
13
13
  ],
14
14
  rootDir: ".",
15
+ extensionsToTreatAsEsm: [".ts"],
15
16
  moduleNameMapper: {
16
- "^src/(.*)": "<rootDir>/src/$1",
17
- "^dto/(.*)": "<rootDir>/dto/$1",
18
- "^dto$": "<rootDir>/dto",
17
+ "^(\\.{1,2}/.*)\\.js$": "$1",
19
18
  },
20
19
  };
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "displayName": "Plejd",
4
4
  "name": "homebridge-plejd",
5
5
  "author": "Herlix",
6
- "version": "1.6.1",
6
+ "version": "1.7.0-beta",
7
7
  "description": "HomeKit support for the Plejd BLE platform using Homebridge",
8
8
  "license": "Apache-2.0",
9
9
  "type": "module",
@@ -15,23 +15,23 @@
15
15
  "url": "https://github.com/Herlix/homebridge-plejd/issues"
16
16
  },
17
17
  "engines": {
18
- "node": ">=18.20.4",
18
+ "node": "^18 || ^20 || ^22 || ^24",
19
19
  "homebridge": "^1.8.0 || ^2.0.0-beta.0"
20
20
  },
21
21
  "main": "dist/index.js",
22
22
  "scripts": {
23
23
  "lint": "eslint src/**.ts --max-warnings=0",
24
- "watch": "npm run build && npm link && nodemon",
24
+ "dev": "npm run build && npm link && nodemon",
25
25
  "build": "rimraf ./dist && tsc",
26
26
  "prepublishOnly": "npm run lint && npm run build",
27
- "test": "jest ./**/*.spec.* --detectOpenHandles --forceExit --silent=false --runInBand"
27
+ "test": "jest ./**/*.spec.* --detectOpenHandles --forceExit --silent=false"
28
28
  },
29
29
  "keywords": [
30
30
  "homebridge-plugin",
31
31
  "plejd"
32
32
  ],
33
33
  "dependencies": {
34
- "@abandonware/noble": "^1.9.2-25"
34
+ "@abandonware/noble": "^1.9.2-26"
35
35
  },
36
36
  "devDependencies": {
37
37
  "@eslint/js": "^9.9.0",