dt-common-device 3.0.9 → 3.0.11

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 (144) hide show
  1. package/dist/config/config.d.ts +1 -2
  2. package/dist/config/config.js +4 -5
  3. package/dist/device/cloud/interface.d.ts +101 -0
  4. package/dist/device/cloud/interface.js +3 -0
  5. package/dist/device/cloud/interfaces/IDeviceConnectionService.d.ts +7 -0
  6. package/dist/device/cloud/interfaces/IDeviceConnectionService.js +3 -0
  7. package/dist/device/cloud/interfaces/IDevicesService.d.ts +9 -0
  8. package/dist/device/cloud/services/Device.service.d.ts +39 -0
  9. package/dist/device/cloud/services/Device.service.js +9 -0
  10. package/dist/device/cloud/services/DeviceCloudService.d.ts +42 -0
  11. package/dist/device/cloud/services/DeviceCloudService.js +59 -0
  12. package/dist/device/cloud/services/DeviceHub.service.d.ts +3 -0
  13. package/dist/device/cloud/services/DeviceHub.service.js +6 -0
  14. package/dist/device/cloud/services/Hub.service.d.ts +25 -0
  15. package/dist/device/cloud/services/Hub.service.js +9 -0
  16. package/dist/device/cloud/services/SmartThingsDeviceService.d.ts +38 -0
  17. package/dist/device/cloud/services/SmartThingsDeviceService.js +52 -0
  18. package/dist/device/index.d.ts +4 -0
  19. package/dist/device/index.js +20 -0
  20. package/dist/device/local/events/EventHandler.js +6 -6
  21. package/dist/device/local/events/Events.d.ts +12 -33
  22. package/dist/device/local/events/Events.js +12 -33
  23. package/dist/device/local/interface.d.ts +0 -0
  24. package/dist/device/local/interface.js +1 -0
  25. package/dist/device/local/interfaces/IDevice.d.ts +1 -0
  26. package/dist/device/local/repository/Schedule.repository.d.ts +0 -1
  27. package/dist/device/local/repository/Schedule.repository.js +6 -6
  28. package/dist/device/local/services/DeviceHub.service.d.ts +11 -0
  29. package/dist/device/local/services/DeviceHub.service.js +40 -0
  30. package/dist/queue/entities/HybridHttpQueue.d.ts +4 -14
  31. package/dist/queue/entities/HybridHttpQueue.js +31 -119
  32. package/dist/queue/interfaces/IHybridHttpQueue.d.ts +2 -12
  33. package/dist/queue/interfaces/IJobResult.d.ts +1 -8
  34. package/dist/queue/interfaces/index.d.ts +0 -1
  35. package/dist/queue/interfaces/index.js +0 -1
  36. package/dist/queue/services/QueueService.d.ts +2 -12
  37. package/dist/queue/types/queue.types.d.ts +10 -29
  38. package/dist/queue/utils/jobUtils.d.ts +0 -3
  39. package/dist/queue/utils/jobUtils.js +0 -48
  40. package/dist/queue/utils/queueUtils.d.ts +7 -0
  41. package/dist/queue/utils/queueUtils.js +113 -4
  42. package/package.json +6 -1
  43. package/.eslintrc.js +0 -44
  44. package/dist/audit/AuditProperties.d.ts +0 -16
  45. package/dist/audit/AuditUtils.d.ts +0 -2
  46. package/dist/audit/AuditUtils.js +0 -36
  47. package/src/alerts/Alert.model.ts +0 -289
  48. package/src/alerts/Alert.repository.ts +0 -487
  49. package/src/alerts/Alert.service.ts +0 -711
  50. package/src/alerts/AlertBuilder.example.ts +0 -126
  51. package/src/alerts/AlertBuilder.ts +0 -208
  52. package/src/alerts/AlertService.example.ts +0 -232
  53. package/src/alerts/alert.types.ts +0 -64
  54. package/src/alerts/index.ts +0 -3
  55. package/src/audit/AuditProperties.ts +0 -16
  56. package/src/audit/AuditUtils.ts +0 -38
  57. package/src/config/config.ts +0 -202
  58. package/src/config/config.types.ts +0 -21
  59. package/src/connection/Connection.repository.ts +0 -52
  60. package/src/connection/Connection.service.ts +0 -39
  61. package/src/connection/IConnection.ts +0 -27
  62. package/src/connection/index.ts +0 -3
  63. package/src/constants/ConnectionProviders.ts +0 -11
  64. package/src/constants/Event.ts +0 -89
  65. package/src/constants/Service.ts +0 -17
  66. package/src/constants/index.ts +0 -3
  67. package/src/db/db.ts +0 -24
  68. package/src/db/index.ts +0 -2
  69. package/src/db/redis.ts +0 -20
  70. package/src/device/cloud/entities/CloudDevice.ts +0 -40
  71. package/src/device/cloud/entities/CloudDeviceService.ts +0 -8
  72. package/src/device/cloud/entities/DeviceFactory.ts +0 -27
  73. package/src/device/cloud/entities/index.ts +0 -3
  74. package/src/device/cloud/interfaces/ICloudDevice.ts +0 -14
  75. package/src/device/cloud/interfaces/ICloudDeviceService.ts +0 -6
  76. package/src/device/cloud/interfaces/IDeviceFactory.ts +0 -5
  77. package/src/device/cloud/interfaces/IRawDataTransformer.ts +0 -5
  78. package/src/device/cloud/interfaces/IRawDevice.ts +0 -19
  79. package/src/device/cloud/interfaces/index.ts +0 -5
  80. package/src/device/local/interfaces/IDevice.ts +0 -61
  81. package/src/device/local/interfaces/IDtDevice.ts +0 -16
  82. package/src/device/local/interfaces/ISchedule.ts +0 -40
  83. package/src/device/local/interfaces/index.ts +0 -3
  84. package/src/device/local/repository/Device.repository.ts +0 -368
  85. package/src/device/local/repository/Hub.repository.ts +0 -107
  86. package/src/device/local/repository/Schedule.repository.ts +0 -72
  87. package/src/device/local/services/Device.service.ts +0 -436
  88. package/src/device/local/services/Hub.service.ts +0 -57
  89. package/src/device/local/services/Schedule.service.ts +0 -26
  90. package/src/device/local/services/index.ts +0 -3
  91. package/src/docs/Alert.model.md +0 -319
  92. package/src/docs/Alerts&IssuesModel.md +0 -312
  93. package/src/docs/Issue.model.md +0 -386
  94. package/src/docs/SECURITY.md +0 -67
  95. package/src/docs/TROUBLESHOOTING.md +0 -184
  96. package/src/events/BaseEventHandler.ts +0 -145
  97. package/src/events/BaseEventTransformer.ts +0 -97
  98. package/src/events/DeviceEventHandler.ts +0 -213
  99. package/src/events/DeviceEventTransformerFactory.ts +0 -77
  100. package/src/events/EventHandler.ts +0 -124
  101. package/src/events/EventHandlerOrchestrator.ts +0 -119
  102. package/src/events/EventProcessingService.ts +0 -248
  103. package/src/events/InternalEventSubscription.ts +0 -194
  104. package/src/events/index.ts +0 -9
  105. package/src/events/interfaces/DeviceEvent.ts +0 -56
  106. package/src/events/interfaces/IEventHandler.ts +0 -28
  107. package/src/events/interfaces/IEventTransformer.ts +0 -8
  108. package/src/events/interfaces/IInternalEvent.ts +0 -33
  109. package/src/events/interfaces/index.ts +0 -4
  110. package/src/index.ts +0 -43
  111. package/src/issues/Issue.model.ts +0 -350
  112. package/src/issues/Issue.repository.ts +0 -517
  113. package/src/issues/Issue.service.ts +0 -932
  114. package/src/issues/IssueBuilder.example.ts +0 -210
  115. package/src/issues/IssueBuilder.ts +0 -263
  116. package/src/issues/IssueService.example.ts +0 -310
  117. package/src/issues/index.ts +0 -2
  118. package/src/issues/issue.types.ts +0 -98
  119. package/src/property/IProperty.ts +0 -30
  120. package/src/property/Property.repository.ts +0 -53
  121. package/src/property/Property.service.ts +0 -38
  122. package/src/property/index.ts +0 -2
  123. package/src/queue/entities/HybridHttpQueue.ts +0 -274
  124. package/src/queue/entities/index.ts +0 -1
  125. package/src/queue/index.ts +0 -6
  126. package/src/queue/interfaces/IHttpRequestJob.ts +0 -10
  127. package/src/queue/interfaces/IHybridHttpQueue.ts +0 -25
  128. package/src/queue/interfaces/IJobResult.ts +0 -15
  129. package/src/queue/interfaces/IRateLimitConfig.ts +0 -5
  130. package/src/queue/interfaces/index.ts +0 -4
  131. package/src/queue/services/QueueService.ts +0 -40
  132. package/src/queue/services/index.ts +0 -1
  133. package/src/queue/types/http.types.ts +0 -23
  134. package/src/queue/types/index.ts +0 -2
  135. package/src/queue/types/queue.types.ts +0 -21
  136. package/src/queue/utils/index.ts +0 -3
  137. package/src/queue/utils/jobUtils.ts +0 -79
  138. package/src/queue/utils/queueUtils.ts +0 -84
  139. package/src/queue/utils/rateLimit.utils.ts +0 -131
  140. package/src/utils/http.utils.ts +0 -143
  141. package/src/utils/index.ts +0 -2
  142. package/src/utils/redis.utils.ts +0 -74
  143. package/tsconfig.json +0 -20
  144. /package/dist/{audit/AuditProperties.js → device/cloud/interfaces/IDevicesService.js} +0 -0
@@ -1,119 +0,0 @@
1
- import { Service } from "typedi";
2
- import { IEventHandler } from "./interfaces/IEventHandler";
3
- import { DeviceEvent } from "./interfaces/DeviceEvent";
4
- import { ILogger } from "../config/config.types";
5
- import { getConfig } from "../config/config";
6
-
7
- @Service()
8
- export class EventHandlerOrchestrator {
9
- private handlers: IEventHandler[] = [];
10
- private readonly logger: ILogger;
11
- constructor() {
12
- this.logger = getConfig().LOGGER;
13
- }
14
- /**
15
- * Register a handler with the orchestrator
16
- */
17
- registerHandler(handler: IEventHandler): void {
18
- this.handlers.push(handler);
19
- // Sort handlers by priority (lower numbers = higher priority)
20
- this.handlers.sort((a, b) => a.getPriority() - b.getPriority());
21
- this.logger.info(
22
- `Registered handler: ${
23
- handler.constructor.name
24
- } with priority ${handler.getPriority()}`
25
- );
26
- }
27
-
28
- /**
29
- * Register multiple handlers
30
- */
31
- registerHandlers(handlers: IEventHandler[]): void {
32
- handlers.forEach((handler) => this.registerHandler(handler));
33
- }
34
-
35
- /**
36
- * Process a single event through the handler hierarchy
37
- */
38
- async processEvent(event: DeviceEvent): Promise<void> {
39
- try {
40
- this.logger.info(
41
- `Processing event: ${event.eventName} for device: ${event.deviceId}`
42
- );
43
-
44
- const applicableHandlers = this.handlers.filter((handler) =>
45
- handler.canHandle(event.eventName)
46
- );
47
-
48
- if (applicableHandlers.length === 0) {
49
- this.logger.warn(
50
- `No handlers found for event type: ${event.eventName}`
51
- );
52
- return;
53
- }
54
-
55
- this.logger.info(
56
- `Found ${applicableHandlers.length} handlers for event: ${event.eventName}`
57
- );
58
-
59
- // Process with each applicable handler in priority order
60
- for (const handler of applicableHandlers) {
61
- try {
62
- await handler.handleEvent(event);
63
- this.logger.info(`Event processed by: ${handler.constructor.name}`);
64
- } catch (error) {
65
- this.logger.error(
66
- `Error in handler ${handler.constructor.name}:`,
67
- error
68
- );
69
- // Continue with other handlers even if one fails
70
- }
71
- }
72
- } catch (error) {
73
- this.logger.error(
74
- "Error in EventHandlerOrchestrator.processEvent:",
75
- error
76
- );
77
- }
78
- }
79
-
80
- /**
81
- * Process multiple events
82
- */
83
- async processEvents(events: DeviceEvent[]): Promise<void> {
84
- try {
85
- this.logger.info(`Processing ${events.length} events`);
86
-
87
- for (const event of events) {
88
- await this.processEvent(event);
89
- }
90
- } catch (error) {
91
- this.logger.error(
92
- "Error in EventHandlerOrchestrator.processEvents:",
93
- error
94
- );
95
- }
96
- }
97
-
98
- /**
99
- * Get all registered handlers
100
- */
101
- getHandlers(): IEventHandler[] {
102
- return [...this.handlers];
103
- }
104
-
105
- /**
106
- * Get handlers that can handle a specific event type
107
- */
108
- getHandlersForEventType(eventType: string): IEventHandler[] {
109
- return this.handlers.filter((handler) => handler.canHandle(eventType));
110
- }
111
-
112
- /**
113
- * Clear all registered handlers
114
- */
115
- clearHandlers(): void {
116
- this.handlers = [];
117
- this.logger.info("All handlers cleared");
118
- }
119
- }
@@ -1,248 +0,0 @@
1
- import { Service } from "typedi";
2
- import { DeviceEventHandler } from "./DeviceEventHandler";
3
- import { ILogger } from "../config/config.types";
4
- import { getConfig } from "../config/config";
5
- import { DeviceEvent } from "./interfaces/DeviceEvent";
6
- import { IEventTransformer } from "./interfaces/IEventTransformer";
7
- import { EventHandlerOrchestrator } from "./EventHandlerOrchestrator";
8
- import { DeviceEventTransformerFactory } from "./DeviceEventTransformerFactory";
9
- import { BaseEventHandler } from "./BaseEventHandler";
10
-
11
- @Service()
12
- export class EventProcessingService {
13
- private readonly handlerOrchestrator: EventHandlerOrchestrator;
14
- public readonly deviceEventHandler: DeviceEventHandler;
15
- private readonly logger: ILogger;
16
- private deviceHandlers: Map<string, any> = new Map();
17
-
18
- constructor(
19
- private readonly deviceEventTransformerFactory: DeviceEventTransformerFactory
20
- ) {
21
- this.handlerOrchestrator = new EventHandlerOrchestrator();
22
- this.deviceEventHandler = new DeviceEventHandler();
23
- this.logger = getConfig().LOGGER;
24
- this.initializeDeviceHandlers();
25
- this.initializeHandlers();
26
- }
27
-
28
- /**
29
- * Initialize device-specific handlers - to be implemented by subclasses
30
- */
31
- protected initializeDeviceHandlers(): void {
32
- this.deviceHandlers = new Map();
33
- // Subclasses should override this method to add their specific handlers
34
- }
35
-
36
- /**
37
- * Initialize the handler hierarchy - to be implemented by subclasses
38
- */
39
- protected initializeHandlers(): void {
40
- try {
41
- // Register generic handler for common events
42
- this.handlerOrchestrator.registerHandlers([
43
- new DeviceEventHandler(), // Priority 100 - handles common events first
44
- ]);
45
-
46
- this.logger.info("Base event handlers initialized successfully");
47
- } catch (error) {
48
- this.logger.error(
49
- "EventProcessingService: initializeHandlers Error",
50
- error
51
- );
52
- }
53
- }
54
-
55
- /**
56
- * Get device-specific handler based on connection provider
57
- */
58
- private getDeviceHandler(connectionProvider: string): any {
59
- const normalizedProvider = connectionProvider.toLowerCase();
60
- return this.deviceHandlers.get(normalizedProvider) || null;
61
- }
62
-
63
- /**
64
- * Transform device event using EventTransformerFactory
65
- */
66
- transformDeviceEventWithTransformer(
67
- connectionProvider: string,
68
- rawData: any
69
- ): DeviceEvent | null {
70
- try {
71
- // Create transformer for the connection provider
72
- const transformer: IEventTransformer | null =
73
- this.deviceEventTransformerFactory.createTransformer(
74
- connectionProvider,
75
- rawData
76
- );
77
-
78
- if (!transformer) {
79
- this.logger.warn(
80
- `No transformer found for connection provider: ${connectionProvider}`
81
- );
82
- return null;
83
- }
84
-
85
- // Execute the transformation pipeline
86
- const transformedEvents = transformer.executeTransformation();
87
-
88
- if (transformedEvents.length === 0) {
89
- this.logger.warn(
90
- `No events transformed for connection provider: ${connectionProvider}`
91
- );
92
- return null;
93
- }
94
-
95
- // Return the first transformed event (or handle multiple events as needed)
96
- return transformedEvents[0];
97
- } catch (error) {
98
- this.logger.error(
99
- `Error transforming event for ${connectionProvider}:`,
100
- error
101
- );
102
- return null;
103
- }
104
- }
105
-
106
- /**
107
- * Transform raw event data to DeviceEvent format using EventTransformer
108
- */
109
- private transformToDeviceEvent(
110
- connectionProvider: string,
111
- rawData: any
112
- ): DeviceEvent | null {
113
- try {
114
- // Use the transformer-based approach
115
- const deviceEvent = this.transformDeviceEventWithTransformer(
116
- connectionProvider,
117
- rawData
118
- );
119
-
120
- if (!deviceEvent) {
121
- this.logger.warn("Failed to transform event data using transformer", {
122
- connectionProvider,
123
- rawData,
124
- });
125
- return null;
126
- }
127
-
128
- this.logger.info("Transformed event using EventTransformer", {
129
- connectionProvider,
130
- originalEventName: deviceEvent.originalEventName,
131
- transformedEventName: deviceEvent.eventName,
132
- deviceId: deviceEvent.deviceId,
133
- });
134
-
135
- return deviceEvent;
136
- } catch (error) {
137
- this.logger.error(
138
- "EventProcessingService: transformToDeviceEvent Error",
139
- error
140
- );
141
- return null;
142
- }
143
- }
144
-
145
- /**
146
- * Process a single event from device.event.controller
147
- */
148
- async processEvent(connectionProvider: string, rawData: any): Promise<void> {
149
- try {
150
- this.logger.info("EventProcessingService: Processing event", {
151
- connectionProvider,
152
- eventName: rawData.eventName ?? rawData.type,
153
- });
154
-
155
- // Transform raw data to DeviceEvent using EventTransformer
156
- const deviceEvent = this.transformToDeviceEvent(
157
- connectionProvider,
158
- rawData
159
- );
160
- if (!deviceEvent) {
161
- this.logger.warn("Failed to transform event data", {
162
- connectionProvider,
163
- rawData,
164
- });
165
- return;
166
- }
167
-
168
- // Get device-specific handler
169
- const deviceHandler: BaseEventHandler =
170
- this.getDeviceHandler(connectionProvider);
171
- if (!deviceHandler) {
172
- this.logger.warn("No device handler found for provider", {
173
- connectionProvider,
174
- });
175
- return;
176
- }
177
-
178
- // Process with GenericEventHandler first (common logic)
179
- if (this.deviceEventHandler.canHandle(deviceEvent.eventName)) {
180
- try {
181
- await this.deviceEventHandler.handleEvent(deviceEvent);
182
- this.logger.info("Event processed by GenericEventHandler");
183
- } catch (error) {
184
- this.logger.error(
185
- "EventProcessingService: GenericEventHandler Error",
186
- error
187
- );
188
- }
189
- }
190
-
191
- // Process with device-specific handler
192
- if (deviceHandler.canHandle(deviceEvent.eventName)) {
193
- try {
194
- await deviceHandler.onEvent(deviceEvent);
195
- this.logger.info("Event processed by device-specific handler", {
196
- handler: deviceHandler.constructor.name,
197
- });
198
- } catch (error) {
199
- this.logger.error(
200
- "EventProcessingService: Device-specific handler Error",
201
- error
202
- );
203
- }
204
- } else {
205
- this.logger.warn("Device handler cannot handle event", {
206
- handler: deviceHandler.constructor.name,
207
- eventName: deviceEvent.eventName,
208
- });
209
- }
210
- } catch (error) {
211
- this.logger.error("EventProcessingService: processEvent Error", error);
212
- throw error;
213
- }
214
- }
215
-
216
- /**
217
- * Process a single event (legacy method for DeviceEvent objects)
218
- */
219
- async processEventLegacy(event: DeviceEvent): Promise<void> {
220
- try {
221
- this.logger.info("EventProcessingService: Processing legacy event", {
222
- eventName: event.eventName,
223
- });
224
- await this.handlerOrchestrator.processEvent(event);
225
- } catch (error) {
226
- this.logger.error(
227
- "EventProcessingService: processEventLegacy Error",
228
- error
229
- );
230
- throw error;
231
- }
232
- }
233
-
234
- /**
235
- * Process multiple events
236
- */
237
- async processEvents(events: DeviceEvent[]): Promise<void> {
238
- try {
239
- this.logger.info("EventProcessingService: Processing multiple events", {
240
- count: events.length,
241
- });
242
- await this.handlerOrchestrator.processEvents(events);
243
- } catch (error) {
244
- this.logger.error("EventProcessingService: processEvents Error", error);
245
- throw error;
246
- }
247
- }
248
- }
@@ -1,194 +0,0 @@
1
- import { eventDispatcher } from "dt-pub-sub";
2
- import { getConfig } from "../config/config";
3
- import {
4
- IInternalEvent,
5
- HeartbeatEventData,
6
- ScheduleEventData,
7
- ServiceEventData,
8
- } from "./interfaces/IInternalEvent";
9
- import { ILogger } from "../config/config.types";
10
-
11
- // Event types enum for better type safety
12
- export enum InternalEventType {
13
- HEARTBEAT = "heartbeat",
14
- SCHEDULE_CREATE = "schedule.create",
15
- SCHEDULE_UPDATE = "schedule.update",
16
- SCHEDULE_DELETE = "schedule.delete",
17
- RESERVATION_CREATE = "reservation.create",
18
- RESERVATION_UPDATE = "reservation.update",
19
- RESERVATION_CANCEL = "reservation.cancel",
20
- SERVICE_DOWN = "service.down",
21
- }
22
-
23
- export class InternalEventSubscription {
24
- private readonly sqsQueueUrl: string;
25
- private readonly logger: ILogger;
26
- private readonly isInitialized: boolean = false;
27
- private isSubscribed: boolean = false;
28
-
29
- constructor(private readonly internalEventHandler: IInternalEvent) {
30
- this.sqsQueueUrl = getConfig().SQS_QUEUE_URL;
31
- this.logger = getConfig().LOGGER;
32
- this.isInitialized = true;
33
- }
34
-
35
- private async handleMessage(message: any): Promise<void> {
36
- try {
37
- const eventType = message["detail-type"];
38
- const eventData = message.detail;
39
-
40
- this.logger.info("Received internal event", { eventType, eventData });
41
-
42
- switch (eventType) {
43
- case InternalEventType.HEARTBEAT:
44
- await this.safeCallHandler(() =>
45
- this.internalEventHandler.onHeartbeat(
46
- eventData as HeartbeatEventData
47
- )
48
- );
49
- break;
50
-
51
- case InternalEventType.SCHEDULE_CREATE:
52
- await this.safeCallHandler(() =>
53
- this.internalEventHandler.onScheduleCreate(
54
- eventData as ScheduleEventData
55
- )
56
- );
57
- break;
58
-
59
- case InternalEventType.SCHEDULE_UPDATE:
60
- await this.safeCallHandler(() =>
61
- this.internalEventHandler.onScheduleUpdate(
62
- eventData as ScheduleEventData
63
- )
64
- );
65
- break;
66
-
67
- case InternalEventType.SCHEDULE_DELETE:
68
- await this.safeCallHandler(() =>
69
- this.internalEventHandler.onScheduleDelete(
70
- eventData as ScheduleEventData
71
- )
72
- );
73
- break;
74
-
75
- case InternalEventType.SERVICE_DOWN:
76
- await this.safeCallHandler(() =>
77
- this.internalEventHandler.onServiceDown(
78
- eventData as ServiceEventData
79
- )
80
- );
81
- break;
82
-
83
- default:
84
- this.logger.warn("Unknown event type", { eventType, eventData });
85
- break;
86
- }
87
- } catch (error) {
88
- this.logger.error("Error processing internal event message", {
89
- error,
90
- message,
91
- eventType: message["detail-type"],
92
- });
93
- // Re-throw to let SQS handle retry logic
94
- throw error;
95
- }
96
- }
97
-
98
- /**
99
- * Safely call handler methods with error handling
100
- */
101
- private async safeCallHandler(
102
- handlerCall: () => Promise<void>
103
- ): Promise<void> {
104
- try {
105
- await handlerCall();
106
- } catch (error) {
107
- this.logger.error("Handler method execution failed", { error });
108
- // Re-throw to let the main error handler deal with it
109
- throw error;
110
- }
111
- }
112
-
113
- /**
114
- * Subscribe to SQS events
115
- */
116
- public async subscribe(): Promise<void> {
117
- if (!this.isInitialized) {
118
- throw new Error(
119
- "InternalEventSubscription must be initialized before subscribing"
120
- );
121
- }
122
-
123
- if (!this.sqsQueueUrl) {
124
- throw new Error("AWS SQS URL not found in environment variables");
125
- }
126
-
127
- if (this.isSubscribed) {
128
- this.logger.warn("InternalEventSubscription is already subscribed");
129
- return;
130
- }
131
-
132
- try {
133
- await eventDispatcher.subscribeToQueue(
134
- this.sqsQueueUrl,
135
- this.handleMessage.bind(this)
136
- );
137
- this.isSubscribed = true;
138
- this.logger.info("Successfully subscribed to internal events", {
139
- sqsUrl: this.sqsQueueUrl,
140
- });
141
- } catch (error) {
142
- this.logger.error("Failed to subscribe to internal events", {
143
- error,
144
- sqsUrl: this.sqsQueueUrl,
145
- });
146
- throw error;
147
- }
148
- }
149
-
150
- /**
151
- * Unsubscribe from SQS events
152
- */
153
- public async unsubscribe(): Promise<void> {
154
- if (!this.isSubscribed) {
155
- this.logger.warn("InternalEventSubscription is not currently subscribed");
156
- return;
157
- }
158
-
159
- try {
160
- // Note: You might need to implement unsubscribe method in dt-pub-sub
161
- // await eventDispatcher.unsubscribeFromQueue(this.sqsQueueUrl);
162
-
163
- this.isSubscribed = false;
164
- this.logger.info("Successfully unsubscribed from internal events");
165
- } catch (error) {
166
- this.logger.error("Failed to unsubscribe from internal events", {
167
- error,
168
- });
169
- throw error;
170
- }
171
- }
172
-
173
- /**
174
- * Get subscription status
175
- */
176
- public getStatus(): {
177
- isInitialized: boolean;
178
- isSubscribed: boolean;
179
- sqsUrl: string;
180
- } {
181
- return {
182
- isInitialized: this.isInitialized,
183
- isSubscribed: this.isSubscribed,
184
- sqsUrl: this.sqsQueueUrl,
185
- };
186
- }
187
-
188
- /**
189
- * Check if subscription is ready
190
- */
191
- public isReady(): boolean {
192
- return this.isInitialized && this.isSubscribed;
193
- }
194
- }
@@ -1,9 +0,0 @@
1
- export { DT_EVENT_TYPES } from "../constants/Event";
2
- export { EventHandler } from "./EventHandler";
3
- export { InternalEventSubscription } from "./InternalEventSubscription";
4
- export { EventProcessingService } from "./EventProcessingService";
5
- export { DeviceEventHandler } from "./DeviceEventHandler";
6
- export { EventHandlerOrchestrator } from "./EventHandlerOrchestrator";
7
- export { DeviceEventTransformerFactory } from "./DeviceEventTransformerFactory";
8
- export { BaseEventHandler } from "./BaseEventHandler";
9
- export { BaseEventTransformer } from "./BaseEventTransformer";
@@ -1,56 +0,0 @@
1
- export interface DeviceEvent {
2
- eventId: string;
3
- deviceId: string;
4
- eventName: string;
5
- data: DeviceEventData;
6
- timestamp?: string;
7
- connectionProvider?: string;
8
- originalEventName?: string;
9
- rawEvent?: any; // Store the original raw event data
10
- }
11
-
12
- export interface EventConstructionOptions {
13
- eventId?: string;
14
- eventName?: string;
15
- status?: string;
16
- mode?: string;
17
- userName?: string;
18
- userId?: string;
19
- userType?: string;
20
- rawEvent?: any;
21
- batteryLevel?: string;
22
- reason?: string;
23
- eventDescription?: string;
24
- }
25
-
26
- export interface DeviceEventEntity {
27
- event: any;
28
- device: any;
29
- hub: any[];
30
- property: any;
31
- }
32
-
33
- export interface DeviceEventData {
34
- mode?: string;
35
- batteryLevel?: number;
36
- }
37
-
38
- export interface TTLockEventData extends DeviceEventData {
39
- label: string;
40
- }
41
-
42
- export interface SaltoKSLockEventData extends DeviceEventData {
43
- userId: string;
44
- deviceName: string;
45
- username: string;
46
- accessBy: string;
47
- accessDetails: string;
48
- }
49
-
50
- export interface TuyaLockEventData extends DeviceEventData {
51
- // Inherits mode from DeviceEventData
52
- }
53
-
54
- export interface SchlageLockEventData extends DeviceEventData {
55
- event: any;
56
- }
@@ -1,28 +0,0 @@
1
- import { DeviceEvent } from "./DeviceEvent";
2
-
3
- export interface IEventHandler {
4
- /**
5
- * Handle a single transformed event
6
- */
7
- handleEvent(event: DeviceEvent): Promise<void>;
8
-
9
- /**
10
- * Handle multiple events
11
- */
12
- handleEvents(events: DeviceEvent[]): Promise<void>;
13
-
14
- /**
15
- * Check if this handler can process the given event type
16
- */
17
- canHandle(eventType: string): boolean;
18
-
19
- /**
20
- * Get the priority of this handler (lower numbers = higher priority)
21
- */
22
- getPriority(): number;
23
-
24
- /**
25
- * Get the event types this handler can process
26
- */
27
- getSupportedEventTypes(): string[];
28
- }
@@ -1,8 +0,0 @@
1
- import { DeviceEvent } from "./DeviceEvent";
2
-
3
- export interface IEventTransformer {
4
- parseData(rawData: any): any;
5
- transform(parsedData: any): DeviceEvent | DeviceEvent[];
6
- validate(transformedEvent: DeviceEvent): boolean;
7
- executeTransformation(): DeviceEvent[];
8
- }
@@ -1,33 +0,0 @@
1
- // Event data interfaces for better type safety
2
- export interface HeartbeatEventData {
3
- duration?: number;
4
- propertyId?: string;
5
- timestamp?: string;
6
- [key: string]: any;
7
- }
8
-
9
- export interface ScheduleEventData {
10
- scheduleId: string;
11
- propertyId: string;
12
- deviceId?: string;
13
- startTime: string;
14
- endTime: string;
15
- action: string;
16
- [key: string]: any;
17
- }
18
-
19
- export interface ServiceEventData {
20
- serviceId: string;
21
- serviceName: string;
22
- status: string;
23
- timestamp: string;
24
- [key: string]: any;
25
- }
26
-
27
- export interface IInternalEvent {
28
- onHeartbeat(data: HeartbeatEventData): Promise<void>;
29
- onScheduleCreate(data: ScheduleEventData): Promise<void>;
30
- onScheduleUpdate(data: ScheduleEventData): Promise<void>;
31
- onScheduleDelete(data: ScheduleEventData): Promise<void>;
32
- onServiceDown(data: ServiceEventData): Promise<void>;
33
- }
@@ -1,4 +0,0 @@
1
- export * from "./IInternalEvent";
2
- export * from "./IEventHandler";
3
- export * from "./IEventTransformer";
4
- export * from "./DeviceEvent";