@comasoft/nestjs 0.0.97 → 0.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.
Files changed (211) hide show
  1. package/README.md +31 -0
  2. package/dist/aws/aws-s3.service.d.ts +17 -0
  3. package/dist/aws/aws-s3.service.js +158 -0
  4. package/dist/aws/aws.module.d.ts +2 -0
  5. package/dist/aws/aws.module.js +25 -0
  6. package/dist/aws/aws.service.d.ts +3 -0
  7. package/dist/aws/aws.service.js +21 -0
  8. package/dist/aws/constants/storage.constant.d.ts +4 -0
  9. package/dist/aws/constants/storage.constant.js +25 -0
  10. package/dist/aws/dto/create-s3-presigned.dto.d.ts +12 -0
  11. package/dist/aws/dto/create-s3-presigned.dto.js +78 -0
  12. package/dist/aws/dto/index.d.ts +2 -0
  13. package/dist/aws/dto/index.js +18 -0
  14. package/dist/aws/dto/response-s3-presigned.dto.d.ts +30 -0
  15. package/dist/aws/dto/response-s3-presigned.dto.js +110 -0
  16. package/dist/aws/index.d.ts +4 -0
  17. package/dist/aws/index.js +20 -0
  18. package/dist/aws/types/s3.interface.d.ts +14 -0
  19. package/dist/aws/types/s3.interface.js +2 -0
  20. package/dist/aws/types/storage.interface.d.ts +19 -0
  21. package/dist/aws/types/storage.interface.js +2 -0
  22. package/dist/category/category.module.d.ts +2 -0
  23. package/dist/category/category.module.js +23 -0
  24. package/dist/category/category.service.d.ts +13 -0
  25. package/dist/category/category.service.js +124 -0
  26. package/dist/category/dto/create-category.dto.d.ts +7 -0
  27. package/dist/category/dto/create-category.dto.js +34 -0
  28. package/dist/category/dto/delete-category.dto.d.ts +3 -0
  29. package/dist/category/dto/delete-category.dto.js +6 -0
  30. package/dist/category/dto/index.d.ts +5 -0
  31. package/dist/category/dto/index.js +21 -0
  32. package/dist/category/dto/response-categories.dto.d.ts +12 -0
  33. package/dist/category/dto/response-categories.dto.js +52 -0
  34. package/dist/category/dto/update-category-sort.dto.d.ts +9 -0
  35. package/dist/category/dto/update-category-sort.dto.js +33 -0
  36. package/dist/category/dto/update-category.dto.d.ts +6 -0
  37. package/dist/category/dto/update-category.dto.js +9 -0
  38. package/dist/category/index.d.ts +3 -0
  39. package/dist/category/index.js +19 -0
  40. package/dist/comment/comment.module.d.ts +2 -0
  41. package/dist/comment/comment.module.js +23 -0
  42. package/dist/comment/comment.service.d.ts +33 -0
  43. package/dist/comment/comment.service.js +240 -0
  44. package/dist/comment/dto/create-comment.dto.d.ts +7 -0
  45. package/dist/comment/dto/create-comment.dto.js +41 -0
  46. package/dist/comment/dto/index.d.ts +3 -0
  47. package/dist/comment/dto/index.js +19 -0
  48. package/dist/comment/dto/response-comment.dto.d.ts +26 -0
  49. package/dist/comment/dto/response-comment.dto.js +97 -0
  50. package/dist/comment/dto/update-comment.dto.d.ts +4 -0
  51. package/dist/comment/dto/update-comment.dto.js +22 -0
  52. package/dist/comment/index.d.ts +3 -0
  53. package/dist/comment/index.js +19 -0
  54. package/dist/database/entities/category.entity.d.ts +14 -0
  55. package/dist/database/entities/category.entity.js +70 -0
  56. package/dist/database/entities/comment.entity.d.ts +16 -0
  57. package/dist/database/entities/comment.entity.js +77 -0
  58. package/dist/database/entities/config.entity.d.ts +8 -0
  59. package/dist/database/entities/config.entity.js +44 -0
  60. package/dist/database/entities/file.entity.d.ts +20 -0
  61. package/dist/database/entities/file.entity.js +91 -0
  62. package/dist/database/entities/index.d.ts +10 -0
  63. package/dist/database/entities/index.js +26 -0
  64. package/dist/database/entities/like.entity.d.ts +10 -0
  65. package/dist/database/entities/like.entity.js +49 -0
  66. package/dist/database/entities/logs-audit.entity.d.ts +16 -0
  67. package/dist/database/entities/logs-audit.entity.js +72 -0
  68. package/dist/database/entities/logs-event.entity.d.ts +16 -0
  69. package/dist/database/entities/logs-event.entity.js +72 -0
  70. package/dist/database/entities/notification-recipient.entity.d.ts +19 -0
  71. package/dist/database/entities/notification-recipient.entity.js +74 -0
  72. package/dist/database/entities/notification.entity.d.ts +18 -0
  73. package/dist/database/entities/notification.entity.js +69 -0
  74. package/dist/database/entities/role.entity.d.ts +13 -0
  75. package/dist/database/entities/role.entity.js +54 -0
  76. package/dist/database/entities/roles.entity.d.ts +12 -0
  77. package/dist/database/entities/roles.entity.js +1 -0
  78. package/dist/decorators/auth.decorator.factory.d.ts +1 -1
  79. package/dist/decorators/auth.decorator.factory.js +23 -2
  80. package/dist/decorators/delete-columns.decorator.js +1 -33
  81. package/dist/decorators/patch-body.decorator.js +20 -12
  82. package/dist/decorators/soft-delete.decorator.js +1 -15
  83. package/dist/decorators/timestamps.decorator.js +5 -13
  84. package/dist/dto/file.dto.d.ts +18 -0
  85. package/dist/dto/file.dto.js +70 -0
  86. package/dist/dto/index.d.ts +2 -0
  87. package/dist/dto/index.js +2 -0
  88. package/dist/dto/response-uid.dto.d.ts +2 -0
  89. package/dist/dto/response-uid.dto.js +8 -0
  90. package/dist/dto/update-ids.dto.d.ts +6 -1
  91. package/dist/dto/update-ids.dto.js +24 -10
  92. package/dist/dto/update-sort.dto.d.ts +9 -0
  93. package/dist/dto/update-sort.dto.js +50 -0
  94. package/dist/enums.common.d.ts +23 -0
  95. package/dist/enums.common.js +28 -1
  96. package/dist/events/event-bus.module.d.ts +2 -0
  97. package/dist/events/event-bus.module.js +44 -0
  98. package/dist/events/index.d.ts +4 -0
  99. package/dist/events/index.js +20 -0
  100. package/dist/events/listeners/audit-event.listener.d.ts +9 -0
  101. package/dist/events/listeners/audit-event.listener.js +58 -0
  102. package/dist/events/listeners/index.d.ts +1 -0
  103. package/dist/events/listeners/index.js +17 -0
  104. package/dist/events/listeners/system-event.listener.d.ts +9 -0
  105. package/dist/events/listeners/system-event.listener.js +58 -0
  106. package/dist/events/services/event-logger.service.d.ts +5 -0
  107. package/dist/events/services/event-logger.service.js +34 -0
  108. package/dist/events/services/event-notification.service.d.ts +7 -0
  109. package/dist/events/services/event-notification.service.js +104 -0
  110. package/dist/events/services/event-storage.service.d.ts +11 -0
  111. package/dist/events/services/event-storage.service.js +79 -0
  112. package/dist/events/services/index.d.ts +4 -0
  113. package/dist/events/services/index.js +20 -0
  114. package/dist/events/services/token.service.d.ts +23 -0
  115. package/dist/events/services/token.service.js +88 -0
  116. package/dist/events/types/audit-events.type.d.ts +12 -0
  117. package/dist/events/types/audit-events.type.js +2 -0
  118. package/dist/events/types/index.d.ts +18 -0
  119. package/dist/events/types/index.js +17 -0
  120. package/dist/filters/http-exception.filter.d.ts +4 -0
  121. package/dist/filters/http-exception.filter.js +26 -4
  122. package/dist/guards/auth.guard.d.ts +3 -1
  123. package/dist/guards/auth.guard.js +33 -11
  124. package/dist/index.d.ts +20 -8
  125. package/dist/index.js +12 -0
  126. package/dist/library.module.d.ts +2 -0
  127. package/dist/library.module.js +20 -0
  128. package/dist/like/dto/create-like.dto.d.ts +7 -0
  129. package/dist/like/dto/create-like.dto.js +47 -0
  130. package/dist/like/dto/index.d.ts +2 -0
  131. package/dist/like/dto/index.js +18 -0
  132. package/dist/like/dto/response-like.dto.d.ts +19 -0
  133. package/dist/like/dto/response-like.dto.js +79 -0
  134. package/dist/like/index.d.ts +3 -0
  135. package/dist/like/index.js +19 -0
  136. package/dist/like/like.module.d.ts +2 -0
  137. package/dist/like/like.module.js +23 -0
  138. package/dist/like/like.service.d.ts +13 -0
  139. package/dist/like/like.service.js +155 -0
  140. package/dist/logger/index.d.ts +2 -0
  141. package/dist/logger/index.js +18 -0
  142. package/dist/logger/pino-options.d.ts +31 -0
  143. package/dist/logger/pino-options.js +77 -0
  144. package/dist/logger/pino-pretty-transport.d.ts +1 -0
  145. package/dist/logger/pino-pretty-transport.js +164 -0
  146. package/dist/modules/index.d.ts +1 -0
  147. package/dist/modules/index.js +1 -0
  148. package/dist/modules/redis.module.d.ts +9 -0
  149. package/dist/modules/redis.module.js +1 -0
  150. package/dist/notifications/index.d.ts +70 -0
  151. package/dist/notifications/index.js +18 -0
  152. package/dist/notifications/notification.module.d.ts +2 -0
  153. package/dist/notifications/notification.module.js +32 -0
  154. package/dist/notifications/services/email.service.d.ts +31 -0
  155. package/dist/notifications/services/email.service.js +69 -0
  156. package/dist/notifications/services/index.d.ts +7 -0
  157. package/dist/notifications/services/index.js +23 -0
  158. package/dist/notifications/services/kakao.service.d.ts +41 -0
  159. package/dist/notifications/services/kakao.service.js +94 -0
  160. package/dist/notifications/services/message-template.service.d.ts +15 -0
  161. package/dist/notifications/services/message-template.service.js +74 -0
  162. package/dist/notifications/services/notification-send.service.d.ts +30 -0
  163. package/dist/notifications/services/notification-send.service.js +146 -0
  164. package/dist/notifications/services/notification.service.d.ts +37 -0
  165. package/dist/notifications/services/notification.service.js +125 -0
  166. package/dist/notifications/services/slack.service.d.ts +11 -0
  167. package/dist/notifications/services/slack.service.js +53 -0
  168. package/dist/notifications/services/sms.service.d.ts +19 -0
  169. package/dist/notifications/services/sms.service.js +62 -0
  170. package/dist/redis/index.d.ts +2 -0
  171. package/dist/redis/index.js +18 -0
  172. package/dist/redis/redis-constraint.d.ts +1 -0
  173. package/dist/redis/redis-constraint.js +4 -0
  174. package/dist/redis/redis.module.d.ts +8 -0
  175. package/dist/redis/redis.module.js +62 -0
  176. package/dist/redis/redis.service.d.ts +12 -0
  177. package/dist/redis/redis.service.js +76 -0
  178. package/dist/role/dto/create-role.dto.d.ts +5 -0
  179. package/dist/role/dto/create-role.dto.js +41 -0
  180. package/dist/role/dto/index.d.ts +3 -0
  181. package/dist/role/dto/index.js +19 -0
  182. package/dist/role/dto/response-roles.dto.d.ts +15 -0
  183. package/dist/role/dto/response-roles.dto.js +62 -0
  184. package/dist/role/dto/update-role.dto.d.ts +6 -0
  185. package/dist/role/dto/update-role.dto.js +9 -0
  186. package/dist/role/index.d.ts +3 -0
  187. package/dist/role/index.js +19 -0
  188. package/dist/role/role.module.d.ts +2 -0
  189. package/dist/role/role.module.js +23 -0
  190. package/dist/role/role.service.d.ts +17 -0
  191. package/dist/role/role.service.js +144 -0
  192. package/dist/services/file.service.d.ts +55 -0
  193. package/dist/services/file.service.js +82 -0
  194. package/dist/services/index.d.ts +2 -0
  195. package/dist/services/index.js +18 -0
  196. package/dist/services/message-template.service.d.ts +15 -0
  197. package/dist/services/message-template.service.js +1 -0
  198. package/dist/services/permission-checker.service.d.ts +38 -0
  199. package/dist/services/permission-checker.service.js +65 -0
  200. package/dist/shared/error-codes.d.ts +5 -0
  201. package/dist/shared/error-codes.js +9 -0
  202. package/dist/utils/common.utils.d.ts +2 -0
  203. package/dist/utils/common.utils.js +11 -1
  204. package/dist/utils/index.d.ts +1 -0
  205. package/dist/utils/index.js +1 -0
  206. package/dist/utils/object-diff.d.ts +1 -0
  207. package/dist/utils/object-diff.js +33 -0
  208. package/package.json +61 -16
  209. package/eslint.config.js +0 -31
  210. package/tsconfig.build.json +0 -19
  211. package/tsconfig.json +0 -18
@@ -0,0 +1,2 @@
1
+ export declare class EventBusModule {
2
+ }
@@ -0,0 +1,44 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.EventBusModule = void 0;
10
+ const common_1 = require("@nestjs/common");
11
+ const event_emitter_1 = require("@nestjs/event-emitter");
12
+ const typeorm_1 = require("@nestjs/typeorm");
13
+ const entities_1 = require("../database/entities");
14
+ const notification_module_1 = require("../notifications/notification.module");
15
+ const listeners_1 = require("./listeners");
16
+ const services_1 = require("./services");
17
+ let EventBusModule = class EventBusModule {
18
+ };
19
+ exports.EventBusModule = EventBusModule;
20
+ exports.EventBusModule = EventBusModule = __decorate([
21
+ (0, common_1.Global)(),
22
+ (0, common_1.Module)({
23
+ imports: [
24
+ typeorm_1.TypeOrmModule.forFeature([entities_1.LogsAudit, entities_1.LogsEvent]),
25
+ event_emitter_1.EventEmitterModule.forRoot({
26
+ wildcard: true,
27
+ delimiter: '.',
28
+ newListener: false,
29
+ removeListener: false,
30
+ maxListeners: 20,
31
+ verboseMemoryLeak: false,
32
+ ignoreErrors: false,
33
+ }),
34
+ notification_module_1.NotificationModule,
35
+ ],
36
+ providers: [
37
+ services_1.EventLoggerService,
38
+ services_1.EventStorageService,
39
+ services_1.EventNotificationService,
40
+ listeners_1.AuditEventListener,
41
+ ],
42
+ exports: [services_1.EventLoggerService, services_1.EventStorageService, services_1.EventNotificationService],
43
+ })
44
+ ], EventBusModule);
@@ -0,0 +1,4 @@
1
+ export * from './types';
2
+ export * from './services';
3
+ export * from './listeners';
4
+ export * from './event-bus.module';
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./types"), exports);
18
+ __exportStar(require("./services"), exports);
19
+ __exportStar(require("./listeners"), exports);
20
+ __exportStar(require("./event-bus.module"), exports);
@@ -0,0 +1,9 @@
1
+ import { EventLoggerService, EventNotificationService, EventStorageService } from '../services';
2
+ import { AuditEventBase } from '../types';
3
+ export declare class AuditEventListener {
4
+ private readonly eventStorage;
5
+ private readonly eventLogger;
6
+ private readonly eventNotificationService;
7
+ constructor(eventStorage: EventStorageService, eventLogger: EventLoggerService, eventNotificationService: EventNotificationService);
8
+ handleAuditEvent(event: AuditEventBase): Promise<void>;
9
+ }
@@ -0,0 +1,58 @@
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 __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
12
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
13
+ return new (P || (P = Promise))(function (resolve, reject) {
14
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
15
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
16
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
17
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
18
+ });
19
+ };
20
+ Object.defineProperty(exports, "__esModule", { value: true });
21
+ exports.AuditEventListener = void 0;
22
+ const common_1 = require("@nestjs/common");
23
+ const event_emitter_1 = require("@nestjs/event-emitter");
24
+ const services_1 = require("../services");
25
+ let AuditEventListener = class AuditEventListener {
26
+ constructor(eventStorage, eventLogger, eventNotificationService) {
27
+ this.eventStorage = eventStorage;
28
+ this.eventLogger = eventLogger;
29
+ this.eventNotificationService = eventNotificationService;
30
+ }
31
+ handleAuditEvent(event) {
32
+ return __awaiter(this, void 0, void 0, function* () {
33
+ const { db = true, log = true } = event;
34
+ if (db) {
35
+ yield this.eventStorage.storeAuditEvent(event);
36
+ }
37
+ if (log) {
38
+ yield this.eventLogger.log(event);
39
+ }
40
+ if (event.notification) {
41
+ yield this.eventNotificationService.send(event.notification);
42
+ }
43
+ });
44
+ }
45
+ };
46
+ exports.AuditEventListener = AuditEventListener;
47
+ __decorate([
48
+ (0, event_emitter_1.OnEvent)('audit.**', { async: true }),
49
+ __metadata("design:type", Function),
50
+ __metadata("design:paramtypes", [Object]),
51
+ __metadata("design:returntype", Promise)
52
+ ], AuditEventListener.prototype, "handleAuditEvent", null);
53
+ exports.AuditEventListener = AuditEventListener = __decorate([
54
+ (0, common_1.Injectable)(),
55
+ __metadata("design:paramtypes", [services_1.EventStorageService,
56
+ services_1.EventLoggerService,
57
+ services_1.EventNotificationService])
58
+ ], AuditEventListener);
@@ -0,0 +1 @@
1
+ export * from './audit-event.listener';
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./audit-event.listener"), exports);
@@ -0,0 +1,9 @@
1
+ import { EventLoggerService, EventNotificationService, EventStorageService } from '../services';
2
+ import { AuditEventBase } from '../types';
3
+ export declare class AuditEventListener {
4
+ private readonly eventStorage;
5
+ private readonly eventLogger;
6
+ private readonly eventNotificationService;
7
+ constructor(eventStorage: EventStorageService, eventLogger: EventLoggerService, eventNotificationService: EventNotificationService);
8
+ handleAuditEvent(event: AuditEventBase): Promise<void>;
9
+ }
@@ -0,0 +1,58 @@
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 __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
12
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
13
+ return new (P || (P = Promise))(function (resolve, reject) {
14
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
15
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
16
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
17
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
18
+ });
19
+ };
20
+ Object.defineProperty(exports, "__esModule", { value: true });
21
+ exports.AuditEventListener = void 0;
22
+ const common_1 = require("@nestjs/common");
23
+ const event_emitter_1 = require("@nestjs/event-emitter");
24
+ const services_1 = require("../services");
25
+ let AuditEventListener = class AuditEventListener {
26
+ constructor(eventStorage, eventLogger, eventNotificationService) {
27
+ this.eventStorage = eventStorage;
28
+ this.eventLogger = eventLogger;
29
+ this.eventNotificationService = eventNotificationService;
30
+ }
31
+ handleAuditEvent(event) {
32
+ return __awaiter(this, void 0, void 0, function* () {
33
+ const { db = true, log = true } = event;
34
+ if (db) {
35
+ yield this.eventStorage.storeAuditEvent(event);
36
+ }
37
+ if (log) {
38
+ yield this.eventLogger.log(event);
39
+ }
40
+ if (event.notification) {
41
+ yield this.eventNotificationService.send(event.notification);
42
+ }
43
+ });
44
+ }
45
+ };
46
+ exports.AuditEventListener = AuditEventListener;
47
+ __decorate([
48
+ (0, event_emitter_1.OnEvent)('audit.**', { async: true }),
49
+ __metadata("design:type", Function),
50
+ __metadata("design:paramtypes", [Object]),
51
+ __metadata("design:returntype", Promise)
52
+ ], AuditEventListener.prototype, "handleAuditEvent", null);
53
+ exports.AuditEventListener = AuditEventListener = __decorate([
54
+ (0, common_1.Injectable)(),
55
+ __metadata("design:paramtypes", [services_1.EventStorageService,
56
+ services_1.EventLoggerService,
57
+ services_1.EventNotificationService])
58
+ ], AuditEventListener);
@@ -0,0 +1,5 @@
1
+ import { BaseEvent } from '../types';
2
+ export declare class EventLoggerService {
3
+ log(event: BaseEvent): Promise<void>;
4
+ logWithStructure(event: BaseEvent, structure: Record<string, any>): Promise<void>;
5
+ }
@@ -0,0 +1,34 @@
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 __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
9
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
10
+ return new (P || (P = Promise))(function (resolve, reject) {
11
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
12
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
13
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
14
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
15
+ });
16
+ };
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.EventLoggerService = void 0;
19
+ const common_1 = require("@nestjs/common");
20
+ let EventLoggerService = class EventLoggerService {
21
+ log(event) {
22
+ return __awaiter(this, void 0, void 0, function* () {
23
+ console.log(event);
24
+ });
25
+ }
26
+ logWithStructure(event, structure) {
27
+ return __awaiter(this, void 0, void 0, function* () {
28
+ });
29
+ }
30
+ };
31
+ exports.EventLoggerService = EventLoggerService;
32
+ exports.EventLoggerService = EventLoggerService = __decorate([
33
+ (0, common_1.Injectable)()
34
+ ], EventLoggerService);
@@ -0,0 +1,7 @@
1
+ import { NotificationOptions, NotificationSendService, NotificationService } from '../../notifications';
2
+ export declare class EventNotificationService {
3
+ private readonly notificationService;
4
+ private readonly notificationSendService;
5
+ constructor(notificationService: NotificationService, notificationSendService: NotificationSendService);
6
+ send(notification: NotificationOptions): Promise<void>;
7
+ }
@@ -0,0 +1,104 @@
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 __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
12
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
13
+ return new (P || (P = Promise))(function (resolve, reject) {
14
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
15
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
16
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
17
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
18
+ });
19
+ };
20
+ Object.defineProperty(exports, "__esModule", { value: true });
21
+ exports.EventNotificationService = void 0;
22
+ const common_1 = require("@nestjs/common");
23
+ const notifications_1 = require("../../notifications");
24
+ let EventNotificationService = class EventNotificationService {
25
+ constructor(notificationService, notificationSendService) {
26
+ this.notificationService = notificationService;
27
+ this.notificationSendService = notificationSendService;
28
+ }
29
+ send(notification) {
30
+ return __awaiter(this, void 0, void 0, function* () {
31
+ console.log('notification', notification);
32
+ if (notification === null || notification === void 0 ? void 0 : notification.email) {
33
+ yield this.notificationService.create({
34
+ type: 'email',
35
+ template_key: notification.email.template_key,
36
+ recipients: notification.email.recipients,
37
+ variables: notification.email.variables,
38
+ });
39
+ const result = yield this.notificationSendService.send({
40
+ type: 'email',
41
+ recipients: notification.email.recipients,
42
+ subject: notification.email.subject,
43
+ body: notification.email.body,
44
+ template_key: notification.email.template_key,
45
+ variables: notification.email.variables,
46
+ });
47
+ console.log('📧 [EVENT-NOTIFICATION] Email 발송 결과:', result);
48
+ }
49
+ if (notification === null || notification === void 0 ? void 0 : notification.kakao) {
50
+ yield this.notificationService.create({
51
+ type: 'kakao',
52
+ template_key: notification.kakao.template_key,
53
+ recipients: notification.kakao.recipients,
54
+ variables: notification.kakao.variables,
55
+ });
56
+ const result = yield this.notificationSendService.send({
57
+ type: 'kakao',
58
+ recipients: notification.kakao.recipients,
59
+ template_key: notification.kakao.template_key,
60
+ variables: notification.kakao.variables,
61
+ });
62
+ console.log('📱 [EVENT-NOTIFICATION] Kakao 발송 결과:', result);
63
+ }
64
+ if (notification === null || notification === void 0 ? void 0 : notification.sms) {
65
+ yield this.notificationService.create({
66
+ type: 'sms',
67
+ template_key: notification.sms.template_key,
68
+ recipients: notification.sms.recipients,
69
+ variables: notification.sms.variables,
70
+ });
71
+ const result = yield this.notificationSendService.send({
72
+ type: 'sms',
73
+ recipients: notification.sms.recipients,
74
+ message: notification.sms.message,
75
+ template_key: notification.sms.template_key,
76
+ variables: notification.sms.variables,
77
+ });
78
+ console.log('📱 [EVENT-NOTIFICATION] SMS 발송 결과:', result);
79
+ }
80
+ if (notification === null || notification === void 0 ? void 0 : notification.slack) {
81
+ yield this.notificationService.create({
82
+ type: 'slack',
83
+ template_key: notification.slack.template_key,
84
+ recipients: [{ user_id: 0, recipient: notification.slack.channel }],
85
+ variables: notification.slack.variables,
86
+ });
87
+ const result = yield this.notificationSendService.send({
88
+ type: 'slack',
89
+ channel: notification.slack.channel,
90
+ message: notification.slack.message,
91
+ template_key: notification.slack.template_key,
92
+ variables: notification.slack.variables,
93
+ });
94
+ console.log('📢 [EVENT-NOTIFICATION] Slack 발송 결과:', result);
95
+ }
96
+ });
97
+ }
98
+ };
99
+ exports.EventNotificationService = EventNotificationService;
100
+ exports.EventNotificationService = EventNotificationService = __decorate([
101
+ (0, common_1.Injectable)(),
102
+ __metadata("design:paramtypes", [notifications_1.NotificationService,
103
+ notifications_1.NotificationSendService])
104
+ ], EventNotificationService);
@@ -0,0 +1,11 @@
1
+ import { DataSource, Repository } from 'typeorm';
2
+ import { LogsAudit, LogsEvent } from '../../database/entities';
3
+ import { AuditEventBase, BaseEvent } from '../types';
4
+ export declare class EventStorageService {
5
+ private readonly eventLogRepository;
6
+ private readonly auditLogRepository;
7
+ private readonly dataSource;
8
+ constructor(eventLogRepository: Repository<LogsEvent>, auditLogRepository: Repository<LogsAudit>, dataSource: DataSource);
9
+ store(event: BaseEvent): Promise<void>;
10
+ storeAuditEvent(event: AuditEventBase): Promise<void>;
11
+ }
@@ -0,0 +1,79 @@
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 __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
15
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
16
+ return new (P || (P = Promise))(function (resolve, reject) {
17
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
18
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
19
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
20
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
21
+ });
22
+ };
23
+ Object.defineProperty(exports, "__esModule", { value: true });
24
+ exports.EventStorageService = void 0;
25
+ const common_1 = require("@nestjs/common");
26
+ const typeorm_1 = require("@nestjs/typeorm");
27
+ const nanoid_1 = require("nanoid");
28
+ const typeorm_2 = require("typeorm");
29
+ const entities_1 = require("../../database/entities");
30
+ let EventStorageService = class EventStorageService {
31
+ constructor(eventLogRepository, auditLogRepository, dataSource) {
32
+ this.eventLogRepository = eventLogRepository;
33
+ this.auditLogRepository = auditLogRepository;
34
+ this.dataSource = dataSource;
35
+ }
36
+ store(event) {
37
+ return __awaiter(this, void 0, void 0, function* () {
38
+ var _a, _b, _c;
39
+ const eventLog = this.eventLogRepository.create({
40
+ uid: event.uid || (0, nanoid_1.nanoid)(),
41
+ name: event.name,
42
+ user_id: ((_a = event.user) === null || _a === void 0 ? void 0 : _a.user_id) || 0,
43
+ ip_address: (_b = event.user) === null || _b === void 0 ? void 0 : _b.ip_address,
44
+ user_agent: (_c = event.user) === null || _c === void 0 ? void 0 : _c.user_agent,
45
+ occurred_at: event.timestamp || new Date(),
46
+ });
47
+ yield this.eventLogRepository.save(eventLog);
48
+ });
49
+ }
50
+ storeAuditEvent(event) {
51
+ return __awaiter(this, void 0, void 0, function* () {
52
+ yield this.dataSource.transaction((manager) => __awaiter(this, void 0, void 0, function* () {
53
+ var _a, _b, _c;
54
+ const eventLog = manager.create(entities_1.LogsAudit, {
55
+ uid: event.uid || (0, nanoid_1.nanoid)(),
56
+ name: event.name,
57
+ user_id: ((_a = event.user) === null || _a === void 0 ? void 0 : _a.user_id) || 0,
58
+ entity: event.entity,
59
+ entity_id: event.entity_id,
60
+ action: event.action,
61
+ changes: event.changes,
62
+ ip_address: (_b = event.user) === null || _b === void 0 ? void 0 : _b.ip_address,
63
+ user_agent: (_c = event.user) === null || _c === void 0 ? void 0 : _c.user_agent,
64
+ occurred_at: event.timestamp || new Date(),
65
+ });
66
+ yield manager.save(eventLog);
67
+ }));
68
+ });
69
+ }
70
+ };
71
+ exports.EventStorageService = EventStorageService;
72
+ exports.EventStorageService = EventStorageService = __decorate([
73
+ (0, common_1.Injectable)(),
74
+ __param(0, (0, typeorm_1.InjectRepository)(entities_1.LogsEvent)),
75
+ __param(1, (0, typeorm_1.InjectRepository)(entities_1.LogsAudit)),
76
+ __metadata("design:paramtypes", [typeorm_2.Repository,
77
+ typeorm_2.Repository,
78
+ typeorm_2.DataSource])
79
+ ], EventStorageService);
@@ -0,0 +1,4 @@
1
+ export * from './event-logger.service';
2
+ export * from './event-storage.service';
3
+ export * from './event-notification.service';
4
+ export * from './token.service';
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./event-logger.service"), exports);
18
+ __exportStar(require("./event-storage.service"), exports);
19
+ __exportStar(require("./event-notification.service"), exports);
20
+ __exportStar(require("./token.service"), exports);
@@ -0,0 +1,23 @@
1
+ import { ConfigService } from '@nestjs/config';
2
+ import { JwtService } from '@nestjs/jwt';
3
+ import { RedisService } from '../../redis';
4
+ export declare class TokenService {
5
+ private readonly redis;
6
+ private jwtService;
7
+ private configService;
8
+ constructor(redis: RedisService, jwtService: JwtService, configService: ConfigService);
9
+ private generateOpaqueToken;
10
+ private storeRefreshToken;
11
+ generateTokens(payload: any, user_uid: string, user_agent: string): Promise<{
12
+ access_token: string;
13
+ refresh_token: string;
14
+ expires_in: number;
15
+ refresh_expires_in: number;
16
+ }>;
17
+ removeRefreshToken(refresh_token: string): Promise<any>;
18
+ getStoredRefreshToken(refresh_token: string): Promise<{
19
+ uid: string;
20
+ iat: number;
21
+ exp: number;
22
+ } | null>;
23
+ }
@@ -0,0 +1,88 @@
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 __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
12
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
13
+ return new (P || (P = Promise))(function (resolve, reject) {
14
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
15
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
16
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
17
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
18
+ });
19
+ };
20
+ Object.defineProperty(exports, "__esModule", { value: true });
21
+ exports.TokenService = void 0;
22
+ const common_1 = require("@nestjs/common");
23
+ const config_1 = require("@nestjs/config");
24
+ const jwt_1 = require("@nestjs/jwt");
25
+ const crypto_1 = require("crypto");
26
+ const redis_1 = require("../../redis");
27
+ const utils_1 = require("../../utils");
28
+ let TokenService = class TokenService {
29
+ constructor(redis, jwtService, configService) {
30
+ this.redis = redis;
31
+ this.jwtService = jwtService;
32
+ this.configService = configService;
33
+ }
34
+ generateOpaqueToken() {
35
+ return (0, crypto_1.randomBytes)(32).toString('base64url');
36
+ }
37
+ storeRefreshToken(user_uid, refresh_token, user_agent) {
38
+ return __awaiter(this, void 0, void 0, function* () {
39
+ const iat = Math.floor(Date.now() / 1000);
40
+ const exp = (0, utils_1.convertExpirationToSeconds)(this.configService.get('REFRESH_TOKEN_EXPIRATION'));
41
+ yield this.redis.set(`refresh_token:${refresh_token}`, JSON.stringify({ uid: user_uid, iat, exp }), exp);
42
+ yield this.redis.set(`user_devices:${user_uid}:${refresh_token}`, JSON.stringify({
43
+ user_agent,
44
+ lastLogin: new Date().toISOString(),
45
+ }), exp);
46
+ return { exp };
47
+ });
48
+ }
49
+ generateTokens(payload, user_uid, user_agent) {
50
+ return __awaiter(this, void 0, void 0, function* () {
51
+ const access_token = this.jwtService.sign(payload);
52
+ const access_token_decoded = this.jwtService.decode(access_token);
53
+ const refresh_token = this.generateOpaqueToken();
54
+ const result = yield this.storeRefreshToken(user_uid, refresh_token, user_agent);
55
+ return {
56
+ access_token,
57
+ refresh_token,
58
+ expires_in: access_token_decoded.exp - access_token_decoded.iat,
59
+ refresh_expires_in: result.exp,
60
+ };
61
+ });
62
+ }
63
+ removeRefreshToken(refresh_token) {
64
+ return __awaiter(this, void 0, void 0, function* () {
65
+ const data = yield this.redis.get(`refresh_token:${refresh_token}`);
66
+ if (!data)
67
+ return null;
68
+ const { uid } = JSON.parse(data);
69
+ yield this.redis.del(`refresh_token:${refresh_token}`);
70
+ yield this.redis.del(`user_devices:${uid}:${refresh_token}`);
71
+ });
72
+ }
73
+ getStoredRefreshToken(refresh_token) {
74
+ return __awaiter(this, void 0, void 0, function* () {
75
+ const data = yield this.redis.get(`refresh_token:${refresh_token}`);
76
+ if (!data)
77
+ return null;
78
+ return JSON.parse(data);
79
+ });
80
+ }
81
+ };
82
+ exports.TokenService = TokenService;
83
+ exports.TokenService = TokenService = __decorate([
84
+ (0, common_1.Injectable)(),
85
+ __metadata("design:paramtypes", [redis_1.RedisService,
86
+ jwt_1.JwtService,
87
+ config_1.ConfigService])
88
+ ], TokenService);
@@ -0,0 +1,12 @@
1
+ import { AUDIT_ACTION } from '../../enums.common';
2
+ import { BaseEvent } from '.';
3
+ export interface AuditEventBase<TName extends string = string> extends BaseEvent {
4
+ readonly name: TName;
5
+ readonly entity: string;
6
+ readonly entity_id: number;
7
+ readonly action: AUDIT_ACTION;
8
+ readonly changes?: Record<string, {
9
+ before: any;
10
+ after: any;
11
+ }>;
12
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });