Sentry fixes (#345)

* Upgrade sentry sdk, replace all prints with flask logging.

* Upgrade node sentry to fix circular json error.

* Update frontend sentry versions to maintain parity and nab any fixes.
This commit is contained in:
William O'Beirne 2019-03-13 15:40:29 -04:00 committed by Daniel Ternyak
parent 4773c4a4ac
commit 3050caf329
11 changed files with 178 additions and 117 deletions

View File

@ -1,12 +1,15 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
"""The app module, containing the app factory function.""" """The app module, containing the app factory function."""
import sentry_sdk import sentry_sdk
import logging
import traceback
from animal_case import animalify from animal_case import animalify
from flask import Flask, Response, jsonify, request from flask import Flask, Response, jsonify, request
from flask_cors import CORS from flask_cors import CORS
from flask_security import SQLAlchemyUserDatastore from flask_security import SQLAlchemyUserDatastore
from flask_sslify import SSLify from flask_sslify import SSLify
from sentry_sdk.integrations.flask import FlaskIntegration from sentry_sdk.integrations.flask import FlaskIntegration
from sentry_sdk.integrations.logging import LoggingIntegration
from grant import commands, proposal, user, comment, milestone, admin, email, blockchain, task, rfp from grant import commands, proposal, user, comment, milestone, admin, email, blockchain, task, rfp
from grant.extensions import bcrypt, migrate, db, ma, security, limiter from grant.extensions import bcrypt, migrate, db, ma, security, limiter
@ -40,7 +43,7 @@ def create_app(config_objects=["grant.settings"]):
def handle_error(err): def handle_error(err):
headers = err.data.get("headers", None) headers = err.data.get("headers", None)
messages = err.data.get("messages", "Invalid request.") messages = err.data.get("messages", "Invalid request.")
error_message = "Something went wrong with your request. That's all we know" error_message = "Something was wrong with your request"
if type(messages) == dict: if type(messages) == dict:
if 'json' in messages: if 'json' in messages:
error_message = messages['json'][0] error_message = messages['json'][0]
@ -49,13 +52,24 @@ def create_app(config_objects=["grant.settings"]):
else: else:
return jsonify({"message": error_message}), err.code return jsonify({"message": error_message}), err.code
@app.errorhandler(404)
def handle_notfound_error(err):
error_message = "Unknown route '{} {}'".format(request.method, request.path)
return jsonify({"message": error_message}), 404
@app.errorhandler(429) @app.errorhandler(429)
def handle_limit_error(err): def handle_limit_error(err):
print(f'Rate limited request to {request.method} {request.path} from ip {request.remote_addr}') app.logger.warn(f'Rate limited request to {request.method} {request.path} from ip {request.remote_addr}')
return jsonify({"message": "Youve done that too many times, please wait and try again later"}), 429 return jsonify({"message": "Youve done that too many times, please wait and try again later"}), 429
@app.errorhandler(Exception) @app.errorhandler(Exception)
def handle_exception(err): def handle_exception(err):
sentry_sdk.capture_exception(err)
app.logger.debug(traceback.format_exc())
app.logger.debug("Uncaught exception at {} {}, see above for traceback".format(request.method, request.path))
return jsonify({"message": "Something went wrong"}), 500 return jsonify({"message": "Something went wrong"}), 500
for conf in config_objects: for conf in config_objects:
@ -67,10 +81,14 @@ def create_app(config_objects=["grant.settings"]):
register_commands(app) register_commands(app)
if not app.config.get("TESTING"): if not app.config.get("TESTING"):
sentry_logging = LoggingIntegration(
level=logging.INFO,
event_level=logging.ERROR
)
sentry_sdk.init( sentry_sdk.init(
environment=ENV, environment=ENV,
release=SENTRY_RELEASE, release=SENTRY_RELEASE,
integrations=[FlaskIntegration()] integrations=[FlaskIntegration(), sentry_logging]
) )
# handle all AuthExceptions thusly # handle all AuthExceptions thusly

View File

@ -1,4 +1,4 @@
from flask import Blueprint from flask import Blueprint, current_app
from grant.blockchain.bootstrap import send_bootstrap_data from grant.blockchain.bootstrap import send_bootstrap_data
from grant.utils.auth import internal_webhook from grant.utils.auth import internal_webhook
@ -9,6 +9,6 @@ blueprint = Blueprint("blockchain", __name__, url_prefix="/api/v1/blockchain")
@blueprint.route("/bootstrap", methods=["GET"]) @blueprint.route("/bootstrap", methods=["GET"])
@internal_webhook @internal_webhook
def get_bootstrap_info(): def get_bootstrap_info():
print('Bootstrap data requested from blockchain watcher microservice...') current_app.logger.info('Bootstrap data requested from blockchain watcher microservice...')
send_bootstrap_data() send_bootstrap_data()
return {"message": "ok"}, 200 return {"message": "ok"}, 200

View File

@ -1,5 +1,6 @@
import sendgrid import sendgrid
from flask import render_template, Markup, current_app from flask import render_template, Markup, current_app
from sentry_sdk import capture_exception
from grant.settings import SENDGRID_API_KEY, SENDGRID_DEFAULT_FROM, UI from grant.settings import SENDGRID_API_KEY, SENDGRID_DEFAULT_FROM, UI
from grant.utils.misc import make_url from grant.utils.misc import make_url
from python_http_client import HTTPError from python_http_client import HTTPError
@ -359,7 +360,7 @@ def send_email(to, type, email_args):
if user and 'subscription' in info: if user and 'subscription' in info:
sub = info['subscription'] sub = info['subscription']
if user and not is_subscribed(user.settings.email_subscriptions, sub): if user and not is_subscribed(user.settings.email_subscriptions, sub):
print(f'Ignoring send_email to {to} of type {type} because user is unsubscribed.') app.logger.debug(f'Ignoring send_email to {to} of type {type} because user is unsubscribed.')
return return
try: try:
@ -375,9 +376,12 @@ def send_email(to, type, email_args):
mail.add_content(Content('text/html', email['html'])) mail.add_content(Content('text/html', email['html']))
res = sg.client.mail.send.post(request_body=mail.get()) res = sg.client.mail.send.post(request_body=mail.get())
print('Just sent an email to %s of type %s, response code: %s' % (to, type, res.status_code)) current_app.logger.info('Just sent an email to %s of type %s, response code: %s' % (to, type, res.status_code))
except HTTPError as e: except HTTPError as e:
print('An HTTP error occured while sending an email to %s - %s: %s' % (to, e.__class__.__name__, e)) current_app.logger.info('An HTTP error occured while sending an email to %s - %s: %s' % (to, e.__class__.__name__, e))
print(e.body) current_app.logger.debug(e.body)
capture_exception(e)
except Exception as e: except Exception as e:
print('An unknown error occured while sending an email to %s - %s: %s' % (to, e.__class__.__name__, e)) current_app.logger.info('An unknown error occured while sending an email to %s - %s: %s' % (to, e.__class__.__name__, e))
current_app.logger.debug(e)
capture_exception(e)

View File

@ -1,7 +1,7 @@
from datetime import datetime from datetime import datetime
from decimal import Decimal from decimal import Decimal
from flask import Blueprint, g, request from flask import Blueprint, g, request, current_app
from marshmallow import fields, validate from marshmallow import fields, validate
from sqlalchemy import or_ from sqlalchemy import or_
@ -530,7 +530,7 @@ def post_contribution_confirmation(contribution_id, to, amount, txid):
if not contribution: if not contribution:
# TODO: Log in sentry # TODO: Log in sentry
print(f'Unknown contribution {contribution_id} confirmed with txid {txid}') current_app.logger.warn(f'Unknown contribution {contribution_id} confirmed with txid {txid}')
return {"message": "No contribution matching id"}, 404 return {"message": "No contribution matching id"}, 404
if contribution.status == ContributionStatus.CONFIRMED: if contribution.status == ContributionStatus.CONFIRMED:

View File

@ -1,6 +1,8 @@
from datetime import datetime from datetime import datetime
from flask import Blueprint, jsonify, current_app
from sentry_sdk import capture_exception
from traceback import format_exc
from flask import Blueprint, jsonify
from grant.task.jobs import JOBS from grant.task.jobs import JOBS
from grant.task.models import Task, tasks_schema from grant.task.models import Task, tasks_schema
from grant.extensions import db from grant.extensions import db
@ -17,7 +19,7 @@ def task():
each_task.completed = True each_task.completed = True
db.session.add(each_task) db.session.add(each_task)
except Exception as e: except Exception as e:
# replace with Sentry logging current_app.logger.info("Task #{} failed: {}".format(each_task.id, e))
print("Oops, something went wrong: {}".format(e)) capture_exception(e)
db.session.commit() db.session.commit()
return jsonify(tasks_schema.dump(tasks)) return jsonify(tasks_schema.dump(tasks))

View File

@ -2,7 +2,7 @@ from functools import wraps
from datetime import datetime, timedelta from datetime import datetime, timedelta
import sentry_sdk import sentry_sdk
from flask import request, g, jsonify, session from flask import request, g, jsonify, session, current_app
from flask_security.core import current_user from flask_security.core import current_user
from flask_security.utils import logout_user from flask_security.utils import logout_user
from grant.proposal.models import Proposal from grant.proposal.models import Proposal
@ -156,10 +156,10 @@ def internal_webhook(f):
def decorated(*args, **kwargs): def decorated(*args, **kwargs):
secret = request.headers.get('authorization') secret = request.headers.get('authorization')
if not secret: if not secret:
print('Internal webhook missing "Authorization" header') current_app.logger.warn('Internal webhook missing "Authorization" header')
return jsonify(message="Invalid 'Authorization' header"), 403 return jsonify(message="Invalid 'Authorization' header"), 403
if BLOCKCHAIN_API_SECRET not in secret: if BLOCKCHAIN_API_SECRET not in secret:
print(f'Internal webhook provided invalid "Authorization" header: {secret}') current_app.logger.warn(f'Internal webhook provided invalid "Authorization" header: {secret}')
return jsonify(message="Invalid 'Authorization' header"), 403 return jsonify(message="Invalid 'Authorization' header"), 403
return f(*args, **kwargs) return f(*args, **kwargs)

View File

@ -54,7 +54,7 @@ markdownify
sendgrid==5.6.0 sendgrid==5.6.0
#sentry #sentry
sentry-sdk[flask]==0.5.5 sentry-sdk[flask]==0.7.6
#boto3 (AWS sdk) #boto3 (AWS sdk)
boto3==1.9.52 boto3==1.9.52

View File

@ -30,7 +30,7 @@
"typescript": "^3.2.1" "typescript": "^3.2.1"
}, },
"dependencies": { "dependencies": {
"@sentry/node": "4.4.2", "@sentry/node": "4.6.4",
"@types/cors": "2.8.4", "@types/cors": "2.8.4",
"@types/dotenv": "^6.1.0", "@types/dotenv": "^6.1.0",
"@types/ws": "^6.0.1", "@types/ws": "^6.0.1",

View File

@ -2,62 +2,63 @@
# yarn lockfile v1 # yarn lockfile v1
"@sentry/core@4.4.2": "@sentry/core@4.6.4":
version "4.4.2" version "4.6.4"
resolved "https://registry.yarnpkg.com/@sentry/core/-/core-4.4.2.tgz#562526bc634c087f04bbca68b09cedc4b41cc64d" resolved "https://registry.yarnpkg.com/@sentry/core/-/core-4.6.4.tgz#7236e08115423b81b96a13c2c37f29bcc1477745"
integrity sha512-hJyAodTCf4sZfVdf41Rtuzj4EsyzYq5rdMZ+zc2Vinwdf8D0/brHe91fHeO0CKXEb2P0wJsrjwMidG/ccq/M8A== integrity sha512-NGl2nkAaQ8dGqJAMS1Hb+7RyVjW4tmCbK6d7H/zKnOpBuU+qSW4XCm2NoGLLa8qb4SZUPIBRv6U0ByvEQlGtqw==
dependencies: dependencies:
"@sentry/hub" "4.4.2" "@sentry/hub" "4.6.4"
"@sentry/minimal" "4.4.2" "@sentry/minimal" "4.6.4"
"@sentry/types" "4.4.2" "@sentry/types" "4.5.3"
"@sentry/utils" "4.4.2" "@sentry/utils" "4.6.4"
tslib "^1.9.3" tslib "^1.9.3"
"@sentry/hub@4.4.2": "@sentry/hub@4.6.4":
version "4.4.2" version "4.6.4"
resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-4.4.2.tgz#1399556fda06fb83c4f186c4aa842725f520159c" resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-4.6.4.tgz#2bd5d67ccd43d4f5afc45005a330a11b14d46cea"
integrity sha512-oe9ytXkTWyD+QmOpVzHAqTbRV4Hc0ee2Nt6HvrDtRmlXzQxfvTWG2F8KYT6w8kzqg5klnuRpnsmgTTV3KuNBVQ== integrity sha512-R3ACxUZbrAMP6vyIvt1k4bE3OIyg1CzbEhzknKljPrk1abVmJVP7W/X1vBysdRtI3m/9RjOSO7Lxx3XXqoHoQg==
dependencies: dependencies:
"@sentry/types" "4.4.2" "@sentry/types" "4.5.3"
"@sentry/utils" "4.4.2" "@sentry/utils" "4.6.4"
tslib "^1.9.3" tslib "^1.9.3"
"@sentry/minimal@4.4.2": "@sentry/minimal@4.6.4":
version "4.4.2" version "4.6.4"
resolved "https://registry.yarnpkg.com/@sentry/minimal/-/minimal-4.4.2.tgz#13fffc6b17a2401b6a79947838a637626ab80b10" resolved "https://registry.yarnpkg.com/@sentry/minimal/-/minimal-4.6.4.tgz#dc4bb47df90dad6025d832852ac11fe29ed50147"
integrity sha512-GEZZiNvVgqFAESZhAe3vjwTInn13lI2bSI3ItQN4RUWKL/W4n/fwVoDJbkb1U8aWxanuMnRDEpKwyQv6zYTZfw== integrity sha512-jZa9mfzDzJI98tg6uxFG3gdVLyz0nOHpLP9H8Kn/BelZ7WEG/ogB8PDi1hI9JvCTXAr8kV81mEecldADa9L9Yg==
dependencies: dependencies:
"@sentry/hub" "4.4.2" "@sentry/hub" "4.6.4"
"@sentry/types" "4.4.2" "@sentry/types" "4.5.3"
tslib "^1.9.3" tslib "^1.9.3"
"@sentry/node@4.4.2": "@sentry/node@4.6.4":
version "4.4.2" version "4.6.4"
resolved "https://registry.yarnpkg.com/@sentry/node/-/node-4.4.2.tgz#549921d2df3cbf58ebcfb525c3005c3fec4739a3" resolved "https://registry.yarnpkg.com/@sentry/node/-/node-4.6.4.tgz#933c2e3ce93bc7861de6d4310ed1fe66f85da301"
integrity sha512-8/KlSdfVhledZ6PS6muxZY5r2pqhw8MNSXP7AODR2qRrHwsbnirVgV21WIAYAjKXEfYQGbm69lyoaTJGazlQ3Q== integrity sha512-nfaLB+cE0dddjWD0yI0nB/UqXkPw/6FKDRpB1NZ61amAM4QRXa4hRTdHvqjUovzV/5/pVMQYsOyCk0pNWMtMUQ==
dependencies: dependencies:
"@sentry/core" "4.4.2" "@sentry/core" "4.6.4"
"@sentry/hub" "4.4.2" "@sentry/hub" "4.6.4"
"@sentry/types" "4.4.2" "@sentry/types" "4.5.3"
"@sentry/utils" "4.4.2" "@sentry/utils" "4.6.4"
"@types/stack-trace" "0.0.29" "@types/stack-trace" "0.0.29"
cookie "0.3.1" cookie "0.3.1"
https-proxy-agent "^2.2.1" https-proxy-agent "2.2.1"
lru_map "0.3.3"
lsmod "1.0.0" lsmod "1.0.0"
stack-trace "0.0.10" stack-trace "0.0.10"
tslib "^1.9.3" tslib "^1.9.3"
"@sentry/types@4.4.2": "@sentry/types@4.5.3":
version "4.4.2" version "4.5.3"
resolved "https://registry.yarnpkg.com/@sentry/types/-/types-4.4.2.tgz#f38dd3bc671cd2f5983a85553aebeac9c2286b17" resolved "https://registry.yarnpkg.com/@sentry/types/-/types-4.5.3.tgz#3350dce2b7f9b936a8c327891c12e3aef7bd8852"
integrity sha512-QyQd6PKKIyjJgaq/RQjsxPJEWbXcuiWZ9RvSnhBjS5jj53HEzkM1qkbAFqlYHJ1DTJJ1EuOM4+aTmGzHe93zuA== integrity sha512-7ll1PAFNjrBNX9rzy3P2qAQrpQwHaDO3uKj735qsnGw34OtAS8Xr8WYrjI14f9fMPa/XIeWvMPb4GMic28V/ag==
"@sentry/utils@4.4.2": "@sentry/utils@4.6.4":
version "4.4.2" version "4.6.4"
resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-4.4.2.tgz#e05a47e135ecef29e63a996f59aee8c8f792c222" resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-4.6.4.tgz#ca254c142b519b4f20d63c2f9edf1a89966be36f"
integrity sha512-j/Ad8G1abHlJdD2q7aWWbSOSeWB5M5v1R1VKL8YPlwEbSvvmEQWePhBKFI0qlnKd2ObdUQsj86pHEXJRSFNfCw== integrity sha512-Tc5R46z7ve9Z+uU34ceDoEUR7skfQgXVIZqjbrTQphgm6EcMSNdRfkK3SJYZL5MNKiKhb7Tt/O3aPBy5bTZy6w==
dependencies: dependencies:
"@sentry/types" "4.4.2" "@sentry/types" "4.5.3"
tslib "^1.9.3" tslib "^1.9.3"
"@types/body-parser@*", "@types/body-parser@1.17.0": "@types/body-parser@*", "@types/body-parser@1.17.0":
@ -1005,7 +1006,7 @@ http-errors@1.6.3, http-errors@~1.6.2, http-errors@~1.6.3:
setprototypeof "1.1.0" setprototypeof "1.1.0"
statuses ">= 1.4.0 < 2" statuses ">= 1.4.0 < 2"
https-proxy-agent@^2.2.1: https-proxy-agent@2.2.1:
version "2.2.1" version "2.2.1"
resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz#51552970fa04d723e04c56d04178c3f92592bbc0" resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz#51552970fa04d723e04c56d04178c3f92592bbc0"
integrity sha512-HPCTS1LW51bcyMYbxUIOO4HEOlQ1/1qRaFWcyxvwaqUS9TY88aoEuHUY33kuAh1YhVVaDQhLZsnPd+XNARWZlQ== integrity sha512-HPCTS1LW51bcyMYbxUIOO4HEOlQ1/1qRaFWcyxvwaqUS9TY88aoEuHUY33kuAh1YhVVaDQhLZsnPd+XNARWZlQ==
@ -1320,6 +1321,11 @@ lru-cache@^4.0.1:
pseudomap "^1.0.2" pseudomap "^1.0.2"
yallist "^2.1.2" yallist "^2.1.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=
lsmod@1.0.0: lsmod@1.0.0:
version "1.0.0" version "1.0.0"
resolved "https://registry.yarnpkg.com/lsmod/-/lsmod-1.0.0.tgz#9a00f76dca36eb23fa05350afe1b585d4299e64b" resolved "https://registry.yarnpkg.com/lsmod/-/lsmod-1.0.0.tgz#9a00f76dca36eb23fa05350afe1b585d4299e64b"

View File

@ -42,8 +42,8 @@
"@loadable/component": "5.5.0", "@loadable/component": "5.5.0",
"@loadable/server": "5.5.0", "@loadable/server": "5.5.0",
"@loadable/webpack-plugin": "5.5.0", "@loadable/webpack-plugin": "5.5.0",
"@sentry/browser": "^4.3.2", "@sentry/browser": "4.6.4",
"@sentry/node": "^4.3.2", "@sentry/node": "4.6.4",
"@svgr/webpack": "^2.4.0", "@svgr/webpack": "^2.4.0",
"@types/classnames": "^2.2.6", "@types/classnames": "^2.2.6",
"@types/cors": "^2.8.4", "@types/cors": "^2.8.4",

View File

@ -1487,59 +1487,74 @@
dependencies: dependencies:
any-observable "^0.3.0" any-observable "^0.3.0"
"@sentry/browser@^4.3.2": "@sentry/browser@4.6.4":
version "4.3.2" version "4.6.4"
resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-4.3.2.tgz#430b83583c5c25d33041dd80bf6ed19216086f70" resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-4.6.4.tgz#94e376be7bb313b6faf9e40950405897dd1c1605"
integrity sha512-w2ITpQbs2vTKS5vtPXDgeDyr+5C4lCnTXugJrqn8u8w/XaDb3vRogfMWpQcaUENllO5xdZSItSAAHsQucY/LvA==
dependencies: dependencies:
"@sentry/core" "4.3.2" "@sentry/core" "4.6.4"
"@sentry/types" "4.3.2" "@sentry/types" "4.5.3"
"@sentry/utils" "4.3.2" "@sentry/utils" "4.6.4"
tslib "^1.9.3"
"@sentry/core@4.3.2": "@sentry/core@4.6.4":
version "4.3.2" version "4.6.4"
resolved "https://registry.yarnpkg.com/@sentry/core/-/core-4.3.2.tgz#e8a2850a11316d865ed7d3030ee2c4a1608bb1d8" resolved "https://registry.yarnpkg.com/@sentry/core/-/core-4.6.4.tgz#7236e08115423b81b96a13c2c37f29bcc1477745"
integrity sha512-NGl2nkAaQ8dGqJAMS1Hb+7RyVjW4tmCbK6d7H/zKnOpBuU+qSW4XCm2NoGLLa8qb4SZUPIBRv6U0ByvEQlGtqw==
dependencies: dependencies:
"@sentry/hub" "4.3.2" "@sentry/hub" "4.6.4"
"@sentry/minimal" "4.3.2" "@sentry/minimal" "4.6.4"
"@sentry/types" "4.3.2" "@sentry/types" "4.5.3"
"@sentry/utils" "4.3.2" "@sentry/utils" "4.6.4"
tslib "^1.9.3"
"@sentry/hub@4.3.2": "@sentry/hub@4.6.4":
version "4.3.2" version "4.6.4"
resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-4.3.2.tgz#1ea10038e2080035d2bc09f5f26829cd106a1516" resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-4.6.4.tgz#2bd5d67ccd43d4f5afc45005a330a11b14d46cea"
integrity sha512-R3ACxUZbrAMP6vyIvt1k4bE3OIyg1CzbEhzknKljPrk1abVmJVP7W/X1vBysdRtI3m/9RjOSO7Lxx3XXqoHoQg==
dependencies: dependencies:
"@sentry/types" "4.3.2" "@sentry/types" "4.5.3"
"@sentry/utils" "4.3.2" "@sentry/utils" "4.6.4"
tslib "^1.9.3"
"@sentry/minimal@4.3.2": "@sentry/minimal@4.6.4":
version "4.3.2" version "4.6.4"
resolved "https://registry.yarnpkg.com/@sentry/minimal/-/minimal-4.3.2.tgz#c0958e5858b2105a6a0b523787e459a03af603cc" resolved "https://registry.yarnpkg.com/@sentry/minimal/-/minimal-4.6.4.tgz#dc4bb47df90dad6025d832852ac11fe29ed50147"
integrity sha512-jZa9mfzDzJI98tg6uxFG3gdVLyz0nOHpLP9H8Kn/BelZ7WEG/ogB8PDi1hI9JvCTXAr8kV81mEecldADa9L9Yg==
dependencies: dependencies:
"@sentry/hub" "4.3.2" "@sentry/hub" "4.6.4"
"@sentry/types" "4.3.2" "@sentry/types" "4.5.3"
tslib "^1.9.3"
"@sentry/node@^4.3.2": "@sentry/node@4.6.4":
version "4.3.2" version "4.6.4"
resolved "https://registry.yarnpkg.com/@sentry/node/-/node-4.3.2.tgz#3c7cd3aff238f3b1eb3252147b963cbdf520aa45" resolved "https://registry.yarnpkg.com/@sentry/node/-/node-4.6.4.tgz#933c2e3ce93bc7861de6d4310ed1fe66f85da301"
integrity sha512-nfaLB+cE0dddjWD0yI0nB/UqXkPw/6FKDRpB1NZ61amAM4QRXa4hRTdHvqjUovzV/5/pVMQYsOyCk0pNWMtMUQ==
dependencies: dependencies:
"@sentry/core" "4.3.2" "@sentry/core" "4.6.4"
"@sentry/hub" "4.3.2" "@sentry/hub" "4.6.4"
"@sentry/types" "4.3.2" "@sentry/types" "4.5.3"
"@sentry/utils" "4.3.2" "@sentry/utils" "4.6.4"
"@types/stack-trace" "0.0.29"
cookie "0.3.1" cookie "0.3.1"
https-proxy-agent "2.2.1"
lru_map "0.3.3"
lsmod "1.0.0" lsmod "1.0.0"
md5 "2.2.1"
stack-trace "0.0.10" stack-trace "0.0.10"
tslib "^1.9.3"
"@sentry/types@4.3.2": "@sentry/types@4.5.3":
version "4.3.2" version "4.5.3"
resolved "https://registry.yarnpkg.com/@sentry/types/-/types-4.3.2.tgz#28b143979482fcbc9f9e520250482dde015b13fa" resolved "https://registry.yarnpkg.com/@sentry/types/-/types-4.5.3.tgz#3350dce2b7f9b936a8c327891c12e3aef7bd8852"
integrity sha512-7ll1PAFNjrBNX9rzy3P2qAQrpQwHaDO3uKj735qsnGw34OtAS8Xr8WYrjI14f9fMPa/XIeWvMPb4GMic28V/ag==
"@sentry/utils@4.3.2": "@sentry/utils@4.6.4":
version "4.3.2" version "4.6.4"
resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-4.3.2.tgz#de14046eba972af9d62508f78cd998b0352d634a" resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-4.6.4.tgz#ca254c142b519b4f20d63c2f9edf1a89966be36f"
integrity sha512-Tc5R46z7ve9Z+uU34ceDoEUR7skfQgXVIZqjbrTQphgm6EcMSNdRfkK3SJYZL5MNKiKhb7Tt/O3aPBy5bTZy6w==
dependencies: dependencies:
"@sentry/types" "4.3.2" "@sentry/types" "4.5.3"
tslib "^1.9.3"
"@storybook/addons@4.0.0-alpha.22": "@storybook/addons@4.0.0-alpha.22":
version "4.0.0-alpha.22" version "4.0.0-alpha.22"
@ -2001,6 +2016,11 @@
version "1.7.5" version "1.7.5"
resolved "https://registry.yarnpkg.com/@types/showdown/-/showdown-1.7.5.tgz#91061f2f16d5bdf66b186185999ed675a8908b6a" resolved "https://registry.yarnpkg.com/@types/showdown/-/showdown-1.7.5.tgz#91061f2f16d5bdf66b186185999ed675a8908b6a"
"@types/stack-trace@0.0.29":
version "0.0.29"
resolved "https://registry.yarnpkg.com/@types/stack-trace/-/stack-trace-0.0.29.tgz#eb7a7c60098edb35630ed900742a5ecb20cfcb4d"
integrity sha512-TgfOX+mGY/NyNxJLIbDWrO9DjGoVSW9+aB8H2yy1fy32jsvxijhmyJI9fDFgvz3YP4lvJaq9DzdR/M1bOgVc9g==
"@types/storybook__react@^3.0.9": "@types/storybook__react@^3.0.9":
version "3.0.9" version "3.0.9"
resolved "https://registry.yarnpkg.com/@types/storybook__react/-/storybook__react-3.0.9.tgz#aac193f0c037ddfc2342bd027d720553ac089a56" resolved "https://registry.yarnpkg.com/@types/storybook__react/-/storybook__react-3.0.9.tgz#aac193f0c037ddfc2342bd027d720553ac089a56"
@ -2243,6 +2263,13 @@ address@1.0.3, address@^1.0.1:
version "1.0.3" version "1.0.3"
resolved "https://registry.yarnpkg.com/address/-/address-1.0.3.tgz#b5f50631f8d6cec8bd20c963963afb55e06cbce9" resolved "https://registry.yarnpkg.com/address/-/address-1.0.3.tgz#b5f50631f8d6cec8bd20c963963afb55e06cbce9"
agent-base@^4.1.0:
version "4.2.1"
resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.2.1.tgz#d89e5999f797875674c07d87f260fc41e83e8ca9"
integrity sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg==
dependencies:
es6-promisify "^5.0.0"
"airbnb-js-shims@^1 || ^2": "airbnb-js-shims@^1 || ^2":
version "2.1.1" version "2.1.1"
resolved "https://registry.yarnpkg.com/airbnb-js-shims/-/airbnb-js-shims-2.1.1.tgz#a509611480db7e6d9db62fe2acfaeb473b6842ac" resolved "https://registry.yarnpkg.com/airbnb-js-shims/-/airbnb-js-shims-2.1.1.tgz#a509611480db7e6d9db62fe2acfaeb473b6842ac"
@ -3444,10 +3471,6 @@ chardet@^0.7.0:
version "0.7.0" version "0.7.0"
resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e"
charenc@~0.0.1:
version "0.0.2"
resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667"
check-types@^7.3.0: check-types@^7.3.0:
version "7.4.0" version "7.4.0"
resolved "https://registry.yarnpkg.com/check-types/-/check-types-7.4.0.tgz#0378ec1b9616ec71f774931a3c6516fad8c152f4" resolved "https://registry.yarnpkg.com/check-types/-/check-types-7.4.0.tgz#0378ec1b9616ec71f774931a3c6516fad8c152f4"
@ -3988,10 +4011,6 @@ cross-spawn@^3.0.0:
lru-cache "^4.0.1" lru-cache "^4.0.1"
which "^1.2.9" which "^1.2.9"
crypt@~0.0.1:
version "0.0.2"
resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b"
crypto-browserify@^3.11.0: crypto-browserify@^3.11.0:
version "3.12.0" version "3.12.0"
resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec"
@ -4784,6 +4803,13 @@ es6-promise@^4.0.3:
version "4.1.1" version "4.1.1"
resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.1.1.tgz#8811e90915d9a0dba36274f0b242dbda78f9c92a" resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.1.1.tgz#8811e90915d9a0dba36274f0b242dbda78f9c92a"
es6-promisify@^5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203"
integrity sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=
dependencies:
es6-promise "^4.0.3"
es6-shim@^0.35.3: es6-shim@^0.35.3:
version "0.35.3" version "0.35.3"
resolved "https://registry.yarnpkg.com/es6-shim/-/es6-shim-0.35.3.tgz#9bfb7363feffff87a6cdb6cd93e405ec3c4b6f26" resolved "https://registry.yarnpkg.com/es6-shim/-/es6-shim-0.35.3.tgz#9bfb7363feffff87a6cdb6cd93e405ec3c4b6f26"
@ -6152,6 +6178,14 @@ https-browserify@^1.0.0:
version "1.0.0" version "1.0.0"
resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73"
https-proxy-agent@2.2.1:
version "2.2.1"
resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz#51552970fa04d723e04c56d04178c3f92592bbc0"
integrity sha512-HPCTS1LW51bcyMYbxUIOO4HEOlQ1/1qRaFWcyxvwaqUS9TY88aoEuHUY33kuAh1YhVVaDQhLZsnPd+XNARWZlQ==
dependencies:
agent-base "^4.1.0"
debug "^3.1.0"
https-proxy@0.0.2: https-proxy@0.0.2:
version "0.0.2" version "0.0.2"
resolved "https://registry.yarnpkg.com/https-proxy/-/https-proxy-0.0.2.tgz#9e7d542f1ce8d37c06e1f940a8a9a227bb48ddf0" resolved "https://registry.yarnpkg.com/https-proxy/-/https-proxy-0.0.2.tgz#9e7d542f1ce8d37c06e1f940a8a9a227bb48ddf0"
@ -6488,7 +6522,7 @@ is-binary-path@^1.0.0:
dependencies: dependencies:
binary-extensions "^1.0.0" binary-extensions "^1.0.0"
is-buffer@^1.0.2, is-buffer@^1.1.5, is-buffer@~1.1.1: is-buffer@^1.0.2, is-buffer@^1.1.5:
version "1.1.6" version "1.1.6"
resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
@ -7437,6 +7471,11 @@ lru-cache@^4.1.1:
pseudomap "^1.0.2" pseudomap "^1.0.2"
yallist "^2.1.2" yallist "^2.1.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=
lsmod@1.0.0: lsmod@1.0.0:
version "1.0.0" version "1.0.0"
resolved "https://registry.yarnpkg.com/lsmod/-/lsmod-1.0.0.tgz#9a00f76dca36eb23fa05350afe1b585d4299e64b" resolved "https://registry.yarnpkg.com/lsmod/-/lsmod-1.0.0.tgz#9a00f76dca36eb23fa05350afe1b585d4299e64b"
@ -7493,14 +7532,6 @@ md5.js@^1.3.4:
hash-base "^3.0.0" hash-base "^3.0.0"
inherits "^2.0.1" inherits "^2.0.1"
md5@2.2.1:
version "2.2.1"
resolved "https://registry.yarnpkg.com/md5/-/md5-2.2.1.tgz#53ab38d5fe3c8891ba465329ea23fac0540126f9"
dependencies:
charenc "~0.0.1"
crypt "~0.0.1"
is-buffer "~1.1.1"
mdn-data@~1.1.0: mdn-data@~1.1.0:
version "1.1.4" version "1.1.4"
resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-1.1.4.tgz#50b5d4ffc4575276573c4eedb8780812a8419f01" resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-1.1.4.tgz#50b5d4ffc4575276573c4eedb8780812a8419f01"
@ -11341,7 +11372,7 @@ tslib@1.9.0:
version "1.9.0" version "1.9.0"
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.0.tgz#e37a86fda8cbbaf23a057f473c9f4dc64e5fc2e8" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.0.tgz#e37a86fda8cbbaf23a057f473c9f4dc64e5fc2e8"
tslib@^1.7.1, tslib@^1.8.0, tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.2: tslib@^1.7.1, tslib@^1.8.0, tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.2, tslib@^1.9.3:
version "1.9.3" version "1.9.3"
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286"