dt-common-device 1.3.0 → 2.0.1

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 (156) hide show
  1. package/TROUBLESHOOTING.md +184 -0
  2. package/dist/config/config.d.ts +9 -2
  3. package/dist/config/config.js +97 -14
  4. package/dist/constants/Event.d.ts +75 -0
  5. package/dist/constants/Event.js +78 -0
  6. package/dist/db/db.d.ts +1 -0
  7. package/dist/db/db.js +18 -2
  8. package/dist/device/cloud/entities/CloudDevice.d.ts +1 -0
  9. package/dist/device/cloud/entities/CloudDevice.js +3 -0
  10. package/dist/device/local/entities/AlertBuilder.d.ts +87 -0
  11. package/dist/device/local/entities/AlertBuilder.example.d.ts +11 -0
  12. package/dist/device/local/entities/AlertBuilder.example.js +117 -0
  13. package/dist/device/local/entities/AlertBuilder.js +179 -0
  14. package/dist/device/local/entities/IssueBuilder.d.ts +109 -0
  15. package/dist/device/local/entities/IssueBuilder.example.d.ts +16 -0
  16. package/dist/device/local/entities/IssueBuilder.example.js +196 -0
  17. package/dist/device/local/entities/IssueBuilder.js +237 -0
  18. package/dist/device/local/entities/index.d.ts +2 -0
  19. package/dist/device/local/entities/index.js +7 -0
  20. package/dist/device/local/events/EventHandler.js +6 -6
  21. package/dist/device/local/events/Events.d.ts +33 -12
  22. package/dist/device/local/events/Events.js +33 -12
  23. package/dist/device/local/interfaces/IDevice.d.ts +10 -9
  24. package/dist/device/local/interfaces/IDevice.js +7 -0
  25. package/dist/device/local/models/Alert.model.d.ts +28 -0
  26. package/dist/device/local/models/Alert.model.js +222 -0
  27. package/dist/device/local/models/Issue.model.d.ts +28 -0
  28. package/dist/device/local/models/Issue.model.js +260 -0
  29. package/dist/device/local/repository/Alert.repository.d.ts +106 -0
  30. package/dist/device/local/repository/Alert.repository.js +374 -0
  31. package/dist/device/local/repository/Device.repository.d.ts +11 -2
  32. package/dist/device/local/repository/Device.repository.js +163 -30
  33. package/dist/device/local/repository/Hub.repository.d.ts +1 -1
  34. package/dist/device/local/repository/Hub.repository.js +60 -18
  35. package/dist/device/local/repository/Issue.repository.d.ts +113 -0
  36. package/dist/device/local/repository/Issue.repository.js +401 -0
  37. package/dist/device/local/repository/Schedule.repository.d.ts +1 -1
  38. package/dist/device/local/repository/Schedule.repository.js +14 -18
  39. package/dist/device/local/services/Alert.service.d.ts +135 -5
  40. package/dist/device/local/services/Alert.service.js +471 -7
  41. package/dist/device/local/services/AlertService.example.d.ts +55 -0
  42. package/dist/device/local/services/AlertService.example.js +148 -0
  43. package/dist/device/local/services/Device.service.d.ts +9 -6
  44. package/dist/device/local/services/Device.service.js +61 -41
  45. package/dist/device/local/services/Issue.service.d.ts +168 -0
  46. package/dist/device/local/services/Issue.service.js +642 -0
  47. package/dist/device/local/services/IssueService.example.d.ts +68 -0
  48. package/dist/device/local/services/IssueService.example.js +177 -0
  49. package/dist/device/local/services/index.d.ts +7 -5
  50. package/dist/device/local/services/index.js +21 -11
  51. package/dist/events/BaseEventHandler.d.ts +43 -0
  52. package/dist/events/BaseEventHandler.js +111 -0
  53. package/dist/events/BaseEventTransformer.d.ts +26 -0
  54. package/dist/events/BaseEventTransformer.js +72 -0
  55. package/dist/events/DeviceEventHandler.d.ts +15 -0
  56. package/dist/events/DeviceEventHandler.js +152 -0
  57. package/dist/events/DeviceEventTransformerFactory.d.ts +27 -0
  58. package/dist/events/DeviceEventTransformerFactory.js +116 -0
  59. package/dist/events/EventHandler.d.ts +11 -0
  60. package/dist/events/EventHandler.js +111 -0
  61. package/dist/events/EventHandlerOrchestrator.d.ts +35 -0
  62. package/dist/events/EventHandlerOrchestrator.js +141 -0
  63. package/dist/events/EventProcessingService.d.ts +43 -0
  64. package/dist/events/EventProcessingService.js +243 -0
  65. package/dist/events/InternalEventSubscription.d.ts +44 -0
  66. package/dist/events/InternalEventSubscription.js +152 -0
  67. package/dist/events/index.d.ts +9 -0
  68. package/dist/events/index.js +21 -0
  69. package/dist/events/interfaces/DeviceEvent.d.ts +48 -0
  70. package/dist/events/interfaces/IEventHandler.d.ts +23 -0
  71. package/dist/{device/cloud/interface.js → events/interfaces/IEventHandler.js} +0 -1
  72. package/dist/events/interfaces/IEventTransformer.d.ts +7 -0
  73. package/dist/{device/cloud/interfaces/IDeviceConnectionService.js → events/interfaces/IEventTransformer.js} +0 -1
  74. package/dist/events/interfaces/IInternalEvent.d.ts +42 -0
  75. package/dist/events/interfaces/IInternalEvent.js +2 -0
  76. package/dist/events/interfaces/index.d.ts +4 -0
  77. package/dist/{device → events/interfaces}/index.js +4 -4
  78. package/dist/index.d.ts +6 -2
  79. package/dist/index.js +9 -2
  80. package/dist/types/alert.types.d.ts +57 -0
  81. package/dist/types/alert.types.js +22 -0
  82. package/dist/types/config.types.d.ts +15 -4
  83. package/dist/types/index.d.ts +2 -0
  84. package/dist/types/index.js +2 -0
  85. package/dist/types/issue.types.d.ts +90 -0
  86. package/dist/types/issue.types.js +40 -0
  87. package/dist/utils/http-utils.d.ts +13 -0
  88. package/dist/utils/http-utils.js +117 -0
  89. package/package.json +2 -1
  90. package/src/config/config.ts +117 -14
  91. package/src/{device/local/events/Events.ts → constants/Event.ts} +34 -13
  92. package/src/db/db.ts +14 -5
  93. package/src/device/cloud/entities/CloudDevice.ts +4 -0
  94. package/src/device/local/entities/AlertBuilder.example.ts +126 -0
  95. package/src/device/local/entities/AlertBuilder.ts +202 -0
  96. package/src/device/local/entities/IssueBuilder.example.ts +210 -0
  97. package/src/device/local/entities/IssueBuilder.ts +263 -0
  98. package/src/device/local/entities/README.md +173 -0
  99. package/src/device/local/entities/index.ts +2 -0
  100. package/src/device/local/interfaces/IDevice.ts +11 -9
  101. package/src/device/local/models/Alert.model.md +319 -0
  102. package/src/device/local/models/Alert.model.ts +283 -0
  103. package/src/device/local/models/Issue.model.md +386 -0
  104. package/src/device/local/models/Issue.model.ts +350 -0
  105. package/src/device/local/models/README.md +312 -0
  106. package/src/device/local/repository/Alert.repository.ts +465 -0
  107. package/src/device/local/repository/Device.repository.ts +251 -30
  108. package/src/device/local/repository/Hub.repository.ts +74 -18
  109. package/src/device/local/repository/Issue.repository.ts +517 -0
  110. package/src/device/local/repository/Schedule.repository.ts +28 -22
  111. package/src/device/local/services/Alert.service.ts +617 -5
  112. package/src/device/local/services/AlertService.example.ts +229 -0
  113. package/src/device/local/services/Device.service.ts +74 -52
  114. package/src/device/local/services/Issue.service.ts +872 -0
  115. package/src/device/local/services/IssueService.example.ts +307 -0
  116. package/src/device/local/services/index.ts +7 -5
  117. package/src/events/BaseEventHandler.ts +145 -0
  118. package/src/events/BaseEventTransformer.ts +97 -0
  119. package/src/events/DeviceEventHandler.ts +211 -0
  120. package/src/events/DeviceEventTransformerFactory.ts +77 -0
  121. package/src/{device/local/events → events}/EventHandler.ts +24 -19
  122. package/src/events/EventHandlerOrchestrator.ts +119 -0
  123. package/src/events/EventProcessingService.ts +248 -0
  124. package/src/events/InternalEventSubscription.ts +219 -0
  125. package/src/events/index.ts +9 -0
  126. package/src/events/interfaces/DeviceEvent.ts +56 -0
  127. package/src/events/interfaces/IEventHandler.ts +28 -0
  128. package/src/events/interfaces/IEventTransformer.ts +8 -0
  129. package/src/events/interfaces/IInternalEvent.ts +47 -0
  130. package/src/events/interfaces/index.ts +4 -0
  131. package/src/index.ts +9 -2
  132. package/src/types/alert.types.ts +64 -0
  133. package/src/types/config.types.ts +17 -4
  134. package/src/types/index.ts +2 -0
  135. package/src/types/issue.types.ts +98 -0
  136. package/src/utils/http-utils.ts +143 -0
  137. package/dist/device/cloud/interface.d.ts +0 -101
  138. package/dist/device/cloud/interfaces/IDeviceConnectionService.d.ts +0 -7
  139. package/dist/device/cloud/interfaces/IDevicesService.d.ts +0 -9
  140. package/dist/device/cloud/services/Device.service.d.ts +0 -39
  141. package/dist/device/cloud/services/Device.service.js +0 -9
  142. package/dist/device/cloud/services/DeviceCloudService.d.ts +0 -42
  143. package/dist/device/cloud/services/DeviceCloudService.js +0 -59
  144. package/dist/device/cloud/services/DeviceHub.service.d.ts +0 -3
  145. package/dist/device/cloud/services/DeviceHub.service.js +0 -6
  146. package/dist/device/cloud/services/Hub.service.d.ts +0 -25
  147. package/dist/device/cloud/services/Hub.service.js +0 -9
  148. package/dist/device/cloud/services/SmartThingsDeviceService.d.ts +0 -38
  149. package/dist/device/cloud/services/SmartThingsDeviceService.js +0 -52
  150. package/dist/device/index.d.ts +0 -4
  151. package/dist/device/local/interface.d.ts +0 -0
  152. package/dist/device/local/interface.js +0 -1
  153. package/dist/device/local/services/DeviceHub.service.d.ts +0 -11
  154. package/dist/device/local/services/DeviceHub.service.js +0 -40
  155. package/src/device/local/events/index.ts +0 -2
  156. /package/dist/{device/cloud/interfaces/IDevicesService.js → events/interfaces/DeviceEvent.js} +0 -0
@@ -1,23 +1,30 @@
1
- import axios from "axios";
2
- import { IDevice } from "../interfaces/IDevice";
1
+ import { IDevice, INewStatus } from "../interfaces/IDevice";
3
2
  import { getConfig } from "../../../config/config";
4
3
  import { getPostgresClient } from "../../../db";
5
4
  import { Service } from "typedi";
6
5
  import { IDtDevice } from "../interfaces/IDtDevice";
6
+ import { getDeviceServiceAxiosInstance } from "../../../utils/http-utils";
7
7
 
8
8
  @Service()
9
9
  export class DeviceRepository {
10
- private readonly baseUrl: string;
11
10
  private readonly postgres;
11
+ private readonly axiosInstance;
12
+
12
13
  constructor() {
13
- const { DEVICE_SERVICE } = getConfig();
14
- if (!DEVICE_SERVICE) {
14
+ this.postgres = getPostgresClient();
15
+ this.axiosInstance = getDeviceServiceAxiosInstance();
16
+ }
17
+
18
+ async createDevice(body: IDevice): Promise<IDevice> {
19
+ try {
20
+ const response = await this.axiosInstance.post(`/devices`, body);
21
+ return response.data;
22
+ } catch (error: any) {
23
+ getConfig().LOGGER.error("Failed to create device:", error);
15
24
  throw new Error(
16
- "DEVICE_SERVICE is not configured. Call initialize() first with DEVICE_SERVICE."
25
+ `Failed to create device: ${error.message || "Unknown error"}`
17
26
  );
18
27
  }
19
- this.baseUrl = DEVICE_SERVICE;
20
- this.postgres = getPostgresClient();
21
28
  }
22
29
 
23
30
  async getDevice(
@@ -25,13 +32,15 @@ export class DeviceRepository {
25
32
  withHubDetails: boolean = false
26
33
  ): Promise<IDevice> {
27
34
  try {
28
- const response = await axios.get(
29
- `${this.baseUrl}/devices/${deviceId}?withHubDetails=${withHubDetails} `
35
+ const response = await this.axiosInstance.get(
36
+ `/devices/${deviceId}?withHubDetails=${withHubDetails} `
30
37
  );
31
38
  return response.data;
32
39
  } catch (error: any) {
33
- console.log(error);
34
- throw new Error(`Failed to get device: ${error.message}`);
40
+ getConfig().LOGGER.error(`Failed to get device ${deviceId}:`, error);
41
+ throw new Error(
42
+ `Failed to get device: ${error.message || "Unknown error"}`
43
+ );
35
44
  }
36
45
  }
37
46
 
@@ -39,10 +48,17 @@ export class DeviceRepository {
39
48
  deviceIds: string[],
40
49
  withHubDetails: boolean = false
41
50
  ): Promise<IDevice[]> {
42
- const response = await axios.get(`${this.baseUrl}/devices`, {
43
- params: { deviceIds, withHubDetails },
44
- });
45
- return response.data;
51
+ try {
52
+ const response = await this.axiosInstance.get(`/devices`, {
53
+ params: { deviceIds, withHubDetails },
54
+ });
55
+ return response.data;
56
+ } catch (error: any) {
57
+ getConfig().LOGGER.error("Failed to get devices:", error);
58
+ throw new Error(
59
+ `Failed to get devices: ${error.message || "Unknown error"}`
60
+ );
61
+ }
46
62
  }
47
63
 
48
64
  async getPropertyDevices(
@@ -51,10 +67,20 @@ export class DeviceRepository {
51
67
  type?: string,
52
68
  withHubDetails: boolean = false
53
69
  ): Promise<IDevice[]> {
54
- const response = await axios.get(`${this.baseUrl}/devices`, {
55
- params: { propertyId, selectDeviceId, type, withHubDetails },
56
- });
57
- return response.data;
70
+ try {
71
+ const response = await this.axiosInstance.get(`/devices`, {
72
+ params: { propertyId, selectDeviceId, type, withHubDetails },
73
+ });
74
+ return response.data;
75
+ } catch (error: any) {
76
+ getConfig().LOGGER.error(
77
+ `Failed to get property devices for ${propertyId}:`,
78
+ error
79
+ );
80
+ throw new Error(
81
+ `Failed to get property devices: ${error.message || "Unknown error"}`
82
+ );
83
+ }
58
84
  }
59
85
 
60
86
  async getPropertyDeviceIds(
@@ -62,26 +88,160 @@ export class DeviceRepository {
62
88
  selectDeviceId: boolean = false,
63
89
  manufacturer: string
64
90
  ) {
65
- const response = await axios.get(`${this.baseUrl}/devices`, {
66
- params: { propertyId, selectDeviceId, manufacturer },
67
- });
68
- return response.data;
91
+ try {
92
+ const response = await this.axiosInstance.get(`/devices`, {
93
+ params: { propertyId, selectDeviceId, manufacturer },
94
+ });
95
+ return response.data;
96
+ } catch (error: any) {
97
+ getConfig().LOGGER.error(
98
+ `Failed to get property device IDs for ${propertyId}:`,
99
+ error
100
+ );
101
+ throw new Error(
102
+ `Failed to get property device IDs: ${error.message || "Unknown error"}`
103
+ );
104
+ }
69
105
  }
70
106
 
71
107
  async getState(deviceId: string): Promise<any> {
72
- return await axios.get(`${this.baseUrl}/devices/${deviceId}/state`);
108
+ try {
109
+ const response = await this.axiosInstance.get(
110
+ `/devices/${deviceId}/state`
111
+ );
112
+ return response.data;
113
+ } catch (error: any) {
114
+ getConfig().LOGGER.error(
115
+ `Failed to get device state for ${deviceId}:`,
116
+ error
117
+ );
118
+ throw new Error(
119
+ `Failed to get device state: ${error.message || "Unknown error"}`
120
+ );
121
+ }
122
+ }
123
+
124
+ async setState(deviceId: string, state: any): Promise<any> {
125
+ try {
126
+ const response = await this.axiosInstance.put(
127
+ `/devices/${deviceId}/state`,
128
+ state
129
+ );
130
+ return response.data;
131
+ } catch (error: any) {
132
+ getConfig().LOGGER.error(
133
+ `Failed to set device state for ${deviceId}:`,
134
+ error
135
+ );
136
+ throw new Error(
137
+ `Failed to set device state: ${error.message || "Unknown error"}`
138
+ );
139
+ }
73
140
  }
74
141
 
75
142
  async getStatus(deviceId: string): Promise<Record<string, any>> {
76
- return await axios.get(`${this.baseUrl}/devices/${deviceId}/status`);
143
+ try {
144
+ const response = await this.axiosInstance.get(
145
+ `/devices/${deviceId}/status`
146
+ );
147
+ return response.data;
148
+ } catch (error: any) {
149
+ getConfig().LOGGER.error(
150
+ `Failed to get device status for ${deviceId}:`,
151
+ error
152
+ );
153
+ throw new Error(
154
+ `Failed to get device status: ${error.message || "Unknown error"}`
155
+ );
156
+ }
157
+ }
158
+
159
+ async setStatus(deviceId: string, newStatus: INewStatus) {
160
+ try {
161
+ const response = await this.axiosInstance.put(
162
+ `/devices/${deviceId}/status`,
163
+ newStatus
164
+ );
165
+ return response.data;
166
+ } catch (error: any) {
167
+ getConfig().LOGGER.error(
168
+ `Failed to set device status for ${deviceId}:`,
169
+ error
170
+ );
171
+ throw new Error(
172
+ `Failed to set device status: ${error.message || "Unknown error"}`
173
+ );
174
+ }
77
175
  }
78
176
 
79
177
  async getBatteryLevel(deviceId: string): Promise<Record<string, any>> {
80
- return await axios.get(`${this.baseUrl}/devices/${deviceId}/battery-level`);
178
+ try {
179
+ const response = await this.axiosInstance.get(
180
+ `/devices/${deviceId}/battery-level`
181
+ );
182
+ return response.data;
183
+ } catch (error: any) {
184
+ getConfig().LOGGER.error(
185
+ `Failed to get battery level for ${deviceId}:`,
186
+ error
187
+ );
188
+ throw new Error(
189
+ `Failed to get battery level: ${error.message || "Unknown error"}`
190
+ );
191
+ }
192
+ }
193
+
194
+ async setBatteryLevel(deviceId: string, newBatteryLevel: any) {
195
+ try {
196
+ const response = await this.axiosInstance.put(
197
+ `/devices/${deviceId}/battery-level`,
198
+ { newBatteryLevel }
199
+ );
200
+ return response.data;
201
+ } catch (error: any) {
202
+ getConfig().LOGGER.error(
203
+ `Failed to set battery level for ${deviceId}:`,
204
+ error
205
+ );
206
+ throw new Error(
207
+ `Failed to set battery level: ${error.message || "Unknown error"}`
208
+ );
209
+ }
81
210
  }
82
211
 
83
212
  async getMetaData(deviceId: string): Promise<any> {
84
- return await axios.get(`${this.baseUrl}/devices/${deviceId}/metaData`);
213
+ try {
214
+ const response = await this.axiosInstance.get(
215
+ `/devices/${deviceId}/metaData`
216
+ );
217
+ return response.data;
218
+ } catch (error: any) {
219
+ getConfig().LOGGER.error(
220
+ `Failed to get metadata for ${deviceId}:`,
221
+ error
222
+ );
223
+ throw new Error(
224
+ `Failed to get metadata: ${error.message || "Unknown error"}`
225
+ );
226
+ }
227
+ }
228
+
229
+ async setMetaData(deviceId: string, metaData: Record<string, any>) {
230
+ try {
231
+ const response = await this.axiosInstance.put(
232
+ `/devices/${deviceId}/metaData`,
233
+ metaData
234
+ );
235
+ return response.data;
236
+ } catch (error: any) {
237
+ getConfig().LOGGER.error(
238
+ `Failed to set metadata for ${deviceId}:`,
239
+ error
240
+ );
241
+ throw new Error(
242
+ `Failed to set metadata: ${error.message || "Unknown error"}`
243
+ );
244
+ }
85
245
  }
86
246
 
87
247
  async getDevicesByAccessGroup(accessGroupId: string): Promise<IDtDevice[]> {
@@ -98,7 +258,10 @@ export class DeviceRepository {
98
258
  }
99
259
  return [];
100
260
  } catch (error) {
101
- console.log(error);
261
+ getConfig().LOGGER.error(
262
+ `Failed to get devices by access group ${accessGroupId}:`,
263
+ error
264
+ );
102
265
  throw new Error("Failed to get devices by access group");
103
266
  }
104
267
  }
@@ -114,8 +277,66 @@ export class DeviceRepository {
114
277
  }
115
278
  return [];
116
279
  } catch (error) {
117
- console.log(error);
280
+ getConfig().LOGGER.error(
281
+ `Failed to get devices by zone ${zoneId}:`,
282
+ error
283
+ );
118
284
  throw new Error("Failed to get device by zone");
119
285
  }
120
286
  }
287
+
288
+ async querySelect(query: any, fields: string[]) {
289
+ try {
290
+ const response = await this.axiosInstance.post(`/devices/select`, {
291
+ query,
292
+ fields,
293
+ });
294
+ return response.data;
295
+ } catch (error: any) {
296
+ getConfig().LOGGER.error("Failed to query select devices:", error);
297
+ throw new Error(
298
+ `Failed to query select devices: ${error.message || "Unknown error"}`
299
+ );
300
+ }
301
+ }
302
+
303
+ //remove - use existing query function
304
+ async queryCount(query: any): Promise<number> {
305
+ try {
306
+ const response = await this.axiosInstance.post(`/devices/count`, query);
307
+ return response.data;
308
+ } catch (error: any) {
309
+ getConfig().LOGGER.error("Failed to query count devices:", error);
310
+ throw new Error(
311
+ `Failed to query count devices: ${error.message || "Unknown error"}`
312
+ );
313
+ }
314
+ }
315
+
316
+ async deleteDevices(query: any) {
317
+ try {
318
+ const response = await this.axiosInstance.post(
319
+ `/devices/deleteMany`,
320
+ query
321
+ );
322
+ return response.data;
323
+ } catch (error: any) {
324
+ getConfig().LOGGER.error("Failed to delete devices:", error);
325
+ throw new Error(
326
+ `Failed to delete devices: ${error.message || "Unknown error"}`
327
+ );
328
+ }
329
+ }
330
+
331
+ async queryDevices(query: any) {
332
+ try {
333
+ const response = await this.axiosInstance.post(`/devices/query`, query);
334
+ return response.data;
335
+ } catch (error: any) {
336
+ getConfig().LOGGER.error("Failed to query devices:", error);
337
+ throw new Error(
338
+ `Failed to query devices: ${error.message || "Unknown error"}`
339
+ );
340
+ }
341
+ }
121
342
  }
@@ -1,51 +1,107 @@
1
- import axios from "axios";
2
1
  import { getConfig } from "../../../config/config";
3
2
  import { getPostgresClient } from "../../../db";
4
3
  import { Service } from "typedi";
5
4
  import { IDevice } from "../interfaces";
5
+ import { getDeviceServiceAxiosInstance } from "../../../utils/http-utils";
6
6
 
7
7
  @Service()
8
8
  export class HubRepository {
9
- private readonly baseUrl: string;
10
9
  private readonly postgres;
10
+ private readonly axiosInstance;
11
+
11
12
  constructor() {
12
- const { DEVICE_SERVICE } = getConfig();
13
- if (!DEVICE_SERVICE) {
14
- throw new Error(
15
- "DEVICE_SERVICE is not configured. Call initialize() first with DEVICE_SERVICE."
16
- );
17
- }
18
- this.baseUrl = DEVICE_SERVICE;
19
13
  this.postgres = getPostgresClient();
14
+ this.axiosInstance = getDeviceServiceAxiosInstance();
20
15
  }
21
16
 
22
17
  async addHub(body: Partial<IDevice>): Promise<IDevice> {
23
- return await axios.post(`${this.baseUrl}/devices/hubs`, body);
18
+ try {
19
+ const response = await this.axiosInstance.post(`/devices/hubs`, body);
20
+ return response.data;
21
+ } catch (error: any) {
22
+ getConfig().LOGGER.error("Failed to add hub:", error);
23
+ throw new Error(`Failed to add hub: ${error.message || "Unknown error"}`);
24
+ }
24
25
  }
25
26
 
26
27
  async getHubs(hubIds: string[]): Promise<IDevice[]> {
27
- const query = hubIds && hubIds.length ? `?ids=${hubIds.join(",")}` : "";
28
- return await axios.get(`${this.baseUrl}/devices/hubs${query}`);
28
+ try {
29
+ const query = hubIds && hubIds.length ? `?ids=${hubIds.join(",")}` : "";
30
+ const response = await this.axiosInstance.get(`/devices/hubs${query}`);
31
+ return response.data;
32
+ } catch (error: any) {
33
+ getConfig().LOGGER.error("Failed to get hubs:", error);
34
+ throw new Error(
35
+ `Failed to get hubs: ${error.message || "Unknown error"}`
36
+ );
37
+ }
29
38
  }
30
39
 
31
40
  async getHub(hubId: string): Promise<IDevice> {
32
- return await axios.get(`${this.baseUrl}/devices/hubs/${hubId}`);
41
+ try {
42
+ const response = await this.axiosInstance.get(`/devices/hubs/${hubId}`);
43
+ return response.data;
44
+ } catch (error: any) {
45
+ getConfig().LOGGER.error(`Failed to get hub ${hubId}:`, error);
46
+ throw new Error(
47
+ `Failed to get hub ${hubId}: ${error.message || "Unknown error"}`
48
+ );
49
+ }
33
50
  }
34
51
 
35
52
  async updateHub(hubId: string, body: any): Promise<IDevice> {
36
- return await axios.put(`${this.baseUrl}/devices/hubs/${hubId}`, body);
53
+ try {
54
+ const response = await this.axiosInstance.put(
55
+ `/devices/hubs/${hubId}`,
56
+ body
57
+ );
58
+ return response.data;
59
+ } catch (error: any) {
60
+ getConfig().LOGGER.error(`Failed to update hub ${hubId}:`, error);
61
+ throw new Error(
62
+ `Failed to update hub ${hubId}: ${error.message || "Unknown error"}`
63
+ );
64
+ }
37
65
  }
38
66
 
39
67
  async getStatus(hubId: string): Promise<"ONLINE" | "OFFLINE" | "UNKNOWN"> {
40
- return await axios.get(`${this.baseUrl}/devices/hubs/${hubId}/status`);
68
+ try {
69
+ const response = await this.axiosInstance.get(
70
+ `/devices/hubs/${hubId}/status`
71
+ );
72
+ return response.data;
73
+ } catch (error: any) {
74
+ getConfig().LOGGER.error(`Failed to get hub status ${hubId}:`, error);
75
+ throw new Error(
76
+ `Failed to get hub status ${hubId}: ${error.message || "Unknown error"}`
77
+ );
78
+ }
41
79
  }
42
80
 
43
81
  async deleteHub(hubId: string): Promise<any> {
44
- return await axios.delete(`${this.baseUrl}/devices/hubs/${hubId}`);
82
+ try {
83
+ const response = await this.axiosInstance.delete(
84
+ `/devices/hubs/${hubId}`
85
+ );
86
+ return response.data;
87
+ } catch (error: any) {
88
+ getConfig().LOGGER.error(`Failed to delete hub ${hubId}:`, error);
89
+ throw new Error(
90
+ `Failed to delete hub ${hubId}: ${error.message || "Unknown error"}`
91
+ );
92
+ }
45
93
  }
46
94
 
47
95
  async deleteAllHubs(hubIds: string[]): Promise<any> {
48
- const query = hubIds.length ? `?ids=${hubIds.join(",")}` : "";
49
- return await axios.delete(`${this.baseUrl}/devices/hubs${query}`);
96
+ try {
97
+ const query = hubIds.length ? `?ids=${hubIds.join(",")}` : "";
98
+ const response = await this.axiosInstance.delete(`/devices/hubs${query}`);
99
+ return response.data;
100
+ } catch (error: any) {
101
+ getConfig().LOGGER.error("Failed to delete all hubs:", error);
102
+ throw new Error(
103
+ `Failed to delete all hubs: ${error.message || "Unknown error"}`
104
+ );
105
+ }
50
106
  }
51
107
  }