@viplance/nestjs-logger 0.3.5 → 0.3.7
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.
- package/README.md +1 -1
- package/dist/guards/access.guard.d.ts +4 -0
- package/dist/guards/access.guard.js +32 -0
- package/dist/guards/access.guard.js.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/interceptors/log.interceptor.d.ts +9 -0
- package/dist/interceptors/log.interceptor.js +43 -0
- package/dist/interceptors/log.interceptor.js.map +1 -0
- package/dist/log.module.js +18 -9
- package/dist/log.module.js.map +1 -1
- package/dist/services/log.service.d.ts +2 -0
- package/dist/services/log.service.js +7 -1
- package/dist/services/log.service.js.map +1 -1
- package/dist/services/memory-db.service.d.ts +1 -0
- package/dist/services/memory-db.service.js +5 -0
- package/dist/services/memory-db.service.js.map +1 -1
- package/package.json +1 -1
- package/public/index.html +1 -0
- package/public/scripts/common.js +57 -9
- package/public/scripts/details-popup.js +9 -4
- package/public/scripts/json-viewer.js +1 -1
- package/public/styles/index.css +15 -5
- package/src/guards/access.guard.ts +25 -0
- package/src/index.ts +1 -1
- package/src/{log.interceptor.ts → interceptors/log.interceptor.ts} +1 -1
- package/src/log.module.ts +26 -8
- package/src/services/log.service.ts +9 -1
- package/src/services/memory-db.service.ts +7 -0
package/README.md
CHANGED
|
@@ -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
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,
|
|
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"}
|
package/dist/log.module.js
CHANGED
|
@@ -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
|
-
|
|
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);
|
package/dist/log.module.js.map
CHANGED
|
@@ -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,
|
|
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;
|
|
@@ -26,7 +26,7 @@ let LogService = LogService_1 = class LogService {
|
|
|
26
26
|
async connectDb(options) {
|
|
27
27
|
var _a, _b, _c, _d, _e, _f;
|
|
28
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
|
-
|
|
29
|
+
this.setOptions(options);
|
|
30
30
|
const dataSourceOptions = {
|
|
31
31
|
type: (_c = options.database) === null || _c === void 0 ? void 0 : _c.type,
|
|
32
32
|
database: (_d = options.database) === null || _d === void 0 ? void 0 : _d.database,
|
|
@@ -42,6 +42,9 @@ let LogService = LogService_1 = class LogService {
|
|
|
42
42
|
LogService_1.timer = (0, timers_1.setInterval)(this.checkRecords, 1000 * 60 * 60); // check one time per hour
|
|
43
43
|
return LogService_1.connection;
|
|
44
44
|
}
|
|
45
|
+
setOptions(options) {
|
|
46
|
+
LogService_1.options = options;
|
|
47
|
+
}
|
|
45
48
|
addBreadcrumb(breadcrumb) {
|
|
46
49
|
this.breadcrumbs.push(breadcrumb);
|
|
47
50
|
}
|
|
@@ -100,6 +103,9 @@ let LogService = LogService_1 = class LogService {
|
|
|
100
103
|
order: { updatedAt: "DESC" },
|
|
101
104
|
});
|
|
102
105
|
}
|
|
106
|
+
async delete(id) {
|
|
107
|
+
return this.getConnection().delete(LogService_1.Log, id);
|
|
108
|
+
}
|
|
103
109
|
async smartInsert(data) {
|
|
104
110
|
const currentDate = new Date();
|
|
105
111
|
const connection = this.getConnection();
|
|
@@ -1 +1 @@
|
|
|
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;AAG9B,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,CACxE,CAAC;QAEF,
|
|
1
|
+
{"version":3,"file":"log.service.js","sourceRoot":"","sources":["../../src/services/log.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -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":";;;;;;;;;;;;AAAA,kBAAkB;AAClB,2CAA4C;AAC5C,mCAAiD;AACjD,0CAA2C;AAG3C,MAAM,MAAM,GAAG,CAAC,uBAAY,CAAC,CAAC;AAGvB,IAAM,eAAe,GAArB,MAAM,eAAe;IAG1B;QAFQ,OAAE,GAA6B,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"memory-db.service.js","sourceRoot":"","sources":["../../src/services/memory-db.service.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,kBAAkB;AAClB,2CAA4C;AAC5C,mCAAiD;AACjD,0CAA2C;AAG3C,MAAM,MAAM,GAAG,CAAC,uBAAY,CAAC,CAAC;AAGvB,IAAM,eAAe,GAArB,MAAM,eAAe;IAG1B;QAFQ,OAAE,GAA6B,EAAE,CAAC;QAoJlC,iBAAY,GAAG,CAAC,MAAoB,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;QAjJnE,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QACtB,CAAC;IACH,CAAC;IAEM,MAAM,CAAC,MAAoB,EAAE,IAAS;QAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QAExC,0BAA0B;QAC1B,MAAM,UAAU,GAAG,IAAA,oBAAW,EAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACnD,MAAM,GAAG,GAAG,IAAA,mBAAU,EAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAElE,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC;YAClB,GAAG,IAAI;YACP,GAAG,EAAE,eAAe;SACrB,CAAC,CAAC;QAEH,OAAO,GAAG,CAAC;IACb,CAAC;IAEM,KAAK,CAAC,MAAM,CACjB,MAAoB,EACpB,SAAc,EACd,IAAS;QAET,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QACxC,IAAI,KAAK,GAAkB,IAAI,CAAC;QAEhC,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;YAClC,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;QAChE,CAAC;QAED,IAAI,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,KAAK,EAAE,CAAC;YACrB,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QAC5C,CAAC;QAED,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACnB,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG;gBACtB,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC;gBACxB,GAAG,IAAI;aACR,CAAC;YAEF,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC;QACpD,CAAC;QAED,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC;IAC1B,CAAC;IAEM,KAAK,CAAC,IAAI,CACf,MAAoB,EACpB,OAEC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QAExC,IAAI,UAAU,GAAG,CAAC,GAAQ,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,qCAAqC;QAEzE,IAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,EAAE,CAAC;YACpB,UAAU,GAAG,CAAC,GAAQ,EAAE,EAAE;gBACxB,MAAM,MAAM,GAAQ,EAAE,CAAC;gBAEvB,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC;oBACvC,MAAM,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;gBACzB,CAAC;gBAED,OAAO,MAAM,CAAC;YAChB,CAAC,CAAC;QACJ,CAAC;QAED,OAAO,OAAO,CAAC,OAAO,CACpB,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC,CACzE,CAAC;IACJ,CAAC;IAEM,KAAK,CAAC,UAAU,CAAC,MAAoB,EAAE,GAAW;QACvD,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QAExC,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC;IAC1E,CAAC;IAEM,KAAK,CAAC,MAAM,CAAC,MAAoB,EAAE,GAAW;QACnD,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QACxC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;QAEnE,OAAO,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC9B,CAAC;IAEM,cAAc,CACnB,MAAoB,EACpB,KAAa,EACb,KAAa;QAEb,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QAExC,OAAO,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,CAAC;IAChE,CAAC;IAEM,OAAO,CACZ,MAAoB,EACpB,SAAyB;QAEzB,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QAExC,OAAO,OAAO,CAAC,OAAO,CACpB,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CACxE,CAAC;IACJ,CAAC;IAEO,SAAS,CAAC,MAAoB,EAAE,SAAyB;QAC/D,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QAExC,OAAO,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CACvC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,CACzC,CAAC;IACJ,CAAC;IAEO,YAAY,CAAC,IAAS,EAAE,IAAS;QACvC,gCAAgC;QAChC,IAAI,IAAI,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC;QAE/B,mCAAmC;QACnC,IACE,IAAI,IAAI,IAAI;YACZ,IAAI,IAAI,IAAI;YACZ,OAAO,IAAI,KAAK,QAAQ;YACxB,OAAO,IAAI,KAAK,QAAQ,EACxB,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC;QAED,sBAAsB;QACtB,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEhC,6BAA6B;QAC7B,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;YACxB,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC;gBAAE,OAAO,KAAK,CAAC;YAEvC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;gBAAE,OAAO,KAAK,CAAC;QAC7D,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;CAGF,CAAA;AAtJY,0CAAe;0BAAf,eAAe;IAD3B,IAAA,mBAAU,GAAE;;GACA,eAAe,CAsJ3B"}
|
package/package.json
CHANGED
package/public/index.html
CHANGED
|
@@ -41,6 +41,7 @@
|
|
|
41
41
|
<li class="verbose" data-selector="verbose">Verbose</li>
|
|
42
42
|
</ul>
|
|
43
43
|
</nav>
|
|
44
|
+
<input id="search" onkeyup="search(event)" type="text" placeholder="Search" />
|
|
44
45
|
<div onclick="getLogs()"><button class="white">Refresh</button></div>
|
|
45
46
|
</div>
|
|
46
47
|
<div class="container table-header">
|
package/public/scripts/common.js
CHANGED
|
@@ -10,6 +10,7 @@ const selectedLogTypes = {
|
|
|
10
10
|
const logTypes = Object.keys(selectedLogTypes).filter((key) => key !== `all`);
|
|
11
11
|
|
|
12
12
|
let logs = [];
|
|
13
|
+
let text = "";
|
|
13
14
|
|
|
14
15
|
window.addEventListener("load", async () => {
|
|
15
16
|
getLogs();
|
|
@@ -37,7 +38,7 @@ document.addEventListener(`click`, (e) => {
|
|
|
37
38
|
});
|
|
38
39
|
}
|
|
39
40
|
|
|
40
|
-
|
|
41
|
+
renderLogs();
|
|
41
42
|
|
|
42
43
|
return;
|
|
43
44
|
}
|
|
@@ -132,8 +133,34 @@ function getLogHtmlElement(log) {
|
|
|
132
133
|
</div>`;
|
|
133
134
|
}
|
|
134
135
|
|
|
136
|
+
function renderLogs() {
|
|
137
|
+
let html = "";
|
|
138
|
+
|
|
139
|
+
logs
|
|
140
|
+
.filter((log) => {
|
|
141
|
+
return selectedLogTypes["all"] || selectedLogTypes[log.type];
|
|
142
|
+
})
|
|
143
|
+
.filter((log) => {
|
|
144
|
+
if (text === "") return true;
|
|
145
|
+
|
|
146
|
+
return (
|
|
147
|
+
log.message.toLowerCase().includes(text) ||
|
|
148
|
+
log.trace?.toLowerCase().includes(text) ||
|
|
149
|
+
JSON.stringify(log.context || {})
|
|
150
|
+
.toLowerCase()
|
|
151
|
+
.includes(text)
|
|
152
|
+
);
|
|
153
|
+
})
|
|
154
|
+
.forEach((log) => {
|
|
155
|
+
html += getLogHtmlElement(log);
|
|
156
|
+
});
|
|
157
|
+
|
|
158
|
+
document.getElementById("logs").innerHTML = html;
|
|
159
|
+
}
|
|
160
|
+
|
|
135
161
|
async function getLogs() {
|
|
136
162
|
const { origin, pathname, search } = window.location;
|
|
163
|
+
|
|
137
164
|
const res = await fetch(`${origin}${pathname}api${search}`);
|
|
138
165
|
|
|
139
166
|
if (res.ok) {
|
|
@@ -149,16 +176,37 @@ async function getLogs() {
|
|
|
149
176
|
document.querySelector("nav").style.display = "flex";
|
|
150
177
|
}
|
|
151
178
|
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
179
|
+
renderLogs();
|
|
180
|
+
} else {
|
|
181
|
+
alert("An error occurred while fetching logs.");
|
|
182
|
+
}
|
|
183
|
+
}
|
|
155
184
|
|
|
156
|
-
|
|
185
|
+
async function deleteLog(id) {
|
|
186
|
+
if (!confirm("Are you sure? It can't be undone.")) return;
|
|
157
187
|
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
188
|
+
const { origin, pathname, search: searchParams } = window.location;
|
|
189
|
+
|
|
190
|
+
const searchParamsWithId = new URLSearchParams(searchParams);
|
|
191
|
+
searchParamsWithId.set("id", id);
|
|
192
|
+
|
|
193
|
+
const res = await fetch(
|
|
194
|
+
`${origin}${pathname}api?${searchParamsWithId.toString()}`,
|
|
195
|
+
{
|
|
196
|
+
method: "DELETE",
|
|
197
|
+
}
|
|
198
|
+
);
|
|
161
199
|
|
|
162
|
-
|
|
200
|
+
if (res.ok) {
|
|
201
|
+
closePopup();
|
|
202
|
+
getLogs();
|
|
203
|
+
} else {
|
|
204
|
+
alert("An error occurred while deleting log.");
|
|
163
205
|
}
|
|
164
206
|
}
|
|
207
|
+
|
|
208
|
+
function search(event) {
|
|
209
|
+
text = event.target.value.toLowerCase();
|
|
210
|
+
|
|
211
|
+
renderLogs();
|
|
212
|
+
}
|
|
@@ -9,7 +9,7 @@ function showLogDetails(log) {
|
|
|
9
9
|
${
|
|
10
10
|
log.trace
|
|
11
11
|
? `
|
|
12
|
-
<h3 class="mt-
|
|
12
|
+
<h3 class="mt-15">Trace</h3>
|
|
13
13
|
<p class="key pl-2"><span>${getTrace(log.trace)}</span></p>
|
|
14
14
|
`
|
|
15
15
|
: ""
|
|
@@ -17,7 +17,7 @@ function showLogDetails(log) {
|
|
|
17
17
|
${
|
|
18
18
|
log.context
|
|
19
19
|
? `
|
|
20
|
-
<h3 class="mt-
|
|
20
|
+
<h3 class="mt-15">Context</h3>
|
|
21
21
|
<p>${jsonViewer(log.context)}</p>
|
|
22
22
|
`
|
|
23
23
|
: ""
|
|
@@ -25,12 +25,17 @@ function showLogDetails(log) {
|
|
|
25
25
|
${
|
|
26
26
|
log.breadcrumbs && log.breadcrumbs.length > 0
|
|
27
27
|
? `
|
|
28
|
-
<h3 class="mt-
|
|
28
|
+
<h3 class="mt-15">Breadcrumbs</h3>
|
|
29
29
|
<p>${jsonViewer(log.breadcrumbs)}</p>
|
|
30
30
|
`
|
|
31
31
|
: ""
|
|
32
32
|
}
|
|
33
|
-
<
|
|
33
|
+
<div class="content">
|
|
34
|
+
<button class="white mt-2" onclick="closePopup()">Close</button>
|
|
35
|
+
<button class="light mt-2" onclick="deleteLog('${
|
|
36
|
+
log._id
|
|
37
|
+
}')">Delete</button>
|
|
38
|
+
</div>
|
|
34
39
|
</div>
|
|
35
40
|
<div>`;
|
|
36
41
|
|
|
@@ -19,7 +19,7 @@ function jsonViewer(json, parentKey) {
|
|
|
19
19
|
const showParentKey = parentKey && keys.length > 0; // hide an empty object
|
|
20
20
|
|
|
21
21
|
if (showParentKey) {
|
|
22
|
-
res += `<div class="pl-2"><div
|
|
22
|
+
res += `<div class="pl-2"><div>▾ ${parentKey}</div>`;
|
|
23
23
|
}
|
|
24
24
|
|
|
25
25
|
for (const key of keys) {
|
package/public/styles/index.css
CHANGED
|
@@ -169,6 +169,9 @@ nav ul li:hover {
|
|
|
169
169
|
.mt-1 {
|
|
170
170
|
margin-top: 1rem;
|
|
171
171
|
}
|
|
172
|
+
.mt-15 {
|
|
173
|
+
margin-top: 1.5rem;
|
|
174
|
+
}
|
|
172
175
|
.mt-2 {
|
|
173
176
|
margin-top: 2rem;
|
|
174
177
|
}
|
|
@@ -180,6 +183,13 @@ nav ul li:hover {
|
|
|
180
183
|
padding-left: 2rem;
|
|
181
184
|
}
|
|
182
185
|
|
|
186
|
+
#search {
|
|
187
|
+
outline: none;
|
|
188
|
+
padding: 0.5rem;
|
|
189
|
+
border: 1px solid var(--light);
|
|
190
|
+
font-size: 1rem;
|
|
191
|
+
}
|
|
192
|
+
|
|
183
193
|
/* table */
|
|
184
194
|
.table-header,
|
|
185
195
|
.row {
|
|
@@ -190,10 +200,10 @@ nav ul li:hover {
|
|
|
190
200
|
align-items: center;
|
|
191
201
|
justify-content: space-around;
|
|
192
202
|
}
|
|
193
|
-
|
|
194
203
|
.table-header {
|
|
195
|
-
display:
|
|
204
|
+
display: flex;
|
|
196
205
|
height: 2rem;
|
|
206
|
+
justify-content: space-between;
|
|
197
207
|
background-color: var(--dark);
|
|
198
208
|
color: var(--white);
|
|
199
209
|
margin-top: 0.5rem;
|
|
@@ -208,12 +218,10 @@ nav ul li:hover {
|
|
|
208
218
|
flex: 0 0 5rem;
|
|
209
219
|
text-align: center;
|
|
210
220
|
}
|
|
211
|
-
|
|
212
|
-
.table-header > :nth-child(2),
|
|
213
221
|
.row > :nth-child(2) {
|
|
214
222
|
flex: 0 0 auto;
|
|
223
|
+
max-width: 35rem;
|
|
215
224
|
}
|
|
216
|
-
.table-header > :nth-child(3),
|
|
217
225
|
.row > :nth-child(3) {
|
|
218
226
|
flex: 1 1 auto;
|
|
219
227
|
}
|
|
@@ -303,6 +311,7 @@ nav ul li:hover {
|
|
|
303
311
|
overflow-y: scroll;
|
|
304
312
|
z-index: 1;
|
|
305
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);
|
|
306
315
|
}
|
|
307
316
|
|
|
308
317
|
/* JSON viewer */
|
|
@@ -330,5 +339,6 @@ nav ul li:hover {
|
|
|
330
339
|
#popup {
|
|
331
340
|
width: 100%;
|
|
332
341
|
left: 0;
|
|
342
|
+
box-shadow: none;
|
|
333
343
|
}
|
|
334
344
|
}
|
|
@@ -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,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 "
|
|
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
|
-
|
|
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.
|
|
39
|
-
throw new HttpException("
|
|
56
|
+
if (!params.id) {
|
|
57
|
+
throw new HttpException("id is required", 400);
|
|
40
58
|
}
|
|
41
|
-
}
|
|
42
59
|
|
|
43
|
-
|
|
44
|
-
|
|
60
|
+
res.json(await logService.delete(params.id.toString()));
|
|
61
|
+
}
|
|
62
|
+
);
|
|
45
63
|
}
|
|
46
64
|
|
|
47
65
|
if (options?.database) {
|
|
@@ -28,7 +28,7 @@ export class LogService implements LoggerService {
|
|
|
28
28
|
options.database?.collection || options.database?.table || defaultTable
|
|
29
29
|
);
|
|
30
30
|
|
|
31
|
-
|
|
31
|
+
this.setOptions(options);
|
|
32
32
|
|
|
33
33
|
const dataSourceOptions = {
|
|
34
34
|
type: options.database?.type,
|
|
@@ -51,6 +51,10 @@ export class LogService implements LoggerService {
|
|
|
51
51
|
return LogService.connection;
|
|
52
52
|
}
|
|
53
53
|
|
|
54
|
+
setOptions(options: LogModuleOptions) {
|
|
55
|
+
LogService.options = options;
|
|
56
|
+
}
|
|
57
|
+
|
|
54
58
|
addBreadcrumb(breadcrumb: any) {
|
|
55
59
|
this.breadcrumbs.push(breadcrumb);
|
|
56
60
|
}
|
|
@@ -117,6 +121,10 @@ export class LogService implements LoggerService {
|
|
|
117
121
|
});
|
|
118
122
|
}
|
|
119
123
|
|
|
124
|
+
async delete(id: string) {
|
|
125
|
+
return this.getConnection().delete(LogService.Log, id);
|
|
126
|
+
}
|
|
127
|
+
|
|
120
128
|
private async smartInsert(data: {
|
|
121
129
|
type: LogType;
|
|
122
130
|
message: string;
|
|
@@ -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,
|