amaran-light-cli 1.10.0 → 1.12.0

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 (397) hide show
  1. package/README.md +154 -17
  2. package/dist/__tests__/autoCct.test.js +35 -4
  3. package/dist/__tests__/autoCct.test.js.map +1 -1
  4. package/dist/__tests__/autoCctMaxLux.test.js +11 -9
  5. package/dist/__tests__/autoCctMaxLux.test.js.map +1 -1
  6. package/dist/__tests__/autostart.test.js +18 -0
  7. package/dist/__tests__/autostart.test.js.map +1 -1
  8. package/dist/__tests__/bleHttpControl.test.d.ts +2 -0
  9. package/dist/__tests__/bleHttpControl.test.d.ts.map +1 -0
  10. package/dist/__tests__/bleHttpControl.test.js +230 -0
  11. package/dist/__tests__/bleHttpControl.test.js.map +1 -0
  12. package/dist/__tests__/bleStack.test.d.ts +2 -0
  13. package/dist/__tests__/bleStack.test.d.ts.map +1 -0
  14. package/dist/__tests__/bleStack.test.js +1239 -0
  15. package/dist/__tests__/bleStack.test.js.map +1 -0
  16. package/dist/__tests__/cctUtil.test.js +11 -5
  17. package/dist/__tests__/cctUtil.test.js.map +1 -1
  18. package/dist/__tests__/circadianDashboardSettings.test.d.ts +2 -0
  19. package/dist/__tests__/circadianDashboardSettings.test.d.ts.map +1 -0
  20. package/dist/__tests__/circadianDashboardSettings.test.js +82 -0
  21. package/dist/__tests__/circadianDashboardSettings.test.js.map +1 -0
  22. package/dist/__tests__/circadianIsolation.test.d.ts +2 -0
  23. package/dist/__tests__/circadianIsolation.test.d.ts.map +1 -0
  24. package/dist/__tests__/circadianIsolation.test.js +30 -0
  25. package/dist/__tests__/circadianIsolation.test.js.map +1 -0
  26. package/dist/__tests__/cli.config.test.d.ts +2 -0
  27. package/dist/__tests__/cli.config.test.d.ts.map +1 -0
  28. package/dist/__tests__/cli.config.test.js +114 -0
  29. package/dist/__tests__/cli.config.test.js.map +1 -0
  30. package/dist/__tests__/cli.smoke.test.js +70 -17
  31. package/dist/__tests__/cli.smoke.test.js.map +1 -1
  32. package/dist/__tests__/currentCct.test.d.ts +2 -0
  33. package/dist/__tests__/currentCct.test.d.ts.map +1 -0
  34. package/dist/__tests__/currentCct.test.js +29 -0
  35. package/dist/__tests__/currentCct.test.js.map +1 -0
  36. package/dist/__tests__/dashboard.test.d.ts +2 -0
  37. package/dist/__tests__/dashboard.test.d.ts.map +1 -0
  38. package/dist/__tests__/dashboard.test.js +126 -0
  39. package/dist/__tests__/dashboard.test.js.map +1 -0
  40. package/dist/__tests__/daylightSimulationParseUtils.test.d.ts +2 -0
  41. package/dist/__tests__/daylightSimulationParseUtils.test.d.ts.map +1 -0
  42. package/dist/__tests__/daylightSimulationParseUtils.test.js +16 -0
  43. package/dist/__tests__/daylightSimulationParseUtils.test.js.map +1 -0
  44. package/dist/__tests__/desktopImport.test.d.ts +2 -0
  45. package/dist/__tests__/desktopImport.test.d.ts.map +1 -0
  46. package/dist/__tests__/desktopImport.test.js +234 -0
  47. package/dist/__tests__/desktopImport.test.js.map +1 -0
  48. package/dist/__tests__/lightControl.basic.test.d.ts +2 -0
  49. package/dist/__tests__/lightControl.basic.test.d.ts.map +1 -0
  50. package/dist/__tests__/lightControl.basic.test.js +119 -0
  51. package/dist/__tests__/lightControl.basic.test.js.map +1 -0
  52. package/dist/__tests__/lightControl.colorEffects.test.d.ts +2 -0
  53. package/dist/__tests__/lightControl.colorEffects.test.d.ts.map +1 -0
  54. package/dist/__tests__/lightControl.colorEffects.test.js +170 -0
  55. package/dist/__tests__/lightControl.colorEffects.test.js.map +1 -0
  56. package/dist/__tests__/lightControl.management.test.d.ts +2 -0
  57. package/dist/__tests__/lightControl.management.test.d.ts.map +1 -0
  58. package/dist/__tests__/lightControl.management.test.js +90 -0
  59. package/dist/__tests__/lightControl.management.test.js.map +1 -0
  60. package/dist/__tests__/lightControlTestUtils.d.ts +10 -0
  61. package/dist/__tests__/lightControlTestUtils.d.ts.map +1 -0
  62. package/dist/__tests__/lightControlTestUtils.js +57 -0
  63. package/dist/__tests__/lightControlTestUtils.js.map +1 -0
  64. package/dist/__tests__/maxLuxInterpolation.test.js +4 -2
  65. package/dist/__tests__/maxLuxInterpolation.test.js.map +1 -1
  66. package/dist/__tests__/meshConfiguration.test.d.ts +2 -0
  67. package/dist/__tests__/meshConfiguration.test.d.ts.map +1 -0
  68. package/dist/__tests__/meshConfiguration.test.js +78 -0
  69. package/dist/__tests__/meshConfiguration.test.js.map +1 -0
  70. package/dist/__tests__/nativeGroups.test.d.ts +2 -0
  71. package/dist/__tests__/nativeGroups.test.d.ts.map +1 -0
  72. package/dist/__tests__/nativeGroups.test.js +104 -0
  73. package/dist/__tests__/nativeGroups.test.js.map +1 -0
  74. package/dist/__tests__/packageExports.test.d.ts +2 -0
  75. package/dist/__tests__/packageExports.test.d.ts.map +1 -0
  76. package/dist/__tests__/packageExports.test.js +33 -0
  77. package/dist/__tests__/packageExports.test.js.map +1 -0
  78. package/dist/__tests__/programApi.test.d.ts +2 -0
  79. package/dist/__tests__/programApi.test.d.ts.map +1 -0
  80. package/dist/__tests__/programApi.test.js +73 -0
  81. package/dist/__tests__/programApi.test.js.map +1 -0
  82. package/dist/__tests__/programs.test.d.ts +2 -0
  83. package/dist/__tests__/programs.test.d.ts.map +1 -0
  84. package/dist/__tests__/programs.test.js +176 -0
  85. package/dist/__tests__/programs.test.js.map +1 -0
  86. package/dist/__tests__/scheduleMaker.test.d.ts +2 -0
  87. package/dist/__tests__/scheduleMaker.test.d.ts.map +1 -0
  88. package/dist/__tests__/scheduleMaker.test.js +25 -0
  89. package/dist/__tests__/scheduleMaker.test.js.map +1 -0
  90. package/dist/__tests__/simulateSchedule.test.js +7 -3
  91. package/dist/__tests__/simulateSchedule.test.js.map +1 -1
  92. package/dist/ble/async.d.ts +2 -0
  93. package/dist/ble/async.d.ts.map +1 -0
  94. package/dist/ble/async.js +15 -0
  95. package/dist/ble/async.js.map +1 -0
  96. package/dist/ble/colors.d.ts +5 -0
  97. package/dist/ble/colors.d.ts.map +1 -0
  98. package/dist/ble/colors.js +44 -0
  99. package/dist/ble/colors.js.map +1 -0
  100. package/dist/ble/configuration.d.ts +22 -0
  101. package/dist/ble/configuration.d.ts.map +1 -0
  102. package/dist/ble/configuration.js +122 -0
  103. package/dist/ble/configuration.js.map +1 -0
  104. package/dist/ble/controller.d.ts +118 -0
  105. package/dist/ble/controller.d.ts.map +1 -0
  106. package/dist/ble/controller.js +931 -0
  107. package/dist/ble/controller.js.map +1 -0
  108. package/dist/ble/crypto.d.ts +34 -0
  109. package/dist/ble/crypto.d.ts.map +1 -0
  110. package/dist/ble/crypto.js +178 -0
  111. package/dist/ble/crypto.js.map +1 -0
  112. package/dist/ble/daemon.d.ts +2 -0
  113. package/dist/ble/daemon.d.ts.map +1 -0
  114. package/dist/ble/daemon.js +76 -0
  115. package/dist/ble/daemon.js.map +1 -0
  116. package/dist/ble/dashboard.d.ts +331 -0
  117. package/dist/ble/dashboard.d.ts.map +1 -0
  118. package/dist/ble/dashboard.js +280 -0
  119. package/dist/ble/dashboard.js.map +1 -0
  120. package/dist/ble/desktop.d.ts +4 -0
  121. package/dist/ble/desktop.d.ts.map +1 -0
  122. package/dist/ble/desktop.js +33 -0
  123. package/dist/ble/desktop.js.map +1 -0
  124. package/dist/ble/desktopLibrary.d.ts +12 -0
  125. package/dist/ble/desktopLibrary.d.ts.map +1 -0
  126. package/dist/ble/desktopLibrary.js +346 -0
  127. package/dist/ble/desktopLibrary.js.map +1 -0
  128. package/dist/ble/effects.d.ts +34 -0
  129. package/dist/ble/effects.d.ts.map +1 -0
  130. package/dist/ble/effects.js +138 -0
  131. package/dist/ble/effects.js.map +1 -0
  132. package/dist/ble/fan.d.ts +244 -0
  133. package/dist/ble/fan.d.ts.map +1 -0
  134. package/dist/ble/fan.js +46 -0
  135. package/dist/ble/fan.js.map +1 -0
  136. package/dist/ble/library.d.ts +341 -0
  137. package/dist/ble/library.d.ts.map +1 -0
  138. package/dist/ble/library.js +201 -0
  139. package/dist/ble/library.js.map +1 -0
  140. package/dist/ble/media.d.ts +133 -0
  141. package/dist/ble/media.d.ts.map +1 -0
  142. package/dist/ble/media.js +186 -0
  143. package/dist/ble/media.js.map +1 -0
  144. package/dist/ble/nativeGroups.d.ts +22 -0
  145. package/dist/ble/nativeGroups.d.ts.map +1 -0
  146. package/dist/ble/nativeGroups.js +114 -0
  147. package/dist/ble/nativeGroups.js.map +1 -0
  148. package/dist/ble/packets.d.ts +3 -0
  149. package/dist/ble/packets.d.ts.map +1 -0
  150. package/dist/ble/packets.js +15 -0
  151. package/dist/ble/packets.js.map +1 -0
  152. package/dist/ble/programs.d.ts +318 -0
  153. package/dist/ble/programs.d.ts.map +1 -0
  154. package/dist/ble/programs.js +329 -0
  155. package/dist/ble/programs.js.map +1 -0
  156. package/dist/ble/provisioning.d.ts +13 -0
  157. package/dist/ble/provisioning.d.ts.map +1 -0
  158. package/dist/ble/provisioning.js +39 -0
  159. package/dist/ble/provisioning.js.map +1 -0
  160. package/dist/ble/server.d.ts +18 -0
  161. package/dist/ble/server.d.ts.map +1 -0
  162. package/dist/ble/server.js +548 -0
  163. package/dist/ble/server.js.map +1 -0
  164. package/dist/ble/service.d.ts +2 -0
  165. package/dist/ble/service.d.ts.map +1 -0
  166. package/dist/ble/service.js +77 -0
  167. package/dist/ble/service.js.map +1 -0
  168. package/dist/ble/settings.d.ts +18 -0
  169. package/dist/ble/settings.d.ts.map +1 -0
  170. package/dist/ble/settings.js +25 -0
  171. package/dist/ble/settings.js.map +1 -0
  172. package/dist/ble/setup.d.ts +2 -0
  173. package/dist/ble/setup.d.ts.map +1 -0
  174. package/dist/ble/setup.js +31 -0
  175. package/dist/ble/setup.js.map +1 -0
  176. package/dist/ble/storage.d.ts +94 -0
  177. package/dist/ble/storage.d.ts.map +1 -0
  178. package/dist/ble/storage.js +132 -0
  179. package/dist/ble/storage.js.map +1 -0
  180. package/dist/ble/telink.d.ts +63 -0
  181. package/dist/ble/telink.d.ts.map +1 -0
  182. package/dist/ble/telink.js +108 -0
  183. package/dist/ble/telink.js.map +1 -0
  184. package/dist/ble/transitions.d.ts +3 -0
  185. package/dist/ble/transitions.d.ts.map +1 -0
  186. package/dist/ble/transitions.js +28 -0
  187. package/dist/ble/transitions.js.map +1 -0
  188. package/dist/ble/transport.d.ts +48 -0
  189. package/dist/ble/transport.d.ts.map +1 -0
  190. package/dist/ble/transport.js +370 -0
  191. package/dist/ble/transport.js.map +1 -0
  192. package/dist/circadian.d.ts +19 -0
  193. package/dist/circadian.d.ts.map +1 -0
  194. package/dist/circadian.js +13 -0
  195. package/dist/circadian.js.map +1 -0
  196. package/dist/cli.d.ts +5 -3
  197. package/dist/cli.d.ts.map +1 -1
  198. package/dist/cli.js +159 -33
  199. package/dist/cli.js.map +1 -1
  200. package/dist/commands/__tests__/integration.test.js +28 -0
  201. package/dist/commands/__tests__/integration.test.js.map +1 -1
  202. package/dist/commands/__tests__/newCommands.test.js +3 -4
  203. package/dist/commands/__tests__/newCommands.test.js.map +1 -1
  204. package/dist/commands/cmdUtils.d.ts +8 -2
  205. package/dist/commands/cmdUtils.d.ts.map +1 -1
  206. package/dist/commands/cmdUtils.js +40 -2
  207. package/dist/commands/cmdUtils.js.map +1 -1
  208. package/dist/commands/daylightSimulation/autoCct.d.ts.map +1 -1
  209. package/dist/commands/daylightSimulation/autoCct.js +74 -172
  210. package/dist/commands/daylightSimulation/autoCct.js.map +1 -1
  211. package/dist/commands/daylightSimulation/graphSchedule.d.ts +1 -1
  212. package/dist/commands/daylightSimulation/graphSchedule.d.ts.map +1 -1
  213. package/dist/commands/daylightSimulation/graphSchedule.js +2 -0
  214. package/dist/commands/daylightSimulation/graphSchedule.js.map +1 -1
  215. package/dist/commands/daylightSimulation/printSchedule.d.ts +1 -1
  216. package/dist/commands/daylightSimulation/printSchedule.d.ts.map +1 -1
  217. package/dist/commands/daylightSimulation/printSchedule.js +4 -2
  218. package/dist/commands/daylightSimulation/printSchedule.js.map +1 -1
  219. package/dist/commands/daylightSimulation/service.d.ts +1 -1
  220. package/dist/commands/daylightSimulation/service.d.ts.map +1 -1
  221. package/dist/commands/daylightSimulation/service.js +20 -10
  222. package/dist/commands/daylightSimulation/service.js.map +1 -1
  223. package/dist/commands/daylightSimulation/simulateSchedule.d.ts +1 -1
  224. package/dist/commands/daylightSimulation/simulateSchedule.d.ts.map +1 -1
  225. package/dist/commands/daylightSimulation/simulateSchedule.js +31 -13
  226. package/dist/commands/daylightSimulation/simulateSchedule.js.map +1 -1
  227. package/dist/commands/daylightSimulation/weather.d.ts.map +1 -1
  228. package/dist/commands/daylightSimulation/weather.js +19 -4
  229. package/dist/commands/daylightSimulation/weather.js.map +1 -1
  230. package/dist/commands/deviceControl/ble.d.ts +4 -0
  231. package/dist/commands/deviceControl/ble.d.ts.map +1 -0
  232. package/dist/commands/deviceControl/ble.js +214 -0
  233. package/dist/commands/deviceControl/ble.js.map +1 -0
  234. package/dist/commands/deviceControl/cct.d.ts.map +1 -1
  235. package/dist/commands/deviceControl/cct.js +47 -19
  236. package/dist/commands/deviceControl/cct.js.map +1 -1
  237. package/dist/commands/deviceControl/color.d.ts.map +1 -1
  238. package/dist/commands/deviceControl/color.js +16 -12
  239. package/dist/commands/deviceControl/color.js.map +1 -1
  240. package/dist/commands/deviceControl/config.d.ts.map +1 -1
  241. package/dist/commands/deviceControl/config.js +94 -58
  242. package/dist/commands/deviceControl/config.js.map +1 -1
  243. package/dist/commands/deviceControl/{discover.d.ts → desktop.d.ts} +3 -2
  244. package/dist/commands/deviceControl/desktop.d.ts.map +1 -0
  245. package/dist/commands/deviceControl/desktop.js +66 -0
  246. package/dist/commands/deviceControl/desktop.js.map +1 -0
  247. package/dist/commands/deviceControl/effect.d.ts.map +1 -1
  248. package/dist/commands/deviceControl/effect.js +90 -159
  249. package/dist/commands/deviceControl/effect.js.map +1 -1
  250. package/dist/commands/deviceControl/fan.d.ts.map +1 -1
  251. package/dist/commands/deviceControl/fan.js +77 -95
  252. package/dist/commands/deviceControl/fan.js.map +1 -1
  253. package/dist/commands/deviceControl/group.d.ts.map +1 -1
  254. package/dist/commands/deviceControl/group.js +43 -6
  255. package/dist/commands/deviceControl/group.js.map +1 -1
  256. package/dist/commands/deviceControl/hsi.d.ts.map +1 -1
  257. package/dist/commands/deviceControl/hsi.js +6 -10
  258. package/dist/commands/deviceControl/hsi.js.map +1 -1
  259. package/dist/commands/deviceControl/info.d.ts.map +1 -1
  260. package/dist/commands/deviceControl/info.js +0 -50
  261. package/dist/commands/deviceControl/info.js.map +1 -1
  262. package/dist/commands/deviceControl/intensity.d.ts.map +1 -1
  263. package/dist/commands/deviceControl/intensity.js +38 -16
  264. package/dist/commands/deviceControl/intensity.js.map +1 -1
  265. package/dist/commands/deviceControl/list.d.ts.map +1 -1
  266. package/dist/commands/deviceControl/list.js +21 -15
  267. package/dist/commands/deviceControl/list.js.map +1 -1
  268. package/dist/commands/deviceControl/power.d.ts.map +1 -1
  269. package/dist/commands/deviceControl/power.js +19 -28
  270. package/dist/commands/deviceControl/power.js.map +1 -1
  271. package/dist/commands/deviceControl/preset.d.ts.map +1 -1
  272. package/dist/commands/deviceControl/preset.js +56 -19
  273. package/dist/commands/deviceControl/preset.js.map +1 -1
  274. package/dist/commands/deviceControl/program.d.ts +4 -0
  275. package/dist/commands/deviceControl/program.d.ts.map +1 -0
  276. package/dist/commands/deviceControl/program.js +199 -0
  277. package/dist/commands/deviceControl/program.js.map +1 -0
  278. package/dist/commands/deviceControl/quickshot.d.ts.map +1 -1
  279. package/dist/commands/deviceControl/quickshot.js +75 -13
  280. package/dist/commands/deviceControl/quickshot.js.map +1 -1
  281. package/dist/commands/deviceControl/scene.d.ts.map +1 -1
  282. package/dist/commands/deviceControl/scene.js +72 -9
  283. package/dist/commands/deviceControl/scene.js.map +1 -1
  284. package/dist/commands/deviceControl/status.d.ts.map +1 -1
  285. package/dist/commands/deviceControl/status.js +29 -6
  286. package/dist/commands/deviceControl/status.js.map +1 -1
  287. package/dist/commands/parseUtils.d.ts +6 -0
  288. package/dist/commands/parseUtils.d.ts.map +1 -0
  289. package/dist/commands/parseUtils.js +32 -0
  290. package/dist/commands/parseUtils.js.map +1 -0
  291. package/dist/commands-api.d.ts +28 -0
  292. package/dist/commands-api.d.ts.map +1 -0
  293. package/dist/commands-api.js +27 -0
  294. package/dist/commands-api.js.map +1 -0
  295. package/dist/commands.d.ts.map +1 -1
  296. package/dist/commands.js +4 -2
  297. package/dist/commands.js.map +1 -1
  298. package/dist/config.d.ts +165 -0
  299. package/dist/config.d.ts.map +1 -0
  300. package/dist/config.js +125 -0
  301. package/dist/config.js.map +1 -0
  302. package/dist/daylightSimulation/cctUtil.d.ts.map +1 -1
  303. package/dist/daylightSimulation/cctUtil.js +23 -22
  304. package/dist/daylightSimulation/cctUtil.js.map +1 -1
  305. package/dist/daylightSimulation/constants.d.ts +10 -0
  306. package/dist/daylightSimulation/constants.d.ts.map +1 -1
  307. package/dist/daylightSimulation/constants.js +4 -0
  308. package/dist/daylightSimulation/constants.js.map +1 -1
  309. package/dist/daylightSimulation/currentCct.d.ts +42 -0
  310. package/dist/daylightSimulation/currentCct.d.ts.map +1 -0
  311. package/dist/daylightSimulation/currentCct.js +217 -0
  312. package/dist/daylightSimulation/currentCct.js.map +1 -0
  313. package/dist/daylightSimulation/curves/realistic.d.ts +6 -6
  314. package/dist/daylightSimulation/curves/realistic.d.ts.map +1 -1
  315. package/dist/daylightSimulation/curves/realistic.js +36 -6
  316. package/dist/daylightSimulation/curves/realistic.js.map +1 -1
  317. package/dist/daylightSimulation/dashboardSettings.d.ts +47 -0
  318. package/dist/daylightSimulation/dashboardSettings.d.ts.map +1 -0
  319. package/dist/daylightSimulation/dashboardSettings.js +95 -0
  320. package/dist/daylightSimulation/dashboardSettings.js.map +1 -0
  321. package/dist/daylightSimulation/dashboardStatus.d.ts +72 -0
  322. package/dist/daylightSimulation/dashboardStatus.d.ts.map +1 -0
  323. package/dist/daylightSimulation/dashboardStatus.js +191 -0
  324. package/dist/daylightSimulation/dashboardStatus.js.map +1 -0
  325. package/dist/daylightSimulation/mathUtil.d.ts.map +1 -1
  326. package/dist/daylightSimulation/mathUtil.js +6 -2
  327. package/dist/daylightSimulation/mathUtil.js.map +1 -1
  328. package/dist/daylightSimulation/parseUtils.d.ts +3 -0
  329. package/dist/daylightSimulation/parseUtils.d.ts.map +1 -0
  330. package/dist/daylightSimulation/parseUtils.js +25 -0
  331. package/dist/daylightSimulation/parseUtils.js.map +1 -0
  332. package/dist/daylightSimulation/scheduleMaker.d.ts +6 -2
  333. package/dist/daylightSimulation/scheduleMaker.d.ts.map +1 -1
  334. package/dist/daylightSimulation/scheduleMaker.js +9 -11
  335. package/dist/daylightSimulation/scheduleMaker.js.map +1 -1
  336. package/dist/daylightSimulation/types.d.ts +15 -2
  337. package/dist/daylightSimulation/types.d.ts.map +1 -1
  338. package/dist/daylightSimulation/types.js +0 -2
  339. package/dist/daylightSimulation/types.js.map +1 -1
  340. package/dist/daylightSimulation/weatherUtil.d.ts.map +1 -1
  341. package/dist/daylightSimulation/weatherUtil.js +31 -0
  342. package/dist/daylightSimulation/weatherUtil.js.map +1 -1
  343. package/dist/device-control.d.ts +8 -0
  344. package/dist/device-control.d.ts.map +1 -0
  345. package/dist/device-control.js +8 -0
  346. package/dist/device-control.js.map +1 -0
  347. package/dist/deviceControl/autostart.d.ts.map +1 -1
  348. package/dist/deviceControl/autostart.js +15 -16
  349. package/dist/deviceControl/autostart.js.map +1 -1
  350. package/dist/deviceControl/bleHttpControl.d.ts +129 -0
  351. package/dist/deviceControl/bleHttpControl.d.ts.map +1 -0
  352. package/dist/deviceControl/bleHttpControl.js +753 -0
  353. package/dist/deviceControl/bleHttpControl.js.map +1 -0
  354. package/dist/deviceControl/lightControl.d.ts +9 -68
  355. package/dist/deviceControl/lightControl.d.ts.map +1 -1
  356. package/dist/deviceControl/lightControl.js +25 -255
  357. package/dist/deviceControl/lightControl.js.map +1 -1
  358. package/dist/deviceControl/lightControlCommands.d.ts +68 -0
  359. package/dist/deviceControl/lightControlCommands.d.ts.map +1 -0
  360. package/dist/deviceControl/lightControlCommands.js +244 -0
  361. package/dist/deviceControl/lightControlCommands.js.map +1 -0
  362. package/dist/deviceControl/types.d.ts +83 -4
  363. package/dist/deviceControl/types.d.ts.map +1 -1
  364. package/dist/deviceControl/types.js +1 -0
  365. package/dist/deviceControl/types.js.map +1 -1
  366. package/dist/index.d.ts +12 -0
  367. package/dist/index.d.ts.map +1 -0
  368. package/dist/index.js +8 -0
  369. package/dist/index.js.map +1 -0
  370. package/dist/test/MockLightServer.d.ts +1 -0
  371. package/dist/test/MockLightServer.d.ts.map +1 -1
  372. package/dist/test/MockLightServer.js +5 -0
  373. package/dist/test/MockLightServer.js.map +1 -1
  374. package/docs/CHANGELOG.md +171 -0
  375. package/docs/DIRECT_BLE.md +359 -0
  376. package/package.json +39 -8
  377. package/scripts/ble-cli-check.ts +129 -0
  378. package/scripts/ble-config-probe.ts +109 -0
  379. package/scripts/ble-effects-check.ts +82 -0
  380. package/scripts/ble-extended-probe.ts +44 -0
  381. package/scripts/ble-fan-check.ts +129 -0
  382. package/scripts/ble-feature-probe.ts +37 -0
  383. package/scripts/ble-followup-check.ts +165 -0
  384. package/scripts/ble-hardware-check.ts +99 -0
  385. package/scripts/ble-live-extended-check.ts +205 -0
  386. package/scripts/ble-non-ota-check.ts +193 -0
  387. package/scripts/ble-probe.ts +45 -0
  388. package/scripts/calibrate-webcam.ts +152 -0
  389. package/scripts/desktop-reference.ts +85 -0
  390. package/scripts/webcam.ts +129 -0
  391. package/dist/__tests__/lightControl.test.d.ts +0 -2
  392. package/dist/__tests__/lightControl.test.d.ts.map +0 -1
  393. package/dist/__tests__/lightControl.test.js +0 -424
  394. package/dist/__tests__/lightControl.test.js.map +0 -1
  395. package/dist/commands/deviceControl/discover.d.ts.map +0 -1
  396. package/dist/commands/deviceControl/discover.js +0 -29
  397. package/dist/commands/deviceControl/discover.js.map +0 -1
@@ -0,0 +1,548 @@
1
+ import { createServer } from 'node:http';
2
+ import { z } from 'zod';
3
+ import { capabilities, validateAction } from './controller.js';
4
+ import { DashboardStore, dashboardCss, dashboardFavicon, dashboardHtml, dashboardJs, estimateLux, } from './dashboard.js';
5
+ import { planDesktopImport } from './desktopLibrary.js';
6
+ import { LocalLibrary } from './library.js';
7
+ import { Programs } from './programs.js';
8
+ import { parseFanMode, validateFanRpm } from './telink.js';
9
+ async function bodyOf(request, maximum = 4096) {
10
+ let size = 0;
11
+ const chunks = [];
12
+ for await (const chunk of request) {
13
+ size += chunk.length;
14
+ if (size > maximum)
15
+ throw new Error(`Request body exceeds ${maximum} bytes`);
16
+ chunks.push(Buffer.from(chunk));
17
+ }
18
+ const raw = Buffer.concat(chunks).toString('utf8');
19
+ const value = raw ? JSON.parse(raw) : {};
20
+ if (!value || typeof value !== 'object' || Array.isArray(value))
21
+ throw new Error('Expected a JSON object');
22
+ return value;
23
+ }
24
+ export function createBleServer(controller, library = new LocalLibrary(), options = {}) {
25
+ const dashboard = options.dashboard ??
26
+ new DashboardStore(undefined, controller.config.lights.map((light) => light.key));
27
+ const fanTargets = (targets) => {
28
+ if (targets === 'all')
29
+ return controller.config.lights.map((light) => light.key);
30
+ return [...new Set(targets.flatMap((key) => (key.startsWith('group:') ? library.group(key).members : [key])))];
31
+ };
32
+ const programs = new Programs(controller, fanTargets);
33
+ const calibrationFor = (model) => options.luxByModel?.[model] ?? options.luxCalibration;
34
+ const manual = async (keys, action, args) => {
35
+ if (!keys.length || new Set(keys).size !== keys.length)
36
+ throw new Error('Manual control requires unique, nonempty targets');
37
+ for (const key of keys) {
38
+ const light = controller.config.lights.find((item) => item.key === key);
39
+ if (!light)
40
+ throw new Error(`Unknown fixture ${key}`);
41
+ validateAction(light, action, args);
42
+ }
43
+ await programs.cancelTargets(keys);
44
+ };
45
+ const stopForFan = async (keys, mode, rpm) => {
46
+ if (mode === undefined)
47
+ return;
48
+ const selected = parseFanMode(mode);
49
+ validateFanRpm(selected, rpm);
50
+ if (selected !== 'off' && !(selected === 'manual' && rpm === 0))
51
+ return;
52
+ const states = await controller.fans(keys);
53
+ for (const [key, state] of Object.entries(states)) {
54
+ if (!state.supported[selected])
55
+ throw new Error(`${key} does not advertise ${selected} fan mode`);
56
+ if (state.highTemperature)
57
+ throw new Error(`${key}: Thermal protection is active`);
58
+ }
59
+ await programs.cancelTargets(keys);
60
+ };
61
+ const server = createServer(async (request, response) => {
62
+ const send = (status, contentType, value, cache = 'no-store') => {
63
+ if (!response.destroyed) {
64
+ response.writeHead(status, {
65
+ 'content-type': contentType,
66
+ 'cache-control': cache,
67
+ 'content-security-policy': "default-src 'self'; script-src 'self'; style-src 'self'; connect-src 'self'; img-src 'self' data:; media-src 'self' blob:; object-src 'none'; base-uri 'none'; frame-ancestors 'none'; form-action 'self'",
68
+ 'referrer-policy': 'no-referrer',
69
+ 'x-content-type-options': 'nosniff',
70
+ 'x-frame-options': 'DENY',
71
+ });
72
+ response.end(value);
73
+ }
74
+ };
75
+ const reply = (status, value) => send(status, 'application/json', JSON.stringify(value));
76
+ const cancellation = new AbortController();
77
+ response.on('close', () => {
78
+ if (!response.writableEnded)
79
+ cancellation.abort(new Error('HTTP client disconnected'));
80
+ });
81
+ try {
82
+ const origin = request.headers.origin;
83
+ const fetchSite = request.headers['sec-fetch-site'];
84
+ const expectedOrigin = request.headers.host ? `http://${request.headers.host}` : undefined;
85
+ if ((origin && (!expectedOrigin || origin !== expectedOrigin)) ||
86
+ (fetchSite && fetchSite !== 'same-origin' && fetchSite !== 'none')) {
87
+ reply(403, { ok: false, error: 'Browser-origin requests are not permitted' });
88
+ return;
89
+ }
90
+ const route = request.url ?? '/';
91
+ if (request.method === 'GET' &&
92
+ (route === '/dashboard' || (route === '/' && request.headers.accept?.includes('text/html')))) {
93
+ send(200, 'text/html; charset=utf-8', dashboardHtml);
94
+ return;
95
+ }
96
+ if (request.method === 'GET' && route === '/dashboard.css') {
97
+ send(200, 'text/css; charset=utf-8', dashboardCss);
98
+ return;
99
+ }
100
+ if (request.method === 'GET' && route === '/dashboard.js') {
101
+ send(200, 'text/javascript; charset=utf-8', dashboardJs);
102
+ return;
103
+ }
104
+ if (request.method === 'GET' && route === '/favicon.svg') {
105
+ send(200, 'image/svg+xml; charset=utf-8', dashboardFavicon, 'public, max-age=86400');
106
+ return;
107
+ }
108
+ if (route === '/dashboard/settings') {
109
+ if (request.method === 'GET') {
110
+ reply(200, { ok: true, result: dashboard.getSettings() });
111
+ return;
112
+ }
113
+ if (request.method === 'POST') {
114
+ reply(200, {
115
+ ok: true,
116
+ result: dashboard.updateSettings(await bodyOf(request), controller.config.lights.map((light) => light.key)),
117
+ });
118
+ return;
119
+ }
120
+ }
121
+ if (route === '/dashboard/status-cache' && request.method === 'GET') {
122
+ const cached = dashboard.getStatus();
123
+ if (!cached)
124
+ throw new Error('No dashboard status has been observed yet');
125
+ reply(200, { ok: true, result: cached });
126
+ return;
127
+ }
128
+ if (route === '/dashboard/circadian' && request.method === 'GET') {
129
+ if (!options.circadianStatus)
130
+ throw new Error('Circadian dashboard status is unavailable');
131
+ reply(200, { ok: true, result: await options.circadianStatus() });
132
+ return;
133
+ }
134
+ if (route === '/dashboard/circadian/settings' && request.method === 'POST') {
135
+ if (!options.updateCircadianSettings)
136
+ throw new Error('Circadian settings are unavailable');
137
+ reply(200, { ok: true, result: await options.updateCircadianSettings(await bodyOf(request)) });
138
+ return;
139
+ }
140
+ if (route === '/dashboard/status' && request.method === 'GET') {
141
+ const keys = controller.config.lights.map((light) => light.key);
142
+ const lighting = await controller.snapshot(keys, false);
143
+ const result = dashboard.saveStatus({
144
+ version: 1,
145
+ updatedAt: new Date().toISOString(),
146
+ connected: controller.link.ready,
147
+ lighting,
148
+ fans: await controller.fans(keys),
149
+ estimatedLux: Object.fromEntries(controller.config.lights.map((light) => [
150
+ light.key,
151
+ estimateLux(calibrationFor(light.model), lighting[light.key]),
152
+ ])),
153
+ });
154
+ reply(200, { ok: true, verified: true, result });
155
+ return;
156
+ }
157
+ if (request.method === 'GET' && (route === '/' || route === '/lights' || route === '/health')) {
158
+ reply(200, {
159
+ ok: true,
160
+ daemon: true,
161
+ protocolVersion: 2,
162
+ connected: controller.link.ready,
163
+ features: {
164
+ state: true,
165
+ verifiedCommands: true,
166
+ toggle: true,
167
+ gm: true,
168
+ fan: true,
169
+ fanTargets: true,
170
+ fanManualRpm: true,
171
+ automaticCct: true,
172
+ productInfo: true,
173
+ transitions: true,
174
+ effectTrigger: true,
175
+ meshConfig: !!controller.link.configuration,
176
+ desktopImport: true,
177
+ programs: true,
178
+ effects: true,
179
+ color: true,
180
+ relative: true,
181
+ batch: true,
182
+ library: true,
183
+ fade: true,
184
+ dashboard: true,
185
+ dashboardStatus: true,
186
+ circadianDashboard: !!options.circadianStatus,
187
+ circadianSettings: !!options.updateCircadianSettings,
188
+ effectAnimationSpeed: true,
189
+ savedTargetSelection: true,
190
+ },
191
+ lights: controller.config.lights.map((light) => ({
192
+ key: light.key,
193
+ name: light.name,
194
+ mac: light.mac,
195
+ address: light.address,
196
+ model: light.model,
197
+ capabilities: capabilities(light),
198
+ luxCalibration: calibrationFor(light.model),
199
+ })),
200
+ groups: library.groups(),
201
+ });
202
+ return;
203
+ }
204
+ if (route === '/effects' && request.method === 'GET') {
205
+ reply(200, {
206
+ ok: true,
207
+ result: [...new Set(controller.config.lights.flatMap((light) => capabilities(light).effects))],
208
+ });
209
+ return;
210
+ }
211
+ if (route === '/programs') {
212
+ if (request.method === 'GET') {
213
+ reply(200, { ok: true, result: programs.list() });
214
+ return;
215
+ }
216
+ if (request.method === 'POST') {
217
+ reply(202, { ok: true, result: await programs.start(await bodyOf(request, 65536)) });
218
+ return;
219
+ }
220
+ }
221
+ const sample = /^\/programs\/([^/]+)\/sample$/.exec(route);
222
+ if (sample && request.method === 'POST') {
223
+ programs.sample(decodeURIComponent(sample[1]), await bodyOf(request));
224
+ reply(200, { ok: true, result: { accepted: true } });
225
+ return;
226
+ }
227
+ const program = /^\/programs\/([^/]+)$/.exec(route);
228
+ if (program) {
229
+ if (request.method === 'GET') {
230
+ reply(200, { ok: true, result: programs.get(decodeURIComponent(program[1])) });
231
+ return;
232
+ }
233
+ if (request.method === 'DELETE') {
234
+ reply(200, { ok: true, result: await programs.stop(decodeURIComponent(program[1])) });
235
+ return;
236
+ }
237
+ }
238
+ if (route === '/desktop/import' && request.method === 'POST') {
239
+ const body = z
240
+ .object({
241
+ database: z.string(),
242
+ prefix: z.string().optional(),
243
+ apply: z.boolean().default(false),
244
+ replace: z.boolean().default(false),
245
+ allowPartial: z.boolean().default(false),
246
+ })
247
+ .strict()
248
+ .parse(await bodyOf(request));
249
+ const report = planDesktopImport(body.database, controller.config, body.prefix);
250
+ if (body.apply && report.errors.length && !body.allowPartial)
251
+ throw new Error(`Import has unresolved entries: ${report.errors.join('; ')}`);
252
+ let changes;
253
+ try {
254
+ changes = library.importLibrary(report.plan, body.apply, body.replace);
255
+ }
256
+ catch (error) {
257
+ if (body.apply)
258
+ throw error;
259
+ report.errors.push(error.message);
260
+ }
261
+ reply(200, { ok: true, result: { ...report, valid: report.errors.length === 0, changes } });
262
+ return;
263
+ }
264
+ if (route === '/mesh/inspect' && request.method === 'GET') {
265
+ reply(200, { ok: true, verified: true, result: await controller.nativeGroup(library, undefined, 'inspect') });
266
+ return;
267
+ }
268
+ if (route === '/mesh/discover' && request.method === 'GET') {
269
+ reply(200, { ok: true, result: await controller.discoverUnprovisioned() });
270
+ return;
271
+ }
272
+ if (route === '/mesh/keys' && request.method === 'POST') {
273
+ if (!options.persistMesh)
274
+ throw new Error('Private mesh persistence is unavailable');
275
+ const body = z
276
+ .object({ database: z.string() })
277
+ .strict()
278
+ .parse(await bodyOf(request));
279
+ const imported = await controller.importDeviceKeys(body.database, options.persistMesh);
280
+ reply(200, { ok: true, result: { imported } });
281
+ return;
282
+ }
283
+ if (route === '/overrides' && request.method === 'POST') {
284
+ const body = z
285
+ .object({
286
+ targets: z.union([z.literal('all'), z.array(z.string()).min(1)]),
287
+ minutes: z.number().min(0).max(1440).optional(),
288
+ })
289
+ .strict()
290
+ .parse(await bodyOf(request));
291
+ const keys = fanTargets(body.targets);
292
+ if (body.minutes !== undefined)
293
+ await programs.cancelTargets(keys);
294
+ const result = body.minutes === undefined
295
+ ? controller.overrideStatus(keys)
296
+ : await controller.override(keys, body.minutes, cancellation.signal);
297
+ reply(200, { ok: true, result });
298
+ return;
299
+ }
300
+ if (route === '/transition' && request.method === 'POST') {
301
+ const body = z
302
+ .object({
303
+ targets: z.union([z.literal('all'), z.array(z.string()).min(1)]),
304
+ action: z.enum(['cct', 'hsi', 'brightness']),
305
+ args: z.record(z.unknown()),
306
+ seconds: z.number().min(0.5).max(20),
307
+ })
308
+ .strict()
309
+ .parse(await bodyOf(request));
310
+ await manual(fanTargets(body.targets), body.action, body.args);
311
+ reply(200, {
312
+ ok: true,
313
+ verified: true,
314
+ result: await controller.transition(fanTargets(body.targets), body.action, body.args, body.seconds, cancellation.signal),
315
+ });
316
+ return;
317
+ }
318
+ const automatic = /^\/lights\/([^/]+)\/auto-cct$/.exec(route);
319
+ if (automatic && request.method === 'POST') {
320
+ const result = await controller.automaticCct(decodeURIComponent(automatic[1]), await bodyOf(request), cancellation.signal);
321
+ reply(200, { ok: true, verified: !result.skipped, result });
322
+ return;
323
+ }
324
+ const information = /^\/lights\/([^/]+)\/info$/.exec(route);
325
+ if (information && request.method === 'GET') {
326
+ const key = decodeURIComponent(information[1]);
327
+ if (key.startsWith('group:')) {
328
+ const keys = fanTargets([key]);
329
+ if (!keys.length)
330
+ throw new Error('Group has no fixtures');
331
+ const result = {};
332
+ for (const member of keys)
333
+ result[member] = await controller.productInfo(member);
334
+ reply(200, { ok: true, verified: true, result });
335
+ return;
336
+ }
337
+ reply(200, {
338
+ ok: true,
339
+ verified: true,
340
+ result: await controller.productInfo(decodeURIComponent(information[1])),
341
+ });
342
+ return;
343
+ }
344
+ if (route === '/fans' && (request.method === 'GET' || request.method === 'POST')) {
345
+ const body = request.method === 'GET'
346
+ ? { targets: 'all' }
347
+ : z
348
+ .object({
349
+ targets: z.union([z.literal('all'), z.array(z.string()).min(1)]),
350
+ mode: z.union([z.string(), z.number()]).optional(),
351
+ rpm: z.number().int().min(0).max(65535).optional(),
352
+ })
353
+ .strict()
354
+ .parse(await bodyOf(request));
355
+ await stopForFan(fanTargets(body.targets), 'mode' in body ? body.mode : undefined, 'rpm' in body ? body.rpm : undefined);
356
+ const states = await controller.fans(fanTargets(body.targets), 'mode' in body ? body.mode : undefined, cancellation.signal, 'rpm' in body ? body.rpm : undefined);
357
+ reply(200, { ok: true, verified: true, result: { states } });
358
+ return;
359
+ }
360
+ if (route === '/batch' && request.method === 'POST') {
361
+ const body = z
362
+ .object({
363
+ targets: z.union([z.literal('all'), z.array(z.string()).min(1)]),
364
+ action: z.string(),
365
+ args: z.record(z.unknown()),
366
+ broadcast: z.boolean().optional(),
367
+ })
368
+ .strict()
369
+ .parse(await bodyOf(request));
370
+ const keys = fanTargets(body.targets);
371
+ await manual(keys, body.action, body.args);
372
+ const result = await controller.batch(keys, body.action, body.args, body.broadcast, cancellation.signal);
373
+ reply(200, { ok: true, verified: true, result });
374
+ return;
375
+ }
376
+ if (route === '/fade' && request.method === 'POST') {
377
+ const body = z
378
+ .object({
379
+ targets: z.union([z.literal('all'), z.array(z.string()).min(1)]),
380
+ brightness: z.number().min(0).max(100),
381
+ seconds: z.number().min(0.5).max(20),
382
+ })
383
+ .strict()
384
+ .parse(await bodyOf(request));
385
+ const keys = fanTargets(body.targets);
386
+ await manual(keys, 'brightness', { value: body.brightness });
387
+ reply(200, {
388
+ ok: true,
389
+ verified: true,
390
+ result: await controller.fade(keys, body.brightness, body.seconds, cancellation.signal),
391
+ });
392
+ return;
393
+ }
394
+ const libraryRoute = /^\/library\/(scenes|presets|quickshots)(?:\/([^/]+)(?:\/(recall))?)?$/.exec(route);
395
+ if (libraryRoute) {
396
+ const collection = libraryRoute[1];
397
+ const key = libraryRoute[2] ? decodeURIComponent(libraryRoute[2]) : undefined;
398
+ if (request.method === 'GET') {
399
+ reply(200, { ok: true, result: key ? library.find(collection, key) : library.list(collection) });
400
+ return;
401
+ }
402
+ if (key && request.method === 'DELETE') {
403
+ library.delete(collection, key);
404
+ reply(200, { ok: true, result: { deleted: key } });
405
+ return;
406
+ }
407
+ if (request.method === 'POST') {
408
+ if (key && libraryRoute[3] === 'recall') {
409
+ const body = z
410
+ .object({ target: z.string().optional(), seconds: z.number().min(0.5).max(20).optional() })
411
+ .strict()
412
+ .parse(await bodyOf(request));
413
+ const saved = library.find(collection, key);
414
+ if (body.target && (collection !== 'presets' || Object.keys(saved.states).length !== 1))
415
+ throw new Error('Only a single-fixture preset can be retargeted');
416
+ const states = body.target ? { [body.target]: Object.values(saved.states)[0] } : saved.states;
417
+ await programs.cancelTargets(Object.keys(states));
418
+ const result = body.seconds === undefined
419
+ ? await controller.restore(states, cancellation.signal)
420
+ : await controller.transitionScene(states, body.seconds, cancellation.signal);
421
+ reply(200, { ok: true, verified: true, result });
422
+ return;
423
+ }
424
+ const body = z
425
+ .object({
426
+ name: z.string().optional(),
427
+ keys: z.union([z.literal('all'), z.array(z.string()).min(1)]).optional(),
428
+ })
429
+ .strict()
430
+ .parse(await bodyOf(request));
431
+ const existing = key ? library.find(collection, key) : undefined;
432
+ const states = await controller.snapshot(body.keys !== undefined ? fanTargets(body.keys) : existing ? Object.keys(existing.states) : undefined);
433
+ cancellation.signal.throwIfAborted();
434
+ const result = library.save(collection, body.name ?? existing?.name, states, key);
435
+ reply(200, { ok: true, result });
436
+ return;
437
+ }
438
+ }
439
+ const groupRoute = /^\/groups(?:\/([^/]+)(?:\/(members|rename|native))?)?$/.exec(route);
440
+ if (groupRoute) {
441
+ const key = groupRoute[1] ? decodeURIComponent(groupRoute[1]) : undefined;
442
+ if (request.method === 'GET') {
443
+ reply(200, { ok: true, result: key ? library.group(key) : library.groups() });
444
+ return;
445
+ }
446
+ if (key && request.method === 'DELETE') {
447
+ if (library.group(key).native)
448
+ await controller.nativeGroup(library, key, 'disable');
449
+ library.deleteGroup(key);
450
+ reply(200, { ok: true, result: { deleted: key } });
451
+ return;
452
+ }
453
+ if (request.method === 'POST') {
454
+ if (key && groupRoute[2] === 'native') {
455
+ const body = z
456
+ .object({
457
+ action: z.enum(['enable', 'sync', 'disable']),
458
+ address: z.number().int().min(0xc000).max(0xfeff).optional(),
459
+ })
460
+ .strict()
461
+ .parse(await bodyOf(request));
462
+ reply(200, {
463
+ ok: true,
464
+ verified: true,
465
+ result: await controller.nativeGroup(library, key, body.action, body.address),
466
+ });
467
+ return;
468
+ }
469
+ if (key && groupRoute[2] === 'members') {
470
+ const body = z
471
+ .object({ member: z.string(), remove: z.boolean().optional() })
472
+ .strict()
473
+ .parse(await bodyOf(request));
474
+ if (!controller.config.lights.some((light) => light.key === body.member))
475
+ throw new Error(`Unknown fixture: ${body.member}`);
476
+ if (library.group(key).native)
477
+ await controller.nativeGroup(library, key, body.remove ? 'remove' : 'add', body.member);
478
+ else
479
+ library.updateGroup(key, body.member, body.remove ?? false);
480
+ reply(200, { ok: true, result: library.group(key) });
481
+ }
482
+ else {
483
+ const body = z
484
+ .object({ name: z.string() })
485
+ .strict()
486
+ .parse(await bodyOf(request));
487
+ if (body.name.trim().toLowerCase() === 'all' ||
488
+ controller.config.lights.some((light) => [light.key, light.name].some((value) => value.toLowerCase() === body.name.trim().toLowerCase()))) {
489
+ throw new Error('Group names must be distinct from all and physical fixture names/keys');
490
+ }
491
+ reply(200, {
492
+ ok: true,
493
+ result: key && groupRoute[2] === 'rename'
494
+ ? library.renameGroup(key, body.name)
495
+ : library.createGroup(body.name),
496
+ });
497
+ }
498
+ return;
499
+ }
500
+ }
501
+ const match = /^\/lights\/([^/]+)\/([a-z-]+)$/.exec(route);
502
+ if (!match || (request.method !== 'POST' && !(request.method === 'GET' && ['state', 'fan'].includes(match[2])))) {
503
+ reply(404, { ok: false, error: 'Unknown BLE API route' });
504
+ return;
505
+ }
506
+ const body = request.method === 'GET' ? {} : await bodyOf(request);
507
+ const key = decodeURIComponent(match[1]);
508
+ if (!['state', 'fan'].includes(match[2]))
509
+ await manual(fanTargets([key]), match[2], body);
510
+ let result;
511
+ if (match[2] === 'fan') {
512
+ const args = z
513
+ .object({
514
+ mode: z.union([z.string(), z.number()]).optional(),
515
+ rpm: z.number().int().min(0).max(65535).optional(),
516
+ })
517
+ .strict()
518
+ .parse(body);
519
+ await stopForFan(fanTargets([key]), args.mode, args.rpm);
520
+ result = key.startsWith('group:')
521
+ ? { states: await controller.fans(fanTargets([key]), args.mode, cancellation.signal, args.rpm) }
522
+ : await controller.fan(key, args.mode, cancellation.signal, args.rpm);
523
+ }
524
+ else if (key.startsWith('group:')) {
525
+ const group = library.group(key);
526
+ if (match[2] === 'state')
527
+ result = await controller.snapshot(group.members, false);
528
+ else
529
+ result = await controller.batch(group.members, match[2], body, false, cancellation.signal, group.native?.status === 'ready' ? group.native.address : undefined);
530
+ }
531
+ else
532
+ result = await controller.execute(key, match[2], body, cancellation.signal);
533
+ reply(200, { ok: true, verified: true, result });
534
+ }
535
+ catch (error) {
536
+ console.error(`BLE API request failed: ${error.message}`);
537
+ reply(400, { ok: false, error: error.message });
538
+ }
539
+ });
540
+ server.requestTimeout = 10_000;
541
+ server.headersTimeout = 10_000;
542
+ server.keepAliveTimeout = 65_000;
543
+ server.on('close', () => {
544
+ void programs.close().catch((error) => console.error(`Program shutdown failed: ${error.message}`));
545
+ });
546
+ return Object.assign(server, { stopPrograms: () => programs.close() });
547
+ }
548
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/ble/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function manageBleService(action: string): Promise<void>;
2
+ //# sourceMappingURL=service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/ble/service.ts"],"names":[],"mappings":"AAYA,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA+DpE"}