mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-12-23 09:52:26 +01:00
136ede5d4c
* WIP blockaid: add request failed UI - proposed to update reason value. planning to update upon update * alphabetize * BlockaidBannerAlert: update tkeys based on reason * SecurityProviderBannerAlert: fix footer alignment * BlockaidBannerAlert: rm footer w failed resultType --------- Co-authored-by: legobeat <109787230+legobeat@users.noreply.github.com> Co-authored-by: Jyoti Puri <jyotipuri@gmail.com>
99 lines
3.1 KiB
JavaScript
99 lines
3.1 KiB
JavaScript
import React, { useContext } from 'react';
|
|
import PropTypes from 'prop-types';
|
|
import { captureException } from '@sentry/browser';
|
|
|
|
import { Text } from '../../../component-library';
|
|
import { Severity } from '../../../../helpers/constants/design-system';
|
|
import { I18nContext } from '../../../../contexts/i18n';
|
|
|
|
import {
|
|
BlockaidReason,
|
|
BlockaidResultType,
|
|
SecurityProvider,
|
|
} from '../../../../../shared/constants/security-provider';
|
|
import SecurityProviderBannerAlert from '../security-provider-banner-alert';
|
|
|
|
/** Reason to description translation key mapping. Grouped by translations. */
|
|
const REASON_TO_DESCRIPTION_TKEY = Object.freeze({
|
|
[BlockaidReason.approvalFarming]: 'blockaidDescriptionApproveFarming',
|
|
[BlockaidReason.permitFarming]: 'blockaidDescriptionApproveFarming',
|
|
[BlockaidReason.setApprovalForAll]: 'blockaidDescriptionApproveFarming',
|
|
|
|
[BlockaidReason.blurFarming]: 'blockaidDescriptionBlurFarming',
|
|
|
|
[BlockaidReason.failed]: 'blockaidDescriptionFailed',
|
|
|
|
[BlockaidReason.seaportFarming]: 'blockaidDescriptionSeaportFarming',
|
|
|
|
[BlockaidReason.maliciousDomain]: 'blockaidDescriptionMaliciousDomain',
|
|
|
|
[BlockaidReason.rawSignatureFarming]: 'blockaidDescriptionMightLoseAssets',
|
|
[BlockaidReason.tradeOrderFarming]: 'blockaidDescriptionMightLoseAssets',
|
|
[BlockaidReason.unfairTrade]: 'blockaidDescriptionMightLoseAssets',
|
|
|
|
[BlockaidReason.rawNativeTokenTransfer]: 'blockaidDescriptionTransferFarming',
|
|
[BlockaidReason.transferFarming]: 'blockaidDescriptionTransferFarming',
|
|
[BlockaidReason.transferFromFarming]: 'blockaidDescriptionTransferFarming',
|
|
|
|
[BlockaidReason.other]: 'blockaidDescriptionMightLoseAssets',
|
|
});
|
|
|
|
/** Reason to title translation key mapping. */
|
|
const REASON_TO_TITLE_TKEY = Object.freeze({
|
|
[BlockaidReason.failed]: 'blockaidTitleMayNotBeSafe',
|
|
[BlockaidReason.rawSignatureFarming]: 'blockaidTitleSuspicious',
|
|
});
|
|
|
|
function BlockaidBannerAlert({ securityAlertResponse }) {
|
|
const t = useContext(I18nContext);
|
|
|
|
if (!securityAlertResponse) {
|
|
return null;
|
|
}
|
|
|
|
const { reason, result_type: resultType, features } = securityAlertResponse;
|
|
|
|
if (resultType === BlockaidResultType.Benign) {
|
|
return null;
|
|
}
|
|
|
|
if (!REASON_TO_DESCRIPTION_TKEY[reason]) {
|
|
captureException(`BlockaidBannerAlert: Unidentified reason '${reason}'`);
|
|
}
|
|
|
|
const description = t(REASON_TO_DESCRIPTION_TKEY[reason] || 'other');
|
|
|
|
const details = Boolean(features?.length) && (
|
|
<Text as="ul">
|
|
{features.map((feature, i) => (
|
|
<li key={`blockaid-detail-${i}`}>• {feature}</li>
|
|
))}
|
|
</Text>
|
|
);
|
|
|
|
const isFailedResultType = resultType === BlockaidResultType.Failed;
|
|
|
|
const severity =
|
|
resultType === BlockaidResultType.Malicious
|
|
? Severity.Danger
|
|
: Severity.Warning;
|
|
|
|
const title = t(REASON_TO_TITLE_TKEY[reason] || 'blockaidTitleDeceptive');
|
|
|
|
return (
|
|
<SecurityProviderBannerAlert
|
|
description={description}
|
|
details={details}
|
|
provider={isFailedResultType ? null : SecurityProvider.Blockaid}
|
|
severity={severity}
|
|
title={title}
|
|
/>
|
|
);
|
|
}
|
|
|
|
BlockaidBannerAlert.propTypes = {
|
|
securityAlertResponse: PropTypes.object,
|
|
};
|
|
|
|
export default BlockaidBannerAlert;
|