trane-thermostat-api 1.0.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 (59) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +150 -0
  3. package/dist/client/auth.d.ts +50 -0
  4. package/dist/client/auth.d.ts.map +1 -0
  5. package/dist/client/auth.js +236 -0
  6. package/dist/client/auth.js.map +1 -0
  7. package/dist/client/nexia-client.d.ts +48 -0
  8. package/dist/client/nexia-client.d.ts.map +1 -0
  9. package/dist/client/nexia-client.js +311 -0
  10. package/dist/client/nexia-client.js.map +1 -0
  11. package/dist/devices/nexia-automation.d.ts +15 -0
  12. package/dist/devices/nexia-automation.d.ts.map +1 -0
  13. package/dist/devices/nexia-automation.js +39 -0
  14. package/dist/devices/nexia-automation.js.map +1 -0
  15. package/dist/devices/nexia-sensor.d.ts +34 -0
  16. package/dist/devices/nexia-sensor.d.ts.map +1 -0
  17. package/dist/devices/nexia-sensor.js +152 -0
  18. package/dist/devices/nexia-sensor.js.map +1 -0
  19. package/dist/devices/nexia-thermostat.d.ts +73 -0
  20. package/dist/devices/nexia-thermostat.d.ts.map +1 -0
  21. package/dist/devices/nexia-thermostat.js +357 -0
  22. package/dist/devices/nexia-thermostat.js.map +1 -0
  23. package/dist/devices/nexia-zone.d.ts +61 -0
  24. package/dist/devices/nexia-zone.d.ts.map +1 -0
  25. package/dist/devices/nexia-zone.js +370 -0
  26. package/dist/devices/nexia-zone.js.map +1 -0
  27. package/dist/index.d.ts +15 -0
  28. package/dist/index.d.ts.map +1 -0
  29. package/dist/index.js +41 -0
  30. package/dist/index.js.map +1 -0
  31. package/dist/types/api.d.ts +277 -0
  32. package/dist/types/api.d.ts.map +1 -0
  33. package/dist/types/api.js +3 -0
  34. package/dist/types/api.js.map +1 -0
  35. package/dist/types/constants.d.ts +137 -0
  36. package/dist/types/constants.d.ts.map +1 -0
  37. package/dist/types/constants.js +160 -0
  38. package/dist/types/constants.js.map +1 -0
  39. package/dist/types/interfaces.d.ts +211 -0
  40. package/dist/types/interfaces.d.ts.map +1 -0
  41. package/dist/types/interfaces.js +3 -0
  42. package/dist/types/interfaces.js.map +1 -0
  43. package/dist/utils/errors.d.ts +94 -0
  44. package/dist/utils/errors.d.ts.map +1 -0
  45. package/dist/utils/errors.js +231 -0
  46. package/dist/utils/errors.js.map +1 -0
  47. package/dist/utils/http-utils.d.ts +59 -0
  48. package/dist/utils/http-utils.d.ts.map +1 -0
  49. package/dist/utils/http-utils.js +273 -0
  50. package/dist/utils/http-utils.js.map +1 -0
  51. package/dist/utils/json-utils.d.ts +32 -0
  52. package/dist/utils/json-utils.d.ts.map +1 -0
  53. package/dist/utils/json-utils.js +389 -0
  54. package/dist/utils/json-utils.js.map +1 -0
  55. package/dist/utils/validation.d.ts +52 -0
  56. package/dist/utils/validation.d.ts.map +1 -0
  57. package/dist/utils/validation.js +272 -0
  58. package/dist/utils/validation.js.map +1 -0
  59. package/package.json +69 -0
@@ -0,0 +1,389 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.JsonUtils = void 0;
4
+ exports.findInJson = findInJson;
5
+ exports.extractPaths = extractPaths;
6
+ const errors_1 = require("./errors");
7
+ class JsonUtils {
8
+ static findDictWithKeyValue(jsonData, key, value, options = {}) {
9
+ const { caseSensitive = true, maxDepth = 50 } = options;
10
+ const search = (data, currentDepth, path = []) => {
11
+ if (currentDepth > maxDepth) {
12
+ return undefined;
13
+ }
14
+ if (Array.isArray(data)) {
15
+ for (let i = 0; i < data.length; i++) {
16
+ const result = search(data[i], currentDepth + 1, [...path, i.toString()]);
17
+ if (result !== undefined) {
18
+ return result;
19
+ }
20
+ }
21
+ }
22
+ else if (data && typeof data === 'object') {
23
+ if (this.objectHasKeyValue(data, key, value, caseSensitive)) {
24
+ return data;
25
+ }
26
+ for (const [objKey, objValue] of Object.entries(data)) {
27
+ const result = search(objValue, currentDepth + 1, [...path, objKey]);
28
+ if (result !== undefined) {
29
+ return result;
30
+ }
31
+ }
32
+ }
33
+ return undefined;
34
+ };
35
+ return search(jsonData, 0);
36
+ }
37
+ static findAllDictsWithKeyValue(jsonData, key, value, options = {}) {
38
+ const { caseSensitive = true, maxDepth = 50, returnPath = false } = options;
39
+ const results = [];
40
+ const search = (data, currentDepth, path = []) => {
41
+ if (currentDepth > maxDepth) {
42
+ return;
43
+ }
44
+ if (Array.isArray(data)) {
45
+ for (let i = 0; i < data.length; i++) {
46
+ search(data[i], currentDepth + 1, [...path, i.toString()]);
47
+ }
48
+ }
49
+ else if (data && typeof data === 'object') {
50
+ if (this.objectHasKeyValue(data, key, value, caseSensitive)) {
51
+ results.push({
52
+ value: data,
53
+ path: returnPath ? [...path] : [],
54
+ depth: currentDepth
55
+ });
56
+ }
57
+ for (const [objKey, objValue] of Object.entries(data)) {
58
+ search(objValue, currentDepth + 1, [...path, objKey]);
59
+ }
60
+ }
61
+ };
62
+ search(jsonData, 0);
63
+ return results;
64
+ }
65
+ static getValueAtPath(jsonData, path, defaultValue) {
66
+ const pathArray = Array.isArray(path) ? path : path.split('.');
67
+ let current = jsonData;
68
+ for (const key of pathArray) {
69
+ if (current === null || current === undefined) {
70
+ return defaultValue;
71
+ }
72
+ if (Array.isArray(current)) {
73
+ const index = parseInt(key, 10);
74
+ if (isNaN(index) || index < 0 || index >= current.length) {
75
+ return defaultValue;
76
+ }
77
+ current = current[index];
78
+ }
79
+ else if (typeof current === 'object') {
80
+ current = current[key];
81
+ }
82
+ else {
83
+ return defaultValue;
84
+ }
85
+ }
86
+ return current !== undefined ? current : defaultValue;
87
+ }
88
+ static setValueAtPath(jsonData, path, value, createPath = true) {
89
+ const pathArray = Array.isArray(path) ? path : path.split('.');
90
+ if (pathArray.length === 0) {
91
+ return false;
92
+ }
93
+ let current = jsonData;
94
+ const lastKey = pathArray[pathArray.length - 1];
95
+ for (let i = 0; i < pathArray.length - 1; i++) {
96
+ const key = pathArray[i];
97
+ if (current === null || current === undefined) {
98
+ if (!createPath)
99
+ return false;
100
+ current = {};
101
+ }
102
+ if (Array.isArray(current)) {
103
+ const index = parseInt(key, 10);
104
+ if (isNaN(index))
105
+ return false;
106
+ if (createPath) {
107
+ while (current.length <= index) {
108
+ current.push(undefined);
109
+ }
110
+ }
111
+ else if (index >= current.length) {
112
+ return false;
113
+ }
114
+ if (current[index] === undefined || current[index] === null) {
115
+ if (createPath) {
116
+ current[index] = {};
117
+ }
118
+ else {
119
+ return false;
120
+ }
121
+ }
122
+ current = current[index];
123
+ }
124
+ else if (typeof current === 'object') {
125
+ if (!(key in current)) {
126
+ if (createPath) {
127
+ current[key] = {};
128
+ }
129
+ else {
130
+ return false;
131
+ }
132
+ }
133
+ current = current[key];
134
+ }
135
+ else {
136
+ return false;
137
+ }
138
+ }
139
+ if (Array.isArray(current)) {
140
+ const index = parseInt(lastKey, 10);
141
+ if (isNaN(index))
142
+ return false;
143
+ if (createPath) {
144
+ while (current.length <= index) {
145
+ current.push(undefined);
146
+ }
147
+ }
148
+ else if (index >= current.length) {
149
+ return false;
150
+ }
151
+ current[index] = value;
152
+ }
153
+ else if (typeof current === 'object' && current !== null) {
154
+ current[lastKey] = value;
155
+ }
156
+ else {
157
+ return false;
158
+ }
159
+ return true;
160
+ }
161
+ static findHumiditySetpoint(setpoint) {
162
+ if (typeof setpoint !== 'number' || !Number.isFinite(setpoint)) {
163
+ throw new errors_1.ValidationError('Setpoint must be a finite number');
164
+ }
165
+ return Math.round(setpoint / 0.05) * 0.05;
166
+ }
167
+ static isNumber(str) {
168
+ if (typeof str !== 'string') {
169
+ return false;
170
+ }
171
+ if (str === '--' || str.trim() === '') {
172
+ return false;
173
+ }
174
+ const num = parseFloat(str);
175
+ return !isNaN(num) && isFinite(num);
176
+ }
177
+ static toNumber(str) {
178
+ if (!this.isNumber(str)) {
179
+ return null;
180
+ }
181
+ return parseFloat(str);
182
+ }
183
+ static deepClone(obj) {
184
+ if (obj === null || typeof obj !== 'object') {
185
+ return obj;
186
+ }
187
+ if (obj instanceof Date) {
188
+ return new Date(obj.getTime());
189
+ }
190
+ if (Array.isArray(obj)) {
191
+ return obj.map((item) => this.deepClone(item));
192
+ }
193
+ const cloned = {};
194
+ for (const [key, value] of Object.entries(obj)) {
195
+ cloned[key] = this.deepClone(value);
196
+ }
197
+ return cloned;
198
+ }
199
+ static deepMerge(target, ...sources) {
200
+ if (!sources.length)
201
+ return target;
202
+ const source = sources.shift();
203
+ if (!source)
204
+ return target;
205
+ for (const key in source) {
206
+ if (source[key] && typeof source[key] === 'object' && !Array.isArray(source[key])) {
207
+ if (!target[key] || typeof target[key] !== 'object') {
208
+ target[key] = {};
209
+ }
210
+ this.deepMerge(target[key], source[key]);
211
+ }
212
+ else {
213
+ target[key] = source[key];
214
+ }
215
+ }
216
+ return this.deepMerge(target, ...sources);
217
+ }
218
+ static safeParse(jsonString) {
219
+ try {
220
+ return JSON.parse(jsonString);
221
+ }
222
+ catch {
223
+ return null;
224
+ }
225
+ }
226
+ static safeStringify(obj, space) {
227
+ try {
228
+ return JSON.stringify(obj, this.jsonReplacer, space);
229
+ }
230
+ catch {
231
+ return null;
232
+ }
233
+ }
234
+ static jsonReplacer(_key, value) {
235
+ if (value === undefined) {
236
+ return null;
237
+ }
238
+ if (typeof value === 'function') {
239
+ return undefined;
240
+ }
241
+ if (typeof value === 'symbol') {
242
+ return value.toString();
243
+ }
244
+ if (typeof value === 'bigint') {
245
+ return value.toString();
246
+ }
247
+ return value;
248
+ }
249
+ static flatten(obj, prefix = '') {
250
+ const flattened = {};
251
+ for (const [key, value] of Object.entries(obj)) {
252
+ const newKey = prefix ? `${prefix}.${key}` : key;
253
+ if (value && typeof value === 'object' && !Array.isArray(value)) {
254
+ Object.assign(flattened, this.flatten(value, newKey));
255
+ }
256
+ else {
257
+ flattened[newKey] = value;
258
+ }
259
+ }
260
+ return flattened;
261
+ }
262
+ static unflatten(obj) {
263
+ const result = {};
264
+ for (const [key, value] of Object.entries(obj)) {
265
+ this.setValueAtPath(result, key, value, true);
266
+ }
267
+ return result;
268
+ }
269
+ static validateStructure(data, schema) {
270
+ try {
271
+ this.validateAgainstSchema(data, schema);
272
+ return true;
273
+ }
274
+ catch {
275
+ return false;
276
+ }
277
+ }
278
+ static objectHasKeyValue(obj, key, value, caseSensitive) {
279
+ if (caseSensitive) {
280
+ return obj[key] === value;
281
+ }
282
+ else {
283
+ const objKey = Object.keys(obj).find(k => k.toLowerCase() === key.toLowerCase());
284
+ if (!objKey)
285
+ return false;
286
+ const objValue = obj[objKey];
287
+ if (typeof objValue === 'string' && typeof value === 'string') {
288
+ return objValue.toLowerCase() === value.toLowerCase();
289
+ }
290
+ return objValue === value;
291
+ }
292
+ }
293
+ static validateAgainstSchema(data, schema, path = 'root') {
294
+ if (schema === null || schema === undefined) {
295
+ return;
296
+ }
297
+ if (typeof schema === 'function') {
298
+ if (!schema(data)) {
299
+ throw new errors_1.ValidationError(`Validation failed at ${path}`);
300
+ }
301
+ return;
302
+ }
303
+ if (Array.isArray(schema)) {
304
+ if (!Array.isArray(data)) {
305
+ throw new errors_1.ValidationError(`Expected array at ${path}, got ${typeof data}`);
306
+ }
307
+ if (schema.length === 1) {
308
+ data.forEach((item, index) => {
309
+ this.validateAgainstSchema(item, schema[0], `${path}[${index}]`);
310
+ });
311
+ }
312
+ return;
313
+ }
314
+ if (typeof schema === 'object') {
315
+ if (typeof data !== 'object' || data === null) {
316
+ throw new errors_1.ValidationError(`Expected object at ${path}, got ${typeof data}`);
317
+ }
318
+ for (const [key, valueSchema] of Object.entries(schema)) {
319
+ const dataValue = data[key];
320
+ this.validateAgainstSchema(dataValue, valueSchema, `${path}.${key}`);
321
+ }
322
+ return;
323
+ }
324
+ if (typeof data !== typeof schema) {
325
+ throw new errors_1.ValidationError(`Expected ${typeof schema} at ${path}, got ${typeof data}`);
326
+ }
327
+ }
328
+ }
329
+ exports.JsonUtils = JsonUtils;
330
+ function findInJson(data, predicate, options = {}) {
331
+ const results = [];
332
+ const { maxDepth = 50, returnPath = false } = options;
333
+ const search = (current, currentDepth, path = []) => {
334
+ if (currentDepth > maxDepth)
335
+ return;
336
+ if (Array.isArray(current)) {
337
+ current.forEach((item, index) => {
338
+ if (predicate(item, index.toString(), current)) {
339
+ results.push({
340
+ value: item,
341
+ path: returnPath ? [...path, index.toString()] : [],
342
+ depth: currentDepth
343
+ });
344
+ }
345
+ search(item, currentDepth + 1, [...path, index.toString()]);
346
+ });
347
+ }
348
+ else if (current && typeof current === 'object') {
349
+ Object.entries(current).forEach(([key, value]) => {
350
+ if (predicate(value, key, current)) {
351
+ results.push({
352
+ value: value,
353
+ path: returnPath ? [...path, key] : [],
354
+ depth: currentDepth
355
+ });
356
+ }
357
+ search(value, currentDepth + 1, [...path, key]);
358
+ });
359
+ }
360
+ };
361
+ search(data, 0);
362
+ return results;
363
+ }
364
+ function extractPaths(data, maxDepth = 10) {
365
+ const paths = [];
366
+ const traverse = (current, currentPath, depth) => {
367
+ if (depth > maxDepth)
368
+ return;
369
+ if (Array.isArray(current)) {
370
+ paths.push(currentPath);
371
+ current.forEach((_, index) => {
372
+ traverse(current[index], `${currentPath}[${index}]`, depth + 1);
373
+ });
374
+ }
375
+ else if (current && typeof current === 'object') {
376
+ paths.push(currentPath);
377
+ Object.keys(current).forEach((key) => {
378
+ const newPath = currentPath ? `${currentPath}.${key}` : key;
379
+ traverse(current[key], newPath, depth + 1);
380
+ });
381
+ }
382
+ else {
383
+ paths.push(currentPath);
384
+ }
385
+ };
386
+ traverse(data, '', 0);
387
+ return paths.filter(path => path.length > 0);
388
+ }
389
+ //# sourceMappingURL=json-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json-utils.js","sourceRoot":"","sources":["../../src/utils/json-utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ import { TemperatureUnit } from '../types/constants';
2
+ export declare class TemperatureValidator {
3
+ static validateSetpoints(heatTemp: number, coolTemp: number, deadband: number, unit: TemperatureUnit): void;
4
+ static validateTemperature(temperature: number, unit: TemperatureUnit): void;
5
+ static roundTemperature(temperature: number, unit: TemperatureUnit): number;
6
+ static convertTemperature(temperature: number, fromUnit: TemperatureUnit, toUnit: TemperatureUnit): number;
7
+ static getTemperatureLimits(unit: TemperatureUnit): {
8
+ min: number;
9
+ max: number;
10
+ };
11
+ static validateTemperatureRange(heatMin: number, heatMax: number, coolMin: number, coolMax: number, deadband: number, unit: TemperatureUnit): void;
12
+ }
13
+ export declare class HumidityValidator {
14
+ static validateHumidity(humidity: number): void;
15
+ static roundHumidity(humidity: number): number;
16
+ static validateHumiditySetpoint(setpoint: number): void;
17
+ static getAvailableSetpoints(): number[];
18
+ }
19
+ export declare class FanSpeedValidator {
20
+ static validateFanSpeed(speed: number): void;
21
+ static roundFanSpeed(speed: number): number;
22
+ static validateFanSpeedLimits(min: number, max: number): void;
23
+ }
24
+ export declare class GeneralValidator {
25
+ static validateRequiredString(value: any, fieldName: string): string;
26
+ static validateRequiredNumber(value: any, fieldName: string): number;
27
+ static validateNumberRange(value: number, min: number, max: number, fieldName: string): number;
28
+ static validateEnum<T>(value: any, enumObject: any, fieldName: string): T;
29
+ static validateArray<T>(value: any, validator: (item: any) => T, fieldName: string): T[];
30
+ static validateOptional<T>(value: any, validator: (val: any) => T, defaultValue: T): T;
31
+ static validateBoolean(value: any, fieldName: string): boolean;
32
+ static validateDate(value: any, fieldName: string): Date;
33
+ static validateRequiredProperties<T extends Record<string, any>>(obj: any, requiredProps: (keyof T)[], objectName: string): void;
34
+ }
35
+ export declare class NexiaValidator {
36
+ static validateTemperatureConfig(config: {
37
+ heatTemp?: number;
38
+ coolTemp?: number;
39
+ deadband: number;
40
+ unit: TemperatureUnit;
41
+ setTemp?: number;
42
+ }): void;
43
+ static validateHumidityConfig(config: {
44
+ dehumidify?: number;
45
+ humidify?: number;
46
+ }): void;
47
+ static validateSensorSelection(config: {
48
+ activeSensorIds: number[];
49
+ availableSensorIds: number[];
50
+ }): void;
51
+ }
52
+ //# sourceMappingURL=validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/utils/validation.ts"],"names":[],"mappings":"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"}