How to use feature-toggles - 10 common examples

To help you get started, we’ve selected a few feature-toggles examples, based on popular ways it is used in public projects.

Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.

github salesforce / refocus / api / v1 / errorHandler.js View on Github external
module.exports = function errorHandler(err, req, res, next) {
  /* If no error is defined, pass to next middleware. */
  if (!util.isError(err)) return next();

  let errResponse;
  try {
    errResponse = constructError(err);
    if (!isApiError(err) && !isDbError(err) && !isCacheError(err)) {
      if (/Route defined in Swagger specification.*/.test(err.message)) {
        err.status = constants.httpStatus.NOT_ALLOWED;
      } else if (err.name === 'Unauthorized') {
        // Log and reject
        err.status = constants.httpStatus.UNAUTHORIZED;

        if (featureToggles.isFeatureEnabled('enableUnauthorizedActivityLogs')) {
          const logObject = {
            activity: 'unauthorized',
            ipAddress: req.locals.ipAddress,
            uri: req.url,
            method: req.method,
          };

          // Add "request_id" if header is set by heroku.
          if (req.request_id) logObject.request_id = req.request_id;
          activityLog.printActivityLogString(logObject, 'unauthorized');
        }
      } else if (!err.status) {
        err.status = constants.httpStatus.BAD_REQUEST;
      }
    }
github salesforce / refocus / api / v1 / controllers / perspectives.js View on Github external
getPerspective(req, res, next) {
    /* Add userId to response to make it available from perspective page. */
    res.cookie('userId', req.user.id, { maxAge: 1000 });
    helper.cacheEnabled =
      featureToggles.isFeatureEnabled('enableCachePerspective');
    doGet(req, res, next, helper);
  },
github salesforce / refocus / api / v1 / helpers / verbs / doPatch.js View on Github external
o.changed('value', true);
    } else if (props.modelName === 'Perspective') {
      /*
       * Clone the object so that we can copy the new request object values
       * in memory and validate them, instead of updating the db object in
       * memory (which will prevent updating the object in db).
       */
      const clonedObj = JSON.parse(JSON.stringify(o.get()));

      // check the updated version of the perspective
      helper.validateFilterAndThrowError(
        Object.assign(clonedObj, requestBody)
      );
    }

    if (featureToggles.isFeatureEnabled('requireHelpEmailOrHelpUrl') &&
      props.requireAtLeastOneFields) {
      try {
        // check if at least one field present in db
        validateAtLeastOneFieldPresent(o.get(), props.requireAtLeastOneFields);
      } catch (err) {
        // No field in db, check if at least one field present in request
        validateAtLeastOneFieldPresent(req.body, props.requireAtLeastOneFields);
      }
    }

    u.patchJsonArrayFields(o, requestBody, props);
    u.patchArrayFields(o, requestBody, props);

    return o.update(requestBody).then((o) => o.reload());
  })
github salesforce / refocus / rateLimit.js View on Github external
.then((limit) => {
        res.set('X-RateLimit-Limit', limit.total);
        res.set('X-RateLimit-Remaining', limit.remaining - 1);
        res.set('X-RateLimit-Reset', limit.reset);

        if (limit.remaining === 0) {
          res.set('X-RateLimit-Remaining', 0);
          var after = limit.reset - (Date.now() / 1000) | 0;
          res.set('Retry-After', after);

          if (req && featureToggles.isFeatureEnabled('enableLimiterActivityLogs')) {
            const logObject = {
              activity: 'limiter',
              ipAddress: req.locals.ipAddress,
              limit: `${config.max}/${config.duration}`,
              method: req.method,
              requestBytes: JSON.stringify(req.body).length,
              responseBytes: 0,
              token: req.headers.TokenName,
              totalTime: `${Date.now() - req.timestamp}ms`,
              uri: req.url,
              user: req.headers.UserName,
            };

            // Add "request_id" if available
            if (req.request_id) logObject.request_id = req.request_id;
github salesforce / refocus / realtime / setupSocketIO.js View on Github external
.then((user) => {

        // OK, we've got a user from the session!
        // Get IP address and perspective name from socket handshake.
        const ipAddress = ipAddressUtils.getIpAddressFromSocket(socket);

        if (!ipAddress) {
          throw new Error(DISCO_MSG);
        }

        /*
         * Reject if feature enabled and x-forwarded-for has multiple ip
         * addresses.
         */
        if (toggle.isFeatureEnabled('rejectMultipleXForwardedFor') &&
          ipAddress.indexOf(',') !== -1) {
          throw new Error(DISCO_MSG);
        }

        if (conf.ipWhitelistService) {
          ipWhitelistUtils.isWhitelisted(ipAddress)
            .then((allowed) => {
              if (!allowed) {
                throw new Error('Access denied');
              }
            })
            .catch((err) => {
              throw new Error('Access denied');
            });
        } else {
          rtUtils.isIpWhitelisted(ipAddress, ipWhitelist); // throws error
github salesforce / refocus / cache / sampleStorePersist.js View on Github external
function persist() {
  if (!featureToggles.isFeatureEnabled(constants.featureName)) {
    return Promise.resolve(false);
  }

  return storeSampleToDb()
  .catch((err) => {
    // NO-OP
    logger.error(err); // eslint-disable-line no-console
    Promise.resolve(false);
  });
} // persist
github salesforce / refocus / cache / sampleStoreInit.js View on Github external
function storeSampleToCacheOrDb() {
  const currentStatus = featureToggles.isFeatureEnabled(constants.featureName)
    || false;
  return getPreviousStatus()
    .then((prevState) => {
      const previousStatus = (prevState == 'true') || false;

      // set the previousStatus to the currentStatus
      redisClient.setAsync(constants.previousStatusKey, currentStatus);

      /*
       * when the current status and the previous status do not match, actions
       * needs to be taken based on the current status
      */
      if (previousStatus !== currentStatus) {

        /*
         * call "popluate" when "enableRedisSampleStore" flag has been changed
github salesforce / refocus / index.js View on Github external
if (!featureToggles.isFeatureEnabled('enableClockProcess')) {
    require('./clock/index'); // eslint-disable-line global-require
  }

  /*
   * Logging
   */

  const processName = (process.env.DYNO ? process.env.DYNO + ':' : '') +
    clusterProcessId;

  if (conf.newRelicKey) {
    require('newrelic');
  }

  if (featureToggles.isFeatureEnabled('enablePubsubStatsLogs')) {
    const logPubSubStats = require('./realtime/pubSubStats').log;
    setInterval(() => logPubSubStats(processName),
      conf.pubSubStatsLoggingInterval);
  }

  // Log env vars. Only log once when there are multiple processes.
  // Process id is 0 for a single process, 1-n for multiple throng workers.
  if (clusterProcessId < 2) logEnvVars.log(process.env);

  // Custom middleware to add process info to the request (for use in logging)
  app.use((req, res, next) => {
    // process id (0 for a single process, 1-n for multiple throng workers)
    req.clusterProcessId = clusterProcessId;

    // process name (dyno + process id)
    req.process = processName;
github salesforce / refocus / jobQueue / jobWrapper.js View on Github external
function calculateJobPriority(prioritize, deprioritize, req) {
  const jobPriority = {
    high: 'high',
    normal: 'normal',
    low: 'low',
  };

  if (featureToggles.isFeatureEnabled('enableBullForBulkDelSubj')) {
    // ranges from 1 (highest priority) to MAX_INT  (lowest priority)
    jobPriority.high = 1;
    jobPriority.normal = 50;
    jobPriority.low = 100;
  }

  // low=10, normal=0, medium=-5, high=-10, critical=-15
  if (!req) return jobPriority.normal;
  const ip = req.locals.ipAddress;
  const un = req.headers.UserName || '';
  const tn = req.headers.TokenName || '';
  if (prioritize.includes(ip) ||
    prioritize.includes(un) ||
    prioritize.includes(tn)) return jobPriority.high;
  if (deprioritize.includes(ip) ||
    deprioritize.includes(un) ||
github salesforce / refocus / cache / redisCache.js View on Github external
function registerHandlers(name, cli) {
  cli.on('error', (err) => {
    logger.error(`redisClientConnection=${name} event=error`, err);
    return new Error(err);
  });

  if (featureToggles.isFeatureEnabled('enableRedisConnectionLogging')) {
    cli.on('connect', () => {
      logger.info(`redisClientConnection=${name} event=connect`);
    });

    cli.on('ready', () => {
      logger.info(`redisClientConnection=${name} event=ready`);
    });

    cli.on('reconnecting', () => {
      logger.info(`redisClientConnection=${name} event=reconnecting`);
    });
  }
} // registerHandlers

feature-toggles

Feature Toggles for JavaScript

MIT
Latest version published 9 years ago

Package Health Score

48 / 100
Full package analysis

Popular feature-toggles functions