amaran-light-cli 1.1.2 → 1.3.6
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.
- package/CHANGELOG.md +44 -5
- package/README.md +94 -70
- package/dist/__tests__/autoCct.test.js +89 -20
- package/dist/__tests__/autoCct.test.js.map +1 -1
- package/dist/__tests__/autostart.test.js +87 -41
- package/dist/__tests__/autostart.test.js.map +1 -1
- package/dist/__tests__/cctUtil.test.js +26 -27
- package/dist/__tests__/cctUtil.test.js.map +1 -1
- package/dist/__tests__/cli.smoke.test.js +18 -13
- package/dist/__tests__/cli.smoke.test.js.map +1 -1
- package/dist/__tests__/intensityApi.test.js +4 -9
- package/dist/__tests__/intensityApi.test.js.map +1 -1
- package/dist/__tests__/lightControl.test.js +79 -68
- package/dist/__tests__/lightControl.test.js.map +1 -1
- package/dist/__tests__/setupTests.js +9 -8
- package/dist/__tests__/setupTests.js.map +1 -1
- package/dist/__tests__/simulateSchedule.test.d.ts +2 -0
- package/dist/__tests__/simulateSchedule.test.d.ts.map +1 -0
- package/dist/__tests__/simulateSchedule.test.js +87 -0
- package/dist/__tests__/simulateSchedule.test.js.map +1 -0
- package/dist/autostart.js +19 -60
- package/dist/autostart.js.map +1 -1
- package/dist/cctUtil.d.ts.map +1 -1
- package/dist/cctUtil.js +16 -21
- package/dist/cctUtil.js.map +1 -1
- package/dist/cli.d.ts +2 -2
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +52 -231
- package/dist/cli.js.map +1 -1
- package/dist/commands/__tests__/integration.test.d.ts +2 -0
- package/dist/commands/__tests__/integration.test.d.ts.map +1 -0
- package/dist/commands/__tests__/integration.test.js +279 -0
- package/dist/commands/__tests__/integration.test.js.map +1 -0
- package/dist/commands/autoCct.d.ts +1 -1
- package/dist/commands/autoCct.d.ts.map +1 -1
- package/dist/commands/autoCct.js +90 -76
- package/dist/commands/autoCct.js.map +1 -1
- package/dist/commands/cct.d.ts +1 -1
- package/dist/commands/cct.d.ts.map +1 -1
- package/dist/commands/cct.js +17 -23
- package/dist/commands/cct.js.map +1 -1
- package/dist/commands/color.d.ts +1 -1
- package/dist/commands/color.d.ts.map +1 -1
- package/dist/commands/color.js +9 -15
- package/dist/commands/color.js.map +1 -1
- package/dist/commands/config.d.ts +4 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +219 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/discover.d.ts +1 -1
- package/dist/commands/discover.d.ts.map +1 -1
- package/dist/commands/discover.js +8 -14
- package/dist/commands/discover.js.map +1 -1
- package/dist/commands/hsi.d.ts +1 -1
- package/dist/commands/hsi.d.ts.map +1 -1
- package/dist/commands/hsi.js +11 -17
- package/dist/commands/hsi.js.map +1 -1
- package/dist/commands/intensity.d.ts +1 -1
- package/dist/commands/intensity.d.ts.map +1 -1
- package/dist/commands/intensity.js +9 -15
- package/dist/commands/intensity.js.map +1 -1
- package/dist/commands/list.d.ts +1 -1
- package/dist/commands/list.d.ts.map +1 -1
- package/dist/commands/list.js +6 -12
- package/dist/commands/list.js.map +1 -1
- package/dist/commands/power.d.ts +1 -1
- package/dist/commands/power.d.ts.map +1 -1
- package/dist/commands/power.js +18 -24
- package/dist/commands/power.js.map +1 -1
- package/dist/commands/printSchedule.d.ts +5 -0
- package/dist/commands/printSchedule.d.ts.map +1 -0
- package/dist/commands/{schedule.js → printSchedule.js} +92 -84
- package/dist/commands/printSchedule.js.map +1 -0
- package/dist/commands/service.d.ts +1 -1
- package/dist/commands/service.d.ts.map +1 -1
- package/dist/commands/service.js +54 -88
- package/dist/commands/service.js.map +1 -1
- package/dist/commands/simulateSchedule.d.ts +1 -1
- package/dist/commands/simulateSchedule.d.ts.map +1 -1
- package/dist/commands/simulateSchedule.js +50 -70
- package/dist/commands/simulateSchedule.js.map +1 -1
- package/dist/commands/status.d.ts +1 -1
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +8 -14
- package/dist/commands/status.js.map +1 -1
- package/dist/commands.d.ts +1 -1
- package/dist/commands.d.ts.map +1 -1
- package/dist/commands.js +56 -33
- package/dist/commands.js.map +1 -1
- package/dist/constants.d.ts +13 -14
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +21 -27
- package/dist/constants.js.map +1 -1
- package/dist/discovery.js +8 -15
- package/dist/discovery.js.map +1 -1
- package/dist/geoipUtil.js +3 -9
- package/dist/geoipUtil.js.map +1 -1
- package/dist/lightControl.js +18 -20
- package/dist/lightControl.js.map +1 -1
- package/dist/test/MockLightServer.d.ts +13 -0
- package/dist/test/MockLightServer.d.ts.map +1 -0
- package/dist/test/MockLightServer.js +140 -0
- package/dist/test/MockLightServer.js.map +1 -0
- package/dist/types.d.ts +4 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +1 -2
- package/package.json +16 -15
- package/scripts/release.js +112 -0
- package/scripts/test.sh +2 -5
- package/dist/commands/schedule.d.ts +0 -5
- package/dist/commands/schedule.d.ts.map +0 -1
- package/dist/commands/schedule.js.map +0 -1
|
@@ -1,78 +1,43 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
const ws_1 = require("ws");
|
|
7
|
-
const lightControl_1 = __importDefault(require("../lightControl"));
|
|
1
|
+
import LightController from '../lightControl.js';
|
|
2
|
+
import { MockLightServer } from '../test/MockLightServer.js';
|
|
8
3
|
const TEST_PORT = 8089;
|
|
9
4
|
const WS_URL = `ws://localhost:${TEST_PORT}`;
|
|
10
|
-
// Simple mock WebSocket server for LightController
|
|
11
|
-
class MockLightServer {
|
|
12
|
-
constructor(port) {
|
|
13
|
-
this.devices = [
|
|
14
|
-
{ node_id: '400J5-F2C008', device_name: 'Test Light 1' },
|
|
15
|
-
{ node_id: '400J5-F2C009', device_name: 'Test Light 2' },
|
|
16
|
-
];
|
|
17
|
-
this.wss = new ws_1.Server({ port });
|
|
18
|
-
this.wss.on('connection', (ws) => {
|
|
19
|
-
ws.on('message', (message) => {
|
|
20
|
-
const cmd = JSON.parse(message.toString());
|
|
21
|
-
const response = {
|
|
22
|
-
code: 0,
|
|
23
|
-
message: 'OK',
|
|
24
|
-
request: { type: cmd.type },
|
|
25
|
-
};
|
|
26
|
-
switch (cmd.type) {
|
|
27
|
-
case 'get_device_list':
|
|
28
|
-
response.data = { data: this.devices };
|
|
29
|
-
break;
|
|
30
|
-
case 'get_scene_list':
|
|
31
|
-
response.data = { data: [] };
|
|
32
|
-
break;
|
|
33
|
-
case 'get_node_config':
|
|
34
|
-
response.data = { node_id: cmd.node_id, data: { config: 'mock' } };
|
|
35
|
-
break;
|
|
36
|
-
default:
|
|
37
|
-
response.data = {};
|
|
38
|
-
}
|
|
39
|
-
ws.send(JSON.stringify(response));
|
|
40
|
-
});
|
|
41
|
-
});
|
|
42
|
-
}
|
|
43
|
-
close(callback) {
|
|
44
|
-
this.wss.clients.forEach((client) => {
|
|
45
|
-
client.terminate();
|
|
46
|
-
});
|
|
47
|
-
this.wss.close(callback);
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
5
|
describe('LightController', () => {
|
|
51
6
|
let server;
|
|
52
7
|
let controller;
|
|
53
|
-
beforeAll((
|
|
8
|
+
beforeAll(async () => {
|
|
54
9
|
server = new MockLightServer(TEST_PORT);
|
|
55
|
-
setTimeout(
|
|
10
|
+
await new Promise((resolve) => setTimeout(resolve, 500)); // Give server time to start
|
|
56
11
|
});
|
|
57
|
-
afterAll((
|
|
58
|
-
server
|
|
59
|
-
|
|
12
|
+
afterAll(async () => {
|
|
13
|
+
// We need to ensure the server is closed properly
|
|
14
|
+
await new Promise((resolve) => {
|
|
15
|
+
server.close((err) => {
|
|
16
|
+
if (err)
|
|
17
|
+
console.error('Error closing server:', err);
|
|
18
|
+
resolve();
|
|
19
|
+
});
|
|
60
20
|
});
|
|
21
|
+
// Add a small buffer to ensure the port is released
|
|
22
|
+
await new Promise((resolve) => setTimeout(resolve, 100));
|
|
61
23
|
});
|
|
62
24
|
afterEach(async () => {
|
|
63
25
|
if (controller) {
|
|
64
26
|
await controller.disconnect();
|
|
65
27
|
controller = undefined; // Clear reference
|
|
66
28
|
}
|
|
29
|
+
server.resetState();
|
|
67
30
|
});
|
|
68
|
-
it('should initialize and fetch devices', (
|
|
69
|
-
controller = new
|
|
31
|
+
it('should initialize and fetch devices', async () => {
|
|
32
|
+
controller = new LightController(WS_URL, 'test_client', () => {
|
|
70
33
|
expect(controller?.getDevices().length).toBe(2);
|
|
71
|
-
done();
|
|
72
34
|
}, false);
|
|
73
|
-
|
|
35
|
+
// Wait for connection/init
|
|
36
|
+
await new Promise((resolve) => setTimeout(resolve, 500));
|
|
37
|
+
expect(controller?.getDevices().length).toBe(2);
|
|
38
|
+
}, 5000);
|
|
74
39
|
it('should turn on all lights', async () => {
|
|
75
|
-
controller = new
|
|
40
|
+
controller = new LightController(WS_URL, 'test_client', undefined, false);
|
|
76
41
|
await new Promise((res) => setTimeout(res, 200));
|
|
77
42
|
await new Promise((resolve) => {
|
|
78
43
|
controller?.turnOnAllLights((success, msg) => {
|
|
@@ -81,9 +46,12 @@ describe('LightController', () => {
|
|
|
81
46
|
resolve();
|
|
82
47
|
});
|
|
83
48
|
});
|
|
49
|
+
// Check state on server
|
|
50
|
+
const state = server.getDeviceState('400J5-F2C008');
|
|
51
|
+
expect(state?.sleep).toBe(false);
|
|
84
52
|
}, 5000);
|
|
85
53
|
it('should turn off all lights', async () => {
|
|
86
|
-
controller = new
|
|
54
|
+
controller = new LightController(WS_URL, 'test_client', undefined, false);
|
|
87
55
|
await new Promise((res) => setTimeout(res, 200));
|
|
88
56
|
await new Promise((resolve) => {
|
|
89
57
|
controller?.turnOffAllLights((success, msg) => {
|
|
@@ -92,10 +60,26 @@ describe('LightController', () => {
|
|
|
92
60
|
resolve();
|
|
93
61
|
});
|
|
94
62
|
});
|
|
63
|
+
// Check state on server
|
|
64
|
+
const state = server.getDeviceState('400J5-F2C008');
|
|
65
|
+
expect(state?.sleep).toBe(true);
|
|
95
66
|
}, 5000);
|
|
96
67
|
it('should toggle all lights', async () => {
|
|
97
|
-
controller = new
|
|
68
|
+
controller = new LightController(WS_URL, 'test_client', undefined, false);
|
|
98
69
|
await new Promise((res) => setTimeout(res, 200));
|
|
70
|
+
// First ensure it's in a known state (e.g. sleep=false)
|
|
71
|
+
// Direct manipulation of server state would be better, but for now we rely on default being false
|
|
72
|
+
await new Promise((resolve) => {
|
|
73
|
+
controller?.toggleAllLights((success, msg) => {
|
|
74
|
+
expect(success).toBe(true);
|
|
75
|
+
expect(msg).toBe('OK');
|
|
76
|
+
resolve();
|
|
77
|
+
});
|
|
78
|
+
});
|
|
79
|
+
// Default was false, toggle should make it true
|
|
80
|
+
const state = server.getDeviceState('400J5-F2C008');
|
|
81
|
+
expect(state?.sleep).toBe(true);
|
|
82
|
+
// Toggle again
|
|
99
83
|
await new Promise((resolve) => {
|
|
100
84
|
controller?.toggleAllLights((success, msg) => {
|
|
101
85
|
expect(success).toBe(true);
|
|
@@ -103,9 +87,11 @@ describe('LightController', () => {
|
|
|
103
87
|
resolve();
|
|
104
88
|
});
|
|
105
89
|
});
|
|
90
|
+
const state2 = server.getDeviceState('400J5-F2C008');
|
|
91
|
+
expect(state2?.sleep).toBe(false);
|
|
106
92
|
}, 5000);
|
|
107
93
|
it('should set intensity for all lights', async () => {
|
|
108
|
-
controller = new
|
|
94
|
+
controller = new LightController(WS_URL, 'test_client', undefined, false);
|
|
109
95
|
await new Promise((res) => setTimeout(res, 200));
|
|
110
96
|
await new Promise((resolve) => {
|
|
111
97
|
controller?.setIntensityForAllLights(100, (success, msg) => {
|
|
@@ -114,20 +100,28 @@ describe('LightController', () => {
|
|
|
114
100
|
resolve();
|
|
115
101
|
});
|
|
116
102
|
});
|
|
103
|
+
const state = server.getDeviceState('400J5-F2C008');
|
|
104
|
+
expect(state?.intensity).toBe(100);
|
|
117
105
|
}, 5000);
|
|
118
106
|
it('should increment intensity for all lights', async () => {
|
|
119
|
-
controller = new
|
|
107
|
+
controller = new LightController(WS_URL, 'test_client', undefined, false);
|
|
120
108
|
await new Promise((res) => setTimeout(res, 200));
|
|
109
|
+
// Initial set
|
|
110
|
+
await controller.setIntensityForAllLights(500);
|
|
111
|
+
await new Promise((res) => setTimeout(res, 100));
|
|
121
112
|
await new Promise((resolve) => {
|
|
122
|
-
controller?.incrementIntensityForAllLights(
|
|
113
|
+
controller?.incrementIntensityForAllLights(100, (success, msg) => {
|
|
123
114
|
expect(success).toBe(true);
|
|
124
115
|
expect(msg).toBe('OK');
|
|
125
116
|
resolve();
|
|
126
117
|
});
|
|
127
118
|
});
|
|
119
|
+
const state = server.getDeviceState('400J5-F2C008');
|
|
120
|
+
// 500 + 100 = 600
|
|
121
|
+
expect(state?.intensity).toBe(600);
|
|
128
122
|
}, 5000);
|
|
129
123
|
it('should set CCT for all lights', async () => {
|
|
130
|
-
controller = new
|
|
124
|
+
controller = new LightController(WS_URL, 'test_client', undefined, false);
|
|
131
125
|
await new Promise((res) => setTimeout(res, 200));
|
|
132
126
|
await new Promise((resolve) => {
|
|
133
127
|
controller?.setCCTAndIntensityForAllLights(5600, 100, (success, msg) => {
|
|
@@ -136,20 +130,31 @@ describe('LightController', () => {
|
|
|
136
130
|
resolve();
|
|
137
131
|
});
|
|
138
132
|
});
|
|
133
|
+
const state = server.getDeviceState('400J5-F2C008');
|
|
134
|
+
expect(state?.cct).toBe(5600);
|
|
135
|
+
expect(state?.intensity).toBe(100);
|
|
136
|
+
expect(state?.work_mode).toBe('CCT');
|
|
139
137
|
}, 5000);
|
|
140
138
|
it('should increment CCT for all lights', async () => {
|
|
141
|
-
controller = new
|
|
139
|
+
controller = new LightController(WS_URL, 'test_client', undefined, false);
|
|
142
140
|
await new Promise((res) => setTimeout(res, 200));
|
|
141
|
+
// Initial set
|
|
142
|
+
await controller.setCCTAndIntensityForAllLights(3200, 100);
|
|
143
|
+
await new Promise((res) => setTimeout(res, 100));
|
|
143
144
|
await new Promise((resolve) => {
|
|
144
|
-
controller?.incrementCCTForAllLights(100,
|
|
145
|
+
controller?.incrementCCTForAllLights(100, 200, (success, msg) => {
|
|
145
146
|
expect(success).toBe(true);
|
|
146
147
|
expect(msg).toBe('OK');
|
|
147
148
|
resolve();
|
|
148
149
|
});
|
|
149
150
|
});
|
|
151
|
+
const state = server.getDeviceState('400J5-F2C008');
|
|
152
|
+
// 3200 + 100 = 3300
|
|
153
|
+
expect(state?.cct).toBe(3300);
|
|
154
|
+
expect(state?.intensity).toBe(200);
|
|
150
155
|
}, 5000);
|
|
151
156
|
it('should set HSI for all lights', async () => {
|
|
152
|
-
controller = new
|
|
157
|
+
controller = new LightController(WS_URL, 'test_client', undefined, false);
|
|
153
158
|
await new Promise((res) => setTimeout(res, 200));
|
|
154
159
|
await new Promise((resolve) => {
|
|
155
160
|
controller?.setHSIForAllLights(120, 80, 100, 5600, 0, (success, msg) => {
|
|
@@ -158,9 +163,14 @@ describe('LightController', () => {
|
|
|
158
163
|
resolve();
|
|
159
164
|
});
|
|
160
165
|
});
|
|
166
|
+
const state = server.getDeviceState('400J5-F2C008');
|
|
167
|
+
expect(state?.hue).toBe(120);
|
|
168
|
+
expect(state?.sat).toBe(80);
|
|
169
|
+
expect(state?.intensity).toBe(100);
|
|
170
|
+
expect(state?.work_mode).toBe('HSI');
|
|
161
171
|
}, 5000);
|
|
162
172
|
it('should set color for all lights', async () => {
|
|
163
|
-
controller = new
|
|
173
|
+
controller = new LightController(WS_URL, 'test_client', undefined, false);
|
|
164
174
|
await new Promise((res) => setTimeout(res, 200));
|
|
165
175
|
await new Promise((resolve) => {
|
|
166
176
|
controller?.setColorForAllLights('red', 100, (success, msg) => {
|
|
@@ -169,9 +179,10 @@ describe('LightController', () => {
|
|
|
169
179
|
resolve();
|
|
170
180
|
});
|
|
171
181
|
});
|
|
182
|
+
// The mock server doesn't parse 'red' to HSI yet, so we just check OK response
|
|
172
183
|
}, 5000);
|
|
173
184
|
it('should set system effect for all lights', async () => {
|
|
174
|
-
controller = new
|
|
185
|
+
controller = new LightController(WS_URL, 'test_client', undefined, false);
|
|
175
186
|
await new Promise((res) => setTimeout(res, 200));
|
|
176
187
|
await new Promise((resolve) => {
|
|
177
188
|
controller?.setSystemEffectForAllLights('flash', 100, (success, msg) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lightControl.test.js","sourceRoot":"","sources":["../../src/__tests__/lightControl.test.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"lightControl.test.js","sourceRoot":"","sources":["../../src/__tests__/lightControl.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,16 +1,17 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
1
|
// Setup test environment before running tests
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
2
|
+
import { mkdirSync } from 'node:fs';
|
|
3
|
+
import { dirname, join } from 'node:path';
|
|
4
|
+
import { fileURLToPath } from 'node:url';
|
|
5
|
+
import { LocalStorage } from 'node-localstorage';
|
|
6
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
7
|
+
const __dirname = dirname(__filename);
|
|
7
8
|
// Create a temporary directory for test local storage
|
|
8
|
-
const TEST_STORAGE_DIR =
|
|
9
|
+
const TEST_STORAGE_DIR = join(__dirname, '.test-storage');
|
|
9
10
|
try {
|
|
10
11
|
// Ensure the test storage directory exists
|
|
11
|
-
|
|
12
|
+
mkdirSync(TEST_STORAGE_DIR, { recursive: true });
|
|
12
13
|
// Set up global localStorage for tests
|
|
13
|
-
global.localStorage = new
|
|
14
|
+
global.localStorage = new LocalStorage(TEST_STORAGE_DIR);
|
|
14
15
|
}
|
|
15
16
|
catch (error) {
|
|
16
17
|
console.error('Failed to set up test storage:', error);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setupTests.js","sourceRoot":"","sources":["../../src/__tests__/setupTests.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"setupTests.js","sourceRoot":"","sources":["../../src/__tests__/setupTests.ts"],"names":[],"mappings":"AAAA,8CAA8C;AAE9C,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAEtC,sDAAsD;AACtD,MAAM,gBAAgB,GAAG,IAAI,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;AAE1D,IAAI,CAAC;IACH,2CAA2C;IAC3C,SAAS,CAAC,gBAAgB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEjD,uCAAuC;IACvC,MAAM,CAAC,YAAY,GAAG,IAAI,YAAY,CAAC,gBAAgB,CAAC,CAAC;AAC3D,CAAC;AAAC,OAAO,KAAK,EAAE,CAAC;IACf,OAAO,CAAC,KAAK,CAAC,gCAAgC,EAAE,KAAK,CAAC,CAAC;IACvD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,0CAA0C;AAC1C,OAAO,CAAC,GAAG,CAAC,QAAQ,GAAG,MAAM,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"simulateSchedule.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/simulateSchedule.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import { afterAll, afterEach, beforeAll, describe, expect, test, vi } from 'vitest';
|
|
3
|
+
import registerCommands from '../commands.js';
|
|
4
|
+
// Mock dependencies
|
|
5
|
+
vi.mock('../geoipUtil', () => ({
|
|
6
|
+
getLocationFromIP: vi.fn(() => ({ ll: [37.7749, -122.4194] })),
|
|
7
|
+
}));
|
|
8
|
+
// Mock cctUtil to return predictable values
|
|
9
|
+
vi.mock('../cctUtil', () => ({
|
|
10
|
+
calculateCCT: vi.fn(() => ({ cct: 5600, intensity: 500 })), // 500 = 50%
|
|
11
|
+
parseCurveType: vi.fn(() => 'HANN'),
|
|
12
|
+
CurveType: {
|
|
13
|
+
HANN: 'hann',
|
|
14
|
+
},
|
|
15
|
+
}));
|
|
16
|
+
// Mock constants to speed up simulation for tests
|
|
17
|
+
vi.mock('../constants', async (importOriginal) => {
|
|
18
|
+
const actual = await importOriginal();
|
|
19
|
+
return {
|
|
20
|
+
...actual,
|
|
21
|
+
DEVICE_DEFAULTS: {
|
|
22
|
+
updateInterval: 200, // 5 updates per second
|
|
23
|
+
statusCheckDelay: 0,
|
|
24
|
+
},
|
|
25
|
+
};
|
|
26
|
+
});
|
|
27
|
+
describe('simulate-schedule command', () => {
|
|
28
|
+
const originalFetch = global.fetch;
|
|
29
|
+
const mockFetch = vi.fn();
|
|
30
|
+
beforeAll(() => {
|
|
31
|
+
mockFetch.mockImplementation(async () => ({
|
|
32
|
+
json: async () => ({ ip: '1.2.3.4' }),
|
|
33
|
+
}));
|
|
34
|
+
global.fetch = mockFetch;
|
|
35
|
+
});
|
|
36
|
+
afterEach(() => {
|
|
37
|
+
mockFetch.mockClear();
|
|
38
|
+
vi.clearAllMocks();
|
|
39
|
+
});
|
|
40
|
+
afterAll(() => {
|
|
41
|
+
global.fetch = originalFetch;
|
|
42
|
+
});
|
|
43
|
+
test('applies intensity multiplier during simulation', async () => {
|
|
44
|
+
const setCCT = vi.fn();
|
|
45
|
+
const disconnect = vi.fn(async () => Promise.resolve());
|
|
46
|
+
const controllerStub = {
|
|
47
|
+
getDevices: vi.fn(() => [{ node_id: '400J5-F2C008', device_name: 'Key Light' }]),
|
|
48
|
+
getLightSleepStatus: vi.fn(),
|
|
49
|
+
setCCT,
|
|
50
|
+
disconnect,
|
|
51
|
+
};
|
|
52
|
+
const deps = {
|
|
53
|
+
createController: async () => controllerStub,
|
|
54
|
+
findDevice: (_controller, _deviceQuery) => ({
|
|
55
|
+
node_id: '400J5-F2C008',
|
|
56
|
+
device_name: 'Key Light',
|
|
57
|
+
}),
|
|
58
|
+
asyncCommand: (fn) => (...args) => fn(...args),
|
|
59
|
+
loadConfig: () => ({
|
|
60
|
+
intensityMultiplier: {
|
|
61
|
+
'400J5-F2C008': 0.5, // 50% multiplier
|
|
62
|
+
},
|
|
63
|
+
}),
|
|
64
|
+
saveWsUrl: undefined,
|
|
65
|
+
};
|
|
66
|
+
const program = new Command();
|
|
67
|
+
program.exitOverride();
|
|
68
|
+
registerCommands(program, deps);
|
|
69
|
+
// Run simulation for 1 second with 200ms interval = 5 updates (plus one initial?)
|
|
70
|
+
await program.parseAsync(['node', 'test', 'simulate-schedule', 'Key Light', '--duration', '1']);
|
|
71
|
+
// Check that setCCT was called
|
|
72
|
+
expect(setCCT).toHaveBeenCalled();
|
|
73
|
+
// Verify the intensity was scaled
|
|
74
|
+
// Base intensity is 500 (50%). Multiplier is 0.5.
|
|
75
|
+
// Target percent = 25%.
|
|
76
|
+
// Raw intensity = 500 * (25/50) = 250.
|
|
77
|
+
const calls = setCCT.mock.calls;
|
|
78
|
+
expect(calls.length).toBeGreaterThan(0);
|
|
79
|
+
// Check key parameters of the first call
|
|
80
|
+
const [nodeId, cct, intensity] = calls[0];
|
|
81
|
+
expect(nodeId).toBe('400J5-F2C008');
|
|
82
|
+
expect(cct).toBe(5600);
|
|
83
|
+
expect(intensity).toBe(250); // 500 * 0.5
|
|
84
|
+
expect(disconnect).toHaveBeenCalled();
|
|
85
|
+
});
|
|
86
|
+
});
|
|
87
|
+
//# sourceMappingURL=simulateSchedule.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"simulateSchedule.test.js","sourceRoot":"","sources":["../../src/__tests__/simulateSchedule.test.ts"],"names":[],"mappings":"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"}
|
package/dist/autostart.js
CHANGED
|
@@ -1,48 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
-
};
|
|
38
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
-
exports.isAmaranAppRunning = isAmaranAppRunning;
|
|
40
|
-
exports.startAmaranApp = startAmaranApp;
|
|
41
|
-
exports.handleAutostart = handleAutostart;
|
|
42
|
-
const node_child_process_1 = require("node:child_process");
|
|
43
|
-
const fs = __importStar(require("node:fs"));
|
|
44
|
-
const path = __importStar(require("node:path"));
|
|
45
|
-
const chalk_1 = __importDefault(require("chalk"));
|
|
1
|
+
import { exec } from 'node:child_process';
|
|
2
|
+
import * as fs from 'node:fs';
|
|
3
|
+
import * as path from 'node:path';
|
|
4
|
+
import chalk from 'chalk';
|
|
46
5
|
const configPath = path.join(process.env.HOME || '', '.amaran-cli.json');
|
|
47
6
|
function loadConfig() {
|
|
48
7
|
try {
|
|
@@ -53,7 +12,7 @@ function loadConfig() {
|
|
|
53
12
|
return null;
|
|
54
13
|
}
|
|
55
14
|
catch (_error) {
|
|
56
|
-
console.warn(
|
|
15
|
+
console.warn(chalk.yellow('Warning: Could not load config file'));
|
|
57
16
|
return null;
|
|
58
17
|
}
|
|
59
18
|
}
|
|
@@ -61,7 +20,7 @@ function logAutostart(message, debug = false) {
|
|
|
61
20
|
const timestamp = new Date().toISOString();
|
|
62
21
|
const logMessage = `[${timestamp}] [AUTOSTART] ${message}`;
|
|
63
22
|
if (debug) {
|
|
64
|
-
console.log(
|
|
23
|
+
console.log(chalk.gray(logMessage));
|
|
65
24
|
}
|
|
66
25
|
// Also log to a file for persistence
|
|
67
26
|
try {
|
|
@@ -76,9 +35,9 @@ function logAutostart(message, debug = false) {
|
|
|
76
35
|
* Check if the Amaran desktop app is running by looking for processes
|
|
77
36
|
* that contain "amaran desktop" (case-insensitive)
|
|
78
37
|
*/
|
|
79
|
-
async function isAmaranAppRunning(debug = false) {
|
|
38
|
+
export async function isAmaranAppRunning(debug = false) {
|
|
80
39
|
return new Promise((resolve) => {
|
|
81
|
-
|
|
40
|
+
exec('ps aux | grep -i "amaran desktop" | grep -v grep', (error, stdout) => {
|
|
82
41
|
if (error) {
|
|
83
42
|
if (debug) {
|
|
84
43
|
logAutostart(`Failed to check if app is running: ${error.message}`, debug);
|
|
@@ -90,7 +49,7 @@ async function isAmaranAppRunning(debug = false) {
|
|
|
90
49
|
if (debug) {
|
|
91
50
|
logAutostart(`App running check: ${isRunning ? 'FOUND' : 'NOT FOUND'}`, debug);
|
|
92
51
|
if (isRunning) {
|
|
93
|
-
console.log(
|
|
52
|
+
console.log(chalk.gray(`[AUTOSTART] Found Amaran Desktop processes:\n${stdout}`));
|
|
94
53
|
}
|
|
95
54
|
}
|
|
96
55
|
resolve(isRunning);
|
|
@@ -101,7 +60,7 @@ async function isAmaranAppRunning(debug = false) {
|
|
|
101
60
|
* Attempt to start the Amaran desktop app
|
|
102
61
|
* This implementation tries common locations and methods for macOS
|
|
103
62
|
*/
|
|
104
|
-
async function startAmaranApp(debug = false) {
|
|
63
|
+
export async function startAmaranApp(debug = false) {
|
|
105
64
|
const config = loadConfig();
|
|
106
65
|
// Check if autostart is disabled in config
|
|
107
66
|
if (config?.autoStartApp === false) {
|
|
@@ -124,17 +83,17 @@ async function startAmaranApp(debug = false) {
|
|
|
124
83
|
if (methodIndex >= startMethods.length) {
|
|
125
84
|
logAutostart('Failed to start app - tried all known methods', debug);
|
|
126
85
|
if (debug) {
|
|
127
|
-
console.log(
|
|
86
|
+
console.log(chalk.yellow('[AUTOSTART] Could not find or start Amaran app. Tried:'));
|
|
128
87
|
startMethods.forEach((method) => {
|
|
129
|
-
console.log(
|
|
88
|
+
console.log(chalk.gray(` - ${method}`));
|
|
130
89
|
});
|
|
131
|
-
console.log(
|
|
90
|
+
console.log(chalk.yellow('Make sure the Amaran desktop app is installed in /Applications or available via "open -a"'));
|
|
132
91
|
}
|
|
133
92
|
resolve(false);
|
|
134
93
|
return;
|
|
135
94
|
}
|
|
136
95
|
const method = startMethods[methodIndex];
|
|
137
|
-
|
|
96
|
+
exec(method, (error) => {
|
|
138
97
|
if (error) {
|
|
139
98
|
// Try the next method
|
|
140
99
|
methodIndex++;
|
|
@@ -143,7 +102,7 @@ async function startAmaranApp(debug = false) {
|
|
|
143
102
|
}
|
|
144
103
|
logAutostart(`Successfully started app using: ${method}`, debug);
|
|
145
104
|
if (debug) {
|
|
146
|
-
console.log(
|
|
105
|
+
console.log(chalk.green(`[AUTOSTART] Started Amaran app using: ${method}`));
|
|
147
106
|
}
|
|
148
107
|
// Give the app a moment to start up
|
|
149
108
|
setTimeout(() => {
|
|
@@ -158,7 +117,7 @@ async function startAmaranApp(debug = false) {
|
|
|
158
117
|
* Main function to handle autostart logic
|
|
159
118
|
* Checks if app is running, and if not, attempts to start it (unless disabled)
|
|
160
119
|
*/
|
|
161
|
-
async function handleAutostart(debug = false) {
|
|
120
|
+
export async function handleAutostart(debug = false) {
|
|
162
121
|
const config = loadConfig();
|
|
163
122
|
// Log the autostart setting
|
|
164
123
|
const autoStartEnabled = config?.autoStartApp !== false; // Default to true
|
|
@@ -166,7 +125,7 @@ async function handleAutostart(debug = false) {
|
|
|
166
125
|
if (!autoStartEnabled) {
|
|
167
126
|
logAutostart('Autostart is blocked by configuration setting', debug);
|
|
168
127
|
if (debug) {
|
|
169
|
-
console.log(
|
|
128
|
+
console.log(chalk.yellow('[AUTOSTART] Autostart is disabled. Use "amaran config --auto-start-app true" to enable.'));
|
|
170
129
|
}
|
|
171
130
|
return false;
|
|
172
131
|
}
|
|
@@ -180,13 +139,13 @@ async function handleAutostart(debug = false) {
|
|
|
180
139
|
if (started) {
|
|
181
140
|
logAutostart('Successfully started Amaran desktop app', debug);
|
|
182
141
|
if (debug) {
|
|
183
|
-
console.log(
|
|
142
|
+
console.log(chalk.green('[AUTOSTART] Amaran desktop app started successfully'));
|
|
184
143
|
}
|
|
185
144
|
}
|
|
186
145
|
else {
|
|
187
146
|
logAutostart('Failed to start Amaran desktop app', debug);
|
|
188
147
|
if (debug) {
|
|
189
|
-
console.log(
|
|
148
|
+
console.log(chalk.red('[AUTOSTART] Failed to start Amaran desktop app'));
|
|
190
149
|
}
|
|
191
150
|
}
|
|
192
151
|
return started;
|
package/dist/autostart.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"autostart.js","sourceRoot":"","sources":["../src/autostart.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"autostart.js","sourceRoot":"","sources":["../src/autostart.ts"],"names":[],"mappings":"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"}
|
package/dist/cctUtil.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cctUtil.d.ts","sourceRoot":"","sources":["../src/cctUtil.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"cctUtil.d.ts","sourceRoot":"","sources":["../src/cctUtil.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,SAAS;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,oBAAY,SAAS;IACnB,IAAI,SAAS;IACb,kBAAkB,uBAAuB;IACzC,mBAAmB,wBAAwB;IAC3C,kBAAkB,uBAAuB;IACzC,YAAY,iBAAiB;IAC7B,YAAY,iBAAiB;IAC7B,cAAc,mBAAmB;CAClC;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,OAAO,SAAS,CAuBpE;AAED,wBAAgB,kBAAkB,IAAI,MAAM,EAAE,CAE7C;AAyZD,wBAAgB,YAAY,CAC1B,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,EACX,IAAI,GAAE,IAAiB,EACvB,IAAI,CAAC,EAAE,UAAU,EACjB,SAAS,GAAE,SAA0B,GACpC,SAAS,CAgBX"}
|