@takentrade/takentrade-libs 4.1.0 → 4.1.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 (53) hide show
  1. package/README.md +6 -57
  2. package/dist/auth/guards/index.d.ts +1 -0
  3. package/dist/auth/guards/index.js +1 -0
  4. package/dist/auth/guards/tnt-base-auth.guard.d.ts +15 -0
  5. package/dist/auth/guards/tnt-base-auth.guard.js +54 -0
  6. package/dist/bullmq/config/bull.config.js +1 -1
  7. package/dist/index.d.ts +0 -3
  8. package/dist/index.js +0 -3
  9. package/dist/notification/notification.interface.d.ts +0 -2
  10. package/dist/tsconfig.tsbuildinfo +1 -1
  11. package/package.json +15 -21
  12. package/dist/metrics/circuit-breaker-metrics.service.d.ts +0 -61
  13. package/dist/metrics/circuit-breaker-metrics.service.js +0 -149
  14. package/dist/metrics/index.d.ts +0 -5
  15. package/dist/metrics/index.js +0 -21
  16. package/dist/metrics/metrics-registry.d.ts +0 -50
  17. package/dist/metrics/metrics-registry.js +0 -156
  18. package/dist/metrics/metrics-updater.d.ts +0 -32
  19. package/dist/metrics/metrics-updater.js +0 -102
  20. package/dist/metrics/metrics.controller.d.ts +0 -11
  21. package/dist/metrics/metrics.controller.js +0 -32
  22. package/dist/metrics/metrics.interface.d.ts +0 -53
  23. package/dist/metrics/metrics.interface.js +0 -23
  24. package/dist/metrics/metrics.module.d.ts +0 -11
  25. package/dist/metrics/metrics.module.js +0 -39
  26. package/dist/metrics/metrics.service.d.ts +0 -50
  27. package/dist/metrics/metrics.service.js +0 -165
  28. package/dist/monitoring/alerting.service.d.ts +0 -82
  29. package/dist/monitoring/alerting.service.js +0 -290
  30. package/dist/monitoring/index.d.ts +0 -5
  31. package/dist/monitoring/index.js +0 -21
  32. package/dist/monitoring/monitoring.interface.d.ts +0 -102
  33. package/dist/monitoring/monitoring.interface.js +0 -10
  34. package/dist/monitoring/monitoring.module.d.ts +0 -8
  35. package/dist/monitoring/monitoring.module.js +0 -44
  36. package/dist/monitoring/sentry.service.d.ts +0 -65
  37. package/dist/monitoring/sentry.service.js +0 -218
  38. package/dist/monitoring/uptime.service.d.ts +0 -59
  39. package/dist/monitoring/uptime.service.js +0 -213
  40. package/dist/resilience/circuit-breaker-event-handler.d.ts +0 -16
  41. package/dist/resilience/circuit-breaker-event-handler.js +0 -70
  42. package/dist/resilience/circuit-breaker-factory.d.ts +0 -19
  43. package/dist/resilience/circuit-breaker-factory.js +0 -51
  44. package/dist/resilience/circuit-breaker-stats.service.d.ts +0 -37
  45. package/dist/resilience/circuit-breaker-stats.service.js +0 -69
  46. package/dist/resilience/circuit-breaker.interface.d.ts +0 -59
  47. package/dist/resilience/circuit-breaker.interface.js +0 -25
  48. package/dist/resilience/circuit-breaker.module.d.ts +0 -2
  49. package/dist/resilience/circuit-breaker.module.js +0 -21
  50. package/dist/resilience/circuit-breaker.service.d.ts +0 -119
  51. package/dist/resilience/circuit-breaker.service.js +0 -234
  52. package/dist/resilience/index.d.ts +0 -3
  53. package/dist/resilience/index.js +0 -19
@@ -1,290 +0,0 @@
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
- var AlertingService_1;
9
- Object.defineProperty(exports, "__esModule", { value: true });
10
- exports.AlertingService = void 0;
11
- const common_1 = require("@nestjs/common");
12
- const monitoring_interface_1 = require("./monitoring.interface");
13
- /**
14
- * Alerting Service
15
- *
16
- * Provides multi-channel alerting with rule engine and deduplication
17
- */
18
- let AlertingService = AlertingService_1 = class AlertingService {
19
- logger = new common_1.Logger(AlertingService_1.name);
20
- channels = new Map();
21
- rules = new Map();
22
- alertHistory = new Map();
23
- config;
24
- constructor(config) {
25
- this.config = config || { channels: [] };
26
- this.initializeChannels();
27
- this.initializeRules();
28
- }
29
- /**
30
- * Initialize alert channels
31
- */
32
- initializeChannels() {
33
- if (!this.config.channels) {
34
- return;
35
- }
36
- for (const channel of this.config.channels) {
37
- const name = channel.name || channel.type;
38
- this.channels.set(name, {
39
- ...channel,
40
- enabled: channel.enabled ?? true,
41
- });
42
- this.logger.log(`Alert channel '${name}' registered`);
43
- }
44
- }
45
- /**
46
- * Initialize alert rules
47
- */
48
- initializeRules() {
49
- if (!this.config.rules) {
50
- return;
51
- }
52
- for (const rule of this.config.rules) {
53
- this.registerRule(rule);
54
- }
55
- }
56
- /**
57
- * Register an alert rule
58
- */
59
- registerRule(rule) {
60
- this.rules.set(rule.name, {
61
- ...rule,
62
- enabled: rule.enabled ?? true,
63
- throttle: rule.throttle ?? 300000, // 5 minutes default
64
- });
65
- this.logger.log(`Alert rule '${rule.name}' registered`);
66
- }
67
- /**
68
- * Send an alert
69
- */
70
- async sendAlert(alert) {
71
- const alertId = alert.id || this.generateAlertId(alert);
72
- // Check throttling
73
- if (this.isThrottled(alertId)) {
74
- this.logger.debug(`Alert '${alertId}' is throttled, skipping`);
75
- return;
76
- }
77
- // Add timestamp
78
- const fullAlert = {
79
- ...alert,
80
- id: alertId,
81
- timestamp: alert.timestamp || new Date(),
82
- };
83
- // Send to all enabled channels
84
- const promises = [];
85
- for (const [name, channel] of this.channels.entries()) {
86
- if (channel.enabled) {
87
- promises.push(this.sendToChannel(fullAlert, channel));
88
- }
89
- }
90
- await Promise.allSettled(promises);
91
- // Update alert history
92
- this.alertHistory.set(alertId, new Date());
93
- }
94
- /**
95
- * Evaluate alert rules
96
- */
97
- async evaluateRules(metrics) {
98
- for (const [name, rule] of this.rules.entries()) {
99
- if (!rule.enabled) {
100
- continue;
101
- }
102
- try {
103
- const shouldAlert = this.evaluateCondition(rule.condition, metrics);
104
- if (shouldAlert) {
105
- await this.sendAlert({
106
- title: rule.name,
107
- message: this.interpolateMessage(rule.message, metrics),
108
- severity: rule.severity,
109
- source: 'rule-engine',
110
- metadata: { rule: name, metrics },
111
- });
112
- }
113
- }
114
- catch (error) {
115
- this.logger.error(`Error evaluating rule '${name}':`, error);
116
- }
117
- }
118
- }
119
- /**
120
- * Send alert to specific channel
121
- */
122
- async sendToChannel(alert, channel) {
123
- try {
124
- switch (channel.type) {
125
- case 'slack':
126
- await this.sendToSlack(alert, channel);
127
- break;
128
- case 'email':
129
- await this.sendToEmail(alert, channel);
130
- break;
131
- case 'webhook':
132
- await this.sendToWebhook(alert, channel);
133
- break;
134
- case 'pagerduty':
135
- await this.sendToPagerDuty(alert, channel);
136
- break;
137
- default:
138
- this.logger.warn(`Unknown channel type: ${channel.type}`);
139
- }
140
- }
141
- catch (error) {
142
- this.logger.error(`Failed to send alert to ${channel.type}:`, error);
143
- }
144
- }
145
- /**
146
- * Send alert to Slack
147
- */
148
- async sendToSlack(alert, channel) {
149
- if (!channel.webhookUrl) {
150
- throw new Error('Slack webhook URL not configured');
151
- }
152
- const color = this.getSeverityColor(alert.severity);
153
- const payload = {
154
- attachments: [
155
- {
156
- color,
157
- title: alert.title,
158
- text: alert.message,
159
- fields: [
160
- {
161
- title: 'Severity',
162
- value: alert.severity.toUpperCase(),
163
- short: true,
164
- },
165
- {
166
- title: 'Source',
167
- value: alert.source || 'Unknown',
168
- short: true,
169
- },
170
- {
171
- title: 'Time',
172
- value: alert.timestamp?.toISOString() || new Date().toISOString(),
173
- short: false,
174
- },
175
- ],
176
- },
177
- ],
178
- };
179
- const response = await fetch(channel.webhookUrl, {
180
- method: 'POST',
181
- headers: { 'Content-Type': 'application/json' },
182
- body: JSON.stringify(payload),
183
- });
184
- if (!response.ok) {
185
- throw new Error(`Slack API error: ${response.statusText}`);
186
- }
187
- this.logger.debug(`Alert sent to Slack: ${alert.title}`);
188
- }
189
- /**
190
- * Send alert to email
191
- */
192
- async sendToEmail(alert, channel) {
193
- // This would integrate with your email service
194
- // For now, just log
195
- this.logger.log(`Email alert would be sent to: ${channel.recipients?.join(', ')}`);
196
- this.logger.log(`Subject: ${alert.title}`);
197
- this.logger.log(`Body: ${alert.message}`);
198
- }
199
- /**
200
- * Send alert to webhook
201
- */
202
- async sendToWebhook(alert, channel) {
203
- if (!channel.webhookUrl) {
204
- throw new Error('Webhook URL not configured');
205
- }
206
- const response = await fetch(channel.webhookUrl, {
207
- method: 'POST',
208
- headers: { 'Content-Type': 'application/json' },
209
- body: JSON.stringify(alert),
210
- });
211
- if (!response.ok) {
212
- throw new Error(`Webhook error: ${response.statusText}`);
213
- }
214
- this.logger.debug(`Alert sent to webhook: ${alert.title}`);
215
- }
216
- /**
217
- * Send alert to PagerDuty
218
- */
219
- async sendToPagerDuty(alert, channel) {
220
- // PagerDuty integration would go here
221
- this.logger.log(`PagerDuty alert: ${alert.title}`);
222
- }
223
- /**
224
- * Evaluate alert condition
225
- */
226
- evaluateCondition(condition, metrics) {
227
- if (typeof condition === 'function') {
228
- return condition(metrics);
229
- }
230
- // Simple expression evaluation (extend as needed)
231
- // For now, just return false for string conditions
232
- return false;
233
- }
234
- /**
235
- * Interpolate message template
236
- */
237
- interpolateMessage(template, data) {
238
- return template.replace(/\{\{(\w+)\}\}/g, (match, key) => {
239
- return data[key] || match;
240
- });
241
- }
242
- /**
243
- * Check if alert is throttled
244
- */
245
- isThrottled(alertId) {
246
- const lastSent = this.alertHistory.get(alertId);
247
- if (!lastSent) {
248
- return false;
249
- }
250
- const throttleDuration = 300000; // 5 minutes default
251
- const elapsed = Date.now() - lastSent.getTime();
252
- return elapsed < throttleDuration;
253
- }
254
- /**
255
- * Generate alert ID
256
- */
257
- generateAlertId(alert) {
258
- const parts = [alert.title, alert.severity, alert.source].filter(Boolean);
259
- return parts.join(':').toLowerCase().replace(/\s+/g, '-');
260
- }
261
- /**
262
- * Get severity color for Slack
263
- */
264
- getSeverityColor(severity) {
265
- const colors = {
266
- [monitoring_interface_1.AlertSeverity.INFO]: '#36a64f',
267
- [monitoring_interface_1.AlertSeverity.WARNING]: '#ff9900',
268
- [monitoring_interface_1.AlertSeverity.ERROR]: '#ff0000',
269
- [monitoring_interface_1.AlertSeverity.CRITICAL]: '#8b0000',
270
- };
271
- return colors[severity] || '#808080';
272
- }
273
- /**
274
- * Get alert history
275
- */
276
- getAlertHistory() {
277
- return new Map(this.alertHistory);
278
- }
279
- /**
280
- * Clear alert history
281
- */
282
- clearAlertHistory() {
283
- this.alertHistory.clear();
284
- this.logger.log('Alert history cleared');
285
- }
286
- };
287
- exports.AlertingService = AlertingService;
288
- exports.AlertingService = AlertingService = AlertingService_1 = __decorate([
289
- (0, common_1.Injectable)()
290
- ], AlertingService);
@@ -1,5 +0,0 @@
1
- export * from './monitoring.interface';
2
- export * from './sentry.service';
3
- export * from './alerting.service';
4
- export * from './uptime.service';
5
- export * from './monitoring.module';
@@ -1,21 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
- };
16
- Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./monitoring.interface"), exports);
18
- __exportStar(require("./sentry.service"), exports);
19
- __exportStar(require("./alerting.service"), exports);
20
- __exportStar(require("./uptime.service"), exports);
21
- __exportStar(require("./monitoring.module"), exports);
@@ -1,102 +0,0 @@
1
- export interface MonitoringModuleOptions {
2
- sentry?: SentryConfig;
3
- alerting?: AlertingConfig;
4
- uptime?: UptimeConfig;
5
- }
6
- export interface SentryConfig {
7
- dsn: string;
8
- environment?: string;
9
- release?: string;
10
- sampleRate?: number;
11
- tracesSampleRate?: number;
12
- debug?: boolean;
13
- beforeSend?: (event: any) => any;
14
- integrations?: string[];
15
- }
16
- export interface AlertingConfig {
17
- channels: AlertChannel[];
18
- rules?: AlertRule[];
19
- defaultSeverity?: AlertSeverity;
20
- }
21
- export interface AlertChannel {
22
- type: 'slack' | 'email' | 'webhook' | 'pagerduty';
23
- name?: string;
24
- webhookUrl?: string;
25
- recipients?: string[];
26
- enabled?: boolean;
27
- }
28
- export interface AlertRule {
29
- name: string;
30
- condition: string | ((metrics: any) => boolean);
31
- severity: AlertSeverity;
32
- message: string;
33
- channels: string[];
34
- throttle?: number;
35
- enabled?: boolean;
36
- }
37
- export declare enum AlertSeverity {
38
- INFO = "info",
39
- WARNING = "warning",
40
- ERROR = "error",
41
- CRITICAL = "critical"
42
- }
43
- export interface Alert {
44
- id?: string;
45
- title: string;
46
- message: string;
47
- severity: AlertSeverity;
48
- source?: string;
49
- metadata?: Record<string, any>;
50
- timestamp?: Date;
51
- }
52
- export interface UptimeConfig {
53
- enabled: boolean;
54
- checkInterval?: number;
55
- slaThreshold?: number;
56
- alertOnDowntime?: boolean;
57
- }
58
- export interface HealthCheck {
59
- name: string;
60
- check: () => Promise<void>;
61
- interval?: number;
62
- timeout?: number;
63
- critical?: boolean;
64
- }
65
- export interface HealthCheckResult {
66
- name: string;
67
- status: 'healthy' | 'unhealthy' | 'degraded';
68
- responseTime: number;
69
- error?: string;
70
- timestamp: Date;
71
- }
72
- export interface UptimeReport {
73
- service: string;
74
- uptime: number;
75
- downtime: number;
76
- incidents: number;
77
- period: string;
78
- startTime: Date;
79
- endTime: Date;
80
- }
81
- export interface SentryBreadcrumb {
82
- type?: string;
83
- level?: 'fatal' | 'error' | 'warning' | 'log' | 'info' | 'debug';
84
- message?: string;
85
- category?: string;
86
- data?: Record<string, any>;
87
- timestamp?: number;
88
- }
89
- export interface SentryUser {
90
- id?: string;
91
- email?: string;
92
- username?: string;
93
- ip_address?: string;
94
- [key: string]: any;
95
- }
96
- export interface ErrorContext {
97
- tags?: Record<string, string>;
98
- user?: SentryUser;
99
- extra?: Record<string, any>;
100
- breadcrumbs?: SentryBreadcrumb[];
101
- level?: 'fatal' | 'error' | 'warning' | 'log' | 'info' | 'debug';
102
- }
@@ -1,10 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.AlertSeverity = void 0;
4
- var AlertSeverity;
5
- (function (AlertSeverity) {
6
- AlertSeverity["INFO"] = "info";
7
- AlertSeverity["WARNING"] = "warning";
8
- AlertSeverity["ERROR"] = "error";
9
- AlertSeverity["CRITICAL"] = "critical";
10
- })(AlertSeverity || (exports.AlertSeverity = AlertSeverity = {}));
@@ -1,8 +0,0 @@
1
- import { DynamicModule } from '@nestjs/common';
2
- import { MonitoringModuleOptions } from './monitoring.interface';
3
- export declare class MonitoringModule {
4
- /**
5
- * Register the monitoring module with options
6
- */
7
- static register(options?: MonitoringModuleOptions): DynamicModule;
8
- }
@@ -1,44 +0,0 @@
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
- var MonitoringModule_1;
9
- Object.defineProperty(exports, "__esModule", { value: true });
10
- exports.MonitoringModule = void 0;
11
- const common_1 = require("@nestjs/common");
12
- const sentry_service_1 = require("./sentry.service");
13
- const alerting_service_1 = require("./alerting.service");
14
- const uptime_service_1 = require("./uptime.service");
15
- let MonitoringModule = MonitoringModule_1 = class MonitoringModule {
16
- /**
17
- * Register the monitoring module with options
18
- */
19
- static register(options = {}) {
20
- return {
21
- module: MonitoringModule_1,
22
- providers: [
23
- {
24
- provide: sentry_service_1.SentryService,
25
- useValue: new sentry_service_1.SentryService(options.sentry),
26
- },
27
- {
28
- provide: alerting_service_1.AlertingService,
29
- useValue: new alerting_service_1.AlertingService(options.alerting),
30
- },
31
- {
32
- provide: uptime_service_1.UptimeService,
33
- useValue: new uptime_service_1.UptimeService(options.uptime),
34
- },
35
- ],
36
- exports: [sentry_service_1.SentryService, alerting_service_1.AlertingService, uptime_service_1.UptimeService],
37
- };
38
- }
39
- };
40
- exports.MonitoringModule = MonitoringModule;
41
- exports.MonitoringModule = MonitoringModule = MonitoringModule_1 = __decorate([
42
- (0, common_1.Global)(),
43
- (0, common_1.Module)({})
44
- ], MonitoringModule);
@@ -1,65 +0,0 @@
1
- import { OnModuleDestroy } from '@nestjs/common';
2
- import '@sentry/tracing';
3
- import { SentryConfig, SentryBreadcrumb, SentryUser, ErrorContext } from './monitoring.interface';
4
- export declare class SentryService implements OnModuleDestroy {
5
- private readonly logger;
6
- private initialized;
7
- constructor(config?: SentryConfig);
8
- /**
9
- * Initialize Sentry
10
- */
11
- private initialize;
12
- /**
13
- * Capture an exception
14
- */
15
- captureException(error: Error, context?: ErrorContext): string | undefined;
16
- /**
17
- * Capture a message
18
- */
19
- captureMessage(message: string, level?: 'fatal' | 'error' | 'warning' | 'log' | 'info' | 'debug', context?: ErrorContext): string | undefined;
20
- /**
21
- * Add a breadcrumb
22
- */
23
- addBreadcrumb(breadcrumb: SentryBreadcrumb): void;
24
- /**
25
- * Set user context
26
- */
27
- setUser(user: SentryUser | null): void;
28
- /**
29
- * Set a tag
30
- */
31
- setTag(key: string, value: string): void;
32
- /**
33
- * Set multiple tags
34
- */
35
- setTags(tags: Record<string, string>): void;
36
- /**
37
- * Set context
38
- */
39
- setContext(name: string, context: Record<string, any>): void;
40
- /**
41
- * Start a transaction for performance monitoring
42
- * Note: Use Sentry.startTransaction directly in newer versions
43
- */
44
- startTransaction(name: string, op: string): any;
45
- /**
46
- * Configure scope (use withScope in newer versions)
47
- */
48
- configureScope(callback: (scope: any) => void): void;
49
- /**
50
- * Flush events
51
- */
52
- flush(timeout?: number): Promise<boolean>;
53
- /**
54
- * Close Sentry client
55
- */
56
- close(timeout?: number): Promise<boolean>;
57
- /**
58
- * Check if Sentry is initialized
59
- */
60
- isInitialized(): boolean;
61
- /**
62
- * Cleanup on module destroy
63
- */
64
- onModuleDestroy(): Promise<void>;
65
- }