@boarteam/boar-pack-users-backend 8.0.0 → 8.1.1

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 (205) hide show
  1. package/dist/audit-logs/audit-logs.controller.js +2 -0
  2. package/dist/audit-logs/audit-logs.controller.js.map +1 -1
  3. package/dist/audit-logs/entities/audit-log.entity.js +4 -0
  4. package/dist/audit-logs/entities/audit-log.entity.js.map +1 -1
  5. package/dist/auth/auth-manage.controller.js +2 -0
  6. package/dist/auth/auth-manage.controller.js.map +1 -1
  7. package/dist/auth/auth.controller.js +4 -0
  8. package/dist/auth/auth.controller.js.map +1 -1
  9. package/dist/auth/google/google-auth.controller.js +3 -0
  10. package/dist/auth/google/google-auth.controller.js.map +1 -1
  11. package/dist/auth/local-auth/local-auth.controller.js +2 -0
  12. package/dist/auth/local-auth/local-auth.controller.js.map +1 -1
  13. package/dist/auth/local-auth/local-auth.dto.js +7 -0
  14. package/dist/auth/local-auth/local-auth.dto.js.map +1 -1
  15. package/dist/auth/microsoft/ms-auth.controller.js +3 -0
  16. package/dist/auth/microsoft/ms-auth.controller.js.map +1 -1
  17. package/dist/auth/yandex/yandex-auth.controller.js +3 -0
  18. package/dist/auth/yandex/yandex-auth.controller.js.map +1 -1
  19. package/dist/event-logs/dto/event-log-create.dto.js +4 -0
  20. package/dist/event-logs/dto/event-log-create.dto.js.map +1 -1
  21. package/dist/event-logs/dto/event-log-timeline-query.dto.js +4 -0
  22. package/dist/event-logs/dto/event-log-timeline-query.dto.js.map +1 -1
  23. package/dist/event-logs/dto/event-log-timeline.dto.js +4 -0
  24. package/dist/event-logs/dto/event-log-timeline.dto.js.map +1 -1
  25. package/dist/event-logs/dto/event-log-update.dto.js +4 -0
  26. package/dist/event-logs/dto/event-log-update.dto.js.map +1 -1
  27. package/dist/event-logs/entities/event-log.entity.js +4 -0
  28. package/dist/event-logs/entities/event-log.entity.js.map +1 -1
  29. package/dist/event-logs/event-logs.controller.js +3 -0
  30. package/dist/event-logs/event-logs.controller.js.map +1 -1
  31. package/dist/event-logs/event-logs.logger.d.ts +2 -2
  32. package/dist/event-logs/event-logs.logger.js +2 -2
  33. package/dist/event-logs/event-logs.logger.js.map +1 -1
  34. package/dist/revoked-tokens/entities/revoked-token.entity.js +4 -0
  35. package/dist/revoked-tokens/entities/revoked-token.entity.js.map +1 -1
  36. package/dist/settings/dto/event-settings.dto.js +4 -0
  37. package/dist/settings/dto/event-settings.dto.js.map +1 -1
  38. package/dist/settings/entities/setting.entity.js +4 -0
  39. package/dist/settings/entities/setting.entity.js.map +1 -1
  40. package/dist/settings/settings.controller.js +3 -0
  41. package/dist/settings/settings.controller.js.map +1 -1
  42. package/dist/telegraf/dto/telegram-settings-update.dto.js +4 -0
  43. package/dist/telegraf/dto/telegram-settings-update.dto.js.map +1 -1
  44. package/dist/telegraf/dto/telegram-settings.dto.js +4 -0
  45. package/dist/telegraf/dto/telegram-settings.dto.js.map +1 -1
  46. package/dist/telegraf/telegraf.controller.js +4 -0
  47. package/dist/telegraf/telegraf.controller.js.map +1 -1
  48. package/dist/tokens/dto/token-create.dto.js +4 -0
  49. package/dist/tokens/dto/token-create.dto.js.map +1 -1
  50. package/dist/tokens/dto/token-update.dto.js +4 -0
  51. package/dist/tokens/dto/token-update.dto.js.map +1 -1
  52. package/dist/tokens/dto/token-with-value.dto.js +4 -0
  53. package/dist/tokens/dto/token-with-value.dto.js.map +1 -1
  54. package/dist/tokens/entities/token.entity.js +4 -0
  55. package/dist/tokens/entities/token.entity.js.map +1 -1
  56. package/dist/tokens/my-tokens.controller.js +2 -0
  57. package/dist/tokens/my-tokens.controller.js.map +1 -1
  58. package/dist/tokens/tokens.controller.js +1 -0
  59. package/dist/tokens/tokens.controller.js.map +1 -1
  60. package/dist/tsconfig.build.tsbuildinfo +1 -1
  61. package/dist/users/dto/permission.dto.js +4 -0
  62. package/dist/users/dto/permission.dto.js.map +1 -1
  63. package/dist/users/dto/user-create.dto.js +4 -0
  64. package/dist/users/dto/user-create.dto.js.map +1 -1
  65. package/dist/users/dto/user-update.dto.js +4 -0
  66. package/dist/users/dto/user-update.dto.js.map +1 -1
  67. package/dist/users/entities/user.entity.js +4 -0
  68. package/dist/users/entities/user.entity.js.map +1 -1
  69. package/dist/users/me.controller.js +2 -0
  70. package/dist/users/me.controller.js.map +1 -1
  71. package/dist/users/users.controller.js +1 -0
  72. package/dist/users/users.controller.js.map +1 -1
  73. package/dist/ws-auth/ws-auth.guard.js +2 -2
  74. package/dist/ws-auth/ws-auth.guard.js.map +1 -1
  75. package/package.json +5 -5
  76. package/src/audit-logs/audit-log-base-service.ts +0 -169
  77. package/src/audit-logs/audit-logs.controller.ts +0 -74
  78. package/src/audit-logs/audit-logs.module.ts +0 -49
  79. package/src/audit-logs/audit-logs.permissions.ts +0 -4
  80. package/src/audit-logs/audit-logs.service.ts +0 -14
  81. package/src/audit-logs/audit-logs.types.ts +0 -9
  82. package/src/audit-logs/entities/audit-log.entity.ts +0 -46
  83. package/src/audit-logs/policies/view-audit-logs.policy.ts +0 -8
  84. package/src/auth/auth-manage.controller.ts +0 -35
  85. package/src/auth/auth-strategies.constants.ts +0 -7
  86. package/src/auth/auth.config.ts +0 -20
  87. package/src/auth/auth.constants.ts +0 -2
  88. package/src/auth/auth.controller.ts +0 -54
  89. package/src/auth/auth.exception-filter.ts +0 -15
  90. package/src/auth/auth.module.ts +0 -118
  91. package/src/auth/auth.service.ts +0 -122
  92. package/src/auth/google/google-auth.config.ts +0 -26
  93. package/src/auth/google/google-auth.controller.ts +0 -39
  94. package/src/auth/google/google-auth.guard.ts +0 -6
  95. package/src/auth/google/google-auth.strategy.ts +0 -59
  96. package/src/auth/index.ts +0 -15
  97. package/src/auth/local-auth/local-auth.controller.ts +0 -37
  98. package/src/auth/local-auth/local-auth.dto.ts +0 -17
  99. package/src/auth/local-auth/local-auth.guard.ts +0 -6
  100. package/src/auth/local-auth/local-auth.strategy.ts +0 -21
  101. package/src/auth/microsoft/ms-auth.config.ts +0 -29
  102. package/src/auth/microsoft/ms-auth.controller.ts +0 -40
  103. package/src/auth/microsoft/ms-auth.guard.ts +0 -8
  104. package/src/auth/microsoft/ms-auth.strategy.ts +0 -63
  105. package/src/auth/yandex/yandex-auth.config.ts +0 -26
  106. package/src/auth/yandex/yandex-auth.controller.ts +0 -39
  107. package/src/auth/yandex/yandex-auth.guard.ts +0 -6
  108. package/src/auth/yandex/yandex-auth.strategy.ts +0 -59
  109. package/src/bcrypt/bcrypt.config.ts +0 -27
  110. package/src/bcrypt/bcrypt.module.ts +0 -19
  111. package/src/bcrypt/bcrypt.service.ts +0 -24
  112. package/src/bcrypt/index.ts +0 -3
  113. package/src/casl/action.enum.ts +0 -7
  114. package/src/casl/casl-ability.factory.ts +0 -130
  115. package/src/casl/casl.module.ts +0 -31
  116. package/src/casl/fields-permission.interceptor.ts +0 -58
  117. package/src/casl/index.ts +0 -5
  118. package/src/casl/policies/manage-all.policy.ts +0 -9
  119. package/src/casl/policies.guard.ts +0 -80
  120. package/src/event-logs/dto/event-log-create.dto.ts +0 -47
  121. package/src/event-logs/dto/event-log-timeline-query.dto.ts +0 -13
  122. package/src/event-logs/dto/event-log-timeline.dto.ts +0 -9
  123. package/src/event-logs/dto/event-log-update.dto.ts +0 -47
  124. package/src/event-logs/entities/event-log.entity.ts +0 -140
  125. package/src/event-logs/event-logs.constants.ts +0 -2
  126. package/src/event-logs/event-logs.controller.ts +0 -80
  127. package/src/event-logs/event-logs.interceptor.ts +0 -75
  128. package/src/event-logs/event-logs.logger.ts +0 -48
  129. package/src/event-logs/event-logs.middleware.ts +0 -58
  130. package/src/event-logs/event-logs.module.ts +0 -131
  131. package/src/event-logs/event-logs.permissions.ts +0 -4
  132. package/src/event-logs/event-logs.service.ts +0 -236
  133. package/src/event-logs/event-logs.types.ts +0 -4
  134. package/src/event-logs/index.ts +0 -10
  135. package/src/event-logs/policies/manage-event-logs.policy.ts +0 -8
  136. package/src/event-logs/policies/view-event-logs.policy.ts +0 -8
  137. package/src/generateTypes.ts +0 -94
  138. package/src/index.ts +0 -10
  139. package/src/jwt-auth/index.ts +0 -5
  140. package/src/jwt-auth/jwt-auth.config.ts +0 -27
  141. package/src/jwt-auth/jwt-auth.guard.ts +0 -26
  142. package/src/jwt-auth/jwt-auth.module.ts +0 -64
  143. package/src/jwt-auth/jwt-auth.refresh.guard.ts +0 -7
  144. package/src/jwt-auth/jwt-auth.refresh.srtategy.ts +0 -85
  145. package/src/jwt-auth/jwt-auth.service.ts +0 -59
  146. package/src/jwt-auth/jwt-auth.srtategy.ts +0 -83
  147. package/src/revoked-tokens/entities/revoked-token.entity.ts +0 -50
  148. package/src/revoked-tokens/index.ts +0 -3
  149. package/src/revoked-tokens/revoked-tokens.module.ts +0 -29
  150. package/src/revoked-tokens/revoked-tokens.service.ts +0 -88
  151. package/src/settings/dto/event-settings.dto.ts +0 -3
  152. package/src/settings/entities/setting.entity.ts +0 -19
  153. package/src/settings/index.ts +0 -5
  154. package/src/settings/policies/manage-settings.policy.ts +0 -8
  155. package/src/settings/settings.constants.ts +0 -9
  156. package/src/settings/settings.controller.ts +0 -32
  157. package/src/settings/settings.module.ts +0 -46
  158. package/src/settings/settings.permissions.ts +0 -3
  159. package/src/settings/settings.service.ts +0 -51
  160. package/src/telegraf/dto/telegram-settings-update.dto.ts +0 -13
  161. package/src/telegraf/dto/telegram-settings.dto.ts +0 -5
  162. package/src/telegraf/index.ts +0 -3
  163. package/src/telegraf/telegraf.constants.ts +0 -5
  164. package/src/telegraf/telegraf.controller.ts +0 -40
  165. package/src/telegraf/telegraf.module.ts +0 -28
  166. package/src/telegraf/telegraf.service.ts +0 -110
  167. package/src/tokens/dto/token-create.dto.ts +0 -7
  168. package/src/tokens/dto/token-update.dto.ts +0 -7
  169. package/src/tokens/dto/token-with-value.dto.ts +0 -8
  170. package/src/tokens/entities/token.entity.ts +0 -26
  171. package/src/tokens/index.ts +0 -2
  172. package/src/tokens/my-tokens.controller.ts +0 -82
  173. package/src/tokens/policies/manage-my-tokens.policy.ts +0 -9
  174. package/src/tokens/policies/manage-tokens.policy.ts +0 -8
  175. package/src/tokens/policies/view-tokens.policy.ts +0 -8
  176. package/src/tokens/tokens-auth.guard.ts +0 -7
  177. package/src/tokens/tokens-auth.strategy.ts +0 -48
  178. package/src/tokens/tokens.constants.ts +0 -1
  179. package/src/tokens/tokens.controller.ts +0 -45
  180. package/src/tokens/tokens.module.ts +0 -86
  181. package/src/tokens/tokens.permissions.ts +0 -5
  182. package/src/tokens/tokens.service.ts +0 -14
  183. package/src/users/dto/permission.dto.ts +0 -5
  184. package/src/users/dto/user-create.dto.ts +0 -37
  185. package/src/users/dto/user-update.dto.ts +0 -37
  186. package/src/users/entities/permissions.ts +0 -23
  187. package/src/users/entities/user.entity.ts +0 -67
  188. package/src/users/hash-password.interceptor.ts +0 -22
  189. package/src/users/index.ts +0 -13
  190. package/src/users/me.controller.ts +0 -63
  191. package/src/users/policies/manage-users.policy.ts +0 -10
  192. package/src/users/policies/view-users.policy.ts +0 -10
  193. package/src/users/users-editing.guard.ts +0 -85
  194. package/src/users/users.config.ts +0 -27
  195. package/src/users/users.constants.ts +0 -1
  196. package/src/users/users.controller.ts +0 -85
  197. package/src/users/users.module.ts +0 -81
  198. package/src/users/users.service.ts +0 -23
  199. package/src/ws-auth/index.ts +0 -3
  200. package/src/ws-auth/ws-auth.constants.ts +0 -2
  201. package/src/ws-auth/ws-auth.d2 +0 -14
  202. package/src/ws-auth/ws-auth.gateway.ts +0 -25
  203. package/src/ws-auth/ws-auth.guard.ts +0 -28
  204. package/src/ws-auth/ws-auth.module.ts +0 -36
  205. package/src/ws-auth/ws-auth.service.ts +0 -108
@@ -1,47 +0,0 @@
1
- import Joi from "joi";
2
- import { JoiSchema } from 'nestjs-joi';
3
- import { LogType, UserRole, LogLevel } from '../entities/event-log.entity';
4
-
5
- export class EventLogUpdateDto {
6
- @JoiSchema(Joi.string().valid(...Object.values(LogType)).optional())
7
- logType?: LogType;
8
-
9
- @JoiSchema(Joi.string().valid(...Object.values(LogLevel)).optional())
10
- logLevel?: LogLevel;
11
-
12
- @JoiSchema(Joi.string().optional())
13
- action?: string;
14
-
15
- @JoiSchema(Joi.string().optional())
16
- method?: string;
17
-
18
- @JoiSchema(Joi.string().uuid().allow(null).optional())
19
- userId?: string;
20
-
21
- @JoiSchema(Joi.string().valid(...Object.values(UserRole)).optional())
22
- userRole?: string;
23
-
24
- @JoiSchema(Joi.string().optional())
25
- entity?: string;
26
-
27
- @JoiSchema(Joi.string().uuid().allow(null).optional())
28
- entityId?: string;
29
-
30
- @JoiSchema(Joi.object().allow(null).optional())
31
- payload?: Record<string, any>;
32
-
33
- @JoiSchema(Joi.string().allow(null).optional())
34
- url?: string;
35
-
36
- @JoiSchema(Joi.string().allow(null).optional())
37
- ipAddress?: string;
38
-
39
- @JoiSchema(Joi.string().allow(null).optional())
40
- userAgent?: string;
41
-
42
- @JoiSchema(Joi.number().integer().allow(null).optional())
43
- duration?: number;
44
-
45
- @JoiSchema(Joi.number().integer().allow(null).optional())
46
- statusCode?: number;
47
- }
@@ -1,140 +0,0 @@
1
- import { Column, CreateDateColumn, Entity, Index, ManyToOne, PrimaryGeneratedColumn, UpdateDateColumn, } from 'typeorm';
2
- import { User } from "../../users";
3
-
4
- export enum LogType {
5
- AUDIT = 'Audit',
6
- OPERATIONAL = 'Operational',
7
- APPLICATION = 'Application',
8
- }
9
-
10
- export enum UserRole {
11
- ADMIN = 'Admin',
12
- USER = 'User',
13
- GUEST = 'Guest',
14
- SYSTEM = 'System',
15
- }
16
-
17
- export enum LogLevel {
18
- INFO = 'Info',
19
- WARNING = 'Warning',
20
- ERROR = 'Error',
21
- }
22
-
23
- @Entity('event_logs')
24
- export class EventLog {
25
- @PrimaryGeneratedColumn('uuid')
26
- id: string;
27
-
28
- @Column({
29
- type: 'enum',
30
- enum: LogType,
31
- })
32
- logType: LogType;
33
-
34
- @Column({
35
- type: 'enum',
36
- enum: LogLevel,
37
- })
38
- logLevel: LogLevel;
39
-
40
- @Column()
41
- action: string;
42
-
43
- @Column({
44
- type: 'varchar',
45
- nullable: true,
46
- })
47
- method: string | null;
48
-
49
- @Column({
50
- type: 'uuid',
51
- nullable: true,
52
- })
53
- userId: string | null;
54
-
55
- @ManyToOne(() => User)
56
- user: User | null;
57
-
58
- @Column({
59
- type: 'enum',
60
- enum: UserRole,
61
- })
62
- userRole: UserRole;
63
-
64
- @Column({
65
- type: 'varchar',
66
- nullable: true,
67
- })
68
- userName: string | null;
69
-
70
- @Column({
71
- type: 'varchar',
72
- nullable: true,
73
- })
74
- externalUserId: string | null;
75
-
76
- @Column()
77
- entity: string;
78
-
79
- @Column({
80
- type: 'varchar',
81
- nullable: true,
82
- })
83
- entityId: string | null;
84
-
85
- @Column('jsonb', { nullable: true })
86
- payload: Record<string, any> | null;
87
-
88
- @Column({
89
- type: 'varchar',
90
- nullable: true,
91
- })
92
- url: string | null;
93
-
94
- @Column({
95
- type: 'varchar',
96
- nullable: true,
97
- })
98
- ipAddress: string | null;
99
-
100
- @Column({
101
- type: 'varchar',
102
- nullable: true
103
- })
104
- userAgent: string | null;
105
-
106
- @Column('int', {
107
- nullable: true,
108
- })
109
- duration: number | null;
110
-
111
- @Column('int', {
112
- nullable: true,
113
- })
114
- statusCode: number | null;
115
-
116
- @Index('event_logs_service_index')
117
- @Column({
118
- default: 'main'
119
- })
120
- service: string;
121
-
122
- @Column({
123
- type: 'varchar',
124
- nullable: true,
125
- default: null,
126
- })
127
- serviceId: string | null;
128
-
129
- @CreateDateColumn({
130
- type: 'timestamp with time zone',
131
- name: 'created_at'
132
- })
133
- createdAt: Date;
134
-
135
- @UpdateDateColumn({
136
- type: 'timestamp with time zone',
137
- name: 'updated_at'
138
- })
139
- updatedAt: Date;
140
- }
@@ -1,2 +0,0 @@
1
- export const SERVICE_CONFIG_TOKEN = 'SERVICE_CONFIG_TOKEN';
2
- export const CONFIGURE_EVENTS_MIDDLEWARE = 'CONFIGURE_EVENTS_MIDDLEWARE';
@@ -1,80 +0,0 @@
1
- import { Controller, Get, Query } from '@nestjs/common';
2
- import { ApiExtraModels, ApiOkResponse, ApiTags, getSchemaPath } from '@nestjs/swagger';
3
- import { Crud, CrudController } from '@dataui/crud';
4
- import { EventLogsService } from './event-logs.service';
5
- import { EventLog } from './entities/event-log.entity';
6
- import { EventLogCreateDto } from './dto/event-log-create.dto';
7
- import { EventLogUpdateDto } from "./dto/event-log-update.dto";
8
- import { ManageEventLogsPolicy } from "./policies/manage-event-logs.policy";
9
- import { ViewEventLogsPolicy } from "./policies/view-event-logs.policy";
10
- import { CheckPolicies } from "../casl";
11
- import { EventLogTimelineDto } from "./dto/event-log-timeline.dto";
12
- import { EventLogTimelineQueryDto } from "./dto/event-log-timeline-query.dto";
13
-
14
- @Crud({
15
- model: {
16
- type: EventLog,
17
- },
18
- params: {
19
- id: {
20
- field: 'id',
21
- type: 'uuid',
22
- primary: true,
23
- },
24
- },
25
- query: {
26
- alwaysPaginate: true,
27
- join: {
28
- user: {
29
- allow: ['id', 'name'],
30
- },
31
- },
32
- },
33
- routes: {
34
- only: ['getManyBase', 'createOneBase', 'updateOneBase', 'deleteOneBase'],
35
- getManyBase: {
36
- decorators: [
37
- CheckPolicies(new ViewEventLogsPolicy()),
38
- ],
39
- },
40
- },
41
- dto: {
42
- create: EventLogCreateDto,
43
- update: EventLogUpdateDto,
44
- },
45
- })
46
- @CheckPolicies(new ManageEventLogsPolicy())
47
- @ApiTags('EventLogs')
48
- @ApiExtraModels(EventLogTimelineDto, EventLogTimelineQueryDto)
49
- @Controller('event-logs')
50
- export class EventLogsController implements CrudController<EventLog>{
51
- constructor(
52
- readonly service: EventLogsService,
53
- ) {}
54
-
55
- @CheckPolicies(new ViewEventLogsPolicy())
56
- @Get('timeline')
57
- @ApiOkResponse({
58
- type: EventLogTimelineDto,
59
- isArray: true,
60
- })
61
- async getTimeline(
62
- @Query() query: EventLogTimelineQueryDto,
63
- ): Promise<EventLogTimelineDto[]> {
64
- const start = query.startTime ? new Date(query.startTime) : undefined;
65
- const end = query.endTime ? new Date(query.endTime) : undefined;
66
- return this.service.getTimeline(start, end, query.timezone);
67
- }
68
-
69
- @CheckPolicies(new ViewEventLogsPolicy())
70
- @Get('service-names')
71
- @ApiOkResponse({
72
- schema: {
73
- type: 'array',
74
- items: { type: 'string' },
75
- },
76
- })
77
- async getServiceNames(): Promise<string[]> {
78
- return this.service.getServiceNames();
79
- }
80
- }
@@ -1,75 +0,0 @@
1
- import {
2
- CallHandler,
3
- ExecutionContext,
4
- Inject,
5
- Injectable,
6
- Logger,
7
- NestInterceptor,
8
- SetMetadata
9
- } from '@nestjs/common';
10
- import { Observable, throwError } from 'rxjs';
11
- import { catchError, tap } from 'rxjs/operators';
12
- import { EventLog, LogLevel } from './entities/event-log.entity';
13
- import { EventLogsService } from "./event-logs.service";
14
- import { Request, Response } from 'express';
15
- import { HttpException } from "@nestjs/common/exceptions/http.exception";
16
- import { SERVICE_CONFIG_TOKEN } from "./event-logs.constants";
17
- import type { TEventLogServiceConfig } from "./event-logs.types";
18
- import { Reflector } from "@nestjs/core";
19
-
20
- export type TSkipEventsLogOptions = true | {
21
- body?: string[];
22
- }
23
-
24
- export const SKIP_EVENTS_LOG = 'SKIP_EVENTS_LOG';
25
- export const SkipEventsLog = (skipOptions: TSkipEventsLogOptions = true) => SetMetadata(SKIP_EVENTS_LOG, skipOptions);
26
-
27
- @Injectable()
28
- export class EventLogInterceptor implements NestInterceptor {
29
- private readonly logger = new Logger(EventLogInterceptor.name);
30
-
31
- constructor(
32
- private readonly reflector: Reflector,
33
- private readonly eventLogService: EventLogsService,
34
- @Inject(SERVICE_CONFIG_TOKEN) private readonly serviceConfig?: TEventLogServiceConfig,
35
- ) {}
36
-
37
- intercept(context: ExecutionContext, next: CallHandler): Observable<any> {
38
- const request = context.switchToHttp().getRequest() as Request;
39
- const response = context.switchToHttp().getResponse() as Response;
40
- const handler = context.getHandler();
41
- const controller = context.getClass();
42
-
43
- const skipOptions = this.reflector.getAllAndOverride<TSkipEventsLogOptions | undefined>(SKIP_EVENTS_LOG, [handler, controller]);
44
- if (skipOptions === true) {
45
- return next.handle();
46
- }
47
-
48
- const logEntry = new EventLog();
49
- logEntry.action = handler.name;
50
- logEntry.entity = controller.name;
51
-
52
- if (this.serviceConfig) {
53
- logEntry.service = this.serviceConfig.name;
54
- logEntry.serviceId = this.serviceConfig.id || null;
55
- }
56
-
57
- const now = Date.now();
58
-
59
- return next.handle().pipe(
60
- tap(() => {
61
- logEntry.duration = Date.now() - now;
62
- logEntry.statusCode = response.statusCode;
63
- logEntry.logLevel = response.statusCode >= 500 ? LogLevel.ERROR : (response.statusCode >= 400 ? LogLevel.WARNING : LogLevel.INFO);
64
- this.eventLogService.audit(logEntry, request, skipOptions);
65
- }),
66
- catchError((error: HttpException) => {
67
- logEntry.duration = Date.now() - now;
68
- logEntry.statusCode = error?.getStatus?.() || 500;
69
- logEntry.logLevel = logEntry.statusCode >= 500 ? LogLevel.ERROR : LogLevel.WARNING;
70
- this.eventLogService.audit(logEntry, request, skipOptions);
71
- return throwError(() => error);
72
- }),
73
- );
74
- }
75
- }
@@ -1,48 +0,0 @@
1
- import { NamedLogger } from "@boarteam/boar-pack-common-backend/src/tools";
2
- import { EventLogsService } from "./event-logs.service";
3
- import { Inject } from "@nestjs/common";
4
- import { SERVICE_CONFIG_TOKEN } from "./event-logs.constants";
5
- import type { TEventLogServiceConfig } from "./event-logs.types";
6
- import { LogLevel } from "./entities/event-log.entity";
7
-
8
- export class EventLogsLogger extends NamedLogger {
9
- constructor(
10
- private readonly eventLogsService: EventLogsService,
11
- @Inject(SERVICE_CONFIG_TOKEN) private readonly serviceConfig: TEventLogServiceConfig,
12
- ) {
13
- const { id, name } = serviceConfig || {};
14
- const prefix = id ? `${name} (${id})` : name;
15
- super(prefix);
16
- }
17
-
18
- warn(message: any, ...optionalParams: any[]) {
19
- super.warn(message, ...optionalParams);
20
- this.eventLogsService.applicationLog({
21
- action: 'log',
22
- entity: 'EventLogsLogger',
23
- service: this.serviceConfig.name,
24
- serviceId: this.serviceConfig.id,
25
- logLevel: LogLevel.WARNING,
26
- payload: {
27
- message: String(message),
28
- ...optionalParams?.length && { optionalParams },
29
- },
30
- });
31
- }
32
-
33
- error(message: any, stack: any, ...optionalParams: any[]) {
34
- super.error(message, stack, ...optionalParams);
35
- this.eventLogsService.applicationLog({
36
- action: 'log',
37
- entity: 'EventLogsLogger',
38
- service: this.serviceConfig.name,
39
- serviceId: this.serviceConfig.id,
40
- logLevel: LogLevel.ERROR,
41
- payload: {
42
- message: String(message),
43
- ...stack && { stack },
44
- ...optionalParams?.length && { optionalParams },
45
- },
46
- });
47
- }
48
- }
@@ -1,58 +0,0 @@
1
- import { Injectable, NestMiddleware, Inject, Logger, HttpException } from '@nestjs/common';
2
- import { Request, Response, NextFunction } from 'express';
3
- import { EventLogsService } from './event-logs.service';
4
- import { EventLog, LogLevel } from './entities/event-log.entity';
5
- import { SERVICE_CONFIG_TOKEN } from './event-logs.constants';
6
- import type { TEventLogServiceConfig } from './event-logs.types';
7
-
8
- @Injectable()
9
- export class EventLogMiddleware implements NestMiddleware {
10
- private readonly logger = new Logger(EventLogMiddleware.name);
11
-
12
- constructor(
13
- private readonly eventLogService: EventLogsService,
14
- @Inject(SERVICE_CONFIG_TOKEN) private readonly serviceConfig?: TEventLogServiceConfig,
15
- ) {
16
- }
17
-
18
- use(req: Request, res: Response, next: NextFunction) {
19
- const start = Date.now();
20
-
21
- res.on('finish', () => {
22
- if (this.eventLogService.requestAlreadyHandled(req)) {
23
- return;
24
- }
25
-
26
- if (res.statusCode >= 200 && res.statusCode < 300) {
27
- return;
28
- }
29
-
30
- const logEntry = new EventLog();
31
- logEntry.action = req.method;
32
- logEntry.entity = req.url.split('?')[0]
33
- .split('/')
34
- .filter((part) => part)
35
- .map((part) => part[0].toUpperCase() + part.slice(1))
36
- .join(' ');
37
-
38
- if (this.serviceConfig) {
39
- logEntry.service = this.serviceConfig.name;
40
- logEntry.serviceId = this.serviceConfig.id || null;
41
- }
42
-
43
-
44
- logEntry.duration = Date.now() - start;
45
- logEntry.statusCode = res.statusCode;
46
- logEntry.logLevel =
47
- res.statusCode >= 500
48
- ? LogLevel.ERROR
49
- : res.statusCode >= 400
50
- ? LogLevel.WARNING
51
- : LogLevel.INFO;
52
-
53
- this.eventLogService.audit(logEntry, req);
54
- });
55
-
56
- next();
57
- }
58
- }
@@ -1,131 +0,0 @@
1
- import { Inject, MiddlewareConsumer, Module, NestModule, Optional } from '@nestjs/common';
2
- import { getDataSourceToken, TypeOrmModule } from '@nestjs/typeorm';
3
- import { EventLogsService } from './event-logs.service';
4
- import { EventLogsController } from './event-logs.controller';
5
- import { EventLog } from './entities/event-log.entity';
6
- import { EventLogsPermissions } from "./event-logs.permissions";
7
- import { Action, CaslAbilityFactory, CaslModule } from "../casl";
8
- import { DataSource } from "typeorm";
9
- import { APP_INTERCEPTOR } from "@nestjs/core";
10
- import { EventLogInterceptor } from "./event-logs.interceptor";
11
- import { CONFIGURE_EVENTS_MIDDLEWARE, SERVICE_CONFIG_TOKEN } from "./event-logs.constants";
12
- import { TEventLogServiceConfig } from "./event-logs.types";
13
- import { EventLogsLogger } from "./event-logs.logger";
14
- import { EventLogMiddleware } from "./event-logs.middleware";
15
- import { ScheduleModule } from "@boarteam/boar-pack-common-backend";
16
-
17
- @Module({})
18
- export class EventLogsModule implements NestModule {
19
- static forRoot(config: { dataSourceName: string }) {
20
- return {
21
- module: EventLogsModule,
22
- imports: [
23
- CaslModule.forFeature(),
24
- TypeOrmModule.forFeature([EventLog], config.dataSourceName),
25
- ],
26
- providers: [
27
- {
28
- provide: EventLogsService,
29
- inject: [getDataSourceToken(config.dataSourceName)],
30
- useFactory: (dataSource: DataSource) => {
31
- return new EventLogsService(dataSource.getRepository(EventLog), dataSource);
32
- }
33
- },
34
- ],
35
- exports: [
36
- EventLogsService,
37
- ],
38
- controllers: [
39
- EventLogsController,
40
- ]
41
- }
42
- }
43
-
44
- static forInterceptor(config: {
45
- dataSourceName: string,
46
- service?: TEventLogServiceConfig,
47
- eventLogsServiceClass?: new (...args: any[]) => EventLogsService,
48
- }) {
49
- return {
50
- module: EventLogsModule,
51
- imports: [
52
- CaslModule.forFeature(),
53
- ScheduleModule,
54
- TypeOrmModule.forFeature([EventLog], config.dataSourceName),
55
- ],
56
- providers: [
57
- {
58
- provide: EventLogsService,
59
- inject: [getDataSourceToken(config.dataSourceName)],
60
- useFactory: (dataSource: DataSource) => {
61
- const serviceClass = config.eventLogsServiceClass || EventLogsService;
62
- return new serviceClass(dataSource.getRepository(EventLog), dataSource);
63
- }
64
- },
65
- {
66
- provide: SERVICE_CONFIG_TOKEN,
67
- useValue: config.service,
68
- },
69
- EventLogsLogger,
70
- {
71
- provide: APP_INTERCEPTOR,
72
- useClass: EventLogInterceptor,
73
- },
74
- {
75
- provide: CONFIGURE_EVENTS_MIDDLEWARE,
76
- useValue: true,
77
- }
78
- ],
79
- exports: [
80
- EventLogsService,
81
- EventLogsLogger,
82
- CONFIGURE_EVENTS_MIDDLEWARE,
83
- SERVICE_CONFIG_TOKEN,
84
- ],
85
- }
86
- }
87
-
88
- static forFeature(config: { dataSourceName: string }) {
89
- return {
90
- module: EventLogsModule,
91
- imports: [
92
- CaslModule,
93
- TypeOrmModule.forFeature([EventLog], config.dataSourceName),
94
- ],
95
- providers: [
96
- {
97
- provide: EventLogsService,
98
- inject: [getDataSourceToken(config.dataSourceName)],
99
- useFactory: (dataSource: DataSource) => {
100
- return new EventLogsService(dataSource.getRepository(EventLog), dataSource);
101
- }
102
- },
103
- ],
104
- exports: [
105
- EventLogsService,
106
- ],
107
- }
108
- }
109
-
110
- constructor(
111
- @Optional()
112
- @Inject(CONFIGURE_EVENTS_MIDDLEWARE) private readonly configureEventsMiddleware: boolean,
113
- ) {
114
- CaslAbilityFactory.addPermissionToAction({
115
- permission: EventLogsPermissions.VIEW,
116
- action: Action.Read,
117
- subject: EventLog,
118
- });
119
- CaslAbilityFactory.addPermissionToAction({
120
- permission: EventLogsPermissions.MANAGE,
121
- action: Action.Manage,
122
- subject: EventLog,
123
- });
124
- }
125
-
126
- configure(consumer: MiddlewareConsumer) {
127
- if (this.configureEventsMiddleware) {
128
- consumer.apply(EventLogMiddleware).forRoutes('*');
129
- }
130
- }
131
- }
@@ -1,4 +0,0 @@
1
- export enum EventLogsPermissions {
2
- VIEW = 'event-logs:view',
3
- MANAGE = 'event-logs:manage',
4
- }