@phystack/analytics-publisher 4.3.40-dev

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 (69) hide show
  1. package/README.md +436 -0
  2. package/dist/.tsbuildinfo +1 -0
  3. package/dist/adapters/ITransportAdapter.d.ts +9 -0
  4. package/dist/adapters/ITransportAdapter.d.ts.map +1 -0
  5. package/dist/adapters/ITransportAdapter.js +3 -0
  6. package/dist/adapters/ITransportAdapter.js.map +1 -0
  7. package/dist/adapters/event-hub/EventHubAdapter.d.ts +33 -0
  8. package/dist/adapters/event-hub/EventHubAdapter.d.ts.map +1 -0
  9. package/dist/adapters/event-hub/EventHubAdapter.js +65 -0
  10. package/dist/adapters/event-hub/EventHubAdapter.js.map +1 -0
  11. package/dist/adapters/kafka/KafkaAdapter.d.ts +21 -0
  12. package/dist/adapters/kafka/KafkaAdapter.d.ts.map +1 -0
  13. package/dist/adapters/kafka/KafkaAdapter.js +163 -0
  14. package/dist/adapters/kafka/KafkaAdapter.js.map +1 -0
  15. package/dist/adapters/kafka/index.d.ts +3 -0
  16. package/dist/adapters/kafka/index.d.ts.map +1 -0
  17. package/dist/adapters/kafka/index.js +24 -0
  18. package/dist/adapters/kafka/index.js.map +1 -0
  19. package/dist/adapters/kafka/types.d.ts +29 -0
  20. package/dist/adapters/kafka/types.d.ts.map +1 -0
  21. package/dist/adapters/kafka/types.js +3 -0
  22. package/dist/adapters/kafka/types.js.map +1 -0
  23. package/dist/client/AnalyticsClient.d.ts +96 -0
  24. package/dist/client/AnalyticsClient.d.ts.map +1 -0
  25. package/dist/client/AnalyticsClient.js +489 -0
  26. package/dist/client/AnalyticsClient.js.map +1 -0
  27. package/dist/commands/PublishCommand.d.ts +22 -0
  28. package/dist/commands/PublishCommand.d.ts.map +1 -0
  29. package/dist/commands/PublishCommand.js +32 -0
  30. package/dist/commands/PublishCommand.js.map +1 -0
  31. package/dist/decorators/RetryDecorator.d.ts +11 -0
  32. package/dist/decorators/RetryDecorator.d.ts.map +1 -0
  33. package/dist/decorators/RetryDecorator.js +37 -0
  34. package/dist/decorators/RetryDecorator.js.map +1 -0
  35. package/dist/factories/AdapterFactory.d.ts +8 -0
  36. package/dist/factories/AdapterFactory.d.ts.map +1 -0
  37. package/dist/factories/AdapterFactory.js +25 -0
  38. package/dist/factories/AdapterFactory.js.map +1 -0
  39. package/dist/index.d.ts +16 -0
  40. package/dist/index.d.ts.map +1 -0
  41. package/dist/index.js +29 -0
  42. package/dist/index.js.map +1 -0
  43. package/dist/observers/MetricsObserver.d.ts +11 -0
  44. package/dist/observers/MetricsObserver.d.ts.map +1 -0
  45. package/dist/observers/MetricsObserver.js +15 -0
  46. package/dist/observers/MetricsObserver.js.map +1 -0
  47. package/dist/publishers/BasePublisher.d.ts +15 -0
  48. package/dist/publishers/BasePublisher.d.ts.map +1 -0
  49. package/dist/publishers/BasePublisher.js +54 -0
  50. package/dist/publishers/BasePublisher.js.map +1 -0
  51. package/dist/publishers/ClientPublisher.d.ts +6 -0
  52. package/dist/publishers/ClientPublisher.d.ts.map +1 -0
  53. package/dist/publishers/ClientPublisher.js +27 -0
  54. package/dist/publishers/ClientPublisher.js.map +1 -0
  55. package/dist/publishers/EventPublisher.d.ts +6 -0
  56. package/dist/publishers/EventPublisher.d.ts.map +1 -0
  57. package/dist/publishers/EventPublisher.js +15 -0
  58. package/dist/publishers/EventPublisher.js.map +1 -0
  59. package/dist/publishers/SessionPublisher.d.ts +6 -0
  60. package/dist/publishers/SessionPublisher.d.ts.map +1 -0
  61. package/dist/publishers/SessionPublisher.js +15 -0
  62. package/dist/publishers/SessionPublisher.js.map +1 -0
  63. package/dist/types/index.d.ts +85 -0
  64. package/dist/types/index.d.ts.map +1 -0
  65. package/dist/types/index.js +16 -0
  66. package/dist/types/index.js.map +1 -0
  67. package/examples/eventhub.ts +188 -0
  68. package/examples/kafka.ts +189 -0
  69. package/package.json +68 -0
@@ -0,0 +1,489 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.AnalyticsClient = void 0;
7
+ const PublishCommand_1 = __importDefault(require("../commands/PublishCommand"));
8
+ const AdapterFactory_1 = require("../factories/AdapterFactory");
9
+ const RetryDecorator_1 = __importDefault(require("../decorators/RetryDecorator"));
10
+ const types_1 = require("../types");
11
+ var ClientState;
12
+ (function (ClientState) {
13
+ ClientState["INITIALIZING"] = "initializing";
14
+ ClientState["READY"] = "ready";
15
+ ClientState["DEGRADED"] = "degraded";
16
+ ClientState["CLOSING"] = "closing";
17
+ ClientState["CLOSED"] = "closed";
18
+ })(ClientState || (ClientState = {}));
19
+ class AnalyticsClient {
20
+ convertToISOString(dateValue) {
21
+ if (!dateValue) {
22
+ return new Date().toISOString();
23
+ }
24
+ if (dateValue instanceof Date) {
25
+ return dateValue.toISOString();
26
+ }
27
+ if (typeof dateValue === 'string') {
28
+ try {
29
+ const parsed = new Date(dateValue);
30
+ if (!isNaN(parsed.getTime())) {
31
+ return parsed.toISOString();
32
+ }
33
+ }
34
+ catch (error) {
35
+ return dateValue;
36
+ }
37
+ return dateValue;
38
+ }
39
+ return new Date().toISOString();
40
+ }
41
+ normalizeEvent(event) {
42
+ return {
43
+ ...event,
44
+ eventTime: this.convertToISOString(event.eventTime),
45
+ };
46
+ }
47
+ normalizeSession(session) {
48
+ return {
49
+ ...session,
50
+ sessionCreated: this.convertToISOString(session.sessionCreated),
51
+ };
52
+ }
53
+ normalizeClient(client) {
54
+ return {
55
+ ...client,
56
+ clientCreated: this.convertToISOString(client.clientCreated),
57
+ };
58
+ }
59
+ constructor(config) {
60
+ this.messageBuffer = [];
61
+ this.state = ClientState.INITIALIZING;
62
+ this.MAX_BUFFER_SIZE = 10000;
63
+ this.totalFlushes = 0;
64
+ this.totalMessagesProcessed = 0;
65
+ this.totalMessagesFailed = 0;
66
+ this.consecutiveFailures = 0;
67
+ this.MAX_FAILURES_BEFORE_DEGRADED = 5;
68
+ this.activeBatchCount = 0;
69
+ this.droppedMessages = 0;
70
+ this.backpressureHits = 0;
71
+ this.totalFlushDurationMs = 0;
72
+ this.lastMetricsLog = Date.now();
73
+ this.initTime = Date.now();
74
+ this.initAttempts = 0;
75
+ this.isInitializing = false;
76
+ this.config = {
77
+ ...config,
78
+ bufferSize: Math.min(config.bufferSize ?? 1000, this.MAX_BUFFER_SIZE),
79
+ flushIntervalMs: config.flushIntervalMs ?? 2000,
80
+ maxRetries: config.maxRetries ?? 3,
81
+ enableBackpressure: config.enableBackpressure ?? true,
82
+ backpressureThreshold: config.backpressureThreshold ?? 0.8,
83
+ backpressureDelayMs: config.backpressureDelayMs ?? 50,
84
+ maxBatchSize: config.maxBatchSize ?? 100,
85
+ parallelBatchLimit: config.parallelBatchLimit ?? 5,
86
+ commandTimeoutMs: config.commandTimeoutMs ?? 10000,
87
+ enableMetricsLogging: config.enableMetricsLogging ?? true,
88
+ metricsLogIntervalMs: config.metricsLogIntervalMs ?? 10000,
89
+ autoInit: config.autoInit ?? false,
90
+ initRetries: config.initRetries ?? 3,
91
+ initRetryDelayMs: config.initRetryDelayMs ?? 1000,
92
+ onPublishError: config.onPublishError ??
93
+ (error => {
94
+ console.error('[AnalyticsClient] Publish error:', error.message);
95
+ }),
96
+ };
97
+ if (this.config.autoInit) {
98
+ this.init().catch(error => {
99
+ console.error('[AnalyticsClient] Auto-initialization failed:', error);
100
+ });
101
+ }
102
+ }
103
+ async init() {
104
+ if (this.isInitializing && this.initPromise) {
105
+ return this.initPromise;
106
+ }
107
+ if (this.state === ClientState.READY && this.adapter) {
108
+ return;
109
+ }
110
+ if (this.state === ClientState.CLOSED || this.state === ClientState.CLOSING) {
111
+ throw new Error('Cannot initialize: client is closed or closing');
112
+ }
113
+ this.isInitializing = true;
114
+ this.initPromise = this.performInit();
115
+ try {
116
+ await this.initPromise;
117
+ }
118
+ finally {
119
+ this.isInitializing = false;
120
+ this.initPromise = undefined;
121
+ }
122
+ }
123
+ async performInit() {
124
+ let lastError;
125
+ for (let attempt = 1; attempt <= this.config.initRetries; attempt++) {
126
+ try {
127
+ this.initAttempts = attempt;
128
+ this.state = ClientState.INITIALIZING;
129
+ if (attempt > 1) {
130
+ console.log(`[AnalyticsClient] 🔄 Initialization attempt ${attempt}/${this.config.initRetries}`);
131
+ await new Promise(resolve => setTimeout(resolve, this.config.initRetryDelayMs * attempt));
132
+ }
133
+ const baseAdapter = await AdapterFactory_1.AdapterFactory.create(this.config.adapter, this.config.adapterConfig);
134
+ if (baseAdapter.init) {
135
+ await baseAdapter.init();
136
+ }
137
+ this.adapter = new RetryDecorator_1.default(baseAdapter, this.config.maxRetries);
138
+ this.state = ClientState.READY;
139
+ this.lastSuccessfulFlush = new Date();
140
+ this.initTime = Date.now();
141
+ this.consecutiveFailures = 0;
142
+ this.startFlushTimer();
143
+ console.log(`[AnalyticsClient] ✅ Initialized successfully${attempt > 1 ? ` (attempt ${attempt})` : ''}\n` +
144
+ ` Buffer: ${this.MAX_BUFFER_SIZE} | Batch: ${this.config.maxBatchSize} | ` +
145
+ `Parallel: ${this.config.parallelBatchLimit} | Flush Interval: ${this.config.flushIntervalMs}ms`);
146
+ return;
147
+ }
148
+ catch (error) {
149
+ lastError = error;
150
+ console.error(`[AnalyticsClient] ❌ Initialization attempt ${attempt}/${this.config.initRetries} failed:`, error);
151
+ if (this.adapter) {
152
+ try {
153
+ await this.adapter.close();
154
+ }
155
+ catch (closeError) {
156
+ console.error('[AnalyticsClient] Error closing failed adapter:', closeError);
157
+ }
158
+ this.adapter = undefined;
159
+ }
160
+ // If this is the last attempt, throw
161
+ if (attempt === this.config.initRetries) {
162
+ this.state = ClientState.DEGRADED;
163
+ throw new Error(`Failed to initialize after ${this.config.initRetries} attempts: ${lastError?.message}`);
164
+ }
165
+ }
166
+ }
167
+ // Should never reach here, but TypeScript needs it
168
+ this.state = ClientState.DEGRADED;
169
+ throw lastError || new Error('Initialization failed');
170
+ }
171
+ async publishSession(session) {
172
+ const normalizedSession = this.normalizeSession(session);
173
+ return this.publish(types_1.Topic.ANALYTICS_SESSION, normalizedSession.tenantId, normalizedSession);
174
+ }
175
+ async publishEvent(event) {
176
+ const normalizedEvent = this.normalizeEvent(event);
177
+ return this.publish(types_1.Topic.ANALYTICS_EVENT, normalizedEvent.tenantId, normalizedEvent);
178
+ }
179
+ async publishClient(client) {
180
+ const normalizedClient = this.normalizeClient(client);
181
+ return this.publish(types_1.Topic.ANALYTICS_CLIENT, normalizedClient.tenantId, normalizedClient);
182
+ }
183
+ async publish(topic, tenantId, data) {
184
+ if (this.state === ClientState.CLOSED || this.state === ClientState.CLOSING) {
185
+ throw new Error('Client is closed or closing');
186
+ }
187
+ if (this.isInitializing && this.initPromise) {
188
+ await this.initPromise;
189
+ }
190
+ if (!this.adapter || this.state === ClientState.INITIALIZING) {
191
+ await this.init();
192
+ }
193
+ if (!this.adapter) {
194
+ throw new Error('Failed to initialize adapter');
195
+ }
196
+ const bufferUsage = this.messageBuffer.length / this.MAX_BUFFER_SIZE;
197
+ if (this.config.enableBackpressure && bufferUsage >= this.config.backpressureThreshold) {
198
+ this.backpressureHits++;
199
+ const delay = Math.min(this.config.backpressureDelayMs * Math.pow(1.5, bufferUsage * 10), 2000);
200
+ if (this.config.enableMetricsLogging && this.backpressureHits % 500 === 1) {
201
+ console.warn(`[AnalyticsClient] ⚠️ Backpressure active: ${Math.round(bufferUsage * 100)}% ` +
202
+ `buffer usage (${this.messageBuffer.length}/${this.MAX_BUFFER_SIZE}), delaying ${delay.toFixed(0)}ms`);
203
+ }
204
+ await new Promise(resolve => setTimeout(resolve, delay));
205
+ }
206
+ if (this.messageBuffer.length >= this.MAX_BUFFER_SIZE) {
207
+ this.droppedMessages++;
208
+ throw new Error(`Buffer overflow: ${this.messageBuffer.length}/${this.MAX_BUFFER_SIZE}. ` +
209
+ `Message dropped. Consider increasing bufferSize or reducing publish rate.`);
210
+ }
211
+ const command = new PublishCommand_1.default(this.adapter, topic, tenantId, data);
212
+ this.messageBuffer.push(command);
213
+ if (this.messageBuffer.length >= this.config.bufferSize &&
214
+ this.activeBatchCount < this.config.parallelBatchLimit) {
215
+ setImmediate(() => this.flush().catch(err => {
216
+ console.error('[AnalyticsClient] Auto-flush error:', err.message);
217
+ }));
218
+ }
219
+ this.logMetricsPeriodically();
220
+ }
221
+ async flush() {
222
+ if (this.messageBuffer.length === 0 ||
223
+ this.activeBatchCount >= this.config.parallelBatchLimit ||
224
+ this.state === ClientState.CLOSED ||
225
+ this.state === ClientState.CLOSING) {
226
+ return;
227
+ }
228
+ this.activeBatchCount++;
229
+ this.totalFlushes++;
230
+ const flushId = this.totalFlushes;
231
+ const flushStartTime = Date.now();
232
+ try {
233
+ const batchSize = Math.min(this.config.maxBatchSize, this.messageBuffer.length);
234
+ const batch = this.messageBuffer.splice(0, batchSize);
235
+ if (this.config.enableMetricsLogging &&
236
+ (flushId % 50 === 0 || batch.length >= this.config.maxBatchSize)) {
237
+ console.log(`[AnalyticsClient] 🔄 Flush #${flushId}: Processing ${batch.length} msgs ` +
238
+ `(${this.messageBuffer.length} queued, ${this.activeBatchCount} active batches)`);
239
+ }
240
+ let successCount = 0;
241
+ let failureCount = 0;
242
+ for (const command of batch) {
243
+ try {
244
+ await Promise.race([
245
+ command.execute(),
246
+ new Promise((_, reject) => setTimeout(() => reject(new Error('Command timeout')), this.config.commandTimeoutMs)),
247
+ ]);
248
+ successCount++;
249
+ }
250
+ catch (error) {
251
+ failureCount++;
252
+ this.totalMessagesFailed++;
253
+ this.config.onPublishError(error, command);
254
+ }
255
+ }
256
+ const flushDuration = Date.now() - flushStartTime;
257
+ this.totalFlushDurationMs += flushDuration;
258
+ if (this.config.enableMetricsLogging && (flushId % 50 === 0 || failureCount > 0)) {
259
+ const throughput = Math.round((successCount * 1000) / flushDuration);
260
+ console.log(`[AnalyticsClient] ✅ Flush #${flushId} complete: ${successCount} ok, ${failureCount} failed ` +
261
+ `in ${flushDuration}ms (${throughput} msg/s)`);
262
+ }
263
+ this.totalMessagesProcessed += successCount;
264
+ if (failureCount === batch.length && batch.length > 0) {
265
+ this.consecutiveFailures++;
266
+ }
267
+ else {
268
+ this.consecutiveFailures = 0;
269
+ this.lastSuccessfulFlush = new Date();
270
+ }
271
+ if (this.state === ClientState.DEGRADED && this.consecutiveFailures === 0) {
272
+ console.log('[AnalyticsClient] 🔄 Connection recovered, state -> READY');
273
+ this.state = ClientState.READY;
274
+ }
275
+ }
276
+ catch (error) {
277
+ console.error(`[AnalyticsClient] ❌ Batch processing failed in flush #${flushId}:`, error);
278
+ this.consecutiveFailures++;
279
+ if (this.consecutiveFailures >= this.MAX_FAILURES_BEFORE_DEGRADED) {
280
+ this.state = ClientState.DEGRADED;
281
+ console.error(`[AnalyticsClient] ⚠️ Entered DEGRADED state after ${this.consecutiveFailures} consecutive failures`);
282
+ }
283
+ }
284
+ finally {
285
+ this.activeBatchCount--;
286
+ if (this.messageBuffer.length >= this.config.maxBatchSize &&
287
+ this.activeBatchCount < this.config.parallelBatchLimit) {
288
+ setImmediate(() => this.flush().catch(err => {
289
+ console.error('[AnalyticsClient] Cascade flush error:', err.message);
290
+ }));
291
+ }
292
+ }
293
+ }
294
+ startFlushTimer() {
295
+ if (this.config.flushIntervalMs <= 0)
296
+ return;
297
+ this.stopFlushTimer();
298
+ this.flushTimer = setInterval(() => {
299
+ if (this.messageBuffer.length > 0 &&
300
+ this.state !== ClientState.CLOSED &&
301
+ this.state !== ClientState.CLOSING &&
302
+ this.activeBatchCount < this.config.parallelBatchLimit) {
303
+ const flushesNeeded = Math.min(Math.ceil(this.messageBuffer.length / this.config.maxBatchSize), this.config.parallelBatchLimit - this.activeBatchCount);
304
+ for (let i = 0; i < flushesNeeded; i++) {
305
+ this.flush().catch(err => {
306
+ console.error('[AnalyticsClient] Scheduled flush error:', err.message);
307
+ });
308
+ }
309
+ }
310
+ }, this.config.flushIntervalMs);
311
+ this.flushTimer.unref();
312
+ }
313
+ stopFlushTimer() {
314
+ if (this.flushTimer) {
315
+ clearInterval(this.flushTimer);
316
+ this.flushTimer = undefined;
317
+ }
318
+ }
319
+ logMetricsPeriodically() {
320
+ if (!this.config.enableMetricsLogging)
321
+ return;
322
+ const now = Date.now();
323
+ if (now - this.lastMetricsLog >= this.config.metricsLogIntervalMs) {
324
+ const metrics = this.getMetrics();
325
+ console.log(`[AnalyticsClient] 📊 Metrics Summary:\n` +
326
+ ` Buffer: ${metrics.bufferSize}/${metrics.maxBufferSize} (${metrics.bufferUsagePercent.toFixed(1)}%) | ` +
327
+ `Active Batches: ${metrics.activeBatchCount}\n` +
328
+ ` Processed: ${metrics.totalMessagesProcessed.toLocaleString()} | ` +
329
+ `Dropped: ${metrics.droppedMessages} | ` +
330
+ `Success Rate: ${metrics.successRate.toFixed(2)}%\n` +
331
+ ` Throughput: ${metrics.throughput.toLocaleString()} msg/s | ` +
332
+ `Avg Flush: ${metrics.avgFlushDurationMs.toFixed(0)}ms | ` +
333
+ `Backpressure Hits: ${metrics.backpressureHits.toLocaleString()}`);
334
+ this.lastMetricsLog = now;
335
+ }
336
+ }
337
+ async close() {
338
+ if (this.state === ClientState.CLOSED) {
339
+ return;
340
+ }
341
+ if (this.state === ClientState.CLOSING) {
342
+ return this.shutdownPromise;
343
+ }
344
+ this.shutdownPromise = this.performClose();
345
+ return this.shutdownPromise;
346
+ }
347
+ async performClose() {
348
+ console.log(`[AnalyticsClient] 🔚 Initiating graceful shutdown (buffer: ${this.messageBuffer.length})`);
349
+ this.state = ClientState.CLOSING;
350
+ this.stopFlushTimer();
351
+ let waitCount = 0;
352
+ while (this.activeBatchCount > 0 && waitCount < 100) {
353
+ await new Promise(resolve => setTimeout(resolve, 100));
354
+ waitCount++;
355
+ }
356
+ if (this.activeBatchCount > 0) {
357
+ console.warn(`[AnalyticsClient] ⚠️ ${this.activeBatchCount} batches still active after 10s wait`);
358
+ }
359
+ if (this.messageBuffer.length > 500) {
360
+ console.warn(`[AnalyticsClient] ⚠️ Buffer too large (${this.messageBuffer.length}), ` +
361
+ `keeping only last 500 messages`);
362
+ this.droppedMessages += this.messageBuffer.length - 500;
363
+ this.messageBuffer = this.messageBuffer.slice(-500);
364
+ }
365
+ if (this.messageBuffer.length > 0) {
366
+ console.log(`[AnalyticsClient] 📤 Flushing ${this.messageBuffer.length} remaining messages`);
367
+ let attempts = 0;
368
+ const maxAttempts = 3;
369
+ while (this.messageBuffer.length > 0 && attempts < maxAttempts) {
370
+ try {
371
+ await Promise.race([
372
+ this.flush(),
373
+ new Promise((_, reject) => setTimeout(() => reject(new Error('Flush timeout')), 5000)),
374
+ ]);
375
+ attempts++;
376
+ if (this.messageBuffer.length > 0) {
377
+ await new Promise(resolve => setTimeout(resolve, 1000));
378
+ }
379
+ }
380
+ catch (error) {
381
+ console.error(`[AnalyticsClient] Flush attempt ${attempts} failed:`, error);
382
+ attempts++;
383
+ if (attempts >= maxAttempts) {
384
+ console.error(`[AnalyticsClient] ❌ Abandoning ${this.messageBuffer.length} messages after ${maxAttempts} attempts`);
385
+ this.droppedMessages += this.messageBuffer.length;
386
+ this.messageBuffer = [];
387
+ break;
388
+ }
389
+ }
390
+ }
391
+ }
392
+ if (this.adapter) {
393
+ try {
394
+ console.log('[AnalyticsClient] 🔒 Closing adapter...');
395
+ await Promise.race([
396
+ this.adapter.close(),
397
+ new Promise((_, reject) => setTimeout(() => reject(new Error('Adapter close timeout')), 5000)),
398
+ ]);
399
+ console.log('[AnalyticsClient] ✅ Adapter closed successfully');
400
+ }
401
+ catch (error) {
402
+ console.error('[AnalyticsClient] ⚠️ Error closing adapter:', error);
403
+ }
404
+ }
405
+ this.messageBuffer = [];
406
+ this.state = ClientState.CLOSED;
407
+ const uptimeSeconds = Math.round((Date.now() - this.initTime) / 1000);
408
+ const metrics = this.getMetrics();
409
+ console.log(`[AnalyticsClient] ✅ Shutdown complete\n` +
410
+ ` Uptime: ${uptimeSeconds}s | Flushes: ${this.totalFlushes}\n` +
411
+ ` Processed: ${this.totalMessagesProcessed.toLocaleString()} | ` +
412
+ `Failed: ${this.totalMessagesFailed} | ` +
413
+ `Dropped: ${this.droppedMessages}\n` +
414
+ ` Success Rate: ${metrics.successRate.toFixed(2)}% | ` +
415
+ `Avg Throughput: ${metrics.throughput.toLocaleString()} msg/s`);
416
+ }
417
+ isHealthy() {
418
+ return this.state === ClientState.READY && this.adapter !== undefined;
419
+ }
420
+ getState() {
421
+ return this.state;
422
+ }
423
+ getMetrics() {
424
+ const bufferUsagePercent = (this.messageBuffer.length / this.MAX_BUFFER_SIZE) * 100;
425
+ const avgFlushDurationMs = this.totalFlushes > 0 ? this.totalFlushDurationMs / this.totalFlushes : 0;
426
+ const totalMessages = this.totalMessagesProcessed + this.totalMessagesFailed;
427
+ const successRate = totalMessages > 0 ? (this.totalMessagesProcessed / totalMessages) * 100 : 100;
428
+ return {
429
+ state: this.state,
430
+ bufferSize: this.messageBuffer.length,
431
+ maxBufferSize: this.MAX_BUFFER_SIZE,
432
+ bufferUsagePercent,
433
+ consecutiveFailures: this.consecutiveFailures,
434
+ lastSuccessfulFlush: this.lastSuccessfulFlush,
435
+ heapUsedMB: Math.round(process.memoryUsage().heapUsed / 1024 / 1024),
436
+ activeBatchCount: this.activeBatchCount,
437
+ totalFlushes: this.totalFlushes,
438
+ totalMessagesProcessed: this.totalMessagesProcessed,
439
+ droppedMessages: this.droppedMessages,
440
+ backpressureHits: this.backpressureHits,
441
+ throughput: this.calculateThroughput(),
442
+ avgFlushDurationMs,
443
+ successRate,
444
+ };
445
+ }
446
+ calculateThroughput() {
447
+ const elapsedSeconds = (Date.now() - this.initTime) / 1000;
448
+ return elapsedSeconds > 0 ? Math.round(this.totalMessagesProcessed / elapsedSeconds) : 0;
449
+ }
450
+ async forceFlush() {
451
+ console.log(`[AnalyticsClient] ⚡ Force flush requested - buffer: ${this.messageBuffer.length}`);
452
+ const promises = [];
453
+ const maxParallel = Math.min(this.config.parallelBatchLimit, 10);
454
+ while (this.messageBuffer.length > 0 &&
455
+ this.state !== ClientState.CLOSED &&
456
+ promises.length < maxParallel) {
457
+ promises.push(this.flush());
458
+ }
459
+ const results = await Promise.allSettled(promises);
460
+ const failed = results.filter(r => r.status === 'rejected').length;
461
+ if (failed > 0) {
462
+ console.warn(`[AnalyticsClient] ⚠️ Force flush: ${failed}/${results.length} batches failed`);
463
+ }
464
+ }
465
+ async reconnect() {
466
+ if (this.state === ClientState.CLOSED || this.state === ClientState.CLOSING) {
467
+ throw new Error('Cannot reconnect closed client');
468
+ }
469
+ console.log('[AnalyticsClient] 🔄 Attempting reconnection...');
470
+ const bufferSnapshot = this.messageBuffer.length;
471
+ try {
472
+ if (this.adapter) {
473
+ await this.adapter.close();
474
+ }
475
+ this.adapter = undefined;
476
+ this.consecutiveFailures = 0;
477
+ await this.init();
478
+ console.log(`[AnalyticsClient] ✅ Reconnection successful ` +
479
+ `(${bufferSnapshot} messages preserved in buffer)`);
480
+ }
481
+ catch (error) {
482
+ console.error('[AnalyticsClient] ❌ Reconnection failed:', error);
483
+ this.state = ClientState.DEGRADED;
484
+ throw error;
485
+ }
486
+ }
487
+ }
488
+ exports.AnalyticsClient = AnalyticsClient;
489
+ //# sourceMappingURL=AnalyticsClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AnalyticsClient.js","sourceRoot":"","sources":["../../src/client/AnalyticsClient.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import ITransportAdapter from '../adapters/ITransportAdapter';
2
+ import { AnalyticsData, Topic } from '../types';
3
+ export interface ICommand {
4
+ execute(): Promise<void>;
5
+ canRetry(): boolean;
6
+ getRetryCount(): number;
7
+ incrementRetry(): void;
8
+ }
9
+ export default class PublishCommand implements ICommand {
10
+ private adapter;
11
+ private topic;
12
+ private key;
13
+ private message;
14
+ private retryCount;
15
+ private maxRetries;
16
+ constructor(adapter: ITransportAdapter, topic: Topic, key: string, message: AnalyticsData);
17
+ execute(): Promise<void>;
18
+ canRetry(): boolean;
19
+ getRetryCount(): number;
20
+ incrementRetry(): void;
21
+ }
22
+ //# sourceMappingURL=PublishCommand.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PublishCommand.d.ts","sourceRoot":"","sources":["../../src/commands/PublishCommand.ts"],"names":[],"mappings":"AAAA,OAAO,iBAAiB,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAEhD,MAAM,WAAW,QAAQ;IACvB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACzB,QAAQ,IAAI,OAAO,CAAC;IACpB,aAAa,IAAI,MAAM,CAAC;IACxB,cAAc,IAAI,IAAI,CAAC;CACxB;AACD,MAAM,CAAC,OAAO,OAAO,cAAe,YAAW,QAAQ;IAKnD,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,GAAG;IACX,OAAO,CAAC,OAAO;IAPjB,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,UAAU,CAAK;gBAGb,OAAO,EAAE,iBAAiB,EAC1B,KAAK,EAAE,KAAK,EACZ,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,aAAa;IAG1B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAS9B,QAAQ,IAAI,OAAO;IAInB,aAAa,IAAI,MAAM;IAIvB,cAAc,IAAI,IAAI;CAGvB"}
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ class PublishCommand {
4
+ constructor(adapter, topic, key, message) {
5
+ this.adapter = adapter;
6
+ this.topic = topic;
7
+ this.key = key;
8
+ this.message = message;
9
+ this.retryCount = 0;
10
+ this.maxRetries = 3;
11
+ }
12
+ async execute() {
13
+ try {
14
+ await this.adapter.publish(this.topic, this.key, this.message);
15
+ }
16
+ catch (error) {
17
+ this.retryCount++;
18
+ throw error;
19
+ }
20
+ }
21
+ canRetry() {
22
+ return this.retryCount < this.maxRetries;
23
+ }
24
+ getRetryCount() {
25
+ return this.retryCount;
26
+ }
27
+ incrementRetry() {
28
+ this.retryCount++;
29
+ }
30
+ }
31
+ exports.default = PublishCommand;
32
+ //# sourceMappingURL=PublishCommand.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PublishCommand.js","sourceRoot":"","sources":["../../src/commands/PublishCommand.ts"],"names":[],"mappings":";;AASA,MAAqB,cAAc;IAIjC,YACU,OAA0B,EAC1B,KAAY,EACZ,GAAW,EACX,OAAsB;QAHtB,YAAO,GAAP,OAAO,CAAmB;QAC1B,UAAK,GAAL,KAAK,CAAO;QACZ,QAAG,GAAH,GAAG,CAAQ;QACX,YAAO,GAAP,OAAO,CAAe;QAPxB,eAAU,GAAG,CAAC,CAAC;QACf,eAAU,GAAG,CAAC,CAAC;IAOpB,CAAC;IAEJ,KAAK,CAAC,OAAO;QACX,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QACjE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,UAAU,EAAE,CAAC;YAClB,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;IAC3C,CAAC;IAED,aAAa;QACX,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAED,cAAc;QACZ,IAAI,CAAC,UAAU,EAAE,CAAC;IACpB,CAAC;CACF;AA/BD,iCA+BC"}
@@ -0,0 +1,11 @@
1
+ import ITransportAdapter from '../adapters/ITransportAdapter';
2
+ export default class RetryDecorator implements ITransportAdapter {
3
+ private adapter;
4
+ private maxRetries;
5
+ private baseDelay;
6
+ constructor(adapter: ITransportAdapter, maxRetries?: number, baseDelay?: number);
7
+ publish(topic: string, key: string, message: Buffer | object): Promise<void>;
8
+ close(): Promise<void>;
9
+ private sleep;
10
+ }
11
+ //# sourceMappingURL=RetryDecorator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RetryDecorator.d.ts","sourceRoot":"","sources":["../../src/decorators/RetryDecorator.ts"],"names":[],"mappings":"AAAA,OAAO,iBAAiB,MAAM,+BAA+B,CAAC;AAE9D,MAAM,CAAC,OAAO,OAAO,cAAe,YAAW,iBAAiB;IAE5D,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,SAAS;gBAFT,OAAO,EAAE,iBAAiB,EAC1B,UAAU,GAAE,MAAU,EACtB,SAAS,GAAE,MAAa;IAG5B,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAuB5E,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAI5B,OAAO,CAAC,KAAK;CAGd"}
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ class RetryDecorator {
4
+ constructor(adapter, maxRetries = 3, baseDelay = 1000) {
5
+ this.adapter = adapter;
6
+ this.maxRetries = maxRetries;
7
+ this.baseDelay = baseDelay;
8
+ }
9
+ async publish(topic, key, message) {
10
+ let lastError;
11
+ for (let attempt = 0; attempt <= this.maxRetries; attempt++) {
12
+ try {
13
+ await this.adapter.publish(topic, key, message);
14
+ return;
15
+ }
16
+ catch (error) {
17
+ lastError = error;
18
+ if (attempt < this.maxRetries) {
19
+ const delay = this.baseDelay * Math.pow(2, attempt);
20
+ await this.sleep(delay);
21
+ }
22
+ }
23
+ }
24
+ if (lastError) {
25
+ throw lastError;
26
+ }
27
+ throw new Error('Publish failed after all retries');
28
+ }
29
+ async close() {
30
+ return this.adapter.close();
31
+ }
32
+ sleep(ms) {
33
+ return new Promise(resolve => setTimeout(resolve, ms));
34
+ }
35
+ }
36
+ exports.default = RetryDecorator;
37
+ //# sourceMappingURL=RetryDecorator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RetryDecorator.js","sourceRoot":"","sources":["../../src/decorators/RetryDecorator.ts"],"names":[],"mappings":";;AAEA,MAAqB,cAAc;IACjC,YACU,OAA0B,EAC1B,aAAqB,CAAC,EACtB,YAAoB,IAAI;QAFxB,YAAO,GAAP,OAAO,CAAmB;QAC1B,eAAU,GAAV,UAAU,CAAY;QACtB,cAAS,GAAT,SAAS,CAAe;IAC/B,CAAC;IAEJ,KAAK,CAAC,OAAO,CAAC,KAAa,EAAE,GAAW,EAAE,OAAwB;QAChE,IAAI,SAA4B,CAAC;QAEjC,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE,EAAE,CAAC;YAC5D,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;gBAChD,OAAO;YACT,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,SAAS,GAAG,KAAc,CAAC;gBAE3B,IAAI,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;oBAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;oBACpD,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBAC1B,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,SAAS,CAAC;QAClB,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;IACtD,CAAC;IAED,KAAK,CAAC,KAAK;QACT,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;IAC9B,CAAC;IAEO,KAAK,CAAC,EAAU;QACtB,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;IACzD,CAAC;CACF;AArCD,iCAqCC"}
@@ -0,0 +1,8 @@
1
+ import { EventHubConfig } from '../adapters/event-hub/EventHubAdapter';
2
+ import ITransportAdapter from '../adapters/ITransportAdapter';
3
+ import { KafkaAdapterConfig } from '../adapters/kafka/types';
4
+ import { AdapterType } from '../types';
5
+ export declare class AdapterFactory {
6
+ static create(type: AdapterType, config: EventHubConfig | KafkaAdapterConfig): Promise<ITransportAdapter>;
7
+ }
8
+ //# sourceMappingURL=AdapterFactory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AdapterFactory.d.ts","sourceRoot":"","sources":["../../src/factories/AdapterFactory.ts"],"names":[],"mappings":"AAAA,OAAiB,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AACjF,OAAO,iBAAiB,MAAM,+BAA+B,CAAC;AAE9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,qBAAa,cAAc;WACZ,MAAM,CACjB,IAAI,EAAE,WAAW,EACjB,MAAM,EAAE,cAAc,GAAG,kBAAkB,GAC1C,OAAO,CAAC,iBAAiB,CAAC;CAW9B"}