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:
parent
4773c4a4ac
commit
3050caf329
|
@ -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": "You’ve done that too many times, please wait and try again later"}), 429
|
return jsonify({"message": "You’ve 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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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:
|
||||||
|
|
|
@ -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))
|
||||||
|
|
|
@ -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)
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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",
|
||||||
|
|
|
@ -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"
|
||||||
|
|
|
@ -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",
|
||||||
|
|
|
@ -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"
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue