/
index.ts
59 lines (50 loc) · 1.48 KB
/
index.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
import debug from 'debug';
import omit from 'lodash/omit';
import urlJoin from 'url-join';
import { AxiosRequestConfig, Method } from 'axios';
const debugRequest = debug('messaging-api:request');
export type RequestPayload = {
method?: Method;
url: string;
headers: Record<string, string>;
body: any; // eslint-disable-line @typescript-eslint/no-explicit-any
};
export type OnRequestFunction = (request: RequestPayload) => void;
function defaultOnRequest(request: RequestPayload): void {
debugRequest(`${request.method} - ${request.url}`);
if (request.body) {
debugRequest('Outgoing request body:');
if (Buffer.isBuffer(request.body)) {
debugRequest(request.body);
} else {
debugRequest(JSON.stringify(request.body, null, 2));
}
}
}
function createRequestInterceptor({
onRequest = defaultOnRequest,
}: { onRequest?: OnRequestFunction } = {}) {
return (config: AxiosRequestConfig): AxiosRequestConfig => {
onRequest({
method: config.method,
url: urlJoin(config.baseURL || '', config.url || '/'),
headers: {
...config.headers.common,
...(config.method ? config.headers[config.method] : {}),
...omit(config.headers, [
'common',
'get',
'post',
'put',
'patch',
'delete',
'head',
]),
},
body: config.data,
});
return config;
};
}
export * from './case';
export { defaultOnRequest as onRequest, createRequestInterceptor };