From 5997bd216b2bc660569e0dc7516bbe8331930ba9 Mon Sep 17 00:00:00 2001 From: Ciprian Draghici Date: Mon, 11 Mar 2024 13:40:36 +0200 Subject: [PATCH] Add support for the new cross window functionality in web wallet (#1067) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * add walletV2 provider WIP * get wallet address from state * Message communication working * login with wallet v2 * login with wallet v2 * Navigation working * fix event listener removal * prepare sign * Fix yarn lock * Minor refactor * FIx error * close child window on unload * remove console log * remove console log * sign when child window is closed * sign when child window is closed * cancel tx * Add logout * Update yarn lock * Work on login event * Work on walletProvider * Remove isChildTab key * Rename walletV2 to crossWindow * Updated parentDapp to window.document.referrer * Remove reference to referrer * Update version to alpha * provider wip * sign transactions * Add comments * Update alpha version * fix wallet refresh (handshake lost) * cancel action from dApp * Update version * use provider from package * fix import * alpha version * alpha version increment * increment cross window provider version * increment alpha version * regenerate yarn lock * Add comment * bump version * regenerate yarn lock * bump provider version * bump alpha version * New webview provider (#996) * wip wallet hub integration * implement new webview provider * implement new webview provider functionality * fix signMessage implementaion on the NewWebviewProvider + some cleanup * fix sign message flow * cleanup * cleanup and revert unnecessary changes * revert minify changes * 2.24.2-alpha.7 * use new cross window provider response types * changes on cross window provider types reexports * update cross provider version * cross window provider reexports * set minify * reset local publish config * strongly types on the new webview provider * revert minification settings * remove comment * revert minification settings * refactoring according to code review * update logout function * upgrade cross window provider version * cleanup * yarn.lock * increment version * regenerate yarn lock * apply minification * Update version * rename NewWebViewProvider into ExperimentalWebviewProvider * 2.26.0-alpha.3 * 2.26.0-alpha-4 * Fixed build error * Upgrade @multiversx/sdk-web-wallet-cross-window-provider@0.0.10 * Upgrade version * Upgrade provider * cleanup * 2.26.0-alpha-8 * fix sign message * 2.26.0-alpha-9 * try to fix the issue of accessing origin from Window outside of the iframe * 2.26.0-alpha.10 * fix build * 2.27.0-alpha.0 * cleanup after merge * 2.27.0-alpha.1 * Fix axios instance * Update version * Add axios patch * Set interceptors * Fix interceptors * Fix tests * Update README * Upgrade corss-window-provider * 2.28.0-alpha.3 * Changed postMessage payload from string to plain object (#1025) * Changed postMessage payload from string to plain object * Updated helpers and CHANGELOG.md * 2.28.0-alpha.4 * Updated CHANGELOG.md * Removed exports * Updated package.json * 2.28.0-alpha.5 * Improve tsc support (#1026) * Update sdk-web-wallet-cross-window-provider@0.0.19 * 2.28.0-alpha.7 * Updated sdk-core * 2.28.1-alpha.0 * Update yarn lock * 2.28.4-alpha.1 * Fix extension cancel mesage * 2.28.4-alpha.2 * Updated sdk-core * 2.28.5-alpha.0 * Updated sdk-core * 2.28.5-alpha.1 * Update yarn lock * 2.28.5-alpha.2 * Upgrade @multiversx/sdk-web-wallet-cross-window-provider@0.0.20 * 2.28.5-alpha.3 * Extract multisig login logic * Fix login * 2.28.5-alpha.4 * Fixed wallet connect breaks login with other providers (#1041) * Fix wallet connect login * Fix possibly undefined payload (#1040) * Fixe possibly undefined payload * Update CHANGELOG * Wallet connect provider state clear * Fix wallet connect init and extension login cancel * Updated CHANGELOG.md --------- Co-authored-by: Tudor Morar * 2.28.6-alpha.0 (#1045) * 2.28.6-alpha.1 * Fix types * 2.28.6-alpha.2 * 2.28.6-alpha.5 * 2.28.7-alpha.0 * 2.28.7-alpha.1 * Fix tests and build * Add support for nativeAuth impersonate (#1049) * Add support for nativeAuth impersonate * Fixed issues with wallet connect (#1050) * Fix issues with wallet connect * Remove ref * Revert changes * Update hook * Move slice to login instead of account * Update changelog and version * Update version * 2.28.7-alpha.4 * Add getHasNativeAuth (#1051) * Add checkNativeAuth * Update changelog and increment version * Rename function * Avoid sending nativeAuth if it is not configured * Update QR initialization to not do extra steps if it is not mounted * Update walletConnect initialization (#1052) * Update walletConnect initialization * Fix wallet connect chainID (#1053) * Add waitForChainID for useWalletConnectV2Login * Added new fee and receiver fields. * Updated data field styles. * Updated wording. * increment alpha * increment alpha * Added markup. * Fixed wrongfully placed data test identifier. * 2.28.7-alpha.19 * Added missing data test identifier. * 2.28.7-alpha.20 * Updated layout. * Updated file structure. * 2.28.7-alpha.21 * Updated code quality. * Removed redundant condition. * Updated imports to be relative. * Fix ledger guardian signing (#1059) * Fix ledger guardian signing * Update CHANGELOG * 2.28.7-alpha.22 * Added missing "data-testid". * 2.28.7-alpha.23 * Fix Sign step progress (#1060) * Fix Sign step progress * Upgrade @multiversx/sdk-web-wallet-cross-window-provider * Added the identifier instead of the ticker. * Update CHANGELOG * 2.28.7-alpha.24 --------- Co-authored-by: Miro Mărgineanu * 2.28.8-alpha.0 * Update WalletConnect (#1064) * update @multiversx/sdk-wallet-connect-provider to 4.1.1 ( @walletconnect 2.11.2 ) * - Removed canLoginRef requirement - Do not login if component is not mounted - Avoid double QR generation * updated type for loginButtonText * 2.28.8-alpha.2 * Updated CHANGELOG * Fixed tests. * Added "data-value". * 2.28.8-alpha.3 * Added variable. * Fixed code. * 2.28.8-alpha.4 * extend ExperimentalWebviewProvider with reset state option * 2.28.8-alpha.5 * update changelog * update changelog * Tm/cwh-fixes (#1068) * Add linting rule * Update CHANGELOG * Revert version * Rename multisig to modifiedAccount * Temp remove cross window wallet button * Add data-testid from enum * 2.28.8-alpha.6 * fix reset state action * 2.28.8-alpha.7 --------- Co-authored-by: Andrei Co-authored-by: Tudor Morar Co-authored-by: Razvan Tomegea Co-authored-by: Razvan Tomegea Co-authored-by: DanutIlie <42973343+DanutIlie@users.noreply.github.com> Co-authored-by: Gavrila Andrei Co-authored-by: Miro Mărgineanu Co-authored-by: Radu Mojic --- .eslintrc | 1 + CHANGELOG.md | 18 +- README.md | 7 +- package.json | 10 +- src/UI/Balance/Balance.tsx | 112 ++ src/UI/Balance/balanceStyles.scss | 38 + src/UI/Balance/index.ts | 1 + .../SignTransactionsModals.tsx | 6 +- .../SignWithCrossWindowWalletModal.tsx | 27 + .../SignWithCrossWindowWalletModal/index.tsx | 1 + ...signWithCrossWindowWalletModal.styles.scss | 11 + .../SignWithDeviceModal/SignStep.tsx | 4 +- .../components/SignStepBody.tsx | 107 +- .../ConfirmAmount/ConfirmAmount.tsx | 124 +- .../ConfirmAmountData/ConfirmAmountData.tsx | 114 ++ .../confirmAmountDataStyles.scss | 48 + .../components/ConfirmAmountData/index.ts | 1 + .../ConfirmAmountLabel/ConfirmAmountLabel.tsx | 64 + .../confirmAmountLabelStyles.scss | 10 + .../components/ConfirmAmountLabel/index.ts | 1 + .../ConfirmAmountNftSft.tsx | 119 ++ .../confirmAmountNftSftStyles.scss | 68 + .../components/ConfirmAmountNftSft/index.ts | 1 + .../ConfirmAmount/components/index.ts | 3 + .../ConfirmAmount/confirmAmountStyles.scss | 53 +- .../components/ConfirmAmount/hooks/index.ts | 1 + .../hooks/useHandleAmountReference.ts | 47 + .../components/ConfirmFee/ConfirmFee.tsx | 78 +- .../ConfirmFee/confirmFeeStyles.scss | 39 +- .../ConfirmReceiver/ConfirmReceiver.tsx | 104 +- .../ReceiverSubValue/ReceiverSubValue.tsx | 63 - .../components/ReceiverSubValue/index.ts | 1 - .../receiverSubValueStyles.scss | 42 - .../ReceiverValue/ReceiverValue.tsx | 56 - .../components/ReceiverValue/index.ts | 1 - .../ReceiverValue/receiverValueStyles.scss | 37 - .../confirmReceiverStyles.scss | 96 +- .../NftSftPreviewComponent.styles.scss | 93 -- .../NftSftPreviewComponent.tsx | 81 - .../NftSftPreviewComponent/index.ts | 1 - .../components/TokenAvatar/TokenAvatar.tsx | 59 - .../components/TokenAvatar/index.ts | 1 - .../TokenAvatar/tokenAvatarStyles.scss | 61 - .../components/components/index.ts | 3 + .../components/signStepBodyStyles.scss | 13 - .../types/signTransactionsModals.types.ts | 1 + src/UI/TransactionData/TransactionData.tsx | 94 +- .../TransactionDataStyles.scss | 91 +- .../AddressDetailItem/AddressDetailitem.tsx | 2 +- .../ScResultsList/ScResultsList.tsx | 5 +- .../ScrDetailItem/ScrDetailItem.tsx | 2 +- .../components/ActionText/index.tsx | 2 +- .../components/ActionToken.tsx | 4 +- .../TransactionInfoAge/TransactionInfoAge.tsx | 2 +- src/UI/index.ts | 2 + src/UI/pages/UnlockPage/index.tsx | 1 + .../WalletConnectLoginContainer.tsx | 13 +- .../WalletConnectLoginContent.tsx | 8 +- .../WalletConnectLoginContainer/types.ts | 9 +- .../CrossWindowLoginButton.tsx | 56 + .../CrossWindowLoginButton/index.tsx | 1 + src/apiCalls/accounts/getAccountFromApi.ts | 4 +- src/apiCalls/axiosInstance.ts | 96 ++ .../ProviderInitializer.tsx | 80 +- .../helpers/getCrossWindowProvider.ts | 26 + ...LoginToken.ts => getModifiedLoginToken.ts} | 13 +- .../ProviderInitializer/helpers/index.ts | 4 +- .../helpers/processModifiedAccount.ts | 52 + ....test.ts => getModifiedLoginToken.test.ts} | 23 +- src/constants/dataTestIds.enum.ts | 1 + src/hooks/account/index.ts | 1 + .../useGetIsWalletConnectV2Initialized.ts | 6 + src/hooks/login/index.ts | 5 +- src/hooks/login/useCrossWindowLogin.ts | 149 ++ src/hooks/login/useWalletConnectV2Login.ts | 129 +- .../getAreAllTransactionsSignedByGuardian.ts | 17 +- src/hooks/transactions/useGetTokenDetails.tsx | 21 +- .../useSignMultipleTransactions.tsx | 28 +- .../transactions/useSignTransactions.tsx | 13 +- .../useSignTransactionsCommonData.tsx | 13 +- .../useSignTransactionsWithDevice.tsx | 6 +- src/providers/accountProvider.ts | 2 + .../ExperimentalWebviewProvider.ts | 102 +- .../helpers/notInitializedError.ts | 3 + .../helpers/webviewProviderEventHandler.ts | 43 + src/providers/utils.ts | 3 + .../selectors/loginInfoSelectors.ts | 5 + src/reduxStore/slices/loginInfoSlice.ts | 12 +- src/setupTests.js | 2 +- src/types/enums.types.ts | 2 + src/types/transactions.types.ts | 2 +- .../getHasNativeAuth/getHasNativeAuth.ts | 25 + src/utils/getHasNativeAuth/index.ts | 1 + src/utils/index.ts | 4 +- src/utils/operations/calculateFeeInFiat.ts | 24 +- src/utils/platform/detectCurrentPlatform.ts | 1 + src/utils/waitForChainID.ts | 33 + src/wrappers/DappProvider/DappProvider.tsx | 2 +- yarn.lock | 1453 +++++++++-------- 99 files changed, 2789 insertions(+), 1736 deletions(-) create mode 100644 src/UI/Balance/Balance.tsx create mode 100644 src/UI/Balance/balanceStyles.scss create mode 100644 src/UI/Balance/index.ts create mode 100644 src/UI/SignTransactionsModals/SignWithCrossWindowWalletModal/SignWithCrossWindowWalletModal.tsx create mode 100644 src/UI/SignTransactionsModals/SignWithCrossWindowWalletModal/index.tsx create mode 100644 src/UI/SignTransactionsModals/SignWithCrossWindowWalletModal/signWithCrossWindowWalletModal.styles.scss create mode 100644 src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/ConfirmAmount/components/ConfirmAmountData/ConfirmAmountData.tsx create mode 100644 src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/ConfirmAmount/components/ConfirmAmountData/confirmAmountDataStyles.scss create mode 100644 src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/ConfirmAmount/components/ConfirmAmountData/index.ts create mode 100644 src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/ConfirmAmount/components/ConfirmAmountLabel/ConfirmAmountLabel.tsx create mode 100644 src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/ConfirmAmount/components/ConfirmAmountLabel/confirmAmountLabelStyles.scss create mode 100644 src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/ConfirmAmount/components/ConfirmAmountLabel/index.ts create mode 100644 src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/ConfirmAmount/components/ConfirmAmountNftSft/ConfirmAmountNftSft.tsx create mode 100644 src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/ConfirmAmount/components/ConfirmAmountNftSft/confirmAmountNftSftStyles.scss create mode 100644 src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/ConfirmAmount/components/ConfirmAmountNftSft/index.ts create mode 100644 src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/ConfirmAmount/components/index.ts create mode 100644 src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/ConfirmAmount/hooks/index.ts create mode 100644 src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/ConfirmAmount/hooks/useHandleAmountReference.ts delete mode 100644 src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/ConfirmReceiver/components/ReceiverSubValue/ReceiverSubValue.tsx delete mode 100644 src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/ConfirmReceiver/components/ReceiverSubValue/index.ts delete mode 100644 src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/ConfirmReceiver/components/ReceiverSubValue/receiverSubValueStyles.scss delete mode 100644 src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/ConfirmReceiver/components/ReceiverValue/ReceiverValue.tsx delete mode 100644 src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/ConfirmReceiver/components/ReceiverValue/index.ts delete mode 100644 src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/ConfirmReceiver/components/ReceiverValue/receiverValueStyles.scss delete mode 100644 src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/NftSftPreviewComponent/NftSftPreviewComponent.styles.scss delete mode 100644 src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/NftSftPreviewComponent/NftSftPreviewComponent.tsx delete mode 100644 src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/NftSftPreviewComponent/index.ts delete mode 100644 src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/TokenAvatar/TokenAvatar.tsx delete mode 100644 src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/TokenAvatar/index.ts delete mode 100644 src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/TokenAvatar/tokenAvatarStyles.scss create mode 100644 src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/index.ts create mode 100644 src/UI/webWallet/CrossWindowLoginButton/CrossWindowLoginButton.tsx create mode 100644 src/UI/webWallet/CrossWindowLoginButton/index.tsx create mode 100644 src/apiCalls/axiosInstance.ts create mode 100644 src/components/ProviderInitializer/helpers/getCrossWindowProvider.ts rename src/components/ProviderInitializer/helpers/{getMultiSigLoginToken.ts => getModifiedLoginToken.ts} (77%) create mode 100644 src/components/ProviderInitializer/helpers/processModifiedAccount.ts rename src/components/ProviderInitializer/helpers/tests/{getMultiSigLoginToken.test.ts => getModifiedLoginToken.test.ts} (61%) create mode 100644 src/hooks/account/useGetIsWalletConnectV2Initialized.ts create mode 100644 src/hooks/login/useCrossWindowLogin.ts create mode 100644 src/providers/experimentalWebViewProvider/helpers/notInitializedError.ts create mode 100644 src/providers/experimentalWebViewProvider/helpers/webviewProviderEventHandler.ts create mode 100644 src/utils/getHasNativeAuth/getHasNativeAuth.ts create mode 100644 src/utils/getHasNativeAuth/index.ts create mode 100644 src/utils/waitForChainID.ts diff --git a/.eslintrc b/.eslintrc index 173f32078..a8c51ed2e 100644 --- a/.eslintrc +++ b/.eslintrc @@ -85,6 +85,7 @@ "linebreak-style": ["error", "unix"], "quotes": ["error", "single"], "semi": ["error", "always"], + "prefer-object-spread": 2, "object-curly-newline": "off", "arrow-body-style": "off", "react/jsx-props-no-spreading": "off", diff --git a/CHANGELOG.md b/CHANGELOG.md index 7a8ed1781..14a194354 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,35 +6,51 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [Unreleased] +- [Fixed types and file names](https://github.com/multiversx/mx-sdk-dapp/pull/1068) +- [Add support for the new cross window functionality in web wallet](https://github.com/multiversx/mx-sdk-dapp/pull/1067) +- [Update WalletConnect package and functionality](https://github.com/multiversx/mx-sdk-dapp/pull/1064) +- [Fixed sign step signing and labels](https://github.com/multiversx/mx-sdk-dapp/pull/1060) +- [Fixed signing multiple transactions with guarded ledger](https://github.com/multiversx/mx-sdk-dapp/pull/1059) +- [Added getHasNativeAuth in order to see if nativeAuth has been configured on development mode](https://github.com/multiversx/mx-sdk-dapp/pull/1051) +- [Added support for nativeAuth impersonat](https://github.com/multiversx/mx-sdk-dapp/pull/1049) +- [Updated WalletConnectV2 account provider to be updated on new or existing session](https://github.com/multiversx/mx-sdk-dapp/pull/1050) ## [[v2.28.8]](https://github.com/multiversx/mx-sdk-dapp/pull/1062)] - 2024-03-07 + - [Fixed base64 utils conversion](https://github.com/multiversx/mx-sdk-dapp/pull/1061) ## [[v2.28.7]](https://github.com/multiversx/mx-sdk-dapp/pull/1048)] - 2024-02-13 + - [Updated AddressRow data-testids](https://github.com/multiversx/mx-sdk-dapp/pull/1047) ## [[v2.28.6]](https://github.com/multiversx/mx-sdk-dapp/pull/1044)] - 2024-02-08 + - [Added option to access URL search param from application load time in `useParseSignedTransactions`](https://github.com/multiversx/mx-sdk-dapp/pull/1042) - [Fixed wallet connect breaks login with other providers](https://github.com/multiversx/mx-sdk-dapp/pull/1043) - [Fixed possibly undefined payload on custom toasts](https://github.com/multiversx/mx-sdk-dapp/pull/1036) ## [[v2.28.5]](https://github.com/multiversx/mx-sdk-dapp/pull/1036)] - 2024-02-01 + - [Fixed logout with web wallet infinite loop](https://github.com/multiversx/mx-sdk-dapp/pull/1036) ## [[v2.28.4]](https://github.com/multiversx/mx-sdk-dapp/pull/1035)] - 2024-02-01 + - [Reverted setting walletconnectV2 `accountProvider` on init](https://github.com/multiversx/mx-sdk-dapp/pull/1036) - [Fixed setting `loginToken` in `nativeAuthService` losing previous state](https://github.com/multiversx/mx-sdk-dapp/pull/1034) - [Fixed setting walletconnectV2 `accountProvider` on init](https://github.com/multiversx/mx-sdk-dapp/pull/1033) ## [[v2.28.3]](https://github.com/multiversx/mx-sdk-dapp/pull/1032)] - 2024-01-30 + - [Added transaction toast wrapper id](https://github.com/multiversx/mx-sdk-dapp/pull/1031) ## [[v2.28.2]](https://github.com/multiversx/mx-sdk-dapp/pull/1030)] - 2024-01-26 + - [Added support for `checkIsValidSender` with array option](https://github.com/multiversx/mx-sdk-dapp/pull/1029) ## [[v2.28.1]](https://github.com/multiversx/mx-sdk-dapp/pull/1028)] - 2024-01-25 -- [Added support for Web Wallet multisig token login](https://github.com/multiversx/mx-sdk-dapp/pull/1027) +- [Added support for Web Wallet multisig token login](https://github.com/multiversx/mx-sdk-dapp/pull/1027) +- [Changed postMessage payload from string to plain object](https://github.com/multiversx/mx-sdk-dapp/pull/1025) ## [[v2.28.0]](https://github.com/multiversx/mx-sdk-dapp/pull/1022)] - 2024-01-11 diff --git a/README.md b/README.md index 9696663f7..96dae1929 100644 --- a/README.md +++ b/README.md @@ -956,7 +956,12 @@ The sdk-dapp library exposes bundles for both CommonJS and ESModules, however, i moduleNameMapper: { '@multiversx/sdk-dapp/(.*)': '/node_modules/@multiversx/sdk-dapp/__commonjs/$1.js' -} +}, +``` + +You may need in your setupJest.js file do: +```javascript +import 'isomorphic-fetch'; ``` # sdk-dapp exports diff --git a/package.json b/package.json index d7aeb6b76..c6c297441 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@multiversx/sdk-dapp", - "version": "2.28.8", + "version": "2.28.8-alpha.7", "description": "A library to hold the main logic for a dapp on the MultiversX blockchain", "author": "MultiversX", "license": "GPL-3.0-or-later", @@ -83,6 +83,7 @@ "history": "5.3.0", "husky": "8.0.1", "identity-obj-proxy": "3.0.0", + "isomorphic-fetch": "3.0.0", "jest": "28.1.1", "jest-environment-jsdom": "28.1.3", "jest-mock": "29.3.1", @@ -142,14 +143,15 @@ "**/*.d.ts" ], "dependencies": { - "@multiversx/sdk-core": "12.18.0", + "@lifeomic/axios-fetch": "3.0.1", + "@multiversx/sdk-core": "13.0.0-alpha.2", "@multiversx/sdk-extension-provider": "3.0.0", "@multiversx/sdk-hw-provider": "6.4.0", "@multiversx/sdk-native-auth-client": "1.0.7", "@multiversx/sdk-opera-provider": "1.0.0-alpha.1", "@multiversx/sdk-wallet": "4.2.0", - "@multiversx/sdk-wallet-connect-provider": "4.1.0", - "@multiversx/sdk-web-wallet-cross-window-provider": "0.0.14", + "@multiversx/sdk-wallet-connect-provider": "4.1.1", + "@multiversx/sdk-web-wallet-cross-window-provider": "0.0.24", "@multiversx/sdk-web-wallet-provider": "3.2.1", "@reduxjs/toolkit": "1.8.2", "axios": "1.6.5", diff --git a/src/UI/Balance/Balance.tsx b/src/UI/Balance/Balance.tsx new file mode 100644 index 000000000..f737feb23 --- /dev/null +++ b/src/UI/Balance/Balance.tsx @@ -0,0 +1,112 @@ +import React from 'react'; +import classNames from 'classnames'; + +import MultiversXSymbol from 'assets/icons/mvx-icon-simple.svg'; +import { withStyles } from 'hocs/withStyles'; +import { WithClassnameType } from 'UI/types'; + +import { WithStylesImportType } from '../../hocs/useStyles'; + +interface BalancePropsType extends WithClassnameType, WithStylesImportType { + amount: string; + addEqualSign?: boolean; + displayAsUsd?: boolean; + egldIcon?: boolean; + showTokenLabel?: boolean; + tokenLabel?: string; + showTokenLabelSup?: boolean; +} + +export const BalanceComponent = ({ + amount, + displayAsUsd, + addEqualSign, + egldIcon, + className, + showTokenLabel = true, + styles, + tokenLabel, + showTokenLabelSup, + 'data-testid': dataTestId +}: BalancePropsType) => { + const [mainBalance, decimalBalance] = amount.split('.'); + const processedMainBalance = + displayAsUsd && mainBalance.indexOf('$') < 0 + ? `$${mainBalance}` + : mainBalance; + + const getBalancePayload = () => { + const balancePayload: Record = { processedMainBalance }; + + if (addEqualSign && displayAsUsd) { + balancePayload.approximation = '≈'; + } + + if (decimalBalance) { + balancePayload.decimalBalance = `.${decimalBalance}`; + } + + if (!displayAsUsd && showTokenLabel) { + balancePayload.tokenLabel = ` ${tokenLabel}`; + } + + return balancePayload; + }; + + const balancePayload = getBalancePayload(); + const dataValues = [ + balancePayload.approximation, + balancePayload.processedMainBalance, + balancePayload.decimalBalance, + balancePayload.tokenLabel + ]; + + const dataBalanceValue = dataValues.reduce( + (totalDataValue, dataValueItem) => + dataValueItem ? totalDataValue.concat(dataValueItem) : totalDataValue, + '' + ); + + return ( +
+ {egldIcon && !displayAsUsd && ( + + )} + + {balancePayload.approximation && ( + + {balancePayload.approximation} + + )} + + {balancePayload.processedMainBalance && ( + {processedMainBalance} + )} + + {balancePayload.decimalBalance && ( + + {balancePayload.decimalBalance} + + )} + + {balancePayload.tokenLabel && ( + + {balancePayload.tokenLabel} + + )} +
+ ); +}; + +export const Balance = withStyles(BalanceComponent, { + ssrStyles: () => import('UI/Balance/balanceStyles.scss'), + clientStyles: () => require('UI/Balance/balanceStyles.scss').default +}); diff --git a/src/UI/Balance/balanceStyles.scss b/src/UI/Balance/balanceStyles.scss new file mode 100644 index 000000000..82c1f1906 --- /dev/null +++ b/src/UI/Balance/balanceStyles.scss @@ -0,0 +1,38 @@ +.balance { + display: flex; + align-items: center; + line-height: 1; + gap: 4px; + + .balanceApproximation { + opacity: 0.75; + } + + .balanceSymbol { + width: auto; + height: 0.666em; + position: relative; + top: 0.05em; + + path { + fill: currentColor; + } + } + + .balanceDecimals { + opacity: 0.75; + margin-left: -4px; + } + + .balanceSuffix { + opacity: 0.75; + + &.balanceSuffixSup { + font-size: 66%; + position: relative; + top: -0.125em; + vertical-align: unset; + white-space: nowrap; + } + } +} diff --git a/src/UI/Balance/index.ts b/src/UI/Balance/index.ts new file mode 100644 index 000000000..de9bb0894 --- /dev/null +++ b/src/UI/Balance/index.ts @@ -0,0 +1 @@ +export * from './Balance'; diff --git a/src/UI/SignTransactionsModals/SignTransactionsModals.tsx b/src/UI/SignTransactionsModals/SignTransactionsModals.tsx index 3c5263d5b..c7f537f0b 100644 --- a/src/UI/SignTransactionsModals/SignTransactionsModals.tsx +++ b/src/UI/SignTransactionsModals/SignTransactionsModals.tsx @@ -4,6 +4,7 @@ import { useGetLoginInfo } from 'hooks'; import { LoginMethodsEnum } from 'types'; import { ConfirmationScreen, DeviceConfirmationScreen } from './components'; +import { SignWithCrossWindowWalletModal } from './SignWithCrossWindowWalletModal'; import { SignWithExtensionModal } from './SignWithExtensionModal'; import { SignWithExtraModal } from './SignWithExtraModal'; import { SignWithLedgerModal } from './SignWithLedgerModal'; @@ -36,6 +37,8 @@ export const SignTransactionsModals = ({ CustomConfirmScreens?.WalletConnect ?? SignWithWalletConnectModal, Extension: CustomConfirmScreens?.Extension ?? SignWithExtensionModal, Opera: CustomConfirmScreens?.Opera ?? SignWithOperaModal, + CrossWindow: + CustomConfirmScreens?.CrossWindow ?? SignWithCrossWindowWalletModal, // The purpose of having this is to have a consistent flow of transaction signing. // The logic for redirecting to the web wallet is placed in the ConfirmationScreen component, // so we have to render that component when we are logged in with the web wallet provider @@ -60,7 +63,6 @@ export const SignTransactionsModals = ({ }, [verifyReceiverScam, className] ); - switch (loginMethod) { case LoginMethodsEnum.ledger: return renderScreen({ Screen: ConfirmScreens.Ledger, isDevice: true }); @@ -70,6 +72,8 @@ export const SignTransactionsModals = ({ return renderScreen({ Screen: ConfirmScreens.Extension }); case LoginMethodsEnum.opera: return renderScreen({ Screen: ConfirmScreens.Opera }); + case LoginMethodsEnum.crossWindow: + return renderScreen({ Screen: ConfirmScreens.CrossWindow }); case LoginMethodsEnum.wallet: return renderScreen({ Screen: ConfirmScreens.Wallet }); case LoginMethodsEnum.extra: diff --git a/src/UI/SignTransactionsModals/SignWithCrossWindowWalletModal/SignWithCrossWindowWalletModal.tsx b/src/UI/SignTransactionsModals/SignWithCrossWindowWalletModal/SignWithCrossWindowWalletModal.tsx new file mode 100644 index 000000000..a208d583d --- /dev/null +++ b/src/UI/SignTransactionsModals/SignWithCrossWindowWalletModal/SignWithCrossWindowWalletModal.tsx @@ -0,0 +1,27 @@ +import React from 'react'; + +import { useSelector } from 'reduxStore/DappProviderContext'; +import { networkSelector } from 'reduxStore/selectors'; +import { SignModalPropsType } from 'types'; +import { + SignWaitingScreenModal, + SignWaitingScreenModalPropsType +} from '../components'; + +export const SignWithCrossWindowWalletModal = (props: SignModalPropsType) => { + const { walletAddress } = useSelector(networkSelector); + + const description = props.error + ? props.error + : props.transactions?.length > 1 + ? 'Check your MultiversX Wallet to sign the transactions' + : 'Check your MultiversX Wallet to sign the transaction'; + + const waitingScreenProps: SignWaitingScreenModalPropsType = { + ...props, + description, + title: `Confirm on ${walletAddress}` + }; + + return ; +}; diff --git a/src/UI/SignTransactionsModals/SignWithCrossWindowWalletModal/index.tsx b/src/UI/SignTransactionsModals/SignWithCrossWindowWalletModal/index.tsx new file mode 100644 index 000000000..808a2d5f5 --- /dev/null +++ b/src/UI/SignTransactionsModals/SignWithCrossWindowWalletModal/index.tsx @@ -0,0 +1 @@ +export * from './SignWithCrossWindowWalletModal'; diff --git a/src/UI/SignTransactionsModals/SignWithCrossWindowWalletModal/signWithCrossWindowWalletModal.styles.scss b/src/UI/SignTransactionsModals/SignWithCrossWindowWalletModal/signWithCrossWindowWalletModal.styles.scss new file mode 100644 index 000000000..73aa4674f --- /dev/null +++ b/src/UI/SignTransactionsModals/SignWithCrossWindowWalletModal/signWithCrossWindowWalletModal.styles.scss @@ -0,0 +1,11 @@ +.extension-modal { + color: inherit; +} + +.modal-container { + color: inherit; +} + +.extension { + color: inherit; +} diff --git a/src/UI/SignTransactionsModals/SignWithDeviceModal/SignStep.tsx b/src/UI/SignTransactionsModals/SignWithDeviceModal/SignStep.tsx index 8c192a027..11434247f 100644 --- a/src/UI/SignTransactionsModals/SignWithDeviceModal/SignStep.tsx +++ b/src/UI/SignTransactionsModals/SignWithDeviceModal/SignStep.tsx @@ -87,8 +87,8 @@ const SignStepComponent = (props: SignStepType & WithStylesImportType) => { const signLastTransaction = isLastTransaction && !waitingForDevice; - const onSubmit = () => { - onSignTransaction(); + const onSubmit = async () => { + await onSignTransaction(); if (signLastTransaction && GuardianScreen) { return setShowGuardianScreen(true); } diff --git a/src/UI/SignTransactionsModals/SignWithDeviceModal/components/SignStepBody.tsx b/src/UI/SignTransactionsModals/SignWithDeviceModal/components/SignStepBody.tsx index 89376fcee..69219cc7a 100644 --- a/src/UI/SignTransactionsModals/SignWithDeviceModal/components/SignStepBody.tsx +++ b/src/UI/SignTransactionsModals/SignWithDeviceModal/components/SignStepBody.tsx @@ -1,21 +1,13 @@ import React from 'react'; import { Address } from '@multiversx/sdk-core/out'; import classNames from 'classnames'; + import { withStyles, WithStylesImportType } from 'hocs/withStyles'; -import { useGetEgldPrice, useGetNetworkConfig } from 'hooks'; -import { useGetTokenDetails } from 'hooks/transactions/useGetTokenDetails'; import { ActiveLedgerTransactionType, MultiSignTransactionType } from 'types'; -import { NftEnumType } from 'types/tokens.types'; import { TransactionData } from 'UI/TransactionData'; -import { getEgldLabel } from 'utils/network/getEgldLabel'; -import { formatAmount } from 'utils/operations/formatAmount'; -import { isTokenTransfer } from 'utils/transactions/isTokenTransfer'; -import { getIdentifierType } from 'utils/validation/getIdentifierType'; + import { useSignStepsClasses } from '../hooks'; -import { ConfirmAmount } from './components/ConfirmAmount'; -import { ConfirmFee } from './components/ConfirmFee'; -import { ConfirmReceiver } from './components/ConfirmReceiver'; -import { NftSftPreviewComponent } from './components/NftSftPreviewComponent'; +import { ConfirmAmount, ConfirmFee, ConfirmReceiver } from './components'; export interface SignStepInnerClassesType { buttonsWrapperClassName?: string; @@ -45,13 +37,10 @@ const SignStepBodyComponent = ({ globalStyles, styles }: SignStepBodyPropsType & WithStylesImportType) => { - const egldLabel = getEgldLabel(); - if (!currentTransaction) { return null; } - const { network } = useGetNetworkConfig(); const { inputGroupClassName, inputLabelClassName, @@ -59,119 +48,41 @@ const SignStepBodyComponent = ({ errorClassName } = signStepInnerClasses || {}; - const { tokenId, nonce, amount, multiTxData, receiver } = + const { tokenId, multiTxData, receiver, amount } = currentTransaction.transactionTokenInfo; - const isTokenTransaction = Boolean( - tokenId && isTokenTransfer({ tokenId, erdLabel: egldLabel }) - ); - - const { isNft, isEgld, isEsdt } = getIdentifierType(tokenId); - - // If the token has a nonce means that this is an NFT. Eg: TokenId=TOKEN-1hfr, nonce=123 => NFT id=TOKEN-1hfr-123 - const appendedNonce = nonce ? `-${nonce}` : ''; - const nftId = `${tokenId}${appendedNonce}`; - - const { tokenDecimals, tokenAvatar, tokenLabel, type, esdtPrice } = - useGetTokenDetails({ - tokenId: nonce && nonce?.length > 0 ? nftId : tokenId - }); - const transactionReceiver = multiTxData ? new Address(receiver).bech32() : currentTransaction.transaction.getReceiver().toString(); - const getFormattedAmount = ({ addCommas }: { addCommas: boolean }) => - formatAmount({ - input: isTokenTransaction - ? amount - : currentTransaction.transaction.getValue().toString(), - decimals: isTokenTransaction ? tokenDecimals : Number(network.decimals), - digits: Number(network.digits), - showLastNonZeroDecimal: false, - addCommas - }); - - const formattedAmount = getFormattedAmount({ addCommas: true }); - const rawAmount = getFormattedAmount({ addCommas: false }); - const scamReport = currentTransaction.receiverScamInfo; const classes = useSignStepsClasses(scamReport, globalStyles); - - const token = isNft ? nftId : tokenId || egldLabel; - const shownAmount = isNft ? amount : formattedAmount; - - const { price: egldPrice } = useGetEgldPrice(); - let tokenPrice; - - if (isEgld && egldPrice) { - tokenPrice = egldPrice; - } - - if (isNft) { - tokenPrice = null; - } - - if (isEsdt && type) { - tokenPrice = esdtPrice ?? null; - } - - const shouldShowAmount = - isEgld || isEsdt || (Boolean(type) && type !== NftEnumType.NonFungibleESDT); - const data = currentTransaction.transaction.getData().toString(); return (
- {isNft && type && ( - - )} + -
- {shouldShowAmount && ( -
- -
- )} - -
- -
-
+ {data && ( )} diff --git a/src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/ConfirmAmount/ConfirmAmount.tsx b/src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/ConfirmAmount/ConfirmAmount.tsx index fd07d121a..56fee7eaf 100644 --- a/src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/ConfirmAmount/ConfirmAmount.tsx +++ b/src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/ConfirmAmount/ConfirmAmount.tsx @@ -1,56 +1,102 @@ import React from 'react'; -import { DataTestIdsEnum } from 'constants/index'; -import { withStyles, WithStylesImportType } from 'hocs/withStyles'; +import classNames from 'classnames'; + +import { withStyles } from 'hocs/withStyles'; +import { useGetEgldPrice, useGetTokenDetails } from 'hooks'; +import { ActiveLedgerTransactionType } from 'types'; +import { NftEnumType } from 'types/tokens.types'; import { LoadingDots } from 'UI/LoadingDots'; -import { TokenDetails } from 'UI/TokenDetails'; -import { UsdValue } from 'UI/UsdValue'; -import { TokenAvatar, TokenAvatarPropsType } from '../TokenAvatar'; -export interface ConfirmAmountPropsType { - token: string; - formattedAmount: string; - rawAmount: string; - tokenAvatar?: string; - tokenType: TokenAvatarPropsType['type']; - tokenPrice?: number | null; +import { WithStylesImportType } from '../../../../../../hocs/useStyles'; + +import { + ConfirmAmountData, + ConfirmAmountLabel, + ConfirmAmountNftSft +} from './components'; +import { useHandleAmountReference } from './hooks'; + +export interface ConfirmAmountPropsType extends WithStylesImportType { + currentTransaction: ActiveLedgerTransactionType; } const ConfirmAmountComponent = ({ - token, - tokenAvatar, - tokenType, - formattedAmount, - rawAmount, - tokenPrice, - styles -}: ConfirmAmountPropsType & WithStylesImportType) => { - const isValidTokenPrice = tokenPrice != null; - const isLoadingTokenPrice = !isValidTokenPrice && tokenPrice !== null; + styles, + currentTransaction +}: ConfirmAmountPropsType) => { + const { tokenId, nonce, amount } = currentTransaction.transactionTokenInfo; + const { isFontSizeLoading, handleAmountReference } = + useHandleAmountReference(); + + // If the token has a nonce means that this is an NFT. Eg: TokenId=TOKEN-1hfr, nonce=123 => NFT id=TOKEN-1hfr-123 + const tokenIdForTokenDetails = + nonce && nonce.length > 0 ? `${tokenId}-${nonce}` : tokenId; + + const tokenDetails = useGetTokenDetails({ + tokenId: tokenIdForTokenDetails + }); + + const { price: egldPrice } = useGetEgldPrice(); + const { + type, + esdtPrice, + isLoading: isTokenDetailsLoading, + identifier + } = tokenDetails; + + const isEgld = !tokenId; + const tokenPrice = isEgld ? egldPrice : esdtPrice; + const isNftOrSft = type + ? [NftEnumType.SemiFungibleESDT, NftEnumType.NonFungibleESDT].includes(type) + : false; return ( -
- Amount +
+
+ {isTokenDetailsLoading ? ( + + ) : ( + + )} +
-
- +
+
- {formattedAmount} + {isNftOrSft ? ( + + ) : ( + + )}
- - {isLoadingTokenPrice && } - {isValidTokenPrice && ( - - )}
); }; diff --git a/src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/ConfirmAmount/components/ConfirmAmountData/ConfirmAmountData.tsx b/src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/ConfirmAmount/components/ConfirmAmountData/ConfirmAmountData.tsx new file mode 100644 index 000000000..32ec7c925 --- /dev/null +++ b/src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/ConfirmAmount/components/ConfirmAmountData/ConfirmAmountData.tsx @@ -0,0 +1,114 @@ +import React from 'react'; +import { faCoins } from '@fortawesome/free-solid-svg-icons'; +import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; +import classNames from 'classnames'; + +import { DataTestIdsEnum } from 'constants/index'; +import { withStyles } from 'hocs/withStyles'; +import { TokenOptionType, useGetNetworkConfig } from 'hooks'; +import { ActiveLedgerTransactionType } from 'types'; +import { Balance } from 'UI/Balance'; +import { UsdValue } from 'UI/UsdValue'; +import { formatAmount } from 'utils'; + +import { WithStylesImportType } from '../../../../../../../../hocs/useStyles'; + +export interface ConfirmAmountDataPropsType extends WithStylesImportType { + isEgld: boolean; + tokenPrice?: number; + isNftOrSft: boolean; + amount: string; + handleReference: (element: HTMLElement | null) => void; + currentTransaction: ActiveLedgerTransactionType; + tokenDetails: TokenOptionType; +} + +const ConfirmAmountDataComponent = ({ + isEgld, + styles, + tokenPrice, + isNftOrSft, + handleReference, + currentTransaction, + amount, + tokenDetails +}: ConfirmAmountDataPropsType) => { + const { network } = useGetNetworkConfig(); + const { tokenAvatar, tokenDecimals, identifier } = tokenDetails; + + const getFormattedAmount = ({ addCommas }: { addCommas: boolean }) => + formatAmount({ + input: isEgld + ? currentTransaction.transaction.getValue().toString() + : amount, + decimals: isEgld ? Number(network.decimals) : tokenDecimals, + digits: Number(network.digits), + showLastNonZeroDecimal: false, + addCommas + }); + + const formattedAmount = getFormattedAmount({ addCommas: true }); + const rawAmount = getFormattedAmount({ addCommas: false }); + + return ( +
+
+ {!isEgld && tokenAvatar && ( + + )} + + {!isEgld && !tokenAvatar && ( +
+ +
+ )} + +
+ +
+
+ + {!isNftOrSft && tokenPrice && ( + + )} + + {!isNftOrSft && !tokenPrice && ( +
Price Unknown
+ )} +
+ ); +}; + +export const ConfirmAmountData = withStyles(ConfirmAmountDataComponent, { + ssrStyles: () => + import( + 'UI/SignTransactionsModals/SignWithDeviceModal/components/components/ConfirmAmount/components/ConfirmAmountData/confirmAmountDataStyles.scss' + ), + clientStyles: () => + require('UI/SignTransactionsModals/SignWithDeviceModal/components/components/ConfirmAmount/components/ConfirmAmountData/confirmAmountDataStyles.scss') + .default +}); diff --git a/src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/ConfirmAmount/components/ConfirmAmountData/confirmAmountDataStyles.scss b/src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/ConfirmAmount/components/ConfirmAmountData/confirmAmountDataStyles.scss new file mode 100644 index 000000000..519771fd3 --- /dev/null +++ b/src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/ConfirmAmount/components/ConfirmAmountData/confirmAmountDataStyles.scss @@ -0,0 +1,48 @@ +.confirmAmountData { + display: flex; + flex-direction: column; + height: 48px; + justify-content: space-between; + + .confirmAmountDataWrapper { + display: flex; + align-items: center; + gap: 4px; + + .confirmAmountDataIcon { + width: 32px; + height: 32px; + + &.confirmAmountDataIconDefault { + padding: 10px; + display: flex; + align-items: center; + justify-content: center; + border-radius: 50%; + border: 1px solid #737373; + } + + .confirmAmountDataIconDefaultIcon { + color: #ffffff; + } + } + + .confirmAmountDataBalanceWrapper { + flex: 1; + min-width: 0; + display: flex; + + .confirmAmountDataBalance { + display: inline-flex; + color: #0ac2ae; + font-weight: 500; + font-size: 32px; + } + } + } + + .confirmAmountDataPrice { + color: #737373; + font-size: 1rem; + } +} diff --git a/src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/ConfirmAmount/components/ConfirmAmountData/index.ts b/src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/ConfirmAmount/components/ConfirmAmountData/index.ts new file mode 100644 index 000000000..d9c1276b5 --- /dev/null +++ b/src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/ConfirmAmount/components/ConfirmAmountData/index.ts @@ -0,0 +1 @@ +export * from './ConfirmAmountData'; diff --git a/src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/ConfirmAmount/components/ConfirmAmountLabel/ConfirmAmountLabel.tsx b/src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/ConfirmAmount/components/ConfirmAmountLabel/ConfirmAmountLabel.tsx new file mode 100644 index 000000000..f59f59fc5 --- /dev/null +++ b/src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/ConfirmAmount/components/ConfirmAmountLabel/ConfirmAmountLabel.tsx @@ -0,0 +1,64 @@ +import React from 'react'; +import BigNumber from 'bignumber.js'; + +import { DataTestIdsEnum } from 'constants/index'; +import { withStyles } from 'hocs/withStyles'; +import { NftEnumType } from 'types/tokens.types'; + +import { WithStylesImportType } from '../../../../../../../../hocs/useStyles'; + +interface ConfirmAmountLabelPropsType extends WithStylesImportType { + type?: NftEnumType; + amount: string; + identifier?: string; +} + +const ConfirmAmountLabelComponent = ({ + amount, + styles, + type, + identifier +}: ConfirmAmountLabelPropsType) => { + const amountBigNumber = new BigNumber(amount); + const isAmountZero = amountBigNumber.isZero(); + const sftLabel = amountBigNumber.isEqualTo(1) ? 'SFT' : 'SFTs'; + const amountToLocaleString = amountBigNumber.toNumber().toLocaleString('en'); + const dataValue = `${amountToLocaleString} ${identifier}`; + + if (isAmountZero) { + return
You are using
; + } + + if (type === NftEnumType.NonFungibleESDT) { + return ( +
You are sending an NFT
+ ); + } + + if (type === NftEnumType.SemiFungibleESDT) { + return ( +
+ You are sending + + {amountToLocaleString} {sftLabel} + +
+ ); + } + + return
You are sending
; +}; + +export const ConfirmAmountLabel = withStyles(ConfirmAmountLabelComponent, { + ssrStyles: () => + import( + 'UI/SignTransactionsModals/SignWithDeviceModal/components/components/ConfirmAmount/components/ConfirmAmountLabel/confirmAmountLabelStyles.scss' + ), + clientStyles: () => + require('UI/SignTransactionsModals/SignWithDeviceModal/components/components/ConfirmAmount/components/ConfirmAmountLabel/confirmAmountLabelStyles.scss') + .default +}); diff --git a/src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/ConfirmAmount/components/ConfirmAmountLabel/confirmAmountLabelStyles.scss b/src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/ConfirmAmount/components/ConfirmAmountLabel/confirmAmountLabelStyles.scss new file mode 100644 index 000000000..acca1f19b --- /dev/null +++ b/src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/ConfirmAmount/components/ConfirmAmountLabel/confirmAmountLabelStyles.scss @@ -0,0 +1,10 @@ +.confirmAmountLabel { + color: #a3a3a3; + display: flex; + align-items: center; + gap: 4px; + + .confirmAmountLabelValue { + color: #a5fcf0; + } +} diff --git a/src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/ConfirmAmount/components/ConfirmAmountLabel/index.ts b/src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/ConfirmAmount/components/ConfirmAmountLabel/index.ts new file mode 100644 index 000000000..3125dc2b2 --- /dev/null +++ b/src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/ConfirmAmount/components/ConfirmAmountLabel/index.ts @@ -0,0 +1 @@ +export * from './ConfirmAmountLabel'; diff --git a/src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/ConfirmAmount/components/ConfirmAmountNftSft/ConfirmAmountNftSft.tsx b/src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/ConfirmAmount/components/ConfirmAmountNftSft/ConfirmAmountNftSft.tsx new file mode 100644 index 000000000..67824b69a --- /dev/null +++ b/src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/ConfirmAmount/components/ConfirmAmountNftSft/ConfirmAmountNftSft.tsx @@ -0,0 +1,119 @@ +import React, { MouseEvent } from 'react'; +import { faArrowUpRightFromSquare } from '@fortawesome/free-solid-svg-icons'; +import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; +import { safeWindow } from '@multiversx/sdk-web-wallet-cross-window-provider/out/constants'; +import classNames from 'classnames'; + +import { DataTestIdsEnum } from 'constants/index'; +import { withStyles } from 'hocs/withStyles'; +import { TokenOptionType, useGetNetworkConfig } from 'hooks'; +import { NftEnumType } from 'types/tokens.types'; +import { + explorerUrlBuilder, + getExplorerLink +} from 'utils/transactions/getInterpretedTransaction/helpers'; + +import { WithStylesImportType } from '../../../../../../../../hocs/useStyles'; + +export interface ConfirmAmountNftSftPropsType extends WithStylesImportType { + type?: NftEnumType; + amount: string; + tokenDetails: TokenOptionType; +} + +const ConfirmAmountNftSftComponent = ({ + styles, + amount, + type, + tokenDetails +}: ConfirmAmountNftSftPropsType) => { + const { network } = useGetNetworkConfig(); + const { identifier, tokenAvatar, name } = tokenDetails; + + const isSft = NftEnumType.SemiFungibleESDT === type; + const mirroredSftAvatarsCount = 4; + const duplicatedSftAvatars = Array( + Math.min(mirroredSftAvatarsCount, Number(amount)) + ).fill(null); + + const handleNftSftClick = (event: MouseEvent) => { + if (!identifier) { + return; + } + + const explorerLink = getExplorerLink({ + explorerAddress: network.explorerAddress, + to: explorerUrlBuilder.nftDetails(identifier) + }); + + event.preventDefault(); + event.stopPropagation(); + + if (safeWindow.open) { + safeWindow.open(explorerLink); + } + }; + + return ( +
+
+ {tokenAvatar ? ( +
+ {duplicatedSftAvatars.map((_, index) => ( + {type} + ))} +
+ ) : ( +
+
+ {isSft ? 'SFT' : 'NFT'} +
+
+ )} + +
+
+ {name} +
+ +
+ {identifier} +
+
+
+ + +
+ ); +}; + +export const ConfirmAmountNftSft = withStyles(ConfirmAmountNftSftComponent, { + ssrStyles: () => + import( + 'UI/SignTransactionsModals/SignWithDeviceModal/components/components/ConfirmAmount/components/ConfirmAmountNftSft/confirmAmountNftSftStyles.scss' + ), + clientStyles: () => + require('UI/SignTransactionsModals/SignWithDeviceModal/components/components/ConfirmAmount/components/ConfirmAmountNftSft/confirmAmountNftSftStyles.scss') + .default +}); diff --git a/src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/ConfirmAmount/components/ConfirmAmountNftSft/confirmAmountNftSftStyles.scss b/src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/ConfirmAmount/components/ConfirmAmountNftSft/confirmAmountNftSftStyles.scss new file mode 100644 index 000000000..c3d413835 --- /dev/null +++ b/src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/ConfirmAmount/components/ConfirmAmountNftSft/confirmAmountNftSftStyles.scss @@ -0,0 +1,68 @@ +.confirmAmountNftSft { + display: flex; + cursor: pointer; + justify-content: space-between; + align-items: center; + + &:hover .confirmAmountNftSftIcon { + color: #0ac2ae; + } + + .confirmAmountNftSftWrapper { + gap: 8px; + display: flex; + align-items: center; + + .confirmAmountNftSftIconWrapper { + position: relative; + + .confirmAmountNftSftIcon { + position: absolute; + top: 0; + left: 0; + width: 48px; + overflow: hidden; + border-radius: 8px; + height: 48px; + border: 1px solid #2e2e2e; + + &.confirmAmountNftSftIconRelative { + position: relative; + } + } + + .confirmAmountNftSftIconText { + width: 48px; + height: 48px; + display: flex; + align-items: center; + justify-content: center; + border-radius: 8px; + border: 1px solid #737373; + color: #ffffff; + } + } + + .confirmAmountNftSftContent { + display: flex; + flex-direction: column; + gap: 4px; + + .confirmAmountNftSftName { + font-size: 16px; + color: #e5e5e5; + line-height: 1; + } + + .confirmAmountNftSftTicker { + color: #525252; + font-size: 10px; + } + } + } + + .confirmAmountNftSftIcon { + color: #525252; + transition: all 200ms ease-out; + } +} diff --git a/src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/ConfirmAmount/components/ConfirmAmountNftSft/index.ts b/src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/ConfirmAmount/components/ConfirmAmountNftSft/index.ts new file mode 100644 index 000000000..f23336fa6 --- /dev/null +++ b/src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/ConfirmAmount/components/ConfirmAmountNftSft/index.ts @@ -0,0 +1 @@ +export * from './ConfirmAmountNftSft'; diff --git a/src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/ConfirmAmount/components/index.ts b/src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/ConfirmAmount/components/index.ts new file mode 100644 index 000000000..82bba3c33 --- /dev/null +++ b/src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/ConfirmAmount/components/index.ts @@ -0,0 +1,3 @@ +export * from './ConfirmAmountLabel'; +export * from './ConfirmAmountData'; +export * from './ConfirmAmountNftSft'; diff --git a/src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/ConfirmAmount/confirmAmountStyles.scss b/src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/ConfirmAmount/confirmAmountStyles.scss index 350a06ca6..a591bbc5c 100644 --- a/src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/ConfirmAmount/confirmAmountStyles.scss +++ b/src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/ConfirmAmount/confirmAmountStyles.scss @@ -1,33 +1,38 @@ -.amount { +.confirmAmount { display: flex; flex-direction: column; - text-align: left; + line-height: 1; + gap: 8px; - .label { - margin-bottom: 8px; - color: #a3a3a3; - font-size: 12px; - line-height: 1; - font-weight: 400; - display: block; - } + .confirmAmountWrapper { + height: 48px; + position: relative; - .token { - display: flex; - align-items: center; + .confirmAmountLoading { + opacity: 0; + pointer-events: none; + position: absolute; + left: 0; + top: 0; + right: 0; + bottom: 0; - .value { - font-size: 14px; - font-weight: 500; - color: #e5e5e5; - line-height: 1.5; + &.confirmAmountLoadingVisible { + opacity: 1; + } } - } - .price { - font-size: 12px; - color: #737373; - line-height: 1; - margin-top: 8px; + .confirmAmountContent { + position: absolute; + left: 0; + top: 0; + right: 0; + bottom: 0; + + &.confirmAmountContentHidden { + pointer-events: none; + opacity: 0; + } + } } } diff --git a/src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/ConfirmAmount/hooks/index.ts b/src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/ConfirmAmount/hooks/index.ts new file mode 100644 index 000000000..7f4a1dea0 --- /dev/null +++ b/src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/ConfirmAmount/hooks/index.ts @@ -0,0 +1 @@ +export * from './useHandleAmountReference'; diff --git a/src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/ConfirmAmount/hooks/useHandleAmountReference.ts b/src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/ConfirmAmount/hooks/useHandleAmountReference.ts new file mode 100644 index 000000000..6f810480e --- /dev/null +++ b/src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/ConfirmAmount/hooks/useHandleAmountReference.ts @@ -0,0 +1,47 @@ +import { useState } from 'react'; + +/* + * Hook that handles the font size of the amount, scaling it down based on the available size, and updating the state when it finished. + */ + +export const useHandleAmountReference = () => { + const [isFontSizeLoading, setIsFontSizeLoading] = useState(true); + + const getElementWidth = (element: HTMLElement) => + element.getBoundingClientRect().width; + + const getFontSize = (element: HTMLElement) => + parseInt(getComputedStyle(element).getPropertyValue('font-size')); + + const handleAmountReference = (element: HTMLElement | null) => { + if (!element) { + return; + } + + const firstChild = element.firstChild as HTMLElement; + const sizes = { + parent: element.offsetWidth, + firstChild: getFontSize(firstChild) + }; + + if (!firstChild) { + return; + } + + while (sizes.parent < getElementWidth(firstChild)) { + const updatedSize = sizes.firstChild - 0.1; + const updatedFontSize = { fontSize: `${updatedSize}px` }; + const updatedSizesObject = { firstChild: updatedSize }; + + Object.assign(firstChild.style, updatedFontSize); + Object.assign(sizes, updatedSizesObject); + } + + setIsFontSizeLoading(false); + }; + + return { + isFontSizeLoading, + handleAmountReference + }; +}; diff --git a/src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/ConfirmFee/ConfirmFee.tsx b/src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/ConfirmFee/ConfirmFee.tsx index eba0d2a61..67a08934f 100644 --- a/src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/ConfirmFee/ConfirmFee.tsx +++ b/src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/ConfirmFee/ConfirmFee.tsx @@ -1,5 +1,6 @@ import React from 'react'; import { Transaction } from '@multiversx/sdk-core/out'; + import { DataTestIdsEnum, GAS_PER_DATA_BYTE, @@ -7,25 +8,26 @@ import { } from 'constants/index'; import { withStyles, WithStylesImportType } from 'hocs/withStyles'; import { useGetEgldPrice } from 'hooks'; -import { FormatAmount } from 'UI/FormatAmount'; +import { Balance } from 'UI/Balance'; import { LoadingDots } from 'UI/LoadingDots'; -import { calculateFeeInFiat, calculateFeeLimit } from 'utils/operations'; -import { TokenAvatar } from '../TokenAvatar'; +import { getEgldLabel } from 'utils'; +import { + calculateFeeInFiat, + calculateFeeLimit, + formatAmount +} from 'utils/operations'; export interface FeePropsType { transaction: Transaction; - egldLabel: string; - tokenAvatar?: string; } const ConfirmFeeComponent = ({ transaction, - tokenAvatar, - egldLabel, styles }: FeePropsType & WithStylesImportType) => { const { price } = useGetEgldPrice(); + const egldLabel = getEgldLabel(); const feeLimit = calculateFeeLimit({ gasPerDataByte: String(GAS_PER_DATA_BYTE), gasPriceModifier: String(GAS_PRICE_MODIFIER), @@ -35,33 +37,51 @@ const ConfirmFeeComponent = ({ chainId: transaction.getChainID().valueOf() }); - return ( -
- Fee + const feeLimitFormatted = formatAmount({ + input: feeLimit, + showLastNonZeroDecimal: true + }); -
- + const feeInFiatLimit = price + ? calculateFeeInFiat({ + feeLimit, + egldPriceInUsd: price, + hideEqualSign: true + }) + : null; -
- -
-
+ return ( +
+
Transaction Fee
- - {price ? ( - calculateFeeInFiat({ - feeLimit, - egldPriceInUsd: price - }) +
+ + + {feeInFiatLimit ? ( + + ( + + ) + ) : ( - + + + )} - +
); }; diff --git a/src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/ConfirmFee/confirmFeeStyles.scss b/src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/ConfirmFee/confirmFeeStyles.scss index 6b7f37c32..b6a838c7e 100644 --- a/src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/ConfirmFee/confirmFeeStyles.scss +++ b/src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/ConfirmFee/confirmFeeStyles.scss @@ -1,33 +1,30 @@ -.fee { +.confirmFee { display: flex; flex-direction: column; - text-align: left; + line-height: 1; + gap: 8px; - .label { - margin-bottom: 8px; + .confirmFeeLabel { color: #a3a3a3; - font-size: 12px; - line-height: 1; - font-weight: 400; - display: block; } - .token { + .confirmFeeData { display: flex; align-items: center; + gap: 8px; - .value { - font-size: 14px; - font-weight: 500; - line-height: 1.5; - color: #e5e5e5; - } - } + .confirmFeeDataPriceWrapper { + display: flex; + align-items: center; + color: #737373; - .price { - font-size: 12px; - color: #737373; - line-height: 1; - margin-top: 8px; + .confirmFeeDataPrice { + color: #737373; + + * { + opacity: 1 !important; + } + } + } } } diff --git a/src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/ConfirmReceiver/ConfirmReceiver.tsx b/src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/ConfirmReceiver/ConfirmReceiver.tsx index 9b3389e2f..cefa709c5 100644 --- a/src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/ConfirmReceiver/ConfirmReceiver.tsx +++ b/src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/ConfirmReceiver/ConfirmReceiver.tsx @@ -1,30 +1,39 @@ import React from 'react'; import { faExclamationTriangle } from '@fortawesome/free-solid-svg-icons'; import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; -import classNames from 'classnames'; +import BigNumber from 'bignumber.js'; + +import { ACCOUNTS_ENDPOINT } from 'apiCalls'; +import MultiversXIconSimple from 'assets/icons/mvx-icon-simple.svg'; import { DataTestIdsEnum } from 'constants/index'; -import { withStyles, WithStylesImportType } from 'hocs/withStyles'; +import { withStyles } from 'hocs/withStyles'; import { useGetAccountFromApi } from 'hooks'; +import { trimUsernameDomain } from 'hooks/account/helpers'; +import { CopyButton } from 'UI/CopyButton'; +import { ExplorerLink } from 'UI/ExplorerLink'; import { LoadingDots } from 'UI/LoadingDots'; -import { isContract } from 'utils/smartContracts'; -import { ReceiverSubValue } from './components/ReceiverSubValue'; -import { ReceiverValue } from './components/ReceiverValue'; +import { Trim } from 'UI/Trim'; +import { isContract } from 'utils'; + +import { WithStylesImportType } from '../../../../../../hocs/useStyles'; -export interface ConfirmReceiverPropsType { +export interface ConfirmReceiverPropsType extends WithStylesImportType { receiver: string; scamReport: string | null; receiverUsername?: string; + amount: string; } const ConfirmReceiverComponent = ({ receiver, scamReport, receiverUsername, + amount, styles -}: ConfirmReceiverPropsType & WithStylesImportType) => { +}: ConfirmReceiverPropsType) => { const isSmartContract = isContract(receiver); - const skipFetchingAccount = Boolean(isSmartContract || receiverUsername); + const isAmountZero = new BigNumber(amount).isZero(); const { account: usernameAccount, @@ -40,43 +49,64 @@ const ConfirmReceiverComponent = ({ return (
- Receiver +
+
+ {isAmountZero ? 'To interact with' : 'To'} +
+ + {scamReport && ( +
+ + {scamReport} + + + +
+ )} +
{usernameAccountLoading ? ( - +
+ +
) : ( - - - - )} + - {usernameAccountLoading ? ( - - ) : ( - - )} + {hasUsername && !isSmartContract && ( + + ( + + {trimUsernameDomain(receiverValue)} + + ) + + )} - {scamReport && ( -
- - + {isSmartContract && ( + + ( + + Smart Contract + + ) + + )} - - {scamReport} - - + +
)}
diff --git a/src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/ConfirmReceiver/components/ReceiverSubValue/ReceiverSubValue.tsx b/src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/ConfirmReceiver/components/ReceiverSubValue/ReceiverSubValue.tsx deleted file mode 100644 index 33fa7c297..000000000 --- a/src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/ConfirmReceiver/components/ReceiverSubValue/ReceiverSubValue.tsx +++ /dev/null @@ -1,63 +0,0 @@ -import React from 'react'; -import { ACCOUNTS_ENDPOINT } from 'apiCalls'; -import { withStyles, WithStylesImportType } from 'hocs/withStyles'; -import { CopyButton } from 'UI/CopyButton'; -import { ExplorerLink } from 'UI/ExplorerLink'; -import { Trim } from 'UI/Trim'; -import { isContract } from 'utils'; - -export interface ReceiverSubValuePropsType { - hasUsername: boolean; - receiver: string; -} - -const ReceiverSubValueComponent = ({ - hasUsername, - receiver, - styles -}: ReceiverSubValuePropsType & WithStylesImportType) => { - const isSmartContract = isContract(receiver); - - if (hasUsername) { - return ( - - - - - ); - } - - if (isSmartContract) { - return ( - - - - - - ); - } - - return ( - - - - - - ); -}; - -export const ReceiverSubValue = withStyles(ReceiverSubValueComponent, { - ssrStyles: () => - import( - 'UI/SignTransactionsModals/SignWithDeviceModal/components/components/ConfirmReceiver/components/ReceiverSubValue/receiverSubValueStyles.scss' - ), - clientStyles: () => - require('UI/SignTransactionsModals/SignWithDeviceModal/components/components/ConfirmReceiver/components/ReceiverSubValue/receiverSubValueStyles.scss') - .default -}); diff --git a/src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/ConfirmReceiver/components/ReceiverSubValue/index.ts b/src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/ConfirmReceiver/components/ReceiverSubValue/index.ts deleted file mode 100644 index 2ae5ec689..000000000 --- a/src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/ConfirmReceiver/components/ReceiverSubValue/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './ReceiverSubValue'; diff --git a/src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/ConfirmReceiver/components/ReceiverSubValue/receiverSubValueStyles.scss b/src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/ConfirmReceiver/components/ReceiverSubValue/receiverSubValueStyles.scss deleted file mode 100644 index 4b9c62332..000000000 --- a/src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/ConfirmReceiver/components/ReceiverSubValue/receiverSubValueStyles.scss +++ /dev/null @@ -1,42 +0,0 @@ -.subValue { - display: flex; - align-items: center; - gap: 8px; - height: 16px; - position: absolute; - right: 0; - bottom: 0; - left: 0; - - .subValueTrim { - line-height: 1; - color: var(--dapp-form-placeholder-color); - font-size: 12px; - display: flex; - align-items: flex-end; - max-width: none; - - [class*='left'] *, - [class*='right'] * { - color: var(--dapp-form-placeholder-color); - font-size: 12px !important; - } - } - - .subValueCopy { - font-size: 12px; - } - - .subValueExplorer { - margin-left: 0; - font-size: 12px; - - svg { - color: var(--dapp-form-placeholder-color) !important; - } - - &:hover svg { - color: var(--dapp-form-btn-bg) !important; - } - } -} diff --git a/src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/ConfirmReceiver/components/ReceiverValue/ReceiverValue.tsx b/src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/ConfirmReceiver/components/ReceiverValue/ReceiverValue.tsx deleted file mode 100644 index 5533c15f8..000000000 --- a/src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/ConfirmReceiver/components/ReceiverValue/ReceiverValue.tsx +++ /dev/null @@ -1,56 +0,0 @@ -import React from 'react'; -import classNames from 'classnames'; -import { ACCOUNTS_ENDPOINT } from 'apiCalls'; -import MultiversXIconSimple from 'assets/icons/mvx-icon-simple.svg'; -import { withStyles, WithStylesImportType } from 'hocs/withStyles'; -import { trimUsernameDomain } from 'hooks/account/helpers'; -import { CopyButton } from 'UI/CopyButton'; -import { ExplorerLink } from 'UI/ExplorerLink'; -import { Trim } from 'UI/Trim'; - -export interface ReceiverValuePropsType { - hasUsername: boolean; - receiverValue: string; - receiverAddress: string; -} - -const ReceiverValueComponent = ({ - hasUsername, - receiverValue, - receiverAddress, - styles -}: ReceiverValuePropsType & WithStylesImportType) => { - if (hasUsername) { - return ( - - - {trimUsernameDomain(receiverValue)} - - - - ); - } - - return ( - - - - - ); -}; - -export const ReceiverValue = withStyles(ReceiverValueComponent, { - ssrStyles: () => - import( - 'UI/SignTransactionsModals/SignWithDeviceModal/components/components/ConfirmReceiver/components/ReceiverValue/receiverValueStyles.scss' - ), - clientStyles: () => - require('UI/SignTransactionsModals/SignWithDeviceModal/components/components/ConfirmReceiver/components/ReceiverValue/receiverValueStyles.scss') - .default -}); diff --git a/src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/ConfirmReceiver/components/ReceiverValue/index.ts b/src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/ConfirmReceiver/components/ReceiverValue/index.ts deleted file mode 100644 index a598659cc..000000000 --- a/src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/ConfirmReceiver/components/ReceiverValue/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './ReceiverValue'; diff --git a/src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/ConfirmReceiver/components/ReceiverValue/receiverValueStyles.scss b/src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/ConfirmReceiver/components/ReceiverValue/receiverValueStyles.scss deleted file mode 100644 index b93c70b77..000000000 --- a/src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/ConfirmReceiver/components/ReceiverValue/receiverValueStyles.scss +++ /dev/null @@ -1,37 +0,0 @@ -.receiverValue { - word-break: break-all; - line-height: 1.5; - height: 16px; - gap: 8px; - display: flex; - align-items: center; - - &.shrunk { - line-height: 1; - height: auto; - } - - .receiverValueIcon { - height: 16px; - position: relative; - width: auto; - top: 1px; - } - - .receiverValueCopy { - font-size: 12px; - } - - .receiverValueExplorer { - margin-left: 0; - font-size: 12px; - - svg { - color: var(--dapp-form-placeholder-color) !important; - } - - &:hover svg { - color: var(--dapp-form-btn-bg) !important; - } - } -} diff --git a/src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/ConfirmReceiver/confirmReceiverStyles.scss b/src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/ConfirmReceiver/confirmReceiverStyles.scss index eede6395b..326cd8092 100644 --- a/src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/ConfirmReceiver/confirmReceiverStyles.scss +++ b/src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/ConfirmReceiver/confirmReceiverStyles.scss @@ -1,41 +1,83 @@ +@import 'assets/sass/variables/variables'; + .receiver { - text-align: left; display: flex; flex-direction: column; + line-height: 1; gap: 8px; - position: relative; - padding-bottom: 24px; - width: 100%; - .valueWrapper { - font-size: 14px; - } + .receiverLabelWrapper { + display: flex; + gap: 8px; - .label { - color: #a3a3a3; - font-size: 12px; - line-height: 1; - font-weight: 400; - display: block; - } + .receiverLabel { + color: #a3a3a3; + } + + .receiverLabelScam { + color: $danger; + line-height: 1; + display: flex; + align-items: center; + gap: 4px; + position: relative; + padding-left: 16px; - .icon { - height: 16px; - position: relative; - width: auto; - top: 1px; + &:before { + top: 50%; + transform: translateY(-50%); + left: 0; + width: 10px; + content: ''; + position: absolute; + height: 1px; + background-color: #a3a3a3; + } + + .receiverLabelScamIcon { + color: $danger; + } + } } - .loadingDots { - font-size: 16px; + .receiverWrapper { + display: flex; + align-items: center; line-height: 1; - height: 16px; + white-space: nowrap; + gap: 8px; + + .receiverData { + color: #737373; + display: flex; + gap: calc(8px / 4); + align-items: center; + + .receiverDataIcon { + width: 10px; + height: auto; + margin-bottom: calc((8px / 4) * -1); + } + } + + .receiverCopy { + color: #737373; + min-width: 1rem; + max-height: 1rem; + } + + .receiverExternal { + margin: 0; + max-height: 1rem; + + &:hover * { + color: #0ac2ae !important; + } - &.absolute { - left: 0; - right: 0; - bottom: 0; - position: absolute; + * { + transition: all 200ms ease; + color: #737373 !important; + } } } } diff --git a/src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/NftSftPreviewComponent/NftSftPreviewComponent.styles.scss b/src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/NftSftPreviewComponent/NftSftPreviewComponent.styles.scss deleted file mode 100644 index 98937652f..000000000 --- a/src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/NftSftPreviewComponent/NftSftPreviewComponent.styles.scss +++ /dev/null @@ -1,93 +0,0 @@ -.preview { - border-radius: 8px; - display: flex; - align-items: center; - cursor: pointer; - overflow: hidden; - background-color: #262626; - - .image { - min-width: 64px; - min-height: 64px; - max-width: 64px; - max-height: 64px; - height: auto; - width: auto; - } - - .content { - padding: 12px; - display: flex; - align-items: center; - justify-content: space-between; - width: 100%; - - .left { - gap: 8px; - line-height: 1; - display: flex; - flex-direction: column; - - .name { - font-size: 12px; - font-weight: 600; - text-align: left; - color: #e5e5e5; - } - - .identifier { - color: #737373; - font-size: 12px; - } - } - - .badge { - line-height: 1; - font-weight: 500; - font-size: 12px; - padding: 4px 8px; - text-transform: uppercase; - border-radius: 4px; - background-color: #171717; - position: relative; - - &:before { - content: ''; - border-radius: 4px; - position: absolute; - inset: 0; - padding: 1px; - mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0); - -webkit-mask-composite: xor; - -webkit-mask: linear-gradient(#fff 0 0) content-box, - linear-gradient(#fff 0 0); - mask-composite: exclude; - pointer-events: none; - } - - &.nft { - color: #fef08a; - - &:before { - background: linear-gradient( - 90deg, - rgba(240, 152, 25, 0.4), - rgba(237, 222, 93, 0.4) - ); - } - } - - &.sft { - color: #fed7aa; - - &:before { - background: linear-gradient( - 90deg, - rgba(240, 77, 25, 0.4), - rgba(237, 136, 93, 0.4) - ); - } - } - } - } -} diff --git a/src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/NftSftPreviewComponent/NftSftPreviewComponent.tsx b/src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/NftSftPreviewComponent/NftSftPreviewComponent.tsx deleted file mode 100644 index 4fd059f2b..000000000 --- a/src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/NftSftPreviewComponent/NftSftPreviewComponent.tsx +++ /dev/null @@ -1,81 +0,0 @@ -import React from 'react'; -import classNames from 'classnames'; -import { DataTestIdsEnum } from 'constants/index'; -import { withStyles, WithStylesImportType } from 'hocs/withStyles'; -import { useGetNetworkConfig } from 'hooks'; -import { NftEnumType } from 'types/tokens.types'; -import { - explorerUrlBuilder, - getExplorerLink -} from 'utils/transactions/getInterpretedTransaction/helpers'; - -export interface NftSftPreviewPropsType { - txType: NftEnumType; - tokenLabel: string; - tokenId: string; - tokenAvatar: string; -} - -export const NftSftPreview = ({ - txType, - tokenLabel, - tokenId, - tokenAvatar, - styles -}: NftSftPreviewPropsType & WithStylesImportType) => { - const { - network: { explorerAddress } - } = useGetNetworkConfig(); - - const badge = txType === NftEnumType.NonFungibleESDT ? 'NFT' : 'SFT'; - const explorerLink = getExplorerLink({ - explorerAddress, - to: explorerUrlBuilder.nftDetails(tokenId) - }); - - return ( - - {tokenLabel} - -
-
-
- {tokenLabel} -
- -
- {tokenId} -
-
-
-
- {badge} -
-
-
-
- ); -}; - -export const NftSftPreviewComponent = withStyles(NftSftPreview, { - ssrStyles: () => - import( - 'UI/SignTransactionsModals/SignWithDeviceModal/components/components/NftSftPreviewComponent/NftSftPreviewComponent.styles.scss' - ), - clientStyles: () => - require('UI/SignTransactionsModals/SignWithDeviceModal/components/components/NftSftPreviewComponent/NftSftPreviewComponent.styles.scss') - .default -}); diff --git a/src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/NftSftPreviewComponent/index.ts b/src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/NftSftPreviewComponent/index.ts deleted file mode 100644 index a3a2fcb5a..000000000 --- a/src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/NftSftPreviewComponent/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './NftSftPreviewComponent'; diff --git a/src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/TokenAvatar/TokenAvatar.tsx b/src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/TokenAvatar/TokenAvatar.tsx deleted file mode 100644 index 14fcc304e..000000000 --- a/src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/TokenAvatar/TokenAvatar.tsx +++ /dev/null @@ -1,59 +0,0 @@ -import React from 'react'; -import { faDiamond } from '@fortawesome/free-solid-svg-icons'; -import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; -import classNames from 'classnames'; -import MultiversXIcon from 'assets/icons/EGLD.svg'; -import { withStyles, WithStylesImportType } from 'hocs/withStyles'; -import { NftEnumType } from 'types/tokens.types'; -import { getEgldLabel } from 'utils/network'; - -export interface TokenAvatarPropsType { - type?: NftEnumType | string; - avatar?: string; -} - -const TokenAvatarComponent = ( - props: TokenAvatarPropsType & WithStylesImportType -) => { - const { avatar, type, styles } = props; - - const egldLabel = getEgldLabel(); - const isNft = type === NftEnumType.NonFungibleESDT; - const isSft = type === NftEnumType.SemiFungibleESDT; - const isEgld = type === egldLabel; - - const tokenIcon = avatar ? ( - {type} - ) : ( - - ); - - if (isNft || isSft) { - return ( -
- {isNft ? 'NFT' : 'SFT'} -
- ); - } - - return ( -
- {isEgld ? : tokenIcon} -
- ); -}; - -export const TokenAvatar = withStyles(TokenAvatarComponent, { - ssrStyles: () => - import( - 'UI/SignTransactionsModals/SignWithDeviceModal/components/components/TokenAvatar/tokenAvatarStyles.scss' - ), - clientStyles: () => - require('UI/SignTransactionsModals/SignWithDeviceModal/components/components/TokenAvatar/tokenAvatarStyles.scss') - .default -}); diff --git a/src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/TokenAvatar/index.ts b/src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/TokenAvatar/index.ts deleted file mode 100644 index cc6924d99..000000000 --- a/src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/TokenAvatar/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './TokenAvatar'; diff --git a/src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/TokenAvatar/tokenAvatarStyles.scss b/src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/TokenAvatar/tokenAvatarStyles.scss deleted file mode 100644 index fcf698954..000000000 --- a/src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/TokenAvatar/tokenAvatarStyles.scss +++ /dev/null @@ -1,61 +0,0 @@ -.tokenAvatar { - width: 20px; - height: 20px; - display: flex; - align-items: center; - justify-content: center; - line-height: 1; - text-transform: uppercase; - border-radius: 50%; - min-width: 20px; - min-height: 20px; - border: 1px solid #737373; - margin-right: 4px; - position: relative; - font-size: 6px; - - &:before { - content: ''; - border-radius: 50%; - position: absolute; - inset: 0; - padding: 1px; - mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0); - -webkit-mask-composite: xor; - -webkit-mask: linear-gradient(#fff 0 0) content-box, - linear-gradient(#fff 0 0); - mask-composite: exclude; - pointer-events: none; - } - - img { - max-width: 100%; - height: auto; - } - - &.tokenAvatarNft { - border: none; - color: #fef08a; - - &:before { - background: linear-gradient( - 90deg, - rgba(240, 152, 25, 0.4), - rgba(237, 222, 93, 0.4) - ); - } - } - - &.tokenAvatarSft { - border: none; - color: #fed7aa; - - &:before { - background: linear-gradient( - 90deg, - rgba(240, 77, 25, 0.4), - rgba(237, 136, 93, 0.4) - ); - } - } -} diff --git a/src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/index.ts b/src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/index.ts new file mode 100644 index 000000000..94d58db4e --- /dev/null +++ b/src/UI/SignTransactionsModals/SignWithDeviceModal/components/components/index.ts @@ -0,0 +1,3 @@ +export * from './ConfirmAmount'; +export * from './ConfirmFee'; +export * from './ConfirmReceiver'; diff --git a/src/UI/SignTransactionsModals/SignWithDeviceModal/components/signStepBodyStyles.scss b/src/UI/SignTransactionsModals/SignWithDeviceModal/components/signStepBodyStyles.scss index 70d19367b..db7e871dc 100644 --- a/src/UI/SignTransactionsModals/SignWithDeviceModal/components/signStepBodyStyles.scss +++ b/src/UI/SignTransactionsModals/SignWithDeviceModal/components/signStepBodyStyles.scss @@ -8,19 +8,6 @@ gap: 32px; display: flex; flex-direction: column; - - .columns { - display: flex; - column-gap: 16px; - row-gap: 32px; - flex-wrap: wrap; - align-items: flex-start; - - .column { - min-width: calc(50% - 8px); - text-align: left; - } - } } .buttons { diff --git a/src/UI/SignTransactionsModals/types/signTransactionsModals.types.ts b/src/UI/SignTransactionsModals/types/signTransactionsModals.types.ts index 609fe0c46..45ca2e5fe 100644 --- a/src/UI/SignTransactionsModals/types/signTransactionsModals.types.ts +++ b/src/UI/SignTransactionsModals/types/signTransactionsModals.types.ts @@ -21,6 +21,7 @@ export interface CustomConfirmScreensType { Ledger?: ScreenType; Extension?: ScreenType; Opera?: ScreenType; + CrossWindow?: ScreenType; WalletConnect?: ScreenType; Wallet?: ScreenType; Extra?: ScreenType; diff --git a/src/UI/TransactionData/TransactionData.tsx b/src/UI/TransactionData/TransactionData.tsx index f0a2b588f..3bedc7f4a 100644 --- a/src/UI/TransactionData/TransactionData.tsx +++ b/src/UI/TransactionData/TransactionData.tsx @@ -2,6 +2,7 @@ import React from 'react'; import classNames from 'classnames'; import { DataTestIdsEnum, N_A } from 'constants/index'; import { withStyles, WithStylesImportType } from 'hocs/withStyles'; +import { CopyButton } from 'UI/CopyButton'; import { decodePart } from 'utils/decoders/decodePart'; import { getUnHighlightedDataFieldParts } from 'utils/transactions/getUnHighlightedDataFieldParts'; import { WithClassnameType } from '../types'; @@ -49,6 +50,14 @@ const TransactionDataComponent = ({ const occurrences = isHighlightedData ? allOccurences(data, highlight) : []; const showHighlight = isHighlightedData && occurrences.length > 0; + const handleElementReference = (element: HTMLElement | null) => { + if (!element) { + return; + } + + element.scrollIntoView(); + }; + if (showHighlight) { switch (true) { case data.startsWith(highlight): { @@ -56,7 +65,7 @@ const TransactionDataComponent = ({ output = ( <> - {highlight} + {highlight} {rest} ); @@ -68,7 +77,12 @@ const TransactionDataComponent = ({ output = ( <> {rest} - {highlight} + + {highlight} + ); break; @@ -85,7 +99,12 @@ const TransactionDataComponent = ({ output = ( <> {start} - {highlight} + + {highlight} + {end} ); @@ -94,49 +113,76 @@ const TransactionDataComponent = ({ } } + const decodedScCall = [ + decodePart(encodedScCall), + ...remainingDataFields + ].join('@'); + return ( <> {encodedScCall && ( -
+
- SC Call + Smart Contract Call -
- {[decodePart(encodedScCall), ...remainingDataFields].join('@')} +
+
+ + {decodedScCall} + + + {data && ( + + )} +
)} -
+
Data -
- {data ? output : N_A} +
+
+ + {data ? output : N_A} + + + {data && ( + + )} +
diff --git a/src/UI/TransactionData/TransactionDataStyles.scss b/src/UI/TransactionData/TransactionDataStyles.scss index 367192fda..85ddde9f6 100644 --- a/src/UI/TransactionData/TransactionDataStyles.scss +++ b/src/UI/TransactionData/TransactionDataStyles.scss @@ -1,24 +1,85 @@ -.data { +.transactionData { display: flex; flex-direction: column; - text-align: left; + line-height: 1; + gap: 8px; - .label { - margin-bottom: 8px; + .transactionDataLabel { color: #a3a3a3; - font-size: 12px; - line-height: 1; - font-weight: 400; - display: block; } - .value { - min-height: 80px; - font-size: 14px; - padding: 12px; - line-height: 1.25; - border-radius: 6px; + .transactionDataValueWrapper { + border-radius: 8px; border: 1px solid #262626; - word-break: break-all; + padding: 4px; + + .transactionDataValue { + min-height: 60px; + line-height: 1.25; + max-height: 60px; + overflow-y: auto; + word-break: break-all; + display: flex; + align-items: flex-start; + gap: 8px; + display: flex; + align-items: flex-start; + padding: 4px; + + &::-webkit-scrollbar, + &::-webkit-scrollbar-track, + &::-webkit-scrollbar-track:hover, + &::-webkit-scrollbar-corner { + background-color: transparent; + } + + &::-webkit-scrollbar { + width: calc(0.5rem + 8px); + } + + &::-webkit-scrollbar-track, + &::-webkit-scrollbar-track:hover { + border: 4px solid transparent; + background-clip: padding-box; + border-radius: 9999px; + background-color: transparent; + } + + &::-webkit-scrollbar-thumb, + &::-webkit-scrollbar-thumb:hover { + border: 4px solid transparent; + background-clip: padding-box; + border-radius: 9999px; + background-color: #404040; + } + + &::-webkit-scrollbar-button { + display: none; + } + + &::-webkit-resizer { + background-color: transparent; + } + + .transactionDataValueText { + flex: 1; + } + + .transactionDataValueCopy { + position: sticky; + min-width: 1rem; + max-width: 1rem; + top: 0; + + &:hover path { + color: #0ac2ae; + } + + path { + color: #737373; + transition: all 200ms ease; + } + } + } } } diff --git a/src/UI/TransactionInfo/components/AddressDetailItem/AddressDetailitem.tsx b/src/UI/TransactionInfo/components/AddressDetailItem/AddressDetailitem.tsx index be3903ed4..53c4ffcbb 100644 --- a/src/UI/TransactionInfo/components/AddressDetailItem/AddressDetailitem.tsx +++ b/src/UI/TransactionInfo/components/AddressDetailItem/AddressDetailitem.tsx @@ -12,7 +12,7 @@ const AddressDetailItemComponent = ({ address, styles }: { address: string } & WithStylesImportType) => ( - +
diff --git a/src/UI/TransactionInfo/components/ScResultsList/ScResultsList.tsx b/src/UI/TransactionInfo/components/ScResultsList/ScResultsList.tsx index 18e9f09e5..aef92cbbc 100644 --- a/src/UI/TransactionInfo/components/ScResultsList/ScResultsList.tsx +++ b/src/UI/TransactionInfo/components/ScResultsList/ScResultsList.tsx @@ -81,10 +81,7 @@ const ScResultsListComponent = ({ {result.value != null && ( - + )} diff --git a/src/UI/TransactionInfo/components/ScrDetailItem/ScrDetailItem.tsx b/src/UI/TransactionInfo/components/ScrDetailItem/ScrDetailItem.tsx index dd4a27983..85f7dd9ba 100644 --- a/src/UI/TransactionInfo/components/ScrDetailItem/ScrDetailItem.tsx +++ b/src/UI/TransactionInfo/components/ScrDetailItem/ScrDetailItem.tsx @@ -13,7 +13,7 @@ const ScrDetailItemComponent = ({ result, styles }: { result: ResultType } & WithStylesImportType) => ( - +
diff --git a/src/UI/TransactionInfo/components/TransactionAction/components/ActionText/index.tsx b/src/UI/TransactionInfo/components/TransactionAction/components/ActionText/index.tsx index 617a515f0..1c4f2d95c 100644 --- a/src/UI/TransactionInfo/components/TransactionAction/components/ActionText/index.tsx +++ b/src/UI/TransactionInfo/components/TransactionAction/components/ActionText/index.tsx @@ -68,7 +68,7 @@ const ActionTextComponent = ({ [styles?.spaced ?? '']: entry.token.length > 1 })} > - + {index < entry.token.length - 1 && ( , diff --git a/src/UI/TransactionInfo/components/TransactionAction/components/ActionToken.tsx b/src/UI/TransactionInfo/components/TransactionAction/components/ActionToken.tsx index 5fa07e262..955ecc495 100644 --- a/src/UI/TransactionInfo/components/TransactionAction/components/ActionToken.tsx +++ b/src/UI/TransactionInfo/components/TransactionAction/components/ActionToken.tsx @@ -82,9 +82,7 @@ const ActionTokenComponent = ({ showLastNonZeroDecimal }); - return ( - - ); + return ; } }; diff --git a/src/UI/TransactionInfo/components/transactionInfoFields/TransactionInfoAge/TransactionInfoAge.tsx b/src/UI/TransactionInfo/components/transactionInfoFields/TransactionInfoAge/TransactionInfoAge.tsx index 8a9f4cf11..eff59e302 100644 --- a/src/UI/TransactionInfo/components/transactionInfoFields/TransactionInfoAge/TransactionInfoAge.tsx +++ b/src/UI/TransactionInfo/components/transactionInfoFields/TransactionInfoAge/TransactionInfoAge.tsx @@ -48,7 +48,7 @@ const TransactionInfoAgeComponent = ({ /> )} - + (true); - - const onCloseModal = async () => { + const onCloseModal = () => { onClose?.(); }; @@ -28,7 +25,7 @@ const WalletConnectLoginContainerComponent = ( } if (!wrapContentInsideModal) { - return ; + return ; } return ( @@ -47,7 +44,7 @@ const WalletConnectLoginContainerComponent = ( onClose={onCloseModal} visible={showLoginModal} > - + ); }; diff --git a/src/UI/walletConnect/WalletConnectLoginContainer/WalletConnectLoginContent/WalletConnectLoginContent.tsx b/src/UI/walletConnect/WalletConnectLoginContainer/WalletConnectLoginContent/WalletConnectLoginContent.tsx index 502502331..c3e339f8d 100644 --- a/src/UI/walletConnect/WalletConnectLoginContainer/WalletConnectLoginContent/WalletConnectLoginContent.tsx +++ b/src/UI/walletConnect/WalletConnectLoginContainer/WalletConnectLoginContent/WalletConnectLoginContent.tsx @@ -27,7 +27,6 @@ const WalletConnectLoginContentComponent = ({ showScamPhishingAlert = true, title = 'Login with the xPortal App', token, - canLoginRef, globalStyles, styles, customRequestMethods = [] @@ -48,7 +47,6 @@ const WalletConnectLoginContentComponent = ({ nativeAuth, onLoginRedirect, logoutRoute, - canLoginRef, customRequestMethods }); @@ -98,12 +96,8 @@ const WalletConnectLoginContentComponent = ({ }, [walletConnectUriV2]); useEffect(() => { - if (canLoginRef?.current === false) { - return; - } - initLoginWithWalletConnectV2(); - }, [canLoginRef?.current]); + }, []); const authorizationInfo = showScamPhishingAlert ? getAuthorizationInfo(token, containerScamPhishingAlertClassName) diff --git a/src/UI/walletConnect/WalletConnectLoginContainer/types.ts b/src/UI/walletConnect/WalletConnectLoginContainer/types.ts index 8b68c11f0..f7dfb61b1 100644 --- a/src/UI/walletConnect/WalletConnectLoginContainer/types.ts +++ b/src/UI/walletConnect/WalletConnectLoginContainer/types.ts @@ -1,16 +1,15 @@ import { ReactNode, MutableRefObject } from 'react'; -import { OnProviderLoginType } from '../../../types'; +import { OnProviderLoginType } from '../../../types/login.types'; import { WithClassnameType } from '../../types'; import { InnerWalletConnectComponentsClassesType } from '../types'; export interface WalletConnectLoginModalPropsType extends OnProviderLoginType, WithClassnameType { - loginButtonText: string; + loginButtonText: ReactNode; customSpinnerComponent?: ReactNode; innerWalletConnectComponentsClasses?: InnerWalletConnectComponentsClassesType; - isWalletConnectV2?: boolean; lead?: string; legacyMessage?: string; logoutRoute?: string; @@ -20,6 +19,8 @@ export interface WalletConnectLoginModalPropsType showScamPhishingAlert?: boolean; title?: string; wrapContentInsideModal?: boolean; - canLoginRef?: MutableRefObject; customRequestMethods?: Array; + // deprecated/not used - kept for compatibility + isWalletConnectV2?: boolean; + canLoginRef?: MutableRefObject; } diff --git a/src/UI/webWallet/CrossWindowLoginButton/CrossWindowLoginButton.tsx b/src/UI/webWallet/CrossWindowLoginButton/CrossWindowLoginButton.tsx new file mode 100644 index 000000000..17161b02d --- /dev/null +++ b/src/UI/webWallet/CrossWindowLoginButton/CrossWindowLoginButton.tsx @@ -0,0 +1,56 @@ +import React, { ReactNode } from 'react'; +import { DataTestIdsEnum } from 'constants/dataTestIds.enum'; +import { useCrossWindowLogin } from 'hooks'; +import { getIsNativeAuthSingingForbidden } from 'services/nativeAuth/helpers'; +import { LoginButton } from 'UI/LoginButton/LoginButton'; +import { OnProviderLoginType } from '../../../types'; +import { WithClassnameType } from '../../types'; + +export interface CrossWindowLoginButtonPropsType + extends WithClassnameType, + OnProviderLoginType { + children?: ReactNode; + buttonClassName?: string; + loginButtonText?: string; + disabled?: boolean; +} + +export const CrossWindowLoginButton: ( + props: CrossWindowLoginButtonPropsType +) => JSX.Element = ({ + token, + className = 'dapp-window-wallet-login', + children, + callbackRoute, + buttonClassName, + nativeAuth, + loginButtonText = 'Window Wallet', + onLoginRedirect, + disabled, + 'data-testid': dataTestId = DataTestIdsEnum.accessCrossWindowWalletBtn +}) => { + const disabledConnectButton = getIsNativeAuthSingingForbidden(token); + const [onInitiateLogin] = useCrossWindowLogin({ + callbackRoute, + token, + onLoginRedirect, + nativeAuth + }); + + const handleLogin = () => { + onInitiateLogin(); + }; + + return ( + + {children} + + ); +}; diff --git a/src/UI/webWallet/CrossWindowLoginButton/index.tsx b/src/UI/webWallet/CrossWindowLoginButton/index.tsx new file mode 100644 index 000000000..6073e729d --- /dev/null +++ b/src/UI/webWallet/CrossWindowLoginButton/index.tsx @@ -0,0 +1 @@ +export * from './CrossWindowLoginButton'; diff --git a/src/apiCalls/accounts/getAccountFromApi.ts b/src/apiCalls/accounts/getAccountFromApi.ts index 434ba3610..51d77a426 100644 --- a/src/apiCalls/accounts/getAccountFromApi.ts +++ b/src/apiCalls/accounts/getAccountFromApi.ts @@ -1,4 +1,4 @@ -import axios from 'axios'; +import { axiosInstance } from 'apiCalls/axiosInstance'; import { ACCOUNTS_ENDPOINT } from 'apiCalls/endpoints'; import { getCleanApiAddress } from 'apiCalls/utils'; import { AccountType } from 'types'; @@ -6,7 +6,7 @@ import { AccountType } from 'types'; export const accountFetcher = (address: string | null) => { const apiAddress = getCleanApiAddress(); const url = `${apiAddress}/${ACCOUNTS_ENDPOINT}/${address}?withGuardianInfo=true`; - return axios.get(url); + return axiosInstance.get(url); }; export async function getAccountFromApi(address?: string) { diff --git a/src/apiCalls/axiosInstance.ts b/src/apiCalls/axiosInstance.ts new file mode 100644 index 000000000..aeee1f38e --- /dev/null +++ b/src/apiCalls/axiosInstance.ts @@ -0,0 +1,96 @@ +import { buildAxiosFetch } from '@lifeomic/axios-fetch'; +import axios, { AxiosRequestConfig, AxiosResponse } from 'axios'; +const fetch = buildAxiosFetch(axios); + +const getFormattedAxiosResponse = async (response: Response, config?: T) => { + if (!response.ok) { + throw new Error(`HTTP error! Status: ${response.status}`); + } + + // Clone the response to be able to read it twice (for status and data) + const clonedResponse = response.clone(); + + // Parse the JSON body asynchronously + const jsonPromise = clonedResponse.json(); + + // Return the standardized response object + const [responseData] = await Promise.all([jsonPromise]); + return { + data: responseData, + status: response.status, + statusText: response.statusText, + headers: response.headers, + config + }; +}; + +async function customPost, D = any>( + url: string, + data?: D, + config?: AxiosRequestConfig | undefined +): Promise { + try { + const response = await fetch(url, { + method: 'POST', + body: data ? JSON.stringify(data) : undefined, + headers: { + 'Content-Type': 'application/json', + ...(config?.headers || {}) + }, + ...config + } as RequestInit); + + return getFormattedAxiosResponse(response, config) as unknown as Promise; + } catch (error) { + console.error('Fetch Error:', error); + throw error; + } +} + +async function customGet, D = any>( + url: string, + config?: AxiosRequestConfig | undefined +): Promise { + try { + const response = await fetch(url, config as RequestInit); + if (!response.ok) { + throw new Error(`HTTP error! Status: ${response.status}`); + } + + return getFormattedAxiosResponse(response, config) as unknown as Promise; + } catch (error) { + console.error('Fetch Error:', error); + throw error; + } +} + +async function customPatch, D = any>( + url: string, + data?: D, + config?: AxiosRequestConfig | undefined +): Promise { + try { + const response = await fetch(url, { + method: 'PATCH', + body: data ? JSON.stringify(data) : undefined, + headers: config?.headers || {}, + ...config + } as RequestInit); + + if (!response.ok) { + throw new Error(`HTTP error! Status: ${response.status}`); + } + + return getFormattedAxiosResponse(response, config) as unknown as Promise; + } catch (error) { + console.error('Fetch Error:', error); + throw error; + } +} + +const axiosInstance = axios.create(); +axiosInstance.get = customGet; +axiosInstance.post = customPost; +axiosInstance.patch = customPatch; + +export { axiosInstance }; diff --git a/src/components/ProviderInitializer/ProviderInitializer.tsx b/src/components/ProviderInitializer/ProviderInitializer.tsx index 69420e943..dbbef9d47 100644 --- a/src/components/ProviderInitializer/ProviderInitializer.tsx +++ b/src/components/ProviderInitializer/ProviderInitializer.tsx @@ -1,5 +1,5 @@ import { useEffect, useRef } from 'react'; -import { getNetworkConfigFromApi } from 'apiCalls'; +import { getEnvironmentForChainId, getNetworkConfigFromApi } from 'apiCalls'; import { useLoginService } from 'hooks/login/useLoginService'; import { useWalletConnectV2Login } from 'hooks/login/useWalletConnectV2Login'; import { @@ -21,6 +21,7 @@ import { tokenLoginSelector } from 'reduxStore/selectors/loginInfoSelectors'; import { + chainIDSelector, networkSelector, walletAddressSelector } from 'reduxStore/selectors/networkConfigSelectors'; @@ -31,7 +32,8 @@ import { setLedgerAccount, setWalletLogin, setChainID, - setTokenLogin + setTokenLogin, + setIsWalletConnectV2Initialized } from 'reduxStore/slices'; import { LoginMethodsEnum } from 'types/enums.types'; import { @@ -43,7 +45,12 @@ import { } from 'utils/account'; import { parseNavigationParams } from 'utils/parseNavigationParams'; import { useWebViewLogin } from '../../hooks/login/useWebViewLogin'; -import { getExtensionProvider, getMultiSigLoginToken } from './helpers'; +import { + getOperaProvider, + getCrossWindowProvider, + getExtensionProvider, + processModifiedAccount +} from './helpers'; import { useSetLedgerProvider } from './hooks'; let initalizingLedger = false; @@ -58,6 +65,7 @@ export function ProviderInitializer() { const ledgerAccount = useSelector(ledgerAccountSelector); const ledgerLogin = useSelector(ledgerLoginSelector); const isLoggedIn = useSelector(isLoggedInSelector); + const chainID = useSelector(chainIDSelector); const tokenLogin = useSelector(tokenLoginSelector); const nativeAuthConfig = tokenLogin?.nativeAuthConfig; @@ -85,7 +93,7 @@ export function ProviderInitializer() { useEffect(() => { initializeProvider(); - }, [loginMethod]); + }, [loginMethod, chainID]); useEffect(() => { fetchAccount(); @@ -162,12 +170,13 @@ export function ProviderInitializer() { const address = await getAddress(); const { clearNavigationHistory, - remainingParams: { signature, multisig } + remainingParams: { signature, multisig, impersonate } } = parseNavigationParams([ 'signature', 'loginToken', 'address', - 'multisig' + 'multisig', + 'impersonate' ]); if (!address) { @@ -177,29 +186,24 @@ export function ProviderInitializer() { return clearNavigationHistory(); } - const loginToken = await getMultiSigLoginToken({ + const account = await processModifiedAccount({ loginToken: tokenLogin?.loginToken, - multisig + extraInfoData: { + multisig, + impersonate + }, + address, + signature, + loginService }); - const accountAddress = loginToken != null ? multisig : address; - - if (loginToken != null) { - loginService.setLoginToken(loginToken); - } - - if (signature) { - loginService.setTokenLoginInfo({ signature, address }); - } - - const account = await getAccount(accountAddress); if (account) { initializedAccountRef.current = true; dispatch(setIsAccountLoading(true)); dispatch( loginAction({ - address: accountAddress, + address: account.address, loginMethod: LoginMethodsEnum.wallet }) ); @@ -231,14 +235,39 @@ export function ProviderInitializer() { async function setOperaProvider() { const address = await getAddress(); - const provider = await getExtensionProvider(address); + const provider = await getOperaProvider(address); if (provider) { setAccountProvider(provider); } } + async function setCrossWindowProvider() { + const address = await getAddress(); + const provider = await getCrossWindowProvider({ + address, + walletUrl: network.walletAddress + }); + if (provider) { + setAccountProvider(provider); + } + } + + async function setWalletConnectV2Provider() { + try { + // Trigger loader until wallet connect has been initialized + dispatch(setIsWalletConnectV2Initialized(true)); + await initWalletConnectV2LoginProvider(false); + } catch { + console.error('Could not initialize WalletConnect'); + } finally { + dispatch(setIsWalletConnectV2Initialized(false)); + } + } + async function initializeProvider() { - if (loginMethod == null || initalizingLedger) { + const isValidEnvironment = getEnvironmentForChainId(chainID); + + if (loginMethod == null || initalizingLedger || !isValidEnvironment) { return; } @@ -251,7 +280,7 @@ export function ProviderInitializer() { } case LoginMethodsEnum.walletconnectv2: { - initWalletConnectV2LoginProvider(false); + setWalletConnectV2Provider(); break; } @@ -265,6 +294,11 @@ export function ProviderInitializer() { break; } + case LoginMethodsEnum.crossWindow: { + setCrossWindowProvider(); + break; + } + case LoginMethodsEnum.extra: { setExternalProviderAsAccountProvider(); break; diff --git a/src/components/ProviderInitializer/helpers/getCrossWindowProvider.ts b/src/components/ProviderInitializer/helpers/getCrossWindowProvider.ts new file mode 100644 index 000000000..89be004ee --- /dev/null +++ b/src/components/ProviderInitializer/helpers/getCrossWindowProvider.ts @@ -0,0 +1,26 @@ +import { CrossWindowProvider } from '@multiversx/sdk-web-wallet-cross-window-provider'; + +export async function getCrossWindowProvider({ + address, + walletUrl +}: { + address: string; + walletUrl: string; +}) { + try { + const provider = CrossWindowProvider.getInstance() + .setAddress(address) + .setWalletUrl(walletUrl); + + const success = await provider.init(); + + if (success) { + return provider; + } else { + console.error('Could not initialise Cross Window Wallet provider'); + } + } catch (err) { + console.error('Unable to login to CrossWindowWalletProvider', err); + } + return null; +} diff --git a/src/components/ProviderInitializer/helpers/getMultiSigLoginToken.ts b/src/components/ProviderInitializer/helpers/getModifiedLoginToken.ts similarity index 77% rename from src/components/ProviderInitializer/helpers/getMultiSigLoginToken.ts rename to src/components/ProviderInitializer/helpers/getModifiedLoginToken.ts index ecc4b4209..3c92e3252 100644 --- a/src/components/ProviderInitializer/helpers/getMultiSigLoginToken.ts +++ b/src/components/ProviderInitializer/helpers/getModifiedLoginToken.ts @@ -4,14 +4,17 @@ import { nativeAuth } from 'services/nativeAuth/nativeAuth'; export interface GetMultiSigLoginTokenType { loginToken?: string; - multisig?: string; + extraInfoData: { + multisig?: string; + impersonate?: string; + }; } -export const getMultiSigLoginToken = async ({ +export const getModifiedLoginToken = async ({ loginToken, - multisig + extraInfoData }: GetMultiSigLoginTokenType) => { - if (loginToken == null || multisig == null) { + if (loginToken == null || Object.keys(extraInfoData).length === 0) { return null; } @@ -29,7 +32,7 @@ export const getMultiSigLoginToken = async ({ }; const tokenLogin = await nativeAuth({ - extraInfo: { ...rest, multisig }, + extraInfo: { ...rest, ...extraInfoData }, expirySeconds: data?.ttl, origin: data?.origin }).initialize({ diff --git a/src/components/ProviderInitializer/helpers/index.ts b/src/components/ProviderInitializer/helpers/index.ts index 43791fb14..7c63611e1 100644 --- a/src/components/ProviderInitializer/helpers/index.ts +++ b/src/components/ProviderInitializer/helpers/index.ts @@ -1,3 +1,5 @@ export * from './getOperaProvider'; export * from './getExtensionProvider'; -export * from './getMultiSigLoginToken'; +export * from './getCrossWindowProvider'; +export * from './processModifiedAccount'; +export * from './getModifiedLoginToken'; diff --git a/src/components/ProviderInitializer/helpers/processModifiedAccount.ts b/src/components/ProviderInitializer/helpers/processModifiedAccount.ts new file mode 100644 index 000000000..a4330198a --- /dev/null +++ b/src/components/ProviderInitializer/helpers/processModifiedAccount.ts @@ -0,0 +1,52 @@ +import { getAccount } from 'utils/account/getAccount'; +import { + getModifiedLoginToken, + GetMultiSigLoginTokenType +} from './getModifiedLoginToken'; + +interface SetMultisigLoginToken extends GetMultiSigLoginTokenType { + signature?: string; + address: string; + loginService: T; +} + +export const processModifiedAccount = async < + T extends { + setLoginToken: (loginToken: string) => void; + setTokenLoginInfo: ({ + address, + signature + }: { + address: string; + signature: string; + }) => string | undefined; + } +>({ + loginToken: token, + extraInfoData, + address, + signature, + loginService +}: SetMultisigLoginToken) => { + const loginToken = await getModifiedLoginToken({ + loginToken: token, + extraInfoData + }); + + const tokenAddress = + extraInfoData.multisig || extraInfoData.impersonate || address; + + const accountAddress = loginToken != null ? tokenAddress : address; + + if (loginToken != null) { + loginService.setLoginToken(loginToken); + } + + if (signature) { + loginService.setTokenLoginInfo({ signature, address }); + } + + const account = await getAccount(accountAddress); + + return account; +}; diff --git a/src/components/ProviderInitializer/helpers/tests/getMultiSigLoginToken.test.ts b/src/components/ProviderInitializer/helpers/tests/getModifiedLoginToken.test.ts similarity index 61% rename from src/components/ProviderInitializer/helpers/tests/getMultiSigLoginToken.test.ts rename to src/components/ProviderInitializer/helpers/tests/getModifiedLoginToken.test.ts index ee07d7e51..d5323da76 100644 --- a/src/components/ProviderInitializer/helpers/tests/getMultiSigLoginToken.test.ts +++ b/src/components/ProviderInitializer/helpers/tests/getModifiedLoginToken.test.ts @@ -1,19 +1,25 @@ -import { getMultiSigLoginToken } from '../getMultiSigLoginToken'; +import { getModifiedLoginToken } from '../getModifiedLoginToken'; describe('getMultiSigLoginToken', () => { test('returns null if loginToken or multisig is null', async () => { - const result = await getMultiSigLoginToken({ + const result = await getModifiedLoginToken({ loginToken: undefined, - multisig: 'erd1qqqqqqqqqqqqqpgq944h7h6mckw6q0d3g223cjz4ytvken86u00sz7carw' + extraInfoData: { + multisig: + 'erd1qqqqqqqqqqqqqpgq944h7h6mckw6q0d3g223cjz4ytvken86u00sz7carw' + } }); expect(result).toBeNull(); }); test('returns null if data or timestamp is missing', async () => { - const result = await getMultiSigLoginToken({ + const result = await getModifiedLoginToken({ loginToken: 'invalidLoginToken', - multisig: 'erd1qqqqqqqqqqqqqpgq944h7h6mckw6q0d3g223cjz4ytvken86u00sz7carw' + extraInfoData: { + multisig: + 'erd1qqqqqqqqqqqqqpgq944h7h6mckw6q0d3g223cjz4ytvken86u00sz7carw' + } }); expect(result).toBeNull(); @@ -23,10 +29,13 @@ describe('getMultiSigLoginToken', () => { const validInput = { loginToken: 'aHR0cHM6Ly9kZXZuZXQueGV4Y2hhbmdlLmNvbQ.d9ee880c609d5fe482a675826eb7e74f707c882e796ec191913a6c18d762685d.86400.eyJ0aW1lc3RhbXAiOjE3MDYxODAwMjd9', - multisig: 'erd1qqqqqqqqqqqqqpgq944h7h6mckw6q0d3g223cjz4ytvken86u00sz7carw' + extraInfoData: { + multisig: + 'erd1qqqqqqqqqqqqqpgq944h7h6mckw6q0d3g223cjz4ytvken86u00sz7carw' + } }; - const result = await getMultiSigLoginToken(validInput); + const result = await getModifiedLoginToken(validInput); const expectedTokenLogin = 'aHR0cHM6Ly9kZXZuZXQueGV4Y2hhbmdlLmNvbQ.d9ee880c609d5fe482a675826eb7e74f707c882e796ec191913a6c18d762685d.86400.eyJtdWx0aXNpZyI6ImVyZDFxcXFxcXFxcXFxcXFxcGdxOTQ0aDdoNm1ja3c2cTBkM2cyMjNjano0eXR2a2VuODZ1MDBzejdjYXJ3IiwidGltZXN0YW1wIjoxNzA2MTgwMDI3fQ'; diff --git a/src/constants/dataTestIds.enum.ts b/src/constants/dataTestIds.enum.ts index 34960b36b..fdb7046cf 100644 --- a/src/constants/dataTestIds.enum.ts +++ b/src/constants/dataTestIds.enum.ts @@ -1,5 +1,6 @@ export enum DataTestIdsEnum { accessWalletBtn = 'accessWalletBtn', + accessCrossWindowWalletBtn = 'accessCrossWindowWalletBtn', addressTableContainer = 'addressTableContainer', closeButton = 'closeButton', confirmAmount = 'confirmAmount', diff --git a/src/hooks/account/index.ts b/src/hooks/account/index.ts index 7b268aa94..55506a8d0 100644 --- a/src/hooks/account/index.ts +++ b/src/hooks/account/index.ts @@ -5,3 +5,4 @@ export * from './useGetIsLoggedIn'; export * from './useGetAccountProvider'; export * from './useGetWebsocketEvent'; export * from './useGetAccountFromApi'; +export * from './useGetIsWalletConnectV2Initialized'; diff --git a/src/hooks/account/useGetIsWalletConnectV2Initialized.ts b/src/hooks/account/useGetIsWalletConnectV2Initialized.ts new file mode 100644 index 000000000..80d6cae41 --- /dev/null +++ b/src/hooks/account/useGetIsWalletConnectV2Initialized.ts @@ -0,0 +1,6 @@ +import { useSelector } from 'reduxStore/DappProviderContext'; +import { isWalletConnectV2InitializedSelector } from 'reduxStore/selectors'; + +export const useGetIsWalletConnectV2Initialized = () => { + return useSelector(isWalletConnectV2InitializedSelector); +}; diff --git a/src/hooks/login/index.ts b/src/hooks/login/index.ts index 4619e41b8..de6d082c6 100644 --- a/src/hooks/login/index.ts +++ b/src/hooks/login/index.ts @@ -1,7 +1,8 @@ export { useExtensionLogin } from './useExtensionLogin'; +export { useOperaLogin } from './useOperaLogin'; +export { useCrossWindowLogin } from './useCrossWindowLogin'; +export { useWebWalletLogin } from './useWebWalletLogin'; export { useGetModalLoginMethods } from './useGetModalLoginMethods'; export { useLedgerLogin } from './useLedgerLogin'; -export { useOperaLogin } from './useOperaLogin'; export { useXaliasLogin } from './useXaliasLogin'; export { useWalletConnectV2Login } from './useWalletConnectV2Login'; -export { useWebWalletLogin } from './useWebWalletLogin'; diff --git a/src/hooks/login/useCrossWindowLogin.ts b/src/hooks/login/useCrossWindowLogin.ts new file mode 100644 index 000000000..3067d63db --- /dev/null +++ b/src/hooks/login/useCrossWindowLogin.ts @@ -0,0 +1,149 @@ +import { useState } from 'react'; + +import { CrossWindowProvider } from '@multiversx/sdk-web-wallet-cross-window-provider'; +import { processModifiedAccount } from 'components/ProviderInitializer/helpers/processModifiedAccount'; +import { SECOND_LOGIN_ATTEMPT_ERROR } from 'constants/errorsMessages'; +import { setAccountProvider } from 'providers/accountProvider'; +import { loginAction } from 'reduxStore/commonActions'; +import { useDispatch, useSelector } from 'reduxStore/DappProviderContext'; +import { networkSelector } from 'reduxStore/selectors/networkConfigSelectors'; +import { setAccount } from 'reduxStore/slices'; +import { + InitiateLoginFunctionType, + LoginHookGenericStateType, + OnProviderLoginType +} from 'types'; +import { LoginMethodsEnum } from 'types/enums.types'; +import { getLatestNonce } from 'utils/account/getLatestNonce'; +import { getIsLoggedIn } from 'utils/getIsLoggedIn'; +import { optionalRedirect } from 'utils/internal'; +import { getWindowLocation } from 'utils/window/getWindowLocation'; +import { useLoginService } from './useLoginService'; + +export type UseCrossWindowLoginReturnType = [ + InitiateLoginFunctionType, + LoginHookGenericStateType +]; + +export const useCrossWindowLogin = ({ + callbackRoute, + token: tokenToSign, + nativeAuth, + onLoginRedirect +}: OnProviderLoginType): UseCrossWindowLoginReturnType => { + const [error, setError] = useState(''); + const [isLoading, setIsLoading] = useState(false); + const hasNativeAuth = nativeAuth != null; + const loginService = useLoginService(nativeAuth); + let token = tokenToSign; + const network = useSelector(networkSelector); + + const dispatch = useDispatch(); + const isLoggedIn = getIsLoggedIn(); + + async function initiateLogin() { + if (isLoggedIn) { + throw new Error(SECOND_LOGIN_ATTEMPT_ERROR); + } + + setIsLoading(true); + const provider: CrossWindowProvider = + CrossWindowProvider.getInstance().setWalletUrl(network.walletAddress); + + try { + const isSuccessfullyInitialized: boolean = await provider.init(); + + if (!isSuccessfullyInitialized) { + console.warn( + 'Something went wrong trying to redirect to wallet login..' + ); + return; + } + + const { origin, pathname } = getWindowLocation(); + const callbackUrl: string = encodeURIComponent( + `${origin}${callbackRoute ?? pathname}` + ); + + if (hasNativeAuth && !token) { + token = await loginService.getNativeAuthLoginToken(); + + // Fetching block failed + if (!token) { + console.warn('Fetching block failed. Login cancelled.'); + return; + } + } + + if (token) { + loginService.setLoginToken(token); + } + + const providerLoginData = { + callbackUrl, + ...(token && { token }) + }; + + const { signature, address, multisig, impersonate } = + await provider.login(providerLoginData); + + setAccountProvider(provider); + + if (!address) { + setIsLoading(false); + console.warn('Login cancelled.'); + return; + } + + const account = await processModifiedAccount({ + loginToken: token, + extraInfoData: { multisig, impersonate }, + address, + signature, + loginService + }); + + if (!account) { + return; + } + + dispatch( + loginAction({ + address: account.address, + loginMethod: LoginMethodsEnum.crossWindow + }) + ); + + dispatch( + setAccount({ + ...account, + nonce: getLatestNonce(account) + }) + ); + + optionalRedirect({ + callbackRoute, + onLoginRedirect, + options: { signature, address: account.address } + }); + } catch (error) { + console.error('error loging in', error); + // TODO: can be any or typed error + setError('error logging in' + (error as any).message); + } finally { + setIsLoading(false); + } + } + + const loginFailed = Boolean(error); + + return [ + initiateLogin, + { + loginFailed, + error, + isLoading: isLoading && !loginFailed, + isLoggedIn: isLoggedIn && !loginFailed + } + ]; +}; diff --git a/src/hooks/login/useWalletConnectV2Login.ts b/src/hooks/login/useWalletConnectV2Login.ts index 7555681ae..1e48fd6ce 100644 --- a/src/hooks/login/useWalletConnectV2Login.ts +++ b/src/hooks/login/useWalletConnectV2Login.ts @@ -1,4 +1,4 @@ -import { MutableRefObject, useEffect, useRef, useState } from 'react'; +import { useEffect, useRef, useState } from 'react'; import { useGetAccountProvider } from 'hooks/account'; import { useUpdateEffect } from 'hooks/useUpdateEffect'; @@ -6,9 +6,8 @@ import { setAccountProvider } from 'providers/accountProvider'; import { emptyProvider, getProviderType } from 'providers/utils'; import { loginAction } from 'reduxStore/commonActions'; import { useDispatch, useSelector } from 'reduxStore/DappProviderContext'; -import { logoutRouteSelector } from 'reduxStore/selectors'; +import { loginMethodSelector, logoutRouteSelector } from 'reduxStore/selectors'; import { - chainIDSelector, walletConnectDeepLinkSelector, walletConnectV2OptionsSelector, walletConnectV2ProjectIdSelector, @@ -16,13 +15,11 @@ import { } from 'reduxStore/selectors/networkConfigSelectors'; import { setWalletConnectLogin } from 'reduxStore/slices'; import { LoginMethodsEnum } from 'types/enums.types'; -import { - LoginHookGenericStateType, - OnProviderLoginType -} from 'types/login.types'; +import { getHasNativeAuth } from 'utils/getHasNativeAuth'; import { getIsLoggedIn } from 'utils/getIsLoggedIn'; import { optionalRedirect } from 'utils/internal'; import { logout } from 'utils/logout'; +import { waitForChainID } from 'utils/waitForChainID'; import { PairingTypes, SessionEventTypes, @@ -30,6 +27,10 @@ import { WalletConnectV2Provider } from 'utils/walletconnect/__sdkWalletconnectProvider'; import { getWindowLocation } from 'utils/window/getWindowLocation'; +import { + LoginHookGenericStateType, + OnProviderLoginType +} from '../../types/login.types'; import { useLoginService } from './useLoginService'; export enum WalletConnectV2Error { @@ -40,12 +41,12 @@ export enum WalletConnectV2Error { connectError = 'Unable to connect', userRejected = 'User rejected connection proposal', userRejectedExisting = 'User rejected existing connection proposal', - errorLogout = 'Unable to remove existing pairing' + errorLogout = 'Unable to remove existing pairing', + invalidChainID = 'Invalid chainID' } export interface InitWalletConnectV2Type extends OnProviderLoginType { logoutRoute?: string; - canLoginRef?: MutableRefObject; customRequestMethods?: Array; } @@ -59,7 +60,7 @@ export interface WalletConnectV2LoginHookCustomStateType { } export type WalletConnectV2LoginHookReturnType = [ - (loginProvider?: boolean) => void, + (loginProvider?: boolean) => Promise, LoginHookGenericStateType, WalletConnectV2LoginHookCustomStateType ]; @@ -70,12 +71,11 @@ export const useWalletConnectV2Login = ({ nativeAuth, onLoginRedirect, logoutRoute: providerLogoutRoute, - canLoginRef: parentCanLoginRef, customRequestMethods = [] }: InitWalletConnectV2Type): WalletConnectV2LoginHookReturnType => { const dispatch = useDispatch(); - const hasNativeAuth = nativeAuth != null; - const loginService = useLoginService(nativeAuth); + const hasNativeAuth = getHasNativeAuth(nativeAuth); + const loginService = useLoginService(hasNativeAuth ? nativeAuth : false); let token = tokenToSign; const [error, setError] = useState(''); @@ -84,19 +84,21 @@ export const useWalletConnectV2Login = ({ const [wcPairings, setWcPairings] = useState< PairingTypes.Struct[] | undefined >([]); + const [sessionProvider, setSessionProvider] = + useState(null); - const { provider, providerType } = useGetAccountProvider(); + const { provider } = useGetAccountProvider(); const walletConnectV2RelayAddress = useSelector(walletConnectV2RelaySelector); const walletConnectV2ProjectId = useSelector( walletConnectV2ProjectIdSelector ); const walletConnectV2Options = useSelector(walletConnectV2OptionsSelector); - const chainId = useSelector(chainIDSelector); const walletConnectDeepLink = useSelector(walletConnectDeepLinkSelector); const dappLogoutRoute = useSelector(logoutRouteSelector); + const loginMethod = useSelector(loginMethodSelector); const providerRef = useRef(provider); - const canLoginRef = parentCanLoginRef ?? useRef(false); const isInitialisingRef = useRef(false); + const mounted = useRef(false); const logoutRoute = providerLogoutRoute ?? dappLogoutRoute ?? '/'; const dappMethods: string[] = [ @@ -129,21 +131,11 @@ export const useWalletConnectV2Login = ({ const handleOnLogin = async () => { try { - const isLoggedIn = getIsLoggedIn(); - const isLoggedInWithDifferentProvider = - isLoggedIn && - providerType && - providerType !== LoginMethodsEnum.walletconnectv2; - - if ( - isInitialisingRef.current || - providerRef.current == null || - isLoggedInWithDifferentProvider - ) { + if (isInitialisingRef.current || providerRef.current == null) { return; } - if (!canLoginRef.current) { + if (!mounted.current) { try { await providerRef.current?.logout(); } catch { @@ -191,10 +183,6 @@ export const useWalletConnectV2Login = ({ }; const cancelLogin = async () => { - if (canLoginRef.current) { - canLoginRef.current = false; - } - const providerType = getProviderType(providerRef.current); if (providerType !== LoginMethodsEnum.walletconnectv2) { @@ -210,7 +198,7 @@ export const useWalletConnectV2Login = ({ } providerRef.current = emptyProvider; - setAccountProvider(emptyProvider); + setSessionProvider(null); } catch { console.warn('Unable to logout'); } @@ -281,41 +269,38 @@ export const useWalletConnectV2Login = ({ }; async function initiateLogin(loginProvider = true) { + const chainId = await waitForChainID({ maxRetries: 15 }); + + if (!chainId) { + setError(WalletConnectV2Error.invalidChainID); + return; + } + if (!walletConnectV2ProjectId || !walletConnectV2RelayAddress) { setError(WalletConnectV2Error.invalidConfig); return; } const isLoggedIn = getIsLoggedIn(); - const isLoggedInWithDifferentProvider = - isLoggedIn && - providerType && - providerType !== LoginMethodsEnum.walletconnectv2; - const cannotLogin = canLoginRef.current === false && !isLoggedIn; + const cannotLogin = mounted.current === false && !isLoggedIn; const isInitialized = providerRef.current?.isInitialized?.(); - if ( - isInitialisingRef.current || - cannotLogin || - isLoggedInWithDifferentProvider || - isInitialized - ) { + if (isInitialisingRef.current || cannotLogin || isInitialized) { return; } isInitialisingRef.current = true; if (providerRef.current?.walletConnector) { - providerRef.current.init(); + await providerRef.current.init(); - setAccountProvider(providerRef.current); + setSessionProvider(providerRef.current); isInitialisingRef.current = false; - canLoginRef.current = true; if (loginProvider) { - generateWcUri(); + await generateWcUri(); } return; @@ -336,14 +321,13 @@ export const useWalletConnectV2Login = ({ ); await newProvider.init(); - setAccountProvider(newProvider); + setSessionProvider(newProvider); providerRef.current = newProvider; isInitialisingRef.current = false; - canLoginRef.current = true; if (loginProvider) { setWcPairings(newProvider.pairings); - generateWcUri(); + await generateWcUri(); } return; @@ -356,6 +340,11 @@ export const useWalletConnectV2Login = ({ } try { + // Do not do any other actions if component is not mounted + if (!mounted.current) { + return; + } + const { uri, approval } = await providerRef.current?.connect({ methods: dappMethods }); @@ -398,28 +387,38 @@ export const useWalletConnectV2Login = ({ } } - useUpdateEffect(() => { - if (!tokenToSign || !providerRef.current?.connect) { - return; - } - - generateWcUri(); - }, [tokenToSign, providerRef.current?.connect]); - - useUpdateEffect(() => { - if (canLoginRef?.current === false) { - cancelLogin(); - } - }, [canLoginRef.current]); - useUpdateEffect(() => { providerRef.current = provider; }, [provider]); + useEffect(() => { + mounted.current = true; + + return () => { + mounted.current = false; + }; + }, []); + useEffect(() => { setIsLoading(!Boolean(wcUri)); }, [wcUri]); + useEffect(() => { + if (!sessionProvider) { + return; + } + + // Check if a new session has been created is already connected + const isConnected = + Boolean(sessionProvider.session) || + loginMethod === LoginMethodsEnum.walletconnectv2; + + // Set new provider only if account is logged in and if walletConnect session is available + if (isConnected && isLoggedIn) { + setAccountProvider(sessionProvider); + } + }, [sessionProvider, isLoggedIn]); + return [ initiateLogin, { diff --git a/src/hooks/transactions/helpers/getAreAllTransactionsSignedByGuardian.ts b/src/hooks/transactions/helpers/getAreAllTransactionsSignedByGuardian.ts index e71e380d6..3a6dd71cf 100644 --- a/src/hooks/transactions/helpers/getAreAllTransactionsSignedByGuardian.ts +++ b/src/hooks/transactions/helpers/getAreAllTransactionsSignedByGuardian.ts @@ -7,10 +7,15 @@ export const getAreAllTransactionsSignedByGuardian = ({ transactions: Transaction[]; isGuarded?: boolean; }) => { - const allSignedByGuardian = isGuarded - ? transactions.every((tx) => - Boolean(tx.getGuardianSignature().toString('hex')) - ) - : true; - return allSignedByGuardian; + if (!isGuarded) { + return true; + } + + if (transactions.length === 0) { + return false; + } + + return transactions.every((tx) => + Boolean(tx.getGuardianSignature().toString('hex')) + ); }; diff --git a/src/hooks/transactions/useGetTokenDetails.tsx b/src/hooks/transactions/useGetTokenDetails.tsx index 2fddd2a85..fc79a825c 100644 --- a/src/hooks/transactions/useGetTokenDetails.tsx +++ b/src/hooks/transactions/useGetTokenDetails.tsx @@ -25,7 +25,7 @@ export interface TokenMediaType { fileSize?: number; } -interface TokenOptionType { +export interface TokenOptionType { tokenLabel: string; tokenDecimals: number; tokenAvatar: string; @@ -33,6 +33,10 @@ interface TokenOptionType { type?: NftEnumType; error?: string; esdtPrice?: number; + ticker?: string; + identifier?: string; + name?: string; + isLoading?: boolean; } interface TokenInfoResponse { @@ -46,6 +50,12 @@ interface TokenInfoResponse { price: number; } +interface TokenInfoResponseDataType { + data?: TokenInfoResponse; + error?: string; + isLoading?: boolean; +} + const fetcher = (url: string) => axios.get(url).then((response) => response.data); @@ -62,8 +72,9 @@ export function useGetTokenDetails({ const { data: selectedToken, - error - }: { data?: TokenInfoResponse; error?: string } = useSwr( + error, + isLoading + }: TokenInfoResponseDataType = useSwr( Boolean(tokenIdentifier) ? `${network.apiAddress}/${tokenEndpoint}/${tokenIdentifier}` : null, @@ -87,12 +98,16 @@ export function useGetTokenDetails({ : ''; return { + isLoading, tokenDecimals: tokenDecimals, tokenLabel, type: selectedToken?.type, tokenAvatar, + identifier: selectedToken?.identifier, assets: selectedToken?.assets, esdtPrice: selectedToken?.price, + ticker: selectedToken?.ticker, + name: selectedToken?.name, error }; } diff --git a/src/hooks/transactions/useSignMultipleTransactions.tsx b/src/hooks/transactions/useSignMultipleTransactions.tsx index 6b7dff1a4..e57aad6ae 100644 --- a/src/hooks/transactions/useSignMultipleTransactions.tsx +++ b/src/hooks/transactions/useSignMultipleTransactions.tsx @@ -157,6 +157,19 @@ export function useSignMultipleTransactions({ } async function sign() { + const existingSignedTransactions = Object.values(signedTransactions ?? {}); + + const alreadySignedByGuardian = getAreAllTransactionsSignedByGuardian({ + isGuarded, + transactions: existingSignedTransactions + }); + + if (isGuarded && alreadySignedByGuardian) { + onTransactionsSignSuccess(existingSignedTransactions); + reset(); + return; + } + if (currentTransaction == null) { return; } @@ -174,7 +187,8 @@ export function useSignMultipleTransactions({ : null; reset(); - return onTransactionsSignError(errorMessage ?? message); + onTransactionsSignError(errorMessage ?? message); + return; } if (!signedTx) { @@ -212,7 +226,7 @@ export function useSignMultipleTransactions({ reset(); } - function signTx() { + async function signTx() { try { if (currentTransaction == null) { return; @@ -224,10 +238,10 @@ export function useSignMultipleTransactions({ return; } - sign(); + await sign(); } catch { // the only way to check if tx has signature is with try catch - sign(); + await sign(); } } @@ -249,12 +263,12 @@ export function useSignMultipleTransactions({ ) ); - function handleSignTransaction() { + async function handleSignTransaction() { if (shouldContinueWithoutSigning) { setCurrentStep((exising) => exising + 1); - } else { - signTx(); + return; } + await signTx(); } function onNext() { diff --git a/src/hooks/transactions/useSignTransactions.tsx b/src/hooks/transactions/useSignTransactions.tsx index d2e91c1b3..b7c810670 100644 --- a/src/hooks/transactions/useSignTransactions.tsx +++ b/src/hooks/transactions/useSignTransactions.tsx @@ -6,6 +6,7 @@ import { } from '@multiversx/sdk-core'; import { ExtensionProvider } from '@multiversx/sdk-extension-provider'; +import { CrossWindowProvider } from '@multiversx/sdk-web-wallet-cross-window-provider'; import uniq from 'lodash/uniq'; import { ERROR_SIGNING, @@ -80,18 +81,25 @@ export const useSignTransactions = () => { function clearSignInfo(sessionId?: string) { const isExtensionProvider = provider instanceof ExtensionProvider; + const isCrossWindowProvider = provider instanceof CrossWindowProvider; dispatch(clearAllTransactionsToSign()); dispatch(clearTransactionsInfoForSessionId(sessionId)); isSigningRef.current = false; - if (!isExtensionProvider) { + if (!isExtensionProvider && !isCrossWindowProvider) { return; } clearTransactionStatusMessage(); - ExtensionProvider.getInstance()?.cancelAction?.(); + + if (isExtensionProvider) { + ExtensionProvider.getInstance()?.cancelAction?.(); + } + if (isCrossWindowProvider) { + CrossWindowProvider.getInstance()?.cancelAction?.(); + } } const onCancel = (errorMessage: string, sessionId?: string) => { @@ -153,6 +161,7 @@ export const useSignTransactions = () => { callbackRoute, customTransactionInformation } = transactionsToSign; + const { redirectAfterSign } = customTransactionInformation; const defaultCallbackUrl = getDefaultCallbackUrl(); const redirectRoute = callbackRoute || defaultCallbackUrl; diff --git a/src/hooks/transactions/useSignTransactionsCommonData.tsx b/src/hooks/transactions/useSignTransactionsCommonData.tsx index d9c49bf22..564131f5e 100644 --- a/src/hooks/transactions/useSignTransactionsCommonData.tsx +++ b/src/hooks/transactions/useSignTransactionsCommonData.tsx @@ -2,6 +2,7 @@ import { useEffect, useState } from 'react'; import { Transaction } from '@multiversx/sdk-core/out'; import { ExtensionProvider } from '@multiversx/sdk-extension-provider'; +import { CrossWindowProvider } from '@multiversx/sdk-web-wallet-cross-window-provider'; import { useGetAccount } from 'hooks/account'; import { useGetAccountProvider } from 'hooks/account/useGetAccountProvider'; import { useParseSignedTransactions } from 'hooks/transactions/useParseSignedTransactions'; @@ -65,16 +66,24 @@ export const useSignTransactionsCommonData = () => { function clearSignInfo(sessionId?: string) { const isExtensionProvider = provider instanceof ExtensionProvider; + const isCrossWindowProvider = provider instanceof CrossWindowProvider; dispatch(clearAllTransactionsToSign()); dispatch(clearTransactionsInfoForSessionId(sessionId)); - if (!isExtensionProvider) { + if (!isExtensionProvider && !isCrossWindowProvider) { return; } clearTransactionStatusMessage(); - ExtensionProvider.getInstance()?.cancelAction?.(); + + if (isExtensionProvider) { + ExtensionProvider.getInstance()?.cancelAction?.(); + } + + if (isCrossWindowProvider) { + CrossWindowProvider.getInstance()?.cancelAction?.(); + } } return { diff --git a/src/hooks/transactions/useSignTransactionsWithDevice.tsx b/src/hooks/transactions/useSignTransactionsWithDevice.tsx index 1fd625f99..c2c427be6 100644 --- a/src/hooks/transactions/useSignTransactionsWithDevice.tsx +++ b/src/hooks/transactions/useSignTransactionsWithDevice.tsx @@ -37,7 +37,7 @@ export interface UseSignTransactionsWithDevicePropsType { export interface UseSignTransactionsWithDeviceReturnType { allTransactions: MultiSignTransactionType[]; - onSignTransaction: () => void; + onSignTransaction: () => Promise; onNext: () => void; onPrev: () => void; onAbort: () => void; @@ -145,7 +145,9 @@ export function useSignTransactionsWithDevice( clearTransactionsToSignWithWarning(sessionId); } - async function handleSignTransaction(transaction: Nullable) { + async function handleSignTransaction( + transaction: Nullable + ): Promise> { const connectedProvider = providerType !== LoginMethodsEnum.ledger ? provider diff --git a/src/providers/accountProvider.ts b/src/providers/accountProvider.ts index 29c4c8112..4543e4184 100644 --- a/src/providers/accountProvider.ts +++ b/src/providers/accountProvider.ts @@ -1,6 +1,7 @@ import { ExtensionProvider } from '@multiversx/sdk-extension-provider'; import { HWProvider } from '@multiversx/sdk-hw-provider'; import { OperaProvider } from '@multiversx/sdk-opera-provider'; +import { CrossWindowProvider } from '@multiversx/sdk-web-wallet-cross-window-provider'; import { WalletProvider } from '@multiversx/sdk-web-wallet-provider'; import { IDappProvider } from 'types'; import { WalletConnectV2Provider } from 'utils/walletconnect/__sdkWalletconnectProvider'; @@ -10,6 +11,7 @@ export type ProvidersType = | IDappProvider | ExtensionProvider | WalletProvider + | CrossWindowProvider | HWProvider | OperaProvider | WalletConnectV2Provider; diff --git a/src/providers/experimentalWebViewProvider/ExperimentalWebviewProvider.ts b/src/providers/experimentalWebViewProvider/ExperimentalWebviewProvider.ts index f21c96149..479f225a7 100644 --- a/src/providers/experimentalWebViewProvider/ExperimentalWebviewProvider.ts +++ b/src/providers/experimentalWebViewProvider/ExperimentalWebviewProvider.ts @@ -3,24 +3,20 @@ import { responseTypeMap } from '@multiversx/sdk-web-wallet-cross-window-provide import { CrossWindowProviderRequestEnums, CrossWindowProviderResponseEnums, - ReplyWithPostMessageType, - RequestPayloadType, - ResponseTypeMap, + PostMessageParamsType, + PostMessageReturnType, + ReplyWithPostMessagePayloadType, SignMessageStatusEnum } from '@multiversx/sdk-web-wallet-cross-window-provider/out/types'; +import { logoutAction } from 'reduxStore/commonActions'; +import { store } from 'reduxStore/store'; import { loginWithNativeAuthToken } from 'services/nativeAuth/helpers/loginWithNativeAuthToken'; import { IDappProvider } from 'types/dappProvider.types'; +import { logout } from 'utils/logout'; import { setExternalProviderAsAccountProvider } from '../accountProvider'; import { getTargetOrigin } from './helpers/getTargetOrigin'; - -type SendPostMessageType = { - type: T; - payload?: RequestPayloadType[keyof RequestPayloadType]; -}; - -const notInitializedError = (caller: string) => () => { - throw new Error(`Unable to perform ${caller}, Provider not initialized`); -}; +import { notInitializedError } from './helpers/notInitializedError'; +import { webviewProviderEventHandler } from './helpers/webviewProviderEventHandler'; /** * This is an experimental provider that uses `postMessage` to communicate with the parent. @@ -37,6 +33,35 @@ export class ExperimentalWebviewProvider implements IDappProvider { return ExperimentalWebviewProvider.instance; } + constructor() { + this.resetState(); + } + + private resetState = () => { + const safeWindow = typeof window !== 'undefined' ? window : ({} as any); + + safeWindow.addEventListener( + 'message', + webviewProviderEventHandler( + CrossWindowProviderResponseEnums.resetStateResponse, + (data) => { + if ( + data.type === CrossWindowProviderResponseEnums.resetStateResponse + ) { + store.dispatch(logoutAction()); + + setTimeout(() => { + this.sendPostMessage({ + type: CrossWindowProviderRequestEnums.finalizeResetStateRequest, + payload: undefined + }); + }, 500); + } + } + ) + ); + }; + init = async () => { return true; }; @@ -47,15 +72,19 @@ export class ExperimentalWebviewProvider implements IDappProvider { logout = async () => { const response = await this.sendPostMessage({ - type: CrossWindowProviderRequestEnums.logoutRequest + type: CrossWindowProviderRequestEnums.logoutRequest, + payload: undefined }); + await logout(); + return Boolean(response.payload.data); }; relogin = async () => { const response = await this.sendPostMessage({ - type: CrossWindowProviderRequestEnums.loginRequest + type: CrossWindowProviderRequestEnums.loginRequest, + payload: undefined }); const { data, error } = response.payload; @@ -84,15 +113,14 @@ export class ExperimentalWebviewProvider implements IDappProvider { payload: transactionsToSign.map((tx) => tx.toPlainObject()) }); - const { data, error } = response.payload; + const { data: signedTransactions, error } = response.payload; - if (error || !data) { + if (error || !signedTransactions) { console.error('Unable to sign transactions'); return null; } - const transactions = data; - return transactions.map((tx) => Transaction.fromPlainObject(tx)); + return signedTransactions.map((tx) => Transaction.fromPlainObject(tx)); }; signTransaction = async (transaction: Transaction) => { @@ -103,7 +131,7 @@ export class ExperimentalWebviewProvider implements IDappProvider { async signMessage(message: SignableMessage): Promise { const response = await this.sendPostMessage({ type: CrossWindowProviderRequestEnums.signMessageRequest, - payload: message + payload: { message: message.message.toString() } }); const { data, error } = response.payload; @@ -127,47 +155,19 @@ export class ExperimentalWebviewProvider implements IDappProvider { action: T ): Promise<{ type: T; - payload: ReplyWithPostMessageType['payload']; + payload: ReplyWithPostMessagePayloadType; }> { return await new Promise((resolve) => { window.addEventListener( 'message', - async function eventHandler( - event: MessageEvent<{ - type: T; - payload: ReplyWithPostMessageType['payload']; - }> - ) { - const { type, payload } = event.data; - - if (event.origin != getTargetOrigin()) { - console.error('origin not accepted', { - eventOrigin: event.origin - }); - return; - } - - const isCurrentAction = - action === type || - type === CrossWindowProviderResponseEnums.cancelResponse; - - if (!isCurrentAction) { - return; - } - - window.removeEventListener('message', eventHandler); - resolve({ type, payload }); - } + webviewProviderEventHandler(action, resolve) ); }); } sendPostMessage = async ( - message: SendPostMessageType - ): Promise<{ - type: ResponseTypeMap[T] | CrossWindowProviderResponseEnums.cancelResponse; - payload: ReplyWithPostMessageType['payload']; - }> => { + message: PostMessageParamsType + ): Promise> => { const safeWindow = typeof window !== 'undefined' ? window : ({} as any); if (safeWindow.ReactNativeWebView) { diff --git a/src/providers/experimentalWebViewProvider/helpers/notInitializedError.ts b/src/providers/experimentalWebViewProvider/helpers/notInitializedError.ts new file mode 100644 index 000000000..ae1a841b8 --- /dev/null +++ b/src/providers/experimentalWebViewProvider/helpers/notInitializedError.ts @@ -0,0 +1,3 @@ +export const notInitializedError = (caller: string) => () => { + throw new Error(`Unable to perform ${caller}, Provider not initialized`); +}; diff --git a/src/providers/experimentalWebViewProvider/helpers/webviewProviderEventHandler.ts b/src/providers/experimentalWebViewProvider/helpers/webviewProviderEventHandler.ts new file mode 100644 index 000000000..648f19b15 --- /dev/null +++ b/src/providers/experimentalWebViewProvider/helpers/webviewProviderEventHandler.ts @@ -0,0 +1,43 @@ +import { + CrossWindowProviderResponseEnums, + ReplyWithPostMessagePayloadType +} from '@multiversx/sdk-web-wallet-cross-window-provider/out/types'; +import { getTargetOrigin } from './getTargetOrigin'; + +export const webviewProviderEventHandler = + ( + action: T, + resolve: (value: { + type: T; + payload: ReplyWithPostMessagePayloadType; + }) => void + ) => + ( + event: MessageEvent<{ + type: T; + payload: ReplyWithPostMessagePayloadType; + }> + ) => { + const { type, payload } = event.data; + + if (event.origin != getTargetOrigin()) { + console.error('origin not accepted', { + eventOrigin: event.origin + }); + return; + } + + const isCurrentAction = + action === type || + type === CrossWindowProviderResponseEnums.cancelResponse; + + if (!isCurrentAction) { + return; + } + + window.removeEventListener( + 'message', + webviewProviderEventHandler(action, resolve) + ); + resolve({ type, payload }); + }; diff --git a/src/providers/utils.ts b/src/providers/utils.ts index 4df334da6..632266408 100644 --- a/src/providers/utils.ts +++ b/src/providers/utils.ts @@ -3,6 +3,7 @@ import { ExtensionProvider } from '@multiversx/sdk-extension-provider'; import { HWProvider } from '@multiversx/sdk-hw-provider'; import { IHWWalletApp } from '@multiversx/sdk-hw-provider/out/interface'; import { OperaProvider } from '@multiversx/sdk-opera-provider'; +import { CrossWindowProvider } from '@multiversx/sdk-web-wallet-cross-window-provider'; import { WalletProvider } from '@multiversx/sdk-web-wallet-provider'; import { LEDGER_CONTRACT_DATA_ENABLED_VALUE } from 'constants/index'; import { IDappProvider } from 'types'; @@ -28,6 +29,8 @@ export const getProviderType = ( return LoginMethodsEnum.extension; case OperaProvider: return LoginMethodsEnum.opera; + case CrossWindowProvider: + return LoginMethodsEnum.crossWindow; case EmptyProvider: return LoginMethodsEnum.none; default: diff --git a/src/reduxStore/selectors/loginInfoSelectors.ts b/src/reduxStore/selectors/loginInfoSelectors.ts index 9bda6aeec..4e46a1498 100644 --- a/src/reduxStore/selectors/loginInfoSelectors.ts +++ b/src/reduxStore/selectors/loginInfoSelectors.ts @@ -44,3 +44,8 @@ export const logoutRouteSelector = createDeepEqualSelector( loginInfoSelector, (state) => state.logoutRoute ); + +export const isWalletConnectV2InitializedSelector = createDeepEqualSelector( + loginInfoSelector, + (state) => state.isWalletConnectV2Initialized +); diff --git a/src/reduxStore/slices/loginInfoSlice.ts b/src/reduxStore/slices/loginInfoSlice.ts index 469b6e099..2a2f09439 100644 --- a/src/reduxStore/slices/loginInfoSlice.ts +++ b/src/reduxStore/slices/loginInfoSlice.ts @@ -32,8 +32,10 @@ export interface LoginInfoStateType { walletLogin: LoginInfoType | null; extensionLogin: LoginInfoType | null; operaLogin: LoginInfoType | null; + crossWindowLogin: LoginInfoType | null; isLoginSessionInvalid: boolean; logoutRoute?: string; + isWalletConnectV2Initialized?: boolean; } const initialState: LoginInfoStateType = { @@ -44,6 +46,7 @@ const initialState: LoginInfoStateType = { walletLogin: null, extensionLogin: null, operaLogin: null, + crossWindowLogin: null, isLoginSessionInvalid: false }; @@ -97,6 +100,12 @@ export const loginInfoSlice = createSlice({ action: PayloadAction ) => { state.logoutRoute = action.payload; + }, + setIsWalletConnectV2Initialized: ( + state: LoginInfoStateType, + action: PayloadAction + ) => { + state.isWalletConnectV2Initialized = action.payload; } }, extraReducers: (builder) => { @@ -125,7 +134,8 @@ export const { setTokenLoginSignature, setWalletLogin, invalidateLoginSession, - setLogoutRoute + setLogoutRoute, + setIsWalletConnectV2Initialized } = loginInfoSlice.actions; export default loginInfoSlice.reducer; diff --git a/src/setupTests.js b/src/setupTests.js index e3f010902..2228ee0ec 100644 --- a/src/setupTests.js +++ b/src/setupTests.js @@ -1,7 +1,7 @@ /************** * MSW config code ***************/ - +import 'isomorphic-fetch'; import { server } from './__mocks__/server'; // Establish API mocking before all tests. diff --git a/src/types/enums.types.ts b/src/types/enums.types.ts index c374fc9f3..e42528d0f 100644 --- a/src/types/enums.types.ts +++ b/src/types/enums.types.ts @@ -36,6 +36,7 @@ export enum LoginMethodsEnum { walletconnect = 'walletconnect', walletconnectv2 = 'walletconnectv2', wallet = 'wallet', + crossWindow = 'crossWindow', extension = 'extension', opera = 'opera', extra = 'extra', @@ -94,6 +95,7 @@ export enum WebViewProviderRequestBaseEnums { signTransactionsWithGuardianResponse = 'SIGN_TRANSACTIONS_WITH_GUARDIAN_RESPONSE', reloginRequest = 'RELOGIN_REQUEST' } + export const WebViewProviderRequestEnums = { ...CrossWindowProviderRequestEnums, ...WebViewProviderRequestBaseEnums diff --git a/src/types/transactions.types.ts b/src/types/transactions.types.ts index 0b1788580..0915229de 100644 --- a/src/types/transactions.types.ts +++ b/src/types/transactions.types.ts @@ -191,7 +191,7 @@ export type DeviceSignedTransactions = Record; export interface GuardianScreenType extends WithClassnameType { address: string; - onSignTransaction: () => void; + onSignTransaction: () => Promise; onPrev: () => void; title?: ReactNode; signStepInnerClasses?: SignStepInnerClassesType; diff --git a/src/utils/getHasNativeAuth/getHasNativeAuth.ts b/src/utils/getHasNativeAuth/getHasNativeAuth.ts new file mode 100644 index 000000000..6090b8ce5 --- /dev/null +++ b/src/utils/getHasNativeAuth/getHasNativeAuth.ts @@ -0,0 +1,25 @@ +import isObject from 'lodash/isObject'; +import { OnProviderLoginType } from '../../types/login.types'; + +const safeWindow = typeof window !== 'undefined' ? window : ({} as Window); +const isDevelopment = safeWindow?.location?.origin?.includes('localhost'); + +export const getHasNativeAuth = ( + nativeAuth: OnProviderLoginType['nativeAuth'] +) => { + const hasNativeAuth = isObject(nativeAuth); + + if (!hasNativeAuth) { + return Boolean(nativeAuth); + } + + const nativeAuthClone = { ...nativeAuth }; + const preventWalletConnectV2Signing = Boolean(isDevelopment); + + if (preventWalletConnectV2Signing) { + delete nativeAuthClone.origin; + } + + const isNativeAuthConfigured = Object.keys(nativeAuthClone).length > 0; + return isNativeAuthConfigured; +}; diff --git a/src/utils/getHasNativeAuth/index.ts b/src/utils/getHasNativeAuth/index.ts new file mode 100644 index 000000000..c7f6d2bd1 --- /dev/null +++ b/src/utils/getHasNativeAuth/index.ts @@ -0,0 +1 @@ +export * from './getHasNativeAuth'; diff --git a/src/utils/index.ts b/src/utils/index.ts index 239857288..a2f538ead 100644 --- a/src/utils/index.ts +++ b/src/utils/index.ts @@ -11,8 +11,8 @@ export * from './math'; export * from './network'; export * from './operations'; export * from './parseNavigationParams'; -export * from './progress'; export * from './platform'; +export * from './progress'; export * from './redirect'; export * from './removeSearchParamsFromUrl'; export * from './retryMultipleTimes'; @@ -24,3 +24,5 @@ export * from './transactions'; export * from './validation'; export * from './websocket'; export * from './window'; +export * from './getHasNativeAuth'; +export * from './waitForChainID'; diff --git a/src/utils/operations/calculateFeeInFiat.ts b/src/utils/operations/calculateFeeInFiat.ts index 0b00d9c92..834bc338c 100644 --- a/src/utils/operations/calculateFeeInFiat.ts +++ b/src/utils/operations/calculateFeeInFiat.ts @@ -3,13 +3,17 @@ import { DIGITS, DECIMALS } from 'constants/index'; import { formatAmount } from './formatAmount'; import { getUsdValue } from './getUsdValue'; -export const calculateFeeInFiat = ({ - feeLimit, - egldPriceInUsd -}: { +export interface CalculateFeeInFiatType { feeLimit: string; egldPriceInUsd: number; -}) => { + hideEqualSign?: boolean; +} + +export const calculateFeeInFiat = ({ + feeLimit, + egldPriceInUsd, + hideEqualSign +}: CalculateFeeInFiatType) => { const amount = formatAmount({ input: feeLimit, decimals: DECIMALS, @@ -17,11 +21,15 @@ export const calculateFeeInFiat = ({ showLastNonZeroDecimal: true }); - const feeInFiat = `≈ ${getUsdValue({ + const feeAsUsdValue = getUsdValue({ amount, usd: egldPriceInUsd, decimals: DIGITS - })}`; + }); + + if (hideEqualSign) { + return feeAsUsdValue; + } - return feeInFiat; + return `≈ ${feeAsUsdValue}`; }; diff --git a/src/utils/platform/detectCurrentPlatform.ts b/src/utils/platform/detectCurrentPlatform.ts index 914856255..d7446764c 100644 --- a/src/utils/platform/detectCurrentPlatform.ts +++ b/src/utils/platform/detectCurrentPlatform.ts @@ -9,5 +9,6 @@ export const detectCurrentPlatform = () => { if (safeWindow.webkit) { return PlatformsEnum.ios; } + return PlatformsEnum.web; }; diff --git a/src/utils/waitForChainID.ts b/src/utils/waitForChainID.ts new file mode 100644 index 000000000..29d919883 --- /dev/null +++ b/src/utils/waitForChainID.ts @@ -0,0 +1,33 @@ +import { getEnvironmentForChainId } from 'apiCalls'; +import { chainIDSelector } from 'reduxStore/selectors'; +import { store } from 'reduxStore/store'; + +export const waitForChainID = ({ + maxRetries +}: { + maxRetries: number; +}): Promise => + new Promise((resolve, reject) => { + let retries = 0; + + // Function to periodically check the value of chainID + const checkChainID = () => { + const chainID = chainIDSelector(store.getState()); + const isValidEnvironment = getEnvironmentForChainId(chainID); + + if (Boolean(isValidEnvironment)) { + resolve(chainID); + return; + } + + if (retries < maxRetries) { + retries++; + setTimeout(checkChainID, 1000); + return; + } + + reject(null); + }; + + checkChainID(); + }); diff --git a/src/wrappers/DappProvider/DappProvider.tsx b/src/wrappers/DappProvider/DappProvider.tsx index 0ed55f4ac..d3284e20d 100644 --- a/src/wrappers/DappProvider/DappProvider.tsx +++ b/src/wrappers/DappProvider/DappProvider.tsx @@ -3,7 +3,7 @@ import { Provider } from 'react-redux'; import { PersistGate } from 'redux-persist/integration/react'; import { ProviderInitializer } from 'components/ProviderInitializer/ProviderInitializer'; import { setExternalProvider } from 'providers/accountProvider'; -import { ExperimentalWebviewProvider } from 'providers/experimentalWebViewProvider'; +import { ExperimentalWebviewProvider } from 'providers/experimentalWebViewProvider/ExperimentalWebviewProvider'; import { webviewProvider } from 'providers/webviewProvider'; import { DappCoreContext } from 'reduxStore/DappProviderContext'; import { persistor, store } from 'reduxStore/store'; diff --git a/yarn.lock b/yarn.lock index afc53d074..f1792a3c2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -13,14 +13,14 @@ integrity sha512-rE0Pygv0sEZ4vBWHlAgJLGDU7Pm8xoO6p3wsEceb7GYAjScrOHpEo8KK/eVkAcnSM+slAEtXjA2JpdjLp4fJQQ== "@ampproject/remapping@^2.1.0", "@ampproject/remapping@^2.2.0": - version "2.2.1" - resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.1.tgz#99e8e11851128b8702cd57c33684f1d0f260b630" - integrity sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg== + version "2.3.0" + resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.3.0.tgz#ed441b6fa600072520ce18b43d2c8cc8caecc7f4" + integrity sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw== dependencies: - "@jridgewell/gen-mapping" "^0.3.0" - "@jridgewell/trace-mapping" "^0.3.9" + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.24" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.18.6", "@babel/code-frame@^7.22.13", "@babel/code-frame@^7.23.5", "@babel/code-frame@^7.5.5", "@babel/code-frame@^7.8.3": +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.18.6", "@babel/code-frame@^7.23.5", "@babel/code-frame@^7.5.5", "@babel/code-frame@^7.8.3": version "7.23.5" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.23.5.tgz#9009b69a8c602293476ad598ff53e4562e15c244" integrity sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA== @@ -28,7 +28,7 @@ "@babel/highlight" "^7.23.4" chalk "^2.4.2" -"@babel/compat-data@^7.20.5", "@babel/compat-data@^7.22.6", "@babel/compat-data@^7.23.3", "@babel/compat-data@^7.23.5": +"@babel/compat-data@^7.20.5", "@babel/compat-data@^7.22.6", "@babel/compat-data@^7.23.5": version "7.23.5" resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.23.5.tgz#ffb878728bb6bdcb6f4510aa51b1be9afb8cfd98" integrity sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw== @@ -77,20 +77,20 @@ semver "^6.3.0" "@babel/core@^7.1.0", "@babel/core@^7.11.6", "@babel/core@^7.12.10", "@babel/core@^7.12.3", "@babel/core@^7.18.13", "@babel/core@^7.19.6", "@babel/core@^7.7.5": - version "7.23.7" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.7.tgz#4d8016e06a14b5f92530a13ed0561730b5c6483f" - integrity sha512-+UpDgowcmqe36d4NwqvKsyPMlOLNGMsfMmQ5WGCu+siCe3t3dfe9njrzGfdN4qq+bcNUt0+Vw6haRxBOycs4dw== + version "7.24.0" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.24.0.tgz#56cbda6b185ae9d9bed369816a8f4423c5f2ff1b" + integrity sha512-fQfkg0Gjkza3nf0c7/w6Xf34BW4YvzNfACRLmmb7XRLa6XHdR+K9AlJlxneFfWYf6uhOzuzZVTjF/8KfndZANw== dependencies: "@ampproject/remapping" "^2.2.0" "@babel/code-frame" "^7.23.5" "@babel/generator" "^7.23.6" "@babel/helper-compilation-targets" "^7.23.6" "@babel/helper-module-transforms" "^7.23.3" - "@babel/helpers" "^7.23.7" - "@babel/parser" "^7.23.6" - "@babel/template" "^7.22.15" - "@babel/traverse" "^7.23.7" - "@babel/types" "^7.23.6" + "@babel/helpers" "^7.24.0" + "@babel/parser" "^7.24.0" + "@babel/template" "^7.24.0" + "@babel/traverse" "^7.24.0" + "@babel/types" "^7.24.0" convert-source-map "^2.0.0" debug "^4.1.0" gensync "^1.0.0-beta.2" @@ -132,10 +132,10 @@ lru-cache "^5.1.1" semver "^6.3.1" -"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.21.0", "@babel/helper-create-class-features-plugin@^7.22.15", "@babel/helper-create-class-features-plugin@^7.23.6", "@babel/helper-create-class-features-plugin@^7.23.7": - version "7.23.7" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.23.7.tgz#b2e6826e0e20d337143655198b79d58fdc9bd43d" - integrity sha512-xCoqR/8+BoNnXOY7RVSgv6X+o7pmT5q1d+gGcRlXYkI+9B31glE4jeejhKVpA04O1AtzOt7OSQ6VYKP5FcRl9g== +"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.21.0", "@babel/helper-create-class-features-plugin@^7.22.15", "@babel/helper-create-class-features-plugin@^7.23.6", "@babel/helper-create-class-features-plugin@^7.24.0": + version "7.24.0" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.0.tgz#fc7554141bdbfa2d17f7b4b80153b9b090e5d158" + integrity sha512-QAH+vfvts51BCsNZ2PhY6HAggnlS6omLLFTsIpeqZk/MmJ6cW7tgz5yRv0fMJThcr6FmbMrENh1RgrWPTYA76g== dependencies: "@babel/helper-annotate-as-pure" "^7.22.5" "@babel/helper-environment-visitor" "^7.22.20" @@ -170,17 +170,6 @@ resolve "^1.14.2" semver "^6.1.2" -"@babel/helper-define-polyfill-provider@^0.4.4": - version "0.4.4" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.4.tgz#64df615451cb30e94b59a9696022cffac9a10088" - integrity sha512-QcJMILQCu2jm5TFPGA3lCpJJTeEP+mqeXooG/NZbg/h5FTFi6V0+99ahlRsW8/kRLyb24LZVCCiclDedhLKcBA== - dependencies: - "@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" - "@babel/helper-define-polyfill-provider@^0.5.0": version "0.5.0" resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.5.0.tgz#465805b7361f461e86c680f1de21eaf88c25901b" @@ -249,10 +238,10 @@ resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz#2f75a831269d4f677de49986dff59927533cf375" integrity sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg== -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.8.0", "@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.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.24.0", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.24.0" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.0.tgz#945681931a52f15ce879fd5b86ce2dae6d3d7f2a" + integrity sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w== "@babel/helper-remap-async-to-generator@^7.22.20": version "7.22.20" @@ -317,14 +306,14 @@ "@babel/template" "^7.22.15" "@babel/types" "^7.22.19" -"@babel/helpers@^7.12.5", "@babel/helpers@^7.20.5", "@babel/helpers@^7.23.7": - version "7.23.8" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.8.tgz#fc6b2d65b16847fd50adddbd4232c76378959e34" - integrity sha512-KDqYz4PiOWvDFrdHLPhKtCThtIcKVy6avWD2oG4GEvyQ+XDZwHD4YQd+H2vNMnq2rkdxsDkU82T+Vk8U/WXHRQ== +"@babel/helpers@^7.12.5", "@babel/helpers@^7.20.5", "@babel/helpers@^7.24.0": + version "7.24.0" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.24.0.tgz#a3dd462b41769c95db8091e49cfe019389a9409b" + integrity sha512-ulDZdc0Aj5uLc5nETsa7EPx2L7rM0YJM8r7ck7U73AXi7qOV44IHHRAYZHY6iU1rr3C5N4NtTmMRUJP6kwCWeA== dependencies: - "@babel/template" "^7.22.15" - "@babel/traverse" "^7.23.7" - "@babel/types" "^7.23.6" + "@babel/template" "^7.24.0" + "@babel/traverse" "^7.24.0" + "@babel/types" "^7.24.0" "@babel/highlight@^7.23.4": version "7.23.4" @@ -335,10 +324,10 @@ chalk "^2.4.2" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.12.11", "@babel/parser@^7.12.7", "@babel/parser@^7.14.7", "@babel/parser@^7.20.5", "@babel/parser@^7.20.7", "@babel/parser@^7.22.15", "@babel/parser@^7.23.6": - version "7.23.6" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.6.tgz#ba1c9e512bda72a47e285ae42aff9d2a635a9e3b" - integrity sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ== +"@babel/parser@^7.1.0", "@babel/parser@^7.12.11", "@babel/parser@^7.12.7", "@babel/parser@^7.14.7", "@babel/parser@^7.20.5", "@babel/parser@^7.20.7", "@babel/parser@^7.24.0": + version "7.24.0" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.24.0.tgz#26a3d1ff49031c53a97d03b604375f028746a9ac" + integrity sha512-QuP/FxEAzMSjXygs8v4N9dvdXzEHN4W1oF3PxuWAtPo08UdM17u89RDMgjLn/mlc56iM0HlLmVkO/wgR+rDgHg== "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.23.3": version "7.23.3" @@ -373,13 +362,13 @@ "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-proposal-decorators@^7.12.12": - version "7.23.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.23.7.tgz#1d827902cbd3d9054e54fb2f2056cdd1eaa0e368" - integrity sha512-b1s5JyeMvqj7d9m9KhJNHKc18gEJiSyVzVX3bwbiPalQBQpuvfPh6lA9F7Kk/dWH0TIiXRpB9yicwijY6buPng== + version "7.24.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.24.0.tgz#845b42189e7441faa60a37682de1038eae97c382" + integrity sha512-LiT1RqZWeij7X+wGxCoYh3/3b8nVOX6/7BZ9wiQgAIyjoeQWdROaodJCgT+dwtbjHaz0r7bEbHJzjSbVfcOyjQ== dependencies: - "@babel/helper-create-class-features-plugin" "^7.23.7" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-decorators" "^7.23.3" + "@babel/helper-create-class-features-plugin" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.0" + "@babel/plugin-syntax-decorators" "^7.24.0" "@babel/plugin-proposal-export-default-from@^7.12.1": version "7.23.3" @@ -477,12 +466,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-syntax-decorators@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.23.3.tgz#a1d351d6c25bfdcf2e16f99b039101bc0ffcb0ca" - integrity sha512-cf7Niq4/+/juY67E0PbgH0TDhLQ5J7zS8C/Q5FFx+DWyrRa9sUQdTXkjqKu8zGvuqr7vw1muKiukseihU+PJDA== +"@babel/plugin-syntax-decorators@^7.24.0": + version "7.24.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.24.0.tgz#7a15e20aeaf412469c53ed0d5666f31a1fc41215" + integrity sha512-MXW3pQCu9gUiVGzqkGqsgiINDVYXoAnrY8FYF/rmb+OfufNF0zHMpHPN4ulRrinxYT8Vk/aZJxYqOKsDECjKAw== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/plugin-syntax-dynamic-import@^7.8.3": version "7.8.3" @@ -632,10 +621,10 @@ dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-async-generator-functions@^7.23.7": - version "7.23.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.7.tgz#3aa0b4f2fa3788b5226ef9346cf6d16ec61f99cd" - integrity sha512-PdxEpL71bJp1byMG0va5gwQcXHxuEYC/BgI/e88mGTtohbZN28O5Yit0Plkkm/dBzCF/BxmbNcses1RH1T+urA== +"@babel/plugin-transform-async-generator-functions@^7.23.9": + version "7.23.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.9.tgz#9adaeb66fc9634a586c5df139c6240d41ed801ce" + integrity sha512-8Q3veQEDGe14dTYuwagbRtwxQDnytyg1JFu4/HwEMETeofocrB0U0ejBJIXoeG/t2oXZ8kzCyI0ZZfbT80VFNQ== dependencies: "@babel/helper-environment-visitor" "^7.22.20" "@babel/helper-plugin-utils" "^7.22.5" @@ -822,10 +811,10 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/helper-simple-access" "^7.22.5" -"@babel/plugin-transform-modules-systemjs@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.3.tgz#fa7e62248931cb15b9404f8052581c302dd9de81" - integrity sha512-ZxyKGTkF9xT9YJuKQRo19ewf3pXpopuYQd8cDXqNzc3mUNbOME0RKMoZxviQk74hwzfQsEe66dE92MaZbdHKNQ== +"@babel/plugin-transform-modules-systemjs@^7.23.9": + version "7.23.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.9.tgz#105d3ed46e4a21d257f83a2f9e2ee4203ceda6be" + integrity sha512-KDlPRM6sLo4o1FkiSlXoAa8edLXFsKKIda779fbLrvmeuc3itnjCtaO6RrtoaANsIJANj+Vk1zqbZIMhkCAHVw== dependencies: "@babel/helper-hoist-variables" "^7.22.5" "@babel/helper-module-transforms" "^7.23.3" @@ -871,14 +860,14 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-numeric-separator" "^7.10.4" -"@babel/plugin-transform-object-rest-spread@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.23.4.tgz#2b9c2d26bf62710460bdc0d1730d4f1048361b83" - integrity sha512-9x9K1YyeQVw0iOXJlIzwm8ltobIIv7j2iLyP2jIhEbqPRQ7ScNgwQufU2I0Gq11VjyG4gI4yMXt2VFags+1N3g== +"@babel/plugin-transform-object-rest-spread@^7.24.0": + version "7.24.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.0.tgz#7b836ad0088fdded2420ce96d4e1d3ed78b71df1" + integrity sha512-y/yKMm7buHpFFXfxVFS4Vk1ToRJDilIa6fKRioB9Vjichv58TDGXTvqV0dN7plobAmTW5eSEGXDngE+Mm+uO+w== dependencies: - "@babel/compat-data" "^7.23.3" - "@babel/helper-compilation-targets" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/compat-data" "^7.23.5" + "@babel/helper-compilation-targets" "^7.23.6" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/plugin-syntax-object-rest-spread" "^7.8.3" "@babel/plugin-transform-parameters" "^7.23.3" @@ -1065,13 +1054,13 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/preset-env@^7.12.11", "@babel/preset-env@^7.19.4": - version "7.23.8" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.23.8.tgz#7d6f8171ea7c221ecd28059e65ad37c20e441e3e" - integrity sha512-lFlpmkApLkEP6woIKprO6DO60RImpatTQKtz4sUcDjVcK8M8mQ4sZsuxaTMNOZf0sqAq/ReYW1ZBHnOQwKpLWA== + version "7.24.0" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.24.0.tgz#11536a7f4b977294f0bdfad780f01a8ac8e183fc" + integrity sha512-ZxPEzV9IgvGn73iK0E6VB9/95Nd7aMFpbE0l8KQFDG70cOV9IxRP7Y2FUPmlK0v6ImlLqYX50iuZ3ZTVhOF2lA== dependencies: "@babel/compat-data" "^7.23.5" "@babel/helper-compilation-targets" "^7.23.6" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/helper-validator-option" "^7.23.5" "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.23.3" "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.23.3" @@ -1096,7 +1085,7 @@ "@babel/plugin-syntax-top-level-await" "^7.14.5" "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" "@babel/plugin-transform-arrow-functions" "^7.23.3" - "@babel/plugin-transform-async-generator-functions" "^7.23.7" + "@babel/plugin-transform-async-generator-functions" "^7.23.9" "@babel/plugin-transform-async-to-generator" "^7.23.3" "@babel/plugin-transform-block-scoped-functions" "^7.23.3" "@babel/plugin-transform-block-scoping" "^7.23.4" @@ -1118,13 +1107,13 @@ "@babel/plugin-transform-member-expression-literals" "^7.23.3" "@babel/plugin-transform-modules-amd" "^7.23.3" "@babel/plugin-transform-modules-commonjs" "^7.23.3" - "@babel/plugin-transform-modules-systemjs" "^7.23.3" + "@babel/plugin-transform-modules-systemjs" "^7.23.9" "@babel/plugin-transform-modules-umd" "^7.23.3" "@babel/plugin-transform-named-capturing-groups-regex" "^7.22.5" "@babel/plugin-transform-new-target" "^7.23.3" "@babel/plugin-transform-nullish-coalescing-operator" "^7.23.4" "@babel/plugin-transform-numeric-separator" "^7.23.4" - "@babel/plugin-transform-object-rest-spread" "^7.23.4" + "@babel/plugin-transform-object-rest-spread" "^7.24.0" "@babel/plugin-transform-object-super" "^7.23.3" "@babel/plugin-transform-optional-catch-binding" "^7.23.4" "@babel/plugin-transform-optional-chaining" "^7.23.4" @@ -1144,19 +1133,19 @@ "@babel/plugin-transform-unicode-regex" "^7.23.3" "@babel/plugin-transform-unicode-sets-regex" "^7.23.3" "@babel/preset-modules" "0.1.6-no-external-plugins" - babel-plugin-polyfill-corejs2 "^0.4.7" - babel-plugin-polyfill-corejs3 "^0.8.7" - babel-plugin-polyfill-regenerator "^0.5.4" + babel-plugin-polyfill-corejs2 "^0.4.8" + babel-plugin-polyfill-corejs3 "^0.9.0" + babel-plugin-polyfill-regenerator "^0.5.5" core-js-compat "^3.31.0" semver "^6.3.1" "@babel/preset-flow@^7.12.1": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/preset-flow/-/preset-flow-7.23.3.tgz#8084e08b9ccec287bd077ab288b286fab96ffab1" - integrity sha512-7yn6hl8RIv+KNk6iIrGZ+D06VhVY35wLVf23Cz/mMu1zOr7u4MMP4j0nZ9tLf8+4ZFpnib8cFYgB/oYg9hfswA== + version "7.24.0" + resolved "https://registry.yarnpkg.com/@babel/preset-flow/-/preset-flow-7.24.0.tgz#0de60271b0a439b415501c5b28f685fbcb080e1c" + integrity sha512-cum/nSi82cDaSJ21I4PgLTVlj0OXovFk6GRguJYe/IKg6y6JHLTbJhybtX4k35WT9wdeJfEVjycTixMhBHd0Dg== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-validator-option" "^7.22.15" + "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-validator-option" "^7.23.5" "@babel/plugin-transform-flow-strip-types" "^7.23.3" "@babel/preset-modules@0.1.6-no-external-plugins": @@ -1215,9 +1204,9 @@ regenerator-runtime "^0.13.2" "@babel/runtime@^7.0.0", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.1", "@babel/runtime@^7.12.5", "@babel/runtime@^7.17.8", "@babel/runtime@^7.5.0", "@babel/runtime@^7.7.6", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2": - version "7.23.8" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.8.tgz#8ee6fe1ac47add7122902f257b8ddf55c898f650" - integrity sha512-Y7KbAP984rn1VGMbGqKmBLio9V7y5Je9GvU4rQPCPinCyNfUcToxIXl06d59URp/F3LwinvODxab5N/G6qggkw== + version "7.24.0" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.24.0.tgz#584c450063ffda59697021430cb47101b085951e" + integrity sha512-Chk32uHMg6TnQdvw2e9IlqPpFX/6NLuK0Ys2PqLb7/gL5uFn9mXvK715FGLlOLQrcO4qIkNHkvPGktzzXexsFw== dependencies: regenerator-runtime "^0.14.0" @@ -1228,19 +1217,19 @@ dependencies: regenerator-runtime "^0.13.2" -"@babel/template@^7.12.7", "@babel/template@^7.14.5", "@babel/template@^7.18.10", "@babel/template@^7.22.15", "@babel/template@^7.3.3": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.15.tgz#09576efc3830f0430f4548ef971dde1350ef2f38" - integrity sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w== +"@babel/template@^7.12.7", "@babel/template@^7.14.5", "@babel/template@^7.18.10", "@babel/template@^7.22.15", "@babel/template@^7.24.0", "@babel/template@^7.3.3": + version "7.24.0" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.24.0.tgz#c6a524aa93a4a05d66aaf31654258fae69d87d50" + integrity sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA== dependencies: - "@babel/code-frame" "^7.22.13" - "@babel/parser" "^7.22.15" - "@babel/types" "^7.22.15" + "@babel/code-frame" "^7.23.5" + "@babel/parser" "^7.24.0" + "@babel/types" "^7.24.0" -"@babel/traverse@^7.1.6", "@babel/traverse@^7.12.11", "@babel/traverse@^7.12.9", "@babel/traverse@^7.13.0", "@babel/traverse@^7.20.5", "@babel/traverse@^7.23.7", "@babel/traverse@^7.7.2": - version "7.23.7" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.7.tgz#9a7bf285c928cb99b5ead19c3b1ce5b310c9c305" - integrity sha512-tY3mM8rH9jM0YHFGyfC0/xf+SB5eKUu7HPj7/k3fpi9dAlsMc5YbQvDi0Sh2QTPXqMhyaAtzAr807TIyfQrmyg== +"@babel/traverse@^7.1.6", "@babel/traverse@^7.12.11", "@babel/traverse@^7.12.9", "@babel/traverse@^7.13.0", "@babel/traverse@^7.20.5", "@babel/traverse@^7.24.0", "@babel/traverse@^7.7.2": + version "7.24.0" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.24.0.tgz#4a408fbf364ff73135c714a2ab46a5eab2831b1e" + integrity sha512-HfuJlI8qq3dEDmNU5ChzzpZRWq+oxCZQyMzIMEqLho+AQnhMnKQUzH6ydo3RBl/YjPCuk68Y6s0Gx0AeyULiWw== dependencies: "@babel/code-frame" "^7.23.5" "@babel/generator" "^7.23.6" @@ -1248,15 +1237,15 @@ "@babel/helper-function-name" "^7.23.0" "@babel/helper-hoist-variables" "^7.22.5" "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/parser" "^7.23.6" - "@babel/types" "^7.23.6" + "@babel/parser" "^7.24.0" + "@babel/types" "^7.24.0" debug "^4.3.1" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.12.11", "@babel/types@^7.12.7", "@babel/types@^7.14.8", "@babel/types@^7.2.0", "@babel/types@^7.20.0", "@babel/types@^7.20.5", "@babel/types@^7.20.7", "@babel/types@^7.22.15", "@babel/types@^7.22.19", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.4", "@babel/types@^7.23.6", "@babel/types@^7.3.3", "@babel/types@^7.4.4": - version "7.23.6" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.6.tgz#be33fdb151e1f5a56877d704492c240fc71c7ccd" - integrity sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg== +"@babel/types@^7.0.0", "@babel/types@^7.12.11", "@babel/types@^7.12.7", "@babel/types@^7.14.8", "@babel/types@^7.2.0", "@babel/types@^7.20.0", "@babel/types@^7.20.5", "@babel/types@^7.20.7", "@babel/types@^7.22.15", "@babel/types@^7.22.19", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.4", "@babel/types@^7.23.6", "@babel/types@^7.24.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": + version "7.24.0" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.24.0.tgz#3b951f435a92e7333eba05b7566fd297960ea1bf" + integrity sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w== dependencies: "@babel/helper-string-parser" "^7.23.4" "@babel/helper-validator-identifier" "^7.22.20" @@ -1728,24 +1717,24 @@ "@types/yargs" "^17.0.8" chalk "^4.0.0" -"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": - version "0.3.3" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" - integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== +"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2", "@jridgewell/gen-mapping@^0.3.5": + version "0.3.5" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz#dcce6aff74bdf6dad1a95802b69b04a2fcb1fb36" + integrity sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg== dependencies: - "@jridgewell/set-array" "^1.0.1" + "@jridgewell/set-array" "^1.2.1" "@jridgewell/sourcemap-codec" "^1.4.10" - "@jridgewell/trace-mapping" "^0.3.9" + "@jridgewell/trace-mapping" "^0.3.24" "@jridgewell/resolve-uri@^3.1.0": - version "3.1.1" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" - integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== + version "3.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" + integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== -"@jridgewell/set-array@^1.0.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" - integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== +"@jridgewell/set-array@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280" + integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A== "@jridgewell/source-map@^0.3.3": version "0.3.5" @@ -1760,10 +1749,10 @@ resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== -"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.13", "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.20", "@jridgewell/trace-mapping@^0.3.9": - version "0.3.22" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.22.tgz#72a621e5de59f5f1ef792d0793a82ee20f645e4c" - integrity sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw== +"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.13", "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.20", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.9": + version "0.3.25" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" + integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== dependencies: "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" @@ -1778,12 +1767,12 @@ rxjs "6" semver "^7.3.5" -"@ledgerhq/devices@^8.0.3", "@ledgerhq/devices@^8.0.5", "@ledgerhq/devices@^8.2.0": - version "8.2.0" - resolved "https://registry.yarnpkg.com/@ledgerhq/devices/-/devices-8.2.0.tgz#ef67bf49628252d1779acaa151b1a941acba790e" - integrity sha512-XROTW2gTmmuy+YPPDjdtKKTQ3mfxrPtKtV+a9QFbj8f5MnjVMV0Zpy1BIB4CyIMsVVi4z6+nI67auT7IlsM3SQ== +"@ledgerhq/devices@^8.0.3", "@ledgerhq/devices@^8.0.5", "@ledgerhq/devices@^8.2.1": + version "8.2.1" + resolved "https://registry.yarnpkg.com/@ledgerhq/devices/-/devices-8.2.1.tgz#c59eec50bacd2f962e22c723a74600160d41fbd0" + integrity sha512-l/2I/Xzt7Z32OmGzoc/mUvaZivdn7Id/SO7hBTGpk7PtJTpBRxVAabP4GWEKCayGyOAcvTwoVxM0HMkNVfIzOQ== dependencies: - "@ledgerhq/errors" "^6.16.1" + "@ledgerhq/errors" "^6.16.2" "@ledgerhq/logs" "^6.12.0" rxjs "^7.8.1" semver "^7.3.5" @@ -1793,10 +1782,10 @@ resolved "https://registry.yarnpkg.com/@ledgerhq/errors/-/errors-6.12.6.tgz#f89c82c91c2930f34bc3e0d86a27ec7b6e6e4f5f" integrity sha512-D+r2B09vaRO06wfGoss+rNgwqWSoK0bCtsaJWzlD2hv1zxTtucqVtSztbRFypIqxWTCb3ix5Nh2dWHEJVTp2Xw== -"@ledgerhq/errors@^6.12.6", "@ledgerhq/errors@^6.13.0", "@ledgerhq/errors@^6.16.1": - version "6.16.1" - resolved "https://registry.yarnpkg.com/@ledgerhq/errors/-/errors-6.16.1.tgz#df650a9ba105397dee2e8c0ceddf6931c5b25ede" - integrity sha512-4D4wKecGzQpIu7sx03Sg4uE1e8g1oZUndWgw9gw776H8h9ov9c5TxPaldTn2j6orPECAERViLf7LTO4L5pE2Cw== +"@ledgerhq/errors@^6.12.6", "@ledgerhq/errors@^6.13.0", "@ledgerhq/errors@^6.16.2": + version "6.16.2" + resolved "https://registry.yarnpkg.com/@ledgerhq/errors/-/errors-6.16.2.tgz#cf3939dc92ed0871aa7fdd45e6d13446a1eaeccd" + integrity sha512-jFpohaSW+p1Obp3NDT9QSByEtT3gtBZIjVNu8m25gnrH5zdtfPVlPwH6UiuS50s+2dHQyehV8hF+IfreKDWAZA== "@ledgerhq/hw-transport-mocker@6.27.17": version "6.27.17" @@ -1847,12 +1836,12 @@ events "^3.3.0" "@ledgerhq/hw-transport@^6.28.4", "@ledgerhq/hw-transport@^6.28.6": - version "6.30.2" - resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport/-/hw-transport-6.30.2.tgz#de988b3ba8df4ca0ae97f7b7f99327bd61a535ee" - integrity sha512-iTB0cwQaISvUXwrnPOLAmPoAOMvW14XmtKsuQce0qYJZC/1/eUPNFu6sOD8X0qUBbMfWhre8X9AmMuWTPQH3lA== + version "6.30.4" + resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport/-/hw-transport-6.30.4.tgz#05dee1e9cdec0e430594ecf7f5cf90c13721ad70" + integrity sha512-VBcVd7UG8HDrjWMoZI5rqBDz+PBxLHTIPZOGY/fdMoEUwaBbss0Z3MxuJanMyerlfaLqnBSVuL0blz7rOyagkw== dependencies: - "@ledgerhq/devices" "^8.2.0" - "@ledgerhq/errors" "^6.16.1" + "@ledgerhq/devices" "^8.2.1" + "@ledgerhq/errors" "^6.16.2" "@ledgerhq/logs" "^6.12.0" events "^3.3.0" @@ -1861,6 +1850,13 @@ resolved "https://registry.yarnpkg.com/@ledgerhq/logs/-/logs-6.12.0.tgz#ad903528bf3687a44da435d7b2479d724d374f5d" integrity sha512-ExDoj1QV5eC6TEbMdLUMMk9cfvNKhhv5gXol4SmULRVCx/3iyCPhJ74nsb3S0Vb+/f+XujBEj3vQn5+cwS0fNA== +"@lifeomic/axios-fetch@3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@lifeomic/axios-fetch/-/axios-fetch-3.0.1.tgz#a0f135470d7bb54d0ce82b0a2f3b19daa7bf77e2" + integrity sha512-bwEgYXtGrn/F+yYqoUIAWBRzyqQ7yB1VL84gCq0uAk36GRoyoWyOzbE35VWeXlmkkoby91FnAwh4UhgayMM/og== + dependencies: + "@types/node-fetch" "^2.5.10" + "@mdx-js/mdx@^1.6.22": version "1.6.22" resolved "https://registry.yarnpkg.com/@mdx-js/mdx/-/mdx-1.6.22.tgz#8a723157bf90e78f17dc0f27995398e6c731f1ba" @@ -1945,6 +1941,20 @@ keccak "3.0.2" protobufjs "7.2.4" +"@multiversx/sdk-core@13.0.0-alpha.2": + version "13.0.0-alpha.2" + resolved "https://registry.yarnpkg.com/@multiversx/sdk-core/-/sdk-core-13.0.0-alpha.2.tgz#ca4b484ce3b8e33858788e48486421f67473af8b" + integrity sha512-5Wau36OAIre95akZvuyw8XrO3/zdRDmCqj9azQ4UWm7Jq6ax0XbQpBMI4BVQQ3EL39hgxTmRXeEpCBDxGd/ylg== + dependencies: + "@multiversx/sdk-transaction-decoder" "1.0.2" + bech32 "1.1.4" + bignumber.js "9.0.1" + blake2b "2.1.3" + buffer "6.0.3" + json-duplicate-key-handle "1.0.0" + keccak "3.0.2" + protobufjs "7.2.4" + "@multiversx/sdk-extension-provider@3.0.0": version "3.0.0" resolved "https://registry.yarnpkg.com/@multiversx/sdk-extension-provider/-/sdk-extension-provider-3.0.0.tgz#e0e178ee5555f9440457547759621f5c3152c5fa" @@ -1983,13 +1993,13 @@ dependencies: bech32 "^2.0.0" -"@multiversx/sdk-wallet-connect-provider@4.1.0": - version "4.1.0" - resolved "https://registry.yarnpkg.com/@multiversx/sdk-wallet-connect-provider/-/sdk-wallet-connect-provider-4.1.0.tgz#802f7ffbd69a774014ce6a26dcd52b1ab0492633" - integrity sha512-gvgZ2q+boliQHRiYDkJ+OOYCbsbrhoavqx01wwECs41EPn7TCIFKVcA5ljtK9OSiX8Htis7ckpTaZFWSr5wkCg== +"@multiversx/sdk-wallet-connect-provider@4.1.1": + version "4.1.1" + resolved "https://registry.yarnpkg.com/@multiversx/sdk-wallet-connect-provider/-/sdk-wallet-connect-provider-4.1.1.tgz#4c5fc34eeac818fd545d0bf94f1eff79cb7b07db" + integrity sha512-Fh+MD0RUXbn+Cnxep7TV4tH5XI5T5pSerrU5usbNRBe/DFGlWYcaGLbxVaat4VnMDHu9WnEjT5r2qO530YQi4g== dependencies: - "@walletconnect/sign-client" "2.11.0" - "@walletconnect/utils" "2.11.0" + "@walletconnect/sign-client" "2.11.2" + "@walletconnect/utils" "2.11.2" bech32 "1.1.4" "@multiversx/sdk-wallet@4.2.0": @@ -2010,10 +2020,10 @@ tweetnacl "1.0.3" uuid "8.3.2" -"@multiversx/sdk-web-wallet-cross-window-provider@0.0.14": - version "0.0.14" - resolved "https://registry.yarnpkg.com/@multiversx/sdk-web-wallet-cross-window-provider/-/sdk-web-wallet-cross-window-provider-0.0.14.tgz#95c62d57f4a695b9e22496de56a679ddf53799b5" - integrity sha512-bIma2d5Bd2THO9r4icbVkJd+o6FfmUsmRkERQ7vVM9bEjBZyxFdoWn4p0gh6Nu8EdGVSj7BE0BagYpag+zJdow== +"@multiversx/sdk-web-wallet-cross-window-provider@0.0.24": + version "0.0.24" + resolved "https://registry.yarnpkg.com/@multiversx/sdk-web-wallet-cross-window-provider/-/sdk-web-wallet-cross-window-provider-0.0.24.tgz#2f6e0d26a8e05bb9397cacd6466b215806eba034" + integrity sha512-Ijz/uJkqCKQ8gsHzJlA0VW9ilQFG/qnVBZnw/t/gmFJ1KV0N5YKV0KTmdIpbrjVz9yQ7ZMWRS4rAebvNuUD97Q== dependencies: "@multiversx/sdk-core" "12.18.0" "@types/jest" "^29.5.11" @@ -2195,97 +2205,97 @@ resolved "https://registry.yarnpkg.com/@open-draft/until/-/until-1.0.3.tgz#db9cc719191a62e7d9200f6e7bab21c5b848adca" integrity sha512-Aq58f5HiWdyDlFffbbSjAlv596h/cOnt2DO1w3DOC7OJ5EHs0hd/nycJfiu9RJbT6Yk6F1knnRRXNSpxoIVZ9Q== -"@parcel/watcher-android-arm64@2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.4.0.tgz#9c93763794153e4f76920994a423b6ea3257059d" - integrity sha512-+fPtO/GsbYX1LJnCYCaDVT3EOBjvSFdQN9Mrzh9zWAOOfvidPWyScTrHIZHHfJBvlHzNA0Gy0U3NXFA/M7PHUA== +"@parcel/watcher-android-arm64@2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.4.1.tgz#c2c19a3c442313ff007d2d7a9c2c1dd3e1c9ca84" + integrity sha512-LOi/WTbbh3aTn2RYddrO8pnapixAziFl6SMxHM69r3tvdSm94JtCenaKgk1GRg5FJ5wpMCpHeW+7yqPlvZv7kg== -"@parcel/watcher-darwin-arm64@2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.4.0.tgz#2c79c2abde16aa24cac67e555b60802fd13fe210" - integrity sha512-T/At5pansFuQ8VJLRx0C6C87cgfqIYhW2N/kBfLCUvDhCah0EnLLwaD/6MW3ux+rpgkpQAnMELOCTKlbwncwiA== +"@parcel/watcher-darwin-arm64@2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.4.1.tgz#c817c7a3b4f3a79c1535bfe54a1c2818d9ffdc34" + integrity sha512-ln41eihm5YXIY043vBrrHfn94SIBlqOWmoROhsMVTSXGh0QahKGy77tfEywQ7v3NywyxBBkGIfrWRHm0hsKtzA== -"@parcel/watcher-darwin-x64@2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.4.0.tgz#23d82f198c5d033f047467c68d7c335f3df49b46" - integrity sha512-vZMv9jl+szz5YLsSqEGCMSllBl1gU1snfbRL5ysJU03MEa6gkVy9OMcvXV1j4g0++jHEcvzhs3Z3LpeEbVmY6Q== +"@parcel/watcher-darwin-x64@2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.4.1.tgz#1a3f69d9323eae4f1c61a5f480a59c478d2cb020" + integrity sha512-yrw81BRLjjtHyDu7J61oPuSoeYWR3lDElcPGJyOvIXmor6DEo7/G2u1o7I38cwlcoBHQFULqF6nesIX3tsEXMg== -"@parcel/watcher-freebsd-x64@2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.4.0.tgz#7310cc86abc27dacd57624bcdba1f0ba092e76df" - integrity sha512-dHTRMIplPDT1M0+BkXjtMN+qLtqq24sLDUhmU+UxxLP2TEY2k8GIoqIJiVrGWGomdWsy5IO27aDV1vWyQ6gfHA== +"@parcel/watcher-freebsd-x64@2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.4.1.tgz#0d67fef1609f90ba6a8a662bc76a55fc93706fc8" + integrity sha512-TJa3Pex/gX3CWIx/Co8k+ykNdDCLx+TuZj3f3h7eOjgpdKM+Mnix37RYsYU4LHhiYJz3DK5nFCCra81p6g050w== -"@parcel/watcher-linux-arm-glibc@2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.4.0.tgz#c31b76e695027eeb1078d3d6f1d641d0b900c335" - integrity sha512-9NQXD+qk46RwATNC3/UB7HWurscY18CnAPMTFcI9Y8CTbtm63/eex1SNt+BHFinEQuLBjaZwR2Lp+n7pmEJPpQ== +"@parcel/watcher-linux-arm-glibc@2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.4.1.tgz#ce5b340da5829b8e546bd00f752ae5292e1c702d" + integrity sha512-4rVYDlsMEYfa537BRXxJ5UF4ddNwnr2/1O4MHM5PjI9cvV2qymvhwZSFgXqbS8YoTk5i/JR0L0JDs69BUn45YA== -"@parcel/watcher-linux-arm64-glibc@2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.4.0.tgz#56e09b86e9d8a4096f606be118b588da6e965080" - integrity sha512-QuJTAQdsd7PFW9jNGaV9Pw+ZMWV9wKThEzzlY3Lhnnwy7iW23qtQFPql8iEaSFMCVI5StNNmONUopk+MFKpiKg== +"@parcel/watcher-linux-arm64-glibc@2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.4.1.tgz#6d7c00dde6d40608f9554e73998db11b2b1ff7c7" + integrity sha512-BJ7mH985OADVLpbrzCLgrJ3TOpiZggE9FMblfO65PlOCdG++xJpKUJ0Aol74ZUIYfb8WsRlUdgrZxKkz3zXWYA== -"@parcel/watcher-linux-arm64-musl@2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.4.0.tgz#27ffd5ca5f510ecd638f9ad22e2e813049db54e7" - integrity sha512-oyN+uA9xcTDo/45bwsd6TFHa7Lc7hKujyMlvwrCLvSckvWogndCEoVYFNfZ6JJ2KNL/6fFiGPcbjp8jJmEh5Ng== +"@parcel/watcher-linux-arm64-musl@2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.4.1.tgz#bd39bc71015f08a4a31a47cd89c236b9d6a7f635" + integrity sha512-p4Xb7JGq3MLgAfYhslU2SjoV9G0kI0Xry0kuxeG/41UfpjHGOhv7UoUDAz/jb1u2elbhazy4rRBL8PegPJFBhA== -"@parcel/watcher-linux-x64-glibc@2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.4.0.tgz#44cbbb1e5884a1ca900655f47a0775218318f934" - integrity sha512-KphV8awJmxU3q52JQvJot0QMu07CIyEjV+2Tb2ZtbucEgqyRcxOBDMsqp1JNq5nuDXtcCC0uHQICeiEz38dPBQ== +"@parcel/watcher-linux-x64-glibc@2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.4.1.tgz#0ce29966b082fb6cdd3de44f2f74057eef2c9e39" + integrity sha512-s9O3fByZ/2pyYDPoLM6zt92yu6P4E39a03zvO0qCHOTjxmt3GHRMLuRZEWhWLASTMSrrnVNWdVI/+pUElJBBBg== -"@parcel/watcher-linux-x64-musl@2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.4.0.tgz#4c33993618c8d5113722852806239cb80360494b" - integrity sha512-7jzcOonpXNWcSijPpKD5IbC6xC7yTibjJw9jviVzZostYLGxbz8LDJLUnLzLzhASPlPGgpeKLtFUMjAAzM+gSA== +"@parcel/watcher-linux-x64-musl@2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.4.1.tgz#d2ebbf60e407170bb647cd6e447f4f2bab19ad16" + integrity sha512-L2nZTYR1myLNST0O632g0Dx9LyMNHrn6TOt76sYxWLdff3cB22/GZX2UPtJnaqQPdCRoszoY5rcOj4oMTtp5fQ== -"@parcel/watcher-wasm@2.3.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@parcel/watcher-wasm/-/watcher-wasm-2.3.0.tgz#73b66c6fbd2a3326ae86a1ec77eab7139d0dd725" - integrity sha512-ejBAX8H0ZGsD8lSICDNyMbSEtPMWgDL0WFCt/0z7hyf5v8Imz4rAM8xY379mBsECkq/Wdqa5WEDLqtjZ+6NxfA== +"@parcel/watcher-wasm@^2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-wasm/-/watcher-wasm-2.4.1.tgz#c4353e4fdb96ee14389856f7f6f6d21b7dcef9e1" + integrity sha512-/ZR0RxqxU/xxDGzbzosMjh4W6NdYFMqq2nvo2b8SLi7rsl/4jkL8S5stIikorNkdR50oVDvqb/3JT05WM+CRRA== dependencies: is-glob "^4.0.3" micromatch "^4.0.5" napi-wasm "^1.1.0" -"@parcel/watcher-win32-arm64@2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.4.0.tgz#2a172fd2fda95fe5389298ca3e70b5a96316162a" - integrity sha512-NOej2lqlq8bQNYhUMnOD0nwvNql8ToQF+1Zhi9ULZoG+XTtJ9hNnCFfyICxoZLXor4bBPTOnzs/aVVoefYnjIg== +"@parcel/watcher-win32-arm64@2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.4.1.tgz#eb4deef37e80f0b5e2f215dd6d7a6d40a85f8adc" + integrity sha512-Uq2BPp5GWhrq/lcuItCHoqxjULU1QYEcyjSO5jqqOK8RNFDBQnenMMx4gAl3v8GiWa59E9+uDM7yZ6LxwUIfRg== -"@parcel/watcher-win32-ia32@2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.4.0.tgz#279225b2ebe1fadd3c5137c9b2365ad422656904" - integrity sha512-IO/nM+K2YD/iwjWAfHFMBPz4Zqn6qBDqZxY4j2n9s+4+OuTSRM/y/irksnuqcspom5DjkSeF9d0YbO+qpys+JA== +"@parcel/watcher-win32-ia32@2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.4.1.tgz#94fbd4b497be39fd5c8c71ba05436927842c9df7" + integrity sha512-maNRit5QQV2kgHFSYwftmPBxiuK5u4DXjbXx7q6eKjq5dsLXZ4FJiVvlcw35QXzk0KrUecJmuVFbj4uV9oYrcw== -"@parcel/watcher-win32-x64@2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.4.0.tgz#93e0bd0ad1bda2c9a688764b9b30b71dc5b72a71" - integrity sha512-pAUyUVjfFjWaf/pShmJpJmNxZhbMvJASUpdes9jL6bTEJ+gDxPRSpXTIemNyNsb9AtbiGXs9XduP1reThmd+dA== +"@parcel/watcher-win32-x64@2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.4.1.tgz#4bf920912f67cae5f2d264f58df81abfea68dadf" + integrity sha512-+DvS92F9ezicfswqrvIRM2njcYJbd5mb9CUgtrHCHmvn7pPPa+nMDRu1o1bYYz/l5IB2NVGNJWiH7h1E58IF2A== -"@parcel/watcher@^2.3.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@parcel/watcher/-/watcher-2.4.0.tgz#2d3c4ef8832a5cdfdbb76b914f022489933e664f" - integrity sha512-XJLGVL0DEclX5pcWa2N9SX1jCGTDd8l972biNooLFtjneuGqodupPQh6XseXIBBeVIMaaJ7bTcs3qGvXwsp4vg== +"@parcel/watcher@^2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher/-/watcher-2.4.1.tgz#a50275151a1bb110879c6123589dba90c19f1bf8" + integrity sha512-HNjmfLQEVRZmHRET336f20H/8kOozUGwk7yajvsonjNxbj2wBTK1WsQuHkD5yYh9RxFGL2EyDHryOihOwUoKDA== dependencies: detect-libc "^1.0.3" is-glob "^4.0.3" micromatch "^4.0.5" node-addon-api "^7.0.0" optionalDependencies: - "@parcel/watcher-android-arm64" "2.4.0" - "@parcel/watcher-darwin-arm64" "2.4.0" - "@parcel/watcher-darwin-x64" "2.4.0" - "@parcel/watcher-freebsd-x64" "2.4.0" - "@parcel/watcher-linux-arm-glibc" "2.4.0" - "@parcel/watcher-linux-arm64-glibc" "2.4.0" - "@parcel/watcher-linux-arm64-musl" "2.4.0" - "@parcel/watcher-linux-x64-glibc" "2.4.0" - "@parcel/watcher-linux-x64-musl" "2.4.0" - "@parcel/watcher-win32-arm64" "2.4.0" - "@parcel/watcher-win32-ia32" "2.4.0" - "@parcel/watcher-win32-x64" "2.4.0" + "@parcel/watcher-android-arm64" "2.4.1" + "@parcel/watcher-darwin-arm64" "2.4.1" + "@parcel/watcher-darwin-x64" "2.4.1" + "@parcel/watcher-freebsd-x64" "2.4.1" + "@parcel/watcher-linux-arm-glibc" "2.4.1" + "@parcel/watcher-linux-arm64-glibc" "2.4.1" + "@parcel/watcher-linux-arm64-musl" "2.4.1" + "@parcel/watcher-linux-x64-glibc" "2.4.1" + "@parcel/watcher-linux-x64-musl" "2.4.1" + "@parcel/watcher-win32-arm64" "2.4.1" + "@parcel/watcher-win32-ia32" "2.4.1" + "@parcel/watcher-win32-x64" "2.4.1" "@pmmmwh/react-refresh-webpack-plugin@^0.5.3": version "0.5.11" @@ -2370,10 +2380,10 @@ resolved "https://registry.yarnpkg.com/@remix-run/router/-/router-1.0.4.tgz#cbfbec6735711e7c2fc93b9b40adf70ef5a39990" integrity sha512-gTL8H5USTAKOyVA4xczzDJnC3HMssdFa3tRlwBicXynx9XfiXwneHnYQogwSKpdCkjXISrEKSTtX62rLpNEVQg== -"@sideway/address@^4.1.4": - version "4.1.4" - resolved "https://registry.yarnpkg.com/@sideway/address/-/address-4.1.4.tgz#03dccebc6ea47fdc226f7d3d1ad512955d4783f0" - integrity sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw== +"@sideway/address@^4.1.5": + version "4.1.5" + resolved "https://registry.yarnpkg.com/@sideway/address/-/address-4.1.5.tgz#4bc149a0076623ced99ca8208ba780d65a99b9d5" + integrity sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q== dependencies: "@hapi/hoek" "^9.0.0" @@ -3891,9 +3901,9 @@ "@types/estree" "*" "@types/eslint@*": - version "8.56.2" - resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.56.2.tgz#1c72a9b794aa26a8b94ad26d5b9aa51c8a6384bb" - integrity sha512-uQDwm1wFHmbBbCZCqAlq6Do9LYwByNZHWzXppSnay9SuwJ+VRbjkbLABer54kcPnMSlG6Fdiy2yaFXm/z9Z5gw== + version "8.56.5" + resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.56.5.tgz#94b88cab77588fcecdd0771a6d576fa1c0af9d02" + integrity sha512-u5/YPJHo1tvkSF2CE0USEkxon82Z5DBy2xR+qfyYNszpX9qcs4sT6uq2kBbj4BXY1+DBGDPnrhMZV3pKWGNukw== dependencies: "@types/estree" "*" "@types/json-schema" "*" @@ -3932,9 +3942,9 @@ "@types/node" "*" "@types/hast@^2.0.0": - version "2.3.9" - resolved "https://registry.yarnpkg.com/@types/hast/-/hast-2.3.9.tgz#a9a1b5bbce46e8a1312e977364bacabc8e93d2cf" - integrity sha512-pTHyNlaMD/oKJmS+ZZUyFUcsZeBZpC0lmGquw98CqRVNgAdJZJeD7GoeLiT6Xbx5rU9VCjSt0RwEvDgzh4obFw== + version "2.3.10" + resolved "https://registry.yarnpkg.com/@types/hast/-/hast-2.3.10.tgz#5c9d9e0b304bbb8879b857225c5ebab2d81d7643" + integrity sha512-McWspRw8xx8J9HurkVBfYj0xKoE25tOFlHGdx4MJ5xORQrMGZNqJhVQWaIbm6Oyla5kYOXtDiopzKRJzEOkwJw== dependencies: "@types/unist" "^2" @@ -3976,9 +3986,9 @@ "@types/istanbul-lib-report" "*" "@types/jest@*", "@types/jest@^29.5.11": - version "29.5.11" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.5.11.tgz#0c13aa0da7d0929f078ab080ae5d4ced80fa2f2c" - integrity sha512-S2mHmYIVe13vrm6q4kN6fLYYAka15ALQki/vgDC3mIukEOx8WJlv0kQPM+d4w8Gp6u0uSdKND04IlTXBv0rwnQ== + version "29.5.12" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.5.12.tgz#7f7dc6eb4cf246d2474ed78744b05d06ce025544" + integrity sha512-eDC8bTvT/QhYdxJAulQikueigY5AsdBRH2yDKW3yveW7svY3+DzN84/2NUgkw10RTiJbWqZrTtoGVdYlvFJdLw== dependencies: expect "^29.0.0" pretty-format "^29.0.0" @@ -4077,7 +4087,7 @@ resolved "https://registry.yarnpkg.com/@types/ms/-/ms-0.7.34.tgz#10964ba0dee6ac4cd462e2795b6bebd407303433" integrity sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g== -"@types/node-fetch@^2.5.7": +"@types/node-fetch@^2.5.10", "@types/node-fetch@^2.5.7": version "2.6.11" resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.6.11.tgz#9b39b78665dae0e82a08f02f4967d62c66f95d24" integrity sha512-24xFj9R5+rfQJLRyM56qh+wnVSYhyXC2tkoBndtY0U+vubqNsYXGjufB2nn8Q6gt0LrARwL6UBtMCSVCwl4B1g== @@ -4086,9 +4096,9 @@ form-data "^4.0.0" "@types/node@*", "@types/node@>=13.7.0": - version "20.11.6" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.6.tgz#6adf4241460e28be53836529c033a41985f85b6e" - integrity sha512-+EOokTnksGVgip2PbYbr3xnR7kZigh4LbybAfBAw5BpnQ+FqBYUsvCEjYd70IXKlbohQ64mzEYmMtlWUY8q//Q== + version "20.11.25" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.25.tgz#0f50d62f274e54dd7a49f7704cc16bfbcccaf49f" + integrity sha512-TBHyJxk2b7HceLVGFcpAUjsa5zIdsPWlR6XHfyGzd0SFu+/NFgQgMAl96MSDZgQDvJAvV6BKsFOrt6zIL09JDw== dependencies: undici-types "~5.26.4" @@ -4098,9 +4108,9 @@ integrity sha512-Exw4yUWMBXM3X+8oqzJNRqZSwUAaS4+7NdvHqQuFi/d+synz++xmX3QIf+BFqneW8N31R8Ky+sikfZUXq07ggQ== "@types/node@^14.0.10 || ^16.0.0", "@types/node@^14.14.20 || ^16.0.0": - version "16.18.75" - resolved "https://registry.yarnpkg.com/@types/node/-/node-16.18.75.tgz#88460b2706e5be1788f5ed6ef51152283b7703a2" - integrity sha512-+FSfZd5mpMDTcIK7bp2GueIcAespzR4FROOXnEst248c85vwthIEwtXYOLgVc/sI4ihE1K/7yO1lEiSgvwAOxA== + version "16.18.87" + resolved "https://registry.yarnpkg.com/@types/node/-/node-16.18.87.tgz#9473038a28bf2d7ef7e4d23ef693a1011981abdf" + integrity sha512-+IzfhNirR/MDbXz6Om5eHV54D9mQlEMGag6AgEzlju0xH3M8baCXYwqQ6RKgGMpn9wSTx6Ltya/0y4Z8eSfdLw== "@types/normalize-package-data@^2.4.0": version "2.4.4" @@ -4167,9 +4177,9 @@ integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw== "@types/qs@^6.9.5": - version "6.9.11" - resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.11.tgz#208d8a30bc507bd82e03ada29e4732ea46a6bbda" - integrity sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ== + version "6.9.12" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.12.tgz#afa96b383a3a6fdc859453a1892d41b607fc7756" + integrity sha512-bZcOkJ6uWrL0Qb2NAWKa7TBU+mJHPzhx9jjLL1KHF+XpzEcR7EXHvjbHlGtR/IsP1vyPrehuS6XqkmaePy//mg== "@types/react-dom@18.0.5", "@types/react-dom@^18.0.0": version "18.0.5" @@ -4227,9 +4237,9 @@ integrity sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA== "@types/uglify-js@*": - version "3.17.4" - resolved "https://registry.yarnpkg.com/@types/uglify-js/-/uglify-js-3.17.4.tgz#3c70021f08023e5a760ce133d22966f200e1d31c" - integrity sha512-Hm/T0kV3ywpJyMGNbsItdivRhYNCQQf1IIsYsXnoVPES4t+FMLyDe0/K+Ea7ahWtMtSNb22ZdY7MIyoD9rqARg== + version "3.17.5" + resolved "https://registry.yarnpkg.com/@types/uglify-js/-/uglify-js-3.17.5.tgz#905ce03a3cbbf2e31cbefcbc68d15497ee2e17df" + integrity sha512-TU+fZFBTBcXj/GpDpDaBmgWk/gn96kMZ+uocaFUlV2f8a6WdMzzI44QBCmGcCiYR0Y6ZlNRiyUyKKt5nl/lbzQ== dependencies: source-map "^0.6.1" @@ -4406,10 +4416,10 @@ "@typescript-eslint/types" "5.14.0" eslint-visitor-keys "^3.0.0" -"@walletconnect/core@2.11.0": - version "2.11.0" - resolved "https://registry.yarnpkg.com/@walletconnect/core/-/core-2.11.0.tgz#3a4e301077b2f858fd916b7a20b5b984d1afce63" - integrity sha512-2Tjp5BCevI7dbmqo/OrCjX4tqgMqwJNQLlQAlphqPfvwlF9+tIu6pGcVbSN3U9zyXzWIZCeleqEaWUeSeET4Ew== +"@walletconnect/core@2.11.2": + version "2.11.2" + resolved "https://registry.yarnpkg.com/@walletconnect/core/-/core-2.11.2.tgz#35286be92c645fa461fecc0dfe25de9f076fca8f" + integrity sha512-bB4SiXX8hX3/hyBfVPC5gwZCXCl+OPj+/EDVM71iAO3TDsh78KPbrVAbDnnsbHzZVHlsMohtXX3j5XVsheN3+g== dependencies: "@walletconnect/heartbeat" "1.2.1" "@walletconnect/jsonrpc-provider" "1.0.13" @@ -4422,8 +4432,8 @@ "@walletconnect/relay-auth" "^1.0.4" "@walletconnect/safe-json" "^1.0.2" "@walletconnect/time" "^1.0.2" - "@walletconnect/types" "2.11.0" - "@walletconnect/utils" "2.11.0" + "@walletconnect/types" "2.11.2" + "@walletconnect/utils" "2.11.2" events "^3.3.0" isomorphic-unfetch "3.1.0" lodash.isequal "4.5.0" @@ -4533,19 +4543,19 @@ dependencies: tslib "1.14.1" -"@walletconnect/sign-client@2.11.0": - version "2.11.0" - resolved "https://registry.yarnpkg.com/@walletconnect/sign-client/-/sign-client-2.11.0.tgz#de10f976cc1b8ab04b7f7c27f6a298e4e083ab25" - integrity sha512-H2ukscibBS+6WrzQWh+WyVBqO5z4F5et12JcwobdwgHnJSlqIoZxqnUYYWNCI5rUR5UKsKWaUyto4AE9N5dw4Q== +"@walletconnect/sign-client@2.11.2": + version "2.11.2" + resolved "https://registry.yarnpkg.com/@walletconnect/sign-client/-/sign-client-2.11.2.tgz#855609653855f0d23b0502cdbdcf43402e34c459" + integrity sha512-MfBcuSz2GmMH+P7MrCP46mVE5qhP0ZyWA0FyIH6/WuxQ6G+MgKsGfaITqakpRPsykWOJq8tXMs3XvUPDU413OQ== dependencies: - "@walletconnect/core" "2.11.0" + "@walletconnect/core" "2.11.2" "@walletconnect/events" "^1.0.1" "@walletconnect/heartbeat" "1.2.1" "@walletconnect/jsonrpc-utils" "1.0.8" "@walletconnect/logger" "^2.0.1" "@walletconnect/time" "^1.0.2" - "@walletconnect/types" "2.11.0" - "@walletconnect/utils" "2.11.0" + "@walletconnect/types" "2.11.2" + "@walletconnect/utils" "2.11.2" events "^3.3.0" "@walletconnect/time@^1.0.2": @@ -4555,10 +4565,10 @@ dependencies: tslib "1.14.1" -"@walletconnect/types@2.11.0": - version "2.11.0" - resolved "https://registry.yarnpkg.com/@walletconnect/types/-/types-2.11.0.tgz#474a009c56faa9ef4063b76ed84415c801dc9f1e" - integrity sha512-AB5b1lrEbCGHxqS2vqfCkIoODieH+ZAUp9rA1O2ftrhnqDJiJK983Df87JhYhECsQUBHHfALphA8ydER0q+9sw== +"@walletconnect/types@2.11.2": + version "2.11.2" + resolved "https://registry.yarnpkg.com/@walletconnect/types/-/types-2.11.2.tgz#d0359dd4106fcaa1634241a00428d3ea08d0d3c7" + integrity sha512-p632MFB+lJbip2cvtXPBQslpUdiw1sDtQ5y855bOlAGquay+6fZ4h1DcDePeKQDQM3P77ax2a9aNPZxV6y/h1Q== dependencies: "@walletconnect/events" "^1.0.1" "@walletconnect/heartbeat" "1.2.1" @@ -4567,10 +4577,10 @@ "@walletconnect/logger" "^2.0.1" events "^3.3.0" -"@walletconnect/utils@2.11.0": - version "2.11.0" - resolved "https://registry.yarnpkg.com/@walletconnect/utils/-/utils-2.11.0.tgz#31c95151c823022077883dda61800cdea71879b7" - integrity sha512-hxkHPlTlDQILHfIKXlmzgNJau/YcSBC3XHUSuZuKZbNEw3duFT6h6pm3HT/1+j1a22IG05WDsNBuTCRkwss+BQ== +"@walletconnect/utils@2.11.2": + version "2.11.2" + resolved "https://registry.yarnpkg.com/@walletconnect/utils/-/utils-2.11.2.tgz#dee0f19adf5e38543612cbe9fa4de7ed28eb7e85" + integrity sha512-LyfdmrnZY6dWqlF4eDrx5jpUwsB2bEPjoqR5Z6rXPiHJKUOdJt7az+mNOn5KTSOlRpd1DmozrBrWr+G9fFLYVw== dependencies: "@stablelib/chacha20poly1305" "1.0.1" "@stablelib/hkdf" "1.0.1" @@ -4580,7 +4590,7 @@ "@walletconnect/relay-api" "^1.0.9" "@walletconnect/safe-json" "^1.0.2" "@walletconnect/time" "^1.0.2" - "@walletconnect/types" "2.11.0" + "@walletconnect/types" "2.11.2" "@walletconnect/window-getters" "^1.0.1" "@walletconnect/window-metadata" "^1.0.1" detect-browser "5.3.0" @@ -5190,13 +5200,13 @@ arr-union@^3.1.0: resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" integrity sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q== -array-buffer-byte-length@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz#fabe8bc193fea865f317fe7807085ee0dee5aead" - integrity sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A== +array-buffer-byte-length@^1.0.0, array-buffer-byte-length@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz#1e5583ec16763540a27ae52eed99ff899223568f" + integrity sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg== dependencies: - call-bind "^1.0.2" - is-array-buffer "^3.0.1" + call-bind "^1.0.5" + is-array-buffer "^3.0.4" array-find-index@^1.0.1: version "1.0.2" @@ -5283,17 +5293,18 @@ array.prototype.reduce@^1.0.6: es-array-method-boxes-properly "^1.0.0" is-string "^1.0.7" -arraybuffer.prototype.slice@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz#98bd561953e3e74bb34938e77647179dfe6e9f12" - integrity sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw== +arraybuffer.prototype.slice@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz#097972f4255e41bc3425e37dc3f6421cf9aefde6" + integrity sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A== dependencies: - array-buffer-byte-length "^1.0.0" - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - get-intrinsic "^1.2.1" - is-array-buffer "^3.0.2" + array-buffer-byte-length "^1.0.1" + call-bind "^1.0.5" + define-properties "^1.2.1" + es-abstract "^1.22.3" + es-errors "^1.2.1" + get-intrinsic "^1.2.3" + is-array-buffer "^3.0.4" is-shared-array-buffer "^1.0.2" arrify@^2.0.1: @@ -5301,15 +5312,14 @@ arrify@^2.0.1: resolved "https://registry.yarnpkg.com/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa" integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug== -asn1.js@^5.2.0: - version "5.4.1" - resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-5.4.1.tgz#11a980b84ebb91781ce35b0fdc2ee294e3783f07" - integrity sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA== +asn1.js@^4.10.1: + version "4.10.1" + resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0" + integrity sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw== dependencies: bn.js "^4.0.0" inherits "^2.0.1" minimalistic-assert "^1.0.0" - safer-buffer "^2.1.0" assert@^1.1.1: version "1.5.1" @@ -5380,10 +5390,12 @@ autoprefixer@^9.8.6: postcss "^7.0.32" postcss-value-parser "^4.1.0" -available-typed-arrays@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" - integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== +available-typed-arrays@^1.0.6, available-typed-arrays@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz#a5cc375d6a03c2efc87a553f3e0b1522def14846" + integrity sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ== + dependencies: + possible-typed-array-names "^1.0.0" axios-mock-adapter@1.21.2: version "1.21.2" @@ -5410,9 +5422,9 @@ axios@^0.21.1: follow-redirects "^1.14.0" axios@^1.6.5: - version "1.6.6" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.6.tgz#878db45401d91fe9e53aed8ac962ed93bde8dd1c" - integrity sha512-XZLZDFfXKM9U/Y/B4nNynfCRUqNyVZ4sBC/n9GDRCkq9vd2mIvKjKKsbIh1WPmHmNbg6ND7cTBY3Y2+u1G3/2Q== + version "1.6.7" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.7.tgz#7b48c2e27c96f9c68a2f8f31e2ab19f59b06b0a7" + integrity sha512-/hDJGff6/c7u0hDkvkGxR/oy6CbCs8ziCsC7SqmhjfozqiJGc8Z11wrv9z9lYfY4K8l+H9TpjcMDX0xOZmx+RA== dependencies: follow-redirects "^1.15.4" form-data "^4.0.0" @@ -5491,7 +5503,7 @@ babel-plugin-macros@^3.0.1: cosmiconfig "^7.0.0" resolve "^1.19.0" -babel-plugin-polyfill-corejs2@^0.4.7: +babel-plugin-polyfill-corejs2@^0.4.8: version "0.4.8" resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.8.tgz#dbcc3c8ca758a290d47c3c6a490d59429b0d2269" integrity sha512-OtIuQfafSzpo/LhnJaykc0R/MMnuLSSVjVYy9mHArIZ9qTCSZ6TpWCuEKZYVoN//t8HqBNScHrOtCrIK5IaGLg== @@ -5508,15 +5520,15 @@ babel-plugin-polyfill-corejs3@^0.1.0: "@babel/helper-define-polyfill-provider" "^0.1.5" core-js-compat "^3.8.1" -babel-plugin-polyfill-corejs3@^0.8.7: - version "0.8.7" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.7.tgz#941855aa7fdaac06ed24c730a93450d2b2b76d04" - integrity sha512-KyDvZYxAzkC0Aj2dAPyDzi2Ym15e5JKZSK+maI7NAwSqofvuFglbSsxE7wUOvTg9oFVnHMzVzBKcqEb4PJgtOA== +babel-plugin-polyfill-corejs3@^0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.9.0.tgz#9eea32349d94556c2ad3ab9b82ebb27d4bf04a81" + integrity sha512-7nZPG1uzK2Ymhy/NbaOWTg3uibM2BmGASS4vHS4szRZAIR8R6GwA/xAujpdrXU5iyklrimWnLWU+BLF9suPTqg== dependencies: - "@babel/helper-define-polyfill-provider" "^0.4.4" - core-js-compat "^3.33.1" + "@babel/helper-define-polyfill-provider" "^0.5.0" + core-js-compat "^3.34.0" -babel-plugin-polyfill-regenerator@^0.5.4: +babel-plugin-polyfill-regenerator@^0.5.5: version "0.5.5" resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.5.tgz#8b0c8fc6434239e5d7b8a9d1f832bb2b0310f06a" integrity sha512-OJGYZlhLqBh2DDHeqAxWB1XIvr49CxiJ2gIt61/PU55CQK4Z58OzMqjDe1zwQdQk+rBYsRc+1rJmdajM3gimHg== @@ -5704,13 +5716,13 @@ bn.js@^5.0.0, bn.js@^5.2.1: resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== -body-parser@1.20.1: - version "1.20.1" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.1.tgz#b1812a8912c195cd371a3ee5e66faa2338a5c668" - integrity sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw== +body-parser@1.20.2: + version "1.20.2" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.2.tgz#6feb0e21c4724d06de7ff38da36dad4f57a747fd" + integrity sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA== dependencies: bytes "3.1.2" - content-type "~1.0.4" + content-type "~1.0.5" debug "2.6.9" depd "2.0.0" destroy "1.2.0" @@ -5718,7 +5730,7 @@ body-parser@1.20.1: iconv-lite "0.4.24" on-finished "2.4.1" qs "6.11.0" - raw-body "2.5.1" + raw-body "2.5.2" type-is "~1.6.18" unpipe "1.0.0" @@ -5803,7 +5815,7 @@ browser-resolve@^2.0.0: dependencies: resolve "^1.17.0" -browserify-aes@^1.0.0, browserify-aes@^1.0.4: +browserify-aes@^1.0.4, browserify-aes@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== @@ -5843,18 +5855,19 @@ browserify-rsa@^4.0.0, browserify-rsa@^4.1.0: randombytes "^2.0.1" browserify-sign@^4.0.0: - version "4.2.2" - resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.2.tgz#e78d4b69816d6e3dd1c747e64e9947f9ad79bc7e" - integrity sha512-1rudGyeYY42Dk6texmv7c4VcQ0EsvVbLwZkA+AQB7SxvXxmcD93jcHie8bzecJ+ChDlmAm2Qyu0+Ccg5uhZXCg== + version "4.2.3" + resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.3.tgz#7afe4c01ec7ee59a89a558a4b75bd85ae62d4208" + integrity sha512-JWCZW6SKhfhjJxO8Tyiiy+XYB7cqd2S5/+WeYHsKdNKFlCBhKbblba1A/HN/90YwtxKc8tCErjffZl++UNmGiw== dependencies: bn.js "^5.2.1" browserify-rsa "^4.1.0" create-hash "^1.2.0" create-hmac "^1.1.7" - elliptic "^6.5.4" + elliptic "^6.5.5" + hash-base "~3.0" inherits "^2.0.4" - parse-asn1 "^5.1.6" - readable-stream "^3.6.2" + parse-asn1 "^5.1.7" + readable-stream "^2.3.8" safe-buffer "^5.2.1" browserify-zlib@^0.2.0: @@ -5864,13 +5877,13 @@ browserify-zlib@^0.2.0: dependencies: pako "~1.0.5" -browserslist@^4.12.0, browserslist@^4.21.10, browserslist@^4.22.2: - version "4.22.2" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.22.2.tgz#704c4943072bd81ea18997f3bd2180e89c77874b" - integrity sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A== +browserslist@^4.12.0, browserslist@^4.21.10, browserslist@^4.22.2, browserslist@^4.22.3: + version "4.23.0" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.0.tgz#8f3acc2bbe73af7213399430890f86c63a5674ab" + integrity sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ== dependencies: - caniuse-lite "^1.0.30001565" - electron-to-chromium "^1.4.601" + caniuse-lite "^1.0.30001587" + electron-to-chromium "^1.4.668" node-releases "^2.0.14" update-browserslist-db "^1.0.13" @@ -6026,14 +6039,16 @@ caching-transform@^4.0.0: package-hash "^4.0.0" write-file-atomic "^3.0.0" -call-bind@^1.0.0, call-bind@^1.0.2, call-bind@^1.0.4, call-bind@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.5.tgz#6fa2b7845ce0ea49bf4d8b9ef64727a2c2e2e513" - integrity sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ== +call-bind@^1.0.0, call-bind@^1.0.2, call-bind@^1.0.5, call-bind@^1.0.6, call-bind@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9" + integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w== dependencies: + es-define-property "^1.0.0" + es-errors "^1.3.0" function-bind "^1.1.2" - get-intrinsic "^1.2.1" - set-function-length "^1.1.1" + get-intrinsic "^1.2.4" + set-function-length "^1.2.1" call-me-maybe@^1.0.1: version "1.0.2" @@ -6086,10 +6101,10 @@ can-bind-to-host@^1.1.1: resolved "https://registry.yarnpkg.com/can-bind-to-host/-/can-bind-to-host-1.1.2.tgz#45919a1fb426eb1b709ddd4853cd5eda0549e606" integrity sha512-CqsgmaqiyFRNtP17Ihqa/uHbZxRirntNVNl/kJz31DLKuNRfzvzionkLoUSkElQ6Cz+cpXKA3mhHq4tjbieujA== -caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001565: - version "1.0.30001580" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001580.tgz#e3c76bc6fe020d9007647044278954ff8cd17d1e" - integrity sha512-mtj5ur2FFPZcCEpXFy8ADXbDACuNFXg6mxVDqp7tqooX6l3zwm+d8EPoeOSIFRDvHs8qu7/SLFOGniULkcH2iA== +caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001587: + version "1.0.30001596" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001596.tgz#da06b79c3d9c3d9958eb307aa832ac68ead79bee" + integrity sha512-zpkZ+kEr6We7w63ORkoJ2pOfBwBkY/bJrG/UZ90qNb45Isblu8wzDgevEOrRL1r9dWayHjYiiyCMEXPn4DweGQ== capture-exit@^2.0.0: version "2.0.0" @@ -6169,9 +6184,9 @@ chardet@^0.7.0: integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== "chokidar@>=3.0.0 <4.0.0", chokidar@^3.4.1, chokidar@^3.4.2, chokidar@^3.5.3: - version "3.5.3" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" - integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== + version "3.6.0" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" + integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== dependencies: anymatch "~3.1.2" braces "~3.0.2" @@ -6235,10 +6250,10 @@ cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: inherits "^2.0.1" safe-buffer "^5.0.1" -citty@^0.1.5: - version "0.1.5" - resolved "https://registry.yarnpkg.com/citty/-/citty-0.1.5.tgz#fe37ceae5dc764af75eb2fece99d2bf527ea4e50" - integrity sha512-AS7n5NSc0OQVMV9v6wt3ByujNIrne0/cTjiC2MYqhvao57VNfiuVksTSr2p17nVOhEr2KtqiAkGwHcgMC/qUuQ== +citty@^0.1.5, citty@^0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/citty/-/citty-0.1.6.tgz#0f7904da1ed4625e1a9ea7e0fa780981aab7c5e4" + integrity sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ== dependencies: consola "^3.2.3" @@ -6541,7 +6556,7 @@ content-disposition@0.5.4: dependencies: safe-buffer "5.2.1" -content-type@~1.0.4: +content-type@~1.0.4, content-type@~1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== @@ -6593,22 +6608,22 @@ copy-descriptor@^0.1.0: resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" integrity sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw== -core-js-compat@^3.31.0, core-js-compat@^3.33.1, core-js-compat@^3.8.1: - version "3.35.1" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.35.1.tgz#215247d7edb9e830efa4218ff719beb2803555e2" - integrity sha512-sftHa5qUJY3rs9Zht1WEnmkvXputCyDBczPnr7QDgL8n3qrF3CMXY4VPSYtOLLiOUJcah2WNXREd48iOl6mQIw== +core-js-compat@^3.31.0, core-js-compat@^3.34.0, core-js-compat@^3.8.1: + version "3.36.0" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.36.0.tgz#087679119bc2fdbdefad0d45d8e5d307d45ba190" + integrity sha512-iV9Pd/PsgjNWBXeq8XRtWVSgz2tKAfhfvBs7qxYty+RlRd+OCksaWmOnc4JKrTc1cToXL1N0s3l/vwlxPtdElw== dependencies: - browserslist "^4.22.2" + browserslist "^4.22.3" core-js-pure@^3.23.3: - version "3.35.1" - resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.35.1.tgz#f33ad7fdf9dddae260339a30e5f8363f5c49a3bc" - integrity sha512-zcIdi/CL3MWbBJYo5YCeVAAx+Sy9yJE9I3/u9LkFABwbeaPhTMRWraM8mYFp9jW5Z50hOy7FVzCc8dCrpZqtIQ== + version "3.36.0" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.36.0.tgz#ffb34330b14e594d6a9835cf5843b4123f1d95db" + integrity sha512-cN28qmhRNgbMZZMc/RFu5w8pK9VJzpb2rJVR/lHuZJKwmXnoWOpXmMkxqBB514igkp1Hu8WGROsiOAzUcKdHOQ== core-js@^3.0.4, core-js@^3.6.5, core-js@^3.8.2: - version "3.35.1" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.35.1.tgz#9c28f8b7ccee482796f8590cc8d15739eaaf980c" - integrity sha512-IgdsbxNyMskrTFxa9lWHyMwAJU5gXOPP+1yO+K59d50VLVAIDAbs7gIv705KzALModfK3ZrSZTPNpC0PQgIZuw== + version "3.36.0" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.36.0.tgz#e752fa0b0b462a0787d56e9d73f80b0f7c0dde68" + integrity sha512-mt7+TUBbTFg5+GngsAxeKBTl5/VS0guFeJacYge9OmHb+m058UwwIm41SE9T4Den7ClatV57B6TYTuJ0CX1MAw== core-util-is@~1.0.0: version "1.0.3" @@ -6718,6 +6733,11 @@ cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: shebang-command "^2.0.0" which "^2.0.1" +crossws@^0.2.0, crossws@^0.2.2: + version "0.2.4" + resolved "https://registry.yarnpkg.com/crossws/-/crossws-0.2.4.tgz#82a8b518bff1018ab1d21ced9e35ffbe1681ad03" + integrity sha512-DAxroI2uSOgUKLz00NX6A8U/8EE3SZHmIND+10jkVSaypvyt57J5JEOxAQOL6lQxyzi/wZbTIwssU1uy69h5Vg== + crypto-browserify@^3.11.0: version "3.12.0" resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" @@ -6959,14 +6979,14 @@ defaults@^1.0.3: dependencies: clone "^1.0.2" -define-data-property@^1.0.1, define-data-property@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.1.tgz#c35f7cd0ab09883480d12ac5cb213715587800b3" - integrity sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ== +define-data-property@^1.0.1, define-data-property@^1.1.2, define-data-property@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" + integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== dependencies: - get-intrinsic "^1.2.1" + es-define-property "^1.0.0" + es-errors "^1.3.0" gopd "^1.0.1" - has-property-descriptors "^1.0.0" define-lazy-prop@^2.0.0: version "2.0.0" @@ -7061,10 +7081,10 @@ des.js@^1.0.0: inherits "^2.0.1" minimalistic-assert "^1.0.0" -destr@^2.0.1, destr@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/destr/-/destr-2.0.2.tgz#8d3c0ee4ec0a76df54bc8b819bca215592a8c218" - integrity sha512-65AlobnZMiCET00KaFFjUefxDX0khFA/E4myqZ7a6Sq1yZtR8+FVIvilVX66vF2uobSumxooYZChiRPCKNqhmg== +destr@^2.0.1, destr@^2.0.2, destr@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/destr/-/destr-2.0.3.tgz#7f9e97cb3d16dbdca7be52aca1644ce402cfe449" + integrity sha512-2N3BOUU4gYMpTP24s5rF5iP7BDr7uNTCs4ozw3kf/eKfvWSIu93GEBi5m427YoyJoeOzQ5smuu4nNAPGb8idSQ== destroy@1.2.0: version "1.2.0" @@ -7293,14 +7313,14 @@ duplexify@^3.4.2, duplexify@^3.6.0: stream-shift "^1.0.0" duplexify@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-4.1.2.tgz#18b4f8d28289132fa0b9573c898d9f903f81c7b0" - integrity sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw== + version "4.1.3" + resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-4.1.3.tgz#a07e1c0d0a2c001158563d32592ba58bddb0236f" + integrity sha512-M3BmBhwJRZsSx38lZyhE53Csddgzl5R7xGJNk7CVddZD6CcmwMCH8J+7AprIrQKH7TonKxaCjcv27Qmf+sQ+oA== dependencies: end-of-stream "^1.4.1" inherits "^2.0.3" readable-stream "^3.1.1" - stream-shift "^1.0.0" + stream-shift "^1.0.2" ed25519-hd-key@1.1.2: version "1.1.2" @@ -7323,10 +7343,10 @@ ee-first@1.1.1: resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== -electron-to-chromium@^1.4.601: - version "1.4.645" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.645.tgz#117f964252eb2f0ff00fc7360cb3080e2cf66e3c" - integrity sha512-EeS1oQDCmnYsRDRy2zTeC336a/4LZ6WKqvSaM1jLocEk5ZuyszkQtCpsqvuvaIXGOUjwtvF6LTcS8WueibXvSw== +electron-to-chromium@^1.4.668: + version "1.4.698" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.698.tgz#0b3992ad3b572b646ce3f22e0145eab4abc559a7" + integrity sha512-f9iZD1t3CLy1AS6vzM5EKGa6p9pRcOeEFXRFbaG2Ta+Oe7MkfRQ3fsvPYidzHe1h4i0JvIvpcY55C+B6BZNGtQ== element-resize-detector@^1.2.2: version "1.2.4" @@ -7335,10 +7355,10 @@ element-resize-detector@^1.2.2: dependencies: batch-processor "1.0.0" -elliptic@^6.5.3, elliptic@^6.5.4: - version "6.5.4" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" - integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== +elliptic@^6.5.3, elliptic@^6.5.5: + version "6.5.5" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.5.tgz#c715e09f78b6923977610d4c2346d6ce22e6dded" + integrity sha512-7EjbcmUm17NQFu4Pmgmq2olYMj8nwMnpcddByChSUjArp8F5DQWcIcpriwO4ZToLNAJig0yiyjswfyGNje/ixw== dependencies: bn.js "^4.11.9" brorand "^1.1.0" @@ -7420,9 +7440,9 @@ enhanced-resolve@^4.5.0: tapable "^1.0.0" enhanced-resolve@^5.15.0: - version "5.15.0" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz#1af946c7d93603eb88e9896cee4904dc012e9c35" - integrity sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg== + version "5.15.1" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.15.1.tgz#384391e025f099e67b4b00bfd7f0906a408214e1" + integrity sha512-3d3JRbwsCLJsYgvb6NuWEG44jjPSOMuS73L/6+7BZuoKm3W+qXnSoIYVHi8dG7Qcg4inAY4jbzkZ7MnskePeDg== dependencies: graceful-fs "^4.2.4" tapable "^2.2.0" @@ -7463,56 +7483,70 @@ error-stack-parser@^2.0.6: dependencies: stackframe "^1.3.4" -es-abstract@^1.22.1: - version "1.22.3" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.3.tgz#48e79f5573198de6dee3589195727f4f74bc4f32" - integrity sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA== - dependencies: - array-buffer-byte-length "^1.0.0" - arraybuffer.prototype.slice "^1.0.2" - available-typed-arrays "^1.0.5" - call-bind "^1.0.5" - es-set-tostringtag "^2.0.1" +es-abstract@^1.22.1, es-abstract@^1.22.3: + version "1.22.5" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.5.tgz#1417df4e97cc55f09bf7e58d1e614bc61cb8df46" + integrity sha512-oW69R+4q2wG+Hc3KZePPZxOiisRIqfKBVo/HLx94QcJeWGU/8sZhCvc829rd1kS366vlJbzBfXf9yWwf0+Ko7w== + dependencies: + array-buffer-byte-length "^1.0.1" + arraybuffer.prototype.slice "^1.0.3" + available-typed-arrays "^1.0.7" + call-bind "^1.0.7" + es-define-property "^1.0.0" + es-errors "^1.3.0" + es-set-tostringtag "^2.0.3" es-to-primitive "^1.2.1" function.prototype.name "^1.1.6" - get-intrinsic "^1.2.2" - get-symbol-description "^1.0.0" + get-intrinsic "^1.2.4" + get-symbol-description "^1.0.2" globalthis "^1.0.3" gopd "^1.0.1" - has-property-descriptors "^1.0.0" - has-proto "^1.0.1" + has-property-descriptors "^1.0.2" + has-proto "^1.0.3" has-symbols "^1.0.3" - hasown "^2.0.0" - internal-slot "^1.0.5" - is-array-buffer "^3.0.2" + hasown "^2.0.1" + internal-slot "^1.0.7" + is-array-buffer "^3.0.4" is-callable "^1.2.7" - is-negative-zero "^2.0.2" + is-negative-zero "^2.0.3" is-regex "^1.1.4" - is-shared-array-buffer "^1.0.2" + is-shared-array-buffer "^1.0.3" is-string "^1.0.7" - is-typed-array "^1.1.12" + is-typed-array "^1.1.13" is-weakref "^1.0.2" object-inspect "^1.13.1" object-keys "^1.1.1" - object.assign "^4.1.4" - regexp.prototype.flags "^1.5.1" - safe-array-concat "^1.0.1" - safe-regex-test "^1.0.0" + object.assign "^4.1.5" + regexp.prototype.flags "^1.5.2" + safe-array-concat "^1.1.0" + safe-regex-test "^1.0.3" string.prototype.trim "^1.2.8" string.prototype.trimend "^1.0.7" string.prototype.trimstart "^1.0.7" - typed-array-buffer "^1.0.0" - typed-array-byte-length "^1.0.0" - typed-array-byte-offset "^1.0.0" - typed-array-length "^1.0.4" + typed-array-buffer "^1.0.2" + typed-array-byte-length "^1.0.1" + typed-array-byte-offset "^1.0.2" + typed-array-length "^1.0.5" unbox-primitive "^1.0.2" - which-typed-array "^1.1.13" + which-typed-array "^1.1.14" es-array-method-boxes-properly@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz#873f3e84418de4ee19c5be752990b2e44718d09e" integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA== +es-define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845" + integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ== + dependencies: + get-intrinsic "^1.2.4" + +es-errors@^1.0.0, es-errors@^1.2.1, es-errors@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" + integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== + es-get-iterator@^1.0.2, es-get-iterator@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/es-get-iterator/-/es-get-iterator-1.1.3.tgz#3ef87523c5d464d41084b2c3c9c214f1199763d6" @@ -7533,14 +7567,14 @@ es-module-lexer@^1.2.1: resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.4.1.tgz#41ea21b43908fe6a287ffcbe4300f790555331f5" integrity sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w== -es-set-tostringtag@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz#11f7cc9f63376930a5f20be4915834f4bc74f9c9" - integrity sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q== +es-set-tostringtag@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz#8bb60f0a440c2e4281962428438d58545af39777" + integrity sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ== dependencies: - get-intrinsic "^1.2.2" - has-tostringtag "^1.0.0" - hasown "^2.0.0" + get-intrinsic "^1.2.4" + has-tostringtag "^1.0.2" + hasown "^2.0.1" es-shim-unscopables@^1.0.0: version "1.0.2" @@ -7857,9 +7891,9 @@ esbuild@^0.14.13: esbuild-windows-arm64 "0.14.54" escalade@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" - integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + version "3.1.2" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.2.tgz#54076e9ab29ea5bf3d8f1ed62acffbb88272df27" + integrity sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA== escape-html@~1.0.3: version "1.0.3" @@ -7945,9 +7979,9 @@ eslint-import-resolver-typescript@2.4.0: tsconfig-paths "^3.9.0" eslint-module-utils@^2.7.3: - version "2.8.0" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz#e439fee65fc33f6bba630ff621efc38ec0375c49" - integrity sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw== + version "2.8.1" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.8.1.tgz#52f2404300c3bd33deece9d7372fb337cc1d7c34" + integrity sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q== dependencies: debug "^3.2.7" @@ -8296,13 +8330,13 @@ expect@^29.0.0: jest-util "^29.7.0" express@^4.17.1: - version "4.18.2" - resolved "https://registry.yarnpkg.com/express/-/express-4.18.2.tgz#3fabe08296e930c796c19e3c516979386ba9fd59" - integrity sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ== + version "4.18.3" + resolved "https://registry.yarnpkg.com/express/-/express-4.18.3.tgz#6870746f3ff904dee1819b82e4b51509afffb0d4" + integrity sha512-6VyCijWQ+9O7WuVMTRBTl+cjNNIzD5cY5mQ1WM8r/LEkI2u8EYpOotESNwzNlyCn3g+dmjKYI6BmNneSr/FSRw== dependencies: accepts "~1.3.8" array-flatten "1.1.1" - body-parser "1.20.1" + body-parser "1.20.2" content-disposition "0.5.4" content-type "~1.0.4" cookie "0.5.0" @@ -8424,14 +8458,14 @@ fast-levenshtein@^2.0.6: integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== fast-redact@^3.0.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/fast-redact/-/fast-redact-3.3.0.tgz#7c83ce3a7be4898241a46560d51de10f653f7634" - integrity sha512-6T5V1QK1u4oF+ATxs1lWUmlEk6P2T9HqJG3e2DnHOdVgZy2rFJBoEnrIedcTXlkAHU/zKC+7KETJ+KGGKwxgMQ== + version "3.4.0" + resolved "https://registry.yarnpkg.com/fast-redact/-/fast-redact-3.4.0.tgz#24e45adcbfa045375f93012bc10c34976d59352e" + integrity sha512-2gwPvyna0zwBdxKnng1suu/dTL5s8XEy2ZqH8mwDUwJdDkV8w5kp+JV26mupdK68HmPMbm6yjW9m7/Ys/BHEHg== fastq@^1.6.0: - version "1.16.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.16.0.tgz#83b9a9375692db77a822df081edb6a9cf6839320" - integrity sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA== + version "1.17.1" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.17.1.tgz#2a523f07a4e7b1e81a42b91b8bf2254107753b47" + integrity sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w== dependencies: reusify "^1.0.4" @@ -8605,9 +8639,9 @@ flat-cache@^3.0.4: rimraf "^3.0.2" flatted@^3.2.9: - version "3.2.9" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.9.tgz#7eb4c67ca1ba34232ca9d2d93e9886e611ad7daf" - integrity sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ== + version "3.3.1" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.1.tgz#21db470729a6734d4997002f439cb308987f567a" + integrity sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw== flush-write-stream@^1.0.0: version "1.1.1" @@ -8846,11 +8880,12 @@ get-caller-file@^2.0.1, get-caller-file@^2.0.5: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.2.tgz#281b7622971123e1ef4b3c90fd7539306da93f3b" - integrity sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA== +get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2, get-intrinsic@^1.2.3, get-intrinsic@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd" + integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== dependencies: + es-errors "^1.3.0" function-bind "^1.1.2" has-proto "^1.0.1" has-symbols "^1.0.3" @@ -8888,13 +8923,14 @@ get-stream@^8.0.1: resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-8.0.1.tgz#def9dfd71742cd7754a7761ed43749a27d02eca2" integrity sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA== -get-symbol-description@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" - integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== +get-symbol-description@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.2.tgz#533744d5aa20aca4e079c8e5daf7fd44202821f5" + integrity sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg== dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.1" + call-bind "^1.0.5" + es-errors "^1.3.0" + get-intrinsic "^1.2.4" get-value@^2.0.3, get-value@^2.0.6: version "2.0.6" @@ -9061,19 +9097,21 @@ grapheme-splitter@^1.0.4: resolved "https://registry.yarnpkg.com/graphql/-/graphql-16.8.1.tgz#1930a965bef1170603702acdb68aedd3f3cf6f07" integrity sha512-59LZHPdGZVh695Ud9lRzPBVTtlX9ZCV150Er2W43ro37wVof0ctenSaskPPjN7lVTIN8mSZt8PHUNKZuNQUuxw== -h3@^1.10.0, h3@^1.8.2: - version "1.10.0" - resolved "https://registry.yarnpkg.com/h3/-/h3-1.10.0.tgz#55ac36deb6e250ada5ff1940b6324bc6acc4085f" - integrity sha512-Tw1kcIC+AeimwRmviiObaD5EB430Yt+lTgOxLJxNr96Vd/fGRu04EF7aKfOAcpwKCI+U2JlbxOLhycD86p3Ciw== +h3@^1.10.2, h3@^1.8.2: + version "1.11.1" + resolved "https://registry.yarnpkg.com/h3/-/h3-1.11.1.tgz#e9414ae6f2a076a345ea07256b320edb29bab9f7" + integrity sha512-AbaH6IDnZN6nmbnJOH72y3c5Wwh9P97soSVdGSBbcDACRdkC0FEWf25pzx4f/NuOCK6quHmW18yF2Wx+G4Zi1A== dependencies: cookie-es "^1.0.0" - defu "^6.1.3" - destr "^2.0.2" + crossws "^0.2.2" + defu "^6.1.4" + destr "^2.0.3" iron-webcrypto "^1.0.0" + ohash "^1.1.3" radix3 "^1.1.0" - ufo "^1.3.2" + ufo "^1.4.0" uncrypto "^0.1.3" - unenv "^1.8.0" + unenv "^1.9.0" handlebars@^4.7.7: version "4.7.8" @@ -9114,29 +9152,29 @@ has-glob@^1.0.0: dependencies: is-glob "^3.0.0" -has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz#52ba30b6c5ec87fd89fa574bc1c39125c6f65340" - integrity sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg== +has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.1, has-property-descriptors@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" + integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== dependencies: - get-intrinsic "^1.2.2" + es-define-property "^1.0.0" -has-proto@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" - integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== +has-proto@^1.0.1, has-proto@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.3.tgz#b31ddfe9b0e6e9914536a6ab286426d0214f77fd" + integrity sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q== has-symbols@^1.0.2, has-symbols@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== -has-tostringtag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" - integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== +has-tostringtag@^1.0.0, has-tostringtag@^1.0.1, has-tostringtag@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" + integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== dependencies: - has-symbols "^1.0.2" + has-symbols "^1.0.3" has-unicode@^2.0.1: version "2.0.1" @@ -9188,6 +9226,14 @@ hash-base@^3.0.0: readable-stream "^3.6.0" safe-buffer "^5.2.0" +hash-base@~3.0: + version "3.0.4" + resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918" + integrity sha512-EeeoJKjTyt868liAlVmcv2ZsUfGHlE3Q+BICOXcZiwN3osr5Q/zFGYmTJpoIzuaSTAwndFy+GqhEwlU4L3j4Ow== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + hash.js@^1.0.0, hash.js@^1.0.3: version "1.1.7" resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" @@ -9204,10 +9250,10 @@ hasha@^5.0.0: is-stream "^2.0.0" type-fest "^0.8.0" -hasown@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.0.tgz#f4c513d454a57b7c7e1650778de226b11700546c" - integrity sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA== +hasown@^2.0.0, hasown@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.1.tgz#26f48f039de2c0f8d3356c223fb8d50253519faa" + integrity sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA== dependencies: function-bind "^1.1.2" @@ -9332,9 +9378,9 @@ html-encoding-sniffer@^3.0.0: whatwg-encoding "^2.0.0" html-entities@^2.1.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.4.0.tgz#edd0cee70402584c8c76cc2c0556db09d1f45061" - integrity sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ== + version "2.5.2" + resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.5.2.tgz#201a3cf95d3a15be7099521620d19dfb4f65359f" + integrity sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA== html-escaper@^2.0.0: version "2.0.2" @@ -9513,9 +9559,9 @@ ignore@^4.0.3: integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== ignore@^5.1.1, ignore@^5.1.8, ignore@^5.2.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.0.tgz#67418ae40d34d6999c95ff56016759c718c82f78" - integrity sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg== + version "5.3.1" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.1.tgz#5073e554cd42c5b33b394375f538b8593e34d4ef" + integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw== immer@^9.0.7: version "9.0.21" @@ -9523,9 +9569,9 @@ immer@^9.0.7: integrity sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA== immutable@^4.0.0: - version "4.3.4" - resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.4.tgz#2e07b33837b4bb7662f288c244d1ced1ef65a78f" - integrity sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA== + version "4.3.5" + resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.5.tgz#f8b436e66d59f99760dc577f5c99a4fd2a5cc5a0" + integrity sha512-8eabxkth9gZatlwl5TBuJnCsoTADlL6ftEr7A4qgdaTsPyreilDSnUk57SO+jfKcNtxPa22U5KK6DSeAYhpBJw== import-fresh@^3.0.0, import-fresh@^3.1.0, import-fresh@^3.2.1: version "3.3.0" @@ -9614,12 +9660,12 @@ inquirer@^8.2.0: through "^2.3.6" wrap-ansi "^6.0.1" -internal-slot@^1.0.4, internal-slot@^1.0.5: - version "1.0.6" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.6.tgz#37e756098c4911c5e912b8edbf71ed3aa116f930" - integrity sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg== +internal-slot@^1.0.4, internal-slot@^1.0.5, internal-slot@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.7.tgz#c06dcca3ed874249881007b0a5523b172a190802" + integrity sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g== dependencies: - get-intrinsic "^1.2.2" + es-errors "^1.3.0" hasown "^2.0.0" side-channel "^1.0.4" @@ -9656,9 +9702,9 @@ ioredis@^5.3.2: standard-as-callback "^2.1.0" ip@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ip/-/ip-2.0.0.tgz#4cf4ab182fee2314c75ede1276f8c80b479936da" - integrity sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ== + version "2.0.1" + resolved "https://registry.yarnpkg.com/ip/-/ip-2.0.1.tgz#e8f3595d33a3ea66490204234b77636965307105" + integrity sha512-lJUL9imLTNi1ZfXT+DU6rBBdbiKGBuay9B6xGSPVjUeQwaH1RIGqef8RZkUtHioLmSNpPR5M4HVKJGm1j8FWVQ== ipaddr.js@1.9.1: version "1.9.1" @@ -9703,14 +9749,13 @@ is-arguments@^1.0.4, is-arguments@^1.1.1: call-bind "^1.0.2" has-tostringtag "^1.0.0" -is-array-buffer@^3.0.1, is-array-buffer@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.2.tgz#f2653ced8412081638ecb0ebbd0c41c6e0aecbbe" - integrity sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w== +is-array-buffer@^3.0.2, is-array-buffer@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.4.tgz#7a1f92b3d61edd2bc65d24f130530ea93d7fae98" + integrity sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw== dependencies: call-bind "^1.0.2" - get-intrinsic "^1.2.0" - is-typed-array "^1.1.10" + get-intrinsic "^1.2.1" is-arrayish@^0.2.1: version "0.2.1" @@ -9916,10 +9961,10 @@ is-nan@^1.3.2: call-bind "^1.0.0" define-properties "^1.1.3" -is-negative-zero@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" - integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== +is-negative-zero@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.3.tgz#ced903a027aca6381b777a5743069d7376a49747" + integrity sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw== is-node-process@^1.2.0: version "1.2.0" @@ -9995,12 +10040,12 @@ is-set@^2.0.1, is-set@^2.0.2: resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.2.tgz#90755fa4c2562dc1c5d4024760d6119b94ca18ec" integrity sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g== -is-shared-array-buffer@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" - integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== +is-shared-array-buffer@^1.0.2, is-shared-array-buffer@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz#1237f1cba059cdb62431d378dcc37d9680181688" + integrity sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg== dependencies: - call-bind "^1.0.2" + call-bind "^1.0.7" is-stream@^1.1.0: version "1.1.0" @@ -10031,12 +10076,12 @@ is-symbol@^1.0.2, is-symbol@^1.0.3: dependencies: has-symbols "^1.0.2" -is-typed-array@^1.1.10, is-typed-array@^1.1.12, is-typed-array@^1.1.3, is-typed-array@^1.1.9: - version "1.1.12" - resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.12.tgz#d0bab5686ef4a76f7a73097b95470ab199c57d4a" - integrity sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg== +is-typed-array@^1.1.13, is-typed-array@^1.1.3: + version "1.1.13" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.13.tgz#d6c5ca56df62334959322d7d7dd1cca50debe229" + integrity sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw== dependencies: - which-typed-array "^1.1.11" + which-typed-array "^1.1.14" is-typedarray@^1.0.0: version "1.0.0" @@ -10156,6 +10201,14 @@ isobject@^4.0.0: resolved "https://registry.yarnpkg.com/isobject/-/isobject-4.0.0.tgz#3f1c9155e73b192022a80819bacd0343711697b0" integrity sha512-S/2fF5wH8SJA/kmwr6HYhK/RI/OkhD84k8ntalo0iJjZikgq1XFvR5M8NPT1x5F7fBwCG3qHfnzeP/Vh/ZxCUA== +isomorphic-fetch@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-3.0.0.tgz#0267b005049046d2421207215d45d6a262b8b8b4" + integrity sha512-qvUtwJ3j6qwsF3jLxkZ72qCgjMysPzDfeV240JHiGZsANBYd+EEuu35v7dfrJ9Up0Ak07D7GGSkGhCHTqg/5wA== + dependencies: + node-fetch "^2.6.1" + whatwg-fetch "^3.4.1" + isomorphic-timers-promises@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/isomorphic-timers-promises/-/isomorphic-timers-promises-1.0.1.tgz#e4137c24dbc54892de8abae3a4b5c1ffff381598" @@ -10233,9 +10286,9 @@ istanbul-lib-source-maps@^4.0.0: source-map "^0.6.1" istanbul-reports@^3.0.2, istanbul-reports@^3.1.3, istanbul-reports@^3.1.4: - version "3.1.6" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.6.tgz#2544bcab4768154281a2f0870471902704ccaa1a" - integrity sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg== + version "3.1.7" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.7.tgz#daed12b9e1dca518e15c056e1e537e741280fa0b" + integrity sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g== dependencies: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" @@ -10856,13 +10909,13 @@ jiti@^1.21.0: integrity sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q== joi@^17.3.0: - version "17.12.0" - resolved "https://registry.yarnpkg.com/joi/-/joi-17.12.0.tgz#a3fb5715f198beb0471cd551dd26792089c308d5" - integrity sha512-HSLsmSmXz+PV9PYoi3p7cgIbj06WnEBNT28n+bbBNcPZXZFqCzzvGqpTBPujx/Z0nh1+KNQPDrNgdmQ8dq0qYw== + version "17.12.2" + resolved "https://registry.yarnpkg.com/joi/-/joi-17.12.2.tgz#283a664dabb80c7e52943c557aab82faea09f521" + integrity sha512-RonXAIzCiHLc8ss3Ibuz45u28GOsWE1UpfDXLbN/9NKbL4tCJf8TWYVKsoYuuh+sAUt7fsSNpA+r2+TBA6Wjmw== dependencies: "@hapi/hoek" "^9.3.0" "@hapi/topo" "^5.1.0" - "@sideway/address" "^4.1.4" + "@sideway/address" "^4.1.5" "@sideway/formula" "^3.0.1" "@sideway/pinpoint" "^2.0.0" @@ -11120,25 +11173,26 @@ linkifyjs@4.0.2: integrity sha512-/VSoCZiglX0VMsXmL5PN3lRg45M86lrD9PskdkA2abWaTKap1bIcJ11LS4EE55bcUl9ZOR4eZ792UtQ9E/5xLA== listhen@^1.5.5: - version "1.5.6" - resolved "https://registry.yarnpkg.com/listhen/-/listhen-1.5.6.tgz#8dc8cdccef225e39c69bcc6f6bd704447b499b51" - integrity sha512-gTpEJhT5L85L0bFgmu+Boqu5rP4DwDtEb4Exq5gdQUxWRwx4jbzdInZkmyLONo5EwIcQB0k7ZpWlpCDPdL77EQ== + version "1.7.2" + resolved "https://registry.yarnpkg.com/listhen/-/listhen-1.7.2.tgz#66b81740692269d5d8cafdc475020f2fc51afbae" + integrity sha512-7/HamOm5YD9Wb7CFgAZkKgVPA96WwhcTQoqtm2VTZGVbVVn3IWKRBTgrU7cchA3Q8k9iCsG8Osoi9GX4JsGM9g== dependencies: - "@parcel/watcher" "^2.3.0" - "@parcel/watcher-wasm" "2.3.0" - citty "^0.1.5" + "@parcel/watcher" "^2.4.1" + "@parcel/watcher-wasm" "^2.4.1" + citty "^0.1.6" clipboardy "^4.0.0" consola "^3.2.3" + crossws "^0.2.0" defu "^6.1.4" get-port-please "^3.1.2" - h3 "^1.10.0" + h3 "^1.10.2" http-shutdown "^1.2.2" jiti "^1.21.0" - mlly "^1.4.2" + mlly "^1.6.1" node-forge "^1.3.1" - pathe "^1.1.1" + pathe "^1.1.2" std-env "^3.7.0" - ufo "^1.3.2" + ufo "^1.4.0" untun "^0.1.3" uqr "^0.1.2" @@ -11309,9 +11363,9 @@ lower-case@^2.0.2: tslib "^2.0.3" lru-cache@^10.0.2: - version "10.1.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.1.0.tgz#2098d41c2dc56500e6c88584aa656c84de7d0484" - integrity sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag== + version "10.2.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.2.0.tgz#0bd445ca57363465900f4d1f9bd8db343a4d95c3" + integrity sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q== lru-cache@^5.1.1: version "5.1.1" @@ -11720,10 +11774,10 @@ mkdirp@^1.0.3, mkdirp@^1.0.4: resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== -mlly@^1.2.0, mlly@^1.4.2: - version "1.5.0" - resolved "https://registry.yarnpkg.com/mlly/-/mlly-1.5.0.tgz#8428a4617d54cc083d3009030ac79739a0e5447a" - integrity sha512-NPVQvAY1xr1QoVeG0cy8yUYC7FQcOx6evl/RjT1wL5FvzPnzOysoqB/jmx/DhssT2dYa8nxECLAaFI/+gVLhDQ== +mlly@^1.2.0, mlly@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/mlly/-/mlly-1.6.1.tgz#0983067dc3366d6314fc5e12712884e6978d028f" + integrity sha512-vLgaHvaeunuOXHSmEbZ9izxPx3USsk8KCQ8iC+aTlp5sKRSoZvwhHh5L9VbKSaVC6sJDqbyohIS76E2VmHIPAA== dependencies: acorn "^8.11.3" pathe "^1.1.2" @@ -11803,9 +11857,9 @@ mute-stream@0.0.8: integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== nan@^2.12.1: - version "2.18.0" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.18.0.tgz#26a6faae7ffbeb293a39660e88a76b82e30b7554" - integrity sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w== + version "2.19.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.19.0.tgz#bb58122ad55a6c5bc973303908d5b16cfdd5a8c0" + integrity sha512-nO1xXxfh/RWNxfd/XPfbIfFk5vgLsAxUR9y5O0cHMJu/AW9U95JLXqthYHjEp+8gQ5p96K9jUp8nbVOxCdRbtw== nanoassert@^1.0.0: version "1.1.0" @@ -11890,9 +11944,9 @@ node-dir@^0.1.10: minimatch "^3.0.2" node-fetch-native@^1.4.0, node-fetch-native@^1.4.1, node-fetch-native@^1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/node-fetch-native/-/node-fetch-native-1.6.1.tgz#f95c74917d3cebc794cdae0cd2a9c7594aad0cb4" - integrity sha512-bW9T/uJDPAJB2YNYEpWzE54U5O3MQidXsOyTfnbKYtTtFexRvGzb1waphBN4ZwP6EcIvYYEOwW0b72BpAqydTw== + version "1.6.2" + resolved "https://registry.yarnpkg.com/node-fetch-native/-/node-fetch-native-1.6.2.tgz#f439000d972eb0c8a741b65dcda412322955e1c6" + integrity sha512-69mtXOFZ6hSkYiXAVB5SqaRvrbITC/NPyqv7yuu/qw0nmgPyYbIMYYNIDhNtwPrzk0ptrimrLz/hhjvm4w5Z+w== node-fetch@^2, node-fetch@^2.6.1, node-fetch@^2.6.7: version "2.7.0" @@ -12032,9 +12086,9 @@ npm-run-path@^4.0.1: path-key "^3.0.0" npm-run-path@^5.1.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-5.2.0.tgz#224cdd22c755560253dd71b83a1ef2f758b2e955" - integrity sha512-W4/tgAXFqFA0iL7fk0+uQ3g7wkL8xJmx3XdK0VGb4cHW//eZTtKGvFBBoRKVTpY7n6ze4NL9ly7rgXcHufqXKg== + version "5.3.0" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-5.3.0.tgz#e23353d0ebb9317f174e93417e4a4d82d0249e9f" + integrity sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ== dependencies: path-key "^4.0.0" @@ -12112,18 +12166,18 @@ object-copy@^0.1.0: define-property "^0.2.5" kind-of "^3.0.3" -object-inspect@^1.13.1, object-inspect@^1.9.0: +object-inspect@^1.13.1: version "1.13.1" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== object-is@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.5.tgz#b9deeaa5fc7f1846a0faecdceec138e5778f53ac" - integrity sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw== + version "1.1.6" + resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.6.tgz#1a6a53aed2dd8f7e6775ff870bea58545956ab07" + integrity sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q== dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" + call-bind "^1.0.7" + define-properties "^1.2.1" object-keys@^1.1.1: version "1.1.1" @@ -12137,7 +12191,7 @@ object-visit@^1.0.0: dependencies: isobject "^3.0.0" -object.assign@^4.1.4: +object.assign@^4.1.4, object.assign@^4.1.5: version "4.1.5" resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.5.tgz#3a833f9ab7fdb80fc9e8d2300c803d216d8fdbb0" integrity sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ== @@ -12165,7 +12219,7 @@ object.entries@^1.1.0, object.entries@^1.1.5: define-properties "^1.2.0" es-abstract "^1.22.1" -object.getownpropertydescriptors@^2.0.3, object.getownpropertydescriptors@^2.1.2: +object.getownpropertydescriptors@^2.0.3, object.getownpropertydescriptors@^2.1.7: version "2.1.7" resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.7.tgz#7a466a356cd7da4ba8b9e94ff6d35c3eeab5d56a" integrity sha512-PrJz0C2xJ58FNn11XV2lr4Jt5Gzl94qpy9Lu0JlfEj14z88sqbSBJCBEzdlNUCzY2gburhbrwOZ5BHCmuNUy0g== @@ -12214,6 +12268,11 @@ ofetch@^1.3.3: node-fetch-native "^1.4.0" ufo "^1.3.0" +ohash@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/ohash/-/ohash-1.1.3.tgz#f12c3c50bfe7271ce3fd1097d42568122ccdcf07" + integrity sha512-zuHHiGTYTA1sYJ/wZN+t5HKZaH23i4yI1HMwbuXm24Nid7Dv0KcuRlKoNKS9UNfAVSBlnGLcuQrnOKWOZoEGaw== + on-exit-leak-free@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/on-exit-leak-free/-/on-exit-leak-free-0.2.0.tgz#b39c9e3bf7690d890f4861558b0d7b90a442d209" @@ -12447,16 +12506,17 @@ parent-module@^1.0.0: dependencies: callsites "^3.0.0" -parse-asn1@^5.0.0, parse-asn1@^5.1.6: - version "5.1.6" - resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.6.tgz#385080a3ec13cb62a62d39409cb3e88844cdaed4" - integrity sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw== +parse-asn1@^5.0.0, parse-asn1@^5.1.7: + version "5.1.7" + resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.7.tgz#73cdaaa822125f9647165625eb45f8a051d2df06" + integrity sha512-CTM5kuWR3sx9IFamcl5ErfPl6ea/N8IYwiJ+vpeB2g+1iknv7zBl5uPwbMbRVznRVbrNY6lGuDoE5b30grmbqg== dependencies: - asn1.js "^5.2.0" - browserify-aes "^1.0.0" - evp_bytestokey "^1.0.0" - pbkdf2 "^3.0.3" - safe-buffer "^5.1.1" + asn1.js "^4.10.1" + browserify-aes "^1.2.0" + evp_bytestokey "^1.0.3" + hash-base "~3.0" + pbkdf2 "^3.1.2" + safe-buffer "^5.2.1" parse-entities@^2.0.0: version "2.0.0" @@ -12608,7 +12668,7 @@ pathe@^1.1.0, pathe@^1.1.1, pathe@^1.1.2: resolved "https://registry.yarnpkg.com/pathe/-/pathe-1.1.2.tgz#6c4cb47a945692e48a1ddd6e4094d170516437ec" integrity sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ== -pbkdf2@^3.0.3, pbkdf2@^3.0.9: +pbkdf2@^3.0.3, pbkdf2@^3.0.9, pbkdf2@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.2.tgz#dd822aa0887580e52f1a039dc3eda108efae3075" integrity sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA== @@ -12731,17 +12791,17 @@ platform@1.3.6: resolved "https://registry.yarnpkg.com/platform/-/platform-1.3.6.tgz#48b4ce983164b209c2d45a107adb31f473a6e7a7" integrity sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg== -playwright-core@1.41.1, playwright-core@>=1.2.0: - version "1.41.1" - resolved "https://registry.yarnpkg.com/playwright-core/-/playwright-core-1.41.1.tgz#9c152670010d9d6f970f34b68e3e935d3c487431" - integrity sha512-/KPO5DzXSMlxSX77wy+HihKGOunh3hqndhqeo/nMxfigiKzogn8kfL0ZBDu0L1RKgan5XHCPmn6zXd2NUJgjhg== +playwright-core@1.42.1, playwright-core@>=1.2.0: + version "1.42.1" + resolved "https://registry.yarnpkg.com/playwright-core/-/playwright-core-1.42.1.tgz#13c150b93c940a3280ab1d3fbc945bc855c9459e" + integrity sha512-mxz6zclokgrke9p1vtdy/COWBH+eOZgYUVVU34C73M+4j4HLlQJHtfcqiqqxpP0o8HhMkflvfbquLX5dg6wlfA== playwright@^1.14.0: - version "1.41.1" - resolved "https://registry.yarnpkg.com/playwright/-/playwright-1.41.1.tgz#83325f34165840d019355c2a78a50f21ed9b9c85" - integrity sha512-gdZAWG97oUnbBdRL3GuBvX3nDDmUOuqzV/D24dytqlKt+eI5KbwusluZRGljx1YoJKZ2NRPaeWiFTeGZO7SosQ== + version "1.42.1" + resolved "https://registry.yarnpkg.com/playwright/-/playwright-1.42.1.tgz#79c828b51fe3830211137550542426111dc8239f" + integrity sha512-PgwB03s2DZBcNRoW+1w9E+VkLBxweib6KTXM0M3tkiT4jVxKSi6PmVJ591J+0u10LUrgxB7dLRbiJqO5s2QPMg== dependencies: - playwright-core "1.41.1" + playwright-core "1.42.1" optionalDependencies: fsevents "2.3.2" @@ -12758,9 +12818,9 @@ pnp-webpack-plugin@1.6.4: ts-pnp "^1.1.6" polished@^4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/polished/-/polished-4.2.2.tgz#2529bb7c3198945373c52e34618c8fe7b1aa84d1" - integrity sha512-Sz2Lkdxz6F2Pgnpi9U5Ng/WdWAUZxmHrNPoVlm3aAemxoy2Qy7LGjQg4uf8qKelDAUW94F4np3iH2YPf2qefcQ== + version "4.3.1" + resolved "https://registry.yarnpkg.com/polished/-/polished-4.3.1.tgz#5a00ae32715609f83d89f6f31d0f0261c6170548" + integrity sha512-OBatVyC/N7SCW/FaDHrSd+vn0o5cS855TOmYi4OkdWUMSJCET/xip//ch8xGUvtr3i44X9LVyWwQlRMTN3pwSA== dependencies: "@babel/runtime" "^7.17.8" @@ -12769,6 +12829,11 @@ posix-character-classes@^0.1.0: resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" integrity sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg== +possible-typed-array-names@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz#89bb63c6fada2c3e90adc4a647beeeb39cc7bf8f" + integrity sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q== + postcss-flexbugs-fixes@^4.2.1: version "4.2.1" resolved "https://registry.yarnpkg.com/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-4.2.1.tgz#9218a65249f30897deab1033aced8578562a6690" @@ -12893,9 +12958,9 @@ postcss@^7.0.14, postcss@^7.0.26, postcss@^7.0.32, postcss@^7.0.36, postcss@^7.0 source-map "^0.6.1" postcss@^8.2.15: - version "8.4.33" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.33.tgz#1378e859c9f69bf6f638b990a0212f43e2aaa742" - integrity sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg== + version "8.4.35" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.35.tgz#60997775689ce09011edf083a549cea44aabe2f7" + integrity sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA== dependencies: nanoid "^3.3.7" picocolors "^1.0.0" @@ -12999,14 +13064,14 @@ promise.allsettled@^1.0.0: iterate-value "^1.0.2" promise.prototype.finally@^3.1.0: - version "3.1.7" - resolved "https://registry.yarnpkg.com/promise.prototype.finally/-/promise.prototype.finally-3.1.7.tgz#9d163f58edf3004d14878c988a22b1cb45e03407" - integrity sha512-iL9OcJRUZcCE5xn6IwhZxO+eMM0VEXjkETHy+Nk+d9q3s7kxVtPg+mBlMO+ZGxNKNMODyKmy/bOyt/yhxTnvEw== + version "3.1.8" + resolved "https://registry.yarnpkg.com/promise.prototype.finally/-/promise.prototype.finally-3.1.8.tgz#b97bc1bbca74dc21b6e978c85a70752a7a0b7c3a" + integrity sha512-aVDtsXOml9iuMJzUco9J1je/UrIT3oMYfWkCTiUhkt+AvZw72q4dUZnR/R/eB3h5GeAagQVXvM1ApoYniJiwoA== dependencies: - call-bind "^1.0.2" + call-bind "^1.0.5" define-properties "^1.2.1" - es-abstract "^1.22.1" - get-intrinsic "^1.2.1" + es-abstract "^1.22.3" + es-errors "^1.0.0" set-function-name "^2.0.1" prompts@^2.0.1, prompts@^2.4.0, prompts@^2.4.1: @@ -13145,13 +13210,20 @@ qs@6.11.0: dependencies: side-channel "^1.0.4" -qs@6.11.2, qs@^6.10.0, qs@^6.11.2: +qs@6.11.2: version "6.11.2" resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.2.tgz#64bea51f12c1f5da1bc01496f48ffcff7c69d7d9" integrity sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA== dependencies: side-channel "^1.0.4" +qs@^6.10.0, qs@^6.11.2: + version "6.12.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.12.0.tgz#edd40c3b823995946a8a0b1f208669c7a200db77" + integrity sha512-trVZiI6RMOkO476zLGaBIzszOdFPnCCXHPG9kn0yuS1uz6xdVxPfZdB3vUig9pxPFDM9BRAgz/YUIVQ1/vuiUg== + dependencies: + side-channel "^1.0.6" + query-string@7.1.3: version "7.1.3" resolved "https://registry.yarnpkg.com/query-string/-/query-string-7.1.3.tgz#a1cf90e994abb113a325804a972d98276fe02328" @@ -13212,10 +13284,10 @@ range-parser@^1.2.1, range-parser@~1.2.1: resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== -raw-body@2.5.1: - version "2.5.1" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857" - integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== +raw-body@2.5.2: + version "2.5.2" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a" + integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA== dependencies: bytes "3.1.2" http-errors "2.0.0" @@ -13387,7 +13459,7 @@ read-pkg@^5.2.0: parse-json "^5.0.0" type-fest "^0.6.0" -"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6: +"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@^2.3.8, readable-stream@~2.3.6: version "2.3.8" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== @@ -13400,7 +13472,7 @@ read-pkg@^5.2.0: string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.5.0, readable-stream@^3.6.0, readable-stream@^3.6.2: +readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.5.0, readable-stream@^3.6.0: version "3.6.2" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== @@ -13519,14 +13591,15 @@ regex-not@^1.0.0, regex-not@^1.0.2: extend-shallow "^3.0.2" safe-regex "^1.1.0" -regexp.prototype.flags@^1.5.0, regexp.prototype.flags@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz#90ce989138db209f81492edd734183ce99f9677e" - integrity sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg== +regexp.prototype.flags@^1.5.0, regexp.prototype.flags@^1.5.1, regexp.prototype.flags@^1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz#138f644a3350f981a858c44f6bb1a61ff59be334" + integrity sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - set-function-name "^2.0.0" + call-bind "^1.0.6" + define-properties "^1.2.1" + es-errors "^1.3.0" + set-function-name "^2.0.1" regexpp@^3.0.0, regexpp@^3.1.0, regexpp@^3.2.0: version "3.2.0" @@ -13826,7 +13899,7 @@ rxjs@^7.5.5, rxjs@^7.8.1: dependencies: tslib "^2.1.0" -safe-array-concat@^1.0.0, safe-array-concat@^1.0.1: +safe-array-concat@^1.0.0, safe-array-concat@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.0.tgz#8d0cae9cb806d6d1c06e08ab13d847293ebe0692" integrity sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg== @@ -13851,13 +13924,13 @@ safe-buffer@5.2.1, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, s resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== -safe-regex-test@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.2.tgz#3ba32bdb3ea35f940ee87e5087c60ee786c3f6c5" - integrity sha512-83S9w6eFq12BBIJYvjMux6/dkirb8+4zJRA9cxNBVb7Wq5fJBW+Xze48WqR8pxua7bDuAaaAxtVVd4Idjp1dBQ== +safe-regex-test@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.3.tgz#a5b4c0f06e0ab50ea2c395c14d8371232924c377" + integrity sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw== dependencies: - call-bind "^1.0.5" - get-intrinsic "^1.2.2" + call-bind "^1.0.6" + es-errors "^1.3.0" is-regex "^1.1.4" safe-regex@^1.1.0: @@ -13872,7 +13945,7 @@ safe-stable-stringify@^2.1.0: resolved "https://registry.yarnpkg.com/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz#138c84b6f6edb3db5f8ef3ef7115b8f55ccbf886" integrity sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g== -"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.1.0: +"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== @@ -13913,9 +13986,9 @@ sass@1.56.1: source-map-js ">=0.6.2 <2.0.0" sass@^1.49.0: - version "1.70.0" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.70.0.tgz#761197419d97b5358cb25f9dd38c176a8a270a75" - integrity sha512-uUxNQ3zAHeAx5nRFskBnrWzDUJrrvpCPD5FNAoRvTi0WwremlheES3tg+56PaVtCs5QDRX5CBLxxKMDJMEa1WQ== + version "1.71.1" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.71.1.tgz#dfb09c63ce63f89353777bbd4a88c0a38386ee54" + integrity sha512-wovtnV2PxzteLlfNzbgm1tFXPLoZILYAMJtvoXXkD7/+1uP41eKkIt1ypWq5/q2uT94qHjXehEYfmjKOvjL9sg== dependencies: chokidar ">=3.0.0 <4.0.0" immutable "^4.0.0" @@ -13992,9 +14065,9 @@ scryptsy@2.1.0: integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== semver@7.x, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.5.3: - version "7.5.4" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" - integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== + version "7.6.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d" + integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg== dependencies: lru-cache "^6.0.0" @@ -14074,25 +14147,27 @@ set-cookie-parser@^2.4.6: resolved "https://registry.yarnpkg.com/set-cookie-parser/-/set-cookie-parser-2.6.0.tgz#131921e50f62ff1a66a461d7d62d7b21d5d15a51" integrity sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ== -set-function-length@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.0.tgz#2f81dc6c16c7059bda5ab7c82c11f03a515ed8e1" - integrity sha512-4DBHDoyHlM1IRPGYcoxexgh67y4ueR53FKV1yyxwFMY7aCqcN/38M1+SwZ/qJQ8iLv7+ck385ot4CcisOAPT9w== +set-function-length@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.1.tgz#47cc5945f2c771e2cf261c6737cf9684a2a5e425" + integrity sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g== dependencies: - define-data-property "^1.1.1" + define-data-property "^1.1.2" + es-errors "^1.3.0" function-bind "^1.1.2" - get-intrinsic "^1.2.2" + get-intrinsic "^1.2.3" gopd "^1.0.1" has-property-descriptors "^1.0.1" set-function-name@^2.0.0, set-function-name@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.1.tgz#12ce38b7954310b9f61faa12701620a0c882793a" - integrity sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA== + version "2.0.2" + resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.2.tgz#16a705c5a0dc2f5e638ca96d8a8cd4e1c2b90985" + integrity sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ== dependencies: - define-data-property "^1.0.1" + define-data-property "^1.1.4" + es-errors "^1.3.0" functions-have-names "^1.2.3" - has-property-descriptors "^1.0.0" + has-property-descriptors "^1.0.2" set-value@^2.0.0, set-value@^2.0.1: version "2.0.1" @@ -14175,14 +14250,15 @@ shx@0.3.4: minimist "^1.2.3" shelljs "^0.8.5" -side-channel@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" - integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== +side-channel@^1.0.4, side-channel@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.6.tgz#abd25fb7cd24baf45466406b1096b7831c9215f2" + integrity sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA== dependencies: - call-bind "^1.0.0" - get-intrinsic "^1.0.2" - object-inspect "^1.9.0" + call-bind "^1.0.7" + es-errors "^1.3.0" + get-intrinsic "^1.2.4" + object-inspect "^1.13.1" signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: version "3.0.7" @@ -14375,9 +14451,9 @@ spdx-correct@^3.0.0: spdx-license-ids "^3.0.0" spdx-exceptions@^2.1.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.4.0.tgz#c07a4ede25b16e4f78e6707bbd84b15a45c19c1b" - integrity sha512-hcjppoJ68fhxA/cjbN4T8N6uCUejN8yFw69ttpqtBeCbF3u13n7mb31NB9jKwGTTWWnt9IbRA/mf1FprYS8wfw== + version "2.5.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz#5d607d27fc806f66d7b64a766650fa890f04ed66" + integrity sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w== spdx-expression-parse@^3.0.0: version "3.0.1" @@ -14388,9 +14464,9 @@ spdx-expression-parse@^3.0.0: spdx-license-ids "^3.0.0" spdx-license-ids@^3.0.0: - version "3.0.16" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz#a14f64e0954f6e25cc6587bd4f392522db0d998f" - integrity sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw== + version "3.0.17" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.17.tgz#887da8aa73218e51a1d917502d79863161a93f9c" + integrity sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg== split-on-first@^1.0.0: version "1.1.0" @@ -14481,9 +14557,9 @@ stop-iteration-iterator@^1.0.0: internal-slot "^1.0.4" store2@^2.12.0: - version "2.14.2" - resolved "https://registry.yarnpkg.com/store2/-/store2-2.14.2.tgz#56138d200f9fe5f582ad63bc2704dbc0e4a45068" - integrity sha512-siT1RiqlfQnGqgT/YzXVUNsom9S0H1OX+dpdGN1xkyYATo4I6sep5NmsRD/40s3IIOvlCq6akxkqG82urIZW1w== + version "2.14.3" + resolved "https://registry.yarnpkg.com/store2/-/store2-2.14.3.tgz#24077d7ba110711864e4f691d2af941ec533deb5" + integrity sha512-4QcZ+yx7nzEFiV4BMLnr/pRa5HYzNITX2ri0Zh6sT9EyQHbBHacC6YigllUPU9X3D0f/22QCgfokpKs52YRrUg== storybook-css-modules@1.0.8: version "1.0.8" @@ -14535,7 +14611,7 @@ stream-http@^3.2.0: readable-stream "^3.6.0" xtend "^4.0.2" -stream-shift@^1.0.0: +stream-shift@^1.0.0, stream-shift@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.3.tgz#85b8fab4d71010fc3ba8772e8046cc49b8a3864b" integrity sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ== @@ -14808,14 +14884,15 @@ symbol-tree@^3.2.4: integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== symbol.prototype.description@^1.0.0: - version "1.0.5" - resolved "https://registry.yarnpkg.com/symbol.prototype.description/-/symbol.prototype.description-1.0.5.tgz#d30e01263b6020fbbd2d2884a6276ce4d49ab568" - integrity sha512-x738iXRYsrAt9WBhRCVG5BtIC3B7CUkFwbHW2zOvGtwM33s7JjrCDyq8V0zgMYVb5ymsL8+qkzzpANH63CPQaQ== + version "1.0.6" + resolved "https://registry.yarnpkg.com/symbol.prototype.description/-/symbol.prototype.description-1.0.6.tgz#abd49d4e2d8fcd2bf8e4d6ecec735ddabd271b67" + integrity sha512-VgVgtEabORsQtmuindtO7v8fF+bsKxUkvEMFj+ecBK6bomrwv5JUSWdMoC3ypa9+Jaqp/wOzkWk4f6I+p5GzyA== dependencies: - call-bind "^1.0.2" - get-symbol-description "^1.0.0" - has-symbols "^1.0.2" - object.getownpropertydescriptors "^2.1.2" + call-bind "^1.0.7" + es-errors "^1.3.0" + get-symbol-description "^1.0.2" + has-symbols "^1.0.3" + object.getownpropertydescriptors "^2.1.7" synchronous-promise@^2.0.15: version "2.0.17" @@ -14938,9 +15015,9 @@ terser@^4.1.2, terser@^4.6.3: source-map-support "~0.5.12" terser@^5.26.0, terser@^5.3.4: - version "5.27.0" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.27.0.tgz#70108689d9ab25fef61c4e93e808e9fd092bf20c" - integrity sha512-bi1HRwVRskAjheeYl291n3JC4GgO/Ty4z1nVs5AAsmonJulGxpSektecnNedrwK9C7vpvVtcX3cw00VSLt7U2A== + version "5.29.1" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.29.1.tgz#44e58045b70c09792ba14bfb7b4e14ca8755b9fa" + integrity sha512-lZQ/fyaIGxsbGxApKmoPTODIzELy3++mXhS5hOqaAWZjQtpq/hFHAc+rm29NND1rYRxRWKcjuARNwULNXa5RtQ== dependencies: "@jridgewell/source-map" "^0.3.3" acorn "^8.8.2" @@ -15225,44 +15302,49 @@ type-is@~1.6.18: media-typer "0.3.0" mime-types "~2.1.24" -typed-array-buffer@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz#18de3e7ed7974b0a729d3feecb94338d1472cd60" - integrity sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw== +typed-array-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz#1867c5d83b20fcb5ccf32649e5e2fc7424474ff3" + integrity sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ== dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.2.1" - is-typed-array "^1.1.10" + call-bind "^1.0.7" + es-errors "^1.3.0" + is-typed-array "^1.1.13" -typed-array-byte-length@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz#d787a24a995711611fb2b87a4052799517b230d0" - integrity sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA== +typed-array-byte-length@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz#d92972d3cff99a3fa2e765a28fcdc0f1d89dec67" + integrity sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw== dependencies: - call-bind "^1.0.2" + call-bind "^1.0.7" for-each "^0.3.3" - has-proto "^1.0.1" - is-typed-array "^1.1.10" + gopd "^1.0.1" + has-proto "^1.0.3" + is-typed-array "^1.1.13" -typed-array-byte-offset@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz#cbbe89b51fdef9cd6aaf07ad4707340abbc4ea0b" - integrity sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg== +typed-array-byte-offset@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz#f9ec1acb9259f395093e4567eb3c28a580d02063" + integrity sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA== dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" + available-typed-arrays "^1.0.7" + call-bind "^1.0.7" for-each "^0.3.3" - has-proto "^1.0.1" - is-typed-array "^1.1.10" + gopd "^1.0.1" + has-proto "^1.0.3" + is-typed-array "^1.1.13" -typed-array-length@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.4.tgz#89d83785e5c4098bec72e08b319651f0eac9c1bb" - integrity sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng== +typed-array-length@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.5.tgz#57d44da160296d8663fd63180a1802ebf25905d5" + integrity sha512-yMi0PlwuznKHxKmcpoOdeLwxBoVPkqZxd7q2FgMkmD3bNwvF5VW0+UlUQ1k1vmktTu4Yu13Q0RIxEP8+B+wloA== dependencies: - call-bind "^1.0.2" + call-bind "^1.0.7" for-each "^0.3.3" - is-typed-array "^1.1.9" + gopd "^1.0.1" + has-proto "^1.0.3" + is-typed-array "^1.1.13" + possible-typed-array-names "^1.0.0" typedarray-to-buffer@^3.1.5: version "3.1.5" @@ -15281,10 +15363,10 @@ typescript@4.7.3: resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.7.3.tgz#8364b502d5257b540f9de4c40be84c98e23a129d" integrity sha512-WOkT3XYvrpXx4vMMqlD+8R8R37fZkjyLGlxavMc4iB8lrl8L0DeTcHbYgw/v0N/z9wAFsgBhcsF0ruoySS22mA== -ufo@^1.3.0, ufo@^1.3.1, ufo@^1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/ufo/-/ufo-1.3.2.tgz#c7d719d0628a1c80c006d2240e0d169f6e3c0496" - integrity sha512-o+ORpgGwaYQXgqGDwd+hkS4PuZ3QnmqMMxRuajK/a38L6fTpcE5GPIfrf+L/KemFzfUpeUQc1rRS1iDBozvnFA== +ufo@^1.3.0, ufo@^1.3.1, ufo@^1.3.2, ufo@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/ufo/-/ufo-1.4.0.tgz#39845b31be81b4f319ab1d99fd20c56cac528d32" + integrity sha512-Hhy+BhRBleFjpJ2vchUNN40qgkh0366FWJGqVLYBHev0vpHTrXSA0ryT+74UiW6KWsldNurQMKGqCm1M2zBciQ== uglify-js@^3.1.4: version "3.17.4" @@ -15318,7 +15400,7 @@ undici-types@~5.26.4: resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== -unenv@^1.8.0: +unenv@^1.9.0: version "1.9.0" resolved "https://registry.yarnpkg.com/unenv/-/unenv-1.9.0.tgz#469502ae85be1bd3a6aa60f810972b1a904ca312" integrity sha512-QKnFNznRxmbOF1hDgzpqrlIf6NC5sbZ2OJ+5Wl3OX8uM+LUJXbj4TXvLJCtwbPTmbMHCLIz6JLKNinNsMShK9g== @@ -15820,9 +15902,9 @@ webpack-filter-warnings-plugin@^1.2.1: integrity sha512-Ez6ytc9IseDMLPo0qCuNNYzgtUl8NovOqjIq4uAU8LTD4uoa1w1KpZyyzFtLTEMZpkkOkLfL9eN+KGYdk1Qtwg== webpack-hot-middleware@^2.25.1: - version "2.26.0" - resolved "https://registry.yarnpkg.com/webpack-hot-middleware/-/webpack-hot-middleware-2.26.0.tgz#0a103c9b2836c1f27d7f74bbe0e96c99c82d0265" - integrity sha512-okzjec5sAEy4t+7rzdT8eRyxsk0FDSmBPN2KwX4Qd+6+oQCfe5Ve07+u7cJvofgB+B4w5/4dO4Pz0jhhHyyPLQ== + version "2.26.1" + resolved "https://registry.yarnpkg.com/webpack-hot-middleware/-/webpack-hot-middleware-2.26.1.tgz#87214f1e3f9f3acab9271fef9e6ed7b637d719c0" + integrity sha512-khZGfAeJx6I8K9zKohEWWYN6KDlVw2DHownoe+6Vtwj1LP9WFgegXnVMSkZ/dBEBtXFwrkkydsaPFlB7f8wU2A== dependencies: ansi-html-community "0.0.8" html-entities "^2.1.0" @@ -15886,9 +15968,9 @@ webpack@4: webpack-sources "^1.4.1" "webpack@>=4.43.0 <6.0.0": - version "5.90.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.90.0.tgz#313bfe16080d8b2fee6e29b6c986c0714ad4290e" - integrity sha512-bdmyXRCXeeNIePv6R6tGPyy20aUobw4Zy8r0LUS2EWO+U+Ke/gYDgsCh7bl5rB6jPpr4r0SZa6dPxBxLooDT3w== + version "5.90.3" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.90.3.tgz#37b8f74d3ded061ba789bb22b31e82eed75bd9ac" + integrity sha512-h6uDYlWCctQRuXBs1oYpVe6sFcWedl0dpcVaTf/YF67J9bKvwJajFulMVSYKHrksMB3I/pIagRzDxwxkebuzKA== dependencies: "@types/eslint-scope" "^3.7.3" "@types/estree" "^1.0.5" @@ -15922,6 +16004,11 @@ whatwg-encoding@^2.0.0: dependencies: iconv-lite "0.6.3" +whatwg-fetch@^3.4.1: + version "3.6.20" + resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.6.20.tgz#580ce6d791facec91d37c72890995a0b48d31c70" + integrity sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg== + whatwg-mimetype@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz#5fa1a7623867ff1af6ca3dc72ad6b8a4208beba7" @@ -15977,16 +16064,16 @@ which-module@^2.0.0: resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.1.tgz#776b1fe35d90aebe99e8ac15eb24093389a4a409" integrity sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ== -which-typed-array@^1.1.11, which-typed-array@^1.1.13, which-typed-array@^1.1.2: - version "1.1.13" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.13.tgz#870cd5be06ddb616f504e7b039c4c24898184d36" - integrity sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow== +which-typed-array@^1.1.13, which-typed-array@^1.1.14, which-typed-array@^1.1.2: + version "1.1.14" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.14.tgz#1f78a111aee1e131ca66164d8bdc3ab062c95a06" + integrity sha512-VnXFiIW8yNn9kIHN88xvZ4yOWchftKDsRJ8fEPacX/wl1lOvBrhsJ/OeJCXq7B0AaijRuqgzSKalJoPk+D8MPg== dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.4" + available-typed-arrays "^1.0.6" + call-bind "^1.0.5" for-each "^0.3.3" gopd "^1.0.1" - has-tostringtag "^1.0.0" + has-tostringtag "^1.0.1" which@^1.2.12, which@^1.2.9: version "1.3.1"