diff --git a/app/components/Approvals/SignatureApproval/SignatureApproval.tsx b/app/components/Approvals/SignatureApproval/SignatureApproval.tsx index a72537869df..318cb08e432 100644 --- a/app/components/Approvals/SignatureApproval/SignatureApproval.tsx +++ b/app/components/Approvals/SignatureApproval/SignatureApproval.tsx @@ -4,9 +4,11 @@ import { ApprovalTypes } from '../../../core/RPCMethods/RPCMethodMiddleware'; import SignatureRequestRoot from '../../UI/SignatureRequest/Root'; const SignatureApproval = () => { - const { approvalRequest } = useApprovalRequest(); + const { approvalRequest, onReject, onConfirm } = useApprovalRequest(); - const onSign = useCallback(() => undefined, []); + const onSignConfirm = useCallback(() => { + onConfirm({ waitForResult: true }); + }, [onConfirm]); const messageParams = approvalRequest && @@ -22,7 +24,8 @@ const SignatureApproval = () => { ); }; diff --git a/app/components/Approvals/SignatureApproval/__snapshots__/SignatureApproval.test.tsx.snap b/app/components/Approvals/SignatureApproval/__snapshots__/SignatureApproval.test.tsx.snap index 56958cba6b6..78b955c6b01 100644 --- a/app/components/Approvals/SignatureApproval/__snapshots__/SignatureApproval.test.tsx.snap +++ b/app/components/Approvals/SignatureApproval/__snapshots__/SignatureApproval.test.tsx.snap @@ -8,7 +8,7 @@ exports[`SignatureApproval populates message params if approval type is eth_sign "test": "value", } } - onSign={[Function]} + onSignConfirm={[Function]} /> `; @@ -20,7 +20,7 @@ exports[`SignatureApproval populates message params if approval type is eth_sign "test": "value", } } - onSign={[Function]} + onSignConfirm={[Function]} /> `; @@ -32,19 +32,19 @@ exports[`SignatureApproval populates message params if approval type is personal "test": "value", } } - onSign={[Function]} + onSignConfirm={[Function]} /> `; exports[`SignatureApproval provides no message params if incorrect approval request type 1`] = ` `; exports[`SignatureApproval provides no message params if no approval request 1`] = ` `; diff --git a/app/components/UI/MessageSign/MessageSign.tsx b/app/components/UI/MessageSign/MessageSign.tsx new file mode 100644 index 00000000000..7ba7ad8e22f --- /dev/null +++ b/app/components/UI/MessageSign/MessageSign.tsx @@ -0,0 +1,198 @@ +import React, { PureComponent } from 'react'; +import { StyleSheet, View, Text } from 'react-native'; +import { fontStyles } from '../../../styles/common'; +import SignatureRequest from '../SignatureRequest'; +import ExpandedMessage from '../SignatureRequest/ExpandedMessage'; +import { KEYSTONE_TX_CANCELED } from '../../../constants/error'; +import { MetaMetricsEvents } from '../../../core/Analytics'; +import AnalyticsV2 from '../../../util/analyticsV2'; +import { ThemeContext, mockTheme } from '../../../util/theme'; +import { + addSignatureErrorListener, + getAnalyticsParams, + handleSignatureAction, + removeSignatureErrorListener, +} from '../../../util/confirmation/signatureUtils'; +import { MessageParams, PageMeta } from '../SignatureRequest/types'; +import { Colors } from '../../../util/theme/models'; + +interface MessageSignProps { + /** + * react-navigation object used for switching between screens + */ + navigation: any; + /** + * Callback triggered when this message signature is rejected + */ + onReject: () => void; + /** + * Callback triggered when this message signature is approved + */ + onConfirm: () => void; + /** + * Message to be displayed to the user + */ + messageParams: MessageParams; + /** + * Object containing current page title and url + */ + currentPageInformation: PageMeta; + /** + * Hides or shows the expanded signing message + */ + toggleExpandedMessage: () => void; + /** + * Indicated whether or not the expanded message is shown + */ + showExpandedMessage: boolean; +} + +interface MessageSignState { + truncateMessage: boolean; +} + +const createStyles = (colors: Colors) => + StyleSheet.create({ + expandedMessage: { + textAlign: 'center', + ...fontStyles.normal, + fontSize: 14, + color: colors.text.default, + }, + messageText: { + color: colors.text.default, + }, + messageWrapper: { + marginBottom: 4, + }, + }); + +/** + * Component that supports eth_sign + */ +class MessageSign extends PureComponent { + static contextType = ThemeContext; + + state: MessageSignState = { + truncateMessage: false, + }; + + componentDidMount = () => { + const { + messageParams: { metamaskId }, + } = this.props; + AnalyticsV2.trackEvent( + MetaMetricsEvents.SIGN_REQUEST_STARTED, + getAnalyticsParams(), + ); + addSignatureErrorListener(metamaskId, this.onSignatureError); + }; + + componentWillUnmount = () => { + const { + messageParams: { metamaskId }, + } = this.props; + removeSignatureErrorListener(metamaskId, this.onSignatureError); + }; + + onSignatureError = ({ error }: any) => { + if (error?.message.startsWith(KEYSTONE_TX_CANCELED)) { + AnalyticsV2.trackEvent( + MetaMetricsEvents.QR_HARDWARE_TRANSACTION_CANCELED, + getAnalyticsParams(), + ); + } + }; + + rejectSignature = async () => { + const { messageParams, onReject } = this.props; + await handleSignatureAction(onReject, messageParams, 'eth', false); + }; + + confirmSignature = async () => { + const { messageParams, onConfirm } = this.props; + await handleSignatureAction(onConfirm, messageParams, 'eth', true); + }; + + getStyles = () => { + const colors = this.context.colors || mockTheme.colors; + return createStyles(colors); + }; + + renderMessageText = () => { + const { messageParams, showExpandedMessage } = this.props; + const { truncateMessage } = this.state; + const styles = this.getStyles(); + + let messageText; + if (showExpandedMessage) { + messageText = ( + {messageParams.data} + ); + } else { + messageText = truncateMessage ? ( + + {messageParams.data} + + ) : ( + + {messageParams.data} + + ); + } + return messageText; + }; + + shouldTruncateMessage = (e: any) => { + if (e.nativeEvent.lines.length > 5) { + this.setState({ truncateMessage: true }); + return; + } + this.setState({ truncateMessage: false }); + }; + + render() { + const { + currentPageInformation, + navigation, + showExpandedMessage, + toggleExpandedMessage, + messageParams: { from }, + } = this.props; + const styles = this.getStyles(); + + const rootView = showExpandedMessage ? ( + + ) : ( + + {this.renderMessageText()} + + ); + return rootView; + } +} + +export default MessageSign; diff --git a/app/components/UI/MessageSign/__snapshots__/index.test.tsx.snap b/app/components/UI/MessageSign/__snapshots__/index.test.tsx.snap index 067efe71f2c..88e3afd42e9 100644 --- a/app/components/UI/MessageSign/__snapshots__/index.test.tsx.snap +++ b/app/components/UI/MessageSign/__snapshots__/index.test.tsx.snap @@ -11,11 +11,19 @@ exports[`MessageSign should render correctly 1`] = ` messageParams={ Object { "data": "message", + "from": "0x0", "metamaskId": "TestMessageId", "origin": "example.com", } } - onCancel={[Function]} - onConfirm={[Function]} + navigation={ + Object { + "navigate": [MockFunction], + } + } + onConfirm={[MockFunction]} + onReject={[MockFunction]} + showExpandedMessage={false} + toggleExpandedMessage={[MockFunction]} /> `; diff --git a/app/components/UI/MessageSign/index.js b/app/components/UI/MessageSign/index.js deleted file mode 100644 index 2f36d2ea993..00000000000 --- a/app/components/UI/MessageSign/index.js +++ /dev/null @@ -1,251 +0,0 @@ -import React, { PureComponent } from 'react'; -import PropTypes from 'prop-types'; -import { StyleSheet, View, Text, InteractionManager } from 'react-native'; -import { fontStyles } from '../../../styles/common'; -import Engine from '../../../core/Engine'; -import SignatureRequest from '../SignatureRequest'; -import ExpandedMessage from '../SignatureRequest/ExpandedMessage'; -import { KEYSTONE_TX_CANCELED } from '../../../constants/error'; -import NotificationManager from '../../../core/NotificationManager'; -import { strings } from '../../../../locales/i18n'; -import { WALLET_CONNECT_ORIGIN } from '../../../util/walletconnect'; -import URL from 'url-parse'; -import { MetaMetricsEvents } from '../../../core/Analytics'; -import AnalyticsV2 from '../../../util/analyticsV2'; - -import { getAddressAccountType } from '../../../util/address'; -import { ThemeContext, mockTheme } from '../../../util/theme'; -import AppConstants from '../../../core/AppConstants'; - -const createStyles = (colors) => - StyleSheet.create({ - expandedMessage: { - textAlign: 'center', - ...fontStyles.normal, - fontSize: 14, - color: colors.text.default, - }, - messageText: { - color: colors.text.default, - }, - messageWrapper: { - marginBottom: 4, - }, - }); - -/** - * Component that supports eth_sign - */ -class MessageSign extends PureComponent { - static propTypes = { - /** - * react-navigation object used for switching between screens - */ - navigation: PropTypes.object, - /** - * Callback triggered when this message signature is rejected - */ - onCancel: PropTypes.func, - /** - * Callback triggered when this message signature is approved - */ - onConfirm: PropTypes.func, - /** - * Personal message to be displayed to the user - */ - messageParams: PropTypes.object, - /** - * Object containing current page title and url - */ - currentPageInformation: PropTypes.object, - /** - * Hides or shows the expanded signing message - */ - toggleExpandedMessage: PropTypes.func, - /** - * Indicated whether or not the expanded message is shown - */ - showExpandedMessage: PropTypes.bool, - }; - - state = { - truncateMessage: false, - }; - - getAnalyticsParams = () => { - try { - const { - currentPageInformation, - messageParams: { from }, - } = this.props; - const { NetworkController } = Engine.context; - const { chainId } = NetworkController?.state?.providerConfig || {}; - const url = new URL(currentPageInformation?.url); - return { - account_type: getAddressAccountType(from), - dapp_host_name: url?.host, - dapp_url: currentPageInformation?.url, - chain_id: chainId, - sign_type: 'eth', - ...currentPageInformation?.analytics, - }; - } catch (error) { - return {}; - } - }; - - componentDidMount = () => { - AnalyticsV2.trackEvent( - MetaMetricsEvents.SIGN_REQUEST_STARTED, - this.getAnalyticsParams(), - ); - }; - - showWalletConnectNotification = ( - messageParams = {}, - confirmation = false, - ) => { - InteractionManager.runAfterInteractions(() => { - messageParams.origin && - (messageParams.origin.startsWith(WALLET_CONNECT_ORIGIN) || - messageParams.origin.startsWith( - AppConstants.MM_SDK.SDK_REMOTE_ORIGIN, - )) && - NotificationManager.showSimpleNotification({ - status: `simple_notification${!confirmation ? '_rejected' : ''}`, - duration: 5000, - title: confirmation - ? strings('notifications.wc_signed_title') - : strings('notifications.wc_signed_rejected_title'), - description: strings('notifications.wc_description'), - }); - }); - }; - - signMessage = async () => { - const { messageParams } = this.props; - const { SignatureController } = Engine.context; - await SignatureController.signMessage(messageParams); - this.showWalletConnectNotification(messageParams, true); - }; - - rejectMessage = async () => { - const { messageParams } = this.props; - const { SignatureController } = Engine.context; - const messageId = messageParams.metamaskId; - await SignatureController.cancelMessage(messageId); - this.showWalletConnectNotification(messageParams); - }; - - cancelSignature = () => { - this.rejectMessage(); - AnalyticsV2.trackEvent( - MetaMetricsEvents.SIGN_REQUEST_CANCELLED, - this.getAnalyticsParams(), - ); - this.props.onCancel(); - }; - - confirmSignature = async () => { - try { - await this.signMessage(); - AnalyticsV2.trackEvent( - MetaMetricsEvents.SIGN_REQUEST_COMPLETED, - this.getAnalyticsParams(), - ); - this.props.onConfirm(); - } catch (e) { - if (e?.message.startsWith(KEYSTONE_TX_CANCELED)) { - AnalyticsV2.trackEvent( - MetaMetricsEvents.QR_HARDWARE_TRANSACTION_CANCELED, - this.getAnalyticsParams(), - ); - this.props.onCancel(); - } - } - }; - - getStyles = () => { - const colors = this.context.colors || mockTheme.colors; - return createStyles(colors); - }; - - renderMessageText = () => { - const { messageParams, showExpandedMessage } = this.props; - const { truncateMessage } = this.state; - const styles = this.getStyles(); - - let messageText; - if (showExpandedMessage) { - messageText = ( - {messageParams.data} - ); - } else { - messageText = truncateMessage ? ( - - {messageParams.data} - - ) : ( - - {messageParams.data} - - ); - } - return messageText; - }; - - shouldTruncateMessage = (e) => { - if (e.nativeEvent.lines.length > 5) { - this.setState({ truncateMessage: true }); - return; - } - this.setState({ truncateMessage: false }); - }; - - render() { - const { - currentPageInformation, - navigation, - showExpandedMessage, - toggleExpandedMessage, - messageParams: { from }, - } = this.props; - const styles = this.getStyles(); - - const rootView = showExpandedMessage ? ( - - ) : ( - - {this.renderMessageText()} - - ); - return rootView; - } -} - -MessageSign.contextType = ThemeContext; - -export default MessageSign; diff --git a/app/components/UI/MessageSign/index.test.tsx b/app/components/UI/MessageSign/index.test.tsx index 324b6f011a3..8d1e55576dc 100644 --- a/app/components/UI/MessageSign/index.test.tsx +++ b/app/components/UI/MessageSign/index.test.tsx @@ -1,6 +1,6 @@ import React from 'react'; import { shallow } from 'enzyme'; -import MessageSign from './'; +import MessageSign from './index'; import configureMockStore from 'redux-mock-store'; import { Provider } from 'react-redux'; import { WALLET_CONNECT_ORIGIN } from '../../../util/walletconnect'; @@ -13,10 +13,13 @@ import { strings } from '../../../../locales/i18n'; import initialBackgroundState from '../../../util/test/initial-background-state.json'; jest.mock('../../../core/Engine', () => ({ + acceptPendingApproval: jest.fn(), + rejectPendingApproval: jest.fn(), context: { SignatureController: { - signMessage: jest.fn(), - cancelMessage: jest.fn(), + hub: { + on: jest.fn(), + }, }, }, })); @@ -31,6 +34,11 @@ const messageParamsMock = { data: 'message', origin: 'example.com', metamaskId: 'TestMessageId', + from: '0x0', +}; + +const navigation = { + navigate: jest.fn(), }; const mockStore = configureMockStore(); @@ -43,14 +51,21 @@ const initialState = { const store = mockStore(initialState); -function createWrapper({ origin = messageParamsMock.origin } = {}) { +function createWrapper({ + origin = messageParamsMock.origin, + mockConfirm = jest.fn(), + mockReject = jest.fn(), +} = {}) { return shallow( undefined} - onCancel={() => undefined} + onConfirm={mockConfirm} + onReject={mockReject} + toggleExpandedMessage={jest.fn()} + showExpandedMessage={false} + navigation={navigation} /> , ).find(MessageSign); @@ -64,15 +79,11 @@ describe('MessageSign', () => { describe('onConfirm', () => { it('signs message', async () => { - const wrapper = createWrapper().dive(); + const onConfirmMock = jest.fn(); + const wrapper = createWrapper({ mockConfirm: onConfirmMock }).dive(); await (wrapper.find(SignatureRequest).props() as any).onConfirm(); - expect( - Engine.context.SignatureController.signMessage, - ).toHaveBeenCalledTimes(1); - expect( - Engine.context.SignatureController.signMessage, - ).toHaveBeenCalledWith(messageParamsMock); + expect(onConfirmMock).toHaveBeenCalledTimes(1); }); it.each([ @@ -100,17 +111,13 @@ describe('MessageSign', () => { }); }); - describe('onCancel', () => { - it('cancels message', async () => { - const wrapper = createWrapper().dive(); - await (wrapper.find(SignatureRequest).props() as any).onCancel(); - - expect( - Engine.context.SignatureController.cancelMessage, - ).toHaveBeenCalledTimes(1); - expect( - Engine.context.SignatureController.cancelMessage, - ).toHaveBeenCalledWith(messageParamsMock.metamaskId); + describe('onReject', () => { + it('rejects message', async () => { + const onRejectMock = jest.fn(); + const wrapper = createWrapper({ mockReject: onRejectMock }).dive(); + await (wrapper.find(SignatureRequest).props() as any).onReject(); + + expect(onRejectMock).toHaveBeenCalledTimes(1); }); it.each([ @@ -122,9 +129,10 @@ describe('MessageSign', () => { .mockImplementation((callback: any) => callback()); (NotificationManager.showSimpleNotification as any).mockReset(); + (Engine.context.SignatureController.hub.on as any).mockReset(); const wrapper = createWrapper({ origin }).dive(); - await (wrapper.find(SignatureRequest).props() as any).onCancel(); + await (wrapper.find(SignatureRequest).props() as any).onReject(); expect(NotificationManager.showSimpleNotification).toHaveBeenCalledTimes( 1, diff --git a/app/components/UI/MessageSign/index.ts b/app/components/UI/MessageSign/index.ts new file mode 100644 index 00000000000..55b429b0574 --- /dev/null +++ b/app/components/UI/MessageSign/index.ts @@ -0,0 +1 @@ +export { default } from './MessageSign'; diff --git a/app/components/UI/PersonalSign/PersonalSign.tsx b/app/components/UI/PersonalSign/PersonalSign.tsx index 3b2ae7b15fe..a06dc29a79b 100644 --- a/app/components/UI/PersonalSign/PersonalSign.tsx +++ b/app/components/UI/PersonalSign/PersonalSign.tsx @@ -22,8 +22,8 @@ import AppConstants from '../../../core/AppConstants'; * Component that supports personal_sign */ const PersonalSign = ({ - onCancel, onConfirm, + onReject, messageParams, currentPageInformation, toggleExpandedMessage, @@ -70,6 +70,27 @@ const PersonalSign = ({ ); }, [getAnalyticsParams]); + useEffect(() => { + const onSignatureError = ({ error }) => { + if (error?.message.startsWith(KEYSTONE_TX_CANCELED)) { + AnalyticsV2.trackEvent( + MetaMetricsEvents.QR_HARDWARE_TRANSACTION_CANCELED, + getAnalyticsParams(), + ); + } + }; + Engine.context.SignatureController.hub.on( + `${messageParams.metamaskId}:signError`, + onSignatureError, + ); + return () => { + Engine.context.SignatureController.hub.removeListener( + `${messageParams.metamaskId}:signError`, + onSignatureError, + ); + }; + }, [getAnalyticsParams, messageParams.metamaskId]); + const showWalletConnectNotification = (confirmation = false) => { InteractionManager.runAfterInteractions(() => { messageParams.origin && @@ -88,44 +109,22 @@ const PersonalSign = ({ }); }; - const signMessage = async () => { - const { SignatureController }: any = Engine.context; - await SignatureController.signPersonalMessage(messageParams); - showWalletConnectNotification(true); - }; - - const rejectMessage = async () => { - const { SignatureController }: any = Engine.context; - await SignatureController.cancelPersonalMessage(messageParams.metamaskId); + const rejectSignature = async () => { + await onReject(); showWalletConnectNotification(false); - }; - - const cancelSignature = async () => { - await rejectMessage(); AnalyticsV2.trackEvent( MetaMetricsEvents.SIGN_REQUEST_CANCELLED, getAnalyticsParams(), ); - onCancel(); }; const confirmSignature = async () => { - try { - await signMessage(); - AnalyticsV2.trackEvent( - MetaMetricsEvents.SIGN_REQUEST_COMPLETED, - getAnalyticsParams(), - ); - onConfirm(); - } catch (e: any) { - if (e?.message.startsWith(KEYSTONE_TX_CANCELED)) { - AnalyticsV2.trackEvent( - MetaMetricsEvents.QR_HARDWARE_TRANSACTION_CANCELED, - getAnalyticsParams(), - ); - onCancel(); - } - } + await onConfirm(); + showWalletConnectNotification(true); + AnalyticsV2.trackEvent( + MetaMetricsEvents.SIGN_REQUEST_COMPLETED, + getAnalyticsParams(), + ); }; const shouldTruncateMessage = (e: any) => { @@ -184,7 +183,7 @@ const PersonalSign = ({ ) : ( `; diff --git a/app/components/UI/PersonalSign/index.test.tsx b/app/components/UI/PersonalSign/index.test.tsx index 2ef6066b1df..a28ff5d1d36 100644 --- a/app/components/UI/PersonalSign/index.test.tsx +++ b/app/components/UI/PersonalSign/index.test.tsx @@ -13,10 +13,13 @@ import { strings } from '../../../../locales/i18n'; import initialBackgroundState from '../../../util/test/initial-background-state.json'; jest.mock('../../../core/Engine', () => ({ + acceptPendingApproval: jest.fn(), + rejectPendingApproval: jest.fn(), context: { SignatureController: { - signPersonalMessage: jest.fn(), - cancelPersonalMessage: jest.fn(), + hub: { + on: jest.fn(), + }, }, }, })); @@ -44,7 +47,11 @@ const initialState = { const store = mockStore(initialState); -function createWrapper({ origin = messageParamsMock.origin } = {}) { +function createWrapper({ + origin = messageParamsMock.origin, + mockConfirm = jest.fn(), + mockReject = jest.fn(), +} = {}) { return shallow( ({})} - onCancel={() => ({})} + onConfirm={mockConfirm} + onReject={mockReject} selectedAddress="0x0" /> , @@ -69,15 +76,11 @@ describe('PersonalSign', () => { describe('onConfirm', () => { it('signs message', async () => { - const wrapper = createWrapper().dive(); + const onConfirmMock = jest.fn(); + const wrapper = createWrapper({ mockConfirm: onConfirmMock }).dive(); await (wrapper.find(SignatureRequest).props() as any).onConfirm(); - expect( - Engine.context.SignatureController.signPersonalMessage, - ).toHaveBeenCalledTimes(1); - expect( - Engine.context.SignatureController.signPersonalMessage, - ).toHaveBeenCalledWith(messageParamsMock); + expect(onConfirmMock).toHaveBeenCalledTimes(1); }); it.each([ @@ -105,17 +108,13 @@ describe('PersonalSign', () => { }); }); - describe('onCancel', () => { - it('cancels message', async () => { - const wrapper = createWrapper().dive(); - await (wrapper.find(SignatureRequest).props() as any).onCancel(); - - expect( - Engine.context.SignatureController.cancelPersonalMessage, - ).toHaveBeenCalledTimes(1); - expect( - Engine.context.SignatureController.cancelPersonalMessage, - ).toHaveBeenCalledWith(messageParamsMock.metamaskId); + describe('onReject', () => { + it('rejects message', async () => { + const onRejectMock = jest.fn(); + const wrapper = createWrapper({ mockReject: onRejectMock }).dive(); + await (wrapper.find(SignatureRequest).props() as any).onReject(); + + expect(onRejectMock).toHaveBeenCalledTimes(1); }); it.each([ @@ -127,9 +126,10 @@ describe('PersonalSign', () => { .mockImplementation((callback: any) => callback()); (NotificationManager.showSimpleNotification as any).mockReset(); + (Engine.context.SignatureController.hub.on as any).mockReset(); const wrapper = createWrapper({ origin }).dive(); - await (wrapper.find(SignatureRequest).props() as any).onCancel(); + await (wrapper.find(SignatureRequest).props() as any).onReject(); expect(NotificationManager.showSimpleNotification).toHaveBeenCalledTimes( 1, diff --git a/app/components/UI/PersonalSign/types.ts b/app/components/UI/PersonalSign/types.ts index de9f55897af..476d62d6fab 100644 --- a/app/components/UI/PersonalSign/types.ts +++ b/app/components/UI/PersonalSign/types.ts @@ -4,7 +4,7 @@ export interface PersonalSignProps { /** * Callback triggered when this message signature is rejected */ - onCancel: () => void; + onReject: () => void; /** * Callback triggered when this message signature is approved */ diff --git a/app/components/UI/SignatureRequest/Root/Root.test.tsx b/app/components/UI/SignatureRequest/Root/Root.test.tsx index b011b58b867..6d0f50b5ae7 100644 --- a/app/components/UI/SignatureRequest/Root/Root.test.tsx +++ b/app/components/UI/SignatureRequest/Root/Root.test.tsx @@ -29,6 +29,11 @@ jest.mock('../../../../core/Engine', () => ({ Promise.resolve({ subscribe: jest.fn(), unsubscribe: jest.fn() }), ), }, + SignatureController: { + hub: { + on: jest.fn(), + }, + }, }, })); diff --git a/app/components/UI/SignatureRequest/Root/Root.tsx b/app/components/UI/SignatureRequest/Root/Root.tsx index a9833ea2851..8e617c08d26 100644 --- a/app/components/UI/SignatureRequest/Root/Root.tsx +++ b/app/components/UI/SignatureRequest/Root/Root.tsx @@ -12,7 +12,8 @@ import { ApprovalTypes } from '../../../../core/RPCMethods/RPCMethodMiddleware'; interface RootProps { messageParams?: MessageParams; approvalType?: string; - onSign: () => void; + onSignConfirm: () => void; + onSignReject: () => void; } const styles = StyleSheet.create({ @@ -22,7 +23,12 @@ const styles = StyleSheet.create({ }, }); -const Root = ({ messageParams, approvalType, onSign }: RootProps) => { +const Root = ({ + messageParams, + approvalType, + onSignConfirm, + onSignReject, +}: RootProps) => { const navigation = useNavigation(); const { colors } = useTheme(); const [showExpandedMessage, setShowExpandedMessage] = useState(false); @@ -46,17 +52,19 @@ const Root = ({ messageParams, approvalType, onSign }: RootProps) => { backdropOpacity={1} animationInTiming={600} animationOutTiming={600} - onBackdropPress={onSign} - onBackButtonPress={showExpandedMessage ? toggleExpandedMessage : onSign} - onSwipeComplete={onSign} + onBackdropPress={onSignReject} + onBackButtonPress={ + showExpandedMessage ? toggleExpandedMessage : onSignReject + } + onSwipeComplete={onSignReject} swipeDirection={'down'} propagateSwipe > {approvalType === ApprovalTypes.PERSONAL_SIGN && ( { { { - this.props.onCancel(); + onReject = () => { + this.props.onReject(); Analytics.trackEventWithParameters( MetaMetricsEvents.TRANSACTIONS_CANCEL_SIGNATURE, this.getTrackingParams(), @@ -194,7 +194,7 @@ class SignatureRequest extends PureComponent { }; goToWarning = () => { - this.props.onCancel(); + this.props.onReject(); this.props.navigation.navigate('Webview', { screen: 'SimpleWebview', params: { @@ -298,7 +298,7 @@ class SignatureRequest extends PureComponent { confirmTestID={'request-signature-confirm-button'} cancelText={strings('signature_request.cancel')} confirmText={strings('signature_request.sign')} - onCancelPress={this.onCancel} + onCancelPress={this.onReject} onConfirmPress={this.onConfirm} confirmButtonMode="sign" > diff --git a/app/components/UI/TypedSign/__snapshots__/index.test.tsx.snap b/app/components/UI/TypedSign/__snapshots__/index.test.tsx.snap index 8371a2a133a..3c10d26ae46 100644 --- a/app/components/UI/TypedSign/__snapshots__/index.test.tsx.snap +++ b/app/components/UI/TypedSign/__snapshots__/index.test.tsx.snap @@ -19,7 +19,7 @@ exports[`TypedSign should render correctly 1`] = ` "origin": "example.com", } } - onCancel={[Function]} - onConfirm={[Function]} + onConfirm={[MockFunction]} + onReject={[MockFunction]} /> `; diff --git a/app/components/UI/TypedSign/index.js b/app/components/UI/TypedSign/index.js index 12327041475..daf5543362d 100644 --- a/app/components/UI/TypedSign/index.js +++ b/app/components/UI/TypedSign/index.js @@ -1,23 +1,24 @@ import React, { PureComponent } from 'react'; import PropTypes from 'prop-types'; -import { StyleSheet, View, Text, InteractionManager } from 'react-native'; +import { StyleSheet, View, Text } from 'react-native'; import { fontStyles } from '../../../styles/common'; -import Engine from '../../../core/Engine'; import SignatureRequest from '../SignatureRequest'; import ExpandedMessage from '../SignatureRequest/ExpandedMessage'; import Device from '../../../util/device'; -import NotificationManager from '../../../core/NotificationManager'; -import { strings } from '../../../../locales/i18n'; -import { WALLET_CONNECT_ORIGIN } from '../../../util/walletconnect'; import { MetaMetricsEvents } from '../../../core/Analytics'; import AnalyticsV2 from '../../../util/analyticsV2'; -import URL from 'url-parse'; -import { getAddressAccountType } from '../../../util/address'; import { KEYSTONE_TX_CANCELED } from '../../../constants/error'; import { ThemeContext, mockTheme } from '../../../util/theme'; import sanitizeString from '../../../util/string'; -import AppConstants from '../../../core/AppConstants'; + +import { + addSignatureErrorListener, + getAnalyticsParams, + handleSignatureAction, + removeSignatureErrorListener, + showWalletConnectNotification, +} from '../../../util/confirmation/signatureUtils'; const createStyles = (colors) => StyleSheet.create({ @@ -56,7 +57,7 @@ class TypedSign extends PureComponent { /** * Callback triggered when this message signature is rejected */ - onCancel: PropTypes.func, + onReject: PropTypes.func, /** * Callback triggered when this message signature is approved */ @@ -83,107 +84,42 @@ class TypedSign extends PureComponent { truncateMessage: false, }; - getAnalyticsParams = () => { - try { - const { currentPageInformation, messageParams } = this.props; - const { NetworkController } = Engine.context; - const { chainId } = NetworkController?.state?.providerConfig || {}; - const url = new URL(currentPageInformation?.url); - return { - account_type: getAddressAccountType(messageParams.from), - dapp_host_name: url?.host, - dapp_url: currentPageInformation?.url, - chain_id: chainId, - sign_type: 'typed', - version: messageParams?.version, - ...currentPageInformation?.analytics, - }; - } catch (error) { - return {}; - } - }; - componentDidMount = () => { + const { + messageParams: { metamaskId }, + } = this.props; AnalyticsV2.trackEvent( MetaMetricsEvents.SIGN_REQUEST_STARTED, - this.getAnalyticsParams(), + getAnalyticsParams(), ); + addSignatureErrorListener(metamaskId, this.onSignatureError); }; - walletConnectNotificationTitle = (confirmation, isError) => { - if (isError) return strings('notifications.wc_signed_failed_title'); - return confirmation - ? strings('notifications.wc_signed_title') - : strings('notifications.wc_signed_rejected_title'); - }; - - showWalletConnectNotification = ( - messageParams = {}, - confirmation = false, - isError = false, - ) => { - InteractionManager.runAfterInteractions(() => { - messageParams.origin && - (messageParams.origin.startsWith(WALLET_CONNECT_ORIGIN) || - messageParams.origin.startsWith( - AppConstants.MM_SDK.SDK_REMOTE_ORIGIN, - )) && - NotificationManager.showSimpleNotification({ - status: `simple_notification${!confirmation ? '_rejected' : ''}`, - duration: 5000, - title: this.walletConnectNotificationTitle(confirmation, isError), - description: strings('notifications.wc_description'), - }); - }); + componentWillUnmount = () => { + const { + messageParams: { metamaskId }, + } = this.props; + removeSignatureErrorListener(metamaskId, this.onSignatureError); }; - signMessage = async () => { - const { messageParams } = this.props; - const { SignatureController } = Engine.context; - try { - await SignatureController.signTypedMessage(messageParams, { - parseJsonData: false, - }); - this.showWalletConnectNotification(messageParams, true); - } catch (error) { - this.showWalletConnectNotification(messageParams, false, true); + onSignatureError = ({ error }) => { + if (error?.message.startsWith(KEYSTONE_TX_CANCELED)) { + AnalyticsV2.trackEvent( + MetaMetricsEvents.QR_HARDWARE_TRANSACTION_CANCELED, + getAnalyticsParams(), + ); } + showWalletConnectNotification(this.props.messageParams, false, true); }; - rejectMessage = async () => { - const { messageParams } = this.props; - const { SignatureController } = Engine.context; - const messageId = messageParams.metamaskId; - await SignatureController.cancelTypedMessage(messageId); - this.showWalletConnectNotification(messageParams); - }; - - cancelSignature = async () => { - await this.rejectMessage(); - AnalyticsV2.trackEvent( - MetaMetricsEvents.SIGN_REQUEST_CANCELLED, - this.getAnalyticsParams(), - ); - this.props.onCancel(); + rejectSignature = async () => { + const { messageParams, onReject } = this.props; + await handleSignatureAction(onReject, messageParams, 'typed', false); }; confirmSignature = async () => { - try { - await this.signMessage(); - AnalyticsV2.trackEvent( - MetaMetricsEvents.SIGN_REQUEST_COMPLETED, - this.getAnalyticsParams(), - ); - this.props.onConfirm(); - } catch (e) { - if (e?.message.startsWith(KEYSTONE_TX_CANCELED)) { - AnalyticsV2.trackEvent( - MetaMetricsEvents.QR_HARDWARE_TRANSACTION_CANCELED, - this.getAnalyticsParams(), - ); - this.props.onCancel(); - } - } + const { messageParams, onConfirm } = this.props; + await handleSignatureAction(onConfirm, messageParams, 'typed', true); }; shouldTruncateMessage = (e) => { @@ -284,7 +220,7 @@ class TypedSign extends PureComponent { ) : ( ({ + acceptPendingApproval: jest.fn(), + rejectPendingApproval: jest.fn(), context: { SignatureController: { - signTypedMessage: jest.fn(), - cancelTypedMessage: jest.fn(), + hub: { + on: jest.fn(), + }, }, }, })); @@ -41,14 +44,18 @@ const initialState = { const store = mockStore(initialState); -function createWrapper({ origin = messageParamsMock.origin } = {}) { +function createWrapper({ + origin = messageParamsMock.origin, + mockConfirm = jest.fn(), + mockReject = jest.fn(), +} = {}) { return shallow( undefined} - onCancel={() => undefined} + onConfirm={mockConfirm} + onReject={mockReject} /> , ).find(TypedSign); @@ -62,15 +69,11 @@ describe('TypedSign', () => { describe('onConfirm', () => { it('signs message', async () => { - const wrapper = createWrapper().dive(); + const onConfirmMock = jest.fn(); + const wrapper = createWrapper({ mockConfirm: onConfirmMock }).dive(); await (wrapper.find(SignatureRequest).props() as any).onConfirm(); - expect( - Engine.context.SignatureController.signTypedMessage, - ).toHaveBeenCalledTimes(1); - expect( - Engine.context.SignatureController.signTypedMessage, - ).toHaveBeenCalledWith(messageParamsMock, { parseJsonData: false }); + expect(onConfirmMock).toHaveBeenCalledTimes(1); }); it.each([ @@ -108,18 +111,22 @@ describe('TypedSign', () => { ])( 'shows notification on error if origin is %s', async (_title, origin) => { + const onConfirmMock = jest.fn().mockResolvedValueOnce(); jest .spyOn(InteractionManager, 'runAfterInteractions') .mockImplementation((callback: any) => callback()); (NotificationManager.showSimpleNotification as any).mockReset(); + (Engine.context.SignatureController.hub.on as any).mockImplementation( + (_eventName, callback) => { + callback({ error: new Error('error') }); + }, + ); - ( - Engine.context.SignatureController.signTypedMessage as any - ).mockRejectedValue(new Error('Test Error')); - - const wrapper = createWrapper({ origin }).dive(); - await (wrapper.find(SignatureRequest).props() as any).onConfirm(); + createWrapper({ + origin, + mockConfirm: onConfirmMock, + }).dive(); expect( NotificationManager.showSimpleNotification, @@ -136,17 +143,13 @@ describe('TypedSign', () => { ); }); - describe('onCancel', () => { - it('cancels message', async () => { - const wrapper = createWrapper().dive(); - await (wrapper.find(SignatureRequest).props() as any).onCancel(); - - expect( - Engine.context.SignatureController.cancelTypedMessage, - ).toHaveBeenCalledTimes(1); - expect( - Engine.context.SignatureController.cancelTypedMessage, - ).toHaveBeenCalledWith(messageParamsMock.metamaskId); + describe('onReject', () => { + it('rejects message', async () => { + const onRejectMock = jest.fn(); + const wrapper = createWrapper({ mockReject: onRejectMock }).dive(); + await (wrapper.find(SignatureRequest).props() as any).onReject(); + + expect(onRejectMock).toHaveBeenCalledTimes(1); }); it.each([ @@ -158,9 +161,10 @@ describe('TypedSign', () => { .mockImplementation((callback: any) => callback()); (NotificationManager.showSimpleNotification as any).mockReset(); + (Engine.context.SignatureController.hub.on as any).mockReset(); const wrapper = createWrapper({ origin }).dive(); - await (wrapper.find(SignatureRequest).props() as any).onCancel(); + await (wrapper.find(SignatureRequest).props() as any).onReject(); expect(NotificationManager.showSimpleNotification).toHaveBeenCalledTimes( 1, diff --git a/app/components/hooks/useApprovalRequest.test.ts b/app/components/hooks/useApprovalRequest.test.ts index ea87278a5e5..263235cf6cf 100644 --- a/app/components/hooks/useApprovalRequest.test.ts +++ b/app/components/hooks/useApprovalRequest.test.ts @@ -122,6 +122,7 @@ describe('useApprovalRequest', () => { expect(Engine.acceptPendingApproval).toHaveBeenCalledWith( APPROVAL_REQUEST.id, APPROVAL_REQUEST.requestData, + undefined, ); }); diff --git a/app/components/hooks/useApprovalRequest.ts b/app/components/hooks/useApprovalRequest.ts index f81839d9025..5a6fe5925e3 100644 --- a/app/components/hooks/useApprovalRequest.ts +++ b/app/components/hooks/useApprovalRequest.ts @@ -4,7 +4,7 @@ import { ethErrors } from 'eth-rpc-errors'; import { useSelector } from 'react-redux'; import { selectPendingApprovals } from '../../selectors/approvalController'; import { cloneDeep, isEqual } from 'lodash'; -import { ApprovalRequest } from '@metamask/approval-controller'; +import { AcceptOptions, ApprovalRequest } from '@metamask/approval-controller'; const useApprovalRequest = () => { const pendingApprovals = useSelector(selectPendingApprovals, isEqual); @@ -15,14 +15,18 @@ const useApprovalRequest = () => { const pageMeta = approvalRequest?.requestData?.pageMeta ?? {}; - const onConfirm = useCallback(() => { - if (!approvalRequest) return; - - Engine.acceptPendingApproval( - approvalRequest.id, - approvalRequest.requestData, - ); - }, [approvalRequest]); + const onConfirm = useCallback( + (opts?: AcceptOptions) => { + if (!approvalRequest) return; + + Engine.acceptPendingApproval( + approvalRequest.id, + approvalRequest.requestData, + opts, + ); + }, + [approvalRequest], + ); const onReject = useCallback(() => { if (!approvalRequest) return; diff --git a/app/core/Engine.ts b/app/core/Engine.ts index a64f33d1990..b3c83a1b1fb 100644 --- a/app/core/Engine.ts +++ b/app/core/Engine.ts @@ -23,7 +23,10 @@ import { PhishingController } from '@metamask/phishing-controller'; import { PreferencesController } from '@metamask/preferences-controller'; import { TransactionController } from '@metamask/transaction-controller'; import { GasFeeController } from '@metamask/gas-fee-controller'; -import { ApprovalController } from '@metamask/approval-controller'; +import { + AcceptOptions, + ApprovalController, +} from '@metamask/approval-controller'; import { PermissionController } from '@metamask/permission-controller'; import SwapsController, { swapsUtils } from '@metamask/swaps-controller'; import AsyncStorage from '@react-native-async-storage/async-storage'; @@ -431,11 +434,7 @@ class Engine { new SignatureController({ messenger: this.controllerMessenger.getRestricted({ name: 'SignatureController', - allowedActions: [ - `${approvalController.name}:addRequest`, - `${approvalController.name}:acceptRequest`, - `${approvalController.name}:rejectRequest`, - ], + allowedActions: [`${approvalController.name}:addRequest`], }), isEthSignEnabled: () => Boolean( @@ -799,10 +798,14 @@ class Engine { } } - acceptPendingApproval(id: string, requestData?: Record) { + acceptPendingApproval( + id: string, + requestData?: Record, + opts: AcceptOptions = { waitForResult: false }, + ) { const { ApprovalController } = this.context; try { - ApprovalController.accept(id, requestData); + ApprovalController.accept(id, requestData, opts); } catch (err) { // Ignore err if request already approved or doesn't exists. } @@ -899,8 +902,11 @@ export default { Object.freeze(instance); return instance; }, - acceptPendingApproval: (id: string, requestData?: Record) => - instance?.acceptPendingApproval(id, requestData), + acceptPendingApproval: ( + id: string, + requestData?: Record, + opts?: AcceptOptions, + ) => instance?.acceptPendingApproval(id, requestData, opts), rejectPendingApproval: (id: string, reason: Error) => instance?.rejectPendingApproval(id, reason), }; diff --git a/app/core/RPCMethods/RPCMethodMiddleware.test.ts b/app/core/RPCMethods/RPCMethodMiddleware.test.ts index c4aba33937a..8b6607cce3d 100644 --- a/app/core/RPCMethods/RPCMethodMiddleware.test.ts +++ b/app/core/RPCMethods/RPCMethodMiddleware.test.ts @@ -1091,12 +1091,7 @@ describe('getRpcMethodMiddleware', () => { it('creates unsigned message', async () => { await sendRequest(); - expect( - Engine.context.SignatureController.newUnsignedTypedMessage, - ).toHaveBeenCalledTimes(1); - expect( - Engine.context.SignatureController.newUnsignedTypedMessage, - ).toHaveBeenCalledWith( + const expectedParams = [ { data: dataJsonMock, from: addressMock, @@ -1105,7 +1100,20 @@ describe('getRpcMethodMiddleware', () => { }, expect.any(Object), version, - ); + ]; + + if (version !== 'V1') { + expectedParams.push({ + parseJsonData: false, + }); + } + + expect( + Engine.context.SignatureController.newUnsignedTypedMessage, + ).toHaveBeenCalledTimes(1); + expect( + Engine.context.SignatureController.newUnsignedTypedMessage, + ).toHaveBeenCalledWith(...expectedParams); }); it('returns resolved value from message promise', async () => { diff --git a/app/core/RPCMethods/RPCMethodMiddleware.ts b/app/core/RPCMethods/RPCMethodMiddleware.ts index ddfe9550bd1..29b16255a9a 100644 --- a/app/core/RPCMethods/RPCMethodMiddleware.ts +++ b/app/core/RPCMethods/RPCMethodMiddleware.ts @@ -145,6 +145,59 @@ export const checkActiveAccountAndChainId = async ({ } }; +const generateRawSignature = async ({ + version, + req, + hostname, + url, + title, + icon, + analytics, + isMMSDK, + isWalletConnect, + chainId, + getSource, + checkTabActive, +}: any) => { + const { SignatureController } = Engine.context; + + const pageMeta = { + meta: { + url: url.current, + title: title.current, + icon: icon.current, + analytics: { + request_source: getSource(), + request_platform: analytics?.platform, + }, + }, + }; + + checkTabActive(); + await checkActiveAccountAndChainId({ + hostname, + address: req.params[0], + chainId, + checkSelectedAddress: isMMSDK || isWalletConnect, + }); + + const rawSig = await SignatureController.newUnsignedTypedMessage( + { + data: req.params[1], + from: req.params[0], + ...pageMeta, + origin: hostname, + }, + req, + version, + { + parseJsonData: false, + }, + ); + + return rawSig; +}; + /** * Handle RPC methods called by dapps */ @@ -576,86 +629,44 @@ export const getRpcMethodMiddleware = ({ }, eth_signTypedData_v3: async () => { - const { SignatureController } = Engine.context; - const data = typeof req.params[1] === 'string' ? JSON.parse(req.params[1]) : req.params[1]; const chainId = data.domain.chainId; - - const pageMeta = { - meta: { - url: url.current, - title: title.current, - icon: icon.current, - analytics: { - request_source: getSource(), - request_platform: analytics?.platform, - }, - }, - }; - - checkTabActive(); - await checkActiveAccountAndChainId({ + res.result = await generateRawSignature({ + version: 'V3', + req, hostname, - address: req.params[0], + url, + title, + icon, + analytics, + isMMSDK, + isWalletConnect, chainId, - checkSelectedAddress: isMMSDK || isWalletConnect, + getSource, + checkTabActive, }); - - const rawSig = await SignatureController.newUnsignedTypedMessage( - { - data: req.params[1], - from: req.params[0], - ...pageMeta, - origin: hostname, - }, - req, - 'V3', - ); - - res.result = rawSig; }, eth_signTypedData_v4: async () => { - const { SignatureController } = Engine.context; - const data = JSON.parse(req.params[1]); const chainId = data.domain.chainId; - - const pageMeta = { - meta: { - url: url.current, - title: title.current, - icon: icon.current, - analytics: { - request_source: getSource(), - request_platform: analytics?.platform, - }, - }, - }; - - checkTabActive(); - await checkActiveAccountAndChainId({ + res.result = await generateRawSignature({ + version: 'V4', + req, hostname, - address: req.params[0], + url, + title, + icon, + analytics, + isMMSDK, + isWalletConnect, chainId, - checkSelectedAddress: isMMSDK || isWalletConnect, + getSource, + checkTabActive, }); - - const rawSig = await SignatureController.newUnsignedTypedMessage( - { - data: req.params[1], - from: req.params[0], - ...pageMeta, - origin: hostname, - }, - req, - 'V4', - ); - - res.result = rawSig; }, web3_clientVersion: async () => { diff --git a/app/util/confirmation/signatureUtils.js b/app/util/confirmation/signatureUtils.js new file mode 100644 index 00000000000..d406eb7f2c4 --- /dev/null +++ b/app/util/confirmation/signatureUtils.js @@ -0,0 +1,86 @@ +import Engine from '../../core/Engine'; +import { MetaMetricsEvents } from '../../core/Analytics'; +import AnalyticsV2 from '../analyticsV2'; +import { getAddressAccountType } from '../address'; +import NotificationManager from '../../core/NotificationManager'; +import { WALLET_CONNECT_ORIGIN } from '../walletconnect'; +import AppConstants from '../../core/AppConstants'; +import { InteractionManager } from 'react-native'; +import { strings } from '../../../locales/i18n'; + +export const getAnalyticsParams = (messageParams, signType) => { + try { + const { currentPageInformation } = messageParams; + const { NetworkController } = Engine.context; + const { chainId } = NetworkController?.state?.providerConfig || {}; + const url = new URL(currentPageInformation?.url); + return { + account_type: getAddressAccountType(messageParams.from), + dapp_host_name: url?.host, + dapp_url: currentPageInformation?.url, + chain_id: chainId, + sign_type: signType, + version: messageParams?.version, + ...currentPageInformation?.analytics, + }; + } catch (error) { + return {}; + } +}; + +export const walletConnectNotificationTitle = (confirmation, isError) => { + if (isError) return strings('notifications.wc_signed_failed_title'); + return confirmation + ? strings('notifications.wc_signed_title') + : strings('notifications.wc_signed_rejected_title'); +}; + +export const showWalletConnectNotification = ( + messageParams = {}, + confirmation = false, + isError = false, +) => { + InteractionManager.runAfterInteractions(() => { + messageParams.origin && + (messageParams.origin.startsWith(WALLET_CONNECT_ORIGIN) || + messageParams.origin.startsWith( + AppConstants.MM_SDK.SDK_REMOTE_ORIGIN, + )) && + NotificationManager.showSimpleNotification({ + status: `simple_notification${!confirmation ? '_rejected' : ''}`, + duration: 5000, + title: this.walletConnectNotificationTitle(confirmation, isError), + description: strings('notifications.wc_description'), + }); + }); +}; + +export const handleSignatureAction = async ( + onAction, + messageParams, + signType, + confirmation, +) => { + await onAction(); + showWalletConnectNotification(messageParams, confirmation); + AnalyticsV2.trackEvent( + confirmation + ? MetaMetricsEvents.SIGN_REQUEST_COMPLETED + : MetaMetricsEvents.SIGN_REQUEST_CANCELLED, + getAnalyticsParams(messageParams, signType), + ); +}; + +export const addSignatureErrorListener = (metamaskId, onSignatureError) => { + Engine.context.SignatureController.hub.on( + `${metamaskId}:signError`, + onSignatureError, + ); +}; + +export const removeSignatureErrorListener = (metamaskId, onSignatureError) => { + Engine.context.SignatureController.hub.removeListener( + `${metamaskId}:signError`, + onSignatureError, + ); +}; diff --git a/package.json b/package.json index 6776ec3f384..ad2013314ff 100644 --- a/package.json +++ b/package.json @@ -168,7 +168,7 @@ "@metamask/phishing-controller": "^3.0.0", "@metamask/preferences-controller": "^2.1.0", "@metamask/sdk-communication-layer": "^0.5.0", - "@metamask/signature-controller": "^2.0.0", + "@metamask/signature-controller": "4.0.1", "@metamask/swaps-controller": "^6.8.0", "@metamask/transaction-controller": "4.0.0", "@ngraveio/bc-ur": "^1.1.6", @@ -511,4 +511,4 @@ "puppeteer": false } } -} +} \ No newline at end of file diff --git a/patches/@metamask+signature-controller++@metamask+message-manager+5.0.0.patch b/patches/@metamask+signature-controller++@metamask+message-manager+5.0.0.patch deleted file mode 100644 index e06440d7874..00000000000 --- a/patches/@metamask+signature-controller++@metamask+message-manager+5.0.0.patch +++ /dev/null @@ -1,42 +0,0 @@ -diff --git a/node_modules/@metamask/signature-controller/node_modules/@metamask/message-manager/dist/PersonalMessageManager.d.ts b/node_modules/@metamask/signature-controller/node_modules/@metamask/message-manager/dist/PersonalMessageManager.d.ts -index 5d25b78..adb55e2 100644 ---- a/node_modules/@metamask/signature-controller/node_modules/@metamask/message-manager/dist/PersonalMessageManager.d.ts -+++ b/node_modules/@metamask/signature-controller/node_modules/@metamask/message-manager/dist/PersonalMessageManager.d.ts -@@ -1,4 +1,3 @@ --import { SIWEMessage } from '@metamask/controller-utils'; - import { AbstractMessageManager, AbstractMessage, AbstractMessageParams, AbstractMessageParamsMetamask, OriginalRequest } from './AbstractMessageManager'; - /** - * @type Message -@@ -24,7 +23,7 @@ export interface PersonalMessage extends AbstractMessage { - */ - export interface PersonalMessageParams extends AbstractMessageParams { - data: string; -- siwe?: SIWEMessage; -+ siwe?: any; - } - /** - * @type MessageParamsMetamask -diff --git a/node_modules/@metamask/signature-controller/node_modules/@metamask/message-manager/dist/PersonalMessageManager.js b/node_modules/@metamask/signature-controller/node_modules/@metamask/message-manager/dist/PersonalMessageManager.js -index ecb609b..dd0fa9d 100644 ---- a/node_modules/@metamask/signature-controller/node_modules/@metamask/message-manager/dist/PersonalMessageManager.js -+++ b/node_modules/@metamask/signature-controller/node_modules/@metamask/message-manager/dist/PersonalMessageManager.js -@@ -11,7 +11,6 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge - Object.defineProperty(exports, "__esModule", { value: true }); - exports.PersonalMessageManager = void 0; - const uuid_1 = require("uuid"); --const controller_utils_1 = require("@metamask/controller-utils"); - const utils_1 = require("./utils"); - const AbstractMessageManager_1 = require("./AbstractMessageManager"); - /** -@@ -67,7 +66,10 @@ class PersonalMessageManager extends AbstractMessageManager_1.AbstractMessageMan - messageParams.origin = req.origin; - } - messageParams.data = (0, utils_1.normalizeMessageData)(messageParams.data); -- const ethereumSignInData = (0, controller_utils_1.detectSIWE)(messageParams); -+ const ethereumSignInData = { -+ isSIWEMessage: false, -+ parsedMessage: null, -+ }; - const finalMsgParams = Object.assign(Object.assign({}, messageParams), { siwe: ethereumSignInData }); - const messageId = (0, uuid_1.v1)(); - const messageData = { diff --git a/patches/@metamask+signature-controller++@metamask+message-manager+7.0.1.patch b/patches/@metamask+signature-controller++@metamask+message-manager+7.0.1.patch new file mode 100644 index 00000000000..ea97e5de935 --- /dev/null +++ b/patches/@metamask+signature-controller++@metamask+message-manager+7.0.1.patch @@ -0,0 +1,66 @@ +diff --git a/node_modules/@metamask/signature-controller/node_modules/@metamask/message-manager/dist/.DS_Store b/node_modules/@metamask/signature-controller/node_modules/@metamask/message-manager/dist/.DS_Store +new file mode 100644 +index 0000000..e69de29 +diff --git a/node_modules/@metamask/signature-controller/node_modules/@metamask/message-manager/dist/PersonalMessageManager.d.ts b/node_modules/@metamask/signature-controller/node_modules/@metamask/message-manager/dist/PersonalMessageManager.d.ts +index 078af88..0675794 100644 +--- a/node_modules/@metamask/signature-controller/node_modules/@metamask/message-manager/dist/PersonalMessageManager.d.ts ++++ b/node_modules/@metamask/signature-controller/node_modules/@metamask/message-manager/dist/PersonalMessageManager.d.ts +@@ -1,4 +1,3 @@ +-import { SIWEMessage } from '@metamask/controller-utils'; + import { AbstractMessageManager, AbstractMessage, AbstractMessageParams, AbstractMessageParamsMetamask, OriginalRequest } from './AbstractMessageManager'; + /** + * @type Message +@@ -24,7 +23,10 @@ export interface PersonalMessage extends AbstractMessage { + */ + export interface PersonalMessageParams extends AbstractMessageParams { + data: string; +- siwe?: SIWEMessage; ++ siwe?: { ++ isSIWEMessage: boolean; ++ parsedMessage: null; ++ }; + } + /** + * @type MessageParamsMetamask +diff --git a/node_modules/@metamask/signature-controller/node_modules/@metamask/message-manager/dist/PersonalMessageManager.d.ts.map b/node_modules/@metamask/signature-controller/node_modules/@metamask/message-manager/dist/PersonalMessageManager.d.ts.map +index ab04adc..52e6b44 100644 +--- a/node_modules/@metamask/signature-controller/node_modules/@metamask/message-manager/dist/PersonalMessageManager.d.ts.map ++++ b/node_modules/@metamask/signature-controller/node_modules/@metamask/message-manager/dist/PersonalMessageManager.d.ts.map +@@ -1 +1 @@ +-{"version":3,"file":"PersonalMessageManager.d.ts","sourceRoot":"","sources":["../src/PersonalMessageManager.ts"],"names":[],"mappings":"AACA,OAAO,EAAc,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAErE,OAAO,EACL,sBAAsB,EACtB,eAAe,EACf,qBAAqB,EACrB,6BAA6B,EAC7B,eAAe,EAChB,MAAM,0BAA0B,CAAC;AAElC;;;;;;;;;;GAUG;AACH,MAAM,WAAW,eAAgB,SAAQ,eAAe;IACtD,aAAa,EAAE,qBAAqB,CAAC;CACtC;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,qBAAsB,SAAQ,qBAAqB;IAClE,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,WAAW,CAAC;CACpB;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,6BACf,SAAQ,6BAA6B;IACrC,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,qBAAa,sBAAuB,SAAQ,sBAAsB,CAChE,eAAe,EACf,qBAAqB,EACrB,6BAA6B,CAC9B;IACC;;OAEG;IACM,IAAI,SAA4B;IAEzC;;;;;;;;;OASG;IACG,oBAAoB,CACxB,aAAa,EAAE,qBAAqB,EACpC,GAAG,CAAC,EAAE,eAAe,GACpB,OAAO,CAAC,MAAM,CAAC;IA0BlB;;;;;;OAMG;IACH,qBAAqB,CACnB,aAAa,EAAE,6BAA6B,GAC3C,OAAO,CAAC,qBAAqB,CAAC;CAIlC;AAED,eAAe,sBAAsB,CAAC"} +\ No newline at end of file ++{"version":3,"file":"PersonalMessageManager.d.ts","sourceRoot":"","sources":["../src/PersonalMessageManager.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,sBAAsB,EACtB,eAAe,EACf,qBAAqB,EACrB,6BAA6B,EAC7B,eAAe,EAChB,MAAM,0BAA0B,CAAC;AAElC;;;;;;;;;;GAUG;AACH,MAAM,WAAW,eAAgB,SAAQ,eAAe;IACtD,aAAa,EAAE,qBAAqB,CAAC;CACtC;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,qBAAsB,SAAQ,qBAAqB;IAClE,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE;QACL,aAAa,EAAE,OAAO,CAAC;QACvB,aAAa,EAAE,IAAI,CAAC;KACrB,CAAC;CACH;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,6BACf,SAAQ,6BAA6B;IACrC,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,qBAAa,sBAAuB,SAAQ,sBAAsB,CAChE,eAAe,EACf,qBAAqB,EACrB,6BAA6B,CAC9B;IACC;;OAEG;IACM,IAAI,SAA4B;IAEzC;;;;;;;;;OASG;IACG,oBAAoB,CACxB,aAAa,EAAE,qBAAqB,EACpC,GAAG,CAAC,EAAE,eAAe,GACpB,OAAO,CAAC,MAAM,CAAC;IA6BlB;;;;;;OAMG;IACH,qBAAqB,CACnB,aAAa,EAAE,6BAA6B,GAC3C,OAAO,CAAC,qBAAqB,CAAC;CAIlC;AAED,eAAe,sBAAsB,CAAC"} +\ No newline at end of file +diff --git a/node_modules/@metamask/signature-controller/node_modules/@metamask/message-manager/dist/PersonalMessageManager.js b/node_modules/@metamask/signature-controller/node_modules/@metamask/message-manager/dist/PersonalMessageManager.js +index 92e9b3d..0321f2e 100644 +--- a/node_modules/@metamask/signature-controller/node_modules/@metamask/message-manager/dist/PersonalMessageManager.js ++++ b/node_modules/@metamask/signature-controller/node_modules/@metamask/message-manager/dist/PersonalMessageManager.js +@@ -11,7 +11,6 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge + Object.defineProperty(exports, "__esModule", { value: true }); + exports.PersonalMessageManager = void 0; + const uuid_1 = require("uuid"); +-const controller_utils_1 = require("@metamask/controller-utils"); + const utils_1 = require("./utils"); + const AbstractMessageManager_1 = require("./AbstractMessageManager"); + /** +@@ -42,7 +41,10 @@ class PersonalMessageManager extends AbstractMessageManager_1.AbstractMessageMan + messageParams.origin = req.origin; + } + messageParams.data = (0, utils_1.normalizeMessageData)(messageParams.data); +- const ethereumSignInData = (0, controller_utils_1.detectSIWE)(messageParams); ++ const ethereumSignInData = { ++ isSIWEMessage: false, ++ parsedMessage: null, ++ }; + const finalMsgParams = Object.assign(Object.assign({}, messageParams), { siwe: ethereumSignInData }); + const messageId = (0, uuid_1.v1)(); + const messageData = { +diff --git a/node_modules/@metamask/signature-controller/node_modules/@metamask/message-manager/dist/PersonalMessageManager.js.map b/node_modules/@metamask/signature-controller/node_modules/@metamask/message-manager/dist/PersonalMessageManager.js.map +index b23be96..00b1e54 100644 +--- a/node_modules/@metamask/signature-controller/node_modules/@metamask/message-manager/dist/PersonalMessageManager.js.map ++++ b/node_modules/@metamask/signature-controller/node_modules/@metamask/message-manager/dist/PersonalMessageManager.js.map +@@ -1 +1 @@ +-{"version":3,"file":"PersonalMessageManager.js","sourceRoot":"","sources":["../src/PersonalMessageManager.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,+BAAoC;AACpC,iEAAqE;AACrE,mCAAwE;AACxE,qEAMkC;AA6ClC;;GAEG;AACH,MAAa,sBAAuB,SAAQ,+CAI3C;IAJD;;QAKE;;WAEG;QACM,SAAI,GAAG,wBAAwB,CAAC;IAsD3C,CAAC;IApDC;;;;;;;;;OASG;IACG,oBAAoB,CACxB,aAAoC,EACpC,GAAqB;;YAErB,IAAA,+BAAuB,EAAC,aAAa,CAAC,CAAC;YACvC,IAAI,GAAG,EAAE;gBACP,aAAa,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;aACnC;YACD,aAAa,CAAC,IAAI,GAAG,IAAA,4BAAoB,EAAC,aAAa,CAAC,IAAI,CAAC,CAAC;YAE9D,MAAM,kBAAkB,GAAG,IAAA,6BAAU,EAAC,aAAa,CAAC,CAAC;YACrD,MAAM,cAAc,mCAAQ,aAAa,KAAE,IAAI,EAAE,kBAAkB,GAAE,CAAC;YAEtE,MAAM,SAAS,GAAG,IAAA,SAAM,GAAE,CAAC;YAC3B,MAAM,WAAW,GAAoB;gBACnC,EAAE,EAAE,SAAS;gBACb,aAAa,EAAE,cAAc;gBAC7B,MAAM,EAAE,YAAY;gBACpB,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE;gBAChB,IAAI,EAAE,eAAe;aACtB,CAAC;YACF,MAAM,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;YACnC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,mBAAmB,kCAC5B,cAAc,GACd,EAAE,UAAU,EAAE,SAAS,EAAE,EAC5B,CAAC;YACH,OAAO,SAAS,CAAC;QACnB,CAAC;KAAA;IAED;;;;;;OAMG;IACH,qBAAqB,CACnB,aAA4C;QAE5C,OAAO,aAAa,CAAC,UAAU,CAAC;QAChC,OAAO,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IACxC,CAAC;CACF;AA9DD,wDA8DC;AAED,kBAAe,sBAAsB,CAAC","sourcesContent":["import { v1 as random } from 'uuid';\nimport { detectSIWE, SIWEMessage } from '@metamask/controller-utils';\nimport { normalizeMessageData, validateSignMessageData } from './utils';\nimport {\n AbstractMessageManager,\n AbstractMessage,\n AbstractMessageParams,\n AbstractMessageParamsMetamask,\n OriginalRequest,\n} from './AbstractMessageManager';\n\n/**\n * @type Message\n *\n * Represents and contains data about a 'personal_sign' type signature request.\n * These are created when a signature for a personal_sign call is requested.\n * @property id - An id to track and identify the message object\n * @property messageParams - The parameters to pass to the personal_sign method once the signature request is approved\n * @property type - The json-prc signing method for which a signature request has been made.\n * A 'Message' which always has a 'personal_sign' type\n * @property rawSig - Raw data of the signature request\n */\nexport interface PersonalMessage extends AbstractMessage {\n messageParams: PersonalMessageParams;\n}\n\n/**\n * @type PersonalMessageParams\n *\n * Represents the parameters to pass to the personal_sign method once the signature request is approved.\n * @property data - A hex string conversion of the raw buffer data of the signature request\n * @property from - Address to sign this message from\n * @property origin? - Added for request origin identification\n */\nexport interface PersonalMessageParams extends AbstractMessageParams {\n data: string;\n siwe?: SIWEMessage;\n}\n\n/**\n * @type MessageParamsMetamask\n *\n * Represents the parameters to pass to the personal_sign method once the signature request is approved\n * plus data added by MetaMask.\n * @property metamaskId - Added for tracking and identification within MetaMask\n * @property data - A hex string conversion of the raw buffer data of the signature request\n * @property from - Address to sign this message from\n * @property origin? - Added for request origin identification\n */\nexport interface PersonalMessageParamsMetamask\n extends AbstractMessageParamsMetamask {\n data: string;\n}\n\n/**\n * Controller in charge of managing - storing, adding, removing, updating - Messages.\n */\nexport class PersonalMessageManager extends AbstractMessageManager<\n PersonalMessage,\n PersonalMessageParams,\n PersonalMessageParamsMetamask\n> {\n /**\n * Name of this controller used during composition\n */\n override name = 'PersonalMessageManager';\n\n /**\n * Creates a new Message with an 'unapproved' status using the passed messageParams.\n * this.addMessage is called to add the new Message to this.messages, and to save the\n * unapproved Messages.\n *\n * @param messageParams - The params for the personal_sign call to be made after the message\n * is approved.\n * @param req - The original request object possibly containing the origin.\n * @returns The id of the newly created message.\n */\n async addUnapprovedMessage(\n messageParams: PersonalMessageParams,\n req?: OriginalRequest,\n ): Promise {\n validateSignMessageData(messageParams);\n if (req) {\n messageParams.origin = req.origin;\n }\n messageParams.data = normalizeMessageData(messageParams.data);\n\n const ethereumSignInData = detectSIWE(messageParams);\n const finalMsgParams = { ...messageParams, siwe: ethereumSignInData };\n\n const messageId = random();\n const messageData: PersonalMessage = {\n id: messageId,\n messageParams: finalMsgParams,\n status: 'unapproved',\n time: Date.now(),\n type: 'personal_sign',\n };\n await this.addMessage(messageData);\n this.hub.emit(`unapprovedMessage`, {\n ...finalMsgParams,\n ...{ metamaskId: messageId },\n });\n return messageId;\n }\n\n /**\n * Removes the metamaskId property from passed messageParams and returns a promise which\n * resolves the updated messageParams.\n *\n * @param messageParams - The messageParams to modify.\n * @returns Promise resolving to the messageParams with the metamaskId property removed.\n */\n prepMessageForSigning(\n messageParams: PersonalMessageParamsMetamask,\n ): Promise {\n delete messageParams.metamaskId;\n return Promise.resolve(messageParams);\n }\n}\n\nexport default PersonalMessageManager;\n"]} +\ No newline at end of file ++{"version":3,"file":"PersonalMessageManager.js","sourceRoot":"","sources":["../src/PersonalMessageManager.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,+BAAoC;AACpC,mCAAwE;AACxE,qEAMkC;AAgDlC;;GAEG;AACH,MAAa,sBAAuB,SAAQ,+CAI3C;IAJD;;QAKE;;WAEG;QACM,SAAI,GAAG,wBAAwB,CAAC;IAyD3C,CAAC;IAvDC;;;;;;;;;OASG;IACG,oBAAoB,CACxB,aAAoC,EACpC,GAAqB;;YAErB,IAAA,+BAAuB,EAAC,aAAa,CAAC,CAAC;YACvC,IAAI,GAAG,EAAE;gBACP,aAAa,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;aACnC;YACD,aAAa,CAAC,IAAI,GAAG,IAAA,4BAAoB,EAAC,aAAa,CAAC,IAAI,CAAC,CAAC;YAE9D,MAAM,kBAAkB,GAAG;gBACzB,aAAa,EAAE,KAAK;gBACpB,aAAa,EAAE,IAAI;aACpB,CAAA;YACD,MAAM,cAAc,mCAAQ,aAAa,KAAE,IAAI,EAAE,kBAAkB,GAAE,CAAC;YAEtE,MAAM,SAAS,GAAG,IAAA,SAAM,GAAE,CAAC;YAC3B,MAAM,WAAW,GAAoB;gBACnC,EAAE,EAAE,SAAS;gBACb,aAAa,EAAE,cAAc;gBAC7B,MAAM,EAAE,YAAY;gBACpB,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE;gBAChB,IAAI,EAAE,eAAe;aACtB,CAAC;YACF,MAAM,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;YACnC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,mBAAmB,kCAC5B,cAAc,GACd,EAAE,UAAU,EAAE,SAAS,EAAE,EAC5B,CAAC;YACH,OAAO,SAAS,CAAC;QACnB,CAAC;KAAA;IAED;;;;;;OAMG;IACH,qBAAqB,CACnB,aAA4C;QAE5C,OAAO,aAAa,CAAC,UAAU,CAAC;QAChC,OAAO,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IACxC,CAAC;CACF;AAjED,wDAiEC;AAED,kBAAe,sBAAsB,CAAC","sourcesContent":["import { v1 as random } from 'uuid';\nimport { normalizeMessageData, validateSignMessageData } from './utils';\nimport {\n AbstractMessageManager,\n AbstractMessage,\n AbstractMessageParams,\n AbstractMessageParamsMetamask,\n OriginalRequest,\n} from './AbstractMessageManager';\n\n/**\n * @type Message\n *\n * Represents and contains data about a 'personal_sign' type signature request.\n * These are created when a signature for a personal_sign call is requested.\n * @property id - An id to track and identify the message object\n * @property messageParams - The parameters to pass to the personal_sign method once the signature request is approved\n * @property type - The json-prc signing method for which a signature request has been made.\n * A 'Message' which always has a 'personal_sign' type\n * @property rawSig - Raw data of the signature request\n */\nexport interface PersonalMessage extends AbstractMessage {\n messageParams: PersonalMessageParams;\n}\n\n/**\n * @type PersonalMessageParams\n *\n * Represents the parameters to pass to the personal_sign method once the signature request is approved.\n * @property data - A hex string conversion of the raw buffer data of the signature request\n * @property from - Address to sign this message from\n * @property origin? - Added for request origin identification\n */\nexport interface PersonalMessageParams extends AbstractMessageParams {\n data: string;\n siwe?: {\n isSIWEMessage: boolean,\n parsedMessage: null,\n };\n}\n\n/**\n * @type MessageParamsMetamask\n *\n * Represents the parameters to pass to the personal_sign method once the signature request is approved\n * plus data added by MetaMask.\n * @property metamaskId - Added for tracking and identification within MetaMask\n * @property data - A hex string conversion of the raw buffer data of the signature request\n * @property from - Address to sign this message from\n * @property origin? - Added for request origin identification\n */\nexport interface PersonalMessageParamsMetamask\n extends AbstractMessageParamsMetamask {\n data: string;\n}\n\n/**\n * Controller in charge of managing - storing, adding, removing, updating - Messages.\n */\nexport class PersonalMessageManager extends AbstractMessageManager<\n PersonalMessage,\n PersonalMessageParams,\n PersonalMessageParamsMetamask\n> {\n /**\n * Name of this controller used during composition\n */\n override name = 'PersonalMessageManager';\n\n /**\n * Creates a new Message with an 'unapproved' status using the passed messageParams.\n * this.addMessage is called to add the new Message to this.messages, and to save the\n * unapproved Messages.\n *\n * @param messageParams - The params for the personal_sign call to be made after the message\n * is approved.\n * @param req - The original request object possibly containing the origin.\n * @returns The id of the newly created message.\n */\n async addUnapprovedMessage(\n messageParams: PersonalMessageParams,\n req?: OriginalRequest,\n ): Promise {\n validateSignMessageData(messageParams);\n if (req) {\n messageParams.origin = req.origin;\n }\n messageParams.data = normalizeMessageData(messageParams.data);\n\n const ethereumSignInData = {\n isSIWEMessage: false,\n parsedMessage: null,\n }\n const finalMsgParams = { ...messageParams, siwe: ethereumSignInData };\n\n const messageId = random();\n const messageData: PersonalMessage = {\n id: messageId,\n messageParams: finalMsgParams,\n status: 'unapproved',\n time: Date.now(),\n type: 'personal_sign',\n };\n await this.addMessage(messageData);\n this.hub.emit(`unapprovedMessage`, {\n ...finalMsgParams,\n ...{ metamaskId: messageId },\n });\n return messageId;\n }\n\n /**\n * Removes the metamaskId property from passed messageParams and returns a promise which\n * resolves the updated messageParams.\n *\n * @param messageParams - The messageParams to modify.\n * @returns Promise resolving to the messageParams with the metamaskId property removed.\n */\n prepMessageForSigning(\n messageParams: PersonalMessageParamsMetamask,\n ): Promise {\n delete messageParams.metamaskId;\n return Promise.resolve(messageParams);\n }\n}\n\nexport default PersonalMessageManager;\n"]} +\ No newline at end of file diff --git a/patches/@metamask+signature-controller+2.0.0.patch b/patches/@metamask+signature-controller+2.0.0.patch deleted file mode 100644 index ef2a6dc12b8..00000000000 --- a/patches/@metamask+signature-controller+2.0.0.patch +++ /dev/null @@ -1,68 +0,0 @@ -diff --git a/node_modules/@metamask/signature-controller/dist/SignatureController.js b/node_modules/@metamask/signature-controller/dist/SignatureController.js -index 59dc597..cea94ca 100644 ---- a/node_modules/@metamask/signature-controller/dist/SignatureController.js -+++ b/node_modules/@metamask/signature-controller/dist/SignatureController.js -@@ -41,7 +41,13 @@ const message_manager_1 = require("@metamask/message-manager"); - const eth_rpc_errors_1 = require("eth-rpc-errors"); - const ethereumjs_util_1 = require("ethereumjs-util"); - const base_controller_1 = require("@metamask/base-controller"); --const controller_utils_1 = require("@metamask/controller-utils"); -+const ORIGIN_METAMASK = 'metamask'; -+var ApprovalType; -+(function (ApprovalType) { -+ ApprovalType["EthSign"] = "eth_sign"; -+ ApprovalType["EthSignTypedData"] = "eth_signTypedData"; -+ ApprovalType["PersonalSign"] = "personal_sign"; -+})(ApprovalType || (ApprovalType = {})); - const controllerName = 'SignatureController'; - const stateMetadata = { - unapprovedMsgs: { persist: false, anonymous: false }, -@@ -95,9 +101,9 @@ class SignatureController extends base_controller_1.BaseControllerV2 { - __classPrivateFieldSet(this, _SignatureController_messageManager, new message_manager_1.MessageManager(undefined, undefined, securityProviderRequest), "f"); - __classPrivateFieldSet(this, _SignatureController_personalMessageManager, new message_manager_1.PersonalMessageManager(undefined, undefined, securityProviderRequest), "f"); - __classPrivateFieldSet(this, _SignatureController_typedMessageManager, new message_manager_1.TypedMessageManager(undefined, undefined, securityProviderRequest, undefined, getCurrentChainId), "f"); -- __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_handleMessageManagerEvents).call(this, __classPrivateFieldGet(this, _SignatureController_messageManager, "f"), controller_utils_1.ApprovalType.EthSign, 'unapprovedMessage'); -- __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_handleMessageManagerEvents).call(this, __classPrivateFieldGet(this, _SignatureController_personalMessageManager, "f"), controller_utils_1.ApprovalType.PersonalSign, 'unapprovedPersonalMessage'); -- __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_handleMessageManagerEvents).call(this, __classPrivateFieldGet(this, _SignatureController_typedMessageManager, "f"), controller_utils_1.ApprovalType.EthSignTypedData, 'unapprovedTypedMessage'); -+ __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_handleMessageManagerEvents).call(this, __classPrivateFieldGet(this, _SignatureController_messageManager, "f"), ApprovalType.EthSign, 'unapprovedMessage'); -+ __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_handleMessageManagerEvents).call(this, __classPrivateFieldGet(this, _SignatureController_personalMessageManager, "f"), ApprovalType.PersonalSign, 'unapprovedPersonalMessage'); -+ __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_handleMessageManagerEvents).call(this, __classPrivateFieldGet(this, _SignatureController_typedMessageManager, "f"), ApprovalType.EthSignTypedData, 'unapprovedTypedMessage'); - __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_subscribeToMessageState).call(this, __classPrivateFieldGet(this, _SignatureController_messageManager, "f"), (state, newMessages, messageCount) => { - state.unapprovedMsgs = newMessages; - state.unapprovedMsgCount = messageCount; -@@ -203,7 +209,7 @@ class SignatureController extends base_controller_1.BaseControllerV2 { - */ - signMessage(msgParams) { - return __awaiter(this, void 0, void 0, function* () { -- return yield __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_signAbstractMessage).call(this, __classPrivateFieldGet(this, _SignatureController_messageManager, "f"), controller_utils_1.ApprovalType.EthSign, msgParams, (cleanMsgParams) => __awaiter(this, void 0, void 0, function* () { return yield __classPrivateFieldGet(this, _SignatureController_keyringController, "f").signMessage(cleanMsgParams); })); -+ return yield __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_signAbstractMessage).call(this, __classPrivateFieldGet(this, _SignatureController_messageManager, "f"), ApprovalType.EthSign, msgParams, (cleanMsgParams) => __awaiter(this, void 0, void 0, function* () { return yield __classPrivateFieldGet(this, _SignatureController_keyringController, "f").signMessage(cleanMsgParams); })); - }); - } - /** -@@ -215,7 +221,7 @@ class SignatureController extends base_controller_1.BaseControllerV2 { - */ - signPersonalMessage(msgParams) { - return __awaiter(this, void 0, void 0, function* () { -- return yield __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_signAbstractMessage).call(this, __classPrivateFieldGet(this, _SignatureController_personalMessageManager, "f"), controller_utils_1.ApprovalType.PersonalSign, msgParams, (cleanMsgParams) => __awaiter(this, void 0, void 0, function* () { return yield __classPrivateFieldGet(this, _SignatureController_keyringController, "f").signPersonalMessage(cleanMsgParams); })); -+ return yield __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_signAbstractMessage).call(this, __classPrivateFieldGet(this, _SignatureController_personalMessageManager, "f"), ApprovalType.PersonalSign, msgParams, (cleanMsgParams) => __awaiter(this, void 0, void 0, function* () { return yield __classPrivateFieldGet(this, _SignatureController_keyringController, "f").signPersonalMessage(cleanMsgParams); })); - }); - } - /** -@@ -230,7 +236,7 @@ class SignatureController extends base_controller_1.BaseControllerV2 { - signTypedMessage(msgParams, opts = { parseJsonData: true }) { - return __awaiter(this, void 0, void 0, function* () { - const { version } = msgParams; -- return yield __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_signAbstractMessage).call(this, __classPrivateFieldGet(this, _SignatureController_typedMessageManager, "f"), controller_utils_1.ApprovalType.EthSignTypedData, msgParams, (cleanMsgParams) => __awaiter(this, void 0, void 0, function* () { -+ return yield __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_signAbstractMessage).call(this, __classPrivateFieldGet(this, _SignatureController_typedMessageManager, "f"), ApprovalType.EthSignTypedData, msgParams, (cleanMsgParams) => __awaiter(this, void 0, void 0, function* () { - const finalMessageParams = opts.parseJsonData - ? __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_removeJsonData).call(this, cleanMsgParams, version) - : cleanMsgParams; -@@ -370,7 +376,7 @@ _SignatureController_keyringController = new WeakMap(), _SignatureController_isE - return Object.assign(Object.assign(Object.assign({}, this.state.unapprovedMsgs), this.state.unapprovedPersonalMsgs), this.state.unapprovedTypedMessages)[messageId]; - }, _SignatureController_requestApproval = function _SignatureController_requestApproval(msgParams, type) { - const id = msgParams.metamaskId; -- const origin = msgParams.origin || controller_utils_1.ORIGIN_METAMASK; -+ const origin = msgParams.origin || ORIGIN_METAMASK; - this.messagingSystem - .call('ApprovalController:addRequest', { - id, diff --git a/patches/@metamask+signature-controller+4.0.1.patch b/patches/@metamask+signature-controller+4.0.1.patch new file mode 100644 index 00000000000..bfffcb0af47 --- /dev/null +++ b/patches/@metamask+signature-controller+4.0.1.patch @@ -0,0 +1,226 @@ +diff --git a/node_modules/@metamask/signature-controller/dist/.DS_Store b/node_modules/@metamask/signature-controller/dist/.DS_Store +new file mode 100644 +index 0000000..5008ddf +Binary files /dev/null and b/node_modules/@metamask/signature-controller/dist/.DS_Store differ +diff --git a/node_modules/@metamask/signature-controller/dist/SignatureController.d.ts b/node_modules/@metamask/signature-controller/dist/SignatureController.d.ts +index 818daf6..c310ed9 100644 +--- a/node_modules/@metamask/signature-controller/dist/SignatureController.d.ts ++++ b/node_modules/@metamask/signature-controller/dist/SignatureController.d.ts +@@ -18,6 +18,9 @@ declare type SignatureControllerState = { + unapprovedTypedMessagesCount: number; + }; + declare type AllowedActions = AddApprovalRequest; ++declare type TypedMessageSigningOptions = { ++ parseJsonData: boolean; ++}; + export declare type GetSignatureState = { + type: `${typeof controllerName}:getState`; + handler: () => SignatureControllerState; +@@ -123,9 +126,11 @@ export declare class SignatureController extends BaseControllerV2; ++ newUnsignedTypedMessage(messageParams: TypedMessageParams, req: OriginalRequest, version: string, signingOpts: TypedMessageSigningOptions): Promise; + setTypedMessageInProgress(messageId: string): void; + setPersonalMessageInProgress(messageId: string): void; + } +diff --git a/node_modules/@metamask/signature-controller/dist/SignatureController.d.ts.map b/node_modules/@metamask/signature-controller/dist/SignatureController.d.ts.map +index 7a9cec5..8a753a7 100644 +--- a/node_modules/@metamask/signature-controller/dist/SignatureController.d.ts.map ++++ b/node_modules/@metamask/signature-controller/dist/SignatureController.d.ts.map +@@ -1 +1 @@ +-{"version":3,"file":"SignatureController.d.ts","sourceRoot":"","sources":["../src/SignatureController.ts"],"names":[],"mappings":"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"} +\ No newline at end of file ++{"version":3,"file":"SignatureController.d.ts","sourceRoot":"","sources":["../src/SignatureController.ts"],"names":[],"mappings":"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"} +\ No newline at end of file +diff --git a/node_modules/@metamask/signature-controller/dist/SignatureController.js b/node_modules/@metamask/signature-controller/dist/SignatureController.js +index b58b27e..24bbe8c 100644 +--- a/node_modules/@metamask/signature-controller/dist/SignatureController.js ++++ b/node_modules/@metamask/signature-controller/dist/SignatureController.js +@@ -42,7 +42,28 @@ const message_manager_1 = require("@metamask/message-manager"); + const eth_rpc_errors_1 = require("eth-rpc-errors"); + const ethereumjs_util_1 = require("ethereumjs-util"); + const base_controller_1 = require("@metamask/base-controller"); +-const controller_utils_1 = require("@metamask/controller-utils"); ++const ORIGIN_METAMASK = 'metamask'; ++var ApprovalType; ++(function (ApprovalType) { ++ ApprovalType["AddEthereumChain"] = "wallet_addEthereumChain"; ++ ApprovalType["ConnectAccounts"] = "connect_accounts"; ++ ApprovalType["EthDecrypt"] = "eth_decrypt"; ++ ApprovalType["EthGetEncryptionPublicKey"] = "eth_getEncryptionPublicKey"; ++ ApprovalType["EthSign"] = "eth_sign"; ++ ApprovalType["EthSignTypedData"] = "eth_signTypedData"; ++ ApprovalType["PersonalSign"] = "personal_sign"; ++ ApprovalType["ResultError"] = "result_error"; ++ ApprovalType["ResultSuccess"] = "result_success"; ++ ApprovalType["SnapDialogAlert"] = "snap_dialog:alert"; ++ ApprovalType["SnapDialogConfirmation"] = "snap_dialog:confirmation"; ++ ApprovalType["SnapDialogPrompt"] = "snap_dialog:prompt"; ++ ApprovalType["SwitchEthereumChain"] = "wallet_switchEthereumChain"; ++ ApprovalType["Transaction"] = "transaction"; ++ ApprovalType["Unlock"] = "unlock"; ++ ApprovalType["WalletConnect"] = "wallet_connect"; ++ ApprovalType["WalletRequestPermissions"] = "wallet_requestPermissions"; ++ ApprovalType["WatchAsset"] = "wallet_watchAsset"; ++})(ApprovalType || (ApprovalType = {})); + const controllerName = 'SignatureController'; + const stateMetadata = { + unapprovedMsgs: { persist: false, anonymous: false }, +@@ -172,7 +193,7 @@ class SignatureController extends base_controller_1.BaseControllerV2 { + */ + newUnsignedMessage(messageParams, req) { + return __awaiter(this, void 0, void 0, function* () { +- return __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_newUnsignedAbstractMessage).call(this, __classPrivateFieldGet(this, _SignatureController_messageManager, "f"), controller_utils_1.ApprovalType.EthSign, 'Message', __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_signMessage).bind(this), messageParams, req, __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_validateUnsignedMessage).bind(this)); ++ return __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_newUnsignedAbstractMessage).call(this, __classPrivateFieldGet(this, _SignatureController_messageManager, "f"), ApprovalType.EthSign, 'Message', __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_signMessage).bind(this), messageParams, req, __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_validateUnsignedMessage).bind(this)); + }); + } + /** +@@ -188,7 +209,7 @@ class SignatureController extends base_controller_1.BaseControllerV2 { + */ + newUnsignedPersonalMessage(messageParams, req) { + return __awaiter(this, void 0, void 0, function* () { +- return __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_newUnsignedAbstractMessage).call(this, __classPrivateFieldGet(this, _SignatureController_personalMessageManager, "f"), controller_utils_1.ApprovalType.PersonalSign, 'Personal Message', __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_signPersonalMessage).bind(this), messageParams, req); ++ return __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_newUnsignedAbstractMessage).call(this, __classPrivateFieldGet(this, _SignatureController_personalMessageManager, "f"), ApprovalType.PersonalSign, 'Personal Message', __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_signPersonalMessage).bind(this), messageParams, req); + }); + } + /** +@@ -197,13 +218,13 @@ class SignatureController extends base_controller_1.BaseControllerV2 { + * @param messageParams - The params passed to eth_signTypedData. + * @param req - The original request, containing the origin. + * @param version - The version indicating the format of the typed data. ++ * @param signingOpts - An options bag for signing. ++ * @param signingOpts.parseJsonData - Whether to parse the JSON before signing. + * @returns Promise resolving to the raw data of the signature request. + */ +- newUnsignedTypedMessage(messageParams, req, version) { ++ newUnsignedTypedMessage(messageParams, req, version, signingOpts) { + return __awaiter(this, void 0, void 0, function* () { +- return __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_newUnsignedAbstractMessage).call(this, __classPrivateFieldGet(this, _SignatureController_typedMessageManager, "f"), controller_utils_1.ApprovalType.EthSignTypedData, 'Typed Message', __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_signTypedMessage).bind(this), messageParams, req, undefined, version, { +- parseJsonData: true, +- }); ++ return __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_newUnsignedAbstractMessage).call(this, __classPrivateFieldGet(this, _SignatureController_typedMessageManager, "f"), ApprovalType.EthSignTypedData, 'Typed Message', __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_signTypedMessage).bind(this), messageParams, req, undefined, version, signingOpts); + }); + } + setTypedMessageInProgress(messageId) { +@@ -230,34 +251,45 @@ _SignatureController_keyringController = new WeakMap(), _SignatureController_isE + if (validateMessage) { + validateMessage(messageParams); + } +- const messageId = yield messageManager.addUnapprovedMessage(messageParams, req, version); +- const messageParamsWithId = Object.assign(Object.assign({}, messageParams), { metamaskId: messageId }); +- const signaturePromise = messageManager.waitForFinishStatus(messageParamsWithId, messageName); ++ let resultCallbacks; + try { +- yield __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_requestApproval).call(this, messageParamsWithId, approvalType); ++ const messageId = yield messageManager.addUnapprovedMessage(messageParams, req, version); ++ const messageParamsWithId = Object.assign(Object.assign(Object.assign({}, messageParams), { metamaskId: messageId }), (version && { version })); ++ const signaturePromise = messageManager.waitForFinishStatus(messageParamsWithId, messageName); ++ try { ++ const acceptResult = yield __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_requestApproval).call(this, messageParamsWithId, approvalType); ++ resultCallbacks = acceptResult.resultCallbacks; ++ } ++ catch (_a) { ++ __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_cancelAbstractMessage).call(this, messageManager, messageId); ++ throw eth_rpc_errors_1.ethErrors.provider.userRejectedRequest('User rejected the request.'); ++ } ++ yield signMessage(messageParamsWithId, signingOpts); ++ const signatureResult = yield signaturePromise; ++ /* istanbul ignore next */ ++ resultCallbacks === null || resultCallbacks === void 0 ? void 0 : resultCallbacks.success(signatureResult); ++ return signatureResult; + } + catch (error) { +- __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_cancelAbstractMessage).call(this, messageManager, messageId); +- throw eth_rpc_errors_1.ethErrors.provider.userRejectedRequest('User rejected the request.'); ++ resultCallbacks === null || resultCallbacks === void 0 ? void 0 : resultCallbacks.error(error); ++ throw error; + } +- yield signMessage(messageParamsWithId, version, signingOpts); +- return signaturePromise; + }); + }, _SignatureController_signMessage = function _SignatureController_signMessage(msgParams) { + return __awaiter(this, void 0, void 0, function* () { +- return yield __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_signAbstractMessage).call(this, __classPrivateFieldGet(this, _SignatureController_messageManager, "f"), controller_utils_1.ApprovalType.EthSign, msgParams, (cleanMsgParams) => __awaiter(this, void 0, void 0, function* () { return yield __classPrivateFieldGet(this, _SignatureController_keyringController, "f").signMessage(cleanMsgParams); })); ++ return yield __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_signAbstractMessage).call(this, __classPrivateFieldGet(this, _SignatureController_messageManager, "f"), ApprovalType.EthSign, msgParams, (cleanMsgParams) => __awaiter(this, void 0, void 0, function* () { return yield __classPrivateFieldGet(this, _SignatureController_keyringController, "f").signMessage(cleanMsgParams); })); + }); + }, _SignatureController_signPersonalMessage = function _SignatureController_signPersonalMessage(msgParams) { + return __awaiter(this, void 0, void 0, function* () { +- return yield __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_signAbstractMessage).call(this, __classPrivateFieldGet(this, _SignatureController_personalMessageManager, "f"), controller_utils_1.ApprovalType.PersonalSign, msgParams, (cleanMsgParams) => __awaiter(this, void 0, void 0, function* () { return yield __classPrivateFieldGet(this, _SignatureController_keyringController, "f").signPersonalMessage(cleanMsgParams); })); ++ return yield __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_signAbstractMessage).call(this, __classPrivateFieldGet(this, _SignatureController_personalMessageManager, "f"), ApprovalType.PersonalSign, msgParams, (cleanMsgParams) => __awaiter(this, void 0, void 0, function* () { return yield __classPrivateFieldGet(this, _SignatureController_keyringController, "f").signPersonalMessage(cleanMsgParams); })); + }); +-}, _SignatureController_signTypedMessage = function _SignatureController_signTypedMessage(msgParams, version, opts) { ++}, _SignatureController_signTypedMessage = function _SignatureController_signTypedMessage(msgParams, ++/* istanbul ignore next */ ++opts = { parseJsonData: true }) { + return __awaiter(this, void 0, void 0, function* () { +- return yield __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_signAbstractMessage).call(this, __classPrivateFieldGet(this, _SignatureController_typedMessageManager, "f"), controller_utils_1.ApprovalType.EthSignTypedData, msgParams, (cleanMsgParams) => __awaiter(this, void 0, void 0, function* () { +- // Options will allways be defined, but we want to satisfy the TS +- // hence we ignore the branch here +- /* istanbul ignore next */ +- const finalMessageParams = (opts === null || opts === void 0 ? void 0 : opts.parseJsonData) ++ const { version } = msgParams; ++ return yield __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_signAbstractMessage).call(this, __classPrivateFieldGet(this, _SignatureController_typedMessageManager, "f"), ApprovalType.EthSignTypedData, msgParams, (cleanMsgParams) => __awaiter(this, void 0, void 0, function* () { ++ const finalMessageParams = opts.parseJsonData + ? __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_removeJsonData).call(this, cleanMsgParams, version) + : cleanMsgParams; + return yield __classPrivateFieldGet(this, _SignatureController_keyringController, "f").signTypedMessage(finalMessageParams, { +@@ -280,12 +312,18 @@ _SignatureController_keyringController = new WeakMap(), _SignatureController_isE + const messageId = msgParams.metamaskId; + try { + const cleanMessageParams = yield messageManager.approveMessage(msgParams); +- const signature = yield getSignature(cleanMessageParams); +- this.hub.emit(`${methodName}:signed`, { signature, messageId }); +- if (!cleanMessageParams.deferSetAsSigned) { +- messageManager.setMessageStatusSigned(messageId, signature); ++ try { ++ const signature = yield getSignature(cleanMessageParams); ++ this.hub.emit(`${methodName}:signed`, { signature, messageId }); ++ if (!cleanMessageParams.deferSetAsSigned) { ++ messageManager.setMessageStatusSigned(messageId, signature); ++ } ++ return signature; ++ } ++ catch (error) { ++ this.hub.emit(`${messageId}:signError`, { error }); ++ throw error; + } +- return signature; + } + catch (error) { + console.info(`MetaMaskController - ${methodName} failed.`, error); +@@ -347,16 +385,17 @@ _SignatureController_keyringController = new WeakMap(), _SignatureController_isE + }, _SignatureController_requestApproval = function _SignatureController_requestApproval(msgParams, type) { + return __awaiter(this, void 0, void 0, function* () { + const id = msgParams.metamaskId; +- const origin = msgParams.origin || controller_utils_1.ORIGIN_METAMASK; ++ const origin = msgParams.origin || ORIGIN_METAMASK; + // We are explicitly cloning the message params here to prevent the mutation errors on development mode + // Because sending it through the messaging system will make the object read only + const clonedMsgParams = (0, lodash_1.cloneDeep)(msgParams); +- return this.messagingSystem.call('ApprovalController:addRequest', { ++ return (yield this.messagingSystem.call('ApprovalController:addRequest', { + id, + origin, + type, + requestData: clonedMsgParams, +- }, true); ++ expectsResult: true, ++ }, true)); + }); + }, _SignatureController_removeJsonData = function _SignatureController_removeJsonData(messageParams, version) { + if (version === 'V1' || typeof messageParams.data !== 'string') { +diff --git a/node_modules/@metamask/signature-controller/dist/SignatureController.js.map b/node_modules/@metamask/signature-controller/dist/SignatureController.js.map +index a0773f6..d21d25a 100644 +--- a/node_modules/@metamask/signature-controller/dist/SignatureController.js.map ++++ b/node_modules/@metamask/signature-controller/dist/SignatureController.js.map +@@ -1 +1 @@ +-{"version":3,"file":"SignatureController.js","sourceRoot":"","sources":["../src/SignatureController.ts"],"names":[],"mappings":"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","sourcesContent":["import EventEmitter from 'events';\nimport type { Hex } from '@metamask/utils';\nimport { cloneDeep } from 'lodash';\nimport {\n MessageManager,\n MessageParams,\n MessageParamsMetamask,\n PersonalMessageManager,\n PersonalMessageParams,\n PersonalMessageParamsMetamask,\n TypedMessageManager,\n TypedMessageParams,\n TypedMessageParamsMetamask,\n AbstractMessageManager,\n AbstractMessage,\n MessageManagerState,\n AbstractMessageParams,\n AbstractMessageParamsMetamask,\n OriginalRequest,\n} from '@metamask/message-manager';\nimport { ethErrors } from 'eth-rpc-errors';\nimport { bufferToHex } from 'ethereumjs-util';\n\nimport {\n BaseControllerV2,\n RestrictedControllerMessenger,\n} from '@metamask/base-controller';\nimport { Patch } from 'immer';\nimport { AddApprovalRequest } from '@metamask/approval-controller';\nimport { ApprovalType, ORIGIN_METAMASK } from '@metamask/controller-utils';\n\nconst controllerName = 'SignatureController';\n\nconst stateMetadata = {\n unapprovedMsgs: { persist: false, anonymous: false },\n unapprovedPersonalMsgs: { persist: false, anonymous: false },\n unapprovedTypedMessages: { persist: false, anonymous: false },\n unapprovedMsgCount: { persist: false, anonymous: false },\n unapprovedPersonalMsgCount: { persist: false, anonymous: false },\n unapprovedTypedMessagesCount: { persist: false, anonymous: false },\n};\n\nconst getDefaultState = () => ({\n unapprovedMsgs: {},\n unapprovedPersonalMsgs: {},\n unapprovedTypedMessages: {},\n unapprovedMsgCount: 0,\n unapprovedPersonalMsgCount: 0,\n unapprovedTypedMessagesCount: 0,\n});\n\ntype CoreMessage = AbstractMessage & {\n messageParams: AbstractMessageParams;\n};\n\ntype StateMessage = Required & {\n msgParams: Required;\n};\n\ntype SignatureControllerState = {\n unapprovedMsgs: Record;\n unapprovedPersonalMsgs: Record;\n unapprovedTypedMessages: Record;\n unapprovedMsgCount: number;\n unapprovedPersonalMsgCount: number;\n unapprovedTypedMessagesCount: number;\n};\n\ntype AllowedActions = AddApprovalRequest;\n\ntype TypedMessageSigningOptions = {\n parseJsonData: boolean;\n};\n\nexport type GetSignatureState = {\n type: `${typeof controllerName}:getState`;\n handler: () => SignatureControllerState;\n};\n\nexport type SignatureStateChange = {\n type: `${typeof controllerName}:stateChange`;\n payload: [SignatureControllerState, Patch[]];\n};\n\nexport type SignatureControllerActions = GetSignatureState;\n\nexport type SignatureControllerEvents = SignatureStateChange;\n\nexport type SignatureControllerMessenger = RestrictedControllerMessenger<\n typeof controllerName,\n SignatureControllerActions | AllowedActions,\n SignatureControllerEvents,\n AllowedActions['type'],\n never\n>;\n\nexport interface KeyringController {\n signMessage: (messsageParams: MessageParams) => Promise;\n signPersonalMessage: (\n messsageParams: PersonalMessageParams,\n ) => Promise;\n signTypedMessage: (\n messsageParams: TypedMessageParams,\n options: { version: string | undefined },\n ) => Promise;\n}\n\nexport type SignatureControllerOptions = {\n messenger: SignatureControllerMessenger;\n keyringController: KeyringController;\n isEthSignEnabled: () => boolean;\n getAllState: () => unknown;\n securityProviderRequest?: (\n requestData: any,\n methodName: string,\n ) => Promise;\n getCurrentChainId: () => Hex;\n};\n\n/**\n * Controller for creating signing requests requiring user approval.\n */\nexport class SignatureController extends BaseControllerV2<\n typeof controllerName,\n SignatureControllerState,\n SignatureControllerMessenger\n> {\n hub: EventEmitter;\n\n #keyringController: KeyringController;\n\n #isEthSignEnabled: () => boolean;\n\n #getAllState: () => any;\n\n #messageManager: MessageManager;\n\n #personalMessageManager: PersonalMessageManager;\n\n #typedMessageManager: TypedMessageManager;\n\n /**\n * Construct a Sign controller.\n *\n * @param options - The controller options.\n * @param options.messenger - The restricted controller messenger for the sign controller.\n * @param options.keyringController - An instance of a keyring controller used to perform the signing operations.\n * @param options.isEthSignEnabled - Callback to return true if eth_sign is enabled.\n * @param options.getAllState - Callback to retrieve all user state.\n * @param options.securityProviderRequest - A function for verifying a message, whether it is malicious or not.\n * @param options.getCurrentChainId - A function for retrieving the current chainId.\n */\n constructor({\n messenger,\n keyringController,\n isEthSignEnabled,\n getAllState,\n securityProviderRequest,\n getCurrentChainId,\n }: SignatureControllerOptions) {\n super({\n name: controllerName,\n metadata: stateMetadata,\n messenger,\n state: getDefaultState(),\n });\n\n this.#keyringController = keyringController;\n this.#isEthSignEnabled = isEthSignEnabled;\n this.#getAllState = getAllState;\n\n this.hub = new EventEmitter();\n this.#messageManager = new MessageManager(\n undefined,\n undefined,\n securityProviderRequest,\n );\n this.#personalMessageManager = new PersonalMessageManager(\n undefined,\n undefined,\n securityProviderRequest,\n );\n this.#typedMessageManager = new TypedMessageManager(\n undefined,\n undefined,\n securityProviderRequest,\n undefined,\n getCurrentChainId,\n );\n\n this.#handleMessageManagerEvents(this.#messageManager, 'unapprovedMessage');\n this.#handleMessageManagerEvents(\n this.#personalMessageManager,\n 'unapprovedPersonalMessage',\n );\n this.#handleMessageManagerEvents(\n this.#typedMessageManager,\n 'unapprovedTypedMessage',\n );\n\n this.#subscribeToMessageState(\n this.#messageManager,\n (state, newMessages, messageCount) => {\n state.unapprovedMsgs = newMessages;\n state.unapprovedMsgCount = messageCount;\n },\n );\n\n this.#subscribeToMessageState(\n this.#personalMessageManager,\n (state, newMessages, messageCount) => {\n state.unapprovedPersonalMsgs = newMessages;\n state.unapprovedPersonalMsgCount = messageCount;\n },\n );\n\n this.#subscribeToMessageState(\n this.#typedMessageManager,\n (state, newMessages, messageCount) => {\n state.unapprovedTypedMessages = newMessages;\n state.unapprovedTypedMessagesCount = messageCount;\n },\n );\n }\n\n /**\n * A getter for the number of 'unapproved' Messages in this.messages.\n *\n * @returns The number of 'unapproved' Messages in this.messages\n */\n get unapprovedMsgCount(): number {\n return this.#messageManager.getUnapprovedMessagesCount();\n }\n\n /**\n * A getter for the number of 'unapproved' PersonalMessages in this.messages.\n *\n * @returns The number of 'unapproved' PersonalMessages in this.messages\n */\n get unapprovedPersonalMessagesCount(): number {\n return this.#personalMessageManager.getUnapprovedMessagesCount();\n }\n\n /**\n * A getter for the number of 'unapproved' TypedMessages in this.messages.\n *\n * @returns The number of 'unapproved' TypedMessages in this.messages\n */\n get unapprovedTypedMessagesCount(): number {\n return this.#typedMessageManager.getUnapprovedMessagesCount();\n }\n\n /**\n * Reset the controller state to the initial state.\n */\n resetState() {\n this.update(() => getDefaultState());\n }\n\n /**\n * Reject all unapproved messages of any type.\n *\n * @param reason - A message to indicate why.\n */\n rejectUnapproved(reason?: string) {\n this.#rejectUnapproved(this.#messageManager, reason);\n this.#rejectUnapproved(this.#personalMessageManager, reason);\n this.#rejectUnapproved(this.#typedMessageManager, reason);\n }\n\n /**\n * Clears all unapproved messages from memory.\n */\n clearUnapproved() {\n this.#clearUnapproved(this.#messageManager);\n this.#clearUnapproved(this.#personalMessageManager);\n this.#clearUnapproved(this.#typedMessageManager);\n }\n\n /**\n * Called when a Dapp uses the eth_sign method, to request user approval.\n * eth_sign is a pure signature of arbitrary data. It is on a deprecation\n * path, since this data can be a transaction, or can leak private key\n * information.\n *\n * @param messageParams - The params passed to eth_sign.\n * @param [req] - The original request, containing the origin.\n * @returns Promise resolving to the raw data of the signature request.\n */\n async newUnsignedMessage(\n messageParams: MessageParams,\n req: OriginalRequest,\n ): Promise {\n return this.#newUnsignedAbstractMessage(\n this.#messageManager,\n ApprovalType.EthSign,\n 'Message',\n this.#signMessage.bind(this),\n messageParams,\n req,\n this.#validateUnsignedMessage.bind(this),\n );\n }\n\n /**\n * Called when a dapp uses the personal_sign method.\n * This is identical to the Geth eth_sign method, and may eventually replace\n * eth_sign.\n *\n * We currently define our eth_sign and personal_sign mostly for legacy Dapps.\n *\n * @param messageParams - The params of the message to sign & return to the Dapp.\n * @param req - The original request, containing the origin.\n * @returns Promise resolving to the raw data of the signature request.\n */\n async newUnsignedPersonalMessage(\n messageParams: PersonalMessageParams,\n req: OriginalRequest,\n ): Promise {\n return this.#newUnsignedAbstractMessage(\n this.#personalMessageManager,\n ApprovalType.PersonalSign,\n 'Personal Message',\n this.#signPersonalMessage.bind(this),\n messageParams,\n req,\n );\n }\n\n /**\n * Called when a dapp uses the eth_signTypedData method, per EIP 712.\n *\n * @param messageParams - The params passed to eth_signTypedData.\n * @param req - The original request, containing the origin.\n * @param version - The version indicating the format of the typed data.\n * @returns Promise resolving to the raw data of the signature request.\n */\n async newUnsignedTypedMessage(\n messageParams: TypedMessageParams,\n req: OriginalRequest,\n version: string,\n ): Promise {\n return this.#newUnsignedAbstractMessage(\n this.#typedMessageManager,\n ApprovalType.EthSignTypedData,\n 'Typed Message',\n this.#signTypedMessage.bind(this),\n messageParams,\n req,\n undefined,\n version,\n {\n parseJsonData: true,\n },\n );\n }\n\n setTypedMessageInProgress(messageId: string) {\n this.#typedMessageManager.setMessageStatusInProgress(messageId);\n }\n\n setPersonalMessageInProgress(messageId: string) {\n this.#personalMessageManager.setMessageStatusInProgress(messageId);\n }\n\n #validateUnsignedMessage(messageParams: MessageParamsMetamask): void {\n if (!this.#isEthSignEnabled()) {\n throw ethErrors.rpc.methodNotFound(\n 'eth_sign has been disabled. You must enable it in the advanced settings',\n );\n }\n const data = this.#normalizeMsgData(messageParams.data);\n // 64 hex + \"0x\" at the beginning\n // This is needed because Ethereum's EcSign works only on 32 byte numbers\n // For 67 length see: https://github.com/MetaMask/metamask-extension/pull/12679/files#r749479607\n if (data.length !== 66 && data.length !== 67) {\n throw ethErrors.rpc.invalidParams(\n 'eth_sign requires 32 byte message hash',\n );\n }\n }\n\n async #newUnsignedAbstractMessage<\n M extends AbstractMessage,\n P extends AbstractMessageParams,\n PM extends AbstractMessageParamsMetamask,\n SO,\n >(\n messageManager: AbstractMessageManager,\n approvalType: ApprovalType,\n messageName: string,\n signMessage: (\n messageParams: PM,\n version?: string,\n signingOpts?: SO,\n ) => void,\n messageParams: PM,\n req: OriginalRequest,\n validateMessage?: (params: PM) => void,\n version?: string,\n signingOpts?: SO,\n ) {\n if (validateMessage) {\n validateMessage(messageParams);\n }\n\n const messageId = await messageManager.addUnapprovedMessage(\n messageParams,\n req,\n version,\n );\n\n const messageParamsWithId = {\n ...messageParams,\n metamaskId: messageId,\n };\n\n const signaturePromise = messageManager.waitForFinishStatus(\n messageParamsWithId,\n messageName,\n );\n\n try {\n await this.#requestApproval(messageParamsWithId, approvalType);\n } catch (error) {\n this.#cancelAbstractMessage(messageManager, messageId);\n throw ethErrors.provider.userRejectedRequest(\n 'User rejected the request.',\n );\n }\n await signMessage(messageParamsWithId, version, signingOpts);\n\n return signaturePromise;\n }\n\n /**\n * Signifies user intent to complete an eth_sign method.\n *\n * @param msgParams - The params passed to eth_call.\n * @returns Signature result from signing.\n */\n async #signMessage(msgParams: MessageParamsMetamask) {\n return await this.#signAbstractMessage(\n this.#messageManager,\n ApprovalType.EthSign,\n msgParams,\n async (cleanMsgParams) =>\n await this.#keyringController.signMessage(cleanMsgParams),\n );\n }\n\n /**\n * Signifies a user's approval to sign a personal_sign message in queue.\n * Triggers signing, and the callback function from newUnsignedPersonalMessage.\n *\n * @param msgParams - The params of the message to sign & return to the Dapp.\n * @returns Signature result from signing.\n */\n async #signPersonalMessage(msgParams: PersonalMessageParamsMetamask) {\n return await this.#signAbstractMessage(\n this.#personalMessageManager,\n ApprovalType.PersonalSign,\n msgParams,\n async (cleanMsgParams) =>\n await this.#keyringController.signPersonalMessage(cleanMsgParams),\n );\n }\n\n /**\n * The method for a user approving a call to eth_signTypedData, per EIP 712.\n * Triggers the callback in newUnsignedTypedMessage.\n *\n * @param msgParams - The params passed to eth_signTypedData.\n * @param version - The version indicating the format of the typed data.\n * @param opts - The options for the method.\n * @param opts.parseJsonData - Whether to parse JSON data before calling the KeyringController.\n * @returns Signature result from signing.\n */\n async #signTypedMessage(\n msgParams: TypedMessageParamsMetamask,\n version?: string,\n opts?: TypedMessageSigningOptions,\n ): Promise {\n return await this.#signAbstractMessage(\n this.#typedMessageManager,\n ApprovalType.EthSignTypedData,\n msgParams,\n async (cleanMsgParams) => {\n // Options will allways be defined, but we want to satisfy the TS\n // hence we ignore the branch here\n /* istanbul ignore next */\n const finalMessageParams = opts?.parseJsonData\n ? this.#removeJsonData(cleanMsgParams, version as string)\n : cleanMsgParams;\n\n return await this.#keyringController.signTypedMessage(\n finalMessageParams,\n {\n version,\n },\n );\n },\n );\n }\n\n #rejectUnapproved<\n M extends AbstractMessage,\n P extends AbstractMessageParams,\n PM extends AbstractMessageParamsMetamask,\n >(messageManager: AbstractMessageManager, reason?: string) {\n Object.keys(messageManager.getUnapprovedMessages()).forEach((messageId) => {\n this.#cancelAbstractMessage(messageManager, messageId, reason);\n });\n }\n\n #clearUnapproved<\n M extends AbstractMessage,\n P extends AbstractMessageParams,\n PM extends AbstractMessageParamsMetamask,\n >(messageManager: AbstractMessageManager) {\n messageManager.update({\n unapprovedMessages: {},\n unapprovedMessagesCount: 0,\n });\n }\n\n async #signAbstractMessage<\n M extends AbstractMessage,\n P extends AbstractMessageParams,\n PM extends AbstractMessageParamsMetamask,\n >(\n messageManager: AbstractMessageManager,\n methodName: string,\n msgParams: PM,\n getSignature: (cleanMessageParams: P) => Promise,\n ) {\n console.info(`MetaMaskController - ${methodName}`);\n\n const messageId = msgParams.metamaskId as string;\n\n try {\n const cleanMessageParams = await messageManager.approveMessage(msgParams);\n const signature = await getSignature(cleanMessageParams);\n\n this.hub.emit(`${methodName}:signed`, { signature, messageId });\n\n if (!cleanMessageParams.deferSetAsSigned) {\n messageManager.setMessageStatusSigned(messageId, signature);\n }\n\n return signature;\n } catch (error: any) {\n console.info(`MetaMaskController - ${methodName} failed.`, error);\n this.#errorMessage(messageManager, messageId, error.message);\n throw error;\n }\n }\n\n #errorMessage<\n M extends AbstractMessage,\n P extends AbstractMessageParams,\n PM extends AbstractMessageParamsMetamask,\n >(\n messageManager: AbstractMessageManager,\n messageId: string,\n error: string,\n ) {\n if (messageManager instanceof TypedMessageManager) {\n messageManager.setMessageStatusErrored(messageId, error);\n } else {\n this.#cancelAbstractMessage(messageManager, messageId);\n }\n }\n\n #cancelAbstractMessage<\n M extends AbstractMessage,\n P extends AbstractMessageParams,\n PM extends AbstractMessageParamsMetamask,\n >(\n messageManager: AbstractMessageManager,\n messageId: string,\n reason?: string,\n ) {\n if (reason) {\n const message = this.#getMessage(messageId);\n this.hub.emit('cancelWithReason', { message, reason });\n }\n messageManager.rejectMessage(messageId);\n }\n\n #handleMessageManagerEvents<\n M extends AbstractMessage,\n P extends AbstractMessageParams,\n PM extends AbstractMessageParamsMetamask,\n >(messageManager: AbstractMessageManager, eventName: string) {\n messageManager.hub.on('updateBadge', () => {\n this.hub.emit('updateBadge');\n });\n\n messageManager.hub.on(\n 'unapprovedMessage',\n (msgParams: AbstractMessageParamsMetamask) => {\n this.hub.emit(eventName, msgParams);\n },\n );\n }\n\n #subscribeToMessageState<\n M extends AbstractMessage,\n P extends AbstractMessageParams,\n PM extends AbstractMessageParamsMetamask,\n >(\n messageManager: AbstractMessageManager,\n updateState: (\n state: SignatureControllerState,\n newMessages: Record,\n messageCount: number,\n ) => void,\n ) {\n messageManager.subscribe((state: MessageManagerState) => {\n const newMessages = this.#migrateMessages(\n state.unapprovedMessages as any,\n );\n\n this.update(() => {\n const newState = { ...this.state };\n updateState(newState, newMessages, state.unapprovedMessagesCount);\n return newState;\n });\n });\n }\n\n #migrateMessages(\n coreMessages: Record,\n ): Record {\n const stateMessages: Record = {};\n\n for (const messageId of Object.keys(coreMessages)) {\n const coreMessage = coreMessages[messageId];\n const stateMessage = this.#migrateMessage(coreMessage);\n\n stateMessages[messageId] = stateMessage;\n }\n\n return stateMessages;\n }\n\n #migrateMessage(coreMessage: CoreMessage): StateMessage {\n const { messageParams, ...coreMessageData } = coreMessage;\n\n // Core message managers use messageParams but frontend uses msgParams with lots of references\n const stateMessage = {\n ...coreMessageData,\n msgParams: messageParams,\n };\n\n return stateMessage as StateMessage;\n }\n\n #normalizeMsgData(data: string) {\n if (data.slice(0, 2) === '0x') {\n // data is already hex\n return data;\n }\n // data is unicode, convert to hex\n return bufferToHex(Buffer.from(data, 'utf8'));\n }\n\n #getMessage(messageId: string): StateMessage {\n return {\n ...this.state.unapprovedMsgs,\n ...this.state.unapprovedPersonalMsgs,\n ...this.state.unapprovedTypedMessages,\n }[messageId];\n }\n\n async #requestApproval(\n msgParams: AbstractMessageParamsMetamask,\n type: ApprovalType,\n ) {\n const id = msgParams.metamaskId as string;\n const origin = msgParams.origin || ORIGIN_METAMASK;\n\n // We are explicitly cloning the message params here to prevent the mutation errors on development mode\n // Because sending it through the messaging system will make the object read only\n const clonedMsgParams = cloneDeep(msgParams);\n\n return this.messagingSystem.call(\n 'ApprovalController:addRequest',\n {\n id,\n origin,\n type,\n requestData: clonedMsgParams as Required,\n },\n true,\n );\n }\n\n #removeJsonData(\n messageParams: TypedMessageParams,\n version: string,\n ): TypedMessageParams {\n if (version === 'V1' || typeof messageParams.data !== 'string') {\n return messageParams;\n }\n\n return {\n ...messageParams,\n data: JSON.parse(messageParams.data),\n };\n }\n}\n"]} +\ No newline at end of file ++{"version":3,"file":"SignatureController.js","sourceRoot":"","sources":["../src/SignatureController.ts"],"names":[],"mappings":"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","sourcesContent":["import EventEmitter from 'events';\nimport type { Hex } from '@metamask/utils';\nimport { cloneDeep } from 'lodash';\nimport {\n MessageManager,\n MessageParams,\n MessageParamsMetamask,\n PersonalMessageManager,\n PersonalMessageParams,\n PersonalMessageParamsMetamask,\n TypedMessageManager,\n TypedMessageParams,\n TypedMessageParamsMetamask,\n AbstractMessageManager,\n AbstractMessage,\n MessageManagerState,\n AbstractMessageParams,\n AbstractMessageParamsMetamask,\n OriginalRequest,\n} from '@metamask/message-manager';\nimport { ethErrors } from 'eth-rpc-errors';\nimport { bufferToHex } from 'ethereumjs-util';\n\nimport {\n BaseControllerV2,\n RestrictedControllerMessenger,\n} from '@metamask/base-controller';\nimport { Patch } from 'immer';\nimport {\n AddApprovalRequest,\n AcceptResultCallbacks,\n AddResult,\n} from '@metamask/approval-controller';\n\nconst ORIGIN_METAMASK = 'metamask';\nenum ApprovalType {\n AddEthereumChain = 'wallet_addEthereumChain',\n ConnectAccounts = 'connect_accounts',\n EthDecrypt = 'eth_decrypt',\n EthGetEncryptionPublicKey = 'eth_getEncryptionPublicKey',\n EthSign = 'eth_sign',\n EthSignTypedData = 'eth_signTypedData',\n PersonalSign = 'personal_sign',\n ResultError = 'result_error',\n ResultSuccess = 'result_success',\n SnapDialogAlert = 'snap_dialog:alert',\n SnapDialogConfirmation = 'snap_dialog:confirmation',\n SnapDialogPrompt = 'snap_dialog:prompt',\n SwitchEthereumChain = 'wallet_switchEthereumChain',\n Transaction = 'transaction',\n Unlock = 'unlock',\n WalletConnect = 'wallet_connect',\n WalletRequestPermissions = 'wallet_requestPermissions',\n WatchAsset = 'wallet_watchAsset',\n}\n\nconst controllerName = 'SignatureController';\n\nconst stateMetadata = {\n unapprovedMsgs: { persist: false, anonymous: false },\n unapprovedPersonalMsgs: { persist: false, anonymous: false },\n unapprovedTypedMessages: { persist: false, anonymous: false },\n unapprovedMsgCount: { persist: false, anonymous: false },\n unapprovedPersonalMsgCount: { persist: false, anonymous: false },\n unapprovedTypedMessagesCount: { persist: false, anonymous: false },\n};\n\nconst getDefaultState = () => ({\n unapprovedMsgs: {},\n unapprovedPersonalMsgs: {},\n unapprovedTypedMessages: {},\n unapprovedMsgCount: 0,\n unapprovedPersonalMsgCount: 0,\n unapprovedTypedMessagesCount: 0,\n});\n\ntype CoreMessage = AbstractMessage & {\n messageParams: AbstractMessageParams;\n};\n\ntype StateMessage = Required & {\n msgParams: Required;\n};\n\ntype SignatureControllerState = {\n unapprovedMsgs: Record;\n unapprovedPersonalMsgs: Record;\n unapprovedTypedMessages: Record;\n unapprovedMsgCount: number;\n unapprovedPersonalMsgCount: number;\n unapprovedTypedMessagesCount: number;\n};\n\ntype AllowedActions = AddApprovalRequest;\n\ntype TypedMessageSigningOptions = {\n parseJsonData: boolean;\n};\n\nexport type GetSignatureState = {\n type: `${typeof controllerName}:getState`;\n handler: () => SignatureControllerState;\n};\n\nexport type SignatureStateChange = {\n type: `${typeof controllerName}:stateChange`;\n payload: [SignatureControllerState, Patch[]];\n};\n\nexport type SignatureControllerActions = GetSignatureState;\n\nexport type SignatureControllerEvents = SignatureStateChange;\n\nexport type SignatureControllerMessenger = RestrictedControllerMessenger<\n typeof controllerName,\n SignatureControllerActions | AllowedActions,\n SignatureControllerEvents,\n AllowedActions['type'],\n never\n>;\n\nexport interface KeyringController {\n signMessage: (messsageParams: MessageParams) => Promise;\n signPersonalMessage: (\n messsageParams: PersonalMessageParams,\n ) => Promise;\n signTypedMessage: (\n messsageParams: TypedMessageParams,\n options: { version: string | undefined },\n ) => Promise;\n}\n\nexport type SignatureControllerOptions = {\n messenger: SignatureControllerMessenger;\n keyringController: KeyringController;\n isEthSignEnabled: () => boolean;\n getAllState: () => unknown;\n securityProviderRequest?: (\n requestData: any,\n methodName: string,\n ) => Promise;\n getCurrentChainId: () => Hex;\n};\n\n/**\n * Controller for creating signing requests requiring user approval.\n */\nexport class SignatureController extends BaseControllerV2<\n typeof controllerName,\n SignatureControllerState,\n SignatureControllerMessenger\n> {\n hub: EventEmitter;\n\n #keyringController: KeyringController;\n\n #isEthSignEnabled: () => boolean;\n\n #getAllState: () => any;\n\n #messageManager: MessageManager;\n\n #personalMessageManager: PersonalMessageManager;\n\n #typedMessageManager: TypedMessageManager;\n\n /**\n * Construct a Sign controller.\n *\n * @param options - The controller options.\n * @param options.messenger - The restricted controller messenger for the sign controller.\n * @param options.keyringController - An instance of a keyring controller used to perform the signing operations.\n * @param options.isEthSignEnabled - Callback to return true if eth_sign is enabled.\n * @param options.getAllState - Callback to retrieve all user state.\n * @param options.securityProviderRequest - A function for verifying a message, whether it is malicious or not.\n * @param options.getCurrentChainId - A function for retrieving the current chainId.\n */\n constructor({\n messenger,\n keyringController,\n isEthSignEnabled,\n getAllState,\n securityProviderRequest,\n getCurrentChainId,\n }: SignatureControllerOptions) {\n super({\n name: controllerName,\n metadata: stateMetadata,\n messenger,\n state: getDefaultState(),\n });\n\n this.#keyringController = keyringController;\n this.#isEthSignEnabled = isEthSignEnabled;\n this.#getAllState = getAllState;\n\n this.hub = new EventEmitter();\n this.#messageManager = new MessageManager(\n undefined,\n undefined,\n securityProviderRequest,\n );\n this.#personalMessageManager = new PersonalMessageManager(\n undefined,\n undefined,\n securityProviderRequest,\n );\n this.#typedMessageManager = new TypedMessageManager(\n undefined,\n undefined,\n securityProviderRequest,\n undefined,\n getCurrentChainId,\n );\n\n this.#handleMessageManagerEvents(this.#messageManager, 'unapprovedMessage');\n this.#handleMessageManagerEvents(\n this.#personalMessageManager,\n 'unapprovedPersonalMessage',\n );\n this.#handleMessageManagerEvents(\n this.#typedMessageManager,\n 'unapprovedTypedMessage',\n );\n\n this.#subscribeToMessageState(\n this.#messageManager,\n (state, newMessages, messageCount) => {\n state.unapprovedMsgs = newMessages;\n state.unapprovedMsgCount = messageCount;\n },\n );\n\n this.#subscribeToMessageState(\n this.#personalMessageManager,\n (state, newMessages, messageCount) => {\n state.unapprovedPersonalMsgs = newMessages;\n state.unapprovedPersonalMsgCount = messageCount;\n },\n );\n\n this.#subscribeToMessageState(\n this.#typedMessageManager,\n (state, newMessages, messageCount) => {\n state.unapprovedTypedMessages = newMessages;\n state.unapprovedTypedMessagesCount = messageCount;\n },\n );\n }\n\n /**\n * A getter for the number of 'unapproved' Messages in this.messages.\n *\n * @returns The number of 'unapproved' Messages in this.messages\n */\n get unapprovedMsgCount(): number {\n return this.#messageManager.getUnapprovedMessagesCount();\n }\n\n /**\n * A getter for the number of 'unapproved' PersonalMessages in this.messages.\n *\n * @returns The number of 'unapproved' PersonalMessages in this.messages\n */\n get unapprovedPersonalMessagesCount(): number {\n return this.#personalMessageManager.getUnapprovedMessagesCount();\n }\n\n /**\n * A getter for the number of 'unapproved' TypedMessages in this.messages.\n *\n * @returns The number of 'unapproved' TypedMessages in this.messages\n */\n get unapprovedTypedMessagesCount(): number {\n return this.#typedMessageManager.getUnapprovedMessagesCount();\n }\n\n /**\n * Reset the controller state to the initial state.\n */\n resetState() {\n this.update(() => getDefaultState());\n }\n\n /**\n * Reject all unapproved messages of any type.\n *\n * @param reason - A message to indicate why.\n */\n rejectUnapproved(reason?: string) {\n this.#rejectUnapproved(this.#messageManager, reason);\n this.#rejectUnapproved(this.#personalMessageManager, reason);\n this.#rejectUnapproved(this.#typedMessageManager, reason);\n }\n\n /**\n * Clears all unapproved messages from memory.\n */\n clearUnapproved() {\n this.#clearUnapproved(this.#messageManager);\n this.#clearUnapproved(this.#personalMessageManager);\n this.#clearUnapproved(this.#typedMessageManager);\n }\n\n /**\n * Called when a Dapp uses the eth_sign method, to request user approval.\n * eth_sign is a pure signature of arbitrary data. It is on a deprecation\n * path, since this data can be a transaction, or can leak private key\n * information.\n *\n * @param messageParams - The params passed to eth_sign.\n * @param [req] - The original request, containing the origin.\n * @returns Promise resolving to the raw data of the signature request.\n */\n async newUnsignedMessage(\n messageParams: MessageParams,\n req: OriginalRequest,\n ): Promise {\n return this.#newUnsignedAbstractMessage(\n this.#messageManager,\n ApprovalType.EthSign,\n 'Message',\n this.#signMessage.bind(this),\n messageParams,\n req,\n this.#validateUnsignedMessage.bind(this),\n );\n }\n\n /**\n * Called when a dapp uses the personal_sign method.\n * This is identical to the Geth eth_sign method, and may eventually replace\n * eth_sign.\n *\n * We currently define our eth_sign and personal_sign mostly for legacy Dapps.\n *\n * @param messageParams - The params of the message to sign & return to the Dapp.\n * @param req - The original request, containing the origin.\n * @returns Promise resolving to the raw data of the signature request.\n */\n async newUnsignedPersonalMessage(\n messageParams: PersonalMessageParams,\n req: OriginalRequest,\n ): Promise {\n return this.#newUnsignedAbstractMessage(\n this.#personalMessageManager,\n ApprovalType.PersonalSign,\n 'Personal Message',\n this.#signPersonalMessage.bind(this),\n messageParams,\n req,\n );\n }\n\n /**\n * Called when a dapp uses the eth_signTypedData method, per EIP 712.\n *\n * @param messageParams - The params passed to eth_signTypedData.\n * @param req - The original request, containing the origin.\n * @param version - The version indicating the format of the typed data.\n * @param signingOpts - An options bag for signing.\n * @param signingOpts.parseJsonData - Whether to parse the JSON before signing.\n * @returns Promise resolving to the raw data of the signature request.\n */\n async newUnsignedTypedMessage(\n messageParams: TypedMessageParams,\n req: OriginalRequest,\n version: string,\n signingOpts: TypedMessageSigningOptions,\n ): Promise {\n return this.#newUnsignedAbstractMessage(\n this.#typedMessageManager,\n ApprovalType.EthSignTypedData,\n 'Typed Message',\n this.#signTypedMessage.bind(this),\n messageParams,\n req,\n undefined,\n version,\n signingOpts,\n );\n }\n\n setTypedMessageInProgress(messageId: string) {\n this.#typedMessageManager.setMessageStatusInProgress(messageId);\n }\n\n setPersonalMessageInProgress(messageId: string) {\n this.#personalMessageManager.setMessageStatusInProgress(messageId);\n }\n\n #validateUnsignedMessage(messageParams: MessageParamsMetamask): void {\n if (!this.#isEthSignEnabled()) {\n throw ethErrors.rpc.methodNotFound(\n 'eth_sign has been disabled. You must enable it in the advanced settings',\n );\n }\n const data = this.#normalizeMsgData(messageParams.data);\n // 64 hex + \"0x\" at the beginning\n // This is needed because Ethereum's EcSign works only on 32 byte numbers\n // For 67 length see: https://github.com/MetaMask/metamask-extension/pull/12679/files#r749479607\n if (data.length !== 66 && data.length !== 67) {\n throw ethErrors.rpc.invalidParams(\n 'eth_sign requires 32 byte message hash',\n );\n }\n }\n\n async #newUnsignedAbstractMessage<\n M extends AbstractMessage,\n P extends AbstractMessageParams,\n PM extends AbstractMessageParamsMetamask,\n SO,\n >(\n messageManager: AbstractMessageManager,\n approvalType: ApprovalType,\n messageName: string,\n signMessage: (messageParams: PM, signingOpts?: SO) => void,\n messageParams: PM,\n req: OriginalRequest,\n validateMessage?: (params: PM) => void,\n version?: string,\n signingOpts?: SO,\n ) {\n if (validateMessage) {\n validateMessage(messageParams);\n }\n\n let resultCallbacks: AcceptResultCallbacks | undefined;\n try {\n const messageId = await messageManager.addUnapprovedMessage(\n messageParams,\n req,\n version,\n );\n\n const messageParamsWithId = {\n ...messageParams,\n metamaskId: messageId,\n ...(version && { version }),\n };\n\n const signaturePromise = messageManager.waitForFinishStatus(\n messageParamsWithId,\n messageName,\n );\n\n try {\n const acceptResult = await this.#requestApproval(\n messageParamsWithId,\n approvalType,\n );\n\n resultCallbacks = acceptResult.resultCallbacks;\n } catch {\n this.#cancelAbstractMessage(messageManager, messageId);\n throw ethErrors.provider.userRejectedRequest(\n 'User rejected the request.',\n );\n }\n\n await signMessage(messageParamsWithId, signingOpts);\n\n const signatureResult = await signaturePromise;\n\n /* istanbul ignore next */\n resultCallbacks?.success(signatureResult);\n\n return signatureResult;\n } catch (error) {\n resultCallbacks?.error(error as Error);\n throw error;\n }\n }\n\n /**\n * Signifies user intent to complete an eth_sign method.\n *\n * @param msgParams - The params passed to eth_call.\n * @returns Signature result from signing.\n */\n async #signMessage(msgParams: MessageParamsMetamask) {\n return await this.#signAbstractMessage(\n this.#messageManager,\n ApprovalType.EthSign,\n msgParams,\n async (cleanMsgParams) =>\n await this.#keyringController.signMessage(cleanMsgParams),\n );\n }\n\n /**\n * Signifies a user's approval to sign a personal_sign message in queue.\n * Triggers signing, and the callback function from newUnsignedPersonalMessage.\n *\n * @param msgParams - The params of the message to sign & return to the Dapp.\n * @returns Signature result from signing.\n */\n async #signPersonalMessage(msgParams: PersonalMessageParamsMetamask) {\n return await this.#signAbstractMessage(\n this.#personalMessageManager,\n ApprovalType.PersonalSign,\n msgParams,\n async (cleanMsgParams) =>\n await this.#keyringController.signPersonalMessage(cleanMsgParams),\n );\n }\n\n /**\n * The method for a user approving a call to eth_signTypedData, per EIP 712.\n * Triggers the callback in newUnsignedTypedMessage.\n *\n * @param msgParams - The params passed to eth_signTypedData.\n * @param opts - The options for the method.\n * @param opts.parseJsonData - Whether to parse JSON data before calling the KeyringController.\n * @returns Signature result from signing.\n */\n async #signTypedMessage(\n msgParams: TypedMessageParamsMetamask,\n /* istanbul ignore next */\n opts = { parseJsonData: true },\n ): Promise {\n const { version } = msgParams;\n return await this.#signAbstractMessage(\n this.#typedMessageManager,\n ApprovalType.EthSignTypedData,\n msgParams,\n async (cleanMsgParams) => {\n const finalMessageParams = opts.parseJsonData\n ? this.#removeJsonData(cleanMsgParams, version as string)\n : cleanMsgParams;\n\n return await this.#keyringController.signTypedMessage(\n finalMessageParams,\n {\n version,\n },\n );\n },\n );\n }\n\n #rejectUnapproved<\n M extends AbstractMessage,\n P extends AbstractMessageParams,\n PM extends AbstractMessageParamsMetamask,\n >(messageManager: AbstractMessageManager, reason?: string) {\n Object.keys(messageManager.getUnapprovedMessages()).forEach((messageId) => {\n this.#cancelAbstractMessage(messageManager, messageId, reason);\n });\n }\n\n #clearUnapproved<\n M extends AbstractMessage,\n P extends AbstractMessageParams,\n PM extends AbstractMessageParamsMetamask,\n >(messageManager: AbstractMessageManager) {\n messageManager.update({\n unapprovedMessages: {},\n unapprovedMessagesCount: 0,\n });\n }\n\n async #signAbstractMessage<\n M extends AbstractMessage,\n P extends AbstractMessageParams,\n PM extends AbstractMessageParamsMetamask,\n >(\n messageManager: AbstractMessageManager,\n methodName: string,\n msgParams: PM,\n getSignature: (cleanMessageParams: P) => Promise,\n ) {\n console.info(`MetaMaskController - ${methodName}`);\n\n const messageId = msgParams.metamaskId as string;\n\n try {\n const cleanMessageParams = await messageManager.approveMessage(msgParams);\n\n try {\n const signature = await getSignature(cleanMessageParams);\n\n this.hub.emit(`${methodName}:signed`, { signature, messageId });\n\n if (!cleanMessageParams.deferSetAsSigned) {\n messageManager.setMessageStatusSigned(messageId, signature);\n }\n\n return signature;\n } catch (error) {\n this.hub.emit(`${messageId}:signError`, { error });\n throw error;\n }\n } catch (error: any) {\n console.info(`MetaMaskController - ${methodName} failed.`, error);\n this.#errorMessage(messageManager, messageId, error.message);\n throw error;\n }\n }\n\n #errorMessage<\n M extends AbstractMessage,\n P extends AbstractMessageParams,\n PM extends AbstractMessageParamsMetamask,\n >(\n messageManager: AbstractMessageManager,\n messageId: string,\n error: string,\n ) {\n if (messageManager instanceof TypedMessageManager) {\n messageManager.setMessageStatusErrored(messageId, error);\n } else {\n this.#cancelAbstractMessage(messageManager, messageId);\n }\n }\n\n #cancelAbstractMessage<\n M extends AbstractMessage,\n P extends AbstractMessageParams,\n PM extends AbstractMessageParamsMetamask,\n >(\n messageManager: AbstractMessageManager,\n messageId: string,\n reason?: string,\n ) {\n if (reason) {\n const message = this.#getMessage(messageId);\n this.hub.emit('cancelWithReason', { message, reason });\n }\n messageManager.rejectMessage(messageId);\n }\n\n #handleMessageManagerEvents<\n M extends AbstractMessage,\n P extends AbstractMessageParams,\n PM extends AbstractMessageParamsMetamask,\n >(messageManager: AbstractMessageManager, eventName: string) {\n messageManager.hub.on('updateBadge', () => {\n this.hub.emit('updateBadge');\n });\n\n messageManager.hub.on(\n 'unapprovedMessage',\n (msgParams: AbstractMessageParamsMetamask) => {\n this.hub.emit(eventName, msgParams);\n },\n );\n }\n\n #subscribeToMessageState<\n M extends AbstractMessage,\n P extends AbstractMessageParams,\n PM extends AbstractMessageParamsMetamask,\n >(\n messageManager: AbstractMessageManager,\n updateState: (\n state: SignatureControllerState,\n newMessages: Record,\n messageCount: number,\n ) => void,\n ) {\n messageManager.subscribe((state: MessageManagerState) => {\n const newMessages = this.#migrateMessages(\n state.unapprovedMessages as any,\n );\n\n this.update(() => {\n const newState = { ...this.state };\n updateState(newState, newMessages, state.unapprovedMessagesCount);\n return newState;\n });\n });\n }\n\n #migrateMessages(\n coreMessages: Record,\n ): Record {\n const stateMessages: Record = {};\n\n for (const messageId of Object.keys(coreMessages)) {\n const coreMessage = coreMessages[messageId];\n const stateMessage = this.#migrateMessage(coreMessage);\n\n stateMessages[messageId] = stateMessage;\n }\n\n return stateMessages;\n }\n\n #migrateMessage(coreMessage: CoreMessage): StateMessage {\n const { messageParams, ...coreMessageData } = coreMessage;\n\n // Core message managers use messageParams but frontend uses msgParams with lots of references\n const stateMessage = {\n ...coreMessageData,\n msgParams: messageParams,\n };\n\n return stateMessage as StateMessage;\n }\n\n #normalizeMsgData(data: string) {\n if (data.slice(0, 2) === '0x') {\n // data is already hex\n return data;\n }\n // data is unicode, convert to hex\n return bufferToHex(Buffer.from(data, 'utf8'));\n }\n\n #getMessage(messageId: string): StateMessage {\n return {\n ...this.state.unapprovedMsgs,\n ...this.state.unapprovedPersonalMsgs,\n ...this.state.unapprovedTypedMessages,\n }[messageId];\n }\n\n async #requestApproval(\n msgParams: AbstractMessageParamsMetamask,\n type: ApprovalType,\n ): Promise {\n const id = msgParams.metamaskId as string;\n const origin = msgParams.origin || ORIGIN_METAMASK;\n\n // We are explicitly cloning the message params here to prevent the mutation errors on development mode\n // Because sending it through the messaging system will make the object read only\n const clonedMsgParams = cloneDeep(msgParams);\n return (await this.messagingSystem.call(\n 'ApprovalController:addRequest',\n {\n id,\n origin,\n type,\n requestData: clonedMsgParams as Required,\n expectsResult: true,\n },\n true,\n )) as Promise;\n }\n\n #removeJsonData(\n messageParams: TypedMessageParams,\n version: string,\n ): TypedMessageParams {\n if (version === 'V1' || typeof messageParams.data !== 'string') {\n return messageParams;\n }\n\n return {\n ...messageParams,\n data: JSON.parse(messageParams.data),\n };\n }\n}\n"]} +\ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 974ed49f5e4..b6131bf404e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -177,27 +177,17 @@ resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.14.7.tgz#7b047d7a3a89a67d2258dc61f604f098f1bc7e08" integrity sha512-nS6dZaISCXJ3+518CWiBfEr//gHyMO02uDxBkXTKZDN5POruCnOZ1N4YBRZDCabwF8nZMWBpRxIicmXtBs+fvw== -"@babel/compat-data@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.16.0.tgz#ea269d7f78deb3a7826c39a4048eecda541ebdaa" - integrity sha512-DGjt2QZse5SGd9nfOSqO4WLJ8NN/oHkijbXbPrxuoJO3oIPJL3TciZs9FX+cOHNiY9E9l0opL8g7BmLe3T+9ew== - "@babel/compat-data@^7.17.10": version "7.18.5" resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.18.5.tgz#acac0c839e317038c73137fbb6ef71a1d6238471" integrity sha512-BxhE40PVCBxVEJsSBhB6UWyAuqJRxGsAw8BdHMJ3AKGydcwuWW4kOO3HmqBQAdcq/OP+/DlTVxLvsCzRTnZuGg== -"@babel/compat-data@^7.17.7", "@babel/compat-data@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.22.5.tgz#b1f6c86a02d85d2dd3368a2b67c09add8cd0c255" - integrity sha512-4Jc/YuIaYqKnDDz892kPIledykKg12Aw1PYX5i/TY28anJtacvM1Rrr8wbieB9GfEJwlzqT0hUEao0CxEebiDA== - "@babel/compat-data@^7.21.4": version "7.21.4" resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.21.4.tgz#457ffe647c480dff59c2be092fc3acf71195c87f" integrity sha512-/DYyDpeCfaVinT40FPGdkkb+lYSKvsVuMjDAG7jPOWWiM1ibOaB9CXJAlc4d1QpP/U2q2P9jbrSlClKSErd55g== -"@babel/compat-data@^7.22.9": +"@babel/compat-data@^7.22.5", "@babel/compat-data@^7.22.6", "@babel/compat-data@^7.22.9": version "7.22.9" resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.22.9.tgz#71cdb00a1ce3a329ce4cbec3a44f9fef35669730" integrity sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ== @@ -223,7 +213,7 @@ semver "^6.3.0" source-map "^0.5.0" -"@babel/core@^7.11.6": +"@babel/core@^7.11.6", "@babel/core@^7.13.16", "@babel/core@^7.20.0": version "7.22.9" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.22.9.tgz#bd96492c68822198f33e8a256061da3cf391f58f" integrity sha512-G2EgeufBcYw27U4hhoIwFcgc1XU7TlXJ3mv04oOv1WCuo900U/anZSPzEqNjwdjgffkk2Gs0AN0dW1CKVLcG7w== @@ -265,27 +255,6 @@ json5 "^2.2.2" semver "^6.3.0" -"@babel/core@^7.13.16", "@babel/core@^7.20.0": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.22.5.tgz#d67d9747ecf26ee7ecd3ebae1ee22225fe902a89" - integrity sha512-SBuTAjg91A3eKOvD+bPEz3LlhHZRNu1nFOVts9lzDJTXshHTjII0BAtDS3Y2DAkdZdDKWVZGVwkDfc4Clxn1dg== - dependencies: - "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.22.5" - "@babel/generator" "^7.22.5" - "@babel/helper-compilation-targets" "^7.22.5" - "@babel/helper-module-transforms" "^7.22.5" - "@babel/helpers" "^7.22.5" - "@babel/parser" "^7.22.5" - "@babel/template" "^7.22.5" - "@babel/traverse" "^7.22.5" - "@babel/types" "^7.22.5" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.2.2" - semver "^6.3.0" - "@babel/core@^7.15.5": version "7.18.5" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.18.5.tgz#c597fa680e58d571c28dda9827669c78cdd7f000" @@ -343,10 +312,10 @@ "@jridgewell/gen-mapping" "^0.3.2" jsesc "^2.5.1" -"@babel/generator@^7.20.0", "@babel/generator@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.22.5.tgz#1e7bf768688acfb05cf30b2369ef855e82d984f7" - integrity sha512-+lcUbnTRhd0jOewtFSedLyiPsD5tswKkbgcezOqqWFUVNEwoUTlpPOBmvhG7OXWLR4jMdv0czPGH5XbflnD1EA== +"@babel/generator@^7.20.0", "@babel/generator@^7.22.7", "@babel/generator@^7.22.9": + version "7.22.9" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.22.9.tgz#572ecfa7a31002fa1de2a9d91621fd895da8493d" + integrity sha512-KtLMbmicyuK2Ak/FTCJVbDnkN1SlT8/kceFTiuDiiRUUSMnHMidxSCdG4ndkTOHHpoomWe/4xkvHkEOncwjYIw== dependencies: "@babel/types" "^7.22.5" "@jridgewell/gen-mapping" "^0.3.2" @@ -363,22 +332,12 @@ "@jridgewell/trace-mapping" "^0.3.17" jsesc "^2.5.1" -"@babel/generator@^7.22.7", "@babel/generator@^7.22.9": - version "7.22.9" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.22.9.tgz#572ecfa7a31002fa1de2a9d91621fd895da8493d" - integrity sha512-KtLMbmicyuK2Ak/FTCJVbDnkN1SlT8/kceFTiuDiiRUUSMnHMidxSCdG4ndkTOHHpoomWe/4xkvHkEOncwjYIw== +"@babel/helper-annotate-as-pure@^7.14.5", "@babel/helper-annotate-as-pure@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz#e7f06737b197d580a01edf75d97e2c8be99d3882" + integrity sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg== dependencies: "@babel/types" "^7.22.5" - "@jridgewell/gen-mapping" "^0.3.2" - "@jridgewell/trace-mapping" "^0.3.17" - jsesc "^2.5.1" - -"@babel/helper-annotate-as-pure@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.14.5.tgz#7bf478ec3b71726d56a8ca5775b046fc29879e61" - integrity sha512-EivH9EgBIb+G8ij1B2jAwSH36WnGvkQSEC6CkX/6v6ZFlw5fVOHvsgGF4uiEHO2GzMvunZb6tDLQEQSdrdocrA== - dependencies: - "@babel/types" "^7.14.5" "@babel/helper-annotate-as-pure@^7.16.0": version "7.16.0" @@ -401,13 +360,6 @@ dependencies: "@babel/types" "^7.18.6" -"@babel/helper-annotate-as-pure@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz#e7f06737b197d580a01edf75d97e2c8be99d3882" - integrity sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg== - dependencies: - "@babel/types" "^7.22.5" - "@babel/helper-builder-binary-assignment-operator-visitor@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.14.5.tgz#b939b43f8c37765443a19ae74ad8b15978e0a191" @@ -433,26 +385,16 @@ browserslist "^4.16.6" semver "^6.3.0" -"@babel/helper-compilation-targets@^7.16.0": - version "7.16.3" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.3.tgz#5b480cd13f68363df6ec4dc8ac8e2da11363cbf0" - integrity sha512-vKsoSQAyBmxS35JUOOt+07cLc6Nk/2ljLIHwmq2/NM6hdioUaqEXq/S+nXvbvXbZkNDlWOymPanJGOc4CBjSJA== - dependencies: - "@babel/compat-data" "^7.16.0" - "@babel/helper-validator-option" "^7.14.5" - browserslist "^4.17.5" - semver "^6.3.0" - -"@babel/helper-compilation-targets@^7.17.7", "@babel/helper-compilation-targets@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.5.tgz#fc7319fc54c5e2fa14b2909cf3c5fd3046813e02" - integrity sha512-Ji+ywpHeuqxB8WDxraCiqR0xfhYjiDE/e6k7FuIaANnoOFxAHskHChz4vA1mJC9Lbm01s1PVAGhQY4FUKSkGZw== +"@babel/helper-compilation-targets@^7.16.0", "@babel/helper-compilation-targets@^7.22.5", "@babel/helper-compilation-targets@^7.22.6", "@babel/helper-compilation-targets@^7.22.9": + version "7.22.9" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.9.tgz#f9d0a7aaaa7cd32a3f31c9316a69f5a9bcacb892" + integrity sha512-7qYrNM6HjpnPHJbopxmb8hSPoZ0gsX8IvUS32JGVoy+pU9e5N0nLr1VjJoR6kA4d9dmGLxNYOjeB8sUDal2WMw== dependencies: - "@babel/compat-data" "^7.22.5" + "@babel/compat-data" "^7.22.9" "@babel/helper-validator-option" "^7.22.5" - browserslist "^4.21.3" + browserslist "^4.21.9" lru-cache "^5.1.1" - semver "^6.3.0" + semver "^6.3.1" "@babel/helper-compilation-targets@^7.18.2": version "7.18.2" @@ -475,17 +417,6 @@ lru-cache "^5.1.1" semver "^6.3.0" -"@babel/helper-compilation-targets@^7.22.9": - version "7.22.9" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.9.tgz#f9d0a7aaaa7cd32a3f31c9316a69f5a9bcacb892" - integrity sha512-7qYrNM6HjpnPHJbopxmb8hSPoZ0gsX8IvUS32JGVoy+pU9e5N0nLr1VjJoR6kA4d9dmGLxNYOjeB8sUDal2WMw== - dependencies: - "@babel/compat-data" "^7.22.9" - "@babel/helper-validator-option" "^7.22.5" - browserslist "^4.21.9" - lru-cache "^5.1.1" - semver "^6.3.1" - "@babel/helper-create-class-features-plugin@^7.14.5", "@babel/helper-create-class-features-plugin@^7.14.6": version "7.14.6" resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.6.tgz#f114469b6c06f8b5c59c6c4e74621f5085362542" @@ -498,20 +429,20 @@ "@babel/helper-replace-supers" "^7.14.5" "@babel/helper-split-export-declaration" "^7.14.5" -"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.5.tgz#2192a1970ece4685fbff85b48da2c32fcb130b7c" - integrity sha512-xkb58MyOYIslxu3gKmVXmjTtUPvBU4odYzbiIQbWwLKIHCsx6UGZGX6F1IznMFVnDdirseUZopzN+ZRt8Xb33Q== +"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.22.5", "@babel/helper-create-class-features-plugin@^7.22.9": + version "7.22.9" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.9.tgz#c36ea240bb3348f942f08b0fbe28d6d979fab236" + integrity sha512-Pwyi89uO4YrGKxL/eNJ8lfEH55DnRloGPOseaA8NFNL6jAUnn+KccaISiFazCj5IolPPDjGSdzQzXVzODVRqUQ== dependencies: "@babel/helper-annotate-as-pure" "^7.22.5" "@babel/helper-environment-visitor" "^7.22.5" "@babel/helper-function-name" "^7.22.5" "@babel/helper-member-expression-to-functions" "^7.22.5" "@babel/helper-optimise-call-expression" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.5" + "@babel/helper-replace-supers" "^7.22.9" "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.5" - semver "^6.3.0" + "@babel/helper-split-export-declaration" "^7.22.6" + semver "^6.3.1" "@babel/helper-create-class-features-plugin@^7.19.0": version "7.19.0" @@ -543,13 +474,13 @@ regexpu-core "^5.0.1" "@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.5.tgz#bb2bf0debfe39b831986a4efbf4066586819c6e4" - integrity sha512-1VpEFOIbMRaXyDeUwUfmTIxExLwQ+zkW+Bh5zXpApA3oQedBx9v/updixWxnx/bZpKw7u8VxWjb/qWpIcmPq8A== + version "7.22.9" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.9.tgz#9d8e61a8d9366fe66198f57c40565663de0825f6" + integrity sha512-+svjVa/tFwsNSG4NEy1h85+HQ5imbT92Q5/bgtS7P0GTQlP8WuFdqsiABmQouhiFGyV66oGxZFpeYHza1rNsKw== dependencies: "@babel/helper-annotate-as-pure" "^7.22.5" regexpu-core "^5.3.1" - semver "^6.3.0" + semver "^6.3.1" "@babel/helper-define-polyfill-provider@^0.2.2": version "0.2.3" @@ -565,17 +496,16 @@ resolve "^1.14.2" semver "^6.1.2" -"@babel/helper-define-polyfill-provider@^0.4.0": - version "0.4.0" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.0.tgz#487053f103110f25b9755c5980e031e93ced24d8" - integrity sha512-RnanLx5ETe6aybRi1cO/edaRH+bNYWaryCEmjDDYyNr4wnSzyOp8T0dWipmqVHKEY3AbVKUom50AKSlj1zmKbg== +"@babel/helper-define-polyfill-provider@^0.4.1": + version "0.4.1" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.1.tgz#af1429c4a83ac316a6a8c2cc8ff45cb5d2998d3a" + integrity sha512-kX4oXixDxG197yhX+J3Wp+NpL2wuCFjWQAr6yX2jtCnflK9ulMI51ULFGIrWiX1jGfvAxdHp+XQCcP2bZGPs9A== dependencies: - "@babel/helper-compilation-targets" "^7.17.7" - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-compilation-targets" "^7.22.6" + "@babel/helper-plugin-utils" "^7.22.5" debug "^4.1.1" lodash.debounce "^4.0.8" resolve "^1.14.2" - semver "^6.1.2" "@babel/helper-environment-visitor@^7.16.7", "@babel/helper-environment-visitor@^7.18.2": version "7.18.2" @@ -633,15 +563,7 @@ "@babel/template" "^7.18.10" "@babel/types" "^7.19.0" -"@babel/helper-function-name@^7.21.0": - version "7.21.0" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz#d552829b10ea9f120969304023cd0645fa00b1b4" - integrity sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg== - dependencies: - "@babel/template" "^7.20.7" - "@babel/types" "^7.21.0" - -"@babel/helper-function-name@^7.22.5": +"@babel/helper-function-name@^7.21.0", "@babel/helper-function-name@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz#ede300828905bb15e582c037162f99d5183af1be" integrity sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ== @@ -670,13 +592,6 @@ dependencies: "@babel/types" "^7.18.6" -"@babel/helper-hoist-variables@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.0.tgz#4c9023c2f1def7e28ff46fc1dbcd36a39beaa81a" - integrity sha512-1AZlpazjUR0EQZQv3sgRNfM9mEVWPK3M6vlalczA+EECcPz3XPh6VplbErL5UoMpChhSck5wAJHthlj1bYpcmg== - dependencies: - "@babel/types" "^7.16.0" - "@babel/helper-hoist-variables@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz#86bcb19a77a509c7b77d0e22323ef588fa58c246" @@ -698,12 +613,12 @@ dependencies: "@babel/types" "^7.14.5" -"@babel/helper-member-expression-to-functions@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.0.tgz#29287040efd197c77636ef75188e81da8bccd5a4" - integrity sha512-bsjlBFPuWT6IWhl28EdrQ+gTvSvj5tqVP5Xeftp07SEuz5pLnsXZuDkDD3Rfcxy0IsHmbZ+7B2/9SHzxO0T+sQ== +"@babel/helper-member-expression-to-functions@^7.16.0", "@babel/helper-member-expression-to-functions@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.5.tgz#0a7c56117cad3372fbf8d2fb4bf8f8d64a1e76b2" + integrity sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ== dependencies: - "@babel/types" "^7.16.0" + "@babel/types" "^7.22.5" "@babel/helper-member-expression-to-functions@^7.18.9": version "7.18.9" @@ -712,13 +627,6 @@ dependencies: "@babel/types" "^7.18.9" -"@babel/helper-member-expression-to-functions@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.5.tgz#0a7c56117cad3372fbf8d2fb4bf8f8d64a1e76b2" - integrity sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ== - dependencies: - "@babel/types" "^7.22.5" - "@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz#25612a8091a999704461c8a222d0efec5d091437" @@ -740,14 +648,7 @@ dependencies: "@babel/types" "^7.16.0" -"@babel/helper-module-imports@^7.18.6": - version "7.21.4" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.21.4.tgz#ac88b2f76093637489e718a90cec6cf8a9b029af" - integrity sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg== - dependencies: - "@babel/types" "^7.21.4" - -"@babel/helper-module-imports@^7.22.5": +"@babel/helper-module-imports@^7.18.6", "@babel/helper-module-imports@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz#1a8f4c9f4027d23f520bd76b364d44434a72660c" integrity sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg== @@ -810,21 +711,7 @@ "@babel/traverse" "^7.21.2" "@babel/types" "^7.21.2" -"@babel/helper-module-transforms@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.22.5.tgz#0f65daa0716961b6e96b164034e737f60a80d2ef" - integrity sha512-+hGKDt/Ze8GFExiVHno/2dvG5IdstpzCq0y4Qc9OJ25D4q3pKfiIP/4Vp3/JvhDkLKsDK2api3q3fpIgiIF5bw== - dependencies: - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-module-imports" "^7.22.5" - "@babel/helper-simple-access" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.5" - "@babel/helper-validator-identifier" "^7.22.5" - "@babel/template" "^7.22.5" - "@babel/traverse" "^7.22.5" - "@babel/types" "^7.22.5" - -"@babel/helper-module-transforms@^7.22.9": +"@babel/helper-module-transforms@^7.22.5", "@babel/helper-module-transforms@^7.22.9": version "7.22.9" resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.22.9.tgz#92dfcb1fbbb2bc62529024f72d942a8c97142129" integrity sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ== @@ -868,11 +755,6 @@ resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz#5ac822ce97eec46741ab70a517971e443a70c5a9" integrity sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ== -"@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.8.3": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz#dd7ee3735e8a313b9f7b05a773d892e88e6d7295" - integrity sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg== - "@babel/helper-plugin-utils@^7.17.12": version "7.17.12" resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz#86c2347da5acbf5583ba0a10aed4c9bf9da9cf96" @@ -888,6 +770,11 @@ resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz#d1b9000752b18d0877cff85a5c376ce5c3121629" integrity sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ== +"@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.8.3": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz#dd7ee3735e8a313b9f7b05a773d892e88e6d7295" + integrity sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg== + "@babel/helper-remap-async-to-generator@^7.16.0": version "7.16.0" resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.0.tgz#d5aa3b086e13a5fe05238ff40c3a5a0c2dab3ead" @@ -907,14 +794,13 @@ "@babel/types" "^7.16.8" "@babel/helper-remap-async-to-generator@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.5.tgz#14a38141a7bf2165ad38da61d61cf27b43015da2" - integrity sha512-cU0Sq1Rf4Z55fgz7haOakIyM7+x/uCFwXpLPaeRzfoUtAEAuUZjZvFPjL/rk5rW693dIgn2hng1W7xbT7lWT4g== + version "7.22.9" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.9.tgz#53a25b7484e722d7efb9c350c75c032d4628de82" + integrity sha512-8WWC4oR4Px+tr+Fp0X3RHDVfINGpF3ad1HIbrc8A77epiR6eMMc6jsgozkzT2uDiOOdoS9cLIQ+XD2XvI2WSmQ== dependencies: "@babel/helper-annotate-as-pure" "^7.22.5" "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-wrap-function" "^7.22.5" - "@babel/types" "^7.22.5" + "@babel/helper-wrap-function" "^7.22.9" "@babel/helper-replace-supers@^7.14.5": version "7.14.5" @@ -947,17 +833,14 @@ "@babel/traverse" "^7.19.1" "@babel/types" "^7.19.0" -"@babel/helper-replace-supers@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.22.5.tgz#71bc5fb348856dea9fdc4eafd7e2e49f585145dc" - integrity sha512-aLdNM5I3kdI/V9xGNyKSF3X/gTyMUBohTZ+/3QdQKAA9vxIiy12E+8E2HoOP1/DjeqU+g6as35QHJNMDDYpuCg== +"@babel/helper-replace-supers@^7.22.5", "@babel/helper-replace-supers@^7.22.9": + version "7.22.9" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.22.9.tgz#cbdc27d6d8d18cd22c81ae4293765a5d9afd0779" + integrity sha512-LJIKvvpgPOPUThdYqcX6IXRuIcTkcAub0IaDRGCZH0p5GPUp7PhRU9QVgFcDDd51BaPkk77ZjqFwh6DZTAEmGg== dependencies: "@babel/helper-environment-visitor" "^7.22.5" "@babel/helper-member-expression-to-functions" "^7.22.5" "@babel/helper-optimise-call-expression" "^7.22.5" - "@babel/template" "^7.22.5" - "@babel/traverse" "^7.22.5" - "@babel/types" "^7.22.5" "@babel/helper-simple-access@^7.14.5": version "7.14.5" @@ -1036,13 +919,6 @@ dependencies: "@babel/types" "^7.18.6" -"@babel/helper-split-export-declaration@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.5.tgz#88cf11050edb95ed08d596f7a044462189127a08" - integrity sha512-thqK5QFghPKWLhAV321lxF95yCg2K3Ob5yw+M3VHWfdia0IkPXUtoLH8x/6Fh486QUvzhb8YOWHChTVen2/PoQ== - dependencies: - "@babel/types" "^7.22.5" - "@babel/helper-split-export-declaration@^7.22.6": version "7.22.6" resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz#322c61b7310c0997fe4c323955667f18fcefb91c" @@ -1135,14 +1011,13 @@ "@babel/traverse" "^7.16.8" "@babel/types" "^7.16.8" -"@babel/helper-wrap-function@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.22.5.tgz#44d205af19ed8d872b4eefb0d2fa65f45eb34f06" - integrity sha512-bYqLIBSEshYcYQyfks8ewYA8S30yaGSeRslcvKMvoUk6HHPySbxHq9YRi6ghhzEU+yhQv9bP/jXnygkStOcqZw== +"@babel/helper-wrap-function@^7.22.9": + version "7.22.9" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.22.9.tgz#189937248c45b0182c1dcf32f3444ca153944cb9" + integrity sha512-sZ+QzfauuUEfxSEjKFmi3qDSHgLsTPK/pEpoD/qonZKOtTPTLbf59oabPQ4rKekt9lFcj/hTZaOhWwFYrgjk+Q== dependencies: "@babel/helper-function-name" "^7.22.5" "@babel/template" "^7.22.5" - "@babel/traverse" "^7.22.5" "@babel/types" "^7.22.5" "@babel/helpers@^7.16.0": @@ -1172,15 +1047,6 @@ "@babel/traverse" "^7.21.0" "@babel/types" "^7.21.0" -"@babel/helpers@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.22.5.tgz#74bb4373eb390d1ceed74a15ef97767e63120820" - integrity sha512-pSXRmfE1vzcUIDFQcSGA5Mr+GxBV9oiRKDuDxXvWQQBCh8HoIjs/2DlDB7H8smac1IVrB9/xdXj2N3Wol9Cr+Q== - dependencies: - "@babel/template" "^7.22.5" - "@babel/traverse" "^7.22.5" - "@babel/types" "^7.22.5" - "@babel/helpers@^7.22.6": version "7.22.6" resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.22.6.tgz#8e61d3395a4f0c5a8060f309fb008200969b5ecd" @@ -1231,12 +1097,12 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.14.7.tgz#6099720c8839ca865a2637e6c85852ead0bdb595" integrity sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA== -"@babel/parser@^7.13.16", "@babel/parser@^7.20.0", "@babel/parser@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.22.5.tgz#721fd042f3ce1896238cf1b341c77eb7dee7dbea" - integrity sha512-DFZMC9LJUG9PLOclRC32G63UXwzqS2koQC8dkx+PLdmt1xSePYpbT/NbsrJy8Q/muXz7o/h/d4A7Fuyixm559Q== +"@babel/parser@^7.13.16", "@babel/parser@^7.20.0", "@babel/parser@^7.22.5", "@babel/parser@^7.22.7": + version "7.22.7" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.22.7.tgz#df8cf085ce92ddbdbf668a7f186ce848c9036cae" + integrity sha512-7NF8pOkHP5o2vpmGgNGcfAeCvOYhGLyA3Z4eBQkT1RJlWu47n63bCs93QfJ2hIAFCil7L5P2IWhs1oToVgrL0Q== -"@babel/parser@^7.14.0", "@babel/parser@^7.16.0", "@babel/parser@^7.16.3": +"@babel/parser@^7.14.0", "@babel/parser@^7.16.0": version "7.16.3" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.16.3.tgz#271bafcb811080905a119222edbc17909c82261d" integrity sha512-dcNwU1O4sx57ClvLBVFbEgx0UZWfd0JQX5X6fxFRCLHelFBGXFfSz6Y0FAq2PEwUqlqLkdVjVr4VASEOuUnLJw== @@ -1261,11 +1127,6 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.21.4.tgz#94003fdfc520bbe2875d4ae557b43ddb6d880f17" integrity sha512-alVJj7k7zIxqBZ7BTRhz0IqJFxW1VJbm6N8JbcYhQ186df9ZBPbZBmWSqAMXwHGsCJdYks7z/voa3ibiS5bCIw== -"@babel/parser@^7.22.7": - version "7.22.7" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.22.7.tgz#df8cf085ce92ddbdbf668a7f186ce848c9036cae" - integrity sha512-7NF8pOkHP5o2vpmGgNGcfAeCvOYhGLyA3Z4eBQkT1RJlWu47n63bCs93QfJ2hIAFCil7L5P2IWhs1oToVgrL0Q== - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.5.tgz#87245a21cd69a73b0b81bcda98d443d6df08f05e" @@ -1592,10 +1453,10 @@ dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-async-generator-functions@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.5.tgz#7336356d23380eda9a56314974f053a020dab0c3" - integrity sha512-gGOEvFzm3fWoyD5uZq7vVTD57pPJ3PczPUD/xCFGjzBpUosnklmXyKnGQbbbGs1NPNPskFex0j93yKbHt0cHyg== +"@babel/plugin-transform-async-generator-functions@^7.22.7": + version "7.22.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.7.tgz#053e76c0a903b72b573cb1ab7d6882174d460a1b" + integrity sha512-7HmE7pk/Fmke45TODvxvkxRMV9RazV+ZZzhOL9AG8G29TLrr3jkjwF7uJfxZ30EoXpO+LJkq4oA8NjO2DTnEDg== dependencies: "@babel/helper-environment-visitor" "^7.22.5" "@babel/helper-plugin-utils" "^7.22.5" @@ -1678,19 +1539,19 @@ "@babel/helper-split-export-declaration" "^7.14.5" globals "^11.1.0" -"@babel/plugin-transform-classes@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.5.tgz#635d4e98da741fad814984639f4c0149eb0135e1" - integrity sha512-2edQhLfibpWpsVBx2n/GKOz6JdGQvLruZQfGr9l1qes2KQaWswjBzhQF7UDUZMNaMMQeYnQzxwOMPsbYF7wqPQ== +"@babel/plugin-transform-classes@^7.22.6": + version "7.22.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.6.tgz#e04d7d804ed5b8501311293d1a0e6d43e94c3363" + integrity sha512-58EgM6nuPNG6Py4Z3zSuu0xWu2VfodiMi72Jt5Kj2FECmaYk1RrTXA45z6KBFsu9tRgwQDwIiY4FXTt+YsSFAQ== dependencies: "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-compilation-targets" "^7.22.5" + "@babel/helper-compilation-targets" "^7.22.6" "@babel/helper-environment-visitor" "^7.22.5" "@babel/helper-function-name" "^7.22.5" "@babel/helper-optimise-call-expression" "^7.22.5" "@babel/helper-plugin-utils" "^7.22.5" "@babel/helper-replace-supers" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.6" globals "^11.1.0" "@babel/plugin-transform-computed-properties@^7.0.0": @@ -1986,10 +1847,10 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" -"@babel/plugin-transform-optional-chaining@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.5.tgz#1003762b9c14295501beb41be72426736bedd1e0" - integrity sha512-AconbMKOMkyG+xCng2JogMCDcqW8wedQAqpVIL4cOSescZ7+iW8utC6YDZLMCSUIReEA733gzRSaOSXMAt/4WQ== +"@babel/plugin-transform-optional-chaining@^7.22.5", "@babel/plugin-transform-optional-chaining@^7.22.6": + version "7.22.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.6.tgz#4bacfe37001fe1901117672875e931d439811564" + integrity sha512-Vd5HiWml0mDVtcLHIoEU5sw6HOUW/Zk0acLs/SAeuLzkGNOPc9DB4nkUajemhCmTIz3eiaKREZn2hQQqF79YTg== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" @@ -2175,12 +2036,12 @@ "@babel/plugin-syntax-typescript" "^7.18.6" "@babel/plugin-transform-typescript@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.22.5.tgz#5c0f7adfc1b5f38c4dbc8f79b1f0f8074134bd7d" - integrity sha512-SMubA9S7Cb5sGSFFUlqxyClTA9zWJ8qGQrppNUm05LtFuN1ELRFNndkix4zUJrC9F+YivWwa1dHMSyo0e0N9dA== + version "7.22.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.22.9.tgz#91e08ad1eb1028ecc62662a842e93ecfbf3c7234" + integrity sha512-BnVR1CpKiuD0iobHPaM1iLvcwPYN2uVFAqoLVSpEDKWuOikoCv5HbKLxclhKYUXlWkX86DoZGtqI4XhbOsyrMg== dependencies: "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-create-class-features-plugin" "^7.22.5" + "@babel/helper-create-class-features-plugin" "^7.22.9" "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-typescript" "^7.22.5" @@ -2241,12 +2102,12 @@ regenerator-runtime "^0.13.4" "@babel/preset-env@^7.20.0": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.22.5.tgz#3da66078b181f3d62512c51cf7014392c511504e" - integrity sha512-fj06hw89dpiZzGZtxn+QybifF07nNiZjZ7sazs2aVDcysAZVGjW7+7iFYxg6GLNM47R/thYfLdrXc+2f11Vi9A== + version "7.22.9" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.22.9.tgz#57f17108eb5dfd4c5c25a44c1977eba1df310ac7" + integrity sha512-wNi5H/Emkhll/bqPjsjQorSykrlfY5OWakd6AulLvMEytpKasMVUpVy8RL4qBIBs5Ac6/5i0/Rv0b/Fg6Eag/g== dependencies: - "@babel/compat-data" "^7.22.5" - "@babel/helper-compilation-targets" "^7.22.5" + "@babel/compat-data" "^7.22.9" + "@babel/helper-compilation-targets" "^7.22.9" "@babel/helper-plugin-utils" "^7.22.5" "@babel/helper-validator-option" "^7.22.5" "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.22.5" @@ -2271,13 +2132,13 @@ "@babel/plugin-syntax-top-level-await" "^7.14.5" "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" "@babel/plugin-transform-arrow-functions" "^7.22.5" - "@babel/plugin-transform-async-generator-functions" "^7.22.5" + "@babel/plugin-transform-async-generator-functions" "^7.22.7" "@babel/plugin-transform-async-to-generator" "^7.22.5" "@babel/plugin-transform-block-scoped-functions" "^7.22.5" "@babel/plugin-transform-block-scoping" "^7.22.5" "@babel/plugin-transform-class-properties" "^7.22.5" "@babel/plugin-transform-class-static-block" "^7.22.5" - "@babel/plugin-transform-classes" "^7.22.5" + "@babel/plugin-transform-classes" "^7.22.6" "@babel/plugin-transform-computed-properties" "^7.22.5" "@babel/plugin-transform-destructuring" "^7.22.5" "@babel/plugin-transform-dotall-regex" "^7.22.5" @@ -2302,7 +2163,7 @@ "@babel/plugin-transform-object-rest-spread" "^7.22.5" "@babel/plugin-transform-object-super" "^7.22.5" "@babel/plugin-transform-optional-catch-binding" "^7.22.5" - "@babel/plugin-transform-optional-chaining" "^7.22.5" + "@babel/plugin-transform-optional-chaining" "^7.22.6" "@babel/plugin-transform-parameters" "^7.22.5" "@babel/plugin-transform-private-methods" "^7.22.5" "@babel/plugin-transform-private-property-in-object" "^7.22.5" @@ -2320,11 +2181,11 @@ "@babel/plugin-transform-unicode-sets-regex" "^7.22.5" "@babel/preset-modules" "^0.1.5" "@babel/types" "^7.22.5" - babel-plugin-polyfill-corejs2 "^0.4.3" - babel-plugin-polyfill-corejs3 "^0.8.1" - babel-plugin-polyfill-regenerator "^0.5.0" - core-js-compat "^3.30.2" - semver "^6.3.0" + babel-plugin-polyfill-corejs2 "^0.4.4" + babel-plugin-polyfill-corejs3 "^0.8.2" + babel-plugin-polyfill-regenerator "^0.5.1" + core-js-compat "^3.31.0" + semver "^6.3.1" "@babel/preset-flow@^7.13.13": version "7.22.5" @@ -2432,9 +2293,9 @@ regenerator-runtime "^0.13.4" "@babel/runtime@^7.20.0": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.22.5.tgz#8564dd588182ce0047d55d7a75e93921107b57ec" - integrity sha512-ecjvYlnAaZ/KVneE/OdKYBYfgXV3Ptu6zQWmgEF7vwKhQnvVS6bjMD2XYgj+SNvQ1GfK/pjgokfPkC/2CO8CuA== + version "7.22.6" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.22.6.tgz#57d64b9ae3cff1d67eb067ae117dac087f5bd438" + integrity sha512-wDb5pWm4WDdF6LFUde3Jl8WzPA+3ZbxYqkC6xAXuD3irdEHN1k0NfTRrJD8ZD378SJ61miMLCqIOXYhd8x+AJQ== dependencies: regenerator-runtime "^0.13.11" @@ -2514,18 +2375,19 @@ debug "^4.1.0" globals "^11.1.0" -"@babel/traverse@^7.14.0", "@babel/traverse@^7.16.0", "@babel/traverse@^7.16.3": - version "7.16.3" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.16.3.tgz#f63e8a938cc1b780f66d9ed3c54f532ca2d14787" - integrity sha512-eolumr1vVMjqevCpwVO99yN/LoGL0EyHiLO5I043aYQvwOJ9eR5UsZSClHVCzfhBduMAsSzgA/6AyqPjNayJag== +"@babel/traverse@^7.14.0", "@babel/traverse@^7.16.0", "@babel/traverse@^7.16.3", "@babel/traverse@^7.20.0", "@babel/traverse@^7.22.6", "@babel/traverse@^7.22.8": + version "7.22.8" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.22.8.tgz#4d4451d31bc34efeae01eac222b514a77aa4000e" + integrity sha512-y6LPR+wpM2I3qJrsheCTwhIinzkETbplIgPBbwvqPKc+uljeA5gP+3nP8irdYt1mjQaDnlIcG+dw8OjAco4GXw== dependencies: - "@babel/code-frame" "^7.16.0" - "@babel/generator" "^7.16.0" - "@babel/helper-function-name" "^7.16.0" - "@babel/helper-hoist-variables" "^7.16.0" - "@babel/helper-split-export-declaration" "^7.16.0" - "@babel/parser" "^7.16.3" - "@babel/types" "^7.16.0" + "@babel/code-frame" "^7.22.5" + "@babel/generator" "^7.22.7" + "@babel/helper-environment-visitor" "^7.22.5" + "@babel/helper-function-name" "^7.22.5" + "@babel/helper-hoist-variables" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.6" + "@babel/parser" "^7.22.7" + "@babel/types" "^7.22.5" debug "^4.1.0" globals "^11.1.0" @@ -2561,22 +2423,6 @@ debug "^4.1.0" globals "^11.1.0" -"@babel/traverse@^7.20.0", "@babel/traverse@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.22.5.tgz#44bd276690db6f4940fdb84e1cb4abd2f729ccd1" - integrity sha512-7DuIjPgERaNo6r+PZwItpjCZEa5vyw4eJGufeLxrPdBXBoLcCJCIasvK6pK/9DVNrLZTLFhUGqaC6X/PA007TQ== - dependencies: - "@babel/code-frame" "^7.22.5" - "@babel/generator" "^7.22.5" - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-function-name" "^7.22.5" - "@babel/helper-hoist-variables" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.5" - "@babel/parser" "^7.22.5" - "@babel/types" "^7.22.5" - debug "^4.1.0" - globals "^11.1.0" - "@babel/traverse@^7.21.0", "@babel/traverse@^7.21.2", "@babel/traverse@^7.21.4", "@babel/traverse@^7.7.2": version "7.21.4" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.21.4.tgz#a836aca7b116634e97a6ed99976236b3282c9d36" @@ -2593,22 +2439,6 @@ debug "^4.1.0" globals "^11.1.0" -"@babel/traverse@^7.22.6", "@babel/traverse@^7.22.8": - version "7.22.8" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.22.8.tgz#4d4451d31bc34efeae01eac222b514a77aa4000e" - integrity sha512-y6LPR+wpM2I3qJrsheCTwhIinzkETbplIgPBbwvqPKc+uljeA5gP+3nP8irdYt1mjQaDnlIcG+dw8OjAco4GXw== - dependencies: - "@babel/code-frame" "^7.22.5" - "@babel/generator" "^7.22.7" - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-function-name" "^7.22.5" - "@babel/helper-hoist-variables" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/parser" "^7.22.7" - "@babel/types" "^7.22.5" - debug "^4.1.0" - globals "^11.1.0" - "@babel/types@^7.0.0", "@babel/types@^7.14.5", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.7.0": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.14.5.tgz#3bb997ba829a2104cedb20689c4a5b8121d383ff" @@ -4095,11 +3925,11 @@ strip-ansi "^6.0.0" "@jest/create-cache-key-function@^29.2.1": - version "29.5.0" - resolved "https://registry.yarnpkg.com/@jest/create-cache-key-function/-/create-cache-key-function-29.5.0.tgz#24e019d03e634be4affe8bcee787d75a36ae57a2" - integrity sha512-LIDZyZgnZss7uikvBKBB/USWwG+GO8+GnwRWT+YkCGDGsqLQlhm9BC3z6+7+eMs1kUlvXQIWEzBR8Q2Pnvx6lg== + version "29.6.1" + resolved "https://registry.yarnpkg.com/@jest/create-cache-key-function/-/create-cache-key-function-29.6.1.tgz#eb69da959e78e8457757451166b4b0f7b64fe679" + integrity sha512-d77/1BbNLbJDBV6tH7ctYpau+3tnU5YMhg36uGabW4VDrl1Arp6E0jDRioHFoFqIbm+BXMVbyQc9MpfKo6OIQQ== dependencies: - "@jest/types" "^29.5.0" + "@jest/types" "^29.6.1" "@jest/environment@^28.1.3": version "28.1.3" @@ -4111,15 +3941,15 @@ "@types/node" "*" jest-mock "^28.1.3" -"@jest/environment@^29.5.0": - version "29.5.0" - resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-29.5.0.tgz#9152d56317c1fdb1af389c46640ba74ef0bb4c65" - integrity sha512-5FXw2+wD29YU1d4I2htpRX7jYnAyTRjP2CsXQdo9SAM8g3ifxWPSV0HnClSn71xwctr0U3oZIIH+dtbfmnbXVQ== +"@jest/environment@^29.6.1": + version "29.6.1" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-29.6.1.tgz#ee358fff2f68168394b4a50f18c68278a21fe82f" + integrity sha512-RMMXx4ws+Gbvw3DfLSuo2cfQlK7IwGbpuEWXCqyYDcqYTI+9Ju3a5hDnXaxjNsa6uKh9PQF2v+qg+RLe63tz5A== dependencies: - "@jest/fake-timers" "^29.5.0" - "@jest/types" "^29.5.0" + "@jest/fake-timers" "^29.6.1" + "@jest/types" "^29.6.1" "@types/node" "*" - jest-mock "^29.5.0" + jest-mock "^29.6.1" "@jest/expect-utils@^28.1.3": version "28.1.3" @@ -4148,17 +3978,17 @@ jest-mock "^28.1.3" jest-util "^28.1.3" -"@jest/fake-timers@^29.5.0": - version "29.5.0" - resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-29.5.0.tgz#d4d09ec3286b3d90c60bdcd66ed28d35f1b4dc2c" - integrity sha512-9ARvuAAQcBwDAqOnglWq2zwNIRUDtk/SCkp/ToGEhFv5r86K21l+VEs0qNTaXtyiY0lEePl3kylijSYJQqdbDg== +"@jest/fake-timers@^29.6.1": + version "29.6.1" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-29.6.1.tgz#c773efddbc61e1d2efcccac008139f621de57c69" + integrity sha512-RdgHgbXyosCDMVYmj7lLpUwXA4c69vcNzhrt69dJJdf8azUrpRh3ckFCaTPNjsEeRi27Cig0oKDGxy5j7hOgHg== dependencies: - "@jest/types" "^29.5.0" + "@jest/types" "^29.6.1" "@sinonjs/fake-timers" "^10.0.2" "@types/node" "*" - jest-message-util "^29.5.0" - jest-mock "^29.5.0" - jest-util "^29.5.0" + jest-message-util "^29.6.1" + jest-mock "^29.6.1" + jest-util "^29.6.1" "@jest/globals@^28.1.3": version "28.1.3" @@ -4214,12 +4044,12 @@ dependencies: "@sinclair/typebox" "^0.24.1" -"@jest/schemas@^29.4.3": - version "29.4.3" - resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.4.3.tgz#39cf1b8469afc40b6f5a2baaa146e332c4151788" - integrity sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg== +"@jest/schemas@^29.6.0": + version "29.6.0" + resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.6.0.tgz#0f4cb2c8e3dca80c135507ba5635a4fd755b0040" + integrity sha512-rxLjXyJBTL4LQeJW3aKo0M/+GkCOXsO+8i9Iu7eDb6KwtP65ayoDsitrdPBtujxQ88k4wI2FNYfa6TOGwSn6cQ== dependencies: - "@sinclair/typebox" "^0.25.16" + "@sinclair/typebox" "^0.27.8" "@jest/source-map@^28.1.2": version "28.1.2" @@ -4305,12 +4135,12 @@ "@types/yargs" "^17.0.8" chalk "^4.0.0" -"@jest/types@^29.5.0": - version "29.5.0" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.5.0.tgz#f59ef9b031ced83047c67032700d8c807d6e1593" - integrity sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog== +"@jest/types@^29.6.1": + version "29.6.1" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.6.1.tgz#ae79080278acff0a6af5eb49d063385aaa897bf2" + integrity sha512-tPKQNMPuXgvdOn2/Lg9HNfUvjYVGolt04Hp03f5hAk878uwOLikN+JzeLY0HcVgKgFl9Hs3EIqpu3WX27XNhnw== dependencies: - "@jest/schemas" "^29.4.3" + "@jest/schemas" "^29.6.0" "@types/istanbul-lib-coverage" "^2.0.0" "@types/istanbul-reports" "^3.0.0" "@types/node" "*" @@ -4906,9 +4736,9 @@ integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== "@jridgewell/source-map@^0.3.3": - version "0.3.3" - resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.3.tgz#8108265659d4c33e72ffe14e33d6cc5eb59f2fda" - integrity sha512-b+fsZXeLYi9fEULmfBrhxn4IrPlINf8fiNarzTof004v3lFdntdwa9PF7vFJqm3mg7s+ScJMxXaE3Acp1irZcg== + version "0.3.5" + resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.5.tgz#a3bb4d5c6825aab0d281268f47f6ad5853431e91" + integrity sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ== dependencies: "@jridgewell/gen-mapping" "^0.3.0" "@jridgewell/trace-mapping" "^0.3.9" @@ -5214,7 +5044,7 @@ "@metamask/base-controller" "^2.0.0" "@metamask/controller-utils" "^3.0.0" -"@metamask/approval-controller@3.4.0", "@metamask/approval-controller@^2.1.1", "@metamask/approval-controller@^3.3.0", "@metamask/approval-controller@^3.4.0": +"@metamask/approval-controller@3.4.0", "@metamask/approval-controller@^3.3.0", "@metamask/approval-controller@^3.4.0": version "3.4.0" resolved "https://registry.yarnpkg.com/@metamask/approval-controller/-/approval-controller-3.4.0.tgz#282900361d42f785578728b45014ff8cb5e557ea" integrity sha512-DjqrhiX9+W/Fh6Crr7FPJ87Y/uhPWzBvfXGtekv1LHZNmEtUxkrA7aelddUM0fpTdURIGT4aNGBoQudFidc+Lw== @@ -5335,7 +5165,7 @@ ethjs-unit "^0.1.6" fast-deep-equal "^3.1.3" -"@metamask/controller-utils@^4.0.1": +"@metamask/controller-utils@^4.0.0", "@metamask/controller-utils@^4.0.1": version "4.3.0" resolved "https://registry.yarnpkg.com/@metamask/controller-utils/-/controller-utils-4.3.0.tgz#63d6fef8ddbdf42ed0b94a0cf929d1898832004c" integrity sha512-WVbapIpjEJtKxZz/1w5DctnZ0h7V3OWu0X46MHEmV8Brna/nN8x6UZ4zySLD9tZGFaO7p3vxJpl7/EK8nSvf9A== @@ -5476,13 +5306,14 @@ jsonschema "^1.2.4" uuid "^8.3.2" -"@metamask/message-manager@^5.0.0": - version "5.0.0" - resolved "https://registry.yarnpkg.com/@metamask/message-manager/-/message-manager-5.0.0.tgz#1f419ad5b24c8f5ae8b07f0772376d96a939ac5e" - integrity sha512-p/7Q6n/g3dsSDowjDWJjrONOmQHkx99sK62He6FUxVvkS45RzB1SZuz4Lvg4uCgbVdl9HzBjb+BlTsfYD9wHvQ== +"@metamask/message-manager@^7.0.0": + version "7.0.1" + resolved "https://registry.yarnpkg.com/@metamask/message-manager/-/message-manager-7.0.1.tgz#27c3ed83cdb4752ef478436218280f97500539c7" + integrity sha512-M4GAkLW2phgPOk03yqrvOv+trJEoCUIdGc95Tlbs9mkT7ixQVXelLDTyRTeQAsprb8+uANW4dm9Vwp1EGqNB7g== dependencies: - "@metamask/base-controller" "^2.0.0" - "@metamask/controller-utils" "^3.4.0" + "@metamask/base-controller" "^3.0.0" + "@metamask/controller-utils" "^4.0.1" + "@metamask/utils" "^5.0.2" "@types/uuid" "^8.3.0" eth-sig-util "^3.0.0" ethereumjs-util "^7.0.10" @@ -5570,9 +5401,9 @@ integrity sha512-/kSXhY692qiV1MXu6EeOZvg5nECLclxNXcKCxJ3cXQgYuRymRHpdx/t7JXfsK+JLjwA1e1c1/SBrlQYpusC29Q== "@metamask/sdk-communication-layer@^0.5.0": - version "0.5.0" - resolved "https://registry.yarnpkg.com/@metamask/sdk-communication-layer/-/sdk-communication-layer-0.5.0.tgz#a2333ab1f0d96c52aed9f749e7539e9e927f53db" - integrity sha512-lcA9KpOM332oPhFZVsdeJYF1OJAQP7LmHCSrCOyBOLrvgaRhNxCSsgMid9shGuN1PVozDPEQXljRvJQOyfRpsg== + version "0.5.2" + resolved "https://registry.yarnpkg.com/@metamask/sdk-communication-layer/-/sdk-communication-layer-0.5.2.tgz#fd94d457569b7ee984ad40b1c965d509d569269b" + integrity sha512-k4v2L3E+4nROROT1/3RROSiDLUAKNkJeHsi3nN8l2ao4P0c3JuaREFwfc/u3FtXA3gALKRRGnitn2drG4Xw6rA== dependencies: cross-fetch "^3.1.5" date-fns "^2.29.3" @@ -5581,18 +5412,20 @@ socket.io-client "^4.5.1" uuid "^8.3.2" -"@metamask/signature-controller@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@metamask/signature-controller/-/signature-controller-2.0.0.tgz#d70c2c47afc95dc85d4c83e3c1c4dd411eb32d3d" - integrity sha512-Hm7/b7ob8IkAkZCEEXX4VOLlHZD12kesRE4lGyaw7z2k5RhZ4njsDFfMxvUCEmWIaPkJOjcV2AY7Bd0Yzi3y5g== +"@metamask/signature-controller@4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@metamask/signature-controller/-/signature-controller-4.0.1.tgz#32f66fa240943d798aae1f4574529951d70ea69c" + integrity sha512-PKXzRbu8oT0lBnk7j/a6YP/p/fEYGuWQutzdyNzgxyehkAeO23Knpw38yHrglY/O7fTXjctE3OCj5mTsYGX20g== dependencies: - "@metamask/approval-controller" "^2.1.1" - "@metamask/base-controller" "^2.0.0" - "@metamask/controller-utils" "^3.4.0" - "@metamask/message-manager" "^5.0.0" + "@metamask/approval-controller" "^3.3.0" + "@metamask/base-controller" "^3.0.0" + "@metamask/controller-utils" "^4.0.0" + "@metamask/message-manager" "^7.0.0" + "@metamask/utils" "^5.0.2" eth-rpc-errors "^4.0.2" ethereumjs-util "^7.0.10" immer "^9.0.6" + lodash "^4.17.21" "@metamask/swaps-controller@^6.8.0": version "6.8.0" @@ -5682,6 +5515,11 @@ jsbi "^3.1.5" sha.js "^2.4.11" +"@nicolo-ribaudo/semver-v6@^6.3.3": + version "6.3.3" + resolved "https://registry.yarnpkg.com/@nicolo-ribaudo/semver-v6/-/semver-v6-6.3.3.tgz#ea6d23ade78a325f7a52750aab1526b02b628c29" + integrity sha512-3Yc1fUTs69MG/uZbJlLSI3JISMn2UV2rg+1D/vROUqZyh3l6iYHCs7GMp+M40ZD7yOdDbYjJcU1oTJhrc+dGKg== + "@noble/curves@1.0.0", "@noble/curves@~1.0.0": version "1.0.0" resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.0.0.tgz#e40be8c7daf088aaf291887cbc73f43464a92932" @@ -5705,9 +5543,9 @@ integrity sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA== "@noble/hashes@~1.1.1": - version "1.1.3" - resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.1.3.tgz#360afc77610e0a61f3417e497dcf36862e4f8111" - integrity sha512-CE0FCR57H2acVI5UOzIGSSIYxZ6v/HOhDR0Ro9VLyhnzLwx0o8W1mmgaqlEUx4049qJDlIBRztv5k+MM8vbO3A== + version "1.1.5" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.1.5.tgz#1a0377f3b9020efe2fae03290bd2a12140c95c11" + integrity sha512-LTMZiiLc+V4v1Yi16TD6aX2gmtKszNye0pQgbaLqkvhIqP7nVsSaJsWloGQjJfJ8offaoP5GtX3yY5swbcJxxQ== "@noble/secp256k1@1.6.3", "@noble/secp256k1@~1.6.0": version "1.6.3" @@ -6395,10 +6233,10 @@ resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.24.51.tgz#645f33fe4e02defe26f2f5c0410e1c094eac7f5f" integrity sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA== -"@sinclair/typebox@^0.25.16": - version "0.25.24" - resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.25.24.tgz#8c7688559979f7079aacaf31aa881c3aa410b718" - integrity sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ== +"@sinclair/typebox@^0.27.8": + version "0.27.8" + resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e" + integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== "@sindresorhus/is@^4.0.0": version "4.6.0" @@ -8973,21 +8811,16 @@ acorn@^7.1.1, acorn@^7.4.0: resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== -acorn@^8.4.1: - version "8.8.2" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a" - integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== - -acorn@^8.7.0: - version "8.7.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.0.tgz#90951fde0f8f09df93549481e5fc141445b791cf" - integrity sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ== - -acorn@^8.8.2: +acorn@^8.4.1, acorn@^8.7.0: version "8.9.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.9.0.tgz#78a16e3b2bcc198c10822786fa6679e245db5b59" integrity sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ== +acorn@^8.8.2: + version "8.10.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.10.0.tgz#8be5b3907a67221a81ab23c7889c4c5526b62ec5" + integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw== + adbkit-apkreader@^3.1.2: version "3.2.0" resolved "https://registry.yarnpkg.com/adbkit-apkreader/-/adbkit-apkreader-3.2.0.tgz#8d0bb1f733969e959992095ed7f2a8d658ec97a5" @@ -10281,9 +10114,9 @@ aws4@^1.8.0: integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== axios-retry@^3.1.2: - version "3.5.0" - resolved "https://registry.yarnpkg.com/axios-retry/-/axios-retry-3.5.0.tgz#32206b3e6555169488eded232527e36c8ce6e545" - integrity sha512-g48qNrLX30VU6ECWltpFCPegKK6dWzMDYv2o83W2zUL/Zh/SLXbT6ksGoKqYZHtghzqeeXhZBcSXJkO1fPbCcw== + version "3.2.5" + resolved "https://registry.yarnpkg.com/axios-retry/-/axios-retry-3.2.5.tgz#64952992837c7d9a12eec156a2694a7945f60895" + integrity sha512-a8umkKbfIkTiYJQLx3v3TzKM85TGKB8ZQYz4zwykt2fpO64TsRlUhjaPaAb3fqMWCXFm2YhWcd8V5FHDKO9bSA== dependencies: "@babel/runtime" "^7.15.4" is-retry-allowed "^2.2.0" @@ -10421,14 +10254,14 @@ babel-plugin-polyfill-corejs2@^0.2.2: "@babel/helper-define-polyfill-provider" "^0.2.2" semver "^6.1.1" -babel-plugin-polyfill-corejs2@^0.4.3: - version "0.4.3" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.3.tgz#75044d90ba5043a5fb559ac98496f62f3eb668fd" - integrity sha512-bM3gHc337Dta490gg+/AseNB9L4YLHxq1nGKZZSHbhXv4aTYU2MD2cjza1Ru4S6975YLTaL1K8uJf6ukJhhmtw== +babel-plugin-polyfill-corejs2@^0.4.4: + version "0.4.4" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.4.tgz#9f9a0e1cd9d645cc246a5e094db5c3aa913ccd2b" + integrity sha512-9WeK9snM1BfxB38goUEv2FLnA6ja07UMfazFHzCXUb3NyDZAwfXvQiURQ6guTTMeHcOsdknULm1PDhs4uWtKyA== dependencies: - "@babel/compat-data" "^7.17.7" - "@babel/helper-define-polyfill-provider" "^0.4.0" - semver "^6.1.1" + "@babel/compat-data" "^7.22.6" + "@babel/helper-define-polyfill-provider" "^0.4.1" + "@nicolo-ribaudo/semver-v6" "^6.3.3" babel-plugin-polyfill-corejs3@^0.2.2: version "0.2.3" @@ -10438,13 +10271,13 @@ babel-plugin-polyfill-corejs3@^0.2.2: "@babel/helper-define-polyfill-provider" "^0.2.2" core-js-compat "^3.14.0" -babel-plugin-polyfill-corejs3@^0.8.1: - version "0.8.1" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.1.tgz#39248263c38191f0d226f928d666e6db1b4b3a8a" - integrity sha512-ikFrZITKg1xH6pLND8zT14UPgjKHiGLqex7rGEZCH2EvhsneJaJPemmpQaIZV5AL03II+lXylw3UmddDK8RU5Q== +babel-plugin-polyfill-corejs3@^0.8.2: + version "0.8.2" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.2.tgz#d406c5738d298cd9c66f64a94cf8d5904ce4cc5e" + integrity sha512-Cid+Jv1BrY9ReW9lIfNlNpsI53N+FN7gE+f73zLAUbr9C52W4gKLWSByx47pfDJsEysojKArqOtOKZSVIIUTuQ== dependencies: - "@babel/helper-define-polyfill-provider" "^0.4.0" - core-js-compat "^3.30.1" + "@babel/helper-define-polyfill-provider" "^0.4.1" + core-js-compat "^3.31.0" babel-plugin-polyfill-regenerator@^0.2.2: version "0.2.2" @@ -10453,12 +10286,12 @@ babel-plugin-polyfill-regenerator@^0.2.2: dependencies: "@babel/helper-define-polyfill-provider" "^0.2.2" -babel-plugin-polyfill-regenerator@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.0.tgz#e7344d88d9ef18a3c47ded99362ae4a757609380" - integrity sha512-hDJtKjMLVa7Z+LwnTCxoDLQj6wdc+B8dun7ayF2fYieI6OzfuvcLMB32ihJZ4UhCBwNYGl5bg/x/P9cMdnkc2g== +babel-plugin-polyfill-regenerator@^0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.1.tgz#ace7a5eced6dff7d5060c335c52064778216afd3" + integrity sha512-L8OyySuI6OSQ5hFy9O+7zFjyr4WhAfRjLIOkhQGYl+emwJkd/S4XXT1JpfrgR1jrQ1NcGiOh+yAdGlF8pnC3Jw== dependencies: - "@babel/helper-define-polyfill-provider" "^0.4.0" + "@babel/helper-define-polyfill-provider" "^0.4.1" babel-plugin-syntax-jsx@^6.18.0: version "6.18.0" @@ -10946,27 +10779,15 @@ browserify-unibabel@^3.0.0: resolved "https://registry.yarnpkg.com/browserify-unibabel/-/browserify-unibabel-3.0.0.tgz#5a6b8f0f704ce388d3927df47337e25830f71dda" integrity sha1-WmuPD3BM44jTkn30czfiWDD3Hdo= -browserslist@^4.16.6: - version "4.16.6" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.6.tgz#d7901277a5a88e554ed305b183ec9b0c08f66fa2" - integrity sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ== - dependencies: - caniuse-lite "^1.0.30001219" - colorette "^1.2.2" - electron-to-chromium "^1.3.723" - escalade "^3.1.1" - node-releases "^1.1.71" - -browserslist@^4.17.5: - version "4.17.6" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.17.6.tgz#c76be33e7786b497f66cad25a73756c8b938985d" - integrity sha512-uPgz3vyRTlEiCv4ee9KlsKgo2V6qPk7Jsn0KAn2OBqbqKo3iNcPEC1Ti6J4dwnz+aIRfEEEuOzC9IBk8tXUomw== +browserslist@^4.16.6, browserslist@^4.21.9: + version "4.21.9" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.9.tgz#e11bdd3c313d7e2a9e87e8b4b0c7872b13897635" + integrity sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg== dependencies: - caniuse-lite "^1.0.30001274" - electron-to-chromium "^1.3.886" - escalade "^3.1.1" - node-releases "^2.0.1" - picocolors "^1.0.0" + caniuse-lite "^1.0.30001503" + electron-to-chromium "^1.4.431" + node-releases "^2.0.12" + update-browserslist-db "^1.0.11" browserslist@^4.20.2: version "4.20.4" @@ -10989,16 +10810,6 @@ browserslist@^4.21.3: node-releases "^2.0.8" update-browserslist-db "^1.0.10" -browserslist@^4.21.5, browserslist@^4.21.9: - version "4.21.9" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.9.tgz#e11bdd3c313d7e2a9e87e8b4b0c7872b13897635" - integrity sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg== - dependencies: - caniuse-lite "^1.0.30001503" - electron-to-chromium "^1.4.431" - node-releases "^2.0.12" - update-browserslist-db "^1.0.11" - browserstack-local@^1.4.5, browserstack-local@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/browserstack-local/-/browserstack-local-1.5.1.tgz#0d424474cc2b74a9d9a22d00a2282941ff636f34" @@ -11283,16 +11094,6 @@ can-use-dom@^0.1.0: resolved "https://registry.yarnpkg.com/can-use-dom/-/can-use-dom-0.1.0.tgz#22cc4a34a0abc43950f42c6411024a3f6366b45a" integrity sha1-IsxKNKCrxDlQ9CxkEQJKP2NmtFo= -caniuse-lite@^1.0.30001219: - version "1.0.30001243" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001243.tgz#d9250155c91e872186671c523f3ae50cfc94a3aa" - integrity sha512-vNxw9mkTBtkmLFnJRv/2rhs1yufpDfCkBZexG3Y0xdOH2Z/eE/85E4Dl5j1YUN34nZVsSp6vVRFQRrez9wJMRA== - -caniuse-lite@^1.0.30001274: - version "1.0.30001280" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001280.tgz#066a506046ba4be34cde5f74a08db7a396718fb7" - integrity sha512-kFXwYvHe5rix25uwueBxC569o53J6TpnGu0BEEn+6Lhl2vsnAumRFWEBhDft1fwyo6m1r4i+RqA4+163FpeFcA== - caniuse-lite@^1.0.30001349: version "1.0.30001352" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001352.tgz#cc6f5da3f983979ad1e2cdbae0505dccaa7c6a12" @@ -11304,9 +11105,9 @@ caniuse-lite@^1.0.30001449: integrity sha512-gMhDyXGItTHipJj2ApIvR+iVB5hd0KP3svMWWXDvZOmjzJJassGLMfxRkQCSYgGd2gtdL/ReeiyvMSFD1Ss6Mw== caniuse-lite@^1.0.30001503: - version "1.0.30001509" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001509.tgz#2b7ad5265392d6d2de25cd8776d1ab3899570d14" - integrity sha512-2uDDk+TRiTX5hMcUYT/7CSyzMZxjfGu0vAUjS2g0LSD8UoXOv0LtpH4LxGMemsiPq6LCVIUjNwVM0erkOkGCDA== + version "1.0.30001515" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001515.tgz#418aefeed9d024cd3129bfae0ccc782d4cb8f12b" + integrity sha512-eEFDwUOZbE24sb+Ecsx3+OvNETqjWIdabMy52oOkIgcUtAsQifjUG9q4U9dgTHJM2mfk4uEPxc0+xuFdJ629QA== capital-case@^1.0.4: version "1.0.4" @@ -12091,12 +11892,12 @@ core-js-compat@^3.14.0: browserslist "^4.16.6" semver "7.0.0" -core-js-compat@^3.30.1, core-js-compat@^3.30.2: - version "3.31.0" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.31.0.tgz#4030847c0766cc0e803dcdfb30055d7ef2064bf1" - integrity sha512-hM7YCu1cU6Opx7MXNu0NuumM0ezNeAeRKadixyiQELWY3vT3De9S4J5ZBMraWV2vZnrE1Cirl0GtFtDtMUXzPw== +core-js-compat@^3.31.0: + version "3.31.1" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.31.1.tgz#5084ad1a46858df50ff89ace152441a63ba7aae0" + integrity sha512-wIDWd2s5/5aJSdpOJHfSibxNODxoGoWOBHt8JSPB41NOE94M7kuTPZCYLOlTtuoXTsBPKobpJ6T+y0SSy5L9SA== dependencies: - browserslist "^4.21.5" + browserslist "^4.21.9" core-js@^2.4.0, core-js@^2.5.7, core-js@^2.6.5: version "2.6.12" @@ -12651,14 +12452,14 @@ deep-equal@^1.0.0, deep-equal@^1.0.1, deep-equal@^1.1.1: regexp.prototype.flags "^1.2.0" deep-equal@^2.0.5: - version "2.2.1" - resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-2.2.1.tgz#c72ab22f3a7d3503a4ca87dde976fe9978816739" - integrity sha512-lKdkdV6EOGoVn65XaOsPdH4rMxTZOnmFyuIkMjM1i5HHCbfjC97dawgTAy0deYNfuqUqW+Q5VrVaQYtUpSd6yQ== + version "2.2.2" + resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-2.2.2.tgz#9b2635da569a13ba8e1cc159c2f744071b115daa" + integrity sha512-xjVyBf0w5vH0I42jdAZzOKVldmPgSulmiyPRywoyq7HXC9qdgo17kxJE+rdnif5Tz6+pIrpJI8dCpMNLIGkUiA== dependencies: array-buffer-byte-length "^1.0.0" call-bind "^1.0.2" es-get-iterator "^1.1.3" - get-intrinsic "^1.2.0" + get-intrinsic "^1.2.1" is-arguments "^1.1.1" is-array-buffer "^3.0.2" is-date-object "^1.0.5" @@ -13297,16 +13098,6 @@ ejs@^3.0.1: dependencies: jake "^10.8.5" -electron-to-chromium@^1.3.723: - version "1.3.788" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.788.tgz#7a304c8ebb11d30916a1a1c1b4a9bad3983ef232" - integrity sha512-dbMIpX4E4/Gk4gzOh1GYS7ls1vGsByWKpIqLviJi1mSmSt5BvrWLLtSqpFE5BaC7Ef4NnI0GMaiddNX2Brw6zA== - -electron-to-chromium@^1.3.886: - version "1.3.895" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.895.tgz#9b0f8f2e32d8283bbb200156fd5d8dfd775f31ed" - integrity sha512-9Ww3fB8CWctjqHwkOt7DQbMZMpal2x2reod+/lU4b9axO1XJEDUpPMBxs7YnjLhhqpKXIIB5SRYN/B4K0QpvyQ== - electron-to-chromium@^1.4.147: version "1.4.152" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.152.tgz#7dedbe8f3dc1c597088982a203f392e60f7ee90a" @@ -13318,9 +13109,9 @@ electron-to-chromium@^1.4.284: integrity sha512-EP/jdF15S+l3iSSzgUpUqeazvkbVFXNuVxwwLMVUSie3lUeH1HH70gKe0IS7TASB/0h5QPG2bLMzv2jelSztIQ== electron-to-chromium@^1.4.431: - version "1.4.445" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.445.tgz#058d2c5f3a2981ab1a37440f5a5e42d15672aa6d" - integrity sha512-++DB+9VK8SBJwC+X1zlMfJ1tMA3F0ipi39GdEp+x3cV2TyBihqAgad8cNMWtLDEkbH39nlDQP7PfGrDr3Dr7HA== + version "1.4.460" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.460.tgz#f360a5059c039c4a5fb4dfa99680ad8129dd9f84" + integrity sha512-kKiHnbrHME7z8E6AYaw0ehyxY5+hdaRmeUbjBO22LZMdqTYCO29EvF0T1cQ3pJ1RN5fyMcHl1Lmcsdt9WWJpJQ== elliptic@6.5.4, elliptic@^6.5.2, elliptic@^6.5.3, elliptic@^6.5.4: version "6.5.4" @@ -16049,7 +15840,7 @@ get-intrinsic@^1.1.3: has "^1.0.3" has-symbols "^1.0.3" -get-intrinsic@^1.2.0: +get-intrinsic@^1.2.0, get-intrinsic@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.1.tgz#d295644fed4505fc9cde952c37ee12b477a83d82" integrity sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw== @@ -17793,16 +17584,16 @@ jest-environment-node@^28.1.3: jest-util "^28.1.3" jest-environment-node@^29.2.1: - version "29.5.0" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-29.5.0.tgz#f17219d0f0cc0e68e0727c58b792c040e332c967" - integrity sha512-ExxuIK/+yQ+6PRGaHkKewYtg6hto2uGCgvKdb2nfJfKXgZ17DfXjvbZ+jA1Qt9A8EQSfPnt5FKIfnOO3u1h9qw== + version "29.6.1" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-29.6.1.tgz#08a122dece39e58bc388da815a2166c58b4abec6" + integrity sha512-ZNIfAiE+foBog24W+2caIldl4Irh8Lx1PUhg/GZ0odM1d/h2qORAsejiFc7zb+SEmYPn1yDZzEDSU5PmDkmVLQ== dependencies: - "@jest/environment" "^29.5.0" - "@jest/fake-timers" "^29.5.0" - "@jest/types" "^29.5.0" + "@jest/environment" "^29.6.1" + "@jest/fake-timers" "^29.6.1" + "@jest/types" "^29.6.1" "@types/node" "*" - jest-mock "^29.5.0" - jest-util "^29.5.0" + jest-mock "^29.6.1" + jest-util "^29.6.1" jest-get-type@^26.3.0: version "26.3.0" @@ -17876,18 +17667,18 @@ jest-message-util@^28.1.3: slash "^3.0.0" stack-utils "^2.0.3" -jest-message-util@^29.5.0: - version "29.5.0" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.5.0.tgz#1f776cac3aca332ab8dd2e3b41625435085c900e" - integrity sha512-Kijeg9Dag6CKtIDA7O21zNTACqD5MD/8HfIV8pdD94vFyFuer52SigdC3IQMhab3vACxXMiFk+yMHNdbqtyTGA== +jest-message-util@^29.6.1: + version "29.6.1" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.6.1.tgz#d0b21d87f117e1b9e165e24f245befd2ff34ff8d" + integrity sha512-KoAW2zAmNSd3Gk88uJ56qXUWbFk787QKmjjJVOjtGFmmGSZgDBrlIL4AfQw1xyMYPNVD7dNInfIbur9B2rd/wQ== dependencies: "@babel/code-frame" "^7.12.13" - "@jest/types" "^29.5.0" + "@jest/types" "^29.6.1" "@types/stack-utils" "^2.0.0" chalk "^4.0.0" graceful-fs "^4.2.9" micromatch "^4.0.4" - pretty-format "^29.5.0" + pretty-format "^29.6.1" slash "^3.0.0" stack-utils "^2.0.3" @@ -17899,14 +17690,14 @@ jest-mock@^28.1.3: "@jest/types" "^28.1.3" "@types/node" "*" -jest-mock@^29.5.0: - version "29.5.0" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-29.5.0.tgz#26e2172bcc71d8b0195081ff1f146ac7e1518aed" - integrity sha512-GqOzvdWDE4fAV2bWQLQCkujxYWL7RxjCnj71b5VhDAGOevB3qj3Ovg26A5NI84ZpODxyzaozXLOh2NCgkbvyaw== +jest-mock@^29.6.1: + version "29.6.1" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-29.6.1.tgz#049ee26aea8cbf54c764af649070910607316517" + integrity sha512-brovyV9HBkjXAEdRooaTQK42n8usKoSRR3gihzUpYeV/vwqgSoNfrksO7UfSACnPmxasO/8TmHM3w9Hp3G1dgw== dependencies: - "@jest/types" "^29.5.0" + "@jest/types" "^29.6.1" "@types/node" "*" - jest-util "^29.5.0" + jest-util "^29.6.1" jest-pnp-resolver@^1.2.2: version "1.2.2" @@ -18062,12 +17853,12 @@ jest-util@^28.1.3: graceful-fs "^4.2.9" picomatch "^2.2.3" -jest-util@^29.5.0: - version "29.5.0" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.5.0.tgz#24a4d3d92fc39ce90425311b23c27a6e0ef16b8f" - integrity sha512-RYMgG/MTadOr5t8KdhejfvUU82MxsCu5MF6KuDUHl+NuwzUt+Sm6jJWxTJVrDR1j5M/gJVCPKQEpWXY+yIQ6lQ== +jest-util@^29.6.1: + version "29.6.1" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.6.1.tgz#c9e29a87a6edbf1e39e6dee2b4689b8a146679cb" + integrity sha512-NRFCcjc+/uO3ijUVyNOQJluf8PtGCe/W6cix36+M3cTFgiYqFOOW5MgN4JOOcvbUhcKTYVd1CvHz/LWi8d16Mg== dependencies: - "@jest/types" "^29.5.0" + "@jest/types" "^29.6.1" "@types/node" "*" chalk "^4.0.0" ci-info "^3.2.0" @@ -19254,13 +19045,6 @@ makeerror@1.0.12: dependencies: tmpl "1.0.5" -makeerror@1.0.x: - version "1.0.11" - resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" - integrity sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw= - dependencies: - tmpl "1.0.x" - map-age-cleaner@^0.1.1: version "0.1.3" resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a" @@ -20943,20 +20727,10 @@ node-notifier@^8.0.1: uuid "^8.3.0" which "^2.0.2" -node-releases@^1.1.71: - version "1.1.73" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.73.tgz#dd4e81ddd5277ff846b80b52bb40c49edf7a7b20" - integrity sha512-uW7fodD6pyW2FZNZnp/Z3hvWKeEW1Y8R1+1CnErE8cXFXzl5blBOoVB41CvMer6P6Q0S5FXDwcHgFd1Wj0U9zg== - -node-releases@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.1.tgz#3d1d395f204f1f2f29a54358b9fb678765ad2fc5" - integrity sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA== - node-releases@^2.0.12: - version "2.0.12" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.12.tgz#35627cc224a23bfb06fb3380f2b3afaaa7eb1039" - integrity sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ== + version "2.0.13" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.13.tgz#d5ed1627c23e3461e819b02e57b75e4899b1c81d" + integrity sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ== node-releases@^2.0.5: version "2.0.5" @@ -22338,12 +22112,12 @@ pretty-format@^29.0.0: ansi-styles "^5.0.0" react-is "^18.0.0" -pretty-format@^29.5.0: - version "29.5.0" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.5.0.tgz#283134e74f70e2e3e7229336de0e4fce94ccde5a" - integrity sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw== +pretty-format@^29.6.1: + version "29.6.1" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.6.1.tgz#ec838c288850b7c4f9090b867c2d4f4edbfb0f3e" + integrity sha512-7jRj+yXO0W7e4/tSJKoR7HRIHLPPjtNaUGG2xxKQnGvPNRkgWcQ0AZX6P4KBRJN4FcTBWb3sa7DVUJmocYuoog== dependencies: - "@jest/schemas" "^29.4.3" + "@jest/schemas" "^29.6.0" ansi-styles "^5.0.0" react-is "^18.0.0" @@ -25136,7 +24910,7 @@ source-map-resolve@^0.5.0: source-map-url "^0.4.0" urix "^0.1.0" -"source-map-support@0.3.2 - 1.0.0", source-map-support@0.5.21, source-map-support@^0.5.12, source-map-support@^0.5.19, source-map-support@^0.5.3, source-map-support@^0.5.5, source-map-support@^0.5.9, source-map-support@^0.x, source-map-support@~0.5.20: +"source-map-support@0.3.2 - 1.0.0", source-map-support@0.5.21, source-map-support@^0.5.12, source-map-support@^0.5.16, source-map-support@^0.5.19, source-map-support@^0.5.3, source-map-support@^0.5.5, source-map-support@^0.5.9, source-map-support@^0.x, source-map-support@~0.5.20: version "0.5.21" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== @@ -25152,14 +24926,6 @@ source-map-support@0.5.13: buffer-from "^1.0.0" source-map "^0.6.0" -source-map-support@^0.5.16: - version "0.5.19" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" - integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - source-map-url@^0.4.0: version "0.4.1" resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56" @@ -25953,9 +25719,9 @@ terminal-link@^2.0.0: supports-hyperlinks "^2.0.0" terser@^5.15.0: - version "5.18.2" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.18.2.tgz#ff3072a0faf21ffd38f99acc9a0ddf7b5f07b948" - integrity sha512-Ah19JS86ypbJzTzvUCX7KOsEIhDaRONungA4aYBjEP3JZRf4ocuDzTg4QWZnPn9DEMiMYGJPiSOy7aykoCc70w== + version "5.19.0" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.19.0.tgz#7b3137b01226bdd179978207b9c8148754a6da9c" + integrity sha512-JpcpGOQLOXm2jsomozdMDpd5f8ZHh1rR48OFgWUH3QsyZcfPgv2qDCYbcDEAYNd4OZRj2bWYKpwdll/udZCk/Q== dependencies: "@jridgewell/source-map" "^0.3.3" acorn "^8.8.2" @@ -26068,7 +25834,7 @@ tmp@^0.2.1: dependencies: rimraf "^3.0.0" -tmpl@1.0.5, tmpl@1.0.x: +tmpl@1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== @@ -26861,14 +26627,7 @@ vm2@>=3.9.17, vm2@^3.9.3: acorn "^8.7.0" acorn-walk "^8.2.0" -walker@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" - integrity sha1-L3+bj9ENZ3JisYqITijRlhjgKPs= - dependencies: - makeerror "1.0.x" - -walker@^1.0.8: +walker@^1.0.7, walker@^1.0.8: version "1.0.8" resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== @@ -27212,9 +26971,9 @@ which-typed-array@^1.1.2: is-typed-array "^1.1.3" which-typed-array@^1.1.9: - version "1.1.9" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.9.tgz#307cf898025848cf995e795e8423c7f337efbde6" - integrity sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA== + version "1.1.10" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.10.tgz#74baa2789991905c2076abb317103b866c64e69e" + integrity sha512-uxoA5vLUfRPdjCuJ1h5LlYdmTLbYfums398v3WLkM+i/Wltl2/XyZpQWKbN++ck5L64SR/grOHqtXCUKmlZPNA== dependencies: available-typed-arrays "^1.0.5" call-bind "^1.0.2" @@ -27400,12 +27159,7 @@ ws@^6.2.2: dependencies: async-limiter "~1.0.0" -ws@^7, ws@^7.0.0: - version "7.5.2" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.2.tgz#09cc8fea3bec1bc5ed44ef51b42f945be36900f6" - integrity sha512-lkF7AWRicoB9mAgjeKbGqVUekLnSNO4VjKVnuPHpQeOxZOErX6BPXwJk70nFslRCEEA8EVW7ZjKwXaP9N+1sKQ== - -ws@^7.2.3: +ws@^7, ws@^7.0.0, ws@^7.2.3: version "7.5.9" resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== @@ -27676,20 +27430,7 @@ yargs@^16.1.0, yargs@^16.2.0: y18n "^5.0.5" yargs-parser "^20.2.2" -yargs@^17.0.0: - version "17.6.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.6.0.tgz#e134900fc1f218bc230192bdec06a0a5f973e46c" - integrity sha512-8H/wTDqlSwoSnScvV2N/JHfLWOKuh5MVla9hqLjK3nsfyy6Y4kDSYSvkU5YCUEPOSnRXfIyx3Sq+B/IWudTo4g== - dependencies: - cliui "^8.0.1" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.3" - y18n "^5.0.5" - yargs-parser "^21.0.0" - -yargs@^17.3.1, yargs@^17.5.1: +yargs@^17.0.0, yargs@^17.3.1, yargs@^17.5.1: version "17.7.2" resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==