xcally-nest-library 0.0.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 (67) hide show
  1. package/.eslintrc.js +22 -0
  2. package/.nvmrc +1 -0
  3. package/.prettierrc +5 -0
  4. package/.vscode/settings.json +6 -0
  5. package/README.md +73 -0
  6. package/dist/index.d.ts +9 -0
  7. package/dist/index.js +26 -0
  8. package/dist/index.js.map +1 -0
  9. package/dist/src/config/env.validation.d.ts +21 -0
  10. package/dist/src/config/env.validation.js +80 -0
  11. package/dist/src/config/env.validation.js.map +1 -0
  12. package/dist/src/db/typeorm/generic.repository.d.ts +18 -0
  13. package/dist/src/db/typeorm/generic.repository.js +43 -0
  14. package/dist/src/db/typeorm/generic.repository.js.map +1 -0
  15. package/dist/src/decorators/utils.decorators.d.ts +2 -0
  16. package/dist/src/decorators/utils.decorators.js +15 -0
  17. package/dist/src/decorators/utils.decorators.js.map +1 -0
  18. package/dist/src/interceptors/log-request.interceptor.d.ts +8 -0
  19. package/dist/src/interceptors/log-request.interceptor.js +42 -0
  20. package/dist/src/interceptors/log-request.interceptor.js.map +1 -0
  21. package/dist/src/interceptors/serialize.interceptor.d.ts +12 -0
  22. package/dist/src/interceptors/serialize.interceptor.js +24 -0
  23. package/dist/src/interceptors/serialize.interceptor.js.map +1 -0
  24. package/dist/src/modules/logger/winston.decorator.d.ts +1 -0
  25. package/dist/src/modules/logger/winston.decorator.js +17 -0
  26. package/dist/src/modules/logger/winston.decorator.js.map +1 -0
  27. package/dist/src/modules/logger/winston.interface.d.ts +21 -0
  28. package/dist/src/modules/logger/winston.interface.js +3 -0
  29. package/dist/src/modules/logger/winston.interface.js.map +1 -0
  30. package/dist/src/modules/logger/winston.module.d.ts +4 -0
  31. package/dist/src/modules/logger/winston.module.js +95 -0
  32. package/dist/src/modules/logger/winston.module.js.map +1 -0
  33. package/dist/src/modules/logger/winston.service.d.ts +23 -0
  34. package/dist/src/modules/logger/winston.service.js +113 -0
  35. package/dist/src/modules/logger/winston.service.js.map +1 -0
  36. package/dist/src/modules/tracer/tracer.middleware.d.ts +24 -0
  37. package/dist/src/modules/tracer/tracer.middleware.js +41 -0
  38. package/dist/src/modules/tracer/tracer.middleware.js.map +1 -0
  39. package/dist/src/modules/tracer/tracer.module.d.ts +7 -0
  40. package/dist/src/modules/tracer/tracer.module.js +36 -0
  41. package/dist/src/modules/tracer/tracer.module.js.map +1 -0
  42. package/dist/src/types/auth.d.ts +8 -0
  43. package/dist/src/types/auth.js +9 -0
  44. package/dist/src/types/auth.js.map +1 -0
  45. package/dist/src/types/index.d.ts +1 -0
  46. package/dist/src/types/index.js +18 -0
  47. package/dist/src/types/index.js.map +1 -0
  48. package/dist/tsconfig.build.tsbuildinfo +1 -0
  49. package/index.ts +9 -0
  50. package/nest-cli.json +8 -0
  51. package/package.json +89 -0
  52. package/src/config/env.validation.ts +59 -0
  53. package/src/db/typeorm/generic.repository.ts +43 -0
  54. package/src/decorators/utils.decorators.ts +28 -0
  55. package/src/interceptors/log-request.interceptor.ts +30 -0
  56. package/src/interceptors/serialize.interceptor.ts +27 -0
  57. package/src/modules/logger/winston.decorator.ts +14 -0
  58. package/src/modules/logger/winston.interface.ts +22 -0
  59. package/src/modules/logger/winston.module.ts +105 -0
  60. package/src/modules/logger/winston.service.ts +60 -0
  61. package/src/modules/tracer/tracer.middleware.ts +40 -0
  62. package/src/modules/tracer/tracer.module.ts +18 -0
  63. package/src/types/auth.ts +9 -0
  64. package/src/types/index.ts +1 -0
  65. package/test/jest-e2e.json +9 -0
  66. package/tsconfig.build.json +4 -0
  67. package/tsconfig.json +21 -0
package/.eslintrc.js ADDED
@@ -0,0 +1,22 @@
1
+ module.exports = {
2
+ parser: '@typescript-eslint/parser',
3
+ parserOptions: {
4
+ project: 'tsconfig.json',
5
+ tsconfigRootDir: __dirname,
6
+ sourceType: 'module',
7
+ },
8
+ plugins: ['@typescript-eslint/eslint-plugin'],
9
+ extends: ['plugin:@typescript-eslint/recommended', 'plugin:prettier/recommended'],
10
+ root: true,
11
+ env: {
12
+ node: true,
13
+ jest: true,
14
+ },
15
+ ignorePatterns: ['.eslintrc.js'],
16
+ rules: {
17
+ '@typescript-eslint/interface-name-prefix': 'off',
18
+ '@typescript-eslint/explicit-function-return-type': 'off',
19
+ '@typescript-eslint/explicit-module-boundary-types': 'off',
20
+ '@typescript-eslint/no-explicit-any': 'off',
21
+ },
22
+ };
package/.nvmrc ADDED
@@ -0,0 +1 @@
1
+ v20
package/.prettierrc ADDED
@@ -0,0 +1,5 @@
1
+ {
2
+ "singleQuote": true,
3
+ "trailingComma": "all",
4
+ "printWidth": 120
5
+ }
@@ -0,0 +1,6 @@
1
+ {
2
+ "editor.codeActionsOnSave": {
3
+ "source.fixAll": "explicit"
4
+ },
5
+ "editor.formatOnSave": false
6
+ }
package/README.md ADDED
@@ -0,0 +1,73 @@
1
+ <p align="center">
2
+ <a href="http://nestjs.com/" target="blank"><img src="https://nestjs.com/img/logo-small.svg" width="200" alt="Nest Logo" /></a>
3
+ </p>
4
+
5
+ [circleci-image]: https://img.shields.io/circleci/build/github/nestjs/nest/master?token=abc123def456
6
+ [circleci-url]: https://circleci.com/gh/nestjs/nest
7
+
8
+ <p align="center">A progressive <a href="http://nodejs.org" target="_blank">Node.js</a> framework for building efficient and scalable server-side applications.</p>
9
+ <p align="center">
10
+ <a href="https://www.npmjs.com/~nestjscore" target="_blank"><img src="https://img.shields.io/npm/v/@nestjs/core.svg" alt="NPM Version" /></a>
11
+ <a href="https://www.npmjs.com/~nestjscore" target="_blank"><img src="https://img.shields.io/npm/l/@nestjs/core.svg" alt="Package License" /></a>
12
+ <a href="https://www.npmjs.com/~nestjscore" target="_blank"><img src="https://img.shields.io/npm/dm/@nestjs/common.svg" alt="NPM Downloads" /></a>
13
+ <a href="https://circleci.com/gh/nestjs/nest" target="_blank"><img src="https://img.shields.io/circleci/build/github/nestjs/nest/master" alt="CircleCI" /></a>
14
+ <a href="https://coveralls.io/github/nestjs/nest?branch=master" target="_blank"><img src="https://coveralls.io/repos/github/nestjs/nest/badge.svg?branch=master#9" alt="Coverage" /></a>
15
+ <a href="https://discord.gg/G7Qnnhy" target="_blank"><img src="https://img.shields.io/badge/discord-online-brightgreen.svg" alt="Discord"/></a>
16
+ <a href="https://opencollective.com/nest#backer" target="_blank"><img src="https://opencollective.com/nest/backers/badge.svg" alt="Backers on Open Collective" /></a>
17
+ <a href="https://opencollective.com/nest#sponsor" target="_blank"><img src="https://opencollective.com/nest/sponsors/badge.svg" alt="Sponsors on Open Collective" /></a>
18
+ <a href="https://paypal.me/kamilmysliwiec" target="_blank"><img src="https://img.shields.io/badge/Donate-PayPal-ff3f59.svg"/></a>
19
+ <a href="https://opencollective.com/nest#sponsor" target="_blank"><img src="https://img.shields.io/badge/Support%20us-Open%20Collective-41B883.svg" alt="Support us"></a>
20
+ <a href="https://twitter.com/nestframework" target="_blank"><img src="https://img.shields.io/twitter/follow/nestframework.svg?style=social&label=Follow"></a>
21
+ </p>
22
+ <!--[![Backers on Open Collective](https://opencollective.com/nest/backers/badge.svg)](https://opencollective.com/nest#backer)
23
+ [![Sponsors on Open Collective](https://opencollective.com/nest/sponsors/badge.svg)](https://opencollective.com/nest#sponsor)-->
24
+
25
+ ## Description
26
+
27
+ [Nest](https://github.com/nestjs/nest) framework TypeScript starter repository.
28
+
29
+ ## Installation
30
+
31
+ ```bash
32
+ $ pnpm install
33
+ ```
34
+
35
+ ## Running the app
36
+
37
+ ```bash
38
+ # development
39
+ $ pnpm run start
40
+
41
+ # watch mode
42
+ $ pnpm run start:dev
43
+
44
+ # production mode
45
+ $ pnpm run start:prod
46
+ ```
47
+
48
+ ## Test
49
+
50
+ ```bash
51
+ # unit tests
52
+ $ pnpm run test
53
+
54
+ # e2e tests
55
+ $ pnpm run test:e2e
56
+
57
+ # test coverage
58
+ $ pnpm run test:cov
59
+ ```
60
+
61
+ ## Support
62
+
63
+ Nest is an MIT-licensed open source project. It can grow thanks to the sponsors and support by the amazing backers. If you'd like to join them, please [read more here](https://docs.nestjs.com/support).
64
+
65
+ ## Stay in touch
66
+
67
+ - Author - [Kamil Myśliwiec](https://kamilmysliwiec.com)
68
+ - Website - [https://nestjs.com](https://nestjs.com/)
69
+ - Twitter - [@nestframework](https://twitter.com/nestframework)
70
+
71
+ ## License
72
+
73
+ Nest is [MIT licensed](LICENSE).
@@ -0,0 +1,9 @@
1
+ export * from './src/types';
2
+ export * from './src/interceptors/log-request.interceptor';
3
+ export * from './src/interceptors/serialize.interceptor';
4
+ export * from './src/modules/logger/winston.service';
5
+ export * from './src/modules/logger/winston.module';
6
+ export * from './src/modules/tracer/tracer.module';
7
+ export * from './src/db/typeorm/generic.repository';
8
+ export * from './src/decorators/utils.decorators';
9
+ export * from './src/config/env.validation';
package/dist/index.js ADDED
@@ -0,0 +1,26 @@
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("./src/types"), exports);
18
+ __exportStar(require("./src/interceptors/log-request.interceptor"), exports);
19
+ __exportStar(require("./src/interceptors/serialize.interceptor"), exports);
20
+ __exportStar(require("./src/modules/logger/winston.service"), exports);
21
+ __exportStar(require("./src/modules/logger/winston.module"), exports);
22
+ __exportStar(require("./src/modules/tracer/tracer.module"), exports);
23
+ __exportStar(require("./src/db/typeorm/generic.repository"), exports);
24
+ __exportStar(require("./src/decorators/utils.decorators"), exports);
25
+ __exportStar(require("./src/config/env.validation"), exports);
26
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,8CAA4B;AAC5B,6EAA2D;AAC3D,2EAAyD;AACzD,uEAAqD;AACrD,sEAAoD;AACpD,qEAAmD;AACnD,sEAAoD;AACpD,oEAAkD;AAClD,8DAA4C"}
@@ -0,0 +1,21 @@
1
+ declare enum EnvironmentType {
2
+ Dev = "development",
3
+ Prod = "production",
4
+ Test = "test",
5
+ Staging = "staging"
6
+ }
7
+ declare class EnvironmentVariables {
8
+ NODE_ENV: EnvironmentType;
9
+ MYSQL_HOST: string;
10
+ MYSQL_PORT: number;
11
+ MYSQL_DATABASE: string;
12
+ MYSQL_USERNAME: string;
13
+ MYSQL_PASSWORD: string;
14
+ MYSQL_SYNCHRONIZE: boolean;
15
+ HTTP_TIMEOUT: number;
16
+ HTTP_MAX_REDIRECTS: number;
17
+ BASE_MOTION_URL: string;
18
+ ACTOR_SERVICE_URL: string;
19
+ }
20
+ export declare function validate(configuration: Record<string, unknown>): EnvironmentVariables;
21
+ export {};
@@ -0,0 +1,80 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.validate = void 0;
13
+ const class_transformer_1 = require("class-transformer");
14
+ const class_validator_1 = require("class-validator");
15
+ var EnvironmentType;
16
+ (function (EnvironmentType) {
17
+ EnvironmentType["Dev"] = "development";
18
+ EnvironmentType["Prod"] = "production";
19
+ EnvironmentType["Test"] = "test";
20
+ EnvironmentType["Staging"] = "staging";
21
+ })(EnvironmentType || (EnvironmentType = {}));
22
+ class EnvironmentVariables {
23
+ }
24
+ __decorate([
25
+ (0, class_validator_1.IsEnum)(EnvironmentType),
26
+ __metadata("design:type", String)
27
+ ], EnvironmentVariables.prototype, "NODE_ENV", void 0);
28
+ __decorate([
29
+ (0, class_validator_1.IsString)(),
30
+ __metadata("design:type", String)
31
+ ], EnvironmentVariables.prototype, "MYSQL_HOST", void 0);
32
+ __decorate([
33
+ (0, class_validator_1.IsNumber)(),
34
+ __metadata("design:type", Number)
35
+ ], EnvironmentVariables.prototype, "MYSQL_PORT", void 0);
36
+ __decorate([
37
+ (0, class_validator_1.IsString)(),
38
+ (0, class_validator_1.NotContains)(' '),
39
+ __metadata("design:type", String)
40
+ ], EnvironmentVariables.prototype, "MYSQL_DATABASE", void 0);
41
+ __decorate([
42
+ (0, class_validator_1.IsString)(),
43
+ __metadata("design:type", String)
44
+ ], EnvironmentVariables.prototype, "MYSQL_USERNAME", void 0);
45
+ __decorate([
46
+ (0, class_validator_1.IsString)(),
47
+ __metadata("design:type", String)
48
+ ], EnvironmentVariables.prototype, "MYSQL_PASSWORD", void 0);
49
+ __decorate([
50
+ (0, class_validator_1.IsBoolean)(),
51
+ __metadata("design:type", Boolean)
52
+ ], EnvironmentVariables.prototype, "MYSQL_SYNCHRONIZE", void 0);
53
+ __decorate([
54
+ (0, class_validator_1.IsNumber)(),
55
+ __metadata("design:type", Number)
56
+ ], EnvironmentVariables.prototype, "HTTP_TIMEOUT", void 0);
57
+ __decorate([
58
+ (0, class_validator_1.IsNumber)(),
59
+ __metadata("design:type", Number)
60
+ ], EnvironmentVariables.prototype, "HTTP_MAX_REDIRECTS", void 0);
61
+ __decorate([
62
+ (0, class_validator_1.IsString)(),
63
+ __metadata("design:type", String)
64
+ ], EnvironmentVariables.prototype, "BASE_MOTION_URL", void 0);
65
+ __decorate([
66
+ (0, class_validator_1.IsString)(),
67
+ __metadata("design:type", String)
68
+ ], EnvironmentVariables.prototype, "ACTOR_SERVICE_URL", void 0);
69
+ function validate(configuration) {
70
+ const finalConfig = (0, class_transformer_1.plainToClass)(EnvironmentVariables, configuration, {
71
+ enableImplicitConversion: true,
72
+ });
73
+ const errors = (0, class_validator_1.validateSync)(finalConfig, { skipMissingProperties: true });
74
+ if (errors.length > 0) {
75
+ throw new Error(errors.toString());
76
+ }
77
+ return finalConfig;
78
+ }
79
+ exports.validate = validate;
80
+ //# sourceMappingURL=env.validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env.validation.js","sourceRoot":"","sources":["../../../src/config/env.validation.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,yDAAiD;AACjD,qDAAmG;AAEnG,IAAK,eAKJ;AALD,WAAK,eAAe;IAClB,sCAAmB,CAAA;IACnB,sCAAmB,CAAA;IACnB,gCAAa,CAAA;IACb,sCAAmB,CAAA;AACrB,CAAC,EALI,eAAe,KAAf,eAAe,QAKnB;AAED,MAAM,oBAAoB;CAkCzB;AAhCC;IADC,IAAA,wBAAM,EAAC,eAAe,CAAC;;sDACE;AAG1B;IADC,IAAA,0BAAQ,GAAE;;wDACQ;AAGnB;IADC,IAAA,0BAAQ,GAAE;;wDACQ;AAInB;IAFC,IAAA,0BAAQ,GAAE;IACV,IAAA,6BAAW,EAAC,GAAG,CAAC;;4DACM;AAGvB;IADC,IAAA,0BAAQ,GAAE;;4DACY;AAGvB;IADC,IAAA,0BAAQ,GAAE;;4DACY;AAGvB;IADC,IAAA,2BAAS,GAAE;;+DACe;AAG3B;IADC,IAAA,0BAAQ,GAAE;;0DACU;AAGrB;IADC,IAAA,0BAAQ,GAAE;;gEACgB;AAG3B;IADC,IAAA,0BAAQ,GAAE;;6DACa;AAGxB;IADC,IAAA,0BAAQ,GAAE;;+DACe;AAG5B,SAAgB,QAAQ,CAAC,aAAsC;IAC7D,MAAM,WAAW,GAAG,IAAA,gCAAY,EAAC,oBAAoB,EAAE,aAAa,EAAE;QACpE,wBAAwB,EAAE,IAAI;KAC/B,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,IAAA,8BAAY,EAAC,WAAW,EAAE,EAAE,qBAAqB,EAAE,IAAI,EAAE,CAAC,CAAC;IAE1E,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;IACrC,CAAC;IAED,OAAO,WAAW,CAAC;AACrB,CAAC;AAZD,4BAYC"}
@@ -0,0 +1,18 @@
1
+ import { Repository, EntityTarget, EntityManager, FindOptionsWhere, ObjectLiteral, DeepPartial } from 'typeorm';
2
+ interface IId {
3
+ id: number;
4
+ }
5
+ interface IGenericRepository<E> {
6
+ save<T extends DeepPartial<E>>(entity: T): Promise<E>;
7
+ update<T extends DeepPartial<E> & IId>(entity: T): Promise<E>;
8
+ count(options: FindOptionsWhere<E>): Promise<number>;
9
+ }
10
+ export declare class GenericRepository<E extends ObjectLiteral> implements IGenericRepository<E> {
11
+ readonly entityManager: EntityManager;
12
+ protected repository: Repository<E>;
13
+ constructor(entityManager: EntityManager, entity: EntityTarget<E>);
14
+ save<T extends DeepPartial<E>>(entity: T): Promise<E>;
15
+ update<T extends DeepPartial<E> & IId>(dto: T): Promise<E>;
16
+ count(options: FindOptionsWhere<E>): Promise<number>;
17
+ }
18
+ export {};
@@ -0,0 +1,43 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.GenericRepository = void 0;
13
+ const typeorm_1 = require("typeorm");
14
+ const common_1 = require("@nestjs/common");
15
+ let GenericRepository = class GenericRepository {
16
+ constructor(entityManager, entity) {
17
+ this.entityManager = entityManager;
18
+ this.repository = entityManager.getRepository(entity);
19
+ }
20
+ save(entity) {
21
+ const res = this.repository.create({ ...entity });
22
+ return this.repository.save(res);
23
+ }
24
+ async update(dto) {
25
+ const entity = await this.repository.findOneBy({
26
+ id: (0, typeorm_1.Equal)(dto.id),
27
+ });
28
+ if (!entity) {
29
+ throw new Error('Entity not found');
30
+ }
31
+ const entityUpdated = await this.repository.save({ id: entity.id, ...dto });
32
+ return Object.assign(entity, entityUpdated);
33
+ }
34
+ count(options) {
35
+ return this.repository.count(options);
36
+ }
37
+ };
38
+ exports.GenericRepository = GenericRepository;
39
+ exports.GenericRepository = GenericRepository = __decorate([
40
+ (0, common_1.Injectable)(),
41
+ __metadata("design:paramtypes", [typeorm_1.EntityManager, Object])
42
+ ], GenericRepository);
43
+ //# sourceMappingURL=generic.repository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generic.repository.js","sourceRoot":"","sources":["../../../../src/db/typeorm/generic.repository.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qCAAuH;AACvH,2CAA4C;AAarC,IAAM,iBAAiB,GAAvB,MAAM,iBAAiB;IAG5B,YACW,aAA4B,EACrC,MAAuB;QADd,kBAAa,GAAb,aAAa,CAAe;QAGrC,IAAI,CAAC,UAAU,GAAG,aAAa,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IACxD,CAAC;IACD,IAAI,CAA2B,MAAS;QACtC,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC;QAClD,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACnC,CAAC;IAED,KAAK,CAAC,MAAM,CAAiC,GAAM;QACjD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;YAC7C,EAAE,EAAE,IAAA,eAAK,EAAC,GAAG,CAAC,EAAE,CAAC;SACgB,CAAC,CAAC;QACrC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;QACtC,CAAC;QACD,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC;QAC5E,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAC9C,CAAC;IAED,KAAK,CAAC,OAA4B;QAChC,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACxC,CAAC;CACF,CAAA;AA5BY,8CAAiB;4BAAjB,iBAAiB;IAD7B,IAAA,mBAAU,GAAE;qCAKe,uBAAa;GAJ5B,iBAAiB,CA4B7B"}
@@ -0,0 +1,2 @@
1
+ export declare const GetMeta: (...dataOrPipes: unknown[]) => ParameterDecorator;
2
+ export declare const GetTraceId: (...dataOrPipes: unknown[]) => ParameterDecorator;
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GetTraceId = exports.GetMeta = void 0;
4
+ const common_1 = require("@nestjs/common");
5
+ exports.GetMeta = (0, common_1.createParamDecorator)((data, ctx) => {
6
+ const context = ctx.switchToRpc();
7
+ return context.getContext();
8
+ });
9
+ exports.GetTraceId = (0, common_1.createParamDecorator)((data, ctx) => {
10
+ const context = ctx.switchToRpc();
11
+ const metadata = context.getContext();
12
+ const traceId = metadata.get('traceId')[0];
13
+ return traceId;
14
+ });
15
+ //# sourceMappingURL=utils.decorators.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.decorators.js","sourceRoot":"","sources":["../../../src/decorators/utils.decorators.ts"],"names":[],"mappings":";;;AAAA,2CAAwE;AAS3D,QAAA,OAAO,GAAG,IAAA,6BAAoB,EAAC,CAAC,IAAa,EAAE,GAAqB,EAAE,EAAE;IACnF,MAAM,OAAO,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;IAClC,OAAO,OAAO,CAAC,UAAU,EAAE,CAAC;AAC9B,CAAC,CAAC,CAAC;AAUU,QAAA,UAAU,GAAG,IAAA,6BAAoB,EAAC,CAAC,IAAa,EAAE,GAAqB,EAAE,EAAE;IACtF,MAAM,OAAO,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;IAClC,MAAM,QAAQ,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IACtC,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3C,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { NestInterceptor, ExecutionContext, CallHandler } from '@nestjs/common';
2
+ import { Observable } from 'rxjs';
3
+ import { WinstonLoggerService } from '../modules/logger/winston.service';
4
+ export declare class LogRequestInterceptor implements NestInterceptor {
5
+ private readonly logger;
6
+ constructor(logger: WinstonLoggerService);
7
+ intercept(context: ExecutionContext, next: CallHandler): Observable<any>;
8
+ }
@@ -0,0 +1,42 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.LogRequestInterceptor = void 0;
13
+ const common_1 = require("@nestjs/common");
14
+ const operators_1 = require("rxjs/operators");
15
+ const winston_service_1 = require("../modules/logger/winston.service");
16
+ let LogRequestInterceptor = class LogRequestInterceptor {
17
+ constructor(logger) {
18
+ this.logger = logger;
19
+ }
20
+ intercept(context, next) {
21
+ const req = context.switchToHttp().getRequest();
22
+ this.logger.info('Before Middleware...', {
23
+ traceId: req?.local?.traceId,
24
+ className: 'LogRequestInterceptor',
25
+ });
26
+ const now = Date.now();
27
+ if (req) {
28
+ const method = req.method;
29
+ const url = req.url;
30
+ return next.handle().pipe((0, operators_1.tap)(() => this.logger.info(`After Middleware... ${method} ${url} ${Date.now() - now}ms`, {
31
+ traceId: req?.local?.traceId,
32
+ className: 'LogRequestInterceptor',
33
+ })));
34
+ }
35
+ }
36
+ };
37
+ exports.LogRequestInterceptor = LogRequestInterceptor;
38
+ exports.LogRequestInterceptor = LogRequestInterceptor = __decorate([
39
+ (0, common_1.Injectable)(),
40
+ __metadata("design:paramtypes", [winston_service_1.WinstonLoggerService])
41
+ ], LogRequestInterceptor);
42
+ //# sourceMappingURL=log-request.interceptor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"log-request.interceptor.js","sourceRoot":"","sources":["../../../src/interceptors/log-request.interceptor.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA4F;AAE5F,8CAAqC;AACrC,uEAAyE;AAGlE,IAAM,qBAAqB,GAA3B,MAAM,qBAAqB;IAChC,YAA6B,MAA4B;QAA5B,WAAM,GAAN,MAAM,CAAsB;IAAG,CAAC;IAC7D,SAAS,CAAC,OAAyB,EAAE,IAAiB;QACpD,MAAM,GAAG,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,UAAU,EAAE,CAAC;QAChD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,sBAAsB,EAAE;YACvC,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO;YAC5B,SAAS,EAAE,uBAAuB;SACnC,CAAC,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAEvB,IAAI,GAAG,EAAE,CAAC;YACR,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;YAC1B,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC;YACpB,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CACvB,IAAA,eAAG,EAAC,GAAG,EAAE,CACP,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,uBAAuB,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,EAAE;gBAC7E,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO;gBAC5B,SAAS,EAAE,uBAAuB;aACnC,CAAC,CACH,CACF,CAAC;QACJ,CAAC;IACH,CAAC;CACF,CAAA;AAvBY,sDAAqB;gCAArB,qBAAqB;IADjC,IAAA,mBAAU,GAAE;qCAE0B,sCAAoB;GAD9C,qBAAqB,CAuBjC"}
@@ -0,0 +1,12 @@
1
+ import { NestInterceptor, ExecutionContext, CallHandler } from '@nestjs/common';
2
+ import { Observable } from 'rxjs';
3
+ interface ClassConstructor {
4
+ new (...args: any[]): {};
5
+ }
6
+ export declare function Serialize(dto: ClassConstructor): MethodDecorator & ClassDecorator;
7
+ export declare class SerializeInterceptor implements NestInterceptor {
8
+ private dto;
9
+ constructor(dto: any);
10
+ intercept(context: ExecutionContext, handler: CallHandler): Observable<any>;
11
+ }
12
+ export {};
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SerializeInterceptor = exports.Serialize = void 0;
4
+ const common_1 = require("@nestjs/common");
5
+ const operators_1 = require("rxjs/operators");
6
+ const class_transformer_1 = require("class-transformer");
7
+ function Serialize(dto) {
8
+ return (0, common_1.UseInterceptors)(new SerializeInterceptor(dto));
9
+ }
10
+ exports.Serialize = Serialize;
11
+ class SerializeInterceptor {
12
+ constructor(dto) {
13
+ this.dto = dto;
14
+ }
15
+ intercept(context, handler) {
16
+ return handler.handle().pipe((0, operators_1.map)((data) => {
17
+ return (0, class_transformer_1.plainToInstance)(this.dto, data, {
18
+ excludeExtraneousValues: true,
19
+ });
20
+ }));
21
+ }
22
+ }
23
+ exports.SerializeInterceptor = SerializeInterceptor;
24
+ //# sourceMappingURL=serialize.interceptor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serialize.interceptor.js","sourceRoot":"","sources":["../../../src/interceptors/serialize.interceptor.ts"],"names":[],"mappings":";;;AAAA,2CAAiG;AAEjG,8CAAqC;AACrC,yDAAoD;AAOpD,SAAgB,SAAS,CAAC,GAAqB;IAC7C,OAAO,IAAA,wBAAe,EAAC,IAAI,oBAAoB,CAAC,GAAG,CAAC,CAAC,CAAC;AACxD,CAAC;AAFD,8BAEC;AAED,MAAa,oBAAoB;IAC/B,YAAoB,GAAQ;QAAR,QAAG,GAAH,GAAG,CAAK;IAAG,CAAC;IAEhC,SAAS,CAAC,OAAyB,EAAE,OAAoB;QACvD,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,CAC1B,IAAA,eAAG,EAAC,CAAC,IAAS,EAAE,EAAE;YAChB,OAAO,IAAA,mCAAe,EAAC,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE;gBACrC,uBAAuB,EAAE,IAAI;aAC9B,CAAC,CAAC;QACL,CAAC,CAAC,CACH,CAAC;IACJ,CAAC;CACF;AAZD,oDAYC"}
@@ -0,0 +1 @@
1
+ export declare const TraceLog: () => (target: any, propertyKey: string, descriptor: PropertyDescriptor) => PropertyDescriptor;
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TraceLog = void 0;
4
+ const TraceLog = () => {
5
+ return function (target, propertyKey, descriptor) {
6
+ const originalMethod = descriptor.value;
7
+ descriptor.value = function (message, meta) {
8
+ const traceId = meta?.traceId || 'unknown-trace-id';
9
+ const className = meta.className;
10
+ meta = { ...meta, traceId, className };
11
+ originalMethod.call(this, message, meta);
12
+ };
13
+ return descriptor;
14
+ };
15
+ };
16
+ exports.TraceLog = TraceLog;
17
+ //# sourceMappingURL=winston.decorator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"winston.decorator.js","sourceRoot":"","sources":["../../../../src/modules/logger/winston.decorator.ts"],"names":[],"mappings":";;;AAAO,MAAM,QAAQ,GAAG,GAAG,EAAE;IAC3B,OAAO,UAAU,MAAW,EAAE,WAAmB,EAAE,UAA8B;QAC/E,MAAM,cAAc,GAAG,UAAU,CAAC,KAAK,CAAC;QAExC,UAAU,CAAC,KAAK,GAAG,UAAU,OAAe,EAAE,IAAS;YACrD,MAAM,OAAO,GAAG,IAAI,EAAE,OAAO,IAAI,kBAAkB,CAAC;YACpD,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;YACjC,IAAI,GAAG,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;YACvC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;QAC3C,CAAC,CAAC;QAEF,OAAO,UAAU,CAAC;IACpB,CAAC,CAAC;AACJ,CAAC,CAAC;AAbW,QAAA,QAAQ,YAanB"}
@@ -0,0 +1,21 @@
1
+ import { ElasticsearchTransportOptions } from 'winston-elasticsearch';
2
+ import { DatadogTransportOptions } from 'datadog-winston';
3
+ export interface IWinstonLogger {
4
+ info(message: string, meta?: Record<string, any>): void;
5
+ error(message: string, meta?: Record<string, any>): void;
6
+ warn(message: string, meta?: Record<string, any>): void;
7
+ help(message: string, meta?: Record<string, any>): void;
8
+ data(message: string, meta?: Record<string, any>): void;
9
+ debug(message: string, meta?: Record<string, any>): void;
10
+ prompt(message: string, meta?: Record<string, any>): void;
11
+ http(message: string, meta?: Record<string, any>): void;
12
+ verbose(message: string, meta?: Record<string, any>): void;
13
+ input(message: string, meta?: Record<string, any>): void;
14
+ silly(message: string, meta?: Record<string, any>): void;
15
+ }
16
+ export interface WinstonLoggerModuleOptions {
17
+ transportFile?: boolean;
18
+ transportConsole?: boolean;
19
+ transportElasticsearch?: ElasticsearchTransportOptions;
20
+ transportDatadog?: DatadogTransportOptions;
21
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=winston.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"winston.interface.js","sourceRoot":"","sources":["../../../../src/modules/logger/winston.interface.ts"],"names":[],"mappings":""}
@@ -0,0 +1,4 @@
1
+ import { DynamicModule } from '@nestjs/common';
2
+ export declare class WinstonModule {
3
+ static forRoot(): DynamicModule;
4
+ }
@@ -0,0 +1,95 @@
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 WinstonModule_1;
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.WinstonModule = void 0;
11
+ const common_1 = require("@nestjs/common");
12
+ const winston_1 = require("winston");
13
+ const config_1 = require("@nestjs/config");
14
+ const winston_service_1 = require("./winston.service");
15
+ const winston_elasticsearch_1 = require("winston-elasticsearch");
16
+ const DatadogWinston = require("datadog-winston");
17
+ const myFormat = winston_1.format.printf(({ level = 'info', message, timestamp, err, ...metadata }) => {
18
+ return `${timestamp} [${level}]: ${message} ${err ? err.stack : ''} ${JSON.stringify(metadata)} `;
19
+ });
20
+ let WinstonModule = WinstonModule_1 = class WinstonModule {
21
+ static forRoot() {
22
+ const winstonProvider = {
23
+ provide: 'WINSTON_LOGGER',
24
+ useFactory: (configService) => {
25
+ const transportType = configService.getOrThrow('LOG_TRANSPORTS');
26
+ const transportsArray = transportType.split(',');
27
+ if (transportsArray.length === 0 || transportsArray.every((item) => item.trim() === '')) {
28
+ throw new Error('LOG_TRANSPORTS must contain at least one transport method.');
29
+ }
30
+ const selectedTransport = [];
31
+ for (const iterator of transportsArray) {
32
+ if (iterator === 'elasticsearch') {
33
+ selectedTransport.push(new winston_elasticsearch_1.ElasticsearchTransport({
34
+ clientOpts: {
35
+ node: configService.getOrThrow('ELASTICSEARCH_sURL'),
36
+ },
37
+ }));
38
+ }
39
+ if (iterator === 'datadog') {
40
+ selectedTransport.push(new DatadogWinston({
41
+ apiKey: configService.getOrThrow('DATADOG_APIKEY'),
42
+ hostname: configService.getOrThrow('DATADOG_HOSTNAME'),
43
+ service: configService.getOrThrow('DATADOG_SERVICE'),
44
+ ddsource: configService.getOrThrow('DATADOG_DDSOURCE'),
45
+ ddtags: configService.getOrThrow('DATADOG_DDTAGS'),
46
+ intakeRegion: configService.getOrThrow('DATADOG_INTAKEREGION'),
47
+ }));
48
+ }
49
+ if (iterator === 'file') {
50
+ selectedTransport.push(new winston_1.transports.File({
51
+ filename: 'logs/error.log',
52
+ level: 'error',
53
+ format: winston_1.format.combine(winston_1.format.timestamp(), winston_1.format.json()),
54
+ }), new winston_1.transports.File({
55
+ filename: 'logs/combined.log',
56
+ format: winston_1.format.combine(winston_1.format.timestamp(), winston_1.format.json(), myFormat),
57
+ }));
58
+ }
59
+ if (iterator === 'console') {
60
+ selectedTransport.push(new winston_1.transports.Console({
61
+ format: winston_1.format.combine(winston_1.format.colorize(), winston_1.format.splat(), winston_1.format.errors({ stack: true }), winston_1.format.json(), winston_1.format.timestamp({
62
+ format: 'YYYY-MM-DD HH:mm:ss',
63
+ }), myFormat),
64
+ }));
65
+ }
66
+ }
67
+ return (0, winston_1.createLogger)({
68
+ level: configService.get('LOG_LEVEL') || 'info',
69
+ defaultMeta: {
70
+ service: configService.getOrThrow('NAME_SERVICE'),
71
+ },
72
+ transports: selectedTransport,
73
+ });
74
+ },
75
+ inject: [config_1.ConfigService],
76
+ };
77
+ const loggerServiceProvider = {
78
+ provide: winston_service_1.WinstonLoggerService,
79
+ useFactory: (logger) => new winston_service_1.WinstonLoggerService(logger),
80
+ inject: ['WINSTON_LOGGER'],
81
+ };
82
+ return {
83
+ module: WinstonModule_1,
84
+ imports: [config_1.ConfigModule],
85
+ providers: [winstonProvider, loggerServiceProvider],
86
+ exports: [winstonProvider, loggerServiceProvider],
87
+ };
88
+ }
89
+ };
90
+ exports.WinstonModule = WinstonModule;
91
+ exports.WinstonModule = WinstonModule = WinstonModule_1 = __decorate([
92
+ (0, common_1.Global)(),
93
+ (0, common_1.Module)({})
94
+ ], WinstonModule);
95
+ //# sourceMappingURL=winston.module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"winston.module.js","sourceRoot":"","sources":["../../../../src/modules/logger/winston.module.ts"],"names":[],"mappings":"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"}