@jakobgoerke/ac-infinity-client 0.1.1 → 0.3.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.
@@ -1 +1 @@
1
- {"version":3,"file":"Device.d.ts","sourceRoot":"","sources":["../../../src/types/Device.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,oBAAY,UAAU;IACpB,YAAY,IAAI;IAChB,YAAY,IAAI;IAChB,cAAc,IAAI;IAClB,QAAQ,IAAI;IACZ,eAAe,IAAI;IACnB,KAAK,IAAI;CACV;AAED,oBAAY,UAAU;IACpB,KAAK,IAAI;IACT,IAAI,IAAI;IACR,MAAM,IAAI;IACV,aAAa,IAAI;IACjB,cAAc,IAAI;IAClB,OAAO,IAAI;IACX,UAAU,IAAI;IACd,KAAK,IAAI;CACV;AAED,eAAO,MAAM,oBAAoB,gDAAe,CAAC;AACjD,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAElE,eAAO,MAAM,wBAAwB,gDAAe,CAAC;AACrD,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC"}
1
+ {"version":3,"file":"Device.d.ts","sourceRoot":"","sources":["../../../src/types/Device.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,oBAAY,UAAU;IACpB,IAAI,IAAI;IACR,UAAU,IAAI;IACd,UAAU,IAAI;IACd,YAAY,IAAI;IAChB,MAAM,IAAI;IACV,aAAa,IAAI;IACjB,GAAG,IAAI;IACP,IAAI,IAAI;IACR,UAAU,IAAI;IACd,aAAa,KAAK;IAClB,YAAY,KAAK;IACjB,YAAY,KAAK;CAClB;AAED,oBAAY,UAAU;IACpB,GAAG,IAAI;IACP,EAAE,IAAI;IACN,IAAI,IAAI;IACR,WAAW,IAAI;IACf,YAAY,IAAI;IAChB,KAAK,IAAI;IACT,QAAQ,IAAI;IACZ,GAAG,IAAI;CACR;AAED,oBAAY,eAAe;IACzB,UAAU,IAAI;IACd,OAAO,IAAI;CACZ;AAkDD,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuG9B,CAAC;AAEJ,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAuDnC,4EAA4E;;IAE5E,2BAA2B;;;;;IAK3B,2BAA2B;;;;;IAK3B,gDAAgD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAchD,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAOnB,CAAC;AAEJ,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAClE,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AACvE,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAC1E,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AA6B/E,eAAO,MAAM,+BAA+B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqExC,CAAC;AAEL,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCpC,CAAC;AAEL,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,+BAA+B,CAAC,CAAC;AACxF,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAEhF,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,yBAAyB,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAE9G;AAED,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,qBAAqB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAElG"}
@@ -1,15 +1,23 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.DeviceModeSettingsSchema = exports.DeviceSettingsSchema = exports.DeviceMode = exports.DeviceType = void 0;
3
+ exports.DeviceSettingsChangesSchema = exports.DeviceModeSettingsChangesSchema = exports.DeviceModeSettingsSchema = exports.DeviceSettingsSchema = exports.TemperatureUnit = exports.DeviceMode = exports.DeviceType = void 0;
4
+ exports.encodeDeviceModeSettings = encodeDeviceModeSettings;
5
+ exports.encodeDeviceSettings = encodeDeviceSettings;
4
6
  const zod_1 = require("zod");
5
7
  var DeviceType;
6
8
  (function (DeviceType) {
9
+ DeviceType[DeviceType["NONE"] = 0] = "NONE";
7
10
  DeviceType[DeviceType["GROW_LIGHT"] = 1] = "GROW_LIGHT";
8
11
  DeviceType[DeviceType["HUMIDIFIER"] = 2] = "HUMIDIFIER";
9
12
  DeviceType[DeviceType["DEHUMIDIFIER"] = 3] = "DEHUMIDIFIER";
10
13
  DeviceType[DeviceType["HEATER"] = 4] = "HEATER";
11
14
  DeviceType[DeviceType["AIR_CONDITION"] = 5] = "AIR_CONDITION";
12
15
  DeviceType[DeviceType["FAN"] = 6] = "FAN";
16
+ DeviceType[DeviceType["PUMP"] = 8] = "PUMP";
17
+ DeviceType[DeviceType["WATER_PUMP"] = 9] = "WATER_PUMP";
18
+ DeviceType[DeviceType["CO2_GENERATOR"] = 10] = "CO2_GENERATOR";
19
+ DeviceType[DeviceType["WATER_COOLER"] = 13] = "WATER_COOLER";
20
+ DeviceType[DeviceType["WATER_HEATER"] = 14] = "WATER_HEATER";
13
21
  })(DeviceType || (exports.DeviceType = DeviceType = {}));
14
22
  var DeviceMode;
15
23
  (function (DeviceMode) {
@@ -22,5 +30,368 @@ var DeviceMode;
22
30
  DeviceMode[DeviceMode["SCHEDULE"] = 7] = "SCHEDULE";
23
31
  DeviceMode[DeviceMode["VPD"] = 8] = "VPD";
24
32
  })(DeviceMode || (exports.DeviceMode = DeviceMode = {}));
25
- exports.DeviceSettingsSchema = zod_1.z.object({});
26
- exports.DeviceModeSettingsSchema = zod_1.z.object({});
33
+ var TemperatureUnit;
34
+ (function (TemperatureUnit) {
35
+ TemperatureUnit[TemperatureUnit["FAHRENHEIT"] = 0] = "FAHRENHEIT";
36
+ TemperatureUnit[TemperatureUnit["CELSIUS"] = 1] = "CELSIUS";
37
+ })(TemperatureUnit || (exports.TemperatureUnit = TemperatureUnit = {}));
38
+ // the vendor uses this value for a schedule boundary that is not set
39
+ const SCHEDULE_DISABLED = 65535;
40
+ const celsiusToFahrenheit = (celsius) => Math.round((celsius * 9) / 5 + 32);
41
+ const fahrenheitToCelsius = (fahrenheit) => Math.round(((fahrenheit - 32) * 5) / 9);
42
+ const decodeScheduleTime = (minutes) => (minutes === SCHEDULE_DISABLED ? null : minutes);
43
+ const encodeScheduleTime = (minutes) => (minutes === null ? SCHEDULE_DISABLED : minutes);
44
+ const encodeFlag = (value) => (value === undefined ? undefined : Number(value));
45
+ const encodeTemperature = (value) => {
46
+ if (value?.celsius !== undefined) {
47
+ return { celsius: value.celsius, fahrenheit: celsiusToFahrenheit(value.celsius) };
48
+ }
49
+ if (value?.fahrenheit !== undefined) {
50
+ return { celsius: fahrenheitToCelsius(value.fahrenheit), fahrenheit: value.fahrenheit };
51
+ }
52
+ return { celsius: undefined, fahrenheit: undefined };
53
+ };
54
+ const compact = (value) => Object.fromEntries(Object.entries(value).filter(([, v]) => v !== undefined));
55
+ const DeviceBaseInputSchema = zod_1.z.object({
56
+ devId: zod_1.z.string(),
57
+ devMacAddr: zod_1.z.string().nullable(),
58
+ externalPort: zod_1.z.number(),
59
+ offSpead: zod_1.z.number().min(0).max(10),
60
+ onSpead: zod_1.z.number().min(0).max(10),
61
+ onSelfSpead: zod_1.z.number(),
62
+ ecUnit: zod_1.z.number(),
63
+ tdsUnit: zod_1.z.number(),
64
+ settingMode: zod_1.z.number(),
65
+ vpdSettingMode: zod_1.z.number(),
66
+ atType: zod_1.z.enum(DeviceMode),
67
+ });
68
+ const transformDeviceBase = ({ devId, externalPort, offSpead, onSpead, atType }) => ({
69
+ id: devId,
70
+ port: externalPort,
71
+ levelWhileOff: offSpead,
72
+ levelWhileOn: onSpead,
73
+ mode: atType,
74
+ });
75
+ exports.DeviceSettingsSchema = DeviceBaseInputSchema.extend({
76
+ setId: zod_1.z.string().nullable(),
77
+ port: zod_1.z.number(),
78
+ devName: zod_1.z.string().nullable(),
79
+ devLight: zod_1.z.number(),
80
+ hasBacklightSwitch: zod_1.z.number(),
81
+ backlightSwitch: zod_1.z.number(),
82
+ hasKeytoneSwitch: zod_1.z.number(),
83
+ keytoneSwitch: zod_1.z.number(),
84
+ devCth: zod_1.z.number(),
85
+ devCt: zod_1.z.number(),
86
+ devCth2: zod_1.z.number().nullable(),
87
+ devCt2: zod_1.z.number().nullable(),
88
+ devCh: zod_1.z.number(),
89
+ devTt: zod_1.z.number(),
90
+ devTh: zod_1.z.number(),
91
+ devCompany: zod_1.z.enum(TemperatureUnit),
92
+ devTth: zod_1.z.number(),
93
+ vpdCth: zod_1.z.number(),
94
+ vpdCt: zod_1.z.number(),
95
+ vpdTransition: zod_1.z.number(),
96
+ portResistance: zod_1.z.number().nullable(),
97
+ devBth: zod_1.z.number(),
98
+ devBt: zod_1.z.number(),
99
+ devBh: zod_1.z.number(),
100
+ devBvpd: zod_1.z.number(),
101
+ isFlag: zod_1.z.number(),
102
+ devTimeZone: zod_1.z.string().nullable(),
103
+ loadType: zod_1.z.number(),
104
+ tempCompare: zod_1.z.number(),
105
+ humiCompare: zod_1.z.number(),
106
+ onTimeSwitch: zod_1.z.number(),
107
+ onTime: zod_1.z.number(),
108
+ sensorSettingStr: zod_1.z.string().nullable(),
109
+ sensorSetting: zod_1.z.unknown().nullable(),
110
+ sensorTransBuffStr: zod_1.z.string().nullable(),
111
+ sensorTransBuff: zod_1.z.unknown().nullable(),
112
+ portParamData: zod_1.z.string().nullable(),
113
+ photocellSwitch: zod_1.z.number(),
114
+ isOpenDoseTime: zod_1.z.number(),
115
+ onDoseTime: zod_1.z.number(),
116
+ offDoseTime: zod_1.z.number(),
117
+ isOnMinMaxTime: zod_1.z.number(),
118
+ onMinTime: zod_1.z.number(),
119
+ onMaxTime: zod_1.z.number(),
120
+ ecOrTds: zod_1.z.number(),
121
+ interchangeSensor: zod_1.z.number(),
122
+ subDeviceId: zod_1.z.string().nullable(),
123
+ subDeviceVersion: zod_1.z.string().nullable(),
124
+ subDeviceType: zod_1.z.number().nullable(),
125
+ supportOta: zod_1.z.unknown().nullable(),
126
+ otaUpdating: zod_1.z.unknown().nullable(),
127
+ secFucStatus: zod_1.z.number(),
128
+ secFucDevtype: zod_1.z.number(),
129
+ secFucDevEffect: zod_1.z.number(),
130
+ secFucParamNums: zod_1.z.number(),
131
+ secFucParams: zod_1.z.unknown().nullable(),
132
+ secFucReportTime: zod_1.z.number(),
133
+ toward: zod_1.z.unknown().nullable(),
134
+ powerState: zod_1.z.unknown().nullable(),
135
+ updateAllPort: zod_1.z.boolean(),
136
+ timestamp: zod_1.z.unknown().nullable(),
137
+ calibrationTime: zod_1.z.unknown().nullable(),
138
+ fieldSet: zod_1.z.array(zod_1.z.unknown()),
139
+ plantCode: zod_1.z.number(),
140
+ potSize: zod_1.z.number(),
141
+ plantingNum: zod_1.z.number(),
142
+ devCl: zod_1.z.unknown().nullable(),
143
+ devCsm1: zod_1.z.unknown().nullable(),
144
+ devCsm2: zod_1.z.unknown().nullable(),
145
+ devCsm3: zod_1.z.unknown().nullable(),
146
+ devCsm4: zod_1.z.unknown().nullable(),
147
+ uuidSta: zod_1.z.number(),
148
+ uuidType: zod_1.z.unknown().nullable(),
149
+ uuid: zod_1.z.string().nullable(),
150
+ matterCode: zod_1.z.string().nullable(),
151
+ matterSta: zod_1.z.unknown().nullable(),
152
+ }).transform((v) => ({
153
+ ...transformDeviceBase(v),
154
+ name: v.devName,
155
+ temperatureUnit: v.devCompany,
156
+ brightness: v.devLight,
157
+ backlight: v.backlightSwitch !== 0,
158
+ calibration: {
159
+ temperatureC: v.devCt,
160
+ temperatureF: v.devCth,
161
+ humidity: v.devCh,
162
+ leafTemperatureC: v.vpdCt,
163
+ leafTemperatureF: v.vpdCth,
164
+ },
165
+ transition: {
166
+ temperatureC: v.devTt,
167
+ temperatureF: v.devTth,
168
+ humidity: v.devTh,
169
+ vpd: v.vpdTransition,
170
+ },
171
+ buffer: {
172
+ enabled: v.isFlag !== 0,
173
+ temperatureC: v.devBt,
174
+ temperatureF: v.devBth,
175
+ humidity: v.devBh,
176
+ vpd: v.devBvpd,
177
+ },
178
+ }));
179
+ exports.DeviceModeSettingsSchema = DeviceBaseInputSchema.extend({
180
+ acitveTimerOff: zod_1.z.number(),
181
+ acitveTimerOn: zod_1.z.number(),
182
+ activeCycleOff: zod_1.z.number(),
183
+ activeCycleOn: zod_1.z.number(),
184
+ activeHh: zod_1.z.number(),
185
+ activeHt: zod_1.z.number(),
186
+ activeHtVpd: zod_1.z.number(),
187
+ activeHtVpdNums: zod_1.z.number(),
188
+ activeLh: zod_1.z.number(),
189
+ activeLt: zod_1.z.number(),
190
+ activeLtVpd: zod_1.z.number(),
191
+ activeLtVpdNums: zod_1.z.number(),
192
+ co2FanHighSwitch: zod_1.z.number(),
193
+ co2FanHighValue: zod_1.z.number(),
194
+ co2LowSwitch: zod_1.z.number(),
195
+ co2LowValue: zod_1.z.number(),
196
+ devHh: zod_1.z.number(),
197
+ devHt: zod_1.z.number(),
198
+ devHtf: zod_1.z.number(),
199
+ devLh: zod_1.z.number(),
200
+ devLt: zod_1.z.number(),
201
+ devLtf: zod_1.z.number(),
202
+ ecTdsLowSwitchEc: zod_1.z.number(),
203
+ ecTdsLowSwitchTds: zod_1.z.number(),
204
+ ecTdsLowValueEcUs: zod_1.z.number(),
205
+ ecTdsLowValueTdsPpm: zod_1.z.number(),
206
+ isOpenAutomation: zod_1.z.number(),
207
+ modeType: zod_1.z.number(),
208
+ moistureLowSwitch: zod_1.z.number(),
209
+ moistureLowValue: zod_1.z.number(),
210
+ onlyUpdateSpeed: zod_1.z.number(),
211
+ phHighSwitch: zod_1.z.number(),
212
+ phHighValue: zod_1.z.number(),
213
+ phLowSwitch: zod_1.z.number(),
214
+ phLowValue: zod_1.z.number(),
215
+ schedEndtTime: zod_1.z.number(),
216
+ schedStartTime: zod_1.z.number(),
217
+ surplus: zod_1.z.number().nullable(),
218
+ targetHumi: zod_1.z.number(),
219
+ targetHumiSwitch: zod_1.z.number(),
220
+ targetTSwitch: zod_1.z.number(),
221
+ targetTemp: zod_1.z.number(),
222
+ targetTempF: zod_1.z.number(),
223
+ targetVpd: zod_1.z.number(),
224
+ targetVpdSwitch: zod_1.z.number(),
225
+ waterLevelLowSwitch: zod_1.z.number(),
226
+ waterTempHighSwitch: zod_1.z.number(),
227
+ waterTempHighValue: zod_1.z.number(),
228
+ waterTempHighValueF: zod_1.z.number(),
229
+ waterTempLowSwitch: zod_1.z.number(),
230
+ waterTempLowValue: zod_1.z.number(),
231
+ waterTempLowValueF: zod_1.z.number(),
232
+ }).transform((v) => ({
233
+ ...transformDeviceBase(v),
234
+ /** seconds left until the current timer, cycle or schedule step switches */
235
+ remainingTime: v.surplus,
236
+ /** durations in seconds */
237
+ timer: {
238
+ toOn: v.acitveTimerOn,
239
+ toOff: v.acitveTimerOff,
240
+ },
241
+ /** durations in seconds */
242
+ cycle: {
243
+ on: v.activeCycleOn,
244
+ off: v.activeCycleOff,
245
+ },
246
+ /** minutes after midnight, null when not set */
247
+ schedule: {
248
+ start: decodeScheduleTime(v.schedStartTime),
249
+ end: decodeScheduleTime(v.schedEndtTime),
250
+ },
251
+ auto: {
252
+ targetMode: v.settingMode !== 0,
253
+ highTemperature: { enabled: v.activeHt !== 0, celsius: v.devHt, fahrenheit: v.devHtf },
254
+ lowTemperature: { enabled: v.activeLt !== 0, celsius: v.devLt, fahrenheit: v.devLtf },
255
+ highHumidity: { enabled: v.activeHh !== 0, value: v.devHh },
256
+ lowHumidity: { enabled: v.activeLh !== 0, value: v.devLh },
257
+ targetTemperature: { enabled: v.targetTSwitch !== 0, celsius: v.targetTemp, fahrenheit: v.targetTempF },
258
+ targetHumidity: { enabled: v.targetHumiSwitch !== 0, value: v.targetHumi },
259
+ },
260
+ /** values in kPa */
261
+ vpd: {
262
+ targetMode: v.vpdSettingMode !== 0,
263
+ high: { enabled: v.activeHtVpd !== 0, value: v.activeHtVpdNums / 10 },
264
+ low: { enabled: v.activeLtVpd !== 0, value: v.activeLtVpdNums / 10 },
265
+ target: { enabled: v.targetVpdSwitch !== 0, value: v.targetVpd / 10 },
266
+ },
267
+ }));
268
+ const LevelSchema = zod_1.z.number().int().min(0).max(10);
269
+ const DurationSchema = zod_1.z.number().int().nonnegative();
270
+ const ScheduleTimeSchema = zod_1.z.number().int().min(0).max(1439).nullable();
271
+ const TemperatureTriggerChangesSchema = zod_1.z
272
+ .object({
273
+ enabled: zod_1.z.boolean(),
274
+ celsius: zod_1.z.number().int().min(0).max(90),
275
+ fahrenheit: zod_1.z.number().int().min(32).max(194),
276
+ })
277
+ .partial()
278
+ .refine((v) => v.celsius === undefined || v.fahrenheit === undefined, { message: 'Provide either celsius or fahrenheit, not both' });
279
+ const HumidityTriggerChangesSchema = zod_1.z
280
+ .object({
281
+ enabled: zod_1.z.boolean(),
282
+ value: zod_1.z.number().int().min(0).max(100),
283
+ })
284
+ .partial();
285
+ const VpdTriggerChangesSchema = zod_1.z
286
+ .object({
287
+ enabled: zod_1.z.boolean(),
288
+ value: zod_1.z.number().min(0).max(9.9),
289
+ })
290
+ .partial();
291
+ exports.DeviceModeSettingsChangesSchema = zod_1.z
292
+ .object({
293
+ mode: zod_1.z.enum(DeviceMode),
294
+ levelWhileOn: LevelSchema,
295
+ levelWhileOff: LevelSchema,
296
+ timer: zod_1.z.object({ toOn: DurationSchema, toOff: DurationSchema }).partial(),
297
+ cycle: zod_1.z.object({ on: DurationSchema, off: DurationSchema }).partial(),
298
+ schedule: zod_1.z.object({ start: ScheduleTimeSchema, end: ScheduleTimeSchema }).partial(),
299
+ auto: zod_1.z
300
+ .object({
301
+ targetMode: zod_1.z.boolean(),
302
+ highTemperature: TemperatureTriggerChangesSchema,
303
+ lowTemperature: TemperatureTriggerChangesSchema,
304
+ highHumidity: HumidityTriggerChangesSchema,
305
+ lowHumidity: HumidityTriggerChangesSchema,
306
+ targetTemperature: TemperatureTriggerChangesSchema,
307
+ targetHumidity: HumidityTriggerChangesSchema,
308
+ })
309
+ .partial(),
310
+ vpd: zod_1.z
311
+ .object({
312
+ targetMode: zod_1.z.boolean(),
313
+ high: VpdTriggerChangesSchema,
314
+ low: VpdTriggerChangesSchema,
315
+ target: VpdTriggerChangesSchema,
316
+ })
317
+ .partial(),
318
+ })
319
+ .partial()
320
+ .transform(({ mode, levelWhileOn, levelWhileOff, timer, cycle, schedule, auto, vpd }) => {
321
+ const highTemperature = encodeTemperature(auto?.highTemperature);
322
+ const lowTemperature = encodeTemperature(auto?.lowTemperature);
323
+ const targetTemperature = encodeTemperature(auto?.targetTemperature);
324
+ const encodeVpd = (value) => (value === undefined ? undefined : Math.round(value * 10));
325
+ return compact({
326
+ atType: mode,
327
+ onSpead: levelWhileOn,
328
+ offSpead: levelWhileOff,
329
+ acitveTimerOn: timer?.toOn,
330
+ acitveTimerOff: timer?.toOff,
331
+ activeCycleOn: cycle?.on,
332
+ activeCycleOff: cycle?.off,
333
+ schedStartTime: encodeScheduleTime(schedule?.start),
334
+ schedEndtTime: encodeScheduleTime(schedule?.end),
335
+ settingMode: encodeFlag(auto?.targetMode),
336
+ activeHt: encodeFlag(auto?.highTemperature?.enabled),
337
+ devHt: highTemperature.celsius,
338
+ devHtf: highTemperature.fahrenheit,
339
+ activeLt: encodeFlag(auto?.lowTemperature?.enabled),
340
+ devLt: lowTemperature.celsius,
341
+ devLtf: lowTemperature.fahrenheit,
342
+ activeHh: encodeFlag(auto?.highHumidity?.enabled),
343
+ devHh: auto?.highHumidity?.value,
344
+ activeLh: encodeFlag(auto?.lowHumidity?.enabled),
345
+ devLh: auto?.lowHumidity?.value,
346
+ targetTSwitch: encodeFlag(auto?.targetTemperature?.enabled),
347
+ targetTemp: targetTemperature.celsius,
348
+ targetTempF: targetTemperature.fahrenheit,
349
+ targetHumiSwitch: encodeFlag(auto?.targetHumidity?.enabled),
350
+ targetHumi: auto?.targetHumidity?.value,
351
+ vpdSettingMode: encodeFlag(vpd?.targetMode),
352
+ activeHtVpd: encodeFlag(vpd?.high?.enabled),
353
+ activeHtVpdNums: encodeVpd(vpd?.high?.value),
354
+ activeLtVpd: encodeFlag(vpd?.low?.enabled),
355
+ activeLtVpdNums: encodeVpd(vpd?.low?.value),
356
+ targetVpdSwitch: encodeFlag(vpd?.target?.enabled),
357
+ targetVpd: encodeVpd(vpd?.target?.value),
358
+ });
359
+ });
360
+ exports.DeviceSettingsChangesSchema = zod_1.z
361
+ .object({
362
+ name: zod_1.z.string().min(1),
363
+ temperatureUnit: zod_1.z.enum(TemperatureUnit),
364
+ brightness: zod_1.z.number().int().nonnegative(),
365
+ backlight: zod_1.z.boolean(),
366
+ calibration: zod_1.z
367
+ .object({
368
+ temperatureC: zod_1.z.number().int(),
369
+ temperatureF: zod_1.z.number().int(),
370
+ humidity: zod_1.z.number().int(),
371
+ })
372
+ .partial()
373
+ .refine((v) => v.temperatureC === undefined || v.temperatureF === undefined, {
374
+ message: 'Provide either temperatureC or temperatureF, not both',
375
+ }),
376
+ })
377
+ .partial()
378
+ .transform(({ name, temperatureUnit, brightness, backlight, calibration }) => {
379
+ // the fahrenheit calibration is kept at twice the celsius one
380
+ const calibrationC = calibration?.temperatureF !== undefined ? Math.trunc(calibration.temperatureF / 2) : calibration?.temperatureC;
381
+ const calibrationF = calibration?.temperatureC !== undefined ? calibration.temperatureC * 2 : calibration?.temperatureF;
382
+ return compact({
383
+ devName: name,
384
+ devCompany: temperatureUnit,
385
+ devLight: brightness,
386
+ backlightSwitch: encodeFlag(backlight),
387
+ devCt: calibrationC,
388
+ devCth: calibrationF,
389
+ devCh: calibration?.humidity,
390
+ });
391
+ });
392
+ function encodeDeviceModeSettings(settings) {
393
+ return exports.DeviceModeSettingsChangesSchema.parse(settings);
394
+ }
395
+ function encodeDeviceSettings(settings) {
396
+ return exports.DeviceSettingsChangesSchema.parse(settings);
397
+ }
@@ -1,16 +1,16 @@
1
1
  import { z } from 'zod';
2
- export declare const UserSchema: z.ZodObject<{
2
+ export declare const UserSchema: z.ZodPipe<z.ZodObject<{
3
3
  appId: z.ZodString;
4
4
  nickName: z.ZodString;
5
- appEmail: z.ZodString;
6
- }, "strip", z.ZodTypeAny, {
7
- appId: string;
8
- nickName: string;
9
- appEmail: string;
5
+ appEmail: z.ZodEmail;
6
+ }, z.core.$strip>, z.ZodTransform<{
7
+ id: string;
8
+ username: string;
9
+ email: string;
10
10
  }, {
11
11
  appId: string;
12
12
  nickName: string;
13
13
  appEmail: string;
14
- }>;
14
+ }>>;
15
15
  export type User = z.infer<typeof UserSchema>;
16
16
  //# sourceMappingURL=User.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"User.d.ts","sourceRoot":"","sources":["../../../src/types/User.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,UAAU;;;;;;;;;;;;EAIrB,CAAC;AACH,MAAM,MAAM,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,UAAU,CAAC,CAAC"}
1
+ {"version":3,"file":"User.d.ts","sourceRoot":"","sources":["../../../src/types/User.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,UAAU;;;;;;;;;;;;GAUlB,CAAC;AAEN,MAAM,MAAM,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,UAAU,CAAC,CAAC"}
@@ -2,8 +2,14 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.UserSchema = void 0;
4
4
  const zod_1 = require("zod");
5
- exports.UserSchema = zod_1.z.object({
5
+ exports.UserSchema = zod_1.z
6
+ .object({
6
7
  appId: zod_1.z.string(),
7
8
  nickName: zod_1.z.string(),
8
- appEmail: zod_1.z.string().email(),
9
- });
9
+ appEmail: zod_1.z.email(),
10
+ })
11
+ .transform(({ appId, nickName, appEmail }) => ({
12
+ id: appId,
13
+ username: nickName,
14
+ email: appEmail,
15
+ }));
@@ -1,4 +1,7 @@
1
- export * from './Controller';
2
- export * from './Device';
3
- export * from './User';
1
+ export type { Controller, ControllerDeviceInfo, ControllerPort, ControllerSensor } from './Controller';
2
+ export { ControllerDeviceType, ControllerSchema, SensorType } from './Controller';
3
+ export type { DeviceModeSettings, DeviceModeSettingsChanges, DeviceModeSettingsInput, DeviceSettings, DeviceSettingsChanges, DeviceSettingsInput, } from './Device';
4
+ export { DeviceMode, DeviceModeSettingsChangesSchema, DeviceModeSettingsSchema, DeviceSettingsChangesSchema, DeviceSettingsSchema, DeviceType, encodeDeviceModeSettings, encodeDeviceSettings, TemperatureUnit, } from './Device';
5
+ export type { User } from './User';
6
+ export { UserSchema } from './User';
4
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,UAAU,EAAE,oBAAoB,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACvG,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAClF,YAAY,EACV,kBAAkB,EAClB,yBAAyB,EACzB,uBAAuB,EACvB,cAAc,EACd,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,UAAU,CAAC;AAClB,OAAO,EACL,UAAU,EACV,+BAA+B,EAC/B,wBAAwB,EACxB,2BAA2B,EAC3B,oBAAoB,EACpB,UAAU,EACV,wBAAwB,EACxB,oBAAoB,EACpB,eAAe,GAChB,MAAM,UAAU,CAAC;AAClB,YAAY,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AACnC,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC"}
@@ -1,19 +1,19 @@
1
1
  "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
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 __exportStar = (this && this.__exportStar) || function(m, exports) {
14
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
- };
16
2
  Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./Controller"), exports);
18
- __exportStar(require("./Device"), exports);
19
- __exportStar(require("./User"), exports);
3
+ exports.UserSchema = exports.TemperatureUnit = exports.encodeDeviceSettings = exports.encodeDeviceModeSettings = exports.DeviceType = exports.DeviceSettingsSchema = exports.DeviceSettingsChangesSchema = exports.DeviceModeSettingsSchema = exports.DeviceModeSettingsChangesSchema = exports.DeviceMode = exports.SensorType = exports.ControllerSchema = exports.ControllerDeviceType = void 0;
4
+ var Controller_1 = require("./Controller");
5
+ Object.defineProperty(exports, "ControllerDeviceType", { enumerable: true, get: function () { return Controller_1.ControllerDeviceType; } });
6
+ Object.defineProperty(exports, "ControllerSchema", { enumerable: true, get: function () { return Controller_1.ControllerSchema; } });
7
+ Object.defineProperty(exports, "SensorType", { enumerable: true, get: function () { return Controller_1.SensorType; } });
8
+ var Device_1 = require("./Device");
9
+ Object.defineProperty(exports, "DeviceMode", { enumerable: true, get: function () { return Device_1.DeviceMode; } });
10
+ Object.defineProperty(exports, "DeviceModeSettingsChangesSchema", { enumerable: true, get: function () { return Device_1.DeviceModeSettingsChangesSchema; } });
11
+ Object.defineProperty(exports, "DeviceModeSettingsSchema", { enumerable: true, get: function () { return Device_1.DeviceModeSettingsSchema; } });
12
+ Object.defineProperty(exports, "DeviceSettingsChangesSchema", { enumerable: true, get: function () { return Device_1.DeviceSettingsChangesSchema; } });
13
+ Object.defineProperty(exports, "DeviceSettingsSchema", { enumerable: true, get: function () { return Device_1.DeviceSettingsSchema; } });
14
+ Object.defineProperty(exports, "DeviceType", { enumerable: true, get: function () { return Device_1.DeviceType; } });
15
+ Object.defineProperty(exports, "encodeDeviceModeSettings", { enumerable: true, get: function () { return Device_1.encodeDeviceModeSettings; } });
16
+ Object.defineProperty(exports, "encodeDeviceSettings", { enumerable: true, get: function () { return Device_1.encodeDeviceSettings; } });
17
+ Object.defineProperty(exports, "TemperatureUnit", { enumerable: true, get: function () { return Device_1.TemperatureUnit; } });
18
+ var User_1 = require("./User");
19
+ Object.defineProperty(exports, "UserSchema", { enumerable: true, get: function () { return User_1.UserSchema; } });
package/package.json CHANGED
@@ -1,32 +1,41 @@
1
1
  {
2
2
  "name": "@jakobgoerke/ac-infinity-client",
3
- "version": "0.1.1",
3
+ "version": "0.3.0",
4
4
  "main": "./build/src",
5
5
  "types": "./build/src/index.d.ts",
6
6
  "repository": "git@github.com:jakobgoerke/ac-infinity-client.git",
7
7
  "author": "revdev <mail@revdev.me>",
8
8
  "license": "GPL-3.0-or-later",
9
- "dependencies": {
10
- "axios": "1.7.7",
11
- "rimraf": "6.0.1",
12
- "zod": "3.23.8"
13
- },
14
9
  "files": [
15
10
  "package.json",
16
11
  "build/src/**"
17
12
  ],
13
+ "dependencies": {
14
+ "axios": "1.20.0",
15
+ "zod": "4.6.7"
16
+ },
18
17
  "devDependencies": {
19
- "@jest/globals": "29.7.0",
20
- "@tsconfig/node22": "22.0.0",
21
- "@types/jest": "29.5.13",
22
- "jest": "29.7.0",
23
- "ts-jest": "29.2.5",
24
- "typescript": "5.6.2"
18
+ "@biomejs/biome": "2.6.2",
19
+ "@jest/globals": "30.5.2",
20
+ "@tsconfig/node24": "24.0.5",
21
+ "@types/jest": "30.0.0",
22
+ "@types/node": "24.19.2",
23
+ "jest": "30.5.2",
24
+ "rimraf": "6.1.3",
25
+ "ts-jest": "29.4.15",
26
+ "ts-node": "10.9.2",
27
+ "typescript": "6.0.3"
25
28
  },
26
29
  "scripts": {
27
30
  "build": "rimraf build && tsc -p .",
28
31
  "watch": "tsc -p . --watch",
29
32
  "test": "jest",
30
- "coverage": "jest --coverage"
33
+ "coverage": "jest --coverage",
34
+ "lint": "biome check"
35
+ },
36
+ "packageManager": "yarn@4.12.0",
37
+ "publishConfig": {
38
+ "access": "public",
39
+ "provenance": true
31
40
  }
32
- }
41
+ }