diff --git a/api/src/routes/tests/personaController/mergePersona-test.js b/api/src/routes/tests/personaController/mergePersona-test.js index da4184bd26..fe00abc037 100644 --- a/api/src/routes/tests/personaController/mergePersona-test.js +++ b/api/src/routes/tests/personaController/mergePersona-test.js @@ -41,14 +41,14 @@ describe('PersonaController.mergePersona', () => { expectedCode }) => new Promise((resolve, reject) => { apiApp - .post(routes.MERGE_PERSONA) - .set('Authorization', `Bearer ${token}`) - .query({ mergePersonaFromId, mergePersonaToId }) - .expect(expectedCode) - .end((err, res) => { - if (err) return reject(err); - resolve(res); - }); + .post(routes.MERGE_PERSONA) + .set('Authorization', `Bearer ${token}`) + .query({ mergePersonaFromId, mergePersonaToId }) + .expect(expectedCode) + .end((err, res) => { + if (err) return reject(err); + resolve(res); + }); }); const assertFailedMerge = async ({ @@ -70,7 +70,7 @@ describe('PersonaController.mergePersona', () => { }; it('should merge two people', async () => { - const ifi1 = { key: 'mbox', value: 'mailto:A@test.com' }; + const ifi1 = { key: 'mbox', value: 'mailto:A1@test.com' }; const ifi2 = { key: 'mbox', value: 'mailto:A2@test.com' }; const organisation = testId; const { personaId: personaAId } = await personaService.createUpdateIdentifierPersona({ diff --git a/lib/connections/redis.js b/lib/connections/redis.js index e8ea9d99a4..0345ed1421 100644 --- a/lib/connections/redis.js +++ b/lib/connections/redis.js @@ -1,31 +1,39 @@ -import redis from 'redis'; +import Redis from 'ioredis'; import logger from 'lib/logger'; -import Promise from 'bluebird'; +import defaultTo from 'lodash/defaultTo'; -Promise.promisifyAll(redis.RedisClient.prototype); -Promise.promisifyAll(redis.Multi.prototype); +const DEFAULT_REDIS_PORT = 6379; export const getOptions = () => { - const options = {}; - - // these options should only be set in the config if present (even defaults shouldnt be provided) - if (process.env.REDIS_PASSWORD) options.auth_pass = process.env.REDIS_PASSWORD; - if (process.env.REDIS_DB) options.db = process.env.REDIS_DB; - - return options; + const eventsRepo = defaultTo(process.env.EVENTS_REPO, 'redis'); + switch (eventsRepo) { + case 'sentinel': { + const db = defaultTo(Number(process.env.SENTINEL_DB), 0); + const password = process.env.SENTINEL_PASSWORD; + const name = defaultTo(process.env.SENTINEL_NAME, 'mymaster'); + const connections = defaultTo(process.env.SENTINEL_CONNECTIONS, '127.0.0.1:6379'); + const sentinels = connections.split(' ').map((conn) => { + const [host, port] = conn.split(':'); + return { host, port: defaultTo(Number(port), DEFAULT_REDIS_PORT) }; + }); + return { db, password, name, sentinels }; + } + default: case 'redis': { + const db = defaultTo(Number(process.env.REDIS_DB), 0); + const password = process.env.REDIS_PASSWORD; + const host = process.env.REDIS_HOST; + const port = defaultTo(Number(process.env.REDIS_PORT), DEFAULT_REDIS_PORT); + return { db, password, host, port }; + } + } }; export const createClient = () => { - let client; try { - const host = process.env.REDIS_HOST; - const port = process.env.REDIS_PORT || 6379; - const url = `redis://${host}:${port}`; const options = getOptions(); - client = redis.createClient(url, options); + logger.info('Creating Redis client'); + return new Redis(options); } catch (e) { logger.error("Couldn't connect to redis", e); } - - return client; }; diff --git a/lib/services/importPersonas/importPersonas-test.js b/lib/services/importPersonas/importPersonas-test.js index 760b8bf191..d2141c7535 100644 --- a/lib/services/importPersonas/importPersonas-test.js +++ b/lib/services/importPersonas/importPersonas-test.js @@ -260,7 +260,7 @@ describe('import personas service', () => { data => data ).collect() - .toPromise(Promise); + .toPromise(Promise); await downloadToStream( csvHandle diff --git a/lib/services/queue/bull/index.js b/lib/services/queue/bull/index.js index 99a9784b6a..c24911871e 100644 --- a/lib/services/queue/bull/index.js +++ b/lib/services/queue/bull/index.js @@ -4,8 +4,6 @@ import { isString, map, forEach } from 'lodash'; import * as redis from 'lib/connections/redis'; import { Promise } from 'bluebird'; -const redisOpts = redis.getOptions(); - const Bull = { queues: {} }; @@ -15,7 +13,7 @@ const logError = queueName => (error) => { }; const removeJob = (job) => { - logger.debug(`REMOVING JOB ${job.jobId}`); + logger.debug(`REMOVING JOB ${job.id}`); job.remove(); }; @@ -23,21 +21,19 @@ export const getQueue = (queueName, done) => { if (!Bull.queues[queueName]) { Bull.queues[queueName] = new Queue( queueName, - process.env.REDIS_PORT, - process.env.REDIS_HOST, - redisOpts + { createClient: redis.createClient } ) - .on('error', logError(queueName)) - .on('completed', (job) => { - logger.debug(`COMPLETED JOB ${job.jobId}`); - removeJob(job); - }) - .on('failed', (job, err) => { - const queue = err.queue || {}; - const failedQueueName = queue.name || 'No queue'; - logger.debug(`JOB ${job.jobId} FAILED`, failedQueueName); - removeJob(job); - }); + .on('error', logError(queueName)) + .on('completed', (job) => { + logger.debug(`COMPLETED JOB ${job.id}`); + removeJob(job); + }) + .on('failed', (job, err) => { + const queue = err.queue || {}; + const failedQueueName = queue.name || 'No queue'; + logger.debug(`JOB ${job.id} FAILED`, failedQueueName); + removeJob(job); + }); } return done(null, Bull.queues[queueName]); @@ -81,9 +77,9 @@ const sendDeadLetter = ({ queueName, deadLetter }) => async (data) => { export const subscribe = ({ queueName, handler, - onProccessed = () => {}, + onProccessed = () => { }, deadLetter - }, done) => { +}, done) => { getQueue(queueName, (err, queue) => { if (err) return done(err); diff --git a/package.json b/package.json index b2cbf06f2e..563a884cc1 100644 --- a/package.json +++ b/package.json @@ -79,7 +79,7 @@ "body-parser": "^1.14.1", "boolean": "^0.1.0", "btoa": "^1.1.2", - "bull": "2.*", + "bull": "^3.3.10", "chai-fs": "1.0.*", "chai-immutable": "^1.6.0", "clamscan": "^0.8.4", @@ -110,6 +110,7 @@ "immutability-helper": "^2.0.0", "immutable": "^3.8.1", "invariant": "^2.2.0", + "ioredis": "^3.2.2", "isomorphic-style-loader": "^2.0.0", "js-cookie": "^2.1.3", "jsonwebtoken": "^7.3.0", diff --git a/yarn.lock b/yarn.lock index ef5af722a1..2b8b9fb98f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1877,7 +1877,7 @@ bluebird@^2.9.27: version "2.11.0" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-2.11.0.tgz#534b9033c022c9579c56ba3b3e5a5caafbb650e1" -bluebird@^3.3.0, bluebird@^3.3.3, bluebird@^3.3.4, bluebird@^3.4.6, bluebird@^3.5.0, bluebird@^3.5.1: +bluebird@^3.3.0, bluebird@^3.3.4, bluebird@^3.4.6, bluebird@^3.5.0, bluebird@^3.5.1: version "3.5.1" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.1.tgz#d9551f9de98f1fcda1e683d17ee91a0602ee2eb9" @@ -2248,24 +2248,17 @@ builtin-status-codes@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" -bull-redlock@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/bull-redlock/-/bull-redlock-2.2.1.tgz#98aa093d2d069cc54039526c8756a864b8785be9" - dependencies: - bluebird "^3.3.3" - -bull@2.*: - version "2.2.6" - resolved "https://registry.yarnpkg.com/bull/-/bull-2.2.6.tgz#568baae0dc0bbcc77d5f1d2fea545a336be7603e" +bull@^3.3.10: + version "3.3.10" + resolved "https://registry.yarnpkg.com/bull/-/bull-3.3.10.tgz#32e76281902070b4720bc37b3793f09db635f646" dependencies: bluebird "^3.5.0" - bull-redlock "^2.2.1" + cron-parser "^2.4.1" debuglog "^1.0.0" - disturbed "^1.0.6" - ioredis "^2.5.0" + ioredis "^3.1.4" lodash "^4.17.4" - semver "^5.3.0" - uuid "^3.0.1" + semver "^5.4.1" + uuid "^3.1.0" bunyan@^1.4.0: version "1.8.12" @@ -3111,6 +3104,13 @@ create-react-class@^15.5.1, create-react-class@^15.5.x, create-react-class@^15.6 loose-envify "^1.3.1" object-assign "^4.1.1" +cron-parser@^2.4.1: + version "2.4.5" + resolved "https://registry.yarnpkg.com/cron-parser/-/cron-parser-2.4.5.tgz#33629810a4b491004c363f4b6996133bbc22e16f" + dependencies: + is-nan "^1.2.1" + moment-timezone "^0.5.0" + cross-spawn@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-3.0.1.tgz#1256037ecb9f0c5f79e3d6ef135e30770184b982" @@ -3574,7 +3574,7 @@ date-now@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" -debug@2, debug@2.6.9, debug@^2.1.0, debug@^2.1.1, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@~2.6.4, debug@~2.6.6: +debug@2, debug@2.6.9, debug@^2.1.0, debug@^2.1.1, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9, debug@~2.6.4, debug@~2.6.6: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" dependencies: @@ -3650,7 +3650,7 @@ defaults@^1.0.3: dependencies: clone "^1.0.2" -define-properties@^1.1.2: +define-properties@^1.1.1, define-properties@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.2.tgz#83a73f2fea569898fb737193c8f873caf6d45c94" dependencies: @@ -3712,6 +3712,10 @@ delegates@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" +denque@^1.1.0: + version "1.2.3" + resolved "https://registry.yarnpkg.com/denque/-/denque-1.2.3.tgz#98c50c8dd8cdfae318cc5859cc8ee3da0f9b0cc2" + depd@1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.0.tgz#e1bd82c6aab6ced965b97b88b17ed3e528ca18c3" @@ -3819,12 +3823,6 @@ discontinuous-range@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/discontinuous-range/-/discontinuous-range-1.0.0.tgz#e38331f0844bba49b9a9cb71c771585aab1bc65a" -disturbed@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/disturbed/-/disturbed-1.0.6.tgz#a3d7524ef7885973e3c89768aa1f5d4e726c72e8" - dependencies: - node-uuid "^1.4.7" - dns-prefetch-control@0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/dns-prefetch-control/-/dns-prefetch-control-0.1.0.tgz#60ddb457774e178f1f9415f0cabb0e85b0b300b2" @@ -6271,18 +6269,33 @@ invert-kv@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" -ioredis@^2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/ioredis/-/ioredis-2.5.0.tgz#fb6fdf0a1a7e0974614c67b6e5e11308a8cf95b9" +ioredis@^3.1.4, ioredis@^3.2.2: + version "3.2.2" + resolved "https://registry.yarnpkg.com/ioredis/-/ioredis-3.2.2.tgz#b7d5ff3afd77bb9718bb2821329b894b9a44c00b" dependencies: bluebird "^3.3.4" cluster-key-slot "^1.0.6" - debug "^2.2.0" - double-ended-queue "^2.1.0-0" + debug "^2.6.9" + denque "^1.1.0" flexbuffer "0.0.6" - lodash "^4.8.2" + lodash.assign "^4.2.0" + lodash.bind "^4.2.1" + lodash.clone "^4.5.0" + lodash.clonedeep "^4.5.0" + lodash.defaults "^4.2.0" + lodash.difference "^4.5.0" + lodash.flatten "^4.4.0" + lodash.foreach "^4.5.0" + lodash.isempty "^4.4.0" + lodash.keys "^4.2.0" + lodash.noop "^3.0.1" + lodash.partial "^4.2.1" + lodash.pick "^4.4.0" + lodash.sample "^4.2.1" + lodash.shuffle "^4.2.0" + lodash.values "^4.3.0" redis-commands "^1.2.0" - redis-parser "^1.3.0" + redis-parser "^2.4.0" ip@0.3.x: version "0.3.3" @@ -6495,6 +6508,12 @@ is-my-json-valid@^2.10.0, is-my-json-valid@^2.12.4: jsonpointer "^4.0.0" xtend "^4.0.0" +is-nan@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/is-nan/-/is-nan-1.2.1.tgz#9faf65b6fb6db24b7f5c0628475ea71f988401e2" + dependencies: + define-properties "^1.1.1" + is-npm@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-1.0.0.tgz#f2fb63a65e4905b406c86072765a1a4dc793b9f4" @@ -7679,6 +7698,10 @@ lodash.assign@^4.0.3, lodash.assign@^4.0.6, lodash.assign@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-4.2.0.tgz#0d99f3ccd7a6d261d19bdaeb9245005d285808e7" +lodash.bind@^4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/lodash.bind/-/lodash.bind-4.2.1.tgz#7ae3017e939622ac31b7d7d7dcb1b34db1690d35" + lodash.camelcase@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-3.0.1.tgz#932c8b87f8a4377897c67197533282f97aeac298" @@ -7689,7 +7712,11 @@ lodash.chunk@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/lodash.chunk/-/lodash.chunk-4.2.0.tgz#66e5ce1f76ed27b4303d8c6512e8d1216e8106bc" -lodash.clonedeep@^4.3.2: +lodash.clone@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.clone/-/lodash.clone-4.5.0.tgz#195870450f5a13192478df4bc3d23d2dea1907b6" + +lodash.clonedeep@^4.3.2, lodash.clonedeep@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" @@ -7717,6 +7744,14 @@ lodash.deburr@^3.0.0: dependencies: lodash._root "^3.0.0" +lodash.defaults@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" + +lodash.difference@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.difference/-/lodash.difference-4.5.0.tgz#9ccb4e505d486b91651345772885a2df27fd017c" + lodash.endswith@^4.0.1, lodash.endswith@^4.2.1: version "4.2.1" resolved "https://registry.yarnpkg.com/lodash.endswith/-/lodash.endswith-4.2.1.tgz#fed59ac1738ed3e236edd7064ec456448b37bc09" @@ -7729,6 +7764,10 @@ lodash.findindex@^4.3.0: version "4.6.0" resolved "https://registry.yarnpkg.com/lodash.findindex/-/lodash.findindex-4.6.0.tgz#a3245dee61fb9b6e0624b535125624bb69c11106" +lodash.flatten@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" + lodash.flattendeep@^4.4.0: version "4.4.0" resolved "https://registry.yarnpkg.com/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz#fb030917f86a3134e5bc9bec0d69e0013ddfedb2" @@ -7737,6 +7776,10 @@ lodash.flow@^3.3.0: version "3.5.0" resolved "https://registry.yarnpkg.com/lodash.flow/-/lodash.flow-3.5.0.tgz#87bf40292b8cf83e4e8ce1a3ae4209e20071675a" +lodash.foreach@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.foreach/-/lodash.foreach-4.5.0.tgz#1a6a35eace401280c7f06dddec35165ab27e3e53" + lodash.get@4.4.2: version "4.4.2" resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" @@ -7761,7 +7804,7 @@ lodash.isboolean@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz#6c2e171db2a257cd96802fd43b01b20d5f5870f6" -lodash.isempty@^4.2.1: +lodash.isempty@^4.2.1, lodash.isempty@^4.4.0: version "4.4.0" resolved "https://registry.yarnpkg.com/lodash.isempty/-/lodash.isempty-4.4.0.tgz#6f86cbedd8be4ec987be9aaf33c9684db1b31e7e" @@ -7816,6 +7859,10 @@ lodash.keys@^3.0.0, lodash.keys@^3.1.2: lodash.isarguments "^3.0.0" lodash.isarray "^3.0.0" +lodash.keys@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-4.2.0.tgz#a08602ac12e4fb83f91fc1fb7a360a4d9ba35205" + lodash.keysin@^3.0.0: version "3.0.8" resolved "https://registry.yarnpkg.com/lodash.keysin/-/lodash.keysin-3.0.8.tgz#22c4493ebbedb1427962a54b445b2c8a767fb47f" @@ -7855,10 +7902,22 @@ lodash.mergewith@^4.6.0: version "4.6.1" resolved "https://registry.yarnpkg.com/lodash.mergewith/-/lodash.mergewith-4.6.1.tgz#639057e726c3afbdb3e7d42741caa8d6e4335927" +lodash.noop@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/lodash.noop/-/lodash.noop-3.0.1.tgz#38188f4d650a3a474258439b96ec45b32617133c" + lodash.once@^4.0.0, lodash.once@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" +lodash.partial@^4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/lodash.partial/-/lodash.partial-4.2.1.tgz#49f3d8cfdaa3bff8b3a91d127e923245418961d4" + +lodash.pick@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.pick/-/lodash.pick-4.4.0.tgz#52f05610fff9ded422611441ed1fc123a03001b3" + lodash.reduce@4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.reduce/-/lodash.reduce-4.5.0.tgz#af7d2ec621062441e77d5bf408a1e071ef86691c" @@ -7871,6 +7930,14 @@ lodash.restparam@^3.0.0: version "3.6.1" resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805" +lodash.sample@^4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/lodash.sample/-/lodash.sample-4.2.1.tgz#5e4291b0c753fa1abeb0aab8fb29df1b66f07f6d" + +lodash.shuffle@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/lodash.shuffle/-/lodash.shuffle-4.2.0.tgz#145b5053cf875f6f5c2a33f48b6e9948c6ec7b4b" + lodash.snakecase@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz#39d714a35357147837aefd64b5dcbb16becd8f8d" @@ -7894,6 +7961,10 @@ lodash.uniq@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" +lodash.values@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/lodash.values/-/lodash.values-4.3.0.tgz#a3a6c2b0ebecc5c2cba1c17e6e620fe81b53d347" + lodash.words@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/lodash.words/-/lodash.words-3.2.0.tgz#4e2a8649bc08745b17c695b1a3ce8fee596623b3" @@ -7908,7 +7979,7 @@ lodash@^3.10.1, lodash@^3.8.0: version "3.10.1" resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6" -lodash@^4.0.0, lodash@^4.0.1, lodash@^4.11.1, lodash@^4.12.0, lodash@^4.14.0, lodash@^4.15.0, lodash@^4.16.4, lodash@^4.17.2, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.2.0, lodash@^4.2.1, lodash@^4.3.0, lodash@^4.5.0, lodash@^4.6.1, lodash@^4.8.2, lodash@~4.17.2, lodash@~4.17.4: +lodash@^4.0.0, lodash@^4.0.1, lodash@^4.11.1, lodash@^4.12.0, lodash@^4.14.0, lodash@^4.15.0, lodash@^4.16.4, lodash@^4.17.2, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.2.0, lodash@^4.2.1, lodash@^4.3.0, lodash@^4.5.0, lodash@^4.6.1, lodash@~4.17.2, lodash@~4.17.4: version "4.17.5" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.5.tgz#99a92d65c0272debe8c96b6057bc8fbfa3bed511" @@ -8453,11 +8524,17 @@ mollusc@^1.1.0: dependencies: unicode-json "~2.0.0" +moment-timezone@^0.5.0: + version "0.5.14" + resolved "https://registry.yarnpkg.com/moment-timezone/-/moment-timezone-0.5.14.tgz#4eb38ff9538b80108ba467a458f3ed4268ccfcb1" + dependencies: + moment ">= 2.9.0" + moment@2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/moment/-/moment-2.3.1.tgz#da73d70f62656bb5b7eaf0387f793bf6121312e3" -moment@2.x.x, moment@^2.10.6, moment@^2.11.2, moment@^2.18.0: +moment@2.x.x, "moment@>= 2.9.0", moment@^2.10.6, moment@^2.11.2, moment@^2.18.0: version "2.20.1" resolved "https://registry.yarnpkg.com/moment/-/moment-2.20.1.tgz#d6eb1a46cbcc14a2b2f9434112c1ff8907f313fd" @@ -8912,7 +8989,7 @@ node-sass@^4.5.0: stdout-stream "^1.4.0" "true-case-path" "^1.0.2" -node-uuid@^1.4.1, node-uuid@^1.4.7, node-uuid@~1.4.7: +node-uuid@^1.4.1, node-uuid@~1.4.7: version "1.4.8" resolved "https://registry.yarnpkg.com/node-uuid/-/node-uuid-1.4.8.tgz#b040eb0923968afabf8d32fb1f17f1167fdab907" @@ -11283,11 +11360,7 @@ redis-commands@^1.2.0: version "1.3.1" resolved "https://registry.yarnpkg.com/redis-commands/-/redis-commands-1.3.1.tgz#81d826f45fa9c8b2011f4cd7a0fe597d241d442b" -redis-parser@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/redis-parser/-/redis-parser-1.3.0.tgz#806ebe7bbfb7d34e4d7c1e9ef282efcfad04126a" - -redis-parser@^2.6.0: +redis-parser@^2.4.0, redis-parser@^2.6.0: version "2.6.0" resolved "https://registry.yarnpkg.com/redis-parser/-/redis-parser-2.6.0.tgz#52ed09dacac108f1a631c07e9b69941e7a19504b"