@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.
Files changed (193) hide show
  1. package/dist/constants/microservices.constants.d.ts +4 -0
  2. package/dist/constants/microservices.constants.js +4 -0
  3. package/dist/constants/microservices.constants.js.map +1 -1
  4. package/dist/contracts/card.contract.d.ts +98 -0
  5. package/dist/contracts/card.contract.js +3 -0
  6. package/dist/contracts/card.contract.js.map +1 -0
  7. package/dist/contracts/index.d.ts +3 -1
  8. package/dist/contracts/index.js +3 -0
  9. package/dist/contracts/index.js.map +1 -1
  10. package/dist/contracts/transaction.contract.d.ts +63 -0
  11. package/dist/contracts/transaction.contract.js +3 -0
  12. package/dist/contracts/transaction.contract.js.map +1 -0
  13. package/dist/dto/auth.dto.d.ts +3 -1
  14. package/dist/dto/auth.dto.js +11 -0
  15. package/dist/dto/auth.dto.js.map +1 -1
  16. package/dist/dto/index.d.ts +1 -0
  17. package/dist/dto/index.js +1 -0
  18. package/dist/dto/index.js.map +1 -1
  19. package/dist/dto/invoice.dto.d.ts +12 -0
  20. package/dist/dto/invoice.dto.js +62 -0
  21. package/dist/dto/invoice.dto.js.map +1 -0
  22. package/dist/enums/auth.enum.d.ts +2 -3
  23. package/dist/enums/auth.enum.js +2 -3
  24. package/dist/enums/auth.enum.js.map +1 -1
  25. package/dist/filters/global-exception.filter.d.ts +12 -0
  26. package/dist/filters/global-exception.filter.js +152 -0
  27. package/dist/filters/global-exception.filter.js.map +1 -0
  28. package/dist/filters/index.d.ts +1 -1
  29. package/dist/filters/index.js +1 -1
  30. package/dist/filters/index.js.map +1 -1
  31. package/dist/index.d.ts +14 -4
  32. package/dist/index.js +14 -4
  33. package/dist/index.js.map +1 -1
  34. package/dist/middleware/index.d.ts +2 -0
  35. package/dist/{interceptors → middleware}/index.js +2 -2
  36. package/dist/middleware/index.js.map +1 -0
  37. package/dist/middleware/prisma-logging.middleware.d.ts +3 -0
  38. package/dist/middleware/prisma-logging.middleware.js +52 -0
  39. package/dist/middleware/prisma-logging.middleware.js.map +1 -0
  40. package/dist/middleware/tracing.middleware.d.ts +8 -0
  41. package/dist/middleware/tracing.middleware.js +33 -0
  42. package/dist/middleware/tracing.middleware.js.map +1 -0
  43. package/dist/resilience/circuit-breaker.service.d.ts +2 -3
  44. package/dist/resilience/circuit-breaker.service.js +10 -16
  45. package/dist/resilience/circuit-breaker.service.js.map +1 -1
  46. package/dist/tsconfig.tsbuildinfo +1 -0
  47. package/dist/types/logger.interface.d.ts +6 -0
  48. package/dist/types/logger.interface.js +3 -0
  49. package/dist/types/logger.interface.js.map +1 -0
  50. package/dist/utils/app-logger.d.ts +11 -0
  51. package/dist/utils/app-logger.js +65 -0
  52. package/dist/utils/app-logger.js.map +1 -0
  53. package/dist/utils/app.utils.d.ts +4 -0
  54. package/dist/utils/app.utils.js +8 -1
  55. package/dist/utils/app.utils.js.map +1 -1
  56. package/dist/{filters/http-exception.filter.js → utils/filters.js} +3 -12
  57. package/dist/utils/filters.js.map +1 -0
  58. package/dist/utils/grpc-tracing-server.interceptor.d.ts +8 -0
  59. package/dist/utils/grpc-tracing-server.interceptor.js +48 -0
  60. package/dist/utils/grpc-tracing-server.interceptor.js.map +1 -0
  61. package/dist/utils/grpc-tracing.interceptor.d.ts +8 -0
  62. package/dist/utils/grpc-tracing.interceptor.js +35 -0
  63. package/dist/utils/grpc-tracing.interceptor.js.map +1 -0
  64. package/dist/utils/http-tracing.interceptor.d.ts +8 -0
  65. package/dist/utils/http-tracing.interceptor.js +35 -0
  66. package/dist/utils/http-tracing.interceptor.js.map +1 -0
  67. package/dist/{interceptors/transform.interceptor.d.ts → utils/interceptors.d.ts} +0 -1
  68. package/dist/{interceptors/transform.interceptor.js → utils/interceptors.js} +3 -3
  69. package/dist/utils/interceptors.js.map +1 -0
  70. package/dist/utils/proto-path.js +1 -1
  71. package/dist/utils/proto-path.js.map +1 -1
  72. package/dist/utils/tracing.module.d.ts +2 -0
  73. package/dist/{observability/metrics/metrics.module.js → utils/tracing.module.js} +10 -16
  74. package/dist/utils/tracing.module.js.map +1 -0
  75. package/dist/utils/tracing.service.d.ts +10 -0
  76. package/dist/utils/tracing.service.js +43 -0
  77. package/dist/utils/tracing.service.js.map +1 -0
  78. package/dist/utils/tracing.utils.js +7 -0
  79. package/dist/utils/tracing.utils.js.map +1 -0
  80. package/package.json +48 -46
  81. package/dist/config/base-config.service.d.ts +0 -25
  82. package/dist/config/base-config.service.js +0 -87
  83. package/dist/config/base-config.service.js.map +0 -1
  84. package/dist/constants/logging.constants.d.ts +0 -24
  85. package/dist/constants/logging.constants.js +0 -28
  86. package/dist/constants/logging.constants.js.map +0 -1
  87. package/dist/constants/monitoring.constants.d.ts +0 -51
  88. package/dist/constants/monitoring.constants.js +0 -55
  89. package/dist/constants/monitoring.constants.js.map +0 -1
  90. package/dist/constants/tokens.constants.d.ts +0 -6
  91. package/dist/constants/tokens.constants.js +0 -10
  92. package/dist/constants/tokens.constants.js.map +0 -1
  93. package/dist/filters/http-exception.filter.js.map +0 -1
  94. package/dist/interceptors/http-logging.interceptor.d.ts +0 -10
  95. package/dist/interceptors/http-logging.interceptor.js +0 -74
  96. package/dist/interceptors/http-logging.interceptor.js.map +0 -1
  97. package/dist/interceptors/index.d.ts +0 -2
  98. package/dist/interceptors/index.js.map +0 -1
  99. package/dist/interceptors/logging.interceptor.d.ts +0 -6
  100. package/dist/interceptors/logging.interceptor.js +0 -41
  101. package/dist/interceptors/logging.interceptor.js.map +0 -1
  102. package/dist/interceptors/transform.interceptor.js.map +0 -1
  103. package/dist/observability/index.d.ts +0 -2
  104. package/dist/observability/index.js +0 -19
  105. package/dist/observability/index.js.map +0 -1
  106. package/dist/observability/metrics/metrics.module.d.ts +0 -2
  107. package/dist/observability/metrics/metrics.module.js.map +0 -1
  108. package/dist/observability/tracing.js +0 -28
  109. package/dist/observability/tracing.js.map +0 -1
  110. package/dist/utils/logging-client.d.ts +0 -9
  111. package/dist/utils/logging-client.js +0 -58
  112. package/dist/utils/logging-client.js.map +0 -1
  113. package/dist/utils/prometheus.utils.d.ts +0 -9
  114. package/dist/utils/prometheus.utils.js +0 -66
  115. package/dist/utils/prometheus.utils.js.map +0 -1
  116. package/proto/auth.proto +0 -123
  117. package/proto/card.proto +0 -43
  118. package/proto/client.proto +0 -45
  119. package/proto/config.proto +0 -39
  120. package/proto/dbf.proto +0 -183
  121. package/proto/logging.proto +0 -143
  122. package/proto/partner.proto +0 -18
  123. package/proto/terminal.proto +0 -18
  124. package/proto/transaction.proto +0 -45
  125. package/proto/user.proto +0 -122
  126. package/src/constants/auth-config.constants.ts +0 -16
  127. package/src/constants/auth.constants.ts +0 -50
  128. package/src/constants/common.constants.ts +0 -16
  129. package/src/constants/env.constants.ts +0 -49
  130. package/src/constants/error-messages.ts +0 -10
  131. package/src/constants/grpc.constants.ts +0 -43
  132. package/src/constants/http.constants.ts +0 -11
  133. package/src/constants/index.ts +0 -11
  134. package/src/constants/logging-messages.constants.ts +0 -60
  135. package/src/constants/microservices.constants.ts +0 -62
  136. package/src/constants/queue.constants.ts +0 -8
  137. package/src/constants/routes.constants.ts +0 -21
  138. package/src/contracts/auth.contract.ts +0 -146
  139. package/src/contracts/config.contract.ts +0 -14
  140. package/src/contracts/index.ts +0 -14
  141. package/src/contracts/logging.contract.ts +0 -115
  142. package/src/contracts/token.contract.ts +0 -47
  143. package/src/decorators/index.ts +0 -3
  144. package/src/decorators/permissions.decorator.ts +0 -5
  145. package/src/decorators/roles.decorator.ts +0 -5
  146. package/src/decorators/scopes.decorator.ts +0 -4
  147. package/src/dto/account.dto.ts +0 -28
  148. package/src/dto/auth.dto.ts +0 -233
  149. package/src/dto/card.dto.ts +0 -64
  150. package/src/dto/client.dto.ts +0 -137
  151. package/src/dto/index.ts +0 -8
  152. package/src/dto/logging.dto.ts +0 -101
  153. package/src/dto/partner.dto.ts +0 -18
  154. package/src/dto/transaction.dto.ts +0 -52
  155. package/src/dto/user.dto.ts +0 -28
  156. package/src/enums/auth.enum.ts +0 -13
  157. package/src/enums/env.enum.ts +0 -7
  158. package/src/enums/error.enum.ts +0 -28
  159. package/src/enums/events.enum.ts +0 -22
  160. package/src/enums/health.enum.ts +0 -7
  161. package/src/enums/iam.enum.ts +0 -28
  162. package/src/enums/index.ts +0 -10
  163. package/src/enums/logging.enum.ts +0 -7
  164. package/src/enums/notification.enum.ts +0 -5
  165. package/src/enums/permission.enum.ts +0 -31
  166. package/src/enums/user.enum.ts +0 -27
  167. package/src/errors/app.error.ts +0 -33
  168. package/src/errors/error-map.ts +0 -105
  169. package/src/filters/http-exception.filter.ts +0 -49
  170. package/src/filters/index.ts +0 -2
  171. package/src/index.ts +0 -17
  172. package/src/interceptors/index.ts +0 -3
  173. package/src/interceptors/logging.interceptor.ts +0 -37
  174. package/src/interceptors/transform.interceptor.ts +0 -21
  175. package/src/observability/index.ts +0 -3
  176. package/src/observability/metrics/metrics.module.ts +0 -16
  177. package/src/observability/tracing.ts +0 -33
  178. package/src/resilience/circuit-breaker.service.ts +0 -46
  179. package/src/resilience/resilience.module.ts +0 -9
  180. package/src/types/auth.types.ts +0 -38
  181. package/src/types/common.types.ts +0 -18
  182. package/src/types/config.types.ts +0 -32
  183. package/src/types/iam.types.ts +0 -78
  184. package/src/types/index.ts +0 -6
  185. package/src/types/monitoring.types.ts +0 -77
  186. package/src/types/user.types.ts +0 -11
  187. package/src/utils/app.utils.ts +0 -52
  188. package/src/utils/health.utils.ts +0 -24
  189. package/src/utils/proto-path.ts +0 -21
  190. package/src/utils/user.utils.ts +0 -3
  191. package/tsconfig.json +0 -28
  192. /package/dist/{filters/http-exception.filter.d.ts → utils/filters.d.ts} +0 -0
  193. /package/dist/{observability/tracing.d.ts → utils/tracing.utils.d.ts} +0 -0
@@ -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
- }
@@ -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
- }
@@ -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
- }
@@ -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
- }
@@ -1,7 +0,0 @@
1
- export enum Environment {
2
- DEVELOPMENT = 'development',
3
- STAGING = 'staging',
4
- PRODUCTION = 'production',
5
- TEST = 'test',
6
- LOCAL = 'local',
7
- }
@@ -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
- }
@@ -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
- }
@@ -1,7 +0,0 @@
1
- export enum ServiceHealth {
2
- UP = 'UP',
3
- HEALTHY = 'UP',
4
- DOWN = 'DOWN',
5
- DEGRADED = 'DEGRADED',
6
- MAINTENANCE = 'MAINTENANCE',
7
- }
@@ -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
- }
@@ -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,7 +0,0 @@
1
- export enum LogLevel {
2
- DEBUG = 'DEBUG',
3
- INFO = 'INFO',
4
- WARN = 'WARN',
5
- ERROR = 'ERROR',
6
- FATAL = 'FATAL',
7
- }
@@ -1,5 +0,0 @@
1
- export enum NotificationType {
2
- EMAIL = 'EMAIL',
3
- SMS = 'SMS',
4
- PUSH = 'PUSH',
5
- }
@@ -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
- }
@@ -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
- }
@@ -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
- }
@@ -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
- }
@@ -1,2 +0,0 @@
1
-
2
- export * from './http-exception.filter';
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,3 +0,0 @@
1
-
2
- export * from './logging.interceptor';
3
- export * from './transform.interceptor';
@@ -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
- }
@@ -1,3 +0,0 @@
1
-
2
- export * from './metrics/metrics.module';
3
- export * from './tracing';