homebridge-cync-app 0.1.7 → 0.1.9

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 (36) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/dist/cync/config-client.d.ts +11 -0
  3. package/dist/cync/config-client.js +113 -6
  4. package/dist/cync/config-client.js.map +1 -1
  5. package/dist/cync/cync-accessory-helpers.d.ts +46 -0
  6. package/dist/cync/cync-accessory-helpers.js +140 -0
  7. package/dist/cync/cync-accessory-helpers.js.map +1 -0
  8. package/dist/cync/cync-client.d.ts +4 -0
  9. package/dist/cync/cync-client.js +150 -34
  10. package/dist/cync/cync-client.js.map +1 -1
  11. package/dist/cync/cync-light-accessory.d.ts +4 -0
  12. package/dist/cync/cync-light-accessory.js +190 -0
  13. package/dist/cync/cync-light-accessory.js.map +1 -0
  14. package/dist/cync/cync-switch-accessory.d.ts +4 -0
  15. package/dist/cync/cync-switch-accessory.js +64 -0
  16. package/dist/cync/cync-switch-accessory.js.map +1 -0
  17. package/dist/cync/device-catalog.js +9 -4
  18. package/dist/cync/device-catalog.js.map +1 -1
  19. package/dist/cync/tcp-client.d.ts +7 -0
  20. package/dist/cync/tcp-client.js +122 -30
  21. package/dist/cync/tcp-client.js.map +1 -1
  22. package/dist/cync/token-store.js +2 -2
  23. package/dist/cync/token-store.js.map +1 -1
  24. package/dist/platform.d.ts +1 -3
  25. package/dist/platform.js +18 -382
  26. package/dist/platform.js.map +1 -1
  27. package/package.json +1 -1
  28. package/src/cync/config-client.ts +175 -12
  29. package/src/cync/cync-accessory-helpers.ts +233 -0
  30. package/src/cync/cync-client.ts +231 -44
  31. package/src/cync/cync-light-accessory.ts +369 -0
  32. package/src/cync/cync-switch-accessory.ts +119 -0
  33. package/src/cync/device-catalog.ts +9 -4
  34. package/src/cync/tcp-client.ts +153 -53
  35. package/src/cync/token-store.ts +3 -2
  36. package/src/platform.ts +49 -661
@@ -9,12 +9,33 @@ export class CyncClient {
9
9
  log;
10
10
  configClient;
11
11
  tcpClient;
12
+ unsupportedPropertiesProductIds = new Set();
12
13
  tokenStore;
13
14
  tokenData = null;
15
+ isDevicePropertyNotExistsError(err) {
16
+ if (!err) {
17
+ return false;
18
+ }
19
+ const e = err;
20
+ // Observed cloud response:
21
+ // HTTP 404 Not Found { error: { msg: 'device property not exists', code: 4041009 } }
22
+ if (e.status === 404 && e.error?.code === 4041009) {
23
+ return true;
24
+ }
25
+ // Fallback (if shape changes or gets wrapped)
26
+ if (e.message && e.message.includes('device property not exists')) {
27
+ return true;
28
+ }
29
+ return false;
30
+ }
31
+ formatMeshLabel(mesh) {
32
+ const rawName = typeof mesh.name === 'string' ? mesh.name.trim() : '';
33
+ return rawName.length > 0 ? rawName : `No Name (id=${String(mesh.id)})`;
34
+ }
14
35
  // Populated after successful login.
15
36
  session = null;
16
37
  cloudConfig = null;
17
- // ### 🧩 LAN Topology Cache: mirrors HA's home_devices / home_controllers / switchID_to_homeID
38
+ // LAN Topology Cache: mirrors HA's home_devices / home_controllers / switchID_to_homeID
18
39
  homeDevices = {};
19
40
  homeControllers = {};
20
41
  switchIdToHomeId = {};
@@ -27,11 +48,66 @@ export class CyncClient {
27
48
  loginConfig;
28
49
  // Optional LAN update hook for the platform
29
50
  lanUpdateHandler = null;
30
- // ### 🧩 LAN Update Bridge: allow platform to handle device updates
51
+ // Password Login Helper: background username/password login for new tokens
52
+ async loginWithPasswordForToken() {
53
+ const { username, password } = this.loginConfig;
54
+ if (!username || !password) {
55
+ this.log.error('CyncClient: cannot perform password login; username or password is missing from config.');
56
+ return null;
57
+ }
58
+ try {
59
+ this.log.warn('CyncClient: performing background username/password login (no OTP) to obtain a fresh token…');
60
+ const session = await this.configClient.loginWithPassword(username.trim(), password);
61
+ const raw = session.raw;
62
+ const authorize = typeof raw.authorize === 'string' ? raw.authorize : undefined;
63
+ const s = session;
64
+ const access = s.accessToken ?? s.jwt;
65
+ if (!access) {
66
+ this.log.error('CyncClient: password login session did not return an access token.');
67
+ return null;
68
+ }
69
+ const refresh = s.refreshToken ?? s.refreshJwt;
70
+ const expiresAt = s.expiresAt;
71
+ let lanLoginCode;
72
+ if (authorize) {
73
+ const userIdNum = Number.parseInt(session.userId, 10);
74
+ if (Number.isFinite(userIdNum) && userIdNum >= 0) {
75
+ const lanBlob = this.buildLanLoginCode(authorize, userIdNum);
76
+ lanLoginCode = Buffer.from(lanBlob).toString('base64');
77
+ }
78
+ else {
79
+ this.log.warn('CyncClient: password login returned non-numeric userId=%s; LAN login code not generated.', session.userId);
80
+ }
81
+ }
82
+ else {
83
+ this.log.warn('CyncClient: password login response missing "authorize"; LAN login may be disabled.');
84
+ }
85
+ const next = {
86
+ userId: String(session.userId),
87
+ accessToken: access,
88
+ refreshToken: refresh,
89
+ expiresAt,
90
+ authorize,
91
+ lanLoginCode,
92
+ };
93
+ await this.tokenStore.save(next);
94
+ this.tokenData = next;
95
+ this.applyAccessToken(next);
96
+ this.log.info('CyncClient: obtained new token via password login; userId=%s expiresAt=%s', next.userId, next.expiresAt
97
+ ? new Date(next.expiresAt).toISOString()
98
+ : 'unknown');
99
+ return next;
100
+ }
101
+ catch (err) {
102
+ this.log.error('CyncClient: password-based background login failed: %o', err);
103
+ return null;
104
+ }
105
+ }
106
+ // LAN Update Bridge: allow platform to handle device updates
31
107
  onLanDeviceUpdate(handler) {
32
108
  this.lanUpdateHandler = handler;
33
109
  }
34
- // ### 🧩 LAN Auth Blob Getter: Returns the LAN login code if available
110
+ // LAN Auth Blob Getter: Returns the LAN login code if available
35
111
  getLanLoginCode() {
36
112
  if (!this.tokenData?.lanLoginCode) {
37
113
  this.log.debug('CyncClient: getLanLoginCode() → no LAN blob in token store.');
@@ -58,7 +134,7 @@ export class CyncClient {
58
134
  twoFactor: loginConfig.twoFactor,
59
135
  });
60
136
  }
61
- // ### 🧩 LAN Login Code Builder
137
+ // LAN Login Code Builder
62
138
  buildLanLoginCode(authorize, userId) {
63
139
  const authorizeBytes = Buffer.from(authorize, 'ascii');
64
140
  const head = Buffer.from('13000000', 'hex');
@@ -216,49 +292,71 @@ export class CyncClient {
216
292
  * // user reads email, gets code…
217
293
  * await client.submitTwoFactor(username, password, code); // completes login
218
294
  */
219
- // ### 🧩 Refresh Error Detector: identifies "Access-Token Expired" responses
295
+ // Refresh Error Detector: identifies "Access-Token Expired" responses
220
296
  isAccessTokenExpiredError(err) {
221
- if (!err || typeof err !== 'object') {
297
+ if (!err) {
222
298
  return false;
223
299
  }
300
+ // Most common case: ConfigClient throws a plain Error('Access-Token Expired')
301
+ if (err instanceof Error) {
302
+ if (err.message === 'Access-Token Expired' ||
303
+ err.message.includes('Access-Token Expired')) {
304
+ return true;
305
+ }
306
+ }
224
307
  const e = err;
225
- // Shape we see in logs:
308
+ // Shape we see in raw HTTP JSON:
226
309
  // { error: { msg: 'Access-Token Expired', code: 4031021 } }
227
- if (e.error && (e.error.msg === 'Access-Token Expired' || e.error.code === 4031021)) {
310
+ if (e.error &&
311
+ (e.error.msg === 'Access-Token Expired' || e.error.code === 4031021)) {
228
312
  return true;
229
313
  }
230
- // Fallback: generic 403 with message string
231
- if (e.status === 403 && e.message && e.message.includes('Access-Token Expired')) {
314
+ // Fallback: generic 403 plus message text
315
+ if (e.status === 403 &&
316
+ e.message &&
317
+ e.message.includes('Access-Token Expired')) {
232
318
  return true;
233
319
  }
234
320
  return false;
235
321
  }
236
- // ### 🧩 Token Refresh Helper: exchanges refreshToken for a new accessToken
322
+ // Token Refresh Helper: exchanges refreshToken for a new accessToken, or falls back to password login
237
323
  async refreshAccessToken(stored) {
238
- if (!stored.refreshToken) {
239
- this.log.warn('CyncClient: refreshAccessToken() called but no refreshToken is stored; cannot refresh.');
240
- return null;
324
+ // First, try refresh_token if we have one
325
+ if (stored.refreshToken) {
326
+ try {
327
+ const resp = await this.configClient.refreshAccessToken(stored.refreshToken);
328
+ const next = {
329
+ ...stored,
330
+ accessToken: resp.accessToken,
331
+ refreshToken: resp.refreshToken ?? stored.refreshToken,
332
+ expiresAt: resp.expiresAt ?? stored.expiresAt,
333
+ };
334
+ await this.tokenStore.save(next);
335
+ this.tokenData = next;
336
+ this.applyAccessToken(next);
337
+ this.log.info('CyncClient: refreshed access token for userId=%s; expiresAt=%s', next.userId, next.expiresAt
338
+ ? new Date(next.expiresAt).toISOString()
339
+ : 'unknown');
340
+ return next;
341
+ }
342
+ catch (err) {
343
+ this.log.error('CyncClient: token refresh failed: %o', err);
344
+ // fall through to password-based login below
345
+ }
241
346
  }
242
- try {
243
- const resp = await this.configClient.refreshAccessToken(stored.refreshToken);
244
- const next = {
245
- ...stored,
246
- accessToken: resp.accessToken,
247
- refreshToken: resp.refreshToken ?? stored.refreshToken,
248
- expiresAt: resp.expiresAt ?? stored.expiresAt,
249
- };
250
- await this.tokenStore.save(next);
251
- this.tokenData = next;
252
- this.applyAccessToken(next);
253
- this.log.info('CyncClient: refreshed access token for userId=%s; expiresAt=%s', next.userId, next.expiresAt ? new Date(next.expiresAt).toISOString() : 'unknown');
254
- return next;
347
+ else {
348
+ this.log.warn('CyncClient: refreshAccessToken() called but no refreshToken is stored; will attempt password-based login.');
255
349
  }
256
- catch (err) {
257
- this.log.error('CyncClient: token refresh failed: %o', err);
350
+ // If we get here, either we had no refreshToken or refresh failed.
351
+ // Attempt a background username/password login to obtain a fresh token.
352
+ const viaPassword = await this.loginWithPasswordForToken();
353
+ if (!viaPassword) {
354
+ this.log.error('CyncClient: password-based background login failed; cannot refresh Cync token automatically.');
258
355
  return null;
259
356
  }
357
+ return viaPassword;
260
358
  }
261
- // ### 🧩 Cloud Config Wrapper: auto-refreshes access token
359
+ // Cloud Config Wrapper: auto-refreshes access token
262
360
  async getCloudConfigWithRefresh() {
263
361
  try {
264
362
  return await this.configClient.getCloudConfig();
@@ -274,15 +372,24 @@ export class CyncClient {
274
372
  throw err;
275
373
  }
276
374
  }
277
- // ### 🧩 Device Properties Wrapper: auto-refresh on Access-Token Expired for mesh calls
375
+ // Device Properties Wrapper: auto-refresh on Access-Token Expired for mesh calls
278
376
  async getDevicePropertiesWithRefresh(productId, meshId) {
279
- // Normalise to strings for ConfigClient
280
377
  const productIdStr = String(productId);
281
378
  const meshIdStr = String(meshId);
379
+ // If we've already learned this product_id never supports the endpoint, skip.
380
+ if (this.unsupportedPropertiesProductIds.has(productIdStr)) {
381
+ return {};
382
+ }
282
383
  try {
283
384
  return await this.configClient.getDeviceProperties(productIdStr, meshIdStr);
284
385
  }
285
386
  catch (err) {
387
+ // Expected case for some product lines: endpoint not implemented.
388
+ if (this.isDevicePropertyNotExistsError(err)) {
389
+ this.unsupportedPropertiesProductIds.add(productIdStr);
390
+ this.log.debug('CyncClient: properties unsupported for product_id=%s (mesh id=%s); caching and skipping.', productIdStr, meshIdStr);
391
+ return {};
392
+ }
286
393
  if (this.isAccessTokenExpiredError(err) && this.tokenData) {
287
394
  this.log.warn('CyncClient: access token expired when calling getDeviceProperties(); refreshing and retrying once.');
288
395
  const refreshed = await this.refreshAccessToken(this.tokenData);
@@ -333,19 +440,24 @@ export class CyncClient {
333
440
  this.switchIdToHomeId = {};
334
441
  // Debug: inspect per-mesh properties so we can find the real devices.
335
442
  for (const mesh of cfg.meshes) {
336
- const meshName = mesh.name ?? mesh.id;
443
+ const meshName = this.formatMeshLabel({ name: mesh.name, id: mesh.id });
337
444
  const homeId = String(mesh.id);
338
445
  this.log.debug('CyncClient: probing properties for mesh %s (id=%s, product_id=%s)', meshName, mesh.id, mesh.product_id);
339
446
  // Per-home maps, mirroring HA's CyncUserData.get_cync_config()
340
447
  const homeDevices = [];
341
448
  const homeControllers = [];
449
+ const productIdStr = String(mesh.product_id);
450
+ if (this.unsupportedPropertiesProductIds.has(productIdStr)) {
451
+ this.log.debug('CyncClient: skipping properties probe for mesh %s (product_id=%s) — previously marked unsupported.', meshName, productIdStr);
452
+ continue;
453
+ }
342
454
  try {
343
455
  const props = await this.getDevicePropertiesWithRefresh(mesh.product_id, mesh.id);
344
456
  this.log.debug('CyncClient: mesh %s properties keys=%o', meshName, Object.keys(props));
345
457
  const bulbsArray = props.bulbsArray;
346
458
  if (Array.isArray(bulbsArray)) {
347
459
  this.log.info('CyncClient: mesh %s bulbsArray length=%d; first item keys=%o', meshName, bulbsArray.length, bulbsArray[0] ? Object.keys(bulbsArray[0]) : []);
348
- // ### 🧩 Bulb Capability Debug: log each bulb so we can classify plugs vs lights
460
+ // Bulb Capability Debug: log each bulb so we can classify plugs vs lights
349
461
  bulbsArray.forEach((bulb, index) => {
350
462
  const record = bulb;
351
463
  this.log.debug('CyncClient: bulb #%d for mesh %s → %o', index, meshName, {
@@ -441,6 +553,10 @@ export class CyncClient {
441
553
  }
442
554
  }
443
555
  catch (err) {
556
+ if (this.isDevicePropertyNotExistsError(err)) {
557
+ this.log.debug('CyncClient: getDeviceProperties not supported for mesh %s (%s).', meshName, String(mesh.id));
558
+ continue;
559
+ }
444
560
  this.log.warn('CyncClient: getDeviceProperties failed for mesh %s (%s): %s', meshName, mesh.id, err.message ?? String(err));
445
561
  }
446
562
  }
@@ -1 +1 @@
1
- {"version":3,"file":"cync-client.js","sourceRoot":"","sources":["../../src/cync/cync-client.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,cAAc,EAAiB,MAAM,kBAAkB,CAAC;AAWjE,MAAM,aAAa,GAAe;IACjC,KAAK,EAAE,CAAC,GAAG,IAAe,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,GAAG,IAAI,CAAC;IACtE,IAAI,EAAE,CAAC,GAAG,IAAe,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,GAAG,IAAI,CAAC;IACpE,IAAI,EAAE,CAAC,GAAG,IAAe,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,GAAG,IAAI,CAAC;IACpE,KAAK,EAAE,CAAC,GAAG,IAAe,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,GAAG,IAAI,CAAC;CACtE,CAAC;AAEF,MAAM,OAAO,UAAU;IACL,GAAG,CAAa;IAChB,YAAY,CAAe;IAC3B,SAAS,CAAY;IAErB,UAAU,CAAiB;IACpC,SAAS,GAAyB,IAAI,CAAC;IAE/C,oCAAoC;IAC5B,OAAO,GAA4B,IAAI,CAAC;IACxC,WAAW,GAA2B,IAAI,CAAC;IAEnD,+FAA+F;IACvF,WAAW,GAA6B,EAAE,CAAC;IAC3C,eAAe,GAA6B,EAAE,CAAC;IAC/C,gBAAgB,GAA2B,EAAE,CAAC;IAEtD,6DAA6D;IAC7D,EAAE;IACF,iDAAiD;IACjD,kEAAkE;IAClE,iCAAiC;IACjC,iFAAiF;IAChE,WAAW,CAA6D;IAEzF,4CAA4C;IACpC,gBAAgB,GAAuC,IAAI,CAAC;IAEpE,oEAAoE;IAC7D,iBAAiB,CAAC,OAAkC;QAC1D,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC;IACjC,CAAC;IAED,uEAAuE;IAChE,eAAe;QACrB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,EAAE,CAAC;YACnC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,6DAA6D,CAAC,CAAC;YAC9E,OAAO,IAAI,UAAU,EAAE,CAAC;QACzB,CAAC;QAED,IAAI,CAAC;YACJ,OAAO,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAC;QAC5E,CAAC;QAAC,MAAM,CAAC;YACR,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,sDAAsD,CAAC,CAAC;YACtE,OAAO,IAAI,UAAU,EAAE,CAAC;QACzB,CAAC;IACF,CAAC;IAED,YACC,YAA0B,EAC1B,SAAoB,EACpB,WAAuE,EACvE,WAAmB,EACnB,MAAmB;QAEnB,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,GAAG,GAAG,MAAM,IAAI,aAAa,CAAC;QAEnC,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,UAAU,GAAG,IAAI,cAAc,CAAC,WAAW,CAAC,CAAC;QAElD,qFAAqF;QACrF,IAAI,CAAC,GAAG,CAAC,KAAK,CACb,6CAA6C,EAC7C;YACC,QAAQ,EAAE,WAAW,CAAC,QAAQ;YAC9B,WAAW,EAAE,CAAC,CAAC,WAAW,CAAC,QAAQ;YACnC,SAAS,EAAE,WAAW,CAAC,SAAS;SAChC,CACD,CAAC;IACH,CAAC;IAED,gCAAgC;IACxB,iBAAiB,CAAC,SAAiB,EAAE,MAAc;QAC1D,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAEvD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QAC5C,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC;QAC7D,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAErC,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACpC,WAAW,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAElC,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACrC,YAAY,CAAC,aAAa,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QAElD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAE1C,OAAO,MAAM,CAAC,MAAM,CAAC;YACpB,IAAI;YACJ,UAAU;YACV,GAAG;YACH,WAAW;YACX,YAAY;YACZ,cAAc;YACd,IAAI;SACJ,CAAC,CAAC;IACJ,CAAC;IAED;;;;;WAKI;IACG,KAAK,CAAC,cAAc;QAC1B,8BAA8B;QAC9B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;QAC5C,IAAI,MAAM,EAAE,CAAC;YACZ,IAAI,CAAC,GAAG,CAAC,IAAI,CACZ,6DAA6D,EAC7D,MAAM,CAAC,MAAM,EACb,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,SAAS,CACvE,CAAC;YAEF,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC;YAExB,2CAA2C;YAC3C,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;YAE9B,OAAO,IAAI,CAAC;QACb,CAAC;QAED,yCAAyC;QACzC,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC;QAE3D,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC5B,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,uEAAuE,CAAC,CAAC;YACxF,OAAO,KAAK,CAAC;QACd,CAAC;QAED,MAAM,WAAW,GAAG,OAAO,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1E,MAAM,YAAY,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;QAE5C,IAAI,CAAC,YAAY,EAAE,CAAC;YACnB,4BAA4B;YAC5B,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,qCAAqC,EAAE,QAAQ,CAAC,CAAC;YAC/D,MAAM,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;YAC1C,IAAI,CAAC,GAAG,CAAC,IAAI,CACZ,iIAAiI,CACjI,CAAC;YACF,OAAO,KAAK,CAAC;QACd,CAAC;QAED,wDAAwD;QACxD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,mCAAmC,EAAE,QAAQ,CAAC,CAAC;QAC7D,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,sBAAsB,CACpD,QAAQ,EACR,QAAQ,EACR,WAAW,CACX,CAAC;QAEF,uBAAuB;QACvB,IAAI,SAA6B,CAAC;QAClC,IAAI,YAAgC,CAAC;QAErC,MAAM,GAAG,GAAG,WAAW,CAAC,GAA8B,CAAC;QACvD,IAAI,OAAO,GAAG,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;YACvC,SAAS,GAAG,GAAG,CAAC,SAAS,CAAC;YAE1B,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,SAAS,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;YAC9E,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACxD,CAAC;aAAM,CAAC;YACP,IAAI,CAAC,GAAG,CAAC,IAAI,CACZ,6EAA6E,CAC7E,CAAC;QACH,CAAC;QAED,MAAM,SAAS,GAAkB;YAChC,MAAM,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC;YAClC,WAAW,EAAE,WAAW,CAAC,WAAW;YACpC,YAAY,EAAE,WAAW,CAAC,YAAY;YACtC,SAAS,EAAE,WAAW,CAAC,SAAS,IAAI,SAAS;YAE7C,SAAS;YACT,YAAY;SACZ,CAAC;QAEF,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACtC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAE3B,2EAA2E;QAC3E,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;QAEjC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,iDAAiD,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;QACnF,OAAO,IAAI,CAAC;IACb,CAAC;IAGD;;;OAGG;IACK,KAAK,CAAC,oBAAoB,CAAC,QAAgB;QAClD,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;IACnC,CAAC;IAED;;;OAGG;IACK,KAAK,CAAC,sBAAsB,CACnC,KAAa,EACb,QAAgB,EAChB,IAAY;QAQZ,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;QAElE,6DAA6D;QAC7D,MAAM,GAAG,GAAG,OAAO,CAAC,GAA8B,CAAC;QACnD,MAAM,SAAS,GAAG,OAAO,GAAG,EAAE,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;QAEjF,IAAI,CAAC,SAAS,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CACd,2FAA2F,CAC3F,CAAC;QACH,CAAC;QAED,MAAM,CAAC,GAAG,OAA+C,CAAC;QAE1D,MAAM,MAAM,GAAG,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,GAAG,CAAC;QACtC,IAAI,CAAC,MAAM,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAC;QAC9E,CAAC;QAED,OAAO;YACN,GAAG,OAAO;YACV,WAAW,EAAE,MAAM;YACnB,YAAY,EAAE,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,UAAU;YAC5C,SAAS,EAAE,CAAC,CAAC,SAAS;YACtB,SAAS;SACT,CAAC;IACH,CAAC;IAED;;;OAGG;IACK,gBAAgB,CAAC,SAAwB;QAChD,IAAI,CAAC,SAAS,CAAC,WAAW,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;YACjD,IAAI,CAAC,GAAG,CAAC,IAAI,CACZ,sFAAsF,EACtF;gBACC,MAAM,EAAE,SAAS,CAAC,MAAM;gBACxB,cAAc,EAAE,CAAC,CAAC,SAAS,CAAC,WAAW;gBACvC,SAAS,EAAE,SAAS,CAAC,SAAS;aAC9B,CACD,CAAC;YACF,OAAO;QACR,CAAC;QAED,oDAAoD;QACpD,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,SAAS,CAAC,WAAW,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;QAE1E,8DAA8D;QAC9D,IAAI,CAAC,OAAO,GAAG;YACd,WAAW,EAAE,SAAS,CAAC,WAAW;YAClC,MAAM,EAAE,SAAS,CAAC,MAAM;YACxB,GAAG,EAAE;gBACJ,MAAM,EAAE,YAAY;gBACpB,SAAS,EAAE,SAAS,CAAC,SAAS;aAC9B;SACD,CAAC;QACF,oCAAoC;QACpC,IAAI,SAAS,CAAC,SAAS,IAAI,SAAS,CAAC,YAAY,EAAE,CAAC;YACnD,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,uDAAuD,CAAC,CAAC;YACxE,sDAAsD;QACvD,CAAC;aAAM,CAAC;YACP,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,mDAAmD,CAAC,CAAC;QACrE,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,KAAK,CACb,mEAAmE,EACnE,YAAY,EACZ,SAAS,CAAC,MAAM,EAChB,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,SAAS,CAC7E,CAAC;IACH,CAAC;IAGD;;;;;;;;;OASG;IACH,6EAA6E;IACrE,yBAAyB,CAAC,GAAY;QAC7C,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;YACrC,OAAO,KAAK,CAAC;QACd,CAAC;QAWD,MAAM,CAAC,GAAG,GAAqB,CAAC;QAEhC,wBAAwB;QACxB,4DAA4D;QAC5D,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,KAAK,sBAAsB,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC,EAAE,CAAC;YACrF,OAAO,IAAI,CAAC;QACb,CAAC;QAED,4CAA4C;QAC5C,IAAI,CAAC,CAAC,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAC,EAAE,CAAC;YACjF,OAAO,IAAI,CAAC;QACb,CAAC;QAED,OAAO,KAAK,CAAC;IACd,CAAC;IAED,4EAA4E;IACpE,KAAK,CAAC,kBAAkB,CAAC,MAAqB;QACrD,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;YAC1B,IAAI,CAAC,GAAG,CAAC,IAAI,CACZ,wFAAwF,CACxF,CAAC;YACF,OAAO,IAAI,CAAC;QACb,CAAC;QAED,IAAI,CAAC;YACJ,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;YAE7E,MAAM,IAAI,GAAkB;gBAC3B,GAAG,MAAM;gBACT,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,YAAY,EAAE,IAAI,CAAC,YAAY,IAAI,MAAM,CAAC,YAAY;gBACtD,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,MAAM,CAAC,SAAS;aAC7C,CAAC;YAEF,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACjC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;YACtB,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;YAE5B,IAAI,CAAC,GAAG,CAAC,IAAI,CACZ,gEAAgE,EAChE,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,SAAS,CACnE,CAAC;YAEF,OAAO,IAAI,CAAC;QACb,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACd,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,sCAAsC,EAAE,GAAG,CAAC,CAAC;YAC5D,OAAO,IAAI,CAAC;QACb,CAAC;IACF,CAAC;IAED,2DAA2D;IACnD,KAAK,CAAC,yBAAyB;QACtC,IAAI,CAAC;YACJ,OAAO,MAAM,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,CAAC;QACjD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACd,IAAI,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;gBAC3D,IAAI,CAAC,GAAG,CAAC,IAAI,CACZ,+FAA+F,CAC/F,CAAC;gBAEF,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBAChE,IAAI,SAAS,EAAE,CAAC;oBACf,OAAO,MAAM,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,CAAC;gBACjD,CAAC;YACF,CAAC;YAED,MAAM,GAAG,CAAC;QACX,CAAC;IACF,CAAC;IAED,wFAAwF;IAChF,KAAK,CAAC,8BAA8B,CAC3C,SAA0B,EAC1B,MAAuB;QAEvB,wCAAwC;QACxC,MAAM,YAAY,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;QACvC,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;QAEjC,IAAI,CAAC;YACJ,OAAO,MAAM,IAAI,CAAC,YAAY,CAAC,mBAAmB,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;QAC7E,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACd,IAAI,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;gBAC3D,IAAI,CAAC,GAAG,CAAC,IAAI,CACZ,oGAAoG,CACpG,CAAC;gBAEF,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBAChE,IAAI,SAAS,EAAE,CAAC;oBACf,OAAO,MAAM,IAAI,CAAC,YAAY,CAAC,mBAAmB,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;gBAC7E,CAAC;YACF,CAAC;YAED,MAAM,GAAG,CAAC;QACX,CAAC;IACF,CAAC;IAEM,KAAK,CAAC,YAAY,CAAC,QAAgB;QACzC,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;QAE9B,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,wCAAwC,EAAE,KAAK,CAAC,CAAC;QAC/D,MAAM,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;QACjD,IAAI,CAAC,GAAG,CAAC,IAAI,CACZ,qFAAqF,CACrF,CAAC;IACH,CAAC;IAED;;;;;;OAMG;IACI,KAAK,CAAC,eAAe,CAC3B,QAAgB,EAChB,QAAgB,EAChB,IAAY;QAEZ,MAAM,YAAY,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;QACrC,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAEhC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,yCAAyC,EAAE,YAAY,CAAC,CAAC;QAEvE,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,kBAAkB,CACzD,YAAY,EACZ,QAAQ,EACR,WAAW,CACX,CAAC;QAEF,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QAEvB,IAAI,CAAC,GAAG,CAAC,KAAK,CACb,uEAAuE,EACvE,CAAC,CAAC,OAAO,CAAC,WAAW,EACrB,OAAO,CAAC,MAAM,CACd,CAAC;QAEF,IAAI,CAAC,GAAG,CAAC,IAAI,CACZ,yCAAyC,EACzC,OAAO,CAAC,MAAM,CACd,CAAC;QAEF,OAAO,OAAO,CAAC;IAChB,CAAC;IAED;;;;;;OAMG;IACI,KAAK,CAAC,iBAAiB;QAC7B,IAAI,CAAC,aAAa,EAAE,CAAC;QAErB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC;QAC/D,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,yBAAyB,EAAE,CAAC;QAEnD,2CAA2C;QAC3C,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;QACtB,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;QAC1B,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;QAE3B,sEAAsE;QACtE,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,CAAC;YACtC,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAE/B,IAAI,CAAC,GAAG,CAAC,KAAK,CACb,mEAAmE,EACnE,QAAQ,EACR,IAAI,CAAC,EAAE,EACP,IAAI,CAAC,UAAU,CACf,CAAC;YAEF,+DAA+D;YAC/D,MAAM,WAAW,GAAa,EAAE,CAAC;YACjC,MAAM,eAAe,GAAa,EAAE,CAAC;YAErC,IAAI,CAAC;gBACJ,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,8BAA8B,CACtD,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,EAAE,CACP,CAAC;gBAEF,IAAI,CAAC,GAAG,CAAC,KAAK,CACb,wCAAwC,EACxC,QAAQ,EACR,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAClB,CAAC;gBAGF,MAAM,UAAU,GAAI,KAAqB,CAAC,UAAqB,CAAC;gBAEhE,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;oBAC/B,IAAI,CAAC,GAAG,CAAC,IAAI,CACZ,8DAA8D,EAC9D,QAAQ,EACR,UAAU,CAAC,MAAM,EACjB,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAA4B,CAAC,CAAC,CAAC,CAAC,EAAE,CAC1E,CAAC;oBAEF,iFAAiF;oBACjF,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;wBAClC,MAAM,MAAM,GAAG,IAA+B,CAAC;wBAE/C,IAAI,CAAC,GAAG,CAAC,KAAK,CACb,uCAAuC,EACvC,KAAK,EACL,QAAQ,EACR;4BACC,WAAW,EAAE,MAAM,CAAC,WAAW;4BAC/B,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ;4BAC5C,UAAU,EAAE,MAAM,CAAC,UAAU;4BAC7B,aAAa,EAAE,MAAM,CAAC,aAAa;4BACnC,iBAAiB,EAAE,MAAM,CAAC,iBAAiB;4BAC3C,cAAc,EAAE,MAAM,CAAC,cAAc;4BACrC,GAAG,EAAE,MAAM;yBACX,CACD,CAAC;oBACH,CAAC,CAAC,CAAC;oBAGH,MAAM,UAAU,GAAG,UAAuB,CAAC;oBAE3C,MAAM,cAAc,GAAc,EAAE,CAAC;oBAErC,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;wBAC9B,MAAM,CAAC,GAAG,GAAgB,CAAC;wBAE3B,MAAM,WAAW,GAAG,CAAC,CAAC,WAAiC,CAAC;wBAExD,yDAAyD;wBACzD,MAAM,WAAW,GAAG,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,QAAQ,CAAgC,CAAC;wBAC9E,MAAM,WAAW,GAChB,WAAW,KAAK,SAAS,IAAI,WAAW,KAAK,IAAI;4BAChD,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC;4BACrB,CAAC,CAAC,SAAS,CAAC;wBAEd,MAAM,OAAO,GAAG,CAAC,CAAC,OAA6B,CAAC;wBAChD,MAAM,SAAS,GACb,CAAC,CAAC,UAAiC,IAAI,IAAI,CAAC,UAAU,CAAC;wBAEzD,yCAAyC;wBACzC,2FAA2F;wBAC3F,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;wBAClC,MAAM,WAAW,GAChB,OAAO,WAAW,KAAK,QAAQ;4BAC9B,CAAC,CAAC,WAAW;4BACb,CAAC,CAAC,WAAW,KAAK,SAAS,IAAI,WAAW,KAAK,IAAI;gCAClD,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC;gCACrB,CAAC,CAAC,GAAG,CAAC;wBAET,IAAI,SAA6B,CAAC;wBAClC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,SAAS,KAAK,CAAC,EAAE,CAAC;4BAC/E,MAAM,GAAG,GAAG,WAAW,GAAG,SAAS,CAAC;4BACpC,SAAS,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;wBACzD,CAAC;wBAED,6DAA6D;wBAC7D,MAAM,gBAAgB,GAAG,CAAC,CAAC,QAA8B,CAAC;wBAE1D,2EAA2E;wBAC3E,MAAM,EAAE,GACP,WAAW;4BACX,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;4BACjD,GAAG,IAAI,CAAC,EAAE,IAAI,SAAS,IAAI,SAAS,EAAE,CAAC;wBAExC,yDAAyD;wBACzD,IAAI,SAAS,KAAK,SAAS,IAAI,WAAW,EAAE,CAAC;4BAC5C,OAAO,WAAW,CAAC,MAAM,IAAI,SAAS,EAAE,CAAC;gCACxC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;4BACtB,CAAC;4BACD,WAAW,CAAC,SAAS,CAAC,GAAG,WAAW,CAAC;wBACtC,CAAC;wBAED,oDAAoD;wBACpD,IAAI,gBAAgB,KAAK,SAAS,IAAI,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,gBAAgB,GAAG,CAAC,EAAE,CAAC;4BACjG,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,EAAE,CAAC;gCAC9C,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,GAAG,MAAM,CAAC;4BAClD,CAAC;4BACD,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC;gCACjD,eAAe,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;4BACxC,CAAC;wBACF,CAAC;wBAED,cAAc,CAAC,IAAI,CAAC;4BACnB,EAAE;4BACF,IAAI,EAAE,WAAW,IAAI,SAAS;4BAC9B,UAAU,EAAE,SAAS;4BACrB,SAAS,EAAE,WAAW;4BACtB,GAAG,EAAE,OAAO;4BACZ,OAAO,EAAE,SAAS;4BAClB,iBAAiB,EAAE,gBAAgB;4BACnC,GAAG,EAAE,CAAC;yBACN,CAAC,CAAC;oBACJ,CAAC;oBAED,8EAA8E;oBAC7E,IAAgC,CAAC,OAAO,GAAG,cAAc,CAAC;oBAE3D,uDAAuD;oBACvD,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBAC5B,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,WAAW,CAAC;oBACxC,CAAC;oBACD,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBAChC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,GAAG,eAAe,CAAC;oBAChD,CAAC;oBAED,4FAA4F;oBAC5F,KAAK,MAAM,GAAG,IAAI,cAAc,EAAE,CAAC;wBAClC,MAAM,MAAM,GAAG,GAA8B,CAAC;wBAC9C,MAAM,YAAY,GAAG,MAAM,CAAC,iBAAuC,CAAC;wBAEpE,MAAM,QAAQ,GACZ,MAAM,CAAC,SAAgC;4BACvC,MAAM,CAAC,EAAyB,CAAC;wBAEnC,IAAI,YAAY,KAAK,SAAS,IAAI,QAAQ,EAAE,CAAC;4BAC5C,IAAI,CAAC,SAAS,CAAC,qBAAqB,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;wBAC9D,CAAC;oBACF,CAAC;gBACF,CAAC;qBAAM,CAAC;oBACP,IAAI,CAAC,GAAG,CAAC,IAAI,CACZ,oEAAoE,EACpE,QAAQ,EACR,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAClB,CAAC;gBACH,CAAC;YACF,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACd,IAAI,CAAC,GAAG,CAAC,IAAI,CACZ,6DAA6D,EAC7D,QAAQ,EACR,IAAI,CAAC,EAAE,EACN,GAAa,CAAC,OAAO,IAAI,MAAM,CAAC,GAAG,CAAC,CACrC,CAAC;YACH,CAAC;QACF,CAAC;QAED,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC;QACvB,IAAI,CAAC,GAAG,CAAC,IAAI,CACZ,mDAAmD,EACnD,GAAG,CAAC,MAAM,CAAC,MAAM,CACjB,CAAC;QAEF,OAAO,GAAG,CAAC;IACZ,CAAC;IAEM,KAAK,CAAC,cAAc,CAC1B,MAAuB,EACvB,SAAqB;QAErB,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;QAErD,6EAA6E;QAC7E,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QACvC,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAE1C,iDAAiD;QACjD,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,KAAK,EAAE,EAAE;YACnC,IAAI,CAAC,GAAG,CAAC,KAAK,CACb,qCAAqC,EACrC,KAAK,CAAC,UAAU,EAChB,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CACrB,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,+CAA+C;QAC/C,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,MAAM,EAAE,EAAE;YACxC,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBAC3B,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;YAC/B,CAAC;iBAAM,CAAC;gBACP,qBAAqB;gBACrB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,qDAAqD,EAAE,MAAM,CAAC,CAAC;YAC9E,CAAC;QACF,CAAC,CAAC,CAAC;QAEH,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IACjD,CAAC;IAEM,kBAAkB;QACxB,OAAO,IAAI,CAAC,OAAO,CAAC;IACrB,CAAC;IAEM,sBAAsB;QAC5B,OAAO,IAAI,CAAC,WAAW,CAAC;IACzB,CAAC;IAEM,cAAc;QAKpB,OAAO;YACN,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,eAAe,EAAE,IAAI,CAAC,eAAe;YACrC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;SACvC,CAAC;IACH,CAAC;IAEO,aAAa;QACpB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CACd,yDAAyD,CACzD,CAAC;QACH,CAAC;IACF,CAAC;CACD"}
1
+ {"version":3,"file":"cync-client.js","sourceRoot":"","sources":["../../src/cync/cync-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { PlatformAccessory } from 'homebridge';
2
+ import type { CyncDevice, CyncDeviceMesh } from './config-client.js';
3
+ import type { CyncAccessoryEnv } from './cync-accessory-helpers.js';
4
+ export declare function configureCyncLightAccessory(env: CyncAccessoryEnv, mesh: CyncDeviceMesh, device: CyncDevice, accessory: PlatformAccessory, deviceName: string, deviceId: string): void;
@@ -0,0 +1,190 @@
1
+ import { applyAccessoryInformationFromCyncDevice, hsvToRgb } from './cync-accessory-helpers.js';
2
+ export function configureCyncLightAccessory(env, mesh, device, accessory, deviceName, deviceId) {
3
+ // If this accessory used to be a switch, remove that service
4
+ const existingSwitch = accessory.getService(env.api.hap.Service.Switch);
5
+ if (existingSwitch) {
6
+ env.log.info('Cync: removing stale Switch service from %s (deviceId=%s) before configuring as Lightbulb', deviceName, deviceId);
7
+ accessory.removeService(existingSwitch);
8
+ }
9
+ const service = accessory.getService(env.api.hap.Service.Lightbulb) ||
10
+ accessory.addService(env.api.hap.Service.Lightbulb, deviceName);
11
+ // Optionally update accessory category so UIs treat it as a light
12
+ if (accessory.category !== 5 /* env.api.hap.Categories.LIGHTBULB */) {
13
+ accessory.category = 5 /* env.api.hap.Categories.LIGHTBULB */;
14
+ }
15
+ // Populate Accessory Information from Cync metadata
16
+ applyAccessoryInformationFromCyncDevice(env.api, accessory, device, deviceName, deviceId);
17
+ // Ensure context is initialized
18
+ const ctx = accessory.context;
19
+ ctx.cync = ctx.cync ?? {
20
+ meshId: mesh.id,
21
+ deviceId,
22
+ productId: device.product_id,
23
+ on: false,
24
+ };
25
+ // Remember mapping for LAN updates
26
+ env.registerAccessoryForDevice(deviceId, accessory);
27
+ env.markDeviceSeen(deviceId);
28
+ env.startPollingDevice(deviceId);
29
+ const Characteristic = env.api.hap.Characteristic;
30
+ // ----- On/Off -----
31
+ service
32
+ .getCharacteristic(Characteristic.On)
33
+ .onGet(() => {
34
+ const currentOn = !!ctx.cync?.on;
35
+ if (env.isDeviceProbablyOffline(deviceId)) {
36
+ env.log.debug('Cync: Light On.get offline-heuristic hit; returning cached=%s for %s (deviceId=%s)', String(currentOn), deviceName, deviceId);
37
+ return currentOn;
38
+ }
39
+ env.log.info('Cync: Light On.get -> %s for %s (deviceId=%s)', String(currentOn), deviceName, deviceId);
40
+ return currentOn;
41
+ })
42
+ .onSet(async (value) => {
43
+ const cyncMeta = ctx.cync;
44
+ if (!cyncMeta?.deviceId) {
45
+ env.log.warn('Cync: Light On.set called for %s but no cync.deviceId in context', deviceName);
46
+ return;
47
+ }
48
+ const on = value === true || value === 1;
49
+ env.log.info('Cync: Light On.set -> %s for %s (deviceId=%s)', String(on), deviceName, cyncMeta.deviceId);
50
+ // Optimistic local cache; LAN update will confirm
51
+ cyncMeta.on = on;
52
+ try {
53
+ await env.tcpClient.setSwitchState(cyncMeta.deviceId, { on });
54
+ env.markDeviceSeen(cyncMeta.deviceId);
55
+ }
56
+ catch (err) {
57
+ env.log.warn('Cync: Light On.set failed for %s (deviceId=%s): %s', deviceName, cyncMeta.deviceId, err.message ?? String(err));
58
+ throw new env.api.hap.HapStatusError(-70402 /* env.api.hap.HAPStatus.SERVICE_COMMUNICATION_FAILURE */);
59
+ }
60
+ });
61
+ // ----- Brightness (dimming via LAN combo_control) -----
62
+ service
63
+ .getCharacteristic(Characteristic.Brightness)
64
+ .onGet(() => {
65
+ const current = ctx.cync?.brightness;
66
+ const cachedBrightness = typeof current === 'number'
67
+ ? current
68
+ : (ctx.cync?.on ?? false) ? 100 : 0;
69
+ if (env.isDeviceProbablyOffline(deviceId)) {
70
+ env.log.debug('Cync: Light Brightness.get offline-heuristic hit; returning cached=%d for %s (deviceId=%s)', cachedBrightness, deviceName, deviceId);
71
+ return cachedBrightness;
72
+ }
73
+ return cachedBrightness;
74
+ })
75
+ .onSet(async (value) => {
76
+ const cyncMeta = ctx.cync;
77
+ if (!cyncMeta?.deviceId) {
78
+ env.log.warn('Cync: Light Brightness.set called for %s but no cync.deviceId in context', deviceName);
79
+ return;
80
+ }
81
+ const brightness = Math.max(0, Math.min(100, Number(value)));
82
+ if (!Number.isFinite(brightness)) {
83
+ env.log.warn('Cync: Light Brightness.set received invalid value=%o for %s (deviceId=%s)', value, deviceName, cyncMeta.deviceId);
84
+ return;
85
+ }
86
+ // Optimistic cache
87
+ cyncMeta.brightness = brightness;
88
+ cyncMeta.on = brightness > 0;
89
+ env.log.info('Cync: Light Brightness.set -> %d for %s (deviceId=%s)', brightness, deviceName, cyncMeta.deviceId);
90
+ try {
91
+ // If we're in "color mode", keep the existing RGB and scale brightness via setColor();
92
+ // otherwise treat this as a white-brightness change.
93
+ if (cyncMeta.colorActive && cyncMeta.rgb) {
94
+ await env.tcpClient.setColor(cyncMeta.deviceId, cyncMeta.rgb, brightness);
95
+ }
96
+ else {
97
+ await env.tcpClient.setBrightness(cyncMeta.deviceId, brightness);
98
+ }
99
+ env.markDeviceSeen(cyncMeta.deviceId);
100
+ }
101
+ catch (err) {
102
+ env.log.warn('Cync: Light Brightness.set failed for %s (deviceId=%s): %s', deviceName, cyncMeta.deviceId, err.message ?? String(err));
103
+ throw new env.api.hap.HapStatusError(-70402 /* env.api.hap.HAPStatus.SERVICE_COMMUNICATION_FAILURE */);
104
+ }
105
+ });
106
+ // ----- Hue -----
107
+ service
108
+ .getCharacteristic(Characteristic.Hue)
109
+ .onGet(() => {
110
+ const hue = typeof ctx.cync?.hue === 'number' ? ctx.cync.hue : 0;
111
+ if (env.isDeviceProbablyOffline(deviceId)) {
112
+ env.log.debug('Cync: Light Hue.get offline-heuristic hit; returning cached=%d for %s (deviceId=%s)', hue, deviceName, deviceId);
113
+ }
114
+ return hue;
115
+ })
116
+ .onSet(async (value) => {
117
+ const cyncMeta = ctx.cync;
118
+ if (!cyncMeta?.deviceId) {
119
+ env.log.warn('Cync: Light Hue.set called for %s but no cync.deviceId in context', deviceName);
120
+ return;
121
+ }
122
+ const hue = Math.max(0, Math.min(360, Number(value)));
123
+ if (!Number.isFinite(hue)) {
124
+ env.log.warn('Cync: Light Hue.set received invalid value=%o for %s (deviceId=%s)', value, deviceName, cyncMeta.deviceId);
125
+ return;
126
+ }
127
+ // Use cached saturation/brightness if available, otherwise sane defaults
128
+ const saturation = typeof cyncMeta.saturation === 'number' ? cyncMeta.saturation : 100;
129
+ const brightness = typeof cyncMeta.brightness === 'number' ? cyncMeta.brightness : 100;
130
+ const rgb = hsvToRgb(hue, saturation, brightness);
131
+ // Optimistic cache
132
+ cyncMeta.hue = hue;
133
+ cyncMeta.saturation = saturation;
134
+ cyncMeta.rgb = rgb;
135
+ cyncMeta.colorActive = true;
136
+ cyncMeta.on = brightness > 0;
137
+ cyncMeta.brightness = brightness;
138
+ env.log.info('Cync: Light Hue.set -> %d for %s (deviceId=%s) -> rgb=(%d,%d,%d) brightness=%d', hue, deviceName, cyncMeta.deviceId, rgb.r, rgb.g, rgb.b, brightness);
139
+ try {
140
+ await env.tcpClient.setColor(cyncMeta.deviceId, rgb, brightness);
141
+ env.markDeviceSeen(cyncMeta.deviceId);
142
+ }
143
+ catch (err) {
144
+ env.log.warn('Cync: Light Hue.set failed for %s (deviceId=%s): %s', deviceName, cyncMeta.deviceId, err.message ?? String(err));
145
+ throw new env.api.hap.HapStatusError(-70402 /* env.api.hap.HAPStatus.SERVICE_COMMUNICATION_FAILURE */);
146
+ }
147
+ });
148
+ // ----- Saturation -----
149
+ service
150
+ .getCharacteristic(Characteristic.Saturation)
151
+ .onGet(() => {
152
+ const sat = typeof ctx.cync?.saturation === 'number' ? ctx.cync.saturation : 100;
153
+ if (env.isDeviceProbablyOffline(deviceId)) {
154
+ env.log.debug('Cync: Light Saturation.get offline-heuristic hit; returning cached=%d for %s (deviceId=%s)', sat, deviceName, deviceId);
155
+ }
156
+ return sat;
157
+ })
158
+ .onSet(async (value) => {
159
+ const cyncMeta = ctx.cync;
160
+ if (!cyncMeta?.deviceId) {
161
+ env.log.warn('Cync: Light Saturation.set called for %s but no cync.deviceId in context', deviceName);
162
+ return;
163
+ }
164
+ const saturation = Math.max(0, Math.min(100, Number(value)));
165
+ if (!Number.isFinite(saturation)) {
166
+ env.log.warn('Cync: Light Saturation.set received invalid value=%o for %s (deviceId=%s)', value, deviceName, cyncMeta.deviceId);
167
+ return;
168
+ }
169
+ const hue = typeof cyncMeta.hue === 'number' ? cyncMeta.hue : 0;
170
+ const brightness = typeof cyncMeta.brightness === 'number' ? cyncMeta.brightness : 100;
171
+ const rgb = hsvToRgb(hue, saturation, brightness);
172
+ // Optimistic cache
173
+ cyncMeta.hue = hue;
174
+ cyncMeta.saturation = saturation;
175
+ cyncMeta.rgb = rgb;
176
+ cyncMeta.colorActive = true;
177
+ cyncMeta.on = brightness > 0;
178
+ cyncMeta.brightness = brightness;
179
+ env.log.info('Cync: Light Saturation.set -> %d for %s (deviceId=%s) -> rgb=(%d,%d,%d) brightness=%d', saturation, deviceName, cyncMeta.deviceId, rgb.r, rgb.g, rgb.b, brightness);
180
+ try {
181
+ await env.tcpClient.setColor(cyncMeta.deviceId, rgb, brightness);
182
+ env.markDeviceSeen(cyncMeta.deviceId);
183
+ }
184
+ catch (err) {
185
+ env.log.warn('Cync: Light Saturation.set failed for %s (deviceId=%s): %s', deviceName, cyncMeta.deviceId, err.message ?? String(err));
186
+ throw new env.api.hap.HapStatusError(-70402 /* env.api.hap.HAPStatus.SERVICE_COMMUNICATION_FAILURE */);
187
+ }
188
+ });
189
+ }
190
+ //# sourceMappingURL=cync-light-accessory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cync-light-accessory.js","sourceRoot":"","sources":["../../src/cync/cync-light-accessory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { PlatformAccessory } from 'homebridge';
2
+ import type { CyncDevice, CyncDeviceMesh } from './config-client.js';
3
+ import type { CyncAccessoryEnv } from './cync-accessory-helpers.js';
4
+ export declare function configureCyncSwitchAccessory(env: CyncAccessoryEnv, mesh: CyncDeviceMesh, device: CyncDevice, accessory: PlatformAccessory, deviceName: string, deviceId: string): void;
@@ -0,0 +1,64 @@
1
+ import { applyAccessoryInformationFromCyncDevice } from './cync-accessory-helpers.js';
2
+ export function configureCyncSwitchAccessory(env, mesh, device, accessory, deviceName, deviceId) {
3
+ const service = accessory.getService(env.api.hap.Service.Switch) ||
4
+ accessory.addService(env.api.hap.Service.Switch, deviceName);
5
+ const existingLight = accessory.getService(env.api.hap.Service.Lightbulb);
6
+ if (existingLight) {
7
+ env.log.info('Cync: removing stale Lightbulb service from %s (deviceId=%s) before configuring as Switch', deviceName, deviceId);
8
+ accessory.removeService(existingLight);
9
+ }
10
+ applyAccessoryInformationFromCyncDevice(env.api, accessory, device, deviceName, deviceId);
11
+ // Ensure context is initialized
12
+ const ctx = accessory.context;
13
+ ctx.cync = ctx.cync ?? {
14
+ meshId: mesh.id,
15
+ deviceId,
16
+ productId: device.product_id,
17
+ on: false,
18
+ };
19
+ // Remember mapping for LAN updates
20
+ env.registerAccessoryForDevice(deviceId, accessory);
21
+ env.markDeviceSeen(deviceId);
22
+ env.startPollingDevice(deviceId);
23
+ service
24
+ .getCharacteristic(env.api.hap.Characteristic.On)
25
+ .onGet(() => {
26
+ const currentOn = !!ctx.cync?.on;
27
+ if (env.isDeviceProbablyOffline(deviceId)) {
28
+ env.log.debug('Cync: Switch On.get offline-heuristic hit; returning cached=%s for %s (deviceId=%s)', String(currentOn), deviceName, deviceId);
29
+ return currentOn;
30
+ }
31
+ env.log.info('Cync: On.get -> %s for %s (deviceId=%s)', String(currentOn), deviceName, deviceId);
32
+ return currentOn;
33
+ })
34
+ .onSet(async (value) => {
35
+ const cyncMeta = ctx.cync;
36
+ if (!cyncMeta?.deviceId) {
37
+ env.log.warn('Cync: Switch On.set called for %s but no cync.deviceId in context', deviceName);
38
+ return;
39
+ }
40
+ const on = value === true || value === 1;
41
+ env.log.info('Cync: Switch On.set -> %s for %s (deviceId=%s)', String(on), deviceName, cyncMeta.deviceId);
42
+ // Optimistic cache
43
+ cyncMeta.on = on;
44
+ try {
45
+ if (!on) {
46
+ await env.tcpClient.setSwitchState(cyncMeta.deviceId, { on: false });
47
+ env.markDeviceSeen(cyncMeta.deviceId);
48
+ return;
49
+ }
50
+ if (cyncMeta.colorActive && cyncMeta.rgb && typeof cyncMeta.brightness === 'number') {
51
+ await env.tcpClient.setColor(cyncMeta.deviceId, cyncMeta.rgb, cyncMeta.brightness);
52
+ }
53
+ else {
54
+ await env.tcpClient.setSwitchState(cyncMeta.deviceId, { on: true });
55
+ }
56
+ env.markDeviceSeen(cyncMeta.deviceId);
57
+ }
58
+ catch (err) {
59
+ env.log.warn('Cync: Switch On.set failed for %s (deviceId=%s): %s', deviceName, cyncMeta.deviceId, err.message ?? String(err));
60
+ throw new env.api.hap.HapStatusError(-70402 /* env.api.hap.HAPStatus.SERVICE_COMMUNICATION_FAILURE */);
61
+ }
62
+ });
63
+ }
64
+ //# sourceMappingURL=cync-switch-accessory.js.map