Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
Size: Mime:
// (c) Copyright 2023 Supertenant Ltd. - all rights reserved.
// See LICENSE file in project root for license terms.
"use strict";const cls=require("../../cls"),constants=require("../../constants"),{getExtraHeadersFromFetchHeaders,getExtraHeadersCaseInsensitive,mergeExtraHeadersFromFetchHeaders}=require("./captureHttpHeadersUtil"),tracingUtil=require("../../tracingUtil"),{sanitizeUrl,splitAndFilter}=require("../../../util/url"),originalFetch=global.fetch;let extraHttpHeadersToCapture,isActive=!1;function instrument(){global.fetch=function instanaFetch(){let w3cTraceContext=cls.getW3cTraceContext();var skipTracingResult=cls.skipExitTracing({isActive:isActive,extendedResponse:!0,skipParentSpanCheck:!0}),parentSpan=cls.getCurrentSpan()||cls.getReducedSpan();const originalThis=this,originalArgs=new Array(arguments.length);for(let i=0;i<arguments.length;i++)originalArgs[i]=arguments[i];return skipTracingResult.skip||!parentSpan||constants.isExitSpan(parentSpan)?(skipTracingResult.suppressed&&injectSuppressionHeader(originalArgs,w3cTraceContext),originalFetch.apply(originalThis,originalArgs)):cls.ns.runAndReturn(()=>{const span=cls.startSpan("node.http.client",constants.EXIT);w3cTraceContext=cls.getW3cTraceContext();let completeCallUrl,method="GET";var resource=originalArgs[0];let params,capturedHeaders;if(null!=resource){let rawUrl;"string"==typeof resource?rawUrl=resource:isFetchApiRequest(resource)?(rawUrl=resource.url,method=resource.method,capturedHeaders=getExtraHeadersFromFetchHeaders(resource.headers,extraHttpHeadersToCapture)):"function"==typeof resource.toString&&(rawUrl=resource.toString()),completeCallUrl=sanitizeUrl(rawUrl),params=splitAndFilter(rawUrl)}resource=originalArgs[1],resource&&(resource.method&&(method=resource.method),resource.headers)&&(capturedHeaders=(isFetchApiHeaders(resource.headers)?getExtraHeadersFromFetchHeaders:getExtraHeadersCaseInsensitive)(resource.headers,extraHttpHeadersToCapture)),span.data.http={method:method,url:completeCallUrl,params:params},span.stack=tracingUtil.getStackTrace(instanaFetch),injectTraceCorrelationHeaders(originalArgs,span,w3cTraceContext),resource=originalFetch.apply(originalThis,originalArgs);return resource.then(response=>{span.data.http.status=response.status,span.ec=500<=response.status?1:0,capturedHeaders=mergeExtraHeadersFromFetchHeaders(capturedHeaders,response.headers,extraHttpHeadersToCapture)}).catch(err=>{span.ec=1,span.data.http.error=err.message}).finally(()=>{span.d=Date.now()-span.ts,null!=capturedHeaders&&0<Object.keys(capturedHeaders).length&&(span.data.http.header=capturedHeaders),span.transmit()}),resource})}}function injectTraceCorrelationHeaders(originalArgs,span,w3cTraceContext){span={[constants.traceIdHeaderName]:span.t,[constants.spanIdHeaderName]:span.s,[constants.traceLevelHeaderName]:"1"};addW3cTraceContextHeaders(span,w3cTraceContext),injectHeaders(originalArgs,span)}function injectSuppressionHeader(originalArgs,w3cTraceContext){var headersToAdd={[constants.traceLevelHeaderName]:"0"};addW3cTraceContextHeaders(headersToAdd,w3cTraceContext),injectHeaders(originalArgs,headersToAdd)}function addW3cTraceContextHeaders(headersToAdd,w3cTraceContext){w3cTraceContext&&(headersToAdd[constants.w3cTraceParent]=w3cTraceContext.renderTraceParent(),w3cTraceContext.hasTraceState())&&(headersToAdd[constants.w3cTraceState]=w3cTraceContext.renderTraceState())}function injectHeaders(originalArgs,headersToAdd){var resource=originalArgs[0],options=originalArgs[1];(!isFetchApiRequest(resource)||options&&options.headers?injectHeadersIntoOptions:injectHeadersIntoRequestObject)(originalArgs,headersToAdd)}function injectHeadersIntoRequestObject(originalArgs,headersToAdd){const existingHeaders=originalArgs[0].headers;null!=existingHeaders&&isFetchApiHeaders(existingHeaders)&&Object.keys(headersToAdd).forEach(key=>{existingHeaders.set(key,headersToAdd[key])})}function injectHeadersIntoOptions(originalArgs,headersToAdd){let options=originalArgs[1];if(null==options&&(originalArgs[1]=options={}),"object"==typeof options){let existingHeaders=options.headers;null==existingHeaders&&(options.headers=existingHeaders=new Headers),existingHeaders&&isFetchApiHeaders(existingHeaders)?Object.keys(headersToAdd).forEach(key=>{existingHeaders.set(key,headersToAdd[key])}):"object"==typeof existingHeaders&&Object.keys(headersToAdd).forEach(key=>{existingHeaders[key]=headersToAdd[key]})}}function isFetchApiRequest(obj){return isType(obj,"Request")}function isFetchApiHeaders(obj){return isType(obj,"Headers")}function isType(obj,constructorName){return null!=obj&&obj.constructor&&obj.constructor.name===constructorName}exports.init=function(config){null!=originalFetch&&(instrument(),extraHttpHeadersToCapture=config.tracing.http.extraHttpHeadersToCapture)},exports.updateConfig=function(config){extraHttpHeadersToCapture=config.tracing.http.extraHttpHeadersToCapture},exports.activate=function(extraConfig){null!=originalFetch&&(extraConfig&&extraConfig.tracing&&extraConfig.tracing.http&&Array.isArray(extraConfig.tracing.http.extraHttpHeadersToCapture)&&(extraHttpHeadersToCapture=extraConfig.tracing.http.extraHttpHeadersToCapture),isActive=!0)},exports.deactivate=function(){isActive=!1};