https://github.com/aminfazlmondo/axios-error-redact
Library to redact sensitive information from Axios errors
https://github.com/aminfazlmondo/axios-error-redact
axios error-handling hacktoberfest interceptor javascript nodejs projen redact security sensitive
Last synced: 7 months ago
JSON representation
Library to redact sensitive information from Axios errors
- Host: GitHub
- URL: https://github.com/aminfazlmondo/axios-error-redact
- Owner: AminFazlMondo
- License: apache-2.0
- Created: 2021-06-24T04:06:48.000Z (over 4 years ago)
- Default Branch: main
- Last Pushed: 2024-05-22T00:46:51.000Z (over 1 year ago)
- Last Synced: 2024-05-22T03:46:36.882Z (over 1 year ago)
- Topics: axios, error-handling, hacktoberfest, interceptor, javascript, nodejs, projen, redact, security, sensitive
- Language: TypeScript
- Homepage: https://aminfazlmondo.github.io/Axios-Error-Redact/
- Size: 2.4 MB
- Stars: 4
- Watchers: 2
- Forks: 1
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# 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
}
}
```