@switchbot/homebridge-switchbot 3.8.3-beta.11 → 3.8.3-beta.12

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 (187) hide show
  1. package/dist/device/blindtilt.d.ts +1 -4
  2. package/dist/device/blindtilt.d.ts.map +1 -1
  3. package/dist/device/blindtilt.js +6 -6
  4. package/dist/device/blindtilt.js.map +1 -1
  5. package/dist/device/bot.d.ts +1 -4
  6. package/dist/device/bot.d.ts.map +1 -1
  7. package/dist/device/bot.js +3 -3
  8. package/dist/device/bot.js.map +1 -1
  9. package/dist/device/ceilinglight.d.ts +1 -4
  10. package/dist/device/ceilinglight.d.ts.map +1 -1
  11. package/dist/device/ceilinglight.js +8 -8
  12. package/dist/device/ceilinglight.js.map +1 -1
  13. package/dist/device/colorbulb.d.ts +1 -4
  14. package/dist/device/colorbulb.d.ts.map +1 -1
  15. package/dist/device/colorbulb.js +8 -8
  16. package/dist/device/colorbulb.js.map +1 -1
  17. package/dist/device/contact.d.ts +1 -4
  18. package/dist/device/contact.d.ts.map +1 -1
  19. package/dist/device/contact.js.map +1 -1
  20. package/dist/device/curtain.d.ts +1 -4
  21. package/dist/device/curtain.d.ts.map +1 -1
  22. package/dist/device/curtain.js +4 -4
  23. package/dist/device/curtain.js.map +1 -1
  24. package/dist/device/device.d.ts +3 -3
  25. package/dist/device/device.d.ts.map +1 -1
  26. package/dist/device/device.js +2 -8
  27. package/dist/device/device.js.map +1 -1
  28. package/dist/device/fan.d.ts +1 -4
  29. package/dist/device/fan.d.ts.map +1 -1
  30. package/dist/device/fan.js +6 -6
  31. package/dist/device/fan.js.map +1 -1
  32. package/dist/device/hub.d.ts +1 -4
  33. package/dist/device/hub.d.ts.map +1 -1
  34. package/dist/device/hub.js.map +1 -1
  35. package/dist/device/humidifier.d.ts +1 -4
  36. package/dist/device/humidifier.d.ts.map +1 -1
  37. package/dist/device/humidifier.js +6 -6
  38. package/dist/device/humidifier.js.map +1 -1
  39. package/dist/device/iosensor.d.ts +1 -4
  40. package/dist/device/iosensor.d.ts.map +1 -1
  41. package/dist/device/iosensor.js.map +1 -1
  42. package/dist/device/lightstrip.d.ts +1 -4
  43. package/dist/device/lightstrip.d.ts.map +1 -1
  44. package/dist/device/lightstrip.js +6 -6
  45. package/dist/device/lightstrip.js.map +1 -1
  46. package/dist/device/lock.d.ts +1 -4
  47. package/dist/device/lock.d.ts.map +1 -1
  48. package/dist/device/lock.js +3 -3
  49. package/dist/device/lock.js.map +1 -1
  50. package/dist/device/meter.d.ts +1 -4
  51. package/dist/device/meter.d.ts.map +1 -1
  52. package/dist/device/meter.js.map +1 -1
  53. package/dist/device/meterplus.d.ts +1 -4
  54. package/dist/device/meterplus.d.ts.map +1 -1
  55. package/dist/device/meterplus.js.map +1 -1
  56. package/dist/device/motion.d.ts +1 -4
  57. package/dist/device/motion.d.ts.map +1 -1
  58. package/dist/device/motion.js.map +1 -1
  59. package/dist/device/plug.d.ts +1 -4
  60. package/dist/device/plug.d.ts.map +1 -1
  61. package/dist/device/plug.js +2 -2
  62. package/dist/device/plug.js.map +1 -1
  63. package/dist/device/robotvacuumcleaner.d.ts +1 -4
  64. package/dist/device/robotvacuumcleaner.d.ts.map +1 -1
  65. package/dist/device/robotvacuumcleaner.js +4 -4
  66. package/dist/device/robotvacuumcleaner.js.map +1 -1
  67. package/dist/device/waterdetector.d.ts +1 -4
  68. package/dist/device/waterdetector.d.ts.map +1 -1
  69. package/dist/device/waterdetector.js.map +1 -1
  70. package/dist/irdevice/airconditioner.d.ts +1 -1
  71. package/dist/irdevice/airconditioner.d.ts.map +1 -1
  72. package/dist/irdevice/airconditioner.js +6 -6
  73. package/dist/irdevice/airconditioner.js.map +1 -1
  74. package/dist/irdevice/airpurifier.d.ts +1 -1
  75. package/dist/irdevice/airpurifier.d.ts.map +1 -1
  76. package/dist/irdevice/airpurifier.js +6 -6
  77. package/dist/irdevice/airpurifier.js.map +1 -1
  78. package/dist/irdevice/camera.d.ts +1 -1
  79. package/dist/irdevice/camera.d.ts.map +1 -1
  80. package/dist/irdevice/camera.js +4 -4
  81. package/dist/irdevice/camera.js.map +1 -1
  82. package/dist/irdevice/fan.d.ts +1 -1
  83. package/dist/irdevice/fan.d.ts.map +1 -1
  84. package/dist/irdevice/fan.js +10 -10
  85. package/dist/irdevice/fan.js.map +1 -1
  86. package/dist/irdevice/irdevice.d.ts +2 -2
  87. package/dist/irdevice/irdevice.d.ts.map +1 -1
  88. package/dist/irdevice/irdevice.js +1 -7
  89. package/dist/irdevice/irdevice.js.map +1 -1
  90. package/dist/irdevice/light.d.ts +1 -1
  91. package/dist/irdevice/light.d.ts.map +1 -1
  92. package/dist/irdevice/light.js +4 -4
  93. package/dist/irdevice/light.js.map +1 -1
  94. package/dist/irdevice/other.d.ts +1 -1
  95. package/dist/irdevice/other.d.ts.map +1 -1
  96. package/dist/irdevice/other.js +4 -4
  97. package/dist/irdevice/other.js.map +1 -1
  98. package/dist/irdevice/tv.d.ts +1 -1
  99. package/dist/irdevice/tv.d.ts.map +1 -1
  100. package/dist/irdevice/tv.js +22 -22
  101. package/dist/irdevice/tv.js.map +1 -1
  102. package/dist/irdevice/vacuumcleaner.d.ts +1 -1
  103. package/dist/irdevice/vacuumcleaner.d.ts.map +1 -1
  104. package/dist/irdevice/vacuumcleaner.js +4 -4
  105. package/dist/irdevice/vacuumcleaner.js.map +1 -1
  106. package/dist/irdevice/waterheater.d.ts +1 -1
  107. package/dist/irdevice/waterheater.d.ts.map +1 -1
  108. package/dist/irdevice/waterheater.js +4 -4
  109. package/dist/irdevice/waterheater.js.map +1 -1
  110. package/dist/platform.d.ts +4 -13
  111. package/dist/platform.d.ts.map +1 -1
  112. package/dist/platform.js +19 -132
  113. package/dist/platform.js.map +1 -1
  114. package/dist/settings.d.ts +1 -3
  115. package/dist/settings.d.ts.map +1 -1
  116. package/dist/settings.js.map +1 -1
  117. package/dist/utils.d.ts +1 -1
  118. package/dist/utils.d.ts.map +1 -1
  119. package/dist/utils.js.map +1 -1
  120. package/package.json +3 -4
  121. package/src/device/blindtilt.ts +8 -11
  122. package/src/device/bot.ts +4 -7
  123. package/src/device/ceilinglight.ts +9 -12
  124. package/src/device/colorbulb.ts +9 -12
  125. package/src/device/contact.ts +1 -4
  126. package/src/device/curtain.ts +6 -9
  127. package/src/device/device.ts +4 -11
  128. package/src/device/fan.ts +7 -10
  129. package/src/device/hub.ts +1 -4
  130. package/src/device/humidifier.ts +7 -10
  131. package/src/device/iosensor.ts +1 -4
  132. package/src/device/lightstrip.ts +7 -10
  133. package/src/device/lock.ts +4 -7
  134. package/src/device/meter.ts +1 -4
  135. package/src/device/meterplus.ts +1 -4
  136. package/src/device/motion.ts +1 -4
  137. package/src/device/plug.ts +3 -6
  138. package/src/device/robotvacuumcleaner.ts +5 -12
  139. package/src/device/waterdetector.ts +1 -4
  140. package/src/irdevice/airconditioner.ts +7 -8
  141. package/src/irdevice/airpurifier.ts +7 -7
  142. package/src/irdevice/camera.ts +5 -5
  143. package/src/irdevice/fan.ts +11 -11
  144. package/src/irdevice/irdevice.ts +3 -11
  145. package/src/irdevice/light.ts +5 -5
  146. package/src/irdevice/other.ts +5 -5
  147. package/src/irdevice/tv.ts +23 -23
  148. package/src/irdevice/vacuumcleaner.ts +5 -5
  149. package/src/irdevice/waterheater.ts +5 -5
  150. package/src/platform.ts +20 -125
  151. package/src/settings.ts +1 -4
  152. package/src/utils.ts +2 -1
  153. package/dist/types/bledevicestatus.d.ts +0 -281
  154. package/dist/types/bledevicestatus.d.ts.map +0 -1
  155. package/dist/types/bledevicestatus.js +0 -2
  156. package/dist/types/bledevicestatus.js.map +0 -1
  157. package/dist/types/devicelist.d.ts +0 -89
  158. package/dist/types/devicelist.d.ts.map +0 -1
  159. package/dist/types/devicelist.js +0 -6
  160. package/dist/types/devicelist.js.map +0 -1
  161. package/dist/types/deviceresponse.d.ts +0 -13
  162. package/dist/types/deviceresponse.d.ts.map +0 -1
  163. package/dist/types/deviceresponse.js +0 -2
  164. package/dist/types/deviceresponse.js.map +0 -1
  165. package/dist/types/devicestatus.d.ts +0 -149
  166. package/dist/types/devicestatus.d.ts.map +0 -1
  167. package/dist/types/devicestatus.js +0 -3
  168. package/dist/types/devicestatus.js.map +0 -1
  169. package/dist/types/devicewebhookstatus.d.ts +0 -156
  170. package/dist/types/devicewebhookstatus.d.ts.map +0 -1
  171. package/dist/types/devicewebhookstatus.js +0 -2
  172. package/dist/types/devicewebhookstatus.js.map +0 -1
  173. package/dist/types/irdevicelist.d.ts +0 -10
  174. package/dist/types/irdevicelist.d.ts.map +0 -1
  175. package/dist/types/irdevicelist.js +0 -2
  176. package/dist/types/irdevicelist.js.map +0 -1
  177. package/dist/types/pushbody.d.ts +0 -6
  178. package/dist/types/pushbody.d.ts.map +0 -1
  179. package/dist/types/pushbody.js +0 -2
  180. package/dist/types/pushbody.js.map +0 -1
  181. package/src/types/bledevicestatus.ts +0 -303
  182. package/src/types/devicelist.ts +0 -124
  183. package/src/types/deviceresponse.ts +0 -14
  184. package/src/types/devicestatus.ts +0 -178
  185. package/src/types/devicewebhookstatus.ts +0 -191
  186. package/src/types/irdevicelist.ts +0 -15
  187. package/src/types/pushbody.ts +0 -9
@@ -1,10 +1,9 @@
1
1
  import type { Server } from 'node:http';
2
- import type { UrlObject } from 'node:url';
3
2
  import type { API, DynamicPlatformPlugin, Logging, PlatformAccessory } from 'homebridge';
4
3
  import type { MqttClient } from 'mqtt';
5
- import type { Dispatcher } from 'undici';
6
4
  import type { devicesConfig, irDevicesConfig, SwitchBotPlatformConfig } from './settings.js';
7
- import type { blindTilt, curtain, curtain3, device } from './types/devicelist.js';
5
+ import type { blindTilt, curtain, curtain3, device } from 'node-switchbot';
6
+ import { SwitchBotOpenAPI } from 'node-switchbot';
8
7
  /**
9
8
  * HomebridgePlatform
10
9
  * This class is the main constructor for your plugin, this is where you should
@@ -32,6 +31,7 @@ export declare class SwitchBotPlatform implements DynamicPlatformPlugin {
32
31
  readonly bleEventHandler: {
33
32
  [x: string]: (context: any) => void;
34
33
  };
34
+ switchBotAPI: SwitchBotOpenAPI;
35
35
  constructor(log: Logging, config: SwitchBotPlatformConfig, api: API);
36
36
  setupMqtt(): Promise<void>;
37
37
  setupwebhook(): Promise<void>;
@@ -50,13 +50,6 @@ export declare class SwitchBotPlatform implements DynamicPlatformPlugin {
50
50
  * This method saves the openToken as the token in the config.json file
51
51
  */
52
52
  updateToken(): Promise<void>;
53
- generateHeaders: () => {
54
- Authorization: any;
55
- sign: string;
56
- nonce: `${string}-${string}-${string}-${string}-${string}`;
57
- t: string;
58
- 'Content-Type': string;
59
- };
60
53
  discoverDevices(): Promise<void>;
61
54
  private handleManualConfig;
62
55
  private isSuccessfulResponse;
@@ -107,9 +100,7 @@ export declare class SwitchBotPlatform implements DynamicPlatformPlugin {
107
100
  * @returns A promise that resolves when the logging is complete.
108
101
  */
109
102
  statusCode(statusCode: number): Promise<void>;
110
- retryRequest(deviceMaxRetries: number, deviceDelayBetweenRetries: number, url: string | URL | UrlObject, options?: {
111
- dispatcher?: Dispatcher;
112
- } & Omit<Dispatcher.RequestOptions, 'origin' | 'path' | 'method'> & Partial<Pick<Dispatcher.RequestOptions, 'method'>>): Promise<{
103
+ retryRequest(deviceId: string, deviceMaxRetries: number, deviceDelayBetweenRetries: number): Promise<{
113
104
  body: any;
114
105
  statusCode: number;
115
106
  }>;
@@ -1 +1 @@
1
- {"version":3,"file":"platform.d.ts","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAmB,MAAM,EAAkB,MAAM,WAAW,CAAA;AACxE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAEzC,OAAO,KAAK,EAAE,GAAG,EAAE,qBAAqB,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AACxF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,MAAM,CAAA;AACtC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAA;AAExC,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAW,uBAAuB,EAAE,MAAM,eAAe,CAAA;AACrG,OAAO,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AAkDjF;;;;GAIG;AACH,qBAAa,iBAAkB,YAAW,qBAAqB;IAEtD,WAAW,EAAE,iBAAiB,EAAE,CAAK;IAC5C,SAAgB,GAAG,EAAE,GAAG,CAAA;IACxB,SAAgB,GAAG,EAAE,OAAO,CAAA;IAG5B,OAAO,EAAG,MAAM,CAAA;IAChB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,SAAS,EAAG,OAAO,CAAA;IACnB,UAAU,EAAG,MAAM,CAAA;IACnB,mBAAmB,EAAG,MAAM,CAAA;IAC5B,cAAc,EAAG,uBAAuB,CAAC,SAAS,CAAC,CAAA;IACnD,eAAe,EAAG,uBAAuB,CAAC,SAAS,CAAC,CAAA;IACpD,MAAM,EAAG,uBAAuB,CAAA;IAGhC,UAAU,EAAE,UAAU,GAAG,IAAI,CAAO;IACpC,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAO;IAG1C,SAAgB,GAAG,EAAE,GAAG,CAAA;IACxB,SAAgB,WAAW,EAAE,GAAG,CAAA;IAGhC,SAAgB,mBAAmB,EAAE;QAAE,CAAC,CAAC,EAAE,MAAM,GAAG,CAAC,OAAO,EAAE,GAAG,KAAK,IAAI,CAAA;KAAE,CAAK;IACjF,SAAgB,eAAe,EAAE;QAAE,CAAC,CAAC,EAAE,MAAM,GAAG,CAAC,OAAO,EAAE,GAAG,KAAK,IAAI,CAAA;KAAE,CAAK;gBAG3E,GAAG,EAAE,OAAO,EACZ,MAAM,EAAE,uBAAuB,EAC/B,GAAG,EAAE,GAAG;IA8EJ,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IA8B1B,YAAY;IA8HZ,QAAQ;IAwCd;;;OAGG;IACG,kBAAkB,CAAC,SAAS,EAAE,iBAAiB;IAQrD;;OAEG;IACG,YAAY;IAgGlB;;;OAGG;IACG,WAAW;IAkDjB,eAAe;;;;;;MAiBd;IAEK,eAAe;YAoCP,kBAAkB;IAsBhC,OAAO,CAAC,oBAAoB;YAId,aAAa;YAoCb,eAAe;IAkB7B,OAAO,CAAC,eAAe;YAQT,mBAAmB;YASnB,YAAY;YA6CZ,cAAc;YA2Cd,gBAAgB;YA6DhB,SAAS;YA+DT,WAAW;YA8DX,eAAe;YA+Df,UAAU;YA+DV,cAAc;YA8Dd,mBAAmB;YA8DnB,YAAY;YA8DZ,aAAa;YA8Db,eAAe;YA6Ef,aAAa;YA6Eb,UAAU;YAsEV,UAAU;YA8DV,eAAe;YA8Df,kBAAkB;YA8DlB,gBAAgB;YA8DhB,SAAS;YA8DT,wBAAwB;YAkFxB,QAAQ;YAsDR,WAAW;YA4DX,WAAW;YA4DX,oBAAoB;YA4DpB,iBAAiB;YA4DjB,iBAAiB;YA4DjB,mBAAmB;YA4DnB,YAAY;YA4DZ,YAAY;IA4DpB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC;IAclE,sBAAsB,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,GAAG,QAAQ,CAAC,GAAG,aAAa,CAAC,GAAG,CAAC,SAAS,GAAG,aAAa,CAAC;IAgCnG,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC;IAU5D,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa;IAgB7C,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC;IAwBnE,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,CAAC,eAAe,GAAG,aAAa,CAAC,EAAE,SAAS,EAAE,iBAAiB;IAazG,6BAA6B,CAAC,iBAAiB,EAAE,iBAAiB;IAOzE;;;;;OAKG;IACG,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAoC7C,YAAY,CAAC,gBAAgB,EAAE,MAAM,EAAE,yBAAyB,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,GAAG,GAAG,SAAS,EAAE,OAAO,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,UAAU,CAAA;KAAE,GAAG,IAAI,CAAC,UAAU,CAAC,cAAc,EAAE,QAAQ,GAAG,MAAM,GAAG,QAAQ,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,GAAG,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;IAuBhT,UAAU,CAAC,SAAS,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,GAAG,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC;IAYtF,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC;IAY7B,yBAAyB;IA8BzB,sBAAsB;IAc5B;;;;;;OAMG;IACG,2BAA2B,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAgCpG;;;OAGG;IACG,OAAO,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAMrC,UAAU,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAMxC,eAAe,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ7C,OAAO,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAMrC,YAAY,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ1C,QAAQ,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAMtC,aAAa,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ3C,QAAQ,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAUtC,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC;IAIlC,uBAAuB,IAAI,OAAO,CAAC,OAAO,CAAC;CAGlD"}
1
+ {"version":3,"file":"platform.d.ts","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"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"}
package/dist/platform.js CHANGED
@@ -1,18 +1,10 @@
1
- import { Buffer } from 'node:buffer';
2
- import crypto, { randomUUID } from 'node:crypto';
3
1
  import { readFileSync, writeFileSync } from 'node:fs';
4
- import { createServer } from 'node:http';
5
2
  import process from 'node:process';
6
3
  import asyncmqtt from 'async-mqtt';
7
4
  import fakegato from 'fakegato-history';
8
5
  import { EveHomeKitTypes } from 'homebridge-lib/EveHomeKitTypes';
9
- /*
10
- * For Testing Locally:
11
- * import { SwitchBotModel } from '/Users/Shared/GitHub/OpenWonderLabs/node-switchbot/dist/index.js';
12
- */
13
- import { SwitchBot, SwitchBotModel } from 'node-switchbot';
6
+ import { LogLevel, SwitchBot, SwitchBotModel, SwitchBotOpenAPI } from 'node-switchbot';
14
7
  import { queueScheduler } from 'rxjs';
15
- import { request } from 'undici';
16
8
  import { BlindTilt } from './device/blindtilt.js';
17
9
  import { Bot } from './device/bot.js';
18
10
  import { CeilingLight } from './device/ceilinglight.js';
@@ -40,7 +32,7 @@ import { Others } from './irdevice/other.js';
40
32
  import { TV } from './irdevice/tv.js';
41
33
  import { VacuumCleaner } from './irdevice/vacuumcleaner.js';
42
34
  import { WaterHeater } from './irdevice/waterheater.js';
43
- import { deleteWebhook, Devices, PLATFORM_NAME, PLUGIN_NAME, queryWebhook, setupWebhook, updateWebhook } from './settings.js';
35
+ import { PLATFORM_NAME, PLUGIN_NAME } from './settings.js';
44
36
  import { formatDeviceIdAsMac, isBlindTiltDevice, isCurtainDevice, sleep } from './utils.js';
45
37
  /**
46
38
  * HomebridgePlatform
@@ -70,9 +62,13 @@ export class SwitchBotPlatform {
70
62
  // Event Handlers
71
63
  webhookEventHandler = {};
72
64
  bleEventHandler = {};
65
+ switchBotAPI;
73
66
  constructor(log, config, api) {
74
67
  this.api = api;
75
68
  this.log = log;
69
+ this.switchBotAPI = new SwitchBotOpenAPI(this.config.credentials?.token, this.config.credentials?.secret);
70
+ // Set the log level
71
+ this.switchBotAPI.setLogLevel(LogLevel.DEBUG);
76
72
  // only load if configured
77
73
  if (!config) {
78
74
  return;
@@ -181,123 +177,31 @@ export class SwitchBotPlatform {
181
177
  if (this.config.options?.webhookURL) {
182
178
  const url = this.config.options?.webhookURL;
183
179
  try {
184
- const xurl = new URL(url);
185
- const port = Number(xurl.port);
186
- const path = xurl.pathname;
187
- this.webhookEventListener = createServer((request, response) => {
188
- try {
189
- if (request.url === path && request.method === 'POST') {
190
- request.on('data', async (data) => {
191
- try {
192
- const body = JSON.parse(data);
193
- await this.debugLog(`Received Webhook: ${JSON.stringify(body)}`);
194
- if (this.config.options?.mqttURL) {
195
- const mac = body.context.deviceMac?.toLowerCase().match(/[\s\S]{1,2}/g)?.join(':');
196
- const options = this.config.options?.mqttPubOptions || {};
197
- this.mqttClient?.publish(`homebridge-switchbot/webhook/${mac}`, `${JSON.stringify(body.context)}`, options);
198
- }
199
- this.webhookEventHandler[body.context.deviceMac]?.(body.context);
200
- }
201
- catch (e) {
202
- await this.errorLog(`Failed to handle webhook event. Error:${e}`);
203
- }
204
- });
205
- response.writeHead(200, { 'Content-Type': 'text/plain' });
206
- response.end('OK');
207
- }
208
- // else {
209
- // response.writeHead(403, {'Content-Type': 'text/plain'});
210
- // response.end(`NG`);
211
- // }
212
- }
213
- catch (e) {
214
- this.errorLog(`Failed to handle webhook event. Error:${e}`);
215
- }
216
- }).listen(port || 80);
217
- }
218
- catch (e) {
219
- await this.errorLog(`Failed to create webhook listener. Error:${e.message}`);
220
- return;
221
- }
222
- try {
223
- const { body, statusCode } = await request(setupWebhook, {
224
- method: 'POST',
225
- headers: this.generateHeaders(),
226
- body: JSON.stringify({
227
- action: 'setupWebhook',
228
- url,
229
- deviceList: 'ALL',
230
- }),
180
+ this.switchBotAPI.setupWebhook(url);
181
+ // Listen for webhook events
182
+ this.switchBotAPI.on('webhookEvent', (body) => {
183
+ this.debugLog('Received webhook event:', body);
184
+ this.webhookEventHandler[body.context.deviceMac]?.(body.context);
231
185
  });
232
- const response = await body.json();
233
- await this.debugLog(`setupWebhook: url:${url}, body:${JSON.stringify(response)}, statusCode:${statusCode}`);
234
- if (statusCode !== 200 || response?.statusCode !== 100) {
235
- await this.errorLog(`Failed to configure webhook. Existing webhook well be overridden. HTTP:${statusCode} API:${response?.statusCode} message:${response?.message}`);
236
- }
237
186
  }
238
187
  catch (e) {
239
- await this.errorLog(`Failed to configure webhook. Error: ${e.message}`);
188
+ await this.errorLog(`Failed to setup webhook. Error:${e.message}`);
240
189
  }
241
190
  try {
242
- const { body, statusCode } = await request(updateWebhook, {
243
- method: 'POST',
244
- headers: this.generateHeaders(),
245
- body: JSON.stringify({
246
- action: 'updateWebhook',
247
- config: {
248
- url,
249
- enable: true,
250
- },
251
- }),
252
- });
253
- const response = await body.json();
254
- await this.debugLog(`updateWebhook: url:${url}, body:${JSON.stringify(response)}, statusCode:${statusCode}`);
255
- if (statusCode !== 200 || response?.statusCode !== 100) {
256
- await this.errorLog(`Failed to update webhook. HTTP:${statusCode} API:${response?.statusCode} message:${response?.message}`);
257
- }
191
+ this.switchBotAPI.updateWebhook(url);
258
192
  }
259
193
  catch (e) {
260
194
  await this.errorLog(`Failed to update webhook. Error:${e.message}`);
261
195
  }
262
196
  try {
263
- const { body, statusCode } = await request(queryWebhook, {
264
- method: 'POST',
265
- headers: this.generateHeaders(),
266
- body: JSON.stringify({
267
- action: 'queryUrl',
268
- }),
269
- });
270
- const response = await body.json();
271
- await this.debugLog(`queryWebhook: body:${JSON.stringify(response)}`);
272
- await this.debugLog(`queryWebhook: statusCode:${statusCode}`);
273
- if (statusCode !== 200 || response?.statusCode !== 100) {
274
- await this.errorLog(`Failed to query webhook. HTTP:${statusCode} API:${response?.statusCode} message:${response?.message}`);
275
- }
276
- else {
277
- await this.infoLog(`Listening webhook on ${response?.body?.urls[0]}`);
278
- }
197
+ this.switchBotAPI.queryWebhook();
279
198
  }
280
199
  catch (e) {
281
- await this.errorLog(`Failed to query webhook. Error:${e}`);
200
+ await this.errorLog(`Failed to query webhook. Error:${e.message}`);
282
201
  }
283
202
  this.api.on('shutdown', async () => {
284
203
  try {
285
- const { body, statusCode } = await request(deleteWebhook, {
286
- method: 'POST',
287
- headers: this.generateHeaders(),
288
- body: JSON.stringify({
289
- action: 'deleteWebhook',
290
- url,
291
- }),
292
- });
293
- const response = await body.json();
294
- await this.debugLog(`deleteWebhook: url:${url}, body:${JSON.stringify(response)}, statusCode:${statusCode}`);
295
- if (statusCode !== 200 || response?.statusCode !== 100) {
296
- await this.errorLog(`Failed to delete webhook. HTTP:${statusCode} API:${response?.statusCode} message:${response?.message}`);
297
- }
298
- else {
299
- await this.infoLog('Unregistered webhook to close listening.');
300
- }
204
+ this.switchBotAPI.deleteWebhook(url);
301
205
  }
302
206
  catch (e) {
303
207
  await this.errorLog(`Failed to delete webhook. Error:${e.message}`);
@@ -497,23 +401,6 @@ export class SwitchBotPlatform {
497
401
  await this.errorLog(`Update Token: ${e}`);
498
402
  }
499
403
  }
500
- generateHeaders = () => {
501
- const t = `${Date.now()}`;
502
- const nonce = randomUUID();
503
- const data = this.config.credentials?.token + t + nonce;
504
- const signTerm = crypto
505
- .createHmac('sha256', this.config.credentials?.secret)
506
- .update(Buffer.from(data, 'utf-8'))
507
- .digest();
508
- const sign = signTerm.toString('base64');
509
- return {
510
- 'Authorization': this.config.credentials?.token,
511
- 'sign': sign,
512
- 'nonce': nonce,
513
- 't': t,
514
- 'Content-Type': 'application/json',
515
- };
516
- };
517
404
  async discoverDevices() {
518
405
  if (!this.config.credentials?.token) {
519
406
  return this.handleManualConfig();
@@ -526,7 +413,7 @@ export class SwitchBotPlatform {
526
413
  await this.debugWarnLog(`Delay Between Retries: ${delayBetweenRetries}`);
527
414
  while (retryCount < maxRetries) {
528
415
  try {
529
- const { body, statusCode } = await request(Devices, { headers: this.generateHeaders() });
416
+ const { body, statusCode } = await this.switchBotAPI.getDevices();
530
417
  await this.debugWarnLog(`statusCode: ${statusCode}`);
531
418
  const devicesAPI = await body.json();
532
419
  await this.debugWarnLog(`devicesAPI: ${JSON.stringify(devicesAPI)}`);
@@ -2536,13 +2423,13 @@ export class SwitchBotPlatform {
2536
2423
  await this.errorLog(message);
2537
2424
  }
2538
2425
  }
2539
- async retryRequest(deviceMaxRetries, deviceDelayBetweenRetries, url, options) {
2426
+ async retryRequest(deviceId, deviceMaxRetries, deviceDelayBetweenRetries) {
2540
2427
  let retryCount = 0;
2541
2428
  const maxRetries = deviceMaxRetries;
2542
2429
  const delayBetweenRetries = deviceDelayBetweenRetries;
2543
2430
  while (retryCount < maxRetries) {
2544
2431
  try {
2545
- const { body, statusCode } = await request(url, options);
2432
+ const { body, statusCode } = await this.switchBotAPI.getDeviceStatus(deviceId);
2546
2433
  if (statusCode === 200 || statusCode === 100) {
2547
2434
  return { body, statusCode };
2548
2435
  }