sm-utility 1.2.0 → 1.3.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.
- package/logger/index.js +17 -19
- package/package.json +2 -1
- package/request/index.d.ts +1 -1
- package/request/index.js +58 -33
package/logger/index.js
CHANGED
|
@@ -12,6 +12,7 @@ exports.logger = exports.logError = exports.loggerMiddleware = void 0;
|
|
|
12
12
|
var process_1 = require("process");
|
|
13
13
|
var winston_1 = __importDefault(require("winston"));
|
|
14
14
|
var express_winston_1 = __importDefault(require("express-winston"));
|
|
15
|
+
var ecs_winston_format_1 = __importDefault(require("@elastic/ecs-winston-format"));
|
|
15
16
|
var configs;
|
|
16
17
|
try {
|
|
17
18
|
configs = require(process_1.cwd() + "/logger.config");
|
|
@@ -19,15 +20,6 @@ try {
|
|
|
19
20
|
catch (_a) {
|
|
20
21
|
throw Error('Logger configs could not be found on app root\'s directory.');
|
|
21
22
|
}
|
|
22
|
-
function formatReqResLog(info) {
|
|
23
|
-
// in case the info itself is not from a request/response pair
|
|
24
|
-
if (!info.meta || (info === null || info === void 0 ? void 0 : info.meta.req)) {
|
|
25
|
-
return JSON.stringify(info);
|
|
26
|
-
}
|
|
27
|
-
var level = info.level, _a = info.meta, req = _a.req, res = _a.res, responseTime = _a.responseTime;
|
|
28
|
-
var logData = Object.assign({}, { req: req, res: res, responseTime: responseTime + "ms" });
|
|
29
|
-
return level + " - [" + req.method + "] " + req.url + ": " + JSON.stringify(logData);
|
|
30
|
-
}
|
|
31
23
|
function filterRequestHeaders(confidentialHeaders) {
|
|
32
24
|
if (confidentialHeaders === void 0) { confidentialHeaders = []; }
|
|
33
25
|
return function (req, propName) {
|
|
@@ -63,34 +55,40 @@ function getSplitedRouteParts(route) {
|
|
|
63
55
|
});
|
|
64
56
|
return filteredParts;
|
|
65
57
|
}
|
|
58
|
+
function getTransports() {
|
|
59
|
+
var transports = [];
|
|
60
|
+
if (configs.console) {
|
|
61
|
+
transports.push(new winston_1.default.transports.Console(configs.console));
|
|
62
|
+
}
|
|
63
|
+
if (configs.file) {
|
|
64
|
+
transports.push(new winston_1.default.transports.File(configs.file));
|
|
65
|
+
}
|
|
66
|
+
return transports;
|
|
67
|
+
}
|
|
66
68
|
function createLoggerMiddleware() {
|
|
67
69
|
var _a, _b;
|
|
68
70
|
(_a = express_winston_1.default.requestWhitelist).push.apply(_a, __spreadArray(["body"], configs.requestWhitelist || []));
|
|
69
71
|
(_b = express_winston_1.default.responseWhitelist).push.apply(_b, __spreadArray(["body"], configs.responseWhitelist || []));
|
|
70
72
|
return express_winston_1.default.logger({
|
|
71
73
|
statusLevels: true,
|
|
72
|
-
transports:
|
|
73
|
-
new winston_1.default.transports.Console(configs.console),
|
|
74
|
-
],
|
|
74
|
+
transports: getTransports(),
|
|
75
75
|
requestFilter: filterRequestHeaders(configs.confidentialHeaders || []),
|
|
76
76
|
ignoreRoute: routeFilter,
|
|
77
|
-
format:
|
|
77
|
+
format: ecs_winston_format_1.default({ convertReqRes: true })
|
|
78
78
|
});
|
|
79
79
|
}
|
|
80
80
|
function createErrorLoggerMiddleware() {
|
|
81
81
|
return express_winston_1.default.errorLogger({
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
],
|
|
82
|
+
format: ecs_winston_format_1.default({ convertReqRes: true }),
|
|
83
|
+
transports: getTransports(),
|
|
85
84
|
requestFilter: filterRequestHeaders(configs.confidentialHeaders || []),
|
|
86
85
|
});
|
|
87
86
|
}
|
|
88
87
|
exports.loggerMiddleware = createLoggerMiddleware();
|
|
89
88
|
exports.logError = createErrorLoggerMiddleware();
|
|
90
89
|
exports.logger = winston_1.default.createLogger({
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
],
|
|
90
|
+
format: ecs_winston_format_1.default({ convertReqRes: true }),
|
|
91
|
+
transports: getTransports(),
|
|
94
92
|
exitOnError: false,
|
|
95
93
|
});
|
|
96
94
|
exports.logger.stream = Object.assign(exports.logger.stream, {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sm-utility",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.3.1",
|
|
4
4
|
"description": "reusable utility codes for sm projects",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"types": "index.d.ts",
|
|
@@ -28,6 +28,7 @@
|
|
|
28
28
|
"typescript": "^4.2.4"
|
|
29
29
|
},
|
|
30
30
|
"dependencies": {
|
|
31
|
+
"@elastic/ecs-winston-format": "^1.3.1",
|
|
31
32
|
"axios": "^0.23.0",
|
|
32
33
|
"express-winston": "^4.1.0",
|
|
33
34
|
"uuid": "^8.3.2",
|
package/request/index.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { AxiosInstance, AxiosRequestConfig } from 'axios';
|
|
2
|
-
export declare function createApi(
|
|
2
|
+
export declare function createApi(axiosConfig?: AxiosRequestConfig): AxiosInstance;
|
package/request/index.js
CHANGED
|
@@ -6,50 +6,75 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
exports.createApi = void 0;
|
|
7
7
|
var axios_1 = __importDefault(require("axios"));
|
|
8
8
|
var uuid_1 = require("uuid");
|
|
9
|
-
|
|
10
|
-
|
|
9
|
+
var logger_1 = require("../logger");
|
|
10
|
+
function createApi(axiosConfig) {
|
|
11
|
+
var axiosApi = axios_1.default.create(axiosConfig);
|
|
11
12
|
axiosApi.interceptors.request.use(function (request) {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
});
|
|
13
|
+
if (axiosConfig === null || axiosConfig === void 0 ? void 0 : axiosConfig.logRequests) {
|
|
14
|
+
var data = request.data, params = request.params, method = request.method;
|
|
15
|
+
var fullUrl = getFullUrlFromConfig(request);
|
|
16
|
+
request.meta = request.meta || {};
|
|
17
|
+
request.meta.requestId = uuid_1.v4();
|
|
18
|
+
request.meta.requestStartedAt = new Date().getTime();
|
|
19
|
+
logRequest(request.meta.requestId, method, fullUrl, data, params);
|
|
20
|
+
}
|
|
21
21
|
return request;
|
|
22
22
|
});
|
|
23
23
|
axiosApi.interceptors.response.use(function (response) {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
responseTime: responseTime,
|
|
32
|
-
});
|
|
24
|
+
if (axiosConfig === null || axiosConfig === void 0 ? void 0 : axiosConfig.logRequests) {
|
|
25
|
+
var status_1 = response.status, data = response.data, config = response.config;
|
|
26
|
+
var method = config.method, meta = config.meta;
|
|
27
|
+
var fullUrl = getFullUrlFromConfig(config);
|
|
28
|
+
var responseTime = getResponseTimeFromConfig(config);
|
|
29
|
+
logResponse(meta === null || meta === void 0 ? void 0 : meta.requestId, method, fullUrl, data, status_1, responseTime);
|
|
30
|
+
}
|
|
33
31
|
return response;
|
|
34
32
|
}, function (error) {
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
message: message,
|
|
42
|
-
data: response === null || response === void 0 ? void 0 : response.data,
|
|
43
|
-
responseTime: responseTime,
|
|
44
|
-
});
|
|
33
|
+
if (axiosConfig === null || axiosConfig === void 0 ? void 0 : axiosConfig.logRequests) {
|
|
34
|
+
var config = error.config, message = error.message, response = error.response;
|
|
35
|
+
var method = config.method, meta = config.meta;
|
|
36
|
+
var fullUrl = getFullUrlFromConfig(config);
|
|
37
|
+
logError(meta === null || meta === void 0 ? void 0 : meta.requestId, method, fullUrl, response === null || response === void 0 ? void 0 : response.data, response === null || response === void 0 ? void 0 : response.status, message);
|
|
38
|
+
}
|
|
45
39
|
throw error;
|
|
46
40
|
});
|
|
47
41
|
return axiosApi;
|
|
48
42
|
}
|
|
49
43
|
exports.createApi = createApi;
|
|
50
|
-
function
|
|
51
|
-
var
|
|
52
|
-
|
|
44
|
+
function logRequest(id, method, url, body, params) {
|
|
45
|
+
var _a;
|
|
46
|
+
var request = (_a = {},
|
|
47
|
+
_a['context-id'] = id,
|
|
48
|
+
_a.url = url,
|
|
49
|
+
_a.method = method === null || method === void 0 ? void 0 : method.toUpperCase(),
|
|
50
|
+
_a.params = params,
|
|
51
|
+
_a.body = body,
|
|
52
|
+
_a);
|
|
53
|
+
logger_1.logger.info('sm-utility/api-request', { request: request });
|
|
54
|
+
}
|
|
55
|
+
function logResponse(id, method, url, body, status, responseTime) {
|
|
56
|
+
var _a;
|
|
57
|
+
var response = (_a = {},
|
|
58
|
+
_a['context-id'] = id,
|
|
59
|
+
_a.url = url,
|
|
60
|
+
_a.method = method === null || method === void 0 ? void 0 : method.toUpperCase(),
|
|
61
|
+
_a.body = body,
|
|
62
|
+
_a.status = status,
|
|
63
|
+
_a.responseTime = responseTime,
|
|
64
|
+
_a);
|
|
65
|
+
logger_1.logger.info('sm-utility/api-response', { response: response });
|
|
66
|
+
}
|
|
67
|
+
function logError(id, method, url, data, status, message) {
|
|
68
|
+
var _a;
|
|
69
|
+
var err = (_a = {},
|
|
70
|
+
_a['context-id'] = id,
|
|
71
|
+
_a.url = url,
|
|
72
|
+
_a.method = method === null || method === void 0 ? void 0 : method.toUpperCase(),
|
|
73
|
+
_a.data = data,
|
|
74
|
+
_a.status = status,
|
|
75
|
+
_a.message = message,
|
|
76
|
+
_a);
|
|
77
|
+
logger_1.logger.error('sm-utility/api-error', { err: err });
|
|
53
78
|
}
|
|
54
79
|
function getResponseTimeFromConfig(config) {
|
|
55
80
|
var _a;
|