import tls from 'tls'; import { PassThrough } from 'stream'; import { EmailTest } from 'meteor/email'; import { Mongo } from 'meteor/mongo'; import { HTTP } from 'meteor/http'; // Set default HTTP call timeout to 20s const envTimeout = parseInt(process.env.HTTP_DEFAULT_TIMEOUT, 10); const timeout = !isNaN(envTimeout) ? envTimeout : 20000; const { call } = HTTP; HTTP.call = function _call(method, url, options = {}, callback) { const defaultTimeout = 'timeout' in options ? options : { ...options, timeout }; return call.call(HTTP, method, url, defaultTimeout, callback); }; // FIX For TLS error see more here https://github.com/RocketChat/Rocket.Chat/issues/9316 // TODO: Remove after NodeJS fix it, more information // https://github.com/nodejs/node/issues/16196 // https://github.com/nodejs/node/pull/16853 // This is fixed in Node 10, but this supports LTS versions tls.DEFAULT_ECDH_CURVE = 'auto'; const mongoConnectionOptions = { // add retryWrites=false if not present in MONGO_URL ...!process.env.MONGO_URL.includes('retryWrites') && { retryWrites: false }, }; const mongoOptionStr = process.env.MONGO_OPTIONS; if (typeof mongoOptionStr !== 'undefined') { const mongoOptions = JSON.parse(mongoOptionStr); Object.assign(mongoConnectionOptions, mongoOptions); } if (Object.keys(mongoConnectionOptions).length > 0) { Mongo.setConnectionOptions(mongoConnectionOptions); } process.env.HTTP_FORWARDED_COUNT = process.env.HTTP_FORWARDED_COUNT || '1'; // Send emails to a "fake" stream instead of print them in console if (process.env.NODE_ENV !== 'development' || process.env.TEST_MODE) { const stream = new PassThrough(); EmailTest.overrideOutputStream(stream); stream.on('data', () => {}); stream.on('end', () => {}); }