dt-common-device 11.2.0 → 11.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (233) hide show
  1. package/dist/admin/Admin.repository.d.ts +7 -0
  2. package/dist/admin/Admin.repository.js +182 -0
  3. package/dist/admin/Admin.service.d.ts +5 -0
  4. package/dist/admin/Admin.service.js +17 -0
  5. package/dist/admin/index.d.ts +1 -0
  6. package/dist/admin/index.js +17 -0
  7. package/dist/audit/AuditProperties.d.ts +16 -0
  8. package/dist/audit/AuditProperties.js +2 -0
  9. package/dist/chronicle/Cronicle.service.d.ts +2 -6
  10. package/dist/chronicle/Cronicle.service.js +2 -19
  11. package/dist/chronicle/IChronicle.interface.d.ts +14 -0
  12. package/dist/chronicle/IChronicle.interface.js +2 -0
  13. package/dist/chronicle/ICronicle.interface.d.ts +0 -1
  14. package/dist/chronicle/chronicle.service.d.ts +4 -0
  15. package/dist/chronicle/chronicle.service.js +44 -0
  16. package/dist/config/config.js +5 -0
  17. package/dist/config/config.types.d.ts +1 -1
  18. package/dist/config/constants.d.ts +7 -0
  19. package/dist/config/constants.js +7 -2
  20. package/dist/connection/Connection.repository.d.ts +8 -0
  21. package/dist/connection/Connection.repository.js +92 -0
  22. package/dist/connection/Connection.service.d.ts +8 -0
  23. package/dist/connection/Connection.service.js +32 -0
  24. package/dist/connection/IConnection.d.ts +28 -0
  25. package/dist/connection/IConnection.js +16 -0
  26. package/dist/connection/index.d.ts +2 -0
  27. package/dist/connection/index.js +18 -0
  28. package/dist/constants/ConnectionProviders.d.ts +1 -0
  29. package/dist/constants/ConnectionProviders.js +1 -0
  30. package/dist/copilotQueue/examples/CopilotQueue.example.d.ts +37 -0
  31. package/dist/copilotQueue/examples/CopilotQueue.example.js +140 -0
  32. package/dist/copilotQueue/examples/index.d.ts +1 -0
  33. package/dist/copilotQueue/examples/index.js +17 -0
  34. package/dist/device/cloud/entities/CloudConnection.d.ts +6 -0
  35. package/dist/device/cloud/entities/CloudConnection.js +6 -0
  36. package/dist/device/cloud/entities/CloudDevice.d.ts +16 -0
  37. package/dist/device/cloud/entities/CloudDevice.js +26 -0
  38. package/dist/device/cloud/entities/CloudDeviceService.d.ts +5 -0
  39. package/dist/device/cloud/entities/CloudDeviceService.js +9 -0
  40. package/dist/device/cloud/entities/DeviceFactory.d.ts +7 -0
  41. package/dist/device/cloud/entities/DeviceFactory.js +80 -0
  42. package/dist/device/cloud/entities/index.d.ts +3 -0
  43. package/dist/device/cloud/entities/index.js +19 -0
  44. package/dist/device/cloud/interface.d.ts +101 -0
  45. package/dist/device/cloud/interface.js +3 -0
  46. package/dist/device/cloud/interfaces/ICloudConnection.d.ts +5 -0
  47. package/dist/device/cloud/interfaces/ICloudConnection.js +2 -0
  48. package/dist/device/cloud/interfaces/ICloudDevice.d.ts +9 -0
  49. package/dist/device/cloud/interfaces/ICloudDevice.js +2 -0
  50. package/dist/device/cloud/interfaces/ICloudDeviceService.d.ts +4 -0
  51. package/dist/device/cloud/interfaces/ICloudDeviceService.js +2 -0
  52. package/dist/device/cloud/interfaces/IConnectionService.d.ts +7 -0
  53. package/dist/device/cloud/interfaces/IConnectionService.js +2 -0
  54. package/dist/device/cloud/interfaces/IDeviceConnectionService.d.ts +7 -0
  55. package/dist/device/cloud/interfaces/IDeviceConnectionService.js +3 -0
  56. package/dist/device/cloud/interfaces/IDeviceFactory.d.ts +4 -0
  57. package/dist/device/cloud/interfaces/IDeviceFactory.js +2 -0
  58. package/dist/device/cloud/interfaces/IDeviceService.d.ts +8 -0
  59. package/dist/device/cloud/interfaces/IDeviceService.js +2 -0
  60. package/dist/device/cloud/interfaces/IDevicesService.d.ts +9 -0
  61. package/dist/device/cloud/interfaces/IDevicesService.js +2 -0
  62. package/dist/device/cloud/interfaces/IHubService.d.ts +5 -0
  63. package/dist/device/cloud/interfaces/IHubService.js +2 -0
  64. package/dist/device/cloud/interfaces/IRawDataTransformer.d.ts +4 -0
  65. package/dist/device/cloud/interfaces/IRawDataTransformer.js +2 -0
  66. package/dist/device/cloud/interfaces/IRawDevice.d.ts +17 -0
  67. package/dist/device/cloud/interfaces/IRawDevice.js +11 -0
  68. package/dist/device/cloud/interfaces/index.d.ts +5 -0
  69. package/dist/device/cloud/interfaces/index.js +21 -0
  70. package/dist/device/cloud/services/CloudDevice.service.d.ts +5 -0
  71. package/dist/device/cloud/services/CloudDevice.service.js +9 -0
  72. package/dist/device/cloud/services/Connection.service.d.ts +8 -0
  73. package/dist/device/cloud/services/Connection.service.js +6 -0
  74. package/dist/device/cloud/services/Device.service.d.ts +39 -0
  75. package/dist/device/cloud/services/Device.service.js +9 -0
  76. package/dist/device/cloud/services/DeviceCloudService.d.ts +42 -0
  77. package/dist/device/cloud/services/DeviceCloudService.js +59 -0
  78. package/dist/device/cloud/services/DeviceHub.service.d.ts +3 -0
  79. package/dist/device/cloud/services/DeviceHub.service.js +6 -0
  80. package/dist/device/cloud/services/Hub.service.d.ts +25 -0
  81. package/dist/device/cloud/services/Hub.service.js +9 -0
  82. package/dist/device/cloud/services/SmartThingsDeviceService.d.ts +38 -0
  83. package/dist/device/cloud/services/SmartThingsDeviceService.js +52 -0
  84. package/dist/device/cloud/services/index.d.ts +2 -0
  85. package/dist/device/cloud/services/index.js +18 -0
  86. package/dist/device/cloud/types.d.ts +52 -0
  87. package/dist/device/cloud/types.js +15 -0
  88. package/dist/device/index.d.ts +4 -0
  89. package/dist/device/index.js +20 -0
  90. package/dist/device/local/entities/AlertBuilder.d.ts +87 -0
  91. package/dist/device/local/entities/AlertBuilder.example.d.ts +11 -0
  92. package/dist/device/local/entities/AlertBuilder.example.js +117 -0
  93. package/dist/device/local/entities/AlertBuilder.js +179 -0
  94. package/dist/device/local/entities/IssueBuilder.d.ts +109 -0
  95. package/dist/device/local/entities/IssueBuilder.example.d.ts +16 -0
  96. package/dist/device/local/entities/IssueBuilder.example.js +196 -0
  97. package/dist/device/local/entities/IssueBuilder.js +237 -0
  98. package/dist/device/local/entities/index.d.ts +2 -0
  99. package/dist/device/local/entities/index.js +7 -0
  100. package/dist/device/local/events/EventHandler.d.ts +11 -0
  101. package/dist/device/local/events/EventHandler.js +86 -0
  102. package/dist/device/local/events/Events.d.ts +54 -0
  103. package/dist/device/local/events/Events.js +57 -0
  104. package/dist/device/local/events/index.d.ts +2 -0
  105. package/dist/device/local/events/index.js +7 -0
  106. package/dist/device/local/handler/EventHandler.d.ts +7 -0
  107. package/dist/device/local/handler/EventHandler.js +44 -0
  108. package/dist/device/local/interface.d.ts +0 -0
  109. package/dist/device/local/interface.js +1 -0
  110. package/dist/device/local/interfaces/IConnection.d.ts +26 -0
  111. package/dist/device/local/interfaces/IConnection.js +14 -0
  112. package/dist/device/local/interfaces/IDevice.d.ts +68 -0
  113. package/dist/device/local/interfaces/IDevice.js +10 -0
  114. package/dist/device/local/interfaces/IDtDevice.d.ts +16 -0
  115. package/dist/device/local/interfaces/IDtDevice.js +2 -0
  116. package/dist/device/local/interfaces/IHub.d.ts +46 -0
  117. package/dist/device/local/interfaces/IHub.js +2 -0
  118. package/dist/device/local/interfaces/IProperty.d.ts +29 -0
  119. package/dist/device/local/interfaces/IProperty.js +2 -0
  120. package/dist/device/local/interfaces/ISchedule.d.ts +25 -0
  121. package/dist/device/local/interfaces/ISchedule.js +2 -0
  122. package/dist/device/local/interfaces/index.d.ts +3 -0
  123. package/dist/device/local/interfaces/index.js +19 -0
  124. package/dist/device/local/models/Alert.model.d.ts +28 -0
  125. package/dist/device/local/models/Alert.model.js +222 -0
  126. package/dist/device/local/models/Issue.model.d.ts +28 -0
  127. package/dist/device/local/models/Issue.model.js +260 -0
  128. package/dist/device/local/repository/Alert.repository.d.ts +106 -0
  129. package/dist/device/local/repository/Alert.repository.js +374 -0
  130. package/dist/device/local/repository/Connection.repository.d.ts +8 -0
  131. package/dist/device/local/repository/Connection.repository.js +92 -0
  132. package/dist/device/local/repository/Device.repository.d.ts +30 -0
  133. package/dist/device/local/repository/Device.repository.js +325 -0
  134. package/dist/device/local/repository/Hub.repository.d.ts +13 -0
  135. package/dist/device/local/repository/Hub.repository.js +139 -0
  136. package/dist/device/local/repository/Issue.repository.d.ts +113 -0
  137. package/dist/device/local/repository/Issue.repository.js +401 -0
  138. package/dist/device/local/repository/Property.repository.d.ts +8 -0
  139. package/dist/device/local/repository/Property.repository.js +95 -0
  140. package/dist/device/local/repository/Schedule.repository.d.ts +9 -0
  141. package/dist/device/local/repository/Schedule.repository.js +109 -0
  142. package/dist/device/local/services/Alert.service.d.ts +137 -0
  143. package/dist/device/local/services/Alert.service.js +475 -0
  144. package/dist/device/local/services/AlertService.example.d.ts +55 -0
  145. package/dist/device/local/services/AlertService.example.js +148 -0
  146. package/dist/device/local/services/Connection.service.d.ts +8 -0
  147. package/dist/device/local/services/Connection.service.js +32 -0
  148. package/dist/device/local/services/Device.service.d.ts +40 -0
  149. package/dist/device/local/services/Device.service.js +391 -0
  150. package/dist/device/local/services/DeviceHub.service.d.ts +11 -0
  151. package/dist/device/local/services/DeviceHub.service.js +40 -0
  152. package/dist/device/local/services/Hub.service.d.ts +12 -0
  153. package/dist/device/local/services/Hub.service.js +107 -0
  154. package/dist/device/local/services/Issue.service.d.ts +168 -0
  155. package/dist/device/local/services/Issue.service.js +642 -0
  156. package/dist/device/local/services/IssueService.example.d.ts +68 -0
  157. package/dist/device/local/services/IssueService.example.js +177 -0
  158. package/dist/device/local/services/Property.service.d.ts +8 -0
  159. package/dist/device/local/services/Property.service.js +36 -0
  160. package/dist/device/local/services/Schedule.service.d.ts +9 -0
  161. package/dist/device/local/services/Schedule.service.js +26 -0
  162. package/dist/device/local/services/index.d.ts +3 -0
  163. package/dist/device/local/services/index.js +19 -0
  164. package/dist/entities/accessGroup/AccessGroup.repository.d.ts +1 -2
  165. package/dist/entities/accessGroup/AccessGroup.repository.js +1 -4
  166. package/dist/entities/accessGroup/AccessGroup.service.d.ts +1 -2
  167. package/dist/entities/accessGroup/AccessGroup.service.js +3 -4
  168. package/dist/entities/guest/Guest.repository.d.ts +1 -1
  169. package/dist/entities/guest/Guest.repository.js +2 -5
  170. package/dist/entities/guest/Guest.service.d.ts +1 -1
  171. package/dist/entities/guest/Guest.service.js +1 -4
  172. package/dist/entities/schedules/Schedule.repository.d.ts +1 -1
  173. package/dist/entities/schedules/Schedule.repository.js +2 -5
  174. package/dist/entities/schedules/Schedule.service.d.ts +1 -1
  175. package/dist/entities/schedules/Schedule.service.js +1 -4
  176. package/dist/entities/user/User.repository.js +1 -4
  177. package/dist/entities/user/User.service.d.ts +1 -1
  178. package/dist/entities/user/User.service.js +1 -4
  179. package/dist/entities/zone/Zone.service.js +1 -4
  180. package/dist/pms/IPms.d.ts +6 -0
  181. package/dist/pms/IPms.js +10 -0
  182. package/dist/pms/index.d.ts +1 -0
  183. package/dist/pms/index.js +18 -0
  184. package/dist/pms/webhookQueue/examples/index.d.ts +2 -0
  185. package/dist/pms/webhookQueue/examples/index.js +18 -0
  186. package/dist/pms/webhookQueue/examples/pms-integration.d.ts +65 -0
  187. package/dist/pms/webhookQueue/examples/pms-integration.js +254 -0
  188. package/dist/pms/webhookQueue/examples/usage.d.ts +7 -0
  189. package/dist/pms/webhookQueue/examples/usage.js +175 -0
  190. package/dist/pms/webhookQueue/index.d.ts +3 -0
  191. package/dist/pms/webhookQueue/index.js +20 -0
  192. package/dist/pms/webhookQueue/interfaces/IWebhookQueue.d.ts +33 -0
  193. package/dist/pms/webhookQueue/interfaces/IWebhookQueue.js +2 -0
  194. package/dist/pms/webhookQueue/interfaces/IWebhookWorker.d.ts +38 -0
  195. package/dist/pms/webhookQueue/interfaces/IWebhookWorker.js +2 -0
  196. package/dist/pms/webhookQueue/interfaces/index.d.ts +1 -0
  197. package/dist/pms/webhookQueue/interfaces/index.js +17 -0
  198. package/dist/pms/webhookQueue/services/WebhookQueueFactory.d.ts +38 -0
  199. package/dist/pms/webhookQueue/services/WebhookQueueFactory.js +131 -0
  200. package/dist/pms/webhookQueue/services/WebhookQueueIntegration.d.ts +70 -0
  201. package/dist/pms/webhookQueue/services/WebhookQueueIntegration.js +207 -0
  202. package/dist/pms/webhookQueue/services/WebhookQueueService.d.ts +45 -0
  203. package/dist/pms/webhookQueue/services/WebhookQueueService.js +270 -0
  204. package/dist/pms/webhookQueue/services/WebhookWorker.d.ts +37 -0
  205. package/dist/pms/webhookQueue/services/WebhookWorker.js +201 -0
  206. package/dist/pms/webhookQueue/services/index.d.ts +1 -0
  207. package/dist/pms/webhookQueue/services/index.js +17 -0
  208. package/dist/pms/webhookQueue/types/index.d.ts +1 -0
  209. package/dist/pms/webhookQueue/types/index.js +17 -0
  210. package/dist/pms/webhookQueue/types/webhook.types.d.ts +39 -0
  211. package/dist/pms/webhookQueue/types/webhook.types.js +2 -0
  212. package/dist/property/IProperty.d.ts +29 -0
  213. package/dist/property/IProperty.js +2 -0
  214. package/dist/property/Property.repository.d.ts +8 -0
  215. package/dist/property/Property.repository.js +109 -0
  216. package/dist/property/Property.service.d.ts +8 -0
  217. package/dist/property/Property.service.js +124 -0
  218. package/dist/property/index.d.ts +2 -0
  219. package/dist/property/index.js +18 -0
  220. package/dist/queue/interfaces/IHttpRequestJob.d.ts +9 -0
  221. package/dist/queue/interfaces/IHttpRequestJob.js +2 -0
  222. package/dist/queue/utils/rateLimit.utils.js +6 -0
  223. package/dist/types/alert.types.d.ts +57 -0
  224. package/dist/types/alert.types.js +22 -0
  225. package/dist/types/config.types.d.ts +19 -0
  226. package/dist/types/config.types.js +2 -0
  227. package/dist/types/index.d.ts +3 -0
  228. package/dist/types/index.js +19 -0
  229. package/dist/types/issue.types.d.ts +90 -0
  230. package/dist/types/issue.types.js +40 -0
  231. package/dist/utils/http-utils.d.ts +13 -0
  232. package/dist/utils/http-utils.js +117 -0
  233. package/package.json +1 -1
@@ -0,0 +1,137 @@
1
+ import { AlertRepository } from "../repository/Alert.repository";
2
+ import { IAlertDocument } from "../models/Alert.model";
3
+ import { CreateAlertData, UpdateAlertData, AlertCategory, AlertSeverity, EntityType } from "../../../types/alert.types";
4
+ import { AlertBuilder } from "../entities/AlertBuilder";
5
+ export declare class AlertService {
6
+ private readonly alertRepository;
7
+ constructor(alertRepository: AlertRepository);
8
+ /**
9
+ * Create a readiness alert using AlertBuilder
10
+ */
11
+ raiseReadinessAlert(propertyId: string, title: string, description: string, entityId?: string, entityType?: EntityType, createdBy?: string): Promise<IAlertDocument>;
12
+ /**
13
+ * Create an operations alert using AlertBuilder
14
+ */
15
+ raiseOperationsAlert(propertyId: string, title: string, description: string, entityId?: string, entityType?: EntityType, createdBy?: string): Promise<IAlertDocument>;
16
+ /**
17
+ * Create a security alert using AlertBuilder
18
+ */
19
+ raiseSecurityAlert(propertyId: string, title: string, description: string, entityId?: string, entityType?: EntityType, createdBy?: string): Promise<IAlertDocument>;
20
+ /**
21
+ * Create an energy alert using AlertBuilder
22
+ */
23
+ raiseEnergyAlert(propertyId: string, title: string, description: string, entityId?: string, entityType?: EntityType, createdBy?: string): Promise<IAlertDocument>;
24
+ /**
25
+ * Create a device-specific alert using AlertBuilder
26
+ */
27
+ raiseDeviceAlert(deviceId: string, propertyId: string, title: string, description: string, category?: AlertCategory, severity?: AlertSeverity, createdBy?: string): Promise<IAlertDocument>;
28
+ /**
29
+ * Create a hub-specific alert using AlertBuilder
30
+ */
31
+ raiseHubAlert(hubId: string, propertyId: string, title: string, description: string, category?: AlertCategory, severity?: AlertSeverity, createdBy?: string): Promise<IAlertDocument>;
32
+ /**
33
+ * Create a new alert with business logic validation
34
+ * Accepts either a CreateAlertData object or an AlertBuilder instance
35
+ */
36
+ createAlert(alertData: CreateAlertData | AlertBuilder): Promise<IAlertDocument>;
37
+ /**
38
+ * Get alert by ID with business logic
39
+ */
40
+ getAlertById(id: string, includeDeleted?: boolean): Promise<IAlertDocument | null>;
41
+ /**
42
+ * Get all alerts with business logic filtering
43
+ */
44
+ getAlerts(filters?: {
45
+ propertyId?: string;
46
+ category?: AlertCategory;
47
+ severity?: AlertSeverity;
48
+ entityType?: EntityType;
49
+ entityId?: string;
50
+ isActive?: boolean;
51
+ isRead?: boolean;
52
+ includeDeleted?: boolean;
53
+ limit?: number;
54
+ skip?: number;
55
+ }): Promise<IAlertDocument[]>;
56
+ /**
57
+ * Update an alert with business logic validation
58
+ */
59
+ updateAlert(id: string, updateData: UpdateAlertData): Promise<IAlertDocument | null>;
60
+ /**
61
+ * Soft delete an alert with business logic
62
+ */
63
+ deleteAlert(id: string, deletedBy: string): Promise<boolean>;
64
+ /**
65
+ * Mark alert as read with business logic
66
+ */
67
+ markAsRead(id: string, updatedBy: string): Promise<IAlertDocument | null>;
68
+ /**
69
+ * Mark alert as unread with business logic
70
+ */
71
+ markAsUnread(id: string, updatedBy: string): Promise<IAlertDocument | null>;
72
+ /**
73
+ * Activate an alert with business logic
74
+ */
75
+ activateAlert(id: string, updatedBy: string): Promise<IAlertDocument | null>;
76
+ /**
77
+ * Deactivate an alert with business logic
78
+ */
79
+ deactivateAlert(id: string, updatedBy: string): Promise<IAlertDocument | null>;
80
+ /**
81
+ * Snooze an alert with business logic
82
+ */
83
+ snoozeAlert(id: string, until: Date, updatedBy: string): Promise<IAlertDocument | null>;
84
+ /**
85
+ * Unsnooze an alert with business logic
86
+ */
87
+ unsnoozeAlert(id: string, updatedBy: string): Promise<IAlertDocument | null>;
88
+ /**
89
+ * Get alerts by property with business logic
90
+ */
91
+ getAlertsByProperty(propertyId: string, includeDeleted?: boolean): Promise<IAlertDocument[]>;
92
+ /**
93
+ * Get alerts by entity with business logic
94
+ */
95
+ getAlertsByEntity(entityId: string, entityType: EntityType, includeDeleted?: boolean): Promise<IAlertDocument[]>;
96
+ /**
97
+ * Get alerts by category with business logic
98
+ */
99
+ getAlertsByCategory(category: AlertCategory, includeDeleted?: boolean): Promise<IAlertDocument[]>;
100
+ /**
101
+ * Get alerts by severity with business logic
102
+ */
103
+ getAlertsBySeverity(severity: AlertSeverity, includeDeleted?: boolean): Promise<IAlertDocument[]>;
104
+ /**
105
+ * Get active alerts with business logic
106
+ */
107
+ getActiveAlerts(includeDeleted?: boolean): Promise<IAlertDocument[]>;
108
+ /**
109
+ * Get unread alerts with business logic
110
+ */
111
+ getUnreadAlerts(includeDeleted?: boolean): Promise<IAlertDocument[]>;
112
+ /**
113
+ * Get snoozed alerts with business logic
114
+ */
115
+ getSnoozedAlerts(includeDeleted?: boolean): Promise<IAlertDocument[]>;
116
+ /**
117
+ * Get expired snooze alerts with business logic
118
+ */
119
+ getExpiredSnoozeAlerts(includeDeleted?: boolean): Promise<IAlertDocument[]>;
120
+ /**
121
+ * Get alert statistics with business logic
122
+ */
123
+ getAlertStatistics(propertyId?: string): Promise<{
124
+ total: number;
125
+ active: number;
126
+ unread: number;
127
+ snoozed: number;
128
+ bySeverity: Record<AlertSeverity, number>;
129
+ byCategory: Record<AlertCategory, number>;
130
+ }>;
131
+ private validateAlertData;
132
+ private validateFilters;
133
+ private validateUpdateData;
134
+ private validateSnoozeDate;
135
+ private determineDefaultSeverity;
136
+ private applyBusinessRules;
137
+ }
@@ -0,0 +1,475 @@
1
+ "use strict";
2
+ var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
3
+ function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
4
+ var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
5
+ var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
6
+ var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
7
+ var _, done = false;
8
+ for (var i = decorators.length - 1; i >= 0; i--) {
9
+ var context = {};
10
+ for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
11
+ for (var p in contextIn.access) context.access[p] = contextIn.access[p];
12
+ context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
13
+ var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
14
+ if (kind === "accessor") {
15
+ if (result === void 0) continue;
16
+ if (result === null || typeof result !== "object") throw new TypeError("Object expected");
17
+ if (_ = accept(result.get)) descriptor.get = _;
18
+ if (_ = accept(result.set)) descriptor.set = _;
19
+ if (_ = accept(result.init)) initializers.unshift(_);
20
+ }
21
+ else if (_ = accept(result)) {
22
+ if (kind === "field") initializers.unshift(_);
23
+ else descriptor[key] = _;
24
+ }
25
+ }
26
+ if (target) Object.defineProperty(target, contextIn.name, descriptor);
27
+ done = true;
28
+ };
29
+ var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) {
30
+ var useValue = arguments.length > 2;
31
+ for (var i = 0; i < initializers.length; i++) {
32
+ value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
33
+ }
34
+ return useValue ? value : void 0;
35
+ };
36
+ var __setFunctionName = (this && this.__setFunctionName) || function (f, name, prefix) {
37
+ if (typeof name === "symbol") name = name.description ? "[".concat(name.description, "]") : "";
38
+ return Object.defineProperty(f, "name", { configurable: true, value: prefix ? "".concat(prefix, " ", name) : name });
39
+ };
40
+ Object.defineProperty(exports, "__esModule", { value: true });
41
+ exports.AlertService = void 0;
42
+ const typedi_1 = require("typedi");
43
+ const Alert_model_1 = require("../models/Alert.model");
44
+ const alert_types_1 = require("../../../types/alert.types");
45
+ const AlertBuilder_1 = require("../entities/AlertBuilder");
46
+ let AlertService = (() => {
47
+ let _classDecorators = [(0, typedi_1.Service)()];
48
+ let _classDescriptor;
49
+ let _classExtraInitializers = [];
50
+ let _classThis;
51
+ var AlertService = _classThis = class {
52
+ constructor(alertRepository) {
53
+ this.alertRepository = alertRepository;
54
+ }
55
+ /**
56
+ * Create a readiness alert using AlertBuilder
57
+ */
58
+ async raiseReadinessAlert(propertyId, title, description, entityId, entityType, createdBy) {
59
+ const alertBuilder = AlertBuilder_1.AlertBuilder.createReadinessAlert()
60
+ .setPropertyId(propertyId)
61
+ .setTitle(title)
62
+ .setDescription(description);
63
+ if (entityId)
64
+ alertBuilder.setEntityId(entityId);
65
+ if (entityType)
66
+ alertBuilder.setEntityType(entityType);
67
+ if (createdBy)
68
+ alertBuilder.setCreatedBy(createdBy);
69
+ return await this.createAlert(alertBuilder);
70
+ }
71
+ /**
72
+ * Create an operations alert using AlertBuilder
73
+ */
74
+ async raiseOperationsAlert(propertyId, title, description, entityId, entityType, createdBy) {
75
+ const alertBuilder = AlertBuilder_1.AlertBuilder.createOperationsAlert()
76
+ .setPropertyId(propertyId)
77
+ .setTitle(title)
78
+ .setDescription(description);
79
+ if (entityId)
80
+ alertBuilder.setEntityId(entityId);
81
+ if (entityType)
82
+ alertBuilder.setEntityType(entityType);
83
+ if (createdBy)
84
+ alertBuilder.setCreatedBy(createdBy);
85
+ return await this.createAlert(alertBuilder);
86
+ }
87
+ /**
88
+ * Create a security alert using AlertBuilder
89
+ */
90
+ async raiseSecurityAlert(propertyId, title, description, entityId, entityType, createdBy) {
91
+ const alertBuilder = AlertBuilder_1.AlertBuilder.createSecurityAlert()
92
+ .setPropertyId(propertyId)
93
+ .setTitle(title)
94
+ .setDescription(description);
95
+ if (entityId)
96
+ alertBuilder.setEntityId(entityId);
97
+ if (entityType)
98
+ alertBuilder.setEntityType(entityType);
99
+ if (createdBy)
100
+ alertBuilder.setCreatedBy(createdBy);
101
+ return await this.createAlert(alertBuilder);
102
+ }
103
+ /**
104
+ * Create an energy alert using AlertBuilder
105
+ */
106
+ async raiseEnergyAlert(propertyId, title, description, entityId, entityType, createdBy) {
107
+ const alertBuilder = AlertBuilder_1.AlertBuilder.createEnergyAlert()
108
+ .setPropertyId(propertyId)
109
+ .setTitle(title)
110
+ .setDescription(description);
111
+ if (entityId)
112
+ alertBuilder.setEntityId(entityId);
113
+ if (entityType)
114
+ alertBuilder.setEntityType(entityType);
115
+ if (createdBy)
116
+ alertBuilder.setCreatedBy(createdBy);
117
+ return await this.createAlert(alertBuilder);
118
+ }
119
+ /**
120
+ * Create a device-specific alert using AlertBuilder
121
+ */
122
+ async raiseDeviceAlert(deviceId, propertyId, title, description, category, severity, createdBy) {
123
+ const alertBuilder = AlertBuilder_1.AlertBuilder.createDeviceAlert(deviceId, propertyId)
124
+ .setTitle(title)
125
+ .setDescription(description);
126
+ if (category)
127
+ alertBuilder.setCategory(category);
128
+ if (severity)
129
+ alertBuilder.setSeverity(severity);
130
+ if (createdBy)
131
+ alertBuilder.setCreatedBy(createdBy);
132
+ return await this.createAlert(alertBuilder);
133
+ }
134
+ /**
135
+ * Create a hub-specific alert using AlertBuilder
136
+ */
137
+ async raiseHubAlert(hubId, propertyId, title, description, category, severity, createdBy) {
138
+ const alertBuilder = AlertBuilder_1.AlertBuilder.createHubAlert(hubId, propertyId)
139
+ .setTitle(title)
140
+ .setDescription(description);
141
+ if (category)
142
+ alertBuilder.setCategory(category);
143
+ if (severity)
144
+ alertBuilder.setSeverity(severity);
145
+ if (createdBy)
146
+ alertBuilder.setCreatedBy(createdBy);
147
+ return await this.createAlert(alertBuilder);
148
+ }
149
+ /**
150
+ * Create a new alert with business logic validation
151
+ * Accepts either a CreateAlertData object or an AlertBuilder instance
152
+ */
153
+ async createAlert(alertData) {
154
+ let processedAlertData;
155
+ // Handle AlertBuilder instance
156
+ if (alertData instanceof AlertBuilder_1.AlertBuilder) {
157
+ processedAlertData = alertData.build();
158
+ }
159
+ else {
160
+ processedAlertData = alertData;
161
+ }
162
+ // Business logic: Validate alert data
163
+ this.validateAlertData(processedAlertData);
164
+ // Business logic: Set default severity if not provided
165
+ if (!processedAlertData.severity) {
166
+ processedAlertData.severity = this.determineDefaultSeverity(processedAlertData.category);
167
+ }
168
+ // Business logic: Validate snooze date is in the future
169
+ if (processedAlertData.snoozeUntil && processedAlertData.snoozeUntil <= new Date()) {
170
+ throw new Error("Snooze date must be in the future");
171
+ }
172
+ return await this.alertRepository.create(processedAlertData);
173
+ }
174
+ /**
175
+ * Get alert by ID with business logic
176
+ */
177
+ async getAlertById(id, includeDeleted = false) {
178
+ if (!id) {
179
+ throw new Error("Alert ID is required");
180
+ }
181
+ const alert = await this.alertRepository.findById(id, includeDeleted);
182
+ // Business logic: Check if alert is snoozed and expired
183
+ if (alert?.snoozeUntil && alert.snoozeUntil <= new Date()) {
184
+ console.warn(`Alert ${id} snooze has expired`);
185
+ }
186
+ return alert;
187
+ }
188
+ /**
189
+ * Get all alerts with business logic filtering
190
+ */
191
+ async getAlerts(filters = {}) {
192
+ // Business logic: Validate filters
193
+ this.validateFilters(filters);
194
+ // Business logic: Apply business rules to filters
195
+ const enhancedFilters = this.applyBusinessRules(filters);
196
+ return await this.alertRepository.findAll(enhancedFilters);
197
+ }
198
+ /**
199
+ * Update an alert with business logic validation
200
+ */
201
+ async updateAlert(id, updateData) {
202
+ if (!id) {
203
+ throw new Error("Alert ID is required");
204
+ }
205
+ // Business logic: Validate update data
206
+ this.validateUpdateData(updateData);
207
+ // Business logic: Check if alert exists and is not deleted
208
+ const existingAlert = await this.alertRepository.findById(id);
209
+ if (!existingAlert) {
210
+ throw new Error("Alert not found");
211
+ }
212
+ // Business logic: Handle snooze validation
213
+ if (updateData.snoozeUntil) {
214
+ this.validateSnoozeDate(updateData.snoozeUntil);
215
+ }
216
+ return await this.alertRepository.update(id, updateData);
217
+ }
218
+ /**
219
+ * Soft delete an alert with business logic
220
+ */
221
+ async deleteAlert(id, deletedBy) {
222
+ if (!id || !deletedBy) {
223
+ throw new Error("Alert ID and deleted by user are required");
224
+ }
225
+ // Business logic: Check if alert can be deleted
226
+ const alert = await this.alertRepository.findById(id);
227
+ if (!alert) {
228
+ throw new Error("Alert not found");
229
+ }
230
+ // Business logic: Prevent deletion of critical alerts (optional rule)
231
+ if (alert.severity === alert_types_1.AlertSeverity.CRITICAL) {
232
+ throw new Error("Cannot delete critical alerts");
233
+ }
234
+ return await this.alertRepository.softDelete(id, deletedBy);
235
+ }
236
+ /**
237
+ * Mark alert as read with business logic
238
+ */
239
+ async markAsRead(id, updatedBy) {
240
+ if (!id || !updatedBy) {
241
+ throw new Error("Alert ID and updated by user are required");
242
+ }
243
+ const alertModel = await Alert_model_1.AlertModel.findById(id);
244
+ if (!alertModel)
245
+ return null;
246
+ alertModel.markAsRead(updatedBy);
247
+ return await alertModel.save();
248
+ }
249
+ /**
250
+ * Mark alert as unread with business logic
251
+ */
252
+ async markAsUnread(id, updatedBy) {
253
+ if (!id || !updatedBy) {
254
+ throw new Error("Alert ID and updated by user are required");
255
+ }
256
+ const alertModel = await Alert_model_1.AlertModel.findById(id);
257
+ if (!alertModel)
258
+ return null;
259
+ alertModel.markAsUnread(updatedBy);
260
+ return await alertModel.save();
261
+ }
262
+ /**
263
+ * Activate an alert with business logic
264
+ */
265
+ async activateAlert(id, updatedBy) {
266
+ if (!id || !updatedBy) {
267
+ throw new Error("Alert ID and updated by user are required");
268
+ }
269
+ const alertModel = await Alert_model_1.AlertModel.findById(id);
270
+ if (!alertModel)
271
+ return null;
272
+ alertModel.activate(updatedBy);
273
+ return await alertModel.save();
274
+ }
275
+ /**
276
+ * Deactivate an alert with business logic
277
+ */
278
+ async deactivateAlert(id, updatedBy) {
279
+ if (!id || !updatedBy) {
280
+ throw new Error("Alert ID and updated by user are required");
281
+ }
282
+ const alertModel = await Alert_model_1.AlertModel.findById(id);
283
+ if (!alertModel)
284
+ return null;
285
+ alertModel.deactivate(updatedBy);
286
+ return await alertModel.save();
287
+ }
288
+ /**
289
+ * Snooze an alert with business logic
290
+ */
291
+ async snoozeAlert(id, until, updatedBy) {
292
+ if (!id || !until || !updatedBy) {
293
+ throw new Error("Alert ID, snooze date, and updated by user are required");
294
+ }
295
+ // Business logic: Validate snooze date
296
+ this.validateSnoozeDate(until);
297
+ const alertModel = await Alert_model_1.AlertModel.findById(id);
298
+ if (!alertModel)
299
+ return null;
300
+ alertModel.snooze(until, updatedBy);
301
+ return await alertModel.save();
302
+ }
303
+ /**
304
+ * Unsnooze an alert with business logic
305
+ */
306
+ async unsnoozeAlert(id, updatedBy) {
307
+ if (!id || !updatedBy) {
308
+ throw new Error("Alert ID and updated by user are required");
309
+ }
310
+ const alertModel = await Alert_model_1.AlertModel.findById(id);
311
+ if (!alertModel)
312
+ return null;
313
+ alertModel.unsnooze(updatedBy);
314
+ return await alertModel.save();
315
+ }
316
+ /**
317
+ * Get alerts by property with business logic
318
+ */
319
+ async getAlertsByProperty(propertyId, includeDeleted = false) {
320
+ if (!propertyId) {
321
+ throw new Error("Property ID is required");
322
+ }
323
+ return await this.alertRepository.findByProperty(propertyId, includeDeleted);
324
+ }
325
+ /**
326
+ * Get alerts by entity with business logic
327
+ */
328
+ async getAlertsByEntity(entityId, entityType, includeDeleted = false) {
329
+ if (!entityId || !entityType) {
330
+ throw new Error("Entity ID and entity type are required");
331
+ }
332
+ return await this.alertRepository.findByEntity(entityId, entityType, includeDeleted);
333
+ }
334
+ /**
335
+ * Get alerts by category with business logic
336
+ */
337
+ async getAlertsByCategory(category, includeDeleted = false) {
338
+ if (!category) {
339
+ throw new Error("Alert category is required");
340
+ }
341
+ return await this.alertRepository.findByCategory(category, includeDeleted);
342
+ }
343
+ /**
344
+ * Get alerts by severity with business logic
345
+ */
346
+ async getAlertsBySeverity(severity, includeDeleted = false) {
347
+ if (!severity) {
348
+ throw new Error("Alert severity is required");
349
+ }
350
+ return await this.alertRepository.findBySeverity(severity, includeDeleted);
351
+ }
352
+ /**
353
+ * Get active alerts with business logic
354
+ */
355
+ async getActiveAlerts(includeDeleted = false) {
356
+ const activeAlerts = await this.alertRepository.findActive(includeDeleted);
357
+ // Business logic: Log active alerts for monitoring
358
+ if (activeAlerts.length > 0) {
359
+ console.log(`Found ${activeAlerts.length} active alerts`);
360
+ }
361
+ return activeAlerts;
362
+ }
363
+ /**
364
+ * Get unread alerts with business logic
365
+ */
366
+ async getUnreadAlerts(includeDeleted = false) {
367
+ const unreadAlerts = await this.alertRepository.findUnread(includeDeleted);
368
+ // Business logic: Log unread alerts for monitoring
369
+ if (unreadAlerts.length > 0) {
370
+ console.warn(`Found ${unreadAlerts.length} unread alerts`);
371
+ }
372
+ return unreadAlerts;
373
+ }
374
+ /**
375
+ * Get snoozed alerts with business logic
376
+ */
377
+ async getSnoozedAlerts(includeDeleted = false) {
378
+ return await this.alertRepository.findSnoozed(includeDeleted);
379
+ }
380
+ /**
381
+ * Get expired snooze alerts with business logic
382
+ */
383
+ async getExpiredSnoozeAlerts(includeDeleted = false) {
384
+ const expiredAlerts = await this.alertRepository.findExpiredSnooze(includeDeleted);
385
+ // Business logic: Log expired snooze alerts
386
+ if (expiredAlerts.length > 0) {
387
+ console.warn(`Found ${expiredAlerts.length} alerts with expired snooze`);
388
+ }
389
+ return expiredAlerts;
390
+ }
391
+ /**
392
+ * Get alert statistics with business logic
393
+ */
394
+ async getAlertStatistics(propertyId) {
395
+ const stats = await this.alertRepository.getStatistics(propertyId);
396
+ // Business logic: Add alerts for critical metrics
397
+ if (stats.unread > 0) {
398
+ console.warn(`Alert: ${stats.unread} unread alerts require attention`);
399
+ }
400
+ if (stats.bySeverity[alert_types_1.AlertSeverity.CRITICAL] > 0) {
401
+ console.error(`Alert: ${stats.bySeverity[alert_types_1.AlertSeverity.CRITICAL]} critical alerts require immediate attention`);
402
+ }
403
+ if (stats.bySeverity[alert_types_1.AlertSeverity.HIGH] > 0) {
404
+ console.warn(`Alert: ${stats.bySeverity[alert_types_1.AlertSeverity.HIGH]} high severity alerts require attention`);
405
+ }
406
+ return stats;
407
+ }
408
+ // Private business logic methods
409
+ validateAlertData(data) {
410
+ if (!data.title || data.title.trim().length < 3) {
411
+ throw new Error("Alert title must be at least 3 characters long");
412
+ }
413
+ if (!data.description || data.description.trim().length < 5) {
414
+ throw new Error("Alert description must be at least 5 characters long");
415
+ }
416
+ if (!data.propertyId) {
417
+ throw new Error("Property ID is required");
418
+ }
419
+ if (!data.entityType) {
420
+ throw new Error("Entity type is required");
421
+ }
422
+ }
423
+ validateFilters(filters) {
424
+ if (filters.limit && (filters.limit < 1 || filters.limit > 100)) {
425
+ throw new Error("Limit must be between 1 and 100");
426
+ }
427
+ if (filters.skip && filters.skip < 0) {
428
+ throw new Error("Skip must be non-negative");
429
+ }
430
+ }
431
+ validateUpdateData(data) {
432
+ if (data.title && data.title.trim().length < 3) {
433
+ throw new Error("Alert title must be at least 3 characters long");
434
+ }
435
+ if (data.description && data.description.trim().length < 5) {
436
+ throw new Error("Alert description must be at least 5 characters long");
437
+ }
438
+ }
439
+ validateSnoozeDate(snoozeUntil) {
440
+ if (snoozeUntil <= new Date()) {
441
+ throw new Error("Snooze date must be in the future");
442
+ }
443
+ }
444
+ determineDefaultSeverity(category) {
445
+ // Business logic: Determine default severity based on category
446
+ const categorySeverities = {
447
+ [alert_types_1.AlertCategory.READINESS]: alert_types_1.AlertSeverity.MEDIUM,
448
+ [alert_types_1.AlertCategory.OPERATIONS]: alert_types_1.AlertSeverity.HIGH,
449
+ [alert_types_1.AlertCategory.SECURITY]: alert_types_1.AlertSeverity.CRITICAL,
450
+ [alert_types_1.AlertCategory.ENERGY]: alert_types_1.AlertSeverity.LOW,
451
+ [alert_types_1.AlertCategory.OTHER]: alert_types_1.AlertSeverity.MEDIUM,
452
+ };
453
+ return categorySeverities[category] || alert_types_1.AlertSeverity.MEDIUM;
454
+ }
455
+ applyBusinessRules(filters) {
456
+ // Business logic: Apply additional filters based on business rules
457
+ const enhancedFilters = { ...filters };
458
+ // Example: Always exclude deleted alerts unless explicitly requested
459
+ if (!enhancedFilters.includeDeleted) {
460
+ enhancedFilters.includeDeleted = false;
461
+ }
462
+ return enhancedFilters;
463
+ }
464
+ };
465
+ __setFunctionName(_classThis, "AlertService");
466
+ (() => {
467
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(null) : void 0;
468
+ __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
469
+ AlertService = _classThis = _classDescriptor.value;
470
+ if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
471
+ __runInitializers(_classThis, _classExtraInitializers);
472
+ })();
473
+ return AlertService = _classThis;
474
+ })();
475
+ exports.AlertService = AlertService;
@@ -0,0 +1,55 @@
1
+ import { AlertService } from "./Alert.service";
2
+ /**
3
+ * Example usage of the updated AlertService with AlertBuilder integration
4
+ * This file demonstrates various ways to use the AlertService with the new AlertBuilder
5
+ */
6
+ export declare class AlertServiceExample {
7
+ private readonly alertService;
8
+ constructor(alertService: AlertService);
9
+ /**
10
+ * Example 1: Using the updated createAlert method with AlertBuilder
11
+ */
12
+ createAlertWithBuilder(): Promise<import("../../../types/alert.types").AlertDocument>;
13
+ /**
14
+ * Example 2: Using convenience methods for specific alert types
15
+ */
16
+ createSpecificAlerts(): Promise<{
17
+ readinessAlert: import("../../../types/alert.types").AlertDocument;
18
+ operationsAlert: import("../../../types/alert.types").AlertDocument;
19
+ securityAlert: import("../../../types/alert.types").AlertDocument;
20
+ energyAlert: import("../../../types/alert.types").AlertDocument;
21
+ }>;
22
+ /**
23
+ * Example 3: Using device-specific alert methods
24
+ */
25
+ createDeviceAlerts(): Promise<{
26
+ deviceAlert1: import("../../../types/alert.types").AlertDocument;
27
+ deviceAlert2: import("../../../types/alert.types").AlertDocument;
28
+ }>;
29
+ /**
30
+ * Example 4: Using hub-specific alert methods
31
+ */
32
+ createHubAlerts(): Promise<{
33
+ hubAlert1: import("../../../types/alert.types").AlertDocument;
34
+ hubAlert2: import("../../../types/alert.types").AlertDocument;
35
+ }>;
36
+ /**
37
+ * Example 5: Using static factory methods with AlertBuilder
38
+ */
39
+ createAlertsWithStaticMethods(): Promise<{
40
+ alert1: import("../../../types/alert.types").AlertDocument;
41
+ alert2: import("../../../types/alert.types").AlertDocument;
42
+ }>;
43
+ /**
44
+ * Example 6: Creating multiple alerts efficiently
45
+ */
46
+ createMultipleAlerts(): Promise<import("../../../types/alert.types").AlertDocument[]>;
47
+ /**
48
+ * Example 7: Creating alerts with snooze functionality
49
+ */
50
+ createSnoozedAlert(): Promise<import("../../../types/alert.types").AlertDocument>;
51
+ /**
52
+ * Example 8: Backward compatibility - still works with CreateAlertData
53
+ */
54
+ createAlertWithLegacyData(): Promise<import("../../../types/alert.types").AlertDocument>;
55
+ }