UNPKG

@vtex/api

Version:
57 lines (56 loc) 3.03 kB
"use strict"; 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;