dd-trace
Version:
Datadog APM tracing client for JavaScript
48 lines (34 loc) • 1.27 kB
JavaScript
const pick = require('../../../../datadog-core/src/utils/src/pick')
const log = require('../../log')
const { DsmPathwayCodec } = require('../../datastreams')
const base64Key = 'dd-pathway-ctx-base64'
const logKeys = [base64Key]
class DSMTextMapPropagator {
constructor (config) {
this.config = config
}
/**
* @param {object} ctx DSM pathway context.
* @param {Record<string, string>} [carrier]
* @returns {Record<string, string> | undefined}
*/
inject (ctx, carrier) {
if (!this.config.dsmEnabled) return
const injectedCarrier = DsmPathwayCodec.encode(ctx, carrier)
if (injectedCarrier === undefined) return
carrier = injectedCarrier
// eslint-disable-next-line eslint-rules/eslint-log-printf-style
log.debug(() => `Inject into carrier (DSM): ${JSON.stringify(pick(carrier, logKeys))}.`)
return carrier
}
extract (carrier) {
if (!this.config.dsmEnabled) return
const dsmContext = DsmPathwayCodec.decode(carrier)
if (!dsmContext) return dsmContext
// eslint-disable-next-line eslint-rules/eslint-log-printf-style
log.debug(() => `Extract from carrier (DSM): ${JSON.stringify(pick(carrier, logKeys))}.`)
return dsmContext
}
}
module.exports = DSMTextMapPropagator