@takentrade/takentrade-libs 3.0.0 → 3.1.0

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 (39) hide show
  1. package/README.md +1 -0
  2. package/dist/auth/auth.interface.d.ts +8 -0
  3. package/dist/auth/auth.interface.js +2 -0
  4. package/dist/auth/decorators/get-user.decorator.d.ts +2 -0
  5. package/dist/auth/decorators/get-user.decorator.js +26 -0
  6. package/dist/auth/decorators/index.d.ts +1 -0
  7. package/dist/auth/decorators/index.js +1 -0
  8. package/dist/auth/index.d.ts +1 -0
  9. package/dist/auth/index.js +1 -0
  10. package/dist/index.d.ts +1 -0
  11. package/dist/index.js +1 -0
  12. package/dist/metrics/metrics.interface.d.ts +0 -53
  13. package/dist/metrics/metrics.interface.js +0 -12
  14. package/dist/monitoring/alerting.service.d.ts +82 -0
  15. package/dist/monitoring/alerting.service.js +290 -0
  16. package/dist/monitoring/index.d.ts +5 -0
  17. package/dist/monitoring/index.js +21 -0
  18. package/dist/monitoring/monitoring.interface.d.ts +102 -0
  19. package/dist/monitoring/monitoring.interface.js +10 -0
  20. package/dist/monitoring/monitoring.module.d.ts +8 -0
  21. package/dist/monitoring/monitoring.module.js +44 -0
  22. package/dist/monitoring/sentry.service.d.ts +65 -0
  23. package/dist/monitoring/sentry.service.js +218 -0
  24. package/dist/monitoring/uptime.service.d.ts +59 -0
  25. package/dist/monitoring/uptime.service.js +213 -0
  26. package/dist/resilience/circuit-breaker.interface.d.ts +0 -75
  27. package/dist/resilience/circuit-breaker.interface.js +0 -6
  28. package/dist/tsconfig.tsbuildinfo +1 -1
  29. package/dist/utils/helpers/date.util.d.ts +8 -0
  30. package/dist/utils/helpers/date.util.js +30 -0
  31. package/dist/utils/helpers/decimal.util.d.ts +9 -0
  32. package/dist/utils/helpers/decimal.util.js +31 -0
  33. package/dist/utils/helpers/referral.util.d.ts +4 -0
  34. package/dist/utils/helpers/referral.util.js +53 -0
  35. package/dist/utils/helpers/role.util.d.ts +8 -0
  36. package/dist/utils/helpers/role.util.js +18 -0
  37. package/dist/utils/index.d.ts +4 -0
  38. package/dist/utils/index.js +4 -0
  39. package/package.json +4 -1
@@ -0,0 +1,102 @@
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
+ }
@@ -0,0 +1,10 @@
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 = {}));
@@ -0,0 +1,8 @@
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
+ }
@@ -0,0 +1,44 @@
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);
@@ -0,0 +1,65 @@
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
+ }
@@ -0,0 +1,218 @@
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 __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
19
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
20
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
21
+ 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;
22
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
23
+ };
24
+ var __importStar = (this && this.__importStar) || (function () {
25
+ var ownKeys = function(o) {
26
+ ownKeys = Object.getOwnPropertyNames || function (o) {
27
+ var ar = [];
28
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
29
+ return ar;
30
+ };
31
+ return ownKeys(o);
32
+ };
33
+ return function (mod) {
34
+ if (mod && mod.__esModule) return mod;
35
+ var result = {};
36
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
37
+ __setModuleDefault(result, mod);
38
+ return result;
39
+ };
40
+ })();
41
+ var SentryService_1;
42
+ Object.defineProperty(exports, "__esModule", { value: true });
43
+ exports.SentryService = void 0;
44
+ const common_1 = require("@nestjs/common");
45
+ const Sentry = __importStar(require("@sentry/node"));
46
+ require("@sentry/tracing");
47
+ let SentryService = SentryService_1 = class SentryService {
48
+ logger = new common_1.Logger(SentryService_1.name);
49
+ initialized = false;
50
+ constructor(config) {
51
+ if (config?.dsn) {
52
+ this.initialize(config);
53
+ }
54
+ }
55
+ /**
56
+ * Initialize Sentry
57
+ */
58
+ initialize(config) {
59
+ try {
60
+ Sentry.init({
61
+ dsn: config.dsn,
62
+ environment: config.environment || process.env.NODE_ENV || 'development',
63
+ release: config.release,
64
+ sampleRate: config.sampleRate ?? 1.0,
65
+ tracesSampleRate: config.tracesSampleRate ?? 0.1,
66
+ debug: config.debug ?? false,
67
+ beforeSend: config.beforeSend,
68
+ });
69
+ this.initialized = true;
70
+ this.logger.log('Sentry initialized successfully');
71
+ }
72
+ catch (error) {
73
+ this.logger.error('Failed to initialize Sentry:', error);
74
+ }
75
+ }
76
+ /**
77
+ * Capture an exception
78
+ */
79
+ captureException(error, context) {
80
+ if (!this.initialized) {
81
+ this.logger.warn('Sentry not initialized, error not captured');
82
+ return undefined;
83
+ }
84
+ return Sentry.captureException(error, {
85
+ tags: context?.tags,
86
+ user: context?.user,
87
+ extra: context?.extra,
88
+ level: context?.level,
89
+ });
90
+ }
91
+ /**
92
+ * Capture a message
93
+ */
94
+ captureMessage(message, level = 'info', context) {
95
+ if (!this.initialized) {
96
+ this.logger.warn('Sentry not initialized, message not captured');
97
+ return undefined;
98
+ }
99
+ return Sentry.captureMessage(message, {
100
+ level,
101
+ tags: context?.tags,
102
+ user: context?.user,
103
+ extra: context?.extra,
104
+ });
105
+ }
106
+ /**
107
+ * Add a breadcrumb
108
+ */
109
+ addBreadcrumb(breadcrumb) {
110
+ if (!this.initialized) {
111
+ return;
112
+ }
113
+ Sentry.addBreadcrumb({
114
+ type: breadcrumb.type,
115
+ level: breadcrumb.level,
116
+ message: breadcrumb.message,
117
+ category: breadcrumb.category,
118
+ data: breadcrumb.data,
119
+ timestamp: breadcrumb.timestamp,
120
+ });
121
+ }
122
+ /**
123
+ * Set user context
124
+ */
125
+ setUser(user) {
126
+ if (!this.initialized) {
127
+ return;
128
+ }
129
+ Sentry.setUser(user);
130
+ }
131
+ /**
132
+ * Set a tag
133
+ */
134
+ setTag(key, value) {
135
+ if (!this.initialized) {
136
+ return;
137
+ }
138
+ Sentry.setTag(key, value);
139
+ }
140
+ /**
141
+ * Set multiple tags
142
+ */
143
+ setTags(tags) {
144
+ if (!this.initialized) {
145
+ return;
146
+ }
147
+ Sentry.setTags(tags);
148
+ }
149
+ /**
150
+ * Set context
151
+ */
152
+ setContext(name, context) {
153
+ if (!this.initialized) {
154
+ return;
155
+ }
156
+ Sentry.setContext(name, context);
157
+ }
158
+ /**
159
+ * Start a transaction for performance monitoring
160
+ * Note: Use Sentry.startTransaction directly in newer versions
161
+ */
162
+ startTransaction(name, op) {
163
+ if (!this.initialized) {
164
+ return null;
165
+ }
166
+ // In Sentry v7+, use withScope instead
167
+ return { name, op };
168
+ }
169
+ /**
170
+ * Configure scope (use withScope in newer versions)
171
+ */
172
+ configureScope(callback) {
173
+ if (!this.initialized) {
174
+ return;
175
+ }
176
+ // In Sentry v7+, use withScope
177
+ Sentry.withScope(callback);
178
+ }
179
+ /**
180
+ * Flush events
181
+ */
182
+ async flush(timeout = 2000) {
183
+ if (!this.initialized) {
184
+ return false;
185
+ }
186
+ return await Sentry.flush(timeout);
187
+ }
188
+ /**
189
+ * Close Sentry client
190
+ */
191
+ async close(timeout = 2000) {
192
+ if (!this.initialized) {
193
+ return false;
194
+ }
195
+ return await Sentry.close(timeout);
196
+ }
197
+ /**
198
+ * Check if Sentry is initialized
199
+ */
200
+ isInitialized() {
201
+ return this.initialized;
202
+ }
203
+ /**
204
+ * Cleanup on module destroy
205
+ */
206
+ async onModuleDestroy() {
207
+ if (this.initialized) {
208
+ this.logger.log('Flushing Sentry events...');
209
+ await this.flush();
210
+ await this.close();
211
+ this.logger.log('Sentry service shut down');
212
+ }
213
+ }
214
+ };
215
+ exports.SentryService = SentryService;
216
+ exports.SentryService = SentryService = SentryService_1 = __decorate([
217
+ (0, common_1.Injectable)()
218
+ ], SentryService);
@@ -0,0 +1,59 @@
1
+ import { HealthCheck, HealthCheckResult, UptimeConfig, UptimeReport } from './monitoring.interface';
2
+ /**
3
+ * Uptime Monitoring Service
4
+ *
5
+ * Tracks service availability and generates SLA reports
6
+ */
7
+ export declare class UptimeService {
8
+ private readonly logger;
9
+ private healthChecks;
10
+ private healthResults;
11
+ private downtimeTracking;
12
+ private config;
13
+ private checkIntervals;
14
+ constructor(config?: UptimeConfig);
15
+ /**
16
+ * Register a health check
17
+ */
18
+ registerHealthCheck(check: HealthCheck): void;
19
+ /**
20
+ * Start periodic health check
21
+ */
22
+ private startHealthCheck;
23
+ /**
24
+ * Run a health check
25
+ */
26
+ runHealthCheck(name: string): Promise<HealthCheckResult>;
27
+ /**
28
+ * Get current health status
29
+ */
30
+ getHealthStatus(name?: string): Promise<HealthCheckResult[]>;
31
+ /**
32
+ * Get uptime percentage
33
+ */
34
+ getUptime(name: string, periodMs?: number): number;
35
+ /**
36
+ * Get SLA report
37
+ */
38
+ getSLAReport(name: string, period?: string): UptimeReport;
39
+ /**
40
+ * Parse period string to milliseconds
41
+ */
42
+ private parsePeriod;
43
+ /**
44
+ * Stop all health checks
45
+ */
46
+ stopAllHealthChecks(): void;
47
+ /**
48
+ * Stop specific health check
49
+ */
50
+ stopHealthCheck(name: string): void;
51
+ /**
52
+ * Get all registered health checks
53
+ */
54
+ getHealthChecks(): string[];
55
+ /**
56
+ * Cleanup on destroy
57
+ */
58
+ onModuleDestroy(): void;
59
+ }