UNPKG

axios-error-redact

Version:

Library to redact sensitive information from Axios errors

181 lines (119 loc) 4.28 kB
# Axios-Error-Redact Library to redact sensitive information from Axios errors. This can be used as an response interceptor for axios instances, or can be used standalone. # Compatibility Works with - `axios@^0` - `axios@^1` # Getting started ```console npm i axios-error-redact ``` ## Interceptor usage ### Simple Interceptor The redactor can simply be used in an interceptor to extract non-sensitive data from error and continue ```javascript import axios from 'axios' import {createErrorInterceptor} from 'axios-error-redact' const instance = axios.create({baseURL: 'http://example.com'}) instance.interceptors.response.use(undefined, createErrorInterceptor()) try { await instance.get() } catch(error) { // The isHttpErrorResponse helper can be used to ensure the thrown error is a redacted error if (isHttpErrorResponse(error)) { console.error(error.response.statusMessage, error.message) } } ``` ### Custom Interceptor The redactor can be used in an interceptor to extract non-sensitive data from error and continue, with this approach the interceptor can be created with some custom logic ```javascript import axios from 'axios' import {AxiosErrorRedactor} from 'axios-error-redact' const instance = axios.create({baseURL: 'http://example.com'}) const redactor = new AxiosErrorRedactor() function errorInterceptor(error: any): any { const redactedError = redactor.redactError(error) // You may want to add more logic here; for example logging return Promise.reject(redactedError) } instance.interceptors.response.use(undefined, errorInterceptor) // instance.get() ``` ## Standalone usage The library can be used on its own without using any interceptor as well. ```javascript import axios from 'axios' import {AxiosErrorRedactor} from 'axios-error-redact' const redactor = new AxiosErrorRedactor() const result = axios.get('http://example.com') .catch(error => redactor.redactError(error)) ``` ## API ### Constructor The redactor is initialized with some defaults; in which all of the sensitive data will be redacted (request, response, query) ```javascript import {AxiosErrorRedactor} from 'axios-error-redact' const redactor = new AxiosErrorRedactor() ``` The constructor also accepts options to enable or disable these ```javascript import {AxiosErrorRedactor} from 'axios-error-redact' const redactor = new AxiosErrorRedactor({ redactRequestDataEnabled: false, redactResponseDataEnabled: false, redactQueryDataEnabled: false, }) ``` ### Main Function The main function that can be called on the initiated object is `redactError` which accepts the error as the input and returns the redacted information in an object of type `HttpErrorResponse` ```javascript import axios from 'axios' import {AxiosErrorRedactor} from 'axios-error-redact' const redactor = new AxiosErrorRedactor() const result = axios.get('http://example.com') .catch(error => redactor.redactError(error)) ``` ### Changing Flags There are three functions that can be used and chained after the initiated object in order to change what sort of data should be skipped to be redacted. ```javascript import {AxiosErrorRedactor} from 'axios-error-redact' const redactor = new AxiosErrorRedactor() .skipRequestData() .skipQueryData() ``` ### Response The redact library will extract information from axios error and return an object with following details. ```javascript HttpErrorResponse { isErrorRedactedResponse: true; message: string; fullURL: string; response: { statusCode?: number; statusMessage: string; data: any; }; request: { baseURL: string; path: string; method: string; data: any; }; } ``` If the error is not an axios error, then the same error will be returned. ### Type guard The `isHttpErrorResponse()` function can be used as a type guard in TypeScript to narrow the error type. This can be useful when multiple error types can be thrown from the try block. Be sure not to use the `isAxiosError()` type guard provided by Axios since all intercepted Axios errors will be transformed into a `HttpErrorResponse` ```typescript try { ... } catch(error: unknown) { if (isHttpErrorResponse(error)) { // error is narrowed to type HttpErrorResponse } } ```