Make error reporter not return a promise and add more environment possibilities
This commit is contained in:
@@ -571,7 +571,7 @@ export class Blockchain {
|
||||
configs.DEFAULT_TRACKED_TOKEN_SYMBOLS,
|
||||
)}) not found in tokenRegistry: ${JSON.stringify(tokenRegistryTokens)}`,
|
||||
);
|
||||
await errorReporter.reportAsync(err);
|
||||
errorReporter.report(err);
|
||||
return;
|
||||
}
|
||||
if (_.isEmpty(trackedTokensByAddress)) {
|
||||
@@ -683,7 +683,7 @@ export class Blockchain {
|
||||
// errors will be thrown by `watch`. For now, let's log the error
|
||||
// to rollbar and stop watching when one occurs
|
||||
// tslint:disable-next-line:no-floating-promises
|
||||
errorReporter.reportAsync(err); // fire and forget
|
||||
errorReporter.report(err); // fire and forget
|
||||
return;
|
||||
} else {
|
||||
const decodedLog = decodedLogEvent.log;
|
||||
@@ -915,7 +915,7 @@ export class Blockchain {
|
||||
if (_.includes(errMsg, 'not been deployed to detected network')) {
|
||||
throw new Error(BlockchainCallErrs.ContractDoesNotExist);
|
||||
} else {
|
||||
await errorReporter.reportAsync(err);
|
||||
errorReporter.report(err);
|
||||
throw new Error(BlockchainCallErrs.UnhandledError);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -118,7 +118,7 @@ export class EthWethConversionButton extends React.Component<
|
||||
? 'Failed to wrap your ETH. Please try again.'
|
||||
: 'Failed to unwrap your WETH. Please try again.';
|
||||
this.props.dispatcher.showFlashMessage(errorMsg);
|
||||
await errorReporter.reportAsync(err);
|
||||
errorReporter.report(err);
|
||||
}
|
||||
}
|
||||
this.setState({
|
||||
|
||||
@@ -583,7 +583,7 @@ export class FillOrder extends React.Component<FillOrderProps, FillOrderState> {
|
||||
this.setState({
|
||||
globalErrMsg,
|
||||
});
|
||||
await errorReporter.reportAsync(err);
|
||||
errorReporter.report(err);
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -654,7 +654,7 @@ export class FillOrder extends React.Component<FillOrderProps, FillOrderState> {
|
||||
this.setState({
|
||||
globalErrMsg,
|
||||
});
|
||||
await errorReporter.reportAsync(err);
|
||||
errorReporter.report(err);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -349,7 +349,7 @@ export class GenerateOrderForm extends React.Component<GenerateOrderFormProps, G
|
||||
globalErrMsg = 'An unexpected error occured. Please try refreshing the page';
|
||||
logUtils.log(`Unexpected error occured: ${err}`);
|
||||
logUtils.log(err.stack);
|
||||
await errorReporter.reportAsync(err);
|
||||
errorReporter.report(err);
|
||||
}
|
||||
}
|
||||
this.setState({
|
||||
|
||||
@@ -129,7 +129,7 @@ export class AllowanceToggle extends React.Component<AllowanceToggleProps, Allow
|
||||
logUtils.log(`Unexpected error encountered: ${err}`);
|
||||
logUtils.log(err.stack);
|
||||
this.props.onErrorOccurred(BalanceErrs.allowanceSettingFailed);
|
||||
await errorReporter.reportAsync(err);
|
||||
errorReporter.report(err);
|
||||
}
|
||||
}
|
||||
private _isAllowanceSet(): boolean {
|
||||
|
||||
@@ -154,7 +154,7 @@ You can see and fill it here: ${this.state.shareLink}`);
|
||||
if (response.status !== 200 || bodyObj.status_code !== 200) {
|
||||
// TODO: Show error message in UI
|
||||
logUtils.log(`Unexpected status code: ${response.status} -> ${responseBody}`);
|
||||
await errorReporter.reportAsync(new Error(`Bitly returned non-200: ${JSON.stringify(response)}`));
|
||||
errorReporter.report(new Error(`Bitly returned non-200: ${JSON.stringify(response)}`));
|
||||
return '';
|
||||
}
|
||||
return bodyObj.data.url;
|
||||
|
||||
@@ -80,7 +80,7 @@ export class SendButton extends React.Component<SendButtonProps, SendButtonState
|
||||
logUtils.log(`Unexpected error encountered: ${err}`);
|
||||
logUtils.log(err.stack);
|
||||
this.props.onError();
|
||||
await errorReporter.reportAsync(err);
|
||||
errorReporter.report(err);
|
||||
}
|
||||
}
|
||||
this.setState({
|
||||
|
||||
@@ -526,7 +526,7 @@ export class TokenBalances extends React.Component<TokenBalancesProps, TokenBala
|
||||
this.setState({
|
||||
errorType: BalanceErrs.mintingFailed,
|
||||
});
|
||||
await errorReporter.reportAsync(err);
|
||||
errorReporter.report(err);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -561,7 +561,7 @@ export class TokenBalances extends React.Component<TokenBalancesProps, TokenBala
|
||||
this.setState({
|
||||
errorType,
|
||||
});
|
||||
await errorReporter.reportAsync(new Error(`Faucet returned non-200: ${JSON.stringify(response)}`));
|
||||
errorReporter.report(new Error(`Faucet returned non-200: ${JSON.stringify(response)}`));
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
@@ -219,7 +219,7 @@ export class WrapEtherItem extends React.Component<WrapEtherItemProps, WrapEther
|
||||
this.props.dispatcher.showFlashMessage('Failed to unwrap your WETH. Please try again.');
|
||||
analytics.logEvent('Portal', 'Unwrap WETH Failed', networkName);
|
||||
}
|
||||
await errorReporter.reportAsync(err);
|
||||
errorReporter.report(err);
|
||||
}
|
||||
}
|
||||
this.setState({
|
||||
|
||||
@@ -244,6 +244,8 @@ export enum BlockchainCallErrs {
|
||||
|
||||
export enum Environments {
|
||||
DEVELOPMENT = 'DEVELOPMENT',
|
||||
DOGFOOD = 'DOGFOOD',
|
||||
STAGING = 'STAGING',
|
||||
PRODUCTION = 'PRODUCTION',
|
||||
}
|
||||
|
||||
|
||||
@@ -2,10 +2,6 @@ import * as _ from 'lodash';
|
||||
import { Environments, OutdatedWrappedEtherByNetworkId, PublicNodeUrlsByNetworkId } from 'ts/types';
|
||||
|
||||
const BASE_URL = window.location.origin;
|
||||
const isDevelopment = _.includes(
|
||||
['https://0xproject.localhost:3572', 'https://localhost:3572', 'https://127.0.0.1'],
|
||||
BASE_URL,
|
||||
);
|
||||
const INFURA_API_KEY = 'T5WSC8cautR4KXyYgsRs';
|
||||
|
||||
export const configs = {
|
||||
@@ -21,7 +17,6 @@ export const configs = {
|
||||
DOMAIN_DOGFOOD: 'dogfood.0xproject.com',
|
||||
DOMAIN_DEVELOPMENT: '0xproject.localhost:3572',
|
||||
DOMAIN_PRODUCTION: '0xproject.com',
|
||||
ENVIRONMENT: isDevelopment ? Environments.DEVELOPMENT : Environments.PRODUCTION,
|
||||
GOOGLE_ANALYTICS_ID: 'UA-98720122-1',
|
||||
LAST_LOCAL_STORAGE_FILL_CLEARANCE_DATE: '2017-11-22',
|
||||
LAST_LOCAL_STORAGE_TRACKED_TOKEN_CLEARANCE_DATE: '2018-7-5',
|
||||
|
||||
@@ -2,6 +2,7 @@ import { logUtils } from '@0xproject/utils';
|
||||
import { Environments } from 'ts/types';
|
||||
import { configs } from 'ts/utils/configs';
|
||||
import { constants } from 'ts/utils/constants';
|
||||
import { utils } from 'ts/utils/utils';
|
||||
|
||||
// Suggested way to include Rollbar with Webpack
|
||||
// https://github.com/rollbar/rollbar.js/tree/master/examples/webpack
|
||||
@@ -12,7 +13,7 @@ const rollbarConfig = {
|
||||
itemsPerMinute: 10,
|
||||
maxItems: 500,
|
||||
payload: {
|
||||
environment: configs.ENVIRONMENT,
|
||||
environment: utils.getEnvironment(),
|
||||
client: {
|
||||
javascript: {
|
||||
source_map_enabled: true,
|
||||
@@ -40,21 +41,14 @@ import Rollbar = require('../../public/js/rollbar.umd.min.js');
|
||||
const rollbar = Rollbar.init(rollbarConfig);
|
||||
|
||||
export const errorReporter = {
|
||||
async reportAsync(err: Error): Promise<any> {
|
||||
if (configs.ENVIRONMENT === Environments.DEVELOPMENT) {
|
||||
report(err: Error): void {
|
||||
if (utils.getEnvironment() === Environments.DEVELOPMENT) {
|
||||
return; // Let's not log development errors to rollbar
|
||||
}
|
||||
|
||||
return new Promise((resolve, _reject) => {
|
||||
rollbar.error(err, (rollbarErr: Error) => {
|
||||
if (rollbarErr) {
|
||||
logUtils.log(`Error reporting to rollbar, ignoring: ${rollbarErr}`);
|
||||
// We never want to reject and cause the app to throw because of rollbar
|
||||
resolve();
|
||||
} else {
|
||||
resolve();
|
||||
}
|
||||
});
|
||||
rollbar.error(err, (rollbarErr: Error) => {
|
||||
if (rollbarErr) {
|
||||
logUtils.log(`Error reporting to rollbar, ignoring: ${rollbarErr}`);
|
||||
}
|
||||
});
|
||||
},
|
||||
};
|
||||
|
||||
@@ -9,8 +9,7 @@ const logErrorIfPresent = (response: Response, requestedURL: string) => {
|
||||
const errorText = `Error requesting url: ${requestedURL}, ${response.status}: ${response.statusText}`;
|
||||
logUtils.log(errorText);
|
||||
const error = Error(errorText);
|
||||
// tslint:disable-next-line:no-floating-promises
|
||||
errorReporter.reportAsync(error);
|
||||
errorReporter.report(error);
|
||||
throw error;
|
||||
}
|
||||
};
|
||||
|
||||
@@ -31,8 +31,6 @@ import { constants } from 'ts/utils/constants';
|
||||
import { errorReporter } from 'ts/utils/error_reporter';
|
||||
import * as u2f from 'ts/vendor/u2f_api';
|
||||
|
||||
const isDogfood = (): boolean => _.includes(window.location.href, configs.DOMAIN_DOGFOOD);
|
||||
|
||||
export const utils = {
|
||||
assert(condition: boolean, message: string): void {
|
||||
if (!condition) {
|
||||
@@ -347,10 +345,13 @@ export const utils = {
|
||||
return parsedProviderName;
|
||||
},
|
||||
getBackendBaseUrl(): string {
|
||||
return isDogfood() ? configs.BACKEND_BASE_STAGING_URL : configs.BACKEND_BASE_PROD_URL;
|
||||
return utils.isDogfood() ? configs.BACKEND_BASE_STAGING_URL : configs.BACKEND_BASE_PROD_URL;
|
||||
},
|
||||
isDevelopment(): boolean {
|
||||
return configs.ENVIRONMENT === Environments.DEVELOPMENT;
|
||||
return _.includes(
|
||||
['https://0xproject.localhost:3572', 'https://localhost:3572', 'https://127.0.0.1'],
|
||||
window.location.origin,
|
||||
);
|
||||
},
|
||||
isStaging(): boolean {
|
||||
return _.includes(window.location.href, configs.DOMAIN_STAGING);
|
||||
@@ -358,7 +359,27 @@ export const utils = {
|
||||
isExternallyInjected(providerType: ProviderType, injectedProviderName: string): boolean {
|
||||
return providerType === ProviderType.Injected && injectedProviderName !== constants.PROVIDER_NAME_PUBLIC;
|
||||
},
|
||||
isDogfood,
|
||||
isDogfood(): boolean {
|
||||
return _.includes(window.location.href, configs.DOMAIN_DOGFOOD);
|
||||
},
|
||||
isProduction(): boolean {
|
||||
return _.includes(window.location.href, configs.DOMAIN_PRODUCTION);
|
||||
},
|
||||
getEnvironment(): Environments {
|
||||
if (utils.isDogfood()) {
|
||||
return Environments.DOGFOOD;
|
||||
}
|
||||
if (utils.isDevelopment()) {
|
||||
return Environments.DEVELOPMENT;
|
||||
}
|
||||
if (utils.isStaging()) {
|
||||
return Environments.STAGING;
|
||||
}
|
||||
if (utils.isProduction()) {
|
||||
return Environments.PRODUCTION;
|
||||
}
|
||||
return undefined;
|
||||
},
|
||||
shouldShowJobsPage(): boolean {
|
||||
return this.isDevelopment() || this.isStaging() || this.isDogfood();
|
||||
},
|
||||
@@ -391,10 +412,7 @@ export const utils = {
|
||||
const format = `0,0.${_.repeat('0', precision)}`;
|
||||
const formattedAmount = numeral(unitAmount).format(format);
|
||||
if (_.isNaN(formattedAmount)) {
|
||||
// tslint:disable-next-line:no-floating-promises
|
||||
errorReporter.reportAsync(
|
||||
new Error(`amount ${BigNumber}, decimals ${decimals} could not be formatted and returned NaN.`),
|
||||
);
|
||||
// https://github.com/adamwdraper/Numeral-js/issues/596
|
||||
return format;
|
||||
}
|
||||
return formattedAmount;
|
||||
|
||||
Reference in New Issue
Block a user