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    
@supertenant/core / src / index.js
Size: Mime:
// (c) Copyright 2023 Supertenant Ltd. - all rights reserved.
// See LICENSE file in project root for license terms.

'use strict';

const log = require('./logger');
const normalizeConfig = require('./util/normalizeConfig');
const sdk = require('./sdk');

// Require this first to ensure that we have non-instrumented http available.
const uninstrumentedHttp = require('./uninstrumentedHttp');
const secrets = require('./secrets');
const tracing = require('./tracing');
const util = require('./util');
const { superbrain } = require('@supertenant/superbrain');

/**
 * @typedef {{
    h?: string,
    e?: string,
    hl?: boolean,
    cp?: string,
   }} PIDData
 */

/**
 * @typedef {Object} CoreModule
 * @property {import('./secrets')} secrets
 * @property {import('./tracing/index')} tracing
 */

/**
 * @param {Array.<import('./tracing/index').InstrumentedModule>} additionalInstrumentationModules
 */
function registerAdditionalInstrumentations(additionalInstrumentationModules) {
  tracing.registerAdditionalInstrumentations(additionalInstrumentationModules);
}

function preInit() {
  const preliminaryConfig = normalizeConfig();
  util.hasThePackageBeenInitializedTooLate();
  util.requireHook.init(preliminaryConfig);
  tracing.preInit(preliminaryConfig);
  // Initialize secrets as early as possible, in particular for env var collection in fargate/google-cloud-run when
  // the config comes from SUPERTENANT_SUPERMETER_SECRETS.
  secrets.init(/** @type {secrets.SecretOption} */ (preliminaryConfig));
}

/**
 *
 * @param {import('./util/normalizeConfig').Config} config
 * @param {import('../../collector/src/pidStore')} processIdentityProvider
 */
function init(config, processIdentityProvider) {
  log.init(/** @type {log.LoggerConfig} */ (config));
  util.hasThePackageBeenInitializedTooLate();
  config = normalizeConfig(config);
  secrets.init(/** @type {secrets.SecretOption} */ (config));
  util.requireHook.init(config);
  tracing.init(config, processIdentityProvider);

  const skipSuperbrainInit = process.env.SUPERTENANT_SUPERMETER_SKIP_SUPERBRAIN_INIT === 'true';
  if (!skipSuperbrainInit) {
    // @ts-ignore typescript complains it can't find the package.
    const pkg = require('../package.json');
    if (!superbrain.init(null, pkg.version)) {
      log.getLogger('init').error('Failed to initialize superbrain, supermeter will not work');
    }
  } else {
    log.getLogger('init').warn('Skipping superbrain init');
  }
}

module.exports = {
  logger: log,
  superbrainLogger: superbrain.log.bind(superbrain),
  secrets,
  tracing,
  uninstrumentedHttp,
  util,
  init,
  preInit,
  registerAdditionalInstrumentations,
  sdk
};