amaran-light-cli 1.11.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 (363) hide show
  1. package/README.md +108 -14
  2. package/dist/__tests__/autoCct.test.js +27 -0
  3. package/dist/__tests__/autoCct.test.js.map +1 -1
  4. package/dist/__tests__/bleHttpControl.test.d.ts +2 -0
  5. package/dist/__tests__/bleHttpControl.test.d.ts.map +1 -0
  6. package/dist/__tests__/bleHttpControl.test.js +230 -0
  7. package/dist/__tests__/bleHttpControl.test.js.map +1 -0
  8. package/dist/__tests__/bleStack.test.d.ts +2 -0
  9. package/dist/__tests__/bleStack.test.d.ts.map +1 -0
  10. package/dist/__tests__/bleStack.test.js +1239 -0
  11. package/dist/__tests__/bleStack.test.js.map +1 -0
  12. package/dist/__tests__/cctUtil.test.js +9 -4
  13. package/dist/__tests__/cctUtil.test.js.map +1 -1
  14. package/dist/__tests__/circadianDashboardSettings.test.d.ts +2 -0
  15. package/dist/__tests__/circadianDashboardSettings.test.d.ts.map +1 -0
  16. package/dist/__tests__/circadianDashboardSettings.test.js +82 -0
  17. package/dist/__tests__/circadianDashboardSettings.test.js.map +1 -0
  18. package/dist/__tests__/circadianIsolation.test.d.ts +2 -0
  19. package/dist/__tests__/circadianIsolation.test.d.ts.map +1 -0
  20. package/dist/__tests__/circadianIsolation.test.js +30 -0
  21. package/dist/__tests__/circadianIsolation.test.js.map +1 -0
  22. package/dist/__tests__/cli.config.test.js +49 -0
  23. package/dist/__tests__/cli.config.test.js.map +1 -1
  24. package/dist/__tests__/cli.smoke.test.js +34 -0
  25. package/dist/__tests__/cli.smoke.test.js.map +1 -1
  26. package/dist/__tests__/currentCct.test.d.ts +2 -0
  27. package/dist/__tests__/currentCct.test.d.ts.map +1 -0
  28. package/dist/__tests__/currentCct.test.js +29 -0
  29. package/dist/__tests__/currentCct.test.js.map +1 -0
  30. package/dist/__tests__/dashboard.test.d.ts +2 -0
  31. package/dist/__tests__/dashboard.test.d.ts.map +1 -0
  32. package/dist/__tests__/dashboard.test.js +126 -0
  33. package/dist/__tests__/dashboard.test.js.map +1 -0
  34. package/dist/__tests__/daylightSimulationParseUtils.test.d.ts +2 -0
  35. package/dist/__tests__/daylightSimulationParseUtils.test.d.ts.map +1 -0
  36. package/dist/__tests__/daylightSimulationParseUtils.test.js +16 -0
  37. package/dist/__tests__/daylightSimulationParseUtils.test.js.map +1 -0
  38. package/dist/__tests__/desktopImport.test.d.ts +2 -0
  39. package/dist/__tests__/desktopImport.test.d.ts.map +1 -0
  40. package/dist/__tests__/desktopImport.test.js +234 -0
  41. package/dist/__tests__/desktopImport.test.js.map +1 -0
  42. package/dist/__tests__/lightControl.basic.test.d.ts +2 -0
  43. package/dist/__tests__/lightControl.basic.test.d.ts.map +1 -0
  44. package/dist/__tests__/lightControl.basic.test.js +119 -0
  45. package/dist/__tests__/lightControl.basic.test.js.map +1 -0
  46. package/dist/__tests__/lightControl.colorEffects.test.d.ts +2 -0
  47. package/dist/__tests__/lightControl.colorEffects.test.d.ts.map +1 -0
  48. package/dist/__tests__/lightControl.colorEffects.test.js +170 -0
  49. package/dist/__tests__/lightControl.colorEffects.test.js.map +1 -0
  50. package/dist/__tests__/lightControl.management.test.d.ts +2 -0
  51. package/dist/__tests__/lightControl.management.test.d.ts.map +1 -0
  52. package/dist/__tests__/lightControl.management.test.js +90 -0
  53. package/dist/__tests__/lightControl.management.test.js.map +1 -0
  54. package/dist/__tests__/lightControlTestUtils.d.ts +10 -0
  55. package/dist/__tests__/lightControlTestUtils.d.ts.map +1 -0
  56. package/dist/__tests__/lightControlTestUtils.js +57 -0
  57. package/dist/__tests__/lightControlTestUtils.js.map +1 -0
  58. package/dist/__tests__/meshConfiguration.test.d.ts +2 -0
  59. package/dist/__tests__/meshConfiguration.test.d.ts.map +1 -0
  60. package/dist/__tests__/meshConfiguration.test.js +78 -0
  61. package/dist/__tests__/meshConfiguration.test.js.map +1 -0
  62. package/dist/__tests__/nativeGroups.test.d.ts +2 -0
  63. package/dist/__tests__/nativeGroups.test.d.ts.map +1 -0
  64. package/dist/__tests__/nativeGroups.test.js +104 -0
  65. package/dist/__tests__/nativeGroups.test.js.map +1 -0
  66. package/dist/__tests__/programApi.test.d.ts +2 -0
  67. package/dist/__tests__/programApi.test.d.ts.map +1 -0
  68. package/dist/__tests__/programApi.test.js +73 -0
  69. package/dist/__tests__/programApi.test.js.map +1 -0
  70. package/dist/__tests__/programs.test.d.ts +2 -0
  71. package/dist/__tests__/programs.test.d.ts.map +1 -0
  72. package/dist/__tests__/programs.test.js +176 -0
  73. package/dist/__tests__/programs.test.js.map +1 -0
  74. package/dist/__tests__/scheduleMaker.test.d.ts +2 -0
  75. package/dist/__tests__/scheduleMaker.test.d.ts.map +1 -0
  76. package/dist/__tests__/scheduleMaker.test.js +25 -0
  77. package/dist/__tests__/scheduleMaker.test.js.map +1 -0
  78. package/dist/ble/async.d.ts +2 -0
  79. package/dist/ble/async.d.ts.map +1 -0
  80. package/dist/ble/async.js +15 -0
  81. package/dist/ble/async.js.map +1 -0
  82. package/dist/ble/colors.d.ts +5 -0
  83. package/dist/ble/colors.d.ts.map +1 -0
  84. package/dist/ble/colors.js +44 -0
  85. package/dist/ble/colors.js.map +1 -0
  86. package/dist/ble/configuration.d.ts +22 -0
  87. package/dist/ble/configuration.d.ts.map +1 -0
  88. package/dist/ble/configuration.js +122 -0
  89. package/dist/ble/configuration.js.map +1 -0
  90. package/dist/ble/controller.d.ts +118 -0
  91. package/dist/ble/controller.d.ts.map +1 -0
  92. package/dist/ble/controller.js +931 -0
  93. package/dist/ble/controller.js.map +1 -0
  94. package/dist/ble/crypto.d.ts +34 -0
  95. package/dist/ble/crypto.d.ts.map +1 -0
  96. package/dist/ble/crypto.js +178 -0
  97. package/dist/ble/crypto.js.map +1 -0
  98. package/dist/ble/daemon.d.ts +2 -0
  99. package/dist/ble/daemon.d.ts.map +1 -0
  100. package/dist/ble/daemon.js +76 -0
  101. package/dist/ble/daemon.js.map +1 -0
  102. package/dist/ble/dashboard.d.ts +331 -0
  103. package/dist/ble/dashboard.d.ts.map +1 -0
  104. package/dist/ble/dashboard.js +280 -0
  105. package/dist/ble/dashboard.js.map +1 -0
  106. package/dist/ble/desktop.d.ts +4 -0
  107. package/dist/ble/desktop.d.ts.map +1 -0
  108. package/dist/ble/desktop.js +33 -0
  109. package/dist/ble/desktop.js.map +1 -0
  110. package/dist/ble/desktopLibrary.d.ts +12 -0
  111. package/dist/ble/desktopLibrary.d.ts.map +1 -0
  112. package/dist/ble/desktopLibrary.js +346 -0
  113. package/dist/ble/desktopLibrary.js.map +1 -0
  114. package/dist/ble/effects.d.ts +34 -0
  115. package/dist/ble/effects.d.ts.map +1 -0
  116. package/dist/ble/effects.js +138 -0
  117. package/dist/ble/effects.js.map +1 -0
  118. package/dist/ble/fan.d.ts +244 -0
  119. package/dist/ble/fan.d.ts.map +1 -0
  120. package/dist/ble/fan.js +46 -0
  121. package/dist/ble/fan.js.map +1 -0
  122. package/dist/ble/library.d.ts +341 -0
  123. package/dist/ble/library.d.ts.map +1 -0
  124. package/dist/ble/library.js +201 -0
  125. package/dist/ble/library.js.map +1 -0
  126. package/dist/ble/media.d.ts +133 -0
  127. package/dist/ble/media.d.ts.map +1 -0
  128. package/dist/ble/media.js +186 -0
  129. package/dist/ble/media.js.map +1 -0
  130. package/dist/ble/nativeGroups.d.ts +22 -0
  131. package/dist/ble/nativeGroups.d.ts.map +1 -0
  132. package/dist/ble/nativeGroups.js +114 -0
  133. package/dist/ble/nativeGroups.js.map +1 -0
  134. package/dist/ble/packets.d.ts +3 -0
  135. package/dist/ble/packets.d.ts.map +1 -0
  136. package/dist/ble/packets.js +15 -0
  137. package/dist/ble/packets.js.map +1 -0
  138. package/dist/ble/programs.d.ts +318 -0
  139. package/dist/ble/programs.d.ts.map +1 -0
  140. package/dist/ble/programs.js +329 -0
  141. package/dist/ble/programs.js.map +1 -0
  142. package/dist/ble/provisioning.d.ts +13 -0
  143. package/dist/ble/provisioning.d.ts.map +1 -0
  144. package/dist/ble/provisioning.js +39 -0
  145. package/dist/ble/provisioning.js.map +1 -0
  146. package/dist/ble/server.d.ts +18 -0
  147. package/dist/ble/server.d.ts.map +1 -0
  148. package/dist/ble/server.js +548 -0
  149. package/dist/ble/server.js.map +1 -0
  150. package/dist/ble/service.d.ts +2 -0
  151. package/dist/ble/service.d.ts.map +1 -0
  152. package/dist/ble/service.js +77 -0
  153. package/dist/ble/service.js.map +1 -0
  154. package/dist/ble/settings.d.ts +18 -0
  155. package/dist/ble/settings.d.ts.map +1 -0
  156. package/dist/ble/settings.js +25 -0
  157. package/dist/ble/settings.js.map +1 -0
  158. package/dist/ble/setup.d.ts +2 -0
  159. package/dist/ble/setup.d.ts.map +1 -0
  160. package/dist/ble/setup.js +31 -0
  161. package/dist/ble/setup.js.map +1 -0
  162. package/dist/ble/storage.d.ts +94 -0
  163. package/dist/ble/storage.d.ts.map +1 -0
  164. package/dist/ble/storage.js +132 -0
  165. package/dist/ble/storage.js.map +1 -0
  166. package/dist/ble/telink.d.ts +63 -0
  167. package/dist/ble/telink.d.ts.map +1 -0
  168. package/dist/ble/telink.js +108 -0
  169. package/dist/ble/telink.js.map +1 -0
  170. package/dist/ble/transitions.d.ts +3 -0
  171. package/dist/ble/transitions.d.ts.map +1 -0
  172. package/dist/ble/transitions.js +28 -0
  173. package/dist/ble/transitions.js.map +1 -0
  174. package/dist/ble/transport.d.ts +48 -0
  175. package/dist/ble/transport.d.ts.map +1 -0
  176. package/dist/ble/transport.js +370 -0
  177. package/dist/ble/transport.js.map +1 -0
  178. package/dist/circadian.d.ts +3 -0
  179. package/dist/circadian.d.ts.map +1 -1
  180. package/dist/circadian.js +2 -0
  181. package/dist/circadian.js.map +1 -1
  182. package/dist/cli.d.ts +3 -2
  183. package/dist/cli.d.ts.map +1 -1
  184. package/dist/cli.js +125 -6
  185. package/dist/cli.js.map +1 -1
  186. package/dist/commands/__tests__/newCommands.test.js +3 -4
  187. package/dist/commands/__tests__/newCommands.test.js.map +1 -1
  188. package/dist/commands/cmdUtils.d.ts +5 -2
  189. package/dist/commands/cmdUtils.d.ts.map +1 -1
  190. package/dist/commands/cmdUtils.js +29 -10
  191. package/dist/commands/cmdUtils.js.map +1 -1
  192. package/dist/commands/daylightSimulation/autoCct.d.ts.map +1 -1
  193. package/dist/commands/daylightSimulation/autoCct.js +67 -197
  194. package/dist/commands/daylightSimulation/autoCct.js.map +1 -1
  195. package/dist/commands/daylightSimulation/graphSchedule.d.ts +1 -1
  196. package/dist/commands/daylightSimulation/graphSchedule.d.ts.map +1 -1
  197. package/dist/commands/daylightSimulation/printSchedule.d.ts +1 -1
  198. package/dist/commands/daylightSimulation/printSchedule.d.ts.map +1 -1
  199. package/dist/commands/daylightSimulation/printSchedule.js +2 -2
  200. package/dist/commands/daylightSimulation/printSchedule.js.map +1 -1
  201. package/dist/commands/daylightSimulation/service.d.ts +1 -1
  202. package/dist/commands/daylightSimulation/service.d.ts.map +1 -1
  203. package/dist/commands/daylightSimulation/service.js +5 -3
  204. package/dist/commands/daylightSimulation/service.js.map +1 -1
  205. package/dist/commands/daylightSimulation/simulateSchedule.d.ts +1 -1
  206. package/dist/commands/daylightSimulation/simulateSchedule.d.ts.map +1 -1
  207. package/dist/commands/daylightSimulation/simulateSchedule.js +5 -4
  208. package/dist/commands/daylightSimulation/simulateSchedule.js.map +1 -1
  209. package/dist/commands/deviceControl/ble.d.ts +4 -0
  210. package/dist/commands/deviceControl/ble.d.ts.map +1 -0
  211. package/dist/commands/deviceControl/ble.js +214 -0
  212. package/dist/commands/deviceControl/ble.js.map +1 -0
  213. package/dist/commands/deviceControl/cct.d.ts.map +1 -1
  214. package/dist/commands/deviceControl/cct.js +41 -11
  215. package/dist/commands/deviceControl/cct.js.map +1 -1
  216. package/dist/commands/deviceControl/color.d.ts.map +1 -1
  217. package/dist/commands/deviceControl/color.js +13 -3
  218. package/dist/commands/deviceControl/color.js.map +1 -1
  219. package/dist/commands/deviceControl/config.d.ts.map +1 -1
  220. package/dist/commands/deviceControl/config.js +26 -3
  221. package/dist/commands/deviceControl/config.js.map +1 -1
  222. package/dist/commands/deviceControl/{discover.d.ts → desktop.d.ts} +3 -2
  223. package/dist/commands/deviceControl/desktop.d.ts.map +1 -0
  224. package/dist/commands/deviceControl/desktop.js +66 -0
  225. package/dist/commands/deviceControl/desktop.js.map +1 -0
  226. package/dist/commands/deviceControl/effect.d.ts.map +1 -1
  227. package/dist/commands/deviceControl/effect.js +90 -159
  228. package/dist/commands/deviceControl/effect.js.map +1 -1
  229. package/dist/commands/deviceControl/fan.d.ts.map +1 -1
  230. package/dist/commands/deviceControl/fan.js +77 -95
  231. package/dist/commands/deviceControl/fan.js.map +1 -1
  232. package/dist/commands/deviceControl/group.d.ts.map +1 -1
  233. package/dist/commands/deviceControl/group.js +43 -6
  234. package/dist/commands/deviceControl/group.js.map +1 -1
  235. package/dist/commands/deviceControl/hsi.d.ts.map +1 -1
  236. package/dist/commands/deviceControl/hsi.js +3 -1
  237. package/dist/commands/deviceControl/hsi.js.map +1 -1
  238. package/dist/commands/deviceControl/info.d.ts.map +1 -1
  239. package/dist/commands/deviceControl/info.js +0 -50
  240. package/dist/commands/deviceControl/info.js.map +1 -1
  241. package/dist/commands/deviceControl/intensity.d.ts.map +1 -1
  242. package/dist/commands/deviceControl/intensity.js +32 -8
  243. package/dist/commands/deviceControl/intensity.js.map +1 -1
  244. package/dist/commands/deviceControl/list.d.ts.map +1 -1
  245. package/dist/commands/deviceControl/list.js +3 -2
  246. package/dist/commands/deviceControl/list.js.map +1 -1
  247. package/dist/commands/deviceControl/power.d.ts.map +1 -1
  248. package/dist/commands/deviceControl/power.js +9 -3
  249. package/dist/commands/deviceControl/power.js.map +1 -1
  250. package/dist/commands/deviceControl/preset.d.ts.map +1 -1
  251. package/dist/commands/deviceControl/preset.js +56 -19
  252. package/dist/commands/deviceControl/preset.js.map +1 -1
  253. package/dist/commands/deviceControl/program.d.ts +4 -0
  254. package/dist/commands/deviceControl/program.d.ts.map +1 -0
  255. package/dist/commands/deviceControl/program.js +199 -0
  256. package/dist/commands/deviceControl/program.js.map +1 -0
  257. package/dist/commands/deviceControl/quickshot.d.ts.map +1 -1
  258. package/dist/commands/deviceControl/quickshot.js +75 -13
  259. package/dist/commands/deviceControl/quickshot.js.map +1 -1
  260. package/dist/commands/deviceControl/scene.d.ts.map +1 -1
  261. package/dist/commands/deviceControl/scene.js +72 -9
  262. package/dist/commands/deviceControl/scene.js.map +1 -1
  263. package/dist/commands/deviceControl/status.d.ts.map +1 -1
  264. package/dist/commands/deviceControl/status.js +26 -3
  265. package/dist/commands/deviceControl/status.js.map +1 -1
  266. package/dist/commands/parseUtils.d.ts +1 -1
  267. package/dist/commands/parseUtils.d.ts.map +1 -1
  268. package/dist/commands/parseUtils.js +1 -11
  269. package/dist/commands/parseUtils.js.map +1 -1
  270. package/dist/commands-api.d.ts +1 -1
  271. package/dist/commands-api.d.ts.map +1 -1
  272. package/dist/commands-api.js +1 -1
  273. package/dist/commands-api.js.map +1 -1
  274. package/dist/commands.d.ts.map +1 -1
  275. package/dist/commands.js +4 -2
  276. package/dist/commands.js.map +1 -1
  277. package/dist/config.d.ts +82 -0
  278. package/dist/config.d.ts.map +1 -1
  279. package/dist/config.js +13 -2
  280. package/dist/config.js.map +1 -1
  281. package/dist/daylightSimulation/cctUtil.d.ts.map +1 -1
  282. package/dist/daylightSimulation/cctUtil.js +2 -2
  283. package/dist/daylightSimulation/cctUtil.js.map +1 -1
  284. package/dist/daylightSimulation/constants.d.ts +10 -0
  285. package/dist/daylightSimulation/constants.d.ts.map +1 -1
  286. package/dist/daylightSimulation/constants.js +4 -0
  287. package/dist/daylightSimulation/constants.js.map +1 -1
  288. package/dist/daylightSimulation/currentCct.d.ts +42 -0
  289. package/dist/daylightSimulation/currentCct.d.ts.map +1 -0
  290. package/dist/daylightSimulation/currentCct.js +217 -0
  291. package/dist/daylightSimulation/currentCct.js.map +1 -0
  292. package/dist/daylightSimulation/dashboardSettings.d.ts +47 -0
  293. package/dist/daylightSimulation/dashboardSettings.d.ts.map +1 -0
  294. package/dist/daylightSimulation/dashboardSettings.js +95 -0
  295. package/dist/daylightSimulation/dashboardSettings.js.map +1 -0
  296. package/dist/daylightSimulation/dashboardStatus.d.ts +72 -0
  297. package/dist/daylightSimulation/dashboardStatus.d.ts.map +1 -0
  298. package/dist/daylightSimulation/dashboardStatus.js +191 -0
  299. package/dist/daylightSimulation/dashboardStatus.js.map +1 -0
  300. package/dist/daylightSimulation/parseUtils.d.ts +3 -0
  301. package/dist/daylightSimulation/parseUtils.d.ts.map +1 -0
  302. package/dist/daylightSimulation/parseUtils.js +25 -0
  303. package/dist/daylightSimulation/parseUtils.js.map +1 -0
  304. package/dist/daylightSimulation/scheduleMaker.d.ts +2 -2
  305. package/dist/daylightSimulation/scheduleMaker.d.ts.map +1 -1
  306. package/dist/daylightSimulation/scheduleMaker.js +6 -6
  307. package/dist/daylightSimulation/scheduleMaker.js.map +1 -1
  308. package/dist/daylightSimulation/types.d.ts +13 -2
  309. package/dist/daylightSimulation/types.d.ts.map +1 -1
  310. package/dist/daylightSimulation/types.js +0 -2
  311. package/dist/daylightSimulation/types.js.map +1 -1
  312. package/dist/device-control.d.ts +1 -0
  313. package/dist/device-control.d.ts.map +1 -1
  314. package/dist/device-control.js +1 -0
  315. package/dist/device-control.js.map +1 -1
  316. package/dist/deviceControl/bleHttpControl.d.ts +129 -0
  317. package/dist/deviceControl/bleHttpControl.d.ts.map +1 -0
  318. package/dist/deviceControl/bleHttpControl.js +753 -0
  319. package/dist/deviceControl/bleHttpControl.js.map +1 -0
  320. package/dist/deviceControl/lightControl.d.ts +8 -68
  321. package/dist/deviceControl/lightControl.d.ts.map +1 -1
  322. package/dist/deviceControl/lightControl.js +6 -246
  323. package/dist/deviceControl/lightControl.js.map +1 -1
  324. package/dist/deviceControl/lightControlCommands.d.ts +68 -0
  325. package/dist/deviceControl/lightControlCommands.d.ts.map +1 -0
  326. package/dist/deviceControl/lightControlCommands.js +244 -0
  327. package/dist/deviceControl/lightControlCommands.js.map +1 -0
  328. package/dist/deviceControl/types.d.ts +75 -4
  329. package/dist/deviceControl/types.d.ts.map +1 -1
  330. package/dist/deviceControl/types.js +1 -0
  331. package/dist/deviceControl/types.js.map +1 -1
  332. package/dist/index.d.ts +2 -1
  333. package/dist/index.d.ts.map +1 -1
  334. package/dist/index.js +1 -0
  335. package/dist/index.js.map +1 -1
  336. package/dist/test/MockLightServer.d.ts +1 -0
  337. package/dist/test/MockLightServer.d.ts.map +1 -1
  338. package/dist/test/MockLightServer.js +5 -0
  339. package/dist/test/MockLightServer.js.map +1 -1
  340. package/docs/CHANGELOG.md +37 -0
  341. package/docs/DIRECT_BLE.md +359 -0
  342. package/package.json +8 -4
  343. package/scripts/ble-cli-check.ts +129 -0
  344. package/scripts/ble-config-probe.ts +109 -0
  345. package/scripts/ble-effects-check.ts +82 -0
  346. package/scripts/ble-extended-probe.ts +44 -0
  347. package/scripts/ble-fan-check.ts +129 -0
  348. package/scripts/ble-feature-probe.ts +37 -0
  349. package/scripts/ble-followup-check.ts +165 -0
  350. package/scripts/ble-hardware-check.ts +99 -0
  351. package/scripts/ble-live-extended-check.ts +205 -0
  352. package/scripts/ble-non-ota-check.ts +193 -0
  353. package/scripts/ble-probe.ts +45 -0
  354. package/scripts/calibrate-webcam.ts +152 -0
  355. package/scripts/desktop-reference.ts +85 -0
  356. package/scripts/webcam.ts +129 -0
  357. package/dist/__tests__/lightControl.test.d.ts +0 -2
  358. package/dist/__tests__/lightControl.test.d.ts.map +0 -1
  359. package/dist/__tests__/lightControl.test.js +0 -424
  360. package/dist/__tests__/lightControl.test.js.map +0 -1
  361. package/dist/commands/deviceControl/discover.d.ts.map +0 -1
  362. package/dist/commands/deviceControl/discover.js +0 -29
  363. package/dist/commands/deviceControl/discover.js.map +0 -1
@@ -0,0 +1,126 @@
1
+ import { mkdirSync, mkdtempSync, readFileSync, rmSync, writeFileSync } from 'node:fs';
2
+ import { tmpdir } from 'node:os';
3
+ import path from 'node:path';
4
+ import { Script } from 'node:vm';
5
+ import { afterEach, describe, expect, it } from 'vitest';
6
+ import { DashboardStore, dashboardFavicon, dashboardHtml, dashboardJs, estimateLux } from '../ble/dashboard.js';
7
+ import { getCircadianDashboardStatus } from '../daylightSimulation/dashboardStatus.js';
8
+ describe('DashboardStore', () => {
9
+ const directories = [];
10
+ afterEach(() => {
11
+ for (const directory of directories.splice(0))
12
+ rmSync(directory, { recursive: true, force: true });
13
+ });
14
+ it('persists validated settings and a timestamped status cache', () => {
15
+ const directory = mkdtempSync(path.join(tmpdir(), 'amaran-dashboard-'));
16
+ directories.push(directory);
17
+ const store = new DashboardStore(directory, ['desk', 'back']);
18
+ expect(store.updateSettings({ title: 'Studio', fixtureOrder: ['back'] }, ['desk', 'back'])).toMatchObject({
19
+ title: 'Studio',
20
+ fixtureOrder: ['back', 'desk'],
21
+ });
22
+ store.saveStatus({
23
+ version: 1,
24
+ updatedAt: '2026-01-01T12:00:00.000Z',
25
+ connected: true,
26
+ lighting: {},
27
+ fans: {},
28
+ estimatedLux: {},
29
+ });
30
+ expect(new DashboardStore(directory, ['desk', 'back']).getStatus()).toMatchObject({
31
+ updatedAt: '2026-01-01T12:00:00.000Z',
32
+ connected: true,
33
+ });
34
+ expect(JSON.parse(readFileSync(path.join(directory, 'dashboard-settings.json'), 'utf8'))).toMatchObject({
35
+ title: 'Studio',
36
+ });
37
+ expect(JSON.parse(readFileSync(path.join(directory, 'dashboard-status.json'), 'utf8'))).toMatchObject({
38
+ connected: true,
39
+ });
40
+ });
41
+ it('rejects unknown and duplicate fixture registrations', () => {
42
+ const store = new DashboardStore(undefined, ['desk', 'back']);
43
+ expect(() => store.updateSettings({ fixtureOrder: ['missing'] }, ['desk', 'back'])).toThrow('unknown');
44
+ expect(() => store.updateSettings({ fixtureOrder: ['desk', 'desk'] }, ['desk', 'back'])).toThrow('duplicate');
45
+ });
46
+ it('interpolates calibrated CCT output and scales it by live brightness', () => {
47
+ const state = {
48
+ sleep: false,
49
+ intensity: 500,
50
+ mode: 'cct',
51
+ cct: 4500,
52
+ observedAt: '2026-01-01T12:00:00.000Z',
53
+ };
54
+ expect(estimateLux({ 4000: 10000, 5000: 14000 }, state)).toBe(6000);
55
+ expect(estimateLux(8000, { ...state, intensity: 250 })).toBe(2000);
56
+ expect(estimateLux(8000, { ...state, sleep: true })).toBe(0);
57
+ expect(estimateLux(8000, { ...state, mode: 'hsi', hue: 0, sat: 100 })).toBeNull();
58
+ });
59
+ it('reports the loaded circadian service, latest target, weather state, and capped daily schedule', async () => {
60
+ const directory = mkdtempSync(path.join(tmpdir(), 'amaran-circadian-dashboard-'));
61
+ directories.push(directory);
62
+ const agents = path.join(directory, 'Library', 'LaunchAgents');
63
+ const logs = path.join(directory, 'Library', 'Logs');
64
+ mkdirSync(agents, { recursive: true });
65
+ mkdirSync(logs, { recursive: true });
66
+ writeFileSync(path.join(agents, 'com.hmmfn.amaran.circadian-service.plist'), `<plist><dict><key>ProgramArguments</key><array><string>node</string><string>amaran-cli</string><string>auto-cct</string><string>--curve</string><string>cie-daylight</string></array><key>StartInterval</key><integer>60</integer></dict></plist>`);
67
+ writeFileSync(path.join(logs, 'amaran-circadian-service.log'), '[2026-09-13T22:29:38.000Z] Setting CCT to 6002K at 25% for active lights\n');
68
+ const result = await getCircadianDashboardStatus({
69
+ homeDir: directory,
70
+ now: new Date('2026-09-13T22:30:00.000Z'),
71
+ isServiceLoaded: async () => true,
72
+ loadConfig: () => ({
73
+ latitude: 37.7852,
74
+ longitude: -122.3874,
75
+ intensityMin: 5,
76
+ intensityMax: 25,
77
+ maxLux: { 2700: 9500, 5600: 15000, 6500: 14630 },
78
+ weather: false,
79
+ }),
80
+ });
81
+ expect(result.service).toMatchObject({
82
+ installed: true,
83
+ loaded: true,
84
+ active: true,
85
+ healthy: true,
86
+ intervalSeconds: 60,
87
+ curve: 'cie-daylight',
88
+ weatherConfigured: false,
89
+ lastTarget: { cct: 6002, intensity: 25 },
90
+ });
91
+ expect(result.current).toMatchObject({ curve: 'cie-daylight', weatherActive: false });
92
+ expect(result.settings).toMatchObject({
93
+ enabled: true,
94
+ intervalSeconds: 60,
95
+ curve: 'cie-daylight',
96
+ weather: false,
97
+ intensityMin: 5,
98
+ intensityMax: 25,
99
+ });
100
+ expect(result.schedule?.points).toHaveLength(97);
101
+ expect(result.schedule?.intensityLimit).toBe(25);
102
+ expect(Math.max(...(result.schedule?.points.map((point) => point.intensity) ?? []))).toBeGreaterThan(25);
103
+ expect(Math.max(...(result.schedule?.points.map((point) => point.appliedIntensity) ?? []))).toBeLessThanOrEqual(25);
104
+ expect(Math.max(...(result.schedule?.points.map((point) => point.sunlightLux ?? 0) ?? []))).toBeGreaterThan(Math.max(...(result.schedule?.points.map((point) => point.systemCapacityLux ?? 0) ?? [])));
105
+ });
106
+ it('ships a parseable interactive circadian dashboard client', () => {
107
+ expect(() => new Script(dashboardJs)).not.toThrow();
108
+ expect(dashboardHtml).toContain('id="circadian-graph"');
109
+ expect(dashboardHtml).toContain('Hover or slide over the graph');
110
+ expect(dashboardHtml).toContain('Actual sunlight lux (modeled)');
111
+ expect(dashboardHtml).toContain('href="/favicon.svg"');
112
+ expect(dashboardFavicon).toContain('<svg');
113
+ expect(dashboardFavicon).toContain('viewBox="0 0 64 64"');
114
+ expect(dashboardHtml).toContain('Save circadian settings');
115
+ expect(dashboardJs).toContain("api('/dashboard/circadian')");
116
+ expect(dashboardJs).toContain("api('/dashboard/circadian/settings'");
117
+ expect(dashboardJs).toContain('onpointermove');
118
+ expect(dashboardJs).toContain('100%</text>');
119
+ expect(dashboardJs).toContain('% service limit</text>');
120
+ expect(dashboardJs).toContain('Service applies ');
121
+ expect(dashboardJs).toContain('Actual sunlight ');
122
+ expect(dashboardJs).toContain('System capacity ');
123
+ expect(dashboardJs).toContain(' vs clear');
124
+ });
125
+ });
126
+ //# sourceMappingURL=dashboard.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dashboard.test.js","sourceRoot":"","sources":["../../src/__tests__/dashboard.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=daylightSimulationParseUtils.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daylightSimulationParseUtils.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/daylightSimulationParseUtils.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,16 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { parseCloudCover } from '../daylightSimulation/parseUtils.js';
3
+ describe('daylight simulation parse utils', () => {
4
+ it('parses cloud cover fractions and percentages', () => {
5
+ expect(parseCloudCover('0.5')).toBe(0.5);
6
+ expect(parseCloudCover('50%')).toBe(0.5);
7
+ expect(parseCloudCover(1)).toBe(1);
8
+ });
9
+ it('rejects cloud cover values outside the supported range', () => {
10
+ expect(() => parseCloudCover('1.5')).toThrow(RangeError);
11
+ expect(() => parseCloudCover('150%')).toThrow(RangeError);
12
+ expect(() => parseCloudCover(-0.1)).toThrow(RangeError);
13
+ expect(() => parseCloudCover(Number.NaN)).toThrow(RangeError);
14
+ });
15
+ });
16
+ //# sourceMappingURL=daylightSimulationParseUtils.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daylightSimulationParseUtils.test.js","sourceRoot":"","sources":["../../src/__tests__/daylightSimulationParseUtils.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AAEtE,QAAQ,CAAC,iCAAiC,EAAE,GAAG,EAAE;IAC/C,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACtD,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACzC,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACzC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wDAAwD,EAAE,GAAG,EAAE;QAChE,MAAM,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QACzD,MAAM,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAC1D,MAAM,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QACxD,MAAM,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=desktopImport.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"desktopImport.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/desktopImport.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,234 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { desktopEffectState, desktopState, planDesktopImport } from '../ble/desktopLibrary.js';
3
+ import { LocalLibrary } from '../ble/library.js';
4
+ const light = { key: 'back', name: 'Back', mac: '00:00:00:12:34:56', address: 10, model: '150c' };
5
+ const desk = { key: 'desk', name: 'Desk', mac: '00:00:00:65:43:21', address: 6, model: '200x-s' };
6
+ const config = { netKey: '0'.repeat(32), appKey: '1'.repeat(32), source: 32766, lights: [light] };
7
+ describe('Desktop library import', () => {
8
+ it('converts Desktop tint units and preserves sleeping remembered brightness', () => {
9
+ expect(desktopState(light, 0, { cct: 5600, gm: 100, intensity: 680, sleep: true }, 123)).toMatchObject({
10
+ mode: 'cct',
11
+ gm: 0,
12
+ intensity: 680,
13
+ sleep: true,
14
+ });
15
+ expect(desktopState(light, 0, { cct: 3200, gm: 70, intensity: 13, sleep: false }, 123)).toMatchObject({
16
+ gm: -30,
17
+ intensity: 10,
18
+ });
19
+ expect(() => desktopState(light, 7, {}, 123)).toThrow();
20
+ expect(() => desktopState(light, 0, { cct: 3200, intensity: 10, sleep: false }, 123)).toThrow('tint');
21
+ });
22
+ it('maps quickshots and workspaces without importing credentials or applying lights', () => {
23
+ const rows = {
24
+ fixtures: [{ uuid: 'aa', mac_address: light.mac, code: '400J5' }],
25
+ scenes: [{ uuid: 'bb', name: 'Studio', update_time: 123 }],
26
+ scene_detail: [{ scene_uuid: 'bb', node_name: '400J5-123456' }],
27
+ groups: [],
28
+ group_detail: [],
29
+ quick_shots: [{ uuid: 'cc', name: 'Night', update_time: 123 }],
30
+ quickshot_detail: [
31
+ {
32
+ quick_shot_id: 'cc',
33
+ node_name: '400J5-123456',
34
+ light_mode: 0,
35
+ parameters: '{"gm":100,"cct":2700,"intensity":10,"sleep":false}',
36
+ update_time: 123,
37
+ },
38
+ ],
39
+ presets: [],
40
+ };
41
+ const read = (_database, sql) => rows[sql.split(' FROM ')[1]];
42
+ const report = planDesktopImport('unused', config, 'Imported', read);
43
+ expect(report.errors).toEqual([]);
44
+ expect(report.plan.groups[0].members).toEqual(['back']);
45
+ expect(report.plan.entries[0].entry.states.back.gm).toBe(0);
46
+ const library = new LocalLibrary();
47
+ expect(library.importLibrary(report.plan, false)).toMatchObject({ applied: false, created: 2 });
48
+ expect(library.groups()).toEqual([]);
49
+ library.importLibrary(report.plan, true);
50
+ expect(library.importLibrary(report.plan, true)).toMatchObject({ created: 0, unchanged: 2 });
51
+ rows.quickshot_detail = [
52
+ { quick_shot_id: 'cc', node_name: 'unknown', light_mode: 0, parameters: '{}', update_time: 123 },
53
+ ];
54
+ expect(planDesktopImport('unused', config, 'Imported', read).errors[0]).toContain('Unmapped');
55
+ });
56
+ it('imports every supported Desktop effect preset with exact parameter conversion', () => {
57
+ const effectRows = [
58
+ [4, 'Paparazzi', { sleep: false, intensity: 50, frequency: 5, cct: 2500, gm: 70 }],
59
+ [5, 'Lightning', { sleep: false, intensity: 51, frequency: 4, speed: 6, trigger_mode: 2, cct: 3200, gm: 100 }],
60
+ [6, 'TV', { sleep: false, intensity: 52, frequency: 3, cct_type: 2 }],
61
+ [8, 'Fire', { sleep: false, intensity: 53, frequency: 2, cct_type: 1 }],
62
+ [
63
+ 9,
64
+ 'Strobe',
65
+ {
66
+ sleep: false,
67
+ intensity: 54,
68
+ frequency: 6,
69
+ trigger_mode: 1,
70
+ effect_mode: 0,
71
+ cct: 3200,
72
+ gm: 100,
73
+ hue: 100,
74
+ sat: 60,
75
+ },
76
+ ],
77
+ [
78
+ 10,
79
+ 'Explosion',
80
+ {
81
+ sleep: true,
82
+ intensity: 55,
83
+ frequency: 7,
84
+ trigger_mode: 2,
85
+ effect_mode: 0,
86
+ cct: 5600,
87
+ gm: 100,
88
+ hue: 110,
89
+ sat: 61,
90
+ },
91
+ ],
92
+ [
93
+ 11,
94
+ 'Faulty',
95
+ {
96
+ sleep: false,
97
+ intensity: 56,
98
+ frequency: 8,
99
+ speed: 7,
100
+ trigger_mode: 2,
101
+ effect_mode: 1,
102
+ cct: 4300,
103
+ gm: 100,
104
+ hue: 120,
105
+ sat: 80,
106
+ },
107
+ ],
108
+ [
109
+ 12,
110
+ 'Pulsing',
111
+ {
112
+ sleep: false,
113
+ intensity: 57,
114
+ frequency: 9,
115
+ speed: 8,
116
+ trigger_mode: 0,
117
+ effect_mode: 0,
118
+ cct: 4500,
119
+ gm: 100,
120
+ hue: 130,
121
+ sat: 70,
122
+ },
123
+ ],
124
+ [14, 'Cop car', { sleep: false, intensity: 58, frequency: 5, color: 2 }],
125
+ [16, 'Party', { sleep: false, intensity: 59, frequency: 4, sat: 66 }],
126
+ [17, 'Fireworks', { sleep: false, intensity: 60, frequency: 3, type: 1 }],
127
+ ];
128
+ const rows = {
129
+ fixtures: [
130
+ { uuid: 'aa', mac_address: desk.mac, code: '400Q5' },
131
+ { uuid: 'ab', mac_address: light.mac, code: '400J5' },
132
+ ],
133
+ scenes: [],
134
+ scene_detail: [],
135
+ groups: [],
136
+ group_detail: [],
137
+ quick_shots: [],
138
+ quickshot_detail: [],
139
+ presets: effectRows.map(([type, name, data], index) => ({
140
+ id: `${index + 1}`,
141
+ category: 2,
142
+ type,
143
+ name,
144
+ data: JSON.stringify(data),
145
+ update_time: 1000 + index,
146
+ })),
147
+ };
148
+ const read = (_database, sql) => rows[sql.split(' FROM ')[1]];
149
+ const report = planDesktopImport('unused', { ...config, lights: [desk, light] }, 'Desktop', read);
150
+ expect(report.errors).toEqual([]);
151
+ const presets = report.plan.entries.filter((item) => item.collection === 'presets');
152
+ expect(presets).toHaveLength(11);
153
+ expect(presets.map((item) => Object.values(item.entry.states)[0].effect)).toEqual([
154
+ 'paparazzi',
155
+ 'lightning',
156
+ 'tv',
157
+ 'fire',
158
+ 'strobe',
159
+ 'explosion',
160
+ 'faulty-bulb',
161
+ 'pulsing',
162
+ 'cop-car',
163
+ 'party-lights',
164
+ 'fireworks',
165
+ ]);
166
+ expect(presets[0].entry.states.back).toMatchObject({ intensity: 500, cct: 2500, gm: -30 });
167
+ expect(presets[1].entry.states.desk).toMatchObject({ speed: 6, trigger: 2 });
168
+ expect(presets[4].entry.states.desk).toMatchObject({ trigger: 1, cct: 3200 });
169
+ expect(presets[6].entry.states.back).toMatchObject({ hue: 120, sat: 80, speed: 7, trigger: 2 });
170
+ expect(presets[8].entry.states.back).toMatchObject({ palette: 2 });
171
+ expect(presets[9].entry.states.back).toMatchObject({ sat: 66 });
172
+ expect(presets[10].entry.states.desk).toMatchObject({ palette: 1 });
173
+ });
174
+ it('keeps duplicate Desktop names and rejects unrepresentable effect records', () => {
175
+ const rows = {
176
+ fixtures: [{ uuid: 'aa', mac_address: light.mac, code: '400J5' }],
177
+ scenes: [],
178
+ scene_detail: [],
179
+ groups: [],
180
+ group_detail: [],
181
+ quick_shots: [],
182
+ quickshot_detail: [],
183
+ presets: [
184
+ {
185
+ id: 'a1',
186
+ category: 2,
187
+ type: 4,
188
+ name: 'Effect',
189
+ data: '{"sleep":false,"intensity":50,"frequency":5,"cct":2500,"gm":100}',
190
+ update_time: 1,
191
+ },
192
+ {
193
+ id: 'a2',
194
+ category: 2,
195
+ type: 4,
196
+ name: 'Effect',
197
+ data: '{"sleep":false,"intensity":50,"frequency":5,"cct":2500,"gm":100}',
198
+ update_time: 2,
199
+ },
200
+ { id: 'a3', category: 2, type: 3, name: 'Club', data: '{}', update_time: 3 },
201
+ { id: 'a4', category: 1, type: 1, name: 'Color', data: '{}', update_time: 4 },
202
+ ],
203
+ };
204
+ const read = (_database, sql) => rows[sql.split(' FROM ')[1]];
205
+ const report = planDesktopImport('unused', config, 'Imported', read);
206
+ expect(report.plan.entries.map((item) => item.entry.name)).toEqual(['Imported: Effect', 'Imported: Effect (2)']);
207
+ expect(report.errors).toEqual([expect.stringContaining('Unsupported Desktop effect type 3')]);
208
+ expect(report.warnings).toContain('Skipped Desktop preset Color: category 1 is not an effect preset');
209
+ });
210
+ it('validates Desktop effect fields against the destination fixture', () => {
211
+ expect(desktopEffectState(light, 11, {
212
+ sleep: false,
213
+ intensity: 50,
214
+ frequency: 5,
215
+ speed: 4,
216
+ trigger_mode: 1,
217
+ effect_mode: 1,
218
+ cct: 3200,
219
+ gm: 100,
220
+ hue: 240,
221
+ sat: 75,
222
+ }, 123)).toMatchObject({ effect: 'faulty-bulb', intensity: 500, speed: 4, trigger: 1, hue: 240, sat: 75 });
223
+ expect(() => desktopEffectState(desk, 4, { sleep: false, intensity: 50, frequency: 5, cct: 3200, gm: 70 }, 123)).toThrow('non-neutral G/M');
224
+ });
225
+ it('does not silently replace local or native records', () => {
226
+ const library = new LocalLibrary();
227
+ const plan = { groups: [{ id: 'group:desktop:test', name: 'Imported', members: ['back'] }], entries: [] };
228
+ library.importLibrary(plan, true);
229
+ expect(() => library.importLibrary({ ...plan, groups: [{ ...plan.groups[0], name: 'Changed' }] }, true)).toThrow('replacement');
230
+ library.setNativeGroup(plan.groups[0].id, { address: 0xc100, managed: ['back'], status: 'ready' });
231
+ expect(() => library.importLibrary(plan, true, true)).toThrow('native subscriptions');
232
+ });
233
+ });
234
+ //# sourceMappingURL=desktopImport.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"desktopImport.test.js","sourceRoot":"","sources":["../../src/__tests__/desktopImport.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=lightControl.basic.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lightControl.basic.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/lightControl.basic.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,119 @@
1
+ import { setupLightControllerSuite, TEST_NODE_ID } from './lightControlTestUtils.js';
2
+ describe('LightController basic light commands', () => {
3
+ const fixture = setupLightControllerSuite(18089);
4
+ it('should initialize and fetch devices', async () => {
5
+ const controller = await fixture.createReadyController(() => {
6
+ expect(fixture.controller?.getDevices().length).toBe(2);
7
+ });
8
+ expect(controller.getDevices().length).toBe(2);
9
+ }, 5000);
10
+ it('should turn on all lights', async () => {
11
+ const controller = await fixture.createReadyController();
12
+ await new Promise((resolve) => {
13
+ controller.turnOnAllLights((success, msg) => {
14
+ expect(success).toBe(true);
15
+ expect(msg).toBe('OK');
16
+ resolve();
17
+ });
18
+ });
19
+ const state = fixture.server.getDeviceState(TEST_NODE_ID);
20
+ expect(state?.sleep).toBe(false);
21
+ }, 5000);
22
+ it('should turn off all lights', async () => {
23
+ const controller = await fixture.createReadyController();
24
+ await new Promise((resolve) => {
25
+ controller.turnOffAllLights((success, msg) => {
26
+ expect(success).toBe(true);
27
+ expect(msg).toBe('OK');
28
+ resolve();
29
+ });
30
+ });
31
+ const state = fixture.server.getDeviceState(TEST_NODE_ID);
32
+ expect(state?.sleep).toBe(true);
33
+ }, 5000);
34
+ it('should toggle all lights', async () => {
35
+ const controller = await fixture.createReadyController();
36
+ await new Promise((resolve) => {
37
+ controller.toggleAllLights((success, msg) => {
38
+ expect(success).toBe(true);
39
+ expect(msg).toBe('OK');
40
+ resolve();
41
+ });
42
+ });
43
+ const state = fixture.server.getDeviceState(TEST_NODE_ID);
44
+ expect(state?.sleep).toBe(true);
45
+ await new Promise((resolve) => {
46
+ controller.toggleAllLights((success, msg) => {
47
+ expect(success).toBe(true);
48
+ expect(msg).toBe('OK');
49
+ resolve();
50
+ });
51
+ });
52
+ const state2 = fixture.server.getDeviceState(TEST_NODE_ID);
53
+ expect(state2?.sleep).toBe(false);
54
+ }, 5000);
55
+ it('should set intensity for all lights', async () => {
56
+ const controller = await fixture.createReadyController();
57
+ await new Promise((resolve) => {
58
+ controller.setIntensityForAllLights(100, (success, msg) => {
59
+ expect(success).toBe(true);
60
+ expect(msg).toBe('OK');
61
+ resolve();
62
+ });
63
+ });
64
+ const state = fixture.server.getDeviceState(TEST_NODE_ID);
65
+ expect(state?.intensity).toBe(100);
66
+ }, 5000);
67
+ it('should increment intensity for all lights', async () => {
68
+ const controller = await fixture.createReadyController();
69
+ await new Promise((resolve) => {
70
+ controller.setIntensityForAllLights(500, (success) => {
71
+ expect(success).toBe(true);
72
+ resolve();
73
+ });
74
+ });
75
+ await new Promise((resolve) => {
76
+ controller.incrementIntensityForAllLights(100, (success, msg) => {
77
+ expect(success).toBe(true);
78
+ expect(msg).toBe('OK');
79
+ resolve();
80
+ });
81
+ });
82
+ const state = fixture.server.getDeviceState(TEST_NODE_ID);
83
+ expect(state?.intensity).toBe(600);
84
+ }, 5000);
85
+ it('should set CCT for all lights', async () => {
86
+ const controller = await fixture.createReadyController();
87
+ await new Promise((resolve) => {
88
+ controller.setCCTAndIntensityForAllLights(5600, 100, (success, msg) => {
89
+ expect(success).toBe(true);
90
+ expect(msg).toBe('OK');
91
+ resolve();
92
+ });
93
+ });
94
+ const state = fixture.server.getDeviceState(TEST_NODE_ID);
95
+ expect(state?.cct).toBe(5600);
96
+ expect(state?.intensity).toBe(100);
97
+ expect(state?.work_mode).toBe('CCT');
98
+ }, 5000);
99
+ it('should increment CCT for all lights', async () => {
100
+ const controller = await fixture.createReadyController();
101
+ await new Promise((resolve) => {
102
+ controller.setCCTAndIntensityForAllLights(3200, 100, (success) => {
103
+ expect(success).toBe(true);
104
+ resolve();
105
+ });
106
+ });
107
+ await new Promise((resolve) => {
108
+ controller.incrementCCTForAllLights(100, 200, (success, msg) => {
109
+ expect(success).toBe(true);
110
+ expect(msg).toBe('OK');
111
+ resolve();
112
+ });
113
+ });
114
+ const state = fixture.server.getDeviceState(TEST_NODE_ID);
115
+ expect(state?.cct).toBe(3300);
116
+ expect(state?.intensity).toBe(200);
117
+ }, 5000);
118
+ });
119
+ //# sourceMappingURL=lightControl.basic.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lightControl.basic.test.js","sourceRoot":"","sources":["../../src/__tests__/lightControl.basic.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAErF,QAAQ,CAAC,sCAAsC,EAAE,GAAG,EAAE;IACpD,MAAM,OAAO,GAAG,yBAAyB,CAAC,KAAK,CAAC,CAAC;IAEjD,EAAE,CAAC,qCAAqC,EAAE,KAAK,IAAI,EAAE;QACnD,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,qBAAqB,CAAC,GAAG,EAAE;YAC1D,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,UAAU,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC1D,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjD,CAAC,EAAE,IAAI,CAAC,CAAC;IAET,EAAE,CAAC,2BAA2B,EAAE,KAAK,IAAI,EAAE;QACzC,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,qBAAqB,EAAE,CAAC;QAEzD,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YAClC,UAAU,CAAC,eAAe,CAAC,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE;gBAC1C,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC3B,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACvB,OAAO,EAAE,CAAC;YACZ,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QAC1D,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC,EAAE,IAAI,CAAC,CAAC;IAET,EAAE,CAAC,4BAA4B,EAAE,KAAK,IAAI,EAAE;QAC1C,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,qBAAqB,EAAE,CAAC;QAEzD,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YAClC,UAAU,CAAC,gBAAgB,CAAC,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE;gBAC3C,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC3B,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACvB,OAAO,EAAE,CAAC;YACZ,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QAC1D,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC,EAAE,IAAI,CAAC,CAAC;IAET,EAAE,CAAC,0BAA0B,EAAE,KAAK,IAAI,EAAE;QACxC,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,qBAAqB,EAAE,CAAC;QAEzD,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YAClC,UAAU,CAAC,eAAe,CAAC,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE;gBAC1C,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC3B,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACvB,OAAO,EAAE,CAAC;YACZ,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QAC1D,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEhC,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YAClC,UAAU,CAAC,eAAe,CAAC,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE;gBAC1C,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC3B,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACvB,OAAO,EAAE,CAAC;YACZ,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QAC3D,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC,EAAE,IAAI,CAAC,CAAC;IAET,EAAE,CAAC,qCAAqC,EAAE,KAAK,IAAI,EAAE;QACnD,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,qBAAqB,EAAE,CAAC;QAEzD,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YAClC,UAAU,CAAC,wBAAwB,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE;gBACxD,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC3B,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACvB,OAAO,EAAE,CAAC;YACZ,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QAC1D,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACrC,CAAC,EAAE,IAAI,CAAC,CAAC;IAET,EAAE,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;QACzD,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,qBAAqB,EAAE,CAAC;QAEzD,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YAClC,UAAU,CAAC,wBAAwB,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,EAAE;gBACnD,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC3B,OAAO,EAAE,CAAC;YACZ,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YAClC,UAAU,CAAC,8BAA8B,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE;gBAC9D,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC3B,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACvB,OAAO,EAAE,CAAC;YACZ,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QAC1D,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACrC,CAAC,EAAE,IAAI,CAAC,CAAC;IAET,EAAE,CAAC,+BAA+B,EAAE,KAAK,IAAI,EAAE;QAC7C,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,qBAAqB,EAAE,CAAC;QAEzD,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YAClC,UAAU,CAAC,8BAA8B,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE;gBACpE,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC3B,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACvB,OAAO,EAAE,CAAC;YACZ,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QAC1D,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9B,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACnC,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACvC,CAAC,EAAE,IAAI,CAAC,CAAC;IAET,EAAE,CAAC,qCAAqC,EAAE,KAAK,IAAI,EAAE;QACnD,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,qBAAqB,EAAE,CAAC;QAEzD,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YAClC,UAAU,CAAC,8BAA8B,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,EAAE;gBAC/D,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC3B,OAAO,EAAE,CAAC;YACZ,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YAClC,UAAU,CAAC,wBAAwB,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE;gBAC7D,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC3B,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACvB,OAAO,EAAE,CAAC;YACZ,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QAC1D,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9B,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACrC,CAAC,EAAE,IAAI,CAAC,CAAC;AACX,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=lightControl.colorEffects.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lightControl.colorEffects.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/lightControl.colorEffects.test.ts"],"names":[],"mappings":""}