@fluyappgocore/commons-backend 1.0.202

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 (137) hide show
  1. package/build/classes/BacklogManager.d.ts +129 -0
  2. package/build/classes/BacklogManager.js +417 -0
  3. package/build/classes/BacklogMonitor.d.ts +102 -0
  4. package/build/classes/BacklogMonitor.js +222 -0
  5. package/build/classes/HttpResponse.d.ts +7 -0
  6. package/build/classes/HttpResponse.js +13 -0
  7. package/build/classes/index.d.ts +3 -0
  8. package/build/classes/index.js +15 -0
  9. package/build/dtos/file.dto.d.ts +5 -0
  10. package/build/dtos/file.dto.js +25 -0
  11. package/build/dtos/index.d.ts +1 -0
  12. package/build/dtos/index.js +13 -0
  13. package/build/events/BatchEnhancedListener.d.ts +106 -0
  14. package/build/events/BatchEnhancedListener.js +307 -0
  15. package/build/events/EnhancedListener.d.ts +75 -0
  16. package/build/events/EnhancedListener.js +185 -0
  17. package/build/events/baseListener.d.ts +19 -0
  18. package/build/events/baseListener.js +90 -0
  19. package/build/events/basePublisher.d.ts +14 -0
  20. package/build/events/basePublisher.js +84 -0
  21. package/build/events/config.d.ts +7 -0
  22. package/build/events/config.js +14 -0
  23. package/build/events/createClient.d.ts +38 -0
  24. package/build/events/createClient.js +416 -0
  25. package/build/events/index.d.ts +6 -0
  26. package/build/events/index.js +18 -0
  27. package/build/events/interfaces/agent.event.d.ts +7 -0
  28. package/build/events/interfaces/agent.event.js +2 -0
  29. package/build/events/interfaces/agentCrud.event.d.ts +7 -0
  30. package/build/events/interfaces/agentCrud.event.js +2 -0
  31. package/build/events/interfaces/agentTracking.event.d.ts +7 -0
  32. package/build/events/interfaces/agentTracking.event.js +2 -0
  33. package/build/events/interfaces/audit.event.d.ts +7 -0
  34. package/build/events/interfaces/audit.event.js +2 -0
  35. package/build/events/interfaces/branch.event.d.ts +7 -0
  36. package/build/events/interfaces/branch.event.js +2 -0
  37. package/build/events/interfaces/deleteTracking.event.d.ts +7 -0
  38. package/build/events/interfaces/deleteTracking.event.js +2 -0
  39. package/build/events/interfaces/department.event.d.ts +7 -0
  40. package/build/events/interfaces/department.event.js +2 -0
  41. package/build/events/interfaces/entity.event.d.ts +7 -0
  42. package/build/events/interfaces/entity.event.js +2 -0
  43. package/build/events/interfaces/index.d.ts +23 -0
  44. package/build/events/interfaces/index.js +35 -0
  45. package/build/events/interfaces/manualMatch.event.d.ts +7 -0
  46. package/build/events/interfaces/manualMatch.event.js +2 -0
  47. package/build/events/interfaces/match.event.d.ts +7 -0
  48. package/build/events/interfaces/match.event.js +2 -0
  49. package/build/events/interfaces/monitor.event.d.ts +7 -0
  50. package/build/events/interfaces/monitor.event.js +2 -0
  51. package/build/events/interfaces/notification.event.d.ts +7 -0
  52. package/build/events/interfaces/notification.event.js +2 -0
  53. package/build/events/interfaces/object.event.d.ts +7 -0
  54. package/build/events/interfaces/object.event.js +2 -0
  55. package/build/events/interfaces/payments.event.d.ts +7 -0
  56. package/build/events/interfaces/payments.event.js +2 -0
  57. package/build/events/interfaces/planning.event.d.ts +7 -0
  58. package/build/events/interfaces/planning.event.js +2 -0
  59. package/build/events/interfaces/service.event.d.ts +7 -0
  60. package/build/events/interfaces/service.event.js +2 -0
  61. package/build/events/interfaces/subscription.event.d.ts +7 -0
  62. package/build/events/interfaces/subscription.event.js +2 -0
  63. package/build/events/interfaces/ticket.event.d.ts +7 -0
  64. package/build/events/interfaces/ticket.event.js +2 -0
  65. package/build/events/interfaces/ticketNote.event.d.ts +7 -0
  66. package/build/events/interfaces/ticketNote.event.js +2 -0
  67. package/build/events/interfaces/ticketTracking.event.d.ts +7 -0
  68. package/build/events/interfaces/ticketTracking.event.js +2 -0
  69. package/build/events/interfaces/ticketxTopics.event.d.ts +7 -0
  70. package/build/events/interfaces/ticketxTopics.event.js +2 -0
  71. package/build/events/interfaces/topics.event.d.ts +7 -0
  72. package/build/events/interfaces/topics.event.js +2 -0
  73. package/build/events/interfaces/waitingList.event.d.ts +7 -0
  74. package/build/events/interfaces/waitingList.event.js +2 -0
  75. package/build/exceptions/AuthenticationTokenMissingException.d.ts +5 -0
  76. package/build/exceptions/AuthenticationTokenMissingException.js +27 -0
  77. package/build/exceptions/HttpException.d.ts +5 -0
  78. package/build/exceptions/HttpException.js +27 -0
  79. package/build/exceptions/MongoErrorException.d.ts +4 -0
  80. package/build/exceptions/MongoErrorException.js +27 -0
  81. package/build/exceptions/MulterException.d.ts +4 -0
  82. package/build/exceptions/MulterException.js +27 -0
  83. package/build/exceptions/QwizardException.d.ts +5 -0
  84. package/build/exceptions/QwizardException.js +27 -0
  85. package/build/exceptions/RecordingServerException.d.ts +5 -0
  86. package/build/exceptions/RecordingServerException.js +27 -0
  87. package/build/exceptions/UserNotFoundException.d.ts +4 -0
  88. package/build/exceptions/UserNotFoundException.js +27 -0
  89. package/build/exceptions/UserWithThatEmailAlreadyExistsException.d.ts +4 -0
  90. package/build/exceptions/UserWithThatEmailAlreadyExistsException.js +27 -0
  91. package/build/exceptions/WrongAnonymousAuthException.d.ts +5 -0
  92. package/build/exceptions/WrongAnonymousAuthException.js +27 -0
  93. package/build/exceptions/WrongAuthenticationTokenException.d.ts +5 -0
  94. package/build/exceptions/WrongAuthenticationTokenException.js +27 -0
  95. package/build/exceptions/WrongBusinessAuthException.d.ts +5 -0
  96. package/build/exceptions/WrongBusinessAuthException.js +27 -0
  97. package/build/exceptions/WrongCredentialsException.d.ts +4 -0
  98. package/build/exceptions/WrongCredentialsException.js +27 -0
  99. package/build/exceptions/WrongRoomException.d.ts +4 -0
  100. package/build/exceptions/WrongRoomException.js +27 -0
  101. package/build/exceptions/index.d.ts +16 -0
  102. package/build/exceptions/index.js +28 -0
  103. package/build/exceptions/invalidToken.exception.d.ts +4 -0
  104. package/build/exceptions/invalidToken.exception.js +27 -0
  105. package/build/exceptions/missingToken.exception.d.ts +4 -0
  106. package/build/exceptions/missingToken.exception.js +27 -0
  107. package/build/exceptions/wrongAuth.exception.d.ts +5 -0
  108. package/build/exceptions/wrongAuth.exception.js +27 -0
  109. package/build/index.d.ts +12 -0
  110. package/build/index.js +32 -0
  111. package/build/interfaces/controller.interface.d.ts +5 -0
  112. package/build/interfaces/controller.interface.js +2 -0
  113. package/build/interfaces/index.d.ts +3 -0
  114. package/build/interfaces/index.js +15 -0
  115. package/build/interfaces/requesWithUser.interface.d.ts +11 -0
  116. package/build/interfaces/requesWithUser.interface.js +2 -0
  117. package/build/interfaces/token.interface.d.ts +12 -0
  118. package/build/interfaces/token.interface.js +2 -0
  119. package/build/lib/ensureDatabase.d.ts +11 -0
  120. package/build/lib/ensureDatabase.js +97 -0
  121. package/build/lib/functions.d.ts +89 -0
  122. package/build/lib/functions.js +214 -0
  123. package/build/lib/helpers.d.ts +29 -0
  124. package/build/lib/helpers.js +33 -0
  125. package/build/lib/index.d.ts +4 -0
  126. package/build/lib/index.js +16 -0
  127. package/build/lib/logger.d.ts +2 -0
  128. package/build/lib/logger.js +41 -0
  129. package/build/middlewares/auth.middleware.d.ts +6 -0
  130. package/build/middlewares/auth.middleware.js +287 -0
  131. package/build/middlewares/error.middleware.d.ts +3 -0
  132. package/build/middlewares/error.middleware.js +14 -0
  133. package/build/middlewares/index.d.ts +3 -0
  134. package/build/middlewares/index.js +15 -0
  135. package/build/middlewares/validation.middleware.d.ts +2 -0
  136. package/build/middlewares/validation.middleware.js +22 -0
  137. package/package.json +45 -0
@@ -0,0 +1,222 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BacklogMonitor = void 0;
4
+ var BacklogMonitor = /** @class */ (function () {
5
+ function BacklogMonitor() {
6
+ this.listeners = new Map();
7
+ }
8
+ BacklogMonitor.getInstance = function () {
9
+ if (!BacklogMonitor.instance) {
10
+ BacklogMonitor.instance = new BacklogMonitor();
11
+ }
12
+ return BacklogMonitor.instance;
13
+ };
14
+ /**
15
+ * Registra un listener para monitoreo (EnhancedListener o BatchEnhancedListener)
16
+ */
17
+ BacklogMonitor.prototype.registerListener = function (listener) {
18
+ var key = listener.groupName + ":" + listener.topic;
19
+ this.listeners.set(key, listener);
20
+ console.log("\uD83D\uDCCB Registered listener for monitoring: " + key);
21
+ };
22
+ /**
23
+ * Desregistra un listener
24
+ */
25
+ BacklogMonitor.prototype.unregisterListener = function (groupName, topic) {
26
+ var key = groupName + ":" + topic;
27
+ this.listeners.delete(key);
28
+ console.log("\uD83D\uDCCB Unregistered listener: " + key);
29
+ };
30
+ /**
31
+ * Obtiene estadísticas de un listener específico
32
+ */
33
+ BacklogMonitor.prototype.getListenerStats = function (groupName, topic) {
34
+ var key = groupName + ":" + topic;
35
+ var listener = this.listeners.get(key);
36
+ if (!listener) {
37
+ return null;
38
+ }
39
+ var stats = listener.getStats();
40
+ var successRate = stats.processed + stats.failed > 0
41
+ ? (stats.processed / (stats.processed + stats.failed)) * 100
42
+ : 100;
43
+ return {
44
+ listenerName: stats.listenerName,
45
+ topic: stats.topic,
46
+ groupName: stats.groupName,
47
+ processed: stats.processed,
48
+ failed: stats.failed,
49
+ retries: stats.retries,
50
+ queueSize: stats.queueSize,
51
+ activeProcessing: stats.activeProcessing,
52
+ circuitBreakerOpen: stats.circuitBreakerOpen,
53
+ averageProcessingTime: stats.averageProcessingTime,
54
+ successRate: parseFloat(successRate.toFixed(2)),
55
+ lastProcessedAt: stats.lastProcessedAt,
56
+ config: stats.config
57
+ };
58
+ };
59
+ /**
60
+ * Obtiene estadísticas de todos los listeners
61
+ */
62
+ BacklogMonitor.prototype.getAllListenersStats = function () {
63
+ var allStats = [];
64
+ Array.from(this.listeners.entries()).forEach(function (_a) {
65
+ var key = _a[0], listener = _a[1];
66
+ var stats = listener.getStats();
67
+ var successRate = stats.processed + stats.failed > 0
68
+ ? (stats.processed / (stats.processed + stats.failed)) * 100
69
+ : 100;
70
+ allStats.push({
71
+ listenerName: stats.listenerName,
72
+ topic: stats.topic,
73
+ groupName: stats.groupName,
74
+ processed: stats.processed,
75
+ failed: stats.failed,
76
+ retries: stats.retries,
77
+ queueSize: stats.queueSize,
78
+ activeProcessing: stats.activeProcessing,
79
+ circuitBreakerOpen: stats.circuitBreakerOpen,
80
+ averageProcessingTime: stats.averageProcessingTime,
81
+ successRate: parseFloat(successRate.toFixed(2)),
82
+ lastProcessedAt: stats.lastProcessedAt,
83
+ config: stats.config
84
+ });
85
+ });
86
+ return allStats;
87
+ };
88
+ /**
89
+ * Obtiene estadísticas del sistema completo
90
+ */
91
+ BacklogMonitor.prototype.getSystemStats = function () {
92
+ var allStats = this.getAllListenersStats();
93
+ var totalProcessed = allStats.reduce(function (sum, stats) { return sum + stats.processed; }, 0);
94
+ var totalFailed = allStats.reduce(function (sum, stats) { return sum + stats.failed; }, 0);
95
+ var totalRetries = allStats.reduce(function (sum, stats) { return sum + stats.retries; }, 0);
96
+ var totalQueueSize = allStats.reduce(function (sum, stats) { return sum + stats.queueSize; }, 0);
97
+ var totalActiveProcessing = allStats.reduce(function (sum, stats) { return sum + stats.activeProcessing; }, 0);
98
+ var circuitBreakersOpen = allStats.filter(function (stats) { return stats.circuitBreakerOpen; }).length;
99
+ var overallSuccessRate = totalProcessed + totalFailed > 0
100
+ ? (totalProcessed / (totalProcessed + totalFailed)) * 100
101
+ : 100;
102
+ // Determinar salud del sistema
103
+ var systemHealth = 'healthy';
104
+ if (circuitBreakersOpen > 0 || overallSuccessRate < 90) {
105
+ systemHealth = 'degraded';
106
+ }
107
+ if (circuitBreakersOpen > allStats.length * 0.5 || overallSuccessRate < 70) {
108
+ systemHealth = 'critical';
109
+ }
110
+ return {
111
+ totalListeners: allStats.length,
112
+ activeListeners: allStats.filter(function (stats) { return stats.activeProcessing > 0 || stats.queueSize > 0; }).length,
113
+ totalProcessed: totalProcessed,
114
+ totalFailed: totalFailed,
115
+ totalRetries: totalRetries,
116
+ totalQueueSize: totalQueueSize,
117
+ totalActiveProcessing: totalActiveProcessing,
118
+ circuitBreakersOpen: circuitBreakersOpen,
119
+ overallSuccessRate: parseFloat(overallSuccessRate.toFixed(2)),
120
+ systemHealth: systemHealth
121
+ };
122
+ };
123
+ /**
124
+ * Actualiza configuración de un listener específico
125
+ */
126
+ BacklogMonitor.prototype.updateListenerConfig = function (groupName, topic, newConfig) {
127
+ var key = groupName + ":" + topic;
128
+ var listener = this.listeners.get(key);
129
+ if (!listener) {
130
+ return false;
131
+ }
132
+ listener.updateBacklogConfig(newConfig);
133
+ return true;
134
+ };
135
+ /**
136
+ * Actualiza configuración de todos los listeners
137
+ */
138
+ BacklogMonitor.prototype.updateAllListenersConfig = function (newConfig) {
139
+ var updated = 0;
140
+ Array.from(this.listeners.entries()).forEach(function (_a) {
141
+ var key = _a[0], listener = _a[1];
142
+ listener.updateBacklogConfig(newConfig);
143
+ updated++;
144
+ });
145
+ console.log("\uD83D\uDD27 Updated config for " + updated + " listeners");
146
+ return updated;
147
+ };
148
+ /**
149
+ * Resetea estadísticas de un listener específico
150
+ */
151
+ BacklogMonitor.prototype.resetListenerStats = function (groupName, topic) {
152
+ var key = groupName + ":" + topic;
153
+ var listener = this.listeners.get(key);
154
+ if (!listener) {
155
+ return false;
156
+ }
157
+ listener.resetStats();
158
+ return true;
159
+ };
160
+ /**
161
+ * Resetea estadísticas de todos los listeners
162
+ */
163
+ BacklogMonitor.prototype.resetAllStats = function () {
164
+ var reset = 0;
165
+ Array.from(this.listeners.entries()).forEach(function (_a) {
166
+ var key = _a[0], listener = _a[1];
167
+ listener.resetStats();
168
+ reset++;
169
+ });
170
+ console.log("\uD83D\uDD04 Reset stats for " + reset + " listeners");
171
+ return reset;
172
+ };
173
+ /**
174
+ * Fuerza circuit breaker para un listener específico
175
+ */
176
+ BacklogMonitor.prototype.forceCircuitBreaker = function (groupName, topic, open) {
177
+ var key = groupName + ":" + topic;
178
+ var listener = this.listeners.get(key);
179
+ if (!listener) {
180
+ return false;
181
+ }
182
+ listener.forceCircuitBreaker(open);
183
+ return true;
184
+ };
185
+ /**
186
+ * Obtiene resumen de salud del sistema
187
+ */
188
+ BacklogMonitor.prototype.getHealthSummary = function () {
189
+ var systemStats = this.getSystemStats();
190
+ var problematicListeners = this.getAllListenersStats()
191
+ .filter(function (stats) { return stats.circuitBreakerOpen || stats.successRate < 90; });
192
+ var message = '';
193
+ var status = systemStats.systemHealth;
194
+ switch (systemStats.systemHealth) {
195
+ case 'healthy':
196
+ message = 'All listeners operating normally';
197
+ break;
198
+ case 'degraded':
199
+ message = problematicListeners.length + " listener(s) experiencing issues";
200
+ break;
201
+ case 'critical':
202
+ message = "System critical: " + systemStats.circuitBreakersOpen + " circuit breakers open";
203
+ break;
204
+ }
205
+ return {
206
+ status: status,
207
+ message: message,
208
+ details: {
209
+ systemStats: systemStats,
210
+ problematicListeners: problematicListeners.map(function (l) { return ({
211
+ name: l.listenerName,
212
+ topic: l.topic,
213
+ successRate: l.successRate,
214
+ circuitBreakerOpen: l.circuitBreakerOpen,
215
+ queueSize: l.queueSize
216
+ }); })
217
+ }
218
+ };
219
+ };
220
+ return BacklogMonitor;
221
+ }());
222
+ exports.BacklogMonitor = BacklogMonitor;
@@ -0,0 +1,7 @@
1
+ export declare class HttpResponse {
2
+ code: String;
3
+ data: any;
4
+ metadata?: any;
5
+ message?: any;
6
+ constructor(code: String, data: any, metadata?: any, message?: any);
7
+ }
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.HttpResponse = void 0;
4
+ var HttpResponse = /** @class */ (function () {
5
+ function HttpResponse(code, data, metadata, message) {
6
+ this.code = code;
7
+ this.data = data;
8
+ this.metadata = metadata;
9
+ this.message = message;
10
+ }
11
+ return HttpResponse;
12
+ }());
13
+ exports.HttpResponse = HttpResponse;
@@ -0,0 +1,3 @@
1
+ export * from './HttpResponse';
2
+ export * from './BacklogManager';
3
+ export * from './BacklogMonitor';
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
10
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
11
+ };
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ __exportStar(require("./HttpResponse"), exports);
14
+ __exportStar(require("./BacklogManager"), exports);
15
+ __exportStar(require("./BacklogMonitor"), exports);
@@ -0,0 +1,5 @@
1
+ export declare class FileDTO {
2
+ Key: string;
3
+ ContentType: string;
4
+ folder: string;
5
+ }
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.FileDTO = void 0;
10
+ var class_validator_1 = require("class-validator");
11
+ var FileDTO = /** @class */ (function () {
12
+ function FileDTO() {
13
+ }
14
+ __decorate([
15
+ class_validator_1.IsString()
16
+ ], FileDTO.prototype, "Key", void 0);
17
+ __decorate([
18
+ class_validator_1.IsString()
19
+ ], FileDTO.prototype, "ContentType", void 0);
20
+ __decorate([
21
+ class_validator_1.IsString()
22
+ ], FileDTO.prototype, "folder", void 0);
23
+ return FileDTO;
24
+ }());
25
+ exports.FileDTO = FileDTO;
@@ -0,0 +1 @@
1
+ export * from './file.dto';
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
10
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
11
+ };
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ __exportStar(require("./file.dto"), exports);
@@ -0,0 +1,106 @@
1
+ import { KafkaMessage } from "kafkajs";
2
+ import { TicketTopics, AgentTopics, EntityTreeTopics, AgentCrudTopics, MatchTopics, TicketTrackingTopics, AgentTrackingTopics, ManualMatchTopics, MonitorTopics, UserTopics, DeleteTrackingTopics, AuditTopics, NotificationTopics, TicketNoteTopics, TopicsTopics, TicketxTopicsTopics, DeviceTopics, PlanningTopics, WaitingTopics, PaymentsTopics, SubscriptionTopics } from "@fluyappgo/commons";
3
+ import { BacklogManager, CircuitBreakerCallback } from "../classes/BacklogManager";
4
+ import { MonitorableListener } from "../classes/BacklogMonitor";
5
+ interface Event {
6
+ topic: TicketTopics | AgentTopics | EntityTreeTopics | AgentCrudTopics | MatchTopics | TicketTrackingTopics | AgentTrackingTopics | ManualMatchTopics | MonitorTopics | UserTopics | DeleteTrackingTopics | AuditTopics | NotificationTopics | TicketNoteTopics | TopicsTopics | TicketxTopicsTopics | DeviceTopics | PlanningTopics | WaitingTopics | PaymentsTopics | SubscriptionTopics;
7
+ data: any;
8
+ keyKafka: number;
9
+ groupName: string;
10
+ }
11
+ /**
12
+ * 🔥 BULLETPROOF: BatchEnhancedListener con control de flujo real en la entrada
13
+ *
14
+ * DIFERENCIAS CLAVE vs EnhancedListener:
15
+ * ✅ Control de flujo en la ENTRADA del consumer (eachBatch)
16
+ * ✅ NUNCA más mensajes en memoria de los que puede procesar
17
+ * ✅ Pausa automática cuando BacklogManager está saturado
18
+ * ✅ Resolución manual de offsets para mejor control de errores
19
+ * ✅ Heartbeat automático para mantener conexión viva
20
+ */
21
+ export declare abstract class BatchEnhancedListener<T extends Event> implements MonitorableListener {
22
+ abstract topic: T["topic"];
23
+ abstract groupName: string;
24
+ protected client: any;
25
+ protected backlogManager: BacklogManager;
26
+ protected listenerName: string;
27
+ protected batchConfig: {
28
+ maxBytesPerPartition: number;
29
+ maxBytes: number;
30
+ };
31
+ abstract processMessage(data: T["data"], msg: KafkaMessage): Promise<void>;
32
+ constructor(client: any, listenerName: string, backlogConfig?: any, batchConfig?: {
33
+ maxBytesPerPartition?: number;
34
+ maxBytes?: number;
35
+ });
36
+ /**
37
+ * Configuración por defecto que puede ser sobrescrita por cada listener
38
+ */
39
+ protected getDefaultBacklogConfig(): {
40
+ maxConcurrent: number;
41
+ rateLimitMs: number;
42
+ circuitBreakerThreshold: number;
43
+ circuitBreakerResetTime: number;
44
+ maxRetries: number;
45
+ backlogRecoveryBatchSize: number;
46
+ enableBacklogRecovery: boolean;
47
+ };
48
+ /**
49
+ * 🔥 BULLETPROOF: Listen usando eachBatch con control de flujo real
50
+ */
51
+ listen(fromBeginning: boolean): void;
52
+ /**
53
+ * 🔥 BULLETPROOF: Procesa batch con control de flujo real
54
+ */
55
+ private processBatch;
56
+ /**
57
+ * Parse message helper
58
+ */
59
+ private parseMessage;
60
+ /**
61
+ * Log de estadísticas del BacklogManager
62
+ */
63
+ private logStats;
64
+ /**
65
+ * Obtener estadísticas del listener
66
+ */
67
+ getStats(): {
68
+ availableCapacity: number;
69
+ isAtMaxCapacity: boolean;
70
+ processed: number;
71
+ failed: number;
72
+ retries: number;
73
+ circuitBreakerTrips: number;
74
+ lastProcessedAt: Date;
75
+ averageProcessingTime: number;
76
+ queueSize: number;
77
+ activeProcessing: number;
78
+ circuitBreakerOpen: boolean;
79
+ config: import("../classes/BacklogManager").BacklogConfig;
80
+ listenerName: string;
81
+ topic: T["topic"];
82
+ groupName: string;
83
+ };
84
+ /**
85
+ * Actualizar configuración del BacklogManager en tiempo real
86
+ */
87
+ updateBacklogConfig(newConfig: any): void;
88
+ /**
89
+ * Resetear estadísticas
90
+ */
91
+ resetStats(): void;
92
+ /**
93
+ * Forzar circuit breaker (para debugging)
94
+ */
95
+ forceCircuitBreaker(open: boolean): void;
96
+ /**
97
+ * Registra un callback para cambios de estado del circuit breaker
98
+ * @param callback Función que se ejecuta cuando cambia el estado del circuit breaker
99
+ */
100
+ onCircuitBreakerStateChange(callback: CircuitBreakerCallback): void;
101
+ /**
102
+ * Obtiene el nombre del listener
103
+ */
104
+ getListenerName(): string;
105
+ }
106
+ export {};