Socket
Socket
Sign inDemoInstall

@ovotech/axios-logger

Package Overview
Dependencies
Maintainers
89
Versions
4
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@ovotech/axios-logger - npm Package Compare versions

Comparing version 1.0.0 to 1.1.0

43

dist/index.d.ts

@@ -17,40 +17,19 @@ import { AxiosError, AxiosRequestConfig, AxiosResponse } from 'axios';

}
export interface WithLoggerAxiosResponse<T = any, TConfig extends WithLogger = WithLogger> extends AxiosResponse<T> {
config: TConfig;
}
export interface WithLoggerAxiosError<TConfig extends WithLogger = WithLogger> extends AxiosError {
config: TConfig;
response?: WithLoggerAxiosResponse<any, TConfig>;
}
export declare const redactPaths: (paths: string[], object: any) => any;
export declare const getMeta: (response: AxiosResponse<any>) => LogMeta;
export declare const axiosLogger: (log: (level: "error" | "info", meta: LogMeta) => void) => {
export declare const axiosLogger: <TConfig extends WithLogger = WithLogger>(log: (level: "error" | "info", meta: LogMeta, config: TConfig) => void) => {
request: {
onFullfilled: (config: WithLogger) => {
requestStartedAt: Date;
url?: string | undefined;
method?: string | undefined;
baseURL?: string | undefined;
transformRequest?: import("axios").AxiosTransformer | import("axios").AxiosTransformer[] | undefined;
transformResponse?: import("axios").AxiosTransformer | import("axios").AxiosTransformer[] | undefined;
headers?: any;
params?: any;
paramsSerializer?: ((params: any) => string) | undefined;
data?: any;
timeout?: number | undefined;
withCredentials?: boolean | undefined;
adapter?: import("axios").AxiosAdapter | undefined;
auth?: import("axios").AxiosBasicCredentials | undefined;
responseType?: string | undefined;
xsrfCookieName?: string | undefined;
xsrfHeaderName?: string | undefined;
onUploadProgress?: ((progressEvent: any) => void) | undefined;
onDownloadProgress?: ((progressEvent: any) => void) | undefined;
maxContentLength?: number | undefined;
validateStatus?: ((status: number) => boolean) | undefined;
maxRedirects?: number | undefined;
httpAgent?: any;
httpsAgent?: any;
proxy?: false | import("axios").AxiosProxyConfig | undefined;
cancelToken?: import("axios").CancelToken | undefined;
redact?: string[] | undefined;
};
onFulfilled: (config: TConfig) => TConfig;
};
response: {
onFullfilled: (response: AxiosResponse<any>) => AxiosResponse<any>;
onRejected: (error: AxiosError) => Promise<never>;
onFulfilled: (response: WithLoggerAxiosResponse<any, TConfig>) => WithLoggerAxiosResponse<any, TConfig>;
onRejected: (error: WithLoggerAxiosError<TConfig>) => Promise<never>;
};
};
"use strict";
var __rest = (this && this.__rest) || function (s, e) {
var t = {};
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
t[p] = s[p];
if (s != null && typeof Object.getOwnPropertySymbols === "function")
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) if (e.indexOf(p[i]) < 0)
t[p[i]] = s[p[i]];
return t;
};
Object.defineProperty(exports, "__esModule", { value: true });

@@ -17,3 +8,4 @@ const redactPath = (path, obj) => {

: obj[current]
? Object.assign({}, obj, { [current]: rest.length ? redactPath(rest, obj[current]) : '<Removed>' }) : obj;
? { ...obj, [current]: rest.length ? redactPath(rest, obj[current]) : '<Removed>' }
: obj;
};

@@ -32,7 +24,10 @@ const defaultRedact = ['requestBody', 'uri', 'params', 'responseBody'];

request: {
onFullfilled: (config) => (Object.assign({}, config, { requestStartedAt: config.requestStartedAt || new Date() })),
onFulfilled: (config) => ({
...config,
requestStartedAt: config.requestStartedAt || new Date(),
}),
},
response: {
onFullfilled: (response) => {
log('info', exports.getMeta(response));
onFulfilled: (response) => {
log('info', exports.getMeta(response), response.config);
return response;

@@ -42,4 +37,4 @@ },

if (error.response) {
const _a = exports.getMeta(error.response), { responseBody } = _a, meta = __rest(_a, ["responseBody"]);
log('error', meta);
const { responseBody, ...meta } = exports.getMeta(error.response);
log('error', meta, error.config);
}

@@ -46,0 +41,0 @@ return Promise.reject(error);

{
"name": "@ovotech/axios-logger",
"description": "Log responses with sanitization",
"version": "1.0.0",
"version": "1.1.0",
"main": "dist/index.js",

@@ -28,3 +28,3 @@ "source": "src/index.ts",

"tslint-config-prettier": "^1.18.0",
"typescript": "^3.3.4000"
"typescript": "^3.4.3"
},

@@ -34,3 +34,3 @@ "jest": {

},
"gitHead": "2d6ec9723f56a258c94f18c434a97bfbd7807cad"
"gitHead": "72d7ad2099b362786b576b69797bbe020fbd36e7"
}

@@ -15,3 +15,3 @@ # Axios Logger Interceptor

const logger = axiosLogger(console.log);
const logger = axiosLogger((level, meta, config) => console.log(level, meta, config.url));

@@ -38,3 +38,3 @@ const api = axios.create();

The log function will receive 2 arguments - level and meta. The first one indicates what type of log level to use - "info" for success and "error" for error. The second contains an object of data to log.
The log function will receive 3 arguments - level, meta and axios request config. The first one indicates what type of log level to use - "info" for success and "error" for error. The second contains an object of data to log.

@@ -41,0 +41,0 @@ ```js

@@ -20,2 +20,11 @@ import { AxiosError, AxiosRequestConfig, AxiosResponse } from 'axios';

export interface WithLoggerAxiosResponse<T = any, TConfig extends WithLogger = WithLogger> extends AxiosResponse<T> {
config: TConfig;
}
export interface WithLoggerAxiosError<TConfig extends WithLogger = WithLogger> extends AxiosError {
config: TConfig;
response?: WithLoggerAxiosResponse<any, TConfig>;
}
const redactPath = (path: string[], obj: any): any => {

@@ -46,15 +55,20 @@ const [current, ...rest] = path;

export const axiosLogger = (log: (level: 'info' | 'error', meta: LogMeta) => void) => ({
export const axiosLogger = <TConfig extends WithLogger = WithLogger>(
log: (level: 'info' | 'error', meta: LogMeta, config: TConfig) => void,
) => ({
request: {
onFullfilled: (config: WithLogger) => ({ ...config, requestStartedAt: config.requestStartedAt || new Date() }),
onFulfilled: (config: TConfig): TConfig => ({
...config,
requestStartedAt: config.requestStartedAt || new Date(),
}),
},
response: {
onFullfilled: (response: AxiosResponse) => {
log('info', getMeta(response));
onFulfilled: (response: WithLoggerAxiosResponse<any, TConfig>) => {
log('info', getMeta(response), response.config);
return response;
},
onRejected: (error: AxiosError) => {
onRejected: (error: WithLoggerAxiosError<TConfig>) => {
if (error.response) {
const { responseBody, ...meta } = getMeta(error.response);
log('error', meta);
log('error', meta, error.config);
}

@@ -61,0 +75,0 @@ return Promise.reject(error);

@@ -5,8 +5,15 @@ import axios from 'axios';

interface ConfigWithLogger extends WithLogger {
test?: string;
}
const log = jest.fn();
const instance = axios.create({ baseURL: 'http://api.example.com' });
const logger = axiosLogger(log);
const logger = axiosLogger<ConfigWithLogger>((level, meta, cfg) => {
log(level, meta);
cfg.test = '123';
});
instance.interceptors.request.use(logger.request.onFullfilled);
instance.interceptors.response.use(logger.response.onFullfilled, logger.response.onRejected);
instance.interceptors.request.use(logger.request.onFulfilled);
instance.interceptors.response.use(logger.response.onFulfilled, logger.response.onRejected);

@@ -13,0 +20,0 @@ describe('Integration test', () => {

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc