node-switchbot 4.0.0-beta.1 → 4.0.0-beta.11

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 (379) hide show
  1. package/.github/copilot-instructions.md +19 -5
  2. package/BLE.md +117 -4
  3. package/CHANGELOG.md +45 -0
  4. package/README.md +7 -1
  5. package/dist/api.d.ts +3 -3
  6. package/dist/api.d.ts.map +1 -1
  7. package/dist/api.js +9 -6
  8. package/dist/api.js.map +1 -1
  9. package/dist/ble.d.ts +38 -4
  10. package/dist/ble.d.ts.map +1 -1
  11. package/dist/ble.js +409 -53
  12. package/dist/ble.js.map +1 -1
  13. package/dist/devices/base.d.ts +83 -5
  14. package/dist/devices/base.d.ts.map +1 -1
  15. package/dist/devices/base.js +371 -34
  16. package/dist/devices/base.js.map +1 -1
  17. package/dist/devices/device-override-state-during-connection.d.ts +27 -0
  18. package/dist/devices/device-override-state-during-connection.d.ts.map +1 -0
  19. package/dist/devices/device-override-state-during-connection.js +45 -0
  20. package/dist/devices/device-override-state-during-connection.js.map +1 -0
  21. package/dist/devices/index.d.ts +29 -0
  22. package/dist/devices/index.d.ts.map +1 -1
  23. package/dist/devices/index.js +29 -0
  24. package/dist/devices/index.js.map +1 -1
  25. package/dist/devices/sequence-device.d.ts +36 -0
  26. package/dist/devices/sequence-device.d.ts.map +1 -0
  27. package/dist/devices/sequence-device.js +75 -0
  28. package/dist/devices/sequence-device.js.map +1 -0
  29. package/dist/devices/wo-air-purifier.d.ts +2 -2
  30. package/dist/devices/wo-air-purifier.d.ts.map +1 -1
  31. package/dist/devices/wo-air-purifier.js +2 -2
  32. package/dist/devices/wo-air-purifier.js.map +1 -1
  33. package/dist/devices/wo-art-frame.d.ts +8 -0
  34. package/dist/devices/wo-art-frame.d.ts.map +1 -0
  35. package/dist/devices/wo-art-frame.js +12 -0
  36. package/dist/devices/wo-art-frame.js.map +1 -0
  37. package/dist/devices/wo-bulb.d.ts +10 -0
  38. package/dist/devices/wo-bulb.d.ts.map +1 -1
  39. package/dist/devices/wo-bulb.js +69 -0
  40. package/dist/devices/wo-bulb.js.map +1 -1
  41. package/dist/devices/wo-circulator-fan.d.ts +8 -0
  42. package/dist/devices/wo-circulator-fan.d.ts.map +1 -0
  43. package/dist/devices/wo-circulator-fan.js +12 -0
  44. package/dist/devices/wo-circulator-fan.js.map +1 -0
  45. package/dist/devices/wo-climate-panel.d.ts +8 -0
  46. package/dist/devices/wo-climate-panel.d.ts.map +1 -0
  47. package/dist/devices/wo-climate-panel.js +12 -0
  48. package/dist/devices/wo-climate-panel.js.map +1 -0
  49. package/dist/devices/wo-curtain.d.ts +3 -3
  50. package/dist/devices/wo-curtain.d.ts.map +1 -1
  51. package/dist/devices/wo-curtain.js +12 -9
  52. package/dist/devices/wo-curtain.js.map +1 -1
  53. package/dist/devices/wo-floor-lamp.d.ts +8 -0
  54. package/dist/devices/wo-floor-lamp.d.ts.map +1 -0
  55. package/dist/devices/wo-floor-lamp.js +12 -0
  56. package/dist/devices/wo-floor-lamp.js.map +1 -0
  57. package/dist/devices/wo-garage-door-opener.d.ts +8 -0
  58. package/dist/devices/wo-garage-door-opener.d.ts.map +1 -0
  59. package/dist/devices/wo-garage-door-opener.js +12 -0
  60. package/dist/devices/wo-garage-door-opener.js.map +1 -0
  61. package/dist/devices/wo-hand.d.ts +53 -2
  62. package/dist/devices/wo-hand.d.ts.map +1 -1
  63. package/dist/devices/wo-hand.js +121 -3
  64. package/dist/devices/wo-hand.js.map +1 -1
  65. package/dist/devices/wo-hubmini-matter.d.ts +8 -0
  66. package/dist/devices/wo-hubmini-matter.d.ts.map +1 -0
  67. package/dist/devices/wo-hubmini-matter.js +12 -0
  68. package/dist/devices/wo-hubmini-matter.js.map +1 -0
  69. package/dist/devices/wo-humi2.d.ts +12 -0
  70. package/dist/devices/wo-humi2.d.ts.map +1 -1
  71. package/dist/devices/wo-humi2.js +18 -0
  72. package/dist/devices/wo-humi2.js.map +1 -1
  73. package/dist/devices/wo-keypad-vision-pro.d.ts +18 -0
  74. package/dist/devices/wo-keypad-vision-pro.d.ts.map +1 -0
  75. package/dist/devices/wo-keypad-vision-pro.js +15 -0
  76. package/dist/devices/wo-keypad-vision-pro.js.map +1 -0
  77. package/dist/devices/wo-keypad-vision.d.ts +8 -0
  78. package/dist/devices/wo-keypad-vision.d.ts.map +1 -0
  79. package/dist/devices/wo-keypad-vision.js +12 -0
  80. package/dist/devices/wo-keypad-vision.js.map +1 -0
  81. package/dist/devices/wo-lock-lite.d.ts +7 -0
  82. package/dist/devices/wo-lock-lite.d.ts.map +1 -0
  83. package/dist/devices/wo-lock-lite.js +11 -0
  84. package/dist/devices/wo-lock-lite.js.map +1 -0
  85. package/dist/devices/wo-lock-pro-wifi.d.ts +7 -0
  86. package/dist/devices/wo-lock-pro-wifi.d.ts.map +1 -0
  87. package/dist/devices/wo-lock-pro-wifi.js +11 -0
  88. package/dist/devices/wo-lock-pro-wifi.js.map +1 -0
  89. package/dist/devices/wo-lock-pro.d.ts +11 -2
  90. package/dist/devices/wo-lock-pro.d.ts.map +1 -1
  91. package/dist/devices/wo-lock-pro.js +65 -3
  92. package/dist/devices/wo-lock-pro.js.map +1 -1
  93. package/dist/devices/wo-lock-vision-pro.d.ts +7 -0
  94. package/dist/devices/wo-lock-vision-pro.d.ts.map +1 -0
  95. package/dist/devices/wo-lock-vision-pro.js +11 -0
  96. package/dist/devices/wo-lock-vision-pro.js.map +1 -0
  97. package/dist/devices/wo-lock-vision.d.ts +7 -0
  98. package/dist/devices/wo-lock-vision.d.ts.map +1 -0
  99. package/dist/devices/wo-lock-vision.js +11 -0
  100. package/dist/devices/wo-lock-vision.js.map +1 -0
  101. package/dist/devices/wo-lock.d.ts +7 -2
  102. package/dist/devices/wo-lock.d.ts.map +1 -1
  103. package/dist/devices/wo-lock.js +58 -3
  104. package/dist/devices/wo-lock.js.map +1 -1
  105. package/dist/devices/wo-plug-mini-us.d.ts +2 -2
  106. package/dist/devices/wo-plug-mini-us.d.ts.map +1 -1
  107. package/dist/devices/wo-plug-mini-us.js +2 -2
  108. package/dist/devices/wo-plug-mini-us.js.map +1 -1
  109. package/dist/devices/wo-relay-switch-1.d.ts +4 -2
  110. package/dist/devices/wo-relay-switch-1.d.ts.map +1 -1
  111. package/dist/devices/wo-relay-switch-1.js +36 -4
  112. package/dist/devices/wo-relay-switch-1.js.map +1 -1
  113. package/dist/devices/wo-relay-switch-2pm.d.ts +21 -0
  114. package/dist/devices/wo-relay-switch-2pm.d.ts.map +1 -0
  115. package/dist/devices/wo-relay-switch-2pm.js +39 -0
  116. package/dist/devices/wo-relay-switch-2pm.js.map +1 -0
  117. package/dist/devices/wo-rgbic-bulb.d.ts +29 -0
  118. package/dist/devices/wo-rgbic-bulb.d.ts.map +1 -0
  119. package/dist/devices/wo-rgbic-bulb.js +84 -0
  120. package/dist/devices/wo-rgbic-bulb.js.map +1 -0
  121. package/dist/devices/wo-rgbicww-floor-lamp.d.ts +8 -0
  122. package/dist/devices/wo-rgbicww-floor-lamp.d.ts.map +1 -0
  123. package/dist/devices/wo-rgbicww-floor-lamp.js +12 -0
  124. package/dist/devices/wo-rgbicww-floor-lamp.js.map +1 -0
  125. package/dist/devices/wo-rgbicww-strip-light.d.ts +8 -0
  126. package/dist/devices/wo-rgbicww-strip-light.d.ts.map +1 -0
  127. package/dist/devices/wo-rgbicww-strip-light.js +12 -0
  128. package/dist/devices/wo-rgbicww-strip-light.js.map +1 -0
  129. package/dist/devices/wo-roller-shade.d.ts +8 -0
  130. package/dist/devices/wo-roller-shade.d.ts.map +1 -0
  131. package/dist/devices/wo-roller-shade.js +12 -0
  132. package/dist/devices/wo-roller-shade.js.map +1 -0
  133. package/dist/devices/wo-smart-thermostat-radiator.d.ts +8 -0
  134. package/dist/devices/wo-smart-thermostat-radiator.d.ts.map +1 -0
  135. package/dist/devices/wo-smart-thermostat-radiator.js +12 -0
  136. package/dist/devices/wo-smart-thermostat-radiator.js.map +1 -0
  137. package/dist/devices/wo-strip-light-3.d.ts +8 -0
  138. package/dist/devices/wo-strip-light-3.d.ts.map +1 -0
  139. package/dist/devices/wo-strip-light-3.js +12 -0
  140. package/dist/devices/wo-strip-light-3.js.map +1 -0
  141. package/dist/devices/wo-vacuum-k10-plus.d.ts +7 -0
  142. package/dist/devices/wo-vacuum-k10-plus.d.ts.map +1 -0
  143. package/dist/devices/wo-vacuum-k10-plus.js +11 -0
  144. package/dist/devices/wo-vacuum-k10-plus.js.map +1 -0
  145. package/dist/devices/wo-vacuum-k10-pro-combo.d.ts +7 -0
  146. package/dist/devices/wo-vacuum-k10-pro-combo.d.ts.map +1 -0
  147. package/dist/devices/wo-vacuum-k10-pro-combo.js +11 -0
  148. package/dist/devices/wo-vacuum-k10-pro-combo.js.map +1 -0
  149. package/dist/devices/wo-vacuum-k10-pro.d.ts +7 -0
  150. package/dist/devices/wo-vacuum-k10-pro.d.ts.map +1 -0
  151. package/dist/devices/wo-vacuum-k10-pro.js +11 -0
  152. package/dist/devices/wo-vacuum-k10-pro.js.map +1 -0
  153. package/dist/devices/wo-vacuum-k11-plus.d.ts +7 -0
  154. package/dist/devices/wo-vacuum-k11-plus.d.ts.map +1 -0
  155. package/dist/devices/wo-vacuum-k11-plus.js +11 -0
  156. package/dist/devices/wo-vacuum-k11-plus.js.map +1 -0
  157. package/dist/devices/wo-vacuum-k20.d.ts +7 -0
  158. package/dist/devices/wo-vacuum-k20.d.ts.map +1 -0
  159. package/dist/devices/wo-vacuum-k20.js +11 -0
  160. package/dist/devices/wo-vacuum-k20.js.map +1 -0
  161. package/dist/devices/wo-vacuum-s10.d.ts +7 -0
  162. package/dist/devices/wo-vacuum-s10.d.ts.map +1 -0
  163. package/dist/devices/wo-vacuum-s10.js +11 -0
  164. package/dist/devices/wo-vacuum-s10.js.map +1 -0
  165. package/dist/devices/wo-vacuum-s20.d.ts +7 -0
  166. package/dist/devices/wo-vacuum-s20.d.ts.map +1 -0
  167. package/dist/devices/wo-vacuum-s20.js +11 -0
  168. package/dist/devices/wo-vacuum-s20.js.map +1 -0
  169. package/dist/devices/wo-vacuum.d.ts +44 -0
  170. package/dist/devices/wo-vacuum.d.ts.map +1 -0
  171. package/dist/devices/wo-vacuum.js +117 -0
  172. package/dist/devices/wo-vacuum.js.map +1 -0
  173. package/dist/index.d.ts +4 -2
  174. package/dist/index.d.ts.map +1 -1
  175. package/dist/index.js +3 -1
  176. package/dist/index.js.map +1 -1
  177. package/dist/settings.d.ts +27 -0
  178. package/dist/settings.d.ts.map +1 -1
  179. package/dist/settings.js +76 -6
  180. package/dist/settings.js.map +1 -1
  181. package/dist/switchbot.d.ts.map +1 -1
  182. package/dist/switchbot.js +86 -9
  183. package/dist/switchbot.js.map +1 -1
  184. package/dist/types/ble.d.ts +20 -1
  185. package/dist/types/ble.d.ts.map +1 -1
  186. package/dist/types/ble.js.map +1 -1
  187. package/dist/types/device.d.ts +49 -3
  188. package/dist/types/device.d.ts.map +1 -1
  189. package/dist/types/index.d.ts +22 -0
  190. package/dist/types/index.d.ts.map +1 -1
  191. package/dist/types/index.js.map +1 -1
  192. package/dist/utils/bot-ble.d.ts +36 -0
  193. package/dist/utils/bot-ble.d.ts.map +1 -0
  194. package/dist/utils/bot-ble.js +109 -0
  195. package/dist/utils/bot-ble.js.map +1 -0
  196. package/dist/utils/circuit-breaker.d.ts +98 -0
  197. package/dist/utils/circuit-breaker.d.ts.map +1 -0
  198. package/dist/utils/circuit-breaker.js +187 -0
  199. package/dist/utils/circuit-breaker.js.map +1 -0
  200. package/dist/utils/connection-tracker.d.ts +66 -0
  201. package/dist/utils/connection-tracker.d.ts.map +1 -0
  202. package/dist/utils/connection-tracker.js +184 -0
  203. package/dist/utils/connection-tracker.js.map +1 -0
  204. package/dist/utils/fallback-handler.d.ts +68 -0
  205. package/dist/utils/fallback-handler.d.ts.map +1 -0
  206. package/dist/utils/fallback-handler.js +131 -0
  207. package/dist/utils/fallback-handler.js.map +1 -0
  208. package/dist/utils/index.d.ts +10 -0
  209. package/dist/utils/index.d.ts.map +1 -1
  210. package/dist/utils/index.js +41 -4
  211. package/dist/utils/index.js.map +1 -1
  212. package/dist/utils/retry.d.ts +55 -0
  213. package/dist/utils/retry.d.ts.map +1 -0
  214. package/dist/utils/retry.js +95 -0
  215. package/dist/utils/retry.js.map +1 -0
  216. package/docs/assets/hierarchy.js +1 -1
  217. package/docs/assets/navigation.js +1 -1
  218. package/docs/assets/search.js +1 -1
  219. package/docs/classes/APIError.html +2 -2
  220. package/docs/classes/APINotAvailableError.html +2 -2
  221. package/docs/classes/BLEConnection.html +16 -10
  222. package/docs/classes/BLENotAvailableError.html +2 -2
  223. package/docs/classes/BLEScanner.html +11 -9
  224. package/docs/classes/CommandFailedError.html +2 -2
  225. package/docs/classes/ConnectionTimeoutError.html +2 -2
  226. package/docs/classes/DeviceManager.html +13 -13
  227. package/docs/classes/DeviceNotFoundError.html +2 -2
  228. package/docs/classes/DeviceOverrideStateDuringConnection.html +56 -0
  229. package/docs/classes/DiscoveryError.html +2 -2
  230. package/docs/classes/OpenAPIClient.html +24 -24
  231. package/docs/classes/SequenceDevice.html +58 -0
  232. package/docs/classes/SwitchBot.html +11 -11
  233. package/docs/classes/SwitchBotDevice.html +43 -15
  234. package/docs/classes/SwitchBotError.html +2 -2
  235. package/docs/classes/ValidationError.html +2 -2
  236. package/docs/classes/WoAirPurifier.html +48 -18
  237. package/docs/classes/WoAirPurifierTable.html +48 -18
  238. package/docs/classes/WoArtFrame.html +71 -0
  239. package/docs/classes/WoBlindTilt.html +48 -20
  240. package/docs/classes/WoBulb.html +52 -19
  241. package/docs/classes/WoCeilingLight.html +52 -19
  242. package/docs/classes/WoCirculatorFan.html +66 -0
  243. package/docs/classes/WoClimatePanel.html +66 -0
  244. package/docs/classes/WoContact.html +42 -14
  245. package/docs/classes/WoCurtain.html +46 -18
  246. package/docs/classes/WoFloorLamp.html +71 -0
  247. package/docs/classes/WoGarageDoorOpener.html +64 -0
  248. package/docs/classes/WoHand.html +63 -19
  249. package/docs/classes/WoHub2.html +42 -14
  250. package/docs/classes/WoHub3.html +42 -14
  251. package/docs/classes/WoHubMiniMatter.html +56 -0
  252. package/docs/classes/WoHumi.html +46 -18
  253. package/docs/classes/WoHumi2.html +52 -18
  254. package/docs/classes/WoIOSensorTH.html +42 -14
  255. package/docs/classes/WoKeypad.html +42 -14
  256. package/docs/classes/WoKeypadVision.html +56 -0
  257. package/docs/classes/WoKeypadVisionPro.html +56 -0
  258. package/docs/classes/WoLeak.html +42 -14
  259. package/docs/classes/WoPlugMiniJP.html +45 -17
  260. package/docs/classes/WoPlugMiniUS.html +45 -17
  261. package/docs/classes/WoPresence.html +42 -14
  262. package/docs/classes/WoRGBICBulb.html +82 -0
  263. package/docs/classes/WoRGBICWWFloorLamp.html +82 -0
  264. package/docs/classes/WoRGBICWWStripLight.html +82 -0
  265. package/docs/classes/WoRelaySwitch1.html +47 -17
  266. package/docs/classes/WoRelaySwitch1PM.html +47 -17
  267. package/docs/classes/WoRelaySwitch2PM.html +68 -0
  268. package/docs/classes/WoRemote.html +42 -14
  269. package/docs/classes/WoRollerShade.html +64 -0
  270. package/docs/classes/WoSensorTH.html +42 -14
  271. package/docs/classes/WoSensorTHPlus.html +42 -14
  272. package/docs/classes/WoSensorTHPro.html +42 -14
  273. package/docs/classes/WoSensorTHProCO2.html +42 -14
  274. package/docs/classes/WoSmartLock.html +49 -16
  275. package/docs/classes/WoSmartLockLite.html +64 -0
  276. package/docs/classes/WoSmartLockPro.html +52 -17
  277. package/docs/classes/WoSmartLockProWiFi.html +68 -0
  278. package/docs/classes/WoSmartLockVision.html +64 -0
  279. package/docs/classes/WoSmartLockVisionPro.html +68 -0
  280. package/docs/classes/WoSmartThermostatRadiator.html +66 -0
  281. package/docs/classes/WoStrip.html +52 -19
  282. package/docs/classes/WoStripLight3.html +71 -0
  283. package/docs/classes/WoVacuum.html +71 -0
  284. package/docs/classes/WoVacuumK10Plus.html +71 -0
  285. package/docs/classes/WoVacuumK10Pro.html +71 -0
  286. package/docs/classes/WoVacuumK10ProCombo.html +71 -0
  287. package/docs/classes/WoVacuumK11Plus.html +71 -0
  288. package/docs/classes/WoVacuumK20.html +71 -0
  289. package/docs/classes/WoVacuumS10.html +71 -0
  290. package/docs/classes/WoVacuumS20.html +71 -0
  291. package/docs/enums/LogLevel.html +2 -2
  292. package/docs/enums/SwitchBotBLEModel.html +2 -2
  293. package/docs/enums/SwitchBotBLEModelName.html +2 -2
  294. package/docs/functions/updateBaseURL.html +1 -1
  295. package/docs/hierarchy.html +1 -1
  296. package/docs/index.html +2 -2
  297. package/docs/interfaces/APICommandRequest.html +2 -2
  298. package/docs/interfaces/APICommandResponse.html +2 -2
  299. package/docs/interfaces/APIDevice.html +2 -2
  300. package/docs/interfaces/APIDeviceStatus.html +2 -2
  301. package/docs/interfaces/APIErrorResponse.html +2 -2
  302. package/docs/interfaces/APIResponse.html +2 -2
  303. package/docs/interfaces/AirPurifierCommands.html +2 -2
  304. package/docs/interfaces/AirPurifierServiceData.html +20 -5
  305. package/docs/interfaces/AirPurifierStatus.html +7 -7
  306. package/docs/interfaces/BLEAdvertisement.html +3 -2
  307. package/docs/interfaces/BLEScanOptions.html +5 -5
  308. package/docs/interfaces/BLEServiceData.html +22 -5
  309. package/docs/interfaces/BlindTiltCommands.html +2 -2
  310. package/docs/interfaces/BlindTiltServiceData.html +21 -5
  311. package/docs/interfaces/BlindTiltStatus.html +6 -6
  312. package/docs/interfaces/BotCommands.html +6 -2
  313. package/docs/interfaces/BotServiceData.html +20 -5
  314. package/docs/interfaces/BotStatus.html +6 -6
  315. package/docs/interfaces/BulbCommands.html +4 -2
  316. package/docs/interfaces/BulbServiceData.html +21 -5
  317. package/docs/interfaces/BulbStatus.html +6 -6
  318. package/docs/interfaces/CeilingLightCommands.html +4 -2
  319. package/docs/interfaces/CeilingLightServiceData.html +21 -5
  320. package/docs/interfaces/CeilingLightStatus.html +6 -6
  321. package/docs/interfaces/CommandResult.html +6 -6
  322. package/docs/interfaces/ContactServiceData.html +22 -5
  323. package/docs/interfaces/ContactStatus.html +6 -6
  324. package/docs/interfaces/CurtainCommands.html +2 -2
  325. package/docs/interfaces/CurtainServiceData.html +22 -5
  326. package/docs/interfaces/CurtainStatus.html +6 -6
  327. package/docs/interfaces/DeviceInfo.html +23 -13
  328. package/docs/interfaces/DeviceListResponse.html +2 -2
  329. package/docs/interfaces/DeviceStatus.html +6 -6
  330. package/docs/interfaces/DiscoveryOptions.html +7 -7
  331. package/docs/interfaces/HubServiceData.html +22 -5
  332. package/docs/interfaces/HubStatus.html +6 -6
  333. package/docs/interfaces/HumidifierCommands.html +2 -2
  334. package/docs/interfaces/HumidifierServiceData.html +23 -6
  335. package/docs/interfaces/HumidifierStatus.html +6 -6
  336. package/docs/interfaces/KeypadStatus.html +6 -6
  337. package/docs/interfaces/LeakServiceData.html +22 -5
  338. package/docs/interfaces/LeakStatus.html +6 -6
  339. package/docs/interfaces/LockCommands.html +6 -2
  340. package/docs/interfaces/LockServiceData.html +20 -6
  341. package/docs/interfaces/LockStatus.html +6 -6
  342. package/docs/interfaces/MeterServiceData.html +22 -5
  343. package/docs/interfaces/MeterStatus.html +6 -6
  344. package/docs/interfaces/MotionServiceData.html +22 -5
  345. package/docs/interfaces/MotionStatus.html +6 -6
  346. package/docs/interfaces/PlugCommands.html +2 -2
  347. package/docs/interfaces/PlugServiceData.html +21 -5
  348. package/docs/interfaces/PlugStatus.html +6 -6
  349. package/docs/interfaces/PresenceServiceData.html +22 -5
  350. package/docs/interfaces/PresenceStatus.html +6 -6
  351. package/docs/interfaces/RelaySwitchCommands.html +2 -2
  352. package/docs/interfaces/RelaySwitchServiceData.html +21 -5
  353. package/docs/interfaces/RelaySwitchStatus.html +6 -6
  354. package/docs/interfaces/RemoteStatus.html +6 -6
  355. package/docs/interfaces/SceneListResponse.html +2 -2
  356. package/docs/interfaces/StripCommands.html +4 -2
  357. package/docs/interfaces/StripServiceData.html +21 -5
  358. package/docs/interfaces/StripStatus.html +6 -6
  359. package/docs/interfaces/SwitchBotConfig.html +21 -9
  360. package/docs/interfaces/VacuumCommands.html +8 -0
  361. package/docs/interfaces/VacuumStatus.html +16 -0
  362. package/docs/interfaces/WebhookConfig.html +2 -2
  363. package/docs/interfaces/WebhookDetails.html +2 -2
  364. package/docs/interfaces/WebhookQueryResponse.html +2 -2
  365. package/docs/interfaces/WebhookSetupResponse.html +2 -2
  366. package/docs/media/BLE.md +117 -4
  367. package/docs/modules.html +1 -1
  368. package/docs/types/ConnectionType.html +1 -1
  369. package/docs/types/PhysicalDeviceType.html +1 -1
  370. package/docs/types/VirtualDeviceType.html +1 -1
  371. package/docs/variables/urls.html +1 -1
  372. package/package.json +11 -7
  373. package/tmp-switchbot-scan.mjs +79 -0
  374. package/todo/PYSWITCHBOT_COMPARISON.md +484 -0
  375. package/todo/README.md +68 -0
  376. package/todo/completed.md +309 -0
  377. package/todo/todo.md +302 -0
  378. package/tsconfig.build.json +17 -0
  379. package/PRODUCTION_READY.md +0 -135
@@ -25,6 +25,11 @@ export declare function normalizeMAC(mac: string): string;
25
25
  * Convert MAC address to device ID format
26
26
  */
27
27
  export declare function macToDeviceId(mac: string): string;
28
+ /**
29
+ * Extract MAC address from manufacturer data (SwitchBot: company ID 0x0969)
30
+ * Bytes: [2 bytes company ID (69 09)] + [6 bytes MAC] + ...
31
+ */
32
+ export declare function extractMacFromManufacturerData(manufacturerDataHex?: unknown): string | undefined;
28
33
  /**
29
34
  * Delay utility
30
35
  */
@@ -94,4 +99,9 @@ export declare function debounce<T extends (...args: any[]) => any>(fn: T, delay
94
99
  * Throttle function
95
100
  */
96
101
  export declare function throttle<T extends (...args: any[]) => any>(fn: T, limitMs: number): (...args: Parameters<T>) => void;
102
+ export { BOT_BLE_ACTIONS, type BotBleAction, buildBotBleCommand, parseBotBleResponse, validateBotPassword, } from './bot-ble.js';
103
+ export { CircuitBreaker, type CircuitBreakerConfig, CircuitBreakerState, type CircuitBreakerStats } from './circuit-breaker.js';
104
+ export { type ConnectionStats, ConnectionTracker } from './connection-tracker.js';
105
+ export { createAlertHandler, createLoggingFallbackHandler, createMetricsCollectionHandler, type FallbackEvent, type FallbackHandler, FallbackHandlerManager, type FallbackHandlerOptions, } from './fallback-handler.js';
106
+ export { type RetryConfig, RetryExecutor, type RetryResult } from './retry.js';
97
107
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAEjD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEpC;;GAEG;AACH,qBAAa,MAAM;IAEf,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,KAAK;gBADI,IAAI,EAAE,MAAM,EACrB,KAAK,GAAE,QAAY;IAG7B,QAAQ,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI;IAI/B,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAM5C,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAM3C,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAM3C,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;CAK7C;AAOD;;GAEG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAE/C;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEhD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEjD;AAED;;;GAGG;AACH,wBAAgB,8BAA8B,CAAC,mBAAmB,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAyBhG;AAED;;GAEG;AACH,wBAAgB,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE/C;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,CAAC,EACjC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,EACnB,SAAS,EAAE,MAAM,EACjB,YAAY,SAAwB,GACnC,OAAO,CAAC,CAAC,CAAC,CAeZ;AAED;;GAEG;AACH,wBAAsB,KAAK,CAAC,CAAC,EAC3B,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACpB,OAAO,GAAE;IACP,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,KAAK,IAAI,CAAA;CAC7C,GACL,OAAO,CAAC,CAAC,CAAC,CAyBZ;AAED;;GAEG;AACH,wBAAgB,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAErE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAE3D;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAE9D;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE/C;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAElD;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAGtC;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,MAAM,CAAC,CAIjB;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,CAAC,CAM7D;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,GAAG,KAAK,IAAI,OAAO,CAAC,CAAC,CAAC,CAE5D;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAEtC;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,EACxD,EAAE,EAAE,CAAC,EACL,OAAO,EAAE,MAAM,GACd,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,IAAI,CAYlC;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,EACxD,EAAE,EAAE,CAAC,EACL,OAAO,EAAE,MAAM,GACd,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,IAAI,CAUlC;AAGD,OAAO,EACL,eAAe,EACf,KAAK,YAAY,EACjB,kBAAkB,EAClB,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,cAAc,CAAA;AACrB,OAAO,EAAE,cAAc,EAAE,KAAK,oBAAoB,EAAE,mBAAmB,EAAE,KAAK,mBAAmB,EAAE,MAAM,sBAAsB,CAAA;AAC/H,OAAO,EAAE,KAAK,eAAe,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AACjF,OAAO,EACL,kBAAkB,EAClB,4BAA4B,EAC5B,8BAA8B,EAC9B,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,sBAAsB,EACtB,KAAK,sBAAsB,GAC5B,MAAM,uBAAuB,CAAA;AAE9B,OAAO,EAAE,KAAK,WAAW,EAAE,aAAa,EAAE,KAAK,WAAW,EAAE,MAAM,YAAY,CAAA"}
@@ -37,24 +37,54 @@ export class Logger {
37
37
  }
38
38
  }
39
39
  }
40
+ // Regex patterns at module scope to avoid recompilation
41
+ const MAC_REGEX = /^(?:[0-9A-F]{2}[:-]){5}[0-9A-F]{2}$/i;
42
+ const DASH_REGEX = /-/g;
43
+ const COLON_REGEX = /:/g;
40
44
  /**
41
45
  * Validate MAC address format
42
46
  */
43
47
  export function isValidMAC(mac) {
44
- const macRegex = /^(?:[0-9A-F]{2}[:-]){5}[0-9A-F]{2}$/i;
45
- return macRegex.test(mac);
48
+ return MAC_REGEX.test(mac);
46
49
  }
47
50
  /**
48
51
  * Normalize MAC address to lowercase with colons
49
52
  */
50
53
  export function normalizeMAC(mac) {
51
- return mac.toLowerCase().replace(/-/g, ':');
54
+ return mac.toLowerCase().replace(DASH_REGEX, ':');
52
55
  }
53
56
  /**
54
57
  * Convert MAC address to device ID format
55
58
  */
56
59
  export function macToDeviceId(mac) {
57
- return mac.replace(/:/g, '').toUpperCase();
60
+ return mac.replace(COLON_REGEX, '').toUpperCase();
61
+ }
62
+ /**
63
+ * Extract MAC address from manufacturer data (SwitchBot: company ID 0x0969)
64
+ * Bytes: [2 bytes company ID (69 09)] + [6 bytes MAC] + ...
65
+ */
66
+ export function extractMacFromManufacturerData(manufacturerDataHex) {
67
+ if (!manufacturerDataHex || typeof manufacturerDataHex !== 'string') {
68
+ return undefined;
69
+ }
70
+ // Check if hex string starts with 6909 (SwitchBot company ID in little-endian)
71
+ if (!manufacturerDataHex.startsWith('6909')) {
72
+ return undefined;
73
+ }
74
+ // Extract 6 bytes (12 hex chars) starting at position 4 (after company ID)
75
+ const macHex = manufacturerDataHex.substring(4, 16);
76
+ if (macHex.length !== 12) {
77
+ return undefined;
78
+ }
79
+ // Convert to MAC address format: XX:XX:XX:XX:XX:XX
80
+ return [
81
+ macHex.substring(0, 2),
82
+ macHex.substring(2, 4),
83
+ macHex.substring(4, 6),
84
+ macHex.substring(6, 8),
85
+ macHex.substring(8, 10),
86
+ macHex.substring(10, 12),
87
+ ].join(':').toUpperCase();
58
88
  }
59
89
  /**
60
90
  * Delay utility
@@ -203,4 +233,11 @@ export function throttle(fn, limitMs) {
203
233
  }
204
234
  };
205
235
  }
236
+ // Export Bot BLE password utilities
237
+ export { BOT_BLE_ACTIONS, buildBotBleCommand, parseBotBleResponse, validateBotPassword, } from './bot-ble.js';
238
+ export { CircuitBreaker, CircuitBreakerState } from './circuit-breaker.js';
239
+ export { ConnectionTracker } from './connection-tracker.js';
240
+ export { createAlertHandler, createLoggingFallbackHandler, createMetricsCollectionHandler, FallbackHandlerManager, } from './fallback-handler.js';
241
+ // Export advanced utilities
242
+ export { RetryExecutor } from './retry.js';
206
243
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Retry configuration options
3
+ */
4
+ export interface RetryConfig {
5
+ /** Maximum number of retry attempts (default: 3) */
6
+ maxAttempts?: number;
7
+ /** Initial delay in milliseconds (default: 100) */
8
+ initialDelayMs?: number;
9
+ /** Maximum delay in milliseconds (default: 5000) */
10
+ maxDelayMs?: number;
11
+ /** Exponential backoff multiplier (default: 2) */
12
+ backoffMultiplier?: number;
13
+ /** Jitter factor 0-1 to randomize delays (default: 0.1) */
14
+ jitterFactor?: number;
15
+ }
16
+ /**
17
+ * Retry execution result
18
+ */
19
+ export interface RetryResult<T> {
20
+ /** Whether the operation succeeded */
21
+ success: boolean;
22
+ /** The result (if successful) */
23
+ result?: T;
24
+ /** The error (if failed) */
25
+ error?: Error;
26
+ /** Number of attempts made */
27
+ attemptsCount: number;
28
+ /** Total time spent retrying in milliseconds */
29
+ totalTimeMs: number;
30
+ }
31
+ /**
32
+ * Retry executor with exponential backoff
33
+ */
34
+ export declare class RetryExecutor {
35
+ private logger;
36
+ private config;
37
+ constructor(config?: RetryConfig, logLevel?: number);
38
+ /**
39
+ * Calculate delay for next attempt with exponential backoff
40
+ */
41
+ private calculateDelay;
42
+ /**
43
+ * Execute a function with automatic retries and exponential backoff
44
+ */
45
+ execute<T>(fn: () => Promise<T>, description?: string): Promise<RetryResult<T>>;
46
+ /**
47
+ * Convenience method: execute with retries, throw on final failure
48
+ */
49
+ executeOrThrow<T>(fn: () => Promise<T>, description?: string): Promise<T>;
50
+ }
51
+ /**
52
+ * Convenience function: retry a promise with automatic backoff
53
+ */
54
+ export declare function retry<T>(fn: () => Promise<T>, config?: RetryConfig, logLevel?: number): Promise<T>;
55
+ //# sourceMappingURL=retry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../../src/utils/retry.ts"],"names":[],"mappings":"AAOA;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,oDAAoD;IACpD,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,mDAAmD;IACnD,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,oDAAoD;IACpD,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,kDAAkD;IAClD,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,2DAA2D;IAC3D,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW,CAAC,CAAC;IAC5B,sCAAsC;IACtC,OAAO,EAAE,OAAO,CAAA;IAChB,iCAAiC;IACjC,MAAM,CAAC,EAAE,CAAC,CAAA;IACV,4BAA4B;IAC5B,KAAK,CAAC,EAAE,KAAK,CAAA;IACb,8BAA8B;IAC9B,aAAa,EAAE,MAAM,CAAA;IACrB,gDAAgD;IAChD,WAAW,EAAE,MAAM,CAAA;CACpB;AAED;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,MAAM,CAAuB;gBAEzB,MAAM,GAAE,WAAgB,EAAE,QAAQ,CAAC,EAAE,MAAM;IAYvD;;OAEG;IACH,OAAO,CAAC,cAAc;IAUtB;;OAEG;IACG,OAAO,CAAC,CAAC,EACb,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACpB,WAAW,SAAc,GACxB,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAuD1B;;OAEG;IACG,cAAc,CAAC,CAAC,EACpB,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACpB,WAAW,SAAc,GACxB,OAAO,CAAC,CAAC,CAAC;CASd;AAED;;GAEG;AACH,wBAAsB,KAAK,CAAC,CAAC,EAC3B,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACpB,MAAM,GAAE,WAAgB,EACxB,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,CAAC,CAAC,CAGZ"}
@@ -0,0 +1,95 @@
1
+ /* Copyright(C) 2024-2026, donavanbecker (https://github.com/donavanbecker). All rights reserved.
2
+ *
3
+ * utils/retry.ts: SwitchBot v4.0.0 - Retry Logic with Exponential Backoff
4
+ */
5
+ import { Logger } from './index.js';
6
+ /**
7
+ * Retry executor with exponential backoff
8
+ */
9
+ export class RetryExecutor {
10
+ logger;
11
+ config;
12
+ constructor(config = {}, logLevel) {
13
+ this.config = {
14
+ maxAttempts: config.maxAttempts ?? 3,
15
+ initialDelayMs: config.initialDelayMs ?? 100,
16
+ maxDelayMs: config.maxDelayMs ?? 5000,
17
+ backoffMultiplier: config.backoffMultiplier ?? 2,
18
+ jitterFactor: config.jitterFactor ?? 0.1,
19
+ };
20
+ this.logger = new Logger('RetryExecutor', logLevel);
21
+ }
22
+ /**
23
+ * Calculate delay for next attempt with exponential backoff
24
+ */
25
+ calculateDelay(attemptNumber) {
26
+ const exponentialDelay = this.config.initialDelayMs * this.config.backoffMultiplier ** (attemptNumber - 1);
27
+ const cappedDelay = Math.min(exponentialDelay, this.config.maxDelayMs);
28
+ // Add jitter to prevent thundering herd
29
+ const jitter = cappedDelay * this.config.jitterFactor * (Math.random() * 2 - 1);
30
+ return Math.max(0, cappedDelay + jitter);
31
+ }
32
+ /**
33
+ * Execute a function with automatic retries and exponential backoff
34
+ */
35
+ async execute(fn, description = 'Operation') {
36
+ let lastError;
37
+ let totalTimeMs = 0;
38
+ let attemptNumber = 0;
39
+ for (attemptNumber = 1; attemptNumber <= this.config.maxAttempts; attemptNumber++) {
40
+ try {
41
+ const startTime = Date.now();
42
+ const result = await fn();
43
+ const elapsedMs = Date.now() - startTime;
44
+ totalTimeMs += elapsedMs;
45
+ if (attemptNumber > 1) {
46
+ this.logger.info(`${description} succeeded on attempt ${attemptNumber}/${this.config.maxAttempts}`);
47
+ }
48
+ return {
49
+ success: true,
50
+ result,
51
+ attemptsCount: attemptNumber,
52
+ totalTimeMs,
53
+ };
54
+ }
55
+ catch (error) {
56
+ lastError = error instanceof Error ? error : new Error(String(error));
57
+ const elapsedMs = Date.now() - (Date.now() - totalTimeMs);
58
+ totalTimeMs += elapsedMs;
59
+ if (attemptNumber < this.config.maxAttempts) {
60
+ const delayMs = this.calculateDelay(attemptNumber);
61
+ this.logger.warn(`${description} failed on attempt ${attemptNumber}/${this.config.maxAttempts}, retrying in ${delayMs}ms`, { error: lastError.message });
62
+ // Wait before retrying
63
+ await new Promise(resolve => setTimeout(resolve, delayMs));
64
+ }
65
+ else {
66
+ this.logger.error(`${description} failed after ${attemptNumber} attempts`, { error: lastError.message });
67
+ }
68
+ }
69
+ }
70
+ return {
71
+ success: false,
72
+ error: lastError || new Error('Unknown error'),
73
+ attemptsCount: attemptNumber,
74
+ totalTimeMs,
75
+ };
76
+ }
77
+ /**
78
+ * Convenience method: execute with retries, throw on final failure
79
+ */
80
+ async executeOrThrow(fn, description = 'Operation') {
81
+ const result = await this.execute(fn, description);
82
+ if (result.success) {
83
+ return result.result;
84
+ }
85
+ throw result.error;
86
+ }
87
+ }
88
+ /**
89
+ * Convenience function: retry a promise with automatic backoff
90
+ */
91
+ export async function retry(fn, config = {}, logLevel) {
92
+ const executor = new RetryExecutor(config, logLevel);
93
+ return executor.executeOrThrow(fn);
94
+ }
95
+ //# sourceMappingURL=retry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retry.js","sourceRoot":"","sources":["../../src/utils/retry.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- window.hierarchyData = "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"
1
+ window.hierarchyData = "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"
@@ -1 +1 @@
1
- window.navigationData = "eJyVmU1z2zYQhv+Lzpm6lpu09U2SnbESylYtOzlkeoBISMKYBFgQUKvJ5L9naFokQCx20SvfZ5/Bgl8g+O37xPD/zOR6kql9xo+8nLyb1MwcJtcTLm3VXJyP/3IwVRu+CFlMrv/48a6v3PwrTH6YKzPPbleqCBUB8D9c96zipK+F4s7ZenmrtdKDJi9Z0/Dm4pz4tZfTUfW9MrMjEyXbljxuCijMOs9uF0pKnhuhZKjzYsKTMDqIIqybnEnJYddbhhkWqqqYLD4yUfIiMqqQwY3n+XgSFVfWRK0Qh5lv+FHkfMUk20MNezHtuVfmo7Iy1jQAoU7R5OrI9Smm83LM9FBzOVsvF6Xg0oQiL8Y8/c0XOvooqb6bCcTSAUmuyOz4OWb6wkpRsPaqiahGAOb6qmZCr60WOwFdT16c7Hlqb1xC9srgxnkpZPEkSuDsOSHhsOUWLLflFq9ccFEKuc/E/gAOwM0Jk5KG5bCki4h6qw0TwJO3j/D6OyYLqLg9TlTa7RSstNspWXkVqbyiKisBV1aCrowMtxLEeJcPGy4bpZ/uIMGQ4pbP/FQzcK67BK/OOHuBatvjeOW6tPuVkOLTGqof0jTL8wazPG8Ii+YNl9DDcshwwyMv2al7HF5CFjdPN61XlGu9omyVMmBfXYJXY9dX2tV1ptalbTBLmyeatEJFWiV7Fg/grecThK1i2mQqB2+CPkx0xFpzcsJktKhBRRugq/DhLfe2bHROl5CG6x3L23V4yPna6fsPsHbDdbvcuGGGUWYHTZUbZiw54o5ClevlW1uP/B/LGwMrx1SqsqmVbDjp7DBCOl7e+S5obRdRYHPnM4TudeFGNelBhJBypWjm2e2sOHJtRMMrb2XuuMYQIWy/zx7qdq0KT5uPUDLivvARVHZeXqJ3cEAlKclRAmCaOH71jRhUp4imVVq7im5UJbeo0OZUSlu23OJ9OQAlIjvzGVKH9NbHmMT9GEGbhMBUMdV0hE3WxychxFBp/+y3JfyM8ghc9fp9RnYeYClSpF+XQFXd9x9+yn0mQUe2G2ApUqRdl8BU3Qt0KXcK9AwxLclEY9B3YojRUqTH1Hd/v0mGvRTHECa8s+TTykcoWbzHPsUVlSjoxXGIpUnpXgEyUY117kOYsNsKQGQugInafQGq3RFD6uKjGmJUovIX9Ly6ACUim/MZUoc018eYZMUNfYGNIVoYH5aToxrVPgXIgY2pBCUyNAfARO22EXpBuAAlolocMaQu3t4Qo5K3/SxyXCGXpEXG5yGYzNnhQs8DwCVqqe5hNFUen4OAwpXtFh1qGwBMtMm5pFcPAYUq2x0l9OR4BKmiTsgYooXxaXNyVHP+u7VQcif2sMpnMN1Xvj0o9YLIPCJBdcMNEyXco48kyP6yXJ/Q6wMCE8QbbmydIvZA4mPk/Av6VDtKc6r9H9Sneuz59c/fL99P3efW4dSInJXdWhfyhQTl/CK0sZgyACij1e5pPjIt2l+RzUV73K+98srqghk+Zw1/fsyG+p2Vr/PTXHiAL/rw24+/fwJdkeFg"
1
+ window.navigationData = "eJyVml134jYQhv8L13uaQLrbNneBJJt0IaFxPi56eiFsBXRiS1SWaDk9+997jPmQ7NHM7C3vM080si05gj//Gzj5rxtcDqZmOZUbWQ4+DdbCrQaXA6l9VZ8dPv9p5aom/FC6GFz++v3TsTL7R7l8NTZuPL2ZmaKv6AE/4HoQlSR9DZR2Xs3vb6w19qTJS1HXsj47JHHtcNSpfjDuaiNUKRalTJt6FGYdT28mRmuZO2V0XxfFhIcxOogirFkutJawa59hhompKqGLW6FKWSRG1Wdw42E+nlUljXdJK8Rh5mu5UbmcCS2WUMNRTHsejLs1XqeaBiDa+biR1qpCZk44ee2t0kvs7mEUoX9T1bnZSLtNtRDlmOlxLfXV/H5SKqldXxTFmCeTf3upc9k21hfFOWo6LB2A5BCx6pNDiQGWKzHPcY6ZXkWpCtFc14SqA2CuN3Ol7Nxb9a6gpyGK2Z7nZtkhZDuGMFp3a6MNITDtM9wwLpUunlUJXP8gJBy+XIDlvlzglROpSqWXU7VcgQMIc8KkbO5L4Yy9FcAK0AEIV6kq4eRc6HDrDlRBTpiMdiKHW2sjot5bJxTcTxvh9belMXYqqjVkOIa446uwYimvjbHN8gQ/Al0GN94JXUCW5nOi0i9GYKVfjMjKi0TlBVk5U1rNhHNw8xFAuSoFKypFVyZarxTR+/1jJnVt7PMdJDiluOWb3K4FeN3ahFP9qmpwg45zvmluDSWbW4P7plJ8QJLmc7xyXvplc+V/n0P1p5Rneckwy0tGWKysmx0fdOwz3PAkS7Ftt9ghZAlzvmk+o1zzGds2Im0j2lYZB85SmxDVX8f3k9R2dwwZjrc3dGnuMixj5qxaJ7fSHkQ4TVlKm61EAU/WKcY92MrDW3cO1Lz0NWZpcqYJXjWCmO2ZPIKLckwQtkpYNzU5uAgdQ6ZjquCbOwKYrtQ0BTnf9KZuwZ2vyzCN6Y2kg/yQj+qYuaPs+OeVtJWpnXBPolDNe2dS3UcJf/MMg7YmYNTunn/wdSiIcc+ryL2vIEWbcKq/Dc9TD3UEcF3w1QtzvmliqgWp20E855DqdMjudHSOeEbnHEc2RBzZkOfAxpHh4wj+y90fegVzo7ST9l3kzSlin4u1o89fYG0mbXPccC2coMwBypU74Tw54pZClfP7fVtPzYFN7WBll+Iq67XRtSSdLUZIu8c7sQs620kosLmLGUK3O7ihmowgQki5OJrx9Oaq2EjrVC2r6IwvcHUhQticLj+um7MqeNpihJIRz0WMoLLD4RD6BPcolpIcJQDyxOm7r8OgOkM0bXjtGrpRw27RoM0ZTlu+XOB9BQAlIjuLGVKH9HaMMUl4lIg2CYFcMdV0gmXr05PQx1Dpce33JbxGRQSu2p1jkp33MI4U6TckUFV7Topf8phh6Mh2exhHirQbEpiq3UDv9bsBPaeYlkxV7dA9sY/RUqRH7t5//LoN2xS7ECa88+RqFSOULN3jMcUVlSrol+M+xpPSvQIkU411HkOYsD2/RWQhgImaM1yq3Q5D6tKjOsWoxOQf6HUNAUpENhczpA5p7hhjkpl09A3WhWhhelhBjmpMswqQA+tSDCUytADARM0RP3pDhAAlolrsMKQu3d4pRiX77x7IcfU5lhYZX4RgsuD7A/Q6ABxTS3UPo1x5eg56FK5svgBBbScAE2W51PTbQ49Clc25JHpxIoJUURekC9HC9LQFOao5/LplYvS7WsKqmMF07TkcOmUxQsuQHkMAE73JxcqYD6TFiGCorqUTqoRHFSMM2R9e2i1610IgQ5xJ59cccQQS/yIdfta3XQdKt13HP/rbrrue899+GX4ehavpalurXJTtGzjk6xOU81VZ5zFlD6CM3oaXeSOsan4gVZ81n8e1F1HZuhBOjkUtX56mp/p3r3fzU59FQCz68vP3v/4HnPkMNQ=="