@rf-logger/logger-axios 0.0.9

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.
@@ -0,0 +1,3 @@
1
+ import { LoggerPlugin } from "@rf-logger/logger";
2
+ declare const plugin: LoggerPlugin;
3
+ export default plugin;
package/dist/index.js ADDED
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const axios_interceptor_1 = require("./interceptors/axios.interceptor");
4
+ const plugin = {
5
+ registerInterceptors: (logger) => {
6
+ (0, axios_interceptor_1.registerAxiosInterceptor)(logger);
7
+ },
8
+ };
9
+ exports.default = plugin;
@@ -0,0 +1,4 @@
1
+ import type { AxiosInstance } from "axios";
2
+ import { Logger } from "winston";
3
+ export declare const enhanceAxiosInstance: (axios: AxiosInstance, logger: Logger) => void;
4
+ export declare const registerAxiosInterceptor: (logger: Logger) => void;
@@ -0,0 +1,101 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
26
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
27
+ return new (P || (P = Promise))(function (resolve, reject) {
28
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
29
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
30
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
31
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
32
+ });
33
+ };
34
+ var __importDefault = (this && this.__importDefault) || function (mod) {
35
+ return (mod && mod.__esModule) ? mod : { "default": mod };
36
+ };
37
+ Object.defineProperty(exports, "__esModule", { value: true });
38
+ exports.registerAxiosInterceptor = exports.enhanceAxiosInstance = void 0;
39
+ const axios_1 = __importDefault(require("axios"));
40
+ const axios_better_stacktrace_1 = __importDefault(require("axios-better-stacktrace"));
41
+ const AxiosLogger = __importStar(require("axios-logger"));
42
+ /**
43
+ * Wrap axios-logger "error" interceptor to customize the output.
44
+ */
45
+ const wrappedErrorLogger = (logger) => (error) => __awaiter(void 0, void 0, void 0, function* () {
46
+ return AxiosLogger.errorLogger(error, {
47
+ logger: (message) => {
48
+ var _a;
49
+ const statusCode = (_a = error.response) === null || _a === void 0 ? void 0 : _a.status;
50
+ const request = error.request;
51
+ const response = error.response;
52
+ // To prevent cluttering the logs with the whole
53
+ // request and response objects, we omit them.
54
+ error.request = undefined;
55
+ error.response = undefined;
56
+ logger.log(
57
+ // In case of a 400 HTTP error, we only log it as a debug
58
+ // In case of a 500 HTTP error, we log it as a real error
59
+ statusCode && statusCode < 500 ? "debug" : "error",
60
+ // We add the error directly in the message for easy reading
61
+ message, {
62
+ channel: "axios",
63
+ error,
64
+ });
65
+ // We add back the request and response so that they can be used in catch clauses
66
+ error.request = request;
67
+ error.response = response;
68
+ },
69
+ // For axios errors, we want to log the whole server response headers + data
70
+ headers: true,
71
+ data: true,
72
+ });
73
+ });
74
+ const axiosLogRequestResponse = (axios, logger) => {
75
+ axios.interceptors.request.use(AxiosLogger.requestLogger, wrappedErrorLogger(logger));
76
+ axios.interceptors.response.use(AxiosLogger.responseLogger, wrappedErrorLogger(logger));
77
+ };
78
+ const enhanceAxiosInstance = (axios, logger) => {
79
+ (0, axios_better_stacktrace_1.default)(axios);
80
+ axiosLogRequestResponse(axios, logger);
81
+ };
82
+ exports.enhanceAxiosInstance = enhanceAxiosInstance;
83
+ const enhanceAxiosModule = (axios, logger) => {
84
+ (0, exports.enhanceAxiosInstance)(axios, logger);
85
+ axios.create = ((originalCreate) => {
86
+ return (config) => {
87
+ const instance = originalCreate.apply(this, [config]);
88
+ (0, exports.enhanceAxiosInstance)(instance, logger);
89
+ return instance;
90
+ };
91
+ })(axios.create);
92
+ };
93
+ const registerAxiosInterceptor = (logger) => {
94
+ AxiosLogger.setGlobalConfig({
95
+ logger: (message) => logger.http(message, { channel: "axios" }),
96
+ data: false,
97
+ params: true, // whether to include query parameters in logs
98
+ });
99
+ enhanceAxiosModule(axios_1.default, logger);
100
+ };
101
+ exports.registerAxiosInterceptor = registerAxiosInterceptor;
package/package.json ADDED
@@ -0,0 +1,28 @@
1
+ {
2
+ "name": "@rf-logger/logger-axios",
3
+ "files": [
4
+ "dist/**"
5
+ ],
6
+ "main": "dist/index.js",
7
+ "peerDependencies": {
8
+ "axios": "^0.27.2",
9
+ "winston": "^3.8.2",
10
+ "@rf-logger/logger": "0.0.9"
11
+ },
12
+ "dependencies": {
13
+ "axios-better-stacktrace": "^2.1.3",
14
+ "axios-logger": "^2.6.1"
15
+ },
16
+ "devDependencies": {
17
+ "axios": "0.27.2",
18
+ "axios-mock-adapter": "1.21.1"
19
+ },
20
+ "engines": {
21
+ "node": ">=16.0.0"
22
+ },
23
+ "version": "0.0.9",
24
+ "scripts": {
25
+ "test": "jest",
26
+ "version": "pnpm version --no-git-tag-version"
27
+ }
28
+ }