@viplance/nestjs-logger 0.3.6 → 0.3.8

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 (36) hide show
  1. package/README.md +1 -1
  2. package/dist/entities/log.entity.d.ts +2 -2
  3. package/dist/entities/log.entity.js +3 -2
  4. package/dist/entities/log.entity.js.map +1 -1
  5. package/dist/guards/access.guard.d.ts +4 -0
  6. package/dist/guards/access.guard.js +32 -0
  7. package/dist/guards/access.guard.js.map +1 -0
  8. package/dist/index.d.ts +1 -1
  9. package/dist/index.js +1 -1
  10. package/dist/index.js.map +1 -1
  11. package/dist/interceptors/log.interceptor.d.ts +9 -0
  12. package/dist/interceptors/log.interceptor.js +43 -0
  13. package/dist/interceptors/log.interceptor.js.map +1 -0
  14. package/dist/log.module.js +18 -9
  15. package/dist/log.module.js.map +1 -1
  16. package/dist/services/log.service.d.ts +2 -0
  17. package/dist/services/log.service.js +28 -9
  18. package/dist/services/log.service.js.map +1 -1
  19. package/dist/services/memory-db.service.d.ts +1 -0
  20. package/dist/services/memory-db.service.js +5 -0
  21. package/dist/services/memory-db.service.js.map +1 -1
  22. package/dist/utils/entity2table.d.ts +2 -0
  23. package/dist/utils/entity2table.js +35 -0
  24. package/dist/utils/entity2table.js.map +1 -0
  25. package/package.json +6 -1
  26. package/public/scripts/common.js +34 -1
  27. package/public/scripts/details-popup.js +20 -5
  28. package/public/styles/index.css +2 -0
  29. package/src/entities/log.entity.ts +7 -3
  30. package/src/guards/access.guard.ts +25 -0
  31. package/src/index.ts +1 -1
  32. package/src/{log.interceptor.ts → interceptors/log.interceptor.ts} +1 -1
  33. package/src/log.module.ts +26 -8
  34. package/src/services/log.service.ts +30 -5
  35. package/src/services/memory-db.service.ts +7 -0
  36. package/src/utils/entity2table.ts +33 -0
package/README.md CHANGED
@@ -66,4 +66,4 @@ Connect the database to store logs.<br />
66
66
  - warn(message: string)
67
67
  - debug(message: string)
68
68
  - verbose(message: string)
69
- - addBreadcrumb(any)
69
+ - addBreadcrumb(breadcrumb: any)
@@ -1,5 +1,5 @@
1
- import { EntitySchema } from "typeorm";
2
- export declare function createLogEntity(name: string): EntitySchema<{
1
+ import { DataSourceOptions, EntitySchema } from "typeorm";
2
+ export declare function createLogEntity(name: string, dbType: DataSourceOptions["type"] | "memory"): EntitySchema<{
3
3
  _id: unknown;
4
4
  type: unknown;
5
5
  message: unknown;
@@ -2,14 +2,15 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.createLogEntity = createLogEntity;
4
4
  const typeorm_1 = require("typeorm");
5
- function createLogEntity(name) {
5
+ function createLogEntity(name, dbType) {
6
6
  return new typeorm_1.EntitySchema({
7
7
  name,
8
8
  columns: {
9
9
  _id: {
10
- type: String,
10
+ type: dbType === "mongodb" ? String : Number,
11
11
  objectId: true,
12
12
  primary: true,
13
+ generated: true,
13
14
  },
14
15
  type: { type: String },
15
16
  message: { type: String },
@@ -1 +1 @@
1
- {"version":3,"file":"log.entity.js","sourceRoot":"","sources":["../../src/entities/log.entity.ts"],"names":[],"mappings":";;AAEA,0CAmBC;AArBD,qCAAuC;AAEvC,SAAgB,eAAe,CAAC,IAAY;IAC1C,OAAO,IAAI,sBAAY,CAAC;QACtB,IAAI;QACJ,OAAO,EAAE;YACP,GAAG,EAAE;gBACH,IAAI,EAAE,MAAM;gBACZ,QAAQ,EAAE,IAAI;gBACd,OAAO,EAAE,IAAI;aACd;YACD,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;YACtB,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;YACzB,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE;YACnC,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE;YACzC,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE;YACvC,WAAW,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE;YAC7C,SAAS,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE;YACzB,SAAS,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE;SAC1B;KACF,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"log.entity.js","sourceRoot":"","sources":["../../src/entities/log.entity.ts"],"names":[],"mappings":";;AAEA,0CAuBC;AAzBD,qCAA0D;AAE1D,SAAgB,eAAe,CAC7B,IAAY,EACZ,MAA4C;IAE5C,OAAO,IAAI,sBAAY,CAAC;QACtB,IAAI;QACJ,OAAO,EAAE;YACP,GAAG,EAAE;gBACH,IAAI,EAAE,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;gBAC5C,QAAQ,EAAE,IAAI;gBACd,OAAO,EAAE,IAAI;gBACb,SAAS,EAAE,IAAI;aAChB;YACD,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;YACtB,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;YACzB,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE;YACnC,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE;YACzC,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE;YACvC,WAAW,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE;YAC7C,SAAS,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE;YACzB,SAAS,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE;SAC1B;KACF,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { CanActivate, ExecutionContext } from "@nestjs/common";
2
+ export declare class LogAccessGuard implements CanActivate {
3
+ canActivate(context: ExecutionContext): boolean;
4
+ }
@@ -0,0 +1,32 @@
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 __importDefault = (this && this.__importDefault) || function (mod) {
9
+ return (mod && mod.__esModule) ? mod : { "default": mod };
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.LogAccessGuard = void 0;
13
+ const common_1 = require("@nestjs/common");
14
+ const log_service_1 = require("../services/log.service");
15
+ const node_querystring_1 = __importDefault(require("node:querystring"));
16
+ let LogAccessGuard = class LogAccessGuard {
17
+ canActivate(context) {
18
+ const req = !!context.switchToHttp
19
+ ? context.switchToHttp().getRequest()
20
+ : context; // hook for using as method
21
+ const params = node_querystring_1.default.parse(req.url.split("?")[1]);
22
+ if (log_service_1.LogService.options.key && params.key !== log_service_1.LogService.options.key) {
23
+ throw new common_1.HttpException("Unauthorized", 401);
24
+ }
25
+ return true;
26
+ }
27
+ };
28
+ exports.LogAccessGuard = LogAccessGuard;
29
+ exports.LogAccessGuard = LogAccessGuard = __decorate([
30
+ (0, common_1.Injectable)()
31
+ ], LogAccessGuard);
32
+ //# sourceMappingURL=access.guard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"access.guard.js","sourceRoot":"","sources":["../../src/guards/access.guard.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAKwB;AACxB,yDAAqD;AACrD,wEAA2C;AAGpC,IAAM,cAAc,GAApB,MAAM,cAAc;IACzB,WAAW,CAAC,OAAyB;QACnC,MAAM,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,YAAY;YAChC,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,UAAU,EAAE;YACrC,CAAC,CAAC,OAAO,CAAC,CAAC,2BAA2B;QAExC,MAAM,MAAM,GAAG,0BAAW,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAExD,IAAI,wBAAU,CAAC,OAAO,CAAC,GAAG,IAAI,MAAM,CAAC,GAAG,KAAK,wBAAU,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;YACpE,MAAM,IAAI,sBAAa,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;QAC/C,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;CACF,CAAA;AAdY,wCAAc;yBAAd,cAAc;IAD1B,IAAA,mBAAU,GAAE;GACA,cAAc,CAc1B"}
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- export * from "./log.interceptor";
1
+ export * from "./interceptors/log.interceptor";
2
2
  export * from "./log.module";
3
3
  export * from "./types/index";
4
4
  export * from "./services/log.service";
package/dist/index.js CHANGED
@@ -14,7 +14,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./log.interceptor"), exports);
17
+ __exportStar(require("./interceptors/log.interceptor"), exports);
18
18
  __exportStar(require("./log.module"), exports);
19
19
  __exportStar(require("./types/index"), exports);
20
20
  __exportStar(require("./services/log.service"), exports);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,oDAAkC;AAClC,+CAA6B;AAC7B,gDAA8B;AAC9B,yDAAuC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,iEAA+C;AAC/C,+CAA6B;AAC7B,gDAA8B;AAC9B,yDAAuC"}
@@ -0,0 +1,9 @@
1
+ import type { CallHandler, NestInterceptor } from "@nestjs/common";
2
+ import { Observable } from "rxjs";
3
+ import { LogService } from "../services/log.service";
4
+ import { ExecutionContextHost } from "@nestjs/core/helpers/execution-context-host";
5
+ export declare class LogInterceptor implements NestInterceptor {
6
+ private readonly logService;
7
+ constructor(logService: LogService);
8
+ intercept(context: ExecutionContextHost, next: CallHandler): Observable<any>;
9
+ }
@@ -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
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.LogInterceptor = void 0;
16
+ const common_1 = require("@nestjs/common");
17
+ const rxjs_1 = require("rxjs");
18
+ const log_service_1 = require("../services/log.service");
19
+ let LogInterceptor = class LogInterceptor {
20
+ constructor(logService) {
21
+ this.logService = logService;
22
+ }
23
+ intercept(context, next) {
24
+ return next.handle().pipe((0, rxjs_1.tap)({
25
+ error: (error) => {
26
+ var _a, _b;
27
+ (_a = this.logService) === null || _a === void 0 ? void 0 : _a.error(error.message, error.stack, context);
28
+ (_b = this.logService) === null || _b === void 0 ? void 0 : _b.clearBreadcrumbs();
29
+ },
30
+ complete: () => {
31
+ var _a;
32
+ (_a = this.logService) === null || _a === void 0 ? void 0 : _a.clearBreadcrumbs();
33
+ },
34
+ }));
35
+ }
36
+ };
37
+ exports.LogInterceptor = LogInterceptor;
38
+ exports.LogInterceptor = LogInterceptor = __decorate([
39
+ (0, common_1.Injectable)(),
40
+ __param(0, (0, common_1.Inject)(log_service_1.LogService)),
41
+ __metadata("design:paramtypes", [log_service_1.LogService])
42
+ ], LogInterceptor);
43
+ //# sourceMappingURL=log.interceptor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"log.interceptor.js","sourceRoot":"","sources":["../../src/interceptors/log.interceptor.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AACA,2CAAoD;AACpD,+BAAuC;AACvC,yDAAqD;AAI9C,IAAM,cAAc,GAApB,MAAM,cAAc;IACzB,YAAiD,UAAsB;QAAtB,eAAU,GAAV,UAAU,CAAY;IAAG,CAAC;IAE3E,SAAS,CAAC,OAA6B,EAAE,IAAiB;QACxD,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CACvB,IAAA,UAAG,EAAC;YACF,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE;;gBACf,MAAA,IAAI,CAAC,UAAU,0CAAE,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;gBAC5D,MAAA,IAAI,CAAC,UAAU,0CAAE,gBAAgB,EAAE,CAAC;YACtC,CAAC;YACD,QAAQ,EAAE,GAAG,EAAE;;gBACb,MAAA,IAAI,CAAC,UAAU,0CAAE,gBAAgB,EAAE,CAAC;YACtC,CAAC;SACF,CAAC,CACH,CAAC;IACJ,CAAC;CACF,CAAA;AAhBY,wCAAc;yBAAd,cAAc;IAD1B,IAAA,mBAAU,GAAE;IAEE,WAAA,IAAA,eAAM,EAAC,wBAAU,CAAC,CAAA;qCAA8B,wBAAU;GAD5D,cAAc,CAgB1B"}
@@ -13,31 +13,40 @@ exports.LogModule = void 0;
13
13
  const common_1 = require("@nestjs/common");
14
14
  const log_service_1 = require("./services/log.service");
15
15
  const memory_db_service_1 = require("./services/memory-db.service");
16
- const log_interceptor_1 = require("./log.interceptor");
16
+ const log_interceptor_1 = require("./interceptors/log.interceptor");
17
17
  const typeorm_1 = require("@nestjs/typeorm");
18
18
  const node_querystring_1 = __importDefault(require("node:querystring"));
19
19
  const core_1 = require("@nestjs/core");
20
20
  const node_path_1 = require("node:path");
21
+ const access_guard_1 = require("./guards/access.guard");
21
22
  let LogModule = class LogModule {
22
23
  static async init(app, options) {
23
24
  app.resolve(log_service_1.LogService);
24
25
  const logService = await app.resolve(log_service_1.LogService);
26
+ const logAccessGuard = await app.get(access_guard_1.LogAccessGuard);
27
+ if (options) {
28
+ logService.setOptions(options);
29
+ }
25
30
  app.useGlobalInterceptors(new log_interceptor_1.LogInterceptor(logService)); // intercept all errors
26
31
  if (options === null || options === void 0 ? void 0 : options.path) {
27
32
  app.useStaticAssets((0, node_path_1.join)(__dirname, "..", "public"), {
28
33
  prefix: options.path,
29
34
  });
30
35
  const httpAdapter = app.getHttpAdapter();
36
+ // get all logs endpoint
31
37
  httpAdapter.get((0, node_path_1.join)(options.path, "api"), async (req, res) => {
32
- var _a;
33
- if ((_a = log_service_1.LogService.options) === null || _a === void 0 ? void 0 : _a.key) {
34
- const params = node_querystring_1.default.parse(req.url.split("?")[1]);
35
- if (params.key && params.key !== log_service_1.LogService.options.key) {
36
- throw new common_1.HttpException("Unauthorized", 401);
37
- }
38
- }
38
+ logAccessGuard.canActivate(req);
39
39
  res.json(await logService.getAll());
40
40
  });
41
+ // delete log endpoint
42
+ httpAdapter.delete((0, node_path_1.join)(options.path, "api"), async (req, res) => {
43
+ logAccessGuard.canActivate(req);
44
+ const params = node_querystring_1.default.parse(req.url.split("?")[1]);
45
+ if (!params.id) {
46
+ throw new common_1.HttpException("id is required", 400);
47
+ }
48
+ res.json(await logService.delete(params.id.toString()));
49
+ });
41
50
  }
42
51
  if (options === null || options === void 0 ? void 0 : options.database) {
43
52
  await logService.connectDb(options);
@@ -49,7 +58,7 @@ exports.LogModule = LogModule = __decorate([
49
58
  (0, common_1.Global)(),
50
59
  (0, common_1.Module)({
51
60
  imports: [typeorm_1.TypeOrmModule],
52
- providers: [core_1.ApplicationConfig, log_service_1.LogService, memory_db_service_1.MemoryDbService],
61
+ providers: [core_1.ApplicationConfig, access_guard_1.LogAccessGuard, log_service_1.LogService, memory_db_service_1.MemoryDbService],
53
62
  exports: [typeorm_1.TypeOrmModule, log_service_1.LogService, memory_db_service_1.MemoryDbService],
54
63
  })
55
64
  ], LogModule);
@@ -1 +1 @@
1
- {"version":3,"file":"log.module.js","sourceRoot":"","sources":["../src/log.module.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA+D;AAC/D,wDAAoD;AACpD,oEAA+D;AAC/D,uDAAmD;AAEnD,6CAAgD;AAChD,wEAA2C;AAC3C,uCAAiD;AACjD,yCAAiC;AAQ1B,IAAM,SAAS,GAAf,MAAM,SAAS;IACb,MAAM,CAAC,KAAK,CAAC,IAAI,CACtB,GAAQ,EACR,OAA0B;QAE1B,GAAG,CAAC,OAAO,CAAC,wBAAU,CAAC,CAAC;QAExB,MAAM,UAAU,GAAe,MAAM,GAAG,CAAC,OAAO,CAAC,wBAAU,CAAC,CAAC;QAE7D,GAAG,CAAC,qBAAqB,CAAC,IAAI,gCAAc,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,uBAAuB;QAElF,IAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,IAAI,EAAE,CAAC;YAClB,GAAG,CAAC,eAAe,CAAC,IAAA,gBAAI,EAAC,SAAS,EAAE,IAAI,EAAE,QAAQ,CAAC,EAAE;gBACnD,MAAM,EAAE,OAAO,CAAC,IAAI;aACrB,CAAC,CAAC;YAEH,MAAM,WAAW,GAAG,GAAG,CAAC,cAAc,EAAE,CAAC;YACzC,WAAW,CAAC,GAAG,CAAC,IAAA,gBAAI,EAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,KAAK,EAAE,GAAQ,EAAE,GAAQ,EAAE,EAAE;;gBACtE,IAAI,MAAA,wBAAU,CAAC,OAAO,0CAAE,GAAG,EAAE,CAAC;oBAC5B,MAAM,MAAM,GAAG,0BAAW,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBAExD,IAAI,MAAM,CAAC,GAAG,IAAI,MAAM,CAAC,GAAG,KAAK,wBAAU,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;wBACxD,MAAM,IAAI,sBAAa,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;oBAC/C,CAAC;gBACH,CAAC;gBAED,GAAG,CAAC,IAAI,CAAC,MAAM,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;YACtC,CAAC,CAAC,CAAC;QACL,CAAC;QAED,IAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,QAAQ,EAAE,CAAC;YACtB,MAAM,UAAU,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;CACF,CAAA;AAlCY,8BAAS;oBAAT,SAAS;IANrB,IAAA,eAAM,GAAE;IACR,IAAA,eAAM,EAAC;QACN,OAAO,EAAE,CAAC,uBAAa,CAAC;QACxB,SAAS,EAAE,CAAC,wBAAiB,EAAE,wBAAU,EAAE,mCAAe,CAAC;QAC3D,OAAO,EAAE,CAAC,uBAAa,EAAE,wBAAU,EAAE,mCAAe,CAAC;KACtD,CAAC;GACW,SAAS,CAkCrB"}
1
+ {"version":3,"file":"log.module.js","sourceRoot":"","sources":["../src/log.module.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA+D;AAC/D,wDAAoD;AACpD,oEAA+D;AAC/D,oEAAgE;AAEhE,6CAAgD;AAChD,wEAA2C;AAC3C,uCAAiD;AACjD,yCAAiC;AACjC,wDAAuD;AAQhD,IAAM,SAAS,GAAf,MAAM,SAAS;IACb,MAAM,CAAC,KAAK,CAAC,IAAI,CACtB,GAAQ,EACR,OAA0B;QAE1B,GAAG,CAAC,OAAO,CAAC,wBAAU,CAAC,CAAC;QAExB,MAAM,UAAU,GAAe,MAAM,GAAG,CAAC,OAAO,CAAC,wBAAU,CAAC,CAAC;QAC7D,MAAM,cAAc,GAAmB,MAAM,GAAG,CAAC,GAAG,CAAC,6BAAc,CAAC,CAAC;QAErE,IAAI,OAAO,EAAE,CAAC;YACZ,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QACjC,CAAC;QAED,GAAG,CAAC,qBAAqB,CAAC,IAAI,gCAAc,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,uBAAuB;QAElF,IAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,IAAI,EAAE,CAAC;YAClB,GAAG,CAAC,eAAe,CAAC,IAAA,gBAAI,EAAC,SAAS,EAAE,IAAI,EAAE,QAAQ,CAAC,EAAE;gBACnD,MAAM,EAAE,OAAO,CAAC,IAAI;aACrB,CAAC,CAAC;YAEH,MAAM,WAAW,GAAG,GAAG,CAAC,cAAc,EAAE,CAAC;YAEzC,wBAAwB;YACxB,WAAW,CAAC,GAAG,CAAC,IAAA,gBAAI,EAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,KAAK,EAAE,GAAQ,EAAE,GAAQ,EAAE,EAAE;gBACtE,cAAc,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;gBAEhC,GAAG,CAAC,IAAI,CAAC,MAAM,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;YACtC,CAAC,CAAC,CAAC;YAEH,sBAAsB;YACtB,WAAW,CAAC,MAAM,CAChB,IAAA,gBAAI,EAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,EACzB,KAAK,EAAE,GAAQ,EAAE,GAAQ,EAAE,EAAE;gBAC3B,cAAc,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;gBAEhC,MAAM,MAAM,GAAG,0BAAW,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAExD,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;oBACf,MAAM,IAAI,sBAAa,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC;gBACjD,CAAC;gBAED,GAAG,CAAC,IAAI,CAAC,MAAM,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;YAC1D,CAAC,CACF,CAAC;QACJ,CAAC;QAED,IAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,QAAQ,EAAE,CAAC;YACtB,MAAM,UAAU,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;CACF,CAAA;AAnDY,8BAAS;oBAAT,SAAS;IANrB,IAAA,eAAM,GAAE;IACR,IAAA,eAAM,EAAC;QACN,OAAO,EAAE,CAAC,uBAAa,CAAC;QACxB,SAAS,EAAE,CAAC,wBAAiB,EAAE,6BAAc,EAAE,wBAAU,EAAE,mCAAe,CAAC;QAC3E,OAAO,EAAE,CAAC,uBAAa,EAAE,wBAAU,EAAE,mCAAe,CAAC;KACtD,CAAC;GACW,SAAS,CAmDrB"}
@@ -13,6 +13,7 @@ export declare class LogService implements LoggerService {
13
13
  breadcrumbs: any[];
14
14
  constructor(memoryDbService: MemoryDbService);
15
15
  connectDb(options: LogModuleOptions): Promise<DataSource>;
16
+ setOptions(options: LogModuleOptions): void;
16
17
  addBreadcrumb(breadcrumb: any): void;
17
18
  clearBreadcrumbs(): void;
18
19
  log(message: string, context?: ExecutionContextHost): void;
@@ -21,6 +22,7 @@ export declare class LogService implements LoggerService {
21
22
  debug(message: string, context?: ExecutionContextHost): void;
22
23
  verbose(message: string, context?: ExecutionContextHost): void;
23
24
  getAll(): Promise<any[]>;
25
+ delete(id: string): Promise<import("typeorm").DeleteResult>;
24
26
  private smartInsert;
25
27
  private getConnection;
26
28
  private parseContext;
@@ -18,30 +18,46 @@ const types_1 = require("../types");
18
18
  const typeorm_1 = require("typeorm");
19
19
  const log_entity_1 = require("../entities/log.entity");
20
20
  const timers_1 = require("timers");
21
+ const entity2table_1 = require("../utils/entity2table");
21
22
  let LogService = LogService_1 = class LogService {
22
23
  constructor(memoryDbService) {
23
24
  this.memoryDbService = memoryDbService;
24
25
  this.breadcrumbs = [];
25
26
  }
26
27
  async connectDb(options) {
27
- var _a, _b, _c, _d, _e, _f;
28
- LogService_1.Log = (0, log_entity_1.createLogEntity)(((_a = options.database) === null || _a === void 0 ? void 0 : _a.collection) || ((_b = options.database) === null || _b === void 0 ? void 0 : _b.table) || defaults_1.defaultTable);
29
- LogService_1.options = options;
28
+ var _a, _b, _c, _d, _e, _f, _g;
29
+ LogService_1.Log = (0, log_entity_1.createLogEntity)(((_a = options.database) === null || _a === void 0 ? void 0 : _a.collection) || ((_b = options.database) === null || _b === void 0 ? void 0 : _b.table) || defaults_1.defaultTable, ((_c = options.database) === null || _c === void 0 ? void 0 : _c.type) || "mongodb");
30
+ this.setOptions(options);
30
31
  const dataSourceOptions = {
31
- type: (_c = options.database) === null || _c === void 0 ? void 0 : _c.type,
32
- database: (_d = options.database) === null || _d === void 0 ? void 0 : _d.database,
33
- host: (_e = options.database) === null || _e === void 0 ? void 0 : _e.host,
34
- port: (_f = options.database) === null || _f === void 0 ? void 0 : _f.port,
32
+ type: (_d = options.database) === null || _d === void 0 ? void 0 : _d.type,
33
+ database: (_e = options.database) === null || _e === void 0 ? void 0 : _e.database,
34
+ host: (_f = options.database) === null || _f === void 0 ? void 0 : _f.host,
35
+ port: (_g = options.database) === null || _g === void 0 ? void 0 : _g.port,
35
36
  entities: [LogService_1.Log],
36
37
  };
37
38
  LogService_1.connection = new typeorm_1.DataSource(dataSourceOptions);
38
39
  await LogService_1.connection.initialize();
40
+ if (dataSourceOptions.type !== "mongodb") {
41
+ // LogService.idName = "id";
42
+ const queryRunner = LogService_1.connection.createQueryRunner();
43
+ try {
44
+ await queryRunner.connect();
45
+ const table = (0, entity2table_1.entity2table)(LogService_1.Log);
46
+ await queryRunner.createTable(table, true);
47
+ }
48
+ finally {
49
+ await queryRunner.release();
50
+ }
51
+ }
39
52
  if (LogService_1.timer) {
40
53
  clearInterval(LogService_1.timer);
41
54
  }
42
55
  LogService_1.timer = (0, timers_1.setInterval)(this.checkRecords, 1000 * 60 * 60); // check one time per hour
43
56
  return LogService_1.connection;
44
57
  }
58
+ setOptions(options) {
59
+ LogService_1.options = options;
60
+ }
45
61
  addBreadcrumb(breadcrumb) {
46
62
  this.breadcrumbs.push(breadcrumb);
47
63
  }
@@ -100,6 +116,9 @@ let LogService = LogService_1 = class LogService {
100
116
  order: { updatedAt: "DESC" },
101
117
  });
102
118
  }
119
+ async delete(id) {
120
+ return this.getConnection().delete(LogService_1.Log, id);
121
+ }
103
122
  async smartInsert(data) {
104
123
  const currentDate = new Date();
105
124
  const connection = this.getConnection();
@@ -112,7 +131,7 @@ let LogService = LogService_1 = class LogService {
112
131
  });
113
132
  const context = data.context ? this.parseContext(data.context) : undefined;
114
133
  if (log) {
115
- return await connection.update(LogService_1.Log, log._id, {
134
+ return await connection.update(LogService_1.Log, log["_id"], {
116
135
  context,
117
136
  trace: data.trace,
118
137
  breadcrumbs: this.breadcrumbs,
@@ -181,7 +200,7 @@ let LogService = LogService_1 = class LogService {
181
200
  }
182
201
  };
183
202
  exports.LogService = LogService;
184
- LogService.Log = (0, log_entity_1.createLogEntity)(defaults_1.defaultTable);
203
+ LogService.Log = (0, log_entity_1.createLogEntity)(defaults_1.defaultTable, "memory");
185
204
  exports.LogService = LogService = LogService_1 = __decorate([
186
205
  (0, common_1.Injectable)({ scope: common_1.Scope.TRANSIENT }),
187
206
  __metadata("design:paramtypes", [memory_db_service_1.MemoryDbService])
@@ -1 +1 @@
1
- {"version":3,"file":"log.service.js","sourceRoot":"","sources":["../../src/services/log.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"log.service.js","sourceRoot":"","sources":["../../src/services/log.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,2CAAkE;AAClE,2DAAsD;AACtD,0CAA2C;AAC3C,oCAA8D;AAC9D,qCAKiB;AACjB,uDAAyD;AAEzD,mCAAqC;AACrC,wDAAqD;AAG9C,IAAM,UAAU,kBAAhB,MAAM,UAAU;IAQrB,YAA6B,eAAgC;QAAhC,oBAAe,GAAf,eAAe,CAAiB;QAF7D,gBAAW,GAAU,EAAE,CAAC;IAEwC,CAAC;IAEjE,KAAK,CAAC,SAAS,CAAC,OAAyB;;QACvC,YAAU,CAAC,GAAG,GAAG,IAAA,4BAAe,EAC9B,CAAA,MAAA,OAAO,CAAC,QAAQ,0CAAE,UAAU,MAAI,MAAA,OAAO,CAAC,QAAQ,0CAAE,KAAK,CAAA,IAAI,uBAAY,EACvE,CAAA,MAAA,OAAO,CAAC,QAAQ,0CAAE,IAAI,KAAI,SAAS,CACpC,CAAC;QAEF,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QAEzB,MAAM,iBAAiB,GAAG;YACxB,IAAI,EAAE,MAAA,OAAO,CAAC,QAAQ,0CAAE,IAAI;YAC5B,QAAQ,EAAE,MAAA,OAAO,CAAC,QAAQ,0CAAE,QAAQ;YACpC,IAAI,EAAE,MAAA,OAAO,CAAC,QAAQ,0CAAE,IAAI;YAC5B,IAAI,EAAE,MAAA,OAAO,CAAC,QAAQ,0CAAE,IAAI;YAC5B,QAAQ,EAAE,CAAC,YAAU,CAAC,GAAG,CAAC;SACN,CAAC;QAEvB,YAAU,CAAC,UAAU,GAAG,IAAI,oBAAU,CAAC,iBAAiB,CAAC,CAAC;QAC1D,MAAM,YAAU,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC;QAEzC,IAAI,iBAAiB,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YACzC,4BAA4B;YAE5B,MAAM,WAAW,GAAG,YAAU,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC;YAE9D,IAAI,CAAC;gBACH,MAAM,WAAW,CAAC,OAAO,EAAE,CAAC;gBAE5B,MAAM,KAAK,GAAG,IAAA,2BAAY,EAAC,YAAU,CAAC,GAAG,CAAC,CAAC;gBAE3C,MAAM,WAAW,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YAC7C,CAAC;oBAAS,CAAC;gBACT,MAAM,WAAW,CAAC,OAAO,EAAE,CAAC;YAC9B,CAAC;QACH,CAAC;QAED,IAAI,YAAU,CAAC,KAAK,EAAE,CAAC;YACrB,aAAa,CAAC,YAAU,CAAC,KAAK,CAAC,CAAC;QAClC,CAAC;QAED,YAAU,CAAC,KAAK,GAAG,IAAA,oBAAW,EAAC,IAAI,CAAC,YAAY,EAAE,IAAI,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,0BAA0B;QAE7F,OAAO,YAAU,CAAC,UAAU,CAAC;IAC/B,CAAC;IAED,UAAU,CAAC,OAAyB;QAClC,YAAU,CAAC,OAAO,GAAG,OAAO,CAAC;IAC/B,CAAC;IAED,aAAa,CAAC,UAAe;QAC3B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACpC,CAAC;IAED,gBAAgB;QACd,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;IACxB,CAAC;IAED,GAAG,CAAC,OAAe,EAAE,OAA8B;QACjD,IAAI,CAAC,WAAW,CAAC;YACf,IAAI,EAAE,eAAO,CAAC,GAAG;YACjB,OAAO;YACP,OAAO;SACR,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,OAAe,EAAE,KAAc,EAAE,OAA8B;QACnE,IAAI,CAAC,WAAW,CAAC;YACf,IAAI,EAAE,eAAO,CAAC,KAAK;YACnB,OAAO;YACP,KAAK;YACL,OAAO;SACR,CAAC,CAAC;IACL,CAAC;IAED,IAAI,CAAC,OAAe,EAAE,OAA8B;QAClD,IAAI,CAAC,WAAW,CAAC;YACf,IAAI,EAAE,eAAO,CAAC,IAAI;YAClB,OAAO;YACP,OAAO;SACR,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,OAAe,EAAE,OAA8B;QACnD,IAAI,CAAC,WAAW,CAAC;YACf,IAAI,EAAE,eAAO,CAAC,KAAK;YACnB,OAAO;YACP,OAAO;SACR,CAAC,CAAC;IACL,CAAC;IAED,OAAO,CAAC,OAAe,EAAE,OAA8B;QACrD,IAAI,CAAC,WAAW,CAAC;YACf,IAAI,EAAE,eAAO,CAAC,OAAO;YACrB,OAAO;YACP,OAAO;SACR,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,MAAM;QACV,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,YAAU,CAAC,GAAG,EAAE;YAC/C,MAAM,EAAE;gBACN,KAAK;gBACL,MAAM;gBACN,SAAS;gBACT,OAAO;gBACP,WAAW;gBACX,WAAW;gBACX,SAAS;gBACT,OAAO;gBACP,aAAa;aACd;YACD,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE;SAC7B,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,EAAU;QACrB,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC,MAAM,CAAC,YAAU,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IACzD,CAAC;IAEO,KAAK,CAAC,WAAW,CAAC,IAKzB;QACC,MAAM,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC;QAE/B,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;QAExC,0BAA0B;QAC1B,MAAM,GAAG,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,YAAU,CAAC,GAAG,EAAE;YACnD,KAAK,EAAE;gBACL,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,OAAO,EAAE,IAAI,CAAC,OAAO;aACtB;SACF,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAE3E,IAAI,GAAG,EAAE,CAAC;YACR,OAAO,MAAM,UAAU,CAAC,MAAM,CAAC,YAAU,CAAC,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC,EAAE;gBACzD,OAAO;gBACP,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,KAAK,EAAE,GAAG,CAAC,KAAK,GAAG,CAAC;gBACpB,SAAS,EAAE,WAAW;aACvB,CAAC,CAAC;QACL,CAAC;QAED,OAAO,MAAM,UAAU,CAAC,MAAM,CAAC,YAAU,CAAC,GAAG,EAAE;YAC7C,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,OAAO;YACP,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,KAAK,EAAE,CAAC;YACR,SAAS,EAAE,WAAW;YACtB,SAAS,EAAE,WAAW;SACvB,CAAC,CAAC;IACL,CAAC;IAEO,aAAa;;QACnB,OAAO,CAAA,MAAA,YAAU,CAAC,UAAU,0CAAE,OAAO,KAAI,IAAI,CAAC,eAAe,CAAC;IAChE,CAAC;IAEO,YAAY,CAAC,OAA6B;QAChD,MAAM,GAAG,GAAqB,EAAE,CAAC;QACjC,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;QAE/B,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;gBACf,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;YAC1B,CAAC;YAED,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC;gBACZ,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC;YACpB,CAAC;YAED,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;gBACf,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;YAC1B,CAAC;YAED,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;gBACb,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;YACtB,CAAC;YAED,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;gBACnB,GAAG,CAAC,UAAU,GAAG,EAAE,CAAC;gBACpB,MAAM,GAAG,GAAG,GAAG,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC;gBAEtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;oBAChC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC5D,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,GAAG,CAAC;IACb,CAAC;IAEO,KAAK,CAAC,YAAY;;QACxB,IAAI,MAAA,YAAU,CAAC,OAAO,0CAAE,OAAO,EAAE,CAAC;YAChC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,YAAU,CAAC,GAAG,EAAE;gBAC7D,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE;gBAC5B,IAAI,EAAE,MAAA,YAAU,CAAC,OAAO,0CAAE,OAAO;gBACjC,MAAM,EAAE,CAAC,KAAK,CAAC;aAChB,CAAC,CAAC;YAEH,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAEhD,MAAM,YAAU,CAAC,UAAU;iBACxB,aAAa,CAAC,YAAU,CAAC,GAAG,CAAC;iBAC7B,kBAAkB,EAAE;iBACpB,MAAM,EAAE;iBACR,IAAI,CAAC,YAAU,CAAC,GAAG,CAAC;iBACpB,KAAK,CAAC,sBAAsB,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC;iBACjD,OAAO,EAAE,CAAC;QACf,CAAC;IACH,CAAC;;AAlOU,gCAAU;AAGd,cAAG,GAAiB,IAAA,4BAAe,EAAC,uBAAY,EAAE,QAAQ,CAAC,AAAxD,CAAyD;qBAHxD,UAAU;IADtB,IAAA,mBAAU,EAAC,EAAE,KAAK,EAAE,cAAK,CAAC,SAAS,EAAE,CAAC;qCASS,mCAAe;GARlD,UAAU,CAmOtB"}
@@ -8,6 +8,7 @@ export declare class MemoryDbService {
8
8
  select?: string[];
9
9
  }): Promise<any[]>;
10
10
  getOneById(entity: EntitySchema, _id: string): Promise<any>;
11
+ delete(entity: EntitySchema, _id: string): Promise<any>;
11
12
  findByProperty(entity: EntitySchema, field: string, value: string): any[];
12
13
  findOne(entity: EntitySchema, condition: {
13
14
  where: any;
@@ -70,6 +70,11 @@ let MemoryDbService = class MemoryDbService {
70
70
  const table = this.getTableName(entity);
71
71
  return Promise.resolve(this.db[table].find((item) => item._id === _id));
72
72
  }
73
+ async delete(entity, _id) {
74
+ const table = this.getTableName(entity);
75
+ this.db[table] = this.db[table].filter((item) => item._id !== _id);
76
+ return Promise.resolve(_id);
77
+ }
73
78
  findByProperty(entity, field, value) {
74
79
  const table = this.getTableName(entity);
75
80
  return this.db[table].filter((item) => item[field] === value);
@@ -1 +1 @@
1
- {"version":3,"file":"memory-db.service.js","sourceRoot":"","sources":["../../src/services/memory-db.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"memory-db.service.js","sourceRoot":"","sources":["../../src/services/memory-db.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { EntitySchema, Table } from "typeorm";
2
+ export declare function entity2table(entity: EntitySchema): Table;
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.entity2table = entity2table;
4
+ const typeorm_1 = require("typeorm");
5
+ const defaults_1 = require("../defaults");
6
+ function entity2table(entity) {
7
+ return new typeorm_1.Table({
8
+ name: entity.options.tableName || defaults_1.defaultTable,
9
+ columns: Object.entries(entity.options.columns).map(([name, col]) => ({
10
+ name,
11
+ type: resolveColumnType(col === null || col === void 0 ? void 0 : col.type),
12
+ isPrimary: !!(col === null || col === void 0 ? void 0 : col.primary),
13
+ isGenerated: !!(col === null || col === void 0 ? void 0 : col.generated),
14
+ generationStrategy: (col === null || col === void 0 ? void 0 : col.generated) ? "increment" : undefined,
15
+ isUnique: !!(col === null || col === void 0 ? void 0 : col.unique),
16
+ isNullable: !!(col === null || col === void 0 ? void 0 : col.nullable),
17
+ default: col === null || col === void 0 ? void 0 : col.default,
18
+ })),
19
+ });
20
+ }
21
+ function resolveColumnType(type) {
22
+ switch (type) {
23
+ case String:
24
+ return "text";
25
+ case Number:
26
+ return "int";
27
+ case Date:
28
+ return "timestamp";
29
+ case Boolean:
30
+ return "boolean";
31
+ default:
32
+ return "text";
33
+ }
34
+ }
35
+ //# sourceMappingURL=entity2table.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entity2table.js","sourceRoot":"","sources":["../../src/utils/entity2table.ts"],"names":[],"mappings":";;AAGA,oCAcC;AAjBD,qCAA8C;AAC9C,0CAA2C;AAE3C,SAAgB,YAAY,CAAC,MAAoB;IAC/C,OAAO,IAAI,eAAK,CAAC;QACf,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,SAAS,IAAI,uBAAY;QAC9C,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;YACpE,IAAI;YACJ,IAAI,EAAE,iBAAiB,CAAC,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,IAAI,CAAC;YAClC,SAAS,EAAE,CAAC,CAAC,CAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,OAAO,CAAA;YACzB,WAAW,EAAE,CAAC,CAAC,CAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,SAAS,CAAA;YAC7B,kBAAkB,EAAE,CAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,SAAS,EAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS;YAC5D,QAAQ,EAAE,CAAC,CAAC,CAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,MAAM,CAAA;YACvB,UAAU,EAAE,CAAC,CAAC,CAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,QAAQ,CAAA;YAC3B,OAAO,EAAE,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,OAAO;SACtB,CAAC,CAAC;KACJ,CAAC,CAAC;AACL,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAS;IAClC,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,MAAM;YACT,OAAO,MAAM,CAAC;QAChB,KAAK,MAAM;YACT,OAAO,KAAK,CAAC;QACf,KAAK,IAAI;YACP,OAAO,WAAW,CAAC;QACrB,KAAK,OAAO;YACV,OAAO,SAAS,CAAC;QACnB;YACE,OAAO,MAAM,CAAC;IAClB,CAAC;AACH,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@viplance/nestjs-logger",
3
- "version": "0.3.6",
3
+ "version": "0.3.8",
4
4
  "description": "NestJS internal logging system",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -13,8 +13,13 @@
13
13
  "nest",
14
14
  "logger",
15
15
  "logs",
16
+ "internal",
16
17
  "typeorm",
17
18
  "mongodb",
19
+ "postgresql",
20
+ "mysql",
21
+ "mariadb",
22
+ "sqlite",
18
23
  "memory",
19
24
  "free"
20
25
  ],
@@ -69,7 +69,14 @@ document.addEventListener(`click`, (e) => {
69
69
  (target.classList?.contains(`row`) && target.id);
70
70
 
71
71
  if (logId) {
72
- const log = logs.find((log) => log._id === logId);
72
+ let id = logId;
73
+
74
+ try {
75
+ if (Number(id) > 0) id = Number(id); // SQL DB numeric index
76
+ } catch (e) {}
77
+
78
+ const log = logs.find((log) => log._id === id);
79
+
73
80
  showLogDetails(log);
74
81
  }
75
82
  });
@@ -160,6 +167,7 @@ function renderLogs() {
160
167
 
161
168
  async function getLogs() {
162
169
  const { origin, pathname, search } = window.location;
170
+
163
171
  const res = await fetch(`${origin}${pathname}api${search}`);
164
172
 
165
173
  if (res.ok) {
@@ -176,6 +184,31 @@ async function getLogs() {
176
184
  }
177
185
 
178
186
  renderLogs();
187
+ } else {
188
+ alert("An error occurred while fetching logs.");
189
+ }
190
+ }
191
+
192
+ async function deleteLog(id) {
193
+ if (!confirm("Are you sure? It can't be undone.")) return;
194
+
195
+ const { origin, pathname, search: searchParams } = window.location;
196
+
197
+ const searchParamsWithId = new URLSearchParams(searchParams);
198
+ searchParamsWithId.set("id", id);
199
+
200
+ const res = await fetch(
201
+ `${origin}${pathname}api?${searchParamsWithId.toString()}`,
202
+ {
203
+ method: "DELETE",
204
+ }
205
+ );
206
+
207
+ if (res.ok) {
208
+ closePopup();
209
+ getLogs();
210
+ } else {
211
+ alert("An error occurred while deleting log.");
179
212
  }
180
213
  }
181
214
 
@@ -1,5 +1,7 @@
1
1
  function showLogDetails(log) {
2
2
  const popup = document.getElementById(`popup`);
3
+ const context = getObject(log.context);
4
+ const breadcrumbs = getObject(log.breadcrumbs);
3
5
 
4
6
  popup.innerHTML = `
5
7
  <div class="content center">
@@ -15,28 +17,41 @@ function showLogDetails(log) {
15
17
  : ""
16
18
  }
17
19
  ${
18
- log.context
20
+ context
19
21
  ? `
20
22
  <h3 class="mt-15">Context</h3>
21
- <p>${jsonViewer(log.context)}</p>
23
+ <p>${jsonViewer(context)}</p>
22
24
  `
23
25
  : ""
24
26
  }
25
27
  ${
26
- log.breadcrumbs && log.breadcrumbs.length > 0
28
+ breadcrumbs && breadcrumbs.length > 0
27
29
  ? `
28
30
  <h3 class="mt-15">Breadcrumbs</h3>
29
- <p>${jsonViewer(log.breadcrumbs)}</p>
31
+ <p>${jsonViewer(breadcrumbs)}</p>
30
32
  `
31
33
  : ""
32
34
  }
33
- <button class="white mt-2" onclick="closePopup()">Close</button>
35
+ <div class="content">
36
+ <button class="white mt-2" onclick="closePopup()">Close</button>
37
+ <button class="light mt-2" onclick="deleteLog('${
38
+ log._id
39
+ }')">Delete</button>
40
+ </div>
34
41
  </div>
35
42
  <div>`;
36
43
 
37
44
  popup.style.display = "block";
38
45
  }
39
46
 
47
+ function getObject(context) {
48
+ if (typeof context === "string") {
49
+ return JSON.parse(context);
50
+ }
51
+
52
+ return context;
53
+ }
54
+
40
55
  function getTrace(trace) {
41
56
  return trace.replace(new RegExp(String.fromCharCode(10), "g"), "<br />");
42
57
  }
@@ -311,6 +311,7 @@ nav ul li:hover {
311
311
  overflow-y: scroll;
312
312
  z-index: 1;
313
313
  opacity: 0.97;
314
+ box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);
314
315
  }
315
316
 
316
317
  /* JSON viewer */
@@ -338,5 +339,6 @@ nav ul li:hover {
338
339
  #popup {
339
340
  width: 100%;
340
341
  left: 0;
342
+ box-shadow: none;
341
343
  }
342
344
  }
@@ -1,13 +1,17 @@
1
- import { EntitySchema } from "typeorm";
1
+ import { DataSourceOptions, EntitySchema } from "typeorm";
2
2
 
3
- export function createLogEntity(name: string) {
3
+ export function createLogEntity(
4
+ name: string,
5
+ dbType: DataSourceOptions["type"] | "memory"
6
+ ) {
4
7
  return new EntitySchema({
5
8
  name,
6
9
  columns: {
7
10
  _id: {
8
- type: String,
11
+ type: dbType === "mongodb" ? String : Number,
9
12
  objectId: true,
10
13
  primary: true,
14
+ generated: true,
11
15
  },
12
16
  type: { type: String },
13
17
  message: { type: String },
@@ -0,0 +1,25 @@
1
+ import {
2
+ CanActivate,
3
+ ExecutionContext,
4
+ HttpException,
5
+ Injectable,
6
+ } from "@nestjs/common";
7
+ import { LogService } from "../services/log.service";
8
+ import querystring from "node:querystring";
9
+
10
+ @Injectable()
11
+ export class LogAccessGuard implements CanActivate {
12
+ canActivate(context: ExecutionContext): boolean {
13
+ const req = !!context.switchToHttp
14
+ ? context.switchToHttp().getRequest()
15
+ : context; // hook for using as method
16
+
17
+ const params = querystring.parse(req.url.split("?")[1]);
18
+
19
+ if (LogService.options.key && params.key !== LogService.options.key) {
20
+ throw new HttpException("Unauthorized", 401);
21
+ }
22
+
23
+ return true;
24
+ }
25
+ }
package/src/index.ts CHANGED
@@ -1,4 +1,4 @@
1
- export * from "./log.interceptor";
1
+ export * from "./interceptors/log.interceptor";
2
2
  export * from "./log.module";
3
3
  export * from "./types/index";
4
4
  export * from "./services/log.service";
@@ -1,7 +1,7 @@
1
1
  import type { CallHandler, NestInterceptor } from "@nestjs/common";
2
2
  import { Inject, Injectable } from "@nestjs/common";
3
3
  import { Observable, tap } from "rxjs";
4
- import { LogService } from "./services/log.service";
4
+ import { LogService } from "../services/log.service";
5
5
  import { ExecutionContextHost } from "@nestjs/core/helpers/execution-context-host";
6
6
 
7
7
  @Injectable()
package/src/log.module.ts CHANGED
@@ -1,17 +1,18 @@
1
1
  import { Module, Global, HttpException } from "@nestjs/common";
2
2
  import { LogService } from "./services/log.service";
3
3
  import { MemoryDbService } from "./services/memory-db.service";
4
- import { LogInterceptor } from "./log.interceptor";
4
+ import { LogInterceptor } from "./interceptors/log.interceptor";
5
5
  import { LogModuleOptions } from "./types";
6
6
  import { TypeOrmModule } from "@nestjs/typeorm";
7
7
  import querystring from "node:querystring";
8
8
  import { ApplicationConfig } from "@nestjs/core";
9
9
  import { join } from "node:path";
10
+ import { LogAccessGuard } from "./guards/access.guard";
10
11
 
11
12
  @Global()
12
13
  @Module({
13
14
  imports: [TypeOrmModule],
14
- providers: [ApplicationConfig, LogService, MemoryDbService],
15
+ providers: [ApplicationConfig, LogAccessGuard, LogService, MemoryDbService],
15
16
  exports: [TypeOrmModule, LogService, MemoryDbService],
16
17
  })
17
18
  export class LogModule {
@@ -22,6 +23,11 @@ export class LogModule {
22
23
  app.resolve(LogService);
23
24
 
24
25
  const logService: LogService = await app.resolve(LogService);
26
+ const logAccessGuard: LogAccessGuard = await app.get(LogAccessGuard);
27
+
28
+ if (options) {
29
+ logService.setOptions(options);
30
+ }
25
31
 
26
32
  app.useGlobalInterceptors(new LogInterceptor(logService)); // intercept all errors
27
33
 
@@ -31,17 +37,29 @@ export class LogModule {
31
37
  });
32
38
 
33
39
  const httpAdapter = app.getHttpAdapter();
40
+
41
+ // get all logs endpoint
34
42
  httpAdapter.get(join(options.path, "api"), async (req: any, res: any) => {
35
- if (LogService.options?.key) {
43
+ logAccessGuard.canActivate(req);
44
+
45
+ res.json(await logService.getAll());
46
+ });
47
+
48
+ // delete log endpoint
49
+ httpAdapter.delete(
50
+ join(options.path, "api"),
51
+ async (req: any, res: any) => {
52
+ logAccessGuard.canActivate(req);
53
+
36
54
  const params = querystring.parse(req.url.split("?")[1]);
37
55
 
38
- if (params.key && params.key !== LogService.options.key) {
39
- throw new HttpException("Unauthorized", 401);
56
+ if (!params.id) {
57
+ throw new HttpException("id is required", 400);
40
58
  }
41
- }
42
59
 
43
- res.json(await logService.getAll());
44
- });
60
+ res.json(await logService.delete(params.id.toString()));
61
+ }
62
+ );
45
63
  }
46
64
 
47
65
  if (options?.database) {
@@ -11,12 +11,13 @@ import {
11
11
  import { createLogEntity } from "../entities/log.entity";
12
12
  import { ExecutionContextHost } from "@nestjs/core/helpers/execution-context-host";
13
13
  import { setInterval } from "timers";
14
+ import { entity2table } from "../utils/entity2table";
14
15
 
15
16
  @Injectable({ scope: Scope.TRANSIENT })
16
17
  export class LogService implements LoggerService {
17
18
  static connection: DataSource;
18
19
  static options: LogModuleOptions;
19
- static Log: EntitySchema = createLogEntity(defaultTable);
20
+ static Log: EntitySchema = createLogEntity(defaultTable, "memory");
20
21
  static timer: ReturnType<typeof setInterval>;
21
22
 
22
23
  breadcrumbs: any[] = [];
@@ -25,10 +26,11 @@ export class LogService implements LoggerService {
25
26
 
26
27
  async connectDb(options: LogModuleOptions): Promise<DataSource> {
27
28
  LogService.Log = createLogEntity(
28
- options.database?.collection || options.database?.table || defaultTable
29
+ options.database?.collection || options.database?.table || defaultTable,
30
+ options.database?.type || "mongodb"
29
31
  );
30
32
 
31
- LogService.options = options;
33
+ this.setOptions(options);
32
34
 
33
35
  const dataSourceOptions = {
34
36
  type: options.database?.type,
@@ -39,9 +41,24 @@ export class LogService implements LoggerService {
39
41
  } as DataSourceOptions;
40
42
 
41
43
  LogService.connection = new DataSource(dataSourceOptions);
42
-
43
44
  await LogService.connection.initialize();
44
45
 
46
+ if (dataSourceOptions.type !== "mongodb") {
47
+ // LogService.idName = "id";
48
+
49
+ const queryRunner = LogService.connection.createQueryRunner();
50
+
51
+ try {
52
+ await queryRunner.connect();
53
+
54
+ const table = entity2table(LogService.Log);
55
+
56
+ await queryRunner.createTable(table, true);
57
+ } finally {
58
+ await queryRunner.release();
59
+ }
60
+ }
61
+
45
62
  if (LogService.timer) {
46
63
  clearInterval(LogService.timer);
47
64
  }
@@ -51,6 +68,10 @@ export class LogService implements LoggerService {
51
68
  return LogService.connection;
52
69
  }
53
70
 
71
+ setOptions(options: LogModuleOptions) {
72
+ LogService.options = options;
73
+ }
74
+
54
75
  addBreadcrumb(breadcrumb: any) {
55
76
  this.breadcrumbs.push(breadcrumb);
56
77
  }
@@ -117,6 +138,10 @@ export class LogService implements LoggerService {
117
138
  });
118
139
  }
119
140
 
141
+ async delete(id: string) {
142
+ return this.getConnection().delete(LogService.Log, id);
143
+ }
144
+
120
145
  private async smartInsert(data: {
121
146
  type: LogType;
122
147
  message: string;
@@ -138,7 +163,7 @@ export class LogService implements LoggerService {
138
163
  const context = data.context ? this.parseContext(data.context) : undefined;
139
164
 
140
165
  if (log) {
141
- return await connection.update(LogService.Log, log._id, {
166
+ return await connection.update(LogService.Log, log["_id"], {
142
167
  context,
143
168
  trace: data.trace,
144
169
  breadcrumbs: this.breadcrumbs,
@@ -92,6 +92,13 @@ export class MemoryDbService {
92
92
  return Promise.resolve(this.db[table].find((item) => item._id === _id));
93
93
  }
94
94
 
95
+ public async delete(entity: EntitySchema, _id: string): Promise<any> {
96
+ const table = this.getTableName(entity);
97
+ this.db[table] = this.db[table].filter((item) => item._id !== _id);
98
+
99
+ return Promise.resolve(_id);
100
+ }
101
+
95
102
  public findByProperty(
96
103
  entity: EntitySchema,
97
104
  field: string,
@@ -0,0 +1,33 @@
1
+ import { EntitySchema, Table } from "typeorm";
2
+ import { defaultTable } from "../defaults";
3
+
4
+ export function entity2table(entity: EntitySchema): Table {
5
+ return new Table({
6
+ name: entity.options.tableName || defaultTable,
7
+ columns: Object.entries(entity.options.columns).map(([name, col]) => ({
8
+ name,
9
+ type: resolveColumnType(col?.type),
10
+ isPrimary: !!col?.primary,
11
+ isGenerated: !!col?.generated,
12
+ generationStrategy: col?.generated ? "increment" : undefined,
13
+ isUnique: !!col?.unique,
14
+ isNullable: !!col?.nullable,
15
+ default: col?.default,
16
+ })),
17
+ });
18
+ }
19
+
20
+ function resolveColumnType(type: any): string {
21
+ switch (type) {
22
+ case String:
23
+ return "text";
24
+ case Number:
25
+ return "int";
26
+ case Date:
27
+ return "timestamp";
28
+ case Boolean:
29
+ return "boolean";
30
+ default:
31
+ return "text";
32
+ }
33
+ }