@inventorjs/api-service
Version:
Api service manager base on axios
44 lines (43 loc) • 1.62 kB
JavaScript
/**
* interceptors
*/
import { RequestInterceptor, ResponseInterceptor, } from './types.js';
import { writeLog } from './logger.js';
export class RuntimeRequestInterceptor extends RequestInterceptor {
async onFulfilled(config) {
const reqId = config.$runtime?.reqId;
const reqIdHeaderName = config?.$ext?.reqIdHeaderName;
if (reqIdHeaderName) {
config.headers.set(reqIdHeaderName, reqId);
}
const startTime = performance.now();
config.$runtime ??= {};
config.$runtime.startTime = startTime;
return config;
}
async onRejected(error) {
return Promise.reject(error);
}
}
export class RuntimeResponseInterceptor extends ResponseInterceptor {
async onFulfilled(response) {
const config = response.config;
const endTime = performance.now();
const reqId = config.$runtime?.reqId;
const startTime = config.$runtime?.startTime;
const responseTime = Math.round(endTime - startTime);
writeLog({ config, response, reqId, responseTime });
return response;
}
async onRejected(error) {
const config = error.config;
const endTime = performance.now();
const reqIdHeaderName = config?.$ext?.reqIdHeaderName;
const reqId = config?.headers?.get?.(reqIdHeaderName);
const response = error.response;
const startTime = config.$runtime?.startTime;
const responseTime = Math.floor(endTime - startTime);
writeLog({ config, response, reqId, responseTime, error });
return Promise.reject(error);
}
}