@takentrade/takentrade-libs 4.1.1 → 4.1.3

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 (54) hide show
  1. package/README.md +15 -55
  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 +56 -0
  6. package/dist/bullmq/config/bull.config.js +1 -1
  7. package/dist/cache/cache.module.d.ts +6 -2
  8. package/dist/cache/cache.module.js +10 -3
  9. package/dist/index.d.ts +0 -3
  10. package/dist/index.js +0 -3
  11. package/dist/tsconfig.tsbuildinfo +1 -1
  12. package/package.json +15 -21
  13. package/dist/metrics/circuit-breaker-metrics.service.d.ts +0 -61
  14. package/dist/metrics/circuit-breaker-metrics.service.js +0 -149
  15. package/dist/metrics/index.d.ts +0 -5
  16. package/dist/metrics/index.js +0 -21
  17. package/dist/metrics/metrics-registry.d.ts +0 -50
  18. package/dist/metrics/metrics-registry.js +0 -156
  19. package/dist/metrics/metrics-updater.d.ts +0 -32
  20. package/dist/metrics/metrics-updater.js +0 -102
  21. package/dist/metrics/metrics.controller.d.ts +0 -11
  22. package/dist/metrics/metrics.controller.js +0 -32
  23. package/dist/metrics/metrics.interface.d.ts +0 -53
  24. package/dist/metrics/metrics.interface.js +0 -23
  25. package/dist/metrics/metrics.module.d.ts +0 -11
  26. package/dist/metrics/metrics.module.js +0 -39
  27. package/dist/metrics/metrics.service.d.ts +0 -50
  28. package/dist/metrics/metrics.service.js +0 -165
  29. package/dist/monitoring/alerting.service.d.ts +0 -82
  30. package/dist/monitoring/alerting.service.js +0 -290
  31. package/dist/monitoring/index.d.ts +0 -5
  32. package/dist/monitoring/index.js +0 -21
  33. package/dist/monitoring/monitoring.interface.d.ts +0 -102
  34. package/dist/monitoring/monitoring.interface.js +0 -10
  35. package/dist/monitoring/monitoring.module.d.ts +0 -8
  36. package/dist/monitoring/monitoring.module.js +0 -44
  37. package/dist/monitoring/sentry.service.d.ts +0 -65
  38. package/dist/monitoring/sentry.service.js +0 -218
  39. package/dist/monitoring/uptime.service.d.ts +0 -59
  40. package/dist/monitoring/uptime.service.js +0 -213
  41. package/dist/resilience/circuit-breaker-event-handler.d.ts +0 -16
  42. package/dist/resilience/circuit-breaker-event-handler.js +0 -70
  43. package/dist/resilience/circuit-breaker-factory.d.ts +0 -19
  44. package/dist/resilience/circuit-breaker-factory.js +0 -51
  45. package/dist/resilience/circuit-breaker-stats.service.d.ts +0 -37
  46. package/dist/resilience/circuit-breaker-stats.service.js +0 -69
  47. package/dist/resilience/circuit-breaker.interface.d.ts +0 -59
  48. package/dist/resilience/circuit-breaker.interface.js +0 -25
  49. package/dist/resilience/circuit-breaker.module.d.ts +0 -2
  50. package/dist/resilience/circuit-breaker.module.js +0 -21
  51. package/dist/resilience/circuit-breaker.service.d.ts +0 -119
  52. package/dist/resilience/circuit-breaker.service.js +0 -234
  53. package/dist/resilience/index.d.ts +0 -3
  54. package/dist/resilience/index.js +0 -19
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # TakeNTrade Microservices Libraries
2
2
 
3
- Shared libraries for the TakeNTrade microservices architecture, providing authentication, caching, messaging, notifications, resilience patterns, metrics, and common utilities.
3
+ Shared libraries for the TakeNTrade microservices architecture, providing authentication, caching, messaging, notifications, and common utilities.
4
4
 
5
5
  ## Installation
6
6
 
@@ -11,22 +11,27 @@ npm install @takentrade/takentrade-libs
11
11
  ## Quick Start
12
12
 
13
13
  ```typescript
14
- import {
15
- CacheModule,
16
- MetricsModule,
17
- CircuitBreakerModule,
18
- } from '@takentrade/takentrade-libs';
14
+ import { CacheModule } from '@takentrade/takentrade-libs';
15
+ import { ConfigService } from '@nestjs/config';
19
16
 
20
17
  @Module({
21
18
  imports: [
22
- CacheModule.register(),
23
- MetricsModule.register({ defaultMetrics: true }),
24
- CircuitBreakerModule,
19
+ CacheModule.registerAsync({
20
+ inject: [ConfigService],
21
+ useFactory: (configService: ConfigService) => ({
22
+ host: configService.get<string>('redis.host'),
23
+ port: configService.get<number>('redis.port'),
24
+ username: configService.get<string>('redis.username'),
25
+ password: configService.get<string>('redis.password'),
26
+ }),
27
+ }),
25
28
  ],
26
29
  })
27
30
  export class AppModule {}
28
31
  ```
29
32
 
33
+ For authentication, services can extend the shared `TntBaseAuthGuard` and pair it with their own JWT strategy implementation based on `TntJwtStrategy`.
34
+
30
35
  ## Modules
31
36
 
32
37
  | Module | Description | Documentation |
@@ -37,9 +42,6 @@ export class AppModule {}
37
42
  | **NATS** | Microservice messaging and event streaming | [docs/nats.md](docs/nats.md) |
38
43
  | **Notifications** | Email, SMS, and push notifications | [docs/notifications.md](docs/notifications.md) |
39
44
  | **RPC** | Request-response patterns for NATS | [docs/rpc.md](docs/rpc.md) |
40
- | **Resilience** | Circuit breakers for fault tolerance | [docs/resilience.md](docs/resilience.md) |
41
- | **Metrics** | Prometheus metrics collection | [docs/metrics.md](docs/metrics.md) |
42
- | **Monitoring** | Error tracking, alerting, uptime monitoring | [docs/monitoring.md](docs/monitoring.md) |
43
45
  | **Common** | Shared constants, enums, and utilities | [docs/common.md](docs/common.md) |
44
46
  | **Utils** | DTOs, pipes, filters, and helpers | [docs/utils.md](docs/utils.md) |
45
47
 
@@ -48,6 +50,7 @@ export class AppModule {}
48
50
  ### 🔐 Authentication & Authorization
49
51
 
50
52
  - `@Public()` and `@Roles()` decorators
53
+ - `TntBaseAuthGuard` for shared JWT guard behavior
51
54
  - JWT-based authentication support
52
55
  - Role-based access control
53
56
 
@@ -58,23 +61,6 @@ export class AppModule {}
58
61
  - Hash operations
59
62
  - Auto-reconnection
60
63
 
61
- ### 📊 Metrics & Observability
62
-
63
- - Prometheus metrics with prom-client
64
- - Default process metrics (CPU, memory, event loop)
65
- - Custom counters, gauges, histograms, summaries
66
- - Circuit breaker metrics integration
67
- - `/metrics` endpoint for scraping
68
-
69
- ### 🔄 Resilience
70
-
71
- - Circuit breakers using Opossum
72
- - Automatic failure detection
73
- - Fallback support
74
- - Health checks
75
- - Request caching
76
- - Comprehensive metrics
77
-
78
64
  ### 🚀 Background Jobs
79
65
 
80
66
  - BullMQ integration
@@ -122,30 +108,6 @@ await this.cacheService.set('key', 'value', 3600); // 1 hour TTL
122
108
  const value = await this.cacheService.get('key');
123
109
  ```
124
110
 
125
- ### Metrics
126
-
127
- ```typescript
128
- this.metricsService.registerCounter({
129
- name: 'requests_total',
130
- help: 'Total requests',
131
- labelNames: ['method', 'status'],
132
- });
133
- this.metricsService.incrementCounter('requests_total', {
134
- method: 'GET',
135
- status: '200',
136
- });
137
- ```
138
-
139
- ### Circuit Breaker
140
-
141
- ```typescript
142
- this.circuitBreaker.createBreaker('api', async (data) => this.apiCall(data), {
143
- timeout: 5000,
144
- errorThresholdPercentage: 50,
145
- });
146
- const result = await this.circuitBreaker.fire('api', requestData);
147
- ```
148
-
149
111
  ### Background Jobs
150
112
 
151
113
  ```typescript
@@ -167,8 +129,6 @@ await this.queue.add(
167
129
  - [NATS](docs/nats.md) - Messaging
168
130
  - [Notifications](docs/notifications.md) - Email, SMS, push
169
131
  - [RPC](docs/rpc.md) - Request-response patterns
170
- - [Resilience](docs/resilience.md) - Circuit breakers
171
- - [Metrics](docs/metrics.md) - Prometheus metrics
172
132
  - [Common](docs/common.md) - Shared utilities
173
133
  - [Utils](docs/utils.md) - DTOs, pipes, filters
174
134
 
@@ -1 +1,2 @@
1
1
  export * from './roles.guard';
2
+ export * from './tnt-base-auth.guard';
@@ -15,3 +15,4 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./roles.guard"), exports);
18
+ __exportStar(require("./tnt-base-auth.guard"), exports);
@@ -0,0 +1,15 @@
1
+ import { ExecutionContext } from '@nestjs/common';
2
+ import { Reflector } from '@nestjs/core';
3
+ import { Observable } from 'rxjs';
4
+ declare const TntBaseAuthGuard_base: import("@nestjs/passport").Type<import("@nestjs/passport").IAuthGuard>;
5
+ export declare class TntBaseAuthGuard extends TntBaseAuthGuard_base {
6
+ private readonly reflector;
7
+ private readonly logger;
8
+ constructor(reflector: Reflector);
9
+ canActivate(context: ExecutionContext): boolean | Promise<boolean> | Observable<boolean>;
10
+ handleRequest<TUser = unknown>(err: unknown, user: TUser, info: {
11
+ name?: string;
12
+ message?: string;
13
+ } | undefined, context: ExecutionContext, status?: unknown): TUser;
14
+ }
15
+ export {};
@@ -0,0 +1,56 @@
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 TntBaseAuthGuard_1;
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.TntBaseAuthGuard = void 0;
11
+ const common_1 = require("@nestjs/common");
12
+ const passport_1 = require("@nestjs/passport");
13
+ const decorators_1 = require("../decorators");
14
+ let TntBaseAuthGuard = TntBaseAuthGuard_1 = class TntBaseAuthGuard extends (0, passport_1.AuthGuard)('jwt') {
15
+ reflector;
16
+ logger = new common_1.Logger(TntBaseAuthGuard_1.name);
17
+ constructor(reflector) {
18
+ super();
19
+ this.reflector = reflector;
20
+ }
21
+ canActivate(context) {
22
+ const isPublic = this.reflector.getAllAndOverride(decorators_1.IS_PUBLIC_KEY, [
23
+ context.getHandler(),
24
+ context.getClass(),
25
+ ]);
26
+ if (isPublic) {
27
+ return true;
28
+ }
29
+ return super.canActivate(context);
30
+ }
31
+ handleRequest(err, user, info, context, status) {
32
+ void status;
33
+ if (err || !user) {
34
+ const request = context.switchToHttp().getRequest();
35
+ const message = err instanceof Error
36
+ ? err.message
37
+ : (info?.message ?? 'Authentication failed');
38
+ this.logger.error(`JWT validation error on ${request.method ?? 'UNKNOWN'} ${request.url ?? 'UNKNOWN'}: ${message}`);
39
+ if (info?.name === 'TokenExpiredError') {
40
+ throw new common_1.UnauthorizedException('Token has expired');
41
+ }
42
+ if (info?.name === 'JsonWebTokenError') {
43
+ throw new common_1.UnauthorizedException('Invalid token');
44
+ }
45
+ if (info?.name === 'NotBeforeError') {
46
+ throw new common_1.UnauthorizedException('Token not yet valid');
47
+ }
48
+ throw new common_1.UnauthorizedException('Authentication failed');
49
+ }
50
+ return user;
51
+ }
52
+ };
53
+ exports.TntBaseAuthGuard = TntBaseAuthGuard;
54
+ exports.TntBaseAuthGuard = TntBaseAuthGuard = TntBaseAuthGuard_1 = __decorate([
55
+ (0, common_1.Injectable)()
56
+ ], TntBaseAuthGuard);
@@ -14,7 +14,7 @@ class BullConfigFactory {
14
14
  password: this.configService.get('REDIS_PASSWORD'),
15
15
  },
16
16
  defaultJobOptions: {
17
- removeOnComplete: false, // Keep completed jobs for monitoring
17
+ removeOnComplete: false, // Keep completed jobs available for inspection
18
18
  removeOnFail: false, // Keep failed jobs for debugging
19
19
  attempts: 3, // Default retry attempts
20
20
  backoff: {
@@ -1,5 +1,9 @@
1
- import { DynamicModule } from '@nestjs/common';
1
+ import { DynamicModule, InjectionToken, ModuleMetadata } from '@nestjs/common';
2
2
  import { CacheOptions } from './cache.interface';
3
3
  export declare class CacheModule {
4
- static register(options?: CacheOptions): DynamicModule;
4
+ static registerAsync(options: {
5
+ imports?: ModuleMetadata['imports'];
6
+ inject?: InjectionToken[];
7
+ useFactory: (...args: any[]) => Promise<CacheOptions> | CacheOptions;
8
+ }): DynamicModule;
5
9
  }
@@ -12,11 +12,18 @@ const common_1 = require("@nestjs/common");
12
12
  const config_1 = require("@nestjs/config");
13
13
  const cache_service_1 = require("./cache.service");
14
14
  let CacheModule = CacheModule_1 = class CacheModule {
15
- static register(options = {}) {
15
+ static registerAsync(options) {
16
16
  return {
17
17
  module: CacheModule_1,
18
- imports: [config_1.ConfigModule],
19
- providers: [cache_service_1.CacheService, { provide: 'options', useValue: options }],
18
+ imports: [...(options.imports ?? []), config_1.ConfigModule],
19
+ providers: [
20
+ cache_service_1.CacheService,
21
+ {
22
+ provide: 'options',
23
+ inject: options.inject ?? [],
24
+ useFactory: options.useFactory,
25
+ },
26
+ ],
20
27
  exports: [cache_service_1.CacheService],
21
28
  };
22
29
  }
package/dist/index.d.ts CHANGED
@@ -7,6 +7,3 @@ export * from './rpc';
7
7
  export * from './logging';
8
8
  export * from './auth';
9
9
  export * from './notification';
10
- export * from './resilience';
11
- export * from './metrics';
12
- export * from './monitoring';
package/dist/index.js CHANGED
@@ -23,6 +23,3 @@ __exportStar(require("./rpc"), exports);
23
23
  __exportStar(require("./logging"), exports);
24
24
  __exportStar(require("./auth"), exports);
25
25
  __exportStar(require("./notification"), exports);
26
- __exportStar(require("./resilience"), exports);
27
- __exportStar(require("./metrics"), exports);
28
- __exportStar(require("./monitoring"), exports);