amaran-light-cli 1.0.2

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 (97) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +374 -0
  3. package/dist/__tests__/autoCct.test.d.ts +2 -0
  4. package/dist/__tests__/autoCct.test.d.ts.map +1 -0
  5. package/dist/__tests__/autoCct.test.js +65 -0
  6. package/dist/__tests__/autoCct.test.js.map +1 -0
  7. package/dist/__tests__/cctUtil.test.d.ts +2 -0
  8. package/dist/__tests__/cctUtil.test.d.ts.map +1 -0
  9. package/dist/__tests__/cctUtil.test.js +195 -0
  10. package/dist/__tests__/cctUtil.test.js.map +1 -0
  11. package/dist/__tests__/cli.smoke.test.d.ts +2 -0
  12. package/dist/__tests__/cli.smoke.test.d.ts.map +1 -0
  13. package/dist/__tests__/cli.smoke.test.js +18 -0
  14. package/dist/__tests__/cli.smoke.test.js.map +1 -0
  15. package/dist/__tests__/intensityApi.test.d.ts +2 -0
  16. package/dist/__tests__/intensityApi.test.d.ts.map +1 -0
  17. package/dist/__tests__/intensityApi.test.js +105 -0
  18. package/dist/__tests__/intensityApi.test.js.map +1 -0
  19. package/dist/__tests__/lightControl.test.d.ts +2 -0
  20. package/dist/__tests__/lightControl.test.d.ts.map +1 -0
  21. package/dist/__tests__/lightControl.test.js +185 -0
  22. package/dist/__tests__/lightControl.test.js.map +1 -0
  23. package/dist/cctUtil.d.ts +26 -0
  24. package/dist/cctUtil.d.ts.map +1 -0
  25. package/dist/cctUtil.js +93 -0
  26. package/dist/cctUtil.js.map +1 -0
  27. package/dist/cli.d.ts +10 -0
  28. package/dist/cli.d.ts.map +1 -0
  29. package/dist/cli.js +274 -0
  30. package/dist/cli.js.map +1 -0
  31. package/dist/commands/autoCct.d.ts +5 -0
  32. package/dist/commands/autoCct.d.ts.map +1 -0
  33. package/dist/commands/autoCct.js +270 -0
  34. package/dist/commands/autoCct.js.map +1 -0
  35. package/dist/commands/cct.d.ts +5 -0
  36. package/dist/commands/cct.d.ts.map +1 -0
  37. package/dist/commands/cct.js +68 -0
  38. package/dist/commands/cct.js.map +1 -0
  39. package/dist/commands/color.d.ts +5 -0
  40. package/dist/commands/color.d.ts.map +1 -0
  41. package/dist/commands/color.js +63 -0
  42. package/dist/commands/color.js.map +1 -0
  43. package/dist/commands/discover.d.ts +5 -0
  44. package/dist/commands/discover.d.ts.map +1 -0
  45. package/dist/commands/discover.js +30 -0
  46. package/dist/commands/discover.js.map +1 -0
  47. package/dist/commands/hsi.d.ts +5 -0
  48. package/dist/commands/hsi.d.ts.map +1 -0
  49. package/dist/commands/hsi.js +65 -0
  50. package/dist/commands/hsi.js.map +1 -0
  51. package/dist/commands/intensity.d.ts +5 -0
  52. package/dist/commands/intensity.d.ts.map +1 -0
  53. package/dist/commands/intensity.js +56 -0
  54. package/dist/commands/intensity.js.map +1 -0
  55. package/dist/commands/list.d.ts +5 -0
  56. package/dist/commands/list.d.ts.map +1 -0
  57. package/dist/commands/list.js +36 -0
  58. package/dist/commands/list.js.map +1 -0
  59. package/dist/commands/power.d.ts +5 -0
  60. package/dist/commands/power.d.ts.map +1 -0
  61. package/dist/commands/power.js +126 -0
  62. package/dist/commands/power.js.map +1 -0
  63. package/dist/commands/schedule.d.ts +5 -0
  64. package/dist/commands/schedule.d.ts.map +1 -0
  65. package/dist/commands/schedule.js +188 -0
  66. package/dist/commands/schedule.js.map +1 -0
  67. package/dist/commands/service.d.ts +5 -0
  68. package/dist/commands/service.d.ts.map +1 -0
  69. package/dist/commands/service.js +350 -0
  70. package/dist/commands/service.js.map +1 -0
  71. package/dist/commands/status.d.ts +5 -0
  72. package/dist/commands/status.d.ts.map +1 -0
  73. package/dist/commands/status.js +54 -0
  74. package/dist/commands/status.js.map +1 -0
  75. package/dist/commands.d.ts +5 -0
  76. package/dist/commands.d.ts.map +1 -0
  77. package/dist/commands.js +31 -0
  78. package/dist/commands.js.map +1 -0
  79. package/dist/discovery.d.ts +13 -0
  80. package/dist/discovery.d.ts.map +1 -0
  81. package/dist/discovery.js +130 -0
  82. package/dist/discovery.js.map +1 -0
  83. package/dist/geoipUtil.d.ts +8 -0
  84. package/dist/geoipUtil.d.ts.map +1 -0
  85. package/dist/geoipUtil.js +26 -0
  86. package/dist/geoipUtil.js.map +1 -0
  87. package/dist/lightControl.d.ts +114 -0
  88. package/dist/lightControl.d.ts.map +1 -0
  89. package/dist/lightControl.js +385 -0
  90. package/dist/lightControl.js.map +1 -0
  91. package/dist/types.d.ts +37 -0
  92. package/dist/types.d.ts.map +1 -0
  93. package/dist/types.js +3 -0
  94. package/dist/types.js.map +1 -0
  95. package/package.json +75 -0
  96. package/scripts/create-launchd-service.sh +114 -0
  97. package/scripts/run-auto-cct.sh +43 -0
@@ -0,0 +1,68 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.registerCct = registerCct;
7
+ const chalk_1 = __importDefault(require("chalk"));
8
+ function registerCct(program, deps) {
9
+ const { createController, findDevice, asyncCommand } = deps;
10
+ program
11
+ .command('cct <temperature> [device]')
12
+ .description('Set color temperature in Kelvin (2000-6500). Omit device or use "all" to set all lights.')
13
+ .option('-i, --intensity <value>', 'Also set intensity (0-100)')
14
+ .option('-u, --url <url>', 'WebSocket URL')
15
+ .option('-c, --client-id <id>', 'Client ID')
16
+ .option('-d, --debug', 'Enable debug mode')
17
+ .action(asyncCommand(async (tempStr, deviceQuery, options) => {
18
+ const temperature = parseInt(tempStr, 10);
19
+ if (Number.isNaN(temperature) || temperature < 2000 || temperature > 6500) {
20
+ console.error(chalk_1.default.red('Temperature must be between 2000K and 6500K'));
21
+ process.exit(1);
22
+ }
23
+ let intensity;
24
+ if (options.intensity) {
25
+ intensity = parseInt(options.intensity, 10);
26
+ if (Number.isNaN(intensity) || intensity < 0 || intensity > 100) {
27
+ console.error(chalk_1.default.red('Intensity must be a number between 0 and 100'));
28
+ process.exit(1);
29
+ }
30
+ intensity = intensity * 10;
31
+ }
32
+ const controller = await createController(options.url, options.clientId, options.debug);
33
+ if (!deviceQuery || deviceQuery.toLowerCase() === 'all') {
34
+ await controller.setCCTAndIntensityForAllLights(temperature, intensity, (success, message) => {
35
+ if (!success) {
36
+ console.error(chalk_1.default.red(`✗ Failed to set temperature: ${message}`));
37
+ }
38
+ });
39
+ await controller.disconnect();
40
+ return;
41
+ }
42
+ const device = findDevice(controller, deviceQuery);
43
+ if (!device) {
44
+ console.error(chalk_1.default.red(`Device "${deviceQuery}" not found`));
45
+ process.exit(1);
46
+ }
47
+ if (!device.node_id) {
48
+ console.error(chalk_1.default.red(`Device "${deviceQuery}" has no node_id`));
49
+ process.exit(1);
50
+ }
51
+ controller.setCCT(device.node_id, temperature, intensity, (success, message) => {
52
+ if (success) {
53
+ const displayName = device.device_name || device.name || device.id || device.node_id || 'Unknown';
54
+ let msg = `✓ ${displayName} temperature set to ${temperature}K`;
55
+ if (intensity !== undefined) {
56
+ msg += ` at ${intensity / 10}% intensity`;
57
+ }
58
+ console.log(chalk_1.default.green(msg));
59
+ }
60
+ else {
61
+ console.error(chalk_1.default.red(`✗ Failed to set temperature: ${message}`));
62
+ }
63
+ controller.disconnect();
64
+ });
65
+ }));
66
+ }
67
+ exports.default = registerCct;
68
+ //# sourceMappingURL=cct.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cct.js","sourceRoot":"","sources":["../../src/commands/cct.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { Command } from 'commander';
2
+ import type { CommandDeps } from '../types';
3
+ export declare function registerColor(program: Command, deps: CommandDeps): void;
4
+ export default registerColor;
5
+ //# sourceMappingURL=color.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"color.d.ts","sourceRoot":"","sources":["../../src/commands/color.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,WAAW,EAAkB,MAAM,UAAU,CAAC;AAE5D,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,QA0EhE;AAED,eAAe,aAAa,CAAC"}
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.registerColor = registerColor;
7
+ const chalk_1 = __importDefault(require("chalk"));
8
+ function registerColor(program, deps) {
9
+ const { createController, findDevice, asyncCommand } = deps;
10
+ program
11
+ .command('color <color> [device]')
12
+ .description('Set color by name or hex code (e.g., "red", "#ff0000"). Omit device or use "all" to set all lights.')
13
+ .option('-i, --intensity <value>', 'Set intensity (0-100)')
14
+ .option('-u, --url <url>', 'WebSocket URL')
15
+ .option('-c, --client-id <id>', 'Client ID')
16
+ .option('-d, --debug', 'Enable debug mode')
17
+ .action(asyncCommand(async (color, deviceQuery, options) => {
18
+ let intensity;
19
+ if (options.intensity) {
20
+ intensity = parseInt(options.intensity, 10);
21
+ if (Number.isNaN(intensity) || intensity < 0 || intensity > 100) {
22
+ console.error(chalk_1.default.red('Intensity must be a number between 0 and 100'));
23
+ process.exit(1);
24
+ }
25
+ intensity = intensity * 10;
26
+ }
27
+ const controller = await createController(options.url, options.clientId, options.debug);
28
+ if (!deviceQuery || deviceQuery.toLowerCase() === 'all') {
29
+ await controller.setColorForAllLights(color, intensity, (success, message) => {
30
+ if (!success) {
31
+ console.error(chalk_1.default.red(`✗ Failed to set color: ${message}`));
32
+ }
33
+ });
34
+ await controller.disconnect();
35
+ return;
36
+ }
37
+ const device = findDevice(controller, deviceQuery);
38
+ if (!device) {
39
+ console.error(chalk_1.default.red(`Device "${deviceQuery}" not found`));
40
+ process.exit(1);
41
+ }
42
+ if (!device.node_id) {
43
+ console.error(chalk_1.default.red(`Device "${deviceQuery}" has no node_id`));
44
+ process.exit(1);
45
+ }
46
+ controller.setColor(device.node_id, color, intensity, (success, message) => {
47
+ if (success) {
48
+ const displayName = device.device_name || device.name || device.id || device.node_id || 'Unknown';
49
+ let msg = `✓ ${displayName} color set to ${color}`;
50
+ if (intensity !== undefined) {
51
+ msg += ` at ${intensity / 10}% intensity`;
52
+ }
53
+ console.log(chalk_1.default.green(msg));
54
+ }
55
+ else {
56
+ console.error(chalk_1.default.red(`✗ Failed to set color: ${message}`));
57
+ }
58
+ controller.disconnect();
59
+ });
60
+ }));
61
+ }
62
+ exports.default = registerColor;
63
+ //# sourceMappingURL=color.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"color.js","sourceRoot":"","sources":["../../src/commands/color.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { Command } from 'commander';
2
+ import type { CommandDeps } from '../types';
3
+ export declare function registerDiscover(program: Command, deps: CommandDeps): void;
4
+ export default registerDiscover;
5
+ //# sourceMappingURL=discover.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discover.d.ts","sourceRoot":"","sources":["../../src/commands/discover.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEzC,OAAO,KAAK,EAAE,WAAW,EAAkB,MAAM,UAAU,CAAC;AAE5D,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,QAqBnE;AAED,eAAe,gBAAgB,CAAC"}
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.registerDiscover = registerDiscover;
7
+ const chalk_1 = __importDefault(require("chalk"));
8
+ const discovery_1 = require("../discovery");
9
+ function registerDiscover(program, deps) {
10
+ const { asyncCommand, saveWsUrl } = deps;
11
+ program
12
+ .command('discover')
13
+ .description('Discover local Amaran WebSocket endpoint')
14
+ .option('-d, --debug', 'Enable debug output')
15
+ .action(asyncCommand(async (options) => {
16
+ const res = await (0, discovery_1.discoverLocalWebSocket)('127.0.0.1', !!options.debug);
17
+ if (res) {
18
+ console.log(chalk_1.default.green(`Found WebSocket: ${res.url} (process: ${res.process})`));
19
+ if (saveWsUrl) {
20
+ saveWsUrl(res.url);
21
+ console.log(chalk_1.default.green('Saved to configuration.'));
22
+ }
23
+ }
24
+ else {
25
+ console.log(chalk_1.default.yellow('No local Amaran WebSocket found via lsof'));
26
+ }
27
+ }));
28
+ }
29
+ exports.default = registerDiscover;
30
+ //# sourceMappingURL=discover.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discover.js","sourceRoot":"","sources":["../../src/commands/discover.ts"],"names":[],"mappings":";;;;;AAKA,4CAqBC;AA1BD,kDAA0B;AAE1B,4CAAsD;AAGtD,SAAgB,gBAAgB,CAAC,OAAgB,EAAE,IAAiB;IAClE,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;IAEzC,OAAO;SACJ,OAAO,CAAC,UAAU,CAAC;SACnB,WAAW,CAAC,0CAA0C,CAAC;SACvD,MAAM,CAAC,aAAa,EAAE,qBAAqB,CAAC;SAC5C,MAAM,CACL,YAAY,CAAC,KAAK,EAAE,OAAuB,EAAE,EAAE;QAC7C,MAAM,GAAG,GAAG,MAAM,IAAA,kCAAsB,EAAC,WAAW,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACvE,IAAI,GAAG,EAAE,CAAC;YACR,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,oBAAoB,GAAG,CAAC,GAAG,cAAc,GAAG,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;YAClF,IAAI,SAAS,EAAE,CAAC;gBACd,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACnB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC,CAAC;YACtD,CAAC;QACH,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,0CAA0C,CAAC,CAAC,CAAC;QACxE,CAAC;IACH,CAAC,CAAC,CACH,CAAC;AACN,CAAC;AAED,kBAAe,gBAAgB,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { Command } from 'commander';
2
+ import type { CommandDeps } from '../types';
3
+ export declare function registerHsi(program: Command, deps: CommandDeps): void;
4
+ export default registerHsi;
5
+ //# sourceMappingURL=hsi.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hsi.d.ts","sourceRoot":"","sources":["../../src/commands/hsi.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,WAAW,EAAkB,MAAM,UAAU,CAAC;AAE5D,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,QA8F9D;AAED,eAAe,WAAW,CAAC"}
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.registerHsi = registerHsi;
7
+ const chalk_1 = __importDefault(require("chalk"));
8
+ function registerHsi(program, deps) {
9
+ const { createController, findDevice, asyncCommand } = deps;
10
+ program
11
+ .command('hsi <hue> <saturation> <intensity> [device]')
12
+ .description('Set HSI color (hue: 0-360, saturation: 0-100, intensity: 0-100). Omit device or use "all" to set all lights.')
13
+ .option('-u, --url <url>', 'WebSocket URL')
14
+ .option('-c, --client-id <id>', 'Client ID')
15
+ .option('-d, --debug', 'Enable debug mode')
16
+ .action(asyncCommand(async (hueStr, satStr, intStr, deviceQuery, options) => {
17
+ const hue = parseInt(hueStr, 10);
18
+ const saturation = parseInt(satStr, 10);
19
+ const intensity = parseInt(intStr, 10);
20
+ if (Number.isNaN(hue) || hue < 0 || hue > 360) {
21
+ console.error(chalk_1.default.red('Hue must be between 0 and 360'));
22
+ process.exit(1);
23
+ }
24
+ if (Number.isNaN(saturation) || saturation < 0 || saturation > 100) {
25
+ console.error(chalk_1.default.red('Saturation must be between 0 and 100'));
26
+ process.exit(1);
27
+ }
28
+ if (Number.isNaN(intensity) || intensity < 0 || intensity > 100) {
29
+ console.error(chalk_1.default.red('Intensity must be between 0 and 100'));
30
+ process.exit(1);
31
+ }
32
+ const apiIntensity = intensity * 10;
33
+ const controller = await createController(options.url, options.clientId, options.debug);
34
+ if (!deviceQuery || deviceQuery.toLowerCase() === 'all') {
35
+ await controller.setHSIForAllLights(hue, saturation, apiIntensity, undefined, undefined, (success, message) => {
36
+ if (!success) {
37
+ console.error(chalk_1.default.red(`✗ Failed to set HSI color: ${message}`));
38
+ }
39
+ });
40
+ await controller.disconnect();
41
+ return;
42
+ }
43
+ const device = findDevice(controller, deviceQuery);
44
+ if (!device) {
45
+ console.error(chalk_1.default.red(`Device "${deviceQuery}" not found`));
46
+ process.exit(1);
47
+ }
48
+ if (!device.node_id) {
49
+ console.error(chalk_1.default.red(`Device "${deviceQuery}" has no node_id`));
50
+ process.exit(1);
51
+ }
52
+ controller.setHSI(device.node_id, hue, saturation, apiIntensity, undefined, undefined, (success, message) => {
53
+ if (success) {
54
+ const displayName = device.device_name || device.name || device.id || device.node_id || 'Unknown';
55
+ console.log(chalk_1.default.green(`✓ ${displayName} color set to H:${hue} S:${saturation} I:${intensity}`));
56
+ }
57
+ else {
58
+ console.error(chalk_1.default.red(`✗ Failed to set HSI color: ${message}`));
59
+ }
60
+ controller.disconnect();
61
+ });
62
+ }));
63
+ }
64
+ exports.default = registerHsi;
65
+ //# sourceMappingURL=hsi.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hsi.js","sourceRoot":"","sources":["../../src/commands/hsi.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { Command } from 'commander';
2
+ import type { CommandDeps } from '../types';
3
+ export declare function registerIntensity(program: Command, deps: CommandDeps): void;
4
+ export default registerIntensity;
5
+ //# sourceMappingURL=intensity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"intensity.d.ts","sourceRoot":"","sources":["../../src/commands/intensity.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,WAAW,EAAkB,MAAM,UAAU,CAAC;AAE5D,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,QAgEpE;AAED,eAAe,iBAAiB,CAAC"}
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.registerIntensity = registerIntensity;
7
+ const chalk_1 = __importDefault(require("chalk"));
8
+ function registerIntensity(program, deps) {
9
+ const { createController, findDevice, asyncCommand } = deps;
10
+ program
11
+ .command('intensity <value> [device]')
12
+ .description('Set light intensity (0-100). Omit device or use "all" to set all lights.')
13
+ .option('-u, --url <url>', 'WebSocket URL')
14
+ .option('-c, --client-id <id>', 'Client ID')
15
+ .option('-d, --debug', 'Enable debug mode')
16
+ .action(asyncCommand(async (intensityStr, deviceQuery, options) => {
17
+ const intensity = parseInt(intensityStr, 10);
18
+ if (Number.isNaN(intensity) || intensity < 0 || intensity > 100) {
19
+ console.error(chalk_1.default.red('Intensity must be a number between 0 and 100'));
20
+ process.exit(1);
21
+ }
22
+ const controller = await createController(options.url, options.clientId, options.debug);
23
+ // Convert 0-100 user input to 0-1000 API range
24
+ const apiIntensity = intensity * 10;
25
+ if (!deviceQuery || deviceQuery.toLowerCase() === 'all') {
26
+ await controller.setIntensityForAllLights(apiIntensity, (success, message) => {
27
+ if (!success) {
28
+ console.error(chalk_1.default.red(`✗ Failed to set intensity: ${message}`));
29
+ }
30
+ });
31
+ await controller.disconnect();
32
+ return;
33
+ }
34
+ const device = findDevice(controller, deviceQuery);
35
+ if (!device) {
36
+ console.error(chalk_1.default.red(`Device "${deviceQuery}" not found`));
37
+ process.exit(1);
38
+ }
39
+ if (!device.node_id) {
40
+ console.error(chalk_1.default.red(`Device "${deviceQuery}" has no node_id`));
41
+ process.exit(1);
42
+ }
43
+ controller.setIntensity(device.node_id, apiIntensity, (success, message) => {
44
+ if (success) {
45
+ const displayName = device.device_name || device.name || device.id || device.node_id || 'Unknown';
46
+ console.log(chalk_1.default.green(`✓ ${displayName} intensity set to ${intensity}%`));
47
+ }
48
+ else {
49
+ console.error(chalk_1.default.red(`✗ Failed to set intensity: ${message}`));
50
+ }
51
+ controller.disconnect();
52
+ });
53
+ }));
54
+ }
55
+ exports.default = registerIntensity;
56
+ //# sourceMappingURL=intensity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"intensity.js","sourceRoot":"","sources":["../../src/commands/intensity.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { Command } from 'commander';
2
+ import type { CommandDeps } from '../types';
3
+ export declare function registerList(program: Command, deps: CommandDeps): void;
4
+ export default registerList;
5
+ //# sourceMappingURL=list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,WAAW,EAAkB,MAAM,UAAU,CAAC;AAE5D,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,QAoC/D;AAED,eAAe,YAAY,CAAC"}
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.registerList = registerList;
7
+ const chalk_1 = __importDefault(require("chalk"));
8
+ function registerList(program, deps) {
9
+ const { createController, asyncCommand } = deps;
10
+ program
11
+ .command('list')
12
+ .alias('ls')
13
+ .description('List all available lights')
14
+ .option('-u, --url <url>', 'WebSocket URL')
15
+ .option('-c, --client-id <id>', 'Client ID')
16
+ .option('-d, --debug', 'Enable debug mode')
17
+ .action(asyncCommand(async (options) => {
18
+ const controller = await createController(options.url, options.clientId, options.debug);
19
+ const devices = controller.getDevices();
20
+ if (devices.length === 0) {
21
+ console.log(chalk_1.default.yellow('No devices found'));
22
+ return;
23
+ }
24
+ console.log(chalk_1.default.blue('Available lights:'));
25
+ devices.forEach((device, index) => {
26
+ const displayName = device.device_name || device.name || device.id || device.node_id || 'Unknown';
27
+ console.log(`${index + 1}. ${chalk_1.default.green(displayName)} (${chalk_1.default.gray(device.node_id || device.id || '?')})`);
28
+ if (device.device_type) {
29
+ console.log(` Type: ${device.device_type}`);
30
+ }
31
+ });
32
+ await controller.disconnect();
33
+ }));
34
+ }
35
+ exports.default = registerList;
36
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":";;;;;AAIA,oCAoCC;AAxCD,kDAA0B;AAI1B,SAAgB,YAAY,CAAC,OAAgB,EAAE,IAAiB;IAC9D,MAAM,EAAE,gBAAgB,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC;IAEhD,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,KAAK,CAAC,IAAI,CAAC;SACX,WAAW,CAAC,2BAA2B,CAAC;SACxC,MAAM,CAAC,iBAAiB,EAAE,eAAe,CAAC;SAC1C,MAAM,CAAC,sBAAsB,EAAE,WAAW,CAAC;SAC3C,MAAM,CAAC,aAAa,EAAE,mBAAmB,CAAC;SAC1C,MAAM,CACL,YAAY,CAAC,KAAK,EAAE,OAAuB,EAAE,EAAE;QAC7C,MAAM,UAAU,GAAG,MAAM,gBAAgB,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;QAExF,MAAM,OAAO,GAAG,UAAU,CAAC,UAAU,EAAE,CAAC;QAExC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,CAAC;YAC9C,OAAO;QACT,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC;QAC7C,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,KAAa,EAAE,EAAE;YACxC,MAAM,WAAW,GACf,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,EAAE,IAAI,MAAM,CAAC,OAAO,IAAI,SAAS,CAAC;YAChF,OAAO,CAAC,GAAG,CACT,GAAG,KAAK,GAAG,CAAC,KAAK,eAAK,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,eAAK,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,EAAE,IAAI,GAAG,CAAC,GAAG,CAChG,CAAC;YACF,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;gBACvB,OAAO,CAAC,GAAG,CAAC,YAAY,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;YAChD,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,MAAM,UAAU,CAAC,UAAU,EAAE,CAAC;IAChC,CAAC,CAAC,CACH,CAAC;AACN,CAAC;AAED,kBAAe,YAAY,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { Command } from 'commander';
2
+ import type { CommandDeps } from '../types';
3
+ export declare function registerPower(program: Command, deps: CommandDeps): void;
4
+ export default registerPower;
5
+ //# sourceMappingURL=power.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"power.d.ts","sourceRoot":"","sources":["../../src/commands/power.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,WAAW,EAAkB,MAAM,UAAU,CAAC;AAE5D,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,QAyIhE;AAED,eAAe,aAAa,CAAC"}
@@ -0,0 +1,126 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.registerPower = registerPower;
7
+ const chalk_1 = __importDefault(require("chalk"));
8
+ function registerPower(program, deps) {
9
+ const { createController, findDevice, asyncCommand } = deps;
10
+ // on
11
+ program
12
+ .command('on [device]')
13
+ .description('Turn a light on (or all lights if no device specified)')
14
+ .option('-u, --url <url>', 'WebSocket URL')
15
+ .option('-c, --client-id <id>', 'Client ID')
16
+ .option('-d, --debug', 'Enable debug mode')
17
+ .action(asyncCommand(async (deviceQuery, options) => {
18
+ const controller = await createController(options.url, options.clientId, options.debug);
19
+ if (!deviceQuery || deviceQuery.toLowerCase() === 'all') {
20
+ await controller.turnOnAllLights((success, message) => {
21
+ if (!success) {
22
+ console.error(chalk_1.default.red(`✗ Failed to turn on light: ${message}`));
23
+ }
24
+ });
25
+ await controller.disconnect();
26
+ return;
27
+ }
28
+ const device = findDevice(controller, deviceQuery);
29
+ if (!device) {
30
+ console.error(chalk_1.default.red(`Device "${deviceQuery}" not found`));
31
+ process.exit(1);
32
+ }
33
+ if (!device.node_id) {
34
+ console.error(chalk_1.default.red(`Device "${deviceQuery}" has no node_id`));
35
+ process.exit(1);
36
+ }
37
+ controller.turnLightOn(device.node_id, (success, message) => {
38
+ if (success) {
39
+ const displayName = device.device_name || device.name || device.id || device.node_id || 'Unknown';
40
+ console.log(chalk_1.default.green(`✓ ${displayName} turned on`));
41
+ }
42
+ else {
43
+ console.error(chalk_1.default.red(`✗ Failed to turn on light: ${message}`));
44
+ }
45
+ controller.disconnect();
46
+ });
47
+ }));
48
+ // off
49
+ program
50
+ .command('off [device]')
51
+ .description('Turn a light off (or all lights if no device specified)')
52
+ .option('-u, --url <url>', 'WebSocket URL')
53
+ .option('-c, --client-id <id>', 'Client ID')
54
+ .option('-d, --debug', 'Enable debug mode')
55
+ .action(asyncCommand(async (deviceQuery, options) => {
56
+ const controller = await createController(options.url, options.clientId, options.debug);
57
+ if (!deviceQuery || deviceQuery.toLowerCase() === 'all') {
58
+ await controller.turnOffAllLights((success, message) => {
59
+ if (!success) {
60
+ console.error(chalk_1.default.red(`✗ Failed to turn off light: ${message}`));
61
+ }
62
+ });
63
+ await controller.disconnect();
64
+ return;
65
+ }
66
+ const device = findDevice(controller, deviceQuery);
67
+ if (!device) {
68
+ console.error(chalk_1.default.red(`Device "${deviceQuery}" not found`));
69
+ process.exit(1);
70
+ }
71
+ if (!device.node_id) {
72
+ console.error(chalk_1.default.red(`Device "${deviceQuery}" has no node_id`));
73
+ process.exit(1);
74
+ }
75
+ controller.turnLightOff(device.node_id, (success, message) => {
76
+ if (success) {
77
+ const displayName = device.device_name || device.name || device.id || device.node_id || 'Unknown';
78
+ console.log(chalk_1.default.green(`✓ ${displayName} turned off`));
79
+ }
80
+ else {
81
+ console.error(chalk_1.default.red(`✗ Failed to turn off light: ${message}`));
82
+ }
83
+ controller.disconnect();
84
+ });
85
+ }));
86
+ // toggle
87
+ program
88
+ .command('toggle [device]')
89
+ .description('Toggle a light on/off (or all lights if no device specified)')
90
+ .option('-u, --url <url>', 'WebSocket URL')
91
+ .option('-c, --client-id <id>', 'Client ID')
92
+ .option('-d, --debug', 'Enable debug mode')
93
+ .action(asyncCommand(async (deviceQuery, options) => {
94
+ const controller = await createController(options.url, options.clientId, options.debug);
95
+ if (!deviceQuery || deviceQuery.toLowerCase() === 'all') {
96
+ await controller.toggleAllLights((success, message) => {
97
+ if (!success) {
98
+ console.error(chalk_1.default.red(`✗ Failed to toggle light: ${message}`));
99
+ }
100
+ });
101
+ await controller.disconnect();
102
+ return;
103
+ }
104
+ const device = findDevice(controller, deviceQuery);
105
+ if (!device) {
106
+ console.error(chalk_1.default.red(`Device "${deviceQuery}" not found`));
107
+ process.exit(1);
108
+ }
109
+ if (!device.node_id) {
110
+ console.error(chalk_1.default.red(`Device "${deviceQuery}" has no node_id`));
111
+ process.exit(1);
112
+ }
113
+ controller.toggleLight(device.node_id, (success, message) => {
114
+ if (success) {
115
+ const displayName = device.device_name || device.name || device.id || device.node_id || 'Unknown';
116
+ console.log(chalk_1.default.green(`✓ ${displayName} toggled`));
117
+ }
118
+ else {
119
+ console.error(chalk_1.default.red(`✗ Failed to toggle light: ${message}`));
120
+ }
121
+ controller.disconnect();
122
+ });
123
+ }));
124
+ }
125
+ exports.default = registerPower;
126
+ //# sourceMappingURL=power.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"power.js","sourceRoot":"","sources":["../../src/commands/power.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { Command } from 'commander';
2
+ import type { CommandDeps } from '../types';
3
+ export declare function registerSchedule(program: Command, deps: CommandDeps): void;
4
+ export default registerSchedule;
5
+ //# sourceMappingURL=schedule.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schedule.d.ts","sourceRoot":"","sources":["../../src/commands/schedule.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,WAAW,EAAkB,MAAM,UAAU,CAAC;AAE5D,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,QAkMnE;AAED,eAAe,gBAAgB,CAAC"}