@vtex/api
Version:
VTEX I/O API client
57 lines (56 loc) • 3.03 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.addTracingResponseInterceptor = exports.addTracingPreRequestInterceptor = exports.requestSpanPrefix = void 0;
const opentracing_1 = require("opentracing");
const tracing_1 = require("../../../../../../tracing");
const SpanReferenceTypes_1 = require("../../../../../../tracing/spanReference/SpanReferenceTypes");
const spanSetup_1 = require("./spanSetup");
exports.requestSpanPrefix = 'http-request';
const preRequestInterceptor = (http) => (config) => {
var _a;
if (!config.tracing || !((_a = config.tracing) === null || _a === void 0 ? void 0 : _a.isSampled)) {
return config;
}
const { tracer, rootSpan, requestSpanNameSuffix } = config.tracing;
const spanName = requestSpanNameSuffix ? `${exports.requestSpanPrefix}:${requestSpanNameSuffix}` : exports.requestSpanPrefix;
const span = rootSpan
? tracer.startSpan(spanName, {
references: [(0, tracing_1.createSpanReference)(rootSpan, SpanReferenceTypes_1.SpanReferenceTypes.CHILD_OF)],
})
: tracer.startSpan(spanName);
(0, spanSetup_1.injectRequestInfoOnSpan)(span, http, config);
config.tracing.requestSpan = span;
tracer.inject(span, opentracing_1.FORMAT_HTTP_HEADERS, config.headers);
return config;
};
const onResponseSuccess = (response) => {
var _a, _b;
if (!response.config.tracing || !((_a = response.config.tracing) === null || _a === void 0 ? void 0 : _a.isSampled)) {
return response;
}
const requestSpan = (_b = response.config.tracing) === null || _b === void 0 ? void 0 : _b.requestSpan;
(0, spanSetup_1.injectResponseInfoOnSpan)(requestSpan, response);
requestSpan === null || requestSpan === void 0 ? void 0 : requestSpan.finish();
return response;
};
const onResponseError = (err) => {
var _a, _b, _c;
if (!((_b = (_a = err === null || err === void 0 ? void 0 : err.config) === null || _a === void 0 ? void 0 : _a.tracing) === null || _b === void 0 ? void 0 : _b.requestSpan) || !((_c = err.config.tracing) === null || _c === void 0 ? void 0 : _c.isSampled)) {
return Promise.reject(err);
}
const { requestSpan } = err.config.tracing;
(0, spanSetup_1.injectResponseInfoOnSpan)(requestSpan, err.response);
tracing_1.ErrorReport.create({ originalError: err }).injectOnSpan(requestSpan, err.config.tracing.logger);
requestSpan.finish();
return Promise.reject(err);
};
const addTracingPreRequestInterceptor = (http) => {
const requestTracingInterceptor = http.interceptors.request.use(preRequestInterceptor(http), undefined);
return { requestTracingInterceptor };
};
exports.addTracingPreRequestInterceptor = addTracingPreRequestInterceptor;
const addTracingResponseInterceptor = (http) => {
const responseTracingInterceptor = http.interceptors.response.use(onResponseSuccess, onResponseError);
return { responseTracingInterceptor };
};
exports.addTracingResponseInterceptor = addTracingResponseInterceptor;