diff --git a/analytics/package.json b/analytics/package.json index 53a9bd9859..6fb0ccb34a 100644 --- a/analytics/package.json +++ b/analytics/package.json @@ -10,12 +10,13 @@ "bull": "3.3.10", "debug": "^4.1.0", "faker": "^4.1.0", + "ioredis": "3.2.2", "lodash.intersection": "^4.4.0", "node-env-file": "^0.1.8", "now-env": "^3.1.0", "raven": "^2.6.4", "redis-tag-cache": "^1.2.1", - "rethinkdbdash": "^2.3.29", + "rethinkdbdash": "^2.3.31", "rethinkhaberdashery": "^2.3.32", "sanitize-filename": "^1.6.1", "sha1": "^1.1.1", diff --git a/analytics/queues/identify-analytics.js b/analytics/queues/identify-analytics.js index 7eacf87540..a50689bb11 100644 --- a/analytics/queues/identify-analytics.js +++ b/analytics/queues/identify-analytics.js @@ -22,8 +22,8 @@ export default async (job: Job) => { try { await processJob(job); } catch (err) { - debug('❌ Error in job:\n'); - debug(err); + console.error('❌ Error in job:\n'); + console.error(err); Raven.captureException(err); } }; diff --git a/analytics/queues/track-analytics.js b/analytics/queues/track-analytics.js index 2b7b11aea9..94b92fbd2a 100644 --- a/analytics/queues/track-analytics.js +++ b/analytics/queues/track-analytics.js @@ -25,8 +25,8 @@ export default async (job: Job) => { try { await processJob(job); } catch (err) { - debug('❌ Error in job:\n'); - debug(err); + console.error('❌ Error in job:\n'); + console.error(err); Raven.captureException(err); } }; diff --git a/analytics/utils/identify.js b/analytics/utils/identify.js index 105ce84fa4..9e32f1910b 100644 --- a/analytics/utils/identify.js +++ b/analytics/utils/identify.js @@ -14,7 +14,8 @@ export const identify = (userId: string, userProperties: Object) => { }; return Promise.all([amplitudePromise()]).catch(err => { - console.error('Error Identifying event: ', err.message); + console.error('❌ Error in job:\n'); + console.error(err); Raven.captureException(err); }); }; diff --git a/analytics/utils/track.js b/analytics/utils/track.js index ece1fe4c9e..74c75b9856 100644 --- a/analytics/utils/track.js +++ b/analytics/utils/track.js @@ -32,7 +32,8 @@ export const track = ( }; return Promise.all([amplitudePromise()]).catch(err => { - console.error('Error tracking event: ', err.message); + console.error('❌ Error in job:\n'); + console.error(err); Raven.captureException(err); }); }; diff --git a/analytics/yarn.lock b/analytics/yarn.lock index f382f4eb18..267fb34341 100644 --- a/analytics/yarn.lock +++ b/analytics/yarn.lock @@ -104,9 +104,9 @@ core-util-is@~1.0.0: integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= cron-parser@^2.4.1: - version "2.7.1" - resolved "https://registry.yarnpkg.com/cron-parser/-/cron-parser-2.7.1.tgz#d08c00b1e220db564fd1cecb5019c8dd450f84d1" - integrity sha512-gupE4KsGEVtp5X4YbUlQx6NiFt3e+VOhREPI4ZXS9FT5JcOjfw2ey1EUv3J6XWrxHR1aKYrk4uJDmdRjG39bgA== + version "2.7.3" + resolved "https://registry.yarnpkg.com/cron-parser/-/cron-parser-2.7.3.tgz#12603f89f5375af353a9357be2543d3172eac651" + integrity sha512-t9Kc7HWBWPndBzvbdQ1YG9rpPRB37Tb/tTviziUOh1qs3TARGh3b1p+tnkOHNe1K5iI3oheBPgLqwotMM7+lpg== dependencies: is-nan "^1.2.1" moment-timezone "^0.5.23" @@ -208,7 +208,7 @@ inherits@~2.0.3: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= -ioredis@^3.1.4: +ioredis@3.2.2, ioredis@^3.1.4: version "3.2.2" resolved "https://registry.yarnpkg.com/ioredis/-/ioredis-3.2.2.tgz#b7d5ff3afd77bb9718bb2821329b894b9a44c00b" integrity sha512-g+ShTQYLsCcOUkNOK6CCEZbj3aRDVPw3WOwXk+LxlUKvuS9ujEqP2MppBHyRVYrNNFW/vcPaTBUZ2ctGNSiOCA== @@ -506,7 +506,7 @@ redis-tag-cache@^1.2.1: dependencies: ioredis "^4.0.0" -rethinkdbdash@^2.3.29: +rethinkdbdash@^2.3.31: version "2.3.31" resolved "https://registry.yarnpkg.com/rethinkdbdash/-/rethinkdbdash-2.3.31.tgz#fe2f73d1fa6e6f5d96d8e881292013cf6dca914d" integrity sha512-6nXrKFjdg2Ug0YpdmPWSvyD/2EisHnFNt4FWZ74dcXGK48ievSv+cNFTmVv+KjLi6I9CCf6w4CKZ6yCYTfMfdQ== diff --git a/api/index.js b/api/index.js index cd6672a45f..43ca1769ed 100644 --- a/api/index.js +++ b/api/index.js @@ -9,7 +9,6 @@ debug('logging with debug enabled!'); import { createServer } from 'http'; import express from 'express'; import Raven from 'shared/raven'; -import { ApolloEngine } from 'apollo-engine'; import toobusy from 'shared/middlewares/toobusy'; import addSecurityMiddleware from 'shared/middlewares/security'; import csrf from 'shared/middlewares/csrf'; diff --git a/api/migrations/seed/index.js b/api/migrations/seed/index.js index 48aa108d9d..8bc67cf946 100644 --- a/api/migrations/seed/index.js +++ b/api/migrations/seed/index.js @@ -235,5 +235,6 @@ Promise.all([ debug( 'Encountered error while inserting data (see below), please run yarn run db:drop and yarn run db:migrate to restore tables to original condition, then run this script again.' ); - debug(err); + console.error('❌ Error in job:\n'); + console.error(err); }); diff --git a/api/package.json b/api/package.json index 32e82b376c..dccbf0487b 100644 --- a/api/package.json +++ b/api/package.json @@ -4,21 +4,20 @@ }, "dependencies": { "algoliasearch": "^3.31.0", - "apollo-engine": "^1.1.2", - "apollo-local-query": "^0.3.0", + "apollo-local-query": "^0.3.1", "apollo-server-express": "^2.2.6", - "apollo-upload-client": "^8.1.0", + "apollo-upload-client": "^9.1.0", "aws-sdk": "2.200.0", "axios": "^0.16.2", "b2a": "^1.0.10", "babel-plugin-replace-dynamic-import-runtime": "^1.0.2", - "babel-plugin-styled-components": "^1.9.2", + "babel-plugin-styled-components": "^1.9.4", "babel-plugin-transform-flow-strip-types": "^6.22.0", "babel-plugin-transform-object-rest-spread": "^6.23.0", "babel-preset-env": "^1.7.0", "backpack-core": "^0.8.3", "body-parser": "^1.18.3", - "bull": "3.3.10", + "bull": "^3.5.2", "casual": "^1.5.12", "compression": "^1.7.3", "cookie-parser": "^1.4.3", @@ -48,11 +47,11 @@ "find-with-regex": "^1.1.3", "flow-typed": "^2.5.1", "graphql": "0.13.x", - "graphql-cost-analysis": "^0.1.2", + "graphql-cost-analysis": "^1.0.2", "graphql-date": "^1.0.3", "graphql-depth-limit": "^1.1.0", - "graphql-log": "0.1.2", - "graphql-tools": "3.0.0", + "graphql-log": "^0.1.3", + "graphql-tools": "^4.0.3", "helmet": "^3.15.0", "highlight.js": "^9.13.1", "history": "^4.6.1", @@ -61,8 +60,8 @@ "hpp": "^0.2.2", "hsts": "^2.1.0", "imgix-core-js": "^1.2.0", - "immutability-helper": "^2.8.1", - "ioredis": "^4.2.0", + "immutability-helper": "^2.9.0", + "ioredis": "3.2.2", "isomorphic-fetch": "^2.2.1", "iterall": "^1.2.2", "jest": "^21.2.1", @@ -96,7 +95,7 @@ "react-helmet": "5.x", "react-infinite-scroller-with-scroll-element": "^1.0.4", "react-loadable": "5.2.2", - "react-modal": "^1.6.5", + "react-modal": "^3.7.1", "react-redux": "^5.1.1", "react-remarkable": "^1.1.1", "react-router": "^4.0.0-beta.7", @@ -116,14 +115,14 @@ "sanitize-filename": "^1.6.1", "serialize-javascript": "^1.5.0", "session-rethinkdb": "^2.0.0", - "slate": "^0.44.8", + "slate": "^0.44.9", "slate-markdown": "0.1.0", "slugg": "^1.1.0", "string-replace-to-array": "^1.0.3", "string-similarity": "^1.2.2", "striptags": "2.x", "styled-components": "3.1.x", - "subscriptions-transport-ws": "^0.9.14", + "subscriptions-transport-ws": "^0.9.15", "sw-precache-webpack-plugin": "^0.11.5", "then-queue": "^1.3.0", "toobusy-js": "^0.5.1", @@ -134,4 +133,4 @@ "scripts": { "start": "NODE_ENV=production node main.js" } -} \ No newline at end of file +} diff --git a/api/queries/thread/messageConnection.js b/api/queries/thread/messageConnection.js index 495b0849e6..cc978824ac 100644 --- a/api/queries/thread/messageConnection.js +++ b/api/queries/thread/messageConnection.js @@ -47,7 +47,8 @@ export default ( cursor = decode(cursor); if (cursor) cursor = parseInt(cursor, 10); } catch (err) { - debug(err); + console.error('❌ Error in job:\n'); + console.error(err); return new UserError('Invalid cursor passed to thread.messageConnection.'); } if (cursor) debug(`cursor: ${cursor}`); diff --git a/api/yarn.lock b/api/yarn.lock index 2eb98ce93d..47e1efe8c7 100644 --- a/api/yarn.lock +++ b/api/yarn.lock @@ -608,7 +608,7 @@ core-js "^2.5.7" regenerator-runtime "^0.12.0" -"@babel/runtime@^7.0.0", "@babel/runtime@^7.0.0-beta.38", "@babel/runtime@^7.0.0-beta.51", "@babel/runtime@^7.1.2": +"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2": version "7.2.0" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.2.0.tgz#b03e42eeddf5898e00646e4c840fa07ba8dcad7f" integrity sha512-oouEibCbHMVdZSDlJBO6bZmID/zA/G/Qx3H1d3rSNPTD+L8UNKvCat7aKWSJ74zYbm5zWGh0GQN0hKj8zYFTCg== @@ -716,7 +716,7 @@ resolved "https://registry.yarnpkg.com/@protobufjs/utf8/-/utf8-1.1.0.tgz#a777360b5b39a1a2e5106f8e858f2fd2d060c570" integrity sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA= -"@types/accepts@*", "@types/accepts@^1.3.5": +"@types/accepts@^1.3.5": version "1.3.5" resolved "https://registry.yarnpkg.com/@types/accepts/-/accepts-1.3.5.tgz#c34bec115cfc746e04fe5a059df4ce7e7b391575" integrity sha512-jOdnI/3qTpHABjM5cx1Hc0sKsPoYCp+DP/GJRGtDlPd7fiV9oXGGIcjW/ZOxLIvjGz8MA+uMZI9metHlgqbgwQ== @@ -731,30 +731,13 @@ "@types/connect" "*" "@types/node" "*" -"@types/bunyan@*": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@types/bunyan/-/bunyan-1.8.5.tgz#d992adbce8ed20cde634764bd8f269f29f703647" - integrity sha512-7n8ANtxh2c5A/NfCuv8cVtWcgSLdq76MQbtmbInpzXuPw4TSAReUJ+MGHK4m67I4zI3ynCJoABfaeHYJaYSeRg== - dependencies: - "@types/node" "*" - -"@types/connect@*", "@types/connect@^3.4.31": +"@types/connect@*": version "3.4.32" resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.32.tgz#aa0e9616b9435ccad02bc52b5b454ffc2c70ba28" integrity sha512-4r8qa0quOvh7lGD0pre62CAb1oni1OO6ecJLGCezTmhQ8Fz50Arx9RUszryR8KlgK6avuSXvviL6yWyViQABOg== dependencies: "@types/node" "*" -"@types/cookies@*": - version "0.7.1" - resolved "https://registry.yarnpkg.com/@types/cookies/-/cookies-0.7.1.tgz#f9f204bd6767d389eea3b87609e30c090c77a540" - integrity sha512-ku6IvbucEyuC6i4zAVK/KnuzWNXdbFd1HkXlNLg/zhWDGTtQT5VhumiPruB/BHW34PWVFwyfwGftDQHfWNxu3Q== - dependencies: - "@types/connect" "*" - "@types/express" "*" - "@types/keygrip" "*" - "@types/node" "*" - "@types/cors@^2.8.4": version "2.8.4" resolved "https://registry.yarnpkg.com/@types/cors/-/cors-2.8.4.tgz#50991a759a29c0b89492751008c6af7a7c8267b0" @@ -776,7 +759,7 @@ "@types/node" "*" "@types/range-parser" "*" -"@types/express@*", "@types/express@4.16.0", "@types/express@^4.0.36": +"@types/express@*", "@types/express@4.16.0": version "4.16.0" resolved "https://registry.yarnpkg.com/@types/express/-/express-4.16.0.tgz#6d8bc42ccaa6f35cf29a2b7c3333cb47b5a32a19" integrity sha512-TtPEYumsmSTtTetAPXlJVf3kEqb6wZK0bZojpJQrnD/djV4q1oB6QQ8aKvKqwNPACoe02GNiy5zDzcYivR5Z2w== @@ -785,47 +768,6 @@ "@types/express-serve-static-core" "*" "@types/serve-static" "*" -"@types/http-assert@*": - version "1.3.0" - resolved "https://registry.yarnpkg.com/@types/http-assert/-/http-assert-1.3.0.tgz#5e932606153da28e1d04f9043f4912cf61fd55dd" - integrity sha512-RObYTpPMo0IY+ZksPtKHsXlYFRxsYIvUqd68e89Y7otDrXsjBy1VgMd53kxVV0JMsNlkCASjllFOlLlhxEv0iw== - -"@types/keygrip@*": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@types/keygrip/-/keygrip-1.0.1.tgz#ff540462d2fb4d0a88441ceaf27d287b01c3d878" - integrity sha1-/1QEYtL7TQqIRBzq8n0oewHD2Hg= - -"@types/koa-bodyparser@^4.2.0": - version "4.2.1" - resolved "https://registry.yarnpkg.com/@types/koa-bodyparser/-/koa-bodyparser-4.2.1.tgz#e78f9ff1a21f9ebe9bf16d702e9f2a6d0c0c870d" - integrity sha512-dd6mVT30OmGYIOmNRF3269Bv+IJ68AVrvYcPViB7bYnzxk7nZyfeAsUx96lvXmaTpOGF4XZ7WDCuSOd7Npi6pw== - dependencies: - "@types/koa" "*" - -"@types/koa-compose@*": - version "3.2.2" - resolved "https://registry.yarnpkg.com/@types/koa-compose/-/koa-compose-3.2.2.tgz#dc106e000bbf92a3ac900f756df47344887ee847" - integrity sha1-3BBuAAu/kqOskA91bfRzRIh+6Ec= - -"@types/koa-router@^7.0.27": - version "7.0.35" - resolved "https://registry.yarnpkg.com/@types/koa-router/-/koa-router-7.0.35.tgz#07442ac95e65ec1b042af4f72abea44dc96b909f" - integrity sha512-WSdZ0FkUSCDiGQBtsEAmTjsM3l5o4eq2WDSCR9UXm/buLY73b5MSkfSt4f8+LAhoZYa9uNNcEyiE43J0xISF5A== - dependencies: - "@types/koa" "*" - -"@types/koa@*", "@types/koa@^2.0.39": - version "2.0.47" - resolved "https://registry.yarnpkg.com/@types/koa/-/koa-2.0.47.tgz#ac7854384a4cc49c16593c86acd99e636a48142a" - integrity sha512-llhCaHNWKFDMx1GCrqwgsWgUO+C4Da0SccbgevHIYOKVxwegEjFzl0WaMWHk3wWx0P0AdqHR+gQYZ2ZAb0ez0Q== - dependencies: - "@types/accepts" "*" - "@types/cookies" "*" - "@types/http-assert" "*" - "@types/keygrip" "*" - "@types/koa-compose" "*" - "@types/node" "*" - "@types/long@^4.0.0": version "4.0.0" resolved "https://registry.yarnpkg.com/@types/long/-/long-4.0.0.tgz#719551d2352d301ac8b81db732acb6bdc28dbdef" @@ -841,25 +783,11 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-10.12.12.tgz#e15a9d034d9210f00320ef718a50c4a799417c47" integrity sha512-Pr+6JRiKkfsFvmU/LK68oBRCQeEg36TyAbPhc2xpez24OOZZCuoIhWGTd39VZy6nGafSbxzGouFPTFD/rR1A0A== -"@types/node@^9.4.6": - version "9.6.40" - resolved "https://registry.yarnpkg.com/@types/node/-/node-9.6.40.tgz#2d69cefbc090cb0bb824542a4c575b14dde7d3aa" - integrity sha512-M3HHoXXndsho/sTbQML2BJr7/uwNhMg8P0D4lb+UsM65JQZx268faiz9hKpY4FpocWqpwlLwa8vevw8hLtKjOw== - "@types/range-parser@*": version "1.2.3" resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.3.tgz#7ee330ba7caafb98090bece86a5ee44115904c2c" integrity sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA== -"@types/restify@^5.0.7": - version "5.0.10" - resolved "https://registry.yarnpkg.com/@types/restify/-/restify-5.0.10.tgz#12e416ca83308a6aaa97a54c0d47ff81197c7dcf" - integrity sha512-lrFhug755B6bF6X6ofR4q3bezJftHtJSnHxPxC4J2bSZQyKa6OI/Y5oJNl6Mb0LoFdSjnw09w6gOw9ChZs6N4A== - dependencies: - "@types/bunyan" "*" - "@types/node" "*" - "@types/spdy" "*" - "@types/serve-static@*": version "1.13.2" resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.13.2.tgz#f5ac4d7a6420a99a6a45af4719f4dcd8cd907a48" @@ -868,13 +796,6 @@ "@types/express-serve-static-core" "*" "@types/mime" "*" -"@types/spdy@*": - version "3.4.4" - resolved "https://registry.yarnpkg.com/@types/spdy/-/spdy-3.4.4.tgz#3282fd4ad8c4603aa49f7017dd520a08a345b2bc" - integrity sha512-N9LBlbVRRYq6HgYpPkqQc3a9HJ/iEtVZToW6xlTtJiMhmRJ7jJdV7TaZQJw/Ve/1ePUsQiCTDc4JMuzzag94GA== - dependencies: - "@types/node" "*" - "@types/ws@^6.0.0": version "6.0.1" resolved "https://registry.yarnpkg.com/@types/ws/-/ws-6.0.1.tgz#ca7a3f3756aa12f62a0a62145ed14c6db25d5a28" @@ -1189,21 +1110,6 @@ apollo-datasource@0.2.1: apollo-server-caching "0.2.1" apollo-server-env "2.2.0" -apollo-engine-binary-darwin@0.2018.6-20-gc0e4bb519: - version "0.2018.6-20-gc0e4bb519" - resolved "https://registry.yarnpkg.com/apollo-engine-binary-darwin/-/apollo-engine-binary-darwin-0.2018.6-20-gc0e4bb519.tgz#1458cf9af9adff1248730b9e7ea3408a778ff20e" - integrity sha512-yQB26z3s/lMCBOpoKjL0IiJPuk+EHwoY6zd9nZz0A99/461ZayE02LjV8MwB4HDvSPmvtaanrhQhTaLH6sLHfA== - -apollo-engine-binary-linux@0.2018.6-20-gc0e4bb519: - version "0.2018.6-20-gc0e4bb519" - resolved "https://registry.yarnpkg.com/apollo-engine-binary-linux/-/apollo-engine-binary-linux-0.2018.6-20-gc0e4bb519.tgz#0f61d7e7888a58d8723516d1dc44d4c8a6688df2" - integrity sha512-HTUysRxRmwYQmbztuvytq5I2dgbPT/Z0J5HNz0Hx5/Ej19EHIb0v82mFMdMZKGRKHvOfao8XGG3/++C1vSQGiw== - -apollo-engine-binary-windows@0.2018.6-20-gc0e4bb519: - version "0.2018.6-20-gc0e4bb519" - resolved "https://registry.yarnpkg.com/apollo-engine-binary-windows/-/apollo-engine-binary-windows-0.2018.6-20-gc0e4bb519.tgz#288c718a730f2a1f8bb0aae9fff3e6da23c1f00f" - integrity sha512-Cj0FSI8MDHcDc8EknzcqBP57R5S6gLIdD4/lpQaOtZureS/Ijx3mltZ0csmn5v8S0dDaMM6zjElBMDfwl6aEDg== - apollo-engine-reporting-protobuf@0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/apollo-engine-reporting-protobuf/-/apollo-engine-reporting-protobuf-0.1.0.tgz#fbc220cac2a3b7800ffc155d7e54c21c56b7848e" @@ -1222,22 +1128,6 @@ apollo-engine-reporting@0.1.3: graphql-extensions "0.3.3" lodash "^4.17.10" -apollo-engine@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/apollo-engine/-/apollo-engine-1.1.2.tgz#ef8465fe5234b3bfe034b7e96d37bc441b72a9cb" - integrity sha512-XALQo4VjyMaOkCeuO5z0j68eSvOxh7KhZkWW3Vqj8ufxk2WbJGCACU7XQEvD6HyGBwtDDXxV8KvZyU0CDisi1Q== - dependencies: - "@types/connect" "^3.4.31" - "@types/express" "^4.0.36" - "@types/koa" "^2.0.39" - "@types/koa-bodyparser" "^4.2.0" - "@types/koa-router" "^7.0.27" - "@types/restify" "^5.0.7" - optionalDependencies: - apollo-engine-binary-darwin "0.2018.6-20-gc0e4bb519" - apollo-engine-binary-linux "0.2018.6-20-gc0e4bb519" - apollo-engine-binary-windows "0.2018.6-20-gc0e4bb519" - apollo-env@0.2.5: version "0.2.5" resolved "https://registry.yarnpkg.com/apollo-env/-/apollo-env-0.2.5.tgz#162c785bccd2aea69350a7600fab4b7147fc9da5" @@ -1246,22 +1136,13 @@ apollo-env@0.2.5: core-js "^3.0.0-beta.3" node-fetch "^2.2.0" -apollo-link-http-common@^0.2.4: +apollo-link-http-common@^0.2.5: version "0.2.6" resolved "https://registry.yarnpkg.com/apollo-link-http-common/-/apollo-link-http-common-0.2.6.tgz#47b9012500599fe343e2e87378026384b4fc8c1f" integrity sha512-LUOMWvrZuBP1hyWLBXyaW0KyFeKo79j+k3N+Q4HSkXKbLibnllXQ+JxxoSKGhm0bhREygiLtJAG9JnGlhxGO/Q== dependencies: apollo-link "^1.2.4" -apollo-link@1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/apollo-link/-/apollo-link-1.2.1.tgz#c120b16059f9bd93401b9f72b94d2f80f3f305d2" - integrity sha512-6Ghf+j3cQLCIvjXd2dJrLw+16HZbWbwmB1qlTc41BviB2hv+rK1nJr17Y9dWK0UD4p3i9Hfddx3tthpMKrueHg== - dependencies: - "@types/node" "^9.4.6" - apollo-utilities "^1.0.0" - zen-observable-ts "^0.8.6" - apollo-link@^1.2.3, apollo-link@^1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/apollo-link/-/apollo-link-1.2.4.tgz#ab4d21d2e428db848e88b5e8f4adc717b19c954b" @@ -1270,7 +1151,7 @@ apollo-link@^1.2.3, apollo-link@^1.2.4: apollo-utilities "^1.0.0" zen-observable-ts "^0.8.11" -apollo-local-query@^0.3.0: +apollo-local-query@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/apollo-local-query/-/apollo-local-query-0.3.1.tgz#e290375253879badd09ebe7ca410744aad7e5ec9" integrity sha512-S8xom02//NsEHmOBGqTJJAGaP8K3Vd16Dtm+rCEMx0PJ+wdgBHDqK6CxYyt/OxIzY9maS2MXm+mnffW2IedT3w== @@ -1355,14 +1236,14 @@ apollo-tracing@0.3.3: apollo-server-env "2.2.0" graphql-extensions "0.3.3" -apollo-upload-client@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/apollo-upload-client/-/apollo-upload-client-8.1.0.tgz#db99eed6af926dbd54cb0bbde30345672c97fc5f" - integrity sha512-JEgStzhnwybj1ifE2nViLEl7NTM5+zS++fKbDL95PIpodg2AdYeeN7eEa7RXpYD14iC3FVcsfqgGMREv2+cSxw== +apollo-upload-client@^9.1.0: + version "9.1.0" + resolved "https://registry.yarnpkg.com/apollo-upload-client/-/apollo-upload-client-9.1.0.tgz#13191714ae07388088f2c773ebbfd53ba2f64c53" + integrity sha512-ZN5gsbBjImEZTWWTUHpCEGDasnoBGbaODpznQ5EawyNHceuFYSNJbbft+ZZ841vZAcj9XZdKUKoaLBlMZ/r7nw== dependencies: - "@babel/runtime" "^7.0.0-beta.51" - apollo-link-http-common "^0.2.4" - extract-files "^3.1.0" + apollo-link "^1.2.3" + apollo-link-http-common "^0.2.5" + extract-files "^4.0.0" apollo-utilities@^1.0.0, apollo-utilities@^1.0.1: version "1.0.26" @@ -1838,7 +1719,7 @@ babel-plugin-replace-dynamic-import-runtime@^1.0.2: babel-template "^6.24.1" babel-types "^6.24.1" -babel-plugin-styled-components@^1.1.4, babel-plugin-styled-components@^1.9.2: +babel-plugin-styled-components@^1.1.4: version "1.9.3" resolved "https://registry.yarnpkg.com/babel-plugin-styled-components/-/babel-plugin-styled-components-1.9.3.tgz#facc61da441d15b291128b36cba07f309ed324f0" integrity sha512-MkRRvMyWRSZti9HlNCROdbrxkaE2TCsRjKqT8OJ1GH4+ksNIIPNEG3HuqWzcwicKbpW6O1KZizOGFEmnpOeD4Q== @@ -1847,6 +1728,15 @@ babel-plugin-styled-components@^1.1.4, babel-plugin-styled-components@^1.9.2: babel-plugin-syntax-jsx "^6.18.0" lodash "^4.17.10" +babel-plugin-styled-components@^1.9.4: + version "1.9.4" + resolved "https://registry.yarnpkg.com/babel-plugin-styled-components/-/babel-plugin-styled-components-1.9.4.tgz#5f2c34d31237c6ee1e86453cc5fa488b97136669" + integrity sha512-FIACAvgJsUasYA+CdhPMWUIXWCdUUirz7fL9FGQYNNuOls+bs9OUWWHYVM2W9gjVoS2TXdEMqcOVVyG3Hagd/g== + dependencies: + "@babel/helper-annotate-as-pure" "^7.0.0" + babel-plugin-syntax-jsx "^6.18.0" + lodash "^4.17.10" + babel-plugin-syntax-async-functions@^6.8.0: version "6.13.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95" @@ -2346,7 +2236,7 @@ binary@~0.3.0: resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-2.11.0.tgz#534b9033c022c9579c56ba3b3e5a5caafbb650e1" integrity sha1-U0uQM8AiyVecVro7Plpcqvu2UOE= -"bluebird@>= 3.0.1", bluebird@^3.3.4, bluebird@^3.5.0, bluebird@^3.5.1: +"bluebird@>= 3.0.1", bluebird@^3.3.4, bluebird@^3.5.1, bluebird@^3.5.3: version "3.5.3" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.3.tgz#7d01c6f9616c9a51ab0f8c549a79dfe6ec33efa7" integrity sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw== @@ -2585,18 +2475,18 @@ builtin-status-codes@^3.0.0: resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= -bull@3.3.10: - version "3.3.10" - resolved "https://registry.yarnpkg.com/bull/-/bull-3.3.10.tgz#32e76281902070b4720bc37b3793f09db635f646" - integrity sha512-bO1w83BONVTE3Rb10e0wPf11lXH1fGFNGmZH4Ys9jR7jGN4qmTNo7odxm7ELhjKXofjiFLWZFuTdONCs8kV8ug== +bull@^3.5.2: + version "3.5.2" + resolved "https://registry.yarnpkg.com/bull/-/bull-3.5.2.tgz#9c85f205b17686efab2ee28aaa4388887360de32" + integrity sha512-tuL4Uj0kUeaQ7Cow3POkca20fk+VSsR8AiTFeNkyMmuicBnE1ZMwvF1NRDY7vIH43pD9PiMCSEP4Li/934Pw1w== dependencies: - bluebird "^3.5.0" - cron-parser "^2.4.1" + bluebird "^3.5.3" + cron-parser "^2.5.0" debuglog "^1.0.0" ioredis "^3.1.4" - lodash "^4.17.4" - semver "^5.4.1" - uuid "^3.1.0" + lodash "^4.17.11" + semver "^5.6.0" + uuid "^3.2.1" busboy@^0.2.14: version "0.2.14" @@ -3117,7 +3007,7 @@ create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: safe-buffer "^5.0.1" sha.js "^2.4.8" -create-react-class@^15.5.2, create-react-class@^15.6.0: +create-react-class@^15.6.0: version "15.6.3" resolved "https://registry.yarnpkg.com/create-react-class/-/create-react-class-15.6.3.tgz#2d73237fb3f970ae6ebe011a9e66f46dbca80036" integrity sha512-M+/3Q6E6DLO6Yx3OwrWjwHBnvfXXYA7W+dFjt/ZDBemHO1DDZhsalX/NUtnTYclN6GfnBDRh4qRHjcDHmlJBJg== @@ -3126,7 +3016,7 @@ create-react-class@^15.5.2, create-react-class@^15.6.0: loose-envify "^1.3.1" object-assign "^4.1.1" -cron-parser@^2.4.1: +cron-parser@^2.5.0: version "2.7.3" resolved "https://registry.yarnpkg.com/cron-parser/-/cron-parser-2.7.3.tgz#12603f89f5375af353a9357be2543d3172eac651" integrity sha512-t9Kc7HWBWPndBzvbdQ1YG9rpPRB37Tb/tTviziUOh1qs3TARGh3b1p+tnkOHNe1K5iI3oheBPgLqwotMM7+lpg== @@ -3659,7 +3549,7 @@ draft-js-prism@^1.0.6: extend "^3.0.0" immutable "*" -"draft-js-prism@github:ngs/draft-js-prism#6edb31c3805dd1de3fb897cc27fced6bac1bafbb": +draft-js-prism@ngs/draft-js-prism#6edb31c3805dd1de3fb897cc27fced6bac1bafbb: version "1.0.3" resolved "https://codeload.github.com/ngs/draft-js-prism/tar.gz/6edb31c3805dd1de3fb897cc27fced6bac1bafbb" dependencies: @@ -3733,11 +3623,6 @@ electron-to-chromium@^1.3.47, electron-to-chromium@^1.3.86: resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.88.tgz#f36ab32634f49ef2b0fdc1e82e2d1cc17feb29e7" integrity sha512-UPV4NuQMKeUh1S0OWRvwg0PI8ASHN9kBC8yDTk1ROXLC85W5GnhTRu/MZu3Teqx3JjlQYuckuHYXSUSgtb3J+A== -element-class@^0.2.0: - version "0.2.2" - resolved "https://registry.yarnpkg.com/element-class/-/element-class-0.2.2.tgz#9d3bbd0767f9013ef8e1c8ebe722c1402a60050e" - integrity sha1-nTu9B2f5AT744cjr5yLBQCpgBQ4= - elliptic@^6.0.0: version "6.4.1" resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.4.1.tgz#c2d0b7776911b86722c632c3c06c60f2f819939a" @@ -3973,12 +3858,7 @@ execa@^0.7.0: signal-exit "^3.0.0" strip-eof "^1.0.0" -exenv@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/exenv/-/exenv-1.2.0.tgz#3835f127abf075bfe082d0aed4484057c78e3c89" - integrity sha1-ODXxJ6vwdb/ggtCu1EhAV8eOPIk= - -exenv@^1.2.1: +exenv@^1.2.0, exenv@^1.2.1: version "1.2.2" resolved "https://registry.yarnpkg.com/exenv/-/exenv-1.2.2.tgz#2ae78e85d9894158670b03d47bec1f03bd91bb9d" integrity sha1-KueOhdmJQVhnCwPUe+wfA72Ru50= @@ -4124,12 +4004,10 @@ extglob@^2.0.4: snapdragon "^0.8.1" to-regex "^3.0.1" -extract-files@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/extract-files/-/extract-files-3.1.0.tgz#b70424c9d4a1a4208efe22069388f428e4ae00f1" - integrity sha512-urkJPM4N88CMy1AfDw+Avudon6fToTsaG5j5VN0aybn88udv1yrERFCweV78NaZg7DOFsQULkFgvP64vNQFNMQ== - dependencies: - "@babel/runtime" "^7.0.0-beta.38" +extract-files@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/extract-files/-/extract-files-4.1.0.tgz#2d5b64af688dfd030274ca542c43fabba325019a" + integrity sha512-2gjdb3dVzr1ie9+K8pupPTnsNkK4qmzbTFOIxghiWoh6nCTajGCGC72ZNYX0nBWy5IOq1FXfRVgvkkLqqE4sdw== extsprintf@1.3.0: version "1.3.0" @@ -4614,10 +4492,10 @@ graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6: resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00" integrity sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA== -graphql-cost-analysis@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/graphql-cost-analysis/-/graphql-cost-analysis-0.1.2.tgz#1ddce5776e7930c423deb538c021f9c7648df5c5" - integrity sha512-gpxLKSAkURG3crlOpkD4qkij+GrucQXygxtKhYKS5Ba4tApEF1afHB0t6JmihcRICyhj5rLiY6owfDsyKZMlLQ== +graphql-cost-analysis@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/graphql-cost-analysis/-/graphql-cost-analysis-1.0.2.tgz#680f7b99137e5e21f279f76e01f779955258de0a" + integrity sha512-U6TaSSarx4WbCwT0520xsGvhNwYu5GWfn4bEHMiVgdWvWvdfscVp0n8zShTwzoEoO0gEYT2fXTg1O2KadDbg/A== dependencies: selectn "^1.1.2" @@ -4649,10 +4527,10 @@ graphql-extensions@0.3.6: dependencies: "@apollographql/apollo-tools" "^0.2.6" -graphql-log@0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/graphql-log/-/graphql-log-0.1.2.tgz#d733fc58b14cbb336effa2bb355274d13683c6b5" - integrity sha512-9ouGEuCH61UmzvkNyV4wfMkiULukw7+QNY84woEPj0/lx0ut8B5l91fNNNYDlDrJXRd3R/VNvmmbIjj0Zx3pCA== +graphql-log@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/graphql-log/-/graphql-log-0.1.3.tgz#a1cc002fbaa9392f6df0483ed57937dd291826b0" + integrity sha512-DiwQasuTjN6sdibuFT4dmaFEdkCAY4wI83a3qXBY8UX4VOUaegyrLvIjPvnGZGJF8sfYOLHzPWG676AYdFTizQ== dependencies: deep-for-each "^1.0.6" is-function "^1.0.1" @@ -4669,18 +4547,7 @@ graphql-tag@^2.9.2: resolved "https://registry.yarnpkg.com/graphql-tag/-/graphql-tag-2.10.0.tgz#87da024be863e357551b2b8700e496ee2d4353ae" integrity sha512-9FD6cw976TLLf9WYIUPCaaTpniawIjHWZSwIRZSjrfufJamcXbVVYfN2TWvJYbw0Xf2JjYbl1/f2+wDnBVw3/w== -graphql-tools@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/graphql-tools/-/graphql-tools-3.0.0.tgz#ff22ad15315fc268de8639d03936b911d78b9e9b" - integrity sha512-orcLQm0pc6dcIvFyAudgmno/akZy07bbMalTv5dj6B8uW2ZPmwIANr7pDEJoiumb67h2kZjsU9yvgTwmF0kMPQ== - dependencies: - apollo-link "1.2.1" - apollo-utilities "^1.0.1" - deprecated-decorator "^0.1.6" - iterall "^1.1.3" - uuid "^3.1.0" - -graphql-tools@^4.0.0: +graphql-tools@^4.0.0, graphql-tools@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/graphql-tools/-/graphql-tools-4.0.3.tgz#23b5cb52c519212b1b2e4630a361464396ad264b" integrity sha512-NNZM0WSnVLX1zIMUxu7SjzLZ4prCp15N5L2T2ro02OVyydZ0fuCnZYRnx/yK9xjGWbZA0Q58yEO//Bv/psJWrg== @@ -5052,10 +4919,10 @@ imgix-core-js@^1.2.0: js-base64 "^2.1.9" md5 "^2.2.1" -immutability-helper@^2.8.1: - version "2.8.1" - resolved "https://registry.yarnpkg.com/immutability-helper/-/immutability-helper-2.8.1.tgz#3c5ec05fcd83676bfae7146f319595243ad904f4" - integrity sha512-8AVB5EUpRBUdXqfe4cFsFECsOIZ9hX/Arl8B8S9/tmwpYv3UWvOsXUPOjkuZIMaVxfSWkxCzkng1rjmEoSWrxQ== +immutability-helper@^2.9.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/immutability-helper/-/immutability-helper-2.9.0.tgz#04a1c646300cd3a68aa5dc1daa7758da2ca75292" + integrity sha512-2LYtDuGugMLyoFV0qGvblnq39E2VVQ9m4dDktlRLVBBVV1LnUMK0rlqkbtlUjfT1UJO876OobtPlNZTEbOOYVQ== dependencies: invariant "^2.2.0" @@ -5126,7 +4993,7 @@ invert-kv@^1.0.0: resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" integrity sha1-EEqOSqym09jNFXqO+L+rLXo//bY= -ioredis@^3.1.4: +ioredis@3.2.2, ioredis@^3.1.4: version "3.2.2" resolved "https://registry.yarnpkg.com/ioredis/-/ioredis-3.2.2.tgz#b7d5ff3afd77bb9718bb2821329b894b9a44c00b" integrity sha512-g+ShTQYLsCcOUkNOK6CCEZbj3aRDVPw3WOwXk+LxlUKvuS9ujEqP2MppBHyRVYrNNFW/vcPaTBUZ2ctGNSiOCA== @@ -5155,7 +5022,7 @@ ioredis@^3.1.4: redis-commands "^1.2.0" redis-parser "^2.4.0" -ioredis@^4.0.0, ioredis@^4.2.0: +ioredis@^4.0.0: version "4.3.0" resolved "https://registry.yarnpkg.com/ioredis/-/ioredis-4.3.0.tgz#a92850dd8794eaee4f38a265c830ca823a09d345" integrity sha512-TwTp93UDKlKVQeg9ThuavNh4Vs31JTlqn+cI/J6z21OtfghyJm5I349ZlsKobOeEyS4INITMLQ1fhR7xwf9Fxg== @@ -6521,11 +6388,6 @@ merge-descriptors@1.0.1: resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= -merge@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.0.tgz#7531e39d4949c281a66b8c5a6e0265e8b05894da" - integrity sha1-dTHjnUlJwoGma4xabgJl6LBYlNo= - merge@^1.2.0: version "1.2.1" resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.1.tgz#38bebf80c3220a8a487b6fcfb3941bb11720c145" @@ -7470,13 +7332,6 @@ postcss-value-parser@^3.3.0: resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281" integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ== -postmark@^1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/postmark/-/postmark-1.6.1.tgz#23d48f7182509be5be0eb80c16b90a2e2326eb3c" - integrity sha1-I9SPcYJQm+W+DrgMFrkKLiMm6zw= - dependencies: - merge "1.2.0" - pre-commit@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/pre-commit/-/pre-commit-1.2.2.tgz#dbcee0ee9de7235e57f79c56d7ce94641a69eec6" @@ -7565,7 +7420,7 @@ promise@^7.1.1: dependencies: asap "~2.0.3" -prop-types@^15.5.10, prop-types@^15.5.4, prop-types@^15.5.7, prop-types@^15.5.8, prop-types@^15.6.1, prop-types@^15.6.2: +prop-types@^15.5.10, prop-types@^15.5.4, prop-types@^15.5.8, prop-types@^15.6.1, prop-types@^15.6.2: version "15.6.2" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.6.2.tgz#05d5ca77b4453e985d60fc7ff8c859094a497102" integrity sha512-3pboPvLiWD7dkI3qf3KbUe6hKFKa52w+AE0VCqECtf+QHAKgOL37tTaNCnuX1nAAQ4ZhyP+kYVKf8rLmJ/feDQ== @@ -7789,11 +7644,6 @@ react-click-outside@^3.0.1: dependencies: hoist-non-react-statics "^2.1.1" -react-dom-factories@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/react-dom-factories/-/react-dom-factories-1.0.2.tgz#eb7705c4db36fb501b3aa38ff759616aa0ff96e0" - integrity sha1-63cFxNs2+1AbOqOP91lhaqD/luA= - react-dom@^15.4.1: version "15.6.2" resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-15.6.2.tgz#41cfadf693b757faf2708443a1d1fd5a02bef730" @@ -7834,17 +7684,15 @@ react-loadable@5.2.2: resolved "https://registry.yarnpkg.com/react-loadable/-/react-loadable-5.2.2.tgz#1a5ad75841cacb64be12b18a86ac0bc55ccb4dc7" integrity sha1-GlrXWEHKy2S+ErGKhqwLxVzLTcc= -react-modal@^1.6.5: - version "1.9.7" - resolved "https://registry.yarnpkg.com/react-modal/-/react-modal-1.9.7.tgz#07ef56790b953e3b98ef1e2989e347983c72871d" - integrity sha512-oZNqI0ZnPD7NnfObrCMz2hxHTAw5oEuhZJ+gnyFNIQB2rR8h1YbLQTfhms1mtSJigb0J23OOWElHjXYYaKO+wg== +react-modal@^3.7.1: + version "3.7.1" + resolved "https://registry.yarnpkg.com/react-modal/-/react-modal-3.7.1.tgz#342ed170133d0557e6c3e6fc40195bc45c8f09c3" + integrity sha512-eSgotXkqOCXi0b27AwLCoJ8yqLepKnbZdMp/zfUmZPnMNoe39pDT0mbAPq9rp+TToqM5GUTv8C36Cuja+ThbhA== dependencies: - create-react-class "^15.5.2" - element-class "^0.2.0" - exenv "1.2.0" - lodash.assign "^4.2.0" - prop-types "^15.5.7" - react-dom-factories "^1.0.0" + exenv "^1.2.0" + prop-types "^15.5.10" + react-lifecycles-compat "^3.0.0" + warning "^3.0.0" react-redux@^5.1.1: version "5.1.1" @@ -8493,7 +8341,7 @@ semver-diff@^2.0.0: dependencies: semver "^5.0.3" -"semver@2 || 3 || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1: +"semver@2 || 3 || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0: version "5.6.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.6.0.tgz#7e74256fbaa49c75aa7c7a205cc22799cac80004" integrity sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg== @@ -8628,10 +8476,10 @@ slate-markdown@0.1.0: react "^0.14.0 || ^15.0.0" styled-components "^2.0.0" -slate@^0.44.8: - version "0.44.8" - resolved "https://registry.yarnpkg.com/slate/-/slate-0.44.8.tgz#cd39a4e238acf21d072be9b0b5a5220bc4bd5f4c" - integrity sha512-O7RMFsNiTxRxiVL6ndZplICQ9jK7wG8cJ9jZ0vYv5/RBir2RjH0tgRVSVvlgVEQv51h5vpmSQcrQ+GhEiWKX4g== +slate@^0.44.9: + version "0.44.9" + resolved "https://registry.yarnpkg.com/slate/-/slate-0.44.9.tgz#0fc9ba9f08b379b86c4c0a1ddebbe6bf28aa3c4b" + integrity sha512-PKZUVZU416UJKuOakNvhJ5qh2umjPdkaO41Wf8x1xnkFe4IQcZuw3ZTWWm35rYD7fd0X238uEnxIqF5RuxENlA== dependencies: debug "^3.1.0" direction "^0.1.5" @@ -9029,7 +8877,7 @@ stylis@^3.4.0: resolved "https://registry.yarnpkg.com/stylis/-/stylis-3.5.4.tgz#f665f25f5e299cf3d64654ab949a57c768b73fbe" integrity sha512-8/3pSmthWM7lsPBKv7NXkzn2Uc9W7NotcwGNpJaa3k7WMM1XDCA4MgT5k/8BIexd5ydZdboXtU90XH9Ec4Bv/Q== -subscriptions-transport-ws@^0.9.11, subscriptions-transport-ws@^0.9.14: +subscriptions-transport-ws@^0.9.11, subscriptions-transport-ws@^0.9.15: version "0.9.15" resolved "https://registry.yarnpkg.com/subscriptions-transport-ws/-/subscriptions-transport-ws-0.9.15.tgz#68a8b7ba0037d8c489fb2f5a102d1494db297d0d" integrity sha512-f9eBfWdHsePQV67QIX+VRhf++dn1adyC/PZHP6XI5AfKnZ4n0FW+v5omxwdHVpd4xq2ZijaHEcmlQrhBY79ZWQ== @@ -9666,7 +9514,7 @@ uuid@3.1.0: resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.1.0.tgz#3dd3d3e790abc24d7b0d3a034ffababe28ebbc04" integrity sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g== -uuid@3.3.2, uuid@^3.1.0, uuid@^3.3.2: +uuid@3.3.2, uuid@^3.1.0, uuid@^3.2.1, uuid@^3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA== @@ -10091,7 +9939,7 @@ yargs@^9.0.0: y18n "^3.2.1" yargs-parser "^7.0.0" -zen-observable-ts@^0.8.11, zen-observable-ts@^0.8.6: +zen-observable-ts@^0.8.11: version "0.8.11" resolved "https://registry.yarnpkg.com/zen-observable-ts/-/zen-observable-ts-0.8.11.tgz#d54a27cd17dc4b4bb6bd008e5c096af7fcb068a9" integrity sha512-8bs7rgGV4kz5iTb9isudkuQjtWwPnQ8lXq6/T76vrepYZVMsDEv6BXaEA+DHdJSK3KVLduagi9jSpSAJ5NgKHw== diff --git a/athena/package.json b/athena/package.json index 9a4b4b775f..52014ab8d6 100644 --- a/athena/package.json +++ b/athena/package.json @@ -16,6 +16,7 @@ "escape-html": "^1.0.3", "faker": "^4.1.0", "imgix-core-js": "^1.2.0", + "ioredis": "3.2.2", "lodash.intersection": "^4.4.0", "node-env-file": "^0.1.8", "now-env": "^3.1.0", @@ -29,4 +30,4 @@ "validator": "^9.4.1", "web-push": "^3.3.3" } -} \ No newline at end of file +} diff --git a/athena/queues/send-slack-invitations.js b/athena/queues/send-slack-invitations.js index 88473eb87e..2985c8dcb9 100644 --- a/athena/queues/send-slack-invitations.js +++ b/athena/queues/send-slack-invitations.js @@ -100,7 +100,7 @@ const processJob = async (job: Job) => { ...invitePromises, updateSlackInvitesMemberCount(communityId, membersCount), _adminProcessSlackImportQueue.add({ - thisUser: owner, + user: owner, community, invitedCount: membersCount, teamName, diff --git a/athena/utils/get-email-status.js b/athena/utils/get-email-status.js index 447534ba7c..dc1a80b828 100644 --- a/athena/utils/get-email-status.js +++ b/athena/utils/get-email-status.js @@ -28,7 +28,8 @@ const getEmailStatus = ( return true; }) .catch(err => { - debug(err); + console.error('❌ Error in job:\n'); + console.error(err); return false; }); }; diff --git a/athena/yarn.lock b/athena/yarn.lock index 61dcee2185..d27e2214b9 100644 --- a/athena/yarn.lock +++ b/athena/yarn.lock @@ -46,14 +46,6 @@ axios@^0.16.2: follow-redirects "^1.2.3" is-buffer "^1.1.5" -babel-runtime@^6.11.6: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" - integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4= - dependencies: - core-js "^2.4.0" - regenerator-runtime "^0.11.0" - base64-js@^1.0.2: version "1.3.0" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.0.tgz#cab1e6118f051095e58b5281aea8c1cd22bfc0e3" @@ -124,11 +116,6 @@ core-js@^1.0.0: resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636" integrity sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY= -core-js@^2.4.0: - version "2.5.7" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.7.tgz#f972608ff0cead68b841a16a932d0b183791814e" - integrity sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw== - crc@^3.5.0: version "3.8.0" resolved "https://registry.yarnpkg.com/crc/-/crc-3.8.0.tgz#ad60269c2c856f8c299e2c4cc0de4556914056c6" @@ -254,16 +241,6 @@ events@1.1.1: resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" integrity sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ= -expo-server-sdk@^2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/expo-server-sdk/-/expo-server-sdk-2.4.0.tgz#aa5e02415ba3268546ff61dddb5b92cb796f6e3a" - integrity sha512-sxTE9EhLqlF5JR6eAMHUUWkaO8JOKLjYHNpM546vO3MxA8JtzZZtdRyJ1271ZbTTyFNFP9snjWN6MxUrqnFX5Q== - dependencies: - babel-runtime "^6.11.6" - invariant "^2.2.4" - node-fetch "^2.1.2" - promise-limit "^2.6.0" - faker@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/faker/-/faker-4.1.0.tgz#1e45bbbecc6774b3c195fad2835109c6d748cc3f" @@ -345,14 +322,7 @@ inherits@^2.0.1: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= -invariant@^2.2.4: - version "2.2.4" - resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" - integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== - dependencies: - loose-envify "^1.0.0" - -ioredis@^3.1.4: +ioredis@3.2.2, ioredis@^3.1.4: version "3.2.2" resolved "https://registry.yarnpkg.com/ioredis/-/ioredis-3.2.2.tgz#b7d5ff3afd77bb9718bb2821329b894b9a44c00b" integrity sha512-g+ShTQYLsCcOUkNOK6CCEZbj3aRDVPw3WOwXk+LxlUKvuS9ujEqP2MppBHyRVYrNNFW/vcPaTBUZ2ctGNSiOCA== @@ -610,11 +580,6 @@ node-fetch@^1.0.1: encoding "^0.1.11" is-stream "^1.0.1" -node-fetch@^2.1.2: - version "2.3.0" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.3.0.tgz#1a1d940bbfb916a1d3e0219f037e89e71f8c5fa5" - integrity sha512-MOd8pV3fxENbryESLgVIeaGKrdl+uaYhCSSVkjeOb/31/njTpcis5aWfdqgNlHIrKOLRbMnfPINPOML2CIFeXA== - now-env@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/now-env/-/now-env-3.1.0.tgz#e0198b67279d387229cfd4b25de4c2fc7156943f" @@ -630,11 +595,6 @@ object-keys@^1.0.12: resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.12.tgz#09c53855377575310cca62f55bb334abff7b3ed2" integrity sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag== -promise-limit@^2.6.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/promise-limit/-/promise-limit-2.7.0.tgz#eb5737c33342a030eaeaecea9b3d3a93cb592b26" - integrity sha512-7nJ6v5lnJsXwGprnGXga4wx6d1POjvi5Qmf1ivTRxTjH4Z/9Czja/UCMLVmB9N93GeWOU93XaFaEt6jbuoagNw== - promise@^7.1.1: version "7.3.1" resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" @@ -692,11 +652,6 @@ redis-tag-cache@^1.2.1: dependencies: ioredis "^4.0.0" -regenerator-runtime@^0.11.0: - version "0.11.1" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" - integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== - rethinkdbdash@^2.3.31: version "2.3.31" resolved "https://registry.yarnpkg.com/rethinkdbdash/-/rethinkdbdash-2.3.31.tgz#fe2f73d1fa6e6f5d96d8e881292013cf6dca914d" diff --git a/chronos/package.json b/chronos/package.json index 4402eb5c11..1c188b506b 100644 --- a/chronos/package.json +++ b/chronos/package.json @@ -10,12 +10,13 @@ "draft-js": "^0.10.5", "faker": "^4.1.0", "imgix-core-js": "^1.2.0", + "ioredis": "3.2.2", "lodash": "^4.17.11", "lodash.intersection": "^4.4.0", "now-env": "^3.1.0", "raven": "^2.6.4", "redis-tag-cache": "^1.2.1", - "rethinkdbdash": "^2.3.29", + "rethinkdbdash": "^2.3.31", "rethinkhaberdashery": "^2.3.32", "sanitize-filename": "^1.6.1", "source-map-support": "^0.4.18", @@ -24,4 +25,4 @@ "devDependencies": { "json-stringify-pretty-compact": "^1.2.0" } -} \ No newline at end of file +} diff --git a/chronos/queues/coreMetrics/activeCommunityAdminReport.js b/chronos/queues/coreMetrics/activeCommunityAdminReport.js index fd5b5f8690..0a4d9570bd 100644 --- a/chronos/queues/coreMetrics/activeCommunityAdminReport.js +++ b/chronos/queues/coreMetrics/activeCommunityAdminReport.js @@ -42,8 +42,8 @@ export default async () => { try { await processJob(); } catch (err) { - debug('❌ Error in job:\n'); - debug(err); + console.error('❌ Error in job:\n'); + console.error(err); Raven.captureException(err); } }; diff --git a/chronos/queues/coreMetrics/index.js b/chronos/queues/coreMetrics/index.js index e730b0b622..abd5e5d261 100644 --- a/chronos/queues/coreMetrics/index.js +++ b/chronos/queues/coreMetrics/index.js @@ -75,8 +75,8 @@ export default async () => { try { await processJob(); } catch (err) { - debug('❌ Error in job:\n'); - debug(err); + console.error('❌ Error in job:\n'); + console.error(err); Raven.captureException(err); } }; diff --git a/chronos/queues/digests/dailyDigest.js b/chronos/queues/digests/dailyDigest.js index fff4f793d1..45f0e7560b 100644 --- a/chronos/queues/digests/dailyDigest.js +++ b/chronos/queues/digests/dailyDigest.js @@ -8,8 +8,8 @@ export default () => { debug('Init daily digest'); return processDigest('daily'); } catch (err) { - debug('❌ Error in job:\n'); - debug(err); + console.error('❌ Error in job:\n'); + console.error(err); Raven.captureException(err); } }; diff --git a/chronos/queues/digests/processDigest.js b/chronos/queues/digests/processDigest.js index 77c7fcb27b..a9cfc6ca00 100644 --- a/chronos/queues/digests/processDigest.js +++ b/chronos/queues/digests/processDigest.js @@ -55,8 +55,8 @@ export default async (timeframe: Timeframe) => { try { await processJob(timeframe); } catch (err) { - debug('❌ Error in job:\n'); - debug(err); + console.error('❌ Error in job:\n'); + console.error(err); Raven.captureException(err); } }; diff --git a/chronos/queues/digests/processIndividualDigest.js b/chronos/queues/digests/processIndividualDigest.js index 19ff1c785a..ba59f2b9f1 100644 --- a/chronos/queues/digests/processIndividualDigest.js +++ b/chronos/queues/digests/processIndividualDigest.js @@ -83,8 +83,8 @@ export default async (job: Job) => { try { await processJob(job); } catch (err) { - debug('❌ Error in job:\n'); - debug(err); + console.error('❌ Error in job:\n'); + console.error(err); Raven.captureException(err); } }; diff --git a/chronos/queues/digests/weeklyDigest.js b/chronos/queues/digests/weeklyDigest.js index 7543d22c05..de856a2c7f 100644 --- a/chronos/queues/digests/weeklyDigest.js +++ b/chronos/queues/digests/weeklyDigest.js @@ -8,8 +8,8 @@ export default () => { debug('Init weekly digest'); return processDigest('weekly'); } catch (err) { - debug('❌ Error in job:\n'); - debug(err); + console.error('❌ Error in job:\n'); + console.error(err); Raven.captureException(err); } }; diff --git a/chronos/queues/remove-seen-usersNotifications.js b/chronos/queues/remove-seen-usersNotifications.js index 28127c21f1..73705031cc 100644 --- a/chronos/queues/remove-seen-usersNotifications.js +++ b/chronos/queues/remove-seen-usersNotifications.js @@ -63,8 +63,8 @@ export default async () => { try { await processJob(); } catch (err) { - debug('❌ Error in job:\n'); - debug(err); + console.error('❌ Error in job:\n'); + console.error(err); Raven.captureException(err); } }; diff --git a/chronos/yarn.lock b/chronos/yarn.lock index 9f27bd180a..141b6d96be 100644 --- a/chronos/yarn.lock +++ b/chronos/yarn.lock @@ -220,7 +220,7 @@ immutable@~3.7.4: resolved "https://registry.yarnpkg.com/immutable/-/immutable-3.7.6.tgz#13b4d3cb12befa15482a26fe1b2ebae640071e4b" integrity sha1-E7TTyxK++hVIKib+Gy665kAHHks= -ioredis@^3.1.4: +ioredis@3.2.2, ioredis@^3.1.4: version "3.2.2" resolved "https://registry.yarnpkg.com/ioredis/-/ioredis-3.2.2.tgz#b7d5ff3afd77bb9718bb2821329b894b9a44c00b" integrity sha512-g+ShTQYLsCcOUkNOK6CCEZbj3aRDVPw3WOwXk+LxlUKvuS9ujEqP2MppBHyRVYrNNFW/vcPaTBUZ2ctGNSiOCA== @@ -421,11 +421,6 @@ md5@^2.2.1: crypt "~0.0.1" is-buffer "~1.1.1" -merge@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.0.tgz#7531e39d4949c281a66b8c5a6e0265e8b05894da" - integrity sha1-dTHjnUlJwoGma4xabgJl6LBYlNo= - moment-timezone@^0.5.23: version "0.5.23" resolved "https://registry.yarnpkg.com/moment-timezone/-/moment-timezone-0.5.23.tgz#7cbb00db2c14c71b19303cb47b0fb0a6d8651463" @@ -471,13 +466,6 @@ object-keys@^1.0.12: resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.12.tgz#09c53855377575310cca62f55bb334abff7b3ed2" integrity sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag== -postmark@^1.3.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/postmark/-/postmark-1.6.1.tgz#23d48f7182509be5be0eb80c16b90a2e2326eb3c" - integrity sha1-I9SPcYJQm+W+DrgMFrkKLiMm6zw= - dependencies: - merge "1.2.0" - promise@^7.1.1: version "7.3.1" resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" @@ -535,7 +523,7 @@ redis-tag-cache@^1.2.1: dependencies: ioredis "^4.0.0" -rethinkdbdash@^2.3.29: +rethinkdbdash@^2.3.31: version "2.3.31" resolved "https://registry.yarnpkg.com/rethinkdbdash/-/rethinkdbdash-2.3.31.tgz#fe2f73d1fa6e6f5d96d8e881292013cf6dca914d" integrity sha512-6nXrKFjdg2Ug0YpdmPWSvyD/2EisHnFNt4FWZ74dcXGK48ievSv+cNFTmVv+KjLi6I9CCf6w4CKZ6yCYTfMfdQ== diff --git a/desktop/package.json b/desktop/package.json index dad13910e7..745d98e30d 100644 --- a/desktop/package.json +++ b/desktop/package.json @@ -14,13 +14,13 @@ "electron-context-menu": "^0.10.1", "electron-is-dev": "^1.0.1", "electron-log": "^2.2.17", - "electron-updater": "^4.0.5", + "electron-updater": "^4.0.6", "electron-window-state": "^5.0.3" }, "devDependencies": { - "electron": "^3.0.10", - "electron-builder": "^20.36.2", - "nodemon": "^1.18.7", + "electron": "^3.0.11", + "electron-builder": "^20.38.3", + "nodemon": "^1.18.8", "rimraf": "^2.6.2" }, "scripts": { diff --git a/desktop/yarn.lock b/desktop/yarn.lock index 322f1e3ad6..1800ad50fe 100644 --- a/desktop/yarn.lock +++ b/desktop/yarn.lock @@ -64,30 +64,30 @@ anymatch@^2.0.0: micromatch "^3.1.4" normalize-path "^2.1.1" -app-builder-bin@2.5.1: - version "2.5.1" - resolved "https://registry.yarnpkg.com/app-builder-bin/-/app-builder-bin-2.5.1.tgz#a5bcff31e4572d8a179bd88a1335bad8e5d62d81" - integrity sha512-Hm+eyyfQCs5N5avLAw3w9Cf1S5TX/t6ecAfHusbzCDh/rLKLKYso2vwDWH4OQZ8uWLnuJwaAUDf3PstRcn0H+A== +app-builder-bin@2.6.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/app-builder-bin/-/app-builder-bin-2.6.0.tgz#b4e5d5ee5bcf264818ab9830b95338f9f419de5d" + integrity sha512-7HphDMS2U9MwAA6R7lSU6MASFR/D+VJDb5hQ4Fn2coOMyaRn71QDWPdG0TPnDr88F2I7bsTuHYud28S/yN2lZw== -app-builder-lib@20.36.2, app-builder-lib@~20.36.0: - version "20.36.2" - resolved "https://registry.yarnpkg.com/app-builder-lib/-/app-builder-lib-20.36.2.tgz#9bc2fb3191eb81afe9af2bc35e9384d3bf7b6f01" - integrity sha512-5FxLnWI13t0LLmh2QjmPx3KW/xhj67su7UxdCzQgULsUmYurdPx8yAOb9YxoX+RpR08inqt+H3GBOJlqSSrVgg== +app-builder-lib@20.38.3, app-builder-lib@~20.38.3: + version "20.38.3" + resolved "https://registry.yarnpkg.com/app-builder-lib/-/app-builder-lib-20.38.3.tgz#3998cbe07cad6eb45918eba43aa6313bf6cc15c2" + integrity sha512-xZTzWgH2pDUfic9KAv17julgp4/HVD451AzYdyFcwGTrDvLjoZee2Ua6/Els88GKbH3QIkpntJEn5gCwdc4O9A== dependencies: "7zip-bin" "~4.1.0" - app-builder-bin "2.5.1" + app-builder-bin "2.6.0" async-exit-hook "^2.0.1" bluebird-lst "^1.0.6" - builder-util "9.3.0" - builder-util-runtime "8.0.2" + builder-util "9.6.0" + builder-util-runtime "8.1.0" chromium-pickle-js "^0.2.0" debug "^4.1.0" ejs "^2.6.1" electron-osx-sign "0.4.11" - electron-publish "20.36.0" + electron-publish "20.38.3" fs-extra-p "^7.0.0" hosted-git-info "^2.7.1" - is-ci "^1.2.1" + is-ci "^2.0.0" isbinaryfile "^3.0.3" js-yaml "^3.12.0" lazy-val "^1.0.3" @@ -97,7 +97,7 @@ app-builder-lib@20.36.2, app-builder-lib@~20.36.0: read-config-file "3.2.0" sanitize-filename "^1.6.1" semver "^5.6.0" - temp-file "^3.2.0" + temp-file "^3.3.2" aproba@^1.0.3: version "1.2.0" @@ -298,25 +298,25 @@ buffer-from@^1.0.0: resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== -builder-util-runtime@8.0.2, builder-util-runtime@^8.0.1, builder-util-runtime@~8.0.2: - version "8.0.2" - resolved "https://registry.yarnpkg.com/builder-util-runtime/-/builder-util-runtime-8.0.2.tgz#9d638a266ca3aa25ced1cff4df74c8fd97dd78cf" - integrity sha512-46AjyMQ1/yBvGnXWmqNGlg8te7jCPCs7TJ0zDC2+4vV/t5iZp2dR1H9UfVpcBxlvBq3dlAOmwb9fz1d9xZN1+Q== +builder-util-runtime@8.1.0, builder-util-runtime@^8.0.2, builder-util-runtime@^8.1.0, builder-util-runtime@~8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/builder-util-runtime/-/builder-util-runtime-8.1.0.tgz#dd7fca995d48ceee7580b4851ca057566c94601e" + integrity sha512-s1mlJ28mv+56Iebh6c9aXjVe11O3Z0cDTwAGeB0PCcUzHA37fDxGgS8ZGoYNMZP+rBHj21d/od1wuYofTVLaQg== dependencies: bluebird-lst "^1.0.6" debug "^4.1.0" fs-extra-p "^7.0.0" sax "^1.2.4" -builder-util@9.3.0, builder-util@~9.3.0: - version "9.3.0" - resolved "https://registry.yarnpkg.com/builder-util/-/builder-util-9.3.0.tgz#1c94c3bd1c9095840d46a59cdf9514852a47ce8a" - integrity sha512-K+kj5vWj4Mk3jOm6kVT9ZwNcECLHe449vdMxYuZpCnn7CSxRm+TeZm9P9ZFCQUID5Hww/Sy4NMFo+VVJh6+Ptw== +builder-util@9.6.0, builder-util@~9.6.0: + version "9.6.0" + resolved "https://registry.yarnpkg.com/builder-util/-/builder-util-9.6.0.tgz#ffcc0f713d0f4dfa6bcda2aee83b8fcb1f16f5b6" + integrity sha512-6T4E3aNVndTZ2oCt+22S0wxt47d094MxrADi6S012QumXlDNfSsyu1ffbGN9w0HG+4aubpLzf9apKgMP1yl4Kw== dependencies: "7zip-bin" "~4.1.0" - app-builder-bin "2.5.1" + app-builder-bin "2.6.0" bluebird-lst "^1.0.6" - builder-util-runtime "^8.0.1" + builder-util-runtime "^8.0.2" chalk "^2.4.1" debug "^4.1.0" fs-extra-p "^7.0.0" @@ -324,7 +324,7 @@ builder-util@9.3.0, builder-util@~9.3.0: js-yaml "^3.12.0" source-map-support "^0.5.9" stat-mode "^0.2.2" - temp-file "^3.2.0" + temp-file "^3.3.2" builtin-modules@^1.0.0: version "1.1.1" @@ -359,11 +359,16 @@ camelcase@^2.0.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" integrity sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8= -camelcase@^4.0.0, camelcase@^4.1.0: +camelcase@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0= +camelcase@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.0.0.tgz#03295527d58bd3cd4aa75363f35b2e8d97be2f42" + integrity sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA== + capture-stack-trace@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz#a6c0bbe1f38f3aa0b92238ecb6ff42c344d4135d" @@ -418,6 +423,11 @@ ci-info@^1.5.0: resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.6.0.tgz#2ca20dbb9ceb32d4524a683303313f0304b1e497" integrity sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A== +ci-info@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" + integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== + class-utils@^0.3.5: version "0.3.6" resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" @@ -598,18 +608,11 @@ debug@^4.1.0: dependencies: ms "^2.1.1" -decamelize@^1.1.2: +decamelize@^1.1.2, decamelize@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= -decamelize@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-2.0.0.tgz#656d7bbc8094c4c788ea53c5840908c9c7d063c7" - integrity sha512-Ikpp5scV3MSYxY39ymh45ZLEecsTdv/Xj2CaQfI8RLMuwi7XvjX9H/fhraiSuU+C5w5NTDu4ZU72xNiZnurBPg== - dependencies: - xregexp "4.0.0" - decode-uri-component@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" @@ -657,14 +660,14 @@ detect-libc@^1.0.2: resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= -dmg-builder@6.4.0: - version "6.4.0" - resolved "https://registry.yarnpkg.com/dmg-builder/-/dmg-builder-6.4.0.tgz#a95a9cb951d8535acc14bde7b1cd3412ccf43c34" - integrity sha512-q84fMrMm9mXh2qH0Sb3+o0gCvfeJRBI+46y+CpQystqgRyB+3bZB11WqCf5d8+qsENhzpi786jR82xbHG1Vvag== +dmg-builder@6.5.3: + version "6.5.3" + resolved "https://registry.yarnpkg.com/dmg-builder/-/dmg-builder-6.5.3.tgz#95afe3deab33fd874f68d299bc71b481e94f5312" + integrity sha512-ZNl4GFBg6rdFplnuoK56iftxh/qgM7rXJUxgl21eK4WsjxgQwtQ0REZo+pDSL4OzVeyOO8MMNWSNQcCsBLiDyA== dependencies: - app-builder-lib "~20.36.0" + app-builder-lib "~20.38.3" bluebird-lst "^1.0.6" - builder-util "~9.3.0" + builder-util "~9.6.0" fs-extra-p "^7.0.0" iconv-lite "^0.4.24" js-yaml "^3.12.0" @@ -711,24 +714,24 @@ ejs@^2.6.1: resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.6.1.tgz#498ec0d495655abc6f23cd61868d926464071aa0" integrity sha512-0xy4A/twfrRCnkhfk8ErDi5DqdAsAqeGxht4xkCUrsvhhbQNs7E+4jV0CN7+NKIY0aHE72+XvqtBIXzD31ZbXQ== -electron-builder@^20.36.2: - version "20.36.2" - resolved "https://registry.yarnpkg.com/electron-builder/-/electron-builder-20.36.2.tgz#9fefef8c5f08ced5c2085d8331c2ad3c545daef8" - integrity sha512-xPJNt3ZBn5IYlp3pCP0Rvi00JYAKdTeOSLWFrkST1xqWfRZxXrI4uisVD9HQjzRN8hBHhTgTfXtb9uhWPha9eA== +electron-builder@^20.38.3: + version "20.38.3" + resolved "https://registry.yarnpkg.com/electron-builder/-/electron-builder-20.38.3.tgz#32eaa08575b5036e4dafc78adef25ff5a7370004" + integrity sha512-KVM90FtSmryi6JT+YEOTJPsB34ZPdrJn2X18Rt8uatSQPj4vVCSwT834cyvF79idRea8yRVoMcm69XtH9VNPjg== dependencies: - app-builder-lib "20.36.2" + app-builder-lib "20.38.3" bluebird-lst "^1.0.6" - builder-util "9.3.0" - builder-util-runtime "8.0.2" + builder-util "9.6.0" + builder-util-runtime "8.1.0" chalk "^2.4.1" - dmg-builder "6.4.0" + dmg-builder "6.5.3" fs-extra-p "^7.0.0" - is-ci "^1.2.1" + is-ci "^2.0.0" lazy-val "^1.0.3" read-config-file "3.2.0" sanitize-filename "^1.6.1" update-notifier "^2.5.0" - yargs "^12.0.2" + yargs "^12.0.5" electron-context-menu@^0.10.1: version "0.10.1" @@ -784,31 +787,31 @@ electron-osx-sign@0.4.11: minimist "^1.2.0" plist "^3.0.1" -electron-publish@20.36.0: - version "20.36.0" - resolved "https://registry.yarnpkg.com/electron-publish/-/electron-publish-20.36.0.tgz#419fe994938af2b158ac4677f72839ad229e05e8" - integrity sha512-LjJ4KoApSLtKyGWotv0B+PoTzpLEdHHXzDF9HLxatPlfoZCmrOexqm7Qiv1ODuYWPac7Zpf2OHitJp8WIOcZRQ== +electron-publish@20.38.3: + version "20.38.3" + resolved "https://registry.yarnpkg.com/electron-publish/-/electron-publish-20.38.3.tgz#7c162904f728ba2bbf2640bc3620b65ce1061ce3" + integrity sha512-Qomq253NT5DfjUZgFSx6p+gheU5YhM6zZ67fTtBZvwyk0v8HwxNXfa8fZT7h+1c3BwEmjusTbmjZRNW/XZBXFA== dependencies: bluebird-lst "^1.0.6" - builder-util "~9.3.0" - builder-util-runtime "^8.0.1" + builder-util "~9.6.0" + builder-util-runtime "^8.1.0" chalk "^2.4.1" fs-extra-p "^7.0.0" lazy-val "^1.0.3" - mime "^2.3.1" + mime "^2.4.0" -electron-updater@^4.0.5: - version "4.0.5" - resolved "https://registry.yarnpkg.com/electron-updater/-/electron-updater-4.0.5.tgz#0d35f13b539d0dde5a1ee18f676ea87c37bf5f4a" - integrity sha512-2w93987YlPNMbhYQe6+EsSpkhtgYtLyYuAMttqQckwFdBJJat4Jo8ja/gmBk2Aa760g2Jt7aIBPQvlJDiXGPgg== +electron-updater@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/electron-updater/-/electron-updater-4.0.6.tgz#9c4f495ae0e80bf4425e3e1b801c5ed2ab933c2d" + integrity sha512-JPGLME6fxJcHG8hX7HWFl6Aew6iVm0DkcrENreKa5SUJCHG+uUaAhxDGDt+YGcNkyx1uJ6eBGMvFxDTLUv67pg== dependencies: bluebird-lst "^1.0.6" - builder-util-runtime "~8.0.2" + builder-util-runtime "~8.1.0" fs-extra-p "^7.0.0" js-yaml "^3.12.0" lazy-val "^1.0.3" lodash.isequal "^4.5.0" - pako "^1.0.6" + pako "^1.0.7" semver "^5.6.0" source-map-support "^0.5.9" @@ -820,10 +823,10 @@ electron-window-state@^5.0.3: jsonfile "^4.0.0" mkdirp "^0.5.1" -electron@^3.0.10: - version "3.0.10" - resolved "https://registry.yarnpkg.com/electron/-/electron-3.0.10.tgz#7d412856e8cf0d3041a612a32dd09e2af2d50f50" - integrity sha512-I39IeQP3NOlbjKzTDK8uK2JdiHDfhV5SruCS2Gttkn2MaKCY+yIzQ6Wr4DyBXLeTEkL1sbZxbqQVhCavAliv5w== +electron@^3.0.11: + version "3.0.11" + resolved "https://registry.yarnpkg.com/electron/-/electron-3.0.11.tgz#81e350db741fc0f2997ecb2fef5ed085ca42a723" + integrity sha512-galllxAMT3HLbHNR6i5WXrUXzsxzz0D1X6vu3uFMhofU9Wdbxv2w7BAD/BcYTT4c1bu4nZEgXO6AvHXjq0Sksw== dependencies: "@types/node" "^8.0.24" electron-download "^4.1.0" @@ -1353,6 +1356,13 @@ is-ci@^1.0.10, is-ci@^1.2.1: dependencies: ci-info "^1.5.0" +is-ci@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" + integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== + dependencies: + ci-info "^2.0.0" + is-data-descriptor@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" @@ -1785,10 +1795,10 @@ mime-types@^2.1.12, mime-types@~2.1.19: dependencies: mime-db "~1.37.0" -mime@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/mime/-/mime-2.3.1.tgz#b1621c54d63b97c47d3cfe7f7215f7d64517c369" - integrity sha512-OEUllcVoydBHGN1z84yfQDimn58pZNNNXgZlHXSboxMlFvgI6MXSWpWKpFRra7H1HxpVhHTkrghfRW49k6yjeg== +mime@^2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.0.tgz#e051fd881358585f3279df333fe694da0bcffdd6" + integrity sha512-ikBcWwyqXQSHKtciCcctu9YfPbFYZ4+gbHEmE0Q8jzcTYQg5dHCr3g2wwAZjPoJfQVXZq6KXAjpXOTf5/cjT7w== mimic-fn@^1.0.0: version "1.2.0" @@ -1909,21 +1919,21 @@ node-pre-gyp@^0.10.0: semver "^5.3.0" tar "^4" -nodemon@^1.18.7: - version "1.18.7" - resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-1.18.7.tgz#716b66bf3e89ac4fcfb38a9e61887a03fc82efbb" - integrity sha512-xuC1V0F5EcEyKQ1VhHYD13owznQbUw29JKvZ8bVH7TmuvVNHvvbp9pLgE4PjTMRJVe0pJ8fGRvwR2nMiosIsPQ== +nodemon@^1.18.8: + version "1.18.8" + resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-1.18.8.tgz#eb4c0052dc81395bdc503f3c8ae3cba86ca7146a" + integrity sha512-CgC/JdCf+CT7Z+K6wWaV30t8GU1DPtXpr/6PuXC1/LboXCmUQNKOaz0AEMjoWDTt2AdHOBFxgv41dyC0i79SbA== dependencies: chokidar "^2.0.4" debug "^3.1.0" ignore-by-default "^1.0.1" minimatch "^3.0.4" - pstree.remy "^1.1.2" + pstree.remy "^1.1.3" semver "^5.5.0" supports-color "^5.2.0" touch "^3.1.0" undefsafe "^2.0.2" - update-notifier "^2.3.0" + update-notifier "^2.5.0" nopt@^4.0.1: version "4.0.1" @@ -2121,10 +2131,10 @@ package-json@^4.0.0: registry-url "^3.0.3" semver "^5.1.0" -pako@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.6.tgz#0101211baa70c4bca4a0f63f2206e97b7dfaf258" - integrity sha512-lQe48YPsMJAig+yngZ87Lus+NF+3mtu7DVOBu6b/gHO1YpKwIj5AWjZ/TOS7i46HD/UixzWb1zeWDZfGZ3iYcg== +pako@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.7.tgz#2473439021b57f1516c82f58be7275ad8ef1bb27" + integrity sha512-3HNK5tW4x8o5mO8RuHZp3Ydw9icZXx0RANAOMzlMzx7LVXhMJ4mo3MOBpzyd7r/+RUu8BmndP47LXT+vzjtWcQ== parse-color@^1.0.0: version "1.0.0" @@ -2275,10 +2285,10 @@ psl@^1.1.24: resolved "https://registry.yarnpkg.com/psl/-/psl-1.1.29.tgz#60f580d360170bb722a797cc704411e6da850c67" integrity sha512-AeUmQ0oLN02flVHXWh9sSJF7mcdFq0ppid/JkErufc3hGIV/AMa8Fo9VgDo/cT2jFdOWoFvHp90qqBH54W+gjQ== -pstree.remy@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/pstree.remy/-/pstree.remy-1.1.2.tgz#4448bbeb4b2af1fed242afc8dc7416a6f504951a" - integrity sha512-vL6NLxNHzkNTjGJUpMm5PLC+94/0tTlC1vkP9bdU0pOHih+EujMjgMTwfZopZvHWRFbqJ5Y73OMoau50PewDDA== +pstree.remy@^1.1.3: + version "1.1.4" + resolved "https://registry.yarnpkg.com/pstree.remy/-/pstree.remy-1.1.4.tgz#a03d5dbc06ba639fb6dd4874644c4bad9882ec21" + integrity sha512-3kSyTN/iTJMxtL87idnFgTyOp2vQ6B/49QcHUO26kh2M2qahlUivFI1zWJ9FRFPoB+KgcP820JMOuIhkBJAP3Q== punycode@^1.4.1: version "1.4.1" @@ -2827,7 +2837,7 @@ tar@^4: safe-buffer "^5.1.2" yallist "^3.0.2" -temp-file@^3.2.0: +temp-file@^3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/temp-file/-/temp-file-3.3.2.tgz#69b6daf1bbe23231d0a5d03844e3d96f3f531aaa" integrity sha512-FGKccAW0Mux9hC/2bdUIe4bJRv4OyVo4RpVcuplFird1V/YoplIFbnPZjfzbJSf/qNvRZIRB9/4n/RkI0GziuQ== @@ -2990,7 +3000,7 @@ upath@^1.0.5: resolved "https://registry.yarnpkg.com/upath/-/upath-1.1.0.tgz#35256597e46a581db4793d0ce47fa9aebfc9fabd" integrity sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw== -update-notifier@^2.3.0, update-notifier@^2.5.0: +update-notifier@^2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-2.5.0.tgz#d0744593e13f161e406acb1d9408b72cad08aff6" integrity sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw== @@ -3125,11 +3135,6 @@ xmldom@0.1.x: resolved "https://registry.yarnpkg.com/xmldom/-/xmldom-0.1.27.tgz#d501f97b3bdb403af8ef9ecc20573187aadac0e9" integrity sha1-1QH5ezvbQDr4757MIFcxh6rawOk= -xregexp@4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-4.0.0.tgz#e698189de49dd2a18cc5687b05e17c8e43943020" - integrity sha512-PHyM+sQouu7xspQQwELlGwwd05mXUFqwFYfqPO0cC7x4fxyHnnuetmQr6CjJiafIDoH4MogHb9dOoJzR/Y4rFg== - xtend@~2.1.1: version "2.1.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-2.1.2.tgz#6efecc2a4dad8e6962c4901b337ce7ba87b5d28b" @@ -3152,20 +3157,21 @@ yallist@^3.0.0, yallist@^3.0.2: resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.2.tgz#8452b4bb7e83c7c188d8041c1a837c773d6d8bb9" integrity sha1-hFK0u36Dx8GI2AQcGoN8dz1ti7k= -yargs-parser@^10.1.0: - version "10.1.0" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-10.1.0.tgz#7202265b89f7e9e9f2e5765e0fe735a905edbaa8" - integrity sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ== +yargs-parser@^11.1.1: + version "11.1.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-11.1.1.tgz#879a0865973bca9f6bab5cbdf3b1c67ec7d3bcf4" + integrity sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ== dependencies: - camelcase "^4.1.0" + camelcase "^5.0.0" + decamelize "^1.2.0" -yargs@^12.0.2: - version "12.0.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-12.0.2.tgz#fe58234369392af33ecbef53819171eff0f5aadc" - integrity sha512-e7SkEx6N6SIZ5c5H22RTZae61qtn3PYUE8JYbBFlK9sYmh3DMQ6E5ygtaG/2BW0JZi4WGgTR2IV5ChqlqrDGVQ== +yargs@^12.0.5: + version "12.0.5" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-12.0.5.tgz#05f5997b609647b64f66b81e3b4b10a368e7ad13" + integrity sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw== dependencies: cliui "^4.0.0" - decamelize "^2.0.0" + decamelize "^1.2.0" find-up "^3.0.0" get-caller-file "^1.0.1" os-locale "^3.0.0" @@ -3175,7 +3181,7 @@ yargs@^12.0.2: string-width "^2.0.0" which-module "^2.0.0" y18n "^3.2.1 || ^4.0.0" - yargs-parser "^10.1.0" + yargs-parser "^11.1.1" yauzl@2.4.1: version "2.4.1" diff --git a/flow-typed/npm/bluebird_vx.x.x.js b/flow-typed/npm/bluebird_vx.x.x.js new file mode 100644 index 0000000000..1d7a969a60 --- /dev/null +++ b/flow-typed/npm/bluebird_vx.x.x.js @@ -0,0 +1,312 @@ +// flow-typed signature: fd6015492cc31b2750e3b5e1b048858f +// flow-typed version: <>/bluebird_v3.5.3/flow_v0.66.0 + +/** + * This is an autogenerated libdef stub for: + * + * 'bluebird' + * + * Fill this stub out by replacing all the `any` types. + * + * Once filled out, we encourage you to share your work with the + * community by sending a pull request to: + * https://github.com/flowtype/flow-typed + */ + +declare module 'bluebird' { + declare module.exports: any; +} + +/** + * We include stubs for each file inside this npm package in case you need to + * require those files directly. Feel free to delete any files that aren't + * needed. + */ +declare module 'bluebird/js/browser/bluebird.core' { + declare module.exports: any; +} + +declare module 'bluebird/js/browser/bluebird.core.min' { + declare module.exports: any; +} + +declare module 'bluebird/js/browser/bluebird' { + declare module.exports: any; +} + +declare module 'bluebird/js/browser/bluebird.min' { + declare module.exports: any; +} + +declare module 'bluebird/js/release/any' { + declare module.exports: any; +} + +declare module 'bluebird/js/release/assert' { + declare module.exports: any; +} + +declare module 'bluebird/js/release/async' { + declare module.exports: any; +} + +declare module 'bluebird/js/release/bind' { + declare module.exports: any; +} + +declare module 'bluebird/js/release/bluebird' { + declare module.exports: any; +} + +declare module 'bluebird/js/release/call_get' { + declare module.exports: any; +} + +declare module 'bluebird/js/release/cancel' { + declare module.exports: any; +} + +declare module 'bluebird/js/release/catch_filter' { + declare module.exports: any; +} + +declare module 'bluebird/js/release/context' { + declare module.exports: any; +} + +declare module 'bluebird/js/release/debuggability' { + declare module.exports: any; +} + +declare module 'bluebird/js/release/direct_resolve' { + declare module.exports: any; +} + +declare module 'bluebird/js/release/each' { + declare module.exports: any; +} + +declare module 'bluebird/js/release/errors' { + declare module.exports: any; +} + +declare module 'bluebird/js/release/es5' { + declare module.exports: any; +} + +declare module 'bluebird/js/release/filter' { + declare module.exports: any; +} + +declare module 'bluebird/js/release/finally' { + declare module.exports: any; +} + +declare module 'bluebird/js/release/generators' { + declare module.exports: any; +} + +declare module 'bluebird/js/release/join' { + declare module.exports: any; +} + +declare module 'bluebird/js/release/map' { + declare module.exports: any; +} + +declare module 'bluebird/js/release/method' { + declare module.exports: any; +} + +declare module 'bluebird/js/release/nodeback' { + declare module.exports: any; +} + +declare module 'bluebird/js/release/nodeify' { + declare module.exports: any; +} + +declare module 'bluebird/js/release/promise_array' { + declare module.exports: any; +} + +declare module 'bluebird/js/release/promise' { + declare module.exports: any; +} + +declare module 'bluebird/js/release/promisify' { + declare module.exports: any; +} + +declare module 'bluebird/js/release/props' { + declare module.exports: any; +} + +declare module 'bluebird/js/release/queue' { + declare module.exports: any; +} + +declare module 'bluebird/js/release/race' { + declare module.exports: any; +} + +declare module 'bluebird/js/release/reduce' { + declare module.exports: any; +} + +declare module 'bluebird/js/release/schedule' { + declare module.exports: any; +} + +declare module 'bluebird/js/release/settle' { + declare module.exports: any; +} + +declare module 'bluebird/js/release/some' { + declare module.exports: any; +} + +declare module 'bluebird/js/release/synchronous_inspection' { + declare module.exports: any; +} + +declare module 'bluebird/js/release/thenables' { + declare module.exports: any; +} + +declare module 'bluebird/js/release/timers' { + declare module.exports: any; +} + +declare module 'bluebird/js/release/using' { + declare module.exports: any; +} + +declare module 'bluebird/js/release/util' { + declare module.exports: any; +} + +// Filename aliases +declare module 'bluebird/js/browser/bluebird.core.js' { + declare module.exports: $Exports<'bluebird/js/browser/bluebird.core'>; +} +declare module 'bluebird/js/browser/bluebird.core.min.js' { + declare module.exports: $Exports<'bluebird/js/browser/bluebird.core.min'>; +} +declare module 'bluebird/js/browser/bluebird.js' { + declare module.exports: $Exports<'bluebird/js/browser/bluebird'>; +} +declare module 'bluebird/js/browser/bluebird.min.js' { + declare module.exports: $Exports<'bluebird/js/browser/bluebird.min'>; +} +declare module 'bluebird/js/release/any.js' { + declare module.exports: $Exports<'bluebird/js/release/any'>; +} +declare module 'bluebird/js/release/assert.js' { + declare module.exports: $Exports<'bluebird/js/release/assert'>; +} +declare module 'bluebird/js/release/async.js' { + declare module.exports: $Exports<'bluebird/js/release/async'>; +} +declare module 'bluebird/js/release/bind.js' { + declare module.exports: $Exports<'bluebird/js/release/bind'>; +} +declare module 'bluebird/js/release/bluebird.js' { + declare module.exports: $Exports<'bluebird/js/release/bluebird'>; +} +declare module 'bluebird/js/release/call_get.js' { + declare module.exports: $Exports<'bluebird/js/release/call_get'>; +} +declare module 'bluebird/js/release/cancel.js' { + declare module.exports: $Exports<'bluebird/js/release/cancel'>; +} +declare module 'bluebird/js/release/catch_filter.js' { + declare module.exports: $Exports<'bluebird/js/release/catch_filter'>; +} +declare module 'bluebird/js/release/context.js' { + declare module.exports: $Exports<'bluebird/js/release/context'>; +} +declare module 'bluebird/js/release/debuggability.js' { + declare module.exports: $Exports<'bluebird/js/release/debuggability'>; +} +declare module 'bluebird/js/release/direct_resolve.js' { + declare module.exports: $Exports<'bluebird/js/release/direct_resolve'>; +} +declare module 'bluebird/js/release/each.js' { + declare module.exports: $Exports<'bluebird/js/release/each'>; +} +declare module 'bluebird/js/release/errors.js' { + declare module.exports: $Exports<'bluebird/js/release/errors'>; +} +declare module 'bluebird/js/release/es5.js' { + declare module.exports: $Exports<'bluebird/js/release/es5'>; +} +declare module 'bluebird/js/release/filter.js' { + declare module.exports: $Exports<'bluebird/js/release/filter'>; +} +declare module 'bluebird/js/release/finally.js' { + declare module.exports: $Exports<'bluebird/js/release/finally'>; +} +declare module 'bluebird/js/release/generators.js' { + declare module.exports: $Exports<'bluebird/js/release/generators'>; +} +declare module 'bluebird/js/release/join.js' { + declare module.exports: $Exports<'bluebird/js/release/join'>; +} +declare module 'bluebird/js/release/map.js' { + declare module.exports: $Exports<'bluebird/js/release/map'>; +} +declare module 'bluebird/js/release/method.js' { + declare module.exports: $Exports<'bluebird/js/release/method'>; +} +declare module 'bluebird/js/release/nodeback.js' { + declare module.exports: $Exports<'bluebird/js/release/nodeback'>; +} +declare module 'bluebird/js/release/nodeify.js' { + declare module.exports: $Exports<'bluebird/js/release/nodeify'>; +} +declare module 'bluebird/js/release/promise_array.js' { + declare module.exports: $Exports<'bluebird/js/release/promise_array'>; +} +declare module 'bluebird/js/release/promise.js' { + declare module.exports: $Exports<'bluebird/js/release/promise'>; +} +declare module 'bluebird/js/release/promisify.js' { + declare module.exports: $Exports<'bluebird/js/release/promisify'>; +} +declare module 'bluebird/js/release/props.js' { + declare module.exports: $Exports<'bluebird/js/release/props'>; +} +declare module 'bluebird/js/release/queue.js' { + declare module.exports: $Exports<'bluebird/js/release/queue'>; +} +declare module 'bluebird/js/release/race.js' { + declare module.exports: $Exports<'bluebird/js/release/race'>; +} +declare module 'bluebird/js/release/reduce.js' { + declare module.exports: $Exports<'bluebird/js/release/reduce'>; +} +declare module 'bluebird/js/release/schedule.js' { + declare module.exports: $Exports<'bluebird/js/release/schedule'>; +} +declare module 'bluebird/js/release/settle.js' { + declare module.exports: $Exports<'bluebird/js/release/settle'>; +} +declare module 'bluebird/js/release/some.js' { + declare module.exports: $Exports<'bluebird/js/release/some'>; +} +declare module 'bluebird/js/release/synchronous_inspection.js' { + declare module.exports: $Exports<'bluebird/js/release/synchronous_inspection'>; +} +declare module 'bluebird/js/release/thenables.js' { + declare module.exports: $Exports<'bluebird/js/release/thenables'>; +} +declare module 'bluebird/js/release/timers.js' { + declare module.exports: $Exports<'bluebird/js/release/timers'>; +} +declare module 'bluebird/js/release/using.js' { + declare module.exports: $Exports<'bluebird/js/release/using'>; +} +declare module 'bluebird/js/release/util.js' { + declare module.exports: $Exports<'bluebird/js/release/util'>; +} diff --git a/hermes/package.json b/hermes/package.json index 610975afac..56c20db8f5 100644 --- a/hermes/package.json +++ b/hermes/package.json @@ -10,6 +10,7 @@ "draft-js": "^0.10.5", "escape-html": "^1.0.3", "faker": "^4.1.0", + "ioredis": "3.2.2", "jsonwebtoken": "^8.4.0", "lodash.intersection": "^4.4.0", "node-env-file": "^0.1.8", @@ -26,4 +27,4 @@ "devDependencies": { "json-stringify-pretty-compact": "^1.2.0" } -} \ No newline at end of file +} diff --git a/hermes/queues/send-admin-active-community-report-email.js b/hermes/queues/send-admin-active-community-report-email.js index 6a7a5ac19f..a4d89c2650 100644 --- a/hermes/queues/send-admin-active-community-report-email.js +++ b/hermes/queues/send-admin-active-community-report-email.js @@ -1,15 +1,22 @@ +// @flow const debug = require('debug')( 'hermes:queue:send-admin-active-community-report-email' ); import sendEmail from '../send-email'; +import Raven from 'shared/raven'; import { ADMIN_ACTIVE_COMMUNITY_REPORT_TEMPLATE, SEND_ACTIVE_COMMUNITY_ADMIN_REPORT_EMAIL, } from './constants'; -import type { AdminActiveCommunityReportJobData, Job } from 'shared/bull/types'; +import type { + AdminActiveCommunityReportEmailJobData, + Job, +} from 'shared/bull/types'; import formatDate from '../utils/format-date'; -export default (job: Job) => { +export default ( + job: Job +): Promise => { debug(`\nnew job: ${job.id}`); const { dacCount, @@ -27,7 +34,11 @@ export default (job: Job) => { try { return sendEmail({ templateId: ADMIN_ACTIVE_COMMUNITY_REPORT_TEMPLATE, - to: 'brian@spectrum.chat, max@spectrum.chat, bryn@spectrum.chat', + to: [ + { email: 'brian@spectrum.chat ' }, + { email: 'max@spectrum.chat ' }, + { email: 'bryn@spectrum.chat ' }, + ], dynamic_template_data: { subject: `Active Community Report: ${month} ${day}, ${year}`, data: { @@ -44,8 +55,8 @@ export default (job: Job) => { }, }); } catch (err) { - debug('❌ Error in job:\n'); - debug(err); - Raven.captureException(err); + console.error('❌ Error in job:\n'); + console.error(err); + return Raven.captureException(err); } }; diff --git a/hermes/queues/send-admin-community-created-email.js b/hermes/queues/send-admin-community-created-email.js index 4cd6b4cbd4..e1e4f633f9 100644 --- a/hermes/queues/send-admin-community-created-email.js +++ b/hermes/queues/send-admin-community-created-email.js @@ -1,20 +1,25 @@ -const debug = require('debug')( - 'hermes:queue:send-admin-community-created-email' -); +// @flow +const debug = require('debug')('hermes:queue:admin-community-created-email'); +import Raven from 'shared/raven'; import sendEmail from '../send-email'; +import type { Job, AdminCommunityCreatedEmailJobData } from 'shared/bull/types'; import { ADMIN_COMMUNITY_CREATED_TEMPLATE, SEND_ADMIN_COMMUNITY_CREATED_EMAIL, } from './constants'; -export default job => { +export default (job: Job): Promise => { debug(`\nnew job: ${job.id}`); const { user, community } = job.data; try { return sendEmail({ templateId: ADMIN_COMMUNITY_CREATED_TEMPLATE, - to: 'brian@spectrum.chat, max@spectrum.chat, bryn@spectrum.chat', + to: [ + { email: 'brian@spectrum.chat ' }, + { email: 'max@spectrum.chat ' }, + { email: 'bryn@spectrum.chat ' }, + ], dynamic_template_data: { subject: `New community: ${community.name}`, user: { @@ -25,8 +30,8 @@ export default job => { }, }); } catch (err) { - debug('❌ Error in job:\n'); - debug(err); - Raven.captureException(err); + console.error('❌ Error in job:\n'); + console.error(err); + return Raven.captureException(err); } }; diff --git a/hermes/queues/send-admin-slack-import-email.js b/hermes/queues/send-admin-slack-import-email.js index 06ec54a139..5049a64e28 100644 --- a/hermes/queues/send-admin-slack-import-email.js +++ b/hermes/queues/send-admin-slack-import-email.js @@ -1,13 +1,16 @@ +// @flow const debug = require('debug')( - 'hermes:queue:send-admin-slack-import-processed-email' + 'hermes:queue:admin-slack-import-processed-email' ); +import Raven from 'shared/raven'; import sendEmail from '../send-email'; import { ADMIN_SLACK_IMPORT_PROCESSED_TEMPLATE, SEND_ADMIN_SLACK_IMPORT_PROCESSED_EMAIL, } from './constants'; +import type { Job, AdminSlackImportJobData } from 'shared/bull/types'; -export default job => { +export default (job: Job): Promise => { debug(`\nnew job: ${job.id}`); const { user, community, invitedCount, teamName } = job.data; const subject = `New Slack import: ${invitedCount} invites from the ${teamName} Slack team`; @@ -17,7 +20,11 @@ export default job => { try { return sendEmail({ templateId: ADMIN_SLACK_IMPORT_PROCESSED_TEMPLATE, - to: 'brian@spectrum.chat, max@spectrum.chat, bryn@spectrum.chat', + to: [ + { email: 'brian@spectrum.chat ' }, + { email: 'max@spectrum.chat ' }, + { email: 'bryn@spectrum.chat ' }, + ], dynamic_template_data: { subject, preheader, @@ -30,8 +37,8 @@ export default job => { }, }); } catch (err) { - debug('❌ Error in job:\n'); - debug(err); - Raven.captureException(err); + console.error('❌ Error in job:\n'); + console.error(err); + return Raven.captureException(err); } }; diff --git a/hermes/queues/send-admin-toxic-content-email.js b/hermes/queues/send-admin-toxic-content-email.js index 3947f7ddb6..372bed1363 100644 --- a/hermes/queues/send-admin-toxic-content-email.js +++ b/hermes/queues/send-admin-toxic-content-email.js @@ -6,9 +6,9 @@ import { ADMIN_TOXIC_MESSAGE_TEMPLATE, SEND_ADMIN_TOXIC_MESSAGE_EMAIL, } from './constants'; +import type { Job, AdminToxicContentEmailJobData } from 'shared/bull/types'; -// $FlowFixMe -export default job => { +export default (job: Job): Promise => { debug(`\nnew job: ${job.id}`); const { type, @@ -20,16 +20,18 @@ export default job => { toxicityConfidence: { perspectiveScore }, } = job.data; - const toPercent = (num: number) => Math.round(num * 100); - - const perspectivePercent = perspectiveScore.toPercent(perspectiveScore); - + const toPercent = (num: number): number => Math.round(num * 100); + const perspectivePercent = toPercent(perspectiveScore); const subject = `Toxic alert (${perspectivePercent.toString()}%): ${text}`; try { return sendEmail({ templateId: ADMIN_TOXIC_MESSAGE_TEMPLATE, - to: 'brian@spectrum.chat, bryn@spectrum.chat, max@spectrum.chat', + to: [ + { email: 'brian@spectrum.chat ' }, + { email: 'max@spectrum.chat ' }, + { email: 'bryn@spectrum.chat ' }, + ], dynamic_template_data: { subject, preheader: text, @@ -47,8 +49,8 @@ export default job => { }, }); } catch (err) { - debug('❌ Error in job:\n'); - debug(err); - Raven.captureException(err); + console.error('❌ Error in job:\n'); + console.error(err); + return Raven.captureException(err); } }; diff --git a/hermes/queues/send-admin-user-reported-email.js b/hermes/queues/send-admin-user-reported-email.js index 3b6b96252d..3a54ba93d1 100644 --- a/hermes/queues/send-admin-user-reported-email.js +++ b/hermes/queues/send-admin-user-reported-email.js @@ -9,7 +9,9 @@ import { } from './constants'; import type { Job, AdminProcessUserReportedJobData } from 'shared/bull/types'; -export default async (job: Job) => { +export default async ( + job: Job +): Promise => { debug(`\nnew job: ${job.id}`); const { userId, reason, reportedBy, reportedAt } = job.data; @@ -24,7 +26,11 @@ export default async (job: Job) => { try { return sendEmail({ templateId: ADMIN_USER_REPORTED_TEMPLATE, - to: 'brian@spectrum.chat, max@spectrum.chat, bryn@spectrum.chat', + to: [ + { email: 'brian@spectrum.chat ' }, + { email: 'max@spectrum.chat ' }, + { email: 'bryn@spectrum.chat ' }, + ], dynamic_template_data: { subject, preheader, @@ -34,8 +40,8 @@ export default async (job: Job) => { }, }); } catch (err) { - debug('❌ Error in job:\n'); - debug(err); - Raven.captureException(err); + console.error('❌ Error in job:\n'); + console.error(err); + return Raven.captureException(err); } }; diff --git a/hermes/queues/send-admin-user-spamming-threads-notification-email.js b/hermes/queues/send-admin-user-spamming-threads-notification-email.js index 16dbae5806..0f07ec50c3 100644 --- a/hermes/queues/send-admin-user-spamming-threads-notification-email.js +++ b/hermes/queues/send-admin-user-spamming-threads-notification-email.js @@ -14,7 +14,7 @@ import type { Job, AdminUserSpammingThreadsJobData } from 'shared/bull/types'; const threadBodyToPlainText = (body: any): string => toPlainText(toState(JSON.parse(body))); -export default (job: Job) => { +export default (job: Job): Promise => { debug(`\nnew job: ${job.id}`); const { user, threads, publishing, community, channel } = job.data; @@ -36,7 +36,11 @@ export default (job: Job) => { try { return sendEmail({ templateId: ADMIN_USER_SPAMMING_THREADS_NOTIFICATION_TEMPLATE, - to: 'brian@spectrum.chat, max@spectrum.chat, bryn@spectrum.chat', + to: [ + { email: 'brian@spectrum.chat ' }, + { email: 'max@spectrum.chat ' }, + { email: 'bryn@spectrum.chat ' }, + ], dynamic_template_data: { subject, preheader, @@ -50,8 +54,8 @@ export default (job: Job) => { }, }); } catch (err) { - debug('❌ Error in job:\n'); - debug(err); - Raven.captureException(err); + console.error('❌ Error in job:\n'); + console.error(err); + return Raven.captureException(err); } }; diff --git a/hermes/queues/send-administrator-email-validation-email.js b/hermes/queues/send-administrator-email-validation-email.js index c0757bd8d1..cd2d7f4714 100644 --- a/hermes/queues/send-administrator-email-validation-email.js +++ b/hermes/queues/send-administrator-email-validation-email.js @@ -14,7 +14,9 @@ import type { AdministratorEmailValidationEmailJobData, } from 'shared/bull/types'; -export default async (job: Job) => { +export default async ( + job: Job +): Promise => { debug(`\nnew job: ${job.id}`); debug(`\nsending email validation email to: ${job.data.email}`); @@ -23,7 +25,7 @@ export default async (job: Job) => { debug( '\nno email or userId or communityId found for this request, returning' ); - return; + return Promise.resolve(); } const subject = `Confirm new administrator email for the ${ @@ -38,24 +40,24 @@ export default async (job: Job) => { ); if (!validateToken) { - return; - } else { - try { - return sendEmail({ - templateId: ADMINISTRATOR_EMAIL_VALIDATION_TEMPLATE, - to: email, - dynamic_template_data: { - subject, - preheader, - validateToken, - community, - }, - userId, - }); - } catch (err) { - debug('❌ Error in job:\n'); - debug(err); - Raven.captureException(err); - } + return Promise.resolve(); + } + + try { + return sendEmail({ + templateId: ADMINISTRATOR_EMAIL_VALIDATION_TEMPLATE, + to: [{ email }], + dynamic_template_data: { + subject, + preheader, + validateToken, + community, + }, + userId, + }); + } catch (err) { + console.error('❌ Error in job:\n'); + console.error(err); + return Raven.captureException(err); } }; diff --git a/hermes/queues/send-community-invite-email.js b/hermes/queues/send-community-invite-email.js index 43b75e5265..869a4af5b7 100644 --- a/hermes/queues/send-community-invite-email.js +++ b/hermes/queues/send-community-invite-email.js @@ -26,7 +26,7 @@ type SendCommunityInviteEmailJob = { id: string, }; -export default (job: SendCommunityInviteEmailJob) => { +export default (job: SendCommunityInviteEmailJob): Promise => { debug(`\nnew job: ${job.id}`); debug(`\nsending community invite to: ${job.data.to}`); @@ -36,6 +36,7 @@ export default (job: SendCommunityInviteEmailJob) => { community, communitySettings, customMessage, + to, } = job.data; const subject = `${job.data.sender.name} has invited you to join the ${ @@ -54,7 +55,7 @@ export default (job: SendCommunityInviteEmailJob) => { try { return sendEmail({ templateId: COMMUNITY_INVITE_TEMPLATE, - to: job.data.to, + to: [{ email: to }], dynamic_template_data: { subject, preheader, @@ -67,8 +68,8 @@ export default (job: SendCommunityInviteEmailJob) => { userId: recipient.userId, }); } catch (err) { - debug('❌ Error in job:\n'); - debug(err); - Raven.captureException(err); + console.error('❌ Error in job:\n'); + console.error(err); + return Raven.captureException(err); } }; diff --git a/hermes/queues/send-digest-email.js b/hermes/queues/send-digest-email.js index 6a2872f164..b55dff255d 100644 --- a/hermes/queues/send-digest-email.js +++ b/hermes/queues/send-digest-email.js @@ -8,7 +8,7 @@ import { TYPE_DAILY_DIGEST, TYPE_WEEKLY_DIGEST } from './constants'; import formatDate from '../utils/format-date'; import type { Job, SendDigestEmailJobData } from 'shared/bull/types'; -export default async (job: Job) => { +export default async (job: Job): Promise => { const { email, username, @@ -21,7 +21,7 @@ export default async (job: Job) => { } = job.data; if (!email || !userId || !username) { - return; + return Promise.resolve(); } const unsubscribeType = @@ -32,7 +32,7 @@ export default async (job: Job) => { unsubscribeType ); - if (!unsubscribeToken) return; + if (!unsubscribeToken) return Promise.resolve(); const tag = timeframe === 'daily' @@ -62,7 +62,7 @@ export default async (job: Job) => { try { return sendEmail({ templateId: DIGEST_TEMPLATE, - to: email, + to: [{ email }], dynamic_template_data: { subject, preheader, @@ -82,8 +82,8 @@ export default async (job: Job) => { userId, }); } catch (err) { - debug('❌ Error in job:\n'); - debug(err); - Raven.captureException(err); + console.error('❌ Error in job:\n'); + console.error(err); + return Raven.captureException(err); } }; diff --git a/hermes/queues/send-email-validation-email.js b/hermes/queues/send-email-validation-email.js index 444c82876b..92d4dbe25c 100644 --- a/hermes/queues/send-email-validation-email.js +++ b/hermes/queues/send-email-validation-email.js @@ -16,34 +16,31 @@ type SendEmailValidationJob = { id: string, }; -export default async (job: SendEmailValidationJob) => { +export default async (job: SendEmailValidationJob): Promise => { debug(`\nnew job: ${job.id}`); debug(`\nsending email validation email to: ${job.data.email}`); const { email, userId } = job.data; if (!email || !userId) { debug('\nno email or userId found for this request, returning'); - return; + return Promise.resolve(); } const validateToken = await generateEmailValidationToken(userId, email); - if (!validateToken) { - return; - } else { - try { - return sendEmail({ - templateId: EMAIL_VALIDATION_TEMPLATE, - to: email, - dynamic_template_data: { - subject: 'Confirm your email address on Spectrum', - validateToken, - }, - }); - } catch (err) { - debug('❌ Error in job:\n'); - debug(err); - Raven.captureException(err); - } + if (!validateToken) return Promise.resolve(); + try { + return sendEmail({ + templateId: EMAIL_VALIDATION_TEMPLATE, + to: [{ email }], + dynamic_template_data: { + subject: 'Confirm your email address on Spectrum', + validateToken, + }, + }); + } catch (err) { + console.error('❌ Error in job:\n'); + console.error(err); + return Raven.captureException(err); } }; diff --git a/hermes/queues/send-mention-message-email.js b/hermes/queues/send-mention-message-email.js index 43c5fd3553..280789a37a 100644 --- a/hermes/queues/send-mention-message-email.js +++ b/hermes/queues/send-mention-message-email.js @@ -11,7 +11,9 @@ import { } from './constants'; import type { SendNewMessageMentionEmailJobData, Job } from 'shared/bull/types'; -export default async (job: Job) => { +export default async ( + job: Job +): Promise => { debug(`\nnew job: ${job.id}`); const { recipient, sender, thread, message } = job.data; @@ -29,12 +31,12 @@ export default async (job: Job) => { thread.id ); - if (!recipient.email || !unsubscribeToken) return; + if (!recipient.email || !unsubscribeToken) return Promise.resolve(); try { return sendEmail({ templateId: NEW_MENTION_MESSAGE_TEMPLATE, - to: recipient.email, + to: [{ email: recipient.email }], dynamic_template_data: { subject, preheader, @@ -50,8 +52,8 @@ export default async (job: Job) => { userId: recipient.id, }); } catch (err) { - debug('❌ Error in job:\n'); - debug(err); - Raven.captureException(err); + console.error('❌ Error in job:\n'); + console.error(err); + return Raven.captureException(err); } }; diff --git a/hermes/queues/send-mention-thread-email.js b/hermes/queues/send-mention-thread-email.js index 89e538e83b..a237144b7f 100644 --- a/hermes/queues/send-mention-thread-email.js +++ b/hermes/queues/send-mention-thread-email.js @@ -11,7 +11,9 @@ import { } from './constants'; import type { SendNewMessageMentionEmailJobData, Job } from 'shared/bull/types'; -export default async (job: Job) => { +export default async ( + job: Job +): Promise => { debug(`\nnew job: ${job.id}`); const { recipient, sender, thread } = job.data; @@ -23,12 +25,12 @@ export default async (job: Job) => { generateUnsubscribeToken(recipient.id, TYPE_MUTE_THREAD, thread.id), ]); - if (!recipient.email || !unsubscribeToken) return; + if (!recipient.email || !unsubscribeToken) return Promise.resolve(); try { return sendEmail({ templateId: NEW_MENTION_THREAD_TEMPLATE, - to: recipient.email, + to: [{ email: recipient.email }], dynamic_template_data: { subject, preheader, @@ -43,8 +45,8 @@ export default async (job: Job) => { userId: recipient.id, }); } catch (err) { - debug('❌ Error in job:\n'); - debug(err); - Raven.captureException(err); + console.error('❌ Error in job:\n'); + console.error(err); + return Raven.captureException(err); } }; diff --git a/hermes/queues/send-new-community-welcome-email.js b/hermes/queues/send-new-community-welcome-email.js index 0a29d2737b..8937b2fd50 100644 --- a/hermes/queues/send-new-community-welcome-email.js +++ b/hermes/queues/send-new-community-welcome-email.js @@ -1,11 +1,14 @@ +// @flow const debug = require('debug')('hermes:queue:send-new-community-welcome-email'); import sendEmail from '../send-email'; +import Raven from 'shared/raven'; import { NEW_COMMUNITY_WELCOME_TEMPLATE, SEND_NEW_COMMUNITY_WELCOME_EMAIL, } from './constants'; +import type { Job, NewCommunityWelcomeEmailJobData } from 'shared/bull/types'; -export default job => { +export default (job: Job): Promise => { debug(`\nnew job: ${job.id}`); const { user, community } = job.data; @@ -17,7 +20,7 @@ export default job => { try { return sendEmail({ templateId: NEW_COMMUNITY_WELCOME_TEMPLATE, - to: user.email, + to: [{ email: user.email }], dynamic_template_data: { user, community, @@ -25,8 +28,8 @@ export default job => { }, }); } catch (err) { - debug('❌ Error in job:\n'); - debug(err); - Raven.captureException(err); + console.error('❌ Error in job:\n'); + console.error(err); + return Raven.captureException(err); } }; diff --git a/hermes/queues/send-new-direct-message-email.js b/hermes/queues/send-new-direct-message-email.js index 8bc09cfa6c..eceed8c602 100644 --- a/hermes/queues/send-new-direct-message-email.js +++ b/hermes/queues/send-new-direct-message-email.js @@ -11,7 +11,9 @@ import { } from './constants'; import type { Job, SendNewDirectMessageEmailJobData } from 'shared/bull/types'; -export default async (job: Job) => { +export default async ( + job: Job +): Promise => { debug(`\nnew job: ${job.id}`); const { recipient, user, thread, message } = job.data; const subject = `New direct message from ${user.name} on Spectrum`; @@ -27,12 +29,13 @@ export default async (job: Job) => { thread.id ); - if (!recipient.email || !unsubscribeToken || !muteThreadToken) return; + if (!recipient.email || !unsubscribeToken || !muteThreadToken) + return Promise.resolve(); try { return sendEmail({ templateId: NEW_DIRECT_MESSAGE_TEMPLATE, - to: recipient.email, + to: [{ email: recipient.email }], dynamic_template_data: { subject, user, @@ -45,8 +48,8 @@ export default async (job: Job) => { userId: recipient.userId, }); } catch (err) { - debug('❌ Error in job:\n'); - debug(err); - Raven.captureException(err); + console.error('❌ Error in job:\n'); + console.error(err); + return Raven.captureException(err); } }; diff --git a/hermes/queues/send-new-message-email.js b/hermes/queues/send-new-message-email.js index 517ced30c4..486d3f53dd 100644 --- a/hermes/queues/send-new-message-email.js +++ b/hermes/queues/send-new-message-email.js @@ -12,7 +12,7 @@ import { } from './constants'; import type { Job, SendNewMessageEmailJobData } from 'shared/bull/types'; -export default async (job: Job) => { +export default async (job: Job): Promise => { debug(`\nnew job: ${job.id}`); const { recipient, threads } = job.data; @@ -77,11 +77,12 @@ export default async (job: Job) => { ) : null; - if (!unsubscribeToken || !recipient.email || !recipient.username) return; + if (!unsubscribeToken || !recipient.email || !recipient.username) + return Promise.resolve(); try { return sendEmail({ templateId: NEW_MESSAGE_TEMPLATE, - to: recipient.email, + to: [{ email: recipient.email }], dynamic_template_data: { subject, preheader, @@ -102,8 +103,8 @@ export default async (job: Job) => { userId: recipient.userId, }); } catch (err) { - debug('❌ Error in job:\n'); - debug(err); - Raven.captureException(err); + console.error('❌ Error in job:\n'); + console.error(err); + return Raven.captureException(err); } }; diff --git a/hermes/queues/send-new-thread-email.js b/hermes/queues/send-new-thread-email.js index fff1a6a640..34907f58be 100644 --- a/hermes/queues/send-new-thread-email.js +++ b/hermes/queues/send-new-thread-email.js @@ -49,7 +49,7 @@ type SendNewThreadEmailJob = { id: string, }; -export default async (job: SendNewThreadEmailJob) => { +export default async (job: SendNewThreadEmailJob): Promise => { const { recipient, thread, primaryActionLabel } = job.data; debug(`\nnew job: ${job.id}`); @@ -60,7 +60,10 @@ export default async (job: SendNewThreadEmailJob) => { TYPE_NEW_THREAD_CREATED ); - if (!unsubscribeToken || !recipient.email) return; + if (!unsubscribeToken || !recipient.email) { + console.error('Aborting no unsub token or recipient email'); + return Promise.resolve(); + } const subject = `‘${truncate(smarten(thread.content.title), 80)}’ by ${ thread.creator.name @@ -72,7 +75,7 @@ export default async (job: SendNewThreadEmailJob) => { try { return sendEmail({ templateId: NEW_THREAD_CREATED_TEMPLATE, - to: recipient.email, + to: [{ email: recipient.email }], dynamic_template_data: { subject, preheader, @@ -96,8 +99,8 @@ export default async (job: SendNewThreadEmailJob) => { userId: recipient.id, }); } catch (err) { - debug('❌ Error in job:\n'); - debug(err); - Raven.captureException(err); + console.error('❌ Error in job:\n'); + console.error(err); + return Raven.captureException(err); } }; diff --git a/hermes/queues/send-private-channel-request-approved-email.js b/hermes/queues/send-private-channel-request-approved-email.js index f669a8217d..5ae2530728 100644 --- a/hermes/queues/send-private-channel-request-approved-email.js +++ b/hermes/queues/send-private-channel-request-approved-email.js @@ -13,7 +13,9 @@ import type { SendPrivateChannelRequestApprovedEmailJobData, } from 'shared/bull/types'; -export default (job: Job) => { +export default ( + job: Job +): Promise => { debug(`\nnew job: ${job.id}`); const { recipient, channel, community } = job.data; debug(`\nsending notification to user: ${recipient.email}`); @@ -28,7 +30,7 @@ export default (job: Job) => { try { return sendEmail({ templateId: PRIVATE_CHANNEL_REQUEST_APPROVED_TEMPLATE, - to: recipient.email, + to: [{ email: recipient.email }], dynamic_template_data: { subject, preheader, @@ -40,8 +42,8 @@ export default (job: Job) => { }, }); } catch (err) { - debug('❌ Error in job:\n'); - debug(err); - Raven.captureException(err); + console.error('❌ Error in job:\n'); + console.error(err); + return Raven.captureException(err); } }; diff --git a/hermes/queues/send-private-channel-request-sent-email.js b/hermes/queues/send-private-channel-request-sent-email.js index 3aa99f943b..96508ff5ad 100644 --- a/hermes/queues/send-private-channel-request-sent-email.js +++ b/hermes/queues/send-private-channel-request-sent-email.js @@ -13,7 +13,9 @@ import type { SendPrivateChannelRequestEmailJobData, } from 'shared/bull/types'; -export default (job: Job) => { +export default ( + job: Job +): Promise => { debug(`\nnew job: ${job.id}`); const { user, recipient, channel, community } = job.data; debug(`\nsending notification to private channel owner: ${recipient.email}`); @@ -27,7 +29,7 @@ export default (job: Job) => { try { return sendEmail({ templateId: PRIVATE_CHANNEL_REQUEST_SENT_TEMPLATE, - to: recipient.email, + to: [{ email: recipient.email }], dynamic_template_data: { subject, preheader, @@ -40,8 +42,8 @@ export default (job: Job) => { }, }); } catch (err) { - debug('❌ Error in job:\n'); - debug(err); - Raven.captureException(err); + console.error('❌ Error in job:\n'); + console.error(err); + return Raven.captureException(err); } }; diff --git a/hermes/queues/send-private-community-request-approved-email.js b/hermes/queues/send-private-community-request-approved-email.js index 31a931163d..68d678a897 100644 --- a/hermes/queues/send-private-community-request-approved-email.js +++ b/hermes/queues/send-private-community-request-approved-email.js @@ -13,7 +13,9 @@ import type { SendPrivateCommunityRequestApprovedEmailJobData, } from 'shared/bull/types'; -export default (job: Job) => { +export default ( + job: Job +): Promise => { debug(`\nnew job: ${job.id}`); const { recipient, community } = job.data; debug(`\nsending notification to user: ${recipient.email}`); @@ -28,7 +30,7 @@ export default (job: Job) => { try { return sendEmail({ templateId: PRIVATE_COMMUNITY_REQUEST_APPROVED_TEMPLATE, - to: recipient.email, + to: [{ email: recipient.email }], dynamic_template_data: { subject, preheader, @@ -39,8 +41,8 @@ export default (job: Job) => { }, }); } catch (err) { - debug('❌ Error in job:\n'); - debug(err); - Raven.captureException(err); + console.error('❌ Error in job:\n'); + console.error(err); + return Raven.captureException(err); } }; diff --git a/hermes/queues/send-private-community-request-sent-email.js b/hermes/queues/send-private-community-request-sent-email.js index 36d4444015..5211010f72 100644 --- a/hermes/queues/send-private-community-request-sent-email.js +++ b/hermes/queues/send-private-community-request-sent-email.js @@ -13,7 +13,9 @@ import type { SendPrivateCommunityRequestEmailJobData, } from 'shared/bull/types'; -export default (job: Job) => { +export default ( + job: Job +): Promise => { debug(`\nnew job: ${job.id}`); const { user, recipient, community } = job.data; debug( @@ -29,7 +31,7 @@ export default (job: Job) => { try { return sendEmail({ templateId: PRIVATE_COMMUNITY_REQUEST_SENT_TEMPLATE, - to: recipient.email, + to: [{ email: recipient.email }], dynamic_template_data: { subject, preheader, @@ -41,8 +43,8 @@ export default (job: Job) => { }, }); } catch (err) { - debug('❌ Error in job:\n'); - debug(err); - Raven.captureException(err); + console.error('❌ Error in job:\n'); + console.error(err); + return Raven.captureException(err); } }; diff --git a/hermes/queues/send-user-welcome-email.js b/hermes/queues/send-user-welcome-email.js index 52c567cfc8..4ef48068a0 100644 --- a/hermes/queues/send-user-welcome-email.js +++ b/hermes/queues/send-user-welcome-email.js @@ -1,11 +1,14 @@ +// @flow const debug = require('debug')('hermes:queue:send-user-welcome-email'); import sendEmail from '../send-email'; +import Raven from 'shared/raven'; +import type { Job, NewUserWelcomeEmailJobData } from 'shared/bull/types'; import { NEW_USER_WELCOME_TEMPLATE, SEND_NEW_USER_WELCOME_EMAIL, } from './constants'; -export default job => { +export default (job: Job): Promise => { debug(`\nnew job: ${job.id}`); const { user } = job.data; @@ -17,7 +20,7 @@ export default job => { try { return sendEmail({ templateId: NEW_USER_WELCOME_TEMPLATE, - to: user.email, + to: [{ email: user.email }], Tag: SEND_NEW_USER_WELCOME_EMAIL, dynamic_template_data: { user, @@ -25,8 +28,8 @@ export default job => { }, }); } catch (err) { - debug('❌ Error in job:\n'); - debug(err); - Raven.captureException(err); + console.error('❌ Error in job:\n'); + console.error(err); + return Raven.captureException(err); } }; diff --git a/hermes/queues/sendgrid-webhook-events.js b/hermes/queues/sendgrid-webhook-events.js index 071a000fb6..4c6bb7be17 100644 --- a/hermes/queues/sendgrid-webhook-events.js +++ b/hermes/queues/sendgrid-webhook-events.js @@ -5,28 +5,28 @@ import { getUserByEmail } from 'shared/db/queries/user'; import { deactivateUserEmailNotifications } from '../models/usersSettings'; import type { Job, SendGridWebhookEventJobData } from 'shared/bull/types'; -const processEvent = async (job: Job) => { +const processEvent = async ( + job: Job +): Promise => { const { event } = job.data; const user = await getUserByEmail(event.email); if (!user) { debug(`No user found with email ${event.email}`); - return; + throw new Error(`No user found with email ${event.email}`); } - return await deactivateUserEmailNotifications(user.id).catch(e => - console.error(e.message) - ); + return await deactivateUserEmailNotifications(user.id); }; -export default (job: Job) => { +export default (job: Job): Promise => { try { debug('Processing SendGrid webhook event'); return processEvent(job); } catch (err) { - debug('❌ Error in job:\n'); - debug(err); - Raven.captureException(err); + console.error('❌ Error in job:\n'); + console.error(err); + return Raven.captureException(err); } }; diff --git a/hermes/send-email.js b/hermes/send-email.js index 580df27e1f..c7f5917bf6 100644 --- a/hermes/send-email.js +++ b/hermes/send-email.js @@ -8,9 +8,14 @@ import { events } from 'shared/analytics'; import { trackQueue } from 'shared/bull/queues'; const { SENDGRID_API_KEY } = process.env; +type ToType = { + email: string, + name?: string, +}; + type Options = { templateId: string, - to: string, + to: Array, dynamic_template_data: Object, userId?: string, }; @@ -27,18 +32,24 @@ const defaultOptions = { }, }; -const sendEmail = (options: Options) => { - const { templateId, to, dynamic_template_data, userId } = options; +const sendEmail = (options: Options): Promise => { + let { templateId, to, dynamic_template_data, userId } = options; if (SENDGRID_API_KEY !== 'undefined') { debug( - `--Send LIVE email with templateId ${templateId}--\nto: ${to}\ndynamic_template_data: ${stringify( + `--Send LIVE email with templateId ${templateId}--\nto: ${to + .map(t => t.email) + .join(', ')}\ndynamic_template_data: ${stringify( dynamic_template_data )}` ); sg.setApiKey(SENDGRID_API_KEY); } else { - debug(`--Send TEST email with templateId ${templateId}--\n--to: ${to}--`); + debug( + `--Send TEST email with templateId ${templateId}--\n--to: ${to + .map(t => t.email) + .join(', ')}--` + ); // eslint-disable-next-line debug( @@ -50,7 +61,7 @@ const sendEmail = (options: Options) => { }) ); - return; + return Promise.resolve(); } if (userId) { @@ -69,35 +80,22 @@ const sendEmail = (options: Options) => { }); } - return; + return Promise.resolve(); } // qq.com email addresses are isp blocked, which raises our error rate // on sendgrid. prevent sending these emails at all - if (to.substr(to.length - 7) === '@qq.com') { - return; - } + to = to.filter(toType => { + return toType.email.substr(to.length - 7) !== '@qq.com'; + }); - // $FlowFixMe - return new Promise((res, rej) => { - sg.send( - { - ...defaultOptions, - templateId, - to, - dynamic_template_data, - }, - async (res, err) => { - if (err) { - console.error('Error sending email:'); - console.error(err); - return rej(err); - } + if (!to || to.length === 0) return Promise.resolve(); - res(); - debug(`email to ${to} sent successfully`); - } - ); + return sg.send({ + ...defaultOptions, + templateId, + to, + dynamic_template_data, }); }; diff --git a/hermes/yarn.lock b/hermes/yarn.lock index 3ff32cb60f..7e2a4b9500 100644 --- a/hermes/yarn.lock +++ b/hermes/yarn.lock @@ -457,7 +457,7 @@ immutable@~3.7.4: resolved "https://registry.yarnpkg.com/immutable/-/immutable-3.7.6.tgz#13b4d3cb12befa15482a26fe1b2ebae640071e4b" integrity sha1-E7TTyxK++hVIKib+Gy665kAHHks= -ioredis@^3.1.4: +ioredis@3.2.2, ioredis@^3.1.4: version "3.2.2" resolved "https://registry.yarnpkg.com/ioredis/-/ioredis-3.2.2.tgz#b7d5ff3afd77bb9718bb2821329b894b9a44c00b" integrity sha512-g+ShTQYLsCcOUkNOK6CCEZbj3aRDVPw3WOwXk+LxlUKvuS9ujEqP2MppBHyRVYrNNFW/vcPaTBUZ2ctGNSiOCA== diff --git a/mercury/package.json b/mercury/package.json index ec0c718afc..2b33ceda30 100644 --- a/mercury/package.json +++ b/mercury/package.json @@ -5,10 +5,11 @@ "dependencies": { "bull": "^3.5.2", "debug": "^4.1.0", + "ioredis": "3.2.2", "now-env": "^3.1.0", "raven": "^2.6.4", "redis-tag-cache": "^1.2.1", - "rethinkdbdash": "^2.3.29", + "rethinkdbdash": "^2.3.31", "rethinkhaberdashery": "^2.3.32", "source-map-support": "^0.4.18", "toobusy-js": "^0.5.1" diff --git a/mercury/queues/processReputationEvent.js b/mercury/queues/processReputationEvent.js index f1e9f4c104..b317b0bd69 100644 --- a/mercury/queues/processReputationEvent.js +++ b/mercury/queues/processReputationEvent.js @@ -68,8 +68,8 @@ export default async (job: Job) => { } } } catch (err) { - debug('❌ Error in job:\n'); - debug(err); + console.error('❌ Error in job:\n'); + console.error(err); Raven.captureException(err); } }; diff --git a/mercury/yarn.lock b/mercury/yarn.lock index 23007f176e..f000be25a0 100644 --- a/mercury/yarn.lock +++ b/mercury/yarn.lock @@ -91,7 +91,7 @@ flexbuffer@0.0.6: resolved "https://registry.yarnpkg.com/flexbuffer/-/flexbuffer-0.0.6.tgz#039fdf23f8823e440c38f3277e6fef1174215b30" integrity sha1-A5/fI/iCPkQMOPMnfm/vEXQhWzA= -ioredis@^3.1.4: +ioredis@3.2.2, ioredis@^3.1.4: version "3.2.2" resolved "https://registry.yarnpkg.com/ioredis/-/ioredis-3.2.2.tgz#b7d5ff3afd77bb9718bb2821329b894b9a44c00b" integrity sha512-g+ShTQYLsCcOUkNOK6CCEZbj3aRDVPw3WOwXk+LxlUKvuS9ujEqP2MppBHyRVYrNNFW/vcPaTBUZ2ctGNSiOCA== @@ -319,7 +319,7 @@ redis-tag-cache@^1.2.1: dependencies: ioredis "^4.0.0" -rethinkdbdash@^2.3.29: +rethinkdbdash@^2.3.31: version "2.3.31" resolved "https://registry.yarnpkg.com/rethinkdbdash/-/rethinkdbdash-2.3.31.tgz#fe2f73d1fa6e6f5d96d8e881292013cf6dca914d" integrity sha512-6nXrKFjdg2Ug0YpdmPWSvyD/2EisHnFNt4FWZ74dcXGK48ievSv+cNFTmVv+KjLi6I9CCf6w4CKZ6yCYTfMfdQ== diff --git a/now.json b/now.json index fd9f1e9328..99007661c7 100644 --- a/now.json +++ b/now.json @@ -43,7 +43,6 @@ "SESSION_COOKIE_SECRET": "@session-cookie-secret", "ALGOLIA_APP_ID": "@algolia-app-id", "ALGOLIA_API_SECRET": "@algolia-api-secret", - "APOLLO_ENGINE_API_KEY": "@apollo-engine-api-key", "API_TOKEN_SECRET": "@api-token-secret", "SENTRY_DSN_CLIENT": "@sentry-dsn-client", "SENTRY_DSN_SERVER": "@sentry-dsn-server", diff --git a/package.json b/package.json index f0621f7bb0..a291fce628 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "Spectrum", - "version": "2.5.0", + "version": "2.5.1", "license": "BSD-3-Clause", "devDependencies": { "@babel/preset-flow": "^7.0.0", @@ -53,24 +53,23 @@ "algoliasearch": "^3.30.0", "amplitude": "^3.5.0", "amplitude-js": "^4.4.0", - "apollo-cache-inmemory": "^1.3.5", - "apollo-client": "^2.4.2", - "apollo-engine": "1.x", - "apollo-link": "^1.2.3", - "apollo-link-http": "^1.5.5", - "apollo-link-retry": "^2.2.5", - "apollo-link-schema": "^1.1.1", - "apollo-link-ws": "^1.0.9", - "apollo-server-express": "^2.0.4", - "apollo-upload-client": "^8.1.0", - "apollo-upload-server": "^5.0.0", - "apollo-utilities": "^1.0.21", + "apollo-cache-inmemory": "^1.3.11", + "apollo-client": "^2.4.7", + "apollo-link": "^1.2.4", + "apollo-link-http": "^1.5.7", + "apollo-link-retry": "^2.2.6", + "apollo-link-schema": "^1.1.2", + "apollo-link-ws": "^1.0.10", + "apollo-server-express": "^2.2.6", + "apollo-upload-client": "^9.1.0", + "apollo-upload-server": "^7.1.0", + "apollo-utilities": "^1.0.26", "aws-sdk": "2.336.0", "axios": "^0.17.1", "b2a": "^1.0.10", "bad-words": "^1.6.4", "body-parser": "^1.18.3", - "bull": "3.4.8", + "bull": "^3.5.2", "casual": "^1.5.19", "common-tags": "^1.8.0", "cookie-parser": "^1.4.3", @@ -79,7 +78,7 @@ "cryptr": "^3.0.0", "css.escape": "^1.5.1", "cypress": "^3.1.3", - "dataloader": "^1.3.0", + "dataloader": "^1.4.0", "debounce": "^1.2.0", "debug": "^4.1.0", "decode-uri-component": "^0.2.0", @@ -111,7 +110,7 @@ "graphql-depth-limit": "^1.1.0", "graphql-log": "0.1.3", "graphql-tag": "^2.10.0", - "graphql-tools": "^3.0.5", + "graphql-tools": "^4.0.3", "helmet": "^3.14.0", "highlight.js": "^9.13.1", "history": "^4.6.1", @@ -121,7 +120,7 @@ "hsts": "^2.1.0", "idx": "^2.4.0", "imgix-core-js": "^1.0.6", - "ioredis": "^4.2.0", + "ioredis": "3.2.2", "is-electron": "^2.1.0", "isomorphic-fetch": "^2.2.1", "jest": "22.4.3", @@ -147,7 +146,7 @@ "raf": "^3.4.0", "raven": "^2.6.4", "react": "16.4.2", - "react-apollo": "^2.2.4", + "react-apollo": "^2.3.2", "react-app-rewire-styled-components": "^3.0.0", "react-app-rewired": "^1.6.2", "react-clipboard.js": "^2.0.1", @@ -157,7 +156,7 @@ "react-image": "^1.5.1", "react-infinite-scroller-with-scroll-element": "2.0.2", "react-loadable": "^5.5.0", - "react-modal": "^3.6.1", + "react-modal": "^3.7.1", "react-popper": "^1.0.2", "react-redux": "^5.0.2", "react-router": "^4.0.0-beta.7", @@ -188,7 +187,7 @@ "string-similarity": "^2.0.0", "striptags": "2.x", "styled-components": "^3.4.10", - "subscriptions-transport-ws": "0.9.x", + "subscriptions-transport-ws": "^0.9.15", "textversionjs": "^1.1.3", "then-queue": "^1.3.0", "toobusy-js": "^0.5.1", diff --git a/shared/bull/create-queue.js b/shared/bull/create-queue.js index 5e88d9121a..eea7fdc048 100644 --- a/shared/bull/create-queue.js +++ b/shared/bull/create-queue.js @@ -27,21 +27,17 @@ function createQueue(name: string, queueOptions?: Object = {}) { // NOTE(@mxstbr): This logs a "Possible event emitter memory leak" warning, // but that's a bug upstream in bull. Reference: OptimalBits/bull#503 queue.on('stalled', job => { - const message = `Job#${job.id} stalled, processing again.`; - if (process.env.NODE_ENV !== 'production') { - console.error(message); - return; - } - // In production log stalled job to Sentry - Raven.captureException(new Error(message)); + console.error(`Job#${job.id} stalled, processing again.`); + console.error({ job }); + }); + queue.on('error', err => { + console.error('Job errored'); + console.error({ err }); + Raven.captureException(new Error(err)); }); queue.on('failed', (job, err) => { - if (process.env.NODE_ENV !== 'production') { - console.error(`Job#${job.id} failed, with following reason`); - console.error(err); - return; - } - // In production log failed job to Sentry + console.error(`Job#${job.id} failed, with following reason`); + console.error({ job, err }); Raven.captureException(err); }); return queue; diff --git a/shared/bull/types.js b/shared/bull/types.js index 1a80927a28..287bdff3df 100644 --- a/shared/bull/types.js +++ b/shared/bull/types.js @@ -326,7 +326,7 @@ export type AdminToxicMessageJobData = { message: DBMessage }; export type AdminToxicThreadJobData = { thread: DBThread }; export type AdminSlackImportJobData = { - thisUser: DBUser, + user: DBUser, community: DBCommunity, invitedCount: number, teamName: string, @@ -442,6 +442,18 @@ export type SendGridWebhookEventJobData = { }, }; +export type AdminToxicContentEmailJobData = { + type: string, + text: string, + user: DBUser, + thread: DBThread, + community: DBCommunity, + channel: DBChannel, + toxicityConfidence: { + perspectiveScore: number, + }, +}; + export type Queues = { // athena sendThreadNotificationQueue: BullQueue, @@ -499,7 +511,7 @@ export type Queues = { _adminProcessSlackImportQueue: BullQueue, _adminProcessUserReportedQueue: BullQueue, // TODO: Properly type this - _adminSendToxicContentEmailQueue: BullQueue, + _adminSendToxicContentEmailQueue: BullQueue, _adminProcessUserSpammingThreadsQueue: BullQueue, _adminSendActiveCommunityReportEmailQueue: BullQueue, diff --git a/shared/changefeed-utils/index.js b/shared/changefeed-utils/index.js index b9e647e63b..49e5b0c5a7 100644 --- a/shared/changefeed-utils/index.js +++ b/shared/changefeed-utils/index.js @@ -63,7 +63,7 @@ export const createChangefeed = ( }, { changefeedName: name, - attemptDelay: 60000, + attemptDelay: 10000, maxAttempts: Infinity, logger: { // Ignore log and info logs in production diff --git a/shared/db/db.js b/shared/db/db.js index bcfe99ebac..1fc5dfbd99 100644 --- a/shared/db/db.js +++ b/shared/db/db.js @@ -13,6 +13,7 @@ const DEFAULT_CONFIG = { max: 1000, // Maximum number of connections, default is 1000 buffer: 50, // Minimum number of connections open at any given moment, default is 50 timeoutGb: 60 * 60 * 1000, // How long should an unused connection stick around, default is an hour, this is a minute + timeout: 30, // The number of seconds for a connection to be opened, default 20 }; let ca; diff --git a/shared/db/queries/user.js b/shared/db/queries/user.js index eaa1f854de..8c76efc79d 100644 --- a/shared/db/queries/user.js +++ b/shared/db/queries/user.js @@ -533,26 +533,23 @@ export const editUser = createWriteQuery( } ); -export const setUserOnline = createWriteQuery( - (id: string, isOnline: boolean) => ({ - query: db - .table('users') - .get(id) - .update( - { - isOnline, - lastSeen: new Date(), - }, - { returnChanges: 'always' } - ) - .run() - .then(res => { - const user = res.changes[0].new_val || res.changes[0].old_val; - return user; - }), - invalidateTags: () => [id], - }) -); +export const setUserOnline = async (id: string, isOnline: boolean) => { + return await db + .table('users') + .get(id) + .update( + { + isOnline, + lastSeen: new Date(), + }, + { returnChanges: 'always' } + ) + .run() + .then(res => { + const user = res.changes[0].new_val || res.changes[0].old_val; + return user; + }); +}; export const setUserPendingEmail = createWriteQuery( (userId: string, pendingEmail: string) => ({ diff --git a/src/components/avatar/style.js b/src/components/avatar/style.js index 3cb851b04c..76edcd5e9c 100644 --- a/src/components/avatar/style.js +++ b/src/components/avatar/style.js @@ -3,7 +3,7 @@ import theme from 'shared/theme'; import styled, { css } from 'styled-components'; import ReactImage from 'react-image'; import { zIndex } from '../globals'; -import Link from 'src/components/link'; +import { Link } from 'react-router-dom'; import { ProfileHeaderAction } from '../profile/style'; export const Container = styled.div` diff --git a/src/components/granularUserProfile/index.js b/src/components/granularUserProfile/index.js index 348f8602f4..9ea1a71ff3 100644 --- a/src/components/granularUserProfile/index.js +++ b/src/components/granularUserProfile/index.js @@ -5,7 +5,7 @@ import compose from 'recompose/compose'; import { connect } from 'react-redux'; import { UserHoverProfile } from 'src/components/hoverProfile'; import { UserAvatar } from 'src/components/avatar'; -import Link from 'src/components/link'; +import { Link } from 'react-router-dom'; import Reputation from 'src/components/reputation'; import Badge from 'src/components/badges'; import Icon from 'src/components/icons'; diff --git a/src/components/hoverProfile/channelProfile.js b/src/components/hoverProfile/channelProfile.js index f0de08a149..3d5c67816e 100644 --- a/src/components/hoverProfile/channelProfile.js +++ b/src/components/hoverProfile/channelProfile.js @@ -4,7 +4,7 @@ import compose from 'recompose/compose'; import { connect } from 'react-redux'; import { withRouter } from 'react-router'; import AvatarImage from 'src/components/avatar/image'; -import Link from 'src/components/link'; +import { Link } from 'react-router-dom'; import { Button, OutlineButton } from 'src/components/buttons'; import ToggleChannelMembership from 'src/components/toggleChannelMembership'; import renderTextWithLinks from 'src/helpers/render-text-with-markdown-links'; @@ -72,36 +72,35 @@ class HoverProfile extends Component { - {!isGlobalModerator && - !isGlobalOwner && ( - { - if (isChannelMember) { - return ( - - Joined - - ); - } else { - return ( - - ); - } - }} - /> - )} + {!isGlobalModerator && !isGlobalOwner && ( + { + if (isChannelMember) { + return ( + + Joined + + ); + } else { + return ( + + ); + } + }} + /> + )} {(isGlobalModerator || isGlobalOwner) && ( diff --git a/src/components/hoverProfile/communityProfile.js b/src/components/hoverProfile/communityProfile.js index 5f63e0af24..e77997b15d 100644 --- a/src/components/hoverProfile/communityProfile.js +++ b/src/components/hoverProfile/communityProfile.js @@ -4,7 +4,7 @@ import compose from 'recompose/compose'; import { connect } from 'react-redux'; import { withRouter } from 'react-router'; import AvatarImage from 'src/components/avatar/image'; -import Link from 'src/components/link'; +import { Link } from 'react-router-dom'; import { Button, OutlineButton } from 'src/components/buttons'; import ToggleCommunityMembership from 'src/components/toggleCommunityMembership'; import type { GetCommunityType } from 'shared/graphql/queries/community/getCommunity'; @@ -67,35 +67,34 @@ class HoverProfile extends Component { - {!isModerator && - !isOwner && ( - { - if (isMember) { - return ( - - Member - - ); - } else { - return ( - - ); - } - }} - /> - )} + {!isModerator && !isOwner && ( + { + if (isMember) { + return ( + + Member + + ); + } else { + return ( + + ); + } + }} + /> + )} {(isModerator || isOwner) && ( diff --git a/src/components/hoverProfile/style.js b/src/components/hoverProfile/style.js index 80d0ee7c11..94210e81e4 100644 --- a/src/components/hoverProfile/style.js +++ b/src/components/hoverProfile/style.js @@ -2,7 +2,7 @@ import theme from 'shared/theme'; import styled from 'styled-components'; import { zIndex } from 'src/components/globals'; -import Link from 'src/components/link'; +import { Link } from 'react-router-dom'; export const HoverWrapper = styled.div` position: absolute; diff --git a/src/components/hoverProfile/userProfile.js b/src/components/hoverProfile/userProfile.js index 64ab9a65f4..cab70cc456 100644 --- a/src/components/hoverProfile/userProfile.js +++ b/src/components/hoverProfile/userProfile.js @@ -4,7 +4,7 @@ import compose from 'recompose/compose'; import { connect } from 'react-redux'; import { withRouter } from 'react-router'; import AvatarImage from 'src/components/avatar/image'; -import Link from 'src/components/link'; +import { Link } from 'react-router-dom'; import Badge from 'src/components/badges'; import { Button } from 'src/components/buttons'; import ConditionalWrap from 'src/components/conditionalWrap'; diff --git a/src/components/link/index.js b/src/components/link/index.js deleted file mode 100644 index 960a34e372..0000000000 --- a/src/components/link/index.js +++ /dev/null @@ -1,5 +0,0 @@ -// @flow -// TODO(@mxstbr): Get rid of this file and replace all occurences with the import from react-router-dom -import { Link } from 'react-router-dom'; - -export default Link; diff --git a/src/components/listItems/channel/style.js b/src/components/listItems/channel/style.js index fa159f837b..2240f889a2 100644 --- a/src/components/listItems/channel/style.js +++ b/src/components/listItems/channel/style.js @@ -2,7 +2,7 @@ import theme from 'shared/theme'; import styled from 'styled-components'; import { Truncate } from 'src/components/globals'; -import Link from 'src/components/link'; +import { Link } from 'react-router-dom'; export const ChannelContainer = styled.div` display: flex; diff --git a/src/components/listItems/index.js b/src/components/listItems/index.js index 17b8027967..fc050d3967 100644 --- a/src/components/listItems/index.js +++ b/src/components/listItems/index.js @@ -1,6 +1,6 @@ // @flow import * as React from 'react'; -import Link from 'src/components/link'; +import { Link } from 'react-router-dom'; import Badge from 'src/components/badges'; import { UserAvatar, CommunityAvatar } from 'src/components/avatar'; import { CommunityHoverProfile } from 'src/components/hoverProfile'; @@ -44,12 +44,11 @@ export class CommunityListItem extends React.Component { {community.name} {/* greater than -1 because we want to pass the 0 to the component so it returns null */} - {typeof reputation === 'number' && - reputation > -1 && ( - - - - )} + {typeof reputation === 'number' && reputation > -1 && ( + + + + )} {children} @@ -93,17 +92,17 @@ export const UserListItem = ({ ? user.contextPermissions.reputation : 0 : user.reputation && typeof user.reputation === 'number' - ? user.reputation - : user.totalReputation && typeof user.totalReputation === 'number' - ? user.totalReputation - : 0; + ? user.reputation + : user.totalReputation && typeof user.totalReputation === 'number' + ? user.totalReputation + : 0; const role = user.contextPermissions && user.contextPermissions.isOwner ? 'Admin' : user.contextPermissions && user.contextPermissions.isModerator - ? 'Moderator' - : null; + ? 'Moderator' + : null; return ( diff --git a/src/components/listItems/style.js b/src/components/listItems/style.js index 3635f5e8bc..3a2126e622 100644 --- a/src/components/listItems/style.js +++ b/src/components/listItems/style.js @@ -1,6 +1,6 @@ import styled from 'styled-components'; import theme from 'shared/theme'; -import Link from 'src/components/link'; +import { Link } from 'react-router-dom'; import { Truncate, FlexCol, diff --git a/src/components/loading/style.js b/src/components/loading/style.js index 922bc07ba7..f319dba500 100644 --- a/src/components/loading/style.js +++ b/src/components/loading/style.js @@ -5,7 +5,7 @@ import styled, { keyframes } from 'styled-components'; import { Card } from '../card'; import { hexa, FlexCol, zIndex } from '../globals'; // $FlowFixMe -import Link from 'src/components/link'; +import { Link } from 'react-router-dom'; const containerFadeIn = keyframes` 0%{ diff --git a/src/components/message/authorByline.js b/src/components/message/authorByline.js index 71dc1b7725..b978c1b38e 100644 --- a/src/components/message/authorByline.js +++ b/src/components/message/authorByline.js @@ -3,7 +3,7 @@ import * as React from 'react'; import { convertTimestampToTime } from 'shared/time-formatting'; import ConditionalWrap from 'src/components/conditionalWrap'; import { UserHoverProfile } from 'src/components/hoverProfile'; -import Link from 'src/components/link'; +import { Link } from 'react-router-dom'; import { MessagesContext } from 'src/components/messageGroup'; import Badge from '../badges'; import { diff --git a/src/components/message/style.js b/src/components/message/style.js index 2f10a35ac8..5d9bfd19ce 100644 --- a/src/components/message/style.js +++ b/src/components/message/style.js @@ -1,7 +1,7 @@ // @flow import theme from 'shared/theme'; import styled, { css } from 'styled-components'; -import Link from 'src/components/link'; +import { Link } from 'react-router-dom'; import { SvgWrapper } from '../icons'; import { Truncate, monoStack, hexa, Tooltip } from 'src/components/globals'; import { Wrapper as EditorWrapper } from '../rich-text-editor/style'; @@ -136,8 +136,8 @@ export const OuterMessageContainer = styled.div` props.selected ? props.theme.special.wash : props.error - ? props.theme.warn.wash - : props.theme.bg.default}; + ? props.theme.warn.wash + : props.theme.bg.default}; ${props => props.selected && @@ -158,8 +158,8 @@ export const OuterMessageContainer = styled.div` props.selected ? props.theme.special.wash : props.error - ? props.theme.warn.border - : props.theme.bg.wash}; + ? props.theme.warn.border + : props.theme.bg.wash}; ${ActionsContainer} { opacity: 1; diff --git a/src/components/modals/ChatInputLoginModal/index.js b/src/components/modals/ChatInputLoginModal/index.js index 67e3454fb8..c01b4e7a52 100644 --- a/src/components/modals/ChatInputLoginModal/index.js +++ b/src/components/modals/ChatInputLoginModal/index.js @@ -3,7 +3,7 @@ import * as React from 'react'; import { connect } from 'react-redux'; import Modal from 'react-modal'; import compose from 'recompose/compose'; -import Link from 'src/components/link'; +import { Link } from 'react-router-dom'; import { closeModal } from 'src/actions/modals'; import ModalContainer from '../modalContainer'; import { modalStyles } from '../styles'; diff --git a/src/components/profile/community.js b/src/components/profile/community.js index ff272333cc..f3091c7ce2 100644 --- a/src/components/profile/community.js +++ b/src/components/profile/community.js @@ -2,7 +2,7 @@ import * as React from 'react'; import Card from '../card'; import compose from 'recompose/compose'; -import Link from 'src/components/link'; +import { Link } from 'react-router-dom'; import { connect } from 'react-redux'; import addProtocolToString from 'shared/normalize-url'; import { CLIENT_URL } from 'src/api/constants'; diff --git a/src/components/profile/coverPhoto.js b/src/components/profile/coverPhoto.js index 701d79ca42..23c03dd791 100644 --- a/src/components/profile/coverPhoto.js +++ b/src/components/profile/coverPhoto.js @@ -1,7 +1,7 @@ import React from 'react'; import theme from 'shared/theme'; import styled from 'styled-components'; -import Link from 'src/components/link'; +import { Link } from 'react-router-dom'; import { ProfileHeaderAction } from './style'; const PhotoContainer = styled.div` diff --git a/src/components/profile/style.js b/src/components/profile/style.js index e52d182015..b8e46399d4 100644 --- a/src/components/profile/style.js +++ b/src/components/profile/style.js @@ -1,7 +1,7 @@ // @flow import theme from 'shared/theme'; import styled from 'styled-components'; -import Link from 'src/components/link'; +import { Link } from 'react-router-dom'; import { FlexRow, FlexCol, diff --git a/src/components/profile/thread.js b/src/components/profile/thread.js index f15b086934..37fd2eb216 100644 --- a/src/components/profile/thread.js +++ b/src/components/profile/thread.js @@ -2,7 +2,7 @@ import * as React from 'react'; import { withRouter } from 'react-router'; import compose from 'recompose/compose'; -import Link from 'src/components/link'; +import { Link } from 'react-router-dom'; import { connect } from 'react-redux'; import { ThreadListItem } from '../listItems'; import { ThreadProfileCard } from './style'; diff --git a/src/components/profile/user.js b/src/components/profile/user.js index b056e5b7aa..4b4e1b02ab 100644 --- a/src/components/profile/user.js +++ b/src/components/profile/user.js @@ -1,6 +1,6 @@ // @flow import React from 'react'; -import Link from 'src/components/link'; +import { Link } from 'react-router-dom'; import Card from 'src/components/card'; import { connect } from 'react-redux'; import { withRouter } from 'react-router'; diff --git a/src/components/rich-text-editor/style.js b/src/components/rich-text-editor/style.js index e69ba88c83..64d338edc3 100644 --- a/src/components/rich-text-editor/style.js +++ b/src/components/rich-text-editor/style.js @@ -4,7 +4,7 @@ import compose from 'recompose/compose'; import React from 'react'; import { connect } from 'react-redux'; import styled, { css } from 'styled-components'; -import Link from 'src/components/link'; +import { Link } from 'react-router-dom'; import { Transition, zIndex } from 'src/components/globals'; import { UserHoverProfile } from 'src/components/hoverProfile'; import type { Node } from 'react'; diff --git a/src/components/settingsViews/header.js b/src/components/settingsViews/header.js index f5f8200956..16d4c25e25 100644 --- a/src/components/settingsViews/header.js +++ b/src/components/settingsViews/header.js @@ -1,6 +1,6 @@ // @flow import * as React from 'react'; -import Link from 'src/components/link'; +import { Link } from 'react-router-dom'; import { StyledHeader, Heading, Subheading, HeaderText } from './style'; import { UserAvatar, CommunityAvatar } from '../avatar'; @@ -22,23 +22,21 @@ class Header extends React.Component { const { avatar, subheading, heading } = this.props; return ( - {avatar && - avatar.community && ( - - )} - {avatar && - avatar.user && ( - - )} + {avatar && avatar.community && ( + + )} + {avatar && avatar.user && ( + + )} {subheading.label} diff --git a/src/components/settingsViews/subnav.js b/src/components/settingsViews/subnav.js index 92fdfc194b..12e2821dc9 100644 --- a/src/components/settingsViews/subnav.js +++ b/src/components/settingsViews/subnav.js @@ -1,6 +1,6 @@ // @flow import * as React from 'react'; -import Link from 'src/components/link'; +import { Link } from 'react-router-dom'; import { StyledSubnav, SubnavList, SubnavListItem } from './style'; type SubnavItem = { diff --git a/src/components/threadFeed/index.js b/src/components/threadFeed/index.js index 087526bac2..994627e227 100644 --- a/src/components/threadFeed/index.js +++ b/src/components/threadFeed/index.js @@ -7,7 +7,7 @@ import compose from 'recompose/compose'; import InfiniteList from 'src/components/infiniteScroll'; import { deduplicateChildren } from 'src/components/infiniteScroll/deduplicateChildren'; import { connect } from 'react-redux'; -import Link from 'src/components/link'; +import { Link } from 'react-router-dom'; import Icon from 'src/components/icons'; import InboxThread from 'src/views/dashboard/components/inboxThread'; import { NullCard } from '../upsell'; diff --git a/src/components/threadFeedCard/style.js b/src/components/threadFeedCard/style.js index ac5eb99ccf..4711fcb978 100644 --- a/src/components/threadFeedCard/style.js +++ b/src/components/threadFeedCard/style.js @@ -1,6 +1,6 @@ import styled from 'styled-components'; import theme from 'shared/theme'; -import Link from 'src/components/link'; +import { Link } from 'react-router-dom'; import { FlexCol, FlexRow, Transition, Gradient, zIndex } from '../globals'; export const StyledThreadFeedCard = styled.div` diff --git a/src/components/upsell/index.js b/src/components/upsell/index.js index 6e338244cd..c73a8405d5 100644 --- a/src/components/upsell/index.js +++ b/src/components/upsell/index.js @@ -1,6 +1,6 @@ // @flow import * as React from 'react'; -import Link from 'src/components/link'; +import { Link } from 'react-router-dom'; import Icon from 'src/components/icons'; import { storeItem } from 'src/helpers/localStorage'; import ToggleCommunityMembership from 'src/components/toggleCommunityMembership'; diff --git a/src/components/upsell/requestToJoinChannel.js b/src/components/upsell/requestToJoinChannel.js index 711c2b9b49..4acc5febb1 100644 --- a/src/components/upsell/requestToJoinChannel.js +++ b/src/components/upsell/requestToJoinChannel.js @@ -2,7 +2,7 @@ import React, { Component } from 'react'; import compose from 'recompose/compose'; import { connect } from 'react-redux'; -import Link from 'src/components/link'; +import { Link } from 'react-router-dom'; import toggleChannelSubscriptionMutation from 'shared/graphql/mutations/channel/toggleChannelSubscription'; import type { ToggleChannelSubscriptionType } from 'shared/graphql/mutations/channel/toggleChannelSubscription'; import { addToastWithTimeout } from '../../actions/toasts'; @@ -119,6 +119,7 @@ class RequestToJoinChannel extends Component { } } -export default compose(connect(), toggleChannelSubscriptionMutation)( - RequestToJoinChannel -); +export default compose( + connect(), + toggleChannelSubscriptionMutation +)(RequestToJoinChannel); diff --git a/src/helpers/notifications.js b/src/helpers/notifications.js index 4f1c3bbe3e..1941fdd3fc 100644 --- a/src/helpers/notifications.js +++ b/src/helpers/notifications.js @@ -1,6 +1,6 @@ import React from 'react'; //$FlowFixMe -import Link from 'src/components/link'; +import { Link } from 'react-router-dom'; import Icon from '../components/icons'; import { HorizontalRuleWithIcon } from '../components/globals'; @@ -51,7 +51,8 @@ export const constructMessage = notification => { }} > thread - : + + : ); default: diff --git a/src/views/channel/components/pendingUsersNotification.js b/src/views/channel/components/pendingUsersNotification.js index c1362a4365..b719ac9ecb 100644 --- a/src/views/channel/components/pendingUsersNotification.js +++ b/src/views/channel/components/pendingUsersNotification.js @@ -1,6 +1,6 @@ // @flow import React from 'react'; -import Link from 'src/components/link'; +import { Link } from 'react-router-dom'; import compose from 'recompose/compose'; import { displayLoadingCard } from '../../../components/loading'; import getPendingUsersQuery from 'shared/graphql/queries/channel/getChannelPendingUsers'; diff --git a/src/views/channel/index.js b/src/views/channel/index.js index 9fcce19d1f..a1a59e80be 100644 --- a/src/views/channel/index.js +++ b/src/views/channel/index.js @@ -10,7 +10,7 @@ import Head from 'src/components/head'; import AppViewWrapper from 'src/components/appViewWrapper'; import viewNetworkHandler from 'src/components/viewNetworkHandler'; import ViewError from 'src/components/viewError'; -import Link from 'src/components/link'; +import { Link } from 'react-router-dom'; import ThreadFeed from 'src/components/threadFeed'; import PendingUsersNotification from './components/pendingUsersNotification'; import NotificationsToggle from './components/notificationsToggle'; diff --git a/src/views/channelSettings/components/editForm.js b/src/views/channelSettings/components/editForm.js index 6e2e981f49..4cd735d057 100644 --- a/src/views/channelSettings/components/editForm.js +++ b/src/views/channelSettings/components/editForm.js @@ -3,7 +3,7 @@ import * as React from 'react'; import compose from 'recompose/compose'; import { connect } from 'react-redux'; import { withRouter } from 'react-router'; -import Link from 'src/components/link'; +import { Link } from 'react-router-dom'; import editChannelMutation from 'shared/graphql/mutations/channel/editChannel'; import type { EditChannelType } from 'shared/graphql/mutations/channel/editChannel'; import type { GetChannelType } from 'shared/graphql/queries/channel/getChannel'; @@ -236,21 +236,19 @@ class ChannelWithData extends React.Component { Anyone on Spectrum can join this channel, post threads and messages, and will be able to see other members. If you want to create private channels,{' '} - get in touch - . + get in touch. )} {// if the user is moving from private to public - this.props.channel.isPrivate && - !isPrivate && ( - - When a private channel is made public all pending users will - be added as members of the channel. Blocked users will remain - blocked from viewing all content in this channel but in the - future any new person will be able to join. - - )} + this.props.channel.isPrivate && !isPrivate && ( + + When a private channel is made public all pending users will be + added as members of the channel. Blocked users will remain + blocked from viewing all content in this channel but in the + future any new person will be able to join. + + )} - - - + isFocused && searchString && ( + + + {searchResults.length > 0 && + !searchIsLoading && + searchResults.map(community => { + return ( + + + + + + + {community.name} + + {community.metaData && ( + + {community.metaData.members.toLocaleString()}{' '} + members + + )} + + + - )} - - {searchIsLoading && - isFocused && ( - - - -

Searching for “{searchString}”

-
-
-
- )} -
-
- )} + ); + })} + + {searchResults.length === 0 && !searchIsLoading && isFocused && ( + + + +

No communities found matching “{searchString}”

+ + + +
+
+
+ )} + + {searchIsLoading && isFocused && ( + + + +

Searching for “{searchString}”

+
+
+
+ )} + + + )} ); } diff --git a/src/views/explore/style.js b/src/views/explore/style.js index 0ea3ef9bdc..b83cb24eb7 100644 --- a/src/views/explore/style.js +++ b/src/views/explore/style.js @@ -3,7 +3,7 @@ import theme from 'shared/theme'; // $FlowFixMe import styled from 'styled-components'; // $FlowFixMe -import Link from 'src/components/link'; +import { Link } from 'react-router-dom'; import { FlexCol, FlexRow, diff --git a/src/views/login/index.js b/src/views/login/index.js index c61098b2d4..66a78de5f0 100644 --- a/src/views/login/index.js +++ b/src/views/login/index.js @@ -2,7 +2,7 @@ import * as React from 'react'; import { withRouter } from 'react-router'; import compose from 'recompose/compose'; -import Link from 'src/components/link'; +import { Link } from 'react-router-dom'; import Icon from 'src/components/icons'; import FullscreenView from 'src/components/fullscreenView'; import LoginButtonSet from 'src/components/loginButtonSet'; diff --git a/src/views/navbar/components/notificationDropdown.js b/src/views/navbar/components/notificationDropdown.js index 8ffeb481d9..62b165ce65 100644 --- a/src/views/navbar/components/notificationDropdown.js +++ b/src/views/navbar/components/notificationDropdown.js @@ -5,7 +5,7 @@ import compose from 'recompose/compose'; // $FlowFixMe import { withRouter } from 'react-router'; // $FlowFixMe -import Link from 'src/components/link'; +import { Link } from 'react-router-dom'; import Icon from '../../../components/icons'; import Dropdown from '../../../components/dropdown'; import { Loading } from '../../../components/loading'; @@ -88,17 +88,16 @@ const NotificationDropdownPure = props => { } /> - {rawNotifications && - rawNotifications.length > 0 && ( - - history.push('/notifications')} - > - View all - - - )} + {rawNotifications && rawNotifications.length > 0 && ( + + history.push('/notifications')} + > + View all + + + )} ); }; diff --git a/src/views/navbar/components/profileDropdown.js b/src/views/navbar/components/profileDropdown.js index e45edf3cc5..92249514e6 100644 --- a/src/views/navbar/components/profileDropdown.js +++ b/src/views/navbar/components/profileDropdown.js @@ -3,7 +3,7 @@ import theme from 'shared/theme'; import React from 'react'; import styled from 'styled-components'; import { connect } from 'react-redux'; -import Link from 'src/components/link'; +import { Link } from 'react-router-dom'; import Dropdown from 'src/components/dropdown'; import { SERVER_URL } from 'src/api/constants'; import type { UserInfoType } from 'shared/graphql/fragments/user/userInfo'; @@ -74,15 +74,13 @@ class ProfileDropdown extends React.Component { )} - {didMount && - isMac() && - !isDesktopApp() && ( - - - Desktop App - - - )} + {didMount && isMac() && !isDesktopApp() && ( + + + Desktop App + + + )} diff --git a/src/views/navbar/style.js b/src/views/navbar/style.js index 8e476d4397..09b7edd44c 100644 --- a/src/views/navbar/style.js +++ b/src/views/navbar/style.js @@ -1,7 +1,7 @@ // @flow import theme from 'shared/theme'; import styled, { css } from 'styled-components'; -import Link from 'src/components/link'; +import { Link } from 'react-router-dom'; import { Transition, FlexRow, hexa, zIndex } from 'src/components/globals'; import { UserAvatar } from 'src/components/avatar'; import { isDesktopApp } from 'src/helpers/desktop-app-utils'; diff --git a/src/views/newCommunity/components/createCommunityForm/index.js b/src/views/newCommunity/components/createCommunityForm/index.js index 9651425bc9..3306455cc1 100644 --- a/src/views/newCommunity/components/createCommunityForm/index.js +++ b/src/views/newCommunity/components/createCommunityForm/index.js @@ -1,6 +1,6 @@ // @flow import * as React from 'react'; -import Link from 'src/components/link'; +import { Link } from 'react-router-dom'; import { connect } from 'react-redux'; import compose from 'recompose/compose'; import { withRouter } from 'react-router'; diff --git a/src/views/newUserOnboarding/components/communitySearch/index.js b/src/views/newUserOnboarding/components/communitySearch/index.js index 9d097bf586..3375f9499c 100644 --- a/src/views/newUserOnboarding/components/communitySearch/index.js +++ b/src/views/newUserOnboarding/components/communitySearch/index.js @@ -3,7 +3,7 @@ import * as React from 'react'; import { withApollo } from 'react-apollo'; import { withRouter } from 'react-router'; import compose from 'recompose/compose'; -import Link from 'src/components/link'; +import { Link } from 'react-router-dom'; import { connect } from 'react-redux'; import { Button, OutlineButton } from 'src/components/buttons'; import ToggleCommunityMembership from 'src/components/toggleCommunityMembership'; @@ -282,84 +282,82 @@ class Search extends React.Component { {// user has typed in a search string - isFocused && - searchString && ( - - - {searchResults.length > 0 && - searchResults.map(community => { - return ( - - - - - {community.name} - {community.metaData && ( - - {community.metaData.members} members - - )} - - {community.description} - - - -
- {community.communityPermissions.isMember ? ( - ( - - Joined! - - )} - /> - ) : ( - ( - - )} - /> - )} -
-
- ); - })} - - {searchResults.length === 0 && - isFocused && ( - - -

No communities found matching “{searchString}”

- - - -
+ isFocused && searchString && ( + + + {searchResults.length > 0 && + searchResults.map(community => { + return ( + + + + + {community.name} + {community.metaData && ( + + {community.metaData.members} members + + )} + + {community.description} + + + +
+ {community.communityPermissions.isMember ? ( + ( + + Joined! + + )} + /> + ) : ( + ( + + )} + /> + )} +
- )} -
-
- )} + ); + })} + + {searchResults.length === 0 && isFocused && ( + + +

No communities found matching “{searchString}”

+ + + +
+
+ )} +
+
+ )} ); } diff --git a/src/views/notifications/components/newChannelNotification.js b/src/views/notifications/components/newChannelNotification.js index 9222f83d4d..d15927b3d6 100644 --- a/src/views/notifications/components/newChannelNotification.js +++ b/src/views/notifications/components/newChannelNotification.js @@ -5,7 +5,7 @@ import { getChannelById } from 'shared/graphql/queries/channel/getChannel'; import { displayLoadingCard } from '../../../components/loading'; import { parseNotificationDate, parseContext } from '../utils'; import Icon from '../../../components/icons'; -import Link from 'src/components/link'; +import { Link } from 'react-router-dom'; import { SegmentedNotificationCard, TextContent, diff --git a/src/views/notifications/utils.js b/src/views/notifications/utils.js index 85718e03b2..15fcb9be6b 100644 --- a/src/views/notifications/utils.js +++ b/src/views/notifications/utils.js @@ -1,5 +1,5 @@ import React from 'react'; -import Link from 'src/components/link'; +import { Link } from 'react-router-dom'; import { Query } from 'react-apollo'; import { timeDifferenceShort } from 'shared/time-difference'; import { getThreadByIdQuery } from 'shared/graphql/queries/thread/getThread'; diff --git a/src/views/pages/components/footer.js b/src/views/pages/components/footer.js index 9ca39da2f9..f0e7ee3594 100644 --- a/src/views/pages/components/footer.js +++ b/src/views/pages/components/footer.js @@ -9,7 +9,7 @@ import { Safety, SocialLinks, } from '../style'; -import Link from 'src/components/link'; +import { Link } from 'react-router-dom'; import { IconButton } from 'src/components/buttons'; import { Logo } from 'src/components/logo'; import { track, events } from 'src/helpers/analytics'; diff --git a/src/views/pages/components/nav.js b/src/views/pages/components/nav.js index 238ad0a052..946b2f1f53 100644 --- a/src/views/pages/components/nav.js +++ b/src/views/pages/components/nav.js @@ -3,7 +3,7 @@ import * as React from 'react'; import compose from 'recompose/compose'; import { connect } from 'react-redux'; import { Button, IconButton } from 'src/components/buttons'; -import Link from 'src/components/link'; +import { Link } from 'react-router-dom'; import Icon from 'src/components/icons'; import { Logo } from 'src/components/logo'; import { UserAvatar } from 'src/components/avatar'; diff --git a/src/views/pages/features/index.js b/src/views/pages/features/index.js index ce0a69cd82..dbc727bdf4 100644 --- a/src/views/pages/features/index.js +++ b/src/views/pages/features/index.js @@ -2,7 +2,7 @@ import * as React from 'react'; import Section from 'src/components/themedSection'; import PageFooter from '../components/footer'; -import Link from 'src/components/link'; +import { Link } from 'react-router-dom'; import Icon from 'src/components/icons'; import { Easy, Happy, Impact, Ideas } from 'src/components/illustrations'; import { Wrapper } from '../style'; diff --git a/src/views/pages/style.js b/src/views/pages/style.js index 21ec7f8e51..4dfca8897c 100644 --- a/src/views/pages/style.js +++ b/src/views/pages/style.js @@ -1,7 +1,7 @@ // @flow import theme from 'shared/theme'; import styled, { css } from 'styled-components'; -import Link from '../../components/link'; +import { Link } from 'react-router-dom'; import { Button } from '../../components/buttons'; import { H2, @@ -239,8 +239,8 @@ export const ButtonTwitter = styled(Button)` props.whitebg ? props.theme.social.twitter.default : props.preferred - ? '#fff' - : 'rgba(255,255,255,0.8)'}; + ? '#fff' + : 'rgba(255,255,255,0.8)'}; &:hover { color: ${props => @@ -255,8 +255,8 @@ export const ButtonFacebook = styled(Button)` props.whitebg ? props.theme.social.facebook.default : props.preferred - ? '#fff' - : 'rgba(255,255,255,0.8)'}; + ? '#fff' + : 'rgba(255,255,255,0.8)'}; &:hover { color: ${props => @@ -271,8 +271,8 @@ export const ButtonGoogle = styled(Button)` props.whitebg ? props.theme.social.google.default : props.preferred - ? '#fff' - : 'rgba(255,255,255,0.8)'}; + ? '#fff' + : 'rgba(255,255,255,0.8)'}; &:hover { color: ${props => @@ -530,8 +530,8 @@ export const Tab = styled(Link)` ? props.theme.text.reverse : props.theme.text.default : props.dark - ? props.theme.text.reverse - : props.theme.text.alt}; + ? props.theme.text.reverse + : props.theme.text.alt}; &:hover { color: ${props => @@ -540,8 +540,8 @@ export const Tab = styled(Link)` ? props.theme.text.reverse : props.theme.text.default : props.dark - ? props.theme.text.reverse - : props.theme.text.alt}; + ? props.theme.text.reverse + : props.theme.text.alt}; text-shadow: ${props => props.dark ? `0 0 32px ${hexa(props.theme.text.reverse, 0.75)}` : 'none'}; } diff --git a/src/views/pages/support/index.js b/src/views/pages/support/index.js index 89b868bd4e..c282655bcf 100644 --- a/src/views/pages/support/index.js +++ b/src/views/pages/support/index.js @@ -3,7 +3,7 @@ import * as React from 'react'; import PageFooter from '../components/footer'; import Section from 'src/components/themedSection'; import { Wrapper } from '../style'; -import Link from 'src/components/link'; +import { Link } from 'react-router-dom'; import { Button } from 'src/components/buttons'; import { FourUp, diff --git a/src/views/pages/view.js b/src/views/pages/view.js index d46923ee75..35fe92f752 100644 --- a/src/views/pages/view.js +++ b/src/views/pages/view.js @@ -2,7 +2,7 @@ import theme from 'shared/theme'; import React from 'react'; import styled from 'styled-components'; -import Link from 'src/components/link'; +import { Link } from 'react-router-dom'; import Icon from '../../components/icons'; import { UserAvatar } from '../../components/avatar'; import { diff --git a/src/views/thread/components/sidebar.js b/src/views/thread/components/sidebar.js index e5d24921fa..bfeca81cdd 100644 --- a/src/views/thread/components/sidebar.js +++ b/src/views/thread/components/sidebar.js @@ -9,7 +9,7 @@ import { LoadingListThreadDetail, } from 'src/components/loading'; import ToggleCommunityMembership from 'src/components/toggleCommunityMembership'; -import Link from 'src/components/link'; +import { Link } from 'react-router-dom'; import getCommunityThreads from 'shared/graphql/queries/community/getCommunityThreadConnection'; import { connect } from 'react-redux'; import compose from 'recompose/compose'; diff --git a/src/views/thread/components/threadCommunityBanner.js b/src/views/thread/components/threadCommunityBanner.js index 1fa98e9441..685bed1fbd 100644 --- a/src/views/thread/components/threadCommunityBanner.js +++ b/src/views/thread/components/threadCommunityBanner.js @@ -2,7 +2,7 @@ import * as React from 'react'; import { connect } from 'react-redux'; import compose from 'recompose/compose'; -import Link from 'src/components/link'; +import { Link } from 'react-router-dom'; import { CommunityHoverProfile, ChannelHoverProfile, diff --git a/src/views/thread/components/threadDetail.js b/src/views/thread/components/threadDetail.js index 7bc2bbff93..78f687f1be 100644 --- a/src/views/thread/components/threadDetail.js +++ b/src/views/thread/components/threadDetail.js @@ -1,7 +1,7 @@ // @flow import * as React from 'react'; import compose from 'recompose/compose'; -import Link from 'src/components/link'; +import { Link } from 'react-router-dom'; import { connect } from 'react-redux'; import { withRouter } from 'react-router'; import { timeDifference } from 'shared/time-difference'; diff --git a/src/views/thread/container.js b/src/views/thread/container.js index 94ac6683c0..6c396247b3 100644 --- a/src/views/thread/container.js +++ b/src/views/thread/container.js @@ -14,7 +14,7 @@ import Messages from './components/messages'; import Head from 'src/components/head'; import ChatInput from 'src/components/chatInput'; import ViewError from 'src/components/viewError'; -import Link from 'src/components/link'; +import { Link } from 'react-router-dom'; import viewNetworkHandler from 'src/components/viewNetworkHandler'; import { withCurrentUser } from 'src/components/withCurrentUser'; import { diff --git a/src/views/thread/style.js b/src/views/thread/style.js index bcc85fe865..c5be0235bd 100644 --- a/src/views/thread/style.js +++ b/src/views/thread/style.js @@ -1,7 +1,7 @@ // @flow import theme from 'shared/theme'; import styled, { css } from 'styled-components'; -import Link from 'src/components/link'; +import { Link } from 'react-router-dom'; import { Button } from 'src/components/buttons'; import Column from 'src/components/column'; import { diff --git a/src/views/threadSlider/index.js b/src/views/threadSlider/index.js index a717496a1a..5f34306523 100644 --- a/src/views/threadSlider/index.js +++ b/src/views/threadSlider/index.js @@ -5,7 +5,7 @@ import { closeThreadSlider, } from '../../actions/threadSlider'; import queryString from 'query-string'; -import Link from 'src/components/link'; +import { Link } from 'react-router-dom'; import Transition from 'react-transition-group/Transition'; import { Container, diff --git a/src/views/threadSlider/style.js b/src/views/threadSlider/style.js index 4aab8a5849..85da952b8b 100644 --- a/src/views/threadSlider/style.js +++ b/src/views/threadSlider/style.js @@ -3,7 +3,7 @@ import theme from 'shared/theme'; // $FlowFixMe import styled, { css } from 'styled-components'; // $FlowFixMe -import Link from 'src/components/link'; +import { Link } from 'react-router-dom'; import { zIndex } from '../../components/globals'; const animation = css` diff --git a/src/views/titlebar/index.js b/src/views/titlebar/index.js index 1dba6dc0b6..4f12ee5478 100644 --- a/src/views/titlebar/index.js +++ b/src/views/titlebar/index.js @@ -2,7 +2,7 @@ import React, { Component } from 'react'; import compose from 'recompose/compose'; import { withRouter } from 'react-router'; import queryString from 'query-string'; -import Link from 'src/components/link'; +import { Link } from 'react-router-dom'; import ThreadSearch from '../dashboard/components/threadSearch'; import Icon from '../../components/icons'; import { IconButton } from '../../components/buttons'; diff --git a/src/views/user/components/communityList.js b/src/views/user/components/communityList.js index 1efa814b2d..a22698d5eb 100644 --- a/src/views/user/components/communityList.js +++ b/src/views/user/components/communityList.js @@ -1,6 +1,6 @@ //@flow import * as React from 'react'; -import Link from 'src/components/link'; +import { Link } from 'react-router-dom'; import { connect } from 'react-redux'; import { withRouter } from 'react-router'; import compose from 'recompose/compose'; diff --git a/src/views/user/index.js b/src/views/user/index.js index a8b5dccc7e..a830b2c12d 100644 --- a/src/views/user/index.js +++ b/src/views/user/index.js @@ -4,7 +4,7 @@ import compose from 'recompose/compose'; import { type History, type Match } from 'react-router'; import { connect } from 'react-redux'; import generateMetaInfo from 'shared/generate-meta-info'; -import Link from 'src/components/link'; +import { Link } from 'react-router-dom'; import AppViewWrapper from 'src/components/appViewWrapper'; import Head from 'src/components/head'; import ThreadFeed from 'src/components/threadFeed'; diff --git a/src/views/userSettings/components/deleteAccountForm.js b/src/views/userSettings/components/deleteAccountForm.js index b41c2a26d5..d20fe062ad 100644 --- a/src/views/userSettings/components/deleteAccountForm.js +++ b/src/views/userSettings/components/deleteAccountForm.js @@ -18,7 +18,7 @@ import viewNetworkHandler from 'src/components/viewNetworkHandler'; import { Button, TextButton, OutlineButton } from 'src/components/buttons'; import deleteCurrentUserMutation from 'shared/graphql/mutations/user/deleteCurrentUser'; import { SERVER_URL } from 'src/api/constants'; -import Link from 'src/components/link'; +import { Link } from 'react-router-dom'; import { Loading } from 'src/components/loading'; import { track, events } from 'src/helpers/analytics'; import type { Dispatch } from 'redux'; diff --git a/src/views/userSettings/components/editForm.js b/src/views/userSettings/components/editForm.js index 073814bce3..780562c139 100644 --- a/src/views/userSettings/components/editForm.js +++ b/src/views/userSettings/components/editForm.js @@ -4,7 +4,7 @@ import { withRouter } from 'react-router'; import { withApollo } from 'react-apollo'; import compose from 'recompose/compose'; import { connect } from 'react-redux'; -import Link from 'src/components/link'; +import { Link } from 'react-router-dom'; import { Button } from 'src/components/buttons'; import Icon from 'src/components/icons'; import { SERVER_URL, CLIENT_URL } from 'src/api/constants'; diff --git a/vulcan/package.json b/vulcan/package.json index 498f2c30ef..2d884c8456 100644 --- a/vulcan/package.json +++ b/vulcan/package.json @@ -10,6 +10,7 @@ "draft-js": "^0.10.3", "emoji-regex": "^6.1.1", "faker": "^4.1.0", + "ioredis": "3.2.2", "lodash": "^4.17.11", "lodash.intersection": "^4.4.0", "node-env-file": "^0.1.8", @@ -17,7 +18,7 @@ "raven": "^2.6.4", "redis-tag-cache": "^1.2.1", "rethinkdb-changefeed-reconnect": "^0.3.2", - "rethinkdbdash": "^2.3.29", + "rethinkdbdash": "^2.3.31", "rethinkhaberdashery": "^2.3.32", "sanitize-filename": "^1.6.1", "source-map-support": "^0.4.15", diff --git a/vulcan/queues/index.js b/vulcan/queues/index.js index 4474549240..28cfeb4ddd 100644 --- a/vulcan/queues/index.js +++ b/vulcan/queues/index.js @@ -21,8 +21,8 @@ export default (job: Job) => { return queue[event](job); } catch (err) { - debug('❌ Error in job:\n'); - debug(err); + console.error('❌ Error in job:\n'); + console.error(err); Raven.captureException(err); } }; diff --git a/vulcan/yarn.lock b/vulcan/yarn.lock index 3f55075601..8d5a1e42b2 100644 --- a/vulcan/yarn.lock +++ b/vulcan/yarn.lock @@ -276,7 +276,7 @@ inherits@^2.0.1: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= -ioredis@^3.1.4: +ioredis@3.2.2, ioredis@^3.1.4: version "3.2.2" resolved "https://registry.yarnpkg.com/ioredis/-/ioredis-3.2.2.tgz#b7d5ff3afd77bb9718bb2821329b894b9a44c00b" integrity sha512-g+ShTQYLsCcOUkNOK6CCEZbj3aRDVPw3WOwXk+LxlUKvuS9ujEqP2MppBHyRVYrNNFW/vcPaTBUZ2ctGNSiOCA== @@ -625,7 +625,7 @@ rethinkdb-changefeed-reconnect@^0.3.2: dependencies: babel-runtime "^6.18.0" -rethinkdbdash@^2.3.29: +rethinkdbdash@^2.3.31: version "2.3.31" resolved "https://registry.yarnpkg.com/rethinkdbdash/-/rethinkdbdash-2.3.31.tgz#fe2f73d1fa6e6f5d96d8e881292013cf6dca914d" integrity sha512-6nXrKFjdg2Ug0YpdmPWSvyD/2EisHnFNt4FWZ74dcXGK48ievSv+cNFTmVv+KjLi6I9CCf6w4CKZ6yCYTfMfdQ== diff --git a/yarn.lock b/yarn.lock index f8be4402f2..43a2bd1066 100644 --- a/yarn.lock +++ b/yarn.lock @@ -754,7 +754,7 @@ dependencies: regenerator-runtime "^0.12.0" -"@babel/runtime@^7.0.0", "@babel/runtime@^7.0.0-beta.38", "@babel/runtime@^7.0.0-beta.40", "@babel/runtime@^7.0.0-beta.51", "@babel/runtime@^7.1.2": +"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2": version "7.2.0" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.2.0.tgz#b03e42eeddf5898e00646e4c840fa07ba8dcad7f" integrity sha512-oouEibCbHMVdZSDlJBO6bZmID/zA/G/Qx3H1d3rSNPTD+L8UNKvCat7aKWSJ74zYbm5zWGh0GQN0hKj8zYFTCg== @@ -982,7 +982,7 @@ "@sendgrid/client" "^6.3.0" "@sendgrid/helpers" "^6.3.0" -"@types/accepts@*", "@types/accepts@^1.3.5": +"@types/accepts@^1.3.5": version "1.3.5" resolved "https://registry.yarnpkg.com/@types/accepts/-/accepts-1.3.5.tgz#c34bec115cfc746e04fe5a059df4ce7e7b391575" integrity sha512-jOdnI/3qTpHABjM5cx1Hc0sKsPoYCp+DP/GJRGtDlPd7fiV9oXGGIcjW/ZOxLIvjGz8MA+uMZI9metHlgqbgwQ== @@ -1012,13 +1012,6 @@ "@types/connect" "*" "@types/node" "*" -"@types/bunyan@*": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@types/bunyan/-/bunyan-1.8.5.tgz#d992adbce8ed20cde634764bd8f269f29f703647" - integrity sha512-7n8ANtxh2c5A/NfCuv8cVtWcgSLdq76MQbtmbInpzXuPw4TSAReUJ+MGHK4m67I4zI3ynCJoABfaeHYJaYSeRg== - dependencies: - "@types/node" "*" - "@types/caseless@*": version "0.12.1" resolved "https://registry.yarnpkg.com/@types/caseless/-/caseless-0.12.1.tgz#9794c69c8385d0192acc471a540d1f8e0d16218a" @@ -1042,23 +1035,13 @@ resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.0.8.tgz#d27600e9ba2f371e08695d90a0fe0408d89c7be7" integrity sha512-m812CONwdZn/dMzkIJEY0yAs4apyTkTORgfB2UsMOxgkUbC205AHnm4T8I0I5gPg9MHrFc1dJ35iS75c0CJkjg== -"@types/connect@*", "@types/connect@^3.4.31": +"@types/connect@*": version "3.4.32" resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.32.tgz#aa0e9616b9435ccad02bc52b5b454ffc2c70ba28" integrity sha512-4r8qa0quOvh7lGD0pre62CAb1oni1OO6ecJLGCezTmhQ8Fz50Arx9RUszryR8KlgK6avuSXvviL6yWyViQABOg== dependencies: "@types/node" "*" -"@types/cookies@*": - version "0.7.1" - resolved "https://registry.yarnpkg.com/@types/cookies/-/cookies-0.7.1.tgz#f9f204bd6767d389eea3b87609e30c090c77a540" - integrity sha512-ku6IvbucEyuC6i4zAVK/KnuzWNXdbFd1HkXlNLg/zhWDGTtQT5VhumiPruB/BHW34PWVFwyfwGftDQHfWNxu3Q== - dependencies: - "@types/connect" "*" - "@types/express" "*" - "@types/keygrip" "*" - "@types/node" "*" - "@types/cors@^2.8.4": version "2.8.4" resolved "https://registry.yarnpkg.com/@types/cors/-/cors-2.8.4.tgz#50991a759a29c0b89492751008c6af7a7c8267b0" @@ -1080,7 +1063,7 @@ "@types/node" "*" "@types/range-parser" "*" -"@types/express@*", "@types/express@4.16.0", "@types/express@^4.0.36": +"@types/express@*", "@types/express@4.16.0": version "4.16.0" resolved "https://registry.yarnpkg.com/@types/express/-/express-4.16.0.tgz#6d8bc42ccaa6f35cf29a2b7c3333cb47b5a32a19" integrity sha512-TtPEYumsmSTtTetAPXlJVf3kEqb6wZK0bZojpJQrnD/djV4q1oB6QQ8aKvKqwNPACoe02GNiy5zDzcYivR5Z2w== @@ -1096,11 +1079,6 @@ dependencies: "@types/node" "*" -"@types/http-assert@*": - version "1.3.0" - resolved "https://registry.yarnpkg.com/@types/http-assert/-/http-assert-1.3.0.tgz#5e932606153da28e1d04f9043f4912cf61fd55dd" - integrity sha512-RObYTpPMo0IY+ZksPtKHsXlYFRxsYIvUqd68e89Y7otDrXsjBy1VgMd53kxVV0JMsNlkCASjllFOlLlhxEv0iw== - "@types/jquery@*": version "3.3.24" resolved "https://registry.yarnpkg.com/@types/jquery/-/jquery-3.3.24.tgz#3af73accd9da56a1fd59c706ca2145bd73a91c65" @@ -1113,42 +1091,6 @@ resolved "https://registry.yarnpkg.com/@types/jquery/-/jquery-3.3.6.tgz#5932ead926307ca21e5b36808257f7c926b06565" integrity sha512-403D4wN95Mtzt2EoQHARf5oe/jEPhzBOBNrunk+ydQGW8WmkQ/E8rViRAEB1qEt/vssfGfNVD6ujP4FVeegrLg== -"@types/keygrip@*": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@types/keygrip/-/keygrip-1.0.1.tgz#ff540462d2fb4d0a88441ceaf27d287b01c3d878" - integrity sha1-/1QEYtL7TQqIRBzq8n0oewHD2Hg= - -"@types/koa-bodyparser@^4.2.0": - version "4.2.1" - resolved "https://registry.yarnpkg.com/@types/koa-bodyparser/-/koa-bodyparser-4.2.1.tgz#e78f9ff1a21f9ebe9bf16d702e9f2a6d0c0c870d" - integrity sha512-dd6mVT30OmGYIOmNRF3269Bv+IJ68AVrvYcPViB7bYnzxk7nZyfeAsUx96lvXmaTpOGF4XZ7WDCuSOd7Npi6pw== - dependencies: - "@types/koa" "*" - -"@types/koa-compose@*": - version "3.2.2" - resolved "https://registry.yarnpkg.com/@types/koa-compose/-/koa-compose-3.2.2.tgz#dc106e000bbf92a3ac900f756df47344887ee847" - integrity sha1-3BBuAAu/kqOskA91bfRzRIh+6Ec= - -"@types/koa-router@^7.0.27": - version "7.0.35" - resolved "https://registry.yarnpkg.com/@types/koa-router/-/koa-router-7.0.35.tgz#07442ac95e65ec1b042af4f72abea44dc96b909f" - integrity sha512-WSdZ0FkUSCDiGQBtsEAmTjsM3l5o4eq2WDSCR9UXm/buLY73b5MSkfSt4f8+LAhoZYa9uNNcEyiE43J0xISF5A== - dependencies: - "@types/koa" "*" - -"@types/koa@*", "@types/koa@^2.0.39": - version "2.0.47" - resolved "https://registry.yarnpkg.com/@types/koa/-/koa-2.0.47.tgz#ac7854384a4cc49c16593c86acd99e636a48142a" - integrity sha512-llhCaHNWKFDMx1GCrqwgsWgUO+C4Da0SccbgevHIYOKVxwegEjFzl0WaMWHk3wWx0P0AdqHR+gQYZ2ZAb0ez0Q== - dependencies: - "@types/accepts" "*" - "@types/cookies" "*" - "@types/http-assert" "*" - "@types/keygrip" "*" - "@types/koa-compose" "*" - "@types/node" "*" - "@types/lodash@4.14.87": version "4.14.87" resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.87.tgz#55f92183b048c2c64402afe472f8333f4e319a6b" @@ -1207,15 +1149,6 @@ "@types/node" "*" "@types/tough-cookie" "*" -"@types/restify@^5.0.7": - version "5.0.10" - resolved "https://registry.yarnpkg.com/@types/restify/-/restify-5.0.10.tgz#12e416ca83308a6aaa97a54c0d47ff81197c7dcf" - integrity sha512-lrFhug755B6bF6X6ofR4q3bezJftHtJSnHxPxC4J2bSZQyKa6OI/Y5oJNl6Mb0LoFdSjnw09w6gOw9ChZs6N4A== - dependencies: - "@types/bunyan" "*" - "@types/node" "*" - "@types/spdy" "*" - "@types/serve-static@*": version "1.13.2" resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.13.2.tgz#f5ac4d7a6420a99a6a45af4719f4dcd8cd907a48" @@ -1247,13 +1180,6 @@ resolved "https://registry.yarnpkg.com/@types/sizzle/-/sizzle-2.3.2.tgz#a811b8c18e2babab7d542b3365887ae2e4d9de47" integrity sha512-7EJYyKTL7tFR8+gDbB6Wwz/arpGa0Mywk1TJbNzKzHtzbwVmY4HR9WqS5VV7dsBUKQmPNr192jHr/VpBluj/hg== -"@types/spdy@*": - version "3.4.4" - resolved "https://registry.yarnpkg.com/@types/spdy/-/spdy-3.4.4.tgz#3282fd4ad8c4603aa49f7017dd520a08a345b2bc" - integrity sha512-N9LBlbVRRYq6HgYpPkqQc3a9HJ/iEtVZToW6xlTtJiMhmRJ7jJdV7TaZQJw/Ve/1ePUsQiCTDc4JMuzzag94GA== - dependencies: - "@types/node" "*" - "@types/tough-cookie@*": version "2.3.4" resolved "https://registry.yarnpkg.com/@types/tough-cookie/-/tough-cookie-2.3.4.tgz#821878b81bfab971b93a265a561d54ea61f9059f" @@ -1538,7 +1464,7 @@ apollo-cache-control@0.3.3: apollo-server-env "2.2.0" graphql-extensions "0.3.3" -apollo-cache-inmemory@^1.3.5: +apollo-cache-inmemory@^1.3.11: version "1.3.11" resolved "https://registry.yarnpkg.com/apollo-cache-inmemory/-/apollo-cache-inmemory-1.3.11.tgz#6cb8f24ec812715169f9acbb0b67833f9a19ec90" integrity sha512-fSoyjBV5RV57J3i/VHDDB74ZgXc0PFiogheNFHEhC0mL6rg5e/DjTx0Vg+csIBk23gvlzTvV+eypx7Q2NJ+dYg== @@ -1554,7 +1480,7 @@ apollo-cache@1.1.21, apollo-cache@^1.1.21: dependencies: apollo-utilities "^1.0.26" -apollo-client@^2.4.2: +apollo-client@^2.4.7: version "2.4.7" resolved "https://registry.yarnpkg.com/apollo-client/-/apollo-client-2.4.7.tgz#b6712fd4c9ba346e3c44cfec7e6868e532b6a957" integrity sha512-6aAm+16AFBYZhJF8eKxrup6AbYni01InDiwTfZhMMTP2xaXQWjsQnfaHbI2oE+hd3+AZFy1drkse8RZKghR/WQ== @@ -1577,21 +1503,6 @@ apollo-datasource@0.2.1: apollo-server-caching "0.2.1" apollo-server-env "2.2.0" -apollo-engine-binary-darwin@0.2018.6-20-gc0e4bb519: - version "0.2018.6-20-gc0e4bb519" - resolved "https://registry.yarnpkg.com/apollo-engine-binary-darwin/-/apollo-engine-binary-darwin-0.2018.6-20-gc0e4bb519.tgz#1458cf9af9adff1248730b9e7ea3408a778ff20e" - integrity sha512-yQB26z3s/lMCBOpoKjL0IiJPuk+EHwoY6zd9nZz0A99/461ZayE02LjV8MwB4HDvSPmvtaanrhQhTaLH6sLHfA== - -apollo-engine-binary-linux@0.2018.6-20-gc0e4bb519: - version "0.2018.6-20-gc0e4bb519" - resolved "https://registry.yarnpkg.com/apollo-engine-binary-linux/-/apollo-engine-binary-linux-0.2018.6-20-gc0e4bb519.tgz#0f61d7e7888a58d8723516d1dc44d4c8a6688df2" - integrity sha512-HTUysRxRmwYQmbztuvytq5I2dgbPT/Z0J5HNz0Hx5/Ej19EHIb0v82mFMdMZKGRKHvOfao8XGG3/++C1vSQGiw== - -apollo-engine-binary-windows@0.2018.6-20-gc0e4bb519: - version "0.2018.6-20-gc0e4bb519" - resolved "https://registry.yarnpkg.com/apollo-engine-binary-windows/-/apollo-engine-binary-windows-0.2018.6-20-gc0e4bb519.tgz#288c718a730f2a1f8bb0aae9fff3e6da23c1f00f" - integrity sha512-Cj0FSI8MDHcDc8EknzcqBP57R5S6gLIdD4/lpQaOtZureS/Ijx3mltZ0csmn5v8S0dDaMM6zjElBMDfwl6aEDg== - apollo-engine-reporting-protobuf@0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/apollo-engine-reporting-protobuf/-/apollo-engine-reporting-protobuf-0.1.0.tgz#fbc220cac2a3b7800ffc155d7e54c21c56b7848e" @@ -1610,22 +1521,6 @@ apollo-engine-reporting@0.1.3: graphql-extensions "0.3.3" lodash "^4.17.10" -apollo-engine@1.x: - version "1.1.2" - resolved "https://registry.yarnpkg.com/apollo-engine/-/apollo-engine-1.1.2.tgz#ef8465fe5234b3bfe034b7e96d37bc441b72a9cb" - integrity sha512-XALQo4VjyMaOkCeuO5z0j68eSvOxh7KhZkWW3Vqj8ufxk2WbJGCACU7XQEvD6HyGBwtDDXxV8KvZyU0CDisi1Q== - dependencies: - "@types/connect" "^3.4.31" - "@types/express" "^4.0.36" - "@types/koa" "^2.0.39" - "@types/koa-bodyparser" "^4.2.0" - "@types/koa-router" "^7.0.27" - "@types/restify" "^5.0.7" - optionalDependencies: - apollo-engine-binary-darwin "0.2018.6-20-gc0e4bb519" - apollo-engine-binary-linux "0.2018.6-20-gc0e4bb519" - apollo-engine-binary-windows "0.2018.6-20-gc0e4bb519" - apollo-env@0.2.5: version "0.2.5" resolved "https://registry.yarnpkg.com/apollo-env/-/apollo-env-0.2.5.tgz#162c785bccd2aea69350a7600fab4b7147fc9da5" @@ -1641,14 +1536,14 @@ apollo-link-dedup@^1.0.0: dependencies: apollo-link "^1.2.4" -apollo-link-http-common@^0.2.4, apollo-link-http-common@^0.2.6: +apollo-link-http-common@^0.2.5, apollo-link-http-common@^0.2.6: version "0.2.6" resolved "https://registry.yarnpkg.com/apollo-link-http-common/-/apollo-link-http-common-0.2.6.tgz#47b9012500599fe343e2e87378026384b4fc8c1f" integrity sha512-LUOMWvrZuBP1hyWLBXyaW0KyFeKo79j+k3N+Q4HSkXKbLibnllXQ+JxxoSKGhm0bhREygiLtJAG9JnGlhxGO/Q== dependencies: apollo-link "^1.2.4" -apollo-link-http@^1.5.5: +apollo-link-http@^1.5.7: version "1.5.7" resolved "https://registry.yarnpkg.com/apollo-link-http/-/apollo-link-http-1.5.7.tgz#098615c427a910ec8c5817476bbabe68c586b339" integrity sha512-EZ9nynHjwYCpGYP5IsRrZGTWidUVpshk7MuSG4joqGtJMwpFCgMQz+y3BHdUhowHtfAd9z60XmeOTG9FJolb8A== @@ -1656,7 +1551,7 @@ apollo-link-http@^1.5.5: apollo-link "^1.2.4" apollo-link-http-common "^0.2.6" -apollo-link-retry@^2.2.5: +apollo-link-retry@^2.2.6: version "2.2.6" resolved "https://registry.yarnpkg.com/apollo-link-retry/-/apollo-link-retry-2.2.6.tgz#aa17e08b4a115ddcbdd70444ced254d3c915fc44" integrity sha512-GhMcugGVT3JXGaZ61by1GVc/m1ceaRjo1WTTIfJLm75k1wdwW1WUnNmBU5ZQrUgdUzkqXaADbWinbm0tDhmMlQ== @@ -1664,21 +1559,21 @@ apollo-link-retry@^2.2.5: "@types/zen-observable" "0.8.0" apollo-link "^1.2.4" -apollo-link-schema@^1.1.1: +apollo-link-schema@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/apollo-link-schema/-/apollo-link-schema-1.1.2.tgz#6c36150ab11e0ee8dfed36d6886ac518244220fe" integrity sha512-uTM5BXpW4iK/9BP/1BUENpUfZ9WQvjVMZelIE4978wqzNTQoxJVl3582gMOq3vZGvef7wtCAcxFrOTspeNcdgw== dependencies: apollo-link "^1.2.4" -apollo-link-ws@^1.0.9: +apollo-link-ws@^1.0.10: version "1.0.10" resolved "https://registry.yarnpkg.com/apollo-link-ws/-/apollo-link-ws-1.0.10.tgz#9fb5489a36f5fcb0d139b6ada0eea979ecad3967" integrity sha512-1Yx4iIUsWS8wuAdVJ2LF+LdIYAsqHSto8eShwJ/d2SovocsMCwN9hyS+JkaOPD/KHAkavTWzN6l3XwSOdOwevQ== dependencies: apollo-link "^1.2.4" -apollo-link@^1.0.0, apollo-link@^1.2.2, apollo-link@^1.2.3, apollo-link@^1.2.4: +apollo-link@^1.0.0, apollo-link@^1.2.3, apollo-link@^1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/apollo-link/-/apollo-link-1.2.4.tgz#ab4d21d2e428db848e88b5e8f4adc717b19c954b" integrity sha512-B1z+9H2nTyWEhMXRFSnoZ1vSuAYP+V/EdUJvRx9uZ8yuIBZMm6reyVtr1n0BWlKeSFyPieKJy2RLzmITAAQAMQ== @@ -1732,7 +1627,7 @@ apollo-server-errors@2.2.0: resolved "https://registry.yarnpkg.com/apollo-server-errors/-/apollo-server-errors-2.2.0.tgz#5b452a1d6ff76440eb0f127511dc58031a8f3cb5" integrity sha512-gV9EZG2tovFtT1cLuCTavnJu2DaKxnXPRNGSTo+SDI6IAk6cdzyW0Gje5N2+3LybI0Wq5KAbW6VLei31S4MWmg== -apollo-server-express@^2.0.4: +apollo-server-express@^2.2.6: version "2.2.6" resolved "https://registry.yarnpkg.com/apollo-server-express/-/apollo-server-express-2.2.6.tgz#2c0c5bdab6eccf63ab138ad4b6d6836aeb723540" integrity sha512-+zajJDcJLhWdkW8f0D5KQfDsaxgx7fQ3ULGDT1eZgL0UY5pazWBOnXqeRoVKRl+r1WcrwN1SMfBVnAKWv6CyVw== @@ -1764,25 +1659,26 @@ apollo-tracing@0.3.3: apollo-server-env "2.2.0" graphql-extensions "0.3.3" -apollo-upload-client@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/apollo-upload-client/-/apollo-upload-client-8.1.0.tgz#db99eed6af926dbd54cb0bbde30345672c97fc5f" - integrity sha512-JEgStzhnwybj1ifE2nViLEl7NTM5+zS++fKbDL95PIpodg2AdYeeN7eEa7RXpYD14iC3FVcsfqgGMREv2+cSxw== +apollo-upload-client@^9.1.0: + version "9.1.0" + resolved "https://registry.yarnpkg.com/apollo-upload-client/-/apollo-upload-client-9.1.0.tgz#13191714ae07388088f2c773ebbfd53ba2f64c53" + integrity sha512-ZN5gsbBjImEZTWWTUHpCEGDasnoBGbaODpznQ5EawyNHceuFYSNJbbft+ZZ841vZAcj9XZdKUKoaLBlMZ/r7nw== dependencies: - "@babel/runtime" "^7.0.0-beta.51" - apollo-link-http-common "^0.2.4" - extract-files "^3.1.0" + apollo-link "^1.2.3" + apollo-link-http-common "^0.2.5" + extract-files "^4.0.0" -apollo-upload-server@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/apollo-upload-server/-/apollo-upload-server-5.0.0.tgz#c953b523608313966e0c8444637f4ae8ef77d5bc" - integrity sha512-CzbHvMo/6TO5XrovzmV/ojTft17s9Cd+vKLGngChpB0UW1ObxKlNLlcXRLD+yt6Nec32/Kt209HmA31hnwxB/g== +apollo-upload-server@^7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/apollo-upload-server/-/apollo-upload-server-7.1.0.tgz#21e07b52252b3749b913468599813e13cfca805f" + integrity sha512-cD9ReCeyurYwZyEDqJYb5TOc9dt8yhPzS+MtrY3iJdqw+pqiiyPngAvVXHjN+Ca7Lajvom4/AT/PBrYVDMM3Kw== dependencies: - "@babel/runtime" "^7.0.0-beta.40" busboy "^0.2.14" + fs-capacitor "^1.0.0" + http-errors "^1.7.0" object-path "^0.11.4" -apollo-utilities@1.0.26, apollo-utilities@^1.0.0, apollo-utilities@^1.0.1, apollo-utilities@^1.0.21, apollo-utilities@^1.0.26: +apollo-utilities@1.0.26, apollo-utilities@^1.0.0, apollo-utilities@^1.0.1, apollo-utilities@^1.0.26: version "1.0.26" resolved "https://registry.yarnpkg.com/apollo-utilities/-/apollo-utilities-1.0.26.tgz#589c66bf4d16223531351cf667a230c787def1da" integrity sha512-URw7o3phymliqYCYatcird2YRPUU2eWCNvip64U9gQrX56mEfK4m99yBIDCMTpmcvOFsKLii1sIEZsHIs/bvnw== @@ -3004,7 +2900,7 @@ babel-register@^6.26.0: mkdirp "^0.5.1" source-map-support "^0.4.15" -babel-runtime@6.26.0, babel-runtime@6.x.x, babel-runtime@^6.11.6, babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0: +babel-runtime@6.26.0, babel-runtime@6.x.x, babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4= @@ -3188,7 +3084,7 @@ bluebird@3.5.2: resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-2.11.0.tgz#534b9033c022c9579c56ba3b3e5a5caafbb650e1" integrity sha1-U0uQM8AiyVecVro7Plpcqvu2UOE= -"bluebird@>= 3.0.1", bluebird@^3.3.4, bluebird@^3.4.7, bluebird@^3.5.0, bluebird@^3.5.1: +"bluebird@>= 3.0.1", bluebird@^3.3.4, bluebird@^3.4.7, bluebird@^3.5.1, bluebird@^3.5.3: version "3.5.3" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.3.tgz#7d01c6f9616c9a51ab0f8c549a79dfe6ec33efa7" integrity sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw== @@ -3611,17 +3507,17 @@ builtin-status-codes@^3.0.0: resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= -bull@3.4.8: - version "3.4.8" - resolved "https://registry.yarnpkg.com/bull/-/bull-3.4.8.tgz#bd25ae82f47e0a092c0b06b6a13b875fa5b41bc0" - integrity sha512-dO/Dxbe7gpq8hyYlQfkLFz+N7JxTLM7KlEppViOdaaq8JSq15GgQo1wARG7E223MB6Ji9u9xTRcqXi/SwVvI1Q== +bull@^3.5.2: + version "3.5.2" + resolved "https://registry.yarnpkg.com/bull/-/bull-3.5.2.tgz#9c85f205b17686efab2ee28aaa4388887360de32" + integrity sha512-tuL4Uj0kUeaQ7Cow3POkca20fk+VSsR8AiTFeNkyMmuicBnE1ZMwvF1NRDY7vIH43pD9PiMCSEP4Li/934Pw1w== dependencies: - bluebird "^3.5.0" + bluebird "^3.5.3" cron-parser "^2.5.0" debuglog "^1.0.0" ioredis "^3.1.4" - lodash "^4.17.4" - semver "^5.5.0" + lodash "^4.17.11" + semver "^5.6.0" uuid "^3.2.1" bundle-buddy-webpack-plugin@^0.3.0: @@ -4948,7 +4844,7 @@ data-urls@^1.0.0: whatwg-mimetype "^2.2.0" whatwg-url "^7.0.0" -dataloader@^1.3.0: +dataloader@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/dataloader/-/dataloader-1.4.0.tgz#bca11d867f5d3f1b9ed9f737bd15970c65dff5c8" integrity sha512-68s5jYdlvasItOJnCuI2Q9s4q98g0pCyL3HrcKJu8KNugUl8ahgmZYg38ysLTgQjjXX3H8CJLkAvWrclWfcalw== @@ -6345,16 +6241,6 @@ expect@^22.4.0: jest-message-util "^22.4.3" jest-regex-util "^22.4.3" -expo-server-sdk@^2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/expo-server-sdk/-/expo-server-sdk-2.4.0.tgz#aa5e02415ba3268546ff61dddb5b92cb796f6e3a" - integrity sha512-sxTE9EhLqlF5JR6eAMHUUWkaO8JOKLjYHNpM546vO3MxA8JtzZZtdRyJ1271ZbTTyFNFP9snjWN6MxUrqnFX5Q== - dependencies: - babel-runtime "^6.11.6" - invariant "^2.2.4" - node-fetch "^2.1.2" - promise-limit "^2.6.0" - express-enforces-ssl@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/express-enforces-ssl/-/express-enforces-ssl-1.1.0.tgz#cf29c6a61c5bdd802e2c7ed265a4a98e7487d1ac" @@ -6461,12 +6347,10 @@ extglob@^2.0.4: snapdragon "^0.8.1" to-regex "^3.0.1" -extract-files@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/extract-files/-/extract-files-3.1.0.tgz#b70424c9d4a1a4208efe22069388f428e4ae00f1" - integrity sha512-urkJPM4N88CMy1AfDw+Avudon6fToTsaG5j5VN0aybn88udv1yrERFCweV78NaZg7DOFsQULkFgvP64vNQFNMQ== - dependencies: - "@babel/runtime" "^7.0.0-beta.38" +extract-files@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/extract-files/-/extract-files-4.1.0.tgz#2d5b64af688dfd030274ca542c43fabba325019a" + integrity sha512-2gjdb3dVzr1ie9+K8pupPTnsNkK4qmzbTFOIxghiWoh6nCTajGCGC72ZNYX0nBWy5IOq1FXfRVgvkkLqqE4sdw== extract-text-webpack-plugin@3.0.2: version "3.0.2" @@ -6889,6 +6773,11 @@ from@~0: resolved "https://registry.yarnpkg.com/from/-/from-0.1.7.tgz#83c60afc58b9c56997007ed1a768b3ab303a44fe" integrity sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4= +fs-capacitor@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/fs-capacitor/-/fs-capacitor-1.0.1.tgz#ff9dbfa14dfaf4472537720f19c3088ed9278df0" + integrity sha512-XdZK0Q78WP29Vm3FGgJRhRhrBm51PagovzWtW2kJ3Q6cYJbGtZqWSGTSPwvtEkyjIirFd7b8Yes/dpOYjt4RRQ== + fs-extra@3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-3.0.1.tgz#3794f378c58b342ea7dbbb23095109c4b3b62291" @@ -7290,18 +7179,7 @@ graphql-tag@^2.10.0, graphql-tag@^2.9.2: resolved "https://registry.yarnpkg.com/graphql-tag/-/graphql-tag-2.10.0.tgz#87da024be863e357551b2b8700e496ee2d4353ae" integrity sha512-9FD6cw976TLLf9WYIUPCaaTpniawIjHWZSwIRZSjrfufJamcXbVVYfN2TWvJYbw0Xf2JjYbl1/f2+wDnBVw3/w== -graphql-tools@^3.0.5: - version "3.1.1" - resolved "https://registry.yarnpkg.com/graphql-tools/-/graphql-tools-3.1.1.tgz#d593358f01e7c8b1671a17b70ddb034dea9dbc50" - integrity sha512-yHvPkweUB0+Q/GWH5wIG60bpt8CTwBklCSzQdEHmRUgAdEQKxw+9B7zB3dG7wB3Ym7M7lfrS4Ej+jtDZfA2UXg== - dependencies: - apollo-link "^1.2.2" - apollo-utilities "^1.0.1" - deprecated-decorator "^0.1.6" - iterall "^1.1.3" - uuid "^3.1.0" - -graphql-tools@^4.0.0: +graphql-tools@^4.0.0, graphql-tools@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/graphql-tools/-/graphql-tools-4.0.3.tgz#23b5cb52c519212b1b2e4630a361464396ad264b" integrity sha512-NNZM0WSnVLX1zIMUxu7SjzLZ4prCp15N5L2T2ro02OVyydZ0fuCnZYRnx/yK9xjGWbZA0Q58yEO//Bv/psJWrg== @@ -7723,6 +7601,17 @@ http-errors@1.6.3, http-errors@~1.6.2, http-errors@~1.6.3: setprototypeof "1.1.0" statuses ">= 1.4.0 < 2" +http-errors@^1.7.0: + version "1.7.1" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.1.tgz#6a4ffe5d35188e1c39f872534690585852e1f027" + integrity sha512-jWEUgtZWGSMba9I1N3gc1HmvpBUaNC9vDdA46yScAdp+C5rdEuKWUBLWTQpW9FwSWSbYYs++b6SDCxf9UEJzfw== + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.0" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + http-parser-js@>=0.4.0: version "0.5.0" resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.0.tgz#d65edbede84349d0dc30320815a15d39cc3cbbd8" @@ -8015,7 +7904,7 @@ invert-kv@^1.0.0: resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" integrity sha1-EEqOSqym09jNFXqO+L+rLXo//bY= -ioredis@^3.1.4: +ioredis@3.2.2, ioredis@^3.1.4: version "3.2.2" resolved "https://registry.yarnpkg.com/ioredis/-/ioredis-3.2.2.tgz#b7d5ff3afd77bb9718bb2821329b894b9a44c00b" integrity sha512-g+ShTQYLsCcOUkNOK6CCEZbj3aRDVPw3WOwXk+LxlUKvuS9ujEqP2MppBHyRVYrNNFW/vcPaTBUZ2ctGNSiOCA== @@ -8044,7 +7933,7 @@ ioredis@^3.1.4: redis-commands "^1.2.0" redis-parser "^2.4.0" -ioredis@^4.0.0, ioredis@^4.2.0: +ioredis@^4.0.0: version "4.3.0" resolved "https://registry.yarnpkg.com/ioredis/-/ioredis-4.3.0.tgz#a92850dd8794eaee4f38a265c830ca823a09d345" integrity sha512-TwTp93UDKlKVQeg9ThuavNh4Vs31JTlqn+cI/J6z21OtfghyJm5I349ZlsKobOeEyS4INITMLQ1fhR7xwf9Fxg== @@ -9869,11 +9758,6 @@ merge2@^1.2.3: resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.2.3.tgz#7ee99dbd69bb6481689253f018488a1b902b0ed5" integrity sha512-gdUU1Fwj5ep4kplwcmftruWofEFt6lfpkkr3h860CXbAB9c3hGb55EOL2ali0Td5oebvW0E1+3Sr+Ur7XfKpRA== -merge@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.0.tgz#7531e39d4949c281a66b8c5a6e0265e8b05894da" - integrity sha1-dTHjnUlJwoGma4xabgJl6LBYlNo= - merge@^1.2.0: version "1.2.1" resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.1.tgz#38bebf80c3220a8a487b6fcfb3941bb11720c145" @@ -11481,13 +11365,6 @@ postcss@^6.0.0, postcss@^6.0.1, postcss@^6.0.13: source-map "^0.6.1" supports-color "^5.4.0" -postmark@^1.4.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/postmark/-/postmark-1.6.1.tgz#23d48f7182509be5be0eb80c16b90a2e2326eb3c" - integrity sha1-I9SPcYJQm+W+DrgMFrkKLiMm6zw= - dependencies: - merge "1.2.0" - pre-commit@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/pre-commit/-/pre-commit-1.2.2.tgz#dbcee0ee9de7235e57f79c56d7ce94641a69eec6" @@ -11583,11 +11460,6 @@ progress@^2.0.0: resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== -promise-limit@^2.6.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/promise-limit/-/promise-limit-2.7.0.tgz#eb5737c33342a030eaeaecea9b3d3a93cb592b26" - integrity sha512-7nJ6v5lnJsXwGprnGXga4wx6d1POjvi5Qmf1ivTRxTjH4Z/9Czja/UCMLVmB9N93GeWOU93XaFaEt6jbuoagNw== - promise@8.0.1: version "8.0.1" resolved "https://registry.yarnpkg.com/promise/-/promise-8.0.1.tgz#e45d68b00a17647b6da711bf85ed6ed47208f450" @@ -11867,7 +11739,7 @@ rc@^1.0.1, rc@^1.1.6, rc@^1.2.7: minimist "^1.2.0" strip-json-comments "~2.0.1" -react-apollo@^2.2.4: +react-apollo@^2.3.2: version "2.3.2" resolved "https://registry.yarnpkg.com/react-apollo/-/react-apollo-2.3.2.tgz#b8e287d2813722b9e0a886cabf8149ab3b84a3b7" integrity sha512-3lU9iqmj4KMIZvlWWSuLihxMGLEAL6oNmnSTWrb3/mRP36Zy0zJD4rdaonDx4WzqFYQAnUPaOiFnHGp0UQUTwA== @@ -12013,7 +11885,7 @@ react-loadable@^5.5.0: dependencies: prop-types "^15.5.0" -react-modal@^3.6.1: +react-modal@^3.7.1: version "3.7.1" resolved "https://registry.yarnpkg.com/react-modal/-/react-modal-3.7.1.tgz#342ed170133d0557e6c3e6fc40195bc45c8f09c3" integrity sha512-eSgotXkqOCXi0b27AwLCoJ8yqLepKnbZdMp/zfUmZPnMNoe39pDT0mbAPq9rp+TToqM5GUTv8C36Cuja+ThbhA== @@ -13030,7 +12902,7 @@ semver-diff@^2.0.0: dependencies: semver "^5.0.3" -"semver@2 || 3 || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1: +"semver@2 || 3 || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0: version "5.6.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.6.0.tgz#7e74256fbaa49c75aa7c7a205cc22799cac80004" integrity sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg== @@ -13489,7 +13361,7 @@ static-extend@^0.1.1: define-property "^0.2.5" object-copy "^0.1.0" -"statuses@>= 1.4.0 < 2": +"statuses@>= 1.4.0 < 2", "statuses@>= 1.5.0 < 2": version "1.5.0" resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= @@ -13736,7 +13608,7 @@ subarg@^1.0.0: dependencies: minimist "^1.1.0" -subscriptions-transport-ws@0.9.x, subscriptions-transport-ws@^0.9.11: +subscriptions-transport-ws@^0.9.11, subscriptions-transport-ws@^0.9.15: version "0.9.15" resolved "https://registry.yarnpkg.com/subscriptions-transport-ws/-/subscriptions-transport-ws-0.9.15.tgz#68a8b7ba0037d8c489fb2f5a102d1494db297d0d" integrity sha512-f9eBfWdHsePQV67QIX+VRhf++dn1adyC/PZHP6XI5AfKnZ4n0FW+v5omxwdHVpd4xq2ZijaHEcmlQrhBY79ZWQ== @@ -14098,6 +13970,11 @@ to-regex@^3.0.1, to-regex@^3.0.2: regex-not "^1.0.2" safe-regex "^1.1.0" +toidentifier@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" + integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== + toobusy-js@^0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/toobusy-js/-/toobusy-js-0.5.1.tgz#5511f78f6a87a6a512d44fdb0efa13672217f659"