diff --git a/analytics/package.json b/analytics/package.json index 6fb0ccb34a..d6814eaf6b 100644 --- a/analytics/package.json +++ b/analytics/package.json @@ -8,6 +8,7 @@ "amplitude": "^3.5.0", "aws-sdk": "^2.373.0", "bull": "3.3.10", + "datadog-metrics": "^0.8.1", "debug": "^4.1.0", "faker": "^4.1.0", "ioredis": "3.2.2", diff --git a/analytics/yarn.lock b/analytics/yarn.lock index 267fb34341..725cd66909 100644 --- a/analytics/yarn.lock +++ b/analytics/yarn.lock @@ -34,6 +34,11 @@ base64-js@^1.0.2: resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.0.tgz#cab1e6118f051095e58b5281aea8c1cd22bfc0e3" integrity sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw== +bignumber.js@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-1.1.1.tgz#1a415d9ac014c13256af1feed9d1a3e5717a8cf7" + integrity sha1-GkFdmsAUwTJWrx/u2dGj5XF6jPc= + "bluebird@>= 3.0.1", bluebird@^3.3.4, bluebird@^3.5.0: version "3.5.3" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.3.tgz#7d01c6f9616c9a51ab0f8c549a79dfe6ec33efa7" @@ -116,6 +121,21 @@ cron-parser@^2.4.1: resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b" integrity sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs= +datadog-metrics@^0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/datadog-metrics/-/datadog-metrics-0.8.1.tgz#be87237109a7084193c668d80112533ef00e3f21" + integrity sha512-qTSKnddO6GxTJW9FYpmWjvvift3qfyMurDjwNjJnJhBk76pBdDhC0B5V9V+XwPdn4r42qu48kwXNuHJslXlDOA== + dependencies: + debug "3.1.0" + dogapi "1.1.0" + +debug@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" + integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== + dependencies: + ms "2.0.0" + debug@^2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" @@ -142,6 +162,11 @@ debuglog@^1.0.0: resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" integrity sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI= +deep-extend@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== + define-properties@^1.1.1: version "1.1.3" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" @@ -159,6 +184,16 @@ denque@^1.1.0: resolved "https://registry.yarnpkg.com/denque/-/denque-1.4.0.tgz#79e2f0490195502107f24d9553f374837dabc916" integrity sha512-gh513ac7aiKrAgjiIBWZG0EASyDF9p4JMWwKA8YU5s9figrL5SRNEMT6FDynsegakuhWd1wVqTvqvqAoDxw7wQ== +dogapi@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/dogapi/-/dogapi-1.1.0.tgz#71a43865ad4bb4cb18bc3e13cf769971f501030a" + integrity sha1-caQ4Za1LtMsYvD4Tz3aZcfUBAwo= + dependencies: + extend "^3.0.0" + json-bigint "^0.1.4" + minimist "^1.1.1" + rc "^1.0.0" + events@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" @@ -208,6 +243,11 @@ inherits@~2.0.3: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= +ini@~1.3.0: + version "1.3.5" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" + integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== + ioredis@3.2.2, ioredis@^3.1.4: version "3.2.2" resolved "https://registry.yarnpkg.com/ioredis/-/ioredis-3.2.2.tgz#b7d5ff3afd77bb9718bb2821329b894b9a44c00b" @@ -275,6 +315,13 @@ jmespath@0.15.0: resolved "https://registry.yarnpkg.com/jmespath/-/jmespath-0.15.0.tgz#a3f222a9aae9f966f5d27c796510e28091764217" integrity sha1-o/Iiqarp+Wb10nx5ZRDigJF2Qhc= +json-bigint@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/json-bigint/-/json-bigint-0.1.4.tgz#b5d40b8a9009e92f157f7c079db097001830e01e" + integrity sha1-tdQLipAJ6S8Vf3wHnbCXABgw4B4= + dependencies: + bignumber.js "~1.1.1" + lodash.assign@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-4.2.0.tgz#0d99f3ccd7a6d261d19bdaeb9245005d285808e7" @@ -396,6 +443,11 @@ mime@^1.4.1: resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== +minimist@^1.1.1, minimist@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" + integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= + moment-timezone@^0.5.23: version "0.5.23" resolved "https://registry.yarnpkg.com/moment-timezone/-/moment-timezone-0.5.23.tgz#7cbb00db2c14c71b19303cb47b0fb0a6d8651463" @@ -464,6 +516,16 @@ raven@^2.6.4: timed-out "4.0.1" uuid "3.3.2" +rc@^1.0.0: + version "1.2.8" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== + dependencies: + deep-extend "^0.6.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + readable-stream@^2.3.5: version "2.3.6" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" @@ -585,6 +647,11 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" +strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= + superagent@^3.3.1: version "3.8.3" resolved "https://registry.yarnpkg.com/superagent/-/superagent-3.8.3.tgz#460ea0dbdb7d5b11bc4f78deba565f86a178e128" diff --git a/api/apollo-server.js b/api/apollo-server.js index ea1daf51bc..1b148a93ff 100644 --- a/api/apollo-server.js +++ b/api/apollo-server.js @@ -51,6 +51,10 @@ const server = new ProtectedApolloServer({ }; } + // Add GraphQL operation information to the statsd tags + req.statsdTags = { + graphqlOperationName: req.body.operationName || 'unknown_operation', + }; const loaders = createLoaders(); let currentUser = req.user && !req.user.bannedAt ? req.user : null; @@ -93,7 +97,7 @@ const server = new ProtectedApolloServer({ }; }), }, - playground: { + playground: process.env.NODE_ENV !== 'production' && { settings: { 'editor.theme': 'light', }, @@ -109,6 +113,7 @@ const server = new ProtectedApolloServer({ }, ], }, + introspection: process.env.NODE_ENV !== 'production', maxFileSize: 25 * 1024 * 1024, // 25MB engine: false, tracing: false, diff --git a/api/index.js b/api/index.js index 43ca1769ed..17dbf02e59 100644 --- a/api/index.js +++ b/api/index.js @@ -12,6 +12,7 @@ import Raven from 'shared/raven'; import toobusy from 'shared/middlewares/toobusy'; import addSecurityMiddleware from 'shared/middlewares/security'; import csrf from 'shared/middlewares/csrf'; +import statsd from 'shared/middlewares/statsd'; import { init as initPassport } from './authentication.js'; import apolloServer from './apollo-server'; import { corsOptions } from 'shared/middlewares/cors'; @@ -36,6 +37,9 @@ initPassport(); const app = express(); +// Instantiate the statsd middleware as soon as possible to get accurate time tracking +app.use(statsd); + // Trust the now proxy app.set('trust proxy', true); app.use(toobusy); diff --git a/api/package.json b/api/package.json index 2791dfb2fc..1b080d33f4 100644 --- a/api/package.json +++ b/api/package.json @@ -1,9 +1,9 @@ { "engines": { - "node": "10.7.0" + "node": "^10.0.0" }, "dependencies": { - "algoliasearch": "^3.31.0", + "algoliasearch": "^3.32.0", "apollo-local-query": "^0.3.1", "apollo-server-express": "^2.3.1", "apollo-upload-client": "^9.1.0", @@ -11,7 +11,7 @@ "axios": "^0.16.2", "b2a": "^1.0.10", "babel-plugin-replace-dynamic-import-runtime": "^1.0.2", - "babel-plugin-styled-components": "^1.9.4", + "babel-plugin-styled-components": "^1.10.0", "babel-plugin-transform-flow-strip-types": "^6.22.0", "babel-plugin-transform-object-rest-spread": "^6.23.0", "babel-preset-env": "^1.7.0", @@ -24,6 +24,7 @@ "cookie-session": "^2.0.0-beta.3", "cors": "^2.8.5", "cryptr": "^3.0.0", + "datadog-metrics": "^0.8.1", "dataloader": "^1.4.0", "debounce": "^1.2.0", "debug": "^4.1.0", @@ -42,6 +43,7 @@ "emoji-regex": "^6.1.1", "express": "^4.16.4", "express-enforces-ssl": "^1.1.0", + "express-hot-shots": "^1.0.2", "express-session": "^1.15.2", "faker": "^4.1.0", "find-with-regex": "^1.1.3", @@ -57,6 +59,7 @@ "history": "^4.6.1", "hoist-non-react-statics": "^2.5.5", "host-validation": "^1.2.0", + "hot-shots": "^5.9.2", "hpp": "^0.2.2", "hsts": "^2.1.0", "imgix-core-js": "^1.2.0", diff --git a/api/yarn.lock b/api/yarn.lock index b76b33d700..7cd54e8a61 100644 --- a/api/yarn.lock +++ b/api/yarn.lock @@ -1014,10 +1014,10 @@ ajv@^6.0.1, ajv@^6.1.0, ajv@^6.5.5: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -algoliasearch@^3.31.0: - version "3.31.0" - resolved "https://registry.yarnpkg.com/algoliasearch/-/algoliasearch-3.31.0.tgz#c4083375ff02538ef50d9ec73e6a72e5e19ed96f" - integrity sha512-RJ3m8bQEitEQvWVfJa8WCTM4B9WSt0D4PPEYoqOga7Q0GAfBOqXTWeFYyDO46o085SWBSBWBInVuKyr5BIFP3A== +algoliasearch@^3.32.0: + version "3.32.0" + resolved "https://registry.yarnpkg.com/algoliasearch/-/algoliasearch-3.32.0.tgz#5818168c26ff921bd0346a919071bac928b747ce" + integrity sha512-C8oQnPTf0wPuyD2jSZwtBAPvz+lHOE7zRIPpgXGBuNt6ZNcC4omsbytG26318rT77a8h4759vmIp6n9p8iw4NA== dependencies: agentkeepalive "^2.2.0" debug "^2.6.8" @@ -1710,12 +1710,13 @@ babel-plugin-styled-components@^1.1.4: 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== +babel-plugin-styled-components@^1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/babel-plugin-styled-components/-/babel-plugin-styled-components-1.10.0.tgz#ff1f42ad2cc78c21f26b62266b8f564dbc862939" + integrity sha512-sQVKG8irFXx14ZfaK1bBePirfkacl3j8nZwSZK+ZjsbnadRHKQTbhXbe/RB1vT6Vgkz45E+V95LBq4KqdhZUNw== dependencies: "@babel/helper-annotate-as-pure" "^7.0.0" + "@babel/helper-module-imports" "^7.0.0" babel-plugin-syntax-jsx "^6.18.0" lodash "^4.17.10" @@ -2200,6 +2201,11 @@ big.js@^3.1.3: resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.2.0.tgz#a5fc298b81b9e0dca2e458824784b65c52ba588e" integrity sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q== +bignumber.js@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-1.1.1.tgz#1a415d9ac014c13256af1feed9d1a3e5717a8cf7" + integrity sha1-GkFdmsAUwTJWrx/u2dGj5XF6jPc= + binary-extensions@^1.0.0: version "1.12.0" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.12.0.tgz#c2d780f53d45bba8317a8902d4ceeaf3a6385b14" @@ -3115,6 +3121,14 @@ dasherize@2.0.0: resolved "https://registry.yarnpkg.com/dasherize/-/dasherize-2.0.0.tgz#6d809c9cd0cf7bb8952d80fc84fa13d47ddb1308" integrity sha1-bYCcnNDPe7iVLYD8hPoT1H3bEwg= +datadog-metrics@^0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/datadog-metrics/-/datadog-metrics-0.8.1.tgz#be87237109a7084193c668d80112533ef00e3f21" + integrity sha512-qTSKnddO6GxTJW9FYpmWjvvift3qfyMurDjwNjJnJhBk76pBdDhC0B5V9V+XwPdn4r42qu48kwXNuHJslXlDOA== + dependencies: + debug "3.1.0" + dogapi "1.1.0" + dataloader@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/dataloader/-/dataloader-1.4.0.tgz#bca11d867f5d3f1b9ed9f737bd15970c65dff5c8" @@ -3352,6 +3366,16 @@ dns-prefetch-control@0.1.0: resolved "https://registry.yarnpkg.com/dns-prefetch-control/-/dns-prefetch-control-0.1.0.tgz#60ddb457774e178f1f9415f0cabb0e85b0b300b2" integrity sha1-YN20V3dOF48flBXwyrsOhbCzALI= +dogapi@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/dogapi/-/dogapi-1.1.0.tgz#71a43865ad4bb4cb18bc3e13cf769971f501030a" + integrity sha1-caQ4Za1LtMsYvD4Tz3aZcfUBAwo= + dependencies: + extend "^3.0.0" + json-bigint "^0.1.4" + minimist "^1.1.1" + rc "^1.0.0" + dom-helpers@^3.3.1: version "3.4.0" resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-3.4.0.tgz#e9b369700f959f62ecde5a6babde4bccd9169af8" @@ -3894,6 +3918,14 @@ express-enforces-ssl@^1.1.0: resolved "https://registry.yarnpkg.com/express-enforces-ssl/-/express-enforces-ssl-1.1.0.tgz#cf29c6a61c5bdd802e2c7ed265a4a98e7487d1ac" integrity sha1-zynGphxb3YAuLH7SZaSpjnSH0aw= +express-hot-shots@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/express-hot-shots/-/express-hot-shots-1.0.2.tgz#570c2d5f7c18b6e2c6d3fb48a0736e92af5ddc1d" + integrity sha512-EW/HoBhpTSaO0QCwcIHSQ2M39ugKr/l2jtH4+qRSCbFAc31qLsOlFt5TGXIGUmMyyb1ffv0kiFHDbaWCd21kzA== + dependencies: + hot-shots "^5.9.2" + obj-extend "~0.1.0" + express-session@^1.15.2: version "1.15.6" resolved "https://registry.yarnpkg.com/express-session/-/express-session-1.15.6.tgz#47b4160c88f42ab70fe8a508e31cbff76757ab0a" @@ -4794,6 +4826,11 @@ hosted-git-info@^2.1.4: resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.7.1.tgz#97f236977bd6e125408930ff6de3eec6281ec047" integrity sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w== +hot-shots@^5.9.2: + version "5.9.2" + resolved "https://registry.yarnpkg.com/hot-shots/-/hot-shots-5.9.2.tgz#1cff097706f40ba2c1350d4806deebbd16a5e8c8" + integrity sha512-ruHZvHaxZRVUCoCleiwwCcjdr9A2/Y97C7oc9LpyMg9ae39blHvsJJQQ0QtMtxKX+i4lig/7/BqZBjUUZPUp3A== + hpkp@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/hpkp/-/hpkp-2.0.0.tgz#10e142264e76215a5d30c44ec43de64dee6d1672" @@ -5820,6 +5857,13 @@ jsesc@~0.5.0: resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= +json-bigint@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/json-bigint/-/json-bigint-0.1.4.tgz#b5d40b8a9009e92f157f7c079db097001830e01e" + integrity sha1-tdQLipAJ6S8Vf3wHnbCXABgw4B4= + dependencies: + bignumber.js "~1.1.1" + json-loader@^0.5.7: version "0.5.7" resolved "https://registry.yarnpkg.com/json-loader/-/json-loader-0.5.7.tgz#dca14a70235ff82f0ac9a3abeb60d337a365185d" @@ -6859,6 +6903,11 @@ oauth@0.9.x: resolved "https://registry.yarnpkg.com/oauth/-/oauth-0.9.15.tgz#bd1fefaf686c96b75475aed5196412ff60cfb9c1" integrity sha1-vR/vr2hslrdUda7VGWQS/2DPucE= +obj-extend@~0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/obj-extend/-/obj-extend-0.1.0.tgz#bb448a4775fb95eb34a781f908bbac2df23dbb5b" + integrity sha1-u0SKR3X7les0p4H5CLusLfI9u1s= + object-assign@^4, object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" @@ -7624,7 +7673,7 @@ raw-body@2.3.3: iconv-lite "0.4.23" unpipe "1.0.0" -rc@^1.0.1, rc@^1.1.6, rc@^1.2.7: +rc@^1.0.0, rc@^1.0.1, rc@^1.1.6, rc@^1.2.7: version "1.2.8" resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== diff --git a/athena/package.json b/athena/package.json index 52014ab8d6..82275ecef1 100644 --- a/athena/package.json +++ b/athena/package.json @@ -9,6 +9,7 @@ "axios": "^0.16.2", "bull": "3.3.10", "cryptr": "^3.0.0", + "datadog-metrics": "^0.8.1", "debug": "^4.1.0", "decode-uri-component": "^0.2.0", "draft-js": "^0.10.5", diff --git a/athena/yarn.lock b/athena/yarn.lock index d27e2214b9..62f56f0b03 100644 --- a/athena/yarn.lock +++ b/athena/yarn.lock @@ -51,6 +51,11 @@ base64-js@^1.0.2: resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.0.tgz#cab1e6118f051095e58b5281aea8c1cd22bfc0e3" integrity sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw== +bignumber.js@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-1.1.1.tgz#1a415d9ac014c13256af1feed9d1a3e5717a8cf7" + integrity sha1-GkFdmsAUwTJWrx/u2dGj5XF6jPc= + "bluebird@>= 3.0.1", bluebird@^3.3.4, bluebird@^3.5.0: version "3.5.3" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.3.tgz#7d01c6f9616c9a51ab0f8c549a79dfe6ec33efa7" @@ -141,7 +146,15 @@ cryptr@^3.0.0: resolved "https://registry.yarnpkg.com/cryptr/-/cryptr-3.0.0.tgz#4cdb1ac8b0b292c6ac1dcdf503bb27a05e4eba10" integrity sha512-ojvQNR6fiYVPVeRJbihzuHdJ4lU4zWa/A2heJuW54R8U51DnRBrMD7KA7gET9yPrTXkcKjntflx/wW5nohKRPQ== -debug@=3.1.0: +datadog-metrics@^0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/datadog-metrics/-/datadog-metrics-0.8.1.tgz#be87237109a7084193c668d80112533ef00e3f21" + integrity sha512-qTSKnddO6GxTJW9FYpmWjvvift3qfyMurDjwNjJnJhBk76pBdDhC0B5V9V+XwPdn4r42qu48kwXNuHJslXlDOA== + dependencies: + debug "3.1.0" + dogapi "1.1.0" + +debug@3.1.0, debug@=3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== @@ -179,6 +192,11 @@ decode-uri-component@^0.2.0: resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= +deep-extend@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== + define-properties@^1.1.1: version "1.1.3" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" @@ -191,6 +209,16 @@ denque@^1.1.0: resolved "https://registry.yarnpkg.com/denque/-/denque-1.4.0.tgz#79e2f0490195502107f24d9553f374837dabc916" integrity sha512-gh513ac7aiKrAgjiIBWZG0EASyDF9p4JMWwKA8YU5s9figrL5SRNEMT6FDynsegakuhWd1wVqTvqvqAoDxw7wQ== +dogapi@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/dogapi/-/dogapi-1.1.0.tgz#71a43865ad4bb4cb18bc3e13cf769971f501030a" + integrity sha1-caQ4Za1LtMsYvD4Tz3aZcfUBAwo= + dependencies: + extend "^3.0.0" + json-bigint "^0.1.4" + minimist "^1.1.1" + rc "^1.0.0" + draft-js@^0.10.5: version "0.10.5" resolved "https://registry.yarnpkg.com/draft-js/-/draft-js-0.10.5.tgz#bfa9beb018fe0533dbb08d6675c371a6b08fa742" @@ -241,6 +269,11 @@ events@1.1.1: resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" integrity sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ= +extend@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + faker@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/faker/-/faker-4.1.0.tgz#1e45bbbecc6774b3c195fad2835109c6d748cc3f" @@ -322,6 +355,11 @@ inherits@^2.0.1: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= +ini@~1.3.0: + version "1.3.5" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" + integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== + ioredis@3.2.2, ioredis@^3.1.4: version "3.2.2" resolved "https://registry.yarnpkg.com/ioredis/-/ioredis-3.2.2.tgz#b7d5ff3afd77bb9718bb2821329b894b9a44c00b" @@ -412,6 +450,13 @@ js-base64@^2.1.9: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== +json-bigint@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/json-bigint/-/json-bigint-0.1.4.tgz#b5d40b8a9009e92f157f7c079db097001830e01e" + integrity sha1-tdQLipAJ6S8Vf3wHnbCXABgw4B4= + dependencies: + bignumber.js "~1.1.1" + jwa@^1.1.5: version "1.1.6" resolved "https://registry.yarnpkg.com/jwa/-/jwa-1.1.6.tgz#87240e76c9808dbde18783cf2264ef4929ee50e6" @@ -540,7 +585,7 @@ minimalistic-assert@^1.0.0: resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== -minimist@^1.2.0: +minimist@^1.1.1, minimist@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= @@ -623,6 +668,16 @@ raven@^2.6.4: timed-out "4.0.1" uuid "3.3.2" +rc@^1.0.0: + version "1.2.8" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== + dependencies: + deep-extend "^0.6.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + redis-commands@1.4.0, redis-commands@^1.2.0: version "1.4.0" resolved "https://registry.yarnpkg.com/redis-commands/-/redis-commands-1.4.0.tgz#52f9cf99153efcce56a8f86af986bd04e988602f" @@ -725,6 +780,11 @@ standard-as-callback@^1.0.0: resolved "https://registry.yarnpkg.com/standard-as-callback/-/standard-as-callback-1.0.1.tgz#2e9e1e9d278d7d77580253faaec42269015e3c1d" integrity sha512-izxEITSyc7S+5oOiF/URiYaNkemPUxIndCNv66jJ548Y1TVxhBvioNMSPrZIQdaZDlhnguOdUzHA/7hJ3xFhuQ== +strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= + timed-out@4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" diff --git a/chronos/package.json b/chronos/package.json index 1c188b506b..75d3a529b5 100644 --- a/chronos/package.json +++ b/chronos/package.json @@ -5,6 +5,7 @@ "dependencies": { "aws-sdk": "^2.373.0", "bull": "^3.5.2", + "datadog-metrics": "^0.8.1", "debug": "^4.1.0", "decode-uri-component": "^0.2.0", "draft-js": "^0.10.5", diff --git a/chronos/yarn.lock b/chronos/yarn.lock index b5420eada8..9e481d7c6d 100644 --- a/chronos/yarn.lock +++ b/chronos/yarn.lock @@ -27,6 +27,11 @@ base64-js@^1.0.2: resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.0.tgz#cab1e6118f051095e58b5281aea8c1cd22bfc0e3" integrity sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw== +bignumber.js@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-1.1.1.tgz#1a415d9ac014c13256af1feed9d1a3e5717a8cf7" + integrity sha1-GkFdmsAUwTJWrx/u2dGj5XF6jPc= + "bluebird@>= 3.0.1", bluebird@^3.3.4, bluebird@^3.5.3: version "3.5.3" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.3.tgz#7d01c6f9616c9a51ab0f8c549a79dfe6ec33efa7" @@ -102,6 +107,21 @@ crypt@~0.0.1: resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b" integrity sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs= +datadog-metrics@^0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/datadog-metrics/-/datadog-metrics-0.8.1.tgz#be87237109a7084193c668d80112533ef00e3f21" + integrity sha512-qTSKnddO6GxTJW9FYpmWjvvift3qfyMurDjwNjJnJhBk76pBdDhC0B5V9V+XwPdn4r42qu48kwXNuHJslXlDOA== + dependencies: + debug "3.1.0" + dogapi "1.1.0" + +debug@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" + integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== + dependencies: + ms "2.0.0" + debug@^2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" @@ -133,6 +153,11 @@ decode-uri-component@^0.2.0: resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= +deep-extend@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== + define-properties@^1.1.1: version "1.1.3" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" @@ -145,6 +170,16 @@ denque@^1.1.0: resolved "https://registry.yarnpkg.com/denque/-/denque-1.4.0.tgz#79e2f0490195502107f24d9553f374837dabc916" integrity sha512-gh513ac7aiKrAgjiIBWZG0EASyDF9p4JMWwKA8YU5s9figrL5SRNEMT6FDynsegakuhWd1wVqTvqvqAoDxw7wQ== +dogapi@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/dogapi/-/dogapi-1.1.0.tgz#71a43865ad4bb4cb18bc3e13cf769971f501030a" + integrity sha1-caQ4Za1LtMsYvD4Tz3aZcfUBAwo= + dependencies: + extend "^3.0.0" + json-bigint "^0.1.4" + minimist "^1.1.1" + rc "^1.0.0" + draft-js@^0.10.5: version "0.10.5" resolved "https://registry.yarnpkg.com/draft-js/-/draft-js-0.10.5.tgz#bfa9beb018fe0533dbb08d6675c371a6b08fa742" @@ -166,6 +201,11 @@ events@1.1.1: resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" integrity sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ= +extend@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + faker@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/faker/-/faker-4.1.0.tgz#1e45bbbecc6774b3c195fad2835109c6d748cc3f" @@ -220,6 +260,11 @@ immutable@~3.7.4: resolved "https://registry.yarnpkg.com/immutable/-/immutable-3.7.6.tgz#13b4d3cb12befa15482a26fe1b2ebae640071e4b" integrity sha1-E7TTyxK++hVIKib+Gy665kAHHks= +ini@~1.3.0: + version "1.3.5" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" + integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== + ioredis@3.2.2, ioredis@^3.1.4: version "3.2.2" resolved "https://registry.yarnpkg.com/ioredis/-/ioredis-3.2.2.tgz#b7d5ff3afd77bb9718bb2821329b894b9a44c00b" @@ -310,6 +355,13 @@ js-base64@^2.1.9: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== +json-bigint@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/json-bigint/-/json-bigint-0.1.4.tgz#b5d40b8a9009e92f157f7c079db097001830e01e" + integrity sha1-tdQLipAJ6S8Vf3wHnbCXABgw4B4= + dependencies: + bignumber.js "~1.1.1" + json-stringify-pretty-compact@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/json-stringify-pretty-compact/-/json-stringify-pretty-compact-1.2.0.tgz#0bc316b5e6831c07041fc35612487fb4e9ab98b8" @@ -421,6 +473,11 @@ md5@^2.2.1: crypt "~0.0.1" is-buffer "~1.1.1" +minimist@^1.1.1, minimist@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" + integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= + moment-timezone@^0.5.23: version "0.5.23" resolved "https://registry.yarnpkg.com/moment-timezone/-/moment-timezone-0.5.23.tgz#7cbb00db2c14c71b19303cb47b0fb0a6d8651463" @@ -494,6 +551,16 @@ raven@^2.6.4: timed-out "4.0.1" uuid "3.3.2" +rc@^1.0.0: + version "1.2.8" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== + dependencies: + deep-extend "^0.6.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + redis-commands@1.4.0, redis-commands@^1.2.0: version "1.4.0" resolved "https://registry.yarnpkg.com/redis-commands/-/redis-commands-1.4.0.tgz#52f9cf99153efcce56a8f86af986bd04e988602f" @@ -591,6 +658,11 @@ standard-as-callback@^1.0.0: resolved "https://registry.yarnpkg.com/standard-as-callback/-/standard-as-callback-1.0.1.tgz#2e9e1e9d278d7d77580253faaec42269015e3c1d" integrity sha512-izxEITSyc7S+5oOiF/URiYaNkemPUxIndCNv66jJ548Y1TVxhBvioNMSPrZIQdaZDlhnguOdUzHA/7hJ3xFhuQ== +strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= + timed-out@4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" diff --git a/desktop/package.json b/desktop/package.json index dd5d4f510c..1d62f81233 100644 --- a/desktop/package.json +++ b/desktop/package.json @@ -18,7 +18,7 @@ "electron-window-state": "^5.0.3" }, "devDependencies": { - "electron": "^3.0.12", + "electron": "^3.0.13", "electron-builder": "^20.38.3", "nodemon": "^1.18.9", "rimraf": "^2.6.2" diff --git a/desktop/yarn.lock b/desktop/yarn.lock index 778946e047..bbf0f6d12e 100644 --- a/desktop/yarn.lock +++ b/desktop/yarn.lock @@ -823,10 +823,10 @@ electron-window-state@^5.0.3: jsonfile "^4.0.0" mkdirp "^0.5.1" -electron@^3.0.12: - version "3.0.12" - resolved "https://registry.yarnpkg.com/electron/-/electron-3.0.12.tgz#7486ff1c60e9c22d8aadaee620695c42c9ddb2ac" - integrity sha512-stvGbqYzWv5qHHtjZZgA7gET3NPGLuxs68IHTrJqsqujQfXGkhMOh8tstpXl86kBdRpzZn7GaDlTWcgeFSmsPw== +electron@^3.0.13: + version "3.0.13" + resolved "https://registry.yarnpkg.com/electron/-/electron-3.0.13.tgz#7b065a3d130c6b6379dc78d49515e03f392c1303" + integrity sha512-tfx5jFgXhCmpe6oPjcesaRj7geHqQxrJdbpseanRzL9BbyYUtsj0HoxwPAUvCx4+52P6XryBwWTvne/1eBVf9Q== dependencies: "@types/node" "^8.0.24" electron-download "^4.1.0" diff --git a/docs/workers/background-jobs.md b/docs/workers/background-jobs.md index 5e0ad41be1..0b5cd41582 100644 --- a/docs/workers/background-jobs.md +++ b/docs/workers/background-jobs.md @@ -2,7 +2,7 @@ # Background jobs -We use [`bull`](https://github.com/OptimalBits/bull) for all of our background job needs (at the moment that mostly means notification processing and emails). `bull` uses redis under the hood (see docs/setup.md for instructions on how to install redis) to store information about these jobs. +We use [`bull`](https://github.com/OptimalBits/bull) for all of our background job needs (at the moment that mostly means notification processing and emails). `bull` uses redis under the hood to store information about these jobs. (follow the instructions on [redis.io/download](https://redis.io/download) to install Redis) All of our servers and workers connect to the same redis instance, adding and taking jobs as they see fit. In development, that's your local instance. In production, that's a remote instance hosted on [compose.com](https://compose.com). Thusly, redis acts kind of like shared global state that helps our disparate processes talk to each other. diff --git a/flow-typed/npm/datadog-metrics_vx.x.x.js b/flow-typed/npm/datadog-metrics_vx.x.x.js new file mode 100644 index 0000000000..1bbb2fa429 --- /dev/null +++ b/flow-typed/npm/datadog-metrics_vx.x.x.js @@ -0,0 +1,59 @@ +// flow-typed signature: 4193c068fe558edea2fe8b024db8448c +// flow-typed version: <>/datadog-metrics_v0.8.1/flow_v0.66.0 + +/** + * This is an autogenerated libdef stub for: + * + * 'datadog-metrics' + * + * 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 'datadog-metrics' { + 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 'datadog-metrics/lib/aggregators' { + declare module.exports: any; +} + +declare module 'datadog-metrics/lib/loggers' { + declare module.exports: any; +} + +declare module 'datadog-metrics/lib/metrics' { + declare module.exports: any; +} + +declare module 'datadog-metrics/lib/reporters' { + declare module.exports: any; +} + +// Filename aliases +declare module 'datadog-metrics/index' { + declare module.exports: $Exports<'datadog-metrics'>; +} +declare module 'datadog-metrics/index.js' { + declare module.exports: $Exports<'datadog-metrics'>; +} +declare module 'datadog-metrics/lib/aggregators.js' { + declare module.exports: $Exports<'datadog-metrics/lib/aggregators'>; +} +declare module 'datadog-metrics/lib/loggers.js' { + declare module.exports: $Exports<'datadog-metrics/lib/loggers'>; +} +declare module 'datadog-metrics/lib/metrics.js' { + declare module.exports: $Exports<'datadog-metrics/lib/metrics'>; +} +declare module 'datadog-metrics/lib/reporters.js' { + declare module.exports: $Exports<'datadog-metrics/lib/reporters'>; +} diff --git a/flow-typed/npm/express-hot-shots_vx.x.x.js b/flow-typed/npm/express-hot-shots_vx.x.x.js new file mode 100644 index 0000000000..0e866fd66a --- /dev/null +++ b/flow-typed/npm/express-hot-shots_vx.x.x.js @@ -0,0 +1,53 @@ +// flow-typed signature: 1cdaa5e3b96efaeacdd3cbc4b45b40d3 +// flow-typed version: <>/express-hot-shots_vx.x.x/flow_v0.66.0 + +/** + * This is an autogenerated libdef stub for: + * + * 'express-hot-shots' + * + * 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 'express-hot-shots' { + 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 'express-hot-shots/Gruntfile' { + declare module.exports: any; +} + +declare module 'express-hot-shots/lib/express-hot-shots' { + declare module.exports: any; +} + +declare module 'express-hot-shots/test/express-hot-shots' { + declare module.exports: any; +} + +declare module 'express-hot-shots/test/utils' { + declare module.exports: any; +} + +// Filename aliases +declare module 'express-hot-shots/Gruntfile.js' { + declare module.exports: $Exports<'express-hot-shots/Gruntfile'>; +} +declare module 'express-hot-shots/lib/express-hot-shots.js' { + declare module.exports: $Exports<'express-hot-shots/lib/express-hot-shots'>; +} +declare module 'express-hot-shots/test/express-hot-shots.js' { + declare module.exports: $Exports<'express-hot-shots/test/express-hot-shots'>; +} +declare module 'express-hot-shots/test/utils.js' { + declare module.exports: $Exports<'express-hot-shots/test/utils'>; +} diff --git a/flow-typed/npm/hot-shots_vx.x.x.js b/flow-typed/npm/hot-shots_vx.x.x.js new file mode 100644 index 0000000000..c8c07c6213 --- /dev/null +++ b/flow-typed/npm/hot-shots_vx.x.x.js @@ -0,0 +1,52 @@ +// flow-typed signature: ddf4dd814629ae123ef685c9db868bef +// flow-typed version: <>/hot-shots_v5.x.x/flow_v0.66.0 + +/** + * This is an autogenerated libdef stub for: + * + * 'hot-shots' + * + * 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 'hot-shots' { + 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 'hot-shots/lib/helpers' { + declare module.exports: any; +} + +declare module 'hot-shots/lib/statsd' { + declare module.exports: any; +} + +declare module 'hot-shots/lib/statsFunctions' { + declare module.exports: any; +} + +// Filename aliases +declare module 'hot-shots/index' { + declare module.exports: $Exports<'hot-shots'>; +} +declare module 'hot-shots/index.js' { + declare module.exports: $Exports<'hot-shots'>; +} +declare module 'hot-shots/lib/helpers.js' { + declare module.exports: $Exports<'hot-shots/lib/helpers'>; +} +declare module 'hot-shots/lib/statsd.js' { + declare module.exports: $Exports<'hot-shots/lib/statsd'>; +} +declare module 'hot-shots/lib/statsFunctions.js' { + declare module.exports: $Exports<'hot-shots/lib/statsFunctions'>; +} diff --git a/hermes/package.json b/hermes/package.json index 56c20db8f5..d874036531 100644 --- a/hermes/package.json +++ b/hermes/package.json @@ -6,6 +6,7 @@ "@sendgrid/mail": "^6.3.1", "aws-sdk": "^2.373.0", "bull": "3.3.10", + "datadog-metrics": "^0.8.1", "debug": "^4.1.0", "draft-js": "^0.10.5", "escape-html": "^1.0.3", diff --git a/hermes/yarn.lock b/hermes/yarn.lock index 7e2a4b9500..8ad3e6da55 100644 --- a/hermes/yarn.lock +++ b/hermes/yarn.lock @@ -135,6 +135,11 @@ bcrypt-pbkdf@^1.0.0: dependencies: tweetnacl "^0.14.3" +bignumber.js@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-1.1.1.tgz#1a415d9ac014c13256af1feed9d1a3e5717a8cf7" + integrity sha1-GkFdmsAUwTJWrx/u2dGj5XF6jPc= + "bluebird@>= 3.0.1", bluebird@^3.3.4, bluebird@^3.5.0: version "3.5.3" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.3.tgz#7d01c6f9616c9a51ab0f8c549a79dfe6ec33efa7" @@ -245,6 +250,21 @@ dashdash@^1.12.0: dependencies: assert-plus "^1.0.0" +datadog-metrics@^0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/datadog-metrics/-/datadog-metrics-0.8.1.tgz#be87237109a7084193c668d80112533ef00e3f21" + integrity sha512-qTSKnddO6GxTJW9FYpmWjvvift3qfyMurDjwNjJnJhBk76pBdDhC0B5V9V+XwPdn4r42qu48kwXNuHJslXlDOA== + dependencies: + debug "3.1.0" + dogapi "1.1.0" + +debug@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" + integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== + dependencies: + ms "2.0.0" + debug@^2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" @@ -271,6 +291,11 @@ debuglog@^1.0.0: resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" integrity sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI= +deep-extend@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== + deepmerge@^2.1.1: version "2.2.1" resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-2.2.1.tgz#5d3ff22a01c00f645405a2fbc17d0778a1801170" @@ -293,6 +318,16 @@ denque@^1.1.0: resolved "https://registry.yarnpkg.com/denque/-/denque-1.4.0.tgz#79e2f0490195502107f24d9553f374837dabc916" integrity sha512-gh513ac7aiKrAgjiIBWZG0EASyDF9p4JMWwKA8YU5s9figrL5SRNEMT6FDynsegakuhWd1wVqTvqvqAoDxw7wQ== +dogapi@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/dogapi/-/dogapi-1.1.0.tgz#71a43865ad4bb4cb18bc3e13cf769971f501030a" + integrity sha1-caQ4Za1LtMsYvD4Tz3aZcfUBAwo= + dependencies: + extend "^3.0.0" + json-bigint "^0.1.4" + minimist "^1.1.1" + rc "^1.0.0" + draft-js@^0.10.5: version "0.10.5" resolved "https://registry.yarnpkg.com/draft-js/-/draft-js-0.10.5.tgz#bfa9beb018fe0533dbb08d6675c371a6b08fa742" @@ -339,7 +374,7 @@ events@1.1.1: resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" integrity sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ= -extend@~3.0.2: +extend@^3.0.0, extend@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== @@ -457,6 +492,11 @@ immutable@~3.7.4: resolved "https://registry.yarnpkg.com/immutable/-/immutable-3.7.6.tgz#13b4d3cb12befa15482a26fe1b2ebae640071e4b" integrity sha1-E7TTyxK++hVIKib+Gy665kAHHks= +ini@~1.3.0: + version "1.3.5" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" + integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== + ioredis@3.2.2, ioredis@^3.1.4: version "3.2.2" resolved "https://registry.yarnpkg.com/ioredis/-/ioredis-3.2.2.tgz#b7d5ff3afd77bb9718bb2821329b894b9a44c00b" @@ -557,6 +597,13 @@ jsbn@~0.1.0: resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= +json-bigint@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/json-bigint/-/json-bigint-0.1.4.tgz#b5d40b8a9009e92f157f7c079db097001830e01e" + integrity sha1-tdQLipAJ6S8Vf3wHnbCXABgw4B4= + dependencies: + bignumber.js "~1.1.1" + json-schema-traverse@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" @@ -772,6 +819,11 @@ mime-types@^2.1.12, mime-types@~2.1.19: dependencies: mime-db "~1.37.0" +minimist@^1.1.1, minimist@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" + integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= + moment-timezone@^0.5.23: version "0.5.23" resolved "https://registry.yarnpkg.com/moment-timezone/-/moment-timezone-0.5.23.tgz#7cbb00db2c14c71b19303cb47b0fb0a6d8651463" @@ -880,6 +932,16 @@ raven@^2.6.4: timed-out "4.0.1" uuid "3.3.2" +rc@^1.0.0: + version "1.2.8" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== + dependencies: + deep-extend "^0.6.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + redis-commands@1.4.0, redis-commands@^1.2.0: version "1.4.0" resolved "https://registry.yarnpkg.com/redis-commands/-/redis-commands-1.4.0.tgz#52f9cf99153efcce56a8f86af986bd04e988602f" @@ -1023,6 +1085,11 @@ standard-as-callback@^1.0.0: resolved "https://registry.yarnpkg.com/standard-as-callback/-/standard-as-callback-1.0.1.tgz#2e9e1e9d278d7d77580253faaec42269015e3c1d" integrity sha512-izxEITSyc7S+5oOiF/URiYaNkemPUxIndCNv66jJ548Y1TVxhBvioNMSPrZIQdaZDlhnguOdUzHA/7hJ3xFhuQ== +strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= + supports-color@^5.3.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" diff --git a/hyperion/index.js b/hyperion/index.js index fca4d8c7f5..aec8ad3df4 100644 --- a/hyperion/index.js +++ b/hyperion/index.js @@ -5,6 +5,7 @@ debug('Hyperion starting...'); debug('logging with debug enabled'); require('isomorphic-fetch'); // prevent https://github.com/withspectrum/spectrum/issues/3032 import fs from 'fs'; +import statsd from 'shared/middlewares/statsd'; import express from 'express'; import Loadable from 'react-loadable'; import path from 'path'; @@ -20,6 +21,9 @@ const ONE_HOUR = 3600; const app = express(); +// Instantiate the statsd middleware as soon as possible to get accurate time tracking +app.use(statsd); + // Trust the now proxy app.set('trust proxy', true); @@ -28,6 +32,9 @@ app.use(toobusy); // Security middleware. addSecurityMiddleware(app, { enableNonce: true, enableCSP: true }); +import bodyParser from 'body-parser'; +app.use(bodyParser.json()); + if (process.env.NODE_ENV === 'development') { const logging = require('shared/middlewares/logging'); app.use(logging); @@ -82,9 +89,6 @@ if (process.env.NODE_ENV === 'development') { import cookieParser from 'cookie-parser'; app.use(cookieParser()); -import bodyParser from 'body-parser'; -app.use(bodyParser.json()); - import session from 'shared/middlewares/session'; app.use(session); diff --git a/mercury/package.json b/mercury/package.json index 2b33ceda30..aeb0c229bc 100644 --- a/mercury/package.json +++ b/mercury/package.json @@ -4,6 +4,7 @@ }, "dependencies": { "bull": "^3.5.2", + "datadog-metrics": "^0.8.1", "debug": "^4.1.0", "ioredis": "3.2.2", "now-env": "^3.1.0", diff --git a/mercury/yarn.lock b/mercury/yarn.lock index f000be25a0..17b6f3e47b 100644 --- a/mercury/yarn.lock +++ b/mercury/yarn.lock @@ -2,6 +2,11 @@ # yarn lockfile v1 +bignumber.js@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-1.1.1.tgz#1a415d9ac014c13256af1feed9d1a3e5717a8cf7" + integrity sha1-GkFdmsAUwTJWrx/u2dGj5XF6jPc= + "bluebird@>= 3.0.1", bluebird@^3.3.4, bluebird@^3.5.3: version "3.5.3" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.3.tgz#7d01c6f9616c9a51ab0f8c549a79dfe6ec33efa7" @@ -48,6 +53,21 @@ crypt@~0.0.1: resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b" integrity sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs= +datadog-metrics@^0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/datadog-metrics/-/datadog-metrics-0.8.1.tgz#be87237109a7084193c668d80112533ef00e3f21" + integrity sha512-qTSKnddO6GxTJW9FYpmWjvvift3qfyMurDjwNjJnJhBk76pBdDhC0B5V9V+XwPdn4r42qu48kwXNuHJslXlDOA== + dependencies: + debug "3.1.0" + dogapi "1.1.0" + +debug@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" + integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== + dependencies: + ms "2.0.0" + debug@^2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" @@ -74,6 +94,11 @@ debuglog@^1.0.0: resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" integrity sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI= +deep-extend@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== + define-properties@^1.1.1: version "1.1.3" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" @@ -86,11 +111,31 @@ denque@^1.1.0: resolved "https://registry.yarnpkg.com/denque/-/denque-1.4.0.tgz#79e2f0490195502107f24d9553f374837dabc916" integrity sha512-gh513ac7aiKrAgjiIBWZG0EASyDF9p4JMWwKA8YU5s9figrL5SRNEMT6FDynsegakuhWd1wVqTvqvqAoDxw7wQ== +dogapi@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/dogapi/-/dogapi-1.1.0.tgz#71a43865ad4bb4cb18bc3e13cf769971f501030a" + integrity sha1-caQ4Za1LtMsYvD4Tz3aZcfUBAwo= + dependencies: + extend "^3.0.0" + json-bigint "^0.1.4" + minimist "^1.1.1" + rc "^1.0.0" + +extend@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + flexbuffer@0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/flexbuffer/-/flexbuffer-0.0.6.tgz#039fdf23f8823e440c38f3277e6fef1174215b30" integrity sha1-A5/fI/iCPkQMOPMnfm/vEXQhWzA= +ini@~1.3.0: + version "1.3.5" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" + integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== + ioredis@3.2.2, ioredis@^3.1.4: version "3.2.2" resolved "https://registry.yarnpkg.com/ioredis/-/ioredis-3.2.2.tgz#b7d5ff3afd77bb9718bb2821329b894b9a44c00b" @@ -148,6 +193,13 @@ is-nan@^1.2.1: dependencies: define-properties "^1.1.1" +json-bigint@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/json-bigint/-/json-bigint-0.1.4.tgz#b5d40b8a9009e92f157f7c079db097001830e01e" + integrity sha1-tdQLipAJ6S8Vf3wHnbCXABgw4B4= + dependencies: + bignumber.js "~1.1.1" + json-stringify-pretty-compact@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/json-stringify-pretty-compact/-/json-stringify-pretty-compact-1.2.0.tgz#0bc316b5e6831c07041fc35612487fb4e9ab98b8" @@ -247,6 +299,11 @@ md5@^2.2.1: crypt "~0.0.1" is-buffer "~1.1.1" +minimist@^1.1.1, minimist@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" + integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= + moment-timezone@^0.5.23: version "0.5.23" resolved "https://registry.yarnpkg.com/moment-timezone/-/moment-timezone-0.5.23.tgz#7cbb00db2c14c71b19303cb47b0fb0a6d8651463" @@ -290,6 +347,16 @@ raven@^2.6.4: timed-out "4.0.1" uuid "3.3.2" +rc@^1.0.0: + version "1.2.8" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== + dependencies: + deep-extend "^0.6.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + redis-commands@1.4.0, redis-commands@^1.2.0: version "1.4.0" resolved "https://registry.yarnpkg.com/redis-commands/-/redis-commands-1.4.0.tgz#52f9cf99153efcce56a8f86af986bd04e988602f" @@ -360,6 +427,11 @@ standard-as-callback@^1.0.0: resolved "https://registry.yarnpkg.com/standard-as-callback/-/standard-as-callback-1.0.1.tgz#2e9e1e9d278d7d77580253faaec42269015e3c1d" integrity sha512-izxEITSyc7S+5oOiF/URiYaNkemPUxIndCNv66jJ548Y1TVxhBvioNMSPrZIQdaZDlhnguOdUzHA/7hJ3xFhuQ== +strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= + timed-out@4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" diff --git a/now.json b/now.json index 99007661c7..243c5a63ce 100644 --- a/now.json +++ b/now.json @@ -50,6 +50,7 @@ "AMPLITUDE_API_KEY_DEVELOPMENT": "@amplitude-api-key-development", "ENCRYPTION_KEY": "@encryption-key", "IMGIX_PROXY_SECURITY_KEY": "@imgix-proxy-security-key", - "IMGIX_SECURITY_KEY": "@imgix-security-key" + "IMGIX_SECURITY_KEY": "@imgix-security-key", + "DATADOG_API_KEY": "@datadog-api-key" } } \ No newline at end of file diff --git a/package.json b/package.json index 59ac5f8e33..f617c42f37 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "Spectrum", - "version": "2.5.4", + "version": "2.5.5", "license": "BSD-3-Clause", "devDependencies": { "@babel/preset-flow": "^7.0.0", @@ -53,7 +53,7 @@ "algoliasearch": "^3.30.0", "amplitude": "^3.5.0", "amplitude-js": "^4.4.0", - "apollo-cache-inmemory": "^1.3.11", + "apollo-cache-inmemory": "1.3.12", "apollo-client": "^2.4.7", "apollo-link": "^1.2.4", "apollo-link-http": "^1.5.7", @@ -78,6 +78,7 @@ "cryptr": "^3.0.0", "css.escape": "^1.5.1", "cypress": "^3.1.3", + "datadog-metrics": "^0.8.1", "dataloader": "^1.4.0", "debounce": "^1.2.0", "debug": "^4.1.0", @@ -100,6 +101,7 @@ "eslint-plugin-standard": "^3.1.0", "express": "^4.16.4", "express-enforces-ssl": "^1.1.0", + "express-hot-shots": "^1.0.2", "express-session": "^1.15.2", "faker": "^4.1.0", "find-with-regex": "^1.0.2", @@ -116,6 +118,7 @@ "history": "^4.6.1", "hoist-non-react-statics": "^2.3.1", "host-validation": "^1.1.0", + "hot-shots": "^5.9.2", "hpp": "^0.2.2", "hsts": "^2.1.0", "idx": "^2.4.0", diff --git a/shared/db/db.js b/shared/db/db.js index 1fc5dfbd99..97621d9e33 100644 --- a/shared/db/db.js +++ b/shared/db/db.js @@ -4,14 +4,16 @@ */ import fs from 'fs'; import path from 'path'; +import inspect from 'rethinkdb-inspector'; +import { statsd } from '../statsd'; const IS_PROD = !process.env.FORCE_DEV && process.env.NODE_ENV === 'production'; const DEFAULT_CONFIG = { // Connect to the test database when, well, testing db: !process.env.TEST_DB ? 'spectrum' : 'testing', - max: 1000, // Maximum number of connections, default is 1000 - buffer: 50, // Minimum number of connections open at any given moment, default is 50 + max: 20, // Maximum number of connections, default is 1000 + buffer: 20, // 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 }; @@ -49,24 +51,31 @@ const config = IS_PROD ...DEFAULT_CONFIG, }; -var r = require('rethinkhaberdashery')(config); +let r = require('rethinkhaberdashery')(config); +const poolMaster = r.getPoolMaster(); + +poolMaster.on('queueing', size => { + statsd.gauge('db.query_queue.size', size); +}); // Exit the process on unhealthy db in test env if (process.env.TEST_DB) { - r.getPoolMaster().on('healthy', healthy => { + poolMaster.on('healthy', healthy => { if (!healthy) { process.exit(1); } }); } -if (process.env.NODE_ENV === 'development' && process.env.TRACK_DB_PERF) { - const fs = require('fs'); - const inspect = require('rethinkdb-inspector'); - const queries = []; - inspect(r, { - onQueryComplete: (query, { size, time }) => { - if (query.indexOf('.changes') > -1) return; +const queries = []; +inspect(r, { + onQueryComplete: (query, { size, time }) => { + if (query.indexOf('.changes') > -1) return; + statsd.increment('db.queries.count'); + statsd.histogram('db.queries.response_time', time); + statsd.histogram('db.queries.response_size', size); + // In development write out a file of the most expensive queries + if (process.env.NODE_ENV === 'development' && process.env.TRACK_DB_PERF) { queries.push({ query, time, size }); fs.writeFileSync( 'queries-by-time.js', @@ -76,8 +85,8 @@ if (process.env.NODE_ENV === 'development' && process.env.TRACK_DB_PERF) { 'queries-by-response-size.js', JSON.stringify(queries.sort((a, b) => b.size - a.size), null, 2) ); - }, - }); -} + } + }, +}); module.exports = { db: r }; diff --git a/shared/middlewares/logging.js b/shared/middlewares/logging.js index 21a524a98f..05bff05c12 100644 --- a/shared/middlewares/logging.js +++ b/shared/middlewares/logging.js @@ -7,7 +7,7 @@ module.exports = ( res: express$Response, next: express$NextFunction ) => { - if (req.body.operationName) { + if (req.body && req.body.operationName) { debug(`requesting ${req.url}: ${req.body.operationName}`); } else { debug(`requesting ${req.url}`); diff --git a/shared/middlewares/statsd.js b/shared/middlewares/statsd.js new file mode 100644 index 0000000000..c9a0e13615 --- /dev/null +++ b/shared/middlewares/statsd.js @@ -0,0 +1,19 @@ +// @flow +import statsdMiddleware from 'express-hot-shots'; +import { statsd } from '../statsd'; + +const middleware = statsdMiddleware({ + client: statsd, +}); + +export default ( + req: express$Request, + res: express$Response, + next: express$NextFunction +) => { + // Set a sensible default req.statsdKey, which is what will be shown in the DataDog UI. Example key: + // hyperion.http.get + // $FlowFixMe + req.statsdKey = `http.${req.method.toLowerCase() || 'unknown_method'}`; + return middleware(req, res, next); +}; diff --git a/shared/middlewares/toobusy.js b/shared/middlewares/toobusy.js index 8424d786c0..243de242db 100644 --- a/shared/middlewares/toobusy.js +++ b/shared/middlewares/toobusy.js @@ -8,14 +8,13 @@ export default ( res: express$Response | http$ServerResponse, next: express$NextFunction | (() => void) ) => { - next(); // // Don't send 503s in testing, that's dumb, just wait it out - // if (process.env.NODE_ENV !== 'testing' && !process.env.TEST_DB && toobusy()) { - // res.statusCode = 503; - // res.end( - // 'It looks like Spectrum is very busy right now, please try again in a minute.' - // ); - // } else { - // next(); - // } + if (process.env.NODE_ENV !== 'testing' && !process.env.TEST_DB && toobusy()) { + res.statusCode = 503; + res.end( + 'It looks like Spectrum is very busy right now, please try again in a minute.' + ); + } else { + next(); + } }; diff --git a/shared/statsd.js b/shared/statsd.js new file mode 100644 index 0000000000..091289a051 --- /dev/null +++ b/shared/statsd.js @@ -0,0 +1,100 @@ +// @flow +const os = require('os'); +const debug = require('debug')('shared:middlewares:statsd'); + +type Tags = { + [key: string]: string, +}; + +const stringify = (obj?: { [key: string]: string }): Array => { + if (!obj) return []; + return Object.keys(obj).reduce((arr, key) => { + // $FlowFixMe + return arr.concat([`${key}:${obj[key]}`]); + }, []); +}; + +const log = ( + name: string, + key: string, + value?: number, + tags?: Tags, + timestamp?: number +) => { + let stringTags; + if (!tags && typeof value !== 'number') { + tags = value; + value = undefined; + } + if (tags) { + if (Array.isArray(tags)) { + stringTags = tags.join(','); + } else { + stringTags = stringify(tags).join(','); + } + } + debug( + `${name}: ${key}${value !== undefined ? `:${value}` : ''}${ + stringTags ? `#${stringTags}` : '' + }` + ); +}; + +let counts = {}; +export let statsd = { + histogram: (key: string, value: number, tags?: Tags, timestamp?: number) => { + log('histogram', key, value, tags, timestamp); + }, + timing: (key: string, value: number, tags?: Tags, timestamp?: number) => { + log('timing', key, value, tags, timestamp); + }, + increment: (key: string, value?: number, tags?: Tags, timestamp?: number) => { + if (!counts[key]) counts[key] = 0; + counts[key] += typeof value === 'number' ? value : 1; + log( + 'increment', + key, + counts[key], + tags || (typeof value !== 'number' && value) || undefined, + timestamp + ); + }, + gauge: (key: string, value: number, tags?: Tags, timestamp?: number) => { + log('gauge', key, value, tags, timestamp); + }, +}; +if ( + !process.env.DATADOG_API_KEY || + process.env.DATADOG_API_KEY === 'undefined' +) { + console.warn('No DATADOG_API_KEY provided, not tracking metrics.'); +} else { + console.warn('Tracking metrics to DataDog.'); + const metrics = require('datadog-metrics'); + metrics.init({ + defaultTags: [ + `server:${process.env.SENTRY_NAME || 'unknown_server'}`, + `hostname: ${os.hostname() || 'unknown_instance_hostname'}`, + ], + }); + + // This is necessary for express-hot-shots to work + const handleObjectTags = method => { + const original = metrics[method]; + metrics[method] = (key, val, tags, timestamp) => { + return original.call( + metrics, + key, + val, + Array.isArray(tags) ? tags : stringify(tags), + timestamp + ); + }; + }; + handleObjectTags('histogram'); + handleObjectTags('gauge'); + handleObjectTags('increment'); + metrics.timing = (...args) => metrics.histogram.call(metrics, ...args); + + statsd = metrics; +} diff --git a/src/components/rich-text-editor/Embed.js b/src/components/rich-text-editor/Embed.js index 3948f76a41..fbe8adb761 100644 --- a/src/components/rich-text-editor/Embed.js +++ b/src/components/rich-text-editor/Embed.js @@ -11,6 +11,7 @@ import { YOUTUBE_URLS, VIMEO_URLS, CODEPEN_URLS, + CODESANDBOX_URLS, } from '../../helpers/regexps'; import addProtocolToString from 'shared/normalize-url'; @@ -82,6 +83,14 @@ export const parseEmbedUrl = incomingUrl => { }; } + const isCodeSandboxUrl = url.match(CODESANDBOX_URLS); + if (isCodeSandboxUrl) { + return { + url, + height: 500, + }; + } + if (!isURL(url)) return null; return { diff --git a/src/helpers/regexps.js b/src/helpers/regexps.js index 5ffa993954..7a7829f290 100644 --- a/src/helpers/regexps.js +++ b/src/helpers/regexps.js @@ -3,7 +3,7 @@ export const URLS = /https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,4 // eslint-disable-next-line export const FIGMA_URLS = /https:\/\/([w.-]+.)?figma.com\/(file|proto)\/([0-9a-zA-Z]{22,128})(?:\/.*)?$/gi; // eslint-disable-next-line -export const YOUTUBE_URLS = /(?:[?&]v=|\/embed\/|\/1\/|\/v\/|https:\/\/(?:www\.)?youtu\.be\/)([^&\n?#]+)/gi; +export const YOUTUBE_URLS = /http(?:s?):\/\/(?:www\.)?youtu(?:be\.com\/watch\?v=|\.be\/)([\w\-\_]*)(&(amp;)?‌​[\w\?‌​=]*)?/gi; // eslint-disable-next-line export const VIMEO_URLS = /\/\/(?:www\.)?vimeo.com\/([0-9a-z\-_]+)/gi; // eslint-disable-next-line @@ -13,4 +13,6 @@ export const FRAMER_URLS = /(https?:\/\/(.+?\.)?framer\.cloud(\/[A-Za-z0-9\-\._~ // eslint-disable-next-line export const CODEPEN_URLS = /(https?:\/\/)?(.+?\.)?codepen\.io(\/[A-Za-z0-9\-\._~:\/\?#\[\]@!$&'\(\)\*\+,;\=]*)?/gi; // eslint-disable-next-line +export const CODESANDBOX_URLS = /(https?:\/\/)?(.+?\.)?codesandbox\.io(\/[A-Za-z0-9\-\._~:\/\?#\[\]@!$&'\(\)\*\+,;\=]*)?/gi; +// eslint-disable-next-line export const ENDS_IN_WHITESPACE = /(\s|\n)$/; diff --git a/src/views/directMessages/containers/newThread.js b/src/views/directMessages/containers/newThread.js index 6bb95fcfab..fe7d04cdd6 100644 --- a/src/views/directMessages/containers/newThread.js +++ b/src/views/directMessages/containers/newThread.js @@ -20,6 +20,7 @@ import { addToastWithTimeout } from '../../../actions/toasts'; import { clearDirectMessagesComposer } from '../../../actions/directMessageThreads'; import createDirectMessageThreadMutation from 'shared/graphql/mutations/directMessageThread/createDirectMessageThread'; import type { Dispatch } from 'redux'; +import { withCurrentUser } from 'src/components/withCurrentUser'; import { ComposerInputWrapper, Grow, @@ -866,6 +867,7 @@ export default compose( withApollo, withRouter, createDirectMessageThreadMutation, + withCurrentUser, // $FlowIssue connect(mapStateToProps) )(NewThread); diff --git a/src/views/explore/collections.js b/src/views/explore/collections.js index 02eefaff22..6e2aa7b365 100644 --- a/src/views/explore/collections.js +++ b/src/views/explore/collections.js @@ -5,6 +5,7 @@ export const collections = [ communities: [ 'spectrum', 'zeit', + 'codesandbox', 'codepen', 'next-js', 'figma', @@ -77,6 +78,7 @@ export const collections = [ 'react', 'next-js', 'node', + 'codesandbox', 'vue-js', 'angular', 'ember-js', diff --git a/vulcan/package.json b/vulcan/package.json index 2d884c8456..2c5d822b6e 100644 --- a/vulcan/package.json +++ b/vulcan/package.json @@ -3,9 +3,10 @@ "start": "NODE_ENV=production node main.js" }, "dependencies": { - "algoliasearch": "^3.31.0", + "algoliasearch": "^3.32.0", "aws-sdk": "^2.373.0", "bull": "^3.5.2", + "datadog-metrics": "^0.8.1", "debug": "^4.1.0", "draft-js": "^0.10.3", "emoji-regex": "^6.1.1", diff --git a/vulcan/yarn.lock b/vulcan/yarn.lock index 8d5a1e42b2..672e20cae7 100644 --- a/vulcan/yarn.lock +++ b/vulcan/yarn.lock @@ -7,10 +7,10 @@ agentkeepalive@^2.2.0: resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-2.2.0.tgz#c5d1bd4b129008f1163f236f86e5faea2026e2ef" integrity sha1-xdG9SxKQCPEWPyNvhuX66iAm4u8= -algoliasearch@^3.31.0: - version "3.31.0" - resolved "https://registry.yarnpkg.com/algoliasearch/-/algoliasearch-3.31.0.tgz#c4083375ff02538ef50d9ec73e6a72e5e19ed96f" - integrity sha512-RJ3m8bQEitEQvWVfJa8WCTM4B9WSt0D4PPEYoqOga7Q0GAfBOqXTWeFYyDO46o085SWBSBWBInVuKyr5BIFP3A== +algoliasearch@^3.32.0: + version "3.32.0" + resolved "https://registry.yarnpkg.com/algoliasearch/-/algoliasearch-3.32.0.tgz#5818168c26ff921bd0346a919071bac928b747ce" + integrity sha512-C8oQnPTf0wPuyD2jSZwtBAPvz+lHOE7zRIPpgXGBuNt6ZNcC4omsbytG26318rT77a8h4759vmIp6n9p8iw4NA== dependencies: agentkeepalive "^2.2.0" debug "^2.6.8" @@ -61,6 +61,11 @@ base64-js@^1.0.2: resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.0.tgz#cab1e6118f051095e58b5281aea8c1cd22bfc0e3" integrity sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw== +bignumber.js@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-1.1.1.tgz#1a415d9ac014c13256af1feed9d1a3e5717a8cf7" + integrity sha1-GkFdmsAUwTJWrx/u2dGj5XF6jPc= + "bluebird@>= 3.0.1", bluebird@^3.3.4, bluebird@^3.5.3: version "3.5.3" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.3.tgz#7d01c6f9616c9a51ab0f8c549a79dfe6ec33efa7" @@ -126,6 +131,21 @@ crypt@~0.0.1: resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b" integrity sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs= +datadog-metrics@^0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/datadog-metrics/-/datadog-metrics-0.8.1.tgz#be87237109a7084193c668d80112533ef00e3f21" + integrity sha512-qTSKnddO6GxTJW9FYpmWjvvift3qfyMurDjwNjJnJhBk76pBdDhC0B5V9V+XwPdn4r42qu48kwXNuHJslXlDOA== + dependencies: + debug "3.1.0" + dogapi "1.1.0" + +debug@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" + integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== + dependencies: + ms "2.0.0" + debug@^2.6.8, debug@^2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" @@ -152,6 +172,11 @@ debuglog@^1.0.0: resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" integrity sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI= +deep-extend@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== + define-properties@^1.1.1: version "1.1.3" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" @@ -164,6 +189,16 @@ denque@^1.1.0: resolved "https://registry.yarnpkg.com/denque/-/denque-1.4.0.tgz#79e2f0490195502107f24d9553f374837dabc916" integrity sha512-gh513ac7aiKrAgjiIBWZG0EASyDF9p4JMWwKA8YU5s9figrL5SRNEMT6FDynsegakuhWd1wVqTvqvqAoDxw7wQ== +dogapi@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/dogapi/-/dogapi-1.1.0.tgz#71a43865ad4bb4cb18bc3e13cf769971f501030a" + integrity sha1-caQ4Za1LtMsYvD4Tz3aZcfUBAwo= + dependencies: + extend "^3.0.0" + json-bigint "^0.1.4" + minimist "^1.1.1" + rc "^1.0.0" + dom-walk@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.1.tgz#672226dc74c8f799ad35307df936aba11acd6018" @@ -213,6 +248,11 @@ events@1.1.1, events@^1.1.0: resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" integrity sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ= +extend@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + faker@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/faker/-/faker-4.1.0.tgz#1e45bbbecc6774b3c195fad2835109c6d748cc3f" @@ -276,6 +316,11 @@ inherits@^2.0.1: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= +ini@~1.3.0: + version "1.3.5" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" + integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== + ioredis@3.2.2, ioredis@^3.1.4: version "3.2.2" resolved "https://registry.yarnpkg.com/ioredis/-/ioredis-3.2.2.tgz#b7d5ff3afd77bb9718bb2821329b894b9a44c00b" @@ -366,6 +411,13 @@ jmespath@0.15.0: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== +json-bigint@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/json-bigint/-/json-bigint-0.1.4.tgz#b5d40b8a9009e92f157f7c079db097001830e01e" + integrity sha1-tdQLipAJ6S8Vf3wHnbCXABgw4B4= + dependencies: + bignumber.js "~1.1.1" + json-stringify-pretty-compact@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/json-stringify-pretty-compact/-/json-stringify-pretty-compact-1.2.0.tgz#0bc316b5e6831c07041fc35612487fb4e9ab98b8" @@ -489,6 +541,11 @@ min-document@^2.19.0: dependencies: dom-walk "^0.1.0" +minimist@^1.1.1, minimist@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" + integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= + moment-timezone@^0.5.23: version "0.5.23" resolved "https://registry.yarnpkg.com/moment-timezone/-/moment-timezone-0.5.23.tgz#7cbb00db2c14c71b19303cb47b0fb0a6d8651463" @@ -577,6 +634,16 @@ raven@^2.6.4: timed-out "4.0.1" uuid "3.3.2" +rc@^1.0.0: + version "1.2.8" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== + dependencies: + deep-extend "^0.6.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + redis-commands@1.4.0, redis-commands@^1.2.0: version "1.4.0" resolved "https://registry.yarnpkg.com/redis-commands/-/redis-commands-1.4.0.tgz#52f9cf99153efcce56a8f86af986bd04e988602f" @@ -703,6 +770,11 @@ stopword@^0.1.13: resolved "https://registry.yarnpkg.com/stopword/-/stopword-0.1.13.tgz#92b26491c443b1a8d9709142ad64ae1af10cea55" integrity sha512-WteqDiQpRyn2yBAm1pwbkXn+SMa8L+WDesd33ovgs0JoheFcrrazMSet4P9LoTRteuUoqVxtEIwEKVZ/z/WHKg== +strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= + through@~2.3.4: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" diff --git a/yarn.lock b/yarn.lock index d66d5baf9c..85031d3130 100644 --- a/yarn.lock +++ b/yarn.lock @@ -59,12 +59,12 @@ source-map "^0.5.0" trim-right "^1.0.1" -"@babel/generator@^7.0.0", "@babel/generator@^7.1.6": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.2.0.tgz#eaf3821fa0301d9d4aef88e63d4bcc19b73ba16c" - integrity sha512-BA75MVfRlFQG2EZgFYIwyT1r6xSkwfP2bdkY/kLZusEYWiJs4xCowab/alaEaT0wSvmVuXGqiefeBlP+7V1yKg== +"@babel/generator@^7.0.0", "@babel/generator@^7.2.2": + version "7.2.2" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.2.2.tgz#18c816c70962640eab42fe8cae5f3947a5c65ccc" + integrity sha512-I4o675J/iS8k+P38dvJ3IBGqObLXyQLTxtrR4u9cSUJOURvafeEWb/pFMOTwtNrmq73mJzyF6ueTbO1BtN0Zeg== dependencies: - "@babel/types" "^7.2.0" + "@babel/types" "^7.2.2" jsesc "^2.5.1" lodash "^4.17.10" source-map "^0.5.0" @@ -173,15 +173,15 @@ "@babel/types" "^7.0.0" "@babel/helper-module-transforms@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.1.0.tgz#470d4f9676d9fad50b324cdcce5fbabbc3da5787" - integrity sha512-0JZRd2yhawo79Rcm4w0LwSMILFmFXjugG3yqf+P/UsKsRS1mJCmMwwlHDlMg7Avr9LrvSpp4ZSULO9r8jpCzcw== + version "7.2.2" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.2.2.tgz#ab2f8e8d231409f8370c883d20c335190284b963" + integrity sha512-YRD7I6Wsv+IHuTPkAmAS4HhY0dkPobgLftHp0cRGZSdrRvmZY8rFvae/GVu3bD00qscuvK3WPHB3YdNpBXUqrA== dependencies: "@babel/helper-module-imports" "^7.0.0" "@babel/helper-simple-access" "^7.1.0" "@babel/helper-split-export-declaration" "^7.0.0" - "@babel/template" "^7.1.0" - "@babel/types" "^7.0.0" + "@babel/template" "^7.2.2" + "@babel/types" "^7.2.2" lodash "^4.17.10" "@babel/helper-optimise-call-expression@^7.0.0": @@ -283,10 +283,10 @@ esutils "^2.0.2" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.1.2", "@babel/parser@^7.1.6": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.2.0.tgz#02d01dbc330b6cbf36b76ac93c50752c69027065" - integrity sha512-M74+GvK4hn1eejD9lZ7967qAwvqTZayQa3g10ag4s9uewgR7TKjeaT0YMyoq+gVfKYABiWZ4MQD701/t5e1Jhg== +"@babel/parser@^7.1.0", "@babel/parser@^7.2.2": + version "7.2.2" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.2.2.tgz#37ebdbc88a2e1ebc6c8dd3d35ea9436e3e39e477" + integrity sha512-UNTmQ5cSLDeBGBl+s7JeowkqIHgmFAGBnLDdIzFmUNSuS5JF0XBcN59jsh/vJO/YjfsBqMxhMjoFGmNExmf0FA== "@babel/plugin-proposal-async-generator-functions@^7.1.0": version "7.2.0" @@ -431,9 +431,9 @@ lodash "^4.17.10" "@babel/plugin-transform-classes@^7.1.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.2.0.tgz#374f8876075d7d21fea55aeb5c53561259163f96" - integrity sha512-aPCEkrhJYebDXcGTAP+cdUENkH7zqOlgbKwLbghjjHpJRJBWM/FSlCjMoPGA8oUdiMfOrk3+8EFPLLb5r7zj2w== + version "7.2.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.2.2.tgz#6c90542f210ee975aa2aa8c8b5af7fa73a126953" + integrity sha512-gEZvgTy1VtcDOaQty1l10T3jQmJKlNVxLDCs+3rCVPr6nMkODLELxViq5X9l+rfxbie3XrfrMCYYY6eX3aOcOQ== dependencies: "@babel/helper-annotate-as-pure" "^7.0.0" "@babel/helper-define-map" "^7.1.0" @@ -626,9 +626,9 @@ "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-transform-spread@^7.0.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.2.0.tgz#0c76c12a3b5826130078ee8ec84a7a8e4afd79c4" - integrity sha512-7TtPIdwjS/i5ZBlNiQePQCovDh9pAhVbp/nGVRBZuUdBiVRThyyLend3OHobc0G+RLCPPAN70+z/MAMhsgJd/A== + version "7.2.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.2.2.tgz#3103a9abe22f742b6d406ecd3cd49b774919b406" + integrity sha512-KWfky/58vubwtS0hLqEnrWJjsMGaOeSBn90Ezn5Jeg9Z8KKHmELbP1yGylMlm5N6TPKeY9A2+UaSYLdxahg01w== dependencies: "@babel/helper-plugin-utils" "^7.0.0" @@ -754,14 +754,14 @@ babylon "7.0.0-beta.44" lodash "^4.2.0" -"@babel/template@^7.1.0", "@babel/template@^7.1.2": - version "7.1.2" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.1.2.tgz#090484a574fef5a2d2d7726a674eceda5c5b5644" - integrity sha512-SY1MmplssORfFiLDcOETrW7fCLl+PavlwMh92rrGcikQaRq4iWPVH0MpwPpY3etVMx6RnDjXtr6VZYr/IbP/Ag== +"@babel/template@^7.1.0", "@babel/template@^7.1.2", "@babel/template@^7.2.2": + version "7.2.2" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.2.2.tgz#005b3fdf0ed96e88041330379e0da9a708eb2907" + integrity sha512-zRL0IMM02AUDwghf5LMSSDEz7sBCO2YnNmpg3uWTZj/v1rcG2BmQUvaGU8GhU8BvfMh1k2KIAYZ7Ji9KXPUg7g== dependencies: "@babel/code-frame" "^7.0.0" - "@babel/parser" "^7.1.2" - "@babel/types" "^7.1.2" + "@babel/parser" "^7.2.2" + "@babel/types" "^7.2.2" "@babel/traverse@7.0.0-beta.44": version "7.0.0-beta.44" @@ -780,16 +780,16 @@ lodash "^4.2.0" "@babel/traverse@^7.1.0", "@babel/traverse@^7.1.5": - version "7.1.6" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.1.6.tgz#c8db9963ab4ce5b894222435482bd8ea854b7b5c" - integrity sha512-CXedit6GpISz3sC2k2FsGCUpOhUqKdyL0lqNrImQojagnUMXf8hex4AxYFRuMkNGcvJX5QAFGzB5WJQmSv8SiQ== + version "7.2.2" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.2.2.tgz#961039de1f9bcb946d807efe2dba9c92e859d188" + integrity sha512-E5Bn9FSwHpSkUhthw/XEuvFZxIgrqb9M8cX8j5EUQtrUG5DQUy6bFyl7G7iQ1D1Czudor+xkmp81JbLVVM0Sjg== dependencies: "@babel/code-frame" "^7.0.0" - "@babel/generator" "^7.1.6" + "@babel/generator" "^7.2.2" "@babel/helper-function-name" "^7.1.0" "@babel/helper-split-export-declaration" "^7.0.0" - "@babel/parser" "^7.1.6" - "@babel/types" "^7.1.6" + "@babel/parser" "^7.2.2" + "@babel/types" "^7.2.2" debug "^4.1.0" globals "^11.1.0" lodash "^4.17.10" @@ -803,10 +803,10 @@ lodash "^4.2.0" to-fast-properties "^2.0.0" -"@babel/types@^7.0.0", "@babel/types@^7.1.2", "@babel/types@^7.1.6", "@babel/types@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.2.0.tgz#7941c5b2d8060e06f9601d6be7c223eef906d5d8" - integrity sha512-b4v7dyfApuKDvmPb+O488UlGuR1WbwMXFsO/cyqMrnfvRAChZKJAYeeglWTjUO1b9UghKKgepAQM5tsvBJca6A== +"@babel/types@^7.0.0", "@babel/types@^7.2.0", "@babel/types@^7.2.2": + version "7.2.2" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.2.2.tgz#44e10fc24e33af524488b716cdaee5360ea8ed1e" + integrity sha512-fKCuD6UFUMkR541eDWL+2ih/xFZBXPOg/7EQFeTluMDebfqR4jrpaCjLhkWlQS4hT6nRa2PMEgXKbRB5/H2fpg== dependencies: esutils "^2.0.2" lodash "^4.17.10" @@ -1294,9 +1294,9 @@ ajv@^5.0.0, ajv@^5.1.0, ajv@^5.1.5, ajv@^5.2.0, ajv@^5.2.3, ajv@^5.3.0: json-schema-traverse "^0.3.0" ajv@^6.0.1, ajv@^6.1.0, ajv@^6.5.5: - version "6.6.1" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.6.1.tgz#6360f5ed0d80f232cc2b294c362d5dc2e538dd61" - integrity sha512-ZoJjft5B+EJBjUyu9C9Hc0OZyPZSSlOF+plzouTrg6UlA8f+e/n8NIgBFG/9tppJtpPWfthHakK7juJdNDODww== + version "6.6.2" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.6.2.tgz#caceccf474bf3fc3ce3b147443711a24063cc30d" + integrity sha512-FBHEW6Jf5TB9MGBgUUA9XHkTbjXYfAUjY43ACMfmdMRHniyoMHjHjzD50OK8LGDWQwp4rWEsIq5kEqq7rvIM1g== dependencies: fast-deep-equal "^2.0.1" fast-json-stable-stringify "^2.0.0" @@ -1304,9 +1304,9 @@ ajv@^6.0.1, ajv@^6.1.0, ajv@^6.5.5: uri-js "^4.2.2" algoliasearch@^3.30.0: - version "3.31.0" - resolved "https://registry.yarnpkg.com/algoliasearch/-/algoliasearch-3.31.0.tgz#c4083375ff02538ef50d9ec73e6a72e5e19ed96f" - integrity sha512-RJ3m8bQEitEQvWVfJa8WCTM4B9WSt0D4PPEYoqOga7Q0GAfBOqXTWeFYyDO46o085SWBSBWBInVuKyr5BIFP3A== + version "3.32.0" + resolved "https://registry.yarnpkg.com/algoliasearch/-/algoliasearch-3.32.0.tgz#5818168c26ff921bd0346a919071bac928b747ce" + integrity sha512-C8oQnPTf0wPuyD2jSZwtBAPvz+lHOE7zRIPpgXGBuNt6ZNcC4omsbytG26318rT77a8h4759vmIp6n9p8iw4NA== dependencies: agentkeepalive "^2.2.0" debug "^2.6.8" @@ -1434,22 +1434,29 @@ apollo-cache-control@0.4.0: apollo-server-env "2.2.0" graphql-extensions "0.4.0" -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== +apollo-cache-inmemory@1.3.12: + version "1.3.12" + resolved "https://registry.yarnpkg.com/apollo-cache-inmemory/-/apollo-cache-inmemory-1.3.12.tgz#cf7ef7c15730d0b6787d79047d5c06087ac31991" + integrity sha512-jxWcW64QoYQZ09UH6v3syvCCl3MWr6bsxT3wYYL6ORi8svdJUpnNrHTcv5qXqJYVg/a+NHhfEt+eGjJUG2ytXA== dependencies: - apollo-cache "^1.1.21" - apollo-utilities "^1.0.26" - optimism "^0.6.6" + apollo-cache "^1.1.22" + apollo-utilities "^1.0.27" + optimism "^0.6.8" -apollo-cache@1.1.21, apollo-cache@^1.1.21: +apollo-cache@1.1.21: version "1.1.21" resolved "https://registry.yarnpkg.com/apollo-cache/-/apollo-cache-1.1.21.tgz#950025e2272741ba8e5064419906e3ac4072925d" integrity sha512-5ErNb78KHtrJNimkDBTEigcvHkIqUmS7QJIk4lpZZ+XLVVgvk2fD+GhD1PLP+s8vHfAKVbO6vdbRxCCjGGrh5w== dependencies: apollo-utilities "^1.0.26" +apollo-cache@^1.1.22: + version "1.1.22" + resolved "https://registry.yarnpkg.com/apollo-cache/-/apollo-cache-1.1.22.tgz#d4682ea6e8b2508a934f61c2fd9e36b4a65041d9" + integrity sha512-8PoxhQLISj2oHwT7i/r4l+ly4y3RKZls+dtXzAewu3U77P9dNZKhYkRNAhx9iEfsrNoHgXBV8vMp64hb1uYh+g== + dependencies: + apollo-utilities "^1.0.27" + apollo-client@^2.4.7: version "2.4.7" resolved "https://registry.yarnpkg.com/apollo-client/-/apollo-client-2.4.7.tgz#b6712fd4c9ba346e3c44cfec7e6868e532b6a957" @@ -1500,56 +1507,56 @@ apollo-env@0.2.5: node-fetch "^2.2.0" apollo-link-dedup@^1.0.0: - version "1.0.12" - resolved "https://registry.yarnpkg.com/apollo-link-dedup/-/apollo-link-dedup-1.0.12.tgz#b17d775b97f24878794cbec5a4ecef13cf45fd33" - integrity sha512-qPYRKiTlKWYrhEXlyAAlqMGmojNDMRWc5Dv1TRb1rPRRsq6NNg9jP6ppPFcC3DhiQY8r333VlRGy9h4t6NLKbg== + version "1.0.13" + resolved "https://registry.yarnpkg.com/apollo-link-dedup/-/apollo-link-dedup-1.0.13.tgz#bb22957e18b6125ae8bfb46cab6bda8d33ba8046" + integrity sha512-i4NuqT3DSFczFcC7NMUzmnYjKX7NggLY+rqYVf+kE9JjqKOQhT6wqhaWsVIABfIUGE/N0DTgYJBCMu/18aXmYA== dependencies: - apollo-link "^1.2.5" + apollo-link "^1.2.6" -apollo-link-http-common@^0.2.5, apollo-link-http-common@^0.2.7: - version "0.2.7" - resolved "https://registry.yarnpkg.com/apollo-link-http-common/-/apollo-link-http-common-0.2.7.tgz#cd8718f7db2178fb80600014fe9f14c4a8394985" - integrity sha512-rnn6BWDnd7DR8Xskpicw2dPV2bkXN4cD6VhikdWK982ovmLi7gP67ZXA+Hclox4aEUEhRLJnuprBwzSU3bRtEQ== +apollo-link-http-common@^0.2.5, apollo-link-http-common@^0.2.8: + version "0.2.8" + resolved "https://registry.yarnpkg.com/apollo-link-http-common/-/apollo-link-http-common-0.2.8.tgz#c6deedfc2739db8b11013c3c2d2ccd657152941f" + integrity sha512-gGmXZN8mr7e9zjopzKQfZ7IKnh8H12NxBDzvp9nXI3U82aCVb72p+plgoYLcpMY8w6krvoYjgicFmf8LO20TCQ== dependencies: - apollo-link "^1.2.5" + apollo-link "^1.2.6" apollo-link-http@^1.5.7: - version "1.5.8" - resolved "https://registry.yarnpkg.com/apollo-link-http/-/apollo-link-http-1.5.8.tgz#1be551338ca00db4082114221b409e0470fcc7e6" - integrity sha512-wkmj9fL5B4QYjw7q7w0GyetfqQKnA0QXGoh+/UK+LXJ+jLEz6JP2eLxrwgpX7o4ID6Og7l1JfeVxJE5fV1j2bg== + version "1.5.9" + resolved "https://registry.yarnpkg.com/apollo-link-http/-/apollo-link-http-1.5.9.tgz#9046f5640a94c8a8b508a39e0f2c628b781baecc" + integrity sha512-9tJy2zGm4Cm/1ycScDNZJe51dgnTSfKx7pKIgPZmcxkdDpgUY2DZitDH6ZBv4yp9z8MC9Xr9wgwc29s6hcadUQ== dependencies: - apollo-link "^1.2.5" - apollo-link-http-common "^0.2.7" + apollo-link "^1.2.6" + apollo-link-http-common "^0.2.8" apollo-link-retry@^2.2.6: - version "2.2.7" - resolved "https://registry.yarnpkg.com/apollo-link-retry/-/apollo-link-retry-2.2.7.tgz#d078847b593d1292bb01c4a72ee90cbb7d33cbcf" - integrity sha512-HlpeA09PZ6RL/l/nIYmJ+DjsdQ315HLLiSTLUo/Zq56wDuzlmbbEKUPkK5Sb92nFCwZOgm+TvHCrS6zUF33eQw== + version "2.2.8" + resolved "https://registry.yarnpkg.com/apollo-link-retry/-/apollo-link-retry-2.2.8.tgz#84be877118687285a346cad60af6a9e707afbf2f" + integrity sha512-bwGAjhYwuQuim6QhQYZ4LeHA+1bXmdGmd6s1LpTziR46sZIuPEEuaxTwvyZqrjbj8CkMCx5shcZeheQ8D/ZTmA== dependencies: "@types/zen-observable" "0.8.0" - apollo-link "^1.2.5" + apollo-link "^1.2.6" apollo-link-schema@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/apollo-link-schema/-/apollo-link-schema-1.1.3.tgz#bc9299035d945c5d85a0c70d440d6893a3b4d185" - integrity sha512-cNmHFH+vrJ99b9DAIUCtyTEpVlYZU3f+yHMdau4VhhJi3dfaI0vydbb951rC/U67le6q5Tpcm7uJDx+IxHFV9A== + version "1.1.4" + resolved "https://registry.yarnpkg.com/apollo-link-schema/-/apollo-link-schema-1.1.4.tgz#23877dd4f513a0403cecc561b5a9b7886f2f0a45" + integrity sha512-X6fW5ZxG64iOMosejwkdKn6NCVTYsbIO/jvvr2WqqMzUKgU4qzhOfYAFPYpoJf11HO7oRMQj6HRS6rrteisX2A== dependencies: - apollo-link "^1.2.5" + apollo-link "^1.2.6" apollo-link-ws@^1.0.10: - version "1.0.11" - resolved "https://registry.yarnpkg.com/apollo-link-ws/-/apollo-link-ws-1.0.11.tgz#10709e5233bf1ec4b9eb2ea917d8c6392bacc7d4" - integrity sha512-yTTxIZwwDVqhinnd+3FFo9hIdKgHTuOi2yqrHuiXwVb10YwfJLEeMiYPFD2LlBUa2ikd2ppq4LeKrYHasszhMw== + version "1.0.12" + resolved "https://registry.yarnpkg.com/apollo-link-ws/-/apollo-link-ws-1.0.12.tgz#e343bb0c071f2db0ae147a2327f03cc1740d0c2d" + integrity sha512-BjbskhfuuIgk9e4XHdrqmjxkY+RkD1tuerrs4PLiPTkJYcQrvA8t27lGBSrDUKHWH4esCdhQF1UhKPwhlouEHw== dependencies: - apollo-link "^1.2.5" + apollo-link "^1.2.6" -apollo-link@^1.0.0, apollo-link@^1.2.3, apollo-link@^1.2.4, apollo-link@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/apollo-link/-/apollo-link-1.2.5.tgz#f54932d6b8f1412a35e088bc199a116bce3f1f16" - integrity sha512-GJHEE4B06oEB58mpRRwW6ISyvgX2aCqCLjpcE3M/6/4e+ZVeX7fRGpMJJDq2zZ8n7qWdrEuY315JfxzpsJmUhA== +apollo-link@^1.0.0, apollo-link@^1.2.3, apollo-link@^1.2.4, apollo-link@^1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/apollo-link/-/apollo-link-1.2.6.tgz#d9b5676d79c01eb4e424b95c7171697f6ad2b8da" + integrity sha512-sUNlA20nqIF3gG3F8eyMD+mO80fmf3dPZX+GUOs3MI9oZR8ug09H3F0UsWJMcpEg6h55Yy5wZ+BMmAjrbenF/Q== dependencies: apollo-utilities "^1.0.0" - zen-observable-ts "^0.8.12" + zen-observable-ts "^0.8.13" apollo-server-caching@0.2.1: version "0.2.1" @@ -1654,6 +1661,13 @@ apollo-utilities@1.0.26, apollo-utilities@^1.0.0, apollo-utilities@^1.0.1, apoll dependencies: fast-json-stable-stringify "^2.0.0" +apollo-utilities@^1.0.27: + version "1.0.27" + resolved "https://registry.yarnpkg.com/apollo-utilities/-/apollo-utilities-1.0.27.tgz#77c550f9086552376eca3a48e234a1466b5b057e" + integrity sha512-nzrMQ89JMpNmYnVGJ4t8zN75gQbql27UDhlxNi+3OModp0Masx5g+fQmQJ5B4w2dpRuYOsdwFLmj3lQbwOKV1Q== + dependencies: + fast-json-stable-stringify "^2.0.0" + app-root-path@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/app-root-path/-/app-root-path-2.1.0.tgz#98bf6599327ecea199309866e8140368fd2e646a" @@ -2351,11 +2365,12 @@ babel-plugin-jest-hoist@^22.4.4: integrity sha512-DUvGfYaAIlkdnygVIEl0O4Av69NtuQWcrjMOv6DODPuhuGLDnbsARz3AwiiI/EkIMMlxQDUcrZ9yoyJvTNjcVQ== babel-plugin-styled-components@^1.1.4, babel-plugin-styled-components@^1.8.0: - 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== + version "1.10.0" + resolved "https://registry.yarnpkg.com/babel-plugin-styled-components/-/babel-plugin-styled-components-1.10.0.tgz#ff1f42ad2cc78c21f26b62266b8f564dbc862939" + integrity sha512-sQVKG8irFXx14ZfaK1bBePirfkacl3j8nZwSZK+ZjsbnadRHKQTbhXbe/RB1vT6Vgkz45E+V95LBq4KqdhZUNw== dependencies: "@babel/helper-annotate-as-pure" "^7.0.0" + "@babel/helper-module-imports" "^7.0.0" babel-plugin-syntax-jsx "^6.18.0" lodash "^4.17.10" @@ -3025,6 +3040,11 @@ big.js@^3.1.3: resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.2.0.tgz#a5fc298b81b9e0dca2e458824784b65c52ba588e" integrity sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q== +bignumber.js@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-1.1.1.tgz#1a415d9ac014c13256af1feed9d1a3e5717a8cf7" + integrity sha1-GkFdmsAUwTJWrx/u2dGj5XF6jPc= + binary-extensions@^1.0.0: version "1.12.0" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.12.0.tgz#c2d780f53d45bba8317a8902d4ceeaf3a6385b14" @@ -3389,13 +3409,13 @@ browserslist@^3.2.6: electron-to-chromium "^1.3.47" browserslist@^4.1.0: - version "4.3.5" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.3.5.tgz#1a917678acc07b55606748ea1adf9846ea8920f7" - integrity sha512-z9ZhGc3d9e/sJ9dIx5NFXkKoaiQTnrvrMsN3R1fGb1tkWWNSz12UewJn9TNxGo1l7J23h0MRaPmk7jfeTZYs1w== + version "4.3.6" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.3.6.tgz#0f9d9081afc66b36f477c6bdf3813f784f42396a" + integrity sha512-kMGKs4BTzRWviZ8yru18xBpx+CyHG9eqgRbj9XbE3IMgtczf4aiA0Y1YCpVdvUieKGZ03kolSPXqTcscBCb9qw== dependencies: - caniuse-lite "^1.0.30000912" - electron-to-chromium "^1.3.86" - node-releases "^1.0.5" + caniuse-lite "^1.0.30000921" + electron-to-chromium "^1.3.92" + node-releases "^1.1.1" bser@^2.0.0: version "2.0.0" @@ -3667,7 +3687,7 @@ caniuse-db@^1.0.30000529, caniuse-db@^1.0.30000634, caniuse-db@^1.0.30000639: resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000921.tgz#2aa78193e23539634abcf0248919d5901506c53b" integrity sha512-sAvmRuxZ457rlTK+ydUMpmeXjVfkiXQXv0POTdpHEdKrVwEQaeZqJgQA5MH7sKAGTGxzlLcDpfoNkpVXw09X5Q== -caniuse-lite@^1.0.30000748, caniuse-lite@^1.0.30000792, caniuse-lite@^1.0.30000844, caniuse-lite@^1.0.30000912: +caniuse-lite@^1.0.30000748, caniuse-lite@^1.0.30000792, caniuse-lite@^1.0.30000844, caniuse-lite@^1.0.30000921: version "1.0.30000921" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000921.tgz#7a607c1623444b22351d834e093aedda3c42fbe8" integrity sha512-Bu09ciy0lMWLgpYC77I0YGuI8eFRBPPzaSOYJK1jTI64txCphYCqnWbxJYjHABYVt/TYX/p3jNjLBR87u1Bfpw== @@ -4325,14 +4345,14 @@ core-js@^1.0.0: integrity sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY= core-js@^2.4.0, core-js@^2.4.1, core-js@^2.5.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.0.tgz#1e30793e9ee5782b307e37ffa22da0eacddd84d4" - integrity sha512-kLRC6ncVpuEW/1kwrOXYX6KQASCVtrh1gQr/UiaVgFlf9WE5Vp+lNe5+h3LuMr5PAucWnnEXwH0nQHRH/gpGtw== + version "2.6.1" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.1.tgz#87416ae817de957a3f249b3b5ca475d4aaed6042" + integrity sha512-L72mmmEayPJBejKIWe2pYtGis5r0tQ5NaJekdhyXgeMQTpJoBsH0NL4ElY2LfSoV15xeQWKQ+XTTOZdyero5Xg== core-js@^3.0.0-beta.3: - version "3.0.0-beta.5" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.0.0-beta.5.tgz#0d09e0cbb45eedef427e72cc1d7725602805f909" - integrity sha512-lv/UPXe8QIvAX4XEgz3u9gpSbYr0Et6gaVhwMEH6SN9Uk+aIhk9IMwQUa35pymUiA4t2THPOaqysDJtX4jcm3w== + version "3.0.0-beta.6" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.0.0-beta.6.tgz#f1ee6c8bd9c1941f992fda01f886b3b40ceb1510" + integrity sha512-06k0SnRTdYGlTNek5vAqfxbQjTtMM0zC2xJ79T1QM5UkZS0JQegrOgDiGh43n1QICnOe5+bcvS0zOGTm2C7rBA== core-util-is@1.0.2, core-util-is@~1.0.0: version "1.0.2" @@ -4808,6 +4828,14 @@ data-urls@^1.0.0: whatwg-mimetype "^2.2.0" whatwg-url "^7.0.0" +datadog-metrics@^0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/datadog-metrics/-/datadog-metrics-0.8.1.tgz#be87237109a7084193c668d80112533ef00e3f21" + integrity sha512-qTSKnddO6GxTJW9FYpmWjvvift3qfyMurDjwNjJnJhBk76pBdDhC0B5V9V+XwPdn4r42qu48kwXNuHJslXlDOA== + dependencies: + debug "3.1.0" + dogapi "1.1.0" + dataloader@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/dataloader/-/dataloader-1.4.0.tgz#bca11d867f5d3f1b9ed9f737bd15970c65dff5c8" @@ -5192,6 +5220,16 @@ doctrine@^2.0.0, doctrine@^2.1.0: dependencies: esutils "^2.0.2" +dogapi@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/dogapi/-/dogapi-1.1.0.tgz#71a43865ad4bb4cb18bc3e13cf769971f501030a" + integrity sha1-caQ4Za1LtMsYvD4Tz3aZcfUBAwo= + dependencies: + extend "^3.0.0" + json-bigint "^0.1.4" + minimist "^1.1.1" + rc "^1.0.0" + dom-converter@~0.2: version "0.2.0" resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768" @@ -5524,10 +5562,10 @@ ejs@^2.3.4, ejs@^2.5.7: resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.6.1.tgz#498ec0d495655abc6f23cd61868d926464071aa0" integrity sha512-0xy4A/twfrRCnkhfk8ErDi5DqdAsAqeGxht4xkCUrsvhhbQNs7E+4jV0CN7+NKIY0aHE72+XvqtBIXzD31ZbXQ== -electron-to-chromium@^1.2.7, electron-to-chromium@^1.3.30, electron-to-chromium@^1.3.47, electron-to-chromium@^1.3.86: - version "1.3.91" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.91.tgz#d74437a753b122aa6eca7c722055004d3627635d" - integrity sha512-wOWwM4vQpmb97VNkExnwE5e/sUMUb7NXurlEnhE89JOarUp6FOOMKjtTGgj9bmqskZkeRA7u+p0IztJ/y2OP5Q== +electron-to-chromium@^1.2.7, electron-to-chromium@^1.3.30, electron-to-chromium@^1.3.47, electron-to-chromium@^1.3.92: + version "1.3.94" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.94.tgz#896dba14f6fefb431295b90543874925ee0cd46e" + integrity sha512-miQqXALb6eBD3OetCtg3UM5XTLMwHISux0l6mh14iiV5SE+qvftgOCXT9Vvp53fWaCLET4sfA/SmIMYHXkaNmw== elegant-spinner@^1.0.1: version "1.0.1" @@ -6210,6 +6248,14 @@ express-enforces-ssl@^1.1.0: resolved "https://registry.yarnpkg.com/express-enforces-ssl/-/express-enforces-ssl-1.1.0.tgz#cf29c6a61c5bdd802e2c7ed265a4a98e7487d1ac" integrity sha1-zynGphxb3YAuLH7SZaSpjnSH0aw= +express-hot-shots@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/express-hot-shots/-/express-hot-shots-1.0.2.tgz#570c2d5f7c18b6e2c6d3fb48a0736e92af5ddc1d" + integrity sha512-EW/HoBhpTSaO0QCwcIHSQ2M39ugKr/l2jtH4+qRSCbFAc31qLsOlFt5TGXIGUmMyyb1ffv0kiFHDbaWCd21kzA== + dependencies: + hot-shots "^5.9.2" + obj-extend "~0.1.0" + express-session@^1.15.2: version "1.15.6" resolved "https://registry.yarnpkg.com/express-session/-/express-session-1.15.6.tgz#47b4160c88f42ab70fe8a508e31cbff76757ab0a" @@ -7458,6 +7504,11 @@ hosted-git-info@^2.1.4: resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.7.1.tgz#97f236977bd6e125408930ff6de3eec6281ec047" integrity sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w== +hot-shots@^5.9.2: + version "5.9.2" + resolved "https://registry.yarnpkg.com/hot-shots/-/hot-shots-5.9.2.tgz#1cff097706f40ba2c1350d4806deebbd16a5e8c8" + integrity sha512-ruHZvHaxZRVUCoCleiwwCcjdr9A2/Y97C7oc9LpyMg9ae39blHvsJJQQ0QtMtxKX+i4lig/7/BqZBjUUZPUp3A== + hpack.js@^2.1.6: version "2.1.6" resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" @@ -8769,9 +8820,9 @@ joi@^9.2.0: topo "2.x.x" js-base64@^2.1.9: - version "2.4.9" - resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.4.9.tgz#748911fb04f48a60c4771b375cac45a80df11c03" - integrity sha512-xcinL3AuDJk7VSzsHgb9DvvIXayBbadtMZ4HFPx8rUszbW1MuNMlwYVC4zzCZ6e1sqZpnNS5ZFYOhXqA39T7LQ== + version "2.5.0" + resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.5.0.tgz#42255ba183ab67ce59a0dee640afdc00ab5ae93e" + integrity sha512-wlEBIZ5LP8usDylWbDNhKPEFVFdI5hCHpnVoT/Ysvoi/PRhJENm/Rlh9TvjYB38HFfKZN7OzEbRjmjvLkFw11g== js-levenshtein@^1.1.3: version "1.1.4" @@ -8856,6 +8907,13 @@ jsesc@~0.5.0: resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= +json-bigint@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/json-bigint/-/json-bigint-0.1.4.tgz#b5d40b8a9009e92f157f7c079db097001830e01e" + integrity sha1-tdQLipAJ6S8Vf3wHnbCXABgw4B4= + dependencies: + bignumber.js "~1.1.1" + json-loader@^0.5.4: version "0.5.7" resolved "https://registry.yarnpkg.com/json-loader/-/json-loader-0.5.7.tgz#dca14a70235ff82f0ac9a3abeb60d337a365185d" @@ -10007,9 +10065,9 @@ mute-stream@0.0.7, mute-stream@~0.0.4: integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= nan@^2.9.2: - version "2.11.1" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.11.1.tgz#90e22bccb8ca57ea4cd37cc83d3819b52eea6766" - integrity sha512-iji6k87OSXa0CcrLl9z+ZiYSuR2o+c0bGuNmXdrhTQTakxytAFsC56SArGYoiHlJlFoHSnvmhpceZJaXkVuOtA== + version "2.12.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.12.0.tgz#9d443fdb5e13a20770cc5e602eee59760a685885" + integrity sha512-zT5nC0JhbljmyEf+Z456nvm7iO7XgRV2hYxoBtPpnyp+0Q4aCoP6uWNn76v/I6k2kCYNLWqWbwBWQcjsNI/bjw== nanomatch@^1.2.9: version "1.2.13" @@ -10176,7 +10234,7 @@ node-pre-gyp@^0.10.0: semver "^5.3.0" tar "^4" -node-releases@^1.0.5: +node-releases@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.1.tgz#8fff8aea1cfcad1fb4205f805149054fbf73cafd" integrity sha512-2UXrBr6gvaebo5TNF84C66qyJJ6r0kxBObgZIDX3D3/mt1ADKiHux3NJPWisq0wxvJJdkjECH+9IIKYViKj71Q== @@ -10347,6 +10405,11 @@ oauth@0.9.x: resolved "https://registry.yarnpkg.com/oauth/-/oauth-0.9.15.tgz#bd1fefaf686c96b75475aed5196412ff60cfb9c1" integrity sha1-vR/vr2hslrdUda7VGWQS/2DPucE= +obj-extend@~0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/obj-extend/-/obj-extend-0.1.0.tgz#bb448a4775fb95eb34a781f908bbac2df23dbb5b" + integrity sha1-u0SKR3X7les0p4H5CLusLfI9u1s= + object-assign@4.1.1, object-assign@^4, object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" @@ -10487,7 +10550,7 @@ opn@^5.1.0: dependencies: is-wsl "^1.1.0" -optimism@^0.6.6: +optimism@^0.6.8: version "0.6.8" resolved "https://registry.yarnpkg.com/optimism/-/optimism-0.6.8.tgz#0780b546da8cd0a72e5207e0c3706c990c8673a6" integrity sha512-bN5n1KCxSqwBDnmgDnzMtQTHdL+uea2HYFx1smvtE+w2AMl0Uy31g0aXnP/Nt85OINnMJPRpJyfRQLTCqn5Weg== @@ -10843,7 +10906,7 @@ path-key@^2.0.0, path-key@^2.0.1: resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= -path-parse@^1.0.5: +path-parse@^1.0.5, path-parse@^1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== @@ -11708,7 +11771,7 @@ raw-loader@^0.5.1: resolved "https://registry.yarnpkg.com/raw-loader/-/raw-loader-0.5.1.tgz#0c3d0beaed8a01c966d9787bf778281252a979aa" integrity sha1-DD0L6u2KAclm2Xh793goElKpeao= -rc@^1.0.1, rc@^1.1.6, rc@^1.2.7: +rc@^1.0.0, rc@^1.0.1, rc@^1.1.6, rc@^1.2.7: version "1.2.8" resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== @@ -11821,9 +11884,9 @@ react-helmet-async@^0.1.0: shallowequal "^1.0.2" react-hot-loader@^4.3.11: - version "4.6.0" - resolved "https://registry.yarnpkg.com/react-hot-loader/-/react-hot-loader-4.6.0.tgz#7a556efea51a3c79e8bffdb094fbe17883a79432" - integrity sha512-ytmtbJB0RlTUqa9HnpVsoZiZ6iRsTzu+O2WovKT++f+tDYOTNZYa7OesVAE+R90e/1w/OJO4G/tw4rNSMYCjFw== + version "4.6.2" + resolved "https://registry.yarnpkg.com/react-hot-loader/-/react-hot-loader-4.6.2.tgz#9844b76a7bf4b6fdd45dd91f7e757ddf3aad5289" + integrity sha512-9XxH/t9jblu4vUDgxHcMLwvm4aOhaoxazzTP9vwjTVzOgU987T4rDYA85XrlmbDan9WkD+h/iVHOK8F8UnQsDg== dependencies: fast-levenshtein "^2.0.6" global "^4.3.0" @@ -12131,9 +12194,9 @@ readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable util-deprecate "~1.0.1" readable-stream@^3.0.6: - version "3.0.6" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.0.6.tgz#351302e4c68b5abd6a2ed55376a7f9a25be3057a" - integrity sha512-9E1oLoOWfhSXHGv6QlwXJim7uNzd9EVlWK+21tCU9Ju/kR0/p2AZYPz4qSchgO8PlLIH4FpZYfzwS+rEksZjIg== + version "3.1.0" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.1.0.tgz#19c2e9c1ce43507c53f6eefbcf1ee3d4aaa786f5" + integrity sha512-vpydAvIJvPODZNagCPuHG87O9JNPtvFEtjHHRVwNVsVVRBqemvPJkc2SYbxJsiZXawJdtZNmkmnsPuE3IgsG0A== dependencies: inherits "^2.0.3" string_decoder "^1.1.1" @@ -12616,11 +12679,11 @@ resolve@1.6.0: path-parse "^1.0.5" resolve@^1.1.4, resolve@^1.3.2, resolve@^1.3.3, resolve@^1.4.0, resolve@^1.5.0, resolve@^1.6.0, resolve@^1.8.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.8.1.tgz#82f1ec19a423ac1fbd080b0bab06ba36e84a7a26" - integrity sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA== + version "1.9.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.9.0.tgz#a14c6fdfa8f92a7df1d996cb7105fa744658ea06" + integrity sha512-TZNye00tI67lwYvzxCxHGjwTNlUV70io54/Ed4j6PscB8xVfuBJpRenI/o6dVk0cY0PYTY27AgCoGGxRnYuItQ== dependencies: - path-parse "^1.0.5" + path-parse "^1.0.6" restore-cursor@^1.0.1: version "1.0.1" @@ -15244,10 +15307,10 @@ yauzl@2.8.0: buffer-crc32 "~0.2.3" fd-slicer "~1.0.1" -zen-observable-ts@^0.8.12: - version "0.8.12" - resolved "https://registry.yarnpkg.com/zen-observable-ts/-/zen-observable-ts-0.8.12.tgz#38810d98645285c074775ab26b69992cc847c830" - integrity sha512-wwqbD6K6CqDd1T67UFg4hgDqnu2YAnFJDCPYmwN/N6Yfa+2QgoSp+nJomh+FWUdOc1A+553/ElvfoW8Vc/vsLg== +zen-observable-ts@^0.8.13: + version "0.8.13" + resolved "https://registry.yarnpkg.com/zen-observable-ts/-/zen-observable-ts-0.8.13.tgz#ae1fd77c84ef95510188b1f8bca579d7a5448fc2" + integrity sha512-WDb8SM0tHCb6c0l1k60qXWlm1ok3zN9U4VkLdnBKQwIYwUoB9psH7LIFgR+JVCCMmBxUgOjskIid8/N02k/2Bg== dependencies: zen-observable "^0.8.0"