@takentrade/takentrade-libs 4.1.1 → 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.
- package/README.md +6 -57
- package/dist/auth/guards/index.d.ts +1 -0
- package/dist/auth/guards/index.js +1 -0
- package/dist/auth/guards/tnt-base-auth.guard.d.ts +15 -0
- package/dist/auth/guards/tnt-base-auth.guard.js +54 -0
- package/dist/bullmq/config/bull.config.js +1 -1
- package/dist/index.d.ts +0 -3
- package/dist/index.js +0 -3
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +15 -21
- package/dist/metrics/circuit-breaker-metrics.service.d.ts +0 -61
- package/dist/metrics/circuit-breaker-metrics.service.js +0 -149
- package/dist/metrics/index.d.ts +0 -5
- package/dist/metrics/index.js +0 -21
- package/dist/metrics/metrics-registry.d.ts +0 -50
- package/dist/metrics/metrics-registry.js +0 -156
- package/dist/metrics/metrics-updater.d.ts +0 -32
- package/dist/metrics/metrics-updater.js +0 -102
- package/dist/metrics/metrics.controller.d.ts +0 -11
- package/dist/metrics/metrics.controller.js +0 -32
- package/dist/metrics/metrics.interface.d.ts +0 -53
- package/dist/metrics/metrics.interface.js +0 -23
- package/dist/metrics/metrics.module.d.ts +0 -11
- package/dist/metrics/metrics.module.js +0 -39
- package/dist/metrics/metrics.service.d.ts +0 -50
- package/dist/metrics/metrics.service.js +0 -165
- package/dist/monitoring/alerting.service.d.ts +0 -82
- package/dist/monitoring/alerting.service.js +0 -290
- package/dist/monitoring/index.d.ts +0 -5
- package/dist/monitoring/index.js +0 -21
- package/dist/monitoring/monitoring.interface.d.ts +0 -102
- package/dist/monitoring/monitoring.interface.js +0 -10
- package/dist/monitoring/monitoring.module.d.ts +0 -8
- package/dist/monitoring/monitoring.module.js +0 -44
- package/dist/monitoring/sentry.service.d.ts +0 -65
- package/dist/monitoring/sentry.service.js +0 -218
- package/dist/monitoring/uptime.service.d.ts +0 -59
- package/dist/monitoring/uptime.service.js +0 -213
- package/dist/resilience/circuit-breaker-event-handler.d.ts +0 -16
- package/dist/resilience/circuit-breaker-event-handler.js +0 -70
- package/dist/resilience/circuit-breaker-factory.d.ts +0 -19
- package/dist/resilience/circuit-breaker-factory.js +0 -51
- package/dist/resilience/circuit-breaker-stats.service.d.ts +0 -37
- package/dist/resilience/circuit-breaker-stats.service.js +0 -69
- package/dist/resilience/circuit-breaker.interface.d.ts +0 -59
- package/dist/resilience/circuit-breaker.interface.js +0 -25
- package/dist/resilience/circuit-breaker.module.d.ts +0 -2
- package/dist/resilience/circuit-breaker.module.js +0 -21
- package/dist/resilience/circuit-breaker.service.d.ts +0 -119
- package/dist/resilience/circuit-breaker.service.js +0 -234
- package/dist/resilience/index.d.ts +0 -3
- 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,
|
|
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,16 @@ 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';
|
|
19
15
|
|
|
20
16
|
@Module({
|
|
21
|
-
imports: [
|
|
22
|
-
CacheModule.register(),
|
|
23
|
-
MetricsModule.register({ defaultMetrics: true }),
|
|
24
|
-
CircuitBreakerModule,
|
|
25
|
-
],
|
|
17
|
+
imports: [CacheModule.register()],
|
|
26
18
|
})
|
|
27
19
|
export class AppModule {}
|
|
28
20
|
```
|
|
29
21
|
|
|
22
|
+
For authentication, services can extend the shared `TntBaseAuthGuard` and pair it with their own JWT strategy implementation based on `TntJwtStrategy`.
|
|
23
|
+
|
|
30
24
|
## Modules
|
|
31
25
|
|
|
32
26
|
| Module | Description | Documentation |
|
|
@@ -37,9 +31,6 @@ export class AppModule {}
|
|
|
37
31
|
| **NATS** | Microservice messaging and event streaming | [docs/nats.md](docs/nats.md) |
|
|
38
32
|
| **Notifications** | Email, SMS, and push notifications | [docs/notifications.md](docs/notifications.md) |
|
|
39
33
|
| **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
34
|
| **Common** | Shared constants, enums, and utilities | [docs/common.md](docs/common.md) |
|
|
44
35
|
| **Utils** | DTOs, pipes, filters, and helpers | [docs/utils.md](docs/utils.md) |
|
|
45
36
|
|
|
@@ -48,6 +39,7 @@ export class AppModule {}
|
|
|
48
39
|
### 🔐 Authentication & Authorization
|
|
49
40
|
|
|
50
41
|
- `@Public()` and `@Roles()` decorators
|
|
42
|
+
- `TntBaseAuthGuard` for shared JWT guard behavior
|
|
51
43
|
- JWT-based authentication support
|
|
52
44
|
- Role-based access control
|
|
53
45
|
|
|
@@ -58,23 +50,6 @@ export class AppModule {}
|
|
|
58
50
|
- Hash operations
|
|
59
51
|
- Auto-reconnection
|
|
60
52
|
|
|
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
53
|
### 🚀 Background Jobs
|
|
79
54
|
|
|
80
55
|
- BullMQ integration
|
|
@@ -122,30 +97,6 @@ await this.cacheService.set('key', 'value', 3600); // 1 hour TTL
|
|
|
122
97
|
const value = await this.cacheService.get('key');
|
|
123
98
|
```
|
|
124
99
|
|
|
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
100
|
### Background Jobs
|
|
150
101
|
|
|
151
102
|
```typescript
|
|
@@ -167,8 +118,6 @@ await this.queue.add(
|
|
|
167
118
|
- [NATS](docs/nats.md) - Messaging
|
|
168
119
|
- [Notifications](docs/notifications.md) - Email, SMS, push
|
|
169
120
|
- [RPC](docs/rpc.md) - Request-response patterns
|
|
170
|
-
- [Resilience](docs/resilience.md) - Circuit breakers
|
|
171
|
-
- [Metrics](docs/metrics.md) - Prometheus metrics
|
|
172
121
|
- [Common](docs/common.md) - Shared utilities
|
|
173
122
|
- [Utils](docs/utils.md) - DTOs, pipes, filters
|
|
174
123
|
|
|
@@ -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,54 @@
|
|
|
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 ? err.message : (info?.message ?? 'Authentication failed');
|
|
36
|
+
this.logger.error(`JWT validation error on ${request.method ?? 'UNKNOWN'} ${request.url ?? 'UNKNOWN'}: ${message}`);
|
|
37
|
+
if (info?.name === 'TokenExpiredError') {
|
|
38
|
+
throw new common_1.UnauthorizedException('Token has expired');
|
|
39
|
+
}
|
|
40
|
+
if (info?.name === 'JsonWebTokenError') {
|
|
41
|
+
throw new common_1.UnauthorizedException('Invalid token');
|
|
42
|
+
}
|
|
43
|
+
if (info?.name === 'NotBeforeError') {
|
|
44
|
+
throw new common_1.UnauthorizedException('Token not yet valid');
|
|
45
|
+
}
|
|
46
|
+
throw new common_1.UnauthorizedException('Authentication failed');
|
|
47
|
+
}
|
|
48
|
+
return user;
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
exports.TntBaseAuthGuard = TntBaseAuthGuard;
|
|
52
|
+
exports.TntBaseAuthGuard = TntBaseAuthGuard = TntBaseAuthGuard_1 = __decorate([
|
|
53
|
+
(0, common_1.Injectable)()
|
|
54
|
+
], 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
|
|
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: {
|
package/dist/index.d.ts
CHANGED
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);
|