function getTargetUrlFromTransportConfig()

in lib/instrumentation/modules/elasticsearch.js [25:64]


function getTargetUrlFromTransportConfig(config) {
  const transportHosts = config ? config.host || config.hosts : null;
  if (!transportHosts) {
    return null;
  }

  let firstTransportHost = Array.isArray(transportHosts)
    ? transportHosts[0]
    : transportHosts;
  if (!firstTransportHost) {
    return null;
  }

  if (typeof firstTransportHost === 'string') {
    // "example.com:42" or "someprotocol://example.com:42" or
    // "someprotocol://example.com".
    if (!startsWithProtocolRE.test(firstTransportHost)) {
      firstTransportHost = 'http://' + firstTransportHost;
    }
    try {
      return new URL(firstTransportHost);
    } catch (_err) {
      return null;
    }
  } else if (typeof firstTransportHost === 'object') {
    let proto = firstTransportHost.protocol || 'http:';
    if (!proto.endsWith(':')) {
      proto += ':';
    }
    const hostname = firstTransportHost.hostname || firstTransportHost.host;
    const port = firstTransportHost.port || DEFAULT_PORT;
    try {
      return new URL(proto + '//' + hostname + ':' + port);
    } catch (_ignoredErr) {
      return null;
    }
  }

  return null;
}