diff --git a/.env.sample b/.env.sample index 0d5b3c65..0ef0c2cc 100644 --- a/.env.sample +++ b/.env.sample @@ -39,7 +39,7 @@ SLACK_VERIFICATION_TOKEN=PLxk6OlXXXXXVj3YYYY SLACK_APP_ID=A0XXXXXXX SLACK_MESSAGE_ACTIONS=true GOOGLE_ANALYTICS_ID= -BUGSNAG_KEY= +SENTRY_DSN= # AWS credentials (optional in development) AWS_ACCESS_KEY_ID=get_a_key_from_aws diff --git a/.eslintrc b/.eslintrc index 392f0127..ed273945 100644 --- a/.eslintrc +++ b/.eslintrc @@ -53,8 +53,8 @@ "SLACK_KEY": true, "DEPLOYMENT": true, "BASE_URL": true, - "BUGSNAG_KEY": true, + "SENTRY_DSN": true, "afterAll": true, - "Bugsnag": true + "Sentry": true } } diff --git a/app.json b/app.json index 87ba3091..feeea109 100644 --- a/app.json +++ b/app.json @@ -145,8 +145,8 @@ "description": "UA-xxxx (optional)", "required": false }, - "BUGSNAG_KEY": { - "description": "An API key for bugsnag if you wish to collect error reporting (optional)", + "SENTRY_DSN": { + "description": "An API key for Sentry if you wish to collect error reporting (optional)", "required": false }, "TEAM_LOGO": { diff --git a/app/components/ErrorBoundary.js b/app/components/ErrorBoundary.js index 4a36afd4..993f5838 100644 --- a/app/components/ErrorBoundary.js +++ b/app/components/ErrorBoundary.js @@ -21,9 +21,8 @@ class ErrorBoundary extends React.Component { componentDidCatch(error: Error, info: Object) { this.error = error; - // Error handler is often blocked by the browser - if (window.Bugsnag) { - Bugsnag.notifyException(error, { react: info }); + if (window.Sentry) { + Sentry.captureException(error); } } @@ -41,7 +40,7 @@ class ErrorBoundary extends React.Component { render() { if (this.error) { - const isReported = !!window.Bugsnag; + const isReported = !!window.Sentry; return ( diff --git a/app/stores/AuthStore.js b/app/stores/AuthStore.js index 5f021c39..55516c28 100644 --- a/app/stores/AuthStore.js +++ b/app/stores/AuthStore.js @@ -75,13 +75,12 @@ export default class AuthStore { this.user = new User(user); this.team = new Team(team); - if (window.Bugsnag) { - Bugsnag.user = { - id: user.id, - name: user.name, - teamId: team.id, - team: team.name, - }; + if (window.Sentry) { + Sentry.configureScope(function(scope) { + scope.setUser({ id: user.id }); + scope.setExtra('team', team.name); + scope.setExtra('teamId', team.id); + }); } // If we came from a redirect then send the user immediately there diff --git a/flow-typed/globals.js b/flow-typed/globals.js index 50879f18..ef08be78 100644 --- a/flow-typed/globals.js +++ b/flow-typed/globals.js @@ -3,9 +3,9 @@ declare var __DEV__: string; declare var SLACK_KEY: string; declare var SLACK_APP_ID: string; declare var BASE_URL: string; -declare var BUGSNAG_KEY: ?string; +declare var SENTRY_DSN: ?string; declare var DEPLOYMENT: string; -declare var Bugsnag: any; +declare var Sentry: any; declare var process: { env: { [string]: string, diff --git a/flow-typed/npm/bugsnag_vx.x.x.js b/flow-typed/npm/bugsnag_vx.x.x.js deleted file mode 100644 index f5d2af7a..00000000 --- a/flow-typed/npm/bugsnag_vx.x.x.js +++ /dev/null @@ -1,158 +0,0 @@ -// flow-typed signature: fa2210251969d5a91003802cd9026d2d -// flow-typed version: <>/bugsnag_v^1.7.0/flow_v0.86.0 - -/** - * This is an autogenerated libdef stub for: - * - * 'bugsnag' - * - * 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 'bugsnag' { - 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 'bugsnag/examples/express/api' { - declare module.exports: any; -} - -declare module 'bugsnag/examples/express/bugsnag' { - declare module.exports: any; -} - -declare module 'bugsnag/examples/express/index' { - declare module.exports: any; -} - -declare module 'bugsnag/examples/koa/api' { - declare module.exports: any; -} - -declare module 'bugsnag/examples/koa/bugsnag' { - declare module.exports: any; -} - -declare module 'bugsnag/examples/koa/index' { - declare module.exports: any; -} - -declare module 'bugsnag/Gruntfile' { - declare module.exports: any; -} - -declare module 'bugsnag/lib/bugsnag' { - declare module.exports: any; -} - -declare module 'bugsnag/lib/configuration' { - declare module.exports: any; -} - -declare module 'bugsnag/lib/error' { - declare module.exports: any; -} - -declare module 'bugsnag/lib/logger' { - declare module.exports: any; -} - -declare module 'bugsnag/lib/notification' { - declare module.exports: any; -} - -declare module 'bugsnag/lib/request_info' { - declare module.exports: any; -} - -declare module 'bugsnag/lib/utils' { - declare module.exports: any; -} - -declare module 'bugsnag/test/bugsnag' { - declare module.exports: any; -} - -declare module 'bugsnag/test/error' { - declare module.exports: any; -} - -declare module 'bugsnag/test/express' { - declare module.exports: any; -} - -declare module 'bugsnag/test/notification' { - declare module.exports: any; -} - -declare module 'bugsnag/test/utils' { - declare module.exports: any; -} - -// Filename aliases -declare module 'bugsnag/examples/express/api.js' { - declare module.exports: $Exports<'bugsnag/examples/express/api'>; -} -declare module 'bugsnag/examples/express/bugsnag.js' { - declare module.exports: $Exports<'bugsnag/examples/express/bugsnag'>; -} -declare module 'bugsnag/examples/express/index.js' { - declare module.exports: $Exports<'bugsnag/examples/express/index'>; -} -declare module 'bugsnag/examples/koa/api.js' { - declare module.exports: $Exports<'bugsnag/examples/koa/api'>; -} -declare module 'bugsnag/examples/koa/bugsnag.js' { - declare module.exports: $Exports<'bugsnag/examples/koa/bugsnag'>; -} -declare module 'bugsnag/examples/koa/index.js' { - declare module.exports: $Exports<'bugsnag/examples/koa/index'>; -} -declare module 'bugsnag/Gruntfile.js' { - declare module.exports: $Exports<'bugsnag/Gruntfile'>; -} -declare module 'bugsnag/lib/bugsnag.js' { - declare module.exports: $Exports<'bugsnag/lib/bugsnag'>; -} -declare module 'bugsnag/lib/configuration.js' { - declare module.exports: $Exports<'bugsnag/lib/configuration'>; -} -declare module 'bugsnag/lib/error.js' { - declare module.exports: $Exports<'bugsnag/lib/error'>; -} -declare module 'bugsnag/lib/logger.js' { - declare module.exports: $Exports<'bugsnag/lib/logger'>; -} -declare module 'bugsnag/lib/notification.js' { - declare module.exports: $Exports<'bugsnag/lib/notification'>; -} -declare module 'bugsnag/lib/request_info.js' { - declare module.exports: $Exports<'bugsnag/lib/request_info'>; -} -declare module 'bugsnag/lib/utils.js' { - declare module.exports: $Exports<'bugsnag/lib/utils'>; -} -declare module 'bugsnag/test/bugsnag.js' { - declare module.exports: $Exports<'bugsnag/test/bugsnag'>; -} -declare module 'bugsnag/test/error.js' { - declare module.exports: $Exports<'bugsnag/test/error'>; -} -declare module 'bugsnag/test/express.js' { - declare module.exports: $Exports<'bugsnag/test/express'>; -} -declare module 'bugsnag/test/notification.js' { - declare module.exports: $Exports<'bugsnag/test/notification'>; -} -declare module 'bugsnag/test/utils.js' { - declare module.exports: $Exports<'bugsnag/test/utils'>; -} diff --git a/package.json b/package.json index 10a9e48f..30a45350 100644 --- a/package.json +++ b/package.json @@ -55,6 +55,7 @@ "url": "git+ssh://git@github.com/outline/outline.git" }, "dependencies": { + "@sentry/node": "^5.12.2", "@tippy.js/react": "^2.2.2", "@tommoor/remove-markdown": "0.3.1", "autotrack": "^2.4.1", @@ -77,7 +78,6 @@ "babel-regenerator-runtime": "6.5.0", "boundless-arrow-key-navigation": "^1.0.4", "boundless-popover": "^1.0.4", - "bugsnag": "^1.7.0", "bull": "^3.5.2", "cancan": "3.1.0", "copy-to-clipboard": "^3.0.6", diff --git a/server/app.js b/server/app.js index a7ae9bc8..3ba2c96b 100644 --- a/server/app.js +++ b/server/app.js @@ -10,8 +10,8 @@ import logger from 'koa-logger'; import mount from 'koa-mount'; import enforceHttps from 'koa-sslify'; import Koa from 'koa'; -import bugsnag from 'bugsnag'; import onerror from 'koa-onerror'; +import * as Sentry from '@sentry/node'; import updates from './utils/updates'; import auth from './auth'; @@ -46,12 +46,6 @@ if (process.env.NODE_ENV === 'development') { // that means no watching, but recompilation on every request lazy: false, - // // watch options (only lazy: false) - // watchOptions: { - // aggregateTimeout: 300, - // poll: true - // }, - // public path to bind the middleware to // use the same as in webpack publicPath: config.output.publicPath, @@ -89,23 +83,31 @@ if (process.env.NODE_ENV === 'development') { // trust header fields set by our proxy. eg X-Forwarded-For app.proxy = true; +} - // catch errors in one place, automatically set status and response headers - onerror(app); +// catch errors in one place, automatically set status and response headers +onerror(app); - if (process.env.BUGSNAG_KEY) { - bugsnag.register(process.env.BUGSNAG_KEY, { - filters: ['authorization'], +if (process.env.SENTRY_DSN) { + Sentry.init({ + dsn: process.env.SENTRY_DSN, + environment: process.env.NODE_ENV, + }); + + app.on('error', (error, ctx) => { + // we don't need to report every time a request stops to the bug tracker + if (error.code === 'EPIPE' || error.code === 'ECONNRESET') { + console.warn('Connection error', { error }); + return; + } + + Sentry.withScope(function(scope) { + scope.addEventProcessor(function(event) { + return Sentry.Handlers.parseRequest(event, ctx.request); + }); + Sentry.captureException(error); }); - app.on('error', (error, ctx) => { - // we don't need to report every time a request stops to the bug tracker - if (error.code === 'EPIPE' || error.code === 'ECONNRESET') { - console.warn('Connection error', { error }); - } else { - bugsnag.koaHandler(error, ctx); - } - }); - } + }); } app.use(mount('/auth', auth)); diff --git a/server/mailer.js b/server/mailer.js index 050a708a..72f724e1 100644 --- a/server/mailer.js +++ b/server/mailer.js @@ -1,7 +1,7 @@ // @flow import * as React from 'react'; import debug from 'debug'; -import bugsnag from 'bugsnag'; +import * as Sentry from '@sentry/node'; import nodemailer from 'nodemailer'; import Oy from 'oy-vey'; import { createQueue } from './utils/queue'; @@ -83,7 +83,7 @@ export class Mailer { attachments: data.attachments, }); } catch (err) { - bugsnag.notify(err); + Sentry.captureException(err); throw err; // Re-throw for queue to re-try } } diff --git a/server/static/index.html b/server/static/index.html index dd323dbb..b4972454 100644 --- a/server/static/index.html +++ b/server/static/index.html @@ -33,11 +33,18 @@
+ - diff --git a/server/utils/s3.js b/server/utils/s3.js index e0f0846c..53046c01 100644 --- a/server/utils/s3.js +++ b/server/utils/s3.js @@ -5,7 +5,7 @@ import format from 'date-fns/format'; import AWS from 'aws-sdk'; import invariant from 'invariant'; import fetch from 'isomorphic-fetch'; -import bugsnag from 'bugsnag'; +import * as Sentry from '@sentry/node'; const AWS_SECRET_ACCESS_KEY = process.env.AWS_SECRET_ACCESS_KEY; const AWS_ACCESS_KEY_ID = process.env.AWS_ACCESS_KEY_ID; @@ -116,7 +116,7 @@ export const uploadToS3FromUrl = async ( return `${endpoint}/${key}`; } catch (err) { if (process.env.NODE_ENV === 'production') { - bugsnag.notify(err); + Sentry.captureException(err); } else { throw err; } @@ -149,7 +149,7 @@ export const getImageByKey = async (key: string) => { return data.Body; } catch (err) { if (process.env.NODE_ENV === 'production') { - bugsnag.notify(err); + Sentry.captureException(err); } else { throw err; } diff --git a/server/utils/zip.js b/server/utils/zip.js index 018e22b3..eadcf332 100644 --- a/server/utils/zip.js +++ b/server/utils/zip.js @@ -2,10 +2,10 @@ import fs from 'fs'; import JSZip from 'jszip'; import tmp from 'tmp'; +import * as Sentry from '@sentry/node'; import unescape from '../../shared/utils/unescape'; import { Attachment, Collection, Document } from '../models'; import { getImageByKey } from './s3'; -import bugsnag from 'bugsnag'; async function addToArchive(zip, documents) { for (const doc of documents) { @@ -36,7 +36,7 @@ async function addImageToArchive(zip, key) { zip.file(key, img, { createFolders: true }); } catch (err) { if (process.env.NODE_ENV === 'production') { - bugsnag.notify(err); + Sentry.captureException(err); } else { // error during file retrieval console.error(err); diff --git a/webpack.config.js b/webpack.config.js index 3a890461..5ab979f7 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -11,7 +11,7 @@ const definePlugin = new webpack.DefinePlugin({ ), SLACK_APP_ID: JSON.stringify(process.env.SLACK_APP_ID), BASE_URL: JSON.stringify(process.env.URL), - BUGSNAG_KEY: JSON.stringify(process.env.BUGSNAG_KEY), + SENTRY_DSN: JSON.stringify(process.env.SENTRY_DSN), DEPLOYMENT: JSON.stringify(process.env.DEPLOYMENT || 'hosted'), 'process.env': { URL: JSON.stringify(process.env.URL), diff --git a/yarn.lock b/yarn.lock index 721ea6e6..b5d61ad2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -208,6 +208,85 @@ dependencies: "@types/node" "^12.11.1" +"@sentry/apm@5.12.3": + version "5.12.3" + resolved "https://registry.yarnpkg.com/@sentry/apm/-/apm-5.12.3.tgz#23a5e9c771a8748f59426a1d0f8b1fbb9b72a717" + integrity sha512-OSGEeo4b1Gsu/TUcWMx9vmgSnQvR+zM+1Iwq5xFQAK2ET3Y4gBFqZ1iRt2hxlzr8KCQmQTQc1mao1X0tmidFQg== + dependencies: + "@sentry/browser" "5.12.1" + "@sentry/hub" "5.12.0" + "@sentry/minimal" "5.12.0" + "@sentry/types" "5.12.0" + "@sentry/utils" "5.12.0" + tslib "^1.9.3" + +"@sentry/browser@5.12.1": + version "5.12.1" + resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-5.12.1.tgz#dc1f268595269fb7277f55eb625c7e92d76dc01b" + integrity sha512-Zl7VdppUxctyaoqMSEhnDJp2rrupx8n8N2n3PSooH74yhB2Z91nt84mouczprBsw3JU1iggGyUw9seRFzDI1hw== + dependencies: + "@sentry/core" "5.12.0" + "@sentry/types" "5.12.0" + "@sentry/utils" "5.12.0" + tslib "^1.9.3" + +"@sentry/core@5.12.0": + version "5.12.0" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-5.12.0.tgz#d6380c4ef7beee5f418ac1d0e5be86a2de2af449" + integrity sha512-wY4rsoX71QsGpcs9tF+OxKgDPKzIFMRvFiSRcJoPMfhFsTilQ/CBMn/c3bDtWQd9Bnr/ReQIL6NbnIjUsPHA4Q== + dependencies: + "@sentry/hub" "5.12.0" + "@sentry/minimal" "5.12.0" + "@sentry/types" "5.12.0" + "@sentry/utils" "5.12.0" + tslib "^1.9.3" + +"@sentry/hub@5.12.0": + version "5.12.0" + resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-5.12.0.tgz#5e8c8f249f5bdbeb8cc4ec02c2ccc53a67f2cc02" + integrity sha512-3k7yE8BEVJsKx8mR4LcI4IN0O8pngmq44OcJ/fRUUBAPqsT38jsJdP2CaWhdlM1jiNUzUDB1ktBv6/lY+VgcoQ== + dependencies: + "@sentry/types" "5.12.0" + "@sentry/utils" "5.12.0" + tslib "^1.9.3" + +"@sentry/minimal@5.12.0": + version "5.12.0" + resolved "https://registry.yarnpkg.com/@sentry/minimal/-/minimal-5.12.0.tgz#2611e2aa520c1edb7999e6de51bd65ec66341757" + integrity sha512-fk73meyz4k4jCg9yzbma+WkggsfEIQWI2e2TWfYsRGcrV3RnlSrXyM4D91/A8Bjx10SNezHPUFHjasjlHXOkyA== + dependencies: + "@sentry/hub" "5.12.0" + "@sentry/types" "5.12.0" + tslib "^1.9.3" + +"@sentry/node@^5.12.2": + version "5.12.3" + resolved "https://registry.yarnpkg.com/@sentry/node/-/node-5.12.3.tgz#4a4934b04c5163fc340312eaf0d152990aa7140f" + integrity sha512-QwqN+i6IC3/YrNq7kqxH7YiXtZYY8tBuJqFi84WbiMHF7MAqxMSPNQJGfX2GJuMHKHwn6IZdgSE8+FkfN9zGLQ== + dependencies: + "@sentry/apm" "5.12.3" + "@sentry/core" "5.12.0" + "@sentry/hub" "5.12.0" + "@sentry/types" "5.12.0" + "@sentry/utils" "5.12.0" + cookie "^0.3.1" + https-proxy-agent "^4.0.0" + lru_map "^0.3.3" + tslib "^1.9.3" + +"@sentry/types@5.12.0": + version "5.12.0" + resolved "https://registry.yarnpkg.com/@sentry/types/-/types-5.12.0.tgz#5367e53c74261beea01502e3f7b6f3d822682a31" + integrity sha512-aZbBouBLrKB8wXlztriIagZNmsB+wegk1Jkl6eprqRW/w24Sl/47tiwH8c5S4jYTxdAiJk+SAR10AAuYmIN3zg== + +"@sentry/utils@5.12.0": + version "5.12.0" + resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-5.12.0.tgz#62967f934a3ee6d21472eac0219084e37225933e" + integrity sha512-fYUadGLbfTCbs4OG5hKCOtv2jrNE4/8LHNABy9DwNJ/t5DVtGqWAZBnxsC+FG6a3nVqCpxjFI9AHlYsJ2wsf7Q== + dependencies: + "@sentry/types" "5.12.0" + tslib "^1.9.3" + "@sindresorhus/is@^0.7.0": version "0.7.0" resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.7.0.tgz#9a06f4f137ee84d7df0460c1fdb1135ffa6c50fd" @@ -326,6 +405,11 @@ after@0.8.2: resolved "https://registry.yarnpkg.com/after/-/after-0.8.2.tgz#fedb394f9f0e02aa9768e702bda23b505fae7e1f" integrity sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8= +agent-base@5: + version "5.1.1" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-5.1.1.tgz#e8fb3f242959db44d63be665db7a8e739537a32c" + integrity sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g== + agent-base@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.3.0.tgz#8165f01c436009bccad0b1d122f05ed770efc6ee" @@ -530,11 +614,6 @@ arrify@^2.0.0: resolved "https://registry.yarnpkg.com/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa" integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug== -asap@~2.0.3: - version "2.0.6" - resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" - integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= - asn1.js@^4.0.0: version "4.10.1" resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0" @@ -1760,16 +1839,6 @@ buffers@~0.1.1: resolved "https://registry.yarnpkg.com/buffers/-/buffers-0.1.1.tgz#b24579c3bed4d6d396aeee6d9a8ae7f5482ab7bb" integrity sha1-skV5w77U1tOWru5tmorn9Ugqt7s= -bugsnag@^1.7.0: - version "1.12.2" - resolved "https://registry.yarnpkg.com/bugsnag/-/bugsnag-1.12.2.tgz#61b2a309f95a4b53e65517052ec46991f91ecb4d" - integrity sha512-QLNXll+cMJGouLaDyszDKH77wCIWgvVvC+IxZK9GyI4hLlJLyTkWMOgNnA/Grk7s4+lWctK37gwuuhkAzmtn/g== - dependencies: - json-stringify-safe "~5.0.1" - promise "7.x" - request "^2.81.0" - stack-trace "~0.0.9" - builtin-modules@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-2.0.0.tgz#60b7ef5ae6546bd7deefa74b08b62a43a232648e" @@ -2365,7 +2434,7 @@ convert-source-map@^1.4.0, convert-source-map@^1.5.1: dependencies: safe-buffer "~5.1.1" -cookie@0.3.1: +cookie@0.3.1, cookie@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb" integrity sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s= @@ -2610,7 +2679,7 @@ date-fns@1.29.0: resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.29.0.tgz#12e609cdcb935127311d04d33334e2960a2a54e6" integrity sha512-lbTXWZ6M20cWH8N9S6afb0SBm6tMk+uUg6z3MqHPKE9atmsY3kJkTm8vKe93izJ2B2+q5MV990sM2CHgtAZaOw== -debug@*, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@~4.1.0: +debug@*, debug@4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@~4.1.0: version "4.1.1" resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== @@ -4572,6 +4641,14 @@ https-proxy-agent@^3.0.0: agent-base "^4.3.0" debug "^3.1.0" +https-proxy-agent@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz#702b71fb5520a132a66de1f67541d9e62154d82b" + integrity sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg== + dependencies: + agent-base "5" + debug "4" + humanize-number@0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/humanize-number/-/humanize-number-0.0.2.tgz#11c0af6a471643633588588048f1799541489c18" @@ -6234,6 +6311,11 @@ lru-queue@0.1: dependencies: es5-ext "~0.10.2" +lru_map@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/lru_map/-/lru_map-0.3.3.tgz#b5c8351b9464cbd750335a79650a0ec0e56118dd" + integrity sha1-tcg1G5Rky9dQM1p5ZQoOwOVhGN0= + macos-release@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/macos-release/-/macos-release-2.3.0.tgz#eb1930b036c0800adebccd5f17bc4c12de8bb71f" @@ -7580,13 +7662,6 @@ promise.prototype.finally@^3.1.1: es-abstract "^1.13.0" function-bind "^1.1.1" -promise@7.x: - version "7.3.1" - resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" - integrity sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg== - dependencies: - asap "~2.0.3" - prop-types@^15.0.0, prop-types@^15.5.10, prop-types@^15.5.4, prop-types@^15.5.6, prop-types@^15.5.7, prop-types@^15.5.8, prop-types@^15.6.2, prop-types@^15.7.2: version "15.7.2" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" @@ -8238,7 +8313,7 @@ request-promise-native@^1.0.5: stealthy-require "^1.1.1" tough-cookie "^2.3.3" -request@^2.81.0, request@^2.87.0: +request@^2.87.0: version "2.88.0" resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef" integrity sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg== @@ -9113,11 +9188,6 @@ ssri@^5.2.4: dependencies: safe-buffer "^5.1.1" -stack-trace@~0.0.9: - version "0.0.10" - resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0" - integrity sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA= - stack-utils@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.2.tgz#33eba3897788558bebfc2db059dc158ec36cebb8" @@ -9678,7 +9748,7 @@ trim-right@^1.0.1: resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" integrity sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM= -tslib@^1.9.0: +tslib@^1.9.0, tslib@^1.9.3: version "1.10.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a" integrity sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==