gapp-checkout
Version:
Mobile Gapp flow for Checkout
119 lines (102 loc) • 2.72 kB
text/typescript
import axios, { AxiosRequestConfig, Method } from 'axios';
const API_Timeout = 60000;
export type RequestProps = {
url: string;
method: Method;
header?: object;
requestParams?: object;
requestPostData?: object;
timeout?: number;
//type of project
AppKey?: number | string;
//token for request
bearerToken?: string;
cancelRequest?: AbortSignal;
tokenType?: string;
};
interface AxiosRequestConfigWithMeta extends AxiosRequestConfig {
meta?: { [key: string]: any };
}
export const httpRequest = ({
url,
method,
requestParams,
requestPostData,
cancelRequest,
timeout = API_Timeout,
bearerToken,
tokenType = 'Bearer',
header,
}: RequestProps) => {
return httpRequestWithoutAuthorization({
url,
method,
requestParams,
requestPostData,
timeout,
cancelRequest,
header: {
Authorization: `${tokenType} ${bearerToken}`,
...header,
},
});
};
export const httpRequestWithoutAuthorization = ({
url,
method,
requestParams,
requestPostData,
cancelRequest,
timeout = API_Timeout,
header,
}: RequestProps) => {
const instance = axios.create();
instance.interceptors.request.use((config: any) => {
config.meta = config.meta || {};
config.meta.requestStartedAt = new Date().getTime();
return config;
});
instance.interceptors.response.use(
response => {
const config: AxiosRequestConfigWithMeta = response.config;
if (config.meta !== undefined) {
config.meta = config.meta || {};
config.meta.responseTime =
new Date().getTime() - config?.meta.requestStartedAt;
console.log(
`Execution time for: ${config.url} - ${
new Date().getTime() - config?.meta.requestStartedAt
} ms`
);
}
return response;
},
response => {
const config: AxiosRequestConfigWithMeta = response.config;
if (config.meta !== undefined) {
config.meta = config.meta || {};
config.meta.responseTime =
new Date().getTime() - config?.meta.requestStartedAt;
console.warn(
`Execution time for: ${config.url} - ${
new Date().getTime() - config.meta.requestStartedAt
} ms`
);
}
throw response;
}
);
return instance.request({
url: url,
method: method,
headers: {
// Accept: 'application/json',
// 'Content-type': 'application/json;charset=utf-8',
...header,
},
params: requestParams,
data: requestPostData,
timeout: timeout,
signal: cancelRequest,
});
};