@alacard-project/shared 1.1.1 → 1.1.4
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/dist/constants/microservices.constants.d.ts +4 -0
- package/dist/constants/microservices.constants.js +4 -0
- package/dist/constants/microservices.constants.js.map +1 -1
- package/dist/contracts/card.contract.d.ts +98 -0
- package/dist/contracts/card.contract.js +3 -0
- package/dist/contracts/card.contract.js.map +1 -0
- package/dist/contracts/index.d.ts +3 -1
- package/dist/contracts/index.js +3 -0
- package/dist/contracts/index.js.map +1 -1
- package/dist/contracts/transaction.contract.d.ts +63 -0
- package/dist/contracts/transaction.contract.js +3 -0
- package/dist/contracts/transaction.contract.js.map +1 -0
- package/dist/dto/auth.dto.d.ts +3 -1
- package/dist/dto/auth.dto.js +11 -0
- package/dist/dto/auth.dto.js.map +1 -1
- package/dist/dto/index.d.ts +1 -0
- package/dist/dto/index.js +1 -0
- package/dist/dto/index.js.map +1 -1
- package/dist/dto/invoice.dto.d.ts +12 -0
- package/dist/dto/invoice.dto.js +62 -0
- package/dist/dto/invoice.dto.js.map +1 -0
- package/dist/enums/auth.enum.d.ts +2 -3
- package/dist/enums/auth.enum.js +2 -3
- package/dist/enums/auth.enum.js.map +1 -1
- package/dist/filters/global-exception.filter.d.ts +12 -0
- package/dist/filters/global-exception.filter.js +152 -0
- package/dist/filters/global-exception.filter.js.map +1 -0
- package/dist/filters/index.d.ts +1 -1
- package/dist/filters/index.js +1 -1
- package/dist/filters/index.js.map +1 -1
- package/dist/index.d.ts +14 -4
- package/dist/index.js +14 -4
- package/dist/index.js.map +1 -1
- package/dist/middleware/index.d.ts +2 -0
- package/dist/{interceptors → middleware}/index.js +2 -2
- package/dist/middleware/index.js.map +1 -0
- package/dist/middleware/prisma-logging.middleware.d.ts +3 -0
- package/dist/middleware/prisma-logging.middleware.js +52 -0
- package/dist/middleware/prisma-logging.middleware.js.map +1 -0
- package/dist/middleware/tracing.middleware.d.ts +8 -0
- package/dist/middleware/tracing.middleware.js +33 -0
- package/dist/middleware/tracing.middleware.js.map +1 -0
- package/dist/resilience/circuit-breaker.service.d.ts +2 -3
- package/dist/resilience/circuit-breaker.service.js +10 -16
- package/dist/resilience/circuit-breaker.service.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/dist/types/logger.interface.d.ts +6 -0
- package/dist/types/logger.interface.js +3 -0
- package/dist/types/logger.interface.js.map +1 -0
- package/dist/utils/app-logger.d.ts +11 -0
- package/dist/utils/app-logger.js +65 -0
- package/dist/utils/app-logger.js.map +1 -0
- package/dist/utils/app.utils.d.ts +4 -0
- package/dist/utils/app.utils.js +8 -1
- package/dist/utils/app.utils.js.map +1 -1
- package/dist/{filters/http-exception.filter.js → utils/filters.js} +3 -12
- package/dist/utils/filters.js.map +1 -0
- package/dist/utils/grpc-tracing-server.interceptor.d.ts +8 -0
- package/dist/utils/grpc-tracing-server.interceptor.js +48 -0
- package/dist/utils/grpc-tracing-server.interceptor.js.map +1 -0
- package/dist/utils/grpc-tracing.interceptor.d.ts +8 -0
- package/dist/utils/grpc-tracing.interceptor.js +35 -0
- package/dist/utils/grpc-tracing.interceptor.js.map +1 -0
- package/dist/utils/http-tracing.interceptor.d.ts +8 -0
- package/dist/utils/http-tracing.interceptor.js +35 -0
- package/dist/utils/http-tracing.interceptor.js.map +1 -0
- package/dist/{interceptors/transform.interceptor.d.ts → utils/interceptors.d.ts} +0 -1
- package/dist/{interceptors/transform.interceptor.js → utils/interceptors.js} +3 -3
- package/dist/utils/interceptors.js.map +1 -0
- package/dist/utils/proto-path.js +1 -1
- package/dist/utils/proto-path.js.map +1 -1
- package/dist/utils/tracing.module.d.ts +2 -0
- package/dist/{observability/metrics/metrics.module.js → utils/tracing.module.js} +10 -16
- package/dist/utils/tracing.module.js.map +1 -0
- package/dist/utils/tracing.service.d.ts +10 -0
- package/dist/utils/tracing.service.js +43 -0
- package/dist/utils/tracing.service.js.map +1 -0
- package/dist/utils/tracing.utils.js +7 -0
- package/dist/utils/tracing.utils.js.map +1 -0
- package/package.json +48 -46
- package/dist/config/base-config.service.d.ts +0 -25
- package/dist/config/base-config.service.js +0 -87
- package/dist/config/base-config.service.js.map +0 -1
- package/dist/constants/logging.constants.d.ts +0 -24
- package/dist/constants/logging.constants.js +0 -28
- package/dist/constants/logging.constants.js.map +0 -1
- package/dist/constants/monitoring.constants.d.ts +0 -51
- package/dist/constants/monitoring.constants.js +0 -55
- package/dist/constants/monitoring.constants.js.map +0 -1
- package/dist/constants/tokens.constants.d.ts +0 -6
- package/dist/constants/tokens.constants.js +0 -10
- package/dist/constants/tokens.constants.js.map +0 -1
- package/dist/filters/http-exception.filter.js.map +0 -1
- package/dist/interceptors/http-logging.interceptor.d.ts +0 -10
- package/dist/interceptors/http-logging.interceptor.js +0 -74
- package/dist/interceptors/http-logging.interceptor.js.map +0 -1
- package/dist/interceptors/index.d.ts +0 -2
- package/dist/interceptors/index.js.map +0 -1
- package/dist/interceptors/logging.interceptor.d.ts +0 -6
- package/dist/interceptors/logging.interceptor.js +0 -41
- package/dist/interceptors/logging.interceptor.js.map +0 -1
- package/dist/interceptors/transform.interceptor.js.map +0 -1
- package/dist/observability/index.d.ts +0 -2
- package/dist/observability/index.js +0 -19
- package/dist/observability/index.js.map +0 -1
- package/dist/observability/metrics/metrics.module.d.ts +0 -2
- package/dist/observability/metrics/metrics.module.js.map +0 -1
- package/dist/observability/tracing.js +0 -28
- package/dist/observability/tracing.js.map +0 -1
- package/dist/utils/logging-client.d.ts +0 -9
- package/dist/utils/logging-client.js +0 -58
- package/dist/utils/logging-client.js.map +0 -1
- package/dist/utils/prometheus.utils.d.ts +0 -9
- package/dist/utils/prometheus.utils.js +0 -66
- package/dist/utils/prometheus.utils.js.map +0 -1
- package/proto/auth.proto +0 -123
- package/proto/card.proto +0 -43
- package/proto/client.proto +0 -45
- package/proto/config.proto +0 -39
- package/proto/dbf.proto +0 -183
- package/proto/logging.proto +0 -143
- package/proto/partner.proto +0 -18
- package/proto/terminal.proto +0 -18
- package/proto/transaction.proto +0 -45
- package/proto/user.proto +0 -122
- package/src/constants/auth-config.constants.ts +0 -16
- package/src/constants/auth.constants.ts +0 -50
- package/src/constants/common.constants.ts +0 -16
- package/src/constants/env.constants.ts +0 -49
- package/src/constants/error-messages.ts +0 -10
- package/src/constants/grpc.constants.ts +0 -43
- package/src/constants/http.constants.ts +0 -11
- package/src/constants/index.ts +0 -11
- package/src/constants/logging-messages.constants.ts +0 -60
- package/src/constants/microservices.constants.ts +0 -62
- package/src/constants/queue.constants.ts +0 -8
- package/src/constants/routes.constants.ts +0 -21
- package/src/contracts/auth.contract.ts +0 -146
- package/src/contracts/config.contract.ts +0 -14
- package/src/contracts/index.ts +0 -14
- package/src/contracts/logging.contract.ts +0 -115
- package/src/contracts/token.contract.ts +0 -47
- package/src/decorators/index.ts +0 -3
- package/src/decorators/permissions.decorator.ts +0 -5
- package/src/decorators/roles.decorator.ts +0 -5
- package/src/decorators/scopes.decorator.ts +0 -4
- package/src/dto/account.dto.ts +0 -28
- package/src/dto/auth.dto.ts +0 -233
- package/src/dto/card.dto.ts +0 -64
- package/src/dto/client.dto.ts +0 -137
- package/src/dto/index.ts +0 -8
- package/src/dto/logging.dto.ts +0 -101
- package/src/dto/partner.dto.ts +0 -18
- package/src/dto/transaction.dto.ts +0 -52
- package/src/dto/user.dto.ts +0 -28
- package/src/enums/auth.enum.ts +0 -13
- package/src/enums/env.enum.ts +0 -7
- package/src/enums/error.enum.ts +0 -28
- package/src/enums/events.enum.ts +0 -22
- package/src/enums/health.enum.ts +0 -7
- package/src/enums/iam.enum.ts +0 -28
- package/src/enums/index.ts +0 -10
- package/src/enums/logging.enum.ts +0 -7
- package/src/enums/notification.enum.ts +0 -5
- package/src/enums/permission.enum.ts +0 -31
- package/src/enums/user.enum.ts +0 -27
- package/src/errors/app.error.ts +0 -33
- package/src/errors/error-map.ts +0 -105
- package/src/filters/http-exception.filter.ts +0 -49
- package/src/filters/index.ts +0 -2
- package/src/index.ts +0 -17
- package/src/interceptors/index.ts +0 -3
- package/src/interceptors/logging.interceptor.ts +0 -37
- package/src/interceptors/transform.interceptor.ts +0 -21
- package/src/observability/index.ts +0 -3
- package/src/observability/metrics/metrics.module.ts +0 -16
- package/src/observability/tracing.ts +0 -33
- package/src/resilience/circuit-breaker.service.ts +0 -46
- package/src/resilience/resilience.module.ts +0 -9
- package/src/types/auth.types.ts +0 -38
- package/src/types/common.types.ts +0 -18
- package/src/types/config.types.ts +0 -32
- package/src/types/iam.types.ts +0 -78
- package/src/types/index.ts +0 -6
- package/src/types/monitoring.types.ts +0 -77
- package/src/types/user.types.ts +0 -11
- package/src/utils/app.utils.ts +0 -52
- package/src/utils/health.utils.ts +0 -24
- package/src/utils/proto-path.ts +0 -21
- package/src/utils/user.utils.ts +0 -3
- package/tsconfig.json +0 -28
- /package/dist/{filters/http-exception.filter.d.ts → utils/filters.d.ts} +0 -0
- /package/dist/{observability/tracing.d.ts → utils/tracing.utils.d.ts} +0 -0
package/src/dto/logging.dto.ts
DELETED
|
@@ -1,101 +0,0 @@
|
|
|
1
|
-
import { IsOptional, IsString, IsEnum, IsDateString, IsInt, Min, Max } from 'class-validator';
|
|
2
|
-
import { Type } from 'class-transformer';
|
|
3
|
-
import { LogLevel } from '../enums';
|
|
4
|
-
|
|
5
|
-
export class LogFilterDto {
|
|
6
|
-
@IsOptional()
|
|
7
|
-
@IsDateString()
|
|
8
|
-
startDate?: string;
|
|
9
|
-
|
|
10
|
-
@IsOptional()
|
|
11
|
-
@IsDateString()
|
|
12
|
-
endDate?: string;
|
|
13
|
-
|
|
14
|
-
@IsOptional()
|
|
15
|
-
@IsString()
|
|
16
|
-
serviceName?: string;
|
|
17
|
-
|
|
18
|
-
@IsOptional()
|
|
19
|
-
@IsEnum(LogLevel)
|
|
20
|
-
level?: LogLevel;
|
|
21
|
-
|
|
22
|
-
@IsOptional()
|
|
23
|
-
@IsString()
|
|
24
|
-
userId?: string;
|
|
25
|
-
|
|
26
|
-
@IsOptional()
|
|
27
|
-
@IsString()
|
|
28
|
-
requestId?: string;
|
|
29
|
-
|
|
30
|
-
@IsOptional()
|
|
31
|
-
@Type(() => Number)
|
|
32
|
-
@IsInt()
|
|
33
|
-
@Min(1)
|
|
34
|
-
page?: number = 1;
|
|
35
|
-
|
|
36
|
-
@IsOptional()
|
|
37
|
-
@Type(() => Number)
|
|
38
|
-
@IsInt()
|
|
39
|
-
@Min(1)
|
|
40
|
-
@Max(100)
|
|
41
|
-
pageSize?: number = 20;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
export class LogCleanupDto {
|
|
45
|
-
@IsDateString()
|
|
46
|
-
startDate!: string;
|
|
47
|
-
|
|
48
|
-
@IsDateString()
|
|
49
|
-
endDate!: string;
|
|
50
|
-
|
|
51
|
-
@IsOptional()
|
|
52
|
-
@IsString()
|
|
53
|
-
serviceName?: string;
|
|
54
|
-
|
|
55
|
-
@IsOptional()
|
|
56
|
-
@IsEnum(LogLevel)
|
|
57
|
-
level?: LogLevel;
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
export class RetentionPeriodDto {
|
|
61
|
-
@Type(() => Number)
|
|
62
|
-
@IsInt()
|
|
63
|
-
@Min(1)
|
|
64
|
-
@Max(365)
|
|
65
|
-
retentionDays!: number;
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
export class UserActionFilterDto {
|
|
69
|
-
@IsOptional()
|
|
70
|
-
@IsDateString()
|
|
71
|
-
startDate?: string;
|
|
72
|
-
|
|
73
|
-
@IsOptional()
|
|
74
|
-
@IsDateString()
|
|
75
|
-
endDate?: string;
|
|
76
|
-
|
|
77
|
-
@IsOptional()
|
|
78
|
-
@IsString()
|
|
79
|
-
userId?: string;
|
|
80
|
-
|
|
81
|
-
@IsOptional()
|
|
82
|
-
@IsString()
|
|
83
|
-
action?: string;
|
|
84
|
-
|
|
85
|
-
@IsOptional()
|
|
86
|
-
@IsString()
|
|
87
|
-
resource?: string;
|
|
88
|
-
|
|
89
|
-
@IsOptional()
|
|
90
|
-
@Type(() => Number)
|
|
91
|
-
@IsInt()
|
|
92
|
-
@Min(1)
|
|
93
|
-
page?: number = 1;
|
|
94
|
-
|
|
95
|
-
@IsOptional()
|
|
96
|
-
@Type(() => Number)
|
|
97
|
-
@IsInt()
|
|
98
|
-
@Min(1)
|
|
99
|
-
@Max(100)
|
|
100
|
-
pageSize?: number = 20;
|
|
101
|
-
}
|
package/src/dto/partner.dto.ts
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { IsString, IsOptional, IsBoolean, ValidateNested, IsObject } from 'class-validator';
|
|
2
|
-
import { Type } from 'class-transformer';
|
|
3
|
-
import { RegisterDto } from './auth.dto';
|
|
4
|
-
|
|
5
|
-
export class PartnerDto {
|
|
6
|
-
@IsString()
|
|
7
|
-
name!: string;
|
|
8
|
-
|
|
9
|
-
@IsString()
|
|
10
|
-
type!: string;
|
|
11
|
-
|
|
12
|
-
@IsOptional()
|
|
13
|
-
@IsBoolean()
|
|
14
|
-
isActive?: boolean;
|
|
15
|
-
@IsObject()
|
|
16
|
-
@Type(() => RegisterDto)
|
|
17
|
-
adminUser?: RegisterDto;
|
|
18
|
-
}
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
import { IsString, IsOptional, IsNumber, Min, IsUUID } from 'class-validator';
|
|
2
|
-
import { Type } from 'class-transformer';
|
|
3
|
-
import type { JsonValue } from '../types/common.types';
|
|
4
|
-
|
|
5
|
-
export class CreateTransactionDto {
|
|
6
|
-
@IsOptional()
|
|
7
|
-
@IsString()
|
|
8
|
-
externalId?: string;
|
|
9
|
-
|
|
10
|
-
@IsString()
|
|
11
|
-
cardId!: string;
|
|
12
|
-
|
|
13
|
-
@IsNumber()
|
|
14
|
-
@Min(0)
|
|
15
|
-
amount!: number;
|
|
16
|
-
|
|
17
|
-
@IsOptional()
|
|
18
|
-
@IsString()
|
|
19
|
-
currency?: string;
|
|
20
|
-
|
|
21
|
-
@IsOptional()
|
|
22
|
-
@IsString()
|
|
23
|
-
description?: string;
|
|
24
|
-
|
|
25
|
-
@IsOptional()
|
|
26
|
-
@IsString()
|
|
27
|
-
type?: string;
|
|
28
|
-
|
|
29
|
-
@IsOptional()
|
|
30
|
-
@IsString()
|
|
31
|
-
status?: string;
|
|
32
|
-
|
|
33
|
-
@IsOptional()
|
|
34
|
-
@IsUUID()
|
|
35
|
-
id?: string;
|
|
36
|
-
|
|
37
|
-
@IsOptional()
|
|
38
|
-
@Type(() => Date)
|
|
39
|
-
transactionDate?: Date;
|
|
40
|
-
|
|
41
|
-
@IsOptional()
|
|
42
|
-
metadata?: any;
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
export class UpdateTransactionDto {
|
|
46
|
-
@IsOptional()
|
|
47
|
-
@IsString()
|
|
48
|
-
status?: string;
|
|
49
|
-
|
|
50
|
-
@IsOptional()
|
|
51
|
-
metadata?: JsonValue;
|
|
52
|
-
}
|
package/src/dto/user.dto.ts
DELETED
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import { IsEmail, IsEnum, IsOptional, IsString, IsUUID } from 'class-validator';
|
|
2
|
-
import { UserRole } from '../enums';
|
|
3
|
-
|
|
4
|
-
export class UserDto {
|
|
5
|
-
@IsUUID()
|
|
6
|
-
id!: string;
|
|
7
|
-
|
|
8
|
-
@IsEmail()
|
|
9
|
-
email!: string;
|
|
10
|
-
|
|
11
|
-
@IsString()
|
|
12
|
-
@IsOptional()
|
|
13
|
-
firstName?: string;
|
|
14
|
-
|
|
15
|
-
@IsString()
|
|
16
|
-
@IsOptional()
|
|
17
|
-
lastName?: string;
|
|
18
|
-
|
|
19
|
-
@IsEnum(UserRole)
|
|
20
|
-
role!: UserRole;
|
|
21
|
-
|
|
22
|
-
@IsString()
|
|
23
|
-
@IsOptional()
|
|
24
|
-
phoneNumber?: string;
|
|
25
|
-
|
|
26
|
-
createdAt!: Date;
|
|
27
|
-
updatedAt!: Date;
|
|
28
|
-
}
|
package/src/enums/auth.enum.ts
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
export enum CredentialStatus {
|
|
2
|
-
ACTIVE = 'ACTIVE',
|
|
3
|
-
INACTIVE = 'INACTIVE',
|
|
4
|
-
LOCKED = 'LOCKED',
|
|
5
|
-
SUSPENDED = 'SUSPENDED',
|
|
6
|
-
DELETED = 'DELETED',
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
export enum ServiceTokenType {
|
|
10
|
-
API = 'API',
|
|
11
|
-
INTERNAL = 'INTERNAL',
|
|
12
|
-
WEBHOOK = 'WEBHOOK',
|
|
13
|
-
}
|
package/src/enums/env.enum.ts
DELETED
package/src/enums/error.enum.ts
DELETED
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
export enum ErrorCode {
|
|
2
|
-
// Auth Errors
|
|
3
|
-
AUTH_USER_NOT_FOUND = 'AUTH_USER_NOT_FOUND',
|
|
4
|
-
AUTH_USER_ALREADY_EXISTS = 'AUTH_USER_ALREADY_EXISTS',
|
|
5
|
-
AUTH_USER_INACTIVE = 'AUTH_USER_INACTIVE',
|
|
6
|
-
AUTH_INVALID_PASSWORD = 'AUTH_INVALID_PASSWORD',
|
|
7
|
-
AUTH_INVALID_TOKEN = 'AUTH_INVALID_TOKEN',
|
|
8
|
-
AUTH_TOKEN_EXPIRED = 'AUTH_TOKEN_EXPIRED',
|
|
9
|
-
AUTH_ACCESS_DENIED = 'AUTH_ACCESS_DENIED',
|
|
10
|
-
AUTH_INSUFFICIENT_SCOPES = 'AUTH_INSUFFICIENT_SCOPES',
|
|
11
|
-
AUTH_INVALID_CREDENTIALS = 'AUTH_INVALID_CREDENTIALS',
|
|
12
|
-
|
|
13
|
-
// Config Errors
|
|
14
|
-
CONFIG_NOT_FOUND = 'CONFIG_NOT_FOUND',
|
|
15
|
-
CONFIG_LOAD_FAILED = 'CONFIG_LOAD_FAILED',
|
|
16
|
-
|
|
17
|
-
// Logging Errors
|
|
18
|
-
LOG_WRITE_FAILED = 'LOG_WRITE_FAILED',
|
|
19
|
-
LOG_READ_FAILED = 'LOG_READ_FAILED',
|
|
20
|
-
|
|
21
|
-
// General Errors
|
|
22
|
-
INTERNAL_SERVER_ERROR = 'INTERNAL_SERVER_ERROR',
|
|
23
|
-
BAD_REQUEST = 'BAD_REQUEST',
|
|
24
|
-
NOT_FOUND = 'NOT_FOUND',
|
|
25
|
-
VALIDATION_ERROR = 'VALIDATION_ERROR',
|
|
26
|
-
AUTH_USER_BLOCKED = 'AUTH_USER_BLOCKED',
|
|
27
|
-
INVALID_TOKEN = 'INVALID_TOKEN',
|
|
28
|
-
}
|
package/src/enums/events.enum.ts
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
export enum ServiceEventType {
|
|
2
|
-
AUTH_USER_REGISTERED = 'auth.user.registered',
|
|
3
|
-
AUTH_USER_LOGGED_IN = 'auth.user.logged_in',
|
|
4
|
-
AUTH_PASSWORD_RESET_REQUESTED = 'auth.password_reset_requested',
|
|
5
|
-
AUTH_PASSWORD_RESET_SUCCESS = 'auth.password_reset_success',
|
|
6
|
-
USER_PROFILE_UPDATED = 'user.profile_updated',
|
|
7
|
-
USER_DELETED = 'user.deleted',
|
|
8
|
-
AUTH_USER_BLOCKED = 'auth.user.blocked',
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
export interface AuthUserRegisteredEvent {
|
|
12
|
-
userId: string;
|
|
13
|
-
email: string;
|
|
14
|
-
role: string;
|
|
15
|
-
occurredAt: Date;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
export interface AuthUserBlockedEvent {
|
|
19
|
-
userId: string;
|
|
20
|
-
reason?: string;
|
|
21
|
-
blockedAt: Date;
|
|
22
|
-
}
|
package/src/enums/health.enum.ts
DELETED
package/src/enums/iam.enum.ts
DELETED
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Subject Type Enum
|
|
3
|
-
* Defines the type of subject in the system (immutable after creation)
|
|
4
|
-
*/
|
|
5
|
-
export enum SubjectType {
|
|
6
|
-
EMPLOYEE = 'EMPLOYEE',
|
|
7
|
-
CLIENT = 'CLIENT',
|
|
8
|
-
PARTNER = 'PARTNER',
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
/**
|
|
12
|
-
* Identifier Type Enum
|
|
13
|
-
* Defines the type of login identifier used for authentication
|
|
14
|
-
*/
|
|
15
|
-
export enum IdentifierType {
|
|
16
|
-
EMAIL = 'EMAIL',
|
|
17
|
-
USERNAME = 'USERNAME',
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
/**
|
|
21
|
-
* Identity Status Enum
|
|
22
|
-
* Defines the status of an identity in the IAM system
|
|
23
|
-
*/
|
|
24
|
-
export enum IdentityStatus {
|
|
25
|
-
ACTIVE = 'ACTIVE',
|
|
26
|
-
BLOCKED = 'BLOCKED',
|
|
27
|
-
DELETED = 'DELETED',
|
|
28
|
-
}
|
package/src/enums/index.ts
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
export * from './env.enum';
|
|
2
|
-
export * from './user.enum';
|
|
3
|
-
export * from './iam.enum';
|
|
4
|
-
export * from './health.enum';
|
|
5
|
-
export * from './logging.enum';
|
|
6
|
-
export * from './notification.enum';
|
|
7
|
-
export * from './error.enum';
|
|
8
|
-
export * from './auth.enum';
|
|
9
|
-
export * from './permission.enum';
|
|
10
|
-
export * from './events.enum';
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
export enum PermissionScope {
|
|
2
|
-
// User Management
|
|
3
|
-
USERS_VIEW = 'users:view',
|
|
4
|
-
USERS_MANAGE = 'users:manage',
|
|
5
|
-
|
|
6
|
-
// Auth Management
|
|
7
|
-
ROLES_MANAGE = 'roles:manage',
|
|
8
|
-
PERMISSIONS_MANAGE = 'permissions:manage',
|
|
9
|
-
|
|
10
|
-
// Client Management
|
|
11
|
-
CLIENTS_VIEW = 'clients:view',
|
|
12
|
-
CLIENTS_MANAGE = 'clients:manage',
|
|
13
|
-
|
|
14
|
-
// Partner Management
|
|
15
|
-
PARTNERS_VIEW = 'partners:view',
|
|
16
|
-
PARTNERS_MANAGE = 'partners:manage',
|
|
17
|
-
|
|
18
|
-
// Financial/Accounting
|
|
19
|
-
INVOICES_VIEW = 'invoices:view',
|
|
20
|
-
INVOICES_MANAGE = 'invoices:manage',
|
|
21
|
-
TRANSACTIONS_VIEW = 'transactions:view',
|
|
22
|
-
TRANSACTIONS_MANAGE = 'transactions:manage',
|
|
23
|
-
|
|
24
|
-
// System Config
|
|
25
|
-
CONFIG_VIEW = 'config:view',
|
|
26
|
-
CONFIG_MANAGE = 'config:manage',
|
|
27
|
-
|
|
28
|
-
// Logging/Monitoring
|
|
29
|
-
LOGS_VIEW = 'logs:view',
|
|
30
|
-
METRICS_VIEW = 'metrics:view',
|
|
31
|
-
}
|
package/src/enums/user.enum.ts
DELETED
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
export enum UserRole {
|
|
2
|
-
SUPER_ADMIN = 'SUPER_ADMIN',
|
|
3
|
-
ADMIN = 'ADMIN',
|
|
4
|
-
MANAGER = 'MANAGER',
|
|
5
|
-
ACCOUNTANT = 'ACCOUNTANT',
|
|
6
|
-
PARTNER = 'PARTNER',
|
|
7
|
-
CLIENT = 'CLIENT',
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
export enum UserStatus {
|
|
11
|
-
ACTIVE = 'ACTIVE',
|
|
12
|
-
INACTIVE = 'INACTIVE',
|
|
13
|
-
PENDING = 'PENDING',
|
|
14
|
-
SUSPENDED = 'SUSPENDED',
|
|
15
|
-
BLOCKED = 'BLOCKED',
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
export enum UserScope {
|
|
19
|
-
READ = 'READ',
|
|
20
|
-
WRITE = 'WRITE',
|
|
21
|
-
DELETE = 'DELETE',
|
|
22
|
-
ADMIN = 'ADMIN',
|
|
23
|
-
PROFILE_READ = 'PROFILE_READ',
|
|
24
|
-
CARDS_READ = 'CARDS_READ',
|
|
25
|
-
TRANSACTIONS_READ = 'TRANSACTIONS_READ',
|
|
26
|
-
LOGS_READ = 'LOGS_READ',
|
|
27
|
-
}
|
package/src/errors/app.error.ts
DELETED
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
import { ErrorCode } from '../enums/error.enum';
|
|
2
|
-
import { ERROR_MAP } from './error-map';
|
|
3
|
-
|
|
4
|
-
export class AppError extends Error {
|
|
5
|
-
public readonly code: ErrorCode;
|
|
6
|
-
public readonly statusCode: number;
|
|
7
|
-
public readonly description?: string;
|
|
8
|
-
public readonly metadata?: any;
|
|
9
|
-
|
|
10
|
-
constructor(code: ErrorCode, customMessage?: string, metadata?: any) {
|
|
11
|
-
const errorDetail = ERROR_MAP[code] || ERROR_MAP[ErrorCode.INTERNAL_SERVER_ERROR];
|
|
12
|
-
super(customMessage || errorDetail.message);
|
|
13
|
-
|
|
14
|
-
this.code = code;
|
|
15
|
-
this.statusCode = errorDetail.statusCode;
|
|
16
|
-
this.description = errorDetail.description;
|
|
17
|
-
this.metadata = metadata;
|
|
18
|
-
|
|
19
|
-
Object.setPrototypeOf(this, AppError.prototype);
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
toJSON() {
|
|
23
|
-
return {
|
|
24
|
-
success: false,
|
|
25
|
-
error: {
|
|
26
|
-
code: this.code,
|
|
27
|
-
message: this.message,
|
|
28
|
-
description: this.description,
|
|
29
|
-
metadata: this.metadata,
|
|
30
|
-
},
|
|
31
|
-
};
|
|
32
|
-
}
|
|
33
|
-
}
|
package/src/errors/error-map.ts
DELETED
|
@@ -1,105 +0,0 @@
|
|
|
1
|
-
import { ErrorCode } from '../enums/error.enum';
|
|
2
|
-
|
|
3
|
-
export interface ErrorDetail {
|
|
4
|
-
message: string;
|
|
5
|
-
statusCode: number;
|
|
6
|
-
description?: string;
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
export const ERROR_MAP: Record<ErrorCode, ErrorDetail> = {
|
|
10
|
-
[ErrorCode.AUTH_USER_NOT_FOUND]: {
|
|
11
|
-
message: 'User not found',
|
|
12
|
-
statusCode: 404,
|
|
13
|
-
description: 'The requested user could not be found in the system.',
|
|
14
|
-
},
|
|
15
|
-
[ErrorCode.AUTH_USER_ALREADY_EXISTS]: {
|
|
16
|
-
message: 'User already exists',
|
|
17
|
-
statusCode: 409,
|
|
18
|
-
description: 'A user with this email already exists.',
|
|
19
|
-
},
|
|
20
|
-
[ErrorCode.AUTH_USER_INACTIVE]: {
|
|
21
|
-
message: 'User is inactive',
|
|
22
|
-
statusCode: 403,
|
|
23
|
-
description: 'The user account is currently deactivated.',
|
|
24
|
-
},
|
|
25
|
-
[ErrorCode.AUTH_INVALID_PASSWORD]: {
|
|
26
|
-
message: 'Invalid password',
|
|
27
|
-
statusCode: 401,
|
|
28
|
-
description: 'The provided password does not match.',
|
|
29
|
-
},
|
|
30
|
-
[ErrorCode.AUTH_INVALID_TOKEN]: {
|
|
31
|
-
message: 'Invalid token',
|
|
32
|
-
statusCode: 401,
|
|
33
|
-
description: 'The provided authentication token is invalid or malformed.',
|
|
34
|
-
},
|
|
35
|
-
[ErrorCode.AUTH_TOKEN_EXPIRED]: {
|
|
36
|
-
message: 'Token expired',
|
|
37
|
-
statusCode: 401,
|
|
38
|
-
description: 'The authentication token has expired. Please log in again.',
|
|
39
|
-
},
|
|
40
|
-
[ErrorCode.AUTH_ACCESS_DENIED]: {
|
|
41
|
-
message: 'Access denied',
|
|
42
|
-
statusCode: 403,
|
|
43
|
-
description: 'You do not have permission to perform this action.',
|
|
44
|
-
},
|
|
45
|
-
[ErrorCode.AUTH_INSUFFICIENT_SCOPES]: {
|
|
46
|
-
message: 'Insufficient scopes',
|
|
47
|
-
statusCode: 403,
|
|
48
|
-
description: 'Your token does not have the required scopes for this resource.',
|
|
49
|
-
},
|
|
50
|
-
[ErrorCode.AUTH_INVALID_CREDENTIALS]: {
|
|
51
|
-
message: 'Invalid credentials',
|
|
52
|
-
statusCode: 401,
|
|
53
|
-
description: 'The email or password you entered is incorrect.',
|
|
54
|
-
},
|
|
55
|
-
[ErrorCode.CONFIG_NOT_FOUND]: {
|
|
56
|
-
message: 'Configuration not found',
|
|
57
|
-
statusCode: 404,
|
|
58
|
-
description: 'The requested configuration key was not found.',
|
|
59
|
-
},
|
|
60
|
-
[ErrorCode.CONFIG_LOAD_FAILED]: {
|
|
61
|
-
message: 'Configuration load failed',
|
|
62
|
-
statusCode: 500,
|
|
63
|
-
description: 'Failed to load configuration from the source.',
|
|
64
|
-
},
|
|
65
|
-
[ErrorCode.LOG_WRITE_FAILED]: {
|
|
66
|
-
message: 'Log write failed',
|
|
67
|
-
statusCode: 500,
|
|
68
|
-
description: 'Failed to write log to the destination.',
|
|
69
|
-
},
|
|
70
|
-
[ErrorCode.LOG_READ_FAILED]: {
|
|
71
|
-
message: 'Log read failed',
|
|
72
|
-
statusCode: 500,
|
|
73
|
-
description: 'Failed to read logs from the source.',
|
|
74
|
-
},
|
|
75
|
-
[ErrorCode.INTERNAL_SERVER_ERROR]: {
|
|
76
|
-
message: 'Internal server error',
|
|
77
|
-
statusCode: 500,
|
|
78
|
-
description: 'An unexpected error occurred on the server.',
|
|
79
|
-
},
|
|
80
|
-
[ErrorCode.BAD_REQUEST]: {
|
|
81
|
-
message: 'Bad request',
|
|
82
|
-
statusCode: 400,
|
|
83
|
-
description: 'The request is invalid or cannot be served.',
|
|
84
|
-
},
|
|
85
|
-
[ErrorCode.NOT_FOUND]: {
|
|
86
|
-
message: 'Resource not found',
|
|
87
|
-
statusCode: 404,
|
|
88
|
-
description: 'The requested resource could not be found.',
|
|
89
|
-
},
|
|
90
|
-
[ErrorCode.VALIDATION_ERROR]: {
|
|
91
|
-
message: 'Validation error',
|
|
92
|
-
statusCode: 422,
|
|
93
|
-
description: 'The provided data failed validation.',
|
|
94
|
-
},
|
|
95
|
-
[ErrorCode.AUTH_USER_BLOCKED]: {
|
|
96
|
-
message: 'User blocked',
|
|
97
|
-
statusCode: 403,
|
|
98
|
-
description: 'The user account has been blocked.',
|
|
99
|
-
},
|
|
100
|
-
[ErrorCode.INVALID_TOKEN]: {
|
|
101
|
-
message: 'Invalid token',
|
|
102
|
-
statusCode: 401,
|
|
103
|
-
description: 'The provided token is invalid.',
|
|
104
|
-
},
|
|
105
|
-
};
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
import { ExceptionFilter, Catch, ArgumentsHost, HttpException, HttpStatus, Logger } from '@nestjs/common';
|
|
3
|
-
import { Request, Response } from 'express';
|
|
4
|
-
|
|
5
|
-
@Catch()
|
|
6
|
-
export class HttpExceptionFilter implements ExceptionFilter {
|
|
7
|
-
private readonly logger = new Logger(HttpExceptionFilter.name);
|
|
8
|
-
|
|
9
|
-
catch(exception: unknown, host: ArgumentsHost) {
|
|
10
|
-
const ctx = host.switchToHttp();
|
|
11
|
-
const response = ctx.getResponse<Response>();
|
|
12
|
-
const request = ctx.getRequest<Request>();
|
|
13
|
-
|
|
14
|
-
const status =
|
|
15
|
-
exception instanceof HttpException
|
|
16
|
-
? exception.getStatus()
|
|
17
|
-
: HttpStatus.INTERNAL_SERVER_ERROR;
|
|
18
|
-
|
|
19
|
-
const message =
|
|
20
|
-
exception instanceof HttpException
|
|
21
|
-
? exception.getResponse()
|
|
22
|
-
: 'Internal server error';
|
|
23
|
-
|
|
24
|
-
// Determine the actual error message string
|
|
25
|
-
const errorMessage = typeof message === 'string'
|
|
26
|
-
? message
|
|
27
|
-
: (message as any).message || message;
|
|
28
|
-
|
|
29
|
-
// Log the error
|
|
30
|
-
if (status >= 500) {
|
|
31
|
-
this.logger.error(
|
|
32
|
-
`[${request.method}] ${request.url} - ${status} - ${JSON.stringify(errorMessage)}`,
|
|
33
|
-
exception instanceof Error ? exception.stack : '',
|
|
34
|
-
);
|
|
35
|
-
} else {
|
|
36
|
-
this.logger.warn(
|
|
37
|
-
`[${request.method}] ${request.url} - ${status} - ${JSON.stringify(errorMessage)}`,
|
|
38
|
-
);
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
response.status(status).json({
|
|
42
|
-
statusCode: status,
|
|
43
|
-
timestamp: new Date().toISOString(),
|
|
44
|
-
path: request.url,
|
|
45
|
-
method: request.method,
|
|
46
|
-
error: errorMessage,
|
|
47
|
-
});
|
|
48
|
-
}
|
|
49
|
-
}
|
package/src/filters/index.ts
DELETED
package/src/index.ts
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
export * from './enums';
|
|
2
|
-
export * from './constants';
|
|
3
|
-
export * from './types';
|
|
4
|
-
export * from './contracts';
|
|
5
|
-
export * from './dto';
|
|
6
|
-
export * from './errors/app.error';
|
|
7
|
-
export * from './errors/error-map';
|
|
8
|
-
export * from './decorators';
|
|
9
|
-
export * from './utils/proto-path';
|
|
10
|
-
export * from './utils/user.utils';
|
|
11
|
-
export * from './utils/app.utils';
|
|
12
|
-
export * from './utils/health.utils';
|
|
13
|
-
export * from './filters';
|
|
14
|
-
export * from './interceptors';
|
|
15
|
-
export * from './observability';
|
|
16
|
-
export * from './resilience/resilience.module';
|
|
17
|
-
export * from './resilience/circuit-breaker.service';
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
import { Injectable, NestInterceptor, ExecutionContext, CallHandler, Logger } from '@nestjs/common';
|
|
3
|
-
import { Observable } from 'rxjs';
|
|
4
|
-
import { tap } from 'rxjs/operators';
|
|
5
|
-
import { randomUUID } from 'crypto';
|
|
6
|
-
import { Request, Response } from 'express';
|
|
7
|
-
|
|
8
|
-
@Injectable()
|
|
9
|
-
export class LoggingInterceptor implements NestInterceptor {
|
|
10
|
-
private readonly logger = new Logger(LoggingInterceptor.name);
|
|
11
|
-
|
|
12
|
-
intercept(context: ExecutionContext, next: CallHandler): Observable<any> {
|
|
13
|
-
const httpContext = context.switchToHttp();
|
|
14
|
-
const request = httpContext.getRequest<Request>();
|
|
15
|
-
const response = httpContext.getResponse<Response>();
|
|
16
|
-
|
|
17
|
-
const userAgent = request.get('user-agent') || '';
|
|
18
|
-
const { ip, method, path: url } = request;
|
|
19
|
-
|
|
20
|
-
// Generate or retrieve Trace ID
|
|
21
|
-
const traceId = request.headers['x-request-id'] || randomUUID();
|
|
22
|
-
request.headers['x-request-id'] = traceId as string;
|
|
23
|
-
response.setHeader('x-request-id', traceId);
|
|
24
|
-
|
|
25
|
-
this.logger.log(`[${traceId}] Incoming Request: ${method} ${url} - ${userAgent} ${ip}`);
|
|
26
|
-
|
|
27
|
-
const now = Date.now();
|
|
28
|
-
return next
|
|
29
|
-
.handle()
|
|
30
|
-
.pipe(
|
|
31
|
-
tap(() => {
|
|
32
|
-
const duration = Date.now() - now;
|
|
33
|
-
this.logger.log(`[${traceId}] Response Sent: ${method} ${url} ${response.statusCode} - ${duration}ms`);
|
|
34
|
-
}),
|
|
35
|
-
);
|
|
36
|
-
}
|
|
37
|
-
}
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
import { Injectable, NestInterceptor, ExecutionContext, CallHandler } from '@nestjs/common';
|
|
3
|
-
import { Observable } from 'rxjs';
|
|
4
|
-
import { map } from 'rxjs/operators';
|
|
5
|
-
|
|
6
|
-
export interface Response<T> {
|
|
7
|
-
statusCode: number;
|
|
8
|
-
data: T;
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
@Injectable()
|
|
12
|
-
export class TransformInterceptor<T> implements NestInterceptor<T, Response<T>> {
|
|
13
|
-
intercept(context: ExecutionContext, next: CallHandler): Observable<Response<T>> {
|
|
14
|
-
return next.handle().pipe(
|
|
15
|
-
map(data => ({
|
|
16
|
-
statusCode: context.switchToHttp().getResponse().statusCode,
|
|
17
|
-
data,
|
|
18
|
-
})),
|
|
19
|
-
);
|
|
20
|
-
}
|
|
21
|
-
}
|