UNPKG

@inventorjs/api-service

Version:
44 lines (43 loc) 1.62 kB
/** * 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); } }