{"version":3,"sources":["logic/currencyValues/store/actions/setAvailableCurrencies.ts","logic/wallets/transactionDataCheck/images/ledger.jpg","logic/wallets/transactionDataCheck/index.ts","logic/wallets/onboard.ts","logic/wallets/store/actions/updateProviderWallet.ts","logic/wallets/store/actions/updateProviderAccount.ts","logic/wallets/store/actions/updateProviderNetwork.ts","logic/wallets/store/actions/updateProviderEns.ts","routes/safe/components/Transactions/TxList/assets/no-transactions.svg","config/chain.d.ts","logic/hooks/useDebounce.tsx","routes/safe/components/Transactions/TxList/hooks/useTransactionStatus.ts","components/Spacer/index.tsx","routes/safe/components/Transactions/helpers/TxEstimatedFeesDetail/index.tsx","logic/hooks/useEstimationStatus.tsx","logic/hooks/useExecutionStatus.ts","utils/css.ts","components/Collapse/index.tsx","logic/safe/hooks/useSafeActions.tsx","logic/safe/transactions/txMonitor.ts","assets/icons/safe-created.svg","logic/safe/api/fetchTokenCurrenciesBalances.ts","logic/hooks/useEstimateSafeCreationGas.tsx","logic/safe/hooks/useTokenInfo.tsx","routes/safe/components/Settings/SpendingLimit/style.ts","routes/safe/components/Settings/SpendingLimit/FormFields/ResetTime.tsx","routes/safe/components/Settings/SpendingLimit/FormFields/Amount.tsx","routes/safe/components/Settings/SpendingLimit/InfoDisplay/AddressInfo.tsx","routes/safe/components/Settings/SpendingLimit/InfoDisplay/ResetTimeInfo.tsx","routes/safe/components/Settings/SpendingLimit/InfoDisplay/TokenInfo.tsx","routes/safe/components/Transactions/TxList/SpendingLimitDetails.tsx","routes/safe/components/AddressBook/EllipsisTransactionDetails/index.tsx","routes/safe/components/Transactions/TxList/AddressInfo.tsx","routes/safe/components/Transactions/TxList/InfoDetails.tsx","routes/safe/components/Transactions/TxList/TxInfoDetails.tsx","routes/safe/components/Transactions/TxList/MethodDetails.tsx","utils/camelCaseToSpaces.ts","routes/safe/components/Transactions/TxList/AlertTooltipWarning.tsx","routes/safe/components/Transactions/TxList/DelegateCallWarning.tsx","routes/safe/components/Transactions/TxList/MultiSendDetails.tsx","routes/safe/components/Transactions/TxList/TxData.tsx","routes/safe/components/Transactions/TxList/TxExpandedActions.tsx","routes/safe/components/Transactions/TxList/ThresholdWarning.tsx","routes/safe/components/Transactions/TxList/TxInfoSettings.tsx","routes/safe/components/Transactions/TxList/TxInfoTransfer.tsx","routes/safe/components/Transactions/TxList/TxInfo.tsx","routes/safe/components/Transactions/TxList/TxOwners.tsx","routes/safe/components/Transactions/TxList/TxInfoMultiSend.tsx","routes/safe/components/Transactions/TxList/TxSummary.tsx","routes/safe/components/Transactions/TxList/TxModuleInfo.tsx","routes/safe/components/Transactions/TxList/TxShareButton.tsx","routes/safe/components/Transactions/TxList/TxDetails.tsx","routes/safe/components/Transactions/TxList/hooks/useTransactionDetails.ts","routes/opening/components/Footer.tsx","routes/opening/steps.ts","routes/opening/assets/vault-error.svg","routes/opening/assets/creation-process.gif","routes/opening/utils/getSafeAddressFromLogs.ts","routes/opening/index.tsx","logic/safe/store/actions/TxMultiSender.ts","components/OnboardingTooltip/index.tsx","routes/safe/components/Transactions/TxList/BatchExecuteButton.tsx","routes/safe/components/Transactions/TxList/BatchExecute.tsx","routes/safe/components/Transactions/TxList/QueueTransactions.tsx","routes/safe/components/Transactions/TxList/assets/circle-cross-red.svg","routes/safe/components/Transactions/TxList/assets/incoming.svg","routes/safe/components/Transactions/TxList/assets/outgoing.svg","routes/safe/components/Transactions/TxList/assets/settings.svg","routes/safe/components/Transactions/TxList/hooks/useTransactionType.ts","routes/safe/components/Transactions/helpers/EditTxParametersForm/style.ts","routes/safe/components/Transactions/helpers/EditTxParametersForm/index.tsx","routes/safe/components/Transactions/helpers/EditableTxParameters.tsx","routes/safe/container/hooks/useTransactionParameters.ts","components/CustomIconText/index.tsx","routes/safe/components/Transactions/TxList/TxCollapsedActions.tsx","routes/safe/components/Transactions/TxList/TokenTransferAmount.tsx","routes/safe/components/Transactions/TxList/TxCollapsed.tsx","logic/contracts/generateBatchRequests.ts","logic/safe/utils/spendingLimits.ts","logic/safe/api/fetchSafesByOwner.ts","logic/safe/hooks/useOwnerSafes.ts","config/cache/chains.ts","logic/hooks/useRecommendedNonce.tsx","components/ReviewInfoText/index.tsx","components/layout/Col/index.module.scss","components/layout/Block/index.module.scss","utils/isValidAddress.ts","logic/contracts/safeContractErrors.ts","walliro/containers/AppLayout/Header/ProviderDetails/HidePairingModule.tsx","components/layout/Heading/index.module.scss","components/StepperWalliro/style.ts","components/StepperWalliro/stepperContext.tsx","components/StepperWalliro/StepperHeader.tsx","components/StepperWalliro/Stepper.tsx","components/StepperFormWalliro/StepperForm.tsx","routes/WalliroStarter/fields/starterFields.tsx","routes/WalliroStarter/style.ts","routes/WalliroStarter/StepOne.tsx","routes/WalliroStarter/StepTwo.tsx","routes/WalliroStarter/StepThere.tsx","routes/WalliroStarter/StepFour/Create.tsx","routes/WalliroStarter/fields/utils.ts","routes/WalliroStarter/StepFour/Load/LoadSafeAddressStep.tsx","routes/WalliroStarter/StepFour/Load/LoadSafeOwnersStep.tsx","routes/WalliroStarter/StepFour/Load/index.tsx","routes/WalliroStarter/StepFour/index.tsx","routes/WalliroStarter/components/SafeCreationProcess.tsx","routes/WalliroStarter/StepFive/Create.tsx","routes/WalliroStarter/StepFive/Load.tsx","routes/WalliroStarter/StepFive/index.tsx","routes/WalliroStarter/index.tsx","logic/tokens/store/selectors/index.ts","routes/safe/container/selector.ts","logic/safe/store/selectors/utils.ts","logic/safe/store/selectors/gatewayTransactions.ts","components/layout/Button/index.tsx","walliro/containers/AppLayout/Sidebar/style.module.scss","logic/addressBook/store/selectors/index.ts","logic/safe/transactions/gas.ts","routes/safe/components/Transactions/helpers/utils.tsx","components/layout/Img/index.tsx","components/Track/index.tsx","utils/events/createLoadSafe.ts","logic/wallets/store/actions/index.ts","logic/safe/store/actions/pendingTransactions.ts","logic/notifications/notificationTypes.ts","logic/notifications/txNotificationBuilder.tsx","logic/safe/utils/safeVersion.ts","logic/tokens/utils/humanReadableValue.ts","utils/prefixedAddress.ts","logic/hooks/useEstimateTransactionGas.tsx","components/forms/TextField/index.tsx","logic/addressBook/model/addressBook.ts","logic/currentSession/store/selectors/index.ts","components/forms/Field/index.tsx","utils/requests.ts","safe-deployments/types.js","safe-deployments/safes.js","safe-deployments/factories.js","safe-deployments/libs.js","logic/safe/store/actions/transactions/gatewayTransactions.ts","safe-deployments/handler.js","routes/safe/components/Transactions/TxList/MethodValue.tsx","routes/safe/components/Transactions/TxList/TxDataRow.tsx","walliro/containers/AppLayout/Header/style.module.scss","routes/safe/components/Transactions/TxList/TxLocationProvider.tsx","logic/safe/store/selectors/pendingTransactions.ts","safe-deployments/index.js","components/NetworkLabel/NetworkLabel.tsx","logic/addressBook/store/actions/index.ts","logic/config/utils/index.ts","logic/cookies/store/actions/openCookieBanner.ts","logic/cookies/store/reducer/cookies.ts","logic/wallets/store/middleware/index.ts","logic/safe/transactions/awaitingTransactions.ts","logic/safe/store/middleware/notificationsMiddleware.ts","logic/safe/store/middleware/safeStorage.ts","logic/currentSession/store/actions/loadCurrentSessionFromStorage.ts","logic/safe/store/actions/loadSafesFromStorage.ts","logic/safe/transactions/pendingTxMonitor.ts","logic/safe/store/middleware/pendingTransactionsMiddleware.ts","store/index.ts","logic/config/store/middleware/index.ts","logic/safe/store/middleware/gatewayTransactionsMiddleware.ts","utils/events/overview.ts","logic/hooks/useTxStatus.ts","logic/wallets/pairing/utils.ts","routes/safe/components/Transactions/TxList/Filter/index.tsx","routes/safe/components/Transactions/TxList/Filter/RHFTextField.tsx","routes/safe/components/Transactions/TxList/Filter/RHFAddressSearchField.tsx","components/layout/Backdrop/index.tsx","routes/safe/components/Transactions/TxList/assets/filter-icon.svg","routes/safe/components/Transactions/TxList/Filter/validation.ts","walliro/hook/use-theme.ts","walliro/hook/use-sidebar.ts","walliro/hook/index.tsx","walliro/containers/AppLayout/Header/WalletIcon/icons/icon-tallyho.svg","walliro/containers/AppLayout/Header/WalletIcon/icons/icon-wallet-connect.svg","walliro/containers/AppLayout/Header/WalletIcon/icons/icon-trezor.svg","walliro/containers/AppLayout/Header/WalletIcon/icons/icon-ledger.svg","walliro/containers/AppLayout/Header/WalletIcon/icons/icon-trust.svg","walliro/containers/AppLayout/Header/WalletIcon/icons/icon-lattice.svg","walliro/containers/AppLayout/Header/WalletIcon/icons/icon-fortmatic.svg","walliro/containers/AppLayout/Header/WalletIcon/icons/icon-portis.svg","walliro/containers/AppLayout/Header/WalletIcon/icons/icon-torus.svg","walliro/containers/AppLayout/Header/WalletIcon/icons/icon-coinbase.svg","walliro/containers/AppLayout/Header/WalletIcon/icons/icon-safe-mobile.svg","walliro/containers/AppLayout/Header/WalletIcon/icons/index.ts","walliro/containers/AppLayout/Header/WalletIcon/icons/icon-metamask.png","walliro/containers/AppLayout/Header/WalletIcon/icons/icon-keystone.png","walliro/containers/AppLayout/Header/WalletIcon/icons/icon-authereum.png","walliro/containers/AppLayout/Header/WalletIcon/icons/icon-opera.png","walliro/containers/AppLayout/Header/WalletIcon/icons/icon-squarelink.png","walliro/containers/AppLayout/Header/WalletIcon/index.tsx","walliro/containers/AppLayout/Header/ProviderInfo/ProviderAccessible.tsx","walliro/containers/AppLayout/Header/ProviderInfo/ProviderDisconnected.tsx","assets/icons/alert.svg","assets/icons/check.svg","assets/icons/error.svg","walliro/containers/AppLayout/Header/Notifications/NotificationLink.tsx","walliro/containers/AppLayout/Header/Notifications/NotificationItem.tsx","walliro/containers/AppLayout/Header/Notifications/assets/bell.svg","walliro/containers/AppLayout/Header/Notifications/NotificationList.tsx","walliro/containers/AppLayout/Header/Notifications/index.tsx","walliro/containers/AppLayout/Header/Provider.tsx","walliro/containers/AppLayout/Header/ProviderDetails/UserDetails.tsx","walliro/containers/AppLayout/Header/index.tsx","walliro/assets/images/dark/logo.png","walliro/constants/truncate.ts","walliro/containers/AppLayout/Sidebar/Nav.tsx","walliro/containers/AppLayout/Sidebar/Netwroks.tsx","walliro/containers/AppLayout/Sidebar/index.tsx","components/TransactionQueueBar/TransactionQueueBar.tsx","walliro/containers/AppLayout/index.tsx","logic/addressBook/hooks/useAddressBookSync.ts","components/App/index.tsx","walliro/containers/AppLayout/Sidebar/useSidebarItems.tsx","logic/currentSession/hooks/useCurrentSafeAddressSync.ts","components/GlobalErrorBoundary/index.tsx","routes/index.tsx","utils/history.ts","logic/hooks/useNotifier.tsx","components/Providers/SnackbarProvider.tsx","components/Providers/index.tsx","components/Root/LegacyRouteRedirection.tsx","components/Root/index.tsx","utils/mm_warnings.ts","index.tsx","utils/events/utils.ts","config/index.ts","logic/safe/transactions/multisend.ts","utils/events/modals.ts","utils/events/txList.ts","routes/safe/components/Transactions/TxList/Filter/utils.ts","logic/tokens/utils/formatAmount.ts","utils/date.ts","logic/safe/utils/safeStorage.ts","logic/contracts/spendingLimitContracts.ts","logic/safe/safeTxSigner.ts","logic/hooks/useAsync.ts","utils/googleTagManager.ts","logic/appearance/selectors/index.ts","logic/collectibles/store/actions/addCollectibles.ts","logic/currencyValues/store/reducer/currencyValues.ts","routes/routes.ts","routes/safe/components/Balances/SendModal/screens/ContractInteraction/utils/index.ts","logic/safe/utils/safeInformation.ts","logic/addressBook/utils/index.ts","routes/safe/components/Transactions/TxList/HexEncodedData.tsx","logic/safe/store/models/types/gateway.d.ts","logic/safe/store/actions/utils.ts","routes/safe/components/Balances/SendModal/screens/ModalHeader/style.ts","routes/safe/components/Balances/SendModal/screens/ModalHeader/index.tsx","logic/safe/store/actions/addOrUpdateSafe.ts","logic/safe/store/actions/updateSafe.ts","logic/safe/store/actions/fetchTransactionDetails.ts","logic/wallets/errors.ts","logic/exceptions/CodedException.ts","logic/safe/api/fetchSafeTxGasEstimation.ts","walliro/containers/AppLayout/Header/assets/key.svg","walliro/containers/AppLayout/Header/assets/triangle.svg","walliro/containers/AppLayout/Header/KeyRing.tsx","logic/safe/store/reducer/pendingTransactions.ts","utils/storage/session.ts","utils/getByteLength.ts","logic/config/store/reducer/index.ts","logic/appearance/actions/setCopyShortName.ts","logic/appearance/actions/setShowShortName.ts","logic/appearance/reducer/appearance.ts","config/utils.ts","logic/wallets/utils/unstoppableDomains.ts","logic/wallets/getWeb3.ts","logic/safe/store/actions/transactions/fetchTransactions/loadGatewayTransactions.ts","logic/wallets/utils/network.ts","routes/safe/components/Balances/assets/nft_icon.png","walliro/containers/AppLayout/Sidebar/Threshold/index.tsx","components/SafeListSidebar/SafeList/SafeListItem.tsx","components/SafeListSidebar/SafeList/index.tsx","components/SafeListSidebar/style.ts","components/SafeListSidebar/AddSafeButton.tsx","components/SafeListSidebar/index.tsx","logic/safe/utils/shouldSafeStoreBeUpdated.ts","logic/safe/store/reducer/safe.ts","logic/safe/transactions/offchainSigner/EIP712Signer.ts","components/layout/Bold/index.tsx","components/layout/Paragraph/index.tsx","utils/wrapInSuspense.tsx","utils/sanitizeUrl.ts","logic/hooks/useSafeAppUrl.tsx","components/InfiniteScroll/index.tsx","routes/safe/components/Transactions/TxList/TxsInfiniteScroll.tsx","logic/safe/store/actions/transactions/utils/transactionHelpers.ts","assets/icons/info.svg","routes/safe/components/Transactions/TxList/hooks/useKnownAddress.ts","routes/safe/components/Transactions/TxList/hooks/useAssetInfo.ts","logic/wallets/store/selectors/index.ts","utils/storage/Storage.ts","logic/config/store/actions/index.ts","logic/currentSession/store/actions/addCurrentSafeAddress.ts","logic/safe/utils/aboutToExecuteTx.ts","routes/safe/components/Transactions/TxList/TxHoverProvider.tsx","components/layout/Tooltip/index.tsx","routes/safe/components/Transactions/TxList/TxActionProvider.tsx","routes/safe/components/Transactions/TxList/BatchExecuteHoverProvider.tsx","logic/safe/store/actions/transactions/fetchTransactions/index.ts","walliro/containers/AppLayout/Header/CircleDot.tsx","components/ChainIndicator/index.tsx","utils/constants.ts","logic/safe/store/models/safe.ts","logic/currentSession/store/reducer/currentSession.ts","logic/addressBook/store/reducer/index.ts","utils/events/wallet.ts","routes/safe/components/Apps/utils.ts","logic/wallets/ethAddresses.ts","logic/collectibles/store/reducer/collectibles.ts","utils/storage/local.ts","components/layout/Link/index.tsx","utils/checksumAddress.ts","logic/wallets/store/reducer/index.ts","logic/currentSession/utils/index.ts","logic/wallets/pairing/module.ts","logic/safe/store/reducer/gatewayTransactions.ts","logic/tokens/store/reducer/tokens.ts","routes/safe/components/Transactions/TxList/assets/custom.svg","logic/safe/utils/modules.ts","routes/safe/components/Transactions/helpers/Simulation/simulation.ts","routes/safe/components/Transactions/helpers/Simulation/SimulationResult.tsx","routes/safe/components/Transactions/helpers/Simulation/useSimulation.ts","routes/safe/components/Transactions/helpers/Simulation/TxSimulation.tsx","logic/safe/store/actions/createTransaction.ts","components/ExecuteCheckbox/index.tsx","routes/safe/components/Transactions/helpers/TxParametersDetail/index.tsx","logic/hooks/useCanTxExecute.tsx","logic/hooks/useIsSmartContractWallet.ts","routes/safe/components/Transactions/helpers/TxModalWrapper/index.tsx","logic/hooks/useEstimateSafeTxGas.tsx","assets/icons/qrcode.svg","components/ScanQRModal/style.ts","components/ScanQRModal/index.tsx","components/ScanQRModal/ScanQRWrapper/index.tsx","components/LoaderContainer/index.tsx","routes/safe/components/Balances/SendModal/index.tsx","components/forms/AddressInput/index.tsx","logic/currencyValues/store/selectors/index.ts","logic/tokens/api/fetchSafeCollectibles.ts","logic/collectibles/sources/Gnosis.ts","logic/collectibles/sources/index.ts","logic/collectibles/store/actions/fetchCollectibles.ts","logic/currentSession/store/actions/addViewedSafe.ts","logic/safe/store/actions/fetchSafe.ts","logic/tokens/utils/tokenHelpers.ts","theme/variables.js","safe-deployments/utils.js","utils/objects.ts","logic/safe/transactions/api/fetchSafeTransaction.ts","logic/safe/store/actions/removeSafe.ts","logic/safe/store/selectors/index.ts","walliro/containers/AppLayout/Header/ProviderDetails/ConnectDetails.tsx","components/WalletSwitch/index.tsx","utils/storage/useCachedState.ts","logic/safe/transactions/offchainSigner/ethSigner.ts","logic/safe/transactions/offchainSigner/index.ts","components/layout/Block/index.tsx","components/layout/Row/index.tsx","walliro/assets/images/default/logo.png","logic/hooks/useStateHandler.tsx","logic/safe/store/actions/clearSafeList.ts","logic/currentSession/store/actions/loadCurrentSession.ts","logic/currentSession/store/actions/updateViewedSafes.ts","logic/currentSession/store/actions/clearCurrentSession.ts","logic/currentSession/store/actions/addCurrentShortName.ts","logic/tokens/store/actions/addTokens.ts","logic/safe/transactions/offchainSigner/utils.ts","logic/safe/store/models/confirmation.ts","logic/tokens/store/model/token.ts","routes/safe/components/Balances/assets/token_placeholder.svg","routes/safe/components/Transactions/helpers/useSafeTxGas.ts","components/TransactionFailText/index.tsx","assets/icons/cypress_logo.svg","logic/wallets/e2e-wallet/module.ts","logic/wallets/utils/walletList.ts","logic/wallets/ethTransactions.ts","routes/safe/components/Transactions/TxList/hooks/usePagedQueuedTransactions.ts","routes/safe/components/Transactions/TxList/hooks/useQueueTransactions.ts","routes/safe/components/Transactions/TxList/hooks/useActionButtonsHandlers.ts","routes/safe/components/Transactions/TxList/hooks/useTransactionActions.ts","logic/config/store/selectors/index.ts","routes/safe/components/Transactions/TxList/styled.tsx","utils/strings.ts","routes/safe/components/Transactions/TxList/utils.ts","logic/exceptions/registry.ts","logic/hooks/useEstimateGasLimit.tsx","routes/safe/components/Transactions/TxList/TxQueueCollapsed.tsx","routes/safe/components/Transactions/TxList/TxQueueRow.tsx","routes/safe/components/Transactions/TxList/modals/style.ts","routes/safe/components/Transactions/TxList/modals/ApproveTxModal.tsx","logic/safe/store/actions/processTransaction.ts","routes/safe/components/Transactions/TxList/modals/RejectTxModal.tsx","routes/safe/components/Transactions/TxList/ActionModal.tsx","routes/safe/components/Transactions/TxList/QueueTxList.tsx","components/layout/Paragraph/index.module.scss","components/layout/Img/index.module.scss","components/layout/Row/index.module.scss","components/layout/Link/index.module.scss","logic/contracts/contracts.d.ts","components/PrefixedEthHashInfo/index.tsx","components/forms/GnoForm/index.tsx","routes/safe/components/Balances/utils/setTokenImgToPlaceholder.ts","utils/events/safeApps.ts","components/forms/SelectField/index.tsx","components/layout/Heading/index.tsx","assets/icons/apps.svg","components/App/ReceiveModal.tsx","theme/mui.ts","components/ButtonHelper/index.tsx","logic/currentSession/hooks/useSafeAddress.ts","components/layout/Col/index.tsx","logic/currencyValues/store/actions/setSelectedCurrency.ts","assets/icons/info_red.svg","logic/tokens/store/actions/fetchSafeTokens.ts","logic/hooks/useQuery.ts","logic/hooks/useMnemonicName.ts","logic/hooks/useMnemonicName.dict.ts","components/SafeListSidebar/selectors.ts","logic/safe/hooks/useLocalSafes.tsx","routes/safe/components/Apps/components/ConfirmTxModal/DecodedTxDetail.tsx","components/DecodeTxs/index.tsx","components/Modal/index.tsx","theme/size.ts","components/layout/Hairline/index.tsx","logic/notifications/store/notifications.ts","components/forms/validator.ts","logic/safe/transactions/notifiedTransactions.ts","logic/safe/transactions/send.ts","logic/safe/transactions/txHistory.ts","logic/safe/store/actions/setLatestMasterContractVersion.ts","logic/currentSession/store/actions/removeViewedSafe.ts","components/ConnectButton/index.tsx","logic/contracts/safeContracts.ts","utils/storage/index.ts"],"names":["SET_AVAILABLE_CURRENCIES","setAvailableCurrencies","createAction","USER_ENABLED_LEDGER_TX_DATA","transactionDataCheck","currentOnboardInstance","stateAndHelpers","wallet","isTransactionDataEnabled","loadFromStorage","name","toUpperCase","WALLET_PROVIDER","LEDGER","heading","description","ledgerImage","eventCode","button","text","onclick","saveToStorage","icon","updateProviderWallet","PROVIDER_ACTIONS","WALLET_NAME","updateProviderAccount","ACCOUNT","updateProviderNetwork","NETWORK","updateProviderEns","ENS","LAST_USED_PROVIDER_KEY","saveLastUsedProvider","expireInDays","days","expiry","isPairingModule","saveToStorageWithExpiry","loadLastUsedProvider","loadFromStorageWithExpiry","removeLastUsedProvider","removeFromStorageWithExpiry","getNetworkName","chainId","CHAIN_ID","ETHEREUM","getChainName","toLowerCase","hasENSSupport","getChains","some","chain","features","includes","FEATURES","DOMAIN_LOOKUP","BLOCK_POLLING_INTERVAL","onboard","_getChainId","getState","appNetworkId","toString","config","networkId","parseInt","networkName","blockPollingInterval","subscriptions","a","store","dispatch","address","checksumAddress","network","closeAllNotifications","ens","undefined","walletSelect","wallets","getSupportedWallets","walletCheck","checkName","Onboard","getOnboard","checkWallet","shouldSwitchNetwork","switchNetwork","catch","e","log","isWalletConnected","WALLETS","UNKNOWN","RINKEBY","VOLTA","useDebounce","value","delay","options","previousValue","useRef","useState","current","setCurrent","debouncedCallback","useMemo","debounce","val","useEffect","cancel","useTransactionStatus","transaction","currentUser","useSelector","userAccountSelector","color","status","setStatus","txStatus","useTxStatus","executionInfo","LocalTransactionStatus","SUCCESS","FAILED","CANCELLED","WILL_BE_REPLACED","AWAITING_CONFIRMATIONS","addressInList","missingSigners","signaturePending","AWAITING_EXECUTION","PENDING","style","flexGrow","Spacer","className","TxParameterWrapper","styled","div","AccordionDetailsWrapper","StyledButtonLink","ButtonLink","StyledAccordionSummary","AccordionSummary","TxEstimatedFeesDetail","onEdit","txParameters","gasCost","compact","parametersStatus","isAccordionExpanded","setIsAccordionExpanded","expanded","onChange","MODALS_EVENTS","ESTIMATION","label","size","areEthereumParamsVisible","ethNonce","ethGasLimit","isMaxFeeParam","ethGasPrice","ethMaxPrioFee","EDIT_ESTIMATION","textSize","onClick","useEstimationStatus","txEstimationStatus","ButtonStatus","DISABLED","buttonStatus","setButtonStatus","mounted","EstimationStatus","LOADING","READY","useExecutionStatus","checkTxExecution","isExecution","txData","gasLimit","gasPrice","gasMaxPrioFee","executionStatus","setExecutionState","useAsync","success","FAILURE","error","loading","capitalize","prefix","capitalized","charAt","slice","upperFirst","Wrapper","HeaderWrapper","TitleWrapper","Header","Collapse","children","title","collapseClassName","defaultExpanded","open","setOpen","tabIndex","role","prevOpen","onKeyDown","event","key","disableRipple","in","timeout","unmountOnExit","INITIAL_STATE","sendFunds","isOpen","selectedToken","showReceive","useSafeActions","safeActionsState","setSafeActionsState","onShow","action","prevState","onHide","showSendFunds","token","hideSendFunds","findSpeedupTx","sender","hash","nonce","data","web3","getWeb3ReadOnly","eth","getBlock","latestBlock","replacementTransaction","transactions","find","sameAddress","from","sameString","input","txMonitor","tries","Promise","resolve","reject","maxRetries","CodedException","Errors","_805","monitorFn","params","getTransaction","then","getTransactionReceipt","firstTxReceipt","replacementTx","replacementReceipt","setTimeout","fetchTokenCurrenciesBalances","safeAddress","selectedCurrency","excludeSpamTokens","trustedTokens","getBalances","exclude_spam","trusted","estimateGas","userAccount","numOwners","safeCreationSalt","addresses","all","estimateGasForDeployingSafe","calculateGasPrice","getFeesPerGas","maxPriorityFeePerGas","maxFeePerGas","gasEstimation","feesPerGas","estimatedGasCosts","maxPrioFeePerGas","setMaxPrioFeePerGas","nativeCurrency","getNativeCurrency","fromTokenUnit","decimals","gasCostFormatted","formatAmount","gasMaxPrioFeeFormatted","useEstimateSafeCreationGas","setGasEstimation","addressesSerialized","JSON","stringify","addressesList","parse","length","useTokenInfo","tokens","safeKnownCoins","makeStyles","createStyles","padding","lg","paddingBottom","hide","backgroundColor","background","visibility","actions","justifyContent","noBorderBottom","borderBottom","annotation","paddingLeft","ownersText","secondaryText","fontColor","container","actionButton","fontWeight","boldFont","marginRight","sm","buttonRow","left","bottom","boxSizing","width","borderTop","border","modifyBtn","height","xl","fontSize","smallFontSize","removeModuleIcon","marginLeft","cursor","modalHeading","modalContainer","minHeight","modalManage","modalClose","modalButtonRow","modalButtonRemove","modalName","textOverflow","overflow","modalUserName","whiteSpace","modalOwner","md","alignItems","modalUser","modalDescription","modalOpen","amountInput","RESET_TIME_OPTIONS","GnoField","RadioButtons","theme","colors","primary","rest","hexToRgb","primaryLight","RINKEBY_RESET_TIME_OPTIONS","getResetTimeOptions","AddressInfo","logoUri","addessBookName","state","addressBookEntryName","PrefixedEthHashInfo","ADDRESS_BOOK_DEFAULT_NAME","showCopyBtn","showAvatar","explorerUrl","getExplorerInfo","customAvatar","ResetTimeInfo","Row","align","margin","iconSize","iconType","StyledImage","img","StyledImageName","TokenInfo","amount","alt","onError","setImageToPlaceholder","src","symbol","isSetAllowance","method","isDeleteAllowance","isSpendingLimitMethod","isSupportedSpendingLimitAddress","txInfo","toAddress","isCustomTxInfo","to","spendingLimitModuleAddress","getSpendingLimitModuleAddress","StyledInfoBlock","ModifySpendingLimitDetails","dataDecoded","parameters","map","beneficiary","tokenAddress","resetTimeMin","resetTimeLabel","tokenInfo","txTo","getTxTo","strong","DeleteSpendingLimitDetails","useStyles","display","xs","borderRadius","transition","outline","increasedPopperZindex","zIndex","EllipsisTransactionDetails","sendModalOpenHandler","classes","anchorEl","setAnchorEl","useSafeAddress","shortName","isOwnerConnected","grantedSelector","recipientName","isStoredInAddressBook","handleClick","currentTarget","closeMenuHandler","addOrEditEntryHandler","trackEvent","TX_LIST_EVENTS","ADDRESS_BOOK","history","push","pathname","generateSafeRoute","SAFE_ROUTES","search","ClickAwayListener","onClickAway","Menu","id","keepMounted","onClose","Boolean","MenuItem","disabled","Divider","avatarUrl","toInfo","useKnownAddress","InfoDetails","header","as","SingleRow","TxInfoDetails","isTransferType","txLocation","useContext","TxLocationContext","canRepeatTransaction","transferInfo","type","TransactionTokenType","ERC721","direction","sendModalOpen","setSendModalOpen","activeScreenType","recipientAddress","ZERO_ADDRESS","tokenAmount","sendModalParams","setSendModalParams","isCollectible","getTxTokenData","prev","Number","SendModal","TxInfo","MethodDetails","methodName","replace","trim","uppercase","param","index","isArrayValueParam","isArrayParameter","Array","isArray","inlineType","isAddress","isByte","TxDataRow","paramType","StyledTooltip","withStyles","arrow","Tooltip","StyledAlert","Alert","black500","$isWarning","orange200","green200","orange500","green500","AlertTooltipWarning","tooltip","message","isWarning","placement","interactive","severity","DelegateCallWarning","showWarning","Link","href","rel","target","StyledText","Text","MultiSendTxGroup","actionTitle","txDetails","isDelegateCall","operation","Operation","DELEGATE","MultiSendDetails","valueDecoded","valuesDecoded","details","getInteractionTitle","HexEncodedData","hexData","addressInfo","addressInfoIndex","DetailsWithTxInfo","TxData","isSupportedMultiSendCall","TxExpandedActions","useActionButtonsHandlers","canCancel","handleConfirmButtonClick","handleCancelButtonClick","handleOnMouseEnter","handleOnMouseLeave","isPending","disabledActions","currentSafeNonce","isAwaitingEx","isAwaitingExecution","getConfirmTooltipTitle","onMouseEnter","onMouseLeave","ThresholdWarning","TxInfoSettings","settingsInfo","handler","owner","threshold","oldOwner","newOwner","implementation","module","guard","makeTitle","txDirection","amountWithSymbol","TransferDirection","INCOMING","isTxQueued","TxInfoTransfer","assetInfo","useAssetInfo","setDetails","recipient","isSettingsChangeTxInfo","isTransferTxInfo","getStyledIcon","TxCreationIcon","AddCircleIcon","TxRejectionIcon","CancelIcon","CheckIcon","CheckCircleIcon","CircleIcon","RadioButtonUncheckedOutlinedIcon","DotIcon","FiberManualRecordIcon","StyledStepper","Stepper","StyledStepConnector","StepConnector","gray500","getStepColor","primary400","black300","red400","StyledStep","Step","$bold","StyledStepContent","StepContent","pointerStyle","confirmationsStyle","getConfirmationStep","StepLabel","shortenHash","TxOwners","detailedExecutionInfo","isMultiSigExecutionDetails","confirmationsRequired","confirmations","shouldHideConfirmations","hideConfirmations","setHideConfirmations","currentSafe","account","currentChainId","addressBookName","isImmediateExecution","isConfirmed","isExecuted","executor","numberOfConfirmations","orientation","nonLinear","connector","isCancelTxDetails","signer","TxInfoMultiSend","CollapsibleSection","show","TxSummary","created","safeTxHash","baseGas","gasToken","refundReceiver","safeTxGas","txHash","executedAt","setExpanded","submittedAt","trustedDelegateCallTarget","hasExplorer","formatDateTime","NOT_AVAILABLE","signature","TxModuleInfo","StyledCopyToClipboardBtn","CopyToClipboardBtn","primaryLite","TxShareButton","txId","txDetailsPathname","generatePath","TRANSACTIONS_SINGULAR","SAFE_ADDRESS_SLUG","getPrefixedSafeAddressSlug","TRANSACTION_ID_SLUG","txDetailsLink","window","location","origin","PUBLIC_URL","textToCopy","NormalBreakingText","TxDataGroup","txNonce","isTxExecuted","TxDetails","transactionId","transactionDetails","useDispatch","setTxDetails","getTransactionByAttribute","attributeValue","attributeName","fetchTransactionDetails","useTransactionDetails","willBeReplaced","isMultiSend","shouldShowStepper","getModuleDetails","isModuleExecutionInfo","TrackedShareButton","Track","COPY_DEEPLINK","customTxNoData","dataSize","onChainRejection","noTxDataBlock","cn","ButtonWithMargin","Button","FooterContainer","LoaderText","span","GenericFooter","Paragraph","ErrorFooter","onCancel","onRetry","Hairline","variant","steps","instruction","footerComponent","continueButtonDisabled","onContinue","CREATE_SAFE_EVENTS","GET_STARTED","abiDecoder","addABI","getProxyFactoryDeployment","version","LATEST_SAFE_VERSION","abi","getNewSafeAddressFromLogs","logs","proxyCreationEvent","decodeLogs","proxyInformation","events","SafeDeployment","FooterComponent","creationTxHash","onSuccess","submittedPromise","setLoading","stepIndex","setStepIndex","safeCreationTxHash","setSafeCreationTxHash","createdSafeAddress","setCreatedSafeAddress","setError","intervalStarted","setIntervalStarted","waitingSafeDeployed","setWaitingSafeDeployed","setContinueButtonDisabled","provider","providerNameSelector","confirmationStep","isConfirmationStep","showSnackbarError","useCallback","err","isTxPendingError","showNotification","NOTIFICATIONS","TX_PENDING_MSG","CREATE_SAFE_FAILED_MSG","logError","_800","onRetryTx","handlePromise","receipt","transactionHash","isWalletRejection","REJECT_CREATE_SAFE","isTxMined","txResult","blockNumber","Error","interval","setInterval","clearInterval","awaitUntilSafeIsDeployed","ProxyCreation","returnValues","proxy","code","EMPTY_DATA","getCode","console","LoaderContainer","Title","tag","testId","Nav","activeStepIndex","Body","BodyImage","Img","VaultErrorSvg","VaultLoading","SuccessSvg","BodyDescription","CardTitle","BodyInstruction","FullParagraph","inversecolors","noMargin","$stepIndex","TxText","Center","BodyFooter","Heading","white","connected","TxMultiSender","multiSendCallData","multiSendContract","notifications","this","getMultisendContract","createTxNotifications","TX_NOTIFICATION_TYPES","STANDARD_TX","methods","multiSend","send","on","forEach","tx","isMultisigExecutionInfo","aboutToExecuteTx","addPendingTransaction","onComplete","_818","fetchTransactions","closePending","removePendingTransaction","showOnRejection","OnboardingTooltip","widgetLocalStorageId","defaultHidden","useCachedState","widgetHidden","setWidgetHidden","TransitionProps","appear","StyledOnboardingContent","maxWidth","BatchExecuteButton","batchableTransactions","getBatchableTransactions","hoverContext","BatchExecuteHoverContext","hasPendingTx","isTxPending","isBatchable","isDisabled","setActiveHover","isSafeAppView","useSafeAppUrl","getAppUrl","isSafeAppRoute","useRouteMatch","APPS","ButtonWrapper","DecodedTransactions","getTxRecipient","getTxValue","decodedDataParams","isCancellation","decodedData","DecodeTxs","txs","getTxDetails","fetchSafeTransaction","toMultiSendTxs","safeVersion","safeInstance","getGnosisSafeInstanceAt","getTxInfo","getTxConfirmations","sigs","generateSignaturesFromTxConfirmations","txArgs","getExecutionTransaction","encodeABI","getBatchExecuteData","getMultiSendJoinedTxs","BatchExecute","React","memo","currentVersion","multiSendContractAddress","getMultisendContractAddress","txsWithDetails","setTxsWithDetails","isModalOpen","setModalOpen","setMultiSendCallData","isSameAddressAsSafe","sameAddressAsSafeSelector","toggleModal","handleOpenModal","BATCH_EXECUTE","transactionsWithDetails","batchExecuteData","_619","handleBatchExecute","sendTx","multiSendTx","encodeMultiSendCall","Modal","handleClose","ModalHeader","ModalContent","DecodeTxsWrapper","SkeletonWrapper","Skeleton","TxSimulation","canTxExecute","TransactionFailText","estimationStatus","isCreation","Footer","withoutBorder","Buttons","cancelButtonProps","confirmButtonProps","displayName","QueueTransactions","usePagedQueuedTransactions","count","isLoading","next","queuedTxCount","queue","QUEUED_TXS","BatchExecuteHoverProvider","TxsInfiniteScroll","Provider","QueueTxList","NoTransactionsImage","useTransactionType","CustomTxIcon","setType","knownAddressBookAddress","SettingsTxIcon","isSendTx","OutgoingTxIcon","IncomingTxIcon","isDeleteGuard","CircleCrossRed","safeAppInfo","isInAddressBook","fallbackIcon","styles","letterSpacing","headingText","closeIcon","gap","StyledDivider","StyledDividerFooter","SafeOptions","EthereumOptions","StyledLink","StyledTextMt","formValidation","values","safeNonce","minValue","composeValidators","maxValue","EditTxParametersForm","txType","showSafeTxGas","useSafeTxGas","manualSafeNonce","setManualSafeNonce","isSpendingLimitTx","isSpendingLimit","onCloseFormHandler","handleSafeNonceChange","hasChangedSafeNonce","loadingAdornment","endAdornment","InputAdornment","position","CircularProgress","grow","IconButton","Block","GnoForm","initialValues","onSubmit","validation","Field","defaultValue","placeholder","min","component","TextField","areSafeParamsEnabled","inputAdornment","ethereumTxParametersTitle","gasPriceText","EditableTxParameters","closeEditModalCallback","isEditMode","toggleEditMode","useManualValues","setUseManualValues","defaultParameterStatus","props","connectedWalletAddress","initialSafeNonce","setSafeNonce","initialSafeTxGas","setSafeTxGas","setEthNonce","initialEthGasLimit","setEthGasLimit","initialEthGasPrice","setEthGasPrice","ethGasPriceInGWei","setEthGasPriceInGWei","setEthMaxPrioFee","ethMaxPrioFeeInGWei","setEthMaxPrioFeeInGWei","getNonce","getUserNonce","res","toWei","getSafeNonce","getRecommendedNonce","recommendedNonce","_616","useTransactionParameters","initialEthMaxPrioFee","toggleStatus","CustomIconText","iconUrl","iconUrlFallback","showHash","avatarSize","customAvatarFallback","MuiIconButton","TxCollapsedActions","getTitle","Amount","AmountWrapper","TokenTransferAmount","onerror","tokenType","TokenType","NFTIcon","TokenPlaceholder","directionSign","info","isTokenTransferAsset","actionCount","CircularProgressPainter","SmallDot","Dot","IconText","IconTextSrc","TooltipContent","TxCollapsed","isGrouped","time","votes","TxsInfiniteScrollContext","ref","lastItemId","userAddress","txCollapsedNonce","txCollapsedType","txCollapsedInfo","timestamp","txCollapsedTime","formatTime","formatTimeInWords","txCollapsedVotes","required","submitted","txCollapsedActions","txCollapsedStatus","generateBatchRequests","batch","context","contractInstance","Contract","localBatch","BatchRequest","methodObject","args","resolver","result","request","call","add","warn","execute","requestTokensByDelegate","delegates","moduleAddress","spendingLimitModuleAbi","getSpendingLimitModuleAbi","whenRequestValues","delegateAddress","ZERO_VALUE","discardZeroAllowance","requestAllowancesByDelegatesAndTokens","tokensByDelegate","delegate","allowances","filter","spent","lastResetMin","getSpendingLimits","modules","isModuleEnabled","getSpendingLimitContract","getDelegates","results","limits","_609","spendingLimitAllowedBalance","tokenSpendingLimit","getBalanceAndDecimalsFromToken","balance","diff","BigNumber","minus","diffInFPNotation","gt","getSpendingLimitByTokenAddress","spendingLimits","fetchSafesByOwner","ownerAddress","getOwnedSafes","safes","useOwnerSafes","cache","setCache","ownerSafes","load","_610","chains","loadChains","getChainsConfig","setWeb3ReadOnly","emptyChainInfo","transactionService","chainName","l2","rpcUri","authentication","publicRpcUri","safeAppsRpcUri","blockExplorerUriTemplate","api","textColor","ensRegistryAddress","disabledWallets","useRecommendedNonce","lastTxNonce","getLastTxNonce","ReviewInfoTextWrapper","ReviewInfoText","isRejection","txEstimationExecutionStatus","safeTxNonce","currentSafeWithNames","isNaN","transactionsToGo","getWarning","exports","isValidAddress","isHexStrict","isValidPrefixedAddress","parsePrefixedAddress","isValidShortChainName","decodeMessage","CONTRACT_ERROR_CODES","CONTRACT_ERRORS","getContractErrorMessage","getWeb3","returnData","returnBuffer","Buffer","contractOutput","rawDecode","_817","HidePairingModule","document","createElement","innerHTML","head","appendChild","remove","$bgUri","StepList","StepBox","grey400","$isActive","root","boxShadow","controlStyle","backButton","palette","secondary","main","nextButton","StepperContext","createContext","useStepper","Object","keys","StepperProvider","onFinish","disableNextButton","stepsComponents","trackingCategory","currentStep","setCurrentStep","Children","toArray","CurrentStepComponent","nextButtonType","nextButtonLabel","isSubmitButton","isFirstStep","isLastStep","customNextButtonLabel","onClickPreviousStep","goBack","step","onClickNextStep","StepperHeader","toggleSidebar","SafeListSidebarContext","Container","Grid","item","Logo","_","isStepLabelClickable","StepperComponent","formsUtils","useForm","currentComponent","backButtonLabel","errors","Paper","elevation","Col","center","category","StepElement","StepperForm","validate","setValidate","onSubmitForm","setOnSubmitForm","list","ComponentStep","SafeListSidebar","handleSubmit","submitting","StepFormElement","TypeForm","ChainList","ChainItem","WalletContainer","StepOne","selectedNetwork","locationNetwork","resetLocationNetwork","onNetworkSwitch","setChainId","onGoToTron","StepTwo","isWrongNetwork","isPairingSupported","wrapInSuspense","ConnectDetails","WalletSwitch","FIELD_CREATE_CUSTOM_SAFE_NAME","FIELD_CREATE_SUGGESTED_SAFE_NAME","FIELD_CREATE_SAFE_OWNERS_LIST","FIELD_NEW_SAFE_THRESHOLD","FIELD_MAX_OWNER_NUMBER","FIELD_NEW_SAFE_PROXY_SALT","FIELD_NEW_SAFE_GAS_LIMIT","FIELD_NEW_SAFE_GAS_PRICE","FIELD_NEW_SAFE_GAS_MAX_PRIO_FEE","FIELD_NEW_SAFE_OWNER_ENS_LIST","FIELD_LOAD_CUSTOM_SAFE_NAME","FIELD_LOAD_SUGGESTED_SAFE_NAME","FIELD_LOAD_SAFE_ADDRESS","FIELD_LOAD_IS_LOADING_SAFE_ADDRESS","FIELD_LOAD_SAFE_OWNER_LIST","FIELD_SAFE_THRESHOLD","FIELD_LOAD_SAFE_OWNER_ENS_LIST","FIELD_STARTER_TYPE","SAFE_PENDING_CREATION_STORAGE_KEY","StepThere","callback","providerName","shouldSwitchWalletChain","meta","option","CreateWalliro","createNewSafeForm","formValues","hasCustomSafeName","objectByString","NAME_SAFE","getInitialOwnerENSNames","owners","addressFieldName","reverseENSLookup","ensName","ownersWithENSName","ownersWithENSNameRecord","reduce","acc","change","addressBook","currentNetworkAddressBookAsMap","formErrors","maxOwnerNumber","getENSName","handleScan","closeQrModal","scannedAddress","startsWith","BlockWithPadding","NetworkLabel","htmlFor","FieldContainer","ParagraphWithMargin","RowHeader","i","nameFieldName","hasOwnerAddressError","showDeleteIcon","ownerName","OwnerNameField","minMaxLength","AddressInput","fieldMutator","CheckIconAddressAdornment","validators","ADDRESS_REPEATED_ERROR","OwnersIconsContainer","middle","ScanQRWrapper","ButtonHelper","ownersUpdated","updatedMaxOwnerNumbers","onClickRemoveOwner","dataTestId","OwnerContainer","newEmptyOwner","SelectField","THRESHOLD_ERROR","StyledParagraph","extraSmallFontSize","CheckCircle","getLoadSafeName","getOwnerName","ownerFieldName","LoadSafeAddressStep","ownersWithName","setOwnersWithName","setOwnersWithENSName","setThreshold","isValidSafeAddress","setIsValidSafeAddress","isSafeInfoLoading","setIsSafeInfoLoading","loadSafeForm","useField","safeAddressError","checkSafeAddress","isChecksumAddress","getSafeInfo","makeAddressBookEntry","safeName","LOAD_SAFE_EVENTS","loadSafeAddressStepValidations","LoadSafeOwnersStep","ownerList","TitleContainer","TableContainer","HeaderContainer","initialValue","OwnerAddressContainer","LoadWalliro","validateSafeAddress","StepFour","Create","Load","_FIELD_NEW_SAFE_THRESHOLD","_FIELD_CREATE_SAFE_OWNERS_LIST","_FIELD_NEW_SAFE_GAS_LIMIT","_FIELD_NEW_SAFE_CREATION_TX_HASH","_FIELD_CREATE_SUGGESTED_SAFE_NAME","_FIELD_CREATE_CUSTOM_SAFE_NAME","_FIELD_NEW_SAFE_PROXY_SALT","_FIELD_NEW_SAFE_GAS_PRICE","_FIELD_NEW_SAFE_OWNER_ENS_LIST","_FIELD_NEW_SAFE_GAS_MAX_PRIO_FEE","InlinePrefixedEthHashInfo","ButtonContainer","EmphasisLabel","goToWelcomePage","STARTER_ROUTE","sleep","ms","parseError","json","split","pop","actualMessage","loadSavedDataOrLeave","createNewSafe","onHash","safeCreationFormValues","ownerAddresses","Date","now","deploymentTx","getSafeDeploymentTransaction","sendParams","createSendParams","once","SUBMIT_CREATE_SAFE","txReceipt","didTxRevert","CREATED_SAFE","pollSafeInfo","backOff","startingDelay","maxDelay","numOfAttempts","retry","SafeCreationProcess","creationTxPromise","setCreationTxPromise","redirect","useQuery","get","showModal","setShowModal","modalData","setModalData","showCouldNotLoadModal","setShowCouldNotLoadModal","newSafeAddress","setNewSafeAddress","newCreationTxHash","onSafeCreated","createSafeFormValues","defaultSafeValue","ownersAddressBookEntry","safeAddressBookEntry","addressBookSafeLoad","buildSafe","safeProps","addOrUpdateSafe","CANCEL_CREATE_SAFE","removeFromStorage","onClickModalButton","ADDRESSED_ROUTE","getShortName","SAFE_APPS_EVENTS","SHARED_APP_OPEN_AFTER_SAFE_CREATION","DASHBOARD","RETRY_CREATE_SAFE","body","footer","GO_TO_SAFE","createSafeForm","numberOfOwners","layout","DetailsContainer","SafeNameParagraph","weight","Fragment","OwnersAddressesContainer","DescriptionContainer","ReviewLoadStep","ownerListWithNames","isUserConnectedWalletASAfeOwner","checkIfUserAddressIsAnOwner","SafeAddressContainer","OwnersContainer","OwnerItemContainer","StepFive","useHistory","safePendingToBeCreated","setSafePendingToBeCreated","initialFormValues","setInitialFormValues","getChainInfo","availableSelector","setIsLoading","typeStarter","setTypeStarter","userWalletAddress","useLocation","safeRandomName","useMnemonicSafeName","extractPrefixedSafeAddress","LOAD_SPECIFIC_SAFE_ROUTE","queryString","isSubti","setIsSubti","checkIfSafeIsPendingToBeCreated","updateAddressBook","ownerEntries","safeEntry","submitForm","OWNERS","THRESHOLD","checksummedAddress","storedSafes","loadStoredSafes","saveSafes","deepen","isCurrent","getInitValues","getInitialValues","initialValuesFromUrl","isInitializing","create","suggestedSafeName","query","arrayFormat","owneraddresses","ownernames","isOwnersPresentInTheUrl","ownersFromUrl","ownersNamesFromUrl","userAddressName","ownerNames","thresholdFromURl","isValidThresholdInTheUrl","ownerAddressFields","ownerNameFields","tokensSelector","TOKEN_REDUCER_ID","tokenListSelector","createSelector","toList","sortBy","safe","isWrongChain","isUserAnOwner","safeEthAsTokenSelector","getEthAsToken","ethBalance","extendedSafeTokensSelector","currentSafeBalances","safeBalances","tokensList","ethAsToken","extendedTokens","safeBalance","baseToken","set","List","Sentry","safeTokens","nativeCurrencyAsToken","createHashBasedSelector","createSelectorCreator","defaultMemoize","isEqual","memoize","gatewayTransactions","GATEWAY_TRANSACTIONS_ID","historyTransactions","currentSafeAddress","pendingTransactions","queued","nextTransactions","nextTransaction","nextTxs","queuedTransactions","txLocations","getTransactionWithLocationByAttribute","attrDetails","storedTxs","foundTx","_gatewayTransactions","_chainId","_safeAddress","txWithLocation","getTransactionsByNonce","txsByNonce","txFoundByNonce","getLastTransaction","queuedTxs","historyTxs","queuedNonces","highestQueuedNonce","sort","flat","lastTx","currentNonce","sortedNextTxs","b","sortedQueuedTxs","allTxs","txByNonce","confirmationsSubmitted","GnoButton","minWidth","calculatedStyle","calculateStyleBased","addressBookState","addressBookAsMap","addressBookMap","entry","getNameByAddress","curChainId","currentNetworkAddressBook","currentNetworkAddressBookAddresses","estimateSafeTxGas","txRecipient","txAmount","hasFeature","SAFE_TX_GAS_OPTIONAL","fetchSafeTxGasEstimation","estimateGasForTransactionExecution","valueInWei","estimationData","execTransaction","calculateGasOf","checkTransactionExecution","gas","EIP1559","txParams","cx","classNames","bind","bordered","fullwidth","trackData","el","trackEl","GTM_EVENT","CLICK","addEventListener","removeEventListener","CREATE_SAFE","CREATE_BUTTON","META","CREATE_SAFE_CATEGORY","addEventCategory","LOAD_SAFE","LOAD_BUTTON","LOAD_SAFE_CATEGORY","PENDING_TRANSACTIONS_ACTIONS","ADD","REMOVE","setPendingTransaction","getBlockNumber","block","pendingTransaction","VARIANT","NOTIFICATION_IDS","shortDuration","longDuration","UNLOCK_WALLET_MSG","WARNING","persist","preventDuplicate","CONNECT_WALLET_ERROR_MSG","ERROR","autoHideDuration","SIGN_TX_MSG","INFO","TX_REJECTED_MSG","TX_EXECUTED_MSG","TX_CANCELLATION_EXECUTED_MSG","TX_FAILED_MSG","TX_PENDING_FAILED_MSG","TX_WAITING_MSG","TX_CONFIRMATION_EXECUTED_MSG","TX_CONFIRMATION_FAILED_MSG","TX_FETCH_SIGNATURES_ERROR_MSG","SAFE_APPS_FETCH_ERROR_MSG","SIGN_SETTINGS_CHANGE_MSG","SETTINGS_CHANGE_REJECTED_MSG","SETTINGS_CHANGE_EXECUTED_MSG","SETTINGS_CHANGE_EXECUTED_MORE_CONFIRMATIONS_MSG","SETTINGS_CHANGE_FAILED_MSG","SIGN_NEW_SPENDING_LIMIT_MSG","NEW_SPENDING_LIMIT_REJECTED_MSG","NEW_SPENDING_LIMIT_EXECUTED_MSG","SPENDING_LIMIT_EXECUTED_MSG","NEW_SPENDING_LIMIT_EXECUTED_MORE_CONFIRMATIONS_MSG","NEW_SPENDING_LIMIT_FAILED_MSG","SIGN_REMOVE_SPENDING_LIMIT_MSG","REMOVE_SPENDING_LIMIT_REJECTED_MSG","REMOVE_SPENDING_LIMIT_EXECUTED_MSG","REMOVE_SPENDING_LIMIT_EXECUTED_MORE_CONFIRMATIONS_MSG","REMOVE_SPENDING_LIMIT_FAILED_MSG","ADDRESS_BOOK_EXPORT_ENTRIES_ERROR","SAFE_NEW_VERSION_AVAILABLE","SHARE_SAFE_APP_URL_COPIED","setNotificationOrigin","notification","appInfo","getAppInfoFromOrigin","settingsChangeTxNotificationsQueue","beforeExecution","afterRejection","afterExecution","noMoreConfirmationsNeeded","moreConfirmationsNeeded","afterExecutionError","newSpendingLimitTxNotificationsQueue","spendingLimitTxNotificationsQueue","removeSpendingLimitTxNotificationsQueue","defaultNotificationsQueue","getNotificationsFromTxType","notificationsQueue","getStandardTxNotificationsQueue","CONFIRMATION_TX","getConfirmationTxNotificationsQueue","CANCELLATION_TX","getCancellationTxNotificationsQueue","SETTINGS_CHANGE_TX","NEW_SPENDING_LIMIT_TX","SPENDING_LIMIT_TX","REMOVE_SPENDING_LIMIT_TX","notifiedTransaction","txNotifications","beforeExecutionKey","closeNotification","read","showOnError","customErrorMessage","msg","FEATURES_BY_VERSION","safeNeedsUpdate","latestVersion","semverValid","latest","semverLessThan","enabledFeatures","chainFeatures","feat","feature","semverSatisfies","isEnabledByVersion","checkIfSafeNeedsUpdate","lastSafeVersion","needUpdate","getCurrentMasterContractLastVersion","safeMaster","getSafeMasterContract","VERSION","safeMasterVersion","getSafeVersionInfo","_606","humanReadableValue","times","toFixed","toTokenUnit","ROUND_DOWN","isValidPrefix","fullAddress","parts","calculateTotalGasCost","totalPricePerGas","useEstimateTransactionGas","manualGasPrice","manualMaxPrioFee","gasPriceFormatted","fromWei","DEFAULT_MAX_GAS_FEE","DEFAULT_MAX_PRIO_FEE","paddingTop","lineHeight","restInput","multiline","rows","_InputLabelProps","InputLabelProps","helperText","showError","touched","pristine","valid","hasError","modifiedSinceLastSubmit","submitError","errorMessage","isInactiveAndPristineOrUntouched","active","isInvalidAndUntouched","disableUnderline","inputRoot","statusClasses","inputProps","autoComplete","inputRootProps","shrink","InputProps","lastViewedSafe","currentSession","CURRENT_SESSION_REDUCER_ID","restored","viewedSafes","FETCH_STATUS","defineProperty","__importDefault","mod","__esModule","getSafeL2SingletonDeployment","_safeL2Deployments","getSafeSingletonDeployment","_safeDeployments","gnosis_safe_l2_json_1","require","gnosis_safe_json_1","gnosis_safe_json_2","gnosis_safe_json_3","gnosis_safe_json_4","utils_1","default","findDeployment","proxy_factory_json_1","proxy_factory_json_2","factoryDeployments","getSignMessageLibDeployment","getCreateCallDeployment","getMultiSendCallOnlyDeployment","getMultiSendDeployment","create_call_json_1","multi_send_json_1","multi_send_json_2","multi_send_call_only_json_1","sign_message_lib_json_1","multiSendDeployments","multiSendCallOnlyDeployments","createCallDeployments","signMessageLibDeployments","ADD_HISTORY_TRANSACTIONS","addHistoryTransactions","REMOVE_HISTORY_TRANSACTIONS","removeHistoryTransactions","ADD_QUEUED_TRANSACTIONS","addQueuedTransactions","getFallbackHandlerDeployment","getCompatibilityFallbackHandlerDeployment","getDefaultCallbackHandlerDeployment","default_callback_handler_json_1","compatibility_fallback_handler_json_1","defaultCallbackHandlerDeployments","compatFallbackHandlerDeployments","fallbackHandlerDeployments","NestedWrapper","GenericValue","getTextValue","limit","getArrayValue","parentId","currentValue","Value","newProps","FlexWrapper","ValueWrapper","generateInlineTypeValue","getByteLength","setTxLocation","allPendingTxIds","PENDING_TRANSACTIONS_ID","pendingTxIdsByChain","statuses","pendingTxsByChain","pendingTxIds","pendingTxs","selectTxStatus","__createBinding","o","m","k","k2","enumerable","__exportStar","p","prototype","hasOwnProperty","networkInfo","StyledLabel","ADDRESS_BOOK_ACTIONS","addressBookAddOrUpdate","ADD_OR_UPDATE","addressBookRemove","SAFE_LOAD","addressBookImport","IMPORT","addressBookSync","SYNC","addressBookFixEmptyNames","FIX_EMPTY_NAMES","newChainId","_setChainId","setChainIdAction","COOKIE_ACTIONS","OPEN_BANNER","CLOSE_BANNER","initialState","cookieBannerOpen","cookiesReducer","handleActions","payload","providerMiddleware","handledAction","providerSelector","loaded","available","resetWeb3","setWeb3","instantiateSafeContracts","isStoreInSync","isHardwareWallet","WALLET_EVENTS","CONNECT","WALLET_CONNECT","wc","peerMeta","getAwaitingGatewayTransactions","allTransactions","LAST_TIME_USED_LOGGED_IN_ID","sendAwaitingTransactionNotification","awaitingTxsSubmissionDateList","link","lastTimeUserLoggedInForSafes","lastTimeUserLoggedIn","submissionDate","notificationsMiddleware","currentShortName","ADD_CURRENT_SAFE_ADDRESS","safesMap","safesAsMap","executedTxNotification","isTransactionSummary","awaitingTransactions","TRANSACTIONS_QUEUE","curSafeAddress","isUserOwner","SETTINGS_DETAILS","watchedActions","REMOVE_SAFE","UPDATE_SAFE","loadCurrentSessionFromStorage","getCurrentSessionFromStorage","loadCurrentSession","loadSafesFromStorage","getLocalSafes","_isTxMined","MAX_WAITING_BLOCK","monitorTx","timeMultiple","PendingTxMonitor","isMined","deeplink","monitorAllTxs","pendingTxsOnChain","entries","sessionBlockNumber","channel","BroadcastChannel","onmessage","self","isSameOrigin","isBroadcast","reduxStore","CURRENCY_KEY","CURRENCY_REDUCER_ID","LS_CONFIG","states","ADDRESS_BOOK_REDUCER_ID","APPEARANCE_REDUCER_ID","CONFIG_REDUCER_ID","namespace","LS_NAMESPACE","namespaceSeparator","LS_SEPARATOR","disableWarnings","preloadedState","initialCurrencyState","initialAppearanceState","initialConfigState","enhancer","__REDUX_DEVTOOLS_EXTENSION_COMPOSE__","compose","applyMiddleware","thunk","save","loadedViaUrl","toJSON","CONFIG_ACTIONS","SET_CHAIN_ID","clearSafeList","clearCurrentSession","postMessage","session","setItem","reducers","PROVIDER_REDUCER_ID","providerReducer","SAFE_REDUCER_ID","safeReducer","NFT_ASSETS_REDUCER_ID","nftAssetReducer","NFT_TOKENS_REDUCER_ID","nftTokensReducer","tokensReducer","gatewayTransactionsReducer","pendingTransactionsReducer","NOTIFICATIONS_REDUCER_ID","notificationsReducer","currencyValuesReducer","addressBookReducer","currentSessionReducer","configReducer","appearanceReducer","rootReducer","combineReducers","createStore","OVERVIEW","HOME","IPHONE_APP_BUTTON","OPEN_ONBOARD","SWITCH_NETWORK","SHOW_QR","COPY_ADDRESS","OPEN_EXPLORER","ADD_SAFE","SIDEBAR","ADDED_SAFES_ON_NETWORK","WHATS_NEW","HELP_CENTER","OPEN_INTERCOM","NEW_TRANSACTION","NOTIFICATION_CENTER","NOTIFICATION_INTERACTION","OVERVIEW_EVENTS","storedStatus","localStatus","setLocalStatus","initPairing","PAIRING_MODULE_NAME","FilterType","RHFTextField","rules","control","useController","field","fieldState","innerRef","formatInputValue","getFilterHelperText","StyledAutocomplete","Autocomplete","RHFAddressSearchField","addressBookOnChain","isResolving","setIsResolving","inputValue","setInputValue","onInputChange","newValue","addressBookEntry","isValidEnsName","isValidCryptoDomainName","getAddressFromDomain","resolvedAddress","freeSolo","getOptionLabel","renderInput","readOnly","top","BackdropLayout","ReactDOM","createPortal","Backdrop","isValidAmount","isValidNonce","number","FILTER_TYPE_FIELD_NAME","DATE_FROM_FIELD_NAME","DATE_TO_FIELD_NAME","RECIPIENT_FIELD_NAME","AMOUNT_FIELD_NAME","TOKEN_ADDRESS_FIELD_NAME","MODULE_FIELD_NAME","NONCE_FIELD_NAME","defaultValues","loadTransactions","loadHistoryTransactions","StyledRHFTextField","StyledFilterButton","Filter","showFilter","setShowFilter","hideFilter","shouldUnregister","reset","watch","getValues","filterType","unsubscribe","listen","newLocation","setValue","disableElevation","$isFiltered","StyledFilterIconImage","filterIcon","StyledPaper","fromEntries","URLSearchParams","FILTER","FilterWrapper","TxTypeFormControl","StyledFormLabel","render","StyledRadioFormControlLabel","ParamsFormControl","ParametersFormWrapper","MODULE","MULTISIG","primary200","primary300","FormControl","FormLabel","FormControlLabel","largeFontSize","INIT_STATE_THEME","lang","locale","language","langLabel","dir","useTheme","setTheme","matchMedia","changeColor","matches","localStorage","getItem","getLangByCode","fetch","process","obj","documentElement","setAttribute","useSidebar","_setOpen","Context","sidebar","_changeColor","_getLangByCode","handlerStorage","_theme","useMain","WALLET_ICONS","METAMASK","TALLYHO","tallyHoIcon","WALLETCONNECT","walletConnectIcon","TREZOR","trezorIcon","ledgerIcon","TRUST","trustIcon","LATTICE","latticeIcon","KEYSTONE","FORTMATIC","fortmaticIcon","PORTIS","portisIcon","AUTHEREUM","TORUS","torusIcon","OPERA","COINBASE_WALLET","coinbaseIcon","SQUARELINK","SAFE_MOBILE","safeMobileIcon","flex","screenSm","WalletIcon","walletIcon","start","fontFamily","networkLabel","paddingRight","identicon","dot","connectedBg","right","flexDirection","ProviderInfo","currentNetwork","networkSelector","userEnsSelector","getChainById","addressColor","KeyRing","circleSize","dotRight","dotSize","dotTop","keySize","mode","transform","connect","end","primaryActive","NotificationLink","notificationIcon","ErrorIcon","InfoIcon","warning","AlertIcon","getNotificationIcon","NotificationListItem","ListItem","$requiresAction","NotificationMessage","SecondaryText","NoficationItem","handleClickAway","ListItemAvatar","UnreadNotificationBadge","overlap","invisible","anchorOrigin","vertical","horizontal","ListItemText","Description","Typography","StyledList","ScrollContainer","StyledScrollableBar","$showScrollbar","NotificationList","NOTIFICATION_LIMIT","NotificationItem","Bell","Badge","NotificationsPopper","NotificationsHeader","NotificationsTitle","h4","UnreadCount","ClearAllButton","NotificationsFooter","NotificationSubtitle","ExpandIconButton","Notifications","toggle","clickAway","notificationsRef","showAll","setShowAll","selectNotifications","hasNotifications","sortedNotifications","chronologicalNotifications","unreadLinkNotifications","unreadNotifications","readNotifications","getSortedNotifications","canExpand","notificationsToShow","unreadCount","dismissed","hasUnread","handleRead","readNotification","mouseEvent","touchEvent","Popper","popperOptions","positionFixed","modifiers","offset","enabled","deleteAllNotifications","myRef","UserDetails","onDisconnect","openDashboard","connectedNetwork","hideDot","justify","ChainIndicator","lazy","WalletPopup","providerDetails","HeaderComponent","onToggleSafeList","isDark","loadedSelector","tryToConnectToLastUsedProvider","lastUsedProvider","isSupportedWallet","dashboard","walletReset","ProviderAccessible","useStateHandler","clickAwayNotifications","openNotifications","toggleNotifications","clickAwayWallet","openWallet","toggleWallet","fluid","dangerouslySetInnerHTML","__html","providerRef","truncate","fullStr","strLen","separator","charsToShow","frontChars","Math","ceil","backChars","floor","substr","Component","subItems","constructor","MultiLevel","SingleLevel","Item","RNavLink","exact","activeClassName","selected","child","CustomNav","bsPrefix","StyledMenu","transformOrigin","marginTop","spacing","grey","alpha","selectedOpacity","CustomizedMenus","sidebarIsOpen","openDrpDwn","fullWidth","endIcon","KeyboardArrowUp","KeyboardArrowDown","divider","getNetworkRootRoutes","route","StyledTextLabel","chainInfo","SidebarComponent","items","granted","onReceiveClick","onNewTransactionClick","_refSidebar","elementRef","cursorXPosition","handleMouseEnter","handleMouseLeave","handleMouseMove","offsetLeft","offsetWidth","eventX","touches","clientX","handleMouseUp","node","useHover","handlerSidebarOpen","handlerResizeWin","innerWidth","showChainPrefix","showShortNameSelector","copyShortNameSelector","explorerUrlSafeAddress","close","profile","avatar","badge","shouldShowShortName","Dropdown","btn","Toggle","url","TransactionQueueBar","closed","setClosed","hasPendingTransactions","StyledAccordion","enter","exit","mountOnEnter","expandIcon","StyledExpandIcon","StyledCloseIconButton","StyledAccordionDetails","StyledBackdrop","Accordion","AccordionDetails","ExpandMoreIcon","AppLayout","sidebarItems","showSideBar","path","SAFE_APP_LANDING_PAGE_ROUTE","Sidebar","useAddressBookSync","onStorageUpdate","oldValue","endsWith","newState","Frame","App","currentSafeBalance","totalFiatBalance","currentCurrency","currentCurrencySelector","featuresEnabled","currentSafeFeaturesEnabled","safeAppsEnabled","SAFE_APPS","isCollectiblesEnabled","isSpendingLimitEnabled","SPENDING_LIMIT","needsUpdate","matchSafe","matchSafeWithSidebarSection","SAFE_SUBSECTION_ROUTE","makeEntryItem","currentSafeRoutes","generatePrefixedAddressRoutes","assetsSubItems","ASSETS_BALANCES","ASSETS_BALANCES_COLLECTIBLES","transactionsSubItems","TRANSACTIONS_HISTORY","SETTINGS_OWNERS","SETTINGS_POLICIES","SETTINGS_ADVANCED","BIZ","useSidebarItems","addCurrentShortName","addCurrentSafeAddress","useCurrentSafeAddressSync","formatCurrency","onReceiveHide","paperClassName","ReceiveModal","WrapperAppWithSidebar","Content","LinkWrapper","LinkContent","GlobalErrorBoundaryFallback","componentStack","LAST_CHUNK_FAILURE_RELOAD_KEY","test","lastReload","loadFromSessionStorage","removeFromSessionStorage","getTime","saveToSessionStorage","reload","handleChunkError","IS_PRODUCTION","ROOT_ROUTE","SafeAppLandingPage","SafeContainer","Routes","lastSafe","usePageTracking","GENERIC_APPS_ROUTE","redirectPath","validShortName","setChainIdFromUrl","onScreenKeys","useNotifier","useSnackbar","closeSnackbar","enqueueSnackbar","wasClosed","onExited","onScreenKey","containerRoot","snackbar","flexWrap","overflowY","maxHeight","Notifier","CustomSnackBarProvider","variantSuccess","variantError","variantWarning","variantInfo","iconVariant","maxSnack","Providers","SHORT_NAME","styledTheme","muiTheme","SnackbarProvider","LEGACY_SAFE_ADDRESS_SLUG","LegacyRouteRedirection","match","matchPath","DEFAULT_SHORT_NAME","MAINNET","safeAddressIndex","indexOf","newPathname","removePreloader","getElementById","RootConsumer","hasChains","setHasChains","isError","setIsError","setBaseUrl","GATEWAY_URL","initChains","_904","Starter","styledThemeWalliro","primaryHover","secondaryLight","inputField","placeHolder","fonts","Root","fallback","GlobalErrorBoundary","ethereum","isMetaMask","autoRefreshOnNetworkChange","EXPONENTIAL_AT","dsn","SENTRY_DSN","release","integrations","Integrations","BrowserTracing","sampleRate","ignoreErrors","LOCAL_CONFIG_KEY","localItem","local","DEFAULT_CHAIN_ID","getInitialChainId","isValidChainId","formatRpcServiceUrl","TOKEN","RPC_AUTHENTICATION","API_KEY_PATH","getRpcServiceUrl","INFURA_TOKEN","getPublicRpcUrl","getSafeAppsRpcServiceUrl","SAFE_APPS_RPC_TOKEN","getGasPriceOracles","GAS_PRICE_TYPE","ORACLE","getFixedGasPrice","FIXED","getTxServiceUrl","TX_SERVICE_VERSION","getDisabledWallets","getExplorerUriTemplate","getExplorerUrl","URL","uri","evalTemplate","getHashedExplorerUrl","hostname","fetchContractAbi","contractAddress","apiUri","apiKey","ETHERSCAN_API_KEY","finalUrl","response","ok","getContractABI","joinedTxs","encodeParameter","utils","hexToBytes","join","multiSendAddress","isSupportedMultiSendAddress","MODALS","SEND_FUNDS","SEND_COLLECTIBLE","CONTRACT_INTERACTION","ADVANCED_PARAMS","EDIT_ADVANCED_PARAMS","EXECUTE_TX","USE_SPENDING_LIMIT","SIMULATE_TX","MODALS_CATEGORY","getModalEvent","TX_LIST","CONFIRM","EXECUTE","REJECT","getFormattedAddress","shorten","formattedAddress","textShortener","charsStart","charsEnd","shouldShowChainPrefix","isTxFilter","object","FILTER_FIELD_NAMES","getTransactionFilter","execution_date__gte","execution_date__lte","date","utc","setUTCMinutes","getTimezoneOffset","toISOString","getStartOfDay","getEndOfDay","getIncomingFilter","token_address","getMultisigFilter","executed","getModuleFilter","LOCALE","lt1kFormatter","Intl","NumberFormat","maximumFractionDigits","lt10kFormatter","lt100kFormatter","lt1mFormatter","lt10mFormatter","lt100mFormatter","lt1000tFormatter","notation","gt1000tFormatter","numberFloat","parseFloat","format","currencyFormatter","minimumFractionDigits","currencySelected","getLocalStartOfDate","setHours","formatWithSchema","schema","formatDistanceToNow","addSuffix","SAFES_KEY","getLocalNetworkSafesById","getStoragePrefix","loadStoredNetworkSafeById","getLocalSafe","deployment","getAllowanceModuleDeployment","networkAddresses","checkIfOffChainSignatureIsPossible","isSmartContractWallet","SAFE_VERSION_FOR_OFF_CHAIN_SIGNATURES","getPreValidatedSignatures","initialString","preApprovingOwner","confirmationsMap","ownerA","ownerB","localeCompare","asyncCall","dependencies","setResult","finally","getAnonymizedPathname","ANON_SAFE_ADDRESS","ANON_TX_ID","anonPathname","safeAddressMatch","txIdMatch","queueHistoryMatch","isSingularTxView","GOOGLE_TAG_MANAGER_AUTH_LIVE","GOOGLE_TAG_MANAGER_AUTH_LATEST","GOOGLE_TAG_MANAGER_DEVELOPMENT_AUTH","didMount","pagePath","track","PAGEVIEW","pageLocation","eventCategory","eventAction","eventLabel","tryParse","getSafeAppName","safeApp","EMPTY_SAFE_APP","parsedSafeApp","trackSafeAppMessage","app","sdkVersion","SAFE_APP","safeAppName","safeAppMethod","safeAppEthMethod","safeAppSDKVersion","dataLayer","TagManager","appearanceStateSelector","copyShortName","showShortName","ADD_NFT_ASSETS","ADD_NFT_TOKENS","SET_NFT_LOADED","addNftAssets","nftAssets","addNftTokens","nftTokens","setNftTokensLoaded","availableCurrencies","SET_CURRENT_CURRENCY","createBrowserHistory","basename","chainSpecificSafeAddressPathRegExp","SAFE_SECTION_ROUTE","LEGACY_COLLECTIBLES","TRANSACTIONS","SETTINGS","BIZ_LIST","BIZ_Create","prefixedSafeAddress","STANDARD_SAFE_ROUTES","routes","demoSafeRoute","DEMO_SAFE_MAINNET","getShareSafeAppUrl","appUrl","baseUrl","encodeURI","NO_CONTRACT","ensResolver","createDecorator","updates","formMutators","setMax","changeValue","setContractAddress","setSelectedMethod","lastFormState","selectedMethod","setCallResults","setAbiValue","isBoolean","isUint","isInt","parameter","handleSubmitError","reason","FORM_ERROR","generateFormFieldKey","signatureHash","keyType","extractMethodArgs","isInteger","getParsedJSONOrArrayFromString","createTxObject","contract","inputs","isReadMethod","getValueFromTxInputs","String","GATEWAY_ERROR","fetchSafeInfo","safeNotFound","_605","_613","ADDRESS_BOOK_INVALID_NAMES","isValidAddressBookName","invalidName","filterContractAddressBookEntries","mustBeEthereumContractAddress","abFlags","filterAddressEntries","addressBookEntries","inputLowerCase","foundName","foundAddress","getEntryIndex","findIndex","hasSameAddressAndChainId","arrVal","othVal","txDataParagraph","linkTxData","textDecoration","showTxData","setShowTxData","showExpandBtn","shortener","isLabel","isCreationTxInfo","canExecuteCreatedTx","getThreshold","thresholdAsString","extractRemoteSafeInfo","remoteSafeInfo","safeInfo","safeInfoModules","buildModulesLinkedList","collectiblesTag","txQueuedTag","txHistoryTag","buildSafeOwners","remoteSafeOwners","localSafeOwners","nextNonce","navigateToTx","txRoute","ChainIndicatorWrapper","$chainTheme","subTitle","hideCircle","ADD_OR_UPDATE_SAFE","updateSafe","UPDATE_TRANSACTION_DETAILS","updateTransactionDetails","isMMRejection","isWCRejection","isKeystoneError","content","extraMessage","extraInfo","codePrefix","ErrorCodes","___0","stack","newStack","line","postSafeGasEstimation","CALL","fancy","keyStyle","buildKeyStyleFrom","dotStyle","buildDotStyleFrom","TriangleIcon","KeyIcon","initialPendingTxsState","newChainState","Storage","sessionStorage","removeItem","hex","SET_COPY_SHORT_NAME","SET_SHOW_SHORT_NAME","getNativeCurrencyAddress","UDResolution","web3HttpProviderOptions","web3ReadOnly","Web3","providers","HttpProvider","isSupportedHardwareWallet","isHardwareWalletType","isSmartContract","contractCode","memoizedIsSmartContract","UnstoppableResolution","sourceConfig","uns","addr","getAddressFromUnstoppableDomain","getAddress","lookup","nh","namehash","getResolver","ResolverContract","verifiedAddress","getContentFromENS","getContenthash","getSDKWeb3Adapter","signerAddress","Web3Adapter","getSDKWeb3ReadOnly","getSafeSDK","getChainId","ethAdapter","isL1SafeMasterCopy","Safe","_getTxHistory","txListPage","previous","getIncomingTransfers","getMultisigTransactions","getModuleTransactions","getTransactionHistory","_getHistoryPageUrl","pageUrl","searchParams","historyPointers","getHistoryPointer","loadPagedHistoryTransactions","_608","_602","queuedPointers","loadPagedQueuedTransactions","getTransactionQueue","_603","loadQueuedTransactions","WALLET_ERRORS","requestSwitch","updateSession","accounts","numberToHex","requestAdd","rpcUrls","blockExplorerUrls","_301","_300","networkVersion","hexToNumberString","switchWalletChain","Threshold","StyledIcon","Icon","checked","StyledButton","StyledPrefixedEthHashInfo","AddressContainer","SafeListItem","onSafeClick","showAddSafeLink","shouldScrollToSafe","isCurrentSafe","safeRef","nativeCurrencySymbol","scrollIntoView","routesSlug","Box","StyledDot","MuiList","listItemCollapse","PlaceholderText","isNotLoadedViaUrl","isSameAddress","addrA","addrB","SafeList","ownedSafes","localSafes","useLocalSafes","addedSafes","isCurrentNetwork","ownedSafesOnNetwork","localSafesOnNetwork","uniqBy","shouldExpandOwnedSafes","ownedAddress","isAdded","sidebarWidth","sidebarMarginLeft","useSidebarStyles","sidebarPaper","topComponents","flexFlow","searchWrapper","spacer","headerPlaceholder","headerHeight","addSafeBtn","mediumFontSize","searchIcon","searchInput","searchContainer","searchRoot","searchIconInput","AddSafeButton","onAdd","Fab","setIsOpen","prevIsOpen","Drawer","paper","ModalProps","isStateSubset","superObj","subObj","every","shouldSafeStoreBeUpdated","newSafeProps","oldSafeProps","storedSafe","mergeNewTagsInSafe","newSafe","mergeIn","updateSafeProps","prevSafe","withMutations","record","Map","isMap","update","isList","merge","getIn","updateIn","makeSafe","hasIn","setIn","deleteIn","CLEAR_SAFE_LIST","SET_LATEST_MASTER_CONTRACT_VERSION","latestMasterContractVersion","EIP712_DOMAIN_BEFORE_V130","EIP712_DOMAIN","getEip712MessageTypes","EIP712Domain","SafeTx","generateTypedDataFrom","eip712WithChainId","types","domain","verifyingContract","primaryType","getEIP712Signer","typedData","jsonTypedData","signedTypedData","jsonrpc","currentProvider","sendAsync","sig","adjustV","Bold","restProps","paragraph","invalidProtocolRegex","ctrlCharactersRegex","urlSchemeRegex","relativeFirstCharacters","sanitizeUrl","sanitizedUrl","isRelativeUrlWithoutProtocol","urlSchemeParseResults","urlScheme","INFINITE_SCROLL_CONTAINER","InfiniteScrollContext","setLastItemId","InfiniteScrollProvider","forwardRef","_setLastItemId","itemId","InfiniteScroll","useInView","querySelector","rootMargin","triggerOnce","inView","isMounted","isVisible","generateSafeTxHash","TypedDataUtils","sign","DEFAULT_PROPS","defaultTokenTransferAsset","asset","setAsset","getTxAmount","ERC20","tokenName","getTokenIdLabel","NATIVE_COIN","ensDomain","DEFAULT_PREFIX","storage","prefixKey","fullKey","saved","_700","_701","_702","removeMatching","pattern","setWithExpiry","getWithExpiry","setNonce","newNonce","getNotification","executedTx","TxHoverContext","activeHover","TxHoverProvider","common","black","MuiTooltip","TransactionActionStateContext","selectedAction","actionSelected","selectAction","TxActionProvider","setSelectedAction","loadHistory","loadQueue","CircleDot","htmlColor","APP_ENV","REACT_APP_DEFAULT_CHAIN_ID","PORTIS_ID","FORTMATIC_KEY","APP_VERSION","COLLECTIBLES_SOURCE","SAFE_POLLING_INTERVAL","WC_BRIDGE","REACT_APP_WC_BRIDGE","GOOGLE_TAG_MANAGER_ID","REACT_APP_GOOGLE_TAG_MANAGER_ID","REACT_APP_GOOGLE_TAG_MANAGER_LIVE_AUTH","REACT_APP_GOOGLE_TAG_MANAGER_LATEST_AUTH","REACT_APP_GOOGLE_TAG_MANAGER_DEVELOPMENT_AUTH","TENDERLY_SIMULATE_ENDPOINT_URL","TENDERLY_PROJECT_NAME","TENDERLY_ORG_NAME","REACT_APP_E2E_MNEMONIC","Record","balances","recurringUser","LOAD_CURRENT_SESSION","UPDATE_VIEWED_SAFES","concat","saveCurrentSessionToStorage","REMOVE_VIEWED_SAFE","CLEAR_CURRENT_SESSION","ADD_CURRENT_SHORT_NAME","getAddressBookFallbackName","batchLoadEntries","isValid","entryIndex","uniqWith","splice","WALLET","OFF_CHAIN_SIGNATURE","ON_CHAIN_INTERACTION","APPS_STORAGE_KEY","PINNED_SAFE_APP_IDS","MANIFEST_ERROR_MESSAGE","removeLastTrailingSlash","isSameUrl","url1","url2","isAppManifestValid","getEmptySafeApp","random","appsIconSvg","fetchStatus","chainIds","accessControl","SafeAppAccessPolicyTypes","NoRestrictions","tags","getAppInfoFromUrl","validateManifest","loadingStatus","noTrailingSlashUrl","axios","toLocaleLowerCase","jsonDataLength","remainingSpace","appInfoData","iconPath","icons","getAppIcon","providedBy","substring","concatenatedImgPath","canLoadAppImage","svgIcon","sizes","getIpfsLinkFromEns","protocolType","decoded","uniqueApp","appList","newUrl","image","Image","getLegacyChainName","firstAddress","secondAddress","isUserAnOwnerOfAnySafe","GnosisLink","internal","LinkElement","refs","LinkWithRef","toChecksumAddress","_102","checkAddressChecksum","providerFactory","CURRENT_SESSION_STORAGE_KEY","client","getPairingModule","clientMeta","parser","UAParser","browser","getBrowser","os","getOS","major","logo","getClientMeta","resetWalletState","RPC_MAP","WalletConnectProvider","bridge","pollingInterval","infuraId","rpc","storageId","qrcode","_clientMeta","disconnected","walletName","enable","interface","func","disconnect","peerId","desktop","mobile","preferred","makeQueueByNonce","isTail","newHistory","cloneDeep","startOfDate","txIndex","sortObject","nextItems","queuedItems","qLabelIndex","LabelValue","Queued","clonedStoredTxs","newQueued","txLocationLoop","txGroup","ADD_TOKENS","SENTINEL_ADDRESS","enableModuleTx","sdk","getEnableModuleTx","safeTx","isSimulationEnvSet","SimulationResult","simulationRequestStatus","simulation","simulationLink","requestError","AlertTitle","error_message","error_info","useSimulation","setSimulation","NOT_ASKED","setSimulationRequestStatus","setRequestError","simulationId","resetSimulation","simulateTransaction","walletAddress","canExecuteTx","simulationPayload","network_id","gas_price","state_objects","padStart","save_if_fails","post","simulationResponse","StyledResultAccordionSummary","TxSimulationBlock","blockGasLimit","simulationGasLimit","handleSimulation","isSimulationFinished","isSimulationLoading","isTxSimulationEnabled","TX_SIMULATION","getSafeTxGas","txProps","estimationProps","_617","TxSender","isFinalization","confirmCallback","saveTxToHistory","_816","navigateToTransactionsTab","errorCallback","executeData","approveHash","contractErrorMessage","_803","tryOffChainSigning","getApprovalTransaction","ethParameters","canSignOffchain","isOffchain","onlyConfirm","_814","_isOnboardReady","currentSafeCurrentVersion","walletSelected","createTransaction","prepare","_815","delayExecution","submitTx","StyledRow","StyledFormControlLabel","ExecuteCheckbox","Checkbox","TxParameterEndWrapper","ColoredText","TxParameter","getEl","prop","TxParametersDetail","isTxNonceOutOfOrder","setIsTxNonceOutOfOrder","safeNonceNumber","lastQueuedTxNonce","storedTx","animation","TxAdvancedParametersDetail","useCanTxExecute","txConfirmations","existingTxThreshold","useIsSmartContractWallet","isSmart","setIsSmart","checkAddress","TxModalWrapper","txValue","txThreshold","onBack","submitText","isSubmitDisabled","isRejectTx","manualSafeTxGas","setManualSafeTxGas","setManualGasPrice","setManualMaxPrioFee","manualGasLimit","setManualGasLimit","executionApproved","setExecutionApproved","isOwner","confirmationsLen","doExecute","showCheckbox","isMultisigCreation","isOffChainSignature","approvalAndExecution","isApproveAndExecute","useEstimateSafeTxGas","safeTxGasEstimation","safeTxGasError","estimateGasLimit","useEstimateGasLimit","getGasCostFormatted","DEFAULT_GAS_LIMIT","submitStatus","setSubmitStatus","getParametersStatus","simulateTxData","oldGasPrice","newGasPrice","oldGasLimit","newGasLimit","oldMaxPrioFee","newMaxPrioFee","oldSafeTxGas","newSafeTxGas","marginBottom","isTransactionCreation","_802","onSubmitClick","loaderContainer","detailsContainer","ScanQRModal","onScan","fileUploadModalOpen","setFileUploadModalOpen","cameraBlocked","setCameraBlocked","scannerRef","openImageDialog","onFileScannedResolve","successData","legacyMode","facingMode","qrCodeBtn","qrModalOpen","setQrModalOpen","QRIcon","LoadingContainer","ChooseTxType","SendFunds","SendCollectible","ReviewCollectible","ReviewSendFundsTx","ContractInteraction","ContractInteractionReview","SendCustomTx","ReviewCustomTx","loaderStyle","activeScreen","setActiveScreen","setTx","isABI","setIsABI","setRecipient","handleSwitchMethod","handleOnPrev","screen","onReview","onPrev","onNext","contractInteractionInfo","submit","switchMethod","customTxInfo","currentInput","setCurrentInput","resolutions","setResolutions","sanitizedValidators","parsed","allValidators","mustBeEthereumAddress","onValueChange","rawVal","trimSpaces","resolverAddr","_101","checkedAddress","adornment","spellCheck","availableCurrenciesSelector","fetchSafeCollectibles","getCollectibles","Gnosis","_getAssetsFromTokens","tokenSymbol","_fetch","collectibles","erc721Assets","erc721Tokens","_604","extractTokens","extractAssets","assets","extractedAssets","extractNFTAsset","assetAddress","imageUri","tokenId","mainAssetAddress","numberOfTokens","slug","SOURCES","gnosis","fetchCollectibles","source","addViewedSafe","updateViewedSafes","remote","localSafeInfo","fetchSafe","isInitialLoad","dispatchPromises","shouldUpdateCollectibles","shouldUpdateTxHistory","shouldUpdateTxQueued","fetchSafeTokens","makeToken","tokenBalance","light","dark","black400","black600","bolderFont","buttonLargeFontSize","extraBoldFont","extraLargeFontSize","fontColor2","fontSizeHeadingLg","fontSizeHeadingMd","fontSizeHeadingSm","fontSizeHeadingXs","lightFont","mainFontFamily","marginButtonImg","infoColor","regularFont","screenLg","screenMd","screenMdMax","screenSmMax","screenXs","screenXsMax","secondaryFontFamily","secondaryBackground","alertWarning","xxl","xxlFontSize","satisfies_1","DEFAULT_FILTER","released","criteria","deployments","order","s","n","objectPath","part","shift","cacheKey","promise","getTransactionDetails","removeSafe","safesState","safesAsList","safeState","baseSafe","safeFieldSelector","currentSafeEthBalance","currentSafeSpendingLimits","safesWithNamesAsList","safesList","safeRecord","toObject","toJS","safesWithNamesAsMap","baseSafeWithName","StyledContainer","$vertical","ethSigner","SIGNERS","EIP712_V3","EIP712_V4","EIP712","ETH_SIGN","getSupportedSigners","isHW","safeSupportsEthSigner","signers","signerByWallet","signingFunc","paddingStyle","rowClassNames","row","openInitialValue","stopPropagation","addTokens","signingMethod","sigV","hasPrefix","rsvSig","r","v","recoveredData","ecrecover","recoveredAddress","bufferToHex","pubToAddress","isTxHashSignedWithPrefix","makeConfirmation","fiatBalance","ErrorMessage","executionWarningRow","warningIcon","errorDesc","creation","execution","defaultMsg","general","wrongChain","notOwner","getE2EWalletModule","iconSrc","CypressLogo","helpers","createModernProviderInterface","HDWalletProvider","mnemonic","Cypress","env","providerOrUrl","supportedWallets","rpcUrl","email","LedgerTransport","TransportNodeHid","appName","COINBASE","WALLET_LINK","OPERA_TOUCH","isDesktop","fetchGasPrice","gasPriceOracle","gasParameter","gweiFactor","multipliedBy","getFeeHistory","blocks","baseFeePerGas","hexToNumber","reward","_618","gasPriceOracles","fetchedGasPrice","fixedGasPrice","weiValue","getGasPrice","txConfig","_612","getTransactionCount","txsCount","setTxsCount","useQueueTransactions","nextPage","actionContext","locationContext","transactionsByNonce","canConfirm","canConfirmThenExecute","canExecute","setState","currentUserSigned","missingSigner","oneToGo","useTransactionActions","ContentWrapper","ColumnDisplayAccordionDetails","NoPaddingAccordion","attrs","isDeeplinkedTx","ActionAccordion","StyledTransactionsGroup","SubTitle","h2","StyledTransactions","GroupedTransactionsCard","gridColumns","css","failedTransaction","StyledTransaction","StyledGroupedTransactions","GroupedTransactions","DisclaimerContainer","TxDetailsContainer","errorHover","InlineEthHashInfo","EthHashInfo","ScrollableTransactionsContainer","Centered","HorizontallyCentered","AlignItemsWithMargin","NoTransactions","StyledGridRow","StyledTxInfoDetails","StyledDetailsTitle","ellipsis","amountOfCharsToKeep","finalStringLength","RegExp","matchResult","exec","textStart","textEnd","str1","str2","getAmountWithSymbol","formatted","nonFormattedValue","finalValue","factory","DEFAULT_TX_INFO","makeTxFromDetails","getMissingSigners","getMultisigExecutionInfo","txMatch","deeplinkMatch","estimationFn","setGasLimit","TxQueueCollapsed","calculateVotes","TxQueueRow","onChildExpand","batchTxActiveHover","inBatch","isThisTxPending","isReplacementTxPending","pendingTx","currTx","nonceNumber","ApproveTxModal","t","useTxInfo","submitDisabled","thresholdReached","modalInfo","getModalTitleAndDescription","approveAndExecute","RejectTxModal","ActionModal","TreeView","firstElement","Disclaimer","QueueTransaction","nrChildrenExpanded","setNrChildrenExpanded","handleChildExpand","expand","lastTransactionsGroup","lastTransaction","stylesBasedOn","decorators","subscription","mutators","validating","form","OPEN_APP","PIN","UNPIN","SEARCH","ADD_CUSTOM_APP","TRANSACTION_CONFIRMED","TRANSACTION_REJECTED","LEGACY_API_CALL","SHARED_APP_LANDING","SHARED_APP_CHAIN_ID","SHARED_APP_OPEN_DEMO","SelectInput","disableError","formControlProps","renderValue","dirtySinceLastSubmit","fill","qrContainer","addressContainer","shouldEncodePrefix","setShouldEncodePrefix","qrCodeString","contrastThreshold","tonalOffset","createTheme","typography","useNextVariants","overrides","MuiSkeleton","MuiButton","textTransform","contained","containedPrimary","containedSecondary","outlinedPrimary","sizeLarge","sizeSmall","textSecondary","MuiPaper","rounded","MuiStepper","MuiChip","MuiStepIcon","completed","MuiStepContent","borderLeft","MuiTypography","body1","body2","MuiFormControl","MuiInputBase","MuiFormLabel","MuiInputLabel","outlined","MuiOutlinedInput","borderColor","MuiFilledInput","underline","borderBottomStyle","borderBottomWidth","borderBottomColor","MuiStepLabel","textAlign","MuiSvgIcon","colorSecondary","MuiSnackbar","MuiSnackbarContent","overflowX","wordBreak","MuiTabs","indicator","MuiTab","MuiTable","MuiTableContainer","MuiTablePagination","toolbar","selectIcon","caption","select","MuiTableSortLabel","MuiTableRow","hover","MuiTableCell","MuiBackdrop","backdropFilter","MuiMenu","MuiMenuItem","MuiListItemIcon","MuiListItemText","MuiCheckbox","MuiFormControlLabel","MuiAlert","standardWarning","standardInfo","MuiAlertTitle","DropdownListTheme","elevation0","MuiListItem","UnStyledButton","around","between","lgOffset","mdOffset","smOffset","xsOffset","colClassNames","setSelectedCurrency","extractDataFromResult","currency","tokenCurrenciesBalances","_601","fiatTotal","animals","adjectives","getRandomItem","arr","useMnemonicName","noun","setName","adj","getRandomName","sortedSafeListSelector","setLocalSafes","addedAddresses","localSafe","prevSafes","isDataDecodedParameterValue","arg","DecodedTxDetail","decodedTxData","getParameterElement","BasicTxInfoWrapper","ElementWrapper","BasicTxInfo","valueElement","SingleTx","MultiSendTx","ModalStyled","ModalMUI","GnoModal","BackdropProps","TitleStyled","TitleSRC","withoutMargin","BodySection","withoutPadding","FooterSection","cancelDisabled","cancelStatus","cancelText","cancelTestId","cancelOnClick","cancelProps","confirmDisabled","confirmStatus","confirmText","confirmTestId","confirmOnClick","confirmProps","getSize","calculatedStyles","calculateStyleFrom","mergedStyles","NOTIFICATION_ACTIONS","SHOW","READ","CLOSE","CLOSE_ALL","DELETE","DELETE_ALL","mustBeInteger","mustBeFloat","inclusive","max","mustBeHexData","mustBeAddressHash","prefixError","mustHaveValidPrefix","minLen","maxLen","testValue","minMaxDecimalsLength","uniqueAddress","addressFromList","addressIsNotCurrentSafe","validator","differentFrom","diffValue","validAddressBookName","lengthError","calculateBodyFrom","getTransactionHash","proposeTransaction","setLatestMasterContractVersion","removeViewedSafe","onConnectButtonClick","StyledTitle","h5","StyledKeyring","ConnectButton","proxyFactoryMaster","fallbackHandler","getSafeContractDeployment","useOldestContractVersion","getDeployment","getSignMessageLibAddress","signMessageLibDeployment","getSignMessageLibContractInstance","getMasterCopyAddressFromProxyAddress","proxyAddress","masterCopyAddress","proxyFactoryDeployment","getProxyFactoryContractInstance","safeSingletonDeployment","getGnosisSafeContractInstance","fallbackHandlerDeployment","getFallbackHandlerContractInstance","multiSendDeployment","getMultiSendContractInstance","getSafeMasterContractAddress","getFallbackHandlerContractAddress","safeAccounts","numConfirmations","gnosisSafeData","setup","createProxyWithNonce","proxyFactoryData","STORAGE_KEYS"],"mappings":"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","file":"static/js/main.53f0a90e.chunk.js","sourcesContent":["import { createAction } from 'redux-actions'\nimport { AvailableCurrenciesPayload } from 'src/logic/currencyValues/store/reducer/currencyValues'\n\nexport const SET_AVAILABLE_CURRENCIES = 'SET_AVAILABLE_CURRENCIES'\n\nexport const setAvailableCurrencies = createAction(SET_AVAILABLE_CURRENCIES)\n","export default __webpack_public_path__ + \"static/media/ledger.ece56f4d.jpg\";","import { loadFromStorage, saveToStorage } from 'src/utils/storage'\nimport { WALLET_PROVIDER } from 'src/logic/wallets/getWeb3'\nimport ledgerImage from './images/ledger.jpg'\n\nconst USER_ENABLED_LEDGER_TX_DATA = 'USER_ENABLED_LEDGER_TX_DATA'\nfunction transactionDataCheck(): any {\n return (stateAndHelpers) => {\n const { wallet } = stateAndHelpers\n const isTransactionDataEnabled = loadFromStorage(USER_ENABLED_LEDGER_TX_DATA)\n if (wallet && wallet.name.toUpperCase() === WALLET_PROVIDER.LEDGER && !isTransactionDataEnabled) {\n return {\n heading: 'Enable blind signing',\n description: `

Important: In order to sign transactions with your Ledger device, you will have to activate the Blind signing setting in the Ethereum app on your Ledger.

\"Blind
`,\n eventCode: 'allowTransactionData',\n button: {\n text: 'Done',\n onclick: () => saveToStorage(USER_ENABLED_LEDGER_TX_DATA, true),\n },\n icon: `\n \n `,\n }\n }\n return null\n }\n}\n\nexport default transactionDataCheck\n","import Onboard from 'bnc-onboard'\nimport { API, Initialization } from 'bnc-onboard/dist/src/interfaces'\nimport { FEATURES } from '@gnosis.pm/safe-react-gateway-sdk'\n\nimport { _getChainId, getChainName } from 'src/config'\nimport transactionDataCheck from 'src/logic/wallets/transactionDataCheck'\nimport { getSupportedWallets } from 'src/logic/wallets/utils/walletList'\nimport { ChainId, CHAIN_ID } from 'src/config/chain.d'\nimport { loadFromStorageWithExpiry, removeFromStorageWithExpiry, saveToStorageWithExpiry } from 'src/utils/storage'\nimport { store } from 'src/store'\nimport updateProviderWallet from 'src/logic/wallets/store/actions/updateProviderWallet'\nimport updateProviderAccount from 'src/logic/wallets/store/actions/updateProviderAccount'\nimport updateProviderNetwork from 'src/logic/wallets/store/actions/updateProviderNetwork'\nimport updateProviderEns from 'src/logic/wallets/store/actions/updateProviderEns'\nimport { closeAllNotifications } from '../notifications/store/notifications'\nimport { getChains } from 'src/config/cache/chains'\nimport { shouldSwitchNetwork, switchNetwork } from 'src/logic/wallets/utils/network'\nimport { isPairingModule } from 'src/logic/wallets/pairing/utils'\nimport { checksumAddress } from 'src/utils/checksumAddress'\n\nconst LAST_USED_PROVIDER_KEY = 'SAFE__lastUsedProvider'\n\nexport const saveLastUsedProvider = (name: string): void => {\n const expireInDays = (days: number) => 60 * 60 * 24 * 1000 * days\n const expiry = isPairingModule(name) ? expireInDays(1) : expireInDays(365)\n saveToStorageWithExpiry(LAST_USED_PROVIDER_KEY, name, expiry)\n}\n\nexport const loadLastUsedProvider = (): string | undefined => {\n return loadFromStorageWithExpiry(LAST_USED_PROVIDER_KEY)\n}\n\nexport const removeLastUsedProvider = (): void => {\n removeFromStorageWithExpiry(LAST_USED_PROVIDER_KEY)\n}\n\nconst getNetworkName = (chainId: ChainId) => {\n // 'mainnet' is hardcoded in onboard v1\n const NETWORK_NAMES: Record = {\n [CHAIN_ID.ETHEREUM]: 'mainnet',\n }\n\n // Ledger requires lowercase names\n return NETWORK_NAMES[chainId] || getChainName().toLowerCase()\n}\n\nconst hasENSSupport = (chainId: ChainId): boolean => {\n return getChains().some((chain) => chain.chainId === chainId && chain.features.includes(FEATURES.DOMAIN_LOOKUP))\n}\n\nexport const BLOCK_POLLING_INTERVAL = 1000 * 60 * 60 // 1 hour\n\nconst getOnboard = (chainId: ChainId): API => {\n const config: Initialization = {\n networkId: parseInt(chainId, 10),\n networkName: getNetworkName(chainId),\n blockPollingInterval: BLOCK_POLLING_INTERVAL,\n subscriptions: {\n wallet: async (wallet) => {\n store.dispatch(updateProviderWallet(wallet.name || ''))\n },\n address: (address) => {\n store.dispatch(updateProviderAccount(checksumAddress(address) || ''))\n },\n network: (networkId) => {\n store.dispatch(updateProviderNetwork(networkId?.toString() || ''))\n store.dispatch(closeAllNotifications())\n },\n ens: hasENSSupport(chainId)\n ? (ens) => {\n store.dispatch(updateProviderEns(ens?.name || ''))\n }\n : undefined,\n },\n walletSelect: {\n description: 'Please select a wallet to connect to Walliro',\n wallets: getSupportedWallets(chainId),\n },\n walletCheck: [\n { checkName: 'derivationPath' },\n { checkName: 'connect' },\n { checkName: 'accounts' },\n { checkName: 'network' },\n transactionDataCheck(),\n ],\n }\n\n return Onboard(config)\n}\n\nlet currentOnboardInstance: API\nconst onboard = (): API => {\n const chainId = _getChainId()\n if (!currentOnboardInstance || currentOnboardInstance.getState().appNetworkId.toString() !== chainId) {\n currentOnboardInstance = getOnboard(chainId)\n }\n\n return currentOnboardInstance\n}\nexport default onboard\n\nexport const checkWallet = async (): Promise => {\n const wallet = onboard().getState().wallet\n\n if (shouldSwitchNetwork(wallet)) {\n switchNetwork(wallet, _getChainId()).catch((e) => e.log())\n }\n\n let isWalletConnected = false\n try {\n // Onboard requests `walletSelect()` be called first but we don't\n // want to open the modal\n isWalletConnected = await onboard().walletCheck()\n } catch {}\n\n return isWalletConnected\n}\n","import { createAction } from 'redux-actions'\n\nimport { PROVIDER_ACTIONS } from 'src/logic/wallets/store/actions'\nimport { ProviderNamePayload } from 'src/logic/wallets/store/reducer'\n\nconst updateProviderWallet = createAction(PROVIDER_ACTIONS.WALLET_NAME)\n\nexport default updateProviderWallet\n","import { createAction } from 'redux-actions'\n\nimport { PROVIDER_ACTIONS } from 'src/logic/wallets/store/actions'\nimport { ProviderAccountPayload } from 'src/logic/wallets/store/reducer'\n\nconst updateProviderAccount = createAction(PROVIDER_ACTIONS.ACCOUNT)\n\nexport default updateProviderAccount\n","import { createAction } from 'redux-actions'\n\nimport { PROVIDER_ACTIONS } from 'src/logic/wallets/store/actions'\nimport { ProviderNetworkPayload } from 'src/logic/wallets/store/reducer'\n\nconst updateProviderNetwork = createAction(PROVIDER_ACTIONS.NETWORK)\n\nexport default updateProviderNetwork\n","import { createAction } from 'redux-actions'\n\nimport { PROVIDER_ACTIONS } from 'src/logic/wallets/store/actions'\nimport { ProviderEnsPayload } from 'src/logic/wallets/store/reducer'\n\nconst updateProviderEns = createAction(PROVIDER_ACTIONS.ENS)\n\nexport default updateProviderEns\n","export default __webpack_public_path__ + \"static/media/no-transactions.0fc3884a.svg\";","import { ChainInfo } from '@gnosis.pm/safe-react-gateway-sdk'\n\ntype ChainName = ChainInfo['chainName']\nexport type ShortName = ChainInfo['shortName']\n\n// Remain agnostic and follow CGW by using the following\nexport type ChainId = ChainInfo['chainId']\n\n// A non-exhaustive list of chain ids\n// Only use for edge cases and tests\nexport const CHAIN_ID: Record = {\n UNKNOWN: '0',\n ETHEREUM: '1',\n RINKEBY: '4',\n VOLTA: '73799',\n}\n\n// Values match that required of onboard and returned by CGW\nexport enum WALLETS {\n SAFE_MOBILE = 'safeMobile',\n METAMASK = 'metamask',\n TALLYHO = 'tally',\n WALLET_CONNECT = 'walletConnect',\n TREZOR = 'trezor',\n LEDGER = 'ledger',\n TRUST = 'trust',\n FORTMATIC = 'fortmatic',\n PORTIS = 'portis',\n AUTHEREUM = 'authereum',\n TORUS = 'torus',\n COINBASE = 'coinbase',\n WALLET_LINK = 'walletLink',\n OPERA = 'opera',\n OPERA_TOUCH = 'operaTouch',\n LATTICE = 'lattice',\n KEYSTONE = 'keystone',\n}\n","import debounce from 'lodash/debounce'\nimport { useMemo, useEffect, useState, useRef } from 'react'\n\n/*\n This code snippet is copied from https://github.com/gnbaron/use-lodash-debounce\n with the sole intention to be able to tweak it if is needed and prevent from having\n a new dependency for something relatively trivial\n*/\n\ninterface DebounceOptions {\n leading: boolean\n maxWait: number\n trailing: boolean\n}\n\nexport const useDebounce = (value: T, delay = 0, options?: DebounceOptions): T => {\n const previousValue = useRef(value)\n const [current, setCurrent] = useState(value)\n const debouncedCallback = useMemo(\n () => debounce((val: T) => setCurrent(val), delay, options),\n [setCurrent, delay, options],\n )\n\n useEffect(() => {\n // does trigger the debounce timer initially\n if (value !== previousValue.current) {\n debouncedCallback(value)\n previousValue.current = value\n // cancel the debounced callback on clean up\n return debouncedCallback.cancel\n }\n }, [debouncedCallback, value, previousValue])\n\n return current\n}\n","import { ThemeColors } from '@gnosis.pm/safe-react-components/dist/theme'\nimport { MultisigExecutionInfo } from '@gnosis.pm/safe-react-gateway-sdk'\nimport { useEffect, useState } from 'react'\nimport { useSelector } from 'react-redux'\nimport useTxStatus from 'src/logic/hooks/useTxStatus'\n\nimport { LocalTransactionStatus, Transaction } from 'src/logic/safe/store/models/types/gateway.d'\nimport { userAccountSelector } from 'src/logic/wallets/store/selectors'\nimport { addressInList } from 'src/routes/safe/components/Transactions/TxList/utils'\n\nexport type TransactionStatusProps = {\n color: ThemeColors\n text: string\n}\n\nexport const useTransactionStatus = (transaction: Transaction): TransactionStatusProps => {\n const currentUser = useSelector(userAccountSelector)\n const [status, setStatus] = useState({ color: 'primary', text: '' })\n const txStatus = useTxStatus(transaction)\n const { executionInfo } = transaction\n\n useEffect(() => {\n switch (txStatus) {\n case LocalTransactionStatus.SUCCESS:\n setStatus({ color: 'primary', text: 'Success' })\n break\n case LocalTransactionStatus.FAILED:\n setStatus({ color: 'error', text: 'Failed' })\n break\n case LocalTransactionStatus.CANCELLED:\n setStatus({ color: 'error', text: 'Cancelled' })\n break\n case LocalTransactionStatus.WILL_BE_REPLACED:\n setStatus({ color: 'placeHolder', text: 'Transaction will be replaced' })\n break\n case LocalTransactionStatus.AWAITING_CONFIRMATIONS:\n const signaturePending = addressInList((executionInfo as MultisigExecutionInfo)?.missingSigners ?? undefined)\n const text = signaturePending(currentUser) ? 'Needs your confirmation' : 'Needs confirmations'\n setStatus({ color: 'rinkeby', text })\n break\n case LocalTransactionStatus.AWAITING_EXECUTION:\n setStatus({ color: 'rinkeby', text: 'Needs execution' })\n break\n case LocalTransactionStatus.PENDING:\n setStatus({ color: 'rinkeby', text: 'Pending' })\n break\n }\n }, [setStatus, txStatus, currentUser, executionInfo])\n\n return status\n}\n","import { ReactElement } from 'react'\n\nconst style = {\n flexGrow: 1,\n}\n\nconst Spacer = ({ className }: { className?: string }): ReactElement =>
\n\nexport default Spacer\n","import { ReactElement, useState } from 'react'\nimport styled from 'styled-components'\nimport { Text, ButtonLink, Accordion, AccordionSummary, AccordionDetails } from '@gnosis.pm/safe-react-components'\n\nimport { TxParameters } from 'src/routes/safe/container/hooks/useTransactionParameters'\nimport { ParametersStatus, areEthereumParamsVisible } from '../utils'\nimport Bold from 'src/components/layout/Bold'\nimport { isMaxFeeParam } from 'src/logic/safe/transactions/gas'\nimport Track from 'src/components/Track'\nimport { MODALS_EVENTS } from 'src/utils/events/modals'\n\nconst TxParameterWrapper = styled.div`\n display: flex;\n justify-content: space-between;\n`\n\nconst AccordionDetailsWrapper = styled.div`\n width: 100%;\n display: flex;\n flex-direction: column;\n`\n\nconst StyledButtonLink = styled(ButtonLink)`\n padding-left: 0;\n margin: 8px 0 0 0;\n\n > p {\n margin-left: 0;\n }\n`\n\nconst StyledAccordionSummary = styled(AccordionSummary)`\n & .MuiAccordionSummary-content {\n justify-content: space-between;\n }\n`\n\ntype Props = {\n txParameters: TxParameters\n gasCost: string\n onEdit: () => void\n compact?: boolean\n parametersStatus: ParametersStatus\n}\n\nexport const TxEstimatedFeesDetail = ({\n onEdit,\n txParameters,\n gasCost,\n compact = true,\n parametersStatus,\n}: Props): ReactElement | null => {\n const [isAccordionExpanded, setIsAccordionExpanded] = useState(false)\n\n const onChangeExpand = () => {\n setIsAccordionExpanded(!isAccordionExpanded)\n }\n\n return (\n \n \n \n Estimated fee price\n \n {gasCost}\n \n \n \n \n \n {areEthereumParamsVisible(parametersStatus) && (\n <>\n \n Nonce\n {txParameters.ethNonce}\n \n\n \n Gas limit\n {txParameters.ethGasLimit}\n \n\n \n {isMaxFeeParam() ? 'Max fee per gas' : 'Gas price'}\n {txParameters.ethGasPrice}\n \n\n {isMaxFeeParam() && (\n \n Max priority fee\n {txParameters.ethMaxPrioFee}\n \n )}\n \n )}\n \n \n Edit\n \n \n \n \n \n )\n}\n","import { Dispatch, SetStateAction, useEffect, useState } from 'react'\n\nimport { EstimationStatus } from './useEstimateTransactionGas'\nimport { ButtonStatus } from 'src/components/Modal'\n\nexport const useEstimationStatus = (\n txEstimationStatus: EstimationStatus,\n): [buttonStatus: ButtonStatus, setButtonStatus: Dispatch>] => {\n const [buttonStatus, setButtonStatus] = useState(ButtonStatus.DISABLED)\n\n useEffect(() => {\n let mounted = true\n\n if (txEstimationStatus === EstimationStatus.LOADING) {\n mounted && setButtonStatus(ButtonStatus.LOADING)\n } else {\n mounted && setButtonStatus(ButtonStatus.READY)\n }\n\n return () => {\n mounted = false\n }\n }, [txEstimationStatus])\n\n return [buttonStatus, setButtonStatus]\n}\n","import { EstimationStatus } from 'src/logic/hooks/useEstimateTransactionGas'\nimport { useEffect, useState } from 'react'\nimport useAsync from 'src/logic/hooks/useAsync'\n\ntype Props = {\n checkTxExecution: () => Promise\n isExecution: boolean\n txData: string\n gasLimit?: string\n gasPrice?: string\n gasMaxPrioFee?: string\n}\n\nexport const useExecutionStatus = ({\n checkTxExecution,\n isExecution,\n txData,\n gasLimit,\n gasPrice,\n gasMaxPrioFee,\n}: Props): EstimationStatus => {\n const [executionStatus, setExecutionState] = useState(EstimationStatus.LOADING)\n\n const [status, error, loading] = useAsync(async () => {\n if (!isExecution || !txData) return EstimationStatus.SUCCESS\n const isEstimationPending = !gasLimit || !gasPrice || !gasMaxPrioFee\n if (isEstimationPending) return EstimationStatus.LOADING\n\n const success = await checkTxExecution()\n return success ? EstimationStatus.SUCCESS : EstimationStatus.FAILURE\n }, [checkTxExecution, isExecution, txData, gasPrice, gasMaxPrioFee])\n\n useEffect(() => {\n if (loading) return\n\n status && setExecutionState(status)\n error && setExecutionState(EstimationStatus.FAILURE)\n }, [checkTxExecution, error, gasLimit, isExecution, loading, status, txData])\n\n return executionStatus\n}\n","export const upperFirst = (value: string): string => value.charAt(0).toUpperCase() + value.toLowerCase().slice(1)\n\nexport const capitalize = (value: string, prefix?: string): undefined | boolean | string | number => {\n if (!value) {\n return undefined\n }\n\n if (typeof value === 'boolean') {\n return prefix || ''\n }\n\n if (typeof value === 'number') {\n return prefix ? `${prefix}${value}` : value\n }\n\n if (typeof value !== 'string') {\n return false\n }\n\n const capitalized = upperFirst(value)\n\n return prefix ? `${prefix}${capitalized}` : capitalized\n}\n","import { useState } from 'react'\nimport CollapseMUI from '@material-ui/core/Collapse'\nimport IconButton from '@material-ui/core/IconButton'\nimport ExpandLess from '@material-ui/icons/ExpandLess'\nimport ExpandMore from '@material-ui/icons/ExpandMore'\nimport styled from 'styled-components'\n\nconst Wrapper = styled.div`\n width: 100%;\n`\n\nconst HeaderWrapper = styled.div`\n display: flex;\n align-items: center;\n padding: 15px 0 3px;\n cursor: pointer;\n user-select: none;\n\n & > * {\n margin-right: 5px;\n }\n`\n\nconst TitleWrapper = styled.div``\n\nconst Header = styled.div`\n display: flex;\n align-items: center;\n`\n\ninterface CollapseProps {\n title: React.ReactElement | string\n description?: React.ReactElement | string\n collapseClassName?: string\n defaultExpanded?: boolean\n}\n\nconst Collapse: React.FC = ({\n children,\n description = null,\n title,\n collapseClassName,\n defaultExpanded = false,\n}): React.ReactElement => {\n const [open, setOpen] = useState(defaultExpanded)\n\n const handleClick = () => {\n setOpen((prevOpen) => !prevOpen)\n }\n\n const handleKeyDown = (event: React.KeyboardEvent) => {\n if (event.key === 'Enter' || event.key === ' ') {\n setOpen((prevOpen) => !prevOpen)\n }\n }\n\n return (\n \n \n {title}\n
\n \n {open ? : }\n \n {description}\n
\n
\n\n \n {children}\n \n
\n )\n}\n\nexport default Collapse\n","import { useState, useMemo } from 'react'\n\ntype SafeActionsState = {\n sendFunds: {\n isOpen: boolean\n selectedToken?: string\n }\n showReceive: boolean\n}\n\nconst INITIAL_STATE: SafeActionsState = {\n sendFunds: {\n isOpen: false,\n selectedToken: undefined,\n },\n showReceive: false,\n}\n\ntype Response = {\n onShow: (action: string) => void\n onHide: (action: string) => void\n showSendFunds: (token: string) => void\n hideSendFunds: () => void\n safeActionsState: SafeActionsState\n}\n\nconst useSafeActions = (): Response => {\n const [safeActionsState, setSafeActionsState] = useState(INITIAL_STATE)\n\n const onShow = useMemo(\n () => (action) => {\n setSafeActionsState((prevState) => ({\n ...prevState,\n [`show${action}`]: true,\n }))\n },\n [],\n )\n\n const onHide = useMemo(\n () => (action) => {\n setSafeActionsState((prevState) => ({\n ...prevState,\n [`show${action}`]: false,\n }))\n },\n [],\n )\n\n const showSendFunds = useMemo(\n () => (token) => {\n setSafeActionsState((prevState) => ({\n ...prevState,\n sendFunds: {\n isOpen: true,\n selectedToken: token,\n },\n }))\n },\n [],\n )\n\n const hideSendFunds = useMemo(\n () => () => {\n setSafeActionsState((prevState) => ({\n ...prevState,\n sendFunds: {\n isOpen: false,\n selectedToken: undefined,\n },\n }))\n },\n [],\n )\n\n return { safeActionsState, onShow, onHide, showSendFunds, hideSendFunds }\n}\n\nexport default useSafeActions\n","import { Transaction, TransactionReceipt } from 'web3-core'\n\nimport { getWeb3ReadOnly } from 'src/logic/wallets/getWeb3'\nimport { sameAddress } from 'src/logic/wallets/ethAddresses'\nimport { sameString } from 'src/utils/strings'\nimport { CodedException, Errors } from 'src/logic/exceptions/CodedException'\n\ntype TxMonitorProps = {\n sender: string\n hash: string\n data: string\n nonce?: number\n gasPrice?: string\n}\n\ntype TxMonitorOptions = {\n delay?: number\n maxRetries?: number\n}\n\nconst MAX_RETRIES = 720\nconst DEFAULT_DELAY = 5000\n\nasync function findSpeedupTx({ sender, hash, nonce, data }: TxMonitorProps): Promise {\n const web3 = getWeb3ReadOnly()\n const latestBlock = await web3.eth.getBlock('latest', true)\n\n const replacementTransaction = latestBlock.transactions.find((transaction) => {\n // TODO: use gasPrice, timestamp or another better way to differentiate\n return (\n sameAddress(transaction.from, sender) &&\n transaction.nonce === nonce &&\n !sameString(transaction.hash, hash) &&\n // if `data` differs, then it's a replacement tx, not a speedup\n sameString(transaction.input, data)\n )\n })\n\n return replacementTransaction\n}\n\n/**\n * Recursively inspects a pending tx. Until it's found, and returns the mined tx receipt\n *\n * @param {object} txParams\n * @param {string} txParams.sender\n * @param {string} txParams.hash\n * @param {string} txParams.data\n * @param {number | undefined} txParams.nonce\n * @param {string | undefined} txParams.gasPrice\n * @param {object} options\n * @param {number} options.delay\n * @returns {Promise}\n */\nexport const txMonitor = (\n { sender, hash, data, nonce, gasPrice }: TxMonitorProps,\n options?: TxMonitorOptions,\n tries = 0,\n): Promise => {\n const web3 = getWeb3ReadOnly()\n return new Promise((resolve, reject) => {\n const { maxRetries = MAX_RETRIES } = options || {}\n if (tries > maxRetries) {\n reject(new CodedException(Errors._805, 'max retries reached'))\n return\n }\n\n const monitorFn = async (): Promise => {\n // Case 1: this block is accessed for the first time, no nonce\n if (nonce == null || gasPrice == null) {\n let params: TxMonitorProps = { sender, hash, data }\n try {\n // Find the nonce for the current tx\n const transaction = await web3.eth.getTransaction(hash)\n if (transaction) {\n params = { ...params, nonce: transaction.nonce, gasPrice: transaction.gasPrice }\n }\n } catch (e) {\n // ignore error\n }\n\n return txMonitor(params, options, tries + 1)\n .then(resolve)\n .catch(reject)\n }\n\n // Case 2: the nonce exists, try to get the receipt for the original tx\n try {\n const firstTxReceipt = await web3.eth.getTransactionReceipt(hash)\n if (firstTxReceipt) {\n return resolve(firstTxReceipt)\n }\n } catch (e) {\n // proceed to case 3\n }\n\n // Case 3: original tx not found, try to find a sped-up tx\n try {\n const replacementTx = await findSpeedupTx({ sender, hash, nonce, data })\n\n if (replacementTx) {\n const replacementReceipt = await web3.eth.getTransactionReceipt(replacementTx.hash)\n\n // goal achieved\n if (replacementReceipt) {\n return resolve(replacementReceipt)\n }\n\n // tx exists but no receipt yet, it's pending\n return txMonitor(\n {\n sender,\n nonce,\n hash: replacementTx.hash,\n data: replacementTx.input,\n gasPrice: replacementTx.gasPrice,\n },\n options,\n tries + 1,\n )\n .then(resolve)\n .catch(reject)\n }\n } catch (e) {\n // ignore error\n }\n\n // Neither the original nor a replacement transactions were found, try again\n txMonitor({ sender, hash, data, nonce, gasPrice }, options, tries + 1)\n .then(resolve)\n .catch(reject)\n }\n\n setTimeout(monitorFn, options?.delay ?? DEFAULT_DELAY)\n })\n}\n","export default __webpack_public_path__ + \"static/media/safe-created.ad262168.svg\";","import { getBalances, SafeBalanceResponse, TokenInfo } from '@gnosis.pm/safe-react-gateway-sdk'\nimport { _getChainId } from 'src/config'\nimport { checksumAddress } from 'src/utils/checksumAddress'\n\nexport type TokenBalance = {\n tokenInfo: TokenInfo\n balance: string\n fiatBalance: string\n fiatConversion: string\n}\n\ntype FetchTokenCurrenciesBalancesProps = {\n safeAddress: string\n selectedCurrency: string\n excludeSpamTokens?: boolean\n trustedTokens?: boolean\n}\n\nexport const fetchTokenCurrenciesBalances = async ({\n safeAddress,\n selectedCurrency,\n excludeSpamTokens = true,\n trustedTokens = false,\n}: FetchTokenCurrenciesBalancesProps): Promise => {\n const address = checksumAddress(safeAddress)\n return getBalances(_getChainId(), address, selectedCurrency, {\n exclude_spam: excludeSpamTokens,\n trusted: trustedTokens,\n })\n}\n","import { useEffect, useState } from 'react'\nimport { useSelector } from 'react-redux'\nimport { estimateGasForDeployingSafe } from 'src/logic/contracts/safeContracts'\nimport { fromTokenUnit } from 'src/logic/tokens/utils/humanReadableValue'\nimport { formatAmount } from 'src/logic/tokens/utils/formatAmount'\n\nimport { calculateGasPrice, getFeesPerGas, setMaxPrioFeePerGas } from 'src/logic/wallets/ethTransactions'\nimport { userAccountSelector } from '../wallets/store/selectors'\nimport { getNativeCurrency } from 'src/config'\nimport { isMaxFeeParam } from 'src/logic/safe/transactions/gas'\n\ntype EstimateSafeCreationGasProps = {\n addresses: string[]\n numOwners: number\n safeCreationSalt: number\n}\n\ntype SafeCreationEstimationResult = {\n gasEstimation: number // Amount of gas needed for execute or approve the transaction\n gasCostFormatted: string // Cost of gas in format '< | > 100'\n gasLimit: number // Minimum gas requited to execute the Tx\n gasPrice: string\n gasMaxPrioFee: number\n gasMaxPrioFeeFormatted: string\n}\n\nconst estimateGas = async (\n userAccount: string,\n numOwners: number,\n safeCreationSalt: number,\n addresses: string[],\n): Promise => {\n const [gasEstimation, gasPrice, feesPerGas] = await Promise.all([\n estimateGasForDeployingSafe(addresses, numOwners, userAccount, safeCreationSalt),\n calculateGasPrice(),\n isMaxFeeParam() ? getFeesPerGas() : { maxPriorityFeePerGas: 0, maxFeePerGas: 0 },\n ])\n\n const estimatedGasCosts = gasEstimation * parseInt(gasPrice, 10)\n const maxPrioFeePerGas = setMaxPrioFeePerGas(feesPerGas.maxPriorityFeePerGas, parseInt(gasPrice, 10))\n const nativeCurrency = getNativeCurrency()\n const gasCost = fromTokenUnit(estimatedGasCosts, nativeCurrency.decimals)\n const gasCostFormatted = formatAmount(gasCost)\n\n return {\n gasPrice,\n gasEstimation,\n gasCostFormatted,\n gasLimit: gasEstimation,\n gasMaxPrioFee: maxPrioFeePerGas,\n gasMaxPrioFeeFormatted: formatAmount(maxPrioFeePerGas.toString()),\n }\n}\n\nexport const useEstimateSafeCreationGas = ({\n addresses,\n numOwners,\n safeCreationSalt,\n}: EstimateSafeCreationGasProps): SafeCreationEstimationResult => {\n const [gasEstimation, setGasEstimation] = useState({\n gasEstimation: 0,\n gasCostFormatted: '> 0.001',\n gasLimit: 0,\n gasPrice: '0',\n gasMaxPrioFee: 0,\n gasMaxPrioFeeFormatted: '0',\n })\n const userAccount = useSelector(userAccountSelector)\n // Serialize the addresses array so that it doesn't trigger the effect due to the dependencies\n const addressesSerialized = JSON.stringify(addresses)\n\n useEffect(() => {\n const addressesList = JSON.parse(addressesSerialized)\n if (!addressesList.length || !numOwners || !userAccount) {\n return\n }\n\n estimateGas(userAccount, numOwners, safeCreationSalt, addressesList)?.then(setGasEstimation)\n }, [numOwners, safeCreationSalt, addressesSerialized, userAccount])\n\n return gasEstimation\n}\n","import { useSelector } from 'react-redux'\n\nimport { Token } from 'src/logic/tokens/store/model/token'\nimport { sameAddress } from 'src/logic/wallets/ethAddresses'\nimport { safeKnownCoins } from 'src/routes/safe/container/selector'\n\nconst useTokenInfo = (address: string): Token | undefined => {\n const tokens = useSelector(safeKnownCoins)\n\n if (tokens) {\n return tokens.find((token) => sameAddress(token.address, address))\n }\n}\n\nexport default useTokenInfo\n","import { createStyles, makeStyles } from '@material-ui/core'\nimport {\n background,\n boldFont,\n border,\n error,\n fontColor,\n lg,\n md,\n secondaryText,\n sm,\n smallFontSize,\n xl,\n} from 'src/theme/variables'\n\nexport const useStyles = makeStyles(\n createStyles({\n title: {\n padding: lg,\n paddingBottom: 0,\n },\n hide: {\n '&:hover': {\n backgroundColor: `${background}`,\n },\n '&:hover $actions': {\n visibility: 'initial',\n },\n },\n actions: {\n justifyContent: 'flex-end',\n visibility: 'hidden',\n },\n noBorderBottom: {\n '& > td': {\n borderBottom: 'none',\n },\n },\n annotation: {\n paddingLeft: lg,\n },\n ownersText: {\n color: secondaryText,\n '& b': {\n color: fontColor,\n },\n },\n container: {\n padding: lg,\n },\n actionButton: {\n fontWeight: boldFont,\n marginRight: sm,\n },\n buttonRow: {\n padding: lg,\n left: 0,\n bottom: 0,\n boxSizing: 'border-box',\n width: '100%',\n justifyContent: 'flex-end',\n borderTop: `2px solid ${border}`,\n },\n modifyBtn: {\n height: xl,\n fontSize: smallFontSize,\n },\n removeModuleIcon: {\n marginLeft: lg,\n cursor: 'pointer',\n },\n modalHeading: {\n boxSizing: 'border-box',\n justifyContent: 'space-between',\n height: '74px',\n padding: `${sm} ${lg}`,\n },\n modalContainer: {\n minHeight: '369px',\n },\n modalManage: {\n fontSize: lg,\n },\n modalClose: {\n height: '35px',\n width: '35px',\n },\n modalButtonRow: {\n height: '84px',\n justifyContent: 'center',\n },\n modalButtonRemove: {\n color: '#fff',\n backgroundColor: error,\n height: '42px',\n },\n modalName: {\n textOverflow: 'ellipsis',\n overflow: 'hidden',\n },\n modalUserName: {\n whiteSpace: 'nowrap',\n },\n modalOwner: {\n backgroundColor: background,\n padding: md,\n alignItems: 'center',\n },\n modalUser: {\n justifyContent: 'left',\n },\n modalDescription: {\n padding: md,\n },\n modalOpen: {\n paddingLeft: sm,\n width: 'auto',\n '&:hover': {\n cursor: 'pointer',\n },\n },\n amountInput: {\n width: '100% !important',\n },\n }),\n)\n","import { RadioButtons, Text } from '@gnosis.pm/safe-react-components'\nimport { FormControlLabel, hexToRgb, Switch as SwitchMui } from '@material-ui/core'\nimport { ReactElement } from 'react'\nimport { useField } from 'react-final-form'\nimport styled from 'styled-components'\n\nimport { getChainName } from 'src/config'\nimport { Field } from 'src/routes/safe/components/Settings/SpendingLimit/FormFields/Amount'\n\n// TODO: propose refactor in safe-react-components based on this requirements\nconst SpendingLimitRadioButtons = styled(RadioButtons)`\n & .MuiRadio-colorPrimary.Mui-checked {\n color: ${({ theme }) => theme.colors.primary};\n }\n`\n\n// TODO: add `name` and `value` to SRC Switch, as they're required for a better RFF integration\nconst StyledSwitch = styled(({ ...rest }) => )`\n && {\n .MuiIconButton-label,\n .MuiSwitch-colorSecondary {\n color: ${({ theme }) => theme.colors.icon};\n }\n\n .MuiSwitch-colorSecondary.Mui-checked .MuiIconButton-label {\n color: ${({ theme }) => theme.colors.primary};\n }\n\n .MuiSwitch-colorSecondary.Mui-checked:hover {\n background-color: ${({ theme }) => hexToRgb(`${theme.colors.primary}03`)};\n }\n\n .Mui-checked + .MuiSwitch-track {\n background-color: ${({ theme }) => theme.colors.primaryLight};\n }\n }\n`\n\ninterface RadioButtonOption {\n label: string\n value: string\n}\n\ninterface RadioButtonProps {\n options: RadioButtonOption[]\n initialValue: string\n groupName: string\n}\n\nconst SafeRadioButtons = ({ options, initialValue, groupName }: RadioButtonProps): ReactElement => (\n \n {({ input: { name, value, onChange } }) => (\n \n )}\n \n)\n\nconst Switch = ({ label, name }: { label: string; name: string }): ReactElement => (\n (\n \n )}\n />\n }\n />\n)\n\nconst ResetTimeLabel = styled.div`\n grid-area: resetTimeLabel;\n`\n\nconst ResetTimeToggle = styled.div`\n grid-area: resetTimeToggle;\n`\n\nconst ResetTimeOptions = styled.div`\n grid-area: resetTimeOption;\n`\n\nconst RESET_TIME_OPTIONS = [\n { label: '1 day', value: '1440' }, // 1 day x 24h x 60min\n { label: '1 week', value: '10080' }, // 7 days x 24h x 60min\n { label: '1 month', value: '43200' }, // 30 days x 24h x 60min\n]\n\nconst RINKEBY_RESET_TIME_OPTIONS = [\n { label: '5 minutes', value: '5' },\n { label: '30 minutes', value: '30' },\n { label: '1 hour', value: '60' },\n]\n\nexport const getResetTimeOptions = (): RadioButtonOption[] => {\n const currentNetwork = getChainName().toLowerCase()\n return currentNetwork !== 'rinkeby' ? RESET_TIME_OPTIONS : RINKEBY_RESET_TIME_OPTIONS\n}\n\nconst ResetTime = (): ReactElement => {\n const {\n input: { value: withResetTime },\n } = useField('withResetTime', { subscription: { value: true } })\n\n const resetTimeOptions = getResetTimeOptions()\n\n const switchExplanation = withResetTime ? 'choose reset time period' : 'one time'\n\n return (\n <>\n \n Set a reset time so the allowance automatically refills after the defined time period.\n \n \n \n \n {withResetTime && (\n \n \n \n )}\n \n )\n}\n\nexport default ResetTime\n","import { ReactElement } from 'react'\nimport { useField } from 'react-final-form'\nimport { useSelector } from 'react-redux'\nimport styled from 'styled-components'\n\nimport GnoField from 'src/components/forms/Field'\nimport { composeValidators, minValue, mustBeFloat, required } from 'src/components/forms/validator'\nimport { extendedSafeTokensSelector } from 'src/routes/safe/container/selector'\nimport { useStyles } from 'src/routes/safe/components/Settings/SpendingLimit/style'\nimport TextField from 'src/components/forms/TextField'\n\nexport const Field = styled(GnoField)`\n width: 100%;\n`\n\nconst AmountInput = styled.div`\n grid-area: amountInput;\n`\n\nconst Amount = (): ReactElement => {\n const classes = useStyles()\n\n const {\n input: { value: tokenAddress },\n } = useField('token', { subscription: { value: true } })\n const {\n meta: { touched, visited },\n } = useField('amount', { subscription: { touched: true, visited: true } })\n\n const tokens = useSelector(extendedSafeTokensSelector)\n\n const selectedTokenRecord = tokens.find((token) => token.address === tokenAddress)\n\n const validate = (touched || visited) && composeValidators(required, mustBeFloat, minValue(0, false))\n\n return (\n \n \n \n )\n}\n\nexport default Amount\n","import { Text } from '@gnosis.pm/safe-react-components'\nimport { ThemeColors } from '@gnosis.pm/safe-react-components/dist/theme'\nimport { ReactElement } from 'react'\nimport { useSelector } from 'react-redux'\n\nimport PrefixedEthHashInfo from 'src/components/PrefixedEthHashInfo'\nimport { getExplorerInfo } from 'src/config'\nimport { addressBookEntryName } from 'src/logic/addressBook/store/selectors'\nimport { ADDRESS_BOOK_DEFAULT_NAME } from 'src/logic/addressBook/model/addressBook'\nimport { sameString } from 'src/utils/strings'\n\ninterface AddressInfoProps {\n address: string\n title?: string\n name?: string\n logoUri?: string\n color?: ThemeColors\n}\n\nconst AddressInfo = ({ address, title, name, logoUri, color }: AddressInfoProps): ReactElement => {\n const addessBookName = useSelector((state) => addressBookEntryName(state, { address }))\n\n return (\n <>\n {title && (\n \n {title}\n \n )}\n \n \n )\n}\n\nexport default AddressInfo\n","import { IconText, Text } from '@gnosis.pm/safe-react-components'\nimport { ThemeColors } from '@gnosis.pm/safe-react-components/dist/theme'\nimport { ReactElement } from 'react'\n\nimport Row from 'src/components/layout/Row'\n\ninterface ResetTimeInfoProps {\n title?: string\n label?: string\n color?: ThemeColors\n}\n\nconst ResetTimeInfo = ({ title, label, color }: ResetTimeInfoProps): ReactElement => (\n <>\n \n {title}\n \n {label ? (\n \n \n \n ) : (\n \n One-time spending limit\n \n )}\n \n)\n\nexport default ResetTimeInfo\n","import { Text } from '@gnosis.pm/safe-react-components'\nimport { ThemeColors } from '@gnosis.pm/safe-react-components/dist/theme'\nimport { ReactElement } from 'react'\nimport styled from 'styled-components'\n\nimport { Token } from 'src/logic/tokens/store/model/token'\nimport { setImageToPlaceholder } from 'src/routes/safe/components/Balances/utils'\n\nconst StyledImage = styled.img`\n width: 32px;\n height: 32px;\n object-fit: contain;\n margin: 0 8px 0 0;\n`\nconst StyledImageName = styled.div`\n display: flex;\n align-items: center;\n`\n\ninterface TokenInfoProps {\n amount: string\n title?: string\n token: Token\n color?: ThemeColors\n}\n\nconst TokenInfo = ({ amount, title, token, color }: TokenInfoProps): ReactElement => (\n <>\n \n {title}\n \n \n \n \n {amount} {token.symbol}\n \n \n \n)\n\nexport default TokenInfo\n","import { useMemo } from 'react'\nimport styled from 'styled-components'\n\nimport useTokenInfo from 'src/logic/safe/hooks/useTokenInfo'\nimport { sameString } from 'src/utils/strings'\nimport { fromTokenUnit } from 'src/logic/tokens/utils/humanReadableValue'\nimport { getResetTimeOptions } from 'src/routes/safe/components/Settings/SpendingLimit/FormFields/ResetTime'\nimport { AddressInfo, ResetTimeInfo, TokenInfo } from 'src/routes/safe/components/Settings/SpendingLimit/InfoDisplay'\nimport { TransactionData, TransactionInfo } from '@gnosis.pm/safe-react-gateway-sdk'\nimport { getTxTo } from 'src/routes/safe/components/Transactions/TxList/utils'\nimport { StyledDetailsTitle, StyledTxInfoDetails } from 'src/routes/safe/components/Transactions/TxList/styled'\nimport { isCustomTxInfo } from 'src/logic/safe/store/models/types/gateway.d'\nimport { getSpendingLimitModuleAddress } from 'src/logic/contracts/spendingLimitContracts'\nimport { _getChainId } from 'src/config'\n\nconst SET_ALLOWANCE = 'setAllowance'\nconst DELETE_ALLOWANCE = 'deleteAllowance'\n\nexport const isSetAllowance = (method?: string): boolean => {\n return sameString(method, SET_ALLOWANCE)\n}\n\nexport const isDeleteAllowance = (method?: string): boolean => {\n return sameString(method, DELETE_ALLOWANCE)\n}\n\nexport const isSpendingLimitMethod = (method?: string): boolean => {\n return isSetAllowance(method) || isDeleteAllowance(method)\n}\n\nexport const isSupportedSpendingLimitAddress = (txInfo: TransactionInfo): boolean => {\n const toAddress = isCustomTxInfo(txInfo) ? txInfo.to.value : ''\n const spendingLimitModuleAddress = getSpendingLimitModuleAddress(_getChainId())\n\n return sameString(spendingLimitModuleAddress, toAddress)\n}\n\nconst StyledInfoBlock = styled.div`\n display: flex;\n flex-direction: column;\n gap: 4px;\n`\n\ntype SpendingLimitProps = {\n txData: TransactionData\n txInfo: TransactionInfo\n}\n\nexport const ModifySpendingLimitDetails = ({ txData, txInfo }: SpendingLimitProps): React.ReactElement => {\n const { dataDecoded } = txData\n const [beneficiary, tokenAddress, amount, resetTimeMin] = useMemo(\n () => dataDecoded?.parameters?.map(({ value }) => value) ?? [],\n [dataDecoded?.parameters],\n )\n\n const resetTimeLabel = useMemo(\n () => getResetTimeOptions().find(({ value }) => +value === +resetTimeMin)?.label ?? '',\n [resetTimeMin],\n )\n\n const tokenInfo = useTokenInfo(tokenAddress as string)\n const txTo = getTxTo({ txInfo })\n\n return (\n \n \n Modify spending limit:\n \n \n \n \n {tokenInfo && (\n \n \n \n )}\n \n \n \n \n )\n}\n\nexport const DeleteSpendingLimitDetails = ({ txData, txInfo }: SpendingLimitProps): React.ReactElement => {\n const { dataDecoded } = txData\n const [beneficiary, tokenAddress] = useMemo(\n () => dataDecoded?.parameters?.map(({ value }) => value) ?? [],\n [dataDecoded?.parameters],\n )\n const tokenInfo = useTokenInfo(tokenAddress as string)\n const txTo = getTxTo({ txInfo })\n\n return (\n \n \n Delete spending limit:\n \n \n \n \n {tokenInfo && (\n \n \n \n )}\n \n )\n}\n","import { useState } from 'react'\nimport { ClickAwayListener, createStyles, Divider } from '@material-ui/core'\nimport Menu from '@material-ui/core/Menu'\nimport MenuItem from '@material-ui/core/MenuItem'\nimport { makeStyles } from '@material-ui/core/styles'\nimport MoreHorizIcon from '@material-ui/icons/MoreHoriz'\nimport { useSelector } from 'react-redux'\n\nimport { sameString } from 'src/utils/strings'\nimport { ADDRESS_BOOK_DEFAULT_NAME } from 'src/logic/addressBook/model/addressBook'\nimport { addressBookEntryName } from 'src/logic/addressBook/store/selectors'\nimport { xs } from 'src/theme/variables'\nimport { grantedSelector } from 'src/routes/safe/container/selector'\nimport { SAFE_ROUTES, history, generateSafeRoute } from 'src/routes/routes'\nimport { trackEvent } from 'src/utils/googleTagManager'\nimport { TX_LIST_EVENTS } from 'src/utils/events/txList'\nimport useSafeAddress from 'src/logic/currentSession/hooks/useSafeAddress'\n\nconst useStyles = makeStyles(\n createStyles({\n container: {\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n cursor: 'pointer',\n margin: `0 ${xs}`,\n borderRadius: '50%',\n transition: 'background-color .2s ease-in-out',\n '&:hover': {\n backgroundColor: '#F0EFEE',\n },\n outline: 'none',\n },\n increasedPopperZindex: {\n zIndex: 2001,\n },\n }),\n)\n\ntype EllipsisTransactionDetailsProps = {\n address: string\n sendModalOpenHandler?: () => void\n}\n\nexport const EllipsisTransactionDetails = ({\n address,\n sendModalOpenHandler,\n}: EllipsisTransactionDetailsProps): React.ReactElement => {\n const classes = useStyles()\n const [anchorEl, setAnchorEl] = useState(null)\n const { safeAddress, shortName } = useSafeAddress()\n\n const isOwnerConnected = useSelector(grantedSelector)\n\n const recipientName = useSelector((state) => addressBookEntryName(state, { address }))\n // We have to check that the name returned is not UNKNOWN\n const isStoredInAddressBook = !sameString(recipientName, ADDRESS_BOOK_DEFAULT_NAME)\n\n const handleClick = (event) => setAnchorEl(event.currentTarget)\n\n const closeMenuHandler = () => setAnchorEl(null)\n\n const addOrEditEntryHandler = () => {\n trackEvent({\n ...TX_LIST_EVENTS.ADDRESS_BOOK,\n label: isStoredInAddressBook ? 'Edit' : 'Add',\n })\n history.push({\n pathname: generateSafeRoute(SAFE_ROUTES.ADDRESS_BOOK, {\n shortName,\n safeAddress,\n }),\n search: `?entryAddress=${address}`,\n })\n closeMenuHandler()\n }\n\n return (\n \n
\n \n \n {sendModalOpenHandler\n ? [\n \n Send Again\n ,\n ,\n ]\n : null}\n {isStoredInAddressBook ? (\n Edit contacts Entry\n ) : (\n Add to contacts\n )}\n \n
\n
\n )\n}\n","import { ReactElement } from 'react'\nimport PrefixedEthHashInfo from 'src/components/PrefixedEthHashInfo'\n\nimport { getExplorerInfo } from 'src/config'\nimport { useKnownAddress } from './hooks/useKnownAddress'\n\ntype EthHashInfoRestProps = Omit<\n Parameters[0],\n 'hash' | 'name' | 'showAvatar' | 'customAvatar' | 'showCopyBtn' | 'explorerUrl'\n>\n\ntype Props = EthHashInfoRestProps & {\n address: string\n name?: string | undefined\n avatarUrl?: string | undefined\n}\n\nexport const AddressInfo = ({ address, name, avatarUrl, ...rest }: Props): ReactElement | null => {\n const toInfo = useKnownAddress({ value: address, name: name || null, logoUri: avatarUrl || null })\n\n if (address === '') {\n return null\n }\n\n return (\n \n )\n}\n","import { ReactElement, ReactNode } from 'react'\nimport { Text } from '@gnosis.pm/safe-react-components'\n\nimport { StyledTxInfoDetails } from 'src/routes/safe/components/Transactions/TxList/styled'\n\ntype InfoDetailsProps = {\n header?: string | ReactElement\n children: ReactNode\n title: string | ReactElement\n}\n\nexport const InfoDetails = ({ header, children, title }: InfoDetailsProps): ReactElement => (\n \n {header}\n \n {title}\n \n {children}\n \n)\n","import { Erc721Transfer, Transfer, TransactionTokenType } from '@gnosis.pm/safe-react-gateway-sdk'\nimport { ReactElement, useContext, useEffect, useState } from 'react'\nimport styled from 'styled-components'\n\nimport { fromTokenUnit } from 'src/logic/tokens/utils/humanReadableValue'\nimport { ZERO_ADDRESS } from 'src/logic/wallets/ethAddresses'\nimport { EllipsisTransactionDetails } from 'src/routes/safe/components/AddressBook/EllipsisTransactionDetails'\nimport SendModal from 'src/routes/safe/components/Balances/SendModal'\nimport { AddressInfo } from './AddressInfo'\nimport { InfoDetails } from './InfoDetails'\nimport { TxLocationContext, TxLocationProps } from './TxLocationProvider'\nimport { getTxTokenData } from './utils'\n\nconst SingleRow = styled.div`\n display: flex;\n align-items: flex-end;\n`\n\ntype TxInfoDetailsProps = {\n title: string | ReactElement\n address: string\n name?: string | undefined\n avatarUrl?: string | undefined\n isTransferType?: boolean\n txInfo?: Transfer\n}\n\nexport const TxInfoDetails = ({\n title,\n address,\n isTransferType,\n txInfo,\n name,\n avatarUrl,\n}: TxInfoDetailsProps): ReactElement => {\n const { txLocation } = useContext(TxLocationContext)\n const canRepeatTransaction =\n // is transfer type by context\n isTransferType &&\n // not a Collectible\n txInfo?.transferInfo.type !== TransactionTokenType.ERC721 &&\n // in history list\n txLocation === 'history' &&\n // it's outgoing\n txInfo?.direction === 'OUTGOING'\n\n const [sendModalOpen, setSendModalOpen] = useState(false)\n const sendModalOpenHandler = () => {\n setSendModalOpen(true)\n }\n const onClose = () => {\n setSendModalOpen(false)\n }\n\n const [sendModalParams, setSendModalParams] = useState<{\n activeScreenType: 'sendCollectible' | 'sendFunds'\n recipientAddress: string\n selectedToken: string | Erc721Transfer\n tokenAmount: string\n }>({\n activeScreenType: 'sendFunds',\n recipientAddress: address,\n selectedToken: ZERO_ADDRESS,\n tokenAmount: '0',\n })\n\n useEffect(() => {\n if (txInfo) {\n const isCollectible = txInfo.transferInfo.type === TransactionTokenType.ERC721\n const { address, value, decimals } = getTxTokenData(txInfo)\n\n setSendModalParams((prev) => ({\n ...prev,\n activeScreenType: isCollectible ? 'sendCollectible' : 'sendFunds',\n selectedToken: isCollectible ? (txInfo.transferInfo as Erc721Transfer) : address,\n tokenAmount: isCollectible ? '1' : fromTokenUnit(value, Number(decimals)),\n }))\n }\n }, [txInfo])\n\n return (\n \n \n \n \n \n {canRepeatTransaction && }\n \n )\n}\n","import styled from 'styled-components'\nimport { DataDecoded } from '@gnosis.pm/safe-react-gateway-sdk'\n\nimport { StyledDetailsTitle } from 'src/routes/safe/components/Transactions/TxList/styled'\nimport { TxDataRow } from 'src/routes/safe/components/Transactions/TxList/TxDataRow'\nimport { camelCaseToSpaces } from 'src/utils/camelCaseToSpaces'\nimport {\n isAddress,\n isArrayParameter,\n isByte,\n} from 'src/routes/safe/components/Balances/SendModal/screens/ContractInteraction/utils'\n\nconst TxInfo = styled.div`\n padding: 8px 0;\n overflow-x: auto;\n`\n\nexport const MethodDetails = ({ data }: { data: DataDecoded }): React.ReactElement => {\n const methodName = camelCaseToSpaces(data.method)\n return (\n \n \n {methodName}\n \n\n {data.parameters?.map((param, index) => {\n const isArrayValueParam = isArrayParameter(param.type) || Array.isArray(param.value)\n const inlineType = isAddress(param.type) ? 'address' : isByte(param.type) ? 'bytes' : undefined\n return (\n \n )\n })}\n \n )\n}\n","export const camelCaseToSpaces = (str: string): string => {\n return str\n .replace(/([A-Z][a-z0-9]+)/g, ' $1 ')\n .replace(/\\s{2}/g, ' ')\n .trim()\n}\n","import { ReactElement } from 'react'\nimport { TooltipProps } from '@material-ui/core'\nimport Alert, { AlertProps } from '@material-ui/lab/Alert'\nimport { withStyles } from '@material-ui/styles'\nimport styled from 'styled-components'\n\nimport { orange500, black500, orange200, green500, green200 } from 'src/theme/variables'\nimport { Tooltip } from 'src/components/layout/Tooltip'\n\nconst StyledTooltip = withStyles(() => ({\n arrow: {\n // Align arrow with Alert icon\n left: '10px !important',\n },\n}))(Tooltip)\n\nconst StyledAlert = styled(Alert)<{ $isWarning: boolean }>`\n font-weight: 700;\n color: ${black500};\n background-color: ${({ $isWarning }) => ($isWarning ? orange200 : green200)};\n display: inline-flex;\n padding: 0px 10px;\n height: 36px;\n margin-bottom: 10px;\n align-self: start;\n border-left: 3px solid ${({ $isWarning }) => ($isWarning ? orange500 : green500)};\n &.MuiAlert-standardInfo .MuiAlert-icon {\n margin-right: 8px;\n color: ${({ $isWarning }) => ($isWarning ? orange500 : green500)};\n }\n`\n\ntype Props = {\n tooltip: TooltipProps['title']\n message: AlertProps['children']\n isWarning?: boolean\n}\n\nconst AlertTooltipWarning = ({ tooltip, message, isWarning = false }: Props): ReactElement => (\n \n \n {message}\n \n \n)\n\nexport default AlertTooltipWarning\n","import { ReactElement } from 'react'\n\nimport Link from 'src/components/layout/Link'\nimport AlertTooltipWarning from './AlertTooltipWarning'\n\nconst UNEXPECTED_DELEGATE_ARTICLE =\n // 'https://help.gnosis-safe.io/en/articles/6302452-why-do-i-see-an-unexpected-delegate-call-warning-in-my-transaction'\n '#'\n\nconst DelegateCallWarning = ({ showWarning = false }: { showWarning: boolean }): ReactElement => (\n \n This transaction calls a smart contract that will be able to modify your Walliro.\n {showWarning && (\n <>\n
\n \n Learn more\n \n \n )}\n \n }\n message={showWarning ? 'Unexpected Delegate Call' : 'Delegate Call'}\n isWarning={showWarning}\n />\n)\n\nexport default DelegateCallWarning\n","import { AccordionSummary, IconText, Text } from '@gnosis.pm/safe-react-components'\nimport { DataDecoded, Operation, TransactionData } from '@gnosis.pm/safe-react-gateway-sdk'\nimport { ReactElement, ReactNode } from 'react'\nimport styled from 'styled-components'\n\nimport { getNativeCurrency } from 'src/config'\nimport { fromTokenUnit } from 'src/logic/tokens/utils/humanReadableValue'\nimport { getInteractionTitle } from '../helpers/utils'\nimport DelegateCallWarning from './DelegateCallWarning'\nimport { HexEncodedData } from './HexEncodedData'\nimport { MethodDetails } from './MethodDetails'\nimport { isSpendingLimitMethod } from './SpendingLimitDetails'\nimport { ColumnDisplayAccordionDetails, ActionAccordion } from './styled'\nimport { TxInfoDetails } from './TxInfoDetails'\nimport { sm } from 'src/theme/variables'\n\nconst StyledText = styled(Text)`\n margin-left: ${sm};\n`\n\ntype MultiSendTxGroupProps = {\n actionTitle: string\n method: string\n children: ReactNode\n txDetails: {\n title: string\n address: string\n name?: string | undefined\n avatarUrl?: string | undefined\n dataDecoded: DataDecoded | null\n operation: Operation\n }\n}\n\nconst MultiSendTxGroup = ({ actionTitle, method, children, txDetails }: MultiSendTxGroupProps): ReactElement => {\n const isDelegateCall = txDetails.operation === Operation.DELEGATE\n return (\n \n \n \n \n {method}\n \n \n \n {/* We always warn of nested delegate calls */}\n {isDelegateCall && }\n {!isSpendingLimitMethod(txDetails.dataDecoded?.method) && (\n \n )}\n {children}\n \n \n )\n}\n\nexport const MultiSendDetails = ({ txData }: { txData: TransactionData }): ReactElement | null => {\n const nativeCurrency = getNativeCurrency()\n // no parameters for the `multiSend`\n if (!txData.dataDecoded?.parameters) {\n // we render the hex encoded data\n if (txData.hexData) {\n return \n }\n\n return null\n }\n\n // multiSend has one parameter `transactions` therefore `txData.dataDecoded.parameters[0]` is safe to be used here\n return (\n <>\n {txData.dataDecoded.parameters[0].valueDecoded?.map(({ dataDecoded }, index, valuesDecoded) => {\n let details\n const { data, value, to, operation } = valuesDecoded[index]\n\n const actionTitle = `Action ${index + 1}`\n const method = `${dataDecoded ? `${dataDecoded.method}` : ''}`\n const amount = value ? fromTokenUnit(value, nativeCurrency.decimals) : 0\n const title = getInteractionTitle(amount)\n\n if (dataDecoded) {\n // Backend decoded data\n details = \n } else {\n // We couldn't decode it but we have data\n details = data && \n }\n\n const addressInfo = txData.addressInfoIndex?.[to]\n const name = addressInfo?.name || undefined\n const avatarUrl = addressInfo?.logoUri || undefined\n\n return (\n \n {details}\n \n )\n })}\n \n )\n}\n","import { TransactionData } from '@gnosis.pm/safe-react-gateway-sdk'\nimport { ReactElement, ReactNode } from 'react'\n\nimport { getNativeCurrency } from 'src/config'\nimport { ExpandedTxDetails, isCustomTxInfo } from 'src/logic/safe/store/models/types/gateway.d'\nimport { fromTokenUnit } from 'src/logic/tokens/utils/humanReadableValue'\nimport {\n DeleteSpendingLimitDetails,\n isDeleteAllowance,\n isSetAllowance,\n isSupportedSpendingLimitAddress,\n ModifySpendingLimitDetails,\n} from './SpendingLimitDetails'\nimport { TxInfoDetails } from './TxInfoDetails'\nimport { HexEncodedData } from './HexEncodedData'\nimport { MethodDetails } from './MethodDetails'\nimport { MultiSendDetails } from './MultiSendDetails'\nimport { TransactionInfo } from '@gnosis.pm/safe-react-gateway-sdk'\nimport { getInteractionTitle } from '../helpers/utils'\nimport { isSupportedMultiSendCall } from 'src/logic/safe/transactions/multisend'\n\ntype DetailsWithTxInfoProps = {\n children: ReactNode\n txData: TransactionData\n txInfo: TransactionInfo\n}\n\nconst DetailsWithTxInfo = ({ children, txData, txInfo }: DetailsWithTxInfoProps): ReactElement => {\n const nativeCurrency = getNativeCurrency()\n const amount = txData.value ? fromTokenUnit(txData.value, nativeCurrency.decimals) : 'n/a'\n let name\n let avatarUrl\n\n if (isCustomTxInfo(txInfo)) {\n name = txInfo.to.name\n avatarUrl = txInfo.to.logoUri\n }\n\n return (\n <>\n \n {children}\n \n )\n}\n\ntype TxDataProps = {\n txData: ExpandedTxDetails['txData']\n txInfo: TransactionInfo\n}\n\nexport const TxData = ({ txData, txInfo }: TxDataProps): ReactElement | null => {\n // nothing to render\n if (!txData) {\n return null\n }\n\n // unknown tx information\n if (!txData.dataDecoded) {\n // no hex data, nothing to render\n if (!txData.hexData) {\n return null\n }\n\n // we render the hex encoded data\n return (\n \n \n \n )\n }\n\n if (isSupportedMultiSendCall(txInfo)) {\n return \n }\n\n // FixMe: this way won't scale well\n if (isSupportedSpendingLimitAddress(txInfo) && isSetAllowance(txData.dataDecoded.method)) {\n return \n }\n\n // FixMe: this way won't scale well\n if (isSupportedSpendingLimitAddress(txInfo) && isDeleteAllowance(txData.dataDecoded.method)) {\n return \n }\n\n // we render the decoded data\n return (\n \n \n \n )\n}\n","import { Button, Tooltip } from '@gnosis.pm/safe-react-components'\nimport { MultisigExecutionInfo } from '@gnosis.pm/safe-react-gateway-sdk'\nimport { ReactElement } from 'react'\nimport { useSelector } from 'react-redux'\n\nimport { currentSafeNonce } from 'src/logic/safe/store/selectors'\nimport { Transaction } from 'src/logic/safe/store/models/types/gateway.d'\nimport { useActionButtonsHandlers } from 'src/routes/safe/components/Transactions/TxList/hooks/useActionButtonsHandlers'\nimport useTxStatus from 'src/logic/hooks/useTxStatus'\nimport { isAwaitingExecution } from './utils'\n\ntype TxExpandedActionsProps = {\n transaction: Transaction\n}\n\nexport const TxExpandedActions = ({ transaction }: TxExpandedActionsProps): ReactElement => {\n const {\n canCancel,\n handleConfirmButtonClick,\n handleCancelButtonClick,\n handleOnMouseEnter,\n handleOnMouseLeave,\n isPending,\n disabledActions,\n } = useActionButtonsHandlers(transaction)\n const nonce = useSelector(currentSafeNonce)\n const txStatus = useTxStatus(transaction)\n const isAwaitingEx = isAwaitingExecution(txStatus)\n\n const onExecuteOrConfirm = (event) => {\n handleOnMouseLeave()\n handleConfirmButtonClick(event)\n }\n\n const getConfirmTooltipTitle = () => {\n if (isAwaitingEx) {\n return (transaction.executionInfo as MultisigExecutionInfo)?.nonce === nonce\n ? 'Execute'\n : `Transaction with nonce ${nonce} needs to be executed first`\n }\n return 'Confirm'\n }\n\n // There is a problem in chrome that produces onMouseLeave event not being triggered properly.\n // https://github.com/facebook/react/issues/4492\n return (\n <>\n \n \n \n {isAwaitingEx ? 'Execute' : 'Confirm'}\n \n \n \n {canCancel && (\n \n \n \n \n \n )}\n \n )\n}\n","import { ReactElement } from 'react'\nimport AlertTooltipWarning from './AlertTooltipWarning'\n\nconst ThresholdWarning = (): ReactElement => (\n \n)\n\nexport default ThresholdWarning\n","import { SettingsChange, SettingsInfo } from '@gnosis.pm/safe-react-gateway-sdk'\nimport { ReactElement } from 'react'\n\nimport { AddressInfo } from './AddressInfo'\nimport { InfoDetails } from './InfoDetails'\nimport { TxInfoDetails } from './TxInfoDetails'\nimport ThresholdWarning from './ThresholdWarning'\n\ntype TxInfoSettingsProps = {\n settingsInfo: SettingsChange['settingsInfo']\n}\n\nexport const TxInfoSettings = ({ settingsInfo }: TxInfoSettingsProps): ReactElement | null => {\n if (!settingsInfo) {\n return null\n }\n\n switch (settingsInfo.type) {\n case 'SET_FALLBACK_HANDLER': {\n return (\n \n \n \n )\n }\n case 'ADD_OWNER':\n case 'REMOVE_OWNER': {\n const title = settingsInfo.type === 'ADD_OWNER' ? 'Add owner:' : 'Remove owner:'\n return (\n }>\n \n {settingsInfo.threshold}\n \n )\n }\n case 'SWAP_OWNER': {\n return (\n \n \n \n \n )\n }\n case 'CHANGE_THRESHOLD': {\n return (\n }>\n {settingsInfo.threshold}\n \n )\n }\n case 'CHANGE_IMPLEMENTATION': {\n return (\n \n \n \n )\n }\n case 'ENABLE_MODULE':\n case 'DISABLE_MODULE': {\n const title = settingsInfo.type === 'ENABLE_MODULE' ? 'Enable module:' : 'Disable module:'\n return (\n \n \n \n )\n }\n case 'SET_GUARD': {\n return (\n \n \n \n )\n }\n case 'DELETE_GUARD': {\n return {null}\n }\n default:\n return {null}\n }\n}\n","import { TransactionStatus, Transfer, TransferDirection } from '@gnosis.pm/safe-react-gateway-sdk'\nimport { ReactElement, useEffect, useState } from 'react'\nimport { Text } from '@gnosis.pm/safe-react-components'\n\nimport { AssetInfo, TokenTransferAsset, useAssetInfo } from './hooks/useAssetInfo'\nimport { TxInfoDetails } from './TxInfoDetails'\nimport { isTxQueued } from 'src/logic/safe/store/models/types/gateway.d'\n\nexport const isTransferAssetInfo = (value?: AssetInfo): value is TokenTransferAsset => {\n return value?.type === 'Transfer'\n}\n\nconst makeTitle = (txDirection: string, amountWithSymbol: string, txStatus: TransactionStatus) => (\n \n {txDirection === TransferDirection.INCOMING ? 'Received' : isTxQueued(txStatus) ? 'Send' : 'Sent'}{' '}\n \n {amountWithSymbol}\n \n {txDirection === TransferDirection.INCOMING ? ' from:' : ' to:'}\n \n)\n\ntype Details = {\n title: string | ReactElement\n address: string\n name: string | undefined // AddressEx returns null if unknown\n}\n\nexport const TxInfoTransfer = ({\n txInfo,\n txStatus,\n}: {\n txInfo: Transfer\n txStatus: TransactionStatus\n}): ReactElement | null => {\n const assetInfo = useAssetInfo(txInfo)\n const [details, setDetails] = useState
()\n\n useEffect(() => {\n if (isTransferAssetInfo(assetInfo)) {\n const txDirection = txInfo.direction.toUpperCase()\n setDetails({\n title: makeTitle(txDirection, assetInfo.amountWithSymbol, txStatus),\n address: txDirection === TransferDirection.INCOMING ? txInfo.sender.value : txInfo.recipient.value,\n name: (txDirection === TransferDirection.INCOMING ? txInfo.sender.name : txInfo.recipient.name) || undefined,\n })\n }\n }, [assetInfo, txInfo.direction, txInfo.recipient, txInfo.sender, txStatus])\n\n return details ? : null\n}\n","import { SettingsChange, TransactionInfo, TransactionStatus } from '@gnosis.pm/safe-react-gateway-sdk'\nimport { ReactElement } from 'react'\n\nimport { isSettingsChangeTxInfo, isTransferTxInfo } from 'src/logic/safe/store/models/types/gateway.d'\nimport { TxInfoSettings } from './TxInfoSettings'\nimport { TxInfoTransfer } from './TxInfoTransfer'\n\nexport const TxInfo = ({\n txInfo,\n txStatus,\n}: {\n txInfo: TransactionInfo\n txStatus: TransactionStatus\n}): ReactElement | null => {\n if (isSettingsChangeTxInfo(txInfo)) {\n return \n }\n\n if (isTransferTxInfo(txInfo)) {\n return \n }\n\n return null\n}\n","import { ReactElement, useState, CSSProperties } from 'react'\nimport styled, { AnyStyledComponent } from 'styled-components'\nimport Step from '@material-ui/core/Step'\nimport StepConnector from '@material-ui/core/StepConnector'\nimport StepContent from '@material-ui/core/StepContent'\nimport StepLabel from '@material-ui/core/StepLabel'\nimport Stepper from '@material-ui/core/Stepper'\nimport FiberManualRecordIcon from '@material-ui/icons/FiberManualRecord'\nimport AddCircleIcon from '@material-ui/icons/AddCircle'\nimport RadioButtonUncheckedOutlinedIcon from '@material-ui/icons/RadioButtonUncheckedOutlined'\nimport CheckCircleIcon from '@material-ui/icons/CheckCircle'\nimport CancelIcon from '@material-ui/icons/Cancel'\nimport { AddressEx, DetailedExecutionInfo } from '@gnosis.pm/safe-react-gateway-sdk'\nimport { useSelector } from 'react-redux'\n\nimport { ExpandedTxDetails, isMultiSigExecutionDetails } from 'src/logic/safe/store/models/types/gateway.d'\nimport { AddressInfo } from 'src/routes/safe/components/Transactions/TxList/AddressInfo'\nimport { isCancelTxDetails } from 'src/routes/safe/components/Transactions/TxList/utils'\nimport { black300, gray500, primary400, red400, orange500 } from 'src/theme/variables'\nimport { currentSafe } from 'src/logic/safe/store/selectors'\nimport { currentChainId } from 'src/logic/config/store/selectors'\nimport { addressBookName } from 'src/logic/addressBook/store/selectors'\nimport { userAccountSelector } from 'src/logic/wallets/store/selectors'\n\n// Icons\n\n// All icons from MUI share the same type\nconst getStyledIcon = (icon: typeof AddCircleIcon): AnyStyledComponent => {\n return styled(icon)`\n height: 20px;\n width: 20px;\n margin-left: 2px;\n `\n}\n\nconst TxCreationIcon = getStyledIcon(AddCircleIcon)\nconst TxRejectionIcon = getStyledIcon(CancelIcon)\nconst CheckIcon = getStyledIcon(CheckCircleIcon)\n\nconst CircleIcon = styled(getStyledIcon(RadioButtonUncheckedOutlinedIcon))`\n stroke: currentColor;\n stroke-width: 1px;\n`\nconst DotIcon = styled(FiberManualRecordIcon)`\n height: 14px;\n width: 14px;\n margin-left: 5px;\n`\n\n// Stepper\nconst StyledStepper = styled(Stepper)`\n padding: 0;\n`\n\nconst StyledStepConnector = styled(StepConnector)`\n padding: 3px 0;\n\n .MuiStepConnector-line {\n margin-left: -1px;\n border-color: ${gray500};\n border-left-width: 2px;\n min-height: 14px;\n }\n`\n\ntype StepState = 'confirmed' | 'active' | 'disabled' | 'error'\nconst getStepColor = (state: StepState): string => {\n switch (state) {\n case 'confirmed':\n return primary400\n case 'active':\n return orange500\n case 'disabled':\n return black300\n case 'error':\n return red400\n }\n}\n\ntype StyledStepProps = {\n $bold?: boolean\n state: StepState\n}\nconst StyledStep = styled(Step)`\n .MuiStepLabel-label {\n font-weight: ${({ $bold = false }) => ($bold ? 'bold' : 'normal')};\n font-size: 16px;\n color: ${({ state }) => getStepColor(state)};\n }\n\n .MuiStepLabel-iconContainer {\n color: ${({ state }) => getStepColor(state)};\n align-items: center;\n }\n`\n\nconst StyledStepContent = styled(StepContent)`\n color: ${black300};\n`\n\n// Simple memoized styles\nconst pointerStyle: CSSProperties = {\n cursor: 'pointer',\n}\n\nconst confirmationsStyle: CSSProperties = {\n color: black300,\n fontWeight: 'normal',\n}\n\nconst shouldHideConfirmations = (detailedExecutionInfo: DetailedExecutionInfo | null): boolean => {\n if (!detailedExecutionInfo || !isMultiSigExecutionDetails(detailedExecutionInfo)) {\n return true\n }\n\n const confirmationsNeeded = detailedExecutionInfo.confirmationsRequired - detailedExecutionInfo.confirmations.length\n const isConfirmed = confirmationsNeeded <= 0\n\n // Threshold reached or more than 3 confirmations\n return isConfirmed || detailedExecutionInfo.confirmations.length > 3\n}\n\nconst getConfirmationStep = (\n { value, name, logoUri }: AddressEx,\n key: string | undefined = undefined,\n): ReactElement => (\n \n }>\n \n \n \n)\n\nexport const TxOwners = ({\n txDetails,\n isPending,\n}: {\n txDetails: ExpandedTxDetails\n isPending: boolean\n}): ReactElement | null => {\n const { txInfo, detailedExecutionInfo } = txDetails\n\n const [hideConfirmations, setHideConfirmations] = useState(shouldHideConfirmations(detailedExecutionInfo))\n\n const { threshold } = useSelector(currentSafe)\n const account = useSelector(userAccountSelector)\n const chainId = useSelector(currentChainId)\n const name = useSelector((state) => addressBookName(state, { address: account, chainId }))\n\n const toggleHide = () => {\n setHideConfirmations((prev) => !prev)\n }\n\n if (!detailedExecutionInfo || !isMultiSigExecutionDetails(detailedExecutionInfo)) {\n return null\n }\n\n const confirmationsNeeded = detailedExecutionInfo.confirmationsRequired - detailedExecutionInfo.confirmations.length\n\n const isImmediateExecution = isPending && threshold === 1\n const isConfirmed = confirmationsNeeded <= 0 || isImmediateExecution\n const isExecuted = !!detailedExecutionInfo.executor\n\n const numberOfConfirmations = isImmediateExecution ? 1 : detailedExecutionInfo.confirmations.length\n return (\n }>\n {isCancelTxDetails(txInfo) ? (\n \n }>On-chain rejection created\n \n ) : (\n \n }>Created\n \n )}\n \n : }>\n Confirmations{' '}\n \n ({`${numberOfConfirmations} of ${detailedExecutionInfo.confirmationsRequired}`})\n \n \n \n {!hideConfirmations &&\n (isImmediateExecution\n ? getConfirmationStep({ value: account, name, logoUri: null })\n : detailedExecutionInfo.confirmations.map(({ signer }) => getConfirmationStep(signer, signer.value)))}\n {detailedExecutionInfo.confirmations.length > 0 && (\n \n } onClick={toggleHide}>\n {hideConfirmations ? 'Show all' : 'Hide all'}\n \n \n )}\n \n : }>\n {isExecuted ? 'Executed' : isPending ? 'Executing' : 'Execution'}\n \n {\n // isExecuted\n detailedExecutionInfo.executor ? (\n \n \n \n ) : (\n !isConfirmed &&\n !isPending && Can be executed once the threshold is reached\n )\n }\n \n \n )\n}\n","import { ReactElement } from 'react'\nimport { MultiSend } from '@gnosis.pm/safe-react-gateway-sdk'\nimport PrefixedEthHashInfo from 'src/components/PrefixedEthHashInfo'\nimport { getExplorerInfo } from 'src/config'\nimport { InfoDetails } from './InfoDetails'\nimport { TxDataRow } from './TxDataRow'\n\n// Does not use AddressInfo as to not allow address book data display\n// as we use backend data to verify the deligate call\nconst TxInfoMultiSend = ({ txInfo }: { txInfo: MultiSend }): ReactElement => {\n const hash = txInfo?.to.value\n const name = txInfo.to?.name || undefined\n const customAvatar = txInfo.to?.logoUri || undefined\n const value = txInfo?.value\n return (\n \n \n \n \n )\n}\n\nexport default TxInfoMultiSend\n","import { ReactElement, useState } from 'react'\nimport { Operation } from '@gnosis.pm/safe-react-gateway-sdk'\nimport { ButtonLink } from '@gnosis.pm/safe-react-components'\nimport styled from 'styled-components'\n\nimport { formatDateTime } from 'src/utils/date'\nimport { ExpandedTxDetails, isMultiSigExecutionDetails } from 'src/logic/safe/store/models/types/gateway.d'\nimport { NOT_AVAILABLE } from './utils'\nimport TxInfoMultiSend from './TxInfoMultiSend'\nimport DelegateCallWarning from './DelegateCallWarning'\nimport { TxDataRow } from 'src/routes/safe/components/Transactions/TxList/TxDataRow'\nimport { sm } from 'src/theme/variables'\nimport { isSupportedMultiSendCall } from 'src/logic/safe/transactions/multisend'\n\nconst StyledButtonLink = styled(ButtonLink)`\n margin-top: ${sm};\n padding-left: 0;\n\n & > p {\n margin-left: 0;\n }\n`\n\nconst CollapsibleSection = styled.div<{ show: boolean }>`\n max-height: ${({ show }) => (show ? '500px' : '0px')}; // We need to set a fixed height for the animation to work\n overflow: hidden;\n transition: ${({ show }) => (show ? 'max-height 0.4s ease-in-out' : 'max-height 0.2s cubic-bezier(0, 1, 0, 1)')};\n`\n\ntype Props = { txDetails: ExpandedTxDetails }\n\nexport const TxSummary = ({ txDetails }: Props): ReactElement => {\n const { txHash, detailedExecutionInfo, executedAt, txData, txInfo } = txDetails\n const [expanded, setExpanded] = useState(false)\n\n const toggleExpanded = () => {\n setExpanded((val) => !val)\n }\n\n let created, confirmations, safeTxHash, baseGas, gasPrice, gasToken, refundReceiver, safeTxGas\n if (isMultiSigExecutionDetails(detailedExecutionInfo)) {\n // prettier-ignore\n ({\n submittedAt: created,\n confirmations,\n safeTxHash,\n baseGas,\n gasPrice,\n gasToken,\n safeTxGas,\n } = detailedExecutionInfo)\n refundReceiver = detailedExecutionInfo.refundReceiver?.value\n }\n\n return (\n <>\n {txData?.operation === Operation.DELEGATE && (\n
\n \n
\n )}\n {isSupportedMultiSendCall(txInfo) && (\n <>\n \n
\n \n )}\n\n \n \n \n \n\n {/* Advanced TxData */}\n {txData && (\n <>\n \n Advanced Details\n \n \n {txData?.operation !== undefined && (\n \n )}\n \n \n \n \n \n {confirmations?.map(({ signature }, index) => (\n \n ))}\n \n \n \n )}\n \n )\n}\n","import { ReactElement } from 'react'\nimport { ModuleExecutionDetails } from '@gnosis.pm/safe-react-gateway-sdk'\n\nimport { AddressInfo } from './AddressInfo'\nimport { InfoDetails } from './InfoDetails'\n\nconst TxModuleInfo = ({ detailedExecutionInfo }: { detailedExecutionInfo: ModuleExecutionDetails }): ReactElement => {\n const { value, name, logoUri } = detailedExecutionInfo.address\n\n return (\n \n \n \n )\n}\n\nexport default TxModuleInfo\n","import { CopyToClipboardBtn } from '@gnosis.pm/safe-react-components'\nimport { ReactElement } from 'react'\nimport { generatePath } from 'react-router-dom'\nimport useSafeAddress from 'src/logic/currentSession/hooks/useSafeAddress'\n\nimport { getPrefixedSafeAddressSlug, SAFE_ADDRESS_SLUG, SAFE_ROUTES, TRANSACTION_ID_SLUG } from 'src/routes/routes'\nimport { PUBLIC_URL } from 'src/utils/constants'\nimport styled from 'styled-components'\nimport { primaryLite, background } from 'src/theme/variables'\n\ntype Props = {\n txId: string\n}\n\nconst StyledCopyToClipboardBtn = styled(CopyToClipboardBtn)`\n background: ${background};\n border-radius: 4px;\n height: 32px;\n width: 32px;\n\n &:hover {\n background: ${primaryLite};\n }\n\n & span {\n width: 32px;\n height: 32px;\n justify-content: center;\n align-items: center;\n }\n\n & svg {\n padding-right: 2px;\n }\n`\n\nconst TxShareButton = ({ txId }: Props): ReactElement => {\n const { shortName, safeAddress } = useSafeAddress()\n\n const txDetailsPathname = generatePath(SAFE_ROUTES.TRANSACTIONS_SINGULAR, {\n [SAFE_ADDRESS_SLUG]: getPrefixedSafeAddressSlug({ shortName, safeAddress }),\n [TRANSACTION_ID_SLUG]: txId,\n })\n const txDetailsLink = `${window.location.origin}${PUBLIC_URL}${txDetailsPathname}`\n\n return \n}\n\nexport default TxShareButton\n","import { Icon, Link, Loader, Text } from '@gnosis.pm/safe-react-components'\nimport cn from 'classnames'\nimport { ReactElement, useContext } from 'react'\nimport styled from 'styled-components'\n\nimport {\n ExpandedTxDetails,\n isCustomTxInfo,\n isModuleExecutionInfo,\n isMultiSigExecutionDetails,\n isSettingsChangeTxInfo,\n isTransferTxInfo,\n LocalTransactionStatus,\n Transaction,\n} from 'src/logic/safe/store/models/types/gateway.d'\nimport { useTransactionDetails } from './hooks/useTransactionDetails'\nimport { TxDetailsContainer, Centered, AlignItemsWithMargin } from './styled'\nimport { TxData } from './TxData'\nimport { TxExpandedActions } from './TxExpandedActions'\nimport { TxInfo } from './TxInfo'\nimport { TxLocationContext } from './TxLocationProvider'\nimport { TxOwners } from './TxOwners'\nimport { TxSummary } from './TxSummary'\nimport { isCancelTxDetails, NOT_AVAILABLE } from './utils'\nimport useTxStatus from 'src/logic/hooks/useTxStatus'\nimport { useSelector } from 'react-redux'\nimport { userAccountSelector } from 'src/logic/wallets/store/selectors'\nimport TxModuleInfo from './TxModuleInfo'\nimport Track from 'src/components/Track'\nimport { TX_LIST_EVENTS } from 'src/utils/events/txList'\nimport TxShareButton from './TxShareButton'\nimport { isSupportedMultiSendCall } from 'src/logic/safe/transactions/multisend'\n\nconst NormalBreakingText = styled(Text)`\n line-break: normal;\n word-break: normal;\n padding-right: 32px;\n`\n\nconst TxDataGroup = ({ txDetails }: { txDetails: ExpandedTxDetails }): ReactElement | null => {\n if (isTransferTxInfo(txDetails.txInfo) || isSettingsChangeTxInfo(txDetails.txInfo)) {\n return \n }\n\n if (isCancelTxDetails(txDetails.txInfo) && isMultiSigExecutionDetails(txDetails.detailedExecutionInfo)) {\n const txNonce = `${txDetails.detailedExecutionInfo.nonce ?? NOT_AVAILABLE}`\n const isTxExecuted = txDetails.executedAt\n\n // executed rejection transaction\n let message = `This is an on-chain rejection that didn't send any funds.\n This on-chain rejection replaced all transactions with nonce ${txNonce}.`\n\n if (!isTxExecuted) {\n // queued rejection transaction\n message = `This is an on-chain rejection that doesn't send any funds.\n Executing this on-chain rejection will replace all currently awaiting transactions with nonce ${txNonce}.`\n }\n return (\n <>\n {message}\n {!isTxExecuted && (\n <>\n
\n \n \n \n Why do I need to pay for rejecting a transaction?\n \n \n \n \n \n )}\n \n )\n }\n\n if (!txDetails.txData) {\n return null\n }\n\n return \n}\n\ntype TxDetailsProps = {\n transaction: Transaction\n}\n\nexport const TxDetails = ({ transaction }: TxDetailsProps): ReactElement => {\n const { txLocation } = useContext(TxLocationContext)\n const { data, loading } = useTransactionDetails(transaction.id, transaction.txDetails)\n const txStatus = useTxStatus(transaction)\n const willBeReplaced = txStatus === LocalTransactionStatus.WILL_BE_REPLACED\n const isPending = txStatus === LocalTransactionStatus.PENDING\n const currentUser = useSelector(userAccountSelector)\n const isMultiSend = data && isSupportedMultiSendCall(data.txInfo)\n const shouldShowStepper = data?.detailedExecutionInfo && isMultiSigExecutionDetails(data.detailedExecutionInfo)\n\n // To avoid prop drilling into TxDataGroup, module details are positioned here accordingly\n const getModuleDetails = () => {\n if (!data || !isModuleExecutionInfo(data.detailedExecutionInfo)) {\n return null\n }\n\n return (\n
\n \n
\n )\n }\n\n if (loading && !data) {\n return (\n \n \n \n )\n }\n\n if (!data) {\n return (\n \n \n No data available\n \n \n )\n }\n\n const TrackedShareButton = () => {\n return (\n
\n \n \n \n
\n )\n }\n\n const customTxNoData = isCustomTxInfo(data.txInfo) && !data.txInfo.methodName && !parseInt(data.txInfo.dataSize, 10)\n const onChainRejection = isCancelTxDetails(data.txInfo) && isMultiSigExecutionDetails(data.detailedExecutionInfo)\n const noTxDataBlock = customTxNoData && !onChainRejection\n const txData = () =>\n isMultiSend ? (\n <>\n
\n \n \n
\n {getModuleDetails()}\n \n \n
\n \n ) : (\n <>\n \n \n \n \n {getModuleDetails()}\n
\n \n
\n \n )\n\n return (\n \n
{txData()}
\n {shouldShowStepper && (\n
\n \n \n
\n {!isPending && !data.executedAt && txLocation !== 'history' && !!currentUser && (\n
\n \n
\n )}\n \n )}\n
\n )\n}\n","import { useEffect, useRef, useState } from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\n\nimport { ExpandedTxDetails } from 'src/logic/safe/store/models/types/gateway.d'\nimport { fetchTransactionDetails } from 'src/logic/safe/store/actions/fetchTransactionDetails'\nimport { getTransactionByAttribute } from 'src/logic/safe/store/selectors/gatewayTransactions'\nimport { AppReduxState } from 'src/store'\n\nexport type LoadTransactionDetails = {\n data?: ExpandedTxDetails\n loading: boolean\n}\n\nexport const useTransactionDetails = (\n transactionId: string,\n transactionDetails?: ExpandedTxDetails,\n): LoadTransactionDetails => {\n const dispatch = useRef(useDispatch())\n const [txDetails, setTxDetails] = useState({\n loading: transactionDetails ? false : true,\n data: transactionDetails,\n })\n\n const data = useSelector((state: AppReduxState) =>\n getTransactionByAttribute(state, { attributeValue: transactionId, attributeName: 'id' }),\n )\n\n useEffect(() => {\n if (data?.txDetails) {\n setTxDetails({ loading: false, data: data?.txDetails })\n } else {\n // lookup tx details\n dispatch.current(fetchTransactionDetails({ transactionId }))\n }\n }, [data?.txDetails, transactionId])\n\n return txDetails\n}\n","import { ReactElement, SyntheticEvent } from 'react'\nimport styled from 'styled-components'\nimport { Loader } from '@gnosis.pm/safe-react-components'\n\nimport Button from 'src/components/layout/Button'\nimport Hairline from 'src/components/layout/Hairline'\nimport Track from 'src/components/Track'\nimport { CREATE_SAFE_EVENTS } from 'src/utils/events/createLoadSafe'\nimport Paragraph from 'src/components/layout/Paragraph'\n\nconst ButtonWithMargin = styled(Button)`\n margin-right: 16px;\n`\nconst FooterContainer = styled.div`\n width: 100%;\n height: 76px;\n\n button {\n margin-top: 24px;\n }\n`\n\nconst LoaderText = styled.span`\n margin-left: 10px;\n`\n\nexport const GenericFooter = (): ReactElement => {\n return (\n \n This process should take a couple of minutes.\n \n )\n}\n\nexport const ContinueFooter = ({\n continueButtonDisabled,\n onContinue,\n}: {\n continueButtonDisabled: boolean\n onContinue: (event: SyntheticEvent) => void\n}): ReactElement => (\n \n \n \n \n {continueButtonDisabled ? (\n <>\n Loading your Walliro\n \n ) : (\n <>Get started\n )}\n \n \n \n)\n\nexport const ErrorFooter = ({\n onCancel,\n onRetry,\n}: {\n onCancel: (event: SyntheticEvent) => void\n onRetry: (event: SyntheticEvent) => void\n}): ReactElement => (\n \n \n \n Cancel\n \n \n \n)\n","import { ContinueFooter, GenericFooter } from './components/Footer'\n\nexport const isConfirmationStep = (stepIndex?: number): boolean => stepIndex === 0\n\nexport const steps = [\n {\n id: '1',\n label: 'Waiting for transaction confirmation',\n description: undefined,\n instruction: 'Please confirm the Walliro creation in your wallet',\n footerComponent: null,\n },\n {\n id: '2',\n label: 'Transaction submitted',\n description: undefined,\n instruction: 'Please do not leave the page',\n footerComponent: GenericFooter,\n },\n {\n id: '3',\n label: 'Validating transaction',\n description: undefined,\n instruction: 'Please do not leave the page',\n footerComponent: GenericFooter,\n },\n {\n id: '4',\n label: 'Deploying smart contract',\n description: undefined,\n instruction: 'Please do not leave the page',\n footerComponent: GenericFooter,\n },\n {\n id: '5',\n label: 'Generating your Walliro',\n description: undefined,\n instruction: 'Please do not leave the page',\n footerComponent: GenericFooter,\n },\n {\n id: '6',\n label: 'Success',\n description: 'Your Walliro was created successfully',\n instruction: undefined,\n footerComponent: ContinueFooter,\n },\n]\n","export default __webpack_public_path__ + \"static/media/vault-error.17985c86.svg\";","export default __webpack_public_path__ + \"static/media/creation-process.b0164935.gif\";","import abiDecoder from 'abi-decoder'\nimport { getProxyFactoryDeployment } from 'src/safe-deployments'\nimport { Log } from 'web3-core'\nimport { checksumAddress } from 'src/utils/checksumAddress'\n\nimport { LATEST_SAFE_VERSION } from 'src/utils/constants'\n\n// Init abiDecoder with ProxyCreation ABI\nabiDecoder.addABI(\n getProxyFactoryDeployment({\n version: LATEST_SAFE_VERSION,\n })?.abi,\n)\n\nexport const getNewSafeAddressFromLogs = (logs: Log[]): string => {\n // We find the ProxyCreation event in the logs\n const proxyCreationEvent = abiDecoder.decodeLogs(logs).find(({ name }) => name === 'ProxyCreation')\n\n // We extract the proxy creation information from the event parameters\n const proxyInformation = proxyCreationEvent?.events?.find(({ name }) => name === 'proxy')\n\n return checksumAddress(proxyInformation?.value || '')\n}\n","import { Loader, Stepper } from '@gnosis.pm/safe-react-components'\nimport { useEffect, useState, useCallback } from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\nimport styled from 'styled-components'\n\nimport { ErrorFooter } from 'src/routes/opening/components/Footer'\nimport { isConfirmationStep, steps } from './steps'\n\nimport Heading from 'src/components/layout/Heading'\nimport Img from 'src/components/layout/Img'\nimport Paragraph from 'src/components/layout/Paragraph'\nimport { EMPTY_DATA } from 'src/logic/wallets/ethTransactions'\nimport { getWeb3ReadOnly, isTxPendingError } from 'src/logic/wallets/getWeb3'\nimport { background, connected, fontColor } from 'src/theme/variables'\nimport { providerNameSelector } from 'src/logic/wallets/store/selectors'\n\nimport SuccessSvg from 'src/assets/icons/safe-created.svg'\nimport VaultErrorSvg from './assets/vault-error.svg'\nimport VaultLoading from './assets/creation-process.gif'\nimport { TransactionReceipt } from 'web3-core'\nimport { Errors, logError } from 'src/logic/exceptions/CodedException'\nimport { NOTIFICATIONS } from 'src/logic/notifications'\nimport { showNotification } from 'src/logic/notifications/store/notifications'\nimport { getNewSafeAddressFromLogs } from 'src/routes/opening/utils/getSafeAddressFromLogs'\nimport { getExplorerInfo } from 'src/config'\nimport PrefixedEthHashInfo from 'src/components/PrefixedEthHashInfo'\nimport { trackEvent } from 'src/utils/googleTagManager'\nimport { CREATE_SAFE_EVENTS } from 'src/utils/events/createLoadSafe'\nimport { isWalletRejection } from 'src/logic/wallets/errors'\n\nexport const SafeDeployment = ({\n creationTxHash,\n onCancel,\n onRetry,\n onSuccess,\n submittedPromise,\n}: Props): React.ReactElement => {\n const [loading, setLoading] = useState(true)\n const [stepIndex, setStepIndex] = useState(0)\n const [safeCreationTxHash, setSafeCreationTxHash] = useState('')\n const [createdSafeAddress, setCreatedSafeAddress] = useState('')\n\n const [error, setError] = useState(false)\n const [intervalStarted, setIntervalStarted] = useState(false)\n const [waitingSafeDeployed, setWaitingSafeDeployed] = useState(false)\n const [continueButtonDisabled, setContinueButtonDisabled] = useState(false)\n const provider = useSelector(providerNameSelector)\n const dispatch = useDispatch()\n\n const confirmationStep = isConfirmationStep(stepIndex)\n\n const navigateToSafe = () => {\n setContinueButtonDisabled(true)\n onSuccess(createdSafeAddress)\n }\n\n const showSnackbarError = useCallback(\n (err: Error) => {\n if (isTxPendingError(err)) {\n dispatch(showNotification(NOTIFICATIONS.TX_PENDING_MSG))\n } else {\n dispatch(\n showNotification({\n ...NOTIFICATIONS.CREATE_SAFE_FAILED_MSG,\n message: `${NOTIFICATIONS.CREATE_SAFE_FAILED_MSG.message} – ${err.message}`,\n }),\n )\n }\n },\n [dispatch],\n )\n\n const onError = useCallback(\n (error: Error) => {\n setIntervalStarted(false)\n setWaitingSafeDeployed(false)\n setContinueButtonDisabled(false)\n setError(true)\n logError(Errors._800, error.message)\n showSnackbarError(error)\n },\n [setIntervalStarted, setWaitingSafeDeployed, setContinueButtonDisabled, setError, showSnackbarError],\n )\n\n // discard click event value\n const onRetryTx = () => {\n setStepIndex(0)\n setError(false)\n onRetry()\n }\n\n const getImage = () => {\n if (error) {\n return VaultErrorSvg\n }\n\n if (stepIndex <= 4) {\n return VaultLoading\n }\n\n return SuccessSvg\n }\n\n useEffect(() => {\n if (provider) {\n setLoading(false)\n }\n }, [provider])\n\n // creating safe from form submission\n useEffect(() => {\n if (submittedPromise === undefined) {\n return\n }\n\n const handlePromise = async () => {\n setStepIndex(0)\n try {\n const receipt = await submittedPromise\n setSafeCreationTxHash(receipt.transactionHash)\n setStepIndex(1)\n setIntervalStarted(true)\n } catch (err) {\n if (isWalletRejection(err)) {\n trackEvent(CREATE_SAFE_EVENTS.REJECT_CREATE_SAFE)\n }\n onError(err)\n }\n }\n\n handlePromise()\n }, [submittedPromise, onError])\n\n // recovering safe creation from txHash\n useEffect(() => {\n if (creationTxHash === undefined) {\n return\n }\n setSafeCreationTxHash(creationTxHash)\n setStepIndex(1)\n setIntervalStarted(true)\n }, [creationTxHash])\n\n useEffect(() => {\n if (!intervalStarted) {\n return\n }\n\n const isTxMined = async (txHash: string) => {\n const web3 = getWeb3ReadOnly()\n\n const txResult = await web3.eth.getTransaction(txHash)\n if (txResult?.blockNumber == null) {\n return false\n }\n\n const receipt = await web3.eth.getTransactionReceipt(txHash)\n if (!receipt?.status) {\n throw Error('TX status reverted')\n }\n\n return true\n }\n\n const interval = setInterval(async () => {\n if (stepIndex < 4) {\n setStepIndex(stepIndex + 1)\n }\n\n // safe created using the form\n if (submittedPromise !== undefined) {\n submittedPromise.then(() => {\n setStepIndex(4)\n setWaitingSafeDeployed(true)\n setIntervalStarted(false)\n })\n }\n\n // safe pending creation recovered from storage\n if (creationTxHash !== undefined) {\n try {\n const res = await isTxMined(creationTxHash)\n if (res) {\n setStepIndex(4)\n setWaitingSafeDeployed(true)\n setIntervalStarted(false)\n }\n } catch (error) {\n onError(error)\n }\n }\n }, 3000)\n\n return () => {\n clearInterval(interval)\n }\n }, [creationTxHash, submittedPromise, intervalStarted, stepIndex, error, onError])\n\n useEffect(() => {\n let interval\n\n const awaitUntilSafeIsDeployed = async (safeCreationTxHash: string) => {\n try {\n const web3 = getWeb3ReadOnly()\n const receipt = await web3.eth.getTransactionReceipt(safeCreationTxHash)\n\n let safeAddress = ''\n\n if (receipt?.events) {\n safeAddress = receipt.events.ProxyCreation.returnValues.proxy\n } else {\n // If the node doesn't return the events we try to fetch it from logs\n safeAddress = getNewSafeAddressFromLogs(receipt?.logs || [])\n }\n\n setCreatedSafeAddress(safeAddress)\n\n interval = setInterval(async () => {\n let code = EMPTY_DATA\n try {\n code = await web3.eth.getCode(safeAddress)\n } catch (err) {\n console.log(err)\n }\n if (code !== EMPTY_DATA) {\n setStepIndex(5)\n setError(false)\n }\n }, 1000)\n } catch (error) {\n onError(error)\n }\n }\n\n if (!waitingSafeDeployed) {\n return\n }\n\n if (typeof safeCreationTxHash === 'string') {\n awaitUntilSafeIsDeployed(safeCreationTxHash)\n }\n\n return () => {\n clearInterval(interval)\n }\n }, [safeCreationTxHash, waitingSafeDeployed, onError])\n\n if (loading || stepIndex === undefined) {\n return (\n \n \n \n )\n }\n\n let FooterComponent\n if (error) {\n FooterComponent = ErrorFooter\n } else if (steps[stepIndex].footerComponent) {\n FooterComponent = steps[stepIndex].footerComponent\n }\n\n return (\n \n \n Walliro creation process\n \n \n \n \n \"Vault\"\n \n\n \n {steps[stepIndex].description || steps[stepIndex].label}\n \n\n {steps[stepIndex].instruction && (\n \n \n {error ? 'You can Cancel or Retry the Walliro creation process.' : steps[stepIndex].instruction}\n \n \n )}\n\n {steps[stepIndex].instruction && creationTxHash ? (\n \n Your Walliro creation transaction:\n
\n
\n \n
\n
\n ) : null}\n\n \n {FooterComponent ? (\n \n ) : null}\n \n \n
\n )\n}\n\ntype Props = {\n creationTxHash?: string\n submittedPromise?: Promise\n onRetry: () => void\n onSuccess: (createdSafeAddress: string) => void\n onCancel: () => void\n}\n\ninterface FullParagraphProps {\n inversecolors: string\n $stepIndex: number\n}\n\nconst LoaderContainer = styled.div`\n display: flex;\n justify-content: center;\n align-items: center;\n height: 100%;\n`\n\nconst Wrapper = styled.div`\n display: grid;\n grid-template-columns: 250px auto;\n grid-template-rows: 43px auto;\n margin-bottom: 30px;\n`\n\nconst Title = styled(Heading)`\n grid-column: 1/3;\n grid-row: 1;\n margin: 7px 0 0 0 !important;\n`\n\nconst Nav = styled.div`\n grid-column: 1;\n grid-row: 2;\n`\n\nconst Body = styled.div`\n grid-column: 2;\n grid-row: 2;\n text-align: center;\n background-color: ${({ theme }) => theme.colors.white};\n border-radius: 5px;\n min-width: 700px;\n padding-top: 70px;\n box-shadow: 0 0 10px 0 rgba(33, 48, 77, 0.1);\n\n display: grid;\n grid-template-rows: 100px 50px 110px 1fr;\n`\n\nconst CardTitle = styled.div`\n font-size: 20px;\n padding-top: 10px;\n`\n\nconst FullParagraph = styled(Paragraph)`\n background-color: ${({ $stepIndex }) => ($stepIndex === 0 ? connected : background)};\n color: ${({ theme, $stepIndex }) => ($stepIndex === 0 ? theme.colors.white : fontColor)};\n padding: 28px;\n font-size: 20px;\n margin-bottom: 16px;\n transition: color 0.3s ease-in-out, background-color 0.3s ease-in-out;\n`\n\nconst Center = styled.div`\n display: flex;\n justify-content: center;\n position: relative;\n z-index: 2;\n margin-bottom: -10px;\n`\n\nconst BodyImage = styled.div`\n grid-row: 1;\n`\nconst BodyDescription = styled.div`\n grid-row: 2;\n`\nconst BodyInstruction = styled.div`\n grid-row: 3;\n margin: 27px 0;\n`\n\nconst TxText = styled.div`\n grid-row: 4;\n margin: 3em 0;\n font-size: 0.8em;\n`\n\nconst BodyFooter = styled.div`\n grid-row: 5;\n\n padding: 10px 0;\n display: flex;\n justify-content: center;\n align-items: flex-end;\n`\n","import { Dispatch } from './types'\nimport { isMultisigExecutionInfo, Transaction } from 'src/logic/safe/store/models/types/gateway.d'\nimport { MultiSend } from 'src/types/contracts/multi_send.d'\nimport { addPendingTransaction, removePendingTransaction } from 'src/logic/safe/store/actions/pendingTransactions'\nimport { Errors, logError } from 'src/logic/exceptions/CodedException'\nimport { getMultisendContract } from 'src/logic/contracts/safeContracts'\nimport { createTxNotifications } from 'src/logic/notifications'\nimport { TX_NOTIFICATION_TYPES } from 'src/logic/safe/transactions'\nimport * as aboutToExecuteTx from 'src/logic/safe/utils/aboutToExecuteTx'\nimport { isWalletRejection } from 'src/logic/wallets/errors'\nimport fetchTransactions from 'src/logic/safe/store/actions/transactions/fetchTransactions'\nimport { _getChainId } from 'src/config'\n\ntype TxMultiSenderProps = {\n transactions: Transaction[]\n multiSendCallData: string\n dispatch: Dispatch\n account: string\n safeAddress: string\n}\n\nexport class TxMultiSender {\n transactions: Transaction[]\n multiSendCallData: string\n multiSendContract: MultiSend\n dispatch: Dispatch\n account: string\n safeAddress: string\n notifications: ReturnType\n\n constructor({ transactions, multiSendCallData, dispatch, account, safeAddress }: TxMultiSenderProps) {\n this.transactions = transactions\n this.multiSendCallData = multiSendCallData\n this.multiSendContract = getMultisendContract()\n this.dispatch = dispatch\n this.account = account\n this.notifications = createTxNotifications(dispatch, TX_NOTIFICATION_TYPES.STANDARD_TX)\n this.safeAddress = safeAddress\n }\n\n async sendTx(): Promise {\n const { transactions, multiSendCallData, multiSendContract, dispatch, account } = this\n\n try {\n await multiSendContract.methods\n .multiSend(multiSendCallData)\n .send({\n from: account,\n })\n .on('transactionHash', (txHash) => {\n transactions.forEach((tx) => {\n const txNonce = isMultisigExecutionInfo(tx.executionInfo) ? tx.executionInfo.nonce : undefined\n txNonce && aboutToExecuteTx.setNonce(txNonce)\n dispatch(addPendingTransaction({ id: tx.id, txHash }))\n this.onComplete()\n })\n })\n } catch (error) {\n logError(Errors._818, error.message)\n this.onError(error)\n }\n }\n\n onComplete(): void {\n const { dispatch, safeAddress } = this\n\n dispatch(fetchTransactions(_getChainId(), safeAddress))\n }\n\n onError(err: Error & { code: number }): void {\n const { transactions, notifications, dispatch } = this\n\n notifications.closePending()\n\n transactions.forEach(({ id }) => {\n dispatch(removePendingTransaction({ id }))\n })\n\n if (isWalletRejection(err)) {\n notifications.showOnRejection(err)\n }\n }\n}\n\nexport const createMultiSendTransaction = (props: TxMultiSenderProps): Promise => {\n const sender = new TxMultiSender(props)\n\n return sender.sendTx()\n}\n","import { Icon } from '@gnosis.pm/safe-react-components'\nimport { Button, withStyles } from '@material-ui/core'\nimport useCachedState from 'src/utils/storage/useCachedState'\nimport styled from 'styled-components'\nimport { Tooltip } from '../layout/Tooltip'\n\n/**\n * The OnboardingTooltip renders a sticky Tooltip with an arrow pointing towards the wrapped component.\n * This Tooltip contains a button to hide it. This decision will be stored in the local storage such that the OnboardingTooltip will only popup until clicked away once.\n *\n * As this renders a MUI Tooltip it comes with the same restrictions (https://v4.mui.com/components/tooltips/).\n */\nexport const OnboardingTooltip = ({\n children,\n widgetLocalStorageId,\n defaultHidden,\n text,\n}: {\n children: React.ReactElement\n widgetLocalStorageId: string\n defaultHidden?: boolean\n text: string\n}): React.ReactElement => {\n const [widgetHidden, setWidgetHidden] = useCachedState(widgetLocalStorageId)\n\n return widgetHidden || defaultHidden ? (\n children\n ) : (\n \n \n {text}\n \n \n }\n >\n {children}\n \n )\n}\n\nconst StyledTooltip = withStyles(() => ({\n tooltip: {\n maxWidth: '500px',\n },\n}))(Tooltip)\n\nconst StyledOnboardingContent = styled.div`\n display: flex;\n align-items: center;\n gap: 8px;\n`\n","import { ReactElement, useCallback, useContext, useMemo } from 'react'\nimport { useSelector } from 'react-redux'\nimport Button from 'src/components/layout/Button'\nimport { Tooltip } from 'src/components/layout/Tooltip'\nimport { OnboardingTooltip } from 'src/components/OnboardingTooltip'\nimport { getBatchableTransactions } from 'src/logic/safe/store/selectors/gatewayTransactions'\nimport { isTxPending } from 'src/logic/safe/store/selectors/pendingTransactions'\nimport { AppReduxState } from 'src/store'\nimport { md, sm } from 'src/theme/variables'\nimport styled from 'styled-components'\nimport { BatchExecuteHoverContext } from 'src/routes/safe/components/Transactions/TxList/BatchExecuteHoverProvider'\nimport { useSafeAppUrl } from 'src/logic/hooks/useSafeAppUrl'\nimport { useRouteMatch } from 'react-router-dom'\nimport { SAFE_ROUTES } from 'src/routes/routes'\n\ninterface BatchExecuteButtonProps {\n onClick: () => void\n}\n\nconst HELP_STORAGE_KEY = 'batchExecutionButtonSeen'\n\nexport const BatchExecuteButton = ({ onClick }: BatchExecuteButtonProps): ReactElement => {\n const batchableTransactions = useSelector(getBatchableTransactions)\n const hoverContext = useContext(BatchExecuteHoverContext)\n const store = useSelector((state: AppReduxState) => state)\n const hasPendingTx = useMemo(\n () => batchableTransactions.some(({ id }) => isTxPending(store, id)),\n [batchableTransactions, store],\n )\n const isBatchable = batchableTransactions.length > 1\n const isDisabled = !isBatchable || hasPendingTx\n\n const handleOnMouseEnter = useCallback(() => {\n hoverContext.setActiveHover(batchableTransactions.map((tx) => tx.id))\n }, [batchableTransactions, hoverContext])\n\n const handleOnMouseLeave = useCallback(() => {\n hoverContext.setActiveHover()\n }, [hoverContext])\n\n const isSafeAppView = !!useSafeAppUrl().getAppUrl()\n const isSafeAppRoute = !!useRouteMatch(SAFE_ROUTES.APPS) && isSafeAppView\n\n return (\n \n \n \n
\n \n Execute Batch{isBatchable && ` (${batchableTransactions.length})`}\n \n
\n \n
\n \n )\n}\n\nconst ButtonWrapper = styled.span`\n align-self: flex-end;\n margin-right: ${sm};\n margin-top: -51px;\n margin-bottom: ${md};\n z-index: 0;\n`\n","import React, { ReactElement, useMemo, useState } from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\nimport styled from 'styled-components'\n\nimport { lg } from 'src/theme/variables'\nimport { ButtonStatus, Modal } from 'src/components/Modal'\nimport { currentSafe } from 'src/logic/safe/store/selectors'\nimport { isCustomTxInfo, Transaction } from 'src/logic/safe/store/models/types/gateway.d'\nimport { fetchSafeTransaction } from 'src/logic/safe/transactions/api/fetchSafeTransaction'\nimport { generateSignaturesFromTxConfirmations } from 'src/logic/safe/safeTxSigner'\nimport { getExecutionTransaction } from 'src/logic/safe/transactions'\nimport { getGnosisSafeInstanceAt, getMultisendContractAddress } from 'src/logic/contracts/safeContracts'\nimport { EMPTY_DATA } from 'src/logic/wallets/ethTransactions'\nimport { encodeMultiSendCall, getMultiSendJoinedTxs, MultiSendTx } from 'src/logic/safe/transactions/multisend'\nimport { userAccountSelector } from 'src/logic/wallets/store/selectors'\nimport { getBatchableTransactions } from 'src/logic/safe/store/selectors/gatewayTransactions'\nimport { Dispatch } from 'src/logic/safe/store/actions/types'\nimport { ModalHeader } from 'src/routes/safe/components/Balances/SendModal/screens/ModalHeader'\nimport Row from 'src/components/layout/Row'\nimport Paragraph from 'src/components/layout/Paragraph'\nimport Hairline from 'src/components/layout/Hairline'\nimport { getInteractionTitle } from 'src/routes/safe/components/Transactions/helpers/utils'\nimport PrefixedEthHashInfo from 'src/components/PrefixedEthHashInfo'\nimport { getExplorerInfo } from 'src/config'\nimport { fetchTransactionDetails } from 'src/logic/safe/store/actions/fetchTransactionDetails'\nimport { createMultiSendTransaction } from 'src/logic/safe/store/actions/TxMultiSender'\nimport { TxArgs } from 'src/logic/safe/store/models/types/transaction'\nimport {\n getTxConfirmations,\n getTxInfo,\n getTxRecipient,\n getTxValue,\n} from 'src/routes/safe/components/Transactions/TxList/utils'\nimport { TX_LIST_EVENTS } from 'src/utils/events/txList'\nimport { DecodedTxDetailType } from 'src/routes/safe/components/Apps/components/ConfirmTxModal'\nimport { DecodeTxs } from 'src/components/DecodeTxs'\nimport { DecodedDataParameterValue } from '@gnosis.pm/safe-react-gateway-sdk'\nimport { trackEvent } from 'src/utils/googleTagManager'\nimport { Skeleton } from '@material-ui/lab'\nimport { sameAddressAsSafeSelector } from 'src/routes/safe/container/selector'\nimport { TransactionFailText } from 'src/components/TransactionFailText'\nimport { EstimationStatus } from 'src/logic/hooks/useEstimateTransactionGas'\nimport { BatchExecuteButton } from 'src/routes/safe/components/Transactions/TxList/BatchExecuteButton'\nimport { Errors, logError } from 'src/logic/exceptions/CodedException'\nimport { BaseTransaction } from '@gnosis.pm/safe-apps-sdk'\nimport { TxSimulation } from '../helpers/Simulation/TxSimulation'\n\nconst DecodedTransactions = ({\n transactions,\n safeAddress,\n}: {\n transactions: Transaction[]\n safeAddress: string\n}): ReactElement => {\n return (\n
\n {transactions.map((transaction) => {\n if (!transaction.txDetails?.txData) return null\n\n const tx = {\n to: getTxRecipient(transaction.txInfo, safeAddress),\n value: getTxValue(transaction.txInfo, transaction.txDetails),\n data: transaction.txDetails?.txData.hexData || EMPTY_DATA,\n }\n const decodedDataParams: DecodedDataParameterValue = {\n operation: 0,\n to: tx.to,\n value: tx.value,\n data: transaction.txDetails?.txData.hexData || EMPTY_DATA,\n dataDecoded: null,\n }\n\n if (isCustomTxInfo(transaction.txInfo) && transaction.txInfo.isCancellation) {\n decodedDataParams.dataDecoded = {\n method: 'On-chain rejection',\n parameters: [],\n }\n }\n\n const decodedData = transaction.txDetails?.txData.dataDecoded || decodedDataParams\n\n return \n })}\n
\n )\n}\n\nasync function getTxDetails(transactions: Transaction[], dispatch: Dispatch) {\n return Promise.all(\n transactions.map(async (transaction) => {\n if (transaction.txDetails) return transaction\n\n const txDetails = await dispatch(fetchTransactionDetails({ transactionId: transaction.id }))\n\n const transactionDetails = txDetails || (await fetchSafeTransaction(transaction.id))\n return {\n ...transaction,\n txDetails: transactionDetails,\n }\n }),\n )\n}\n\nfunction toMultiSendTxs(\n transactions: Transaction[],\n safeAddress: string,\n safeVersion: string,\n account: string,\n): MultiSendTx[] {\n const safeInstance = getGnosisSafeInstanceAt(safeAddress, safeVersion)\n\n return transactions.map((transaction) => {\n const txInfo = getTxInfo(transaction, safeAddress)\n const confirmations = getTxConfirmations(transaction)\n const sigs = generateSignaturesFromTxConfirmations(confirmations)\n\n const txArgs: TxArgs = { ...txInfo, sigs, safeInstance, sender: account }\n const data = getExecutionTransaction(txArgs).encodeABI()\n\n return {\n to: safeAddress,\n value: '0',\n data,\n }\n })\n}\n\nasync function getBatchExecuteData(\n transactions: Transaction[],\n safeAddress: string,\n safeVersion: string,\n account: string,\n) {\n const txs = toMultiSendTxs(transactions, safeAddress, safeVersion, account)\n\n return getMultiSendJoinedTxs(txs)\n}\n\n// Memoized as it receives no props\nexport const BatchExecute = React.memo((): ReactElement | null => {\n const dispatch = useDispatch()\n const { address: safeAddress, currentVersion } = useSelector(currentSafe)\n const account = useSelector(userAccountSelector)\n const multiSendContractAddress = getMultisendContractAddress()\n const batchableTransactions = useSelector(getBatchableTransactions)\n const [txsWithDetails, setTxsWithDetails] = useState([])\n const [isModalOpen, setModalOpen] = useState(false)\n const [error, setError] = useState()\n const [buttonStatus, setButtonStatus] = useState(ButtonStatus.LOADING)\n const [multiSendCallData, setMultiSendCallData] = useState(EMPTY_DATA)\n const isSameAddressAsSafe = useSelector(sameAddressAsSafeSelector)\n\n const toggleModal = () => {\n setModalOpen((prevOpen) => !prevOpen)\n }\n\n const handleOpenModal = async () => {\n toggleModal()\n\n trackEvent({\n ...TX_LIST_EVENTS.BATCH_EXECUTE,\n label: batchableTransactions.length,\n })\n\n const transactionsWithDetails = await getTxDetails(batchableTransactions, dispatch)\n setTxsWithDetails(transactionsWithDetails)\n\n try {\n const batchExecuteData = await getBatchExecuteData(transactionsWithDetails, safeAddress, currentVersion, account)\n setButtonStatus(isSameAddressAsSafe ? ButtonStatus.DISABLED : ButtonStatus.READY)\n setMultiSendCallData(batchExecuteData)\n } catch (err) {\n logError(Errors._619, err.message)\n setError(err)\n setButtonStatus(ButtonStatus.DISABLED)\n }\n }\n\n const handleBatchExecute = async () => {\n createMultiSendTransaction({\n transactions: batchableTransactions,\n multiSendCallData,\n dispatch,\n account,\n safeAddress,\n })\n\n toggleModal()\n }\n\n const multiSendTx: Omit | null = useMemo(() => {\n if (!account || !safeAddress || !currentVersion || txsWithDetails.length === 0) {\n return null\n }\n const txs = toMultiSendTxs(txsWithDetails, safeAddress, currentVersion, account)\n return {\n data: encodeMultiSendCall(txs),\n to: getMultisendContractAddress(),\n }\n }, [account, txsWithDetails, currentVersion, safeAddress])\n\n if (!account) {\n return null\n }\n\n return (\n <>\n \n \n \n \n \n \n \n This transaction batches a total of {batchableTransactions.length} transactions from your queue into a\n single Ethereum transaction. Please check every included transaction carefully, especially if you have\n rejection transactions, and make sure you want to execute all of them. Included transactions are\n highlighted in green when you hover over the execute button.\n \n \n \n \n {getInteractionTitle('0')}\n \n \n \n \n \n \n \n {txsWithDetails.length ? (\n \n ) : (\n batchableTransactions.map((transaction) => (\n \n \n \n ))\n )}\n \n \n {multiSendTx && }\n\n \n Be aware that if any of the included transactions revert, none of them will be executed. This will result in\n the loss of the allocated transaction fees.\n \n \n \n \n \n \n \n \n )\n})\n\nBatchExecute.displayName = 'BatchExecute'\n\nconst ModalContent = styled.div`\n padding: ${lg} ${lg} 0;\n`\n\nconst DecodeTxsWrapper = styled.div`\n width: 100%;\n`\n\nconst SkeletonWrapper = styled.div`\n overflow: hidden;\n border-radius: 8px;\n margin-bottom: 16px;\n\n &:last-child {\n margin-bottom: 0;\n }\n`\n","import { Loader, Title } from '@gnosis.pm/safe-react-components'\nimport { ReactElement, useEffect, useMemo } from 'react'\n\nimport Img from 'src/components/layout/Img'\nimport NoTransactionsImage from './assets/no-transactions.svg'\nimport { usePagedQueuedTransactions } from './hooks/usePagedQueuedTransactions'\nimport { QueueTxList } from './QueueTxList'\nimport { Centered, NoTransactions } from './styled'\nimport { TxsInfiniteScroll } from './TxsInfiniteScroll'\nimport { TxLocationContext } from './TxLocationProvider'\nimport { BatchExecute } from 'src/routes/safe/components/Transactions/TxList/BatchExecute'\nimport { trackEvent } from 'src/utils/googleTagManager'\nimport { TX_LIST_EVENTS } from 'src/utils/events/txList'\nimport { BatchExecuteHoverProvider } from 'src/routes/safe/components/Transactions/TxList/BatchExecuteHoverProvider'\n\nexport const QueueTransactions = (): ReactElement => {\n const { count, isLoading, next, transactions } = usePagedQueuedTransactions()\n\n const queuedTxCount = useMemo(\n () => (transactions ? transactions.next.count + transactions.queue.count : 0),\n [transactions],\n )\n useEffect(() => {\n if (queuedTxCount > 0) {\n trackEvent({\n ...TX_LIST_EVENTS.QUEUED_TXS,\n label: queuedTxCount,\n })\n }\n }, [queuedTxCount])\n\n if (count === 0 && isLoading) {\n return (\n \n \n \n )\n }\n\n // `loading` is, actually `!transactions`\n // added the `transaction` verification to prevent `Object is possibly 'undefined'` error\n if (count === 0 || !transactions) {\n return (\n \n \"No\n Queued transactions will appear here \n \n )\n }\n\n return (\n \n \n \n {/* Next list */}\n \n {transactions.next.count !== 0 && }\n \n\n {/* Queue list */}\n \n {transactions.queue.count !== 0 && }\n \n \n \n )\n}\n","export default __webpack_public_path__ + \"static/media/circle-cross-red.c9afa2b3.svg\";","export default __webpack_public_path__ + \"static/media/incoming.1bf5be26.svg\";","export default __webpack_public_path__ + \"static/media/outgoing.d744cc02.svg\";","export default __webpack_public_path__ + \"static/media/settings.0fea6f0c.svg\";","import { useEffect, useState } from 'react'\nimport { isTxQueued, Transaction } from 'src/logic/safe/store/models/types/gateway.d'\nimport CustomTxIcon from 'src/routes/safe/components/Transactions/TxList/assets/custom.svg'\nimport CircleCrossRed from 'src/routes/safe/components/Transactions/TxList/assets/circle-cross-red.svg'\nimport IncomingTxIcon from 'src/routes/safe/components/Transactions/TxList/assets/incoming.svg'\nimport OutgoingTxIcon from 'src/routes/safe/components/Transactions/TxList/assets/outgoing.svg'\nimport SettingsTxIcon from 'src/routes/safe/components/Transactions/TxList/assets/settings.svg'\nimport { getTxTo } from 'src/routes/safe/components/Transactions/TxList/utils'\nimport { useKnownAddress } from './useKnownAddress'\nimport useSafeAddress from 'src/logic/currentSession/hooks/useSafeAddress'\n\nexport type TxTypeProps = {\n icon?: string\n fallbackIcon?: string\n text?: string\n}\n\nexport const useTransactionType = (tx: Transaction): TxTypeProps => {\n const [type, setType] = useState({ icon: CustomTxIcon, text: 'Contract interaction' })\n const { safeAddress } = useSafeAddress()\n const toAddress = getTxTo(tx)\n const knownAddressBookAddress = useKnownAddress(toAddress)\n\n useEffect(() => {\n switch (tx.txInfo.type) {\n case 'Creation': {\n setType({ icon: toAddress?.logoUri || SettingsTxIcon, text: 'Walliro created' })\n break\n }\n case 'Transfer': {\n const isSendTx = tx.txInfo.direction === 'OUTGOING'\n\n setType({\n icon: isSendTx ? OutgoingTxIcon : IncomingTxIcon,\n text: isSendTx ? (isTxQueued(tx.txStatus) ? 'Send' : 'Sent') : 'Received',\n })\n break\n }\n case 'SettingsChange': {\n // deleteGuard doesn't exist in Solidity\n // It is decoded as 'setGuard' with a settingsInfo.type of 'DELETE_GUARD'\n const isDeleteGuard = tx.txInfo.settingsInfo?.type === 'DELETE_GUARD'\n setType({ icon: SettingsTxIcon, text: isDeleteGuard ? 'deleteGuard' : tx.txInfo.dataDecoded.method })\n break\n }\n case 'Custom': {\n // TODO: is this the only way to identify a 'module' transaction?\n if (!tx.executionInfo) {\n setType({ icon: SettingsTxIcon, text: 'Module' })\n break\n }\n\n if (tx.txInfo.isCancellation) {\n setType({ icon: CircleCrossRed, text: 'On-chain rejection' })\n break\n }\n\n if (tx.safeAppInfo) {\n setType({ icon: tx.safeAppInfo.logoUri, text: tx.safeAppInfo.name })\n break\n }\n\n setType({\n icon: knownAddressBookAddress.isInAddressBook\n ? CustomTxIcon\n : knownAddressBookAddress.logoUri || toAddress?.logoUri || CustomTxIcon,\n fallbackIcon: knownAddressBookAddress.isInAddressBook ? undefined : CustomTxIcon,\n text: knownAddressBookAddress.name || toAddress?.name || 'Contract interaction',\n })\n break\n }\n }\n }, [\n tx,\n safeAddress,\n knownAddressBookAddress.name,\n knownAddressBookAddress.logoUri,\n knownAddressBookAddress.isInAddressBook,\n toAddress?.logoUri,\n toAddress?.name,\n ])\n\n return type\n}\n","import { lg, md, secondaryText, sm } from 'src/theme/variables'\nimport { createStyles } from '@material-ui/core'\n\nexport const styles = createStyles({\n heading: {\n padding: `${md} ${lg}`,\n justifyContent: 'space-between',\n boxSizing: 'border-box',\n height: '74px',\n },\n annotation: {\n letterSpacing: '-1px',\n color: secondaryText,\n marginRight: 'auto',\n marginLeft: '20px',\n },\n headingText: {\n fontSize: lg,\n },\n closeIcon: {\n height: '24px',\n width: '24px',\n },\n container: {\n padding: `${md} ${lg}`,\n },\n amount: {\n marginLeft: sm,\n },\n address: {\n marginRight: sm,\n },\n buttonRow: {\n height: '52px',\n justifyContent: 'center',\n alignItems: 'center',\n gap: '16px',\n },\n})\n","import { ReactElement, useState, ChangeEvent, useCallback } from 'react'\nimport IconButton from '@material-ui/core/IconButton'\nimport Close from '@material-ui/icons/Close'\nimport { makeStyles } from '@material-ui/core/styles'\nimport { Text, Divider, Link, Icon } from '@gnosis.pm/safe-react-components'\nimport styled from 'styled-components'\n\nimport Field from 'src/components/forms/Field'\nimport TextField from 'src/components/forms/TextField'\nimport Block from 'src/components/layout/Block'\nimport Row from 'src/components/layout/Row'\nimport { styles } from './style'\nimport GnoForm from 'src/components/forms/GnoForm'\nimport { TxParameters } from 'src/routes/safe/container/hooks/useTransactionParameters'\nimport { composeValidators, maxValue, minValue } from 'src/components/forms/validator'\nimport { Modal } from 'src/components/Modal'\nimport {\n ParametersStatus,\n areSafeParamsEnabled,\n areEthereumParamsVisible,\n ethereumTxParametersTitle,\n isSpendingLimit,\n} from 'src/routes/safe/components/Transactions/helpers/utils'\nimport useSafeTxGas from 'src/routes/safe/components/Transactions/helpers/useSafeTxGas'\nimport { isMaxFeeParam } from 'src/logic/safe/transactions/gas'\nimport Paragraph from 'src/components/layout/Paragraph'\nimport InputAdornment from '@material-ui/core/InputAdornment'\nimport CircularProgress from '@material-ui/core/CircularProgress'\n\nconst StyledDivider = styled(Divider)`\n margin: 0;\n`\nconst StyledDividerFooter = styled(Divider)`\n margin: 16px -24px;\n`\n\nconst SafeOptions = styled.div`\n display: flex;\n justify-content: space-between;\n gap: 20px;\n`\n\nconst EthereumOptions = styled.div`\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 20px 12px;\n`\nconst StyledLink = styled(Link)`\n margin: 16px 0 0 0;\n display: inline-flex;\n align-items: center;\n\n > :first-of-type {\n margin-right: 5px;\n }\n`\nconst StyledText = styled(Text)`\n margin: 0 0 16px 0;\n`\n\nconst StyledTextMt = styled(Text)`\n margin: 16px 0;\n`\n\nconst useStyles = makeStyles(styles)\n\ninterface Props {\n txParameters: TxParameters\n onClose: (txParameters?: TxParameters) => void\n parametersStatus: ParametersStatus\n isExecution: boolean\n txType?: string\n}\n\nconst formValidation = (values: Record): Record => {\n const { ethGasLimit, ethGasPrice, ethMaxPrioFee, ethNonce, safeNonce, safeTxGas } = values ?? {}\n\n const ethGasLimitValidation = minValue(0, true)(ethGasLimit)\n\n const ethGasPriceValidation = minValue(0, true)(ethGasPrice)\n\n const ethMaxPrioFeeValidation = composeValidators(minValue(0, true), maxValue(ethGasPrice))(ethMaxPrioFee)\n\n const ethNonceValidation = minValue(0, true)(ethNonce)\n\n const safeNonceValidation = minValue(0, true)(safeNonce)\n\n const safeTxGasValidation = minValue(0, true)(safeTxGas)\n\n return {\n ethGasLimit: ethGasLimitValidation,\n ethGasPrice: ethGasPriceValidation,\n ethMaxPrioFee: ethMaxPrioFeeValidation,\n ethNonce: ethNonceValidation,\n safeNonce: safeNonceValidation,\n safeTxGas: safeTxGasValidation,\n }\n}\n\nexport const EditTxParametersForm = ({\n onClose,\n txParameters,\n parametersStatus = 'ENABLED',\n isExecution,\n txType,\n}: Props): ReactElement => {\n const classes = useStyles()\n const { safeNonce, safeTxGas, ethNonce, ethGasLimit, ethGasPrice, ethMaxPrioFee } = txParameters\n const showSafeTxGas = useSafeTxGas()\n const [manualSafeNonce, setManualSafeNonce] = useState()\n const isSpendingLimitTx = isSpendingLimit(txType)\n\n const onSubmit = (values: TxParameters) => {\n onClose(values)\n }\n\n const onCloseFormHandler = () => {\n onClose()\n }\n\n const handleSafeNonceChange = useCallback(\n (e: ChangeEvent) => setManualSafeNonce(e.target.value),\n [],\n )\n\n const hasChangedSafeNonce = manualSafeNonce !== undefined\n const showAdornment = !safeNonce && !hasChangedSafeNonce\n const loadingAdornment = showAdornment\n ? {\n endAdornment: (\n \n \n \n ),\n }\n : null\n\n return (\n <>\n {/* Header */}\n \n \n Advanced parameters\n \n \n \n \n \n\n \n\n \n \n {() => (\n <>\n {!isSpendingLimitTx && (\n <>\n \n Walliro transaction\n \n\n \n \n {showSafeTxGas && (\n \n )}\n \n \n )}\n\n {areEthereumParamsVisible(parametersStatus) && (\n <>\n \n {ethereumTxParametersTitle(isExecution)}\n \n\n \n \n \n {((gasPriceText) => (\n \n ))(`${isMaxFeeParam() ? 'Max fee per gas' : 'Gas price'} (GWEI)`)}\n\n {isMaxFeeParam() && (\n \n )}\n \n\n \n \n How can I configure these parameters manually?\n \n \n \n \n )}\n\n \n\n {/* Footer */}\n \n \n \n \n )}\n \n \n \n )\n}\n","import { useState, useEffect } from 'react'\nimport { TxParameters, useTransactionParameters } from 'src/routes/safe/container/hooks/useTransactionParameters'\nimport { EditTxParametersForm } from 'src/routes/safe/components/Transactions/helpers/EditTxParametersForm'\nimport { ParametersStatus } from './utils'\n\ntype Props = {\n children: (txParameters: TxParameters, toggleStatus: (txParameters?: TxParameters) => void) => any\n isExecution: boolean\n parametersStatus?: ParametersStatus\n ethGasLimit?: TxParameters['ethGasLimit']\n ethGasPrice?: TxParameters['ethGasPrice']\n ethMaxPrioFee?: TxParameters['ethMaxPrioFee']\n safeNonce?: TxParameters['safeNonce']\n safeTxGas?: TxParameters['safeTxGas']\n closeEditModalCallback?: (txParameters: TxParameters) => void\n txType?: string\n}\n\nexport const EditableTxParameters = ({\n children,\n isExecution,\n parametersStatus,\n ethGasLimit,\n ethGasPrice,\n ethMaxPrioFee,\n safeNonce,\n safeTxGas,\n closeEditModalCallback,\n txType,\n}: Props): React.ReactElement => {\n const [isEditMode, toggleEditMode] = useState(false)\n const [useManualValues, setUseManualValues] = useState(false)\n const defaultParameterStatus = isExecution ? 'ENABLED' : 'ETH_HIDDEN'\n const txParameters = useTransactionParameters({\n parametersStatus: parametersStatus || defaultParameterStatus,\n initialEthGasLimit: ethGasLimit,\n initialEthGasPrice: ethGasPrice,\n initialEthMaxPrioFee: ethMaxPrioFee,\n initialSafeNonce: safeNonce,\n initialSafeTxGas: safeTxGas,\n })\n const { setEthGasPrice, setEthGasLimit, setEthMaxPrioFee, setSafeNonce, setSafeTxGas, setEthNonce } = txParameters\n\n // Update TxParameters\n useEffect(() => {\n if (!useManualValues) {\n setEthGasLimit(ethGasLimit)\n setEthGasPrice(ethGasPrice)\n setEthMaxPrioFee(ethMaxPrioFee)\n setSafeTxGas(safeTxGas)\n }\n }, [\n ethGasLimit,\n setEthGasLimit,\n ethGasPrice,\n setEthGasPrice,\n useManualValues,\n safeTxGas,\n setSafeTxGas,\n setEthMaxPrioFee,\n ethMaxPrioFee,\n ])\n\n const toggleStatus = () => {\n toggleEditMode((prev) => !prev)\n }\n\n const closeEditFormHandler = (txParameters?: TxParameters) => {\n if (txParameters) {\n setUseManualValues(true)\n setSafeNonce(txParameters.safeNonce)\n setSafeTxGas(txParameters.safeTxGas)\n setEthGasLimit(txParameters.ethGasLimit)\n setEthGasPrice(txParameters.ethGasPrice)\n setEthMaxPrioFee(txParameters.ethMaxPrioFee)\n setEthNonce(txParameters.ethNonce)\n closeEditModalCallback && closeEditModalCallback(txParameters)\n }\n toggleStatus()\n }\n\n return isEditMode ? (\n \n ) : (\n children(txParameters, toggleStatus)\n )\n}\n","import { useEffect, useState } from 'react'\nimport { useSelector } from 'react-redux'\nimport { toWei } from 'web3-utils'\n\nimport { getUserNonce } from 'src/logic/wallets/ethTransactions'\nimport { userAccountSelector } from 'src/logic/wallets/store/selectors'\nimport { ParametersStatus } from 'src/routes/safe/components/Transactions/helpers/utils'\nimport { getRecommendedNonce } from 'src/logic/safe/api/fetchSafeTxGasEstimation'\nimport { Errors, logError } from 'src/logic/exceptions/CodedException'\nimport useSafeAddress from 'src/logic/currentSession/hooks/useSafeAddress'\n\nexport type TxParameters = {\n safeNonce?: string\n setSafeNonce: (safeNonce?: string) => void\n safeTxGas?: string\n setSafeTxGas: (gas?: string) => void\n ethNonce?: string\n setEthNonce: (ethNonce?: string) => void\n ethGasLimit?: string\n setEthGasLimit: (ethGasLimit?: string) => void\n ethGasPrice?: string\n setEthGasPrice: (ethGasPrice?: string) => void\n ethMaxPrioFee?: string\n setEthMaxPrioFee: (maxPrioFee?: string) => void\n ethGasPriceInGWei?: string\n ethMaxPrioFeeInGWei?: string\n}\n\ntype Props = {\n parametersStatus?: ParametersStatus\n initialSafeNonce?: string\n initialSafeTxGas?: string\n initialEthGasLimit?: string\n initialEthGasPrice?: string\n initialEthMaxPrioFee?: string\n}\n\n/**\n * This hooks is used to store tx parameter\n * It needs to be initialized calling setGasEstimation.\n */\nexport const useTransactionParameters = (props?: Props): TxParameters => {\n const connectedWalletAddress = useSelector(userAccountSelector)\n const { safeAddress } = useSafeAddress()\n\n // Safe Params\n const [safeNonce, setSafeNonce] = useState(props?.initialSafeNonce)\n // SafeTxGas: for a new Tx call requiredTxGas, for an existing tx get it from the backend.\n const [safeTxGas, setSafeTxGas] = useState(props?.initialSafeTxGas)\n\n // ETH Params\n const [ethNonce, setEthNonce] = useState() // we delegate it to the wallet\n const [ethGasLimit, setEthGasLimit] = useState(props?.initialEthGasLimit) // call execTx until it returns a number > 0\n const [ethGasPrice, setEthGasPrice] = useState(props?.initialEthGasPrice) // get fast gas price\n const [ethGasPriceInGWei, setEthGasPriceInGWei] = useState() // get fast gas price\n const [ethMaxPrioFee, setEthMaxPrioFee] = useState() // get max prio fee\n const [ethMaxPrioFeeInGWei, setEthMaxPrioFeeInGWei] = useState() // get max prio fee in gwei\n\n // Get nonce for connected wallet\n useEffect(() => {\n const getNonce = async () => {\n const res = await getUserNonce(connectedWalletAddress)\n setEthNonce(res.toString())\n }\n\n if (connectedWalletAddress) {\n getNonce()\n }\n }, [connectedWalletAddress])\n\n // Get ETH gas price\n useEffect(() => {\n if (!ethGasPrice) {\n setEthGasPriceInGWei(undefined)\n return\n }\n setEthGasPriceInGWei(toWei(ethGasPrice, 'Gwei'))\n }, [ethGasPrice])\n\n // Get max prio fee\n useEffect(() => {\n if (!ethMaxPrioFee) {\n setEthMaxPrioFee(undefined)\n return\n }\n setEthMaxPrioFeeInGWei(toWei(ethMaxPrioFee, 'Gwei'))\n }, [ethMaxPrioFee])\n\n // Calc safe nonce\n useEffect(() => {\n const getSafeNonce = async () => {\n if (safeAddress) {\n try {\n const recommendedNonce = (await getRecommendedNonce(safeAddress)).toString()\n setSafeNonce(recommendedNonce)\n } catch (e) {\n logError(Errors._616, e.message)\n }\n }\n }\n\n if (!safeNonce) {\n getSafeNonce()\n }\n }, [safeAddress, safeNonce])\n\n return {\n safeNonce,\n setSafeNonce,\n safeTxGas,\n setSafeTxGas,\n ethNonce,\n setEthNonce,\n ethGasLimit,\n setEthGasLimit,\n ethGasPrice,\n setEthGasPrice,\n ethMaxPrioFee,\n setEthMaxPrioFee,\n ethGasPriceInGWei,\n ethMaxPrioFeeInGWei,\n }\n}\n","import { ReactElement } from 'react'\nimport PrefixedEthHashInfo from '../PrefixedEthHashInfo'\n\ntype Props = {\n address: string\n iconUrl?: string\n iconUrlFallback?: string\n text?: string\n}\n\nexport const CustomIconText = ({ address, iconUrl, text, iconUrlFallback }: Props): ReactElement => (\n \n)\n","import { Icon, Tooltip } from '@gnosis.pm/safe-react-components'\nimport { MultisigExecutionInfo } from '@gnosis.pm/safe-react-gateway-sdk'\nimport { default as MuiIconButton } from '@material-ui/core/IconButton'\nimport { ReactElement } from 'react'\nimport { useSelector } from 'react-redux'\nimport styled from 'styled-components'\n\nimport { currentSafeNonce } from 'src/logic/safe/store/selectors'\nimport { Transaction } from 'src/logic/safe/store/models/types/gateway.d'\nimport { useActionButtonsHandlers } from './hooks/useActionButtonsHandlers'\nimport useTxStatus from 'src/logic/hooks/useTxStatus'\nimport { isAwaitingExecution } from './utils'\n\nconst IconButton = styled(MuiIconButton)`\n padding: 8px !important;\n\n &.Mui-disabled {\n opacity: 0.4;\n }\n`\n\ntype TxCollapsedActionsProps = {\n transaction: Transaction\n}\n\nexport const TxCollapsedActions = ({ transaction }: TxCollapsedActionsProps): ReactElement => {\n const {\n canCancel,\n handleConfirmButtonClick,\n handleCancelButtonClick,\n handleOnMouseEnter,\n handleOnMouseLeave,\n isPending,\n disabledActions,\n } = useActionButtonsHandlers(transaction)\n const nonce = useSelector(currentSafeNonce)\n const txStatus = useTxStatus(transaction)\n const isAwaitingEx = isAwaitingExecution(txStatus)\n\n const onExecuteOrConfirm = (event) => {\n handleOnMouseLeave()\n handleConfirmButtonClick(event)\n }\n\n const getTitle = () => {\n if (isAwaitingEx) {\n return (transaction.executionInfo as MultisigExecutionInfo)?.nonce === nonce\n ? 'Execute'\n : `Transaction with nonce ${nonce} needs to be executed first`\n }\n return 'Confirm'\n }\n\n return (\n <>\n \n \n \n \n \n \n \n {canCancel && (\n \n \n \n \n \n \n \n )}\n \n )\n}\n","import { Text } from '@gnosis.pm/safe-react-components'\nimport { TokenType } from '@gnosis.pm/safe-react-gateway-sdk'\nimport { ReactElement } from 'react'\nimport styled from 'styled-components'\n\nimport Img from 'src/components/layout/Img'\nimport NFTIcon from 'src/routes/safe/components/Balances/assets/nft_icon.png'\nimport TokenPlaceholder from 'src/routes/safe/components/Balances/assets/token_placeholder.svg'\nimport { TokenTransferAsset } from './hooks/useAssetInfo'\n\nconst Amount = styled(Text)`\n margin-left: 10px;\n line-height: 16px;\n max-width: 200px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n`\n\nconst AmountWrapper = styled.div`\n display: flex;\n align-items: center;\n`\n\nexport type TokenTransferAmountProps = {\n assetInfo: TokenTransferAsset\n}\n\nexport const TokenTransferAmount = ({ assetInfo }: TokenTransferAmountProps): ReactElement => {\n return (\n \n {\n error.currentTarget.onerror = null\n error.currentTarget.src = assetInfo.tokenType === TokenType.ERC721 ? NFTIcon : TokenPlaceholder\n }}\n src={assetInfo.logoUri}\n />\n {`${assetInfo.directionSign}${assetInfo.amountWithSymbol}`}\n \n )\n}\n","import { Dot, IconText as IconTextSrc, Loader, Text, Tooltip } from '@gnosis.pm/safe-react-components'\nimport { ThemeColors } from '@gnosis.pm/safe-react-components/dist/theme'\nimport { ReactElement, useContext, useRef } from 'react'\nimport styled from 'styled-components'\nimport { MultiSend, Custom } from '@gnosis.pm/safe-react-gateway-sdk'\nimport { useSelector } from 'react-redux'\n\nimport { CustomIconText } from 'src/components/CustomIconText'\nimport {\n isCustomTxInfo,\n isSettingsChangeTxInfo,\n LocalTransactionStatus,\n Transaction,\n} from 'src/logic/safe/store/models/types/gateway.d'\nimport { TxCollapsedActions } from './TxCollapsedActions'\nimport { formatDateTime, formatTime, formatTimeInWords } from 'src/utils/date'\nimport { sameString } from 'src/utils/strings'\nimport { AssetInfo, isTokenTransferAsset } from './hooks/useAssetInfo'\nimport { TransactionStatusProps } from './hooks/useTransactionStatus'\nimport { TxTypeProps } from './hooks/useTransactionType'\nimport { StyledGroupedTransactions, StyledTransaction } from './styled'\nimport { TokenTransferAmount } from './TokenTransferAmount'\nimport { TxsInfiniteScrollContext } from './TxsInfiniteScroll'\nimport { TxLocationContext } from './TxLocationProvider'\nimport { CalculatedVotes } from './TxQueueCollapsed'\nimport { getTxTo, isAwaitingExecution } from './utils'\nimport { userAccountSelector } from 'src/logic/wallets/store/selectors'\nimport { useKnownAddress } from './hooks/useKnownAddress'\nimport useTxStatus from 'src/logic/hooks/useTxStatus'\nimport Spacer from 'src/components/Spacer'\nimport { isSupportedMultiSendCall } from 'src/logic/safe/transactions/multisend'\n\nexport const TxInfo = ({ info, name }: { info: AssetInfo; name?: string }): ReactElement | null => {\n if (isTokenTransferAsset(info)) {\n return \n }\n\n if (isSettingsChangeTxInfo(info) && !isCustomTxInfo(info)) {\n const UNKNOWN_MODULE = 'Unknown module'\n\n switch (info.settingsInfo?.type) {\n case 'SET_FALLBACK_HANDLER':\n case 'ADD_OWNER':\n case 'REMOVE_OWNER':\n case 'SWAP_OWNER':\n case 'CHANGE_THRESHOLD':\n case 'CHANGE_IMPLEMENTATION':\n case 'SET_GUARD':\n case 'DELETE_GUARD':\n return \n case 'ENABLE_MODULE':\n case 'DISABLE_MODULE':\n return (\n \n {name || UNKNOWN_MODULE}\n \n )\n }\n }\n\n if (isCustomTxInfo(info)) {\n if (isSupportedMultiSendCall(info)) {\n return (\n \n {info.actionCount} {`action${(info as MultiSend).actionCount > 1 ? 's' : ''}`}\n \n )\n }\n\n return (\n \n {(info as Custom).methodName}\n \n )\n }\n return null\n}\n\nconst CircularProgressPainter = styled.div<{ color: ThemeColors }>`\n color: ${({ theme, color }) => theme.colors[color]};\n`\n\nconst SmallDot = styled(Dot)`\n height: 8px;\n width: 8px;\n background-color: ${({ theme, color }) => theme.colors[color]} !important;\n`\n\nconst IconText = styled(IconTextSrc)`\n p {\n font-weight: bold;\n }\n`\n\nconst TooltipContent = styled.div`\n width: max-content;\n`\n\ntype TxCollapsedProps = {\n transaction: Transaction\n isGrouped?: boolean\n nonce?: number\n type: TxTypeProps\n info?: AssetInfo\n time: number\n votes?: CalculatedVotes\n status: TransactionStatusProps\n}\n\nexport const TxCollapsed = ({\n transaction,\n isGrouped = false,\n nonce,\n type,\n info,\n time,\n votes,\n status,\n}: TxCollapsedProps): ReactElement => {\n const { txLocation } = useContext(TxLocationContext)\n const { ref, lastItemId } = useContext(TxsInfiniteScrollContext)\n const userAddress = useSelector(userAccountSelector)\n const toAddress = getTxTo(transaction)\n const toInfo = useKnownAddress(toAddress)\n const txStatus = useTxStatus(transaction)\n const isPending = txStatus === LocalTransactionStatus.PENDING\n const willBeReplaced = txStatus === LocalTransactionStatus.WILL_BE_REPLACED ? ' will-be-replaced' : ''\n\n const txCollapsedNonce = (\n
\n {nonce}\n
\n )\n\n const txCollapsedType = (\n
\n \n
\n )\n\n const txCollapsedInfo = (\n
{info && }
\n )\n\n const timestamp = useRef(null)\n\n const txCollapsedTime = (\n
\n \n \n {txLocation === 'history' ? formatTime(time) : formatTimeInWords(time)}\n \n \n
\n )\n\n const txCollapsedVotes = (\n
\n {votes && (\n votes.submitted ? 'secondaryLight' : 'primary'}\n iconType=\"owners\"\n iconSize=\"sm\"\n text={`${votes.votes}`}\n textSize=\"md\"\n />\n )}\n
\n )\n\n const txCollapsedActions = (\n
\n {!isPending && userAddress && txLocation !== 'history' && transaction && (\n \n )}\n
\n )\n\n // attaching ref to a div element as it was causing troubles to add a `ref` to a FunctionComponent\n const txCollapsedStatus = (\n
\n {isPending ? (\n \n \n \n ) : (\n isAwaitingExecution(txStatus) && \n )}\n \n {status.text}\n \n
\n )\n\n return isGrouped ? (\n \n {/* no nonce */}\n {txCollapsedType}\n {txCollapsedInfo}\n {txCollapsedTime}\n {txCollapsedVotes}\n {txCollapsedActions}\n {txCollapsedStatus}\n \n ) : (\n \n {txCollapsedNonce}\n {txCollapsedType}\n {txCollapsedInfo}\n {txCollapsedTime}\n {txCollapsedVotes}\n {txCollapsedActions}\n {txCollapsedStatus}\n \n )\n}\n","import { getWeb3ReadOnly } from 'src/logic/wallets/getWeb3'\nimport { BatchRequest } from 'web3-core'\nimport { AbiItem } from 'web3-utils'\n\n/**\n * Generates a batch request for grouping RPC calls\n * @param {object} args\n * @param {object} args.abi - contract ABI\n * @param {string} args.address - contract address\n * @param {object|undefined} args.batch - not required. If set, batch must be initialized outside (web3.BatchRequest)\n * @param {object|undefined} args.context - not required. Can be any object, to be added to the batch response\n * @param {array<{ args: [any], method: string, type: 'eth'|undefined } | string>} args.methods - methods to be called\n * @returns {Promise<[*]>}\n */\ntype MethodsArgsType = Array\n\ninterface Props {\n abi: AbiItem[]\n address: string\n batch?: BatchRequest\n context?: unknown\n methods: Array\n}\n\nconst generateBatchRequests = ({\n abi,\n address,\n batch,\n context,\n methods,\n}: Props): Promise => {\n const web3 = getWeb3ReadOnly()\n const contractInstance = new web3.eth.Contract(abi, address)\n const localBatch = new web3.BatchRequest()\n\n const values = methods.map((methodObject) => {\n let method,\n type,\n args: MethodsArgsType = []\n\n if (typeof methodObject === 'string') {\n method = methodObject\n } else {\n ;({ method, type, args } = methodObject)\n }\n\n return new Promise((resolve) => {\n const resolver = (error, result) => {\n if (error) {\n resolve(undefined)\n } else {\n resolve(result)\n }\n }\n\n try {\n let request\n if (type !== undefined) {\n request = web3[type][method].request(...args, resolver)\n } else {\n if (address === null) {\n resolve(undefined)\n return\n }\n request = contractInstance.methods[method](...args).call.request(resolver)\n }\n\n // If batch was provided add to external batch\n batch ? batch.add(request) : localBatch.add(request)\n } catch (e) {\n console.warn('There was an error trying to batch request from web3.', e)\n resolve(undefined)\n }\n })\n })\n\n // TODO fix this so all batch.execute() are handled here\n // If batch was created locally we can already execute it\n // If batch was provided we should execute once we finish to generate the batch,\n // in the outside function where the batch object is created.\n !batch && localBatch.execute()\n\n // @ts-ignore\n return Promise.all([context, ...values])\n}\n\nexport default generateBatchRequests\n","import { ChainId } from 'src/config/chain.d'\nimport { Operation } from '@gnosis.pm/safe-react-gateway-sdk'\nimport { BigNumber } from 'bignumber.js'\n\nimport { CreateTransactionArgs } from 'src/logic/safe/store/actions/createTransaction'\nimport { TX_NOTIFICATION_TYPES } from 'src/logic/safe/transactions'\nimport { enableModuleTx, isModuleEnabled } from 'src/logic/safe/utils/modules'\nimport generateBatchRequests from 'src/logic/contracts/generateBatchRequests'\nimport { getMultisendContractAddress } from 'src/logic/contracts/safeContracts'\nimport { SpendingLimit } from 'src/logic/safe/store/models/safe'\nimport { sameAddress, ZERO_ADDRESS } from 'src/logic/wallets/ethAddresses'\nimport { getWeb3ReadOnly } from 'src/logic/wallets/getWeb3'\nimport {\n getSpendingLimitModuleAddress,\n getSpendingLimitContract,\n getSpendingLimitModuleAbi,\n} from 'src/logic/contracts/spendingLimitContracts'\nimport { encodeMultiSendCall, MultiSendTx } from 'src/logic/safe/transactions/multisend'\nimport { fromTokenUnit } from 'src/logic/tokens/utils/humanReadableValue'\nimport { getBalanceAndDecimalsFromToken, GetTokenByAddress } from 'src/logic/tokens/utils/tokenHelpers'\nimport { sameString } from 'src/utils/strings'\nimport { Errors, CodedException } from 'src/logic/exceptions/CodedException'\n\nexport const currentMinutes = (): number => Math.floor(Date.now() / (1000 * 60))\n\nconst requestTokensByDelegate = async (\n safeAddress: string,\n delegates: string[],\n moduleAddress: string,\n): Promise<[string, string[] | undefined][]> => {\n const web3 = getWeb3ReadOnly()\n const batch = new web3.BatchRequest()\n const spendingLimitModuleAbi = getSpendingLimitModuleAbi()\n\n const whenRequestValues = delegates.map((delegateAddress: string) =>\n generateBatchRequests<[string, string[] | undefined]>({\n abi: spendingLimitModuleAbi,\n address: moduleAddress,\n methods: [{ method: 'getTokens', args: [safeAddress, delegateAddress] }],\n batch,\n context: delegateAddress,\n }),\n )\n\n batch.execute()\n\n return Promise.all(whenRequestValues)\n}\n\nexport type SpendingLimitRow = {\n delegate: string\n token: string\n amount: string\n spent: string\n resetTimeMin: string\n lastResetMin: string\n nonce: string\n}\n\nconst ZERO_VALUE = '0'\n\n/**\n * Deleted Allowance have their `amount` and `resetTime` set to `0` (zero)\n * @param {SpendingLimitRow} allowance\n * @returns boolean\n */\nconst discardZeroAllowance = ({ amount, resetTimeMin }: SpendingLimitRow): boolean =>\n !(sameString(amount, ZERO_VALUE) && sameString(resetTimeMin, ZERO_VALUE))\n\ntype TokenSpendingLimit = [string, string, string, string, string]\n\ntype TokenSpendingLimitContext = {\n delegate: string\n token: string\n}\n\ntype TokenSpendingLimitRequest = [TokenSpendingLimitContext, TokenSpendingLimit | undefined]\n\nconst requestAllowancesByDelegatesAndTokens = async (\n safeAddress: string,\n tokensByDelegate: [string, string[] | undefined][],\n moduleAddress: string,\n): Promise => {\n const web3 = getWeb3ReadOnly()\n const batch = new web3.BatchRequest()\n const spendingLimitModuleAbi = getSpendingLimitModuleAbi()\n\n const whenRequestValues: Promise[] = []\n\n for (const [delegate, tokens] of tokensByDelegate) {\n if (tokens) {\n for (const token of tokens) {\n whenRequestValues.push(\n generateBatchRequests<[TokenSpendingLimitContext, TokenSpendingLimit]>({\n abi: spendingLimitModuleAbi,\n address: moduleAddress,\n methods: [{ method: 'getTokenAllowance', args: [safeAddress, delegate, token] }],\n batch,\n context: { delegate, token },\n }),\n )\n }\n }\n }\n\n batch.execute()\n\n return Promise.all(whenRequestValues).then((allowances) =>\n allowances\n // first, we filter out those records whose tokenSpendingLimit is undefined\n .filter(([, tokenSpendingLimit]) => tokenSpendingLimit)\n // then, we build the SpendingLimitRow object\n .map(([{ delegate, token }, tokenSpendingLimit]) => {\n const [amount, spent, resetTimeMin, lastResetMin, nonce] = tokenSpendingLimit as TokenSpendingLimit\n\n return {\n delegate,\n token,\n amount,\n spent,\n resetTimeMin,\n lastResetMin,\n nonce,\n }\n })\n .filter(discardZeroAllowance),\n )\n}\n\nexport const getSpendingLimits = async (\n modules: string[],\n safeAddress: string,\n chainId: ChainId,\n): Promise => {\n const spendingLimitModuleAddress = getSpendingLimitModuleAddress(chainId)\n if (!spendingLimitModuleAddress) return null\n\n const isSpendingLimitEnabled = isModuleEnabled(modules, spendingLimitModuleAddress)\n if (!isSpendingLimitEnabled) return null\n\n try {\n const delegates = await getSpendingLimitContract(spendingLimitModuleAddress)\n .methods.getDelegates(safeAddress, 0, 100)\n .call()\n const tokensByDelegate = await requestTokensByDelegate(safeAddress, delegates.results, spendingLimitModuleAddress)\n const limits = await requestAllowancesByDelegatesAndTokens(\n safeAddress,\n tokensByDelegate,\n spendingLimitModuleAddress,\n )\n return limits\n } catch (error) {\n throw new CodedException(Errors._609, error.message)\n }\n}\n\ntype DeleteAllowanceParams = {\n beneficiary: string\n tokenAddress: string\n}\n\nexport const getDeleteAllowanceTxData = ({ beneficiary, tokenAddress }: DeleteAllowanceParams): string => {\n // we only encode the data so the address doesn't matter\n const spendingLimitContract = getSpendingLimitContract(ZERO_ADDRESS)\n\n return spendingLimitContract.methods.deleteAllowance(beneficiary, tokenAddress).encodeABI()\n}\n\nexport const enableSpendingLimitModuleMultiSendTx = async (\n safeAddress: string,\n safeVersion: string,\n connectedWalletAddress: string,\n moduleAddress: string,\n): Promise => {\n const multiSendTx = await enableModuleTx({\n moduleAddress,\n safeAddress,\n safeVersion,\n connectedWalletAddress,\n })\n\n return {\n to: multiSendTx.to,\n value: multiSendTx.valueInWei,\n data: multiSendTx.txData as string,\n }\n}\n\nexport const addSpendingLimitBeneficiaryMultiSendTx = (beneficiary: string, moduleAddress: string): MultiSendTx => {\n const spendingLimitContract = getSpendingLimitContract(moduleAddress)\n\n return {\n to: moduleAddress,\n value: '0',\n data: spendingLimitContract.methods.addDelegate(beneficiary).encodeABI(),\n }\n}\n\nexport const getResetSpendingLimitTx = (beneficiary: string, token: string, moduleAddress: string): MultiSendTx => {\n const spendingLimitContract = getSpendingLimitContract(moduleAddress)\n\n return {\n to: moduleAddress,\n value: '0',\n data: spendingLimitContract.methods.resetAllowance(beneficiary, token).encodeABI(),\n }\n}\n\ntype SpendingLimitTxParams = {\n spendingLimitArgs: {\n beneficiary: string\n token: string\n spendingLimitInWei: string\n resetTimeMin: number\n resetBaseMin: number\n }\n safeAddress: string\n moduleAddress: string\n}\n\nexport const setSpendingLimitTx = ({\n spendingLimitArgs: { beneficiary, token, spendingLimitInWei, resetTimeMin, resetBaseMin },\n safeAddress,\n moduleAddress,\n}: SpendingLimitTxParams): CreateTransactionArgs => {\n const spendingLimitContract = getSpendingLimitContract(moduleAddress)\n\n const txArgs: CreateTransactionArgs = {\n safeAddress,\n to: moduleAddress,\n valueInWei: ZERO_VALUE,\n txData: spendingLimitContract.methods\n .setAllowance(beneficiary, token, spendingLimitInWei, resetTimeMin, resetBaseMin)\n .encodeABI(),\n operation: Operation.CALL,\n notifiedTransaction: TX_NOTIFICATION_TYPES.NEW_SPENDING_LIMIT_TX,\n }\n\n return txArgs\n}\n\nexport const setSpendingLimitMultiSendTx = (args: SpendingLimitTxParams): MultiSendTx => {\n const tx = setSpendingLimitTx(args)\n\n return {\n to: tx.to,\n value: tx.valueInWei,\n data: tx.txData as string,\n }\n}\n\ntype SpendingLimitMultiSendTx = {\n transactions: Array\n safeAddress: string\n}\nexport const spendingLimitMultiSendTx = ({\n transactions,\n safeAddress,\n}: SpendingLimitMultiSendTx): CreateTransactionArgs => ({\n safeAddress,\n to: getMultisendContractAddress(),\n valueInWei: ZERO_VALUE,\n txData: encodeMultiSendCall(transactions),\n notifiedTransaction: TX_NOTIFICATION_TYPES.NEW_SPENDING_LIMIT_TX,\n operation: Operation.DELEGATE,\n})\n\ntype SpendingLimitAllowedBalance = GetTokenByAddress & {\n tokenSpendingLimit: SpendingLimit\n}\n\n/**\n * Calculates the remaining amount available for a particular SpendingLimit\n * @param {string} tokenAddress\n * @param {SpendingLimit} tokenSpendingLimit\n * @param {List} tokens\n * returns string\n */\nexport const spendingLimitAllowedBalance = ({\n tokenAddress,\n tokenSpendingLimit,\n tokens,\n}: SpendingLimitAllowedBalance): string | number => {\n const token = getBalanceAndDecimalsFromToken({ tokenAddress, tokens })\n\n if (!token) {\n return 0\n }\n\n const { balance, decimals } = token\n const diff = new BigNumber(tokenSpendingLimit.amount).minus(tokenSpendingLimit.spent).toString()\n const diffInFPNotation = fromTokenUnit(diff, decimals)\n\n return new BigNumber(balance).gt(diffInFPNotation) ? diffInFPNotation : balance\n}\n\ntype GetSpendingLimitByTokenAddress = {\n spendingLimits?: SpendingLimit[] | null\n tokenAddress?: string\n}\n\n/**\n * Returns the SpendingLimit info for the specified tokenAddress\n * @param {SpendingLimit[] | undefined | null} spendingLimits\n * @param {string | undefined} tokenAddress\n * @returns SpendingLimit | undefined\n */\nexport const getSpendingLimitByTokenAddress = ({\n spendingLimits,\n tokenAddress,\n}: GetSpendingLimitByTokenAddress): SpendingLimit | undefined => {\n if (!tokenAddress || !spendingLimits) {\n return\n }\n\n return spendingLimits.find(({ token }) => sameAddress(token, tokenAddress))\n}\n","import { getOwnedSafes } from '@gnosis.pm/safe-react-gateway-sdk'\n\nimport { _getChainId } from 'src/config'\nimport { checksumAddress } from 'src/utils/checksumAddress'\n\nexport const fetchSafesByOwner = async (ownerAddress: string): Promise => {\n return getOwnedSafes(_getChainId(), checksumAddress(ownerAddress)).then(({ safes }) => safes)\n}\n","import { useEffect } from 'react'\nimport { useSelector } from 'react-redux'\nimport { userAccountSelector } from 'src/logic/wallets/store/selectors'\nimport { fetchSafesByOwner } from 'src/logic/safe/api/fetchSafesByOwner'\nimport { Errors, logError } from 'src/logic/exceptions/CodedException'\nimport { currentChainId } from 'src/logic/config/store/selectors'\nimport useCachedState from 'src/utils/storage/useCachedState'\n\ntype OwnedSafesCache = Record>\n\nconst storageKey = 'ownedSafes'\n\nconst useOwnerSafes = (): Record => {\n const connectedWalletAddress = useSelector(userAccountSelector)\n const chainId = useSelector(currentChainId)\n const [cache = {}, setCache] = useCachedState(storageKey)\n const ownerSafes = cache[connectedWalletAddress] || {}\n\n useEffect(() => {\n if (!connectedWalletAddress) {\n return\n }\n\n const load = async () => {\n try {\n const safes = await fetchSafesByOwner(connectedWalletAddress)\n\n setCache((prev = {}) => ({\n ...prev,\n [connectedWalletAddress]: {\n ...(prev[connectedWalletAddress] || {}),\n [chainId]: safes,\n },\n }))\n } catch (err) {\n logError(Errors._610, err.message)\n }\n }\n\n load()\n }, [chainId, connectedWalletAddress, setCache])\n\n return ownerSafes\n}\n\nexport default useOwnerSafes\n","import { ChainInfo, getChainsConfig, RPC_AUTHENTICATION } from '@gnosis.pm/safe-react-gateway-sdk'\nimport { setWeb3ReadOnly } from 'src/logic/wallets/getWeb3'\n\n// Cache is required as loading Redux store directly is an anit-pattern\nlet chains: ChainInfo[] = []\n\nexport const getChains = (): ChainInfo[] => chains\n\nexport const loadChains = async () => {\n const { results = [] } = await getChainsConfig()\n\n chains = results\n // Set the initail web3 provider after loading chains\n setWeb3ReadOnly()\n}\n\n// An empty template is required because `getChain()` uses `find()` on load\nexport const emptyChainInfo: ChainInfo = {\n transactionService: '',\n chainId: '',\n chainName: '',\n shortName: '',\n l2: false,\n description: '',\n rpcUri: { authentication: '' as RPC_AUTHENTICATION, value: '' },\n publicRpcUri: { authentication: '' as RPC_AUTHENTICATION, value: '' },\n safeAppsRpcUri: { authentication: '' as RPC_AUTHENTICATION, value: '' },\n blockExplorerUriTemplate: {\n address: '',\n txHash: '',\n api: '',\n },\n nativeCurrency: {\n name: '',\n symbol: '',\n decimals: 0,\n logoUri: '',\n },\n theme: { textColor: '', backgroundColor: '' },\n ensRegistryAddress: '',\n gasPrice: [],\n disabledWallets: [],\n features: [],\n}\n","import { useSelector } from 'react-redux'\nimport { getRecommendedNonce } from 'src/logic/safe/api/fetchSafeTxGasEstimation'\nimport { getLastTxNonce } from 'src/logic/safe/store/selectors/gatewayTransactions'\nimport useAsync from 'src/logic/hooks/useAsync'\n\nconst useRecommendedNonce = (safeAddress: string): number => {\n const lastTxNonce = useSelector(getLastTxNonce) || -1\n\n const [result] = useAsync(() => {\n return getRecommendedNonce(safeAddress)\n }, [safeAddress])\n\n return result == null ? lastTxNonce + 1 : result\n}\n\nexport default useRecommendedNonce\n","import { ReactElement } from 'react'\nimport { useSelector } from 'react-redux'\nimport styled from 'styled-components'\n\nimport Paragraph from 'src/components/layout/Paragraph'\nimport { lg } from 'src/theme/variables'\nimport { TransactionFailText } from '../TransactionFailText'\nimport { EstimationStatus } from 'src/logic/hooks/useEstimateTransactionGas'\nimport useRecommendedNonce from 'src/logic/hooks/useRecommendedNonce'\nimport { currentSafeWithNames } from 'src/logic/safe/store/selectors'\n\nconst ReviewInfoTextWrapper = styled.div`\n padding: 0 ${lg};\n`\n\ntype ReviewInfoTextProps = {\n txEstimationExecutionStatus: EstimationStatus\n isExecution: boolean\n isCreation: boolean\n isRejection: boolean\n safeNonce?: string\n testId?: string\n}\n\nexport const ReviewInfoText = ({\n isCreation,\n isExecution,\n isRejection,\n safeNonce = '',\n testId,\n txEstimationExecutionStatus,\n}: ReviewInfoTextProps): ReactElement => {\n const safeTxNonce = parseInt(safeNonce, 10)\n const { address: safeAddress } = useSelector(currentSafeWithNames)\n const recommendedNonce = useRecommendedNonce(safeAddress)\n\n const isTxNonceOutOfOrder = () => {\n // safeNonce can be undefined while waiting for the request.\n if (isNaN(safeTxNonce)) return false\n if (safeTxNonce === recommendedNonce) return false\n return true\n }\n\n const getWarning = (): ReactElement | null => {\n if (!isCreation || isRejection) return null\n if (!isTxNonceOutOfOrder()) return null\n\n const transactionsToGo = safeTxNonce - recommendedNonce\n\n return (\n \n {transactionsToGo > 0 ? (\n /* tx in the future */ <>\n {transactionsToGo}\n  {`transaction${transactionsToGo > 1 ? 's' : ''}`} will need to be created and executed before\n this transaction, are you sure you want to do this?\n \n ) : (\n /* tx in the past */ <>\n Nonce \n {safeTxNonce}\n  is below the latest transaction's nonce in your queue. Please verify the submitted nonce. The\n next recommended nonce is  \n {recommendedNonce}.\n \n )}\n \n )\n }\n\n return (\n \n {getWarning() || (\n \n You're about to {isCreation ? 'create' : isExecution ? 'execute' : 'approve'} a{' '}\n {isRejection ? 'rejection ' : ''}transaction and will have to confirm it with your currently connected wallet.\n \n )}\n \n \n )\n}\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"col\":\"Col_col__2uAt9\",\"inherit\":\"Col_inherit__2PZBu\",\"block\":\"Col_block__13RYT\",\"column\":\"Col_column__3XWPu\",\"overflow\":\"Col_overflow__xyvT1\",\"marginSm\":\"Col_marginSm__3wO4A\",\"marginMd\":\"Col_marginMd__wWkmt\",\"marginLg\":\"Col_marginLg__2gBLE\",\"marginXl\":\"Col_marginXl__2_0si\",\"xs1\":\"Col_xs1__2DIXq\",\"xs2\":\"Col_xs2__2b4ha\",\"xs3\":\"Col_xs3__3veM8\",\"xs4\":\"Col_xs4__3v5Fi\",\"xs5\":\"Col_xs5__2wiHN\",\"xs6\":\"Col_xs6__3blBr\",\"xs7\":\"Col_xs7__2yM8r\",\"xs8\":\"Col_xs8__lJRKL\",\"xs9\":\"Col_xs9__37yZl\",\"xs10\":\"Col_xs10__3eR2W\",\"xs11\":\"Col_xs11__2673q\",\"xs12\":\"Col_xs12__39gDu\",\"xsOffset1\":\"Col_xsOffset1__emD2R\",\"xsOffset2\":\"Col_xsOffset2__z8B6E\",\"xsOffset3\":\"Col_xsOffset3__3Yah4\",\"xsOffset4\":\"Col_xsOffset4__2HnrL\",\"xsOffset5\":\"Col_xsOffset5__3pjMe\",\"xsOffset6\":\"Col_xsOffset6__VmAfp\",\"xsOffset7\":\"Col_xsOffset7__3lZeq\",\"xsOffset8\":\"Col_xsOffset8__184LM\",\"xsOffset9\":\"Col_xsOffset9__19dZ0\",\"xsOffset10\":\"Col_xsOffset10__NptEA\",\"xsOffset11\":\"Col_xsOffset11__1Pf-Q\",\"xs\":\"Col_xs__hB5NU\",\"sm1\":\"Col_sm1__Aitd7\",\"sm2\":\"Col_sm2__jFYbx\",\"sm3\":\"Col_sm3__3R7-j\",\"sm4\":\"Col_sm4__SRU87\",\"sm5\":\"Col_sm5__Il2Xi\",\"sm6\":\"Col_sm6__3lcf8\",\"sm7\":\"Col_sm7__1Zjpl\",\"sm8\":\"Col_sm8__1ZnbG\",\"sm9\":\"Col_sm9__2gS4p\",\"sm10\":\"Col_sm10__lF7f6\",\"sm11\":\"Col_sm11__1T7WL\",\"sm12\":\"Col_sm12__2AeDt\",\"smOffset1\":\"Col_smOffset1__3rxfm\",\"smOffset2\":\"Col_smOffset2__2U_QS\",\"smOffset3\":\"Col_smOffset3__2lgl2\",\"smOffset4\":\"Col_smOffset4__h47Qg\",\"smOffset5\":\"Col_smOffset5__3TSSZ\",\"smOffset6\":\"Col_smOffset6__3-MgC\",\"smOffset7\":\"Col_smOffset7__3BkFT\",\"smOffset8\":\"Col_smOffset8__1TuhR\",\"smOffset9\":\"Col_smOffset9__1dOUT\",\"smOffset10\":\"Col_smOffset10__2Q_0h\",\"smOffset11\":\"Col_smOffset11__2PXPK\",\"sm\":\"Col_sm__HUulv\",\"md1\":\"Col_md1__3cwKX\",\"md2\":\"Col_md2__2HrBB\",\"md3\":\"Col_md3__2tIdo\",\"md4\":\"Col_md4__1ZY9R\",\"md5\":\"Col_md5__14jCO\",\"md6\":\"Col_md6__X758L\",\"md7\":\"Col_md7__1xUuL\",\"md8\":\"Col_md8__3_bTC\",\"md9\":\"Col_md9__1hcNA\",\"md10\":\"Col_md10__1jcOp\",\"md11\":\"Col_md11__395md\",\"md12\":\"Col_md12__159mZ\",\"mdOffset1\":\"Col_mdOffset1__1TjnL\",\"mdOffset2\":\"Col_mdOffset2__2dVBs\",\"mdOffset3\":\"Col_mdOffset3__3YvcM\",\"mdOffset4\":\"Col_mdOffset4__2DZKJ\",\"mdOffset5\":\"Col_mdOffset5__27VBt\",\"mdOffset6\":\"Col_mdOffset6__17OTj\",\"mdOffset7\":\"Col_mdOffset7__1zZK8\",\"mdOffset8\":\"Col_mdOffset8__Gn0WB\",\"mdOffset9\":\"Col_mdOffset9__bFOIJ\",\"mdOffset10\":\"Col_mdOffset10__3r2TX\",\"mdOffset11\":\"Col_mdOffset11__1mbOJ\",\"md\":\"Col_md__3bRU5\",\"lg1\":\"Col_lg1__2F2l_\",\"lg2\":\"Col_lg2__3BFNK\",\"lg3\":\"Col_lg3__1QLwH\",\"lg4\":\"Col_lg4__1wotI\",\"lg5\":\"Col_lg5__2skqF\",\"lg6\":\"Col_lg6__m_tN9\",\"lg7\":\"Col_lg7__2zVUO\",\"lg8\":\"Col_lg8__PgSkl\",\"lg9\":\"Col_lg9__3wEwp\",\"lg10\":\"Col_lg10__1nhB6\",\"lg11\":\"Col_lg11__1Pzff\",\"lg12\":\"Col_lg12__2bb5d\",\"lgOffset1\":\"Col_lgOffset1__gUg5_\",\"lgOffset2\":\"Col_lgOffset2__3lEUQ\",\"lgOffset3\":\"Col_lgOffset3__3UeSR\",\"lgOffset4\":\"Col_lgOffset4__2JuHx\",\"lgOffset5\":\"Col_lgOffset5__p5UyW\",\"lgOffset6\":\"Col_lgOffset6__1o4Ma\",\"lgOffset7\":\"Col_lgOffset7__2uJfG\",\"lgOffset8\":\"Col_lgOffset8__3MKDx\",\"lgOffset9\":\"Col_lgOffset9__3CgSd\",\"lgOffset10\":\"Col_lgOffset10__19CNp\",\"lgOffset11\":\"Col_lgOffset11__3SCUg\",\"lg\":\"Col_lg__2vXDE\",\"startXs\":\"Col_startXs__2CYbr\",\"centerXs\":\"Col_centerXs__33uNz\",\"endXs\":\"Col_endXs__1WaeD\",\"topXs\":\"Col_topXs__18s3g\",\"middleXs\":\"Col_middleXs__r7s46\",\"bottomXs\":\"Col_bottomXs__3uObS\",\"aroundXs\":\"Col_aroundXs__3Ps6x\",\"betweenXs\":\"Col_betweenXs__1XW4F\",\"startSm\":\"Col_startSm__2_rPF\",\"centerSm\":\"Col_centerSm__ZANjj\",\"endSm\":\"Col_endSm__-BbAz\",\"topSm\":\"Col_topSm__2M4mH\",\"middleSm\":\"Col_middleSm__2jjMM\",\"bottomSm\":\"Col_bottomSm__MzSmc\",\"aroundSm\":\"Col_aroundSm__lnuJK\",\"betweenSm\":\"Col_betweenSm__3F1kg\",\"startMd\":\"Col_startMd__3awX3\",\"centerMd\":\"Col_centerMd__3PbDX\",\"endMd\":\"Col_endMd__CsyKE\",\"topMd\":\"Col_topMd__dx9tF\",\"middleMd\":\"Col_middleMd__2ZRCa\",\"bottomMd\":\"Col_bottomMd__57r0p\",\"aroundMd\":\"Col_aroundMd__1oIH-\",\"betweenMd\":\"Col_betweenMd__2MMaI\",\"startLg\":\"Col_startLg__3Gnhm\",\"centerLg\":\"Col_centerLg__3N87N\",\"endLg\":\"Col_endLg__FoJ7R\",\"topLg\":\"Col_topLg__1xRQW\",\"middleLg\":\"Col_middleLg__17ymX\",\"bottomLg\":\"Col_bottomLg__2bKN5\",\"aroundLg\":\"Col_aroundLg__3NoOA\",\"betweenLg\":\"Col_betweenLg__usK98\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"xs\":\"Block_xs__fEcTe\",\"sm\":\"Block_sm__36ZTG\",\"md\":\"Block_md__1e1bi\",\"lg\":\"Block_lg__2OwPF\",\"xl\":\"Block_xl__2Z1dU\",\"paddingXs\":\"Block_paddingXs__268eK\",\"paddingSm\":\"Block_paddingSm__3AmI4\",\"paddingMd\":\"Block_paddingMd__c_-DR\",\"paddingLg\":\"Block_paddingLg__26K9p\",\"paddingXl\":\"Block_paddingXl__3XuXs\",\"center\":\"Block_center__sAsfG\",\"left\":\"Block_left__MiKpo\",\"space-around\":\"Block_space-around__8poj9\",\"right\":\"Block_right__1mu-J\"};","import { isValidShortChainName } from 'src/routes/routes'\nimport { isAddress, isHexStrict } from 'web3-utils'\nimport { parsePrefixedAddress } from './prefixedAddress'\n\nexport const isValidAddress = (address?: string): boolean => {\n if (address) {\n // `isAddress` do not require the string to start with `0x`\n // `isHexStrict` ensures the address to start with `0x` aside from being a valid hex string\n return isHexStrict(address) && isAddress(address)\n }\n\n return false\n}\n\nexport const isValidPrefixedAddress = (value?: string): boolean => {\n if (!value || typeof value !== 'string') {\n return false\n }\n\n const { prefix, address } = parsePrefixedAddress(value)\n\n return isValidShortChainName(prefix) && isValidAddress(address)\n}\n","import abi from 'ethereumjs-abi'\n\nimport { CONTRACT_ERRORS, CONTRACT_ERROR_CODES } from 'src/logic/contracts/contracts.d'\nimport { getWeb3 } from 'src/logic/wallets/getWeb3'\nimport { GnosisSafe } from 'src/types/contracts/gnosis_safe.d'\nimport { logError, Errors } from '../exceptions/CodedException'\n\nconst GENERIC_FAILED_TX_MSG = 'unable to decode contract error message'\n\nexport const decodeMessage = (message: string): string | null => {\n const code = CONTRACT_ERROR_CODES.find((code) => {\n return message.toUpperCase().includes(code.toUpperCase())\n })\n\n return code ? `${code}: ${CONTRACT_ERRORS[code]}` : null\n}\n\nexport const getContractErrorMessage = async ({\n safeInstance,\n from,\n data,\n}: {\n safeInstance: GnosisSafe\n from: string\n data: string\n}): Promise => {\n const web3 = getWeb3()\n\n try {\n const returnData = await web3.eth.call({\n to: safeInstance.options.address,\n from,\n value: 0,\n data,\n })\n\n const returnBuffer = Buffer.from(returnData.slice(2), 'hex')\n\n const contractOutput = abi.rawDecode(['string'], returnBuffer.slice(4))[0]\n return decodeMessage(contractOutput) || contractOutput\n } catch (err) {\n logError(Errors._817, err.message)\n return GENERIC_FAILED_TX_MSG\n }\n}\n","import { useEffect } from 'react'\n\nconst HIDE_PAIRING_STYLE = '.bn-onboard-modal-select-wallets li:first-of-type {display: none;}'\n\nconst HidePairingModule = (): null => {\n useEffect(() => {\n const style = document.createElement('style')\n style.innerHTML = HIDE_PAIRING_STYLE\n document.head.appendChild(style)\n\n return () => {\n style.remove()\n }\n }, [])\n\n return null\n}\n\nexport default HidePairingModule\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"heading\":\"Heading_heading__3Wz9P\",\"h1\":\"Heading_h1__MXfCA\",\"h2\":\"Heading_h2__3X6Ts\",\"h3\":\"Heading_h3__1k2fD\",\"h4\":\"Heading_h4__1YCmR\",\"center\":\"Heading_center__28MHY\",\"right\":\"Heading_right__1fQM1\",\"truncate\":\"Heading_truncate__2Lq93\",\"marginSm\":\"Heading_marginSm__13YwX\",\"marginMd\":\"Heading_marginMd__2AnZN\",\"marginLg\":\"Heading_marginLg__2ZfEq\",\"marginXl\":\"Heading_marginXl__3RHt7\",\"soft\":\"Heading_soft__2Zu43\",\"medium\":\"Heading_medium__2X8Z-\",\"dark\":\"Heading_dark__Ds2QB\",\"fancy\":\"Heading_fancy__1Wx6l\",\"warning\":\"Heading_warning__2lrZC\",\"primary\":\"Heading_primary__2hOk2\",\"secondary\":\"Heading_secondary__37lKs\",\"disabled\":\"Heading_disabled__30DjG\",\"error\":\"Heading_error__t5ujr\",\"white\":\"Heading_white__2gkIK\"};","import styled from 'styled-components'\nimport { boldFont, gray500, grey400, lg, sm, xs } from 'src/theme/variables'\nimport { makeStyles } from '@material-ui/core'\n\nexport const Header = styled.header<{ $bgUri: string }>`\n background-color: ${(props) => props.theme.colors.primaryLight};\n background-image: ${(props) => `url(\"${props.$bgUri}\")`};\n background-size: cover;\n background-position: center;\n position: relative;\n z-index: 1;\n display: flex;\n // &:after {\n // content: \"\";\n // position: absolute;\n // top: 0;\n // left: 0;\n // width: 101%;\n // height: 315px;\n // background: rgba(var(--Mprimary), 0.8);\n // background: linear-gradient(to bottom, rgba(var(--Mprimary), 0.3) 0%, rgba(var(--Mprimary), 1) 100%);\n // z-index: -1;\n // }\n`\n\nexport const Heading = styled.div`\n background-color: ${gray500};\n border-radius: 8px;\n text-align: center;\n min-height: 140px;\n overflow: auto;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n h1 {\n font-size: 24px;\n font-weight: bold;\n margin-bottom: 0;\n }\n`\n\nexport const StepList = styled.div`\n position: absolute;\n z-index: 1;\n top: 100%;\n left: 0;\n right: 0;\n width: 80%;\n margin: auto;\n transform: translateY(-50%);\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: space-between;\n @media (max-width: 599px) {\n display: none;\n }\n`\n\nexport const StepLabel = styled.button`\n width: 68px;\n height: 68px;\n border-radius: 50%;\n background-color: ${gray500};\n box-shadow: none !important;\n border: none !important;\n /* background-color: rgba(var(--Mblue), 1); */\n color: ${(props) => props.theme.colors.primary};\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 32px;\n font-weight: bold;\n transition: all 0.6s cubic-bezier(0.16, 1, 0.3, 1);\n`\nexport const StepBox = styled.div<{ $isActive?: boolean }>`\n flex: 1 0 0;\n display: flex;\n align-items: center;\n justify-content: center;\n position: relative;\n z-index: 1;\n &:not(:first-child)::after,\n &:not(:first-child)::before {\n }\n &:not(:first-child)::after {\n content: '';\n position: absolute;\n z-index: -1;\n top: 50%;\n left: 0;\n transform: translate(calc(-50% + (68px / 2) - 1px), -50%);\n height: 20px;\n width: 100%;\n background-color: ${grey400};\n transition: all 0.6s cubic-bezier(0.16, 1, 0.3, 1);\n }\n ${(props) => {\n if (props.$isActive) {\n return `\n &:not(:first-child)::after{\n background-color: ${props.theme.colors.primary};\n }\n ${StepLabel}{\n background-color: ${props.theme.colors.primary};\n color: ${props.theme.colors.white};\n }\n `\n }\n {\n return ''\n }\n }}\n`\n\nexport const useStyles = makeStyles((theme) => ({\n root: {\n margin: '10px 0 10px 10px',\n boxShadow: '0 0 10px 0 rgba(33,48,77,0.10)',\n },\n controlStyle: {\n backgroundColor: gray500,\n padding: lg,\n borderRadius: sm,\n },\n backButton: {\n marginRight: sm,\n fontWeight: boldFont,\n color: theme.palette.secondary.main,\n },\n nextButton: {\n fontWeight: boldFont,\n },\n}))\n","import { useContext, ReactElement, useState, Children, createContext } from 'react'\nimport { history } from 'src/routes/routes'\n\nconst StepperContext = createContext({} as StepperProviderTypes)\n\nfunction useStepper(): any {\n const context = useContext(StepperContext)\n\n const hasContextDefined = Object.keys(context).length > 0\n\n if (!hasContextDefined) {\n throw new Error('useStepper must be used within a StepperProvider!')\n }\n\n return context\n}\n\ntype StepperProviderTypes = {\n onFinish?: () => void\n store?: any\n disableNextButton?: boolean\n stepsComponents: ReactElement[]\n children: ReactElement\n testId?: string\n trackingCategory?: string\n}\n\nfunction StepperProvider({\n onFinish,\n store,\n disableNextButton,\n stepsComponents,\n children,\n testId,\n trackingCategory,\n}: StepperProviderTypes): ReactElement {\n const [currentStep, setCurrentStep] = useState(0)\n\n const steps = Children.toArray(stepsComponents)\n const CurrentStepComponent: any = steps[currentStep]\n\n const nextButtonType = CurrentStepComponent.props.nextButtonType\n const nextButtonLabel = CurrentStepComponent.props.nextButtonLabel\n\n const isSubmitButton = nextButtonType === 'submit'\n const isFirstStep = currentStep === 0\n const isLastStep = currentStep > steps.length - 2\n const customNextButtonLabel = nextButtonLabel\n\n const onClickPreviousStep = () => {\n if (isFirstStep) {\n history.goBack()\n } else {\n setCurrentStep((step) => step - 1)\n }\n }\n\n const onClickNextStep = () => {\n if (isSubmitButton) {\n return\n }\n\n if (isLastStep) {\n onFinish?.()\n return\n }\n\n setCurrentStep((step) => step + 1)\n }\n\n const state: StepperProviderTypes = {\n currentStep,\n setCurrentStep,\n steps,\n\n CurrentStepComponent,\n\n isFirstStep,\n isLastStep,\n\n onClickPreviousStep,\n onClickNextStep,\n\n disableNextButton,\n nextButtonType,\n customNextButtonLabel,\n\n testId,\n trackingCategory,\n\n ...store,\n }\n\n return {children}\n}\n\nexport { useStepper, StepperProvider }\n","import { Fragment, useContext } from 'react'\nimport { StepList, StepLabel, StepBox, Header, Heading } from './style'\nimport { Container, Grid, Paper } from '@material-ui/core'\nimport Logo from 'src/walliro/assets/images/default/logo.png'\nimport { useStepper } from './stepperContext'\nimport { Button } from 'react-bootstrap'\nimport { SafeListSidebarContext } from '../SafeListSidebar'\nimport { Link } from 'react-router-dom'\nconst StepperHeader = () => {\n const { currentStep, setCurrentStep, steps } = useStepper()\n const { toggleSidebar } = useContext(SafeListSidebarContext)\n return (\n \n
\n \n \n \n \n \n \"walliro\"\n \n \n \n \n east\n \n \n \n \n \n

{steps[currentStep].props.label}

\n
\n
\n
\n
\n \n {steps.map((_, index) => {\n const isStepLabelClickable = currentStep > index\n function onClickLabel() {\n if (isStepLabelClickable) {\n setCurrentStep(index)\n }\n }\n\n return (\n \n \n {index + 1}\n \n \n )\n })}\n \n
\n
\n )\n}\n\nexport default StepperHeader\n","import { Fragment, ReactElement } from 'react'\nimport StepperMUI from '@material-ui/core/Stepper'\nimport StepMUI from '@material-ui/core/Step'\nimport StepContent from '@material-ui/core/StepContent'\nimport StepLabel from '@material-ui/core/StepLabel'\nimport { Container, Grid, Paper } from '@material-ui/core'\nimport { makeStyles } from '@material-ui/core/'\nimport { useStyles } from './style'\n\nimport Hairline from 'src/components/layout/Hairline'\nimport Button from 'src/components/layout/Button'\nimport Col from 'src/components/layout/Col'\nimport Row from 'src/components/layout/Row'\nimport { boldFont, lg, light, sm } from 'src/theme/variables'\nimport { StepperProvider, useStepper } from './stepperContext'\nimport Track from 'src/components/Track'\nimport StepperHeader from './StepperHeader'\nimport { useForm } from 'react-final-form'\n\ntype StepperProps = {\n children: ReactElement[]\n onFinish?: () => void\n disableNextButton?: boolean\n nextButtonType?: string\n testId?: string\n trackingCategory?: string\n}\n\nfunction StepperComponent(): ReactElement {\n const {\n currentStep,\n setCurrentStep,\n steps,\n\n onClickPreviousStep,\n onClickNextStep,\n\n disableNextButton,\n nextButtonType,\n\n testId,\n trackingCategory,\n } = useStepper()\n const formsUtils = useForm()\n\n const isFirstStep = currentStep === 0\n // const isStepLabelClickable = currentStep > index\n const currentComponent = steps[currentStep]\n const classes = useStyles()\n\n const backButtonLabel = isFirstStep ? 'Cancel' : 'Back'\n const customNextButtonLabel = currentComponent.props.nextButtonLabel\n\n const nextButtonLabel = customNextButtonLabel || 'Next'\n\n const backButton = (\n \n )\n\n const nextButton = (\n 0\n }\n size=\"small\"\n className={classes.nextButton}\n variant=\"contained\"\n >\n {nextButtonLabel}\n \n )\n\n return (\n \n \n \n \n {currentComponent}\n \n \n \n {trackingCategory ? (\n <>\n \n {backButton}\n \n \n {nextButton}\n \n \n ) : (\n <>\n {backButton}\n {nextButton}\n \n )}\n \n \n \n \n \n \n )\n}\n\nexport default function Stepper(props: StepperProps): ReactElement {\n return (\n \n \n \n \n \n \n )\n}\n\nexport type StepElementProps = {\n label: string\n children: JSX.Element\n nextButtonLabel?: string\n nextButtonType?: string\n disableNextButton?: boolean\n}\n\nexport type StepElementType = (props: StepElementProps) => ReactElement\n\nexport function StepElement({ children }: StepElementProps): ReactElement {\n return children\n}\n","import React, { Fragment, JSXElementConstructor, ReactElement, useMemo, useState } from 'react'\nimport { useEffect } from 'react'\nimport { Form } from 'react-final-form'\nimport { Validator } from '../forms/validator'\nimport { SafeListSidebar } from '../SafeListSidebar'\nimport Stepper, { StepElement, StepElementType } from '../StepperWalliro/Stepper'\nimport { useStepper } from '../StepperWalliro/stepperContext'\n\ntype StepperFormProps = {\n testId: string\n onSubmit: (values) => void\n initialValues?: any\n children: (JSX.Element | false | null)[]\n trackingCategory?: string\n}\n\nfunction StepperForm({ children, onSubmit, testId, initialValues, trackingCategory }: StepperFormProps): ReactElement {\n const [validate, setValidate] = useState<(values) => Validator>()\n const [onSubmitForm, setOnSubmitForm] = useState<(values) => void>()\n const steps = useMemo(\n () =>\n React.Children.toArray(children)\n .filter(Boolean)\n .map((step: ReactElement, index, list) => {\n function ComponentStep() {\n const { setCurrentStep } = useStepper()\n useEffect(() => {\n const isLastStep = index === list.length - 1\n setValidate(() => step.props.validate)\n if (isLastStep) {\n setOnSubmitForm(() => (values) => onSubmit(values))\n } else {\n setOnSubmitForm(() => () => {\n setCurrentStep((step) => step + 1)\n })\n }\n }, [setCurrentStep])\n return step.props.children\n }\n\n return (\n \n \n \n )\n }),\n [children, onSubmit],\n )\n\n return (\n \n onSubmitForm?.(values)}\n initialValues={initialValues}\n validate={(values) => validate?.(values)}\n >\n {({ handleSubmit, submitting }) => (\n
\n \n {steps}\n \n
\n )}\n \n
\n )\n}\n\nexport default StepperForm\n\nexport type StepFormElementProps = {\n label: string\n validate?: (values) => Record | Promise>\n nextButtonLabel?: string\n children: ReactElement>\n disableNextButton?: boolean\n}\nexport type StepFormElementType = (props: StepFormElementProps) => StepElementType[]\n\nexport function StepFormElement({ children }: StepFormElementProps): ReactElement {\n return children\n}\n","export const FIELD_CREATE_CUSTOM_SAFE_NAME = 'create.customSafeName'\nexport const FIELD_CREATE_SUGGESTED_SAFE_NAME = 'create.suggestedSafeName'\nexport const FIELD_CREATE_SAFE_OWNERS_LIST = 'create.owners'\nexport const FIELD_NEW_SAFE_THRESHOLD = 'create.newSafeThreshold'\nexport const FIELD_MAX_OWNER_NUMBER = 'create.maxOwnerNumber'\nexport const FIELD_NEW_SAFE_PROXY_SALT = 'create.safeCreationSalt'\nexport const FIELD_NEW_SAFE_GAS_LIMIT = 'create.gasLimit'\nexport const FIELD_NEW_SAFE_GAS_PRICE = 'create.gasPrice'\nexport const FIELD_NEW_SAFE_GAS_MAX_PRIO_FEE = 'create.gasMaxPrioFee'\nexport const FIELD_NEW_SAFE_CREATION_TX_HASH = 'create.safeCreationTxHash'\nexport const FIELD_NEW_SAFE_OWNER_ENS_LIST = 'create.safeOwnerENSList'\n\nexport const FIELD_LOAD_CUSTOM_SAFE_NAME = 'load.customSafeName'\nexport const FIELD_LOAD_SUGGESTED_SAFE_NAME = 'load.suggestedSafeName'\nexport const FIELD_LOAD_SAFE_ADDRESS = 'load.safeAddress'\nexport const FIELD_LOAD_IS_LOADING_SAFE_ADDRESS = 'load.isLoadingSafeAddress'\nexport const FIELD_LOAD_SAFE_OWNER_LIST = 'load.safeOwnerList'\nexport const FIELD_SAFE_THRESHOLD = 'load.safeThreshold'\n\nexport const FIELD_LOAD_SAFE_OWNER_ENS_LIST = 'load.safeOwnerENSList'\nexport const FIELD_STARTER_TYPE = 'starterType'\n\nexport enum TypeForm {\n open,\n load,\n}\nexport type OwnerFieldItem = {\n nameFieldName: string\n addressFieldName: string\n}\n\nexport type OwnerFieldListItem = {\n address: string\n name: string\n}\n\nexport type StarterFormValues = {\n [FIELD_STARTER_TYPE]?: TypeForm\n [FIELD_CREATE_SUGGESTED_SAFE_NAME]: string\n [FIELD_CREATE_CUSTOM_SAFE_NAME]?: string\n [FIELD_NEW_SAFE_THRESHOLD]: number\n [FIELD_CREATE_SAFE_OWNERS_LIST]: Array\n [FIELD_NEW_SAFE_OWNER_ENS_LIST]: Record\n [FIELD_MAX_OWNER_NUMBER]: number\n [FIELD_NEW_SAFE_PROXY_SALT]: number\n [FIELD_NEW_SAFE_GAS_LIMIT]: number\n [FIELD_NEW_SAFE_GAS_PRICE]: string\n [FIELD_NEW_SAFE_GAS_MAX_PRIO_FEE]: number\n [FIELD_NEW_SAFE_CREATION_TX_HASH]?: string\n\n [FIELD_LOAD_CUSTOM_SAFE_NAME]?: string\n [FIELD_LOAD_SUGGESTED_SAFE_NAME]: string\n [FIELD_LOAD_SAFE_ADDRESS]?: string\n [FIELD_LOAD_IS_LOADING_SAFE_ADDRESS]: boolean\n [FIELD_LOAD_SAFE_OWNER_LIST]: Array\n [FIELD_LOAD_SAFE_OWNER_ENS_LIST]: Record\n [FIELD_SAFE_THRESHOLD]?: number\n}\n\nexport const SAFE_PENDING_CREATION_STORAGE_KEY = 'NEW_SAFE_PENDING_CREATION_STORAGE_KEY'\n","import styled from 'styled-components'\nimport { Button } from '@gnosis.pm/safe-react-components'\n\nexport const ChainList = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n`\nexport const ChainItem = styled(Button)<{ $isActive?: boolean }>`\n border-radius: 8px;\n padding: 8px;\n min-width: 250px !important;\n &:not(:disabled) {\n background-color: transparent;\n color: ${(props) => props.theme.colors.primary};\n border: 1px solid ${(props) => props.theme.colors.primary};\n ${(props) => {\n if (props.$isActive) {\n return `\n background-color: ${props.theme.colors.primary};\n color: ${props.theme.colors.white};\n `\n }\n }}\n &:hover {\n background-color: ${(props) => props.theme.colors.primary};\n color: ${(props) => props.theme.colors.white};\n }\n }\n`\nexport const WalletContainer = styled.div`\n padding: 30px 0;\n padding-left: 45px;\n\n > button {\n margin: auto;\n }\n`\nexport const WalletDivider = styled.div`\n margin-top: 10px;\n @media (max-width: 600px) {\n display: flex;\n justify-content: center;\n } ;\n`\n\nexport const NetworkLabelDivider = styled.div`\n @media (max-width: 600px) {\n display: flex;\n justify-content: center;\n }\n`\n","import { ChainItem, ChainList } from './style'\nimport { getChains } from 'src/config/cache/chains'\nimport Block from 'src/components/layout/Block'\nimport { useCallback, useEffect } from 'react'\nimport { ChainId } from 'src/config/chain'\nimport { setChainId } from 'src/logic/config/utils'\nimport { ChainInfo } from '@gnosis.pm/safe-apps-sdk'\nimport { useStepper } from 'src/components/StepperWalliro/stepperContext'\n\ninterface Props {\n selectedNetwork: ChainInfo\n locationNetwork?: ChainId\n resetLocationNetwork: () => void\n}\nconst StepOne = ({ selectedNetwork, locationNetwork, resetLocationNetwork }: Props) => {\n const {\n currentStep,\n setCurrentStep,\n steps,\n\n onClickPreviousStep,\n onClickNextStep,\n\n disableNextButton,\n nextButtonType,\n\n testId,\n trackingCategory,\n } = useStepper()\n\n const onNetworkSwitch = useCallback((chainId: ChainId) => {\n setChainId(chainId)\n }, [])\n\n const onGoToTron = (id: string) => {\n window.location.href = 'https://tron.walliro.com/starter?network=' + id\n }\n\n useEffect(() => {\n if (typeof locationNetwork !== 'undefined') {\n setCurrentStep(1)\n resetLocationNetwork()\n }\n // onClickNextStep()\n }, [locationNetwork])\n\n return (\n \n \n onGoToTron('https://api.trongrid.io')}>\n Tron - Mainnet\n \n onGoToTron('https://api.shasta.trongrid.io')}>\n Tron - Shasta (Testnet)\n \n {getChains().map((network, index) => (\n onNetworkSwitch(network.chainId)}\n $isActive={selectedNetwork.chainId === network.chainId}\n >\n {network.chainName}\n \n ))}\n {/* \n Bitcoin\n */}\n \n \n )\n}\n\nexport default StepOne\n","import Paragraph from 'src/components/layout/Paragraph'\nimport { WalletContainer } from './style'\nimport ConnectDetails from 'src/walliro/containers/AppLayout/Header/ProviderDetails/ConnectDetails'\nimport WalletSwitch from 'src/components/WalletSwitch'\nimport Block from 'src/components/layout/Block'\nimport { wrapInSuspense } from 'src/utils/wrapInSuspense'\nimport HidePairingModule from 'src/walliro/containers/AppLayout/Header/ProviderDetails/HidePairingModule'\nimport { isPairingSupported } from 'src/logic/wallets/pairing/utils'\n\ninterface Props {\n isWalletConnected: boolean\n isWrongNetwork: boolean\n}\nconst StepTwo = ({ isWalletConnected, isWrongNetwork }: Props) => {\n return (\n \n {isWalletConnected ? (\n <>\n {!isWrongNetwork && (\n \n Wallet connected.\n \n )}\n \n ) : (\n \n In order to create your Walliro, you need to connect a wallet\n \n )}\n {isPairingSupported() && wrapInSuspense()}\n {!isWalletConnected && (\n \n \n \n )}\n\n {isWalletConnected && isWrongNetwork && (\n \n Your wallet connection must match the selected network. \n \n )}\n \n )\n}\n\nexport default StepTwo\n","import { ChainItem, ChainList } from './style'\nimport Block from 'src/components/layout/Block'\nimport { Field, useField } from 'react-final-form'\nimport { FIELD_STARTER_TYPE, TypeForm } from './fields/starterFields'\nimport { useSelector } from 'react-redux'\nimport { useStepper } from 'src/components/StepperWalliro/stepperContext'\nimport { useEffect } from 'react'\nimport { providerNameSelector, shouldSwitchWalletChain } from 'src/logic/wallets/store/selectors'\n\nconst options = [\n {\n label: 'Create new Walliro',\n value: TypeForm.open,\n },\n {\n label: 'Load Old Walliro',\n value: TypeForm.load,\n },\n]\n\ninterface Props {\n callback?: (type: TypeForm) => void\n}\nconst StepThere = ({ callback }: Props) => {\n const providerName = useSelector(providerNameSelector)\n const isWrongNetwork = useSelector(shouldSwitchWalletChain)\n const provider = !!providerName && !isWrongNetwork\n\n const { setCurrentStep } = useStepper()\n\n useEffect(() => {\n if (!provider) {\n setCurrentStep(0)\n }\n }, [provider, setCurrentStep])\n return (\n \n \n (value || value === 0 ? undefined : 'Required')}\n >\n {({ input, meta, options }) => {\n return options.map((option, index) => (\n {\n callback?.(option.value)\n input.onChange(option.value)\n }}\n >\n {option.label}\n \n ))\n }}\n \n \n \n )\n}\n\nexport default StepThere\n","import { Fragment, ReactElement, useEffect, useState } from 'react'\nimport { useSelector } from 'react-redux'\nimport { useForm } from 'react-final-form'\nimport styled from 'styled-components'\n\nimport Block from 'src/components/layout/Block'\nimport { extraSmallFontSize, fontColor, lg, md, secondary, sm, xs } from 'src/theme/variables'\nimport Paragraph from 'src/components/layout/Paragraph'\nimport Field from 'src/components/forms/Field'\nimport TextField from 'src/components/forms/TextField'\nimport { providerNameSelector, shouldSwitchWalletChain } from 'src/logic/wallets/store/selectors'\nimport {\n FIELD_CREATE_CUSTOM_SAFE_NAME,\n FIELD_CREATE_SUGGESTED_SAFE_NAME,\n FIELD_MAX_OWNER_NUMBER,\n FIELD_NEW_SAFE_THRESHOLD,\n FIELD_CREATE_SAFE_OWNERS_LIST,\n FIELD_NEW_SAFE_OWNER_ENS_LIST,\n} from '../fields/starterFields'\nimport { useStepper } from 'src/components/StepperWalliro/stepperContext'\nimport NetworkLabel from 'src/components/NetworkLabel/NetworkLabel'\nimport { reverseENSLookup } from 'src/logic/wallets/getWeb3'\nimport { trackEvent } from 'src/utils/googleTagManager'\nimport { CREATE_SAFE_EVENTS } from 'src/utils/events/createLoadSafe'\nimport Hairline from 'src/components/layout/Hairline'\nimport Row from 'src/components/layout/Row'\nimport Col from 'src/components/layout/Col'\nimport { CheckCircle } from '@material-ui/icons'\nimport Button from 'src/components/layout/Button'\nimport ButtonHelper from 'src/components/ButtonHelper'\nimport { Icon, Text } from '@gnosis.pm/safe-react-components'\nimport { sameString } from 'src/utils/strings'\nimport {\n ADDRESS_REPEATED_ERROR,\n composeValidators,\n minMaxLength,\n minValue,\n required,\n THRESHOLD_ERROR,\n} from 'src/components/forms/validator'\nimport AddressInput from 'src/components/forms/AddressInput'\nimport { currentNetworkAddressBookAsMap } from 'src/logic/addressBook/store/selectors'\nimport InputAdornment from '@material-ui/core/InputAdornment'\nimport { ScanQRWrapper } from 'src/components/ScanQRModal/ScanQRWrapper'\nimport SelectField from 'src/components/forms/SelectField'\nimport MenuItem from '@material-ui/core/MenuItem'\nimport { objectByString } from 'src/utils/objects'\n\nexport const nameNewSafeStepLabel = 'Name'\n\nconst CreateWalliro = () => {\n // const [ownersWithENSName, setOwnersWithENSName] = useState>({})\n const providerName = useSelector(providerNameSelector)\n const isWrongNetwork = useSelector(shouldSwitchWalletChain)\n\n const createNewSafeForm = useForm()\n const formValues = createNewSafeForm.getState().values\n const hasCustomSafeName = !!objectByString(formValues, FIELD_CREATE_CUSTOM_SAFE_NAME)\n\n useEffect(() => {\n // On unmount, e.g. go back/next\n return () => {\n if (hasCustomSafeName) {\n trackEvent(CREATE_SAFE_EVENTS.NAME_SAFE)\n }\n }\n }, [hasCustomSafeName])\n\n useEffect(() => {\n const getInitialOwnerENSNames = async () => {\n const formValues = createNewSafeForm.getState().values\n const owners = objectByString(formValues, FIELD_CREATE_SAFE_OWNERS_LIST)\n const ownersWithENSName = await Promise.all(\n owners\n .filter(({ addressFieldName }) => !!objectByString(formValues, addressFieldName))\n .map(async ({ addressFieldName }) => {\n const address = objectByString(formValues, addressFieldName)\n const ensName = await reverseENSLookup(address)\n return {\n address,\n name: ensName,\n }\n }),\n )\n\n const ownersWithENSNameRecord = ownersWithENSName.reduce>((acc, { address, name }) => {\n return {\n ...acc,\n [address]: name,\n }\n }, {})\n\n createNewSafeForm.change(FIELD_NEW_SAFE_OWNER_ENS_LIST, ownersWithENSNameRecord)\n // setOwnersWithENSName(ownersWithENSNameRecord)\n }\n getInitialOwnerENSNames()\n }, [createNewSafeForm])\n\n // useEffect(() => {\n // if (ownersWithENSName) {\n // createNewSafeForm.change(FIELD_NEW_SAFE_OWNER_ENS_LIST, ownersWithENSName)\n // }\n // }, [ownersWithENSName, createNewSafeForm])\n\n const addressBook = useSelector(currentNetworkAddressBookAsMap)\n const formErrors = createNewSafeForm.getState().errors || {}\n\n const owners = objectByString(formValues, FIELD_CREATE_SAFE_OWNERS_LIST)\n const ownersWithENSName = objectByString(formValues, FIELD_NEW_SAFE_OWNER_ENS_LIST)\n const threshold = objectByString(formValues, FIELD_NEW_SAFE_THRESHOLD)\n const maxOwnerNumber = objectByString(formValues, FIELD_MAX_OWNER_NUMBER)\n\n function onClickAddNewOwner() {\n const newEmptyOwner = {\n nameFieldName: `owner-name-${maxOwnerNumber}`,\n addressFieldName: `owner-address-${maxOwnerNumber}`,\n }\n\n createNewSafeForm.change(FIELD_CREATE_SAFE_OWNERS_LIST, [...owners, newEmptyOwner])\n // createNewSafeForm.change(FIELD_CREATE_SAFE_OWNERS_LIST, [...owners, newEmptyOwner])\n const updatedMaxOwnerNumbers = maxOwnerNumber + 1\n createNewSafeForm.change(FIELD_MAX_OWNER_NUMBER, updatedMaxOwnerNumbers)\n }\n\n function onClickRemoveOwner({ addressFieldName }) {\n const ownersUpdated = owners.filter((owner) => owner.addressFieldName !== addressFieldName)\n createNewSafeForm.change(FIELD_CREATE_SAFE_OWNERS_LIST, ownersUpdated)\n createNewSafeForm.change('create.' + addressFieldName, undefined)\n\n const updatedMaxOwnerNumbers = maxOwnerNumber - 1\n createNewSafeForm.change(FIELD_MAX_OWNER_NUMBER, updatedMaxOwnerNumbers)\n\n const hasToUpdateThreshold = threshold > ownersUpdated.length\n if (hasToUpdateThreshold) {\n createNewSafeForm.change(FIELD_NEW_SAFE_THRESHOLD, threshold - 1)\n }\n }\n\n const getENSName = async (address: string): Promise => {\n const ensName = await reverseENSLookup(address)\n createNewSafeForm.change(FIELD_NEW_SAFE_OWNER_ENS_LIST, { ...ownersWithENSName, [address]: ensName })\n }\n\n const handleScan = async (address: string, closeQrModal: () => void, addressFieldName: string): Promise => {\n const scannedAddress = address.startsWith('ethereum:') ? address.replace('ethereum:', '') : address\n await getENSName(scannedAddress)\n createNewSafeForm.change(addressFieldName, scannedAddress)\n closeQrModal()\n }\n\n return (\n \n \n \n \n You are about to make a new Walliro wallet with one or multiple owners. Firstly, give your new wallet a\n name. This name is only stored locally and will never be shared with Walliro or any third parties. The new\n Walliro will ONLY be available on \n \n \n \n \n \n \n \n \n \n \n By continuing you agree to the{' '}\n \n terms of use and privacy policy.\n \n .\n \n \n \n \n \n \n Your Walliro will have one or more owners. We have prefilled the first owner with your connected wallet\n details, but you can change this to another owner.\n \n \n Add additional owners (e.g. wallets of your teammates) and specify how many of them have to confirm a\n transaction before it gets executed. In general, the more confirmations required, the more secure your Walliro\n is.\n \n \n Learn about which Walliro setup to use\n \n \n \n . The new Walliro will ONLY be available on \n \n \n \n \n NAME\n ADDRESS\n \n \n \n \n {owners.map(({ nameFieldName, addressFieldName }, i: number) => {\n const hasOwnerAddressError = objectByString(formErrors, 'create.' + addressFieldName)\n const ownerAddress = objectByString(formValues, addressFieldName)\n const showDeleteIcon = addressFieldName !== 'owner-address-0' // we hide de delete icon for the first owner\n const ownerName = ownersWithENSName[ownerAddress] || 'Owner Name'\n const isRepeated = (value: string) => {\n const formValues = createNewSafeForm.getState().values\n const prevOwners = owners.filter((_: typeof owners[number], index: number) => index !== i)\n const repeated = prevOwners.some((owner: typeof owners[number]) => {\n return sameString(objectByString(formValues, 'create.' + owner.addressFieldName), value)\n })\n\n return repeated ? ADDRESS_REPEATED_ERROR : undefined\n }\n\n return (\n \n \n \n \n \n {\n createNewSafeForm.change(addressFieldName, address)\n const addressName = addressBook[address]?.name\n if (!addressName) {\n await getENSName(address)\n }\n }}\n inputAdornment={\n !hasOwnerAddressError && {\n endAdornment: (\n \n \n \n ),\n }\n }\n name={'create.' + addressFieldName}\n placeholder=\"Owner Address*\"\n text=\"Owner Address\"\n testId={addressFieldName}\n validators={[isRepeated]}\n />\n \n \n handleScan(...args, addressFieldName)}\n testId={`${addressFieldName}-scan-QR`}\n />\n \n {showDeleteIcon && (\n \n onClickRemoveOwner({ addressFieldName })}\n dataTestId={`${addressFieldName}-remove-button`}\n >\n \n \n \n )}\n \n )\n })}\n \n \n \n \n \n \n Any transaction requires the confirmation of:\n \n \n \n {\n const isValidThreshold = () => {\n return !!val && Number(val) <= owners.length ? undefined : THRESHOLD_ERROR\n }\n return composeValidators(required, minValue(1), isValidThreshold)(val)\n }}\n >\n {owners.map((_, option) => (\n \n {option + 1}\n \n ))}\n \n \n \n out of {owners.length} owner(s)\n \n \n \n \n \n )\n}\n\nexport default CreateWalliro\n\nconst BlockWithPadding = styled(Block)`\n padding: ${lg};\n`\n\nconst FieldContainer = styled(Block)`\n display: flex;\n max-width: 480px;\n margin-top: 12px;\n`\n\nconst Link = styled.a`\n color: ${secondary};\n`\n\nconst ParagraphWithMargin = styled(Paragraph)`\n margin-bottom: 12px;\n`\n\nconst StyledLink = styled(Link)`\n padding: 0 ${xs};\n & svg {\n position: relative;\n top: 1px;\n left: ${xs};\n height: 14px;\n width: 14px;\n }\n`\nconst RowHeader = styled(Row)`\n padding: ${sm} ${lg};\n font-size: ${extraSmallFontSize};\n color: ${fontColor};\n`\n\nconst OwnerNameField = styled(Field)`\n margin-right: ${md};\n margin-bottom: ${md};\n`\n\nconst CheckIconAddressAdornment = styled(CheckCircle)`\n color: #03ae60;\n height: 20px;\n`\n\nconst OwnersIconsContainer = styled(Col)`\n height: 56px;\n max-width: 32px;\n cursor: pointer;\n`\n\nconst OwnerContainer = styled(Row)`\n justify-content: center;\n`\n\nconst StyledParagraph = styled(Paragraph)`\n padding-left: 12px;\n`\n","import { AddressBookMap } from 'src/logic/addressBook/store/selectors'\nimport { checksumAddress } from 'src/utils/checksumAddress'\nimport { objectByString } from 'src/utils/objects'\nimport {\n FIELD_LOAD_CUSTOM_SAFE_NAME,\n FIELD_LOAD_SAFE_ADDRESS,\n FIELD_LOAD_SUGGESTED_SAFE_NAME,\n FIELD_LOAD_SAFE_OWNER_ENS_LIST,\n StarterFormValues,\n} from './starterFields'\n\nexport function getLoadSafeName(formValues: StarterFormValues, addressBook: AddressBookMap): string {\n let safeAddress = objectByString(formValues, FIELD_LOAD_SAFE_ADDRESS) || ''\n safeAddress = safeAddress && checksumAddress(safeAddress)\n\n return (\n objectByString(formValues, FIELD_LOAD_CUSTOM_SAFE_NAME) ||\n addressBook[safeAddress]?.name ||\n objectByString(formValues, FIELD_LOAD_SUGGESTED_SAFE_NAME)\n )\n}\n\nexport function getOwnerName(formValues: StarterFormValues, address: string): string {\n const ownerFieldName = `load.owner-address-${address}`\n\n return (\n objectByString(formValues, ownerFieldName) ||\n objectByString(formValues, FIELD_LOAD_SAFE_OWNER_ENS_LIST)[address] ||\n ''\n )\n}\n","import { ReactElement, useState, useEffect } from 'react'\nimport { useSelector } from 'react-redux'\nimport { useField, useForm } from 'react-final-form'\nimport styled from 'styled-components'\nimport CheckCircle from '@material-ui/icons/CheckCircle'\nimport InputAdornment from '@material-ui/core/InputAdornment'\n\nimport Block from 'src/components/layout/Block'\nimport Col from 'src/components/layout/Col'\nimport Paragraph from 'src/components/layout/Paragraph'\nimport Field from 'src/components/forms/Field'\nimport TextField from 'src/components/forms/TextField'\nimport AddressInput from 'src/components/forms/AddressInput'\nimport { ScanQRWrapper } from 'src/components/ScanQRModal/ScanQRWrapper'\nimport { isValidAddress } from 'src/utils/isValidAddress'\nimport { isChecksumAddress } from 'src/utils/checksumAddress'\nimport { getSafeInfo } from 'src/logic/safe/utils/safeInformation'\nimport { lg, secondary, md } from 'src/theme/variables'\nimport { AddressBookEntry, makeAddressBookEntry } from 'src/logic/addressBook/model/addressBook'\nimport { currentNetworkAddressBookAsMap } from 'src/logic/addressBook/store/selectors'\nimport {\n FIELD_LOAD_CUSTOM_SAFE_NAME,\n FIELD_LOAD_IS_LOADING_SAFE_ADDRESS,\n FIELD_LOAD_SAFE_ADDRESS,\n FIELD_LOAD_SAFE_OWNER_ENS_LIST,\n FIELD_LOAD_SAFE_OWNER_LIST,\n FIELD_SAFE_THRESHOLD,\n StarterFormValues,\n} from '../../fields/starterFields'\n\nimport NetworkLabel from 'src/components/NetworkLabel/NetworkLabel'\nimport { getLoadSafeName } from '../../fields/utils'\nimport { currentChainId } from 'src/logic/config/store/selectors'\nimport { reverseENSLookup } from 'src/logic/wallets/getWeb3'\nimport { trackEvent } from 'src/utils/googleTagManager'\nimport { LOAD_SAFE_EVENTS } from 'src/utils/events/createLoadSafe'\nimport { objectByString } from 'src/utils/objects'\n\nexport const loadSafeAddressStepLabel = 'Name and address'\n\nfunction LoadSafeAddressStep(): ReactElement {\n const [ownersWithName, setOwnersWithName] = useState([])\n const [ownersWithENSName, setOwnersWithENSName] = useState>({})\n const [threshold, setThreshold] = useState()\n const [isValidSafeAddress, setIsValidSafeAddress] = useState(false)\n const [isSafeInfoLoading, setIsSafeInfoLoading] = useState(false)\n const chainId = useSelector(currentChainId)\n\n const loadSafeForm = useForm()\n const addressBook = useSelector(currentNetworkAddressBookAsMap)\n const {\n input: { value: safeAddress },\n meta: { error: safeAddressError },\n } = useField(FIELD_LOAD_SAFE_ADDRESS)\n\n useEffect(() => {\n setOwnersWithName([])\n setThreshold(undefined)\n setIsValidSafeAddress(false)\n }, [safeAddress])\n\n useEffect(() => {\n const checkSafeAddress = async () => {\n const isValidSafeAddress = isValidAddress(safeAddress) && isChecksumAddress(safeAddress)\n if (!isValidSafeAddress) {\n return\n }\n\n setIsSafeInfoLoading(true)\n try {\n const { owners, threshold } = await getSafeInfo(safeAddress)\n setIsSafeInfoLoading(false)\n const ownersWithName = owners.map(({ value: address }) => {\n return makeAddressBookEntry(addressBook[address] || { address, name: '', chainId })\n })\n\n const ownersWithENSName = await Promise.all(\n owners.map(async ({ value: address }) => {\n const ensName = await reverseENSLookup(address)\n return makeAddressBookEntry({ address, name: ensName, chainId })\n }),\n )\n\n const ownersWithENSNameRecord = ownersWithENSName.reduce>((acc, { address, name }) => {\n return {\n ...acc,\n [address]: name,\n }\n }, {})\n\n setOwnersWithName(ownersWithName)\n setOwnersWithENSName(ownersWithENSNameRecord)\n setThreshold(threshold)\n setIsValidSafeAddress(true)\n } catch (error) {\n setOwnersWithName([])\n setThreshold(undefined)\n setIsValidSafeAddress(false)\n }\n setIsSafeInfoLoading(false)\n }\n\n checkSafeAddress()\n }, [safeAddress, addressBook, chainId])\n\n useEffect(() => {\n if (threshold) {\n loadSafeForm.change(FIELD_SAFE_THRESHOLD, threshold)\n }\n }, [threshold, loadSafeForm])\n\n useEffect(() => {\n loadSafeForm.change(FIELD_LOAD_IS_LOADING_SAFE_ADDRESS, isSafeInfoLoading)\n }, [isSafeInfoLoading, loadSafeForm])\n\n useEffect(() => {\n if (ownersWithName) {\n loadSafeForm.change(FIELD_LOAD_SAFE_OWNER_LIST, ownersWithName)\n }\n }, [ownersWithName, loadSafeForm])\n\n useEffect(() => {\n if (ownersWithENSName) {\n loadSafeForm.change(FIELD_LOAD_SAFE_OWNER_ENS_LIST, ownersWithENSName)\n }\n }, [ownersWithENSName, loadSafeForm])\n\n const handleScan = (value: string, closeQrModal: () => void): void => {\n loadSafeForm.change(FIELD_LOAD_SAFE_ADDRESS, value)\n closeQrModal()\n }\n\n const formValues = loadSafeForm.getState().values as StarterFormValues\n const safeName = getLoadSafeName(formValues, addressBook)\n const hasCustomSafeName = !!objectByString(formValues, FIELD_LOAD_CUSTOM_SAFE_NAME)\n\n useEffect(() => {\n // On unmount, e.g. go back/next\n return () => {\n if (hasCustomSafeName) {\n trackEvent(LOAD_SAFE_EVENTS.NAME_SAFE)\n }\n }\n }, [hasCustomSafeName])\n\n return (\n \n \n \n You are adding an existing Walliro on . First choose a name and enter the Walliro address.\n This name is only stored locally and will never be shared with Walliro or third parties.\n \n \n you can connect with a wallet which is not theowner of this Walliro. In this case, the interface will provide\n you a read-only view.\n \n\n \n Don't have the address of the Walliro you created?{' '}\n \n This article explains how to find it.\n \n \n \n \n \n \n \n \n \n \n {\n loadSafeForm.change(FIELD_LOAD_SAFE_ADDRESS, val)\n }}\n inputAdornment={\n isValidSafeAddress &&\n !safeAddressError && {\n endAdornment: (\n \n \n \n ),\n }\n }\n // validators={objectByString}\n name={FIELD_LOAD_SAFE_ADDRESS}\n placeholder=\"Walliro Address*\"\n text=\"Walliro Address\"\n testId=\"load-safe-address-field\"\n />\n \n \n \n \n \n \n \n By continuing you consent to the{' '}\n \n terms of use and privacy policy\n \n .\n \n \n \n )\n}\n\nexport default LoadSafeAddressStep\n\nexport const loadSafeAddressStepValidations = (values: StarterFormValues): Record => {\n let errors = {}\n\n const safeAddress = objectByString(values, FIELD_LOAD_SAFE_ADDRESS)\n\n if (!safeAddress) {\n errors = {\n ...errors,\n [FIELD_LOAD_SAFE_ADDRESS]: 'Required',\n }\n return errors\n }\n\n // this is to prevent show and error in the safe address field while is loading...\n const isLoadingSafeAddress = objectByString(values, FIELD_LOAD_IS_LOADING_SAFE_ADDRESS)\n if (isLoadingSafeAddress) {\n return {\n ...errors,\n [FIELD_LOAD_IS_LOADING_SAFE_ADDRESS]: 'loading...',\n }\n }\n\n // check that the address is actually a Safe (must have owners)\n const ownerList = objectByString(values, FIELD_LOAD_SAFE_OWNER_LIST)\n const isValidSafeAddress = ownerList.length > 0 && isValidAddress(safeAddress)\n if (!isValidSafeAddress) {\n errors = {\n ...errors,\n [FIELD_LOAD_SAFE_ADDRESS]: 'Address given is not a valid Walliro address',\n }\n }\n\n return errors\n}\n\nconst Container = styled(Block)`\n padding: ${lg};\n`\n\nconst FieldContainer = styled(Block)`\n display: flex;\n max-width: 480px;\n margin-top: ${md};\n`\n\nconst CheckIconAddressAdornment = styled(CheckCircle)`\n color: #03ae60;\n height: 20px;\n`\n\nconst StyledLink = styled.a`\n color: ${secondary};\n`\n","import { ReactElement } from 'react'\nimport { useForm } from 'react-final-form'\nimport styled from 'styled-components'\nimport TableContainer from '@material-ui/core/TableContainer'\n\nimport Block from 'src/components/layout/Block'\nimport Col from 'src/components/layout/Col'\nimport Hairline from 'src/components/layout/Hairline'\nimport Paragraph from 'src/components/layout/Paragraph'\nimport Row from 'src/components/layout/Row'\nimport Field from 'src/components/forms/Field'\nimport TextField from 'src/components/forms/TextField'\nimport PrefixedEthHashInfo from 'src/components/PrefixedEthHashInfo'\nimport { disabled, extraSmallFontSize, fontColor, lg, md, sm } from 'src/theme/variables'\nimport { minMaxLength } from 'src/components/forms/validator'\nimport { getExplorerInfo } from 'src/config'\nimport {\n FIELD_LOAD_SAFE_OWNER_ENS_LIST,\n FIELD_LOAD_SAFE_OWNER_LIST,\n StarterFormValues,\n} from '../../fields/starterFields'\nimport NetworkLabel from 'src/components/NetworkLabel/NetworkLabel'\nimport { objectByString } from 'src/utils/objects'\n\nexport const loadSafeOwnersStepLabel = 'Owners'\n\nfunction LoadSafeOwnersStep(): ReactElement {\n const loadSafeForm = useForm()\n const formValues = loadSafeForm.getState().values as StarterFormValues\n const ownerList = objectByString(formValues, FIELD_LOAD_SAFE_OWNER_LIST)\n\n return (\n <>\n \n \n This Walliro on has {ownerList.length} owners. Optional: you can select a name for each\n owner.\n \n \n \n \n \n NAME\n ADDRESS\n \n \n \n {ownerList.map(({ address, name }, index) => {\n const ownerFieldName = `load.owner-address-${address}`\n const ownerName = objectByString(formValues, FIELD_LOAD_SAFE_OWNER_ENS_LIST)[address] || 'Owner Name'\n\n return (\n \n \n \n \n \n \n \n \n \n \n )\n })}\n \n \n \n )\n}\n\nexport default LoadSafeOwnersStep\n\nconst TitleContainer = styled(Block)`\n padding: ${md} ${lg};\n`\n\nconst HeaderContainer = styled(Row)`\n padding: ${sm} ${lg};\n color: ${fontColor};\n font-size: ${extraSmallFontSize};\n`\n\nconst OwnerContainer = styled(Row)`\n padding: 0 ${lg};\n margin-bottom: ${md};\n`\n\nconst OwnerAddressContainer = styled(Row)`\n align-items: center;\n margin-left: ${sm};\n`\n\nconst FieldContainer = styled(Field)`\n margin-right: ${sm};\n`\n","import { Fragment, useEffect } from 'react'\nimport { useForm } from 'react-final-form'\nimport { useSelector } from 'react-redux'\nimport { useStepper } from 'src/components/StepperWalliro/stepperContext'\nimport { providerNameSelector, shouldSwitchWalletChain } from 'src/logic/wallets/store/selectors'\nimport { objectByString } from 'src/utils/objects'\nimport { FIELD_LOAD_SAFE_ADDRESS, StarterFormValues } from '../../fields/starterFields'\nimport LoadSafeAddressStep, { loadSafeAddressStepValidations } from './LoadSafeAddressStep'\nimport LoadSafeOwnersStep from './LoadSafeOwnersStep'\n\nconst LoadWalliro = () => {\n const loadSafeForm = useForm()\n\n const formValues = loadSafeForm.getState().values as StarterFormValues\n\n const validateSafeAddress = loadSafeAddressStepValidations(formValues)\n\n return (\n \n \n {Object.keys(validateSafeAddress).length === 0 && }\n \n )\n}\n\nexport default LoadWalliro\n","import { Fragment, useEffect } from 'react'\nimport { useForm } from 'react-final-form'\nimport { useSelector } from 'react-redux'\nimport Block from 'src/components/layout/Block'\nimport { useStepper } from 'src/components/StepperWalliro/stepperContext'\nimport { providerNameSelector } from 'src/logic/wallets/store/selectors'\nimport { FIELD_STARTER_TYPE, TypeForm } from '../fields/starterFields'\nimport CreateWalliro from './Create'\nimport LoadWalliro from './Load'\nconst StepFour = () => {\n const provider = useSelector(providerNameSelector)\n\n const { setCurrentStep } = useStepper()\n\n useEffect(() => {\n if (!provider) {\n setCurrentStep(0)\n }\n }, [provider, setCurrentStep])\n\n const StarterForm = useForm()\n const StarterFormValues = StarterForm.getState().values\n if (StarterFormValues[FIELD_STARTER_TYPE] === TypeForm.open) {\n return \n } else {\n return \n }\n}\n\nexport default StepFour\n","import { ReactElement, useState, useEffect } from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { backOff } from 'exponential-backoff'\nimport { TransactionReceipt } from 'web3-core'\nimport { GenericModal } from '@gnosis.pm/safe-react-components'\nimport styled from 'styled-components'\nimport { SafeInfo } from '@gnosis.pm/safe-react-gateway-sdk'\n\nimport { getSafeDeploymentTransaction } from 'src/logic/contracts/safeContracts'\nimport { txMonitor } from 'src/logic/safe/transactions/txMonitor'\nimport { userAccountSelector } from 'src/logic/wallets/store/selectors'\nimport { SafeDeployment } from 'src/routes/opening'\nimport { loadFromStorage, removeFromStorage, saveToStorage } from 'src/utils/storage'\nimport { addOrUpdateSafe } from 'src/logic/safe/store/actions/addOrUpdateSafe'\nimport {\n SAFE_PENDING_CREATION_STORAGE_KEY,\n StarterFormValues,\n FIELD_NEW_SAFE_THRESHOLD,\n FIELD_CREATE_SAFE_OWNERS_LIST,\n FIELD_NEW_SAFE_GAS_LIMIT,\n FIELD_NEW_SAFE_CREATION_TX_HASH,\n FIELD_CREATE_SUGGESTED_SAFE_NAME,\n FIELD_CREATE_CUSTOM_SAFE_NAME,\n FIELD_NEW_SAFE_PROXY_SALT,\n FIELD_NEW_SAFE_GAS_PRICE,\n FIELD_NEW_SAFE_OWNER_ENS_LIST,\n FIELD_NEW_SAFE_GAS_MAX_PRIO_FEE,\n} from '../fields/starterFields'\nimport { getSafeInfo } from 'src/logic/safe/utils/safeInformation'\nimport { buildSafe } from 'src/logic/safe/store/actions/fetchSafe'\nimport { addressBookSafeLoad } from 'src/logic/addressBook/store/actions'\nimport { makeAddressBookEntry } from 'src/logic/addressBook/model/addressBook'\nimport Paragraph from 'src/components/layout/Paragraph'\nimport NetworkLabel from 'src/components/NetworkLabel/NetworkLabel'\nimport Button from 'src/components/layout/Button'\nimport { boldFont } from 'src/theme/variables'\nimport { STARTER_ROUTE, history, generateSafeRoute, SAFE_ROUTES } from 'src/routes/routes'\nimport { getExplorerInfo, getShortName } from 'src/config'\nimport { createSendParams } from 'src/logic/safe/transactions/gas'\nimport { currentChainId } from 'src/logic/config/store/selectors'\nimport PrefixedEthHashInfo from 'src/components/PrefixedEthHashInfo'\nimport { trackEvent } from 'src/utils/googleTagManager'\nimport { CREATE_SAFE_EVENTS } from 'src/utils/events/createLoadSafe'\nimport Track from 'src/components/Track'\nimport { didTxRevert } from 'src/logic/safe/store/actions/transactions/utils/transactionHelpers'\nimport { useQuery } from 'src/logic/hooks/useQuery'\nimport { ADDRESSED_ROUTE } from 'src/routes/routes'\nimport { SAFE_APPS_EVENTS } from 'src/utils/events/safeApps'\n\nconst _FIELD_NEW_SAFE_THRESHOLD = FIELD_NEW_SAFE_THRESHOLD.replace('create.', '')\nconst _FIELD_CREATE_SAFE_OWNERS_LIST = FIELD_CREATE_SAFE_OWNERS_LIST.replace('create.', '')\nconst _FIELD_NEW_SAFE_GAS_LIMIT = FIELD_NEW_SAFE_GAS_LIMIT.replace('create.', '')\nconst _FIELD_NEW_SAFE_CREATION_TX_HASH = FIELD_NEW_SAFE_CREATION_TX_HASH.replace('create.', '')\nconst _FIELD_CREATE_SUGGESTED_SAFE_NAME = FIELD_CREATE_SUGGESTED_SAFE_NAME.replace('create.', '')\nconst _FIELD_CREATE_CUSTOM_SAFE_NAME = FIELD_CREATE_CUSTOM_SAFE_NAME.replace('create.', '')\nconst _FIELD_NEW_SAFE_PROXY_SALT = FIELD_NEW_SAFE_PROXY_SALT.replace('create.', '')\nconst _FIELD_NEW_SAFE_GAS_PRICE = FIELD_NEW_SAFE_GAS_PRICE.replace('create.', '')\nconst _FIELD_NEW_SAFE_OWNER_ENS_LIST = FIELD_NEW_SAFE_OWNER_ENS_LIST.replace('create.', '')\nconst _FIELD_NEW_SAFE_GAS_MAX_PRIO_FEE = FIELD_NEW_SAFE_GAS_MAX_PRIO_FEE.replace('create.', '')\n\nexport const InlinePrefixedEthHashInfo = styled(PrefixedEthHashInfo)`\n display: inline-flex;\n`\n\nconst ButtonContainer = styled.div`\n text-align: center;\n`\n\nconst EmphasisLabel = styled.span`\n font-weight: ${boldFont};\n`\n\ntype ModalDataType = {\n safeAddress: string\n safeName?: string\n safeCreationTxHash?: string\n}\n\nconst goToWelcomePage = () => {\n history.push({\n state: 'reset',\n pathname: STARTER_ROUTE,\n })\n}\n\nconst sleep = (ms: number): Promise => new Promise((resolve) => setTimeout(resolve, ms))\n\n/**\n * Parse MM error message, as a workaround for a bug in web3.js that doesn't do it correctly.\n * It returns a formatting error like this:\n *\n * `[ethjs-query] while formatting outputs from RPC '{\"value\":{\"code\":-32000,\"message\":\"intrinsic gas too low\"}}'`\n */\nconst parseError = (err: Error): Error => {\n const prefix = '[ethjs-query] while formatting outputs from RPC '\n\n if (!err.message.startsWith(prefix)) return err\n\n const json = err.message.split(prefix).pop() || ''\n let actualMessage = ''\n try {\n actualMessage = JSON.parse(json.slice(1, -1)).value.message\n } catch (e) {\n actualMessage = ''\n }\n\n return actualMessage ? new Error(actualMessage) : err\n}\n\nconst getSavedSafeCreation = (): StarterFormValues | void => {\n return loadFromStorage(SAFE_PENDING_CREATION_STORAGE_KEY)\n}\n\nconst loadSavedDataOrLeave = (): StarterFormValues | void => {\n return getSavedSafeCreation() || goToWelcomePage()\n}\n\nconst createNewSafe = (userAddress: string, onHash: (hash: string) => void): Promise => {\n if (!userAddress) {\n return Promise.reject(new Error('No user address'))\n }\n\n const safeCreationFormValues = loadSavedDataOrLeave()\n\n if (!safeCreationFormValues) {\n return Promise.reject(new Error('No saved Walliro creation'))\n }\n\n return new Promise((resolve, reject) => {\n const confirmations = safeCreationFormValues[_FIELD_NEW_SAFE_THRESHOLD]\n const ownerFields = safeCreationFormValues[_FIELD_CREATE_SAFE_OWNERS_LIST]\n const ownerAddresses = ownerFields.map(({ addressFieldName }) => safeCreationFormValues[addressFieldName])\n const gasLimit = safeCreationFormValues[_FIELD_NEW_SAFE_GAS_LIMIT]\n const gasPrice = safeCreationFormValues[_FIELD_NEW_SAFE_GAS_PRICE]\n const gasMaxPrioFee = safeCreationFormValues[_FIELD_NEW_SAFE_GAS_MAX_PRIO_FEE]\n const safeCreationSalt = Date.now() // never retry with the same salt\n const deploymentTx = getSafeDeploymentTransaction(ownerAddresses, confirmations, safeCreationSalt)\n\n const sendParams = createSendParams(userAddress, {\n ethGasLimit: gasLimit.toString(),\n ethGasPriceInGWei: gasPrice,\n ethMaxPrioFeeInGWei: gasMaxPrioFee.toString(),\n })\n\n deploymentTx\n .send(sendParams)\n .once('transactionHash', (txHash) => {\n trackEvent(CREATE_SAFE_EVENTS.SUBMIT_CREATE_SAFE)\n onHash(txHash)\n\n saveToStorage(SAFE_PENDING_CREATION_STORAGE_KEY, {\n ...safeCreationFormValues,\n [_FIELD_NEW_SAFE_PROXY_SALT]: safeCreationSalt,\n [_FIELD_NEW_SAFE_CREATION_TX_HASH]: txHash,\n })\n\n // Monitor the latest block to find a potential speed-up tx\n txMonitor({ sender: userAddress, hash: txHash, data: deploymentTx.encodeABI() })\n .then((txReceipt) => {\n // txMonitor returns the txReceipt from `getTransactionReceipt` which doesn't throw\n // if it was reverted. We must check the status of the receipt manually.\n if (didTxRevert(txReceipt)) {\n reject(new Error('Sped-up tx reverted'))\n return\n }\n\n console.log('Sped-up tx mined:', txReceipt)\n trackEvent(CREATE_SAFE_EVENTS.CREATED_SAFE)\n resolve(txReceipt)\n })\n .catch((error) => {\n reject(parseError(error))\n })\n })\n .then((txReceipt) => {\n console.log('Original tx mined:', txReceipt)\n trackEvent(CREATE_SAFE_EVENTS.CREATED_SAFE)\n resolve(txReceipt)\n })\n .catch((error) => {\n // `deploymentTx` will throw if the transaction was reverted\n reject(parseError(error))\n })\n })\n}\n\nconst pollSafeInfo = async (safeAddress: string): Promise => {\n // exponential delay between attempts for around 4 min\n return await backOff(() => getSafeInfo(safeAddress), {\n startingDelay: 750,\n maxDelay: 20000,\n numOfAttempts: 19,\n retry: (e) => {\n console.info('waiting for client-gateway to provide Walliro information', e)\n return true\n },\n })\n}\n\nconst APP_URL_QUERY_PARAM = 'appUrl'\n\nfunction SafeCreationProcess(): ReactElement {\n const [safeCreationTxHash, setSafeCreationTxHash] = useState()\n const [creationTxPromise, setCreationTxPromise] = useState>()\n\n const dispatch = useDispatch()\n const userAddress = useSelector(userAccountSelector)\n const chainId = useSelector(currentChainId)\n const query = useQuery()\n const redirect = query.get('redirect')\n\n const [showModal, setShowModal] = useState(false)\n const [modalData, setModalData] = useState({ safeAddress: '' })\n const [showCouldNotLoadModal, setShowCouldNotLoadModal] = useState(false)\n const [newSafeAddress, setNewSafeAddress] = useState('')\n\n useEffect(() => {\n const safeCreationFormValues = loadSavedDataOrLeave()\n if (!safeCreationFormValues) {\n return\n }\n\n const newCreationTxHash = safeCreationFormValues[_FIELD_NEW_SAFE_CREATION_TX_HASH]\n if (newCreationTxHash) {\n setSafeCreationTxHash(newCreationTxHash)\n } else {\n setCreationTxPromise(createNewSafe(userAddress, setSafeCreationTxHash))\n }\n }, [userAddress])\n\n const onSafeCreated = async (safeAddress: string): Promise => {\n const createSafeFormValues = loadSavedDataOrLeave()\n\n const defaultSafeValue = createSafeFormValues[_FIELD_CREATE_SUGGESTED_SAFE_NAME]\n const safeName = createSafeFormValues[_FIELD_CREATE_CUSTOM_SAFE_NAME] || defaultSafeValue\n const owners = createSafeFormValues[_FIELD_CREATE_SAFE_OWNERS_LIST]\n\n // we update the address book with the owners and the new safe\n const ownersAddressBookEntry = owners.map(({ nameFieldName, addressFieldName }) => {\n const ownerAddress = createSafeFormValues[addressFieldName]\n return makeAddressBookEntry({\n address: createSafeFormValues[addressFieldName],\n name: createSafeFormValues[nameFieldName] || createSafeFormValues[_FIELD_NEW_SAFE_OWNER_ENS_LIST][ownerAddress],\n chainId,\n })\n })\n const safeAddressBookEntry = makeAddressBookEntry({ address: safeAddress, name: safeName, chainId })\n dispatch(addressBookSafeLoad([...ownersAddressBookEntry, safeAddressBookEntry]))\n\n // a default 5s wait before starting to request safe information\n await sleep(5000)\n\n try {\n await pollSafeInfo(safeAddress)\n } catch (e) {\n setNewSafeAddress(safeAddress)\n setShowCouldNotLoadModal(true)\n return\n }\n\n const safeProps = await buildSafe(safeAddress)\n dispatch(addOrUpdateSafe(safeProps))\n\n setShowModal(true)\n setModalData({\n safeAddress: safeProps.address,\n safeName,\n safeCreationTxHash: createSafeFormValues[_FIELD_NEW_SAFE_CREATION_TX_HASH],\n })\n }\n\n const onRetry = (): void => {\n trackEvent(CREATE_SAFE_EVENTS.RETRY_CREATE_SAFE)\n const safeCreationFormValues = loadSavedDataOrLeave()\n\n if (!safeCreationFormValues) {\n return\n }\n\n // Clear the previous tx hash\n setSafeCreationTxHash(undefined)\n saveToStorage(SAFE_PENDING_CREATION_STORAGE_KEY, {\n ...safeCreationFormValues,\n safeCreationTxHash: undefined,\n })\n\n setCreationTxPromise(createNewSafe(userAddress, setSafeCreationTxHash))\n }\n\n const onCancel = () => {\n trackEvent(CREATE_SAFE_EVENTS.CANCEL_CREATE_SAFE)\n removeFromStorage(SAFE_PENDING_CREATION_STORAGE_KEY)\n goToWelcomePage()\n }\n\n const onClickModalButton = () => {\n removeFromStorage(SAFE_PENDING_CREATION_STORAGE_KEY)\n\n const { safeName, safeCreationTxHash, safeAddress } = modalData\n\n if (redirect) {\n // If the URL includes ADDRESSED_ROUTE template, then we need to replace it with the new safe address\n if (redirect.includes(ADDRESSED_ROUTE)) {\n history.push({\n pathname: generateSafeRoute(redirect, {\n shortName: getShortName(),\n safeAddress,\n }),\n })\n } else {\n history.push({\n pathname: redirect,\n })\n }\n\n if (redirect.includes(APP_URL_QUERY_PARAM)) {\n trackEvent({ ...SAFE_APPS_EVENTS.SHARED_APP_OPEN_AFTER_SAFE_CREATION })\n }\n\n return\n }\n\n history.push({\n pathname: generateSafeRoute(SAFE_ROUTES.DASHBOARD, {\n shortName: getShortName(),\n safeAddress,\n }),\n state: {\n name: safeName,\n tx: safeCreationTxHash,\n },\n })\n }\n\n return (\n <>\n \n {showModal && (\n \n \n You just created a new Walliro on \n \n \n You will only be able to use this Walliro on \n \n \n If you send assets on other networks to this address,{' '}\n you will not be able to access them\n \n \n }\n footer={\n \n \n \n Continue\n \n \n \n }\n />\n )}\n {showCouldNotLoadModal && newSafeAddress && (\n \n \n We are currently unable to load the Walliro but it was successfully created and can be found
\n under the following address{' '}\n \n
\n \n }\n footer={\n \n \n \n }\n />\n )}\n \n )\n}\n\nexport default SafeCreationProcess\n","import React, { ReactElement, useEffect } from 'react'\nimport { useForm } from 'react-final-form'\nimport { useSelector } from 'react-redux'\nimport styled from 'styled-components'\nimport TableContainer from '@material-ui/core/TableContainer'\n\nimport Block from 'src/components/layout/Block'\nimport Col from 'src/components/layout/Col'\nimport Hairline from 'src/components/layout/Hairline'\nimport Paragraph from 'src/components/layout/Paragraph'\nimport Row from 'src/components/layout/Row'\nimport { background, border, lg, sm } from 'src/theme/variables'\nimport {\n FIELD_CREATE_CUSTOM_SAFE_NAME,\n FIELD_CREATE_SUGGESTED_SAFE_NAME,\n FIELD_NEW_SAFE_GAS_LIMIT,\n FIELD_NEW_SAFE_GAS_PRICE,\n FIELD_NEW_SAFE_PROXY_SALT,\n FIELD_NEW_SAFE_THRESHOLD,\n FIELD_NEW_SAFE_OWNER_ENS_LIST,\n FIELD_CREATE_SAFE_OWNERS_LIST,\n FIELD_NEW_SAFE_GAS_MAX_PRIO_FEE,\n} from '../fields/starterFields'\nimport { getExplorerInfo, getNativeCurrency } from 'src/config'\nimport { useEstimateSafeCreationGas } from 'src/logic/hooks/useEstimateSafeCreationGas'\nimport NetworkLabel from 'src/components/NetworkLabel/NetworkLabel'\nimport PrefixedEthHashInfo from 'src/components/PrefixedEthHashInfo'\nimport { useStepper } from 'src/components/StepperWalliro/stepperContext'\nimport { providerNameSelector } from 'src/logic/wallets/store/selectors'\nimport { objectByString } from 'src/utils/objects'\n\nexport const reviewNewSafeStepLabel = 'Review'\n\nfunction CreateWalliro(): ReactElement | null {\n const createSafeForm = useForm()\n const createSafeFormValues = createSafeForm.getState().values\n\n const defaultSafeValue = objectByString(createSafeFormValues, FIELD_CREATE_SUGGESTED_SAFE_NAME)\n const safeName = objectByString(createSafeFormValues, FIELD_CREATE_CUSTOM_SAFE_NAME) || defaultSafeValue\n const threshold = objectByString(createSafeFormValues, FIELD_NEW_SAFE_THRESHOLD)\n const owners = objectByString(createSafeFormValues, FIELD_CREATE_SAFE_OWNERS_LIST)\n const ownersWithENSName = objectByString(createSafeFormValues, FIELD_NEW_SAFE_OWNER_ENS_LIST)\n\n const numberOfOwners = owners.length\n const safeCreationSalt = objectByString(createSafeFormValues, FIELD_NEW_SAFE_PROXY_SALT)\n const ownerAddresses = owners.map(({ addressFieldName }) =>\n objectByString(createSafeFormValues, 'create.' + addressFieldName),\n )\n\n const { gasCostFormatted, gasLimit, gasPrice, gasMaxPrioFee } = useEstimateSafeCreationGas({\n addresses: ownerAddresses,\n numOwners: numberOfOwners,\n safeCreationSalt,\n })\n const nativeCurrency = getNativeCurrency()\n\n useEffect(() => {\n createSafeForm.change(FIELD_NEW_SAFE_GAS_LIMIT, gasLimit)\n createSafeForm.change(FIELD_NEW_SAFE_GAS_PRICE, gasPrice)\n createSafeForm.change(FIELD_NEW_SAFE_GAS_MAX_PRIO_FEE, gasMaxPrioFee)\n }, [gasLimit, gasPrice, createSafeForm, gasMaxPrioFee])\n\n return (\n \n \n \n \n \n Details\n \n \n \n \n Name of new Walliro\n \n \n {safeName}\n \n \n \n \n Any transaction requires the confirmation of:\n \n \n {`${threshold} out of ${numberOfOwners} owners`}\n \n \n \n \n \n \n \n \n {`${numberOfOwners} Walliro owners`}\n \n \n \n {owners.map(({ nameFieldName, addressFieldName }) => {\n const ownerAddress = objectByString(createSafeFormValues, 'create.' + addressFieldName)\n const ownerName =\n objectByString(createSafeFormValues, 'create.' + nameFieldName) || ownersWithENSName[ownerAddress]\n return (\n \n \n \n \n \n \n \n \n )\n })}\n \n \n \n \n You're about to create a new Walliro on and will have to confirm a transaction with your\n currently connected wallet. The creation will cost approximately {gasCostFormatted} {nativeCurrency.symbol}.\n The exact amount will be determined by your wallet.\n \n \n \n )\n}\n\nexport default CreateWalliro\n\nconst DetailsContainer = styled(Block)`\n padding: ${lg};\n border-right: solid 1px ${border};\n height: 100%;\n`\n\nconst SafeNameParagraph = styled(Paragraph)`\n text-overflow: ellipsis;\n overflow: hidden;\n`\nconst TitleContainer = styled(Block)`\n padding: ${lg};\n`\n\nconst OwnersAddressesContainer = styled(Row)`\n align-items: center;\n min-width: fit-content;\n padding: ${sm};\n padding-left: ${lg};\n`\nconst DescriptionContainer = styled(Row)`\n background-color: ${background};\n padding: ${lg};\n text-align: center;\n`\n","import { Fragment, ReactElement } from 'react'\nimport { useSelector } from 'react-redux'\nimport { useForm } from 'react-final-form'\nimport TableContainer from '@material-ui/core/TableContainer'\nimport styled from 'styled-components'\n\nimport Block from 'src/components/layout/Block'\nimport { border, lg, sm, xs } from 'src/theme/variables'\nimport Row from 'src/components/layout/Row'\nimport Col from 'src/components/layout/Col'\nimport Paragraph from 'src/components/layout/Paragraph'\nimport { getExplorerInfo } from 'src/config'\nimport { userAccountSelector } from 'src/logic/wallets/store/selectors'\nimport Hairline from 'src/components/layout/Hairline'\nimport PrefixedEthHashInfo from 'src/components/PrefixedEthHashInfo'\nimport {\n FIELD_LOAD_SAFE_ADDRESS,\n FIELD_LOAD_SAFE_OWNER_LIST,\n FIELD_SAFE_THRESHOLD,\n StarterFormValues,\n} from '../fields/starterFields'\nimport { getLoadSafeName, getOwnerName } from '../fields/utils'\nimport NetworkLabel from 'src/components/NetworkLabel/NetworkLabel'\nimport { currentNetworkAddressBookAsMap } from 'src/logic/addressBook/store/selectors'\nimport { objectByString } from 'src/utils/objects'\n\nexport const reviewLoadStepLabel = 'Review'\n\nfunction ReviewLoadStep(): ReactElement {\n const loadSafeForm = useForm()\n const userAddress = useSelector(userAccountSelector)\n const addressBook = useSelector(currentNetworkAddressBookAsMap)\n\n const formValues = loadSafeForm.getState().values as StarterFormValues\n\n const safeName = getLoadSafeName(formValues, addressBook)\n const safeAddress = objectByString(formValues, FIELD_LOAD_SAFE_ADDRESS) || ''\n const threshold = objectByString(formValues, FIELD_SAFE_THRESHOLD)\n const ownerList = objectByString(formValues, FIELD_LOAD_SAFE_OWNER_LIST) || []\n\n const ownerListWithNames = ownerList.map((owner) => {\n const ownerName = getOwnerName(formValues, owner.address)\n return {\n ...owner,\n name: ownerName,\n }\n })\n\n const isUserConnectedWalletASAfeOwner = checkIfUserAddressIsAnOwner(ownerList, userAddress)\n\n return (\n \n \n \n \n \n Review details\n \n \n \n \n Network\n \n \n \n \n \n \n \n Name of the Walliro\n \n \n {safeName}\n \n \n \n \n Walliro address\n \n \n \n \n \n \n \n Connected wallet client is owner?\n \n \n {isUserConnectedWalletASAfeOwner ? 'Yes' : 'No (read-only)'}\n \n \n \n \n Any transaction requires the confirmation of:\n \n \n {`${threshold} out of ${ownerList.length} owners`}\n \n \n \n \n \n \n \n \n {`${ownerList.length} Walliro owners`}\n \n \n \n {ownerListWithNames.map((owner, index) => (\n \n \n \n \n \n \n {index !== ownerList.length - 1 && }\n \n ))}\n \n \n \n )\n}\n\nexport default ReviewLoadStep\n\nfunction checkIfUserAddressIsAnOwner(owners, userAddress) {\n return owners.some((owner) => owner.address === userAddress)\n}\n\nconst DetailsContainer = styled(Block)`\n padding: ${lg};\n border-right: solid 1px ${border};\n height: 100%;\n`\n\nconst OwnersContainer = styled(Block)`\n padding: ${lg};\n`\n\nconst OwnerItemContainer = styled(Row)`\n align-items: center;\n min-width: fit-content;\n padding: ${sm};\n padding-left: ${lg};\n`\n\nconst SafeAddressContainer = styled(Row)`\n margin-top: ${xs};\n align-items: center;\n`\nconst StyledParagraph = styled(Paragraph)`\n margin-top: 4px;\n`\n","import { useEffect } from 'react'\nimport { useForm } from 'react-final-form'\nimport { useSelector } from 'react-redux'\nimport { useStepper } from 'src/components/StepperWalliro/stepperContext'\nimport { providerNameSelector } from 'src/logic/wallets/store/selectors'\nimport { FIELD_STARTER_TYPE, TypeForm } from '../fields/starterFields'\nimport CreateWalliro from './Create'\nimport ReviewLoadStep from './Load'\nconst StepFive = () => {\n const provider = useSelector(providerNameSelector)\n\n const { setCurrentStep } = useStepper()\n\n useEffect(() => {\n if (!provider) {\n setCurrentStep(0)\n }\n }, [provider, setCurrentStep])\n\n const StarterForm = useForm()\n const StarterFormValues = StarterForm.getState().values\n if (StarterFormValues[FIELD_STARTER_TYPE] === TypeForm.open) {\n return \n } else {\n return \n }\n}\n\nexport default StepFive\n","import { Fragment, useEffect, useMemo, useState } from 'react'\nimport StepperForm, { StepFormElement } from 'src/components/StepperFormWalliro/StepperForm'\nimport {\n CREATE_SAFE_CATEGORY,\n CREATE_SAFE_EVENTS,\n LOAD_SAFE_CATEGORY,\n LOAD_SAFE_EVENTS,\n} from 'src/utils/events/createLoadSafe'\nimport StepOne from './StepOne'\nimport StepTwo from './StepTwo'\nimport StepThere from './StepThere'\nimport StepFour from './StepFour'\nimport { getChainInfo, getShortName } from 'src/config'\nimport { useDispatch, useSelector } from 'react-redux'\nimport {\n availableSelector,\n providerNameSelector,\n shouldSwitchWalletChain,\n userAccountSelector,\n} from 'src/logic/wallets/store/selectors'\nimport {\n FIELD_CREATE_CUSTOM_SAFE_NAME,\n FIELD_CREATE_SUGGESTED_SAFE_NAME,\n FIELD_MAX_OWNER_NUMBER,\n FIELD_NEW_SAFE_PROXY_SALT,\n FIELD_NEW_SAFE_THRESHOLD,\n FIELD_CREATE_SAFE_OWNERS_LIST,\n FIELD_STARTER_TYPE,\n SAFE_PENDING_CREATION_STORAGE_KEY,\n StarterFormValues,\n TypeForm,\n FIELD_LOAD_SAFE_ADDRESS,\n FIELD_LOAD_SAFE_OWNER_LIST,\n FIELD_SAFE_THRESHOLD,\n FIELD_LOAD_SUGGESTED_SAFE_NAME,\n FIELD_LOAD_IS_LOADING_SAFE_ADDRESS,\n FIELD_NEW_SAFE_OWNER_ENS_LIST,\n} from './fields/starterFields'\nimport { currentNetworkAddressBookAsMap } from 'src/logic/addressBook/store/selectors'\nimport { useHistory, useLocation } from 'react-router-dom'\nimport { useMnemonicSafeName } from 'src/logic/hooks/useMnemonicName'\nimport { reverseENSLookup } from 'src/logic/wallets/getWeb3'\nimport queryString from 'query-string'\nimport styled from 'styled-components'\nimport { Loader } from '@gnosis.pm/safe-react-components'\nimport SafeCreationProcess from './components/SafeCreationProcess'\nimport { deepen, objectByString } from 'src/utils/objects'\nimport StepFive from './StepFive'\nimport { trackEvent } from 'src/utils/googleTagManager'\nimport { loadFromStorage, saveToStorage } from 'src/utils/storage'\nimport { loadSafeAddressStepValidations } from './StepFour/Load/LoadSafeAddressStep'\nimport { isValidAddress } from 'src/utils/isValidAddress'\nimport { getLoadSafeName, getOwnerName } from './fields/utils'\nimport { AddressBookEntry, makeAddressBookEntry } from 'src/logic/addressBook/model/addressBook'\nimport { checksumAddress } from 'src/utils/checksumAddress'\nimport { addressBookSafeLoad } from 'src/logic/addressBook/store/actions'\nimport { currentChainId } from 'src/logic/config/store/selectors'\nimport { buildSafe } from 'src/logic/safe/store/actions/fetchSafe'\nimport { loadStoredSafes, saveSafes } from 'src/logic/safe/utils'\nimport { addOrUpdateSafe } from 'src/logic/safe/store/actions/addOrUpdateSafe'\nimport {\n extractPrefixedSafeAddress,\n generateSafeRoute,\n LOAD_SPECIFIC_SAFE_ROUTE,\n SAFE_ROUTES,\n STARTER_ROUTE,\n} from '../routes'\nimport { setChainId } from 'src/logic/config/utils'\nimport { ChainId } from 'src/config/chain'\n\nconst CreateWalliro = () => {\n const dispatch = useDispatch()\n const history = useHistory()\n\n const [safePendingToBeCreated, setSafePendingToBeCreated] = useState()\n const [initialFormValues, setInitialFormValues] = useState<{\n open?: StarterFormValues\n load?: StarterFormValues\n locationNetwork?: ChainId\n }>()\n const selectedNetwork = getChainInfo()\n const providerName = useSelector(providerNameSelector)\n const isWalletConnected = !!useSelector(availableSelector)\n const isWrongNetwork = useSelector(shouldSwitchWalletChain)\n const provider = !!providerName && !isWrongNetwork\n\n const [isLoading, setIsLoading] = useState(false)\n const [typeStarter, setTypeStarter] = useState()\n\n const userWalletAddress = useSelector(userAccountSelector)\n const addressBook = useSelector(currentNetworkAddressBookAsMap)\n const location = useLocation()\n const safeRandomName = useMnemonicSafeName()\n const chainId = useSelector(currentChainId)\n const { safeAddress } = extractPrefixedSafeAddress(undefined, LOAD_SPECIFIC_SAFE_ROUTE)\n\n useEffect(() => {\n const parsed = queryString.parse(location.search)\n const chainId = parsed['network']\n\n if (typeof chainId === 'string' && chainId) {\n setChainId(chainId)\n setInitialFormValues((prev) => ({\n ...prev,\n locationNetwork: chainId,\n }))\n\n history.replace(history.location.pathname)\n }\n }, [])\n\n const resetLocationNetwork = () => {\n setInitialFormValues((prev) => ({\n ...prev,\n locationNetwork: undefined,\n }))\n }\n\n const [isSubti, setIsSubti] = useState(false)\n\n useEffect(() => {\n const checkIfSafeIsPendingToBeCreated = async (): Promise => {\n setIsLoading(true)\n const safePendingToBeCreated = await Promise.resolve(\n loadFromStorage(SAFE_PENDING_CREATION_STORAGE_KEY),\n )\n\n if (provider) {\n setSafePendingToBeCreated(safePendingToBeCreated)\n }\n setIsLoading(false)\n }\n checkIfSafeIsPendingToBeCreated()\n }, [provider])\n\n const updateAddressBook = (values: StarterFormValues) => {\n const ownerList = objectByString(values, FIELD_LOAD_SAFE_OWNER_LIST) as AddressBookEntry[]\n const ownerEntries = ownerList\n .map((owner) => {\n const ownerName = getOwnerName(values, owner.address)\n return {\n ...owner,\n name: ownerName,\n }\n })\n .filter((owner) => !!owner.name)\n\n const safeEntry = makeAddressBookEntry({\n address: checksumAddress(objectByString(values, FIELD_LOAD_SAFE_ADDRESS) || ''),\n name: getLoadSafeName(values, addressBook),\n chainId,\n })\n\n dispatch(addressBookSafeLoad([...ownerEntries, safeEntry]))\n }\n\n const submitForm = async (values: StarterFormValues): Promise => {\n // Track number of owners\n const typeForm = objectByString(values, 'starterType')\n if (typeForm === TypeForm.open) {\n trackEvent({\n ...CREATE_SAFE_EVENTS.OWNERS,\n label: objectByString(values, FIELD_CREATE_SAFE_OWNERS_LIST).length,\n })\n // Track threshold\n trackEvent({\n ...CREATE_SAFE_EVENTS.THRESHOLD,\n label: objectByString(values, FIELD_NEW_SAFE_THRESHOLD),\n })\n\n saveToStorage(SAFE_PENDING_CREATION_STORAGE_KEY, { ...values['create'] })\n setSafePendingToBeCreated(values['create'])\n } else {\n const address = objectByString(values, FIELD_LOAD_SAFE_ADDRESS)\n if (!isValidAddress(address)) {\n return\n }\n setIsSubti(true)\n\n // Track number of owners\n trackEvent({\n ...LOAD_SAFE_EVENTS.OWNERS,\n label: objectByString(values, FIELD_LOAD_SAFE_OWNER_LIST).length,\n })\n\n const threshold = objectByString(values, FIELD_SAFE_THRESHOLD)\n if (threshold) {\n // Track threshold\n trackEvent({\n ...LOAD_SAFE_EVENTS.THRESHOLD,\n label: threshold,\n })\n }\n\n trackEvent(LOAD_SAFE_EVENTS.GO_TO_SAFE)\n\n updateAddressBook(values)\n\n const checksummedAddress = checksumAddress(address || '')\n const safeProps = await buildSafe(checksummedAddress)\n const storedSafes = loadStoredSafes() || {}\n storedSafes[checksummedAddress] = safeProps\n\n saveSafes(storedSafes)\n dispatch(addOrUpdateSafe(safeProps))\n\n // Go to the newly added Safe\n history.push(\n generateSafeRoute(SAFE_ROUTES.DASHBOARD, {\n shortName: getShortName(),\n safeAddress: checksummedAddress,\n }),\n )\n }\n }\n\n useEffect(() => {\n const initialValues: any = deepen({\n [FIELD_LOAD_SUGGESTED_SAFE_NAME]: safeRandomName,\n [FIELD_LOAD_SAFE_ADDRESS]: safeAddress,\n [FIELD_LOAD_IS_LOADING_SAFE_ADDRESS]: false,\n [FIELD_LOAD_SAFE_OWNER_LIST]: [],\n })\n setInitialFormValues((prev) => ({\n ...prev,\n load: initialValues,\n }))\n }, [safeAddress, safeRandomName])\n\n useEffect(() => {\n let isCurrent = true\n if (location.state === 'reset') {\n setSafePendingToBeCreated(undefined)\n history.push({\n pathname: STARTER_ROUTE,\n state: undefined,\n })\n }\n if (provider && userWalletAddress) {\n const getInitValues = async () => {\n const initialValuesFromUrl = await getInitialValues(userWalletAddress, addressBook, location, safeRandomName)\n if (isCurrent) {\n setInitialFormValues((prev) => ({\n ...prev,\n open: initialValuesFromUrl,\n }))\n }\n }\n\n if (!isSubti) {\n getInitValues()\n }\n }\n return () => {\n isCurrent = false\n }\n }, [provider, userWalletAddress, addressBook, location, safeRandomName, isSubti])\n\n const isInitializing = !provider || !initialFormValues?.open\n\n return !!safePendingToBeCreated ? (\n \n ) : (\n \n \n {isLoading ? (\n \n \n \n ) : (\n \n )}\n \n \n \n \n \n {\n setIsSubti(false)\n setTypeStarter(type)\n }}\n />\n \n loadSafeAddressStepValidations(values)}\n >\n \n \n \n \n \n \n )\n}\n\nexport default CreateWalliro\n\nconst DEFAULT_THRESHOLD_VALUE = 1\n\nasync function getInitialValues(userAddress, addressBook, location, suggestedSafeName): Promise {\n const query = queryString.parse(location.search, { arrayFormat: 'comma' })\n const { name, owneraddresses, ownernames, threshold } = query\n\n // if owners are not present in the URL we use current user account as default owner\n const isOwnersPresentInTheUrl = !!owneraddresses\n const ownersFromUrl = Array.isArray(owneraddresses) ? owneraddresses : [owneraddresses]\n const owners = isOwnersPresentInTheUrl ? ownersFromUrl : [userAddress]\n\n // we set the owner names\n const ownersNamesFromUrl = Array.isArray(ownernames) ? ownernames : [ownernames]\n const userAddressName = [addressBook[userAddress]?.name || '']\n const ownerNames = isOwnersPresentInTheUrl ? ownersNamesFromUrl : userAddressName\n\n const thresholdFromURl = Number(threshold)\n const isValidThresholdInTheUrl =\n threshold && !Number.isNaN(threshold) && thresholdFromURl <= owners.length && thresholdFromURl > 0\n\n return deepen({\n [FIELD_CREATE_SUGGESTED_SAFE_NAME]: suggestedSafeName,\n [FIELD_CREATE_CUSTOM_SAFE_NAME]: name,\n [FIELD_NEW_SAFE_THRESHOLD]: isValidThresholdInTheUrl ? threshold : DEFAULT_THRESHOLD_VALUE,\n [FIELD_CREATE_SAFE_OWNERS_LIST]: owners.map((owner, index) => ({\n nameFieldName: `owner-name-${index}`,\n addressFieldName: `owner-address-${index}`,\n })),\n [FIELD_NEW_SAFE_OWNER_ENS_LIST]: (\n await Promise.all(\n owners.map(async (address) => {\n return { [address]: await reverseENSLookup(address) }\n }),\n )\n ).reduce((acc, owner) => {\n return { ...acc, ...owner }\n }, {}),\n // we set owners address values as owner-address-${index} format in the form state\n ...owners.reduce(\n (ownerAddressFields, ownerAddress, index) => ({\n ...ownerAddressFields,\n [`create.owner-address-${index}`]: ownerAddress,\n }),\n {},\n ),\n // we set owners name values as owner-name-${index} format in the form state\n ...ownerNames.reduce(\n (ownerNameFields, ownerName, index) => ({\n ...ownerNameFields,\n [`create.owner-name-${index}`]: ownerName,\n }),\n {},\n ),\n [FIELD_MAX_OWNER_NUMBER]: owners.length,\n [FIELD_NEW_SAFE_PROXY_SALT]: Date.now(),\n }) as StarterFormValues\n}\n\nconst LoaderContainer = styled.div`\n display: flex;\n justify-content: center;\n align-items: center;\n height: 100%;\n`\n","import { createSelector } from 'reselect'\n\nimport { TOKEN_REDUCER_ID, TokenState } from 'src/logic/tokens/store/reducer/tokens'\nimport { AppReduxState } from 'src/store'\n\nexport const tokensSelector = (state: AppReduxState): TokenState => state[TOKEN_REDUCER_ID]\n\nexport const tokenListSelector = createSelector(tokensSelector, (tokens) => tokens.toList())\n\nexport const orderedTokenListSelector = createSelector(tokenListSelector, (tokens) =>\n tokens.sortBy((token) => token.get('symbol')),\n)\n","import * as Sentry from '@sentry/react'\nimport { List } from 'immutable'\nimport { createSelector } from 'reselect'\n\nimport { Token } from 'src/logic/tokens/store/model/token'\nimport { tokensSelector } from 'src/logic/tokens/store/selectors'\nimport { getEthAsToken } from 'src/logic/tokens/utils/tokenHelpers'\nimport { isUserAnOwner, sameAddress } from 'src/logic/wallets/ethAddresses'\nimport { shouldSwitchWalletChain, userAccountSelector } from 'src/logic/wallets/store/selectors'\n\nimport { currentSafe, currentSafeBalances } from 'src/logic/safe/store/selectors'\nimport { SafeRecord } from 'src/logic/safe/store/models/safe'\n\nexport const grantedSelector = createSelector(\n userAccountSelector,\n currentSafe,\n shouldSwitchWalletChain,\n (userAccount: string, safe: SafeRecord, isWrongChain: boolean): boolean => {\n return isUserAnOwner(safe, userAccount) && !isWrongChain && !sameAddress(userAccount, safe.address)\n },\n)\n\nexport const sameAddressAsSafeSelector = createSelector(\n userAccountSelector,\n currentSafe,\n (userAccount: string, safe: SafeRecord): boolean => sameAddress(userAccount, safe.address),\n)\n\nconst safeEthAsTokenSelector = createSelector(currentSafe, (safe?: SafeRecord): Token | undefined => {\n if (!safe) {\n return undefined\n }\n\n return getEthAsToken(safe.ethBalance)\n})\n\nexport const extendedSafeTokensSelector = createSelector(\n currentSafeBalances,\n tokensSelector,\n safeEthAsTokenSelector,\n (safeBalances, tokensList, ethAsToken): List => {\n const extendedTokens: Array = []\n\n if (!Array.isArray(safeBalances)) {\n // We migrated from immutable Map to array in v3.5.0. Previously stored safes could be still using an object\n // to store balances. We add this check to avoid the app to break and refetch the information correctly\n Sentry.captureMessage(\n 'There was an error loading `safeBalances` in `extendedSafeTokensSelector`, probably safe loaded prior to v3.5.0',\n )\n return List([])\n }\n\n safeBalances.forEach((safeBalance) => {\n const tokenAddress = safeBalance.tokenAddress\n\n if (!tokenAddress) {\n return\n }\n\n const baseToken = sameAddress(tokenAddress, ethAsToken?.address) ? ethAsToken : tokensList.get(tokenAddress)\n\n if (!baseToken) {\n return\n }\n\n const token = baseToken.set('balance', safeBalance)\n extendedTokens.push(token)\n })\n\n return List(extendedTokens)\n },\n)\n\nexport const safeKnownCoins = createSelector(\n tokensSelector,\n safeEthAsTokenSelector,\n (safeTokens, nativeCurrencyAsToken): List => {\n if (nativeCurrencyAsToken) {\n return safeTokens.set(nativeCurrencyAsToken.address, nativeCurrencyAsToken).toList()\n }\n\n return safeTokens.toList()\n },\n)\n","import hash from 'object-hash'\nimport isEqual from 'lodash/isEqual'\nimport memoize from 'lodash/memoize'\nimport { createSelectorCreator, defaultMemoize } from 'reselect'\n\nimport { AppReduxState } from 'src/store'\n\nexport const createIsEqualSelector = createSelectorCreator(defaultMemoize, isEqual)\n\nconst hashFn = (gatewayTransactions: AppReduxState['gatewayTransactions'], safeAddress: string): string =>\n hash(gatewayTransactions[safeAddress] ?? {})\n\nexport const createHashBasedSelector = createSelectorCreator(memoize as any, hashFn)\n","import get from 'lodash/get'\nimport { createSelector } from 'reselect'\n\nimport {\n isMultisigExecutionInfo,\n StoreStructure,\n Transaction,\n TxLocation,\n} from 'src/logic/safe/store/models/types/gateway.d'\nimport { GATEWAY_TRANSACTIONS_ID } from 'src/logic/safe/store/reducer/gatewayTransactions'\nimport { currentChainId } from 'src/logic/config/store/selectors'\nimport { createHashBasedSelector } from 'src/logic/safe/store/selectors/utils'\nimport { AppReduxState } from 'src/store'\nimport { currentSafeNonce } from 'src/logic/safe/store/selectors/index'\nimport { currentSafeAddress } from 'src/logic/currentSession/store/selectors'\n\nconst BATCH_LIMIT = 10\n\nexport const gatewayTransactions = (state: AppReduxState): AppReduxState['gatewayTransactions'] => {\n return state[GATEWAY_TRANSACTIONS_ID]\n}\n\nexport const historyTransactions = createHashBasedSelector(\n gatewayTransactions,\n currentChainId,\n currentSafeAddress,\n (gatewayTransactions, chainId, safeAddress): StoreStructure['history'] | undefined => {\n return chainId && safeAddress ? gatewayTransactions[chainId]?.[safeAddress]?.history : undefined\n },\n)\n\nexport const pendingTransactions = createSelector(\n gatewayTransactions,\n currentChainId,\n currentSafeAddress,\n (gatewayTransactions, chainId, safeAddress): StoreStructure['queued'] | undefined => {\n return chainId && safeAddress ? gatewayTransactions[chainId]?.[safeAddress]?.queued : undefined\n },\n)\n\nexport const nextTransactions = createSelector(\n pendingTransactions,\n (pendingTransactions): StoreStructure['queued']['next'] | undefined => {\n return pendingTransactions?.next\n },\n)\n\nexport const nextTransaction = createSelector(nextTransactions, (nextTxs) => {\n if (!nextTxs) return\n\n const [txs] = Object.values(nextTxs)\n return txs // If a reject tx exists, this will still return the initial tx\n})\n\nexport const queuedTransactions = createSelector(\n pendingTransactions,\n (pendingTransactions): StoreStructure['queued']['queued'] | undefined => {\n return pendingTransactions?.queued\n },\n)\n\nconst txLocations: TxLocation[] = ['queued.next', 'queued.queued', 'history']\n\nexport const getTransactionWithLocationByAttribute = createSelector(\n gatewayTransactions,\n currentChainId,\n currentSafeAddress,\n (\n _: AppReduxState,\n attrDetails: { attributeName: keyof Transaction; attributeValue: Transaction[keyof Transaction] },\n ) => attrDetails,\n (gatewayTransactions, chainId, safeAddress, attrDetails) => {\n const { attributeName, attributeValue } = attrDetails\n for (const txLocation of txLocations) {\n const storedTxs: StoreStructure['history'] | StoreStructure['queued']['queued' | 'next'] | undefined = get(\n gatewayTransactions?.[chainId]?.[safeAddress],\n txLocation,\n )\n\n if (!storedTxs) {\n continue\n }\n\n for (const txs of Object.values(storedTxs)) {\n // If we want a deep comparison, we should use a lodash get/isEqual to deep compare keys/values\n const foundTx = txs.find((transaction) => transaction[attributeName] === attributeValue)\n\n if (foundTx) {\n return { transaction: foundTx, txLocation }\n }\n }\n }\n },\n)\n\nexport const getTransactionByAttribute = createSelector(\n gatewayTransactions,\n currentChainId,\n currentSafeAddress,\n getTransactionWithLocationByAttribute,\n (_gatewayTransactions, _chainId, _safeAddress, txWithLocation) => {\n return txWithLocation?.transaction\n },\n)\n\nexport const getTransactionsByNonce = createSelector(\n gatewayTransactions,\n currentChainId,\n currentSafeAddress,\n (_: AppReduxState, nonce: number) => nonce,\n (gatewayTransactions, chainId, safeAddress, nonce): Transaction[] => {\n let txsByNonce: Transaction[] = []\n\n for (const txLocation of txLocations) {\n const storedTxs: StoreStructure['history'] | StoreStructure['queued']['queued' | 'next'] | undefined = get(\n gatewayTransactions?.[chainId]?.[safeAddress],\n txLocation,\n )\n\n if (!storedTxs) {\n continue\n }\n\n for (const txs of Object.values(storedTxs)) {\n const txFoundByNonce = txs.filter(\n (tx) => isMultisigExecutionInfo(tx?.executionInfo) && tx.executionInfo?.nonce === nonce,\n )\n\n if (!txFoundByNonce.length) {\n continue\n }\n\n txsByNonce = [...txsByNonce, ...txFoundByNonce]\n }\n }\n\n return txsByNonce\n },\n)\n\nexport const getLastTransaction = createSelector(\n nextTransactions,\n queuedTransactions,\n historyTransactions,\n (nextTxs, queuedTxs, historyTxs) => {\n if (queuedTxs && Object.keys(queuedTxs).length > 0) {\n const queuedNonces = Object.keys(queuedTxs)\n const highestQueuedNonce = Number(queuedNonces.sort()[queuedNonces.length - 1])\n return Object.values(queuedTxs[highestQueuedNonce])[0]\n }\n\n if (nextTxs && Object.keys(nextTxs).length > 0) {\n return Object.values(nextTxs)[0][0]\n }\n\n if (historyTxs) {\n // History Txs are ordered by timestamp so no need to sort them.\n return (\n Object.values(historyTxs)\n .flat()\n .find((tx) => tx.executionInfo != undefined) || null\n )\n }\n\n return null\n },\n)\n\nexport const getLastTxNonce = createSelector(getLastTransaction, (lastTx) => {\n return isMultisigExecutionInfo(lastTx?.executionInfo) ? lastTx?.executionInfo.nonce : undefined\n})\n\nexport const getBatchableTransactions = createSelector(\n nextTransaction,\n queuedTransactions,\n currentSafeNonce,\n (nextTxs, queuedTxs, safeNonce) => {\n const batchableTransactions: Transaction[] = []\n let currentNonce = safeNonce\n\n if (!nextTxs || !queuedTxs) return batchableTransactions\n\n // We slice as to not disturb the default order but still start from the most recent tx\n const sortedNextTxs = nextTxs.slice().sort((a, b) => b.timestamp - a.timestamp)\n const sortedQueuedTxs = Object.values(queuedTxs).map((tx) => tx.slice().sort((a, b) => b.timestamp - a.timestamp))\n\n const allTxs = [sortedNextTxs, ...sortedQueuedTxs]\n\n Object.values(allTxs).forEach((txByNonce) => {\n txByNonce.forEach((tx) => {\n if (\n batchableTransactions.length < BATCH_LIMIT &&\n isMultisigExecutionInfo(tx.executionInfo) &&\n tx.executionInfo.nonce === currentNonce &&\n tx.executionInfo.confirmationsSubmitted >= tx.executionInfo.confirmationsRequired\n ) {\n batchableTransactions.push(tx)\n currentNonce = tx.executionInfo.nonce + 1\n }\n })\n })\n\n return batchableTransactions\n },\n)\n","import Button from '@material-ui/core/Button'\nimport { ReactElement } from 'react'\n\nconst calculateStyleBased = (minWidth, minHeight) => ({\n minWidth: minWidth && `${minWidth}px`,\n minHeight: minHeight && `${minHeight}px`,\n})\n\nconst GnoButton = ({ minWidth, minHeight = 35, testId = '', style = {}, ...props }: any): ReactElement => {\n const calculatedStyle = calculateStyleBased(minWidth, minHeight)\n\n return \n \n \n \n \n \n \n )}\n \n \n \n )\n}\n\nexport default Filter\n\nconst StyledFilterButton = styled(Button)<{ $isFiltered: boolean }>`\n &.MuiButton-root {\n align-items: center;\n background-color: ${({ $isFiltered }) => ($isFiltered ? primary200 : 'transparent')};\n border: ${({ $isFiltered }) => `2px solid ${$isFiltered ? primary300 : fontColor}`};\n color: #162d45;\n align-self: flex-end;\n margin-right: ${md};\n margin-top: -51px;\n margin-bottom: ${md};\n }\n`\n\nconst StyledFilterIconImage = styled.img`\n margin-right: ${sm};\n`\n\nconst Wrapper = styled.div`\n display: flex;\n flex-direction: column;\n box-sizing: border-box;\n position: relative;\n z-index: 1;\n width: 100%;\n`\n\nconst StyledPaper = styled(Paper)`\n border: 2px solid ${primary300};\n position: absolute;\n width: calc(100% - 30px);\n margin-left: 10px;\n top: 0;\n left: 0;\n box-shadow: 1px 2px 10px 0 rgba(40, 54, 61, 0.18);\n`\n\nconst FilterWrapper = styled.div`\n display: grid;\n grid-template-columns: 1fr 3fr;\n gap: ${lg};\n`\n\nconst TxTypeFormControl = styled(FormControl)`\n &.MuiFormControl-root {\n box-sizing: border-box;\n padding: ${lg};\n border-right: 2px solid ${grey400}; // Divider\n }\n`\n\nconst StyledFormLabel = styled(FormLabel)`\n &.MuiFormLabel-root {\n margin-bottom: ${lg};\n font-size: 12px;\n color: #b2bbc0;\n }\n`\n\nconst StyledRadioFormControlLabel = styled(FormControlLabel)`\n .MuiFormControlLabel-root {\n font-size: ${largeFontSize};\n }\n`\n\nconst ParamsFormControl = styled(FormControl)`\n &.MuiFormControl-root {\n box-sizing: border-box;\n padding: ${lg} 128px ${lg} ${lg};\n }\n`\n\nconst ParametersFormWrapper = styled.div`\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 26px;\n`\n\nconst ButtonWrapper = styled.div`\n grid-column: span 2;\n margin-top: 36px;\n display: grid;\n grid-template-columns: 100px 100px;\n gap: ${md};\n`\n","import { HTMLInputTypeAttribute, ReactElement } from 'react'\nimport { Control, FieldValues, Path, useController, UseControllerProps } from 'react-hook-form'\nimport TextField from '@material-ui/core/TextField/TextField'\n\nimport { formatInputValue, getFilterHelperText } from 'src/routes/safe/components/Transactions/TxList/Filter/utils'\n\ntype Props = {\n name: Path\n control: Control\n rules?: UseControllerProps['rules']\n label: string\n type?: HTMLInputTypeAttribute\n}\n\nconst RHFTextField = ({ name, rules, control, type, ...props }: Props): ReactElement => {\n const {\n field: { ref, value, ...field },\n fieldState: { error },\n } = useController({\n name,\n rules,\n control,\n })\n\n return (\n \n )\n}\n\nexport default RHFTextField\n","import { ReactElement, useState } from 'react'\nimport { FieldValues, Path, useController, UseFormReturn } from 'react-hook-form'\nimport { useSelector } from 'react-redux'\nimport Autocomplete from '@material-ui/lab/Autocomplete/Autocomplete'\nimport TextField from '@material-ui/core/TextField/TextField'\nimport InputAdornment from '@material-ui/core/InputAdornment/InputAdornment'\nimport CircularProgress from '@material-ui/core/CircularProgress/CircularProgress'\nimport styled from 'styled-components'\n\nimport { currentNetworkAddressBook } from 'src/logic/addressBook/store/selectors'\nimport { isValidEnsName, isValidCryptoDomainName } from 'src/logic/wallets/ethAddresses'\nimport { getAddressFromDomain } from 'src/logic/wallets/getWeb3'\nimport { isValidAddress, isValidPrefixedAddress } from 'src/utils/isValidAddress'\nimport { parsePrefixedAddress } from 'src/utils/prefixedAddress'\nimport { formatInputValue, getFilterHelperText } from 'src/routes/safe/components/Transactions/TxList/Filter/utils'\nimport { checksumAddress } from 'src/utils/checksumAddress'\n\ntype Props = {\n name: Path\n methods: UseFormReturn\n label: string\n}\n\nconst StyledAutocomplete = styled(Autocomplete)`\n .MuiAutocomplete-input:not([value='']) {\n text-overflow: ellipsis;\n overflow: hidden !important;\n padding-right: 34px !important;\n\n + .MuiAutocomplete-clearIndicator {\n visibility: visible;\n }\n }\n`\n\nconst RHFAddressSearchField = ({\n name,\n methods: { control },\n label,\n ...props\n}: Props): ReactElement => {\n const addressBookOnChain = useSelector(currentNetworkAddressBook)\n\n const [isResolving, setIsResolving] = useState(false)\n const [inputValue, setInputValue] = useState('')\n\n // Field that holds the address value\n const { field, fieldState } = useController({\n name,\n control,\n rules: {\n validate: (address) => {\n if (address && !isValidAddress(address) && !isValidPrefixedAddress(address)) {\n return `Invalid ${label.toLowerCase()}. Please enter an contacts entry, ENS domain, or valid address.`\n }\n },\n },\n })\n\n // On autocomplete selection/text input find address from contacts/resolve ENS domain\n const onInputChange = async (newValue: string) => {\n setInputValue(newValue)\n\n const addressBookEntry = addressBookOnChain.find(({ name }) => name === newValue)\n if (addressBookEntry) {\n field.onChange(addressBookEntry.address)\n return\n }\n\n if (isValidEnsName(newValue) || isValidCryptoDomainName(newValue)) {\n let resolvedAddress: string | undefined\n setIsResolving(true)\n try {\n resolvedAddress = await getAddressFromDomain(newValue)\n } catch {}\n setIsResolving(false)\n\n if (resolvedAddress) {\n const checksummedAddress = checksumAddress(resolvedAddress)\n field.onChange(checksummedAddress)\n return\n }\n }\n\n if (isValidAddress(newValue) || isValidPrefixedAddress(newValue)) {\n const { address } = parsePrefixedAddress(newValue)\n const checksummedAddress = checksumAddress(address)\n field.onChange(checksummedAddress)\n return\n }\n\n field.onChange(newValue)\n }\n\n return (\n name}\n onInputChange={(_, value) => onInputChange(value)}\n renderInput={({ inputProps, InputProps, ...params }) => (\n \n \n \n ) : (\n InputProps.endAdornment\n ),\n }}\n />\n )}\n />\n )\n}\n\nexport default RHFAddressSearchField\n","import Backdrop from '@material-ui/core/Backdrop'\nimport { makeStyles } from '@material-ui/core/styles'\nimport { ReactElement } from 'react'\nimport ReactDOM from 'react-dom'\n\nconst useStyles = makeStyles({\n root: {\n zIndex: 0,\n top: '72px',\n },\n})\n\nconst BackdropLayout = ({ isOpen }: { isOpen: boolean }): ReactElement | null => {\n const classes = useStyles()\n\n return ReactDOM.createPortal(, document.body)\n}\n\nexport default BackdropLayout\n","export default __webpack_public_path__ + \"static/media/filter-icon.db7b49b0.svg\";","import { FilterForm } from '.'\n\nexport const isValidAmount = (value: FilterForm['value']): string | undefined => {\n if (value && isNaN(Number(value))) {\n return 'Invalid number'\n }\n}\n\nexport const isValidNonce = (value: FilterForm['nonce']): string | undefined => {\n if (value.length === 0) {\n return\n }\n\n const number = Number(value)\n if (isNaN(number)) {\n return 'Invalid number'\n }\n if (number < 0) {\n return 'Nonce cannot be negative'\n }\n}\n","import { useEffect, useState } from 'react'\r\n\r\ntype IGetLangByCode = {\r\n locale: string\r\n language: string\r\n langLabel: string\r\n dir: 'ltr' | 'rtl'\r\n [index: string]: string\r\n}\r\n\r\ntype ITheme = {\r\n readonly color: 'dark' | 'default'\r\n readonly lang: IGetLangByCode\r\n readonly loading: boolean\r\n}\r\n\r\nconst INIT_STATE_THEME: ITheme = {\r\n color: 'default',\r\n lang: {\r\n locale: 'en-US',\r\n language: 'english',\r\n langLabel: 'en',\r\n dir: 'ltr',\r\n },\r\n loading: true,\r\n}\r\ntype getLangByCode = (code: string) => void\r\ntype changeColor = (name: typeof INIT_STATE_THEME.color) => void\r\n\r\ntype IState = typeof INIT_STATE_THEME\r\n\r\nexport interface IUseTheme extends IState {\r\n readonly getLangByCode: getLangByCode\r\n readonly changeColor: changeColor\r\n}\r\n\r\nconst useTheme = (): IUseTheme => {\r\n const [theme, setTheme] = useState(INIT_STATE_THEME)\r\n\r\n useEffect(() => {\r\n try {\r\n if (window.matchMedia) {\r\n window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', (e) => {\r\n changeColor(e.matches ? 'dark' : 'default')\r\n })\r\n }\r\n } catch (e) {}\r\n const theme = localStorage.getItem('theme')\r\n\r\n if (theme === 'dark' || theme === 'default') {\r\n changeColor(theme)\r\n } else {\r\n try {\r\n if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) {\r\n changeColor('dark')\r\n }\r\n } catch (e) {}\r\n }\r\n\r\n const lang = localStorage.getItem('lang')\r\n if (lang === 'en-US' || lang === 'fa-IR') {\r\n getLangByCode(lang)\r\n } else {\r\n getLangByCode('en-US')\r\n }\r\n }, [])\r\n const getLangByCode: getLangByCode = (code) => {\r\n setTheme((prevState) => ({\r\n ...prevState,\r\n loading: true,\r\n }))\r\n fetch(`${process.env.PUBLIC_URL}/langs/${code}.json`).then(async (obj: any) => {\r\n obj = await obj.json()\r\n document.documentElement.lang = obj['theme.locale']\r\n document.documentElement.dir = obj['dir']\r\n setTheme((prevState) => ({\r\n ...prevState,\r\n lang: obj,\r\n loading: false,\r\n }))\r\n })\r\n }\r\n\r\n const changeColor: changeColor = (name) => {\r\n document.body.setAttribute('data-theme', name)\r\n localStorage.setItem('theme', name)\r\n setTheme((prevState) => ({\r\n ...prevState,\r\n color: name,\r\n }))\r\n }\r\n\r\n return {\r\n ...theme,\r\n getLangByCode,\r\n changeColor,\r\n }\r\n}\r\nexport default useTheme\r\n","import {useState} from \"react\";\r\n\r\nexport type IUseSidebar = {\r\n readonly open : boolean,\r\n readonly setOpen : (val:boolean)=> void;\r\n}\r\nconst useSidebar = () : IUseSidebar=>{\r\n const [open,_setOpen] = useState(true);\r\n\r\n const setOpen = (val:boolean)=>{\r\n _setOpen(val);\r\n }\r\n\r\n return{\r\n open,\r\n setOpen\r\n }\r\n}\r\n\r\nexport default useSidebar;","import React, {useContext, createContext, useEffect, useCallback} from \"react\";\r\nimport useTheme, {IUseTheme} from \"./use-theme\";\r\nimport useSidebar , {IUseSidebar} from \"./use-sidebar\";\r\n\r\ninterface IProps {\r\n children : React.ReactNode\r\n}\r\n\r\ntype IContext = {\r\n theme : IUseTheme,\r\n sidebar : IUseSidebar\r\n}\r\n\r\nexport const Context = createContext({} as IContext);\r\n\r\nexport function Provider ({children} : IProps) {\r\n const theme = useTheme();\r\n const sidebar = useSidebar();\r\n\r\n const {changeColor : _changeColor,getLangByCode :_getLangByCode} = theme;\r\n const handlerStorage = useCallback(()=>{\r\n const _theme = localStorage.getItem('theme');\r\n if (_theme === \"dark\" || _theme === \"default\") {\r\n _changeColor(_theme)\r\n }\r\n const lang = localStorage.getItem('lang');\r\n if (lang === \"en-US\" || lang === \"fa-IR\") {\r\n _getLangByCode(lang)\r\n }\r\n },[_changeColor,_getLangByCode])\r\n useEffect(()=>{\r\n window.addEventListener('storage', handlerStorage);\r\n return ()=>{\r\n window.removeEventListener('storage', handlerStorage);\r\n }\r\n },[handlerStorage])\r\n\r\n return {!theme.loading ? children : ''};\r\n}\r\n\r\nexport const useMain = () => {\r\n return useContext(Context);\r\n};\r\n\r\n","export default __webpack_public_path__ + \"static/media/icon-tallyho.67fad711.svg\";","export default __webpack_public_path__ + \"static/media/icon-wallet-connect.5642eca7.svg\";","export default __webpack_public_path__ + \"static/media/icon-trezor.c1fa164a.svg\";","export default __webpack_public_path__ + \"static/media/icon-ledger.849c209b.svg\";","export default __webpack_public_path__ + \"static/media/icon-trust.086682a8.svg\";","export default __webpack_public_path__ + \"static/media/icon-lattice.a9d78baf.svg\";","export default __webpack_public_path__ + \"static/media/icon-fortmatic.04585e47.svg\";","export default __webpack_public_path__ + \"static/media/icon-portis.b673743d.svg\";","export default __webpack_public_path__ + \"static/media/icon-torus.c195727c.svg\";","export default __webpack_public_path__ + \"static/media/icon-coinbase.6fc17c3e.svg\";","export default __webpack_public_path__ + \"static/media/icon-safe-mobile.505b4c32.svg\";","// Icons\nimport metamaskIcon from './icon-metamask.png'\nimport tallyHoIcon from './icon-tallyho.svg'\nimport walletConnectIcon from './icon-wallet-connect.svg'\nimport trezorIcon from './icon-trezor.svg'\nimport ledgerIcon from './icon-ledger.svg'\nimport trustIcon from './icon-trust.svg'\nimport latticeIcon from './icon-lattice.svg'\nimport fortmaticIcon from './icon-fortmatic.svg'\nimport portisIcon from './icon-portis.svg'\nimport authereumIcon from './icon-authereum.png'\nimport torusIcon from './icon-torus.svg'\nimport coinbaseIcon from './icon-coinbase.svg'\nimport operaIcon from './icon-opera.png'\nimport squarelinkIcon from './icon-squarelink.png'\nimport keystoneIcon from './icon-keystone.png'\nimport safeMobileIcon from './icon-safe-mobile.svg'\nimport tronLinkIcon from './icon-tronlink.png'\n\nimport { WALLET_PROVIDER } from 'src/logic/wallets/getWeb3'\n\nconst WALLET_ICONS: { [key in WALLET_PROVIDER]: { src: string; height: number } } = {\n [WALLET_PROVIDER.METAMASK]: {\n src: metamaskIcon,\n height: 25,\n },\n [WALLET_PROVIDER.TALLYHO]: {\n src: tallyHoIcon,\n height: 25,\n },\n [WALLET_PROVIDER.WALLETCONNECT]: {\n src: walletConnectIcon,\n height: 25,\n },\n [WALLET_PROVIDER.TREZOR]: {\n src: trezorIcon,\n height: 25,\n },\n [WALLET_PROVIDER.LEDGER]: {\n src: ledgerIcon,\n height: 25,\n },\n [WALLET_PROVIDER.TRUST]: {\n src: trustIcon,\n height: 25,\n },\n [WALLET_PROVIDER.LATTICE]: {\n src: latticeIcon,\n height: 41,\n },\n [WALLET_PROVIDER.KEYSTONE]: {\n src: keystoneIcon,\n height: 41,\n },\n [WALLET_PROVIDER.FORTMATIC]: {\n src: fortmaticIcon,\n height: 25,\n },\n [WALLET_PROVIDER.PORTIS]: {\n src: portisIcon,\n height: 25,\n },\n [WALLET_PROVIDER.AUTHEREUM]: {\n src: authereumIcon,\n height: 25,\n },\n [WALLET_PROVIDER.TORUS]: {\n src: torusIcon,\n height: 30,\n },\n [WALLET_PROVIDER.OPERA]: {\n src: operaIcon,\n height: 25,\n },\n [WALLET_PROVIDER.COINBASE_WALLET]: {\n src: coinbaseIcon,\n height: 25,\n },\n [WALLET_PROVIDER.SQUARELINK]: {\n src: squarelinkIcon,\n height: 25,\n },\n [WALLET_PROVIDER.SAFE_MOBILE]: {\n src: safeMobileIcon,\n height: 25,\n },\n}\n\nexport default WALLET_ICONS\n","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACYAAAAoCAMAAACl6XjsAAABfVBMVEVHcEx/Rh2ARx2ESiLwiCLMu67cfCagZDOddlJ+Rx7pgiPlfyPshSN/Rxx+Rh2CSB6ASB2JTR7gkkl1SCbQciPUwLLMu6+BSB5/Rx2DSR5+RxzefR3ogCPlfiPGuLHhfiP2jCTvhyN/Rx3nfyPfo2/lfCTIuK7kfyP2jCPkfiPuhSTFtKjogSThfCR/Rx5+Rx3lfiPeeiTDs6koIR2DSh/ifCajWx6qYCDckVOBSR7jfiTyiCOYYTXLcCKpXiHEs6fDs6fCsKYjHBwhHx8iHR0iICB1a2ZyaGIiHyCPTx7ogSTlfyTwhyOASB7ziSTngCTrgyT2jCTthCT1iyPuhCX4jSSESh5/Rx6ITR/+kSTYbyDheSLjfSPBaiPacSDdcyCvYSK0ZCGTVSPGcSblhi/ngSPqgSTdu56mXSDaeSP6jiPmfSD5jSQcGhvimFdqUj/TbSJARUsyQE6tbDLOeyzZx7nayr7hsog7Nza/raDjjUF/VTjFtKhKNCB0amRMd0DeAAAASnRSTlMAe/oOkv4TAwgrpnA9n1n9vkYfHPv+xu2r9mgN6uI4Us5ji/n9Ln7G7pO61/K35ZXYiUji5s21zMnb0/r5aMipm2UkYjSGnPy0/l1QcU4AAALOSURBVHhehdJXXxpNFAbwBYIgoICCIKhgi91ETe/9fZ3ZXui92bvp5bPnzCwzK79c+Fxws3/mOXN2BSe+0Tnh1oBKTI7eqvypSUnaHP4XDIVeRn1cucKSJIUj4wMF6cVgYDr2KsrVXE4imUx6mEmHgoH786ZZ3b3H/usZAWW7R3fsAFFNhCrVwmaKdY4ylZdaqEgjI4yxUm7mpAjvjABjbt/QIIZJ1MF+Pu+eY3MMuwEwl2sfEidiBcdaeUl6yrcEkzks38IWMBnG2gUVTrIljSco4LUNGZxRaeZASW4X63Q5hznHyTGqpAfRwU5+WKGtaxC1SQsSKb+tfOyeTHWRDEyuNGhpf7me5EBjoYowFoEZ+gFx7pH+FYaTA0qBfSG6ErI2KcxZJMxVDhSkS1sV4twuNls0wVi4CYpEJ6yHwXEmpHJ5OxJTGNHhMLjH/BP0uQp2GpTwVhHY+orAExLt9ChxWhFWprYcFihaNKLDegZt7U4FuRpbPtbssONgRNECVjm6wYJFrR+5XK/VavVa9byO4L3qpWqMl/qznGlipV46b5xdturYIK//54sND7sAR3SnlfbZxeVFFYkw3MHV9dIQv8CAQ7qlXl+1kUoO78mMsQvwXiRbh8VjEenEqat9NlvUBmLJol2v6jDe89U0Vb7sDQa7k/UjxZSp04mjpw1ewBBRuV6qVbCCRFmzNNE0rOVZP2EZE9F0u10F10qQsr1hVTQ0WTSs7KwP2NA0wjxlUHWCmJRlo5jNELdlYidQaR92RINRp1P4vfPxnSAszis3XLkMD3Gn8+P0dGHh697e3vdvJyf/f4CrLqm8xFx/+IQ+jH/+QgK/wHbek9ZZwhSkq1MbwUW/f+buRJyIfn79+e/TuGBfomfi6UBmjH3NIL19Ffd6J2YEmhX92UqGbpEHzlzzeuNxL6ht9lmG0g5w5PbrtbWJN2/HyGB/AYd1QUewqrrRAAAAAElFTkSuQmCC\"","export default \"data:image/png;base64,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\"","export default \"data:image/png;base64,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\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAMAAAC7IEhfAAABtlBMVEVHcEyyDxH8SEj7GSvmGyv/SUn9IDDqFyf/Gy31JzL/Giz+Giy+FRmwChPmJS3cISnyFiqzCBX+S0u4BRerBg7/Gi3/TU39JzO4DhjkNTe0DxP+SUnHFSKvBRT/S0uvCBKuBBKpABWnABTnFCT4GCr+SkvSGSTdECH9SEjVFSTTGSHhNDX/Skr+Giz6Giv5RUWyCBakAwr5GSqtART/SkrKCRz+GSy7DhfaDiHvFynoFCTtFCjxFijSEiPNFyHmEiX+Gyr2Fyr0QkLwP0D0Q0PFGyP/S0qjBQTiLTX/Giy5CBq3CRr/Gy2yDQ/QJyf8GizYKyvLCx7jEybABRvqOjrYDyHaDyLzQEHsFSjLJSXPJibVKSnaMDCrARX/Gi3/TEz+Skr/Gy3/Gy78Giz+Giz/S0v0FyngESPqOTrvFSjhMzSmBgb2Q0T5R0i7FhaxCAvNIyP4GSvBBxq3ExPTDR/AGRnXDiHGChuqCgrrFCfeMDDyQEDUKSruPT6xDw/PCx/oEybJCh3cDyLtFSfHICDYLS3mNzfRJiahAwPwOjrGGh7kEyW1Axe7BRnEHx/NFiTVHyutAhXkSSDHAAAAX3RSTlMADS2/CBtPA/wRruDnKCNXO0q1zd33+UaAkpGlND3cw+tukSnO8c/zYsMemj7Xin0doTL4wtSdsv6w1PTf5J2RePb1vNpomn/obPL+ZWHx77T+1uqgZLDibLPi+YSq5l1x/o4AAAKMSURBVHheddNld+JgEIbhARJCcEuhQEupu7ts3dfdE9Sl6u6y/o8XJkkX+i7X5/s8k5wAFGPNE6qvHKfTLnZTUBLj6NdpAgF/TiDAtbV3l+jUKn++wiy4GokEOa0ZSEatP1dhthpdyyZvbpLZ7YZ2lpjTyVnwLFfJsrYaKPKYk7u4vmt+vsue3EmiHXtFQcYsaqROM/xEATmUxXu0g7JVFua+U3NyN9QJEoXrSGI3gKRGJ3datuCMa10MM14FIEorP19bMxSgBjLrKOMUj6s1fhGnhiIG/WYG6fE4pZIHtQwUc95togsX5DjkQY0DHmjW/0QX+vw79suDtRTx8R+tXKCVWQBWFwihQDsQTCui6w8AZk0omBcKqoFgfHqNDj6yMOEPotAzIxCo+ssD9MkDqpAY+ttYID3fu0R7JtCtikK1DJBaEnso8RkmpTCoAhKUxxLoqgUmI6IS4e0VipXDaETy39Ovb2PotgOGInEUGWWBNL1/iPbV8D5yjuIjNUBQzKT20ZQSukfOd1HcBATlVAqlZ1ighndPUHwcCI1CGgluABjf/YZOXhIPyVh5AfGNAGBuiEqI28o6PpzHV+Y3mLfRMxRtUjwYnMt1GHYA4OTgFhp8w0Ch1vtBWvp5Dm6grTFPYUn3SoNljSBqrt84RhtNxn8l7ZY7NwUST9+LU3Rcb6IxZdhWq3S3zErDPUvftuh0rNyhpGlla0cldjxf1quEAhbbmuTXwrR7zlrJ8/mKD9dZizpgPAOvfojWfsdSaUEIhwUhnXrXQvxBOp22pe+i5buDROzwMJZYaJpVAKnCZavq+SNZXl7Se50GIOF93xebPR/3VNm9XT7MSqSUweKrrq6e91V0MlDkLyDwITNcRd/tAAAAAElFTkSuQmCC\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAMAAACahl6sAAACalBMVEUAAAA5ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN85ZN8qdI97AAAAzXRSTlMAACNmZVtKMhsIV/79+OzYtoZMGgH31JJCC/K0UQz2skAC6xa8Nt1SZPDtVuE8xBwF8cAT+2OQj5XmuI2RpsjFFKcNx14DEYHX+agPX/SpBurkKmCDoRjO/OkuHtlLBGh9e4haOWpraZ/PEOIdqhexCbBwm7O6u+XuWSQnczNYMTDG6L9IRkVQ1lXnKUngItpPoiyUBxXbXMmEejorZya5GdXNb9KaN2IOgvUodjulbFSjU5e1t8H6Je9HjJi+L9ES8ziWrHeJpMuufENBFE7l+gAAAAFvck5UAc+id5oAAAWxSURBVHhe7dz5W1RVGMBxzigEzrAKolDagBggxAiEUblkDCGLgFQCiWsLLhVaIaElSkaiLRJGmalYGS22qKktpu3r+Z+6d+ZBhnnPnXvmcu69h9v7/dXzvO98ntFh7sidmBgMwzAMwzAMwzAMwzAMwzAMwzAhETvSe1BGIq4ZljUzNu6W+ASTLGSWm1qWJzEpOSU1bXa6CRQyy6O3XnQZczLnzhNOsQGilJV9622CKfZAKJ2/4HavUIldEEpzUnNFSuyDULowT6DETghddIc4ia0QmpPvFSWxF0ILZqQLktgMoYWLBf3tshtCi4rFSGyH0DtLHAKhmT4REgkgS9IcAqGlZQIkMkDK7zIJklyxFHR3JTjmvudeeE67+5YtTwIzgq1YOXUJC3J/evi1KSGrHgDHPFXwWKT81XkP1oApaqsXmwOp9cNHUceA1MNjerkyG8AcpTWNZkHAMTaENVE7VeLLbwKDKG1eO+WnxEpIkNKyBEyinvxpBlEp3ocYH3c8DFdGmdUQRfLIcjCKrltpZFZolkMUSX4rmNXWbmhWSHZAHl0PZiV2GJoVkvWQGLKhFsyiG43NmsgOCNkEZtHNxmZNZAtkJphFU43NmsgGSAyJhTu3GJx1M1sgWxGiHUIQgpDIISQCJPJFohJjp4QQ9ZHmPrb18Sc0e7ITXpFIB1EZ7Vu2FcB36pGTDaIwtm/eAY7qJxlEcex8ytB/3EsHefoZcI4ruSCE+CrAMb5kg3QwPuvhSioIIV27wCnOJIPkaX1MrZtkkN3gEG9yQdKfBYd4kwvS+Bw4xJtckK7nwSHeJIN0g0O8IWQ8hHBC3Dl7KsPb0wOOyQ9peKF3b3iufZJfIbIgPS8yLnVfmp6Q8Fnyf/iAEIqQiRCCEIREDiH/N0jSfqdA+hASXQhBCEIihxCEICRyZkOaGL8+ahlkGeMTnHkHwDEuyMG1NkL6Xz4U3isDr4Jj8kNaMxjBY/JDOEOIbBC3UyCeKodAyg87BJJV7BBIcolDIJ3h72RYkMEj0kMajobf4MWCFLmkh6zp4oG89rrskDf6wB130xIy+CZxBCQ5DTqmIaTg2BDDIR+kNTFC85O2vTV3mOWQD1KaFqfdof3Htb4eSzoI61I3LPYs2SCMDx+4QgidBpC3dzoEsn62UyDxCIkuhDDihBAyYgbkMLwbaoHBbynhhmwExwTcBt6xGgx9p9rYVG7Iu+AYPWFs5UTkPXjrSuVJY99SwgchpJFxl8n7hjaGRHrhPWpGv26FF3KqCBzLiDO0MSSynfEtJadXGZJwQZR3nPvgfXEHh4wsDI14j4GpNCNW6w1uxFiQmjOTBymDXaNw49kyA/smRcgHcCz9cK8RCQsyJzcckvARY2GnN/p1kyPkXCFjcHa8AYk+RBm64QR8maSej6PfFhYhY6VwMKUpRzSvnzTTg6gTxz75lLFtx2fR7oIR8jljMqWj9XVal4eaJTAhIfnO72LejfyFb8oOBTLUzJpNE/u/7CtLGI6ixrqFYMpoiW/8j8d6v/o6h7FIWXVh6k+IIvFfZE6n1N207nT2Jf6yv4GPM6t7fELKiiLGv45Al6uFQEhem8YCi7pSL8KhQPwVeqvMrVvIE6JKrsLfBrCwb78T41BfFVsy9LaZ2Pd+QRD1p+0PetvMq/+MKIcqib+mt8+sFgn9qnJCfryut9Gc2gYEOgKS4mS9nWZUWC/UEZTY8JwMjoj6kvKbKZL2a3p7RVcTJ/j5UFNGxl+09FXYfanPBEdAMlxv4U/GwU03THEELxeuLrXofddPtT8TkxwxAYo37xf2u3qh9fx6tMtER/BJ8Q/9dplxn7a4Gs7+fj7BVIZa4EJu7NzuP/5szrricYutvGHw+l9//3OcmM5QC2wh/hunigdGWoRWdeHfk7mNxBpGMGJueusxDMMwDMMwDMMwDMMwDMMwDMOm0H9rhAW4HYLGPwAAAABJRU5ErkJggg==\"","import { makeStyles } from '@material-ui/core/styles'\nimport * as React from 'react'\n\nimport Col from 'src/components/layout/Col'\nimport Img from 'src/components/layout/Img'\nimport WALLET_ICONS from './icons'\nimport { screenSm } from 'src/theme/variables'\n\nconst useStyles = makeStyles({\n container: {\n marginLeft: '5px',\n marginRight: '10px',\n letterSpacing: '-0.5px',\n flex: 'none',\n [`@media (max-width: ${screenSm}px)`]: {\n display: 'none',\n },\n },\n icon: {\n maxWidth: 'none',\n },\n})\n\ninterface WalletIconProps {\n provider: string\n}\n\nconst WalletIcon = ({ provider }: WalletIconProps): React.ReactElement => {\n const classes = useStyles()\n const walletIcon = WALLET_ICONS[provider]\n\n return (\n \n {walletIcon && {provider}}\n \n )\n}\n\nexport default WalletIcon\n","import { makeStyles } from '@material-ui/core/styles'\nimport * as React from 'react'\nimport { useSelector } from 'react-redux'\nimport { Text } from '@gnosis.pm/safe-react-components'\n\nimport Col from 'src/components/layout/Col'\nimport Paragraph from 'src/components/layout/Paragraph'\nimport PrefixedEthHashInfo from 'src/components/PrefixedEthHashInfo'\nimport WalletIcon from '../WalletIcon'\nimport { connected as connectedBg, screenSm, sm } from 'src/theme/variables'\nimport { KeyRing } from 'src/walliro/containers/AppLayout/Header/KeyRing'\nimport { networkSelector, userEnsSelector } from 'src/logic/wallets/store/selectors'\nimport { getChainById } from 'src/config'\n\nconst useStyles = makeStyles({\n network: {\n fontFamily: 'Averta, sans-serif',\n },\n networkLabel: {\n '& div': {\n paddingRight: sm,\n paddingLeft: sm,\n },\n },\n identicon: {\n display: 'none',\n [`@media (min-width: ${screenSm}px)`]: {\n display: 'block',\n },\n },\n dot: {\n backgroundColor: '#fff',\n borderRadius: '15px',\n color: connectedBg,\n display: 'none',\n height: '15px',\n position: 'relative',\n right: '10px',\n top: '12px',\n width: '15px',\n [`@media (min-width: ${screenSm}px)`]: {\n display: 'block',\n },\n },\n account: {\n alignItems: 'start',\n display: 'flex',\n flexDirection: 'column',\n flexGrow: 1,\n justifyContent: 'left',\n paddingRight: sm,\n },\n address: {\n marginLeft: '5px',\n letterSpacing: '-0.5px',\n },\n})\n\ninterface ProviderInfoProps {\n connected: boolean\n provider: string\n // TODO: [xDai] Review. This may cause some issues with EthHashInfo.\n userAddress: string\n}\n\nconst ProviderInfo = ({ connected, provider, userAddress }: ProviderInfoProps): React.ReactElement => {\n const classes = useStyles()\n const currentNetwork = useSelector(networkSelector)\n const ensName = useSelector(userEnsSelector)\n const chain = getChainById(currentNetwork)\n const addressColor = connected ? 'text' : 'warning'\n return (\n <>\n {!connected && }\n \n \n \n {provider}\n {chain?.chainName && ` @ ${chain.chainName}`}\n \n
\n {connected ? (\n ensName ? (\n \n {ensName}\n \n ) : (\n \n )\n ) : (\n \n Connection Error\n \n )}\n
\n \n \n )\n}\n\nexport default ProviderInfo\n","import { withStyles } from '@material-ui/core/styles'\nimport { ReactElement } from 'react'\n\nimport Col from 'src/components/layout/Col'\nimport Paragraph from 'src/components/layout/Paragraph'\nimport { sm } from 'src/theme/variables'\nimport { KeyRing } from 'src/walliro/containers/AppLayout/Header/KeyRing'\n\nconst styles = () => ({\n network: {\n fontFamily: 'Averta, sans-serif',\n },\n account: {\n alignItems: 'start',\n display: 'flex',\n flexDirection: 'column',\n flexGrow: 1,\n justifyContent: 'center',\n paddingRight: sm,\n },\n connect: {\n letterSpacing: '-0.5px',\n whiteSpace: 'nowrap',\n },\n})\n\nconst ProviderDisconnected = ({ classes }): ReactElement => (\n <>\n \n \n \n Not Connected\n \n \n Connect Wallet\n \n \n \n)\n\nexport default withStyles(styles as any)(ProviderDisconnected)\n","export default __webpack_public_path__ + \"static/media/alert.42faeefb.svg\";","export default __webpack_public_path__ + \"static/media/check.04336eb6.svg\";","export default __webpack_public_path__ + \"static/media/error.fa71268e.svg\";","import { ReactElement } from 'react'\nimport { Link } from 'react-router-dom'\nimport ChevronRightIcon from '@material-ui/icons/ChevronRight'\n\nimport { primaryActive } from 'src/theme/variables'\nimport { Notification } from 'src/logic/notifications/notificationTypes'\nimport styled from 'styled-components'\nimport { trackEvent } from 'src/utils/googleTagManager'\nimport { OVERVIEW_EVENTS } from 'src/utils/events/overview'\n\ntype NotificationLinkProps = {\n onClick: () => void\n} & Notification['link']\n\nconst NotificationLink = ({ title, onClick, ...rest }: NotificationLinkProps): ReactElement => {\n const handleClick = () => {\n trackEvent({ ...OVERVIEW_EVENTS.NOTIFICATION_INTERACTION, label: title })\n onClick()\n }\n\n return (\n \n {title} \n \n )\n}\n\nconst StyledLink = styled(Link)`\n all: unset;\n cursor: pointer;\n color: ${primaryActive};\n font-weight: 700;\n display: flex;\n align-items: center;\n`\n\nexport default NotificationLink\n","import { ReactElement } from 'react'\nimport styled from 'styled-components'\nimport { OptionsObject } from 'notistack'\nimport { ListItem, ListItemAvatar, ListItemText } from '@material-ui/core'\n\nimport { NotificationsState } from 'src/logic/notifications/store/notifications'\nimport { black500, background, black300, primaryLite } from 'src/theme/variables'\nimport { formatTime } from 'src/utils/date'\nimport AlertIcon from 'src/assets/icons/alert.svg'\nimport CheckIcon from 'src/assets/icons/check.svg'\nimport ErrorIcon from 'src/assets/icons/error.svg'\nimport InfoIcon from 'src/assets/icons/info.svg'\nimport { UnreadNotificationBadge } from 'src/walliro/containers/AppLayout/Header/Notifications'\nimport NotificationLink from './NotificationLink'\n\nconst notificationIcon = {\n error: ErrorIcon,\n info: InfoIcon,\n success: CheckIcon,\n warning: AlertIcon,\n}\n\nconst getNotificationIcon = (variant: OptionsObject['variant'] = 'info'): string => notificationIcon[variant]\n\nconst NoficationItem = ({\n read,\n options,\n message,\n timestamp,\n link,\n handleClickAway,\n}: NotificationsState[number] & { handleClickAway: () => void }): ReactElement => {\n const secondaryText = (\n \n {formatTime(timestamp)}\n {link && }\n \n )\n return (\n /*\n //@ts-expect-error requires child to be button when using styled-components */\n \n \n \n \"Notification\"\n \n \n {message}} secondary={secondaryText} />\n \n )\n}\n\nconst NotificationListItem = styled(ListItem)<{ $requiresAction: boolean }>`\n &.MuiListItem-root {\n background-color: ${({ $requiresAction }) => ($requiresAction ? primaryLite : undefined)};\n padding: 8px 24px;\n position: relative;\n }\n &.MuiListItem-root:not(:last-child):after {\n content: '';\n background: ${background};\n position: absolute;\n bottom: 0;\n left: 24px;\n height: 2px;\n width: calc(100% - 48px);\n }\n .MuiListItemAvatar-root {\n min-width: 42px;\n }\n`\n\nconst NotificationMessage = styled.p`\n all: unset;\n font-weight: 400;\n font-size: 16px;\n line-height: 24px;\n color: ${black500};\n`\n\nconst SecondaryText = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: center;\n color: ${black300};\n`\n\nexport default NoficationItem\n","export default __webpack_public_path__ + \"static/media/bell.799123aa.svg\";","import { ReactElement } from 'react'\nimport styled from 'styled-components'\nimport { List, Typography } from '@material-ui/core'\n\nimport { NotificationsState } from 'src/logic/notifications/store/notifications'\nimport { NOTIFICATION_LIMIT } from 'src/walliro/containers/AppLayout/Header/Notifications'\nimport { StyledScrollableBar } from 'src/routes/safe/components/Transactions/TxList/styled'\nimport { gray500 } from 'src/theme/variables'\nimport NotificationItem from 'src/walliro/containers/AppLayout/Header/Notifications/NotificationItem'\n\nimport Bell from './assets/bell.svg'\n\ntype NotificationListProps = {\n notifications: NotificationsState\n handleClickAway: () => void\n}\n\nconst NotificationList = ({ notifications, handleClickAway }: NotificationListProps): ReactElement => {\n if (!notifications.length) {\n return (\n \n \"No\n No notifications\n \n )\n }\n\n return (\n NOTIFICATION_LIMIT}>\n \n {notifications.map((notification) => (\n \n ))}\n \n \n )\n}\n\nconst Wrapper = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n min-height: 147px; // Height of one line notification\n`\n\nconst Description = styled(Typography)`\n color: ${gray500};\n padding-top: 8px;\n`\n\nconst StyledList = styled(List)`\n padding: 0;\n`\n\nconst ScrollContainer = styled(StyledScrollableBar)<{ $showScrollbar: boolean }>`\n height: ${({ $showScrollbar: $scroll }) => ($scroll ? '500px' : 'auto')};\n overflow-x: hidden;\n overflow-y: auto;\n`\n\nexport default NotificationList\n","import { ReactElement, useMemo, useRef, useState } from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { IconButton, Badge, ClickAwayListener, Paper, Popper } from '@material-ui/core'\nimport NotificationsNoneIcon from '@material-ui/icons/NotificationsNone'\nimport styled from 'styled-components'\n\nimport { ReturnValue as Props } from 'src/logic/hooks/useStateHandler'\nimport {\n deleteAllNotifications,\n NotificationsState,\n readNotification,\n selectNotifications,\n} from 'src/logic/notifications/store/notifications'\nimport { background, black300, border, primary200, primary400, sm } from 'src/theme/variables'\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore'\nimport ExpandLessIcon from '@material-ui/icons/ExpandLess'\nimport NotificationList from 'src/walliro/containers/AppLayout/Header/Notifications/NotificationList'\nimport { OVERVIEW_EVENTS } from 'src/utils/events/overview'\nimport { trackEvent } from 'src/utils/googleTagManager'\nimport { Button } from 'react-bootstrap'\n\nexport const NOTIFICATION_LIMIT = 4\n\nexport const getSortedNotifications = (notifications: NotificationsState): NotificationsState => {\n const chronologicalNotifications = notifications.sort((a, b) => b.timestamp - a.timestamp)\n\n const unreadLinkNotifications = chronologicalNotifications.filter(({ read, link }) => !read && link)\n const unreadNotifications = chronologicalNotifications.filter(({ read, link }) => !read && !link)\n const readNotifications = chronologicalNotifications.filter(({ read }) => read)\n\n return [...unreadLinkNotifications, ...unreadNotifications, ...readNotifications]\n}\n\nconst Notifications = ({ open, toggle, clickAway }: Props): ReactElement => {\n const dispatch = useDispatch()\n const notificationsRef = useRef(null)\n const [showAll, setShowAll] = useState(false)\n\n const notifications = useSelector(selectNotifications)\n const hasNotifications = notifications.length > 0\n\n const sortedNotifications = useMemo(() => getSortedNotifications(notifications), [notifications])\n\n const canExpand = notifications.length > NOTIFICATION_LIMIT\n\n const notificationsToShow =\n canExpand && showAll ? sortedNotifications : sortedNotifications.slice(0, NOTIFICATION_LIMIT)\n\n const unreadCount = useMemo(\n () => notifications.filter(({ read, dismissed }) => !read && dismissed).length,\n [notifications],\n )\n const hasUnread = unreadCount > 0\n\n const handleRead = () => {\n if (!open) {\n return\n }\n notificationsToShow.forEach(({ read, options }) => {\n if (read) return\n dispatch(readNotification({ key: options.key }))\n })\n setShowAll(false)\n }\n\n const handleClickBell = () => {\n if (!open) {\n trackEvent(OVERVIEW_EVENTS.NOTIFICATION_CENTER)\n }\n handleRead()\n toggle()\n }\n\n const handleClickAway = () => {\n if (open) {\n handleRead()\n setShowAll(false)\n }\n clickAway()\n }\n\n const handleClear = () => {\n if (hasNotifications) {\n dispatch(deleteAllNotifications())\n }\n }\n\n return (\n \n \n \n \n \n \n
\n Notifications\n {hasUnread && {unreadCount}}\n
\n {hasNotifications && Clear All}\n
\n \n {canExpand && (\n \n setShowAll((prev) => !prev)} disableRipple>\n {showAll ? : }\n \n \n {showAll ? 'Hide' : `${notifications.length - NOTIFICATION_LIMIT} other notifications`}\n \n \n )}\n
\n \n
\n
\n )\n}\n\nconst Wrapper = styled.div`\n height: 100%;\n`\n\nconst BellIconButton = styled(IconButton)`\n width: 44px;\n height: 100%;\n border-radius: 0;\n &:hover {\n background: none;\n }\n`\n\nexport const UnreadNotificationBadge = styled(Badge)`\n .MuiBadge-badge {\n background-color: ${primary400};\n }\n`\n\nconst NotificationsPopper = styled(Paper)`\n box-sizing: border-box;\n border-radius: ${sm};\n box-shadow: 0 0 10px 0 rgba(33, 48, 77, 0.1);\n width: 438px;\n`\n\nconst NotificationsHeader = styled.div`\n display: flex;\n align-items: flex-end;\n justify-content: space-between;\n padding: 24px 24px;\n border-bottom: 2px solid ${background};\n`\n\nconst NotificationsTitle = styled.h4`\n all: unset;\n display: inline;\n font-weight: 700;\n font-size: 20px;\n line-height: 26px;\n`\n\nconst UnreadCount = styled.span`\n display: inline-block;\n background: ${primary200};\n border-radius: 6px;\n margin-left: 9px;\n color: ${primary400};\n text-align: center;\n width: 18px;\n height: 18px;\n`\n\nconst ClearAllButton = styled.button`\n all: unset;\n cursor: pointer;\n font-style: normal;\n font-weight: 700;\n font-size: 16px;\n color: ${primary400};\n :hover {\n color: #005546; // Same as MUI Button\n }\n`\n\nconst NotificationsFooter = styled.div`\n padding: 16px;\n`\n\nexport const NotificationSubtitle = styled.span`\n font-weight: 400;\n font-size: 16px;\n line-height: 24px;\n color: ${black300};\n`\n\nconst ExpandIconButton = styled(IconButton)`\n box-sizing: border-box;\n background-color: ${border};\n width: 20px;\n height: 20px;\n margin-left: 10px;\n margin-right: 18px;\n padding: 0;\n > * {\n color: ${black300};\n }\n`\n\nexport default Notifications\n","import IconButton from '@material-ui/core/IconButton'\nimport { withStyles } from '@material-ui/core/styles'\nimport ExpandLess from '@material-ui/icons/ExpandLess'\nimport ExpandMore from '@material-ui/icons/ExpandMore'\nimport classNames from 'classnames'\nimport * as React from 'react'\nimport { Button } from 'react-bootstrap'\n\nimport Col from 'src/components/layout/Col'\nimport { screenSm, sm } from 'src/theme/variables'\nimport styles from './style.module.scss'\n\n// const styles = () => ({\n// root: {\n// alignItems: 'center',\n// display: 'flex',\n// height: '100%',\n\n// [`@media (min-width: ${screenSm}px)`]: {\n// flexBasis: '280px',\n// },\n// },\n// provider: {\n// alignItems: 'center',\n// cursor: 'pointer',\n// display: 'flex',\n// flex: '1 1 auto',\n// padding: sm,\n// [`@media (min-width: ${screenSm}px)`]: {\n// paddingLeft: sm,\n// paddingRight: sm,\n// },\n// },\n// expand: {\n// height: '30px',\n// width: '30px',\n// },\n// })\n\nclass Provider extends React.Component {\n myRef\n\n constructor(props) {\n super(props)\n\n this.myRef = React.createRef()\n }\n\n render() {\n const { render, info, open, toggle } = this.props\n\n return (\n <>\n
\n \n
\n {render(this.myRef)}\n \n )\n }\n}\n\nexport default Provider\n","import React, { Fragment } from 'react'\nimport { makeStyles } from '@material-ui/core/styles'\nimport { Identicon } from '@gnosis.pm/safe-react-components'\nimport { createStyles } from '@material-ui/core'\n\nimport Spacer from 'src/components/Spacer'\nimport Block from 'src/components/layout/Block'\nimport Hairline from 'src/components/layout/Hairline'\nimport Img from 'src/components/layout/Img'\nimport Paragraph from 'src/components/layout/Paragraph'\nimport Row from 'src/components/layout/Row'\nimport PrefixedEthHashInfo from 'src/components/PrefixedEthHashInfo'\nimport { background, connected as connectedBg, lg, md, sm, warning, xs } from 'src/theme/variables'\nimport { getExplorerInfo } from 'src/config'\nimport { KeyRing } from 'src/walliro/containers/AppLayout/Header/KeyRing'\nimport WalletIcon from '../assets/wallet.svg'\nimport { useSelector } from 'react-redux'\nimport { networkSelector } from 'src/logic/wallets/store/selectors'\nimport ChainIndicator from 'src/components/ChainIndicator'\nimport classNames from 'classnames'\nimport styles from '../style.module.scss'\nimport { Button } from 'react-bootstrap'\n\n// const styles = createStyles({\n// container: {\n// padding: `${md} 12px`,\n// display: 'flex',\n// flexDirection: 'column',\n// },\n// identicon: {\n// justifyContent: 'center',\n// padding: `0 ${md}`,\n// },\n// user: {\n// borderRadius: '3px',\n// backgroundColor: background,\n// margin: '0 auto',\n// padding: '9px',\n// lineHeight: 1,\n// },\n// ens: {\n// paddingBottom: md,\n// fontWeight: 'bold',\n// },\n// details: {\n// padding: `0 ${md}`,\n// height: '20px',\n// alignItems: 'center',\n// },\n// address: {\n// flexGrow: 1,\n// textAlign: 'center',\n// letterSpacing: '-0.5px',\n// marginRight: sm,\n// },\n// labels: {\n// fontSize: '12px',\n// letterSpacing: '0.5px',\n// },\n// capitalize: {\n// textTransform: 'capitalize',\n// },\n// open: {\n// paddingLeft: sm,\n// width: 'auto',\n// '&:hover': {\n// cursor: 'pointer',\n// },\n// },\n// buttonRow: {\n// padding: `${md} ${lg} 0`,\n// },\n// disconnectButton: {\n// marginBottom: `${md}`,\n// '&:hover': {\n// backgroundColor: '#F02525',\n// color: '#fff',\n// },\n// },\n// dashboard: {\n// padding: `${md} ${lg} ${xs}`,\n// },\n// dashboardText: {\n// letterSpacing: '1px',\n// },\n// logo: {\n// margin: `0px ${xs}`,\n// },\n// warning: {\n// color: warning,\n// },\n// connected: {\n// color: connectedBg,\n// },\n// })\n\ntype Props = {\n connected: boolean\n onDisconnect: () => void\n openDashboard?: (() => void | null) | boolean\n provider?: string\n userAddress: string\n ensName: string\n}\n\n// const useStyles = makeStyles(styles)\n\nexport const UserDetails = ({\n connected,\n onDisconnect,\n openDashboard,\n provider,\n userAddress,\n ensName,\n}: Props): React.ReactElement => {\n const connectedNetwork = useSelector(networkSelector)\n // const classes = useStyles()\n\n return (\n
\n
\n \n {connected ? (\n \n ) : (\n \n )}\n \n
\n {ensName && {ensName}}\n {userAddress ? (\n \n \n \n ) : (\n

Address not available

\n )}\n
\n
\n
\n Wallet\n
\n account_balance_wallet\n {provider}\n
\n
\n
\n Connected network\n
\n {connectedNetwork && }\n {/* {networkLabel && }\n {networkLabel || 'unknown'} */}\n
\n
\n {openDashboard && (\n
\n \n
\n )}\n
\n \n\n {/* \n \n \n Wallet\n \n \n \"Wallet\n \n {provider}\n \n \n \n \n \n Connected network\n \n \n {connectedNetwork && }\n \n \n {openDashboard && (\n \n \n \n )}\n \n \n \n Disconnect\n \n \n */}\n
\n
\n )\n}\n","import { Fragment, lazy, useCallback, useEffect } from 'react'\nimport styles from './style.module.scss'\nimport { Button, Col, Container, Row } from 'react-bootstrap'\nimport Logo from 'src/walliro/assets/images/default/logo.png'\nimport LogoDark from 'src/walliro/assets/images/dark/logo.png'\nimport { useMain } from 'src/walliro/hook'\nimport { useSelector } from 'react-redux'\nimport {\n availableSelector,\n loadedSelector,\n networkSelector,\n providerNameSelector,\n shouldSwitchWalletChain,\n userAccountSelector,\n userEnsSelector,\n} from 'src/logic/wallets/store/selectors'\nimport { ReturnValue, useStateHandler } from 'src/logic/hooks/useStateHandler'\nimport ProviderAccessible from './ProviderInfo/ProviderAccessible'\nimport ProviderDisconnected from './ProviderInfo/ProviderDisconnected'\nimport ConnectDetails from './ProviderDetails/ConnectDetails'\nimport onboard, { loadLastUsedProvider, removeLastUsedProvider } from 'src/logic/wallets/onboard'\nimport WalletSwitch from 'src/components/WalletSwitch'\nimport Notifications from './Notifications'\nimport Provider from './Provider'\nimport { UserDetails } from './ProviderDetails/UserDetails'\nimport { currentChainId } from 'src/logic/config/store/selectors'\nimport { isSupportedWallet } from 'src/logic/wallets/utils/walletList'\nimport { initPairing, isPairingSupported } from 'src/logic/wallets/pairing/utils'\nimport { ClickAwayListener, Grow, Popper } from '@material-ui/core'\nimport List from '@material-ui/core/List'\nimport classNames from 'classnames'\nimport { wrapInSuspense } from 'src/utils/wrapInSuspense'\nimport { getNetworkRootRoutes } from 'src/routes/routes'\nimport { getChainById } from 'src/config'\nimport { ChainId } from 'src/config/chain'\nimport { trackEvent } from 'src/utils/googleTagManager'\nimport { Link, useHistory } from 'react-router-dom'\nimport { OVERVIEW_EVENTS } from 'src/utils/events/overview'\n\nconst HidePairingModule = lazy(\n () => import('src/walliro/containers/AppLayout/Header/ProviderDetails/HidePairingModule'),\n)\ntype IProps = {\n onToggleSafeList: () => void\n balance?: string\n}\n\nconst WalletPopup = ({ anchorEl, providerDetails, open, onClose }) => {\n if (!open) {\n return \n }\n return (\n \n \n \n {providerDetails}\n \n \n \n )\n}\n\nconst HeaderComponent = ({ balance, onToggleSafeList }: IProps) => {\n const { theme } = useMain()\n const isDark = theme.color === 'dark'\n const provider = useSelector(providerNameSelector)\n const chainId = useSelector(currentChainId)\n const userAddress = useSelector(userAccountSelector)\n const ensName = useSelector(userEnsSelector)\n const loaded = useSelector(loadedSelector)\n const available = useSelector(availableSelector)\n\n useEffect(() => {\n const tryToConnectToLastUsedProvider = async () => {\n const lastUsedProvider = loadLastUsedProvider()\n const isProviderEnabled = lastUsedProvider && isSupportedWallet(lastUsedProvider)\n if (isProviderEnabled) {\n await onboard().walletSelect(lastUsedProvider)\n } else if (isPairingSupported()) {\n await initPairing()\n }\n }\n\n tryToConnectToLastUsedProvider()\n }, [chainId])\n\n const openDashboard = () => {\n const { wallet } = onboard().getState()\n return wallet.type === 'sdk' && wallet.dashboard\n }\n\n const onDisconnect = () => {\n onboard().walletReset()\n removeLastUsedProvider()\n }\n\n const getProviderInfoBased = () => {\n if (!loaded || !provider) {\n return \n }\n\n return \n }\n\n const getProviderDetailsBased = () => {\n if (!loaded) {\n return \n }\n\n return (\n \n )\n }\n\n const info = getProviderInfoBased()\n const details = getProviderDetailsBased()\n\n const { clickAway: clickAwayNotifications, open: openNotifications, toggle: toggleNotifications } = useStateHandler()\n const { clickAway: clickAwayWallet, open: openWallet, toggle: toggleWallet } = useStateHandler()\n const { clickAway: clickAwayNetworks, open: openNetworks, toggle: toggleNetworks } = useStateHandler()\n\n const isWrongChain = useSelector(shouldSwitchWalletChain)\n\n return (\n
\n {isPairingSupported() && wrapInSuspense()}\n\n \n \n \n
\n \n \"walliro\"\n \n \n east\n \n
\n \n {isWrongChain && (\n \n \n \n )}\n\n \n
\n {available && balance && (\n \n )}\n
\n \n
\n theme.changeColor(isDark ? 'default' : 'dark')}\n >\n {isDark ? 'light_mode' : 'dark_mode'}\n \n
\n \n providerRef.current && (\n \n )\n }\n />\n
\n
\n \n
\n
\n
\n )\n}\n\nexport default HeaderComponent\n","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKgAAAAoCAYAAABq+7FsAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2xpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDA2IDc5LmRhYmFjYmIsIDIwMjEvMDQvMTQtMDA6Mzk6NDQgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6REMwREQ0OEYxODgzMTFFQzg2ODg5QjVCRkU5OTYxNjkiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6Nzg3MkZBMzIyQTVBMTFFQzk5OThENTQ1OTE0MTM5MEEiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6Nzg3MkZBMzEyQTVBMTFFQzk5OThENTQ1OTE0MTM5MEEiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIyLjQgKFdpbmRvd3MpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NzYwNmNhMTUtNmFmNi05ZTQ2LTllYzItODgzYmI4NGNiNmUyIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjkyODJGREY1MUFBOTExRUM4RTdBRjU4MkU2RjIwMkQ3Ii8+IDwvcmRmOkRl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\"","const truncate = (fullStr:string, strLen : number, separator? : string)=> {\r\n if (fullStr.length <= strLen) return fullStr;\r\n\r\n separator = separator || '...';\r\n\r\n var sepLen = separator.length,\r\n charsToShow = strLen - sepLen,\r\n frontChars = Math.ceil(charsToShow/2),\r\n backChars = Math.floor(charsToShow/2);\r\n\r\n return fullStr.substr(0, frontChars) +\r\n separator +\r\n fullStr.substr(fullStr.length - backChars);\r\n};\r\n\r\nexport default truncate;","import React, { Fragment, useState, useEffect } from 'react'\r\nimport { NavLink as RNavLink, useLocation } from 'react-router-dom'\r\nimport classNames from 'classnames'\r\nimport { Nav, Button } from 'react-bootstrap'\r\nimport styles from './style.module.scss'\r\n\r\nexport type ListItemType = {\r\n badge?: boolean\r\n disabled?: boolean\r\n label: string\r\n href: string\r\n icon?: React.ReactNode\r\n selected?: boolean\r\n subItems?: ListItemType[]\r\n}\r\ntype IPropsItem = {\r\n item: ListItemType\r\n}\r\ntype IProps = {\r\n list: ListItemType[]\r\n}\r\nconst MenuItem = React.memo(({ item }: IPropsItem) => {\r\n if (item.disabled) return \r\n const Component = !(item.subItems === undefined || item.subItems.constructor !== Array || item.subItems.length === 0)\r\n ? MultiLevel\r\n : SingleLevel\r\n return \r\n})\r\nconst SingleLevel = React.memo(({ item }: IPropsItem) => {\r\n const { href, icon, label } = item\r\n return (\r\n \r\n \r\n {icon &&
{icon}
}\r\n {label}\r\n
\r\n
\r\n )\r\n})\r\nconst MultiLevel = React.memo(({ item }: IPropsItem) => {\r\n const { subItems, icon, label, selected } = item\r\n const [open, setOpen] = useState(selected ? selected : false)\r\n const location = useLocation()\r\n useEffect(() => {\r\n if (subItems) {\r\n subItems.map((item) => {\r\n if (item.href === location.pathname) {\r\n setOpen(true)\r\n }\r\n return false\r\n })\r\n }\r\n return () => {\r\n setOpen(false)\r\n }\r\n }, [subItems, location])\r\n const handleClick = () => {\r\n setOpen((prev) => !prev)\r\n }\r\n if (!subItems) return null\r\n return (\r\n \r\n \r\n \r\n {icon &&
{icon}
}\r\n {label}\r\n {!open ? (\r\n chevron_right\r\n ) : (\r\n expand_more\r\n )}\r\n \r\n
\r\n
\r\n \r\n {subItems.map((child, key) => (\r\n \r\n ))}\r\n \r\n
\r\n
\r\n )\r\n})\r\n\r\nconst CustomNav = React.memo(({ list }: IProps) => {\r\n return (\r\n \r\n )\r\n})\r\n\r\nexport default CustomNav\r\n","import { alpha, Button, Menu, MenuItem, MenuProps, styled } from '@material-ui/core'\nimport { KeyboardArrowDown, KeyboardArrowUp } from '@material-ui/icons'\nimport * as React from 'react'\nimport { useHistory } from 'react-router-dom'\nimport { getChainById, getChainInfo } from 'src/config'\nimport { generatePrefixedAddressRoutes, getNetworkRootRoutes } from 'src/routes/routes'\nimport { OVERVIEW_EVENTS } from 'src/utils/events/overview'\nimport { trackEvent } from 'src/utils/googleTagManager'\nimport { Icon } from '@gnosis.pm/safe-react-components'\nimport NetworkLabel from 'src/components/NetworkLabel/NetworkLabel'\nimport useSafeAddress from 'src/logic/currentSession/hooks/useSafeAddress'\n\nconst StyledMenu = styled((props: MenuProps) => (\n \n))(({ theme }: any) => ({\n '& .MuiPaper-root': {\n borderRadius: 6,\n marginTop: theme.spacing(5),\n minWidth: 280,\n color: theme.palette.mode === 'light' ? 'rgb(55, 65, 81)' : theme.palette.grey[300],\n boxShadow:\n 'rgb(255, 255, 255) 0px 0px 0px 0px, rgba(0, 0, 0, 0.05) 0px 0px 0px 1px, rgba(0, 0, 0, 0.1) 0px 10px 15px -3px, rgba(0, 0, 0, 0.05) 0px 4px 6px -2px',\n '& .MuiMenu-list': {\n padding: '4px 0',\n },\n '& .MuiMenuItem-root': {\n '& .MuiSvgIcon-root': {\n fontSize: 18,\n color: theme.palette.text.secondary,\n marginRight: theme.spacing(1.5),\n },\n '&:active': {\n backgroundColor: alpha(theme.palette.primary.main, theme.palette.action.selectedOpacity),\n },\n },\n },\n}))\ninterface Props {\n sidebarIsOpen: boolean\n}\nexport default function CustomizedMenus({ sidebarIsOpen }: Props) {\n const history = useHistory()\n\n const [anchorEl, setAnchorEl] = React.useState(null)\n const openDrpDwn = Boolean(anchorEl)\n const handleClick = (event: React.MouseEvent) => {\n setAnchorEl(event.currentTarget)\n }\n const handleClose = () => {\n setAnchorEl(null)\n }\n const chain = getChainInfo()\n const chainId = chain.chainId\n const { shortName, safeAddress } = useSafeAddress()\n\n return (\n
\n : }\n >\n {sidebarIsOpen ? chain.chainName : chain.shortName}\n {/* */}\n {/* {chain.chainName} */}\n \n \n {\n window.location.href = 'https://tron.walliro.com/mainnet:' + safeAddress\n }}\n href={'https://tron.walliro.com/mainnet:' + safeAddress}\n className=\"text-center justify-content-between\"\n >\n Tron - Mainnet\n \n {\n window.location.href = 'https://tron.walliro.com/shasta:' + safeAddress\n }}\n href={'https://tron.walliro.com/shasta:' + safeAddress}\n className=\"text-center justify-content-between\"\n >\n Tron - Shasta (Testnet)\n \n {getNetworkRootRoutes().map((network) => {\n const chain = getChainById(network.chainId)\n return (\n {\n trackEvent({ ...OVERVIEW_EVENTS.SWITCH_NETWORK, label: network.chainId })\n history.push(network.route)\n handleClose()\n }}\n href={network.route}\n className=\"text-center justify-content-between\"\n >\n {/* */}\n {chain.chainName}\n {chainId === network.chainId && }\n {/* */}\n \n )\n })}\n \n
\n )\n}\n","import { EthHashInfo, Identicon } from '@gnosis.pm/safe-react-components'\nimport classNames from 'classnames'\nimport { Fragment, RefObject, useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport { ListItemType } from 'src/components/List'\nimport { getChainInfo, getExplorerInfo } from 'src/config'\nimport { border, fontColor } from 'src/theme/variables'\nimport { useMain } from 'src/walliro/hook'\nimport styled from 'styled-components'\nimport styles from './style.module.scss'\nimport { ChainInfo } from '@gnosis.pm/safe-react-gateway-sdk'\nimport { useSelector } from 'react-redux'\nimport { copyShortNameSelector, showShortNameSelector } from 'src/logic/appearance/selectors'\nimport { parsePrefixedAddress } from 'src/utils/prefixedAddress'\nimport useSafeAddress from 'src/logic/currentSession/hooks/useSafeAddress'\nimport { Dropdown } from 'react-bootstrap'\nimport truncate from 'src/walliro/constants/truncate'\nimport CustomNav from './Nav'\nimport Networks from './Netwroks'\n\ntype Props = {\n safeAddress?: string\n safeName?: string\n balance?: string\n granted: boolean\n onToggleSafeList: () => void\n onReceiveClick: () => void\n onNewTransactionClick: () => void\n items: ListItemType[]\n}\n\ntype StyledTextLabelProps = {\n chainInfo: ChainInfo\n}\nconst StyledTextLabel = styled.span`\n color: ${(props: StyledTextLabelProps) => props.chainInfo?.theme?.textColor ?? fontColor};\n background-color: ${(props: StyledTextLabelProps) => props.chainInfo?.theme?.backgroundColor ?? border};\n`\n\nconst SidebarComponent = ({\n items,\n balance,\n safeAddress,\n safeName,\n granted,\n onToggleSafeList,\n onReceiveClick,\n onNewTransactionClick,\n}: Props) => {\n const { sidebar } = useMain()\n const _refSidebar = useRef(null)\n const isOpen = useHover(_refSidebar)\n const handlerSidebarOpen = sidebar.setOpen\n const handlerResizeWin = useCallback(() => {\n handlerSidebarOpen(window.innerWidth > 991)\n }, [handlerSidebarOpen])\n useEffect(() => {\n handlerResizeWin()\n window.addEventListener('resize', handlerResizeWin)\n return () => {\n window.removeEventListener('resize', handlerResizeWin)\n }\n }, [handlerResizeWin])\n\n const chainInfo = getChainInfo()\n\n const showChainPrefix = useSelector(showShortNameSelector)\n const copyChainPrefix = useSelector(copyShortNameSelector)\n const { address } = parsePrefixedAddress(safeAddress)\n const { shortName } = useSafeAddress()\n const explorerUrl = getExplorerInfo(safeAddress ? safeAddress : '')\n const explorerUrlSafeAddress = useMemo(() => {\n return explorerUrl()\n }, [])\n return (\n \n
\n {safeAddress && (\n
\n
\n \n
\n {chainInfo.chainName}\n
\n
\n
\n {safeName &&
{truncate(safeName, 15)}
}\n \n {!granted &&

READ ONLY

}\n
\n
\n \n \n more_vert\n \n \n \n north_east\n New transaction\n \n \n qr_code\n Show Qr\n \n \n open_in_new\n {explorerUrlSafeAddress.alt}\n \n \n \n
\n
\n )}\n
\n \n
\n \n
\n
\n )\n}\n\nfunction useHover(elementRef: RefObject): boolean {\n const cursorXPosition = useRef(false)\n const { sidebar } = useMain()\n const isOpen = sidebar.open\n const [value, setValue] = useState(isOpen)\n const handleMouseEnter = () => setValue(true)\n const handleMouseLeave = () => setValue(false)\n const handleMouseMove = useCallback((event: any) => {\n try {\n const position = event.currentTarget.offsetLeft + event.currentTarget.offsetWidth / 2\n const eventX = event.touches && event.touches.length > 0 ? event.touches[0].clientX : 0\n cursorXPosition.current = eventX > position\n } catch {}\n }, [])\n const handleMouseUp = useCallback(() => {\n setValue(cursorXPosition.current)\n const node = elementRef?.current\n if (node) {\n node.removeEventListener('touchmove', handleMouseMove, false)\n }\n }, [elementRef, handleMouseMove, cursorXPosition])\n\n useEffect(() => {\n setValue(isOpen)\n }, [isOpen])\n\n useEffect(() => {\n const node = elementRef?.current\n if (node && !isOpen) {\n node.addEventListener('mouseenter', handleMouseEnter)\n node.addEventListener('mouseleave', handleMouseLeave)\n\n node.addEventListener('touchstart', function () {\n this.addEventListener('touchmove', handleMouseMove, false)\n this.addEventListener('touchend', handleMouseUp, false)\n })\n return () => {\n node.removeEventListener('mouseenter', handleMouseEnter)\n node.removeEventListener('mouseleave', handleMouseLeave)\n node.removeEventListener('touchstart', function () {\n this.removeEventListener('touchmove', handleMouseMove, false)\n this.removeEventListener('touchend', handleMouseUp, false)\n })\n }\n }\n }, [handleMouseMove, handleMouseUp, elementRef, isOpen])\n\n return value\n}\nexport default SidebarComponent\n","import { ReactElement, useEffect, useState } from 'react'\nimport { useRouteMatch } from 'react-router-dom'\nimport { Text } from '@gnosis.pm/safe-react-components'\nimport Accordion from '@material-ui/core/Accordion'\nimport AccordionSummary from '@material-ui/core/AccordionSummary'\nimport AccordionDetails from '@material-ui/core/AccordionDetails'\nimport IconButton from '@material-ui/core/IconButton'\nimport ExpandMoreIcon from '@material-ui/icons/ExpandLessRounded'\nimport CloseIcon from '@material-ui/icons/CloseRounded'\nimport ClickAwayListener from '@material-ui/core/ClickAwayListener'\nimport styled from 'styled-components'\nimport Backdrop from '@material-ui/core/Backdrop'\n\nimport { black300, primary200, grey400, background } from 'src/theme/variables'\nimport { QueueTransactions } from 'src/routes/safe/components/Transactions/TxList/QueueTransactions'\nimport { usePagedQueuedTransactions } from 'src/routes/safe/components/Transactions/TxList/hooks/usePagedQueuedTransactions'\nimport { useSafeAppUrl } from 'src/logic/hooks/useSafeAppUrl'\nimport { SAFE_ROUTES } from 'src/routes/routes'\n\nconst TransactionQueueBar = (): ReactElement | null => {\n const [closed, setClosed] = useState(false)\n const [expanded, setExpanded] = useState(false)\n\n const onClickQueueBar = () => {\n setExpanded((expanded) => !expanded)\n }\n\n const onCloseQueueBar = () => {\n setClosed(true)\n setExpanded(false)\n }\n\n const { transactions } = usePagedQueuedTransactions()\n\n const queuedTxCount = transactions ? transactions.next.count + transactions.queue.count : 0\n const hasPendingTransactions = queuedTxCount !== 0\n\n // if a new transaction is proposed, we show the transaction queue bar\n useEffect(() => {\n if (queuedTxCount) {\n setClosed(false)\n }\n setExpanded(false)\n }, [queuedTxCount])\n\n const isSafeAppView = !!useSafeAppUrl().getAppUrl()\n const isSafeAppRoute = !!useRouteMatch(SAFE_ROUTES.APPS) && isSafeAppView\n\n const showQueueBar = isSafeAppRoute && hasPendingTransactions && !closed\n\n return showQueueBar ? (\n <>\n \n setExpanded(false)} mouseEvent=\"onMouseDown\" touchEvent=\"onTouchStart\">\n \n }>\n \n ({queuedTxCount}) Transaction Queue\n \n\n \n \n \n \n \n \n \n \n \n \n \n \n ) : null\n}\n\nexport default TransactionQueueBar\n\nconst Wrapper = styled.div<{ expanded: boolean }>`\n position: relative;\n bottom: ${({ expanded }) => (expanded ? 'calc(100vh - 375px)' : '0')};\n right: 0;\n height: 72px;\n z-index: 1;\n\n transition: bottom 0.35s ease-in-out 0s;\n`\nconst StyledAccordion = styled(Accordion)`\n &.MuiAccordion-root.Mui-expanded {\n border-top-left-radius: 8px;\n border-top-right-radius: 8px;\n }\n`\n\nconst StyledAccordionDetails = styled(AccordionDetails)`\n background-color: ${background};\n flex-direction: column;\n\n > span {\n margin-top: -60px;\n margin-right: 80px;\n }\n\n > div#infinite-scroll-container {\n height: calc(100vh - 400px);\n margin-top: 10px;\n }\n`\n\nconst StyledAccordionSummary = styled(AccordionSummary)`\n height: 70px;\n border-bottom: 2px solid ${grey400};\n border-top: 1px solid ${grey400};\n border-top-left-radius: 4px;\n border-top-right-radius: 4px;\n padding-right: 72px;\n position: relative;\n\n &.Mui-expanded {\n border-top: 0;\n border-top-left-radius: 8px;\n border-top-right-radius: 8px;\n }\n\n &:hover,\n &.Mui-expanded {\n background-color: rgb(var(--Mgray-lighter)) !important;\n }\n`\n\nconst StyledExpandIcon = styled(ExpandMoreIcon)`\n color: ${black300};\n`\n\nconst StyledCloseIconButton = styled(IconButton)`\n position: absolute;\n right: 14px;\n\n color: ${black300};\n margin-right: 4px;\n`\n\nconst StyledBackdrop = styled(Backdrop)`\n z-index: 0;\n`\n","import React, { useState } from 'react'\r\n\r\nimport Header from './Header'\r\nimport Sidebar from './Sidebar'\r\nimport classNames from 'classnames'\r\nimport { useMain } from 'src/walliro/hook'\r\nimport { useRouteMatch } from 'react-router-dom'\r\nimport { ListItemType } from 'src/components/List'\r\nimport { SAFE_APP_LANDING_PAGE_ROUTE } from 'src/routes/routes'\r\nimport TransactionQueueBar from 'src/components/TransactionQueueBar/TransactionQueueBar'\r\nimport { MobileNotSupported } from './MobileNotSupported'\r\n\r\ntype Props = {\r\n sidebarItems: ListItemType[]\r\n safeAddress?: string\r\n safeName?: string\r\n balance?: string\r\n granted: boolean\r\n onToggleSafeList: () => void\r\n onReceiveClick: () => void\r\n onNewTransactionClick: () => void\r\n}\r\nconst AppLayout: React.FC = ({\r\n balance,\r\n safeAddress,\r\n safeName,\r\n granted,\r\n onToggleSafeList,\r\n onReceiveClick,\r\n onNewTransactionClick,\r\n children,\r\n sidebarItems,\r\n}): React.ReactElement => {\r\n const [mobileNotSupportedClosed, setMobileNotSupportedClosed] = useState(false)\r\n const closeMobileNotSupported = () => setMobileNotSupportedClosed(true)\r\n\r\n const { sidebar } = useMain()\r\n const showSideBar = !useRouteMatch({ path: SAFE_APP_LANDING_PAGE_ROUTE })\r\n\r\n return (\r\n
\r\n {showSideBar && !!safeAddress && (\r\n \r\n )}\r\n
\r\n
\r\n
\r\n {children}\r\n \r\n
\r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default AppLayout\r\n","import { useEffect } from 'react'\nimport { useDispatch } from 'react-redux'\nimport { Dispatch } from 'src/logic/safe/store/actions/types.d'\nimport { addressBookFixEmptyNames, addressBookSync } from 'src/logic/addressBook/store/actions'\nimport { ADDRESS_BOOK_REDUCER_ID } from 'src/logic/addressBook/store/reducer'\nimport { AddressBookState } from 'src/logic/addressBook/model/addressBook'\n\nconst useAddressBookSync = (): void => {\n const dispatch = useDispatch()\n\n useEffect(() => {\n const onStorageUpdate = (e: StorageEvent) => {\n if (e.newValue && e.newValue !== e.oldValue && e.key?.endsWith(ADDRESS_BOOK_REDUCER_ID)) {\n let newState: AddressBookState\n try {\n newState = JSON.parse(e.newValue) as AddressBookState\n } catch (e) {\n return\n }\n dispatch(addressBookSync(newState))\n }\n }\n\n window.addEventListener('storage', onStorageUpdate)\n\n return () => {\n window.removeEventListener('storage', onStorageUpdate)\n }\n }, [dispatch])\n\n // Temporary fix that should be removed after a sufficient amount of time\n useEffect(() => {\n dispatch(addressBookFixEmptyNames())\n }, [dispatch])\n}\n\nexport default useAddressBookSync\n","import React, { Fragment, useContext } from 'react'\nimport { useSelector } from 'react-redux'\nimport styled from 'styled-components'\n\n// import AppLayout from 'src/components/AppLayout'\nimport AppLayout from 'src/walliro/containers/AppLayout'\nimport { SafeListSidebar, SafeListSidebarContext } from 'src/components/SafeListSidebar'\nimport CookiesBanner from 'src/components/CookiesBanner'\nimport { currentSafeWithNames } from 'src/logic/safe/store/selectors'\nimport { currentCurrencySelector } from 'src/logic/currencyValues/store/selectors'\nimport Modal from 'src/components/Modal'\nimport SendModal from 'src/routes/safe/components/Balances/SendModal'\nimport useSafeActions from 'src/logic/safe/hooks/useSafeActions'\nimport { formatCurrency } from 'src/logic/tokens/utils/formatAmount'\nimport { grantedSelector } from 'src/routes/safe/container/selector'\nimport ReceiveModal from './ReceiveModal'\nimport useAddressBookSync from 'src/logic/addressBook/hooks/useAddressBookSync'\nimport { useCurrentSafeAddressSync } from 'src/logic/currentSession/hooks/useCurrentSafeAddressSync'\nimport { useSidebarItems } from 'src/walliro/containers/AppLayout/Sidebar/useSidebarItems'\n\nconst Frame = styled.div`\n display: flex;\n flex-direction: column;\n flex: 1 1 auto;\n max-width: 100%;\n height: 100%;\n`\n\nconst App: React.FC = ({ children }) => {\n const { toggleSidebar } = useContext(SafeListSidebarContext)\n const { name: safeName, totalFiatBalance: currentSafeBalance } = useSelector(currentSafeWithNames)\n const { safeActionsState, onShow, onHide, showSendFunds, hideSendFunds } = useSafeActions()\n const currentCurrency = useSelector(currentCurrencySelector)\n const granted = useSelector(grantedSelector)\n const sidebarItems = useSidebarItems()\n const { address: safeAddress } = useSelector(currentSafeWithNames)\n\n useCurrentSafeAddressSync()\n useAddressBookSync()\n\n const sendFunds = safeActionsState.sendFunds\n const balance = formatCurrency(currentSafeBalance.toString(), currentCurrency)\n\n const onReceiveShow = () => onShow('Receive')\n const onReceiveHide = () => onHide('Receive')\n return (\n \n showSendFunds('')}\n >\n {children}\n \n\n \n\n {safeAddress && (\n \n \n \n )}\n {/* */}\n \n )\n}\n\nconst WrapperAppWithSidebar: React.FC = ({ children }) => (\n \n {children}\n \n)\n\nexport default WrapperAppWithSidebar\n","import { useMemo, useCallback } from 'react'\nimport { useSelector } from 'react-redux'\nimport { useRouteMatch } from 'react-router-dom'\nimport { FEATURES } from '@gnosis.pm/safe-react-gateway-sdk'\n\nimport { ListItemType } from 'src/components/List'\nimport ListIcon from 'src/components/List/ListIcon'\nimport { currentSafeFeaturesEnabled, currentSafeWithNames } from 'src/logic/safe/store/selectors'\nimport { grantedSelector } from 'src/routes/safe/container/selector'\nimport { ADDRESSED_ROUTE, SAFE_SUBSECTION_ROUTE, generatePrefixedAddressRoutes } from 'src/routes/routes'\nimport { hasFeature } from 'src/logic/safe/utils/safeVersion'\nimport useSafeAddress from 'src/logic/currentSession/hooks/useSafeAddress'\n\nconst useSidebarItems = (): ListItemType[] => {\n const featuresEnabled = useSelector(currentSafeFeaturesEnabled)\n const safeAppsEnabled = hasFeature(FEATURES.SAFE_APPS)\n const isCollectiblesEnabled = hasFeature(FEATURES.ERC721)\n const isSpendingLimitEnabled = hasFeature(FEATURES.SPENDING_LIMIT)\n const { needsUpdate } = useSelector(currentSafeWithNames)\n const { shortName, safeAddress } = useSafeAddress()\n const granted = useSelector(grantedSelector)\n\n const matchSafe = useRouteMatch(ADDRESSED_ROUTE)\n\n // Question mark makes matching [SAFE_SUBSECTION_SLUG] optional\n const matchSafeWithSidebarSection = useRouteMatch(`${SAFE_SUBSECTION_ROUTE}?`)\n\n const makeEntryItem = useCallback(\n ({ label, disabled, badge, iconType, href, subItems }) => ({\n label,\n badge,\n disabled,\n icon: iconType ? {iconType} : iconType,\n selected: href === matchSafeWithSidebarSection?.url,\n href,\n subItems,\n }),\n [matchSafeWithSidebarSection],\n )\n\n return useMemo((): ListItemType[] => {\n if (!matchSafe || !matchSafeWithSidebarSection || !featuresEnabled || !safeAddress) {\n return []\n }\n\n const currentSafeRoutes = generatePrefixedAddressRoutes({\n shortName,\n safeAddress,\n })\n\n const assetsSubItems = [\n makeEntryItem({\n label: 'Coins',\n iconType: 'fiber_smart_record',\n href: currentSafeRoutes.ASSETS_BALANCES,\n }),\n makeEntryItem({\n disabled: !isCollectiblesEnabled,\n label: 'NFTs',\n iconType: 'diamond',\n href: currentSafeRoutes.ASSETS_BALANCES_COLLECTIBLES,\n }),\n ]\n\n const transactionsSubItems = [\n makeEntryItem({\n label: 'Queue',\n iconType: 'queue',\n href: currentSafeRoutes.TRANSACTIONS_QUEUE,\n }),\n makeEntryItem({\n label: 'History',\n iconType: 'history',\n href: currentSafeRoutes.TRANSACTIONS_HISTORY,\n }),\n ]\n\n const settingsSubItems = [\n makeEntryItem({\n label: 'Info',\n badge: needsUpdate && granted,\n iconType: 'info',\n href: currentSafeRoutes.SETTINGS_DETAILS,\n }),\n // makeEntryItem({\n // label: 'Appearance',\n // iconType: 'preview',\n // href: currentSafeRoutes.SETTINGS_APPEARANCE,\n // }),\n makeEntryItem({\n label: 'Owners',\n iconType: 'group',\n href: currentSafeRoutes.SETTINGS_OWNERS,\n }),\n makeEntryItem({\n label: 'Policies',\n iconType: 'history_edu',\n href: currentSafeRoutes.SETTINGS_POLICIES,\n }),\n // makeEntryItem({\n // disabled: !isSpendingLimitEnabled,\n // label: 'Spending Limit',\n // iconType: 'speed',\n // href: currentSafeRoutes.SETTINGS_SPENDING_LIMIT,\n // }),\n makeEntryItem({\n label: 'Advanced',\n iconType: 'build',\n href: currentSafeRoutes.SETTINGS_ADVANCED,\n }),\n ].filter(Boolean)\n\n return [\n makeEntryItem({\n label: 'Home',\n iconType: 'home',\n href: currentSafeRoutes.DASHBOARD,\n }),\n makeEntryItem({\n label: 'Assets',\n iconType: 'fiber_smart_record',\n href: currentSafeRoutes.ASSETS_BALANCES,\n subItems: assetsSubItems,\n }),\n makeEntryItem({\n label: 'Transactions',\n iconType: 'import_export',\n href: currentSafeRoutes.TRANSACTIONS_HISTORY,\n subItems: transactionsSubItems,\n }),\n makeEntryItem({\n label: 'Contacts',\n iconType: 'menu_book',\n href: currentSafeRoutes.ADDRESS_BOOK,\n }),\n makeEntryItem({\n disabled: !safeAppsEnabled,\n label: 'Apps',\n iconType: 'hdr_weak',\n href: currentSafeRoutes.APPS,\n }),\n makeEntryItem({\n disabled: !safeAppsEnabled,\n label: 'Walliro Biz',\n iconType: 'account_balance_wallet',\n href: currentSafeRoutes.BIZ,\n }),\n makeEntryItem({\n label: 'Profile',\n iconType: 'settings',\n href: currentSafeRoutes.SETTINGS_DETAILS,\n // subItems: settingsSubItems,\n }),\n ]\n }, [\n featuresEnabled,\n granted,\n isCollectiblesEnabled,\n isSpendingLimitEnabled,\n makeEntryItem,\n matchSafe,\n matchSafeWithSidebarSection,\n needsUpdate,\n safeAddress,\n safeAppsEnabled,\n shortName,\n ])\n}\n\nexport { useSidebarItems }\n","import { useEffect } from 'react'\nimport { Dispatch } from 'redux'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { useLocation } from 'react-router-dom'\n\nimport { extractPrefixedSafeAddress } from 'src/routes/routes'\nimport addCurrentSafeAddress from 'src/logic/currentSession/store/actions/addCurrentSafeAddress'\nimport addCurrentShortName from '../store/actions/addCurrentShortName'\nimport { currentSession } from '../store/selectors'\n\nexport const useCurrentSafeAddressSync = (): void => {\n const dispatch = useDispatch()\n const location = useLocation()\n const { currentShortName, currentSafeAddress } = useSelector(currentSession)\n\n useEffect(() => {\n const { shortName, safeAddress } = extractPrefixedSafeAddress(location.pathname)\n\n if (currentShortName !== shortName) {\n dispatch(addCurrentShortName(shortName))\n }\n if (currentSafeAddress !== safeAddress) {\n dispatch(addCurrentSafeAddress(safeAddress))\n }\n }, [location.pathname, dispatch, currentShortName, currentSafeAddress])\n}\n","import styled from 'styled-components'\nimport { Text, Link, Icon, FixedIcon, Title } from '@gnosis.pm/safe-react-components'\nimport { IS_PRODUCTION } from 'src/utils/constants'\nimport { FallbackRender } from '@sentry/react/dist/errorboundary'\nimport { ROOT_ROUTE } from 'src/routes/routes'\nimport { loadFromSessionStorage, removeFromSessionStorage, saveToSessionStorage } from 'src/utils/storage/session'\n\nconst Wrapper = styled.div`\n width: 100%;\n margin-top: 50px;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: flex-start;\n`\n\nconst Content = styled.div`\n width: 400px;\n display: flex;\n flex-direction: column;\n align-items: center;\n text-align: center;\n\n > * {\n margin-top: 10px;\n }\n`\n\nconst LinkWrapper = styled.div`\n display: inline-flex;\n margin-bottom: 10px;\n\n > :first-of-type {\n margin-right: 5px;\n }\n`\n\nconst LinkContent = styled.div`\n display: flex;\n align-items: center;\n\n > span {\n margin-right: 5px;\n }\n`\n\n// When loading app during release, chunk load failure may occur\nexport const handleChunkError = (error: Error): boolean => {\n const LAST_CHUNK_FAILURE_RELOAD_KEY = 'lastChunkFailureReload'\n const MIN_RELOAD_TIME = 10_000\n\n const chunkFailedMessage = /Loading chunk [\\d]+ failed/\n const isChunkError = error?.message && chunkFailedMessage.test(error.message)\n\n if (!isChunkError) return false\n\n const lastReload = loadFromSessionStorage(LAST_CHUNK_FAILURE_RELOAD_KEY)\n\n const isTimestamp = typeof lastReload === 'number' && !isNaN(lastReload)\n\n // Not a number in the sessionStorage\n if (!isTimestamp) {\n removeFromSessionStorage(LAST_CHUNK_FAILURE_RELOAD_KEY)\n return false\n }\n\n const now = new Date().getTime()\n\n const hasJustReloaded = lastReload + MIN_RELOAD_TIME > now\n\n if (hasJustReloaded) return false\n\n saveToSessionStorage(LAST_CHUNK_FAILURE_RELOAD_KEY, now.toString())\n window.location.reload()\n return true\n}\n\nconst GlobalErrorBoundaryFallback: FallbackRender = ({ error, componentStack }) => {\n if (handleChunkError(error)) {\n // FallbackRender type does not allow null to be returned\n // eslint-disable-next-line react/jsx-no-useless-fragment\n return <>\n }\n\n return (\n \n \n Something went wrong, please try again.\n \n {IS_PRODUCTION && (\n
\n \n In case the problem persists, please reach out to us via{' '}\n \n \n \n \n Discord\n \n \n \n \n
\n )}\n {!IS_PRODUCTION && (\n <>\n \n {error.toString()}\n \n \n {componentStack}\n \n \n )}\n \n \n \n Go to Home\n \n \n
\n
\n )\n}\n\nexport default GlobalErrorBoundaryFallback\n","import React from 'react'\nimport { Loader } from '@gnosis.pm/safe-react-components'\nimport { useSelector } from 'react-redux'\nimport { Redirect, Route, Switch, useLocation } from 'react-router-dom'\n\nimport { LoadingContainer } from 'src/components/LoaderContainer'\nimport { lastViewedSafe } from 'src/logic/currentSession/store/selectors'\nimport {\n generateSafeRoute,\n // LOAD_SPECIFIC_SAFE_ROUTE,\n // OPEN_SAFE_ROUTE,\n ADDRESSED_ROUTE,\n // WELCOME_ROUTE,\n STARTER_ROUTE,\n ROOT_ROUTE,\n // LOAD_SAFE_ROUTE,\n getNetworkRootRoutes,\n SAFE_ROUTES,\n GENERIC_APPS_ROUTE,\n SAFE_APP_LANDING_PAGE_ROUTE,\n} from './routes'\nimport { setChainId } from 'src/logic/config/utils'\nimport { setChainIdFromUrl } from 'src/utils/history'\nimport { usePageTracking } from 'src/utils/googleTagManager'\nimport useSafeAddress from 'src/logic/currentSession/hooks/useSafeAddress'\n\nconst Welcome = React.lazy(() => import('./welcome/Welcome'))\nconst Starter = React.lazy(() => import('./WalliroStarter'))\nconst CreateSafePage = React.lazy(() => import('./CreateSafePage/CreateSafePage'))\nconst LoadSafePage = React.lazy(() => import('./LoadSafePage/LoadSafePage'))\nconst SafeAppLandingPage = React.lazy(() => import('./SafeAppLandingPage/SafeAppLandingPage'))\nconst SafeContainer = React.lazy(() => import('./safe/container'))\n\nconst Routes = (): React.ReactElement => {\n const location = useLocation()\n const { pathname } = location\n const lastSafe = useSelector(lastViewedSafe)\n const { shortName, safeAddress } = useSafeAddress()\n\n // Google Tag Manager page tracking\n usePageTracking()\n\n return (\n \n }\n />\n\n }\n />\n }\n />\n\n {\n // Redirection to open network specific welcome pages\n getNetworkRootRoutes().map(({ chainId, route, shortName }) => (\n {\n setChainId(chainId)\n return \n }}\n />\n ))\n }\n\n {\n if (lastSafe === null) {\n return (\n \n \n \n )\n }\n\n if (lastSafe) {\n return (\n \n )\n }\n\n return \n }}\n />\n\n {/* Redirect /app/apps?appUrl=https://... to that app within the current Safe */}\n {\n if (!lastSafe) {\n return \n }\n const redirectPath = generateSafeRoute(SAFE_ROUTES.APPS, {\n shortName,\n safeAddress: lastSafe,\n })\n return \n }}\n />\n\n {/* \n\n */}\n\n {\n // Routes with a shortName prefix\n const validShortName = setChainIdFromUrl(pathname)\n // Safe address is used as a key to re-render the entire SafeContainer\n return validShortName ? : \n }}\n />\n {/* */}\n \n \n \n )\n}\n\nexport default Routes\n","import { _getChainId } from 'src/config'\nimport { getChains } from 'src/config/cache/chains'\nimport { setChainId } from 'src/logic/config/utils'\nimport { extractPrefixedSafeAddress } from 'src/routes/routes'\n\nexport const setChainIdFromUrl = (pathname: string): boolean => {\n const { shortName, safeAddress } = extractPrefixedSafeAddress(pathname)\n\n if (!safeAddress) return false\n\n const chainId = getChains().find((chain) => chain.shortName === shortName)?.chainId\n\n if (chainId) {\n if (chainId !== _getChainId()) {\n setChainId(chainId)\n }\n return true\n }\n\n return false\n}\n","import { useEffect } from 'react'\nimport { useSelector, useDispatch } from 'react-redux'\nimport { SnackbarKey, useSnackbar } from 'notistack'\nimport { IconButton } from '@material-ui/core'\nimport CloseIcon from '@material-ui/icons/Close'\n\nimport { selectNotifications, closeNotification } from 'src/logic/notifications/store/notifications'\nimport NotificationLink from 'src/walliro/containers/AppLayout/Header/Notifications/NotificationLink'\n\nlet onScreenKeys: SnackbarKey[] = []\n\nconst useNotifier = (): void => {\n const notifications = useSelector(selectNotifications)\n const { closeSnackbar, enqueueSnackbar } = useSnackbar()\n const dispatch = useDispatch()\n\n useEffect(() => {\n for (const notification of notifications) {\n const { key } = notification.options\n\n // Dismiss notification via Notistack\n if (notification.dismissed) {\n closeSnackbar(key)\n continue\n }\n\n // Do nothing if notification is already on screen\n if (onScreenKeys.includes(key)) {\n continue\n }\n\n // `onExited` runs after a notification unmounts meaning that already\n // closed notifications would 'close' again, marking them as unread\n let wasClosed = false\n\n // Display notification with Notistack\n enqueueSnackbar(\n
\n
{notification.message}
\n {notification.link && (\n {\n closeSnackbar(key)\n wasClosed = true\n }}\n />\n )}\n
,\n {\n ...notification.options,\n onExited: () => {\n // Cleanup store/cache when notification has unmounted\n if (!wasClosed) {\n dispatch(closeNotification({ key, read: false }))\n }\n onScreenKeys = onScreenKeys.filter((onScreenKey) => onScreenKey !== key)\n },\n action: (\n {\n dispatch(closeNotification({ key }))\n wasClosed = true\n }}\n >\n \n \n ),\n },\n )\n\n onScreenKeys = [...onScreenKeys, key]\n }\n }, [notifications, closeSnackbar, enqueueSnackbar, dispatch])\n}\n\nexport default useNotifier\n","import { ReactNode } from 'react'\nimport { SnackbarProvider } from 'notistack'\nimport { makeStyles } from '@material-ui/core/styles'\n\nimport Img from 'src/components/layout/Img'\nimport AlertIcon from 'src/assets/icons/alert.svg'\nimport CheckIcon from 'src/assets/icons/check.svg'\nimport ErrorIcon from 'src/assets/icons/error.svg'\nimport InfoIcon from 'src/assets/icons/info.svg'\nimport useNotifier from 'src/logic/hooks/useNotifier'\nimport { fontColor, secondaryText, sm } from 'src/theme/variables'\n\nconst useStyles = makeStyles({\n containerRoot: {\n top: '50px',\n },\n root: {\n width: '340px',\n },\n success: {\n background: '#CBF1EB',\n },\n error: {\n background: '#ffe6ea',\n },\n warning: {\n background: '#fff3e2',\n },\n info: {\n background: '#EBF7FF',\n },\n snackbar: {\n borderRadius: `${sm}`,\n boxShadow: '0 0 10px 0 rgba(212, 212, 211, 0.59)',\n flexWrap: 'nowrap',\n padding: '20px',\n alignItems: 'space-between',\n '& div:first-child': {\n color: fontColor,\n padding: '0 10px 0 0',\n alignItems: 'stretch',\n overflowY: 'auto',\n maxHeight: '160px',\n '& > img': {\n marginRight: '13px',\n },\n },\n '& div:last-child': {\n paddingLeft: '0',\n '& > button': {\n color: secondaryText,\n },\n },\n },\n})\n\n// Hook must be inside the provider\nconst Notifier = (): null => {\n useNotifier()\n return null\n}\n\nconst CustomSnackBarProvider = ({ children }: { children: ReactNode }): React.ReactElement => {\n const classes = useStyles()\n\n return (\n ,\n info: \"Info\",\n success: \"Success\",\n warning: \"Warning\",\n }}\n maxSnack={5}\n >\n {children}\n \n \n )\n}\n\nexport default CustomSnackBarProvider\n","import { ReactNode } from 'react'\nimport { MuiThemeProvider, Theme as MuiTheme } from '@material-ui/core/styles'\nimport { Router } from 'react-router'\nimport { Provider } from 'react-redux'\nimport { ThemeProvider } from 'styled-components'\nimport { Store } from 'redux'\nimport { History } from 'history'\nimport { theme } from '@gnosis.pm/safe-react-components'\nimport SnackbarProvider from './SnackbarProvider'\n\ndeclare type Theme = typeof theme\n\ntype ProvidersProps = {\n children: ReactNode\n store: Store\n history: History\n styledTheme: Theme\n muiTheme: MuiTheme\n}\n\nfunction Providers({ children, store, styledTheme, muiTheme, history }: ProvidersProps): React.ReactElement {\n return (\n \n \n \n \n {children}\n \n \n \n \n )\n}\n\nexport default Providers\n","import { matchPath, Router, Redirect } from 'react-router'\nimport { ReactElement } from 'react'\nimport { IS_PRODUCTION, PUBLIC_URL } from 'src/utils/constants'\nimport { History } from 'history'\n\ntype Props = {\n history: History\n}\n\nenum SHORT_NAME {\n RINKEBY = 'rin',\n MAINNET = 'eth',\n}\n\nconst LEGACY_SAFE_ADDRESS_SLUG = 'safeAddress'\n\nconst LegacyRouteRedirection = ({ history }: Props): ReactElement | null => {\n const { pathname, hash, search } = window.location\n\n const isLegacyRoute = pathname === `${PUBLIC_URL}/` && hash.startsWith('#/')\n\n if (!isLegacyRoute) {\n return null\n }\n\n // :subdir was '/safes' or '/load'\n const match = matchPath<{ [LEGACY_SAFE_ADDRESS_SLUG]: string }>(hash, {\n path: `#/:subdir/:${LEGACY_SAFE_ADDRESS_SLUG}`,\n })\n\n const safeAddress = match?.params?.[LEGACY_SAFE_ADDRESS_SLUG]\n\n if (!match || !safeAddress) {\n return (\n \n \n \n )\n }\n\n const DEFAULT_SHORT_NAME = IS_PRODUCTION ? SHORT_NAME.MAINNET : SHORT_NAME.RINKEBY\n\n // Insert shortName before Safe address\n const safeAddressIndex = hash.indexOf('0x')\n const newPathname = (\n hash.slice(0, safeAddressIndex) +\n `${DEFAULT_SHORT_NAME}:` +\n hash.slice(safeAddressIndex)\n ).replace(\n /(#\\/safes|#\\/)/, // Remove '#/safes' and '#/'\n '',\n )\n\n return (\n \n \n \n )\n}\n\nexport default LegacyRouteRedirection\n","import * as Sentry from '@sentry/react'\nimport { theme as styledTheme, Loader } from '@gnosis.pm/safe-react-components'\nimport { useEffect, useState } from 'react'\nimport { setBaseUrl } from '@gnosis.pm/safe-react-gateway-sdk'\n\nimport { LoadingContainer } from 'src/components/LoaderContainer'\nimport App from 'src/components/App'\nimport GlobalErrorBoundary from 'src/components/GlobalErrorBoundary'\nimport AppRoutes from 'src/routes'\nimport { store } from 'src/store'\nimport { history, STARTER_ROUTE } from 'src/routes/routes'\nimport theme from 'src/theme/mui'\nimport { wrapInSuspense } from 'src/utils/wrapInSuspense'\nimport Providers from '../Providers'\n// import './index.module.scss'\nimport './OnboardCustom.module.scss'\nimport './KeystoneCustom.module.scss'\nimport 'src/walliro/assets/css/bootstrap.min.css'\nimport 'src/walliro/assets/sass/globals.scss'\nimport LegacyRouteRedirection from './LegacyRouteRedirection'\nimport { logError, Errors, CodedException } from 'src/logic/exceptions/CodedException'\nimport { loadChains } from 'src/config/cache/chains'\nimport { setChainId } from 'src/logic/config/utils'\nimport { _getChainId } from 'src/config'\nimport { GATEWAY_URL } from 'src/utils/constants'\nimport { Provider as ProviderWalliro } from 'src/walliro/hook'\nimport Starter from 'src/routes/WalliroStarter'\nimport { Route, Switch } from 'react-router-dom'\nimport { background } from 'src/theme/variables'\n\n// Preloader is rendered outside of '#root' and acts as a loading spinner\n// for the app and then chains loading\nconst removePreloader = () => {\n document.getElementById('safe-preloader-animation')?.remove()\n}\n\nconst RootConsumer = (): React.ReactElement | null => {\n const [hasChains, setHasChains] = useState(false)\n const [isError, setIsError] = useState(false)\n\n useEffect(() => {\n // Initialize the SDK\n setBaseUrl(GATEWAY_URL)\n\n const initChains = async () => {\n try {\n await loadChains()\n setHasChains(true)\n } catch (err) {\n logError(Errors._904, err.message)\n setIsError(true)\n }\n }\n initChains()\n\n // Set store chainId and init contracts/session\n\n setChainId(_getChainId())\n }, [])\n\n // Chains failed to load\n if (isError) {\n removePreloader()\n throw new CodedException(Errors._904)\n }\n\n if (!hasChains) {\n return null\n }\n\n removePreloader()\n\n return (\n \n \n (\n \n {wrapInSuspense(\n ,\n \n \n ,\n )}\n \n )}\n path={'/*'}\n />\n \n )\n}\n\n// Chains loader requires error boundary, which requires Providers\n// and Legacy redirection should be outside of Providers\n\nconst styledThemeWalliro = {\n ...styledTheme,\n colors: {\n ...styledTheme.colors,\n primary: 'rgb(var(--Mprimary))',\n primaryHover: 'rgb(var(--Mprimary-darker))',\n primaryLight: 'rgb(var(--Mprimary-lighter))',\n white: 'rgb(var(--Mwhite))',\n text: 'rgb(var(--Mtext))',\n secondary: 'rgb(var(--Mtext))',\n background: background,\n icon: 'rgb(var(--Mtext))',\n secondaryLight: 'rgb(var(--Mgray-darker))',\n inputField: 'rgba(var(--Mgray-darkest),1)',\n placeHolder: 'rgb(var(--Mtxt))',\n },\n fonts: {\n ...styledTheme.fonts,\n fontFamily: \"'Montserrat', sans-serif\",\n },\n}\n\nconst Root = (): React.ReactElement => (\n <>\n \n \n \n \n \n \n \n \n \n)\n\nexport default Root\n","// https://docs.metamask.io/guide/ethereum-provider.html#ethereum-autorefreshonnetworkchange\nexport const disableMMAutoRefreshWarning = (): void => {\n if (window.ethereum && window.ethereum.isMetaMask) {\n window.ethereum.autoRefreshOnNetworkChange = false\n }\n}\n","import { BigNumber } from 'bignumber.js'\nimport ReactDOM from 'react-dom'\nimport * as Sentry from '@sentry/react'\nimport { Integrations } from '@sentry/tracing'\nimport Root from 'src/components/Root'\nimport { SENTRY_DSN } from './utils/constants'\nimport { disableMMAutoRefreshWarning } from './utils/mm_warnings'\n\ndisableMMAutoRefreshWarning()\n\nBigNumber.set({ EXPONENTIAL_AT: [-7, 255] })\n\nSentry.init({\n dsn: SENTRY_DSN,\n release: `safe-react@${process.env.REACT_APP_APP_VERSION}`,\n integrations: [new Integrations.BrowserTracing()],\n sampleRate: 0.1,\n ignoreErrors: [\n // MetaMask errors we don't control\n 'Internal JSON-RPC error',\n 'JsonRpcEngine',\n 'Non-Error promise rejection captured with keys: code',\n // Duplicate of Errors._800 emitted by promiEvent\n 'Transaction was not mined within 50 blocks, please make sure your transaction was properly sent. Be aware that it might still be mined!',\n // Insignificant ResizeObserver errors\n 'ResizeObserver loop completed with undelivered notifications.',\n 'ResizeObserver loop limit exceeded',\n ],\n})\n\nconst root = document.getElementById('root')\n\nif (root !== null) {\n ReactDOM.render(, root)\n}\n","import { trackEvent } from 'src/utils/googleTagManager'\n\nexport type TrackEvent = Parameters[0]\n\nexport const addEventCategory = (\n events: Record>,\n category: string,\n): Record => {\n return Object.entries(events).reduce((events, [key, value]) => ({ ...events, [key]: { ...value, category } }), {})\n}\n","import {\n ChainInfo,\n GasPriceOracle,\n GAS_PRICE_TYPE,\n RPC_AUTHENTICATION,\n RpcUri,\n GasPriceFixed,\n} from '@gnosis.pm/safe-react-gateway-sdk'\n\nimport {\n DEFAULT_CHAIN_ID,\n ETHERSCAN_API_KEY,\n INFURA_TOKEN,\n SAFE_APPS_RPC_TOKEN,\n TX_SERVICE_VERSION,\n} from 'src/utils/constants'\nimport { ChainId, ChainName, ShortName } from './chain.d'\nimport { emptyChainInfo, getChains } from './cache/chains'\nimport { evalTemplate } from './utils'\nimport local from 'src/utils/storage/local'\nimport { ConfigState } from 'src/logic/config/store/reducer/reducer.d'\n\nexport const LOCAL_CONFIG_KEY = 'config'\n\n/**\n * Determine the initial chain id\n */\nconst getInitialChainId = (): ChainId => {\n const localItem = local.getItem(LOCAL_CONFIG_KEY)\n return localItem?.chainId || DEFAULT_CHAIN_ID\n}\n\nlet _chainId = getInitialChainId()\n\nexport const _setChainId = (newChainId: ChainId) => {\n _chainId = newChainId\n}\n\nexport const _getChainId = (): ChainId => {\n return _chainId\n}\n\nexport const isValidChainId = (chainId: unknown): chainId is ChainId =>\n getChains().some((chain) => chain.chainId === chainId)\n\nexport const getChainById = (chainId: ChainId): ChainInfo => {\n return getChains().find((chain) => chain.chainId === chainId) || emptyChainInfo\n}\n\nexport const getChainInfo = (): ChainInfo => {\n return getChainById(_getChainId())\n}\n\nexport const getChainName = (): ChainName => {\n return getChainInfo().chainName\n}\n\nexport const getShortName = (): ShortName => {\n return getChainInfo().shortName\n}\n\n// CGW does not return `nativeCurrency.address` as it is `ZERO_ADDRESS`\nexport const getNativeCurrency = (): ChainInfo['nativeCurrency'] => {\n return getChainInfo().nativeCurrency\n}\n\nconst formatRpcServiceUrl = ({ authentication, value }: RpcUri, TOKEN: string): string => {\n const needsToken = authentication === RPC_AUTHENTICATION.API_KEY_PATH\n return needsToken ? `${value}${TOKEN}` : value\n}\n\nexport const getRpcServiceUrl = (rpcUri = getChainInfo().rpcUri): string => {\n return formatRpcServiceUrl(rpcUri, INFURA_TOKEN)\n}\n\nexport const getPublicRpcUrl = (): string => {\n const { publicRpcUri } = getChainInfo()\n // Don't pass any auth token because this RPC is for user's wallet\n return formatRpcServiceUrl(publicRpcUri, '')\n}\n\nexport const getSafeAppsRpcServiceUrl = (): string => {\n const { safeAppsRpcUri } = getChainInfo()\n return formatRpcServiceUrl(safeAppsRpcUri, SAFE_APPS_RPC_TOKEN)\n}\n\nexport const getGasPriceOracles = (): Extract[] => {\n const isOracleType = (gasPrice: ChainInfo['gasPrice'][number]): gasPrice is GasPriceOracle => {\n return gasPrice.type === GAS_PRICE_TYPE.ORACLE\n }\n return getChainInfo().gasPrice.filter(isOracleType)\n}\n\nexport const getFixedGasPrice = (): Extract => {\n const isFixed = (gasPrice: ChainInfo['gasPrice'][number]): gasPrice is GasPriceFixed => {\n return gasPrice.type === GAS_PRICE_TYPE.FIXED\n }\n return getChainInfo().gasPrice.filter(isFixed)[0]\n}\n\n// @TODO: Remove after Safe Apps reliance\nexport const getTxServiceUrl = (): ChainInfo['transactionService'] => {\n const { transactionService } = getChainInfo()\n // To avoid breaking changes, we define the version the web uses manually\n return `${transactionService}/api/v${TX_SERVICE_VERSION}`\n}\n\nexport const getDisabledWallets = (): ChainInfo['disabledWallets'] => {\n return getChainInfo().disabledWallets\n}\n\nconst getExplorerUriTemplate = (): ChainInfo['blockExplorerUriTemplate'] => {\n return getChainInfo().blockExplorerUriTemplate\n}\n\nexport const getExplorerUrl = (): string => {\n const { address } = getExplorerUriTemplate()\n return new URL(address).origin\n}\n\nexport const getHashedExplorerUrl = (hash: string): string => {\n const isTx = hash.length > 42\n const param = isTx ? 'txHash' : 'address'\n const uri = getExplorerUriTemplate()[param]\n return evalTemplate(uri, { [param]: hash })\n}\n\n// Matches return type of ExplorerInfo from SRC\nexport const getExplorerInfo = (hash: string): (() => { url: string; alt: string }) => {\n const url = getHashedExplorerUrl(hash)\n\n const { hostname } = new URL(url)\n const alt = `View on ${hostname}` // Not returned by CGW\n return () => ({ url, alt })\n}\n\nconst getExplorerApiKey = (apiUrl: string): string | undefined => {\n return apiUrl.includes('etherscan') && ETHERSCAN_API_KEY ? ETHERSCAN_API_KEY : undefined\n}\n\nconst fetchContractAbi = async (contractAddress: string) => {\n const apiUri = getExplorerUriTemplate().api\n const apiKey = getExplorerApiKey(apiUri)\n\n const params = {\n module: 'contract',\n action: 'getAbi',\n address: contractAddress,\n ...(apiKey && { apiKey }),\n }\n\n const finalUrl = evalTemplate(apiUri, params)\n\n const response = await fetch(finalUrl)\n\n if (!response.ok) {\n return { status: 0, result: [] }\n }\n\n return response.json()\n}\n\nexport const getContractABI = async (contractAddress: string) => {\n try {\n const { result, status } = await fetchContractAbi(contractAddress)\n\n if (status === '0') {\n return []\n }\n\n return result\n } catch (e) {\n console.error('Failed to retrieve ABI', e)\n return undefined\n }\n}\n","import { Transaction } from '@gnosis.pm/safe-apps-sdk-v1'\n\nimport { getWeb3 } from 'src/logic/wallets/getWeb3'\nimport { getMultisendContract, getMultisendContractAddress } from 'src/logic/contracts/safeContracts'\nimport { MultiSend, TransactionInfo } from '@gnosis.pm/safe-react-gateway-sdk'\nimport { isCustomTxInfo } from 'src/logic/safe/store/models/types/gateway.d'\nimport { sameString } from 'src/utils/strings'\n\nexport interface MultiSendTx {\n to: string\n value: string\n data: string\n}\n\nexport const encodeMultiSendCall = (txs: Transaction[]): string => {\n const multiSend = getMultisendContract()\n const joinedTxs = getMultiSendJoinedTxs(txs)\n\n return multiSend.methods.multiSend(joinedTxs).encodeABI()\n}\n\nexport const getMultiSendJoinedTxs = (txs: Transaction[]): string => {\n const web3 = getWeb3()\n\n const joinedTxs = txs\n .map((tx) =>\n [\n web3.eth.abi.encodeParameter('uint8', 0).slice(-2),\n web3.eth.abi.encodeParameter('address', tx.to).slice(-40),\n // if you pass wei as number, it will overflow\n web3.eth.abi.encodeParameter('uint256', tx.value.toString()).slice(-64),\n web3.eth.abi.encodeParameter('uint256', web3.utils.hexToBytes(tx.data).length).slice(-64),\n tx.data.replace(/^0x/, ''),\n ].join(''),\n )\n .join('')\n\n return `0x${joinedTxs}`\n}\n\nexport const isSupportedMultiSendAddress = (txInfo: TransactionInfo): boolean => {\n const toAddress = isCustomTxInfo(txInfo) ? txInfo.to.value : ''\n const multiSendAddress = getMultisendContractAddress()\n\n return sameString(multiSendAddress, toAddress)\n}\n\nexport const isSupportedMultiSendCall = (txInfo: TransactionInfo): txInfo is MultiSend =>\n isSupportedMultiSendAddress(txInfo) && isCustomTxInfo(txInfo) && txInfo.methodName === 'multiSend'\n","import { GTM_EVENT } from 'src/utils/googleTagManager'\nimport { addEventCategory, TrackEvent } from 'src/utils/events/utils'\n\nconst MODALS = {\n SEND_FUNDS: {\n event: GTM_EVENT.CLICK,\n action: 'Send funds',\n },\n SEND_COLLECTIBLE: {\n event: GTM_EVENT.CLICK,\n action: 'Send collectible',\n },\n CONTRACT_INTERACTION: {\n event: GTM_EVENT.CLICK,\n action: 'Contract interaction',\n },\n ADVANCED_PARAMS: {\n event: GTM_EVENT.CLICK,\n action: 'Advanced params',\n },\n EDIT_ADVANCED_PARAMS: {\n event: GTM_EVENT.CLICK,\n action: 'Edit advanced params',\n },\n ESTIMATION: {\n event: GTM_EVENT.CLICK,\n action: 'Estimation',\n },\n EDIT_ESTIMATION: {\n event: GTM_EVENT.CLICK,\n action: 'Edit estimation',\n },\n EXECUTE_TX: {\n event: GTM_EVENT.CLICK,\n action: 'Execute transaction',\n },\n USE_SPENDING_LIMIT: {\n event: GTM_EVENT.META,\n action: 'Use spending limit',\n },\n SIMULATE_TX: {\n event: GTM_EVENT.CLICK,\n action: 'Simulate transaction',\n },\n}\n\nconst MODALS_CATEGORY = 'modals'\n\n// Modal.Footer.Buttons buttons automatically generate events from button strings\n// which can be used as reference for 'finalising' a modal form, e.g.\n// we do not need to track: add owner => owner added, just add owner\n\nexport const getModalEvent = (action: string, event = GTM_EVENT.CLICK): TrackEvent => ({\n event,\n category: MODALS_CATEGORY,\n action,\n})\n\nexport const MODALS_EVENTS = addEventCategory(MODALS, MODALS_CATEGORY)\n","import { GTM_EVENT } from 'src/utils/googleTagManager'\nimport { addEventCategory } from 'src/utils/events/utils'\n\nconst TX_LIST = {\n QUEUED_TXS: {\n event: GTM_EVENT.META,\n action: 'Queued transactions',\n },\n ADDRESS_BOOK: {\n event: GTM_EVENT.CLICK,\n action: 'Update contacts',\n },\n COPY_DEEPLINK: {\n event: GTM_EVENT.CLICK,\n action: 'Copy deeplink',\n },\n CONFIRM: {\n event: GTM_EVENT.CLICK,\n action: 'Confirm transaction',\n },\n EXECUTE: {\n event: GTM_EVENT.CLICK,\n action: 'Execute transaction',\n },\n REJECT: {\n event: GTM_EVENT.CLICK,\n action: 'Reject transaction',\n },\n FILTER: {\n event: GTM_EVENT.CLICK,\n action: 'Filter transactions',\n },\n BATCH_EXECUTE: {\n event: GTM_EVENT.CLICK,\n action: 'Batch Execute',\n },\n}\n\nconst TX_LIST_CATEGORY = 'tx-list'\nexport const TX_LIST_EVENTS = addEventCategory(TX_LIST, TX_LIST_CATEGORY)\n","import { operations } from '@gnosis.pm/safe-react-gateway-sdk/dist/types/api'\nimport { TextFieldProps } from '@material-ui/core/TextField/TextField'\nimport { ParsedUrlQuery } from 'querystring'\nimport { FieldError } from 'react-hook-form'\n\nimport { showShortNameSelector } from 'src/logic/appearance/selectors'\nimport { store } from 'src/store'\nimport { isValidAddress, isValidPrefixedAddress } from 'src/utils/isValidAddress'\nimport { parsePrefixedAddress } from 'src/utils/prefixedAddress'\nimport { textShortener } from 'src/utils/strings'\nimport { toWei } from 'web3-utils'\nimport {\n AMOUNT_FIELD_NAME,\n DATE_FROM_FIELD_NAME,\n DATE_TO_FIELD_NAME,\n FilterForm,\n FilterType,\n FILTER_TYPE_FIELD_NAME,\n MODULE_FIELD_NAME,\n NONCE_FIELD_NAME,\n RECIPIENT_FIELD_NAME,\n TOKEN_ADDRESS_FIELD_NAME,\n} from '.'\n\n// Value formatters\n\nexport const getFormattedAddress = (value: string, shorten = false): string => {\n const { prefix, address } = parsePrefixedAddress(value)\n const formattedAddress = shorten ? textShortener({ charsStart: 8, charsEnd: 6 })(address) : address\n\n const shouldShowChainPrefix = showShortNameSelector(store.getState())\n return shouldShowChainPrefix ? `${prefix}:${formattedAddress}` : formattedAddress\n}\n\nexport const formatInputValue = (value: string): string => {\n if (isValidAddress(value) || isValidPrefixedAddress(value)) {\n return getFormattedAddress(value)\n }\n\n return value\n}\n\n// Helper text formatter\n\nexport const getFilterHelperText = (value: string, error?: FieldError): TextFieldProps['helperText'] => {\n if (error?.message) {\n return error.message\n }\n\n if (isValidAddress(value) || isValidPrefixedAddress(value)) {\n return getFormattedAddress(value, true)\n }\n\n return undefined\n}\n\n// Filter helper\n\nexport const isTxFilter = (object: ParsedUrlQuery): object is Partial => {\n const FILTER_FIELD_NAMES = [\n FILTER_TYPE_FIELD_NAME,\n DATE_FROM_FIELD_NAME,\n DATE_TO_FIELD_NAME,\n RECIPIENT_FIELD_NAME,\n AMOUNT_FIELD_NAME,\n TOKEN_ADDRESS_FIELD_NAME,\n MODULE_FIELD_NAME,\n NONCE_FIELD_NAME,\n ]\n return Object.keys(object).some((key) => FILTER_FIELD_NAMES.includes(key))\n}\n\n// Filter formatters\n\ntype IncomingFilter = operations['incoming_transfers']['parameters']['query']\ntype OutgoingFilter = operations['multisig_transactions']['parameters']['query']\ntype Filter = (FilterForm | Partial) & { type?: FilterType }\n\nconst getTransactionFilter = ({\n execution_date__gte,\n execution_date__lte,\n value,\n}: Filter): Partial => {\n const getStartOfDay = (value: string): string => {\n const date = new Date(value)\n const utc = date.setUTCMinutes(date.getTimezoneOffset())\n return new Date(utc).toISOString()\n }\n\n const getEndOfDay = (value: string): string => {\n const date = new Date(value)\n // 23:59:59.999 + offset\n const utc = date.setUTCMinutes(23 * 60 + 59 + date.getTimezoneOffset(), 59, 999)\n return new Date(utc).toISOString()\n }\n\n return {\n ...(execution_date__gte && {\n execution_date__gte: getStartOfDay(execution_date__gte),\n }),\n ...(execution_date__lte && {\n execution_date__lte: getEndOfDay(execution_date__lte),\n }),\n ...(value && { value: toWei(value) }),\n }\n}\n\nexport const getIncomingFilter = (filter: Filter): IncomingFilter => {\n const { token_address } = filter\n return {\n ...getTransactionFilter(filter),\n ...(token_address && { token_address }),\n }\n}\n\nexport const getMultisigFilter = (filter: Filter, executed = false): OutgoingFilter => {\n const { to, nonce } = filter\n return {\n ...getTransactionFilter(filter),\n ...(to && { to }),\n ...(nonce && { nonce }),\n ...(executed && { executed: `${executed}` }),\n }\n}\n\ntype ModuleFilter = operations['module_transactions']['parameters']['query']\n\nexport const getModuleFilter = ({ to, module }: Filter): ModuleFilter => {\n return {\n ...(to && { to }),\n ...(module && { module }),\n }\n}\n","// This is pretty new so I'll leave the docs here\n// https://v8.dev/features/intl-numberformat\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/NumberFormat\n\n// Locale is undefined because we want it to use user's locale\nconst LOCALE = undefined\n\nconst lt1kFormatter = new Intl.NumberFormat(LOCALE, { maximumFractionDigits: 5 })\nconst lt10kFormatter = new Intl.NumberFormat(LOCALE, { maximumFractionDigits: 4 })\nconst lt100kFormatter = new Intl.NumberFormat(LOCALE, { maximumFractionDigits: 3 })\nconst lt1mFormatter = new Intl.NumberFormat(LOCALE, { maximumFractionDigits: 2 })\nconst lt10mFormatter = new Intl.NumberFormat(LOCALE, { maximumFractionDigits: 1 })\nconst lt100mFormatter = new Intl.NumberFormat(LOCALE, { maximumFractionDigits: 0 })\n// same format for billions and trillions\nconst lt1000tFormatter = new Intl.NumberFormat(LOCALE, { maximumFractionDigits: 3, notation: 'compact' })\nconst gt1000tFormatter = new Intl.NumberFormat(LOCALE, { notation: 'compact' })\n\nexport const formatAmount = (number: string): string => {\n let numberFloat: number | string = parseFloat(number)\n\n if (numberFloat === 0) {\n numberFloat = '0'\n } else if (numberFloat < 0.001) {\n numberFloat = `< ${lt1kFormatter.format(0.001)}`\n } else if (numberFloat < 1_000) {\n numberFloat = lt1kFormatter.format(numberFloat)\n } else if (numberFloat < 10_000) {\n numberFloat = lt10kFormatter.format(numberFloat)\n } else if (numberFloat < 100_000) {\n numberFloat = lt100kFormatter.format(numberFloat)\n } else if (numberFloat < 1_000_000) {\n numberFloat = lt1mFormatter.format(numberFloat)\n } else if (numberFloat < 10_000_000) {\n numberFloat = lt10mFormatter.format(numberFloat)\n } else if (numberFloat < 100_000_000) {\n numberFloat = lt100mFormatter.format(numberFloat)\n } else if (numberFloat < 10 ** 15) {\n numberFloat = lt1000tFormatter.format(numberFloat)\n } else {\n // Localized '> 1000T'\n numberFloat = `> ${gt1000tFormatter.format(10 ** 15)}`\n }\n\n return numberFloat\n}\n\nconst currencyFormatter = new Intl.NumberFormat(LOCALE, {\n minimumFractionDigits: 2,\n maximumFractionDigits: 8,\n})\n\nexport const formatCurrency = (amount: string, currencySelected: string): string => {\n const numberFloat = parseFloat(amount)\n return `${currencyFormatter.format(numberFloat)} ${currencySelected}`\n}\n","import format from 'date-fns/format'\nimport formatRelative from 'date-fns/formatRelative'\nimport formatDistanceToNow from 'date-fns/formatDistanceToNow'\n\nexport const relativeTime = (baseTimeMin: string, resetTimeMin: string): string => {\n if (resetTimeMin === '0') {\n return 'One-time'\n }\n\n const baseTimeSeconds = +baseTimeMin * 60\n const resetTimeSeconds = +resetTimeMin * 60\n const nextResetTimeMilliseconds = (baseTimeSeconds + resetTimeSeconds) * 1000\n\n return formatRelative(nextResetTimeMilliseconds, Date.now())\n}\n\nexport const getUTCStartOfDate = (timestamp: number): number => {\n const date = new Date(timestamp)\n\n return Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), 0, 0, 0, 0)\n}\n\nexport const getLocalStartOfDate = (timestamp: number): number => {\n const date = new Date(timestamp)\n\n return date.setHours(0, 0, 0, 0)\n}\n\nexport const formatWithSchema = (timestamp: number, schema: string): string => format(timestamp, schema)\n\nexport const formatTime = (timestamp: number): string => formatWithSchema(timestamp, 'h:mm a')\n\nexport const formatDateTime = (timestamp: number): string => formatWithSchema(timestamp, 'MMM d, yyyy - h:mm:ss a')\n\nexport const formatTimeInWords = (timestamp: number): string => formatDistanceToNow(timestamp, { addSuffix: true })\n","import { getStoragePrefix, loadFromStorage, saveToStorage } from 'src/utils/storage'\nimport { SafeRecordProps } from 'src/logic/safe/store/models/safe'\nimport { ChainId } from 'src/config/chain.d'\n\nexport const SAFES_KEY = 'SAFES'\n\nexport type StoredSafes = Record\n\nexport const loadStoredSafes = (): StoredSafes | undefined => {\n return loadFromStorage(SAFES_KEY)\n}\n\nexport const loadStoredNetworkSafeById = (id: ChainId): StoredSafes | undefined => {\n return loadFromStorage(SAFES_KEY, getStoragePrefix(id))\n}\n\nexport const saveSafes = (safes: StoredSafes): void => {\n saveToStorage(SAFES_KEY, safes)\n}\n\nexport const getLocalSafes = (): SafeRecordProps[] | undefined => {\n const storedSafes = loadStoredSafes()\n return storedSafes ? Object.values(storedSafes) : undefined\n}\n\nexport const getLocalNetworkSafesById = (id: ChainId): SafeRecordProps[] | undefined => {\n const storedSafes = loadStoredNetworkSafeById(id)\n return storedSafes ? Object.values(storedSafes) : undefined\n}\n\nexport const getLocalSafe = (safeAddress: string): SafeRecordProps | undefined => {\n const storedSafes = loadStoredSafes()\n return storedSafes?.[safeAddress]\n}\n","import { AbiItem } from 'web3-utils'\nimport { getAllowanceModuleDeployment } from '@gnosis.pm/safe-modules-deployments'\n\nimport { getWeb3 } from 'src/logic/wallets/getWeb3'\nimport { AllowanceModule } from 'src/types/contracts/allowance-module.d'\nimport { ChainId } from 'src/config/chain.d'\n\n/**\n * Returns an address of the deployed AllowanceModule contract. Returns undefined if no address found.\n * @param {ChainId} chainId - The chainId of the network\n * @returns {string|undefined}\n */\nconst getSpendingLimitModuleAddress = (chainId: ChainId): string | undefined => {\n const deployment = getAllowanceModuleDeployment({ network: chainId })\n\n return deployment?.networkAddresses[chainId]\n}\n\n/**\n * Returns abi for the SpendingLimitModule contract\n * @returns {AbiItem[]}\n */\nconst getSpendingLimitModuleAbi = (): AbiItem[] => {\n // default deployment will always return the abi, so we can omit the undefined check and convert type\n const deployment = getAllowanceModuleDeployment()\n\n return deployment?.abi as AbiItem[]\n}\n\n/**\n * Creates a Contract instance of the SpendingLimitModule contract\n * @param {string} contractAddress - The address of the AllowanceModule contract\n */\nconst getSpendingLimitContract = (contractAddress: string): AllowanceModule => {\n const web3 = getWeb3()\n const abi = getSpendingLimitModuleAbi()\n\n return new web3.eth.Contract(abi, contractAddress) as unknown as AllowanceModule\n}\n\nexport { getSpendingLimitModuleAddress, getSpendingLimitModuleAbi, getSpendingLimitContract }\n","import { List } from 'immutable'\nimport { Confirmation } from 'src/logic/safe/store/models/types/confirmation'\nimport { EMPTY_DATA } from 'src/logic/wallets/ethTransactions'\nimport semverSatisfies from 'semver/functions/satisfies'\nimport { SAFE_VERSION_FOR_OFF_CHAIN_SIGNATURES } from './transactions/offchainSigner'\n\n// Here we're checking that safe contract version is greater or equal 1.1.1, but\n// theoretically EIP712 should also work for 1.0.0 contracts\n// Also, offchain signatures are not working for ledger/trezor wallet because of a bug in their library:\n// https://github.com/LedgerHQ/ledgerjs/issues/378\n// Couldn't find an issue for trezor but the error is almost the same\nexport const checkIfOffChainSignatureIsPossible = (\n isExecution: boolean,\n isSmartContractWallet: boolean,\n safeVersion?: string,\n): boolean => {\n return (\n !isExecution &&\n !isSmartContractWallet &&\n !!safeVersion &&\n semverSatisfies(safeVersion, SAFE_VERSION_FOR_OFF_CHAIN_SIGNATURES)\n )\n}\n\n// https://docs.gnosis.io/safe/docs/contracts_signatures/#pre-validated-signatures\nexport const getPreValidatedSignatures = (from: string, initialString: string = EMPTY_DATA): string => {\n return `${initialString}000000000000000000000000${from.replace(\n EMPTY_DATA,\n '',\n )}000000000000000000000000000000000000000000000000000000000000000001`\n}\n\nexport const generateSignaturesFromTxConfirmations = (\n confirmations?: List,\n preApprovingOwner?: string,\n): string => {\n let confirmationsMap =\n confirmations?.map((value) => {\n return {\n signature: value.signature,\n owner: value.owner.toLowerCase(),\n }\n }) || List([])\n\n if (preApprovingOwner) {\n confirmationsMap = confirmationsMap.push({ owner: preApprovingOwner, signature: null })\n }\n\n // The constant parts need to be sorted so that the recovered signers are sorted ascending\n // (natural order) by address (not checksummed).\n confirmationsMap = confirmationsMap.sort((ownerA, ownerB) => ownerA.owner.localeCompare(ownerB.owner))\n\n let sigs = '0x'\n confirmationsMap.forEach(({ signature, owner }) => {\n if (signature) {\n sigs += signature.slice(2)\n } else {\n // https://docs.gnosis.io/safe/docs/contracts_signatures/#pre-validated-signatures\n sigs += getPreValidatedSignatures(owner, '')\n }\n })\n\n return sigs\n}\n","import { useCallback, useEffect, useState } from 'react'\n\ntype AsyncResult = [result: T | undefined, error: Error | undefined, loading: boolean]\n\nconst useAsync = (asyncCall: () => Promise, dependencies: unknown[]): AsyncResult => {\n const [result, setResult] = useState()\n const [error, setError] = useState()\n const [loading, setLoading] = useState(true)\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const callback = useCallback(asyncCall, dependencies)\n\n useEffect(() => {\n let isCurrent = true\n\n setResult(undefined)\n setError(undefined)\n setLoading(true)\n\n callback()\n .then((val: T) => {\n isCurrent && setResult(val)\n })\n .catch((err) => {\n isCurrent && setError(err)\n })\n .finally(() => {\n isCurrent && setLoading(false)\n })\n\n return () => {\n isCurrent = false\n }\n }, [callback])\n\n return [result, error, loading]\n}\n\nexport default useAsync\n","import { useEffect, useRef } from 'react'\nimport TagManager, { TagManagerArgs } from 'react-gtm-module'\nimport { matchPath, useLocation } from 'react-router-dom'\nimport { useSelector } from 'react-redux'\n\nimport { ADDRESSED_ROUTE, history, SAFE_ADDRESS_SLUG, SAFE_ROUTES, TRANSACTION_ID_SLUG } from 'src/routes/routes'\nimport {\n GOOGLE_TAG_MANAGER_ID,\n GOOGLE_TAG_MANAGER_AUTH_LIVE,\n GOOGLE_TAG_MANAGER_AUTH_LATEST,\n IS_PRODUCTION,\n GOOGLE_TAG_MANAGER_DEVELOPMENT_AUTH,\n} from 'src/utils/constants'\nimport { _getChainId } from 'src/config'\nimport { currentChainId } from 'src/logic/config/store/selectors'\nimport { Cookie, removeCookies } from 'src/logic/cookies/utils'\nimport { SafeApp } from 'src/routes/safe/components/Apps/types'\nimport { EMPTY_SAFE_APP } from 'src/routes/safe/components/Apps/utils'\n\nexport const getAnonymizedPathname = (pathname: string = history.location.pathname): string => {\n const ANON_SAFE_ADDRESS = 'SAFE_ADDRESS'\n const ANON_TX_ID = 'TRANSACTION_ID'\n\n let anonPathname = pathname\n\n // Anonymize safe address\n const safeAddressMatch = matchPath(pathname, { path: ADDRESSED_ROUTE })\n if (safeAddressMatch) {\n anonPathname = anonPathname.replace(safeAddressMatch.params[SAFE_ADDRESS_SLUG], ANON_SAFE_ADDRESS)\n }\n\n // Anonymise transaction id\n const txIdMatch = matchPath<{ [TRANSACTION_ID_SLUG]: string }>(pathname, {\n path: SAFE_ROUTES.TRANSACTIONS_SINGULAR,\n })\n\n const queueHistoryMatch = matchPath(pathname, {\n path: [SAFE_ROUTES.TRANSACTIONS_HISTORY, SAFE_ROUTES.TRANSACTIONS_QUEUE],\n })\n\n const isSingularTxView = txIdMatch && !queueHistoryMatch\n\n if (isSingularTxView) {\n anonPathname = anonPathname.replace(txIdMatch.params[TRANSACTION_ID_SLUG], ANON_TX_ID)\n }\n\n return anonPathname\n}\n\ntype GTMEnvironment = 'LIVE' | 'LATEST' | 'DEVELOPMENT'\ntype GTMEnvironmentArgs = Required>\n\nconst GTM_ENV_AUTH: Record = {\n LIVE: {\n auth: GOOGLE_TAG_MANAGER_AUTH_LIVE,\n preview: 'env-1',\n },\n LATEST: {\n auth: GOOGLE_TAG_MANAGER_AUTH_LATEST,\n preview: 'env-2',\n },\n DEVELOPMENT: {\n auth: GOOGLE_TAG_MANAGER_DEVELOPMENT_AUTH,\n preview: 'env-3',\n },\n}\n\nexport enum GTM_EVENT {\n PAGEVIEW = 'pageview',\n CLICK = 'customClick',\n META = 'metadata',\n SAFE_APP = 'safeApp',\n}\n\nexport const loadGoogleTagManager = (): void => {\n const GTM_ENVIRONMENT = IS_PRODUCTION ? GTM_ENV_AUTH.LIVE : GTM_ENV_AUTH.DEVELOPMENT\n\n if (!GOOGLE_TAG_MANAGER_ID || !GTM_ENVIRONMENT.auth) {\n console.warn('[GTM] - Unable to initialize Google Tag Manager. `id` or `gtm_auth` missing.')\n return\n }\n\n const pagePath = getAnonymizedPathname()\n\n TagManager.initialize({\n gtmId: GOOGLE_TAG_MANAGER_ID,\n ...GTM_ENVIRONMENT,\n dataLayer: {\n // Must emit (custom) event in order to trigger page tracking\n event: GTM_EVENT.PAGEVIEW,\n chainId: _getChainId(),\n pageLocation: `${location.origin}${pagePath}`,\n pagePath,\n // Block JS variables and custom scripts\n // @see https://developers.google.com/tag-platform/tag-manager/web/restrict\n 'gtm.blocklist': ['j', 'jsm', 'customScripts'],\n },\n })\n}\n\nexport const unloadGoogleTagManager = (): void => {\n if (!window.dataLayer) {\n return\n }\n\n const GOOGLE_ANALYTICS_COOKIE_LIST: Cookie[] = [\n { name: '_ga', path: '/' },\n { name: '_gat', path: '/' },\n { name: '_gid', path: '/' },\n ]\n\n removeCookies(GOOGLE_ANALYTICS_COOKIE_LIST)\n}\n\ntype PageViewDataLayer = {\n event: GTM_EVENT\n chainId: string\n pageLocation: string\n pagePath: string\n eventCategory: undefined\n eventAction: undefined\n eventLabel: undefined\n}\n\nexport const usePageTracking = (): void => {\n const didMount = useRef(false)\n const { pathname } = useLocation()\n const chainId = useSelector(currentChainId)\n\n useEffect(() => {\n if (!didMount.current) {\n didMount.current = true\n return\n }\n\n const pagePath = getAnonymizedPathname()\n\n const event: PageViewDataLayer = {\n // Must emit (custom) event in order to trigger page tracking\n event: GTM_EVENT.PAGEVIEW,\n chainId,\n pageLocation: `${location.origin}${pagePath}`,\n pagePath,\n // Clear dataLayer\n eventCategory: undefined,\n eventAction: undefined,\n eventLabel: undefined,\n }\n track(event)\n }, [chainId, pathname])\n}\n\nexport type EventLabel = string | number | boolean | null\nconst tryParse = (value?: EventLabel): EventLabel | undefined => {\n if (typeof value !== 'string') {\n return value\n }\n try {\n return JSON.parse(value)\n } catch {\n return value\n }\n}\n\ntype EventDataLayer = {\n event: GTM_EVENT\n chainId: string\n eventCategory: string\n eventAction: string\n eventLabel?: EventLabel\n}\n\nexport type CustomEvent = {\n event: GTM_EVENT\n category: string\n action: string\n label?: EventLabel\n}\n\nexport const trackEvent = ({ event, category, action, label }: CustomEvent): void => {\n const dataLayer: EventDataLayer = {\n event,\n chainId: _getChainId(),\n eventCategory: category,\n eventAction: action,\n eventLabel: tryParse(label),\n }\n\n track(dataLayer)\n}\n\ntype SafeAppEventDataLayer = {\n event: GTM_EVENT.SAFE_APP\n chainId: string\n safeAppName: string\n safeAppMethod: string\n safeAppEthMethod?: string\n safeAppSDKVersion?: string\n}\n\nexport const getSafeAppName = (safeApp?: SafeApp): string => {\n if (!safeApp?.id) {\n return EMPTY_SAFE_APP\n }\n\n try {\n const parsedSafeApp = JSON.parse(safeApp.id)\n\n return parsedSafeApp.name || parsedSafeApp.url\n } catch (error) {\n return EMPTY_SAFE_APP\n }\n}\n\nexport const trackSafeAppMessage = ({\n app,\n method,\n params,\n sdkVersion,\n}: {\n app?: SafeApp\n method: string\n params?: any\n sdkVersion?: string\n}): void => {\n const dataLayer: SafeAppEventDataLayer = {\n event: GTM_EVENT.SAFE_APP,\n chainId: _getChainId(),\n safeAppName: getSafeAppName(app),\n safeAppMethod: method,\n safeAppEthMethod: params?.call,\n safeAppSDKVersion: sdkVersion,\n }\n\n track(dataLayer)\n}\n\nfunction track(dataLayer: EventDataLayer | SafeAppEventDataLayer | PageViewDataLayer) {\n if (!IS_PRODUCTION) {\n console.info('[GTM]', dataLayer)\n }\n\n TagManager.dataLayer({\n dataLayer,\n })\n}\n","import { createSelector } from 'reselect'\n\nimport { AppReduxState } from 'src/store'\nimport { AppearanceState, APPEARANCE_REDUCER_ID } from '../reducer/appearance'\n\nconst appearanceStateSelector = (state: AppReduxState): AppearanceState => state[APPEARANCE_REDUCER_ID]\n\nexport const copyShortNameSelector = createSelector(\n appearanceStateSelector,\n ({ copyShortName }: AppearanceState): boolean => copyShortName,\n)\n\nexport const showShortNameSelector = createSelector(\n appearanceStateSelector,\n ({ showShortName }: AppearanceState): boolean => showShortName,\n)\n","import { createAction } from 'redux-actions'\n\nexport const ADD_NFT_ASSETS = 'ADD_NFT_ASSETS'\nexport const ADD_NFT_TOKENS = 'ADD_NFT_TOKENS'\nexport const SET_NFT_LOADED = 'SET_NFT_LOADED'\n\nexport const addNftAssets = createAction(ADD_NFT_ASSETS, (nftAssets) => ({\n nftAssets,\n}))\n\nexport const addNftTokens = createAction(ADD_NFT_TOKENS, (nftTokens) => ({\n nftTokens,\n}))\n\nexport const setNftTokensLoaded = createAction(SET_NFT_LOADED)\n","import { Action, handleActions } from 'redux-actions'\nimport { SET_CURRENT_CURRENCY } from 'src/logic/currencyValues/store/actions/setSelectedCurrency'\nimport { SET_AVAILABLE_CURRENCIES } from 'src/logic/currencyValues/store/actions/setAvailableCurrencies'\n\nexport const CURRENCY_REDUCER_ID = 'currencyValues'\n\nexport type CurrencyValuesState = {\n selectedCurrency: string\n availableCurrencies: string[]\n}\n\nconst defaultSelectedCurrency = 'USD'\n\nexport const initialCurrencyState = {\n selectedCurrency: defaultSelectedCurrency,\n availableCurrencies: [defaultSelectedCurrency],\n}\n\nexport type SelectedCurrencyPayload = { selectedCurrency: string }\nexport type AvailableCurrenciesPayload = { availableCurrencies: string[] }\n\nconst currencyValuesReducer = handleActions(\n {\n [SET_CURRENT_CURRENCY]: (state, action: Action) => {\n const { selectedCurrency } = action.payload\n state.selectedCurrency = selectedCurrency\n return state\n },\n [SET_AVAILABLE_CURRENCIES]: (state, action: Action) => {\n const { availableCurrencies } = action.payload\n state.availableCurrencies = availableCurrencies\n return state\n },\n },\n initialCurrencyState,\n)\n\nexport default currencyValuesReducer\n","import { createBrowserHistory } from 'history'\nimport { generatePath, matchPath } from 'react-router-dom'\n\nimport { getChains } from 'src/config/cache/chains'\nimport { ChainId, ShortName } from 'src/config/chain.d'\nimport { checksumAddress } from 'src/utils/checksumAddress'\nimport { DEMO_SAFE_MAINNET, PUBLIC_URL } from 'src/utils/constants'\nimport { parsePrefixedAddress } from 'src/utils/prefixedAddress'\n\nexport const history = createBrowserHistory({\n basename: PUBLIC_URL,\n})\n\n// Safe specific routes\nconst hashRegExp = '0x[0-9A-Fa-f]'\n\nconst chainSpecificSafeAddressPathRegExp = `[a-z0-9-]{2,}:${hashRegExp}{40}`\n\nexport const SAFE_ADDRESS_SLUG = 'prefixedSafeAddress'\nexport const ADDRESSED_ROUTE = `/:${SAFE_ADDRESS_SLUG}(${chainSpecificSafeAddressPathRegExp})`\n\n// Safe section routes, i.e. /:prefixedSafeAddress/settings\nconst SAFE_SECTION_SLUG = 'safeSection'\nexport const SAFE_SECTION_ROUTE = `${ADDRESSED_ROUTE}/:${SAFE_SECTION_SLUG}`\n\n// Safe subsection routes, i.e. /:prefixedSafeAddress/settings/advanced\nexport const SAFE_SUBSECTION_SLUG = 'safeSubsection'\nexport const SAFE_SUBSECTION_ROUTE = `${SAFE_SECTION_ROUTE}/:${SAFE_SUBSECTION_SLUG}`\n\nexport const TRANSACTION_ID_SLUG = 'txId'\n\n// URL: gnosis-safe.io/app/:[SAFE_ADDRESS_SLUG]/:[SAFE_SECTION_SLUG]/:[SAFE_SUBSECTION_SLUG]\nexport type SafeRouteSlugs = {\n [SAFE_ADDRESS_SLUG]?: string\n [SAFE_SECTION_SLUG]?: string\n [SAFE_SUBSECTION_SLUG]?: string\n [TRANSACTION_ID_SLUG]?: string\n}\n\nexport const LOAD_SPECIFIC_SAFE_ROUTE = `/load/:${SAFE_ADDRESS_SLUG}?` // ? = optional slug\n\n// Routes independent of safe/network\nexport const ROOT_ROUTE = '/'\n// export const WELCOME_ROUTE = '/welcome'\nexport const STARTER_ROUTE = '/starter'\n// export const OPEN_SAFE_ROUTE = '/open'\nexport const GENERIC_APPS_ROUTE = '/apps'\n// export const LOAD_SAFE_ROUTE = generatePath(LOAD_SPECIFIC_SAFE_ROUTE) // By providing no slug, we get '/load'\nexport const SAFE_APP_LANDING_PAGE_ROUTE = '/share/safe-app'\n\n// [SAFE_SECTION_SLUG], [SAFE_SUBSECTION_SLUG] populated safe routes\nexport const SAFE_ROUTES = {\n DASHBOARD: `${ADDRESSED_ROUTE}/home`,\n ASSETS_BALANCES: `${ADDRESSED_ROUTE}/balances`, // [SAFE_SECTION_SLUG] === 'balances'\n ASSETS_BALANCES_COLLECTIBLES: `${ADDRESSED_ROUTE}/balances/nfts`, // [SAFE_SUBSECTION_SLUG] === 'nfts'\n LEGACY_COLLECTIBLES: `${ADDRESSED_ROUTE}/balances/collectibles`,\n TRANSACTIONS: `${ADDRESSED_ROUTE}/transactions`,\n TRANSACTIONS_HISTORY: `${ADDRESSED_ROUTE}/transactions/history`,\n TRANSACTIONS_QUEUE: `${ADDRESSED_ROUTE}/transactions/queue`,\n TRANSACTIONS_SINGULAR: `${ADDRESSED_ROUTE}/transactions/:${TRANSACTION_ID_SLUG}`,\n ADDRESS_BOOK: `${ADDRESSED_ROUTE}/contacts`,\n APPS: `${ADDRESSED_ROUTE}/apps`,\n SETTINGS: `${ADDRESSED_ROUTE}/profile`,\n // SETTINGS_APPEARANCE: `${ADDRESSED_ROUTE}/profile/appearance`,\n SETTINGS_DETAILS: `${ADDRESSED_ROUTE}/profile/info`,\n SETTINGS_OWNERS: `${ADDRESSED_ROUTE}/profile/owners`,\n SETTINGS_POLICIES: `${ADDRESSED_ROUTE}/profile/policies`,\n // SETTINGS_SPENDING_LIMIT: `${ADDRESSED_ROUTE}/profile/spending-limit`,\n SETTINGS_ADVANCED: `${ADDRESSED_ROUTE}/profile/advanced`,\n BIZ: `${ADDRESSED_ROUTE}/biz`,\n BIZ_LIST: `${ADDRESSED_ROUTE}/biz/list`,\n BIZ_Create: `${ADDRESSED_ROUTE}/biz/create`,\n}\n\nexport const getNetworkRootRoutes = (): Array<{ chainId: ChainId; route: string; shortName: string }> =>\n getChains().map(({ chainId, chainName, shortName }) => ({\n chainId,\n route: `/${chainName.replace(/\\s+/g, '-').toLowerCase()}`,\n shortName,\n }))\n\nexport type SafeRouteParams = { shortName: ShortName; safeAddress: string }\n\nexport const isValidShortChainName = (shortName: ShortName): boolean => {\n return getChains().some((chain) => chain.shortName === shortName)\n}\n\n// Due to hoisting issues, these functions should remain here\nexport const extractPrefixedSafeAddress = (\n path = history.location.pathname,\n route = ADDRESSED_ROUTE,\n): SafeRouteParams => {\n const match = matchPath(path, {\n path: route,\n })\n\n const prefixedSafeAddress = match?.params?.[SAFE_ADDRESS_SLUG]\n const { prefix, address } = parsePrefixedAddress(prefixedSafeAddress || '')\n\n return {\n shortName: prefix,\n safeAddress: checksumAddress(address),\n }\n}\n\nexport const getPrefixedSafeAddressSlug = ({\n safeAddress,\n shortName,\n}: {\n safeAddress: string\n shortName: string\n}): string => `${shortName}:${safeAddress}`\n\n// Populate `/:[SAFE_ADDRESS_SLUG]` with current 'shortName:safeAddress'\nexport const generateSafeRoute = (\n path: typeof SAFE_ROUTES[keyof typeof SAFE_ROUTES],\n params: SafeRouteParams,\n): string =>\n generatePath(path, {\n [SAFE_ADDRESS_SLUG]: getPrefixedSafeAddressSlug(params),\n })\n\n// Singular tx route is excluded as it has a required safeTxHash slug\n// This is to give stricter routing, instead of making the slug optional\nconst { TRANSACTIONS_SINGULAR: _hasRequiredSlug, ...STANDARD_SAFE_ROUTES } = SAFE_ROUTES\nexport const generatePrefixedAddressRoutes = (params: SafeRouteParams): typeof STANDARD_SAFE_ROUTES => {\n return Object.entries(STANDARD_SAFE_ROUTES).reduce(\n (routes, [key, route]) => ({ ...routes, [key]: generateSafeRoute(route, params) }),\n {} as typeof STANDARD_SAFE_ROUTES,\n )\n}\n\nexport const getSafeAppUrl = (appUrl: string, routesSlug: SafeRouteParams): string => {\n return generateSafeRoute(SAFE_ROUTES.APPS, routesSlug) + `?appUrl=${appUrl}`\n}\n\nexport const demoSafeRoute = generateSafeRoute(SAFE_ROUTES.APPS, {\n shortName: 'eth',\n safeAddress: DEMO_SAFE_MAINNET,\n})\n\nexport const getShareSafeAppUrl = (appUrl: string, chainId: string): string => {\n const baseUrl = `${window.location.origin}${PUBLIC_URL}`\n\n return `${baseUrl}${SAFE_APP_LANDING_PAGE_ROUTE}?appUrl=${encodeURI(appUrl)}&chainId=${chainId}`\n}\n","import { FORM_ERROR, Mutator, SubmissionErrors } from 'final-form'\nimport createDecorator from 'final-form-calculate'\nimport { ContractSendMethod } from 'web3-eth-contract'\n\nimport { AbiItemExtended } from 'src/logic/contractInteraction/sources/ABIService'\nimport { getAddressFromDomain, getWeb3 } from 'src/logic/wallets/getWeb3'\nimport { TransactionReviewType } from 'src/routes/safe/components/Balances/SendModal/screens/ContractInteraction/Review'\nimport { isValidCryptoDomainName, isValidEnsName } from 'src/logic/wallets/ethAddresses'\nimport { BigNumber } from 'bignumber.js'\n\nexport const NO_CONTRACT = 'no contract'\n\nexport const ensResolver = createDecorator({\n field: 'contractAddress',\n updates: {\n contractAddress: async (contractAddress) => {\n try {\n const resolvedAddress =\n (isValidEnsName(contractAddress) || isValidCryptoDomainName(contractAddress)) &&\n (await getAddressFromDomain(contractAddress))\n\n if (resolvedAddress) {\n return resolvedAddress\n }\n\n return contractAddress\n } catch (e) {\n console.error(e.message)\n return contractAddress\n }\n },\n },\n})\n\nexport const formMutators: Record> = {\n setMax: (args, state, utils) => {\n utils.changeValue(state, 'value', () => args[0])\n },\n setContractAddress: (args, state, utils) => {\n utils.changeValue(state, 'contractAddress', () => args[0])\n },\n setSelectedMethod: (args, state, utils) => {\n const modified =\n state.lastFormState?.values.selectedMethod && state.lastFormState.values.selectedMethod.name !== args[0].name\n\n if (modified) {\n utils.changeValue(state, 'callResults', () => '')\n utils.changeValue(state, 'value', () => '')\n }\n\n utils.changeValue(state, 'selectedMethod', () => args[0])\n },\n setCallResults: (args, state, utils) => {\n utils.changeValue(state, 'callResults', () => args[0])\n },\n setAbiValue: (args, state, utils) => {\n utils.changeValue(state, 'abi', () => args[0])\n },\n}\n\nexport const isAddress = (type: string): boolean => type.indexOf('address') === 0\nexport const isBoolean = (type: string): boolean => type.indexOf('bool') === 0\nexport const isString = (type: string): boolean => type.indexOf('string') === 0\nexport const isUint = (type: string): boolean => type.indexOf('uint') === 0\nexport const isInt = (type: string): boolean => type.indexOf('int') === 0\nexport const isByte = (type: string): boolean => type.indexOf('byte') === 0\n\nexport const isArrayParameter = (parameter: string): boolean => /(\\[\\d*])+$/.test(parameter)\nexport const getParsedJSONOrArrayFromString = (parameter: string): (string | number)[] | null => {\n try {\n const arrayResult = JSON.parse(parameter)\n return arrayResult.map((value) => {\n if (Number.isInteger(value)) {\n return new BigNumber(value).toString()\n }\n return value\n })\n } catch (err) {\n return null\n }\n}\n\nexport const handleSubmitError = (error: SubmissionErrors, values: Record): Record => {\n for (const key in values) {\n if (values.hasOwnProperty(key) && error !== undefined && values[key] === error.value) {\n return { [key]: error.reason }\n }\n }\n\n // .call() failed and we're logging a generic error\n return { [FORM_ERROR]: error ? error.message : undefined }\n}\n\nexport const generateFormFieldKey = (type: string, signatureHash: string, index: number): string => {\n const keyType = isArrayParameter(type) ? 'arrayParam' : type\n return `methodInput-${signatureHash}_${index}_${keyType}`\n}\n\nconst extractMethodArgs =\n (signatureHash: string, values: Record) =>\n ({ type }, index) => {\n const key = generateFormFieldKey(type, signatureHash, index)\n\n return getParsedJSONOrArrayFromString(values[key]) || values[key]\n }\n\nexport const createTxObject = (\n method: AbiItemExtended,\n contractAddress: string,\n values: Record,\n): ContractSendMethod => {\n const web3 = getWeb3()\n const contract = new web3.eth.Contract([method], contractAddress)\n const { inputs, name = '', signatureHash } = method\n const args = inputs?.map(extractMethodArgs(signatureHash, values)) || []\n\n return contract.methods[name](...args)\n}\n\nexport const isReadMethod = (method: AbiItemExtended): boolean => method && method.action === 'read'\n\nexport const getValueFromTxInputs = (key: string, type: string, tx: TransactionReviewType): string => {\n if (isArrayParameter(type)) {\n key = key.replace('[]', '')\n }\n\n let value = tx[key]\n\n if (type === 'bool') {\n value = String(value)\n }\n\n return value\n}\n","import { getSafeInfo as fetchSafeInfo, SafeInfo } from '@gnosis.pm/safe-react-gateway-sdk'\n\nimport { Errors, CodedException } from 'src/logic/exceptions/CodedException'\nimport { _getChainId } from 'src/config'\n\nconst GATEWAY_ERROR = /1337|42/\n\nexport const getSafeInfo = async (safeAddress: string): Promise => {\n try {\n return await fetchSafeInfo(_getChainId(), safeAddress)\n } catch (e) {\n const safeNotFound = GATEWAY_ERROR.test(e.message)\n throw new CodedException(safeNotFound ? Errors._605 : Errors._613, e.message)\n }\n}\n","import { mustBeEthereumContractAddress } from 'src/components/forms/validator'\nimport { AddressBookEntry, AddressBookState } from 'src/logic/addressBook/model/addressBook'\nimport { sameAddress } from 'src/logic/wallets/ethAddresses'\nimport { AppReduxState } from 'src/store'\nimport { Overwrite } from 'src/types/helpers'\n\nexport type OldAddressBookEntry = {\n address: string\n name: string\n isOwner: boolean\n}\n\nexport type OldAddressBookType = {\n [safeAddress: string]: [OldAddressBookEntry]\n}\n\nexport const ADDRESS_BOOK_INVALID_NAMES = ['UNKNOWN', 'OWNER #', 'MY WALLET']\n\nexport const isValidAddressBookName = (addressBookName: string): boolean => {\n const hasInvalidName = ADDRESS_BOOK_INVALID_NAMES.find((invalidName) =>\n addressBookName?.toUpperCase().includes(invalidName),\n )\n return !hasInvalidName || addressBookName === ''\n}\n\n/**\n * Returns a filtered list of AddressBookEntries whose addresses are contracts\n * @param {Array} addressBook\n * @returns Array\n */\nexport const filterContractAddressBookEntries = async (addressBook: AddressBookState): Promise => {\n const abFlags = await Promise.all(\n addressBook.map(async ({ address }: AddressBookEntry): Promise => {\n return (await mustBeEthereumContractAddress(address)) === undefined\n }),\n )\n\n return addressBook.filter((_, index) => abFlags[index])\n}\n\n/**\n * Filters the AddressBookEntries by `address` or `name` based on the `inputValue`\n * @param {Array} addressBookEntries\n * @param {Object} filterParams\n * @param {String} filterParams.inputValue\n * @return Array\n */\nexport const filterAddressEntries = (\n addressBookEntries: AddressBookEntry[],\n { inputValue }: { inputValue: string },\n): AddressBookEntry[] =>\n addressBookEntries.filter(({ address, name }) => {\n const inputLowerCase = (inputValue || '').toLowerCase()\n const foundName = (name || '').toLowerCase().includes(inputLowerCase)\n const foundAddress = (address || '').toLowerCase().includes(inputLowerCase)\n\n return foundName || foundAddress\n })\n\nexport const getEntryIndex = (\n state: AppReduxState['addressBook'],\n addressBookEntry: Overwrite,\n): number =>\n state.findIndex(\n ({ address, chainId }) =>\n chainId.toString() === addressBookEntry.chainId.toString() && sameAddress(address, addressBookEntry.address),\n )\n\nexport const hasSameAddressAndChainId = (arrVal: AddressBookEntry, othVal: AddressBookEntry): boolean =>\n arrVal.address === othVal.address && arrVal.chainId === othVal.chainId\n","import { Text } from '@gnosis.pm/safe-react-components'\nimport { createStyles, makeStyles } from '@material-ui/core/styles'\nimport { ReactElement, useState } from 'react'\n\nimport Paragraph from 'src/components/layout/Paragraph'\nimport LinkWithRef from 'src/components/layout/Link'\nimport { textShortener } from 'src/utils/strings'\n\nexport const styles = createStyles({\n txDataParagraph: {\n whiteSpace: 'normal',\n },\n linkTxData: {\n textDecoration: 'underline',\n cursor: 'pointer',\n },\n})\n\nconst useStyles = makeStyles(styles)\n\nexport const HexEncodedData = ({\n hexData,\n title,\n limit = 20,\n}: {\n hexData: string\n title?: string\n limit?: number\n}): ReactElement => {\n const classes = useStyles()\n const [showTxData, setShowTxData] = useState(false)\n const showExpandBtn = hexData.length > limit\n const shortener = textShortener({ charsStart: 25, charsEnd: 0 })\n\n return (\n
\n {title && (\n \n {title}:\n \n )}\n \n {showExpandBtn ? (\n <>\n {showTxData ? (\n <>\n {hexData}{' '}\n setShowTxData(false)}\n rel=\"noopener noreferrer\"\n target=\"_blank\"\n >\n Show Less\n \n \n ) : (\n <>\n {shortener(hexData)}{' '}\n setShowTxData(true)}\n rel=\"noopener noreferrer\"\n target=\"_blank\"\n >\n Show More\n \n \n )}\n \n ) : (\n hexData\n )}\n \n
\n )\n}\n","import {\n ConflictHeader,\n Custom,\n DateLabel,\n Label,\n ModuleExecutionDetails,\n MultisigExecutionDetails,\n MultisigExecutionInfo,\n TransactionSummary,\n Transfer,\n TransactionDetails as GWTransactionDetails,\n Transaction as GWTransaction,\n TransactionListItem,\n TransactionListPage,\n TransactionStatus,\n TransactionInfo,\n SettingsChange,\n} from '@gnosis.pm/safe-react-gateway-sdk'\n\n/**\n * We can't use the enum values from the SDK directly when comparing to strings\n * Not sure if a bug or a feature 🤷\n */\nexport const LocalTransactionStatus: Record = {\n AWAITING_CONFIRMATIONS: 'AWAITING_CONFIRMATIONS',\n AWAITING_EXECUTION: 'AWAITING_EXECUTION',\n CANCELLED: 'CANCELLED',\n FAILED: 'FAILED',\n SUCCESS: 'SUCCESS',\n PENDING: 'PENDING',\n WILL_BE_REPLACED: 'WILL_BE_REPLACED',\n}\n\nexport type Transaction = TransactionSummary & {\n txDetails?: ExpandedTxDetails\n}\n\nexport type ExpandedTxDetails = GWTransactionDetails\n\ntype StoreStructure = {\n queued: {\n next: { [nonce: number]: Transaction[] } // 1 Transaction element\n queued: { [nonce: number]: Transaction[] } // n Transaction elements\n }\n history: { [timestamp: number]: Transaction[] } // n Transaction elements\n}\n\ntype TxQueuedLocation = 'queued.next' | 'queued.queued'\n\ntype TxHistoryLocation = 'history'\n\nexport type TxLocation = TxHistoryLocation | TxQueuedLocation\n\ntype HistoryGatewayResult = TransactionListItem\n\ntype HistoryGatewayResponse = TransactionListPage\n\ntype QueuedGatewayResult = TransactionListItem\n\ntype QueuedGatewayResponse = TransactionListPage\n\nexport type TransactionDetails = {\n count: number\n transactions: Array<[nonce: string, transactions: Transaction[]]>\n}\n\n/**\n * Helper functions\n */\n\nexport const isDateLabel = (value: HistoryGatewayResult): value is DateLabel => {\n return value.type === 'DATE_LABEL'\n}\n\nexport const isLabel = (value: QueuedGatewayResult): value is Label => {\n return value.type === 'LABEL'\n}\n\nexport const isConflictHeader = (value: QueuedGatewayResult): value is ConflictHeader => {\n return value.type === 'CONFLICT_HEADER'\n}\n\nexport const isTransactionSummary = (value: HistoryGatewayResult | QueuedGatewayResult): value is GWTransaction => {\n return value.type === 'TRANSACTION'\n}\n\nexport const isTransferTxInfo = (value: TransactionInfo): value is Transfer => {\n return value.type === 'Transfer'\n}\n\nexport const isSettingsChangeTxInfo = (value: TransactionInfo): value is SettingsChange => {\n return value.type === 'SettingsChange'\n}\n\nexport const isCustomTxInfo = (value: TransactionInfo): value is Custom => {\n return value.type === 'Custom'\n}\n\nexport const isCreationTxInfo = (value: TransactionInfo): value is Creation => {\n return value.type === 'Creation'\n}\n\nexport const isMultiSigExecutionDetails = (\n value: ExpandedTxDetails['detailedExecutionInfo'],\n): value is MultisigExecutionDetails => {\n return value?.type === 'MULTISIG'\n}\n\nexport const isModuleExecutionInfo = (\n value: ExpandedTxDetails['detailedExecutionInfo'],\n): value is ModuleExecutionDetails => {\n return value?.type === 'MODULE'\n}\n\nexport const isMultisigExecutionInfo = (value: TransactionSummary['executionInfo']): value is MultisigExecutionInfo => {\n return value?.type === 'MULTISIG'\n}\n\nexport const isTxQueued = (value: LocalTransactionStatus): boolean => {\n return [\n LocalTransactionStatus.PENDING,\n LocalTransactionStatus.AWAITING_CONFIRMATIONS,\n LocalTransactionStatus.AWAITING_EXECUTION,\n LocalTransactionStatus.WILL_BE_REPLACED,\n ].includes(value)\n}\n","import { generatePath } from 'react-router-dom'\nimport { SafeInfo, TransactionDetails } from '@gnosis.pm/safe-react-gateway-sdk'\n\nimport { GnosisSafe } from 'src/types/contracts/gnosis_safe.d'\nimport { LATEST_SAFE_VERSION } from 'src/utils/constants'\nimport { SafeRecordProps } from 'src/logic/safe/store/models/safe'\nimport { getSpendingLimits } from 'src/logic/safe/utils/spendingLimits'\nimport { buildModulesLinkedList } from 'src/logic/safe/utils/modules'\nimport { enabledFeatures, safeNeedsUpdate } from 'src/logic/safe/utils/safeVersion'\nimport { checksumAddress } from 'src/utils/checksumAddress'\nimport { ChainId } from 'src/config/chain.d'\n\nimport {\n Transaction,\n isMultisigExecutionInfo,\n LocalTransactionStatus,\n isMultiSigExecutionDetails,\n} from 'src/logic/safe/store/models/types/gateway.d'\nimport { getGnosisSafeInstanceAt } from 'src/logic/contracts/safeContracts'\nimport { logError, Errors } from 'src/logic/exceptions/CodedException'\nimport { getRecommendedNonce } from '../../api/fetchSafeTxGasEstimation'\nimport {\n extractPrefixedSafeAddress,\n getPrefixedSafeAddressSlug,\n history,\n SAFE_ADDRESS_SLUG,\n SAFE_ROUTES,\n TRANSACTION_ID_SLUG,\n} from 'src/routes/routes'\n\nexport const canExecuteCreatedTx = async (\n safeInstance: GnosisSafe,\n nonce: string,\n lastTx: Transaction | null,\n): Promise => {\n const safeNonce = (await safeInstance.methods.nonce().call()).toString()\n const thresholdAsString = await safeInstance.methods.getThreshold().call()\n const threshold = Number(thresholdAsString)\n\n // Needs to collect owners signatures\n if (threshold > 1) {\n return false\n }\n\n // Allow first tx.\n if (Number(nonce) === 0) {\n return true\n }\n\n // Allow if nonce === safeNonce and threshold === 1\n if (nonce === safeNonce) {\n return true\n }\n\n // If the previous tx is not executed or the difference between lastTx.nonce and nonce is > 1\n // it's delayed using the approval mechanism.\n // Once the previous tx is executed, the current tx will be available to be executed\n // by the user using the exec button.\n if (lastTx && isMultisigExecutionInfo(lastTx.executionInfo)) {\n return lastTx.txStatus === LocalTransactionStatus.SUCCESS && lastTx.executionInfo.nonce + 1 === Number(nonce)\n }\n\n return false\n}\n\n/**\n * Recovers Safe's remote information along with its modules and spendingLimits if there's any\n * @param {SafeInfo} remoteSafeInfo\n * @returns Promise>\n */\nexport const extractRemoteSafeInfo = async (remoteSafeInfo: SafeInfo): Promise> => {\n const safeInfo: Partial = {\n modules: undefined,\n spendingLimits: undefined,\n }\n const safeInfoModules = (remoteSafeInfo.modules || []).map(({ value }) => value)\n\n if (safeInfoModules.length) {\n safeInfo.modules = buildModulesLinkedList(safeInfoModules)\n try {\n safeInfo.spendingLimits = await getSpendingLimits(\n safeInfoModules,\n remoteSafeInfo.address.value,\n remoteSafeInfo.chainId,\n )\n } catch (e) {\n e.log()\n safeInfo.spendingLimits = null\n }\n }\n\n safeInfo.nonce = remoteSafeInfo.nonce\n safeInfo.threshold = remoteSafeInfo.threshold\n safeInfo.currentVersion = remoteSafeInfo.version\n safeInfo.needsUpdate = safeNeedsUpdate(safeInfo.currentVersion, LATEST_SAFE_VERSION)\n safeInfo.featuresEnabled = enabledFeatures(safeInfo.currentVersion)\n safeInfo.guard = remoteSafeInfo.guard ? remoteSafeInfo.guard.value : undefined\n safeInfo.collectiblesTag = remoteSafeInfo.collectiblesTag\n safeInfo.txQueuedTag = remoteSafeInfo.txQueuedTag\n safeInfo.txHistoryTag = remoteSafeInfo.txHistoryTag\n safeInfo.chainId = remoteSafeInfo.chainId as ChainId\n safeInfo.implementation = remoteSafeInfo.implementation\n\n return safeInfo\n}\n\n/**\n * Merges remote owner's information with the locally stored data.\n * If there's no remote data, it will go with the locally stored information.\n * @param {SafeInfo['owners'] | undefined} remoteSafeOwners\n * @param {SafeRecordProps['owners'] | undefined} localSafeOwners\n * @returns SafeRecordProps['owners'] | undefined\n */\nexport const buildSafeOwners = (\n remoteSafeOwners?: SafeInfo['owners'],\n localSafeOwners?: SafeRecordProps['owners'],\n): SafeRecordProps['owners'] | undefined => {\n if (remoteSafeOwners) {\n // ToDo: review if checksums addresses is necessary,\n // as they must be provided already in the checksum form from the services\n return remoteSafeOwners.map(({ value }) => checksumAddress(value))\n }\n\n // nothing to do without remote owners, so we return the stored list\n return localSafeOwners\n}\n\nexport const getNonce = async (safeAddress: string, safeVersion: string): Promise => {\n let nextNonce: string\n try {\n nextNonce = (await getRecommendedNonce(safeAddress)).toString()\n } catch (e) {\n logError(Errors._616, e.message)\n const safeInstance = getGnosisSafeInstanceAt(safeAddress, safeVersion)\n nextNonce = await safeInstance.methods.nonce().call()\n }\n return nextNonce\n}\n\nexport const navigateToTx = (safeAddress: string, txDetails: TransactionDetails): void => {\n if (!isMultiSigExecutionDetails(txDetails.detailedExecutionInfo)) {\n return\n }\n const { shortName } = extractPrefixedSafeAddress()\n const prefixedSafeAddress = getPrefixedSafeAddressSlug({ shortName, safeAddress })\n const txRoute = generatePath(SAFE_ROUTES.TRANSACTIONS_SINGULAR, {\n [SAFE_ADDRESS_SLUG]: prefixedSafeAddress,\n [TRANSACTION_ID_SLUG]: txDetails.txId,\n })\n\n history.push(txRoute)\n}\n","import { lg, md, secondaryText } from 'src/theme/variables'\nimport { createStyles } from '@material-ui/core'\n\nexport const styles = createStyles({\n heading: {\n padding: `${md} ${lg} 12px`,\n justifyContent: 'flex-start',\n boxSizing: 'border-box',\n maxHeight: '74px',\n flexWrap: 'nowrap',\n },\n annotation: {\n color: secondaryText,\n marginRight: 'auto',\n marginLeft: '8px',\n whiteSpace: 'nowrap',\n flex: 1,\n },\n headingText: {\n whiteSpace: 'nowrap',\n },\n closeIcon: {\n height: '24px',\n width: '24px',\n },\n icon: {\n width: '20px',\n marginRight: '10px',\n },\n})\n","import { ReactElement, ReactNode } from 'react'\nimport IconButton from '@material-ui/core/IconButton'\nimport { makeStyles } from '@material-ui/core/styles'\nimport Close from '@material-ui/icons/Close'\nimport { Theme } from '@gnosis.pm/safe-react-gateway-sdk'\n\nimport ChainIndicator from 'src/components/ChainIndicator'\nimport Paragraph from 'src/components/layout/Paragraph'\nimport Row from 'src/components/layout/Row'\nimport { getChainById, getChainInfo } from 'src/config'\nimport { styles } from './style'\nimport styled from 'styled-components'\nimport { smallFontSize, xs, sm, border, primary } from 'src/theme/variables'\n\nconst useStyles = makeStyles(styles)\n\nconst ChainIndicatorWrapper = styled(Row)<{ $chainTheme: Theme }>`\n font-size: ${smallFontSize};\n padding: ${xs} ${sm};\n background-color: ${({ $chainTheme }) => $chainTheme.backgroundColor ?? border};\n color: ${({ $chainTheme }) => $chainTheme.textColor ?? primary};\n border-radius: 4px;\n align-items: center;\n white-space: nowrap;\n overflow: hidden;\n margin-right: 20px;\n`\n\ninterface HeaderProps {\n onClose: () => unknown\n subTitle?: string\n title: ReactNode\n iconUrl?: string\n}\n\nexport const ModalHeader = ({ onClose, subTitle, title, iconUrl }: HeaderProps): ReactElement => {\n const classes = useStyles()\n const connectedNetwork = getChainInfo()\n const { theme } = getChainById(connectedNetwork.chainId)\n\n return (\n \n {iconUrl && {typeof}\n \n {title}\n \n \n {subTitle}\n \n \n {connectedNetwork.chainId && }\n \n \n \n \n \n )\n}\n","import { createAction } from 'redux-actions'\n\nimport { SafeRecordProps } from 'src/logic/safe/store/models/safe'\n\nexport const ADD_OR_UPDATE_SAFE = 'ADD_OR_UPDATE_SAFE'\n\nexport const addOrUpdateSafe = createAction(ADD_OR_UPDATE_SAFE)\n","import { createAction } from 'redux-actions'\n\nimport { SafeRecordProps } from 'src/logic/safe/store/models/safe'\n\nexport const UPDATE_SAFE = 'UPDATE_SAFE'\n\nexport const updateSafe = createAction>(UPDATE_SAFE)\n","import { createAction } from 'redux-actions'\n\nimport { Dispatch } from 'src/logic/safe/store/actions/types'\nimport { Transaction } from 'src/logic/safe/store/models/types/gateway.d'\nimport { TransactionDetailsPayload } from 'src/logic/safe/store/reducer/gatewayTransactions'\nimport { getTransactionByAttribute } from 'src/logic/safe/store/selectors/gatewayTransactions'\nimport { AppReduxState } from 'src/store'\nimport { fetchSafeTransaction } from 'src/logic/safe/transactions/api/fetchSafeTransaction'\nimport { currentChainId } from 'src/logic/config/store/selectors'\nimport { currentSafeAddress } from 'src/logic/currentSession/store/selectors'\n\nexport const UPDATE_TRANSACTION_DETAILS = 'UPDATE_TRANSACTION_DETAILS'\nconst updateTransactionDetails = createAction(UPDATE_TRANSACTION_DETAILS)\n\nexport const fetchTransactionDetails =\n ({ transactionId }: { transactionId: Transaction['id'] }) =>\n async (dispatch: Dispatch, getState: () => AppReduxState): Promise => {\n const state = getState()\n\n const transaction = getTransactionByAttribute(state, {\n attributeValue: transactionId,\n attributeName: 'id',\n })\n\n const safeAddress = currentSafeAddress(state)\n const chainId = currentChainId(state)\n\n // @TODO: Believed to be based on legacy selector, might be able to remove now\n if (!safeAddress) {\n return\n }\n\n if (transaction?.txDetails) {\n return transaction.txDetails\n }\n\n try {\n const transactionDetails = await fetchSafeTransaction(transactionId)\n\n dispatch(updateTransactionDetails({ chainId, transactionId, safeAddress, value: transactionDetails }))\n return transactionDetails\n } catch (error) {\n console.error(`Failed to retrieve transaction ${transactionId} details`, error.message)\n }\n }\n","const isKeystoneError = (err: unknown): boolean => {\n if (err instanceof Error) {\n return err.message?.startsWith('#ktek_error')\n }\n return false\n}\n\nconst isWCRejection = (err: Error): boolean => {\n return /User rejected/.test(err?.message)\n}\n\nconst isMMRejection = (err: Error & { code?: number }): boolean => {\n const METAMASK_REJECT_CONFIRM_TX_ERROR_CODE = 4001\n\n return err.code === METAMASK_REJECT_CONFIRM_TX_ERROR_CODE\n}\n\nexport const isWalletRejection = (err: Error & { code?: number }): boolean => {\n return isMMRejection(err) || isWCRejection(err) || isKeystoneError(err)\n}\n","import * as Sentry from '@sentry/react'\nimport { CaptureContext } from '@sentry/types'\nimport ErrorCodes from './registry'\nimport { IS_PRODUCTION } from 'src/utils/constants'\n\nexport class CodedException extends Error {\n public readonly code: number\n public readonly content: string\n // the context allows to enrich events, for the list of allowed context keys/data, please check the type or go to\n // https://docs.sentry.io/platforms/javascript/enriching-events/context/\n // The context is not searchable, that means its goal is just to provide additional data for the error\n public readonly context?: CaptureContext\n\n private getCode(content: ErrorCodes): number {\n const codePrefix = content.split(':')[0]\n const code = Number(codePrefix)\n if (isNaN(code)) {\n throw new CodedException(ErrorCodes.___0, codePrefix)\n }\n return code\n }\n\n constructor(content: ErrorCodes, extraMessage?: string, context?: CaptureContext) {\n super()\n\n const extraInfo = extraMessage ? ` (${extraMessage})` : ''\n this.message = `Code ${content}${extraInfo}`\n this.code = this.getCode(content)\n this.content = content\n this.context = context\n }\n\n public log(): void {\n // Filter out the logError fn from the stack trace\n if (this.stack) {\n const newStack = this.stack\n .split('\\n')\n .filter((line) => !line.includes(logError.name))\n .join('\\n')\n try {\n this.stack = newStack\n } catch (e) {}\n }\n\n // Log only the message on prod, and the full error on dev\n console.error(IS_PRODUCTION ? this.message : this)\n }\n\n public track(): void {\n this.log()\n\n if (IS_PRODUCTION) {\n Sentry.captureException(this, this.context)\n }\n }\n}\n\ntype ErrorHandler = (content: ErrorCodes, extraMessage?: string, context?: CaptureContext) => CodedException\n\nexport const logError: ErrorHandler = function logError(...args) {\n const error = new CodedException(...args)\n error.log()\n return error\n}\n\nexport const trackError: ErrorHandler = function trackError(...args) {\n const error = new CodedException(...args)\n error.track()\n return error\n}\n\nexport const Errors = ErrorCodes\n","import {\n postSafeGasEstimation,\n SafeTransactionEstimationRequest,\n SafeTransactionEstimation,\n Operation,\n} from '@gnosis.pm/safe-react-gateway-sdk'\n\nimport { _getChainId } from 'src/config'\nimport { checksumAddress } from 'src/utils/checksumAddress'\n\ntype FetchSafeTxGasEstimationProps = {\n safeAddress: string\n} & SafeTransactionEstimationRequest\n\nexport const fetchSafeTxGasEstimation = async ({\n safeAddress,\n ...body\n}: FetchSafeTxGasEstimationProps): Promise => {\n return postSafeGasEstimation(_getChainId(), checksumAddress(safeAddress), body)\n}\n\nexport const getRecommendedNonce = async (safeAddress: string): Promise => {\n const { recommendedNonce } = await fetchSafeTxGasEstimation({\n safeAddress,\n value: '0',\n operation: Operation.CALL,\n // Workaround: use a cancellation transaction to fetch only the recommendedNonce\n to: safeAddress,\n data: '0x',\n })\n return recommendedNonce\n}\n","export default __webpack_public_path__ + \"static/media/key.566b7e77.svg\";","export default __webpack_public_path__ + \"static/media/triangle.c539e7f8.svg\";","import { createStyles, makeStyles } from '@material-ui/core/styles'\nimport Dot from '@material-ui/icons/FiberManualRecord'\nimport { ReactElement } from 'react'\n\nimport Block from 'src/components/layout/Block'\nimport Img from 'src/components/layout/Img'\nimport { border, fancy, screenSm, warning } from 'src/theme/variables'\n\nimport KeyIcon from './assets/key.svg'\nimport TriangleIcon from './assets/triangle.svg'\n\nconst styles = createStyles({\n root: {\n display: 'none',\n [`@media (min-width: ${screenSm}px)`]: {\n display: 'flex',\n },\n },\n dot: {\n position: 'relative',\n backgroundColor: '#ffffff',\n color: fancy,\n },\n key: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: border,\n },\n warning: {\n position: 'relative',\n top: '-2px',\n },\n})\n\nconst useStyles = makeStyles(styles)\n\nconst buildKeyStyleFrom = (size, center, dotSize) => ({\n width: `${size}px`,\n height: `${size}px`,\n marginLeft: center ? `${dotSize}px` : 'none',\n borderRadius: `${size}px`,\n})\n\nconst buildDotStyleFrom = (size, top, right, mode) => ({\n width: `${size}px`,\n height: `${size}px`,\n borderRadius: `${size}px`,\n top: `${top}px`,\n right: `${right}px`,\n color: mode === 'error' ? fancy : warning,\n})\n\ntype Props = {\n center?: boolean\n circleSize?: number\n dotRight?: number\n dotSize?: number\n dotTop?: number\n hideDot?: boolean\n keySize: number\n mode?: string\n}\n\nexport const KeyRing = ({\n center = false,\n circleSize,\n dotRight,\n dotSize,\n dotTop,\n hideDot = false,\n keySize,\n mode,\n}: Props): ReactElement => {\n const classes = useStyles(styles)\n const keyStyle = buildKeyStyleFrom(circleSize, center, dotSize)\n const dotStyle = buildDotStyleFrom(dotSize, dotTop, dotRight, mode)\n const isWarning = mode === 'warning'\n const img = isWarning ? TriangleIcon : KeyIcon\n\n return (\n \n \n \n \n {!hideDot && }\n \n )\n}\n","import { Action, handleActions } from 'redux-actions'\n\nimport session from 'src/utils/storage/session'\nimport { PENDING_TRANSACTIONS_ACTIONS } from 'src/logic/safe/store/actions/pendingTransactions'\nimport { ChainId } from 'src/config/chain.d'\nimport { _getChainId } from 'src/config'\n\nexport const PENDING_TRANSACTIONS_ID = 'pendingTransactions'\n\nexport type PendingTransactionsState = {\n [chainId: ChainId]: {\n [id: string]: {\n txHash: string\n block?: number\n }\n }\n}\n\nconst initialPendingTxsState = session.getItem(PENDING_TRANSACTIONS_ID) || {}\n\nexport type RemovePendingTransactionPayload = {\n id: string\n isBroadcast?: boolean\n}\n\nexport type AddPendingTransactionPayload = RemovePendingTransactionPayload & {\n txHash: string\n block?: number\n}\n\nexport type PendingTransactionPayloads = AddPendingTransactionPayload | RemovePendingTransactionPayload\n\nexport const pendingTransactionsReducer = handleActions(\n {\n [PENDING_TRANSACTIONS_ACTIONS.ADD]: (\n state: PendingTransactionsState,\n action: Action,\n ) => {\n const chainId = _getChainId()\n const { id, txHash, block } = action.payload\n\n return {\n ...state,\n [chainId]: {\n ...state[chainId],\n [id]: {\n txHash,\n block,\n },\n },\n }\n },\n [PENDING_TRANSACTIONS_ACTIONS.REMOVE]: (\n state: PendingTransactionsState,\n action: Action,\n ) => {\n const chainId = _getChainId()\n const { id } = action.payload\n\n // Omit id from the pending transactions on current chain\n const { [id]: _, ...newChainState } = state[chainId] || {}\n\n if (Object.keys(newChainState || {}).length === 0) {\n // Omit chainId from the pending transactions if no pending transactions on chain\n const { [chainId]: _, ...newState } = state\n return newState\n }\n\n return {\n ...state,\n [chainId]: newChainState,\n }\n },\n },\n initialPendingTxsState,\n)\n","import Storage from './Storage'\n\nconst session = new Storage(window.sessionStorage)\n\nexport default session\n\nexport const {\n getItem: loadFromSessionStorage,\n setItem: saveToSessionStorage,\n removeItem: removeFromSessionStorage,\n} = session\n","import { hexToBytes } from 'web3-utils'\n\nexport const getByteLength = (data: string | string[]): number => {\n try {\n if (!Array.isArray(data)) {\n data = data.split(',')\n }\n // Return the sum of the byte sizes of each hex string\n return data.reduce((result, hex) => {\n const bytes = hexToBytes(hex)\n return result + bytes.length\n }, 0)\n } catch (err) {\n return 0\n }\n}\n","import { handleActions } from 'redux-actions'\nimport { LOCAL_CONFIG_KEY, _getChainId } from 'src/config'\nimport { CONFIG_ACTIONS } from '../actions'\nimport { ConfigState, ConfigPayload } from './reducer.d'\n\nexport const CONFIG_REDUCER_ID = LOCAL_CONFIG_KEY\n\nexport const initialConfigState: ConfigState = {\n chainId: _getChainId(),\n}\n\n// Stored locally as to preserve chainId for non-EIP-3770 routes\nconst configReducer = handleActions(\n {\n [CONFIG_ACTIONS.SET_CHAIN_ID]: (state, action) => {\n const networkId = action.payload\n return { ...state, chainId: networkId }\n },\n },\n initialConfigState,\n)\n\nexport default configReducer\n","import { createAction } from 'redux-actions'\n\nimport { SetCopyShortNamePayload } from '../reducer/appearance'\n\nexport const SET_COPY_SHORT_NAME = 'SET_COPY_SHORT_NAME'\n\nexport const setCopyShortName = createAction(SET_COPY_SHORT_NAME)\n","import { createAction } from 'redux-actions'\n\nimport { SetShowShortNamePayload } from '../reducer/appearance'\n\nexport const SET_SHOW_SHORT_NAME = 'SET_SHOW_SHORT_NAME'\n\nexport const setShowShortName = createAction(SET_SHOW_SHORT_NAME)\n","import { Action, handleActions } from 'redux-actions'\n\nimport { SET_COPY_SHORT_NAME } from '../actions/setCopyShortName'\nimport { SET_SHOW_SHORT_NAME } from '../actions/setShowShortName'\n\nexport const APPEARANCE_REDUCER_ID = 'appearance'\n\nexport const initialAppearanceState = {\n copyShortName: true,\n showShortName: true,\n}\n\nexport type AppearanceState = typeof initialAppearanceState\n\nexport type SetCopyShortNamePayload = Pick\nexport type SetShowShortNamePayload = Pick\n\nconst appearanceReducer = handleActions(\n {\n [SET_COPY_SHORT_NAME]: (state, { payload }: Action): AppearanceState => ({\n ...state,\n copyShortName: payload.copyShortName,\n }),\n [SET_SHOW_SHORT_NAME]: (state, { payload }: Action): AppearanceState => ({\n ...state,\n showShortName: payload.showShortName,\n }),\n },\n initialAppearanceState,\n)\n\nexport default appearanceReducer\n","import { ZERO_ADDRESS } from 'src/logic/wallets/ethAddresses'\n\n// If this is in the index.ts file, it causes a circular dependency\n// CGW does not return `nativeCurrency.address` as it is `ZERO_ADDRESS`\nexport const getNativeCurrencyAddress = (): string => {\n return ZERO_ADDRESS\n}\n\n// Template syntax returned from CGW is {{this}}\nexport const evalTemplate = (uri: string, data: string | Record): string => {\n const TEMPLATE_REGEX = /\\{\\{([^}]+)\\}\\}/g\n return uri.replace(TEMPLATE_REGEX, (_: string, key: string) => data[key])\n}\n","import UnstoppableResolution from '@unstoppabledomains/resolution'\n\nlet UDResolution: UnstoppableResolution\n\nexport const getAddressFromUnstoppableDomain = (name: string): Promise => {\n if (!UDResolution) {\n UDResolution = new UnstoppableResolution({\n sourceConfig: {\n uns: {\n api: true,\n },\n },\n })\n }\n const resolved = UDResolution.addr(name, 'ETH')\n return resolved\n}\n","import semverSatisfies from 'semver/functions/satisfies'\nimport Web3 from 'web3'\nimport { Contract } from 'web3-eth-contract'\nimport { provider as Provider } from 'web3-core'\nimport { ContentHash } from 'web3-eth-ens'\nimport { namehash } from '@ethersproject/hash'\nimport Safe from '@gnosis.pm/safe-core-sdk'\nimport Web3Adapter from '@gnosis.pm/safe-web3-lib'\nimport { FEATURES } from '@gnosis.pm/safe-react-gateway-sdk'\nimport memoize from 'lodash/memoize'\n\nimport { ZERO_ADDRESS } from './ethAddresses'\nimport { EMPTY_DATA } from './ethTransactions'\nimport { getRpcServiceUrl, _getChainId } from 'src/config'\nimport { CHAIN_ID, ChainId } from 'src/config/chain.d'\nimport { isValidCryptoDomainName } from 'src/logic/wallets/ethAddresses'\nimport { getAddressFromUnstoppableDomain } from './utils/unstoppableDomains'\nimport { hasFeature } from 'src/logic/safe/utils/safeVersion'\nimport { checksumAddress } from 'src/utils/checksumAddress'\nimport { isValidAddress } from 'src/utils/isValidAddress'\nimport { Wallet } from 'bnc-onboard/dist/src/interfaces'\n\n// This providers have direct relation with name assigned in bnc-onboard configuration\nexport enum WALLET_PROVIDER {\n METAMASK = 'METAMASK',\n TALLYHO = 'TALLYHO',\n TORUS = 'TORUS',\n PORTIS = 'PORTIS',\n FORTMATIC = 'FORTMATIC',\n SQUARELINK = 'SQUARELINK',\n WALLETCONNECT = 'WALLETCONNECT',\n TRUST = 'TRUST',\n OPERA = 'OPERA',\n // This is the provider for WALLET_LINK configuration on bnc-onboard\n COINBASE_WALLET = 'COINBASE WALLET',\n AUTHEREUM = 'AUTHEREUM',\n LEDGER = 'LEDGER',\n TREZOR = 'TREZOR',\n LATTICE = 'LATTICE',\n KEYSTONE = 'KEYSTONE',\n // Safe name as PAIRING_MODULE_NAME\n SAFE_MOBILE = 'SAFE MOBILE',\n}\n\n// With some wallets from web3connect you have to use their provider instance only for signing\n// And our own one to fetch data\nexport const web3HttpProviderOptions = {\n timeout: 10_000,\n}\n\nconst web3ReadOnly: Web3[] = []\nexport const getWeb3ReadOnly = (chainId = _getChainId()): Web3 => {\n if (!web3ReadOnly[chainId]) {\n web3ReadOnly[chainId] = new Web3(\n process.env.NODE_ENV !== 'test'\n ? new Web3.providers.HttpProvider(getRpcServiceUrl(), web3HttpProviderOptions)\n : 'ws://localhost:8545',\n )\n }\n\n return web3ReadOnly[chainId]\n}\n\nlet web3: Web3\nexport const getWeb3 = (): Web3 => web3\nexport const setWeb3 = (provider: Provider): void => {\n web3 = new Web3(provider)\n}\nexport const setWeb3ReadOnly = (): void => {\n web3 = getWeb3ReadOnly()\n}\nexport const resetWeb3 = (): void => {\n web3 = web3ReadOnly[_getChainId()]\n}\n\nexport const getChainIdFrom = (web3Provider: Web3): Promise => {\n return web3Provider.eth.getChainId()\n}\n\nexport const isHardwareWallet = (wallet: Wallet): boolean => {\n const isSupportedHardwareWallet = [WALLET_PROVIDER.LEDGER, WALLET_PROVIDER.TREZOR].includes(\n wallet?.name?.toUpperCase() as WALLET_PROVIDER,\n )\n const isHardwareWalletType = wallet?.type === 'hardware'\n\n return isSupportedHardwareWallet || isHardwareWalletType\n}\n\nexport const isSmartContract = async (account: string, chainId: ChainId): Promise => {\n let contractCode = ''\n try {\n contractCode = await getWeb3ReadOnly(chainId).eth.getCode(account)\n } catch (e) {\n console.log('e', e)\n // ignore\n }\n\n return !!contractCode && contractCode.replace(EMPTY_DATA, '').replace(/0/g, '') !== ''\n}\n\nconst memoizedIsSmartContract = memoize(\n async (account: string, chainId: ChainId): Promise => isSmartContract(account, chainId),\n (...args) => args.join(),\n)\n\nexport const isSmartContractWallet = async (account: string): Promise => {\n return account ? memoizedIsSmartContract(account, _getChainId()) : false\n}\n\nexport const getAddressFromDomain = (name: string): Promise => {\n if (isValidCryptoDomainName(name)) {\n return getAddressFromUnstoppableDomain(name)\n }\n return getWeb3ReadOnly().eth.ens.getAddress(name)\n}\n\nexport const reverseENSLookup = async (address: string): Promise => {\n if (!address || !hasFeature(FEATURES.DOMAIN_LOOKUP) || !isValidAddress(address)) {\n return ''\n }\n\n const web3 = getWeb3ReadOnly()\n const lookup = address.toLowerCase().substr(2) + '.addr.reverse'\n const nh = namehash(lookup)\n\n let ResolverContract: Contract\n let name = ''\n try {\n ResolverContract = await web3.eth.ens.getResolver(lookup)\n } catch (err) {\n return ''\n }\n\n let verifiedAddress = ''\n try {\n name = await ResolverContract.methods.name(nh).call()\n verifiedAddress = await web3.eth.ens.getAddress(name)\n } catch (err) {\n return ''\n }\n\n return checksumAddress(verifiedAddress) === checksumAddress(address) ? name : ''\n}\n\nexport const getContentFromENS = (name: string): Promise => web3.eth.ens.getContenthash(name)\n\nexport const isTxPendingError = (err: Error): boolean => {\n const WEB3_TX_NOT_MINED_ERROR = 'Transaction was not mined within'\n return (err.message || '').startsWith(WEB3_TX_NOT_MINED_ERROR)\n}\n\nexport const getSDKWeb3Adapter = (signerAddress: string): Web3Adapter => {\n return new Web3Adapter({\n web3: getWeb3(),\n signerAddress,\n })\n}\n\nexport const getSDKWeb3ReadOnly = (): Web3Adapter => {\n return new Web3Adapter({\n web3: getWeb3ReadOnly(),\n signerAddress: ZERO_ADDRESS,\n })\n}\n\nexport const getSafeSDK = async (signerAddress: string, safeAddress: string, safeVersion: string): Promise => {\n const networkId = (await getChainIdFrom(web3)).toString() as ChainId\n const ethAdapter = getSDKWeb3Adapter(signerAddress)\n\n let isL1SafeMasterCopy: boolean\n if (semverSatisfies(safeVersion, '<1.3.0')) {\n isL1SafeMasterCopy = true\n } else {\n isL1SafeMasterCopy = networkId === CHAIN_ID.ETHEREUM\n }\n\n return await Safe.create({\n ethAdapter,\n safeAddress,\n isL1SafeMasterCopy,\n })\n}\n","import {\n getTransactionHistory,\n getTransactionQueue,\n TransactionListPage,\n getIncomingTransfers,\n getMultisigTransactions,\n getModuleTransactions,\n} from '@gnosis.pm/safe-react-gateway-sdk'\nimport { _getChainId } from 'src/config'\nimport { HistoryGatewayResponse, QueuedGatewayResponse } from 'src/logic/safe/store/models/types/gateway.d'\nimport { checksumAddress } from 'src/utils/checksumAddress'\nimport { Errors, CodedException } from 'src/logic/exceptions/CodedException'\nimport { FilterForm, FilterType, FILTER_TYPE_FIELD_NAME } from 'src/routes/safe/components/Transactions/TxList/Filter'\nimport {\n getIncomingFilter,\n getMultisigFilter,\n getModuleFilter,\n} from 'src/routes/safe/components/Transactions/TxList/Filter/utils'\n\n/*************/\n/* HISTORY */\n/*************/\n\nexport const _getTxHistory = async (\n chainId: string,\n safeAddress: string,\n filter?: FilterForm | Partial,\n next?: string,\n): Promise => {\n let txListPage: TransactionListPage = {\n next: undefined,\n previous: undefined,\n results: [],\n }\n\n switch (filter?.[FILTER_TYPE_FIELD_NAME]) {\n case FilterType.INCOMING: {\n txListPage = await getIncomingTransfers(chainId, safeAddress, getIncomingFilter(filter), next)\n break\n }\n case FilterType.MULTISIG: {\n txListPage = await getMultisigTransactions(chainId, safeAddress, getMultisigFilter(filter, true), next)\n break\n }\n case FilterType.MODULE: {\n txListPage = await getModuleTransactions(chainId, safeAddress, getModuleFilter(filter), next)\n break\n }\n default: {\n txListPage = await getTransactionHistory(chainId, safeAddress, next)\n }\n }\n\n return txListPage\n}\n\nexport const _getHistoryPageUrl = (pageUrl?: string, filter?: FilterForm | Partial): undefined | string => {\n if (!pageUrl || !filter || Object.keys(filter).length === 0) {\n return pageUrl\n }\n\n let url: URL\n\n try {\n url = new URL(pageUrl)\n } catch {\n return pageUrl\n }\n\n Object.entries(filter)\n .filter(([, value]) => value !== undefined)\n .forEach(([key, value]) => {\n url.searchParams.set(key, String(value))\n })\n\n return url.toString()\n}\n\nconst historyPointers: { [chainId: string]: { [safeAddress: string]: { next?: string; previous?: string } } } = {}\n\nconst getHistoryPointer = (\n next?: string,\n previous?: string,\n filter?: FilterForm | Partial,\n): { next?: string; previous?: string } => ({\n next: _getHistoryPageUrl(next, filter),\n previous: _getHistoryPageUrl(previous, filter),\n})\n\n/**\n * Fetch next page if there is a next pointer for the safeAddress.\n * If the fetch was success, updates the pointers.\n * @param {string} safeAddress\n */\nexport const loadPagedHistoryTransactions = async (\n safeAddress: string,\n filter?: FilterForm | Partial,\n): Promise<{ values: HistoryGatewayResponse['results']; next?: string } | undefined> => {\n const chainId = _getChainId()\n // if `historyPointers[safeAddress] is `undefined` it means `loadHistoryTransactions` wasn't called\n // if `historyPointers[safeAddress].next is `null`, it means it reached the last page in gateway-client\n if (!historyPointers[chainId][safeAddress]?.next) {\n throw new CodedException(Errors._608)\n }\n\n try {\n const { results, next, previous } = await _getTxHistory(\n chainId,\n checksumAddress(safeAddress),\n filter,\n historyPointers[chainId][safeAddress].next,\n )\n\n historyPointers[chainId][safeAddress] = getHistoryPointer(next, previous, filter)\n\n return { values: results, next: historyPointers[chainId][safeAddress].next }\n } catch (e) {\n throw new CodedException(Errors._602, e.message)\n }\n}\n\nexport const loadHistoryTransactions = async (\n safeAddress: string,\n filter?: FilterForm | Partial,\n): Promise => {\n const chainId = _getChainId()\n try {\n const { results, next, previous } = await _getTxHistory(chainId, checksumAddress(safeAddress), filter)\n\n if (!historyPointers[chainId]) {\n historyPointers[chainId] = {}\n }\n\n historyPointers[chainId][safeAddress] = getHistoryPointer(next, previous, filter)\n\n return results\n } catch (e) {\n throw new CodedException(Errors._602, e.message)\n }\n}\n\n/************/\n/* QUEUED */\n/************/\nconst queuedPointers: { [chainId: string]: { [safeAddress: string]: { next?: string; previous?: string } } } = {}\n\n/**\n * Fetch next page if there is a next pointer for the safeAddress.\n * If the fetch was success, updates the pointers.\n * @param {string} safeAddress\n */\nexport const loadPagedQueuedTransactions = async (\n safeAddress: string,\n): Promise<{ values: QueuedGatewayResponse['results']; next?: string } | undefined> => {\n const chainId = _getChainId()\n // if `queuedPointers[safeAddress] is `undefined` it means `loadHistoryTransactions` wasn't called\n // if `queuedPointers[safeAddress].next is `null`, it means it reached the last page in gateway-client\n if (!queuedPointers[safeAddress]?.next) {\n throw new CodedException(Errors._608)\n }\n\n try {\n const { results, next, previous } = await getTransactionQueue(\n chainId,\n checksumAddress(safeAddress),\n queuedPointers[chainId][safeAddress].next,\n )\n\n queuedPointers[chainId][safeAddress] = { next, previous }\n\n return { values: results, next: queuedPointers[chainId][safeAddress].next }\n } catch (e) {\n throw new CodedException(Errors._603, e.message)\n }\n}\n\nexport const loadQueuedTransactions = async (safeAddress: string): Promise => {\n const chainId = _getChainId()\n try {\n const { results, next, previous } = await getTransactionQueue(chainId, checksumAddress(safeAddress))\n\n if (!queuedPointers[chainId]) {\n queuedPointers[chainId] = {}\n }\n\n if (!queuedPointers[chainId][safeAddress] || queuedPointers[chainId][safeAddress].next === null) {\n queuedPointers[chainId][safeAddress] = { next, previous }\n }\n\n return results\n } catch (e) {\n throw new CodedException(Errors._603, e.message)\n }\n}\n","import { Wallet } from 'bnc-onboard/dist/src/interfaces'\nimport onboard from 'src/logic/wallets/onboard'\nimport { hexToNumberString, isHexStrict, numberToHex } from 'web3-utils'\n\nimport { getChainInfo, getExplorerUrl, getPublicRpcUrl, _getChainId } from 'src/config'\nimport { ChainId } from 'src/config/chain.d'\nimport { Errors, CodedException } from 'src/logic/exceptions/CodedException'\nimport { isPairingModule } from 'src/logic/wallets/pairing/utils'\nimport { isHardwareWallet } from '../getWeb3'\n\nconst WALLET_ERRORS = {\n UNRECOGNIZED_CHAIN: 4902,\n USER_REJECTED: 4001,\n // ADDING_EXISTING_CHAIN: -32603,\n}\n\n/**\n * Switch the chain assuming it's MetaMask.\n * @see https://github.com/MetaMask/metamask-extension/pull/10905\n */\nconst requestSwitch = async (wallet: Wallet, chainId: ChainId): Promise => {\n // Note: This could support WC too\n if (isPairingModule(wallet.name)) {\n wallet.provider?.wc.updateSession({ chainId: parseInt(chainId, 10), accounts: wallet.provider.wc.accounts })\n } else {\n await wallet.provider?.request({\n method: 'wallet_switchEthereumChain',\n params: [\n {\n chainId: numberToHex(chainId),\n },\n ],\n })\n }\n}\n\n/**\n * Add a chain config based on EIP-3085.\n * Known to be implemented by MetaMask.\n * @see https://docs.metamask.io/guide/rpc-api.html#wallet-addethereumchain\n */\nconst requestAdd = async (wallet: Wallet, chainId: ChainId): Promise => {\n const { chainName, nativeCurrency } = getChainInfo()\n\n await wallet.provider?.request({\n method: 'wallet_addEthereumChain',\n params: [\n {\n chainId: numberToHex(chainId),\n chainName,\n nativeCurrency,\n rpcUrls: [getPublicRpcUrl()],\n blockExplorerUrls: [getExplorerUrl()],\n },\n ],\n })\n}\n\n/**\n * Try switching the wallet chain, and if it fails, try adding the chain config\n */\nexport const switchNetwork = async (wallet: Wallet, chainId: ChainId): Promise => {\n try {\n await requestSwitch(wallet, chainId)\n } catch (e) {\n if (e.code === WALLET_ERRORS.USER_REJECTED) {\n return\n }\n\n if (e.code == WALLET_ERRORS.UNRECOGNIZED_CHAIN) {\n try {\n await requestAdd(wallet, chainId)\n } catch (e) {\n if (e.code === WALLET_ERRORS.USER_REJECTED) {\n return\n }\n\n throw new CodedException(Errors._301, e.message)\n }\n } else {\n throw new CodedException(Errors._300, e.message)\n }\n }\n}\n\nexport const shouldSwitchNetwork = (wallet: Wallet): boolean => {\n if (!wallet.provider || isHardwareWallet(wallet)) {\n return false\n }\n\n // The current network can be stored under one of two keys\n const isCurrentNetwork = [wallet?.provider?.networkVersion, wallet?.provider?.chainId].some((chainId) => {\n const _chainId = _getChainId()\n\n if (typeof chainId === 'number') {\n return chainId.toString() === _chainId\n }\n if (typeof chainId === 'string') {\n return isHexStrict(chainId) ? hexToNumberString(chainId) === _chainId : chainId === _chainId\n }\n return false\n })\n\n return !isCurrentNetwork\n}\n\nexport const switchWalletChain = async (): Promise => {\n const { wallet } = onboard().getState()\n try {\n await switchNetwork(wallet, _getChainId())\n } catch (e) {\n e.log()\n // Fallback to the onboard popup if switching isn't supported\n // walletSelect must be called first: https://docs.blocknative.com/onboard#onboard-user\n await onboard().walletSelect()\n await onboard().walletCheck()\n }\n}\n","export default __webpack_public_path__ + \"static/media/nft_icon.85f106fa.png\";","import styled from 'styled-components'\n\nimport { primaryLite, primaryActive } from 'src/theme/variables'\n\nconst Container = styled.div<{ size: number }>`\n background: ${primaryLite};\n color: ${primaryActive};\n font-size: ${(p) => p.size}px;\n font-weight: bold;\n border-radius: 100%;\n padding: 0.25em;\n position: absolute;\n z-index: 2;\n top: -8px;\n left: -8px;\n min-width: 1.5em;\n min-height: 1.5em;\n display: flex;\n align-items: center;\n justify-content: center;\n line-height: 1;\n`\n\ntype ThresholdProps = {\n threshold: number\n owners: number\n size?: number\n}\n\nconst Threshold = ({ threshold, owners, size = 12 }: ThresholdProps): React.ReactElement | null => {\n return (\n \n {threshold}/{owners}\n \n )\n}\n\nexport default Threshold\n","import { Text, Icon, Button, Identicon } from '@gnosis.pm/safe-react-components'\nimport { useEffect, useRef, ReactElement } from 'react'\nimport { useHistory } from 'react-router'\nimport ListItem from '@material-ui/core/ListItem/ListItem'\nimport ListItemSecondaryAction from '@material-ui/core/ListItemSecondaryAction/ListItemSecondaryAction'\nimport styled from 'styled-components'\nimport { Box } from '@material-ui/core'\n\nimport { sameAddress } from 'src/logic/wallets/ethAddresses'\nimport PrefixedEthHashInfo from 'src/components/PrefixedEthHashInfo'\nimport { formatAmount } from 'src/logic/tokens/utils/formatAmount'\nimport { useSelector } from 'react-redux'\nimport { addressBookName } from 'src/logic/addressBook/store/selectors'\nimport { setChainId } from 'src/logic/config/utils'\nimport { generateSafeRoute, LOAD_SPECIFIC_SAFE_ROUTE, SAFE_ROUTES, SafeRouteParams } from 'src/routes/routes'\nimport { currentChainId } from 'src/logic/config/store/selectors'\nimport { ChainId } from 'src/config/chain.d'\nimport { getChainById } from 'src/config'\nimport useSafeAddress from 'src/logic/currentSession/hooks/useSafeAddress'\nimport { SafeOwner } from 'src/logic/safe/store/models/safe'\nimport Threshold from 'src/walliro/containers/AppLayout/Sidebar/Threshold'\n\nconst StyledIcon = styled(Icon)<{ checked: boolean }>`\n ${({ checked }) => (checked ? { marginRight: '4px' } : { visibility: 'hidden', width: '28px' })}\n`\n\nconst StyledButton = styled(Button)`\n &.MuiButton-root.MuiButton-text {\n padding: 8px 16px;\n min-width: auto;\n height: 100%;\n\n &:hover {\n background-color: #cbf1eb;\n }\n }\n`\n\nconst StyledText = styled(Text)`\n height: 100%;\n display: flex;\n align-items: center;\n padding: 0 16px;\n`\n\nconst StyledPrefixedEthHashInfo = styled(PrefixedEthHashInfo)`\n & > div > p:first-of-type {\n width: 210px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n`\n\nconst AddressContainer = styled.div`\n display: flex;\n align-items: center;\n gap: 8px;\n\n & img {\n display: block;\n }\n`\n\ntype Props = {\n onSafeClick: () => void\n onNetworkSwitch?: () => void\n address: string\n ethBalance?: string\n showAddSafeLink?: boolean\n networkId: ChainId\n shouldScrollToSafe?: boolean\n threshold?: number\n owners?: SafeOwner[]\n}\n\nconst SafeListItem = ({\n onSafeClick,\n onNetworkSwitch,\n address,\n ethBalance,\n showAddSafeLink = false,\n networkId,\n shouldScrollToSafe = false,\n threshold,\n owners,\n}: Props): ReactElement => {\n const history = useHistory()\n const safeName = useSelector((state) => addressBookName(state, { address, chainId: networkId }))\n const { safeAddress: currentSafeAddress } = useSafeAddress()\n const currChainId = useSelector(currentChainId)\n const isCurrentSafe = currChainId === networkId && sameAddress(currentSafeAddress, address)\n const safeRef = useRef(null)\n\n const { nativeCurrency, shortName } = getChainById(networkId)\n const nativeCurrencySymbol = nativeCurrency?.symbol ?? 'ETH'\n\n useEffect(() => {\n if (isCurrentSafe && shouldScrollToSafe) {\n safeRef?.current?.scrollIntoView({ block: 'center' })\n }\n }, [isCurrentSafe, shouldScrollToSafe])\n\n const routesSlug: SafeRouteParams = {\n shortName,\n safeAddress: address,\n }\n\n const handleOpenSafe = (): void => {\n onSafeClick()\n onNetworkSwitch?.()\n history.push(generateSafeRoute(SAFE_ROUTES.DASHBOARD, routesSlug))\n }\n\n const handleLoadSafe = (): void => {\n onSafeClick()\n onNetworkSwitch?.()\n history.push(generateSafeRoute(LOAD_SPECIFIC_SAFE_ROUTE, routesSlug))\n\n // Navigating to LOAD_SPECIFIC_SAFE_ROUTE doesn't trigger a network switch\n setChainId(networkId)\n }\n\n return (\n \n \n \n \n {threshold && owners && }\n \n \n \n \n \n {ethBalance ? (\n \n {formatAmount(ethBalance)} {nativeCurrencySymbol}\n \n ) : showAddSafeLink ? (\n \n \n Add Walliro\n \n \n ) : null}\n \n \n )\n}\n\nexport default SafeListItem\n","import MuiList from '@material-ui/core/List'\nimport ListItem from '@material-ui/core/ListItem'\nimport styled from 'styled-components'\nimport makeStyles from '@material-ui/core/styles/makeStyles'\nimport { Fragment, ReactElement, useEffect } from 'react'\nimport { Text } from '@gnosis.pm/safe-react-components'\nimport { Link } from 'react-router-dom'\nimport uniqBy from 'lodash/uniqBy'\n\nimport Collapse from 'src/components/Collapse'\nimport SafeListItem from './SafeListItem'\nimport useLocalSafes from 'src/logic/safe/hooks/useLocalSafes'\nimport { STARTER_ROUTE } from 'src/routes/routes'\nimport { SafeRecordProps } from 'src/logic/safe/store/models/safe'\nimport { setChainId } from 'src/logic/config/utils'\nimport { useSelector } from 'react-redux'\nimport { currentChainId } from 'src/logic/config/store/selectors'\nimport useOwnerSafes from 'src/logic/safe/hooks/useOwnerSafes'\nimport { getChains } from 'src/config/cache/chains'\nimport { OVERVIEW_EVENTS } from 'src/utils/events/overview'\nimport { trackEvent } from 'src/utils/googleTagManager'\nimport { getChainById } from 'src/config'\nimport useSafeAddress from 'src/logic/currentSession/hooks/useSafeAddress'\n\nconst MAX_EXPANDED_SAFES = 3\n\nconst StyledDot = styled.span<{ backgroundColor: string; textColor: string }>`\n width: 15px;\n height: 15px;\n color: ${({ textColor }) => textColor};\n background-color: ${({ backgroundColor }) => backgroundColor};\n border-radius: 50%;\n display: inline-block;\n margin-right: 6px;\n`\n\nconst StyledList = styled(MuiList)`\n height: '100%';\n overflow-x: 'hidden';\n overflow-y: 'auto';\n padding: 0;\n\n & p > a {\n color: inherit;\n }\n`\n\nconst useStyles = makeStyles({\n listItemCollapse: {\n '&:not(:first-child)': {\n paddingTop: '10px',\n },\n\n padding: '0 0 0 0',\n '& > div > div:first-child': {\n paddingLeft: '44px',\n paddingTop: '8px',\n paddingBottom: '8px',\n },\n },\n})\n\nconst PlaceholderText = styled(Text)`\n padding: 16px 44px;\n`\n\ntype Props = {\n onSafeClick: () => void\n}\n\nconst isNotLoadedViaUrl = ({ loadedViaUrl }: SafeRecordProps) => loadedViaUrl === false\n\nconst isSameAddress = (addrA: string, addrB: string): boolean => addrA.toLowerCase() === addrB.toLowerCase()\n\nexport const SafeList = ({ onSafeClick }: Props): ReactElement => {\n const classes = useStyles()\n const { safeAddress } = useSafeAddress()\n const ownedSafes = useOwnerSafes()\n const localSafes = useLocalSafes()\n const curChainId = useSelector(currentChainId)\n\n useEffect(() => {\n const addedSafes = localSafes?.[curChainId]?.length || 0\n if (addedSafes === 0) {\n return\n }\n const event = OVERVIEW_EVENTS.ADDED_SAFES_ON_NETWORK\n trackEvent({\n ...event,\n action: `${event.action} ${getChainById(curChainId).chainName}`,\n label: addedSafes,\n })\n }, [localSafes, curChainId])\n\n return (\n \n {getChains().map(({ chainId, theme, chainName }) => {\n const isCurrentNetwork = chainId === curChainId\n const ownedSafesOnNetwork = ownedSafes[chainId] || []\n const localSafesOnNetwork = uniqBy(localSafes[chainId].filter(isNotLoadedViaUrl), ({ address }) =>\n address.toLowerCase(),\n )\n\n if (!isCurrentNetwork && !ownedSafesOnNetwork.length && !localSafesOnNetwork.length) {\n return null\n }\n\n let shouldExpandOwnedSafes = false\n if (isCurrentNetwork && ownedSafesOnNetwork.includes(safeAddress)) {\n // Expand the Owned Safes if the current Safe is owned, but not added\n shouldExpandOwnedSafes = !localSafesOnNetwork.some(({ address }) => isSameAddress(address, safeAddress))\n } else {\n // Expand the Owned Safes if there are no added Safes\n shouldExpandOwnedSafes = !localSafesOnNetwork.length && ownedSafesOnNetwork.length <= MAX_EXPANDED_SAFES\n }\n\n return (\n \n \n \n {chainName}\n \n \n {localSafesOnNetwork.map((safe) => (\n setChainId(chainId)}\n onSafeClick={onSafeClick}\n shouldScrollToSafe\n {...safe}\n />\n ))}\n\n {!localSafesOnNetwork.length && !ownedSafesOnNetwork.length && (\n \n \n Create or add\n {' '}\n an existing Walliro on this network\n \n )}\n\n {ownedSafesOnNetwork.length > 0 && (\n \n {`Walliro owned on ${chainName} (${ownedSafesOnNetwork.length})`}\n }\n key={String(shouldExpandOwnedSafes)}\n defaultExpanded={shouldExpandOwnedSafes}\n >\n {ownedSafesOnNetwork.map((ownedAddress) => {\n const isAdded = localSafesOnNetwork.some(({ address }) => isSameAddress(address, ownedAddress))\n\n return (\n \n )\n })}\n \n \n )}\n \n \n )\n })}\n \n )\n}\n","import { makeStyles } from '@material-ui/core/styles'\n\nimport { headerHeight, md, mediumFontSize, screenSm, secondaryText, xs } from 'src/theme/variables'\n\nconst sidebarWidth = '400px'\nconst sidebarMarginLeft = '0px'\nconst sidebarMarginTop = '0px'\nconst sidebarMarginBottom = '0px'\nconst sidebarBorderRadius = '0px'\n\nconst useSidebarStyles = makeStyles({\n sidebar: {\n borderRadius: sidebarBorderRadius,\n marginLeft: sidebarMarginLeft,\n top: sidebarMarginTop,\n width: sidebarWidth,\n zIndex: '1298 !important',\n },\n sidebarPaper: {\n borderRadius: sidebarBorderRadius,\n marginLeft: sidebarMarginLeft,\n maxHeight: `100vh`,\n top: `0`,\n width: sidebarWidth,\n maxWidth: `calc(100% - ${sidebarMarginLeft} - ${sidebarMarginLeft})`,\n\n [`@media (min-width: ${screenSm}px)`]: {\n maxWidth: 'none',\n },\n },\n topComponents: {\n alignItems: 'center',\n flexFlow: 'column',\n paddingBottom: '30px',\n\n [`@media (min-width: ${screenSm}px)`]: {\n flexFlow: 'row',\n paddingBottom: '0',\n },\n },\n searchWrapper: {\n width: '100%',\n [`@media (min-width: ${screenSm}px)`]: {\n width: 'auto',\n },\n },\n divider: {\n display: 'none',\n [`@media (min-width: ${screenSm}px)`]: {\n display: 'block',\n },\n },\n spacer: {\n display: 'none',\n [`@media (min-width: ${screenSm}px)`]: {\n display: 'block',\n },\n },\n headerPlaceholder: {\n minHeight: headerHeight,\n },\n addSafeBtn: {\n fontSize: mediumFontSize,\n },\n searchIcon: {\n color: secondaryText,\n paddingLeft: md,\n },\n searchInput: {\n backgroundColor: 'transparent',\n lineHeight: 'initial',\n padding: 0,\n '& > input::placeholder': {\n letterSpacing: '-0.5px',\n fontSize: mediumFontSize,\n color: 'black',\n },\n '& > input': {\n letterSpacing: '-0.5px',\n },\n },\n searchContainer: {\n flexGrow: '1',\n marginLeft: xs,\n marginRight: xs,\n minWidth: '190px',\n },\n searchRoot: {\n letterSpacing: '-0.5px',\n border: 'none',\n boxShadow: 'none',\n flexGrow: '1',\n '& > button': {\n display: 'none',\n },\n },\n searchIconInput: {\n '&:hover': {\n backgroundColor: 'transparent !important',\n },\n },\n} as any)\n\nexport default useSidebarStyles\n","import { ReactElement } from 'react'\nimport styled from 'styled-components'\nimport { Link } from 'react-router-dom'\nimport Fab from '@material-ui/core/Fab'\nimport AddIcon from '@material-ui/icons/Add'\nimport { Text } from '@gnosis.pm/safe-react-components'\nimport { STARTER_ROUTE } from 'src/routes/routes'\nimport { OVERVIEW_EVENTS } from 'src/utils/events/overview'\nimport Track from '../Track'\n\ninterface Props {\n onAdd: () => unknown\n}\n\nconst StyledLink = styled(Link)`\n text-decoration: none;\n display: flex;\n flex-flow: row nowrap;\n align-items: center;\n margin: 10px 44px;\n\n & > button {\n transform: scale(0.8);\n transform-origin: 0 50%;\n\n p {\n position: absolute;\n white-space: nowrap;\n left: 50px;\n margin-top: 3px;\n text-transform: none;\n font-size: 19px;\n }\n }\n`\n\nconst AddSafeButton = ({ onAdd }: Props): ReactElement => {\n return (\n \n \n \n \n\n \n Add Walliro\n \n \n \n \n )\n}\n\nexport default AddSafeButton\n","import { useState, ReactElement, createContext } from 'react'\nimport Drawer from '@material-ui/core/Drawer'\n\nimport { SafeList } from './SafeList'\nimport useSidebarStyles from './style'\nimport Hairline from 'src/components/layout/Hairline'\nimport AddSafeButton from 'src/components/SafeListSidebar/AddSafeButton'\nimport { trackEvent } from 'src/utils/googleTagManager'\nimport { OVERVIEW_EVENTS } from 'src/utils/events/overview'\n\nexport const SafeListSidebarContext = createContext({\n isOpen: false,\n toggleSidebar: () => {},\n})\n\ntype Props = {\n children: ReactElement\n}\n\nexport const SafeListSidebar = ({ children }: Props): ReactElement => {\n const [isOpen, setIsOpen] = useState(false)\n\n const classes = useSidebarStyles()\n\n const toggleSidebar = () => {\n trackEvent({ ...OVERVIEW_EVENTS.SIDEBAR, label: isOpen ? 'Close' : 'Open' })\n setIsOpen((prevIsOpen) => !prevIsOpen)\n }\n\n const handleEsc = (e: React.KeyboardEvent) => {\n if (e.key === 'Escape') {\n toggleSidebar()\n }\n }\n\n return (\n \n \n \n\n \n\n \n \n {children}\n \n )\n}\n","import isEqual from 'lodash/isEqual'\n\nimport { SafeRecordProps } from 'src/logic/safe/store/models/safe'\n\n// This function checks if an object is a Subset of a Safe State and that they have the same values\nconst isStateSubset = (superObj, subObj) => {\n return Object.keys(subObj).every((key) => {\n if (subObj[key] && typeof subObj[key] == 'object') {\n if (typeof subObj[key] === 'object' || subObj[key].size >= 0) {\n // If type is Immutable Map, List or Object we use Immutable equals\n return isEqual(superObj[key], subObj[key])\n }\n return isStateSubset(superObj[key], subObj[key])\n }\n return subObj[key] === superObj[key]\n })\n}\n\nexport const shouldSafeStoreBeUpdated = (\n newSafeProps: Partial,\n oldSafeProps?: SafeRecordProps,\n): boolean => {\n if (!oldSafeProps) return true\n\n return !isStateSubset(oldSafeProps, newSafeProps)\n}\n","import { Map, List } from 'immutable'\nimport { Action, handleActions } from 'redux-actions'\n\nimport { REMOVE_SAFE } from 'src/logic/safe/store/actions/removeSafe'\nimport { SET_LATEST_MASTER_CONTRACT_VERSION } from 'src/logic/safe/store/actions/setLatestMasterContractVersion'\nimport { UPDATE_SAFE } from 'src/logic/safe/store/actions/updateSafe'\nimport makeSafe, { SafeRecord, SafeRecordProps } from 'src/logic/safe/store/models/safe'\nimport { checksumAddress } from 'src/utils/checksumAddress'\nimport { ADD_OR_UPDATE_SAFE } from 'src/logic/safe/store/actions/addOrUpdateSafe'\nimport { CLEAR_SAFE_LIST } from 'src/logic/safe/store/actions/clearSafeList'\nimport { shouldSafeStoreBeUpdated } from 'src/logic/safe/utils/shouldSafeStoreBeUpdated'\nimport { SafeReducerMap } from './types/safe'\n\nexport const SAFE_REDUCER_ID = 'safes'\n\nexport const buildSafe = (storedSafe: SafeRecordProps): SafeRecordProps => {\n const owners = storedSafe.owners.map(checksumAddress)\n\n return {\n ...storedSafe,\n loaded: false,\n owners,\n modules: null,\n }\n}\n\n// Merge new polling tags into safe\nconst mergeNewTagsInSafe = (state: SafeReducerMap, newSafe: SafeRecord, safeAddress: string) => {\n state.mergeIn(['safes', safeAddress], {\n collectiblesTag: newSafe.collectiblesTag,\n txQueuedTag: newSafe.txQueuedTag,\n txHistoryTag: newSafe.txHistoryTag,\n })\n}\n\nconst updateSafeProps = (prevSafe, safe) => {\n return prevSafe.withMutations((record) => {\n // Every property is updated individually to overcome the issue with nested data being overwritten\n const safeProperties = Object.keys(safe)\n\n // We check each safe property sent in action.payload\n safeProperties.forEach((key) => {\n if (safe[key] && typeof safe[key] === 'object') {\n if (safe[key].length >= 0 || Map.isMap(safe[key])) {\n // If type is array we replace it\n // If type is Immutable Map we replace it\n record.update(key, () => safe[key])\n } else if (safe[key].size >= 0) {\n // If type is Immutable List we replace current List\n // If type is Object we do a merge\n List.isList(safe[key])\n ? record.set(key, safe[key])\n : record.update(key, (current) => current.merge(safe[key]))\n } else {\n // TODO: temporary fix if type is AddressEx because it's neither a Map, nor has a size property\n record.set(key, safe[key])\n }\n } else {\n // By default we overwrite the value. This is for strings, numbers and unset values\n record.set(key, safe[key])\n }\n })\n })\n}\n\ntype Payloads = SafeRecord | string\n\nconst safeReducer = handleActions(\n {\n [UPDATE_SAFE]: (state, action: Action) => {\n const safe = action.payload\n const safeAddress = safe.address\n\n mergeNewTagsInSafe(state, safe, safeAddress)\n\n const shouldUpdate = shouldSafeStoreBeUpdated(safe, state.getIn(['safes', safeAddress]) as SafeRecordProps)\n\n return shouldUpdate\n ? state.updateIn(['safes', safeAddress], makeSafe({ address: safeAddress }), (prevSafe) =>\n updateSafeProps(prevSafe, safe),\n )\n : state\n },\n [ADD_OR_UPDATE_SAFE]: (state, action: Action) => {\n const safe = action.payload\n const safeAddress = safe.address\n\n if (!state.hasIn(['safes', safeAddress])) {\n return state.setIn(['safes', safeAddress], makeSafe(safe))\n }\n\n mergeNewTagsInSafe(state, safe, safeAddress)\n\n const shouldUpdate = shouldSafeStoreBeUpdated(safe, state.getIn(['safes', safeAddress]) as SafeRecordProps)\n\n return shouldUpdate\n ? state.updateIn(['safes', safeAddress], makeSafe({ address: safeAddress }), (prevSafe) =>\n updateSafeProps(prevSafe, safe),\n )\n : state\n },\n [REMOVE_SAFE]: (state, action: Action) => {\n const safeAddress = action.payload\n const newState = state.deleteIn(['safes', safeAddress])\n\n return newState\n },\n [CLEAR_SAFE_LIST]: (state) => {\n return state.set('safes', Map())\n },\n [SET_LATEST_MASTER_CONTRACT_VERSION]: (state, action: Action) =>\n state.set('latestMasterContractVersion', action.payload),\n },\n Map({\n safes: Map(),\n latestMasterContractVersion: '',\n }) as SafeReducerMap,\n)\n\nexport default safeReducer\n","import { AbstractProvider } from 'web3-core'\nimport semverSatisfies from 'semver/functions/satisfies'\n\nimport { getWeb3 } from 'src/logic/wallets/getWeb3'\nimport { EMPTY_DATA } from 'src/logic/wallets/ethTransactions'\nimport { TxArgs } from 'src/logic/safe/store/models/types/transaction'\nimport { adjustV } from './utils'\nimport { Operation } from '@gnosis.pm/safe-react-gateway-sdk'\nimport { _getChainId } from 'src/config'\n\nconst EIP712_NOT_SUPPORTED_ERROR_MSG = \"EIP712 is not supported by user's wallet\"\n\nconst EIP712_DOMAIN_BEFORE_V130 = [\n {\n type: 'address',\n name: 'verifyingContract',\n },\n]\n\nconst EIP712_DOMAIN = [\n {\n type: 'uint256',\n name: 'chainId',\n },\n {\n type: 'address',\n name: 'verifyingContract',\n },\n]\n\ntype Eip712MessageTypes = {\n EIP712Domain: {\n type: string\n name: string\n }[]\n SafeTx: {\n type: string\n name: string\n }[]\n}\n\n// This function returns the types structure for signing offchain messages\n// following EIP712\nexport const getEip712MessageTypes = (\n safeVersion: string,\n): {\n EIP712Domain: typeof EIP712_DOMAIN | typeof EIP712_DOMAIN_BEFORE_V130\n SafeTx: Array<{ type: string; name: string }>\n} => {\n const eip712WithChainId = semverSatisfies(safeVersion, '>=1.3.0')\n\n return {\n EIP712Domain: eip712WithChainId ? EIP712_DOMAIN : EIP712_DOMAIN_BEFORE_V130,\n SafeTx: [\n { type: 'address', name: 'to' },\n { type: 'uint256', name: 'value' },\n { type: 'bytes', name: 'data' },\n { type: 'uint8', name: 'operation' },\n { type: 'uint256', name: 'safeTxGas' },\n { type: 'uint256', name: 'baseGas' },\n { type: 'uint256', name: 'gasPrice' },\n { type: 'address', name: 'gasToken' },\n { type: 'address', name: 'refundReceiver' },\n { type: 'uint256', name: 'nonce' },\n ],\n }\n}\n\nexport interface SigningTxArgs extends TxArgs {\n safeAddress: string\n safeVersion: string\n}\n\ntype GenerateTypedData = {\n types: Eip712MessageTypes\n domain: {\n chainId: number | undefined\n verifyingContract: string\n }\n primaryType: string\n message: {\n to: string\n value: string\n data: string\n operation: Operation\n safeTxGas: string\n baseGas: string\n gasPrice: string\n gasToken: string\n refundReceiver: string\n nonce: number\n }\n}\n\nexport const generateTypedDataFrom = ({\n safeAddress,\n safeVersion,\n baseGas,\n data,\n gasPrice,\n gasToken,\n nonce,\n operation,\n refundReceiver,\n safeTxGas,\n to,\n valueInWei,\n}: SigningTxArgs): GenerateTypedData => {\n const networkId = Number(_getChainId())\n const eip712WithChainId = semverSatisfies(safeVersion, '>=1.3.0')\n\n const typedData = {\n types: getEip712MessageTypes(safeVersion),\n domain: {\n chainId: eip712WithChainId ? networkId : undefined,\n verifyingContract: safeAddress,\n },\n primaryType: 'SafeTx',\n message: {\n to,\n value: valueInWei,\n data,\n operation,\n safeTxGas,\n baseGas,\n gasPrice,\n gasToken,\n refundReceiver,\n nonce: Number(nonce),\n },\n }\n\n return typedData\n}\n\nexport const getEIP712Signer =\n (version?: string) =>\n async (txArgs: SigningTxArgs): Promise => {\n const web3 = getWeb3()\n const typedData = generateTypedDataFrom(txArgs)\n\n let method = 'eth_signTypedData_v3'\n if (version === 'v4') {\n method = 'eth_signTypedData_v4'\n }\n if (!version) {\n method = 'eth_signTypedData'\n }\n\n const jsonTypedData = JSON.stringify(typedData)\n const signedTypedData = {\n jsonrpc: '2.0',\n method,\n params: version === 'v3' || version === 'v4' ? [txArgs.sender, jsonTypedData] : [jsonTypedData, txArgs.sender],\n from: txArgs.sender,\n id: new Date().getTime(),\n }\n\n return new Promise((resolve, reject) => {\n const provider = web3.currentProvider as AbstractProvider\n provider.sendAsync(signedTypedData, (err, signature) => {\n if (err) {\n reject(err)\n return\n }\n\n if (signature?.result == null) {\n reject(new Error(EIP712_NOT_SUPPORTED_ERROR_MSG))\n return\n }\n\n const sig = adjustV('eth_signTypedData', signature.result)\n\n resolve(sig.replace(EMPTY_DATA, ''))\n })\n })\n }\n","import * as React from 'react'\n\nclass Bold extends React.PureComponent {\n render(): React.ReactElement {\n const { children, ...props } = this.props\n\n return {children}\n }\n}\n\nexport default Bold\n","import classNames from 'classnames/bind'\nimport { MouseEventHandler, CSSProperties, ReactElement, ReactNode } from 'react'\n\nimport styles from './index.module.scss'\n\nconst cx = classNames.bind(styles)\n\ninterface Props {\n align?: string\n children: ReactNode\n className?: string\n color?: string\n dot?: string\n noMargin?: boolean\n size?: string\n transform?: string\n weight?: string\n onClick?: MouseEventHandler\n style?: CSSProperties\n title?: string\n}\n\nconst Paragraph = (props: Props): ReactElement => {\n const { align, children, className, color, dot, noMargin, size, transform, weight, ...restProps } = props\n return (\n \n {children}\n

\n )\n}\n\nexport default Paragraph\n","import { Suspense, SuspenseProps } from 'react'\n\nexport const wrapInSuspense = (\n component: Required,\n fallback: SuspenseProps['fallback'] = null,\n): React.ReactElement => {component}\n","const invalidProtocolRegex = /^([^\\w]*)(javascript|data|vbscript)/im\nconst ctrlCharactersRegex = /[\\u0000-\\u001F\\u007F-\\u009F\\u2000-\\u200D\\uFEFF]/gim\nconst urlSchemeRegex = /^([^:]+):/gm\nconst relativeFirstCharacters = ['.', '/']\n\nfunction isRelativeUrlWithoutProtocol(url: string): boolean {\n return relativeFirstCharacters.indexOf(url[0]) > -1\n}\n\nexport function sanitizeUrl(url: string | null): string {\n if (!url) {\n return ''\n }\n\n const sanitizedUrl = url.replace(ctrlCharactersRegex, '').trim()\n\n if (isRelativeUrlWithoutProtocol(sanitizedUrl)) {\n return sanitizedUrl\n }\n\n const urlSchemeParseResults = sanitizedUrl.match(urlSchemeRegex)\n\n if (!urlSchemeParseResults) {\n return sanitizedUrl\n }\n\n const urlScheme = urlSchemeParseResults[0]\n\n if (invalidProtocolRegex.test(urlScheme)) {\n throw new Error('Invalid protocol')\n }\n\n return sanitizedUrl\n}\n","import { useLocation } from 'react-router-dom'\nimport { useCallback } from 'react'\nimport { sanitizeUrl } from 'src/utils/sanitizeUrl'\n\ntype AppUrlReturnType = {\n getAppUrl: () => string\n}\n\nexport const useSafeAppUrl = (): AppUrlReturnType => {\n const { search } = useLocation()\n\n const getAppUrl = useCallback(() => {\n const query = new URLSearchParams(search)\n try {\n const url = query.get('appUrl')\n\n return sanitizeUrl(url)\n } catch {\n throw new Error('Detected javascript injection in the URL. Check the appUrl parameter')\n }\n }, [search])\n\n return {\n getAppUrl,\n }\n}\n","import { createContext, forwardRef, MutableRefObject, ReactElement, ReactNode, useEffect, useState } from 'react'\nimport { InViewHookResponse, useInView } from 'react-intersection-observer'\n\nexport const INFINITE_SCROLL_CONTAINER = 'infinite-scroll-container'\n\nexport const InfiniteScrollContext = createContext<{\n ref: MutableRefObject | ((instance: HTMLDivElement | null) => void) | null\n lastItemId?: string\n setLastItemId: (itemId?: string) => void\n}>({ setLastItemId: () => {}, ref: null })\n\nexport const InfiniteScrollProvider = forwardRef(\n ({ children }, ref): ReactElement => {\n const [lastItemId, _setLastItemId] = useState()\n\n const setLastItemId = (itemId?: string) => {\n setTimeout(() => _setLastItemId(itemId), 0)\n }\n\n return (\n \n {children}\n \n )\n },\n)\n\nInfiniteScrollProvider.displayName = 'InfiniteScrollProvider'\n\ntype InfiniteScrollProps = {\n children: ReactNode\n next: () => Promise\n config?: InViewHookResponse\n}\n\nexport const InfiniteScroll = ({ children, next, config }: InfiniteScrollProps): ReactElement => {\n const { ref, inView } = useInView({\n threshold: 0,\n root: document.querySelector(`#${INFINITE_SCROLL_CONTAINER}`),\n rootMargin: '0px 0px 200px 0px',\n triggerOnce: true,\n ...config,\n })\n\n useEffect(() => {\n // Avoid memory leak - queue/history have separate InfiniteScroll wrappers\n let isMounted = true\n\n if (isMounted && inView) {\n next()\n }\n\n return () => {\n isMounted = false\n }\n }, [inView, next])\n\n return {children}\n}\n","import { Loader } from '@gnosis.pm/safe-react-components'\nimport { ReactElement, ReactNode } from 'react'\n\nimport { INFINITE_SCROLL_CONTAINER, InfiniteScroll } from 'src/components/InfiniteScroll'\nimport { HorizontallyCentered, ScrollableTransactionsContainer } from './styled'\n\ntype TxsInfiniteScrollProps = {\n children: ReactNode\n next: () => Promise\n isLoading: boolean\n}\n\nexport const TxsInfiniteScroll = ({ children, next, isLoading }: TxsInfiniteScrollProps): ReactElement => {\n return (\n \n \n {children}\n \n \n \n \n \n )\n}\n\nexport { InfiniteScrollContext as TxsInfiniteScrollContext } from 'src/components/InfiniteScroll'\n","import { TypedDataUtils } from 'eth-sig-util'\nimport { TransactionReceipt } from 'web3-core'\n\nimport { TxArgs } from 'src/logic/safe/store/models/types/transaction'\nimport { getEip712MessageTypes, generateTypedDataFrom } from 'src/logic/safe/transactions/offchainSigner/EIP712Signer'\n\nexport const generateSafeTxHash = (safeAddress: string, safeVersion: string, txArgs: TxArgs): string => {\n const typedData = generateTypedDataFrom({ safeAddress, safeVersion, ...txArgs })\n\n const messageTypes = getEip712MessageTypes(safeVersion)\n\n return `0x${TypedDataUtils.sign(typedData).toString('hex')}`\n}\n\nexport const didTxRevert = (receipt: TransactionReceipt): boolean => {\n return receipt?.status === false\n}\n","export default __webpack_public_path__ + \"static/media/info.0b5284cb.svg\";","import { useSelector } from 'react-redux'\n\nimport { sameString } from 'src/utils/strings'\nimport { ADDRESS_BOOK_DEFAULT_NAME } from 'src/logic/addressBook/model/addressBook'\nimport { addressBookEntryName } from 'src/logic/addressBook/store/selectors'\nimport { AddressEx } from '@gnosis.pm/safe-react-gateway-sdk'\n\nconst DEFAULT_PROPS: AddressEx = {\n value: '',\n name: null,\n logoUri: null,\n}\n\nexport type KnownAddressType = AddressEx & { isInAddressBook: boolean }\nexport const useKnownAddress = (props: AddressEx | null = DEFAULT_PROPS): KnownAddressType => {\n const recipientName = useSelector((state) => addressBookEntryName(state, { address: props?.value || '' }))\n\n // Undefined known address\n if (!props) {\n return {\n ...DEFAULT_PROPS,\n isInAddressBook: false,\n }\n }\n\n // We have to check that the name returned is not UNKNOWN\n const isInAddressBook = !sameString(recipientName, ADDRESS_BOOK_DEFAULT_NAME)\n const name = isInAddressBook && recipientName ? recipientName : props?.name\n\n return {\n ...props,\n name,\n isInAddressBook,\n }\n}\n","import {\n Custom,\n SettingsChange,\n TransactionInfo,\n Transfer,\n TransactionTokenType,\n} from '@gnosis.pm/safe-react-gateway-sdk'\nimport { useEffect, useState } from 'react'\n\nimport { getNativeCurrency } from 'src/config'\nimport { isCustomTxInfo, isSettingsChangeTxInfo, isTransferTxInfo } from 'src/logic/safe/store/models/types/gateway.d'\nimport { getTokenIdLabel, getTxAmount, NOT_AVAILABLE } from 'src/routes/safe/components/Transactions/TxList/utils'\n\nexport type TokenTransferAsset = {\n type: 'Transfer'\n name: string\n logoUri: string\n directionSign: '+' | '-' | ''\n amountWithSymbol: string\n tokenType: string\n}\n\nexport type AssetInfo = TokenTransferAsset | SettingsChange | Custom\n\nexport const isTokenTransferAsset = (value: AssetInfo): value is TokenTransferAsset => {\n return value.type === 'Transfer'\n}\n\nconst defaultTokenTransferAsset: TokenTransferAsset = {\n type: 'Transfer',\n name: NOT_AVAILABLE,\n logoUri: NOT_AVAILABLE,\n directionSign: '',\n amountWithSymbol: NOT_AVAILABLE,\n tokenType: 'UNKNOWN',\n}\n\nexport const useAssetInfo = (txInfo: TransactionInfo): AssetInfo | undefined => {\n const [asset, setAsset] = useState()\n const amountWithSymbol = getTxAmount(txInfo)\n\n useEffect(() => {\n if (isTransferTxInfo(txInfo)) {\n const { direction, transferInfo } = txInfo as Transfer\n const directionSign = direction === 'INCOMING' ? '+' : '-'\n\n switch (transferInfo.type) {\n case TransactionTokenType.ERC20: {\n setAsset({\n type: 'Transfer',\n name: transferInfo.tokenName ?? defaultTokenTransferAsset.name,\n logoUri: transferInfo.logoUri ?? defaultTokenTransferAsset.logoUri,\n directionSign,\n amountWithSymbol,\n tokenType: transferInfo.type,\n })\n break\n }\n case TransactionTokenType.ERC721: {\n setAsset({\n type: 'Transfer',\n name: `${transferInfo.tokenName ?? defaultTokenTransferAsset.name} ${getTokenIdLabel(transferInfo)}`,\n logoUri: transferInfo.logoUri ?? defaultTokenTransferAsset.logoUri,\n directionSign: directionSign,\n amountWithSymbol,\n tokenType: transferInfo.type,\n })\n break\n }\n case TransactionTokenType.NATIVE_COIN: {\n const nativeCurrency = getNativeCurrency()\n\n setAsset({\n type: 'Transfer',\n name: nativeCurrency.name ?? defaultTokenTransferAsset.name,\n logoUri: nativeCurrency.logoUri ?? defaultTokenTransferAsset.logoUri,\n directionSign: directionSign,\n amountWithSymbol,\n tokenType: transferInfo.type,\n })\n break\n }\n }\n return\n }\n\n if (isSettingsChangeTxInfo(txInfo)) {\n setAsset(txInfo as SettingsChange)\n return\n }\n\n if (isCustomTxInfo(txInfo)) {\n setAsset(txInfo as Custom)\n }\n }, [txInfo, amountWithSymbol])\n\n return asset\n}\n","import { createSelector } from 'reselect'\nimport { ChainId, CHAIN_ID } from 'src/config/chain.d'\n\nimport { currentChainId } from 'src/logic/config/store/selectors'\nimport { PROVIDER_REDUCER_ID, ProvidersState } from 'src/logic/wallets/store/reducer'\nimport { AppReduxState } from 'src/store'\n\nexport const providerSelector = (state: AppReduxState): ProvidersState => state[PROVIDER_REDUCER_ID]\n\nexport const userAccountSelector = createSelector(providerSelector, ({ account }: ProvidersState): string => {\n return account\n})\n\nexport const userEnsSelector = createSelector(providerSelector, ({ ensDomain }: ProvidersState): string => {\n return ensDomain\n})\n\nexport const providerNameSelector = createSelector(providerSelector, ({ name }: ProvidersState): string | undefined => {\n return name\n})\n\nexport const networkSelector = createSelector(providerSelector, ({ network }: ProvidersState): ChainId => {\n return network ?? CHAIN_ID.UNKNOWN\n})\n\nexport const shouldSwitchWalletChain = createSelector(\n providerSelector,\n currentChainId,\n ({ account, network }: ProvidersState, currentChainId: ChainId): boolean => {\n return !!account && network !== currentChainId\n },\n)\n\nexport const loadedSelector = createSelector(providerSelector, ({ loaded }: ProvidersState): boolean => {\n return loaded\n})\n\nexport const availableSelector = createSelector(providerSelector, ({ available }: ProvidersState): boolean => {\n return available\n})\n","import { logError, Errors } from 'src/logic/exceptions/CodedException'\nimport { LS_NAMESPACE, LS_SEPARATOR } from '../constants'\n\ntype BrowserStorage = typeof localStorage | typeof sessionStorage\n\ntype ItemWithExpiry = {\n value: T\n expiry: number\n}\n\nconst DEFAULT_PREFIX = `${LS_NAMESPACE}${LS_SEPARATOR}`\n\nclass Storage {\n private prefix: string\n private storage: BrowserStorage\n\n constructor(storage: BrowserStorage, prefix = DEFAULT_PREFIX) {\n this.prefix = prefix\n this.storage = storage\n }\n\n private prefixKey = (key: string): string => {\n return `${this.prefix}${key}`\n }\n\n public getItem = (key: string): T | undefined => {\n const fullKey = this.prefixKey(key)\n let saved: string | null = null\n try {\n saved = this.storage.getItem(fullKey)\n } catch (err) {\n logError(Errors._700, `key ${key} – ${err.message}`)\n }\n\n if (!saved || saved === 'undefined') return\n\n try {\n return JSON.parse(saved) as T\n } catch (err) {\n logError(Errors._700, `key ${key} – ${err.message}`)\n }\n }\n\n public setItem = (key: string, item: T): void => {\n const fullKey = this.prefixKey(key)\n try {\n this.storage.setItem(fullKey, JSON.stringify(item))\n } catch (err) {\n logError(Errors._701, `key ${key} – ${err.message}`)\n }\n }\n\n public removeItem = (key: string): void => {\n const fullKey = this.prefixKey(key)\n try {\n this.storage.removeItem(fullKey)\n } catch (err) {\n logError(Errors._702, `key ${key} – ${err.message}`)\n }\n }\n\n public removeMatching = (pattern: RegExp): void => {\n Object.keys(this.storage)\n .filter((key) => pattern.test(key))\n .forEach((key) => this.storage.removeItem(key))\n }\n\n public setWithExpiry = (key: string, item: T, expiry: number): void => {\n this.setItem>(key, {\n value: item,\n expiry: new Date().getTime() + expiry,\n })\n }\n\n public getWithExpiry = (key: string): T | undefined => {\n const item = this.getItem>(key)\n if (!item) {\n return\n }\n\n if (new Date().getTime() > item.expiry) {\n this.removeItem(key)\n return\n }\n\n return item.value\n }\n}\n\nexport default Storage\n","import { createAction } from 'redux-actions'\n\nimport { _getChainId } from 'src/config'\nimport { ChainId } from 'src/config/chain.d'\n\nexport enum CONFIG_ACTIONS {\n SET_CHAIN_ID = 'config/setChainId',\n}\n\nexport const setChainIdAction = createAction(CONFIG_ACTIONS.SET_CHAIN_ID)\n","import { createAction } from 'redux-actions'\n\nexport const ADD_CURRENT_SAFE_ADDRESS = 'ADD_CURRENT_SAFE_ADDRESS'\n\nconst addCurrentSafeAddress = createAction(ADD_CURRENT_SAFE_ADDRESS)\n\nexport default addCurrentSafeAddress\n","import { TransactionListItem, Transaction, MultisigExecutionInfo } from '@gnosis.pm/safe-react-gateway-sdk'\n\nimport { getNotificationsFromTxType } from 'src/logic/notifications'\nimport { isTransactionSummary, LocalTransactionStatus } from 'src/logic/safe/store/models/types/gateway.d'\nimport { HistoryPayload } from 'src/logic/safe/store/reducer/gatewayTransactions'\nimport { TX_NOTIFICATION_TYPES } from 'src/logic/safe/transactions'\nimport { SafesMap } from 'src/logic/safe/store/reducer/types/safe'\nimport { Notification } from 'src/logic/notifications/notificationTypes'\nimport { getPrefixedSafeAddressSlug, SAFE_ADDRESS_SLUG, SAFE_ROUTES, TRANSACTION_ID_SLUG } from 'src/routes/routes'\nimport { generatePath } from 'react-router-dom'\n\nlet nonce: number | undefined\n\nexport const setNonce = (newNonce: typeof nonce): void => {\n nonce = newNonce\n}\n\nexport const getNotification = (\n { safeAddress, values }: HistoryPayload,\n userAddress: string,\n safes: SafesMap,\n shortName: string,\n): undefined | Notification => {\n const currentSafe = safes.get(safeAddress)\n\n // no notification if not in the current safe or not connected\n if (!currentSafe || !userAddress) {\n return\n }\n\n // if we have a nonce, then we have a tx that is about to be executed\n if (nonce !== undefined) {\n const executedTx = values\n .filter(isTransactionSummary)\n .map((item: TransactionListItem) => (item as Transaction).transaction)\n .find((transaction) => (transaction.executionInfo as MultisigExecutionInfo)?.nonce === nonce)\n\n // transaction that was pending, was moved into history\n // that is: it was executed\n if (executedTx !== undefined) {\n const notificationsQueue = getNotificationsFromTxType(TX_NOTIFICATION_TYPES.STANDARD_TX)\n const notification =\n executedTx.txStatus === LocalTransactionStatus.FAILED\n ? notificationsQueue.afterExecutionError\n : notificationsQueue.afterExecution.noMoreConfirmationsNeeded\n\n // reset nonce value\n setNonce(undefined)\n\n const to = generatePath(SAFE_ROUTES.TRANSACTIONS_SINGULAR, {\n [SAFE_ADDRESS_SLUG]: getPrefixedSafeAddressSlug({ safeAddress, shortName }),\n [TRANSACTION_ID_SLUG]: executedTx.id,\n })\n\n return { ...notification, link: { title: 'View Transaction', to } }\n }\n }\n}\n","import { createContext, ReactElement, ReactNode, useState } from 'react'\n\nexport const TxHoverContext = createContext<{\n activeHover?: string\n setActiveHover: (activeHover?: string) => void\n}>({\n activeHover: undefined,\n setActiveHover: () => {},\n})\n\nexport const TxHoverProvider = ({ children }: { children: ReactNode }): ReactElement => {\n const [activeHover, setActiveHover] = useState()\n\n return {children}\n}\n","import { withStyles, Theme, Tooltip as MuiTooltip } from '@material-ui/core'\n\n// Tooltip doesn't accept a className, preventing use of `styled-components`\nexport const Tooltip = withStyles(({ palette }: Theme) => ({\n arrow: {\n '&::before': {\n backgroundColor: palette.common.white,\n boxShadow: '1px 2px 10px rgba(40, 54, 61, 0.18)',\n },\n },\n tooltip: {\n color: palette.common.black,\n backgroundColor: palette.common.white,\n borderRadius: '8px',\n boxShadow: '1px 2px 10px rgba(40, 54, 61, 0.18)',\n fontSize: '14px',\n padding: '16px',\n lineHeight: 'normal',\n },\n}))(MuiTooltip)\n","import { createContext, ReactElement, ReactNode, useCallback, useRef, useState } from 'react'\nimport { useDispatch } from 'react-redux'\n\nimport { fetchTransactionDetails } from 'src/logic/safe/store/actions/fetchTransactionDetails'\n\nexport type ActionType = 'cancel' | 'confirm' | 'execute' | 'none'\n\nexport type SelectedAction = {\n selectedAction: {\n actionSelected: ActionType\n transactionId: string\n }\n selectAction: (args: SelectedAction['selectedAction']) => void\n}\n\nexport const TransactionActionStateContext = createContext({\n selectedAction: {\n actionSelected: 'none',\n transactionId: '',\n },\n selectAction: () => {},\n})\n\nexport const TxActionProvider = ({ children }: { children: ReactNode }): ReactElement => {\n const dispatch = useRef(useDispatch())\n const [selectedAction, setSelectedAction] = useState({\n actionSelected: 'none',\n transactionId: '',\n })\n\n const selectAction = useCallback(({ actionSelected, transactionId }: SelectedAction['selectedAction']) => {\n if (transactionId) {\n dispatch.current(fetchTransactionDetails({ transactionId }))\n }\n\n setSelectedAction({ actionSelected, transactionId })\n }, [])\n\n return (\n \n {children}\n \n )\n}\n","import { createContext, ReactElement, ReactNode, useState } from 'react'\n\nexport const BatchExecuteHoverContext = createContext<{\n activeHover?: string[]\n setActiveHover: (activeHover?: string[]) => void\n}>({\n activeHover: undefined,\n setActiveHover: () => {},\n})\n\n// Used for highlighting transactions that will be included when executing them as a batch\nexport const BatchExecuteHoverProvider = ({ children }: { children: ReactNode }): ReactElement => {\n const [activeHover, setActiveHover] = useState()\n\n return (\n \n {children}\n \n )\n}\n","import { ThunkDispatch } from 'redux-thunk'\nimport { AnyAction } from 'redux'\n\nimport {\n addHistoryTransactions,\n addQueuedTransactions,\n} from 'src/logic/safe/store/actions/transactions/gatewayTransactions'\nimport { loadHistoryTransactions, loadQueuedTransactions } from './loadGatewayTransactions'\nimport { AppReduxState } from 'src/store'\nimport { history } from 'src/routes/routes'\nimport { isTxFilter } from 'src/routes/safe/components/Transactions/TxList/Filter/utils'\n\nexport default (chainId: string, safeAddress: string) =>\n async (dispatch: ThunkDispatch): Promise => {\n const loadHistory = async () => {\n try {\n const query = Object.fromEntries(new URLSearchParams(history.location.search))\n const filter = isTxFilter(query) ? query : undefined\n const values = await loadHistoryTransactions(safeAddress, filter)\n dispatch(addHistoryTransactions({ chainId, safeAddress, values }))\n } catch (e) {\n e.log()\n }\n }\n\n const loadQueue = async () => {\n try {\n const values = await loadQueuedTransactions(safeAddress)\n dispatch(addQueuedTransactions({ chainId, safeAddress, values }))\n } catch (e) {\n e.log()\n }\n }\n\n await Promise.all([loadHistory(), loadQueue()])\n }\n","import * as React from 'react'\nimport Dot from '@material-ui/icons/FiberManualRecord'\nimport { getChainById } from 'src/config'\nimport { ChainId } from 'src/config/chain.d'\n\ntype Props = {\n networkId: ChainId\n className?: string\n}\n\nexport const CircleDot = (props: Props): React.ReactElement => {\n const { theme } = getChainById(props.networkId)\n\n return \n}\n","import React from 'react'\nimport styled from 'styled-components'\n\nimport { CircleDot } from 'src/walliro/containers/AppLayout/Header/CircleDot'\nimport { getChainById } from 'src/config'\nimport { ChainId } from 'src/config/chain.d'\n\ninterface Props {\n chainId: ChainId\n hideCircle?: boolean\n}\n\nconst Wrapper = styled.span`\n & > svg {\n font-size: 1.08em;\n vertical-align: text-bottom;\n margin-right: 0.15em;\n }\n`\n\nconst ChainIndicator = ({ chainId, hideCircle }: Props): React.ReactElement => {\n return (\n \n {!hideCircle && }\n {getChainById(chainId).chainName}\n \n )\n}\n\nexport default ChainIndicator\n","import { CHAIN_ID } from 'src/config/chain.d'\n\nexport const APP_ENV = process.env.REACT_APP_ENV\nexport const NODE_ENV = process.env.NODE_ENV\nexport const IS_PRODUCTION = APP_ENV === 'production'\nexport const DEFAULT_CHAIN_ID =\n process.env.REACT_APP_DEFAULT_CHAIN_ID || (IS_PRODUCTION ? CHAIN_ID.ETHEREUM : CHAIN_ID.RINKEBY)\nexport const PUBLIC_URL = process.env.PUBLIC_URL\nexport const TX_SERVICE_VERSION = '1'\nexport const INTERCOM_ID = IS_PRODUCTION ? process.env.REACT_APP_INTERCOM_ID : 'plssl1fl'\nexport const BEAMER_ID = IS_PRODUCTION ? process.env.REACT_APP_BEAMER_ID : 'ehlRMhQi41258'\nexport const SENTRY_DSN = process.env.REACT_APP_SENTRY_DSN || ''\nexport const PORTIS_ID = process.env.REACT_APP_PORTIS_ID ?? '852b763d-f28b-4463-80cb-846d7ec5806b'\nexport const FORTMATIC_KEY = process.env.REACT_APP_FORTMATIC_KEY ?? 'pk_test_CAD437AA29BE0A40'\nexport const INFURA_TOKEN = process.env.REACT_APP_INFURA_TOKEN || ''\nexport const SAFE_APPS_RPC_TOKEN = process.env.REACT_APP_SAFE_APPS_RPC_INFURA_TOKEN || ''\nexport const LATEST_SAFE_VERSION = process.env.REACT_APP_LATEST_SAFE_VERSION || '1.3.0'\nexport const APP_VERSION = process.env.REACT_APP_APP_VERSION || 'not-defined'\nexport const COLLECTIBLES_SOURCE = process.env.REACT_APP_COLLECTIBLES_SOURCE || 'Gnosis'\nexport const SAFE_POLLING_INTERVAL = process.env.NODE_ENV === 'test' ? 4500 : 15000\nexport const ETHERSCAN_API_KEY = process.env.REACT_APP_ETHERSCAN_API_KEY || ''\nexport const ETHGASSTATION_API_KEY = process.env.REACT_APP_ETHGASSTATION_API_KEY\nexport const IPFS_GATEWAY = process.env.REACT_APP_IPFS_GATEWAY\nexport const WC_BRIDGE = process.env.REACT_APP_WC_BRIDGE || 'https://safe-walletconnect.gnosis.io/'\n\nexport const DEMO_SAFE_MAINNET = '0xfF501B324DC6d78dC9F983f140B9211c3EdB4dc7'\n\n// Google Tag Manager\nexport const GOOGLE_TAG_MANAGER_ID = process.env.REACT_APP_GOOGLE_TAG_MANAGER_ID || ''\nexport const GOOGLE_TAG_MANAGER_AUTH_LIVE = process.env.REACT_APP_GOOGLE_TAG_MANAGER_LIVE_AUTH || ''\nexport const GOOGLE_TAG_MANAGER_AUTH_LATEST = process.env.REACT_APP_GOOGLE_TAG_MANAGER_LATEST_AUTH || ''\nexport const GOOGLE_TAG_MANAGER_DEVELOPMENT_AUTH = process.env.REACT_APP_GOOGLE_TAG_MANAGER_DEVELOPMENT_AUTH || ''\n\n// Simulation\n// api docs: https://www.notion.so/Simulate-API-Documentation-6f7009fe6d1a48c999ffeb7941efc104\nexport const TENDERLY_SIMULATE_ENDPOINT_URL = process.env.REACT_APP_TENDERLY_SIMULATE_ENDPOINT_URL || ''\nexport const TENDERLY_PROJECT_NAME = process.env.REACT_APP_TENDERLY_PROJECT_NAME || ''\nexport const TENDERLY_ORG_NAME = process.env.REACT_APP_TENDERLY_ORG_NAME || ''\n\n// Cypress tests\nexport const E2E_MNEMONIC = process.env.REACT_APP_E2E_MNEMONIC || ''\n\n// localStorage-related constants\nexport const LS_NAMESPACE = 'SAFE'\nexport const LS_SEPARATOR = '__'\nexport const LS_USE_PROD_CGW = 'useProdGateway'\n\n// For debugging on dev\nconst isProdGateway = () => {\n try {\n return localStorage.getItem(`${LS_NAMESPACE}${LS_SEPARATOR}${LS_USE_PROD_CGW}`) === 'true'\n } catch (e) {\n return false\n }\n}\n\nexport const GATEWAY_URL =\n process.env.REACT_APP_GATEWAY_URL ||\n (IS_PRODUCTION || isProdGateway() ? 'https://safe-client.gnosis.io' : 'https://safe-client.staging.gnosisdev.com')\n// export const GATEWAY_URL =\n// process.env.REACT_APP_GATEWAY_URL ||\n// (IS_PRODUCTION || isProdGateway() ? 'https://gateway.walliro.com/' : 'https://gateway.walliro.com/')\n","import { FEATURES } from '@gnosis.pm/safe-react-gateway-sdk'\nimport { Record, RecordOf } from 'immutable'\nimport { ChainId } from 'src/config/chain.d'\n\nimport { BalanceRecord } from 'src/logic/tokens/store/actions/fetchSafeTokens'\nimport { AddressEx } from '@gnosis.pm/safe-react-gateway-sdk/dist/types/common'\n\nexport type SafeOwner = string\n\nexport type ModulePair = [\n // previous module\n string,\n // module\n string,\n]\n\nexport type SpendingLimit = {\n delegate: string\n token: string\n amount: string\n spent: string\n resetTimeMin: string\n lastResetMin: string\n nonce: string\n}\n\nexport type SafeRecordProps = {\n address: string\n chainId?: ChainId\n threshold: number\n ethBalance: string\n totalFiatBalance: string\n owners: SafeOwner[]\n modules?: ModulePair[] | null\n spendingLimits?: SpendingLimit[] | null\n balances: BalanceRecord[]\n implementation: AddressEx\n loaded: boolean\n nonce: number\n recurringUser?: boolean\n currentVersion: string\n needsUpdate: boolean\n featuresEnabled: FEATURES[]\n loadedViaUrl: boolean\n guard: string\n collectiblesTag: string\n txQueuedTag: string\n txHistoryTag: string\n}\n\n/**\n * Create a safe record defaulting to these values\n */\nconst makeSafe = Record({\n address: '',\n chainId: undefined,\n threshold: 0,\n ethBalance: '0',\n totalFiatBalance: '0',\n owners: [],\n modules: [],\n spendingLimits: [],\n balances: [],\n implementation: {\n value: '',\n name: null,\n logoUri: null,\n },\n loaded: false,\n nonce: 0,\n recurringUser: undefined,\n currentVersion: '',\n needsUpdate: false,\n featuresEnabled: [],\n loadedViaUrl: true,\n guard: '',\n collectiblesTag: '0',\n txQueuedTag: '0',\n txHistoryTag: '0',\n})\n\nexport type SafeRecord = RecordOf\n\nexport default makeSafe\n","import { Action, handleActions } from 'redux-actions'\n\nimport { LOAD_CURRENT_SESSION } from 'src/logic/currentSession/store/actions/loadCurrentSession'\nimport { UPDATE_VIEWED_SAFES } from 'src/logic/currentSession/store/actions/updateViewedSafes'\nimport { CLEAR_CURRENT_SESSION } from 'src/logic/currentSession/store/actions/clearCurrentSession'\nimport { saveCurrentSessionToStorage } from 'src/logic/currentSession/utils'\nimport { REMOVE_VIEWED_SAFE } from '../actions/removeViewedSafe'\nimport { ADD_CURRENT_SAFE_ADDRESS } from 'src/logic/currentSession/store/actions/addCurrentSafeAddress'\nimport { ADD_CURRENT_SHORT_NAME } from '../actions/addCurrentShortName'\n\nexport const CURRENT_SESSION_REDUCER_ID = 'currentSession'\nconst MAX_VIEWED_SAFES = 10\n\nexport type CurrentSessionState = {\n viewedSafes: string[]\n currentSafeAddress: string\n currentShortName: string\n restored: boolean\n}\n\nexport const initialState = {\n viewedSafes: [],\n currentSafeAddress: '',\n currentShortName: '',\n restored: false,\n}\n\ntype CurrentSessionPayloads = CurrentSessionState | string\n\nconst currentSessionReducer = handleActions(\n {\n [LOAD_CURRENT_SESSION]: (state = initialState, action: Action) => ({\n ...state,\n ...action.payload,\n restored: true,\n }),\n [UPDATE_VIEWED_SAFES]: (state, action: Action) => {\n const safeAddress = action.payload\n const viewedSafes = state.viewedSafes.filter((item) => item !== safeAddress)\n const newState = {\n ...state,\n viewedSafes: [safeAddress].concat(viewedSafes).slice(0, MAX_VIEWED_SAFES),\n }\n\n saveCurrentSessionToStorage(newState)\n\n return newState\n },\n [REMOVE_VIEWED_SAFE]: (state, action: Action) => {\n const safeAddress = action.payload\n const newState = {\n ...state,\n viewedSafes: state.viewedSafes.filter((item) => item !== safeAddress),\n }\n\n saveCurrentSessionToStorage(newState)\n\n return newState\n },\n [CLEAR_CURRENT_SESSION]: () => {\n return initialState\n },\n [ADD_CURRENT_SHORT_NAME]: (state, action: Action) => {\n const shortName = action.payload\n const newState = {\n ...state,\n currentShortName: shortName,\n }\n\n return newState\n },\n [ADD_CURRENT_SAFE_ADDRESS]: (state, action: Action) => {\n const safeAddress = action.payload\n const newState = {\n ...state,\n currentSafeAddress: safeAddress,\n }\n\n return newState\n },\n },\n initialState,\n)\n\nexport default currentSessionReducer\n","import { Action, handleActions } from 'redux-actions'\nimport uniqWith from 'lodash/uniqWith'\n\nimport { AddressBookEntry, AddressBookState } from 'src/logic/addressBook/model/addressBook'\nimport { ADDRESS_BOOK_ACTIONS } from 'src/logic/addressBook/store/actions'\nimport { getEntryIndex, hasSameAddressAndChainId, isValidAddressBookName } from 'src/logic/addressBook/utils'\nimport { textShortener } from 'src/utils/strings'\nimport { isValidAddress } from 'src/utils/isValidAddress'\nimport { checksumAddress } from 'src/utils/checksumAddress'\n\nexport const ADDRESS_BOOK_REDUCER_ID = 'addressBook'\n\nexport const initialAddressBookState: AddressBookState = []\n\ntype Payloads = AddressBookEntry | AddressBookState\n\nexport const getAddressBookFallbackName = (address: string): string =>\n textShortener({ charsStart: 6, charsEnd: 4 })(address)\n\nexport const batchLoadEntries = (state: AddressBookState, action: Action): AddressBookState => {\n const newState = [...state]\n // We check that name exist before trimming\n const addressBookEntries = action.payload.map((entry) => ({\n ...entry,\n address: checksumAddress(entry.address) || entry.address,\n name: entry.name ? entry.name.trim() : getAddressBookFallbackName(entry.address),\n }))\n\n addressBookEntries\n .filter(({ address, name }) => {\n const isValid = isValidAddress(address) && isValidAddressBookName(name)\n\n if (!isValid) {\n console.warn(`We are unable to import the entry for ${name} (${address}) as it is invalid.`)\n }\n\n return isValid\n })\n .forEach((addressBookEntry) => {\n const entryIndex = getEntryIndex(newState, addressBookEntry)\n\n if (entryIndex >= 0) {\n // update\n newState[entryIndex] = addressBookEntry\n } else {\n // add\n newState.push(addressBookEntry)\n }\n })\n\n // filter out potential duplicates in the store\n return uniqWith(newState, hasSameAddressAndChainId)\n}\n\nconst addressBookReducer = handleActions(\n {\n [ADDRESS_BOOK_ACTIONS.ADD_OR_UPDATE]: (state, action: Action) => {\n if (!action.payload.address) return state\n\n const { address, name } = action.payload\n\n const newState = [...state]\n const addressBookEntry = { ...action.payload, name: name.trim() || getAddressBookFallbackName(address) }\n const entryIndex = getEntryIndex(newState, addressBookEntry)\n\n // update\n if (entryIndex >= 0) {\n newState[entryIndex] = addressBookEntry\n return newState\n }\n\n // add\n return [...newState, addressBookEntry]\n },\n [ADDRESS_BOOK_ACTIONS.REMOVE]: (state, action: Action) => {\n const newState = [...state]\n const addressBookEntry = action.payload\n\n const entryIndex = getEntryIndex(newState, addressBookEntry)\n\n if (entryIndex >= 0) {\n newState.splice(entryIndex, 1)\n return newState\n }\n\n return newState\n },\n [ADDRESS_BOOK_ACTIONS.SAFE_LOAD]: batchLoadEntries,\n [ADDRESS_BOOK_ACTIONS.IMPORT]: batchLoadEntries,\n [ADDRESS_BOOK_ACTIONS.SYNC]: (_, action: Action): AddressBookState => action.payload,\n [ADDRESS_BOOK_ACTIONS.FIX_EMPTY_NAMES]: (state) => {\n if (state.every(({ name }) => Boolean(name))) {\n return state\n }\n return state.map((entry) => ({\n ...entry,\n name: entry.name || getAddressBookFallbackName(entry.address),\n }))\n },\n },\n initialAddressBookState,\n)\n\nexport default addressBookReducer\n","import { GTM_EVENT } from 'src/utils/googleTagManager'\nimport { addEventCategory } from 'src/utils/events/utils'\n\nconst WALLET = {\n CONNECT: {\n event: GTM_EVENT.META,\n action: 'Connect wallet',\n },\n OFF_CHAIN_SIGNATURE: {\n event: GTM_EVENT.META,\n action: 'Off-chain signature',\n },\n ON_CHAIN_INTERACTION: {\n event: GTM_EVENT.META,\n action: 'On-chain interaction',\n },\n}\n\nconst WALLET_CATEGORY = 'wallet'\nexport const WALLET_EVENTS = addEventCategory(WALLET, WALLET_CATEGORY)\n","import axios from 'axios'\nimport memoize from 'lodash/memoize'\n\nimport { getContentFromENS } from 'src/logic/wallets/getWeb3'\nimport appsIconSvg from 'src/assets/icons/apps.svg'\nimport { FETCH_STATUS } from 'src/utils/requests'\nimport { SafeAppAccessPolicyTypes } from '@gnosis.pm/safe-react-gateway-sdk'\n\nimport { SafeApp } from './types'\n\ntype AppManifestIcon = {\n src: string\n sizes: string\n type?: string\n purpose?: string\n}\n\nexport interface AppManifest {\n name: string\n iconPath?: string\n description: string\n icons?: AppManifestIcon[]\n providedBy: string\n}\n\nexport const APPS_STORAGE_KEY = 'APPS_STORAGE_KEY'\nexport const PINNED_SAFE_APP_IDS = 'PINNED_SAFE_APP_IDS'\nexport const EMPTY_SAFE_APP = 'unknown'\nconst MIN_ICON_WIDTH = 128\nconst MANIFEST_ERROR_MESSAGE = 'Manifest does not fulfil the required structure.'\n\nconst removeLastTrailingSlash = (url: string): string => {\n return url.replace(/\\/+$/, '')\n}\n\nexport const isSameUrl = (url1: string, url2: string): boolean => {\n return removeLastTrailingSlash(url1) === removeLastTrailingSlash(url2)\n}\n\nexport const getAppInfoFromOrigin = (origin: string): { url: string; name: string } | null => {\n try {\n return JSON.parse(origin)\n } catch (error) {\n console.error(`Impossible to parse TX from origin: ${origin}`)\n return null\n }\n}\n\nexport const isAppManifestValid = (appInfo: AppManifest): boolean =>\n // `appInfo` exists and `name` exists\n !!appInfo?.name &&\n // if `name` exists is not 'unknown'\n appInfo.name !== EMPTY_SAFE_APP &&\n // `description` exists\n !!appInfo.description\n\nexport const getEmptySafeApp = (url = ''): SafeApp => {\n return {\n id: Math.random().toString(),\n url,\n name: EMPTY_SAFE_APP,\n iconUrl: appsIconSvg,\n description: '',\n fetchStatus: FETCH_STATUS.LOADING,\n chainIds: [],\n accessControl: {\n type: SafeAppAccessPolicyTypes.NoRestrictions,\n },\n tags: [],\n }\n}\n\nexport const getAppInfoFromUrl = memoize(async (appUrl: string, validateManifest = true): Promise => {\n let res = {\n ...getEmptySafeApp(),\n error: true,\n loadingStatus: FETCH_STATUS.ERROR,\n }\n\n if (!appUrl?.length) {\n return res\n }\n\n res.url = appUrl.trim()\n const noTrailingSlashUrl = removeLastTrailingSlash(res.url)\n\n let appInfo: AppManifest | undefined\n try {\n const response = await axios.get(`${noTrailingSlashUrl}/manifest.json`, { timeout: 5_000 })\n appInfo = response.data\n } catch (error) {\n throw Error('Failed to fetch app manifest')\n }\n\n // verify imported app fulfil safe requirements\n if (!appInfo || !isAppManifestValid(appInfo)) {\n if (validateManifest) {\n throw Error(`App ${MANIFEST_ERROR_MESSAGE.toLocaleLowerCase()}`)\n } else {\n console.error(`${appInfo.name || 'Walliro App'}: ${MANIFEST_ERROR_MESSAGE}`)\n }\n }\n\n // the DB origin field has a limit of 100 characters\n const originFieldSize = 200\n const jsonDataLength = 20\n const remainingSpace = originFieldSize - res.url.length - jsonDataLength\n\n const appInfoData = {\n name: appInfo.name,\n iconPath: appInfo.icons?.length ? getAppIcon(appInfo.icons) : appInfo.iconPath,\n description: appInfo.description,\n providedBy: appInfo.providedBy,\n }\n\n res = {\n ...res,\n ...appInfoData,\n id: JSON.stringify({ url: res.url, name: appInfo.name.substring(0, remainingSpace) }),\n error: false,\n loadingStatus: FETCH_STATUS.SUCCESS,\n }\n\n const concatenatedImgPath = `${noTrailingSlashUrl}/${appInfoData.iconPath}`\n if (await canLoadAppImage(concatenatedImgPath)) {\n res.iconUrl = concatenatedImgPath\n }\n\n return res\n})\n\nexport const getAppIcon = (icons: AppManifestIcon[]): string => {\n const svgIcon = icons.find((icon) => icon?.sizes?.includes('any') || icon?.type === 'image/svg+xml')\n\n if (svgIcon) {\n return svgIcon.src\n }\n\n for (const icon of icons) {\n for (const size of icon.sizes.split(' ')) {\n if (Number(size?.split('x')[0]) >= MIN_ICON_WIDTH) {\n return icon.src\n }\n }\n }\n\n return icons[0].src || ''\n}\n\nexport const getIpfsLinkFromEns = memoize(async (name: string): Promise => {\n try {\n const content = await getContentFromENS(name)\n if (content && content.protocolType === 'ipfs') {\n return `${process.env.REACT_APP_IPFS_GATEWAY}/${content.decoded}/`\n }\n } catch (error) {\n console.error(error)\n return\n }\n})\n\nexport const uniqueApp =\n (appList: SafeApp[]) =>\n (url: string): string | undefined => {\n const newUrl = new URL(url)\n const exists = appList.some((a) => {\n try {\n const currentUrl = new URL(a.url)\n return currentUrl.href === newUrl.href\n } catch (error) {\n console.error('There was a problem trying to validate the URL existence.', error.message)\n return false\n }\n })\n return exists ? 'This app is already registered.' : undefined\n }\n\nconst canLoadAppImage = (path: string, timeout = 10000) =>\n new Promise(function (resolve) {\n try {\n const image = new Image()\n image.src = path\n image.addEventListener('load', () => resolve(true))\n image.addEventListener('error', () => resolve(false))\n\n setTimeout(() => resolve(false), timeout)\n } catch (err) {\n console.error(err)\n resolve(false)\n }\n })\n\n// Some apps still need chain name, as they didn't update to chainId based SDK versions\n// With naming changing in the config service some names aren't the expected ones\n// Ex: Ethereum -> MAINNET, Gnosis Chain -> XDAI\nexport const getLegacyChainName = (chainName: string, chainId: string): string => {\n let network = chainName\n switch (chainId) {\n case '1':\n network = 'MAINNET'\n break\n case '100':\n network = 'XDAI'\n }\n\n return network\n}\n","import { List } from 'immutable'\nimport { SafeRecord } from 'src/logic/safe/store/models/safe'\nimport { sameString } from 'src/utils/strings'\nimport { EMPTY_DATA } from 'src/logic/wallets/ethTransactions'\nexport const ZERO_ADDRESS = '0x0000000000000000000000000000000000000000'\n\nexport const sameAddress = (firstAddress: string | undefined, secondAddress: string | undefined): boolean => {\n return sameString(firstAddress, secondAddress)\n}\n\nexport const isEmptyAddress = (address: string | undefined): boolean => {\n if (!address) return true\n return sameAddress(address, EMPTY_DATA) || sameAddress(address, ZERO_ADDRESS)\n}\n\nexport const shortVersionOf = (value: string, cut: number): string => {\n if (!value) {\n return 'Unknown'\n }\n\n const final = value.length - cut\n if (value.length <= cut) {\n return value\n }\n\n return `${value.substring(0, cut)}...${value.substring(final)}`\n}\n\nexport const isUserAnOwner = (safe: SafeRecord, userAccount: string): boolean => {\n if (!safe) {\n return false\n }\n\n if (!userAccount) {\n return false\n }\n\n const { owners } = safe\n if (!owners) {\n return false\n }\n\n return owners.find((address) => sameAddress(address, userAccount)) !== undefined\n}\n\nexport const isUserAnOwnerOfAnySafe = (safes: List | SafeRecord[], userAccount: string): boolean =>\n safes.some((safe: SafeRecord) => isUserAnOwner(safe, userAccount))\n\nexport const isValidEnsName = (name: string): boolean => /^([\\w-]+\\.)+(eth|test|xyz|luxe|ewc)$/.test(name)\n\nexport const isValidCryptoDomainName = (name: string): boolean =>\n /^([\\w-]+\\.)+(crypto|nft|x|wallet|bitcoin|dao|888|coin)$/.test(name)\n","import { handleActions } from 'redux-actions'\n\nimport { ADD_NFT_ASSETS, ADD_NFT_TOKENS, SET_NFT_LOADED } from 'src/logic/collectibles/store/actions/addCollectibles'\nimport { NFTAssets, NFTTokens, NFTTokensStore } from 'src/logic/collectibles/sources/collectibles'\nimport { Action } from 'redux-actions'\n\nexport const NFT_ASSETS_REDUCER_ID = 'nftAssets'\nexport const NFT_TOKENS_REDUCER_ID = 'nftTokens'\n\ntype NFTAssetsPayload = { nftAssets: NFTAssets }\n\nexport const nftAssetReducer = handleActions(\n {\n [ADD_NFT_ASSETS]: (state, action) => {\n const { nftAssets } = action.payload\n\n return nftAssets\n },\n },\n {},\n)\n\ntype AddNftTokensPayload = { nftTokens: NFTTokens }\ntype SetNftLoadedPayload = boolean\ntype NFTTokensPayload = AddNftTokensPayload | SetNftLoadedPayload\n\nexport const nftTokensDefaultState: NFTTokensStore = {\n items: [],\n loaded: false,\n}\n\nexport const nftTokensReducer = handleActions(\n {\n [ADD_NFT_TOKENS]: (state, action: Action) => {\n const { nftTokens } = action.payload\n\n return {\n ...state,\n items: nftTokens,\n }\n },\n\n [SET_NFT_LOADED]: (state, action: Action) => {\n const loaded = action.payload\n return {\n ...state,\n loaded,\n }\n },\n },\n nftTokensDefaultState,\n)\n","import Storage from './Storage'\n\nconst local = new Storage(window.localStorage)\n\nexport default local\n","import classNames from 'classnames/bind'\nimport * as React from 'react'\nimport { Link } from 'react-router-dom'\n\nimport styles from './index.module.scss'\n\nimport { capitalize } from 'src/utils/css'\n\nconst cx = classNames.bind(styles)\n\nconst GnosisLink = ({ children, className, color, innerRef, padding, to, ...props }: any) => {\n const internal = /^\\/(?!\\/)/.test(to)\n const classes = cx(styles.link, color || 'regular', padding ? capitalize(padding, 'padding') : undefined, className)\n const LinkElement = internal ? Link : 'a'\n const refs: any = {}\n if (internal) {\n // To avoid warning about React not recognizing the prop innerRef on native element (a) if the link is external\n refs.innerRef = innerRef\n }\n\n return (\n \n {children}\n \n )\n}\n\n// https://material-ui.com/guides/composition/#caveat-with-refs\nconst LinkWithRef: any = React.forwardRef((props, ref) => )\n\nexport default LinkWithRef\n","import { Errors, logError } from 'src/logic/exceptions/CodedException'\nimport { checkAddressChecksum, toChecksumAddress } from 'web3-utils'\nimport { isValidAddress } from './isValidAddress'\n\nexport const checksumAddress = (address: string): string => {\n if (!isValidAddress(address)) {\n return ''\n }\n\n try {\n return toChecksumAddress(address)\n } catch (err) {\n logError(Errors._102, err.message)\n return ''\n }\n}\n\nexport const isChecksumAddress = (address?: string): boolean => {\n if (address) {\n return checkAddressChecksum(address)\n }\n\n return false\n}\n","import { Action, handleActions } from 'redux-actions'\n\nimport { ChainId } from 'src/config/chain.d'\nimport { PROVIDER_ACTIONS } from 'src/logic/wallets/store/actions'\n\nexport type ProvidersState = {\n name: string\n network: ChainId\n account: string\n available: boolean\n ensDomain: string\n loaded: boolean\n}\n\nexport type ProviderNamePayload = ProvidersState['name']\nexport type ProviderNetworkPayload = ProvidersState['network']\nexport type ProviderAccountPayload = ProvidersState['account']\nexport type ProviderEnsPayload = ProvidersState['ensDomain']\n\nexport type ProviderPayloads =\n | ProviderNamePayload\n | ProviderAccountPayload\n | ProviderNetworkPayload\n | ProviderEnsPayload\n\nconst initialProviderState: ProvidersState = {\n name: '',\n account: '',\n network: '',\n ensDomain: '',\n available: false,\n loaded: false,\n}\n\nexport const PROVIDER_REDUCER_ID = 'providers'\n\nconst providerFactory = (provider: ProvidersState) => {\n const { name, account, network } = provider\n return {\n ...provider,\n available: !!account,\n loaded: !!account && !!name && !!network,\n }\n}\n\nconst providerReducer = handleActions(\n {\n [PROVIDER_ACTIONS.WALLET_NAME]: (state: ProvidersState, { payload }: Action) =>\n providerFactory({\n ...state,\n name: payload,\n }),\n [PROVIDER_ACTIONS.NETWORK]: (state: ProvidersState, { payload }: Action) =>\n providerFactory({\n ...state,\n network: payload,\n }),\n [PROVIDER_ACTIONS.ACCOUNT]: (state: ProvidersState, { payload }: Action) =>\n providerFactory({\n ...state,\n account: payload,\n }),\n [PROVIDER_ACTIONS.ENS]: (state: ProvidersState, { payload }: Action) =>\n providerFactory({\n ...state,\n ensDomain: payload,\n }),\n },\n initialProviderState,\n)\n\nexport default providerReducer\n","import { loadFromStorage, saveToStorage } from 'src/utils/storage'\nimport { CurrentSessionState } from 'src/logic/currentSession/store/reducer/currentSession'\n\nconst CURRENT_SESSION_STORAGE_KEY = 'CURRENT_SESSION'\n\nexport const getCurrentSessionFromStorage = (): CurrentSessionState | undefined =>\n loadFromStorage(CURRENT_SESSION_STORAGE_KEY)\n\nexport const saveCurrentSessionToStorage = (currentSession: CurrentSessionState): void => {\n saveToStorage(CURRENT_SESSION_STORAGE_KEY, currentSession)\n}\n","import WalletConnectProvider from '@walletconnect/web3-provider'\nimport { IClientMeta, IRPCMap } from '@walletconnect/types'\nimport { WalletModule } from 'bnc-onboard/dist/src/interfaces'\nimport UAParser from 'ua-parser-js'\n\nimport { APP_VERSION, INFURA_TOKEN, PUBLIC_URL, WC_BRIDGE } from 'src/utils/constants'\nimport { ChainId } from 'src/config/chain'\nimport { getRpcServiceUrl } from 'src/config'\nimport { getChains } from 'src/config/cache/chains'\nimport { BLOCK_POLLING_INTERVAL } from '../onboard'\n\n// Modified version of the built in WC module in Onboard v1.35.5\n// https://github.com/blocknative/onboard/blob/release/1.35.5/src/modules/select/wallets/wallet-connect.ts\n\nexport const PAIRING_MODULE_NAME = 'Safe Mobile'\n\nlet client = ''\nconst getClientMeta = (): IClientMeta => {\n // Only instantiate parser if no app or client is set\n if (!client) {\n const parser = new UAParser()\n const browser = parser.getBrowser()\n const os = parser.getOS()\n\n client = `${browser.name} ${browser.major} (${os.name})`\n }\n\n const app = `Safe Web v${APP_VERSION}`\n const logo = `${location.origin}${PUBLIC_URL}/resources/logo_120x120.png`\n\n return {\n name: app,\n description: `${client};${app}`,\n url: 'https://gnosis-safe.io/app',\n icons: [logo],\n }\n}\n\nconst getPairingModule = (chainId: ChainId): WalletModule => {\n const STORAGE_ID = 'SAFE__pairingProvider'\n const clientMeta = getClientMeta()\n\n return {\n name: PAIRING_MODULE_NAME,\n wallet: async ({ resetWalletState }) => {\n const RPC_MAP: IRPCMap = getChains().reduce((map, { chainId, rpcUri }) => {\n return {\n ...map,\n [parseInt(chainId, 10)]: getRpcServiceUrl(rpcUri),\n }\n }, {})\n\n const provider = new WalletConnectProvider({\n bridge: WC_BRIDGE,\n pollingInterval: BLOCK_POLLING_INTERVAL,\n infuraId: INFURA_TOKEN,\n rpc: RPC_MAP,\n chainId: parseInt(chainId, 10),\n storageId: STORAGE_ID,\n qrcode: false, // Don't show QR modal\n clientMeta,\n })\n\n provider.autoRefreshOnNetworkChange = false\n\n // WalletConnect overrides the clientMeta, so we need to set it back(provider.wc as any).clientMeta = clientMeta\n ;(provider.wc as any)._clientMeta = clientMeta\n\n const onDisconnect = () => {\n resetWalletState({ disconnected: true, walletName: PAIRING_MODULE_NAME })\n }\n\n provider.wc.on('disconnect', onDisconnect)\n\n window.addEventListener('unload', onDisconnect, { once: true })\n\n // Establish WC connection\n provider.enable()\n\n return {\n provider,\n interface: {\n address: {\n onChange: (func) => {\n provider.send('eth_accounts').then((accounts: string[]) => accounts[0] && func(accounts[0]))\n provider.on('accountsChanged', (accounts: string[]) => func(accounts[0]))\n },\n },\n network: {\n onChange: (func) => {\n provider.send('eth_chainId').then(func)\n provider.on('chainChanged', func)\n },\n },\n // We never request balance from onboard\n balance: {},\n disconnect: () => {\n // Only disconnect if connected\n if (provider.wc.peerId) {\n provider.disconnect()\n }\n },\n name: PAIRING_MODULE_NAME,\n },\n }\n },\n type: 'sdk',\n desktop: true,\n mobile: false,\n // Must be preferred to position 1st in list (to hide via CSS)\n preferred: true,\n }\n}\n\nexport default getPairingModule\n","import get from 'lodash/get'\nimport cloneDeep from 'lodash/cloneDeep'\nimport { Action, handleActions } from 'redux-actions'\nimport { LabelValue } from '@gnosis.pm/safe-react-gateway-sdk'\n\nimport {\n ADD_HISTORY_TRANSACTIONS,\n ADD_QUEUED_TRANSACTIONS,\n REMOVE_HISTORY_TRANSACTIONS,\n} from 'src/logic/safe/store/actions/transactions/gatewayTransactions'\nimport {\n HistoryGatewayResponse,\n isLabel,\n isMultisigExecutionInfo,\n isTransactionSummary,\n QueuedGatewayResponse,\n StoreStructure,\n Transaction,\n} from 'src/logic/safe/store/models/types/gateway.d'\n\nimport { UPDATE_TRANSACTION_DETAILS } from 'src/logic/safe/store/actions/fetchTransactionDetails'\nimport { getLocalStartOfDate } from 'src/utils/date'\nimport { sameString } from 'src/utils/strings'\nimport { sortObject } from 'src/utils/objects'\nimport { ChainId } from 'src/config/chain.d'\n\nexport const GATEWAY_TRANSACTIONS_ID = 'gatewayTransactions'\n\nexport type GatewayTransactionsState = Record>\n\ntype BasePayload = { chainId: string; safeAddress: string; isTail?: boolean }\n\nexport type HistoryPayload = BasePayload & { values: HistoryGatewayResponse['results'] }\n\nexport type RemoveHistoryPayload = Omit\n\nexport type QueuedPayload = BasePayload & { values: QueuedGatewayResponse['results'] }\n\nexport type TransactionDetailsPayload = {\n chainId: string\n safeAddress: string\n transactionId: string\n value: Transaction['txDetails']\n}\n\ntype Payload = HistoryPayload | RemoveHistoryPayload | QueuedPayload | TransactionDetailsPayload\n\n/**\n * Create a hash map of transactions by nonce.\n * Each nonce maps to one or more transactions (e.g. original tx and a rejection tx).\n */\nconst makeQueueByNonce = (items: QueuedGatewayResponse['results']): Record => {\n return items.reduce((result, item) => {\n if (!(isTransactionSummary(item) && isMultisigExecutionInfo(item.transaction.executionInfo))) return result\n\n const { nonce } = item.transaction.executionInfo\n if (!result[nonce]) result[nonce] = []\n result[nonce].push(item.transaction)\n\n return result\n }, {})\n}\n\nexport const gatewayTransactionsReducer = handleActions(\n {\n // If a historical transaction summary is added, it will either be pushed to the end of the `history` by\n // (start of day) date/once or overwrite the currently existing one in chronologically descending order\n [ADD_HISTORY_TRANSACTIONS]: (state, action: Action) => {\n const { chainId, safeAddress, values, isTail = false } = action.payload\n const newHistory: StoreStructure['history'] = cloneDeep(state[chainId]?.[safeAddress]?.history || {})\n\n values.forEach((value) => {\n if (!isTransactionSummary(value)) {\n // DATE_LABEL is discarded as it's not needed for the current implementation\n return\n }\n\n const transaction = value.transaction\n const startOfDate = getLocalStartOfDate(transaction.timestamp)\n\n if (newHistory[startOfDate] === undefined) {\n newHistory[startOfDate] = []\n }\n\n const txIndex = newHistory[startOfDate].findIndex(({ id }) => sameString(id, transaction.id))\n\n if (txIndex >= 0) {\n newHistory[startOfDate][txIndex] = transaction\n } else {\n newHistory[startOfDate].push(transaction)\n // pushing a newer transaction to the existing list messes the transactions order\n // this happens when most recent transactions are added to the existing txs in the store\n newHistory[startOfDate] = newHistory[startOfDate].sort((a, b) => b.timestamp - a.timestamp)\n }\n })\n\n return {\n // all the safes with their respective states\n ...state,\n // current safe\n [chainId]: {\n [safeAddress]: {\n // keep queued list\n ...state[chainId]?.[safeAddress],\n // extend history list\n history: isTail ? newHistory : sortObject(newHistory, 'desc'),\n },\n },\n }\n },\n\n [REMOVE_HISTORY_TRANSACTIONS]: (state, action: Action<{ chainId: string; safeAddress: string }>) => {\n const { chainId, safeAddress } = action.payload\n return {\n ...state,\n [chainId]: {\n [safeAddress]: {\n ...state[chainId]?.[safeAddress],\n history: {},\n },\n },\n }\n },\n\n // Queue is overwritten completely on every update\n // CGW sends a list of items where some items are LABELS (next and queued),\n // some are CONFLICT_HEADERS (ignored),\n // and some are actual TRANSACTIONS.\n // We split the queue into next and queued by the index of the \"Queued\" LABEL.\n // Then group TRANSACTIONS by their nonces.\n [ADD_QUEUED_TRANSACTIONS]: (state, action: Action) => {\n const { chainId, safeAddress, values } = action.payload\n\n // From the list of TransactionItems, create two sub-lists split by where the \"Queued\" label is.\n // If there's no \"Queued\" label, put all the items into the \"next\" group.\n let nextItems = values\n let queuedItems = values.slice(0, 0)\n const qLabelIndex = values.findIndex((item) => isLabel(item) && item.label === LabelValue.Queued)\n if (qLabelIndex >= 0) {\n nextItems = values.slice(0, qLabelIndex)\n queuedItems = values.slice(qLabelIndex)\n }\n\n return {\n // all the safes with their respective states\n ...state,\n [chainId]: {\n // current safe\n [safeAddress]: {\n // keep history list\n ...state[chainId]?.[safeAddress],\n // overwrite queued lists\n queued: {\n next: makeQueueByNonce(nextItems),\n queued: makeQueueByNonce(queuedItems),\n },\n },\n },\n }\n },\n // Transaction details will be added to existing transaction summaries in the store as they are not\n // part of summaries\n [UPDATE_TRANSACTION_DETAILS]: (state, action: Action) => {\n const { chainId, safeAddress, transactionId, value } = action.payload\n const clonedStoredTxs = cloneDeep(state[chainId]?.[safeAddress]) || {}\n const { queued: newQueued, history: newHistory } = clonedStoredTxs\n\n // get the tx group (it will be `queued.next`, `queued.queued` or `history`)\n txLocationLoop: for (const txLocation of ['queued.next', 'queued.queued', 'history']) {\n const txGroup: StoreStructure['queued']['next' | 'queued'] | StoreStructure['history'] = get(\n clonedStoredTxs,\n txLocation,\n )\n\n if (!txGroup) {\n continue\n }\n\n for (const [timestamp, transactions] of Object.entries(txGroup)) {\n const txIndex = transactions.findIndex(({ id }) => sameString(id, transactionId))\n\n if (txIndex >= 0) {\n txGroup[timestamp][txIndex]['txDetails'] = value\n break txLocationLoop\n }\n }\n }\n\n // update state\n return {\n // all the safes with their respective states\n ...state,\n [chainId]: {\n // current safe\n [safeAddress]: {\n history: newHistory,\n queued: newQueued,\n },\n },\n }\n },\n },\n {},\n)\n\nexport default gatewayTransactionsReducer\n","import { List, Map } from 'immutable'\nimport { Action, handleActions } from 'redux-actions'\n\nimport { ADD_TOKENS } from 'src/logic/tokens/store/actions/addTokens'\nimport { Token } from 'src/logic/tokens/store/model/token'\n\nexport const TOKEN_REDUCER_ID = 'tokens'\n\nexport type TokenState = Map\n\ntype TokensPayload = { tokens: List }\ntype TokenPayload = { token: Token }\ntype Payloads = TokensPayload | TokenPayload\n\nconst tokensReducer = handleActions(\n {\n [ADD_TOKENS]: (state, action: Action) => {\n const { tokens } = action.payload\n\n return state.withMutations((map) => {\n tokens.forEach((token: Token) => {\n map.set(token.address, token)\n })\n })\n },\n },\n Map(),\n)\n\nexport default tokensReducer\n","export default __webpack_public_path__ + \"static/media/custom.6f7b401c.svg\";","import { Operation } from '@gnosis.pm/safe-react-gateway-sdk'\n\nimport { SENTINEL_ADDRESS } from 'src/logic/contracts/safeContracts'\nimport { CreateTransactionArgs } from 'src/logic/safe/store/actions/createTransaction'\nimport { ModulePair } from 'src/logic/safe/store/models/safe'\nimport { TX_NOTIFICATION_TYPES } from 'src/logic/safe/transactions'\nimport { sameAddress } from 'src/logic/wallets/ethAddresses'\nimport { getSafeSDK } from 'src/logic/wallets/getWeb3'\n\n/**\n * Builds a collection of tuples with (prev, module) module addresses\n *\n * The `modules` param, is organized from the most recently added to the oldest.\n *\n * By assuming this, we are able to recreate the linked list that's defined at contract level\n * considering `0x1` (SENTINEL_ADDRESS) address as the list's initial node.\n *\n * Given this scenario, we have a linked list in the form of\n *\n * **`0x1->modules[n]->module[n-1]->module[0]->0x1`**\n *\n * So,\n * - if we want to disable `module[n]`, we need to pass `(module[n], 0x1)` as arguments,\n * - if we want to disable `module[n-1]`, we need to pass `(module[n-1], module[n])`,\n * - ... and so on\n * @param {Array} modules\n * @returns null | Array\n */\nexport const buildModulesLinkedList = (modules: string[]): Array | null => {\n if (modules?.length) {\n return modules.map((moduleAddress, index, modules) => {\n if (index === 0) {\n return [SENTINEL_ADDRESS, moduleAddress]\n }\n return [modules[index - 1], moduleAddress]\n })\n }\n\n // no modules\n return null\n}\n\ntype DisableModuleParams = {\n moduleAddress: string\n safeAddress: string\n safeVersion: string\n connectedWalletAddress: string\n}\n\nexport const getDisableModuleTxData = async ({\n moduleAddress,\n safeAddress,\n safeVersion,\n connectedWalletAddress,\n}: DisableModuleParams): Promise => {\n const sdk = await getSafeSDK(connectedWalletAddress, safeAddress, safeVersion)\n const safeTx = await sdk.getDisableModuleTx(moduleAddress, { safeTxGas: 0 })\n\n return safeTx.data.data\n}\n\ntype EnableModuleParams = {\n moduleAddress: string\n safeAddress: string\n safeVersion: string\n connectedWalletAddress: string\n}\n\nexport const enableModuleTx = async ({\n moduleAddress,\n safeAddress,\n safeVersion,\n connectedWalletAddress,\n}: EnableModuleParams): Promise => {\n const sdk = await getSafeSDK(connectedWalletAddress, safeAddress, safeVersion)\n const safeTx = await sdk.getEnableModuleTx(moduleAddress, { safeTxGas: 0 })\n\n return {\n safeAddress,\n to: safeAddress,\n operation: Operation.CALL,\n valueInWei: '0',\n txData: safeTx.data.data,\n notifiedTransaction: TX_NOTIFICATION_TYPES.SETTINGS_CHANGE_TX,\n }\n}\n\nexport const isModuleEnabled = (modules: string[], moduleAddress: string): boolean => {\n return modules?.some((module) => sameAddress(module, moduleAddress)) ?? false\n}\n","import {\n TenderlySimulatePayload,\n TenderlySimulation,\n} from 'src/routes/safe/components/Transactions/helpers/Simulation/types'\nimport axios from 'axios'\nimport { TENDERLY_ORG_NAME, TENDERLY_PROJECT_NAME, TENDERLY_SIMULATE_ENDPOINT_URL } from 'src/utils/constants'\n\nconst getSimulation = async (tx: TenderlySimulatePayload): Promise => {\n const response = await axios.post(TENDERLY_SIMULATE_ENDPOINT_URL, tx)\n\n return response.data\n}\n\nconst isSimulationEnvSet =\n Boolean(TENDERLY_SIMULATE_ENDPOINT_URL) && Boolean(TENDERLY_ORG_NAME) && Boolean(TENDERLY_PROJECT_NAME)\n\nconst getSimulationLink = (simulationId: string): string => {\n return `https://dashboard.tenderly.co/public/${TENDERLY_ORG_NAME}/${TENDERLY_PROJECT_NAME}/simulator/${simulationId}`\n}\n\nexport { getSimulationLink, getSimulation, isSimulationEnvSet }\n","import { ReactElement } from 'react'\nimport styled from 'styled-components'\nimport { Icon, Link, Text } from '@gnosis.pm/safe-react-components'\nimport { Alert, AlertTitle } from '@material-ui/lab'\nimport { FETCH_STATUS } from 'src/utils/requests'\nimport { TenderlySimulation } from './types'\n\nconst StyledAlert = styled(Alert)`\n align-items: flex-start;\n width: 100%;\n\n &.MuiAlert-standardError {\n background-color: #fff3f5;\n }\n\n &.MuiAlert-standardSuccess {\n background-color: #effaf8;\n }\n\n & .MuiIconButton-root {\n padding: 3px !important;\n }\n`\n\ntype SimulationResultProps = {\n simulationRequestStatus: string\n simulation?: TenderlySimulation\n simulationLink?: string\n requestError?: string\n onClose: () => void\n}\n\nexport const SimulationResult = ({\n simulationRequestStatus,\n simulation,\n simulationLink,\n requestError,\n onClose,\n}: SimulationResultProps): ReactElement | null => {\n const isSimulationFinished =\n simulationRequestStatus === FETCH_STATUS.SUCCESS || simulationRequestStatus === FETCH_STATUS.ERROR\n\n // Loading\n if (!isSimulationFinished) {\n return null\n }\n\n // Error\n if (requestError || !simulation?.simulation.status) {\n return (\n }>\n \n \n Failed\n \n \n\n {requestError ? (\n \n An unexpected error occurred during simulation: {requestError}\n \n ) : (\n \n The transaction failed during the simulation throwing error {simulation?.transaction.error_message}{' '}\n in the contract at {simulation?.transaction.error_info?.address}. Full simulation report is available{' '}\n \n on Tenderly\n \n .\n \n )}\n \n )\n }\n\n // Success\n return (\n } onClose={onClose}>\n \n \n Success\n \n \n\n \n The transaction was successfully simulated. Full simulation report is available{' '}\n \n on Tenderly\n \n .\n \n \n )\n}\n","import { useCallback, useMemo, useState } from 'react'\nimport axios from 'axios'\nimport { TENDERLY_SIMULATE_ENDPOINT_URL } from 'src/utils/constants'\nimport {\n TenderlySimulatePayload,\n TenderlySimulation,\n} from 'src/routes/safe/components/Transactions/helpers/Simulation/types'\nimport { FETCH_STATUS } from 'src/utils/requests'\nimport { getSimulationLink } from 'src/routes/safe/components/Transactions/helpers/Simulation/simulation'\nimport { BaseTransaction } from '@gnosis.pm/safe-apps-sdk'\n\ntype UseSimulationReturn =\n | {\n simulationRequestStatus: FETCH_STATUS.NOT_ASKED | FETCH_STATUS.ERROR | FETCH_STATUS.LOADING\n simulation: undefined\n simulateTransaction: (\n tx: Omit,\n chainId: string,\n safeAddress: string,\n walletAddress: string,\n canExecuteTx: boolean,\n gasLimit: number,\n ) => void\n simulationLink: string\n requestError?: string\n resetSimulation: () => void\n }\n | {\n simulationRequestStatus: FETCH_STATUS.SUCCESS\n simulation: TenderlySimulation\n simulateTransaction: (\n tx: Omit,\n chainId: string,\n safeAddress: string,\n walletAddress: string,\n canExecuteTx: boolean,\n gasLimit: number,\n ) => void\n simulationLink: string\n requestError?: string\n resetSimulation: () => void\n }\n\nexport const useSimulation = (): UseSimulationReturn => {\n const [simulation, setSimulation] = useState()\n const [simulationRequestStatus, setSimulationRequestStatus] = useState(FETCH_STATUS.NOT_ASKED)\n const [requestError, setRequestError] = useState(undefined)\n\n const simulationLink = useMemo(() => getSimulationLink(simulation?.simulation.id || ''), [simulation])\n const resetSimulation = useCallback(() => {\n setSimulationRequestStatus(FETCH_STATUS.NOT_ASKED)\n setRequestError(undefined)\n setSimulation(undefined)\n }, [])\n const simulateTransaction = useCallback(\n async (\n tx: Omit,\n chainId: string,\n safeAddress: string,\n walletAddress: string,\n canExecuteTx: boolean,\n gasLimit: number,\n ) => {\n setSimulationRequestStatus(FETCH_STATUS.LOADING)\n try {\n const simulationPayload: TenderlySimulatePayload = {\n network_id: chainId,\n from: walletAddress,\n to: tx.to,\n input: tx.data,\n gas: gasLimit,\n gas_price: '0',\n state_objects: {\n [safeAddress]: {\n balance: undefined,\n code: undefined,\n /**\n * If the tx can not be executed (i.e. because signatures are missing)\n * we overwrite the threshold of the contract with 1 such that the tx can be executed with only 1 signature.\n * Otherwise the simulation would always fail when checking the owner signatures.\n */\n storage: canExecuteTx\n ? undefined\n : {\n [`0x${'4'.padStart(64, '0')}`]: `0x${'1'.padStart(64, '0')}`,\n },\n },\n },\n save: true,\n save_if_fails: true,\n }\n\n const simulationResponse = await axios.post(TENDERLY_SIMULATE_ENDPOINT_URL, simulationPayload)\n setSimulation(simulationResponse.data)\n setSimulationRequestStatus(FETCH_STATUS.SUCCESS)\n setRequestError(undefined)\n } catch (error) {\n console.error(error)\n setSimulationRequestStatus(FETCH_STATUS.ERROR)\n setRequestError(error.message)\n }\n },\n [],\n )\n\n return {\n simulateTransaction,\n simulationRequestStatus,\n simulation,\n simulationLink,\n requestError,\n resetSimulation,\n } as UseSimulationReturn\n}\n","import { ReactElement } from 'react'\nimport { BaseTransaction } from '@gnosis.pm/safe-apps-sdk'\nimport styled from 'styled-components'\n\nimport { Accordion, AccordionSummary, Loader, Text } from '@gnosis.pm/safe-react-components'\nimport { Button } from '@material-ui/core'\nimport { FETCH_STATUS } from 'src/utils/requests'\nimport { isSimulationEnvSet } from './simulation'\nimport { SimulationResult } from './SimulationResult'\nimport { useSimulation } from './useSimulation'\nimport Track from 'src/components/Track'\nimport { MODALS_EVENTS } from 'src/utils/events/modals'\nimport { useSelector } from 'react-redux'\nimport { currentSafe } from 'src/logic/safe/store/selectors'\nimport { userAccountSelector } from 'src/logic/wallets/store/selectors'\nimport { getWeb3 } from 'src/logic/wallets/getWeb3'\nimport useAsync from 'src/logic/hooks/useAsync'\nimport { FEATURES } from '@gnosis.pm/safe-react-gateway-sdk'\nimport { hasFeature } from 'src/logic/safe/utils/safeVersion'\n\nconst StyledAccordionSummary = styled(AccordionSummary)`\n & .MuiAccordionSummary-content {\n justify-content: space-between;\n align-items: center;\n }\n\n & .MuiAccordionSummary-expandIcon {\n display: none;\n }\n`\n\nconst StyledResultAccordionSummary = styled(AccordionSummary)`\n padding: 0px;\n & .MuiAccordionSummary-content {\n justify-content: space-between;\n align-items: center;\n padding: 0px;\n }\n\n & .MuiAccordionSummary-expandIcon {\n display: none;\n }\n`\n\nconst LoaderText = styled.span`\n margin-left: 10px;\n`\n\ntype TxSimulationProps = {\n tx: Omit\n canTxExecute: boolean\n gasLimit?: string\n disabled: boolean\n}\n\nconst TxSimulationBlock = ({ tx, canTxExecute, gasLimit, disabled }: TxSimulationProps): ReactElement => {\n const { simulateTransaction, simulation, simulationRequestStatus, simulationLink, requestError, resetSimulation } =\n useSimulation()\n const { chainId, address: safeAddress } = useSelector(currentSafe)\n const userAddress = useSelector(userAccountSelector)\n const web3 = getWeb3()\n\n const [blockGasLimit] = useAsync(async () => {\n const latestBlock = await web3.eth.getBlock('latest')\n return latestBlock.gasLimit\n }, [web3.eth])\n\n const simulationGasLimit = Number(gasLimit) || blockGasLimit || 0\n\n const handleSimulation = async () => {\n simulateTransaction(tx, chainId ?? '4', safeAddress, userAddress, canTxExecute, simulationGasLimit)\n }\n\n const isSimulationFinished =\n simulationRequestStatus === FETCH_STATUS.ERROR || simulationRequestStatus === FETCH_STATUS.SUCCESS\n const isSimulationLoading = simulationRequestStatus === FETCH_STATUS.LOADING || simulationGasLimit === 0\n const showSimulationButton = !isSimulationFinished\n\n return showSimulationButton ? (\n \n \n Transaction validity\n \n \n {isSimulationLoading && }\n Simulate\n \n \n \n \n ) : (\n \n \n \n \n \n )\n}\n\nexport const isTxSimulationEnabled = (): boolean => {\n return isSimulationEnvSet && hasFeature(FEATURES.TX_SIMULATION)\n}\n\nexport const TxSimulation = (props: TxSimulationProps): ReactElement | null => {\n if (!isTxSimulationEnabled()) {\n return null\n }\n\n return \n}\n","import { Operation, TransactionDetails } from '@gnosis.pm/safe-react-gateway-sdk'\nimport { AnyAction } from 'redux'\nimport { ThunkAction } from 'redux-thunk'\n\nimport onboard, { checkWallet } from 'src/logic/wallets/onboard'\nimport { getWeb3, isHardwareWallet, isSmartContractWallet } from 'src/logic/wallets/getWeb3'\nimport { getGnosisSafeInstanceAt } from 'src/logic/contracts/safeContracts'\nimport { createTxNotifications } from 'src/logic/notifications'\nimport {\n getApprovalTransaction,\n getExecutionTransaction,\n saveTxToHistory,\n tryOffChainSigning,\n TX_NOTIFICATION_TYPES,\n} from 'src/logic/safe/transactions'\nimport { estimateSafeTxGas, SafeTxGasEstimationProps, createSendParams } from 'src/logic/safe/transactions/gas'\nimport { currentSafeCurrentVersion } from 'src/logic/safe/store/selectors'\nimport { ZERO_ADDRESS } from 'src/logic/wallets/ethAddresses'\nimport { EMPTY_DATA } from 'src/logic/wallets/ethTransactions'\nimport { providerSelector } from 'src/logic/wallets/store/selectors'\nimport { generateSafeTxHash } from 'src/logic/safe/store/actions/transactions/utils/transactionHelpers'\nimport { getNonce, canExecuteCreatedTx, navigateToTx } from 'src/logic/safe/store/actions/utils'\nimport fetchTransactions from './transactions/fetchTransactions'\nimport { AppReduxState } from 'src/store'\nimport { Dispatch, DispatchReturn } from './types'\nimport { checkIfOffChainSignatureIsPossible, getPreValidatedSignatures } from 'src/logic/safe/safeTxSigner'\nimport { TxParameters } from 'src/routes/safe/container/hooks/useTransactionParameters'\nimport { Errors, logError } from 'src/logic/exceptions/CodedException'\nimport { removePendingTransaction, setPendingTransaction } from 'src/logic/safe/store/actions/pendingTransactions'\nimport { _getChainId } from 'src/config'\nimport { GnosisSafe } from 'src/types/contracts/gnosis_safe.d'\nimport * as aboutToExecuteTx from 'src/logic/safe/utils/aboutToExecuteTx'\nimport { getLastTransaction } from 'src/logic/safe/store/selectors/gatewayTransactions'\nimport { TxArgs } from 'src/logic/safe/store/models/types/transaction'\nimport { getContractErrorMessage } from 'src/logic/contracts/safeContractErrors'\nimport { isWalletRejection } from 'src/logic/wallets/errors'\nimport { trackEvent } from 'src/utils/googleTagManager'\nimport { WALLET_EVENTS } from 'src/utils/events/wallet'\n\nexport interface CreateTransactionArgs {\n navigateToTransactionsTab?: boolean\n notifiedTransaction: TX_NOTIFICATION_TYPES\n operation?: number\n origin?: string\n safeAddress: string\n to: string\n txData?: string\n txNonce?: number | string\n valueInWei: string\n safeTxGas?: string\n ethParameters?: Pick\n delayExecution?: boolean\n}\n\ntype RequiredTxProps = CreateTransactionArgs &\n Required>\n\ntype CreateTransactionAction = ThunkAction, AppReduxState, DispatchReturn, AnyAction>\ntype ConfirmEventHandler = (safeTxHash: string) => void\ntype ErrorEventHandler = () => void\n\nconst getSafeTxGas = async (txProps: RequiredTxProps, safeVersion: string): Promise => {\n const estimationProps: SafeTxGasEstimationProps = {\n safeAddress: txProps.safeAddress,\n txData: txProps.txData,\n txRecipient: txProps.to,\n txAmount: txProps.valueInWei,\n operation: txProps.operation,\n }\n\n let safeTxGas = '0'\n try {\n safeTxGas = await estimateSafeTxGas(estimationProps, safeVersion)\n } catch (err) {\n logError(Errors._617, err.message)\n }\n return safeTxGas\n}\n\nexport class TxSender {\n notifications: ReturnType\n nonce: string\n isFinalization: boolean\n txArgs: TxArgs\n safeTxHash: string\n txProps: RequiredTxProps\n from: string\n dispatch: Dispatch\n safeInstance: GnosisSafe\n safeVersion: string\n txId: string\n\n // Assigned upon `transactionHash` promiEvent\n txHash: undefined | string\n\n // On transaction completion (either confirming or executing)\n async onComplete(signature?: string, confirmCallback?: ConfirmEventHandler): Promise {\n const { txArgs, safeTxHash, txProps, dispatch, notifications, isFinalization } = this\n\n // Propose the tx to the backend\n // 1) If signing\n // 2) If creating a new tx (no txId yet)\n let txDetails: TransactionDetails | null = null\n if (!isFinalization || !this.txId) {\n try {\n txDetails = await saveTxToHistory({ ...txArgs, signature, origin: txProps.origin })\n this.txId = txDetails.txId\n } catch (err) {\n logError(Errors._816, err.message)\n return\n }\n }\n\n if (isFinalization && this.txId && this.txHash) {\n dispatch(setPendingTransaction({ id: this.txId, txHash: this.txHash }))\n }\n\n notifications.closePending()\n\n trackEvent(signature ? WALLET_EVENTS.OFF_CHAIN_SIGNATURE : WALLET_EVENTS.ON_CHAIN_INTERACTION)\n\n // This is used to communicate the safeTxHash to a Safe App caller\n confirmCallback?.(safeTxHash)\n\n // Go to a tx deep-link\n if (txDetails && txProps.navigateToTransactionsTab) {\n navigateToTx(txProps.safeAddress, txDetails)\n }\n\n dispatch(fetchTransactions(_getChainId(), txProps.safeAddress))\n }\n\n async onError(err: Error & { code: number }, errorCallback?: ErrorEventHandler): Promise {\n const { txArgs, isFinalization, from, txProps, dispatch, notifications, safeInstance, txId } = this\n\n errorCallback?.()\n\n notifications.closePending()\n\n // Existing transaction was being finalised (txId exists)\n if (isFinalization && txId) {\n dispatch(removePendingTransaction({ id: txId }))\n }\n\n // Display a notification when user rejects the tx\n if (isWalletRejection(err)) {\n // show snackbar\n notifications.showOnRejection(err)\n return\n }\n\n const executeData = isFinalization\n ? safeInstance.methods\n .execTransaction(\n txProps.to,\n txProps.valueInWei,\n txProps.txData,\n txProps.operation,\n 0,\n 0,\n 0,\n ZERO_ADDRESS,\n ZERO_ADDRESS,\n txArgs.sigs,\n )\n .encodeABI()\n : this.txHash && safeInstance.methods.approveHash(this.txHash).encodeABI()\n\n if (!executeData) {\n return\n }\n\n const contractErrorMessage = await getContractErrorMessage({\n safeInstance,\n from,\n data: executeData,\n })\n\n if (contractErrorMessage) {\n logError(Errors._803, contractErrorMessage)\n notifications.showOnError(err, contractErrorMessage)\n }\n }\n\n async onlyConfirm(): Promise {\n const { txArgs, safeTxHash, txProps, safeVersion } = this\n const { wallet } = onboard().getState()\n\n return await tryOffChainSigning(\n safeTxHash,\n { ...txArgs, sender: String(txArgs.sender), safeAddress: txProps.safeAddress },\n isHardwareWallet(wallet),\n safeVersion,\n )\n }\n\n async sendTx(confirmCallback?: ConfirmEventHandler): Promise {\n const { txArgs, isFinalization, from, safeTxHash, txProps } = this\n\n const tx = isFinalization ? getExecutionTransaction(txArgs) : getApprovalTransaction(this.safeInstance, safeTxHash)\n const sendParams = createSendParams(from, txProps.ethParameters || {})\n\n await tx.send(sendParams).once('transactionHash', (hash) => {\n this.txHash = hash\n\n if (isFinalization) {\n aboutToExecuteTx.setNonce(txArgs.nonce)\n }\n this.onComplete(undefined, confirmCallback)\n })\n }\n\n async canSignOffchain(): Promise {\n const { isFinalization, safeVersion } = this\n\n const isSmartContract = await isSmartContractWallet(this.from)\n return checkIfOffChainSignatureIsPossible(isFinalization, isSmartContract, safeVersion)\n }\n\n async submitTx(\n confirmCallback?: ConfirmEventHandler,\n errorCallback?: ErrorEventHandler,\n ): Promise {\n const isOffchain = await this.canSignOffchain()\n\n // Off-chain signature\n if (!this.isFinalization && isOffchain) {\n try {\n const signature = await this.onlyConfirm()\n\n // WC + Safe receives \"NaN\" as a string instead of a sig\n if (signature && signature !== 'NaN') {\n this.onComplete(signature, confirmCallback)\n } else {\n throw Error('No signature received')\n }\n } catch (err) {\n logError(Errors._814, err.message)\n this.onError(err, errorCallback)\n }\n return\n }\n\n // On-chain signature or execution\n try {\n await this.sendTx(confirmCallback)\n } catch (err) {\n logError(Errors._803, err.message)\n this.onError(err, errorCallback)\n }\n\n // Return txHash to check if transaction was successful\n return this.txHash\n }\n\n static async _isOnboardReady(): Promise {\n // web3 is set on wallet connection\n const walletSelected = getWeb3() ? true : await onboard().walletSelect()\n return walletSelected && checkWallet()\n }\n\n async prepare(dispatch: Dispatch, state: AppReduxState, txProps: RequiredTxProps): Promise {\n if (!(await TxSender._isOnboardReady())) {\n throw Error('No wallet connection')\n }\n\n // Selectors\n const { account } = providerSelector(state)\n this.from = account\n\n this.safeVersion = currentSafeCurrentVersion(state)\n this.safeInstance = getGnosisSafeInstanceAt(txProps.safeAddress, this.safeVersion)\n\n // Notifications\n this.notifications = createTxNotifications(dispatch, txProps.notifiedTransaction, txProps.origin)\n\n // Use the user-provided none or the recommented nonce\n this.nonce = txProps.txNonce?.toString() || (await getNonce(txProps.safeAddress, this.safeVersion))\n\n this.txProps = txProps\n this.dispatch = dispatch\n }\n}\n\nexport const createTransaction = (\n props: CreateTransactionArgs,\n confirmCallback?: ConfirmEventHandler,\n errorCallback?: ErrorEventHandler,\n): CreateTransactionAction => {\n return async (dispatch: Dispatch, getState: () => AppReduxState): Promise => {\n const sender = new TxSender()\n\n // Selectors\n const state = getState()\n\n // Assign fallback values to certain props\n const txProps = {\n ...props,\n txData: props.txData ?? EMPTY_DATA,\n operation: props.operation ?? Operation.CALL,\n navigateToTransactionsTab: props.navigateToTransactionsTab ?? true,\n origin: props.origin,\n }\n\n // Populate instance vars\n try {\n await sender.prepare(dispatch, state, txProps)\n } catch (err) {\n logError(Errors._815, err.message)\n return\n }\n\n // Execute right away?\n sender.isFinalization =\n !props.delayExecution && (await canExecuteCreatedTx(sender.safeInstance, sender.nonce, getLastTransaction(state)))\n\n // Prepare a TxArgs object\n sender.txArgs = {\n safeInstance: sender.safeInstance,\n to: txProps.to,\n valueInWei: txProps.valueInWei,\n data: txProps.txData,\n operation: txProps.operation,\n nonce: Number.parseInt(sender.nonce),\n safeTxGas: txProps.safeTxGas ?? (await getSafeTxGas(txProps, sender.safeVersion)),\n baseGas: '0',\n gasPrice: '0',\n gasToken: ZERO_ADDRESS,\n refundReceiver: ZERO_ADDRESS,\n sender: sender.from,\n // We're making a new tx, so there are no other signatures\n // Just pass our own address for an unsigned execution\n // Contract will compare the sender address to this\n sigs: getPreValidatedSignatures(sender.from),\n }\n\n // SafeTxHash acts as the unique ID of a tx throughout the app\n sender.safeTxHash = generateSafeTxHash(txProps.safeAddress, sender.safeVersion, sender.txArgs)\n\n // Start the creation\n sender.submitTx(confirmCallback, errorCallback)\n }\n}\n","import { ReactElement } from 'react'\nimport { Tooltip } from '@gnosis.pm/safe-react-components'\nimport { Checkbox, FormControlLabel } from '@material-ui/core'\nimport styled from 'styled-components'\n\nimport { sm } from 'src/theme/variables'\nimport Row from 'src/components/layout/Row'\nimport Img from 'src/components/layout/Img'\nimport InfoIcon from 'src/assets/icons/info.svg'\nimport { trackEvent } from 'src/utils/googleTagManager'\nimport { MODALS_EVENTS } from 'src/utils/events/modals'\n\nconst StyledRow = styled(Row)`\n align-items: center;\n margin-bottom: ${sm};\n`\n\nconst StyledFormControlLabel = styled(FormControlLabel)`\n margin-right: ${sm};\n\n & .MuiFormControlLabel-label {\n font-size: 16px;\n letter-spacing: 0;\n }\n`\n\ninterface ExecuteCheckboxProps {\n checked: boolean\n onChange: (val: boolean) => unknown\n}\n\nconst ExecuteCheckbox = ({ checked, onChange }: ExecuteCheckboxProps): ReactElement => {\n const handleChange = (_: React.ChangeEvent, checked: boolean): void => {\n trackEvent({ ...MODALS_EVENTS.EXECUTE_TX, label: checked })\n onChange(checked)\n }\n return (\n \n }\n label=\"Execute transaction\"\n data-testid=\"execute-checkbox\"\n />\n \n \n \"Info\n \n \n \n )\n}\n\nexport default ExecuteCheckbox\n","import { ReactElement, useEffect, useMemo, useState } from 'react'\nimport { useSelector } from 'react-redux'\nimport styled from 'styled-components'\nimport {\n Text,\n Accordion,\n AccordionSummary,\n AccordionDetails,\n ButtonLink,\n Divider,\n EthHashInfo,\n CopyToClipboardBtn,\n} from '@gnosis.pm/safe-react-components'\nimport { Operation } from '@gnosis.pm/safe-react-gateway-sdk'\nimport { ThemeColors } from '@gnosis.pm/safe-react-components/dist/theme'\n\nimport { currentSafe } from 'src/logic/safe/store/selectors'\nimport { getLastTxNonce, getTransactionsByNonce } from 'src/logic/safe/store/selectors/gatewayTransactions'\nimport { TxParameters } from 'src/routes/safe/container/hooks/useTransactionParameters'\nimport { ParametersStatus, areSafeParamsEnabled } from 'src/routes/safe/components/Transactions/helpers/utils'\nimport useSafeTxGas from 'src/routes/safe/components/Transactions/helpers/useSafeTxGas'\nimport { AppReduxState } from 'src/store'\nimport { isMultiSigExecutionDetails, Transaction } from 'src/logic/safe/store/models/types/gateway.d'\nimport { getExplorerInfo } from 'src/config'\nimport PrefixedEthHashInfo from 'src/components/PrefixedEthHashInfo'\nimport { getByteLength } from 'src/utils/getByteLength'\nimport { md } from 'src/theme/variables'\nimport Track from 'src/components/Track'\nimport { MODALS_EVENTS } from 'src/utils/events/modals'\nimport { Skeleton } from '@material-ui/lab'\n\nconst TxParameterWrapper = styled.div`\n display: flex;\n justify-content: space-between;\n`\n\nconst TxParameterEndWrapper = styled.span`\n display: flex;\n justify-content: flex-end;\n gap: 4px; // EthHashInfo uses a gap between the address and copy button\n`\n\nconst AccordionDetailsWrapper = styled.div`\n width: 100%;\n display: flex;\n flex-direction: column;\n`\nconst StyledText = styled(Text)`\n margin: 8px 0 0 0;\n`\n\ntype ColoredTextProps = { isError?: boolean }\nconst ColoredText = styled(Text)`\n color: ${(props) => (props.isError ? props.theme.colors.error : props.color)};\n`\n\nconst StyledButtonLink = styled(ButtonLink)`\n padding-left: 0;\n margin: 8px 0 0 0;\n\n > p {\n margin-left: 0;\n }\n`\n\nconst StyledDivider = styled(Divider)`\n margin-right: -${md};\n margin-left: -${md};\n`\n\ntype TxParam = string | ReactElement\ntype TxParameterProps = { name: TxParam; value?: TxParam | null; color?: ThemeColors } & ColoredTextProps\nconst TxParameter = ({ name, value, ...rest }: TxParameterProps): ReactElement | null => {\n if (value == null || value === '') {\n return null\n }\n\n const getEl = (prop?: TxParam) => {\n return typeof prop === 'string' ? (\n \n {prop}\n \n ) : (\n prop\n )\n }\n\n return (\n \n {getEl(name)}\n {getEl(value)}\n \n )\n}\n\ntype Props = {\n txParameters: TxParameters\n compact?: boolean\n parametersStatus: ParametersStatus\n onEdit: () => void\n isTransactionCreation: boolean\n isOffChainSignature: boolean\n}\n\nexport const TxParametersDetail = ({\n onEdit,\n txParameters,\n compact = true,\n parametersStatus,\n}: Props): ReactElement | null => {\n const { nonce } = useSelector(currentSafe)\n\n const [isTxNonceOutOfOrder, setIsTxNonceOutOfOrder] = useState(false)\n const [isAccordionExpanded, setIsAccordionExpanded] = useState(false)\n\n const { safeNonce = '' } = txParameters\n const safeNonceNumber = parseInt(safeNonce, 10)\n const lastQueuedTxNonce = useSelector(getLastTxNonce)\n const showSafeTxGas = useSafeTxGas()\n const storedTx = useSelector((state: AppReduxState) => getTransactionsByNonce(state, safeNonceNumber))\n\n useEffect(() => {\n if (Number.isNaN(safeNonceNumber) || safeNonceNumber === nonce) {\n setIsAccordionExpanded(false)\n setIsTxNonceOutOfOrder(false)\n return\n }\n if (lastQueuedTxNonce === undefined && safeNonceNumber !== nonce) {\n setIsAccordionExpanded(true)\n setIsTxNonceOutOfOrder(true)\n return\n }\n if (lastQueuedTxNonce && safeNonceNumber !== lastQueuedTxNonce + 1) {\n setIsAccordionExpanded(true)\n setIsTxNonceOutOfOrder(true)\n return\n }\n }, [lastQueuedTxNonce, nonce, safeNonceNumber])\n\n const color = useMemo(() => (areSafeParamsEnabled(parametersStatus) ? 'text' : 'secondaryLight'), [parametersStatus])\n\n const onChangeExpand = () => {\n setIsAccordionExpanded(!isAccordionExpanded)\n }\n\n if (parametersStatus === 'DISABLED') {\n return null\n }\n\n return (\n \n \n \n Advanced parameters\n \n \n \n \n \n Walliro transaction parameters\n \n \n \n Walliro nonce\n \n \n {txParameters.safeNonce ? txParameters.safeNonce : }\n \n \n\n {showSafeTxGas && }\n \n \n Edit\n \n \n {storedTx?.length > 0 && }\n \n \n \n )\n}\n\nconst TxAdvancedParametersDetail = ({ tx }: { tx: Transaction }) => {\n const { txData, detailedExecutionInfo } = tx?.txDetails || {}\n\n if (!txData || !detailedExecutionInfo) {\n return null\n }\n\n const { value, to, operation, hexData } = txData\n const { safeTxHash, baseGas, gasPrice, gasToken, refundReceiver, confirmations } =\n (isMultiSigExecutionDetails(detailedExecutionInfo) && detailedExecutionInfo) || {}\n\n return (\n <>\n \n \n \n )\n }\n />\n }\n />\n {Object.values(Operation).includes(operation) && (\n \n )}\n \n \n }\n />\n \n }\n />\n {confirmations\n ?.filter(({ signature }) => signature)\n .map(({ signature }, i) => (\n \n \n {signature ? getByteLength(signature) : 0} bytes\n \n {signature && }\n \n }\n />\n ))}\n \n \n {hexData ? getByteLength(hexData) : 0} bytes\n \n {hexData && }\n \n }\n />\n \n )\n}\n","import { useSelector } from 'react-redux'\nimport { currentSafe } from '../safe/store/selectors'\n\ntype UseCanTxExecuteType = (\n preApprovingOwner?: string,\n txConfirmations?: number,\n existingTxThreshold?: number,\n txNonce?: string,\n) => boolean\n\nconst useCanTxExecute: UseCanTxExecuteType = (\n preApprovingOwner = '',\n txConfirmations = 0,\n existingTxThreshold,\n txNonce,\n) => {\n const safeInfo = useSelector(currentSafe)\n\n if (txNonce && parseInt(txNonce, 10) !== safeInfo.nonce) {\n return false\n }\n\n // A tx might have been created with a threshold that is different than the current policy\n // If an existing tx threshold isn't passed, take the current safe threshold\n const threshold = existingTxThreshold ?? safeInfo.threshold\n\n if (txConfirmations >= threshold) {\n return true\n }\n\n // When having a preApprovingOwner it is needed one less confirmation to execute the tx\n if (preApprovingOwner) {\n return txConfirmations + 1 === threshold\n }\n\n return false\n}\n\nexport default useCanTxExecute\n","import { useEffect, useState } from 'react'\n\nimport { isSmartContractWallet } from 'src/logic/wallets/getWeb3'\n\nconst useIsSmartContractWallet = (userAccount: string): boolean => {\n const [isSmart, setIsSmart] = useState(false)\n\n useEffect(() => {\n let isCurrent = true\n\n const checkAddress = async () => {\n // isSmartContractWallet is memoized\n const res = await isSmartContractWallet(userAccount)\n if (isCurrent) setIsSmart(res)\n }\n checkAddress()\n\n return () => {\n isCurrent = false\n }\n }, [userAccount])\n\n return isSmart\n}\n\nexport default useIsSmartContractWallet\n","import { ReactNode, useCallback, useMemo, useState } from 'react'\nimport styled from 'styled-components'\nimport { Grid } from '@material-ui/core'\n\nimport {\n calculateTotalGasCost,\n EstimationStatus,\n useEstimateTransactionGas,\n} from 'src/logic/hooks/useEstimateTransactionGas'\nimport { TxParameters } from 'src/routes/safe/container/hooks/useTransactionParameters'\nimport { EditableTxParameters } from 'src/routes/safe/components/Transactions/helpers/EditableTxParameters'\nimport { ReviewInfoText } from 'src/components/ReviewInfoText'\nimport { TxEstimatedFeesDetail } from 'src/routes/safe/components/Transactions/helpers/TxEstimatedFeesDetail'\nimport ExecuteCheckbox from 'src/components/ExecuteCheckbox'\nimport { useEstimationStatus } from 'src/logic/hooks/useEstimationStatus'\nimport { Errors, logError } from 'src/logic/exceptions/CodedException'\nimport { ButtonStatus, Modal } from 'src/components/Modal'\nimport { lg, md } from 'src/theme/variables'\nimport { TxParametersDetail } from 'src/routes/safe/components/Transactions/helpers/TxParametersDetail'\nimport { ParametersStatus } from 'src/routes/safe/components/Transactions/helpers/utils'\nimport useCanTxExecute from 'src/logic/hooks/useCanTxExecute'\nimport { useSelector } from 'react-redux'\nimport { grantedSelector } from 'src/routes/safe/container/selector'\nimport { List } from 'immutable'\nimport { userAccountSelector } from 'src/logic/wallets/store/selectors'\nimport { Confirmation } from 'src/logic/safe/store/models/types/confirmation'\nimport { Operation } from '@gnosis.pm/safe-react-gateway-sdk'\nimport { getNativeCurrency } from 'src/config'\nimport { useEstimateSafeTxGas } from 'src/logic/hooks/useEstimateSafeTxGas'\nimport {\n checkIfOffChainSignatureIsPossible,\n generateSignaturesFromTxConfirmations,\n getPreValidatedSignatures,\n} from 'src/logic/safe/safeTxSigner'\nimport { currentSafe } from 'src/logic/safe/store/selectors'\nimport useIsSmartContractWallet from 'src/logic/hooks/useIsSmartContractWallet'\nimport useSafeAddress from 'src/logic/currentSession/hooks/useSafeAddress'\nimport { ZERO_ADDRESS } from 'src/logic/wallets/ethAddresses'\nimport { DEFAULT_GAS_LIMIT, useEstimateGasLimit } from 'src/logic/hooks/useEstimateGasLimit'\nimport { useExecutionStatus } from 'src/logic/hooks/useExecutionStatus'\nimport { checkTransactionExecution, estimateGasForTransactionExecution } from 'src/logic/safe/transactions/gas'\nimport { getExecutionTransaction } from 'src/logic/safe/transactions'\nimport { getGnosisSafeInstanceAt } from 'src/logic/contracts/safeContracts'\nimport { TxSimulation, isTxSimulationEnabled } from '../Simulation/TxSimulation'\n\ntype Props = {\n children: ReactNode\n operation?: Operation\n txNonce?: string\n txData: string\n txValue?: string\n txTo?: string\n txType?: string\n txConfirmations?: List\n txThreshold?: number\n safeTxGas?: string\n onSubmit: (txParams: TxParameters, delayExecution?: boolean) => void\n onClose?: () => void\n onBack?: (...rest: any) => void\n submitText?: string\n isSubmitDisabled?: boolean\n isRejectTx?: boolean\n}\n\nconst Container = styled.div`\n padding: 0 ${lg} ${md};\n`\nexport const isApproveAndExecute = (\n threshold: number,\n txConfirmations: number,\n preApprovingOwner?: string,\n): boolean => {\n if (txConfirmations === threshold) return false\n if (!preApprovingOwner) return false\n return txConfirmations + 1 === threshold\n}\n\nexport const isMultisigCreation = (txConfirmations: number): boolean => txConfirmations === 0\n\n/**\n * Determines which fields are displayed in the TxEditableParameters\n */\nconst getParametersStatus = (isCreation: boolean, doExecute: boolean, isRejectTx = false): ParametersStatus => {\n return isCreation && !isRejectTx\n ? doExecute\n ? 'ENABLED'\n : 'ETH_HIDDEN' // allow editing nonce when creating\n : doExecute\n ? 'SAFE_DISABLED'\n : 'DISABLED' // when not creating, nonce cannot be edited\n}\n\nexport const TxModalWrapper = ({\n children,\n operation,\n txNonce,\n txData,\n txValue = '0',\n txTo,\n txType,\n txConfirmations,\n txThreshold,\n safeTxGas,\n onSubmit,\n onBack,\n onClose,\n submitText,\n isSubmitDisabled,\n isRejectTx = false,\n}: Props): React.ReactElement => {\n const [manualSafeTxGas, setManualSafeTxGas] = useState()\n const [manualGasPrice, setManualGasPrice] = useState()\n const [manualMaxPrioFee, setManualMaxPrioFee] = useState()\n const [manualGasLimit, setManualGasLimit] = useState()\n const [executionApproved, setExecutionApproved] = useState(true)\n const isOwner = useSelector(grantedSelector)\n const userAddress = useSelector(userAccountSelector)\n const { safeAddress } = useSafeAddress()\n const preApprovingOwner = isOwner ? userAddress : undefined\n const confirmationsLen = Array.from(txConfirmations || []).length\n const canTxExecute = useCanTxExecute(preApprovingOwner, confirmationsLen, txThreshold, txNonce)\n const doExecute = executionApproved && canTxExecute\n const showCheckbox = canTxExecute && (!txThreshold || txThreshold > confirmationsLen)\n const nativeCurrency = getNativeCurrency()\n const { currentVersion: safeVersion, threshold } = useSelector(currentSafe)\n const isCreation = isMultisigCreation(confirmationsLen)\n const isSmartContract = useIsSmartContractWallet(userAddress)\n const isOffChainSignature = checkIfOffChainSignatureIsPossible(doExecute, isSmartContract, safeVersion)\n const approvalAndExecution = isApproveAndExecute(Number(threshold), confirmationsLen, preApprovingOwner)\n\n const { result: safeTxGasEstimation, error: safeTxGasError } = useEstimateSafeTxGas({\n isRejectTx,\n txData,\n txRecipient: txTo || safeAddress,\n txAmount: txValue,\n operation,\n })\n if (safeTxGas == null) safeTxGas = safeTxGasEstimation\n\n const txParameters = useMemo(\n () => ({\n baseGas: '0',\n data: txData,\n gasPrice: '0',\n gasToken: ZERO_ADDRESS,\n nonce: txNonce ? parseInt(txNonce) : 0,\n operation: operation || Operation.CALL,\n refundReceiver: ZERO_ADDRESS,\n safeInstance: getGnosisSafeInstanceAt(safeAddress, safeVersion),\n safeTxGas: manualSafeTxGas || safeTxGas || '0',\n sender: userAddress,\n sigs: generateSignaturesFromTxConfirmations(txConfirmations, approvalAndExecution ? userAddress : undefined),\n to: txTo || safeAddress,\n valueInWei: txValue,\n safeAddress,\n approvalAndExecution,\n }),\n [\n approvalAndExecution,\n manualSafeTxGas,\n operation,\n safeAddress,\n safeTxGas,\n safeVersion,\n txConfirmations,\n txData,\n txNonce,\n txTo,\n txValue,\n userAddress,\n ],\n )\n\n const estimateGasLimit = useCallback(() => {\n return estimateGasForTransactionExecution(txParameters)\n }, [txParameters])\n\n const gasLimit = useEstimateGasLimit(estimateGasLimit, doExecute, txParameters.data, manualGasLimit)\n\n const checkTxExecution = useCallback((): Promise => {\n return checkTransactionExecution({ ...txParameters, gasLimit })\n }, [gasLimit, txParameters])\n\n const { gasPriceFormatted, gasPrice, gasMaxPrioFee, gasMaxPrioFeeFormatted } = useEstimateTransactionGas({\n manualGasPrice,\n manualMaxPrioFee,\n isExecution: doExecute,\n txData,\n })\n\n const getGasCostFormatted = useCallback(() => {\n if (!gasLimit || gasLimit === DEFAULT_GAS_LIMIT || !gasPrice || !gasMaxPrioFee) return '> 0.001'\n return calculateTotalGasCost(gasLimit, gasPrice, gasMaxPrioFee, nativeCurrency.decimals).gasCostFormatted\n }, [gasLimit, gasMaxPrioFee, gasPrice, nativeCurrency.decimals])\n\n const txEstimationExecutionStatus = useExecutionStatus({\n checkTxExecution,\n isExecution: doExecute,\n txData: txParameters.data,\n gasLimit,\n gasPrice,\n gasMaxPrioFee,\n })\n\n const [submitStatus, setSubmitStatus] = useEstimationStatus(txEstimationExecutionStatus)\n\n const onEditClose = (txParameters: TxParameters) => {\n const oldGasPrice = gasPriceFormatted\n const newGasPrice = txParameters.ethGasPrice\n const oldGasLimit = gasLimit\n const newGasLimit = txParameters.ethGasLimit\n const oldMaxPrioFee = gasMaxPrioFeeFormatted\n const newMaxPrioFee = txParameters.ethMaxPrioFee\n const oldSafeTxGas = safeTxGas\n const newSafeTxGas = txParameters.safeTxGas\n\n if (oldGasPrice !== newGasPrice) {\n setManualGasPrice(newGasPrice)\n }\n\n if (oldMaxPrioFee !== newMaxPrioFee) {\n setManualMaxPrioFee(newMaxPrioFee)\n }\n\n if (oldGasLimit !== newGasLimit) {\n setManualGasLimit(newGasLimit)\n }\n\n if (newSafeTxGas && oldSafeTxGas !== newSafeTxGas) {\n setManualSafeTxGas(newSafeTxGas)\n }\n }\n\n const onSubmitClick = (txParameters: TxParameters) => {\n setSubmitStatus(ButtonStatus.LOADING)\n\n if (!safeAddress) {\n setSubmitStatus(ButtonStatus.READY)\n logError(Errors._802)\n return\n }\n\n onSubmit(txParameters, !doExecute)\n }\n\n const parametersStatus = getParametersStatus(isCreation, doExecute, isRejectTx)\n\n const gasCost = `${getGasCostFormatted()} ${nativeCurrency.symbol}`\n\n const simulateTxData = useMemo(() => {\n if (!isTxSimulationEnabled()) {\n return ''\n }\n\n // is submitStatus is not ready we are not done with gas estimation / tx creation\n if (submitStatus !== ButtonStatus.READY || !txParameters.data) {\n return ''\n }\n\n try {\n // If a transaction is executable we simulate with the proposed / selected gasLimit and the actual signatures\n // Otherwise we overwrite the threshold to 1 on tenderly and create a signature\n return getExecutionTransaction({\n ...txParameters,\n sigs: canTxExecute ? txParameters.sigs : getPreValidatedSignatures(userAddress),\n }).encodeABI()\n } catch (error) {\n console.error(`Error while creating simulation tx: ${error}`)\n return ''\n }\n }, [submitStatus, txParameters, canTxExecute, userAddress])\n\n return (\n \n {(txParameters: TxParameters, toggleEditMode: () => void) => (\n <>\n {children}\n\n \n \n {showCheckbox && }\n \n {doExecute && (\n \n )}\n \n\n {simulateTxData && (\n \n )}\n \n\n \n\n {/* Footer */}\n \n onSubmitClick(txParameters),\n status: submitStatus,\n disabled: isSubmitDisabled,\n color: isRejectTx ? 'error' : undefined,\n text: txEstimationExecutionStatus === EstimationStatus.LOADING ? 'Estimating' : submitText,\n testId: 'submit-tx-btn',\n }}\n />\n \n \n )}\n \n )\n}\n","import { Operation } from '@gnosis.pm/safe-react-gateway-sdk'\nimport { useSelector } from 'react-redux'\n\nimport { estimateSafeTxGas } from 'src/logic/safe/transactions/gas'\nimport { currentSafe } from 'src/logic/safe/store/selectors'\nimport useAsync from 'src/logic/hooks/useAsync'\n\ntype UseEstimateSafeTxGasProps = {\n isRejectTx: boolean\n txData: string\n txRecipient: string\n txAmount: string\n operation?: Operation\n}\n\nexport const useEstimateSafeTxGas = ({\n isRejectTx,\n txData,\n txRecipient,\n txAmount,\n operation,\n}: UseEstimateSafeTxGasProps): { result: string; error: Error | undefined } => {\n const defaultEstimation = '0'\n const { address: safeAddress, currentVersion: safeVersion } = useSelector(currentSafe)\n\n const [result, error] = useAsync(() => {\n if (isRejectTx || !txData) return Promise.resolve(defaultEstimation)\n\n return estimateSafeTxGas(\n {\n safeAddress,\n txData,\n txRecipient,\n txAmount: txAmount || '0',\n operation: operation || Operation.CALL,\n },\n safeVersion,\n )\n }, [isRejectTx, operation, safeAddress, safeVersion, txAmount, txData, txRecipient])\n\n return { result: result || defaultEstimation, error }\n}\n","export default __webpack_public_path__ + \"static/media/qrcode.fec1b6d8.svg\";","import { background, lg, secondaryText, sm } from 'src/theme/variables'\nimport { createStyles } from '@material-ui/core'\n\nexport const styles = createStyles({\n heading: {\n padding: lg,\n justifyContent: 'space-between',\n maxHeight: '75px',\n boxSizing: 'border-box',\n },\n loaderContainer: {\n width: '100%',\n height: '100%',\n },\n close: {\n height: '25px',\n width: '25px',\n color: secondaryText,\n },\n detailsContainer: {\n backgroundColor: background,\n maxHeight: '450px',\n },\n buttonRow: {\n height: '84px',\n justifyContent: 'center',\n },\n button: {\n '&:last-child': {\n marginLeft: sm,\n },\n },\n})\n","import IconButton from '@material-ui/core/IconButton'\nimport { makeStyles } from '@material-ui/core/styles'\nimport Close from '@material-ui/icons/Close'\nimport * as React from 'react'\nimport QrReader from 'react-qr-reader'\n\nimport { styles } from './style'\n\nimport Modal from 'src/components/Modal'\nimport Block from 'src/components/layout/Block'\nimport Button from 'src/components/layout/Button'\nimport Col from 'src/components/layout/Col'\nimport Hairline from 'src/components/layout/Hairline'\nimport Paragraph from 'src/components/layout/Paragraph'\nimport Row from 'src/components/layout/Row'\nimport { useEffect, useState } from 'react'\n\nconst useStyles = makeStyles(styles)\n\ntype Props = {\n isOpen: boolean\n onClose: () => void\n onScan: (value: string) => void\n}\n\nexport const ScanQRModal = ({ isOpen, onClose, onScan }: Props): React.ReactElement => {\n const classes = useStyles()\n const [fileUploadModalOpen, setFileUploadModalOpen] = useState(false)\n const [error, setError] = useState(null)\n const [cameraBlocked, setCameraBlocked] = useState(false)\n const scannerRef: any = React.createRef()\n const openImageDialog = React.useCallback(() => {\n scannerRef.current.openImageDialog()\n }, [scannerRef])\n\n useEffect(() => {\n if (!fileUploadModalOpen && cameraBlocked && !error) {\n setFileUploadModalOpen(true)\n openImageDialog()\n }\n }, [cameraBlocked, openImageDialog, fileUploadModalOpen, setFileUploadModalOpen, error])\n\n const onFileScannedResolve = (error: Error | null, successData: string | null) => {\n if (error) {\n console.error('QR code error', error)\n\n if (error.name === 'NotAllowedError' || error.name === 'PermissionDismissedError') {\n setCameraBlocked(true)\n setFileUploadModalOpen(false)\n } else {\n setError('The QR could not be read')\n }\n return\n }\n\n if (successData) {\n onScan(successData)\n } else if (cameraBlocked) {\n setError('The QR could not be read')\n }\n }\n\n return (\n \n \n \n Scan QR\n \n \n \n \n \n \n \n {error && (\n \n {error}\n \n )}\n onFileScannedResolve(err, null)}\n onScan={(data: string) => onFileScannedResolve(null, data)}\n ref={scannerRef}\n style={{ width: '400px', height: '400px' }}\n facingMode=\"user\"\n />\n \n \n \n \n {\n setCameraBlocked(true)\n setError(null)\n setFileUploadModalOpen(false)\n }}\n variant=\"contained\"\n >\n Upload an image\n \n \n \n )\n}\n","import { makeStyles } from '@material-ui/core/styles'\nimport { ReactElement, useState } from 'react'\n\nimport QRIcon from 'src/assets/icons/qrcode.svg'\nimport { ScanQRModal } from 'src/components/ScanQRModal'\nimport Img from 'src/components/layout/Img'\n\nconst useStyles = makeStyles({\n qrCodeBtn: {\n cursor: 'pointer',\n },\n})\n\ntype Props = {\n handleScan: (dataResult: string, closeQrModal: () => void) => void\n testId?: string\n}\n\nexport const ScanQRWrapper = ({ handleScan, testId }: Props): ReactElement => {\n const classes = useStyles()\n const [qrModalOpen, setQrModalOpen] = useState(false)\n\n const openQrModal = () => {\n setQrModalOpen(true)\n }\n\n const closeQrModal = () => {\n setQrModalOpen(false)\n }\n\n const onScanFinished = (value: string) => {\n handleScan(value, closeQrModal)\n }\n\n return (\n <>\n openQrModal()}\n role=\"button\"\n src={QRIcon}\n testId={testId || 'qr-icon'}\n />\n {qrModalOpen && }\n \n )\n}\n","import styled from 'styled-components'\n\nexport const LoadingContainer = styled.div`\n width: 100%;\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n`\n","import { Loader } from '@gnosis.pm/safe-react-components'\nimport { makeStyles } from '@material-ui/core/styles'\nimport { Suspense, useEffect, useState, lazy } from 'react'\n\nimport Modal from 'src/components/Modal'\nimport { CollectibleTx } from './screens/ReviewCollectible'\nimport { ReviewCustomTxProps } from './screens/ContractInteraction/ReviewCustomTx'\nimport { ContractInteractionTx } from './screens/ContractInteraction'\nimport { CustomTxProps } from './screens/ContractInteraction/SendCustomTx'\nimport { ReviewTxProp } from './screens/ReviewSendFundsTx'\nimport { NFTToken } from 'src/logic/collectibles/sources/collectibles.d'\nimport { SendCollectibleTxInfo } from './screens/SendCollectible'\nimport { Erc721Transfer } from '@gnosis.pm/safe-react-gateway-sdk'\n\nconst ChooseTxType = lazy(() => import('./screens/ChooseTxType'))\n\nconst SendFunds = lazy(() => import('./screens/SendFunds'))\n\nconst SendCollectible = lazy(() => import('./screens/SendCollectible'))\n\nconst ReviewCollectible = lazy(() => import('./screens/ReviewCollectible'))\n\nconst ReviewSendFundsTx = lazy(() => import('./screens/ReviewSendFundsTx'))\n\nconst ContractInteraction = lazy(() => import('./screens/ContractInteraction'))\n\nconst ContractInteractionReview: any = lazy(() => import('./screens/ContractInteraction/Review'))\n\nconst SendCustomTx = lazy(() => import('./screens/ContractInteraction/SendCustomTx'))\n\nconst ReviewCustomTx = lazy(() => import('./screens/ContractInteraction/ReviewCustomTx'))\n\nconst useStyles = makeStyles({\n loaderStyle: {\n height: '500px',\n width: '100%',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n },\n})\n\nexport type TxType =\n | 'chooseTxType'\n | 'sendFunds'\n | 'sendFundsReviewTx'\n | 'contractInteraction'\n | 'contractInteractionReview'\n | 'reviewCustomTx'\n | 'sendCollectible'\n | 'reviewCollectible'\n | ''\n\ntype Props = {\n activeScreenType: TxType\n isOpen: boolean\n onClose: () => void\n recipientAddress?: string\n recipientName?: string\n selectedToken?: string | NFTToken | Erc721Transfer\n tokenAmount?: string\n}\n\nconst SendModal = ({\n activeScreenType,\n isOpen,\n onClose,\n recipientAddress,\n recipientName,\n selectedToken,\n tokenAmount,\n}: Props): React.ReactElement => {\n const classes = useStyles()\n const [activeScreen, setActiveScreen] = useState(activeScreenType || 'chooseTxType')\n const [tx, setTx] = useState({})\n const [isABI, setIsABI] = useState(true)\n\n const [recipient, setRecipient] = useState(recipientAddress)\n\n useEffect(() => {\n setActiveScreen(activeScreenType || 'chooseTxType')\n setIsABI(true)\n setTx({})\n setRecipient(recipientAddress)\n }, [activeScreenType, isOpen, recipientAddress])\n\n const handleTxCreation = (txInfo: SendCollectibleTxInfo) => {\n setActiveScreen('sendFundsReviewTx')\n setTx(txInfo)\n }\n\n const handleContractInteractionCreation = (contractInteractionInfo: any, submit: boolean): void => {\n setTx(contractInteractionInfo)\n if (submit) setActiveScreen('contractInteractionReview')\n }\n\n const handleCustomTxCreation = (customTxInfo: any, submit: boolean): void => {\n setTx(customTxInfo)\n if (submit) setActiveScreen('reviewCustomTx')\n }\n\n const handleSendCollectible = (txInfo) => {\n setActiveScreen('reviewCollectible')\n setTx(txInfo)\n }\n\n const handleSwitchMethod = (): void => {\n setIsABI(!isABI)\n }\n\n const handleOnPrev = (screen: TxType) => {\n setRecipient((tx as ReviewTxProp).recipientAddress)\n setActiveScreen(screen)\n }\n\n return (\n \n \n \n \n }\n >\n {activeScreen === 'chooseTxType' && (\n \n )}\n\n {activeScreen === 'sendFunds' && (\n \n )}\n\n {activeScreen === 'sendFundsReviewTx' && (\n {\n handleOnPrev('sendFunds')\n }}\n tx={tx as ReviewTxProp}\n />\n )}\n\n {activeScreen === 'contractInteraction' && isABI && (\n \n )}\n\n {activeScreen === 'contractInteractionReview' && isABI && tx && (\n handleOnPrev('contractInteraction')} tx={tx} />\n )}\n\n {activeScreen === 'contractInteraction' && !isABI && (\n \n )}\n\n {activeScreen === 'reviewCustomTx' && (\n handleOnPrev('contractInteraction')}\n tx={tx as ReviewCustomTxProps}\n />\n )}\n\n {activeScreen === 'sendCollectible' && (\n \n )}\n\n {activeScreen === 'reviewCollectible' && (\n handleOnPrev('sendCollectible')}\n tx={tx as CollectibleTx}\n />\n )}\n \n \n )\n}\n\nexport default SendModal\n","import { useCallback, useEffect, useMemo, useState } from 'react'\nimport { Field } from 'react-final-form'\nimport { OnChange } from 'react-final-form-listeners'\nimport InputAdornment from '@material-ui/core/InputAdornment'\nimport CircularProgress from '@material-ui/core/CircularProgress'\n\nimport TextField from 'src/components/forms/TextField'\nimport { Validator, composeValidators, mustBeEthereumAddress, required } from 'src/components/forms/validator'\nimport { trimSpaces } from 'src/utils/strings'\nimport { getAddressFromDomain } from 'src/logic/wallets/getWeb3'\nimport { isValidEnsName, isValidCryptoDomainName } from 'src/logic/wallets/ethAddresses'\nimport { checksumAddress } from 'src/utils/checksumAddress'\nimport { Errors, logError } from 'src/logic/exceptions/CodedException'\nimport { parsePrefixedAddress } from 'src/utils/prefixedAddress'\n\nexport interface AddressInputProps {\n fieldMutator: (address: string) => void\n name?: string\n text?: string\n placeholder?: string\n inputAdornment?: { endAdornment: React.ReactElement } | undefined | false\n testId: string\n validators?: Validator[]\n defaultValue?: string\n disabled?: boolean\n spellCheck?: boolean\n className?: string\n}\n\nconst AddressInput = ({\n className = '',\n name = 'recipientAddress',\n text = 'Recipient*',\n placeholder = 'Recipient*',\n fieldMutator,\n testId,\n inputAdornment,\n validators = [],\n defaultValue,\n disabled,\n}: AddressInputProps): React.ReactElement => {\n const [currentInput, setCurrentInput] = useState('')\n const [resolutions, setResolutions] = useState>({})\n const resolvedAddress = resolutions[currentInput]\n const isResolving = resolvedAddress === ''\n\n // External validators must receive an unprefixed address\n const sanitizedValidators = useCallback(\n (val: string) => {\n const parsed = parsePrefixedAddress(val)\n return composeValidators(...validators)(parsed.address)\n },\n [validators],\n )\n\n // Internal validators + externally passed validators\n const allValidators = useMemo(\n () => composeValidators(required, mustBeEthereumAddress, sanitizedValidators),\n [sanitizedValidators],\n )\n\n const onValueChange = useCallback(\n (rawVal: string) => {\n const address = trimSpaces(rawVal)\n\n setCurrentInput(rawVal)\n\n // A crypto domain name\n if (isValidEnsName(address) || isValidCryptoDomainName(address)) {\n setResolutions((prev) => ({ ...prev, [rawVal]: '' }))\n getAddressFromDomain(address)\n .then((resolverAddr) => {\n const formattedAddress = checksumAddress(resolverAddr)\n setResolutions((prev) => ({ ...prev, [rawVal]: formattedAddress }))\n })\n .catch((err) => {\n setResolutions((prev) => ({ ...prev, [rawVal]: undefined }))\n logError(Errors._101, err.message)\n })\n } else {\n // A regular address hash\n if (!mustBeEthereumAddress(address)) {\n const parsed = parsePrefixedAddress(address)\n const checkedAddress = checksumAddress(parsed.address) || parsed.address\n\n // Field mutator (parent component) always gets an unprefixed address\n fieldMutator(checkedAddress)\n }\n }\n },\n [setCurrentInput, setResolutions, fieldMutator],\n )\n\n useEffect(() => {\n if (resolvedAddress) {\n onValueChange(resolvedAddress)\n }\n }, [resolvedAddress, onValueChange])\n\n const adornment = isResolving\n ? {\n endAdornment: (\n \n \n \n ),\n }\n : inputAdornment\n\n return (\n <>\n \n\n {onValueChange}\n \n )\n}\n\nexport default AddressInput\n","import { AppReduxState } from 'src/store'\nimport { CURRENCY_REDUCER_ID, CurrencyValuesState } from 'src/logic/currencyValues/store/reducer/currencyValues'\n\nexport const currencyValuesSelector = (state: AppReduxState): CurrencyValuesState => state[CURRENCY_REDUCER_ID]\n\nexport const currentCurrencySelector = (state: AppReduxState): string => {\n return state[CURRENCY_REDUCER_ID].selectedCurrency\n}\n\nexport const availableCurrenciesSelector = (state: AppReduxState): string[] => {\n return state[CURRENCY_REDUCER_ID].availableCurrencies\n}\n","import { getCollectibles, SafeCollectibleResponse } from '@gnosis.pm/safe-react-gateway-sdk'\nimport { _getChainId } from 'src/config'\nimport { checksumAddress } from 'src/utils/checksumAddress'\n\nexport const fetchSafeCollectibles = async (safeAddress: string): Promise => {\n return getCollectibles(_getChainId(), checksumAddress(safeAddress))\n}\n","import { SafeCollectibleResponse, TokenType } from '@gnosis.pm/safe-react-gateway-sdk'\n\nimport { Collectibles, NFTAsset, NFTAssets, NFTTokens } from 'src/logic/collectibles/sources/collectibles.d'\nimport { sameAddress } from 'src/logic/wallets/ethAddresses'\nimport NFTIcon from 'src/routes/safe/components/Balances/assets/nft_icon.png'\nimport { fetchSafeCollectibles } from 'src/logic/tokens/api/fetchSafeCollectibles'\nimport { Errors, logError } from 'src/logic/exceptions/CodedException'\n\ntype TokenResult = {\n address: string\n decimals?: number\n logoUri: string\n name: string\n symbol: string\n type: TokenType\n}\n\ntype FetchResult = {\n erc721Assets: TokenResult[]\n erc721Tokens: SafeCollectibleResponse[]\n}\nclass Gnosis {\n _getAssetsFromTokens = (tokens: SafeCollectibleResponse[]): TokenResult[] => {\n const assets: TokenResult[] = tokens.map(({ address, logoUri, tokenName, tokenSymbol }) => ({\n address,\n decimals: undefined,\n logoUri,\n name: tokenName,\n symbol: tokenSymbol,\n type: TokenType.ERC721,\n }))\n\n return assets\n }\n\n _fetch = async (safeAddress: string): Promise => {\n const collectibles: FetchResult = {\n erc721Assets: [],\n erc721Tokens: [],\n }\n\n try {\n const tokens = await fetchSafeCollectibles(safeAddress)\n collectibles.erc721Assets = this._getAssetsFromTokens(tokens)\n collectibles.erc721Tokens = tokens || []\n } catch (error) {\n logError(Errors._604, error.message)\n }\n\n return collectibles\n }\n\n static extractNFTAsset = (asset: TokenResult, nftTokens: NFTTokens): NFTAsset => {\n const mainAssetAddress = asset.address\n const numberOfTokens = nftTokens.filter(({ assetAddress }) => sameAddress(assetAddress, mainAssetAddress)).length\n\n return {\n address: mainAssetAddress,\n description: asset.name,\n image: asset.logoUri || NFTIcon,\n name: asset.name,\n numberOfTokens,\n slug: `${mainAssetAddress}_${asset.name}`,\n symbol: asset.symbol,\n }\n }\n\n static extractAssets(assets: TokenResult[], nftTokens: NFTTokens): NFTAssets {\n const extractedAssets = {}\n\n assets.forEach((asset) => {\n const address = asset.address\n\n if (extractedAssets[address] === undefined) {\n extractedAssets[address] = Gnosis.extractNFTAsset(asset, nftTokens)\n }\n })\n\n return extractedAssets\n }\n\n static extractTokens(tokens: SafeCollectibleResponse[]): NFTTokens {\n const items = tokens.map((token) => ({\n assetAddress: token.address,\n color: 'red',\n description: token.description || '',\n image: token.imageUri || NFTIcon,\n name: token.name || '',\n tokenId: token.id,\n }))\n return items\n }\n\n /**\n * Fetches from OpenSea the list of collectibles, grouped by category,\n * for the provided Safe Address in the specified Network\n * @param {string} safeAddress\n * @returns {Promise}\n */\n async fetchCollectibles(safeAddress: string): Promise {\n const { erc721Assets, erc721Tokens } = await this._fetch(safeAddress)\n\n const nftTokens = Gnosis.extractTokens(erc721Tokens)\n const nftAssets = Gnosis.extractAssets(erc721Assets, nftTokens)\n\n return { nftTokens, nftAssets }\n }\n}\n\nexport default Gnosis\n","import Gnosis from 'src/logic/collectibles/sources/Gnosis'\nimport { COLLECTIBLES_SOURCE } from 'src/utils/constants'\n\nconst SOURCES = {\n gnosis: new Gnosis(),\n}\n\ntype Sources = typeof SOURCES\n\nexport const getConfiguredSource = (): Sources['gnosis'] => SOURCES[COLLECTIBLES_SOURCE.toLowerCase()]\n","import { Dispatch } from 'redux'\n\nimport { getConfiguredSource } from 'src/logic/collectibles/sources'\nimport { addNftAssets, addNftTokens, setNftTokensLoaded } from 'src/logic/collectibles/store/actions/addCollectibles'\n\nexport const fetchCollectibles =\n (safeAddress: string) =>\n async (dispatch: Dispatch): Promise => {\n dispatch(setNftTokensLoaded(false))\n try {\n const source = getConfiguredSource()\n const collectibles = await source.fetchCollectibles(safeAddress)\n\n dispatch(addNftAssets(collectibles.nftAssets))\n dispatch(addNftTokens(collectibles.nftTokens))\n dispatch(setNftTokensLoaded(true))\n } catch (error) {\n dispatch(setNftTokensLoaded(false))\n console.log('Error fetching collectibles:', error)\n }\n }\n","import { Dispatch } from 'src/logic/safe/store/actions/types.d'\n\nimport updateViewedSafes from 'src/logic/currentSession/store/actions/updateViewedSafes'\n\nconst addViewedSafe =\n (safeAddress: string) =>\n (dispatch: Dispatch): void => {\n dispatch(updateViewedSafes(safeAddress))\n }\n\nexport default addViewedSafe\n","import { Dispatch } from 'redux'\nimport { Action } from 'redux-actions'\n\nimport { updateSafe } from 'src/logic/safe/store/actions/updateSafe'\nimport { SafeRecordProps } from 'src/logic/safe/store/models/safe'\nimport { getLocalSafe } from 'src/logic/safe/utils'\nimport { getSafeInfo } from 'src/logic/safe/utils/safeInformation'\nimport { SafeInfo } from '@gnosis.pm/safe-react-gateway-sdk'\nimport { checksumAddress } from 'src/utils/checksumAddress'\nimport { buildSafeOwners, extractRemoteSafeInfo } from './utils'\nimport { AppReduxState, store } from 'src/store'\nimport { currentSafeWithNames } from '../selectors'\nimport fetchTransactions from './transactions/fetchTransactions'\nimport { fetchCollectibles } from 'src/logic/collectibles/store/actions/fetchCollectibles'\nimport { currentChainId } from 'src/logic/config/store/selectors'\nimport addViewedSafe from 'src/logic/currentSession/store/actions/addViewedSafe'\nimport { fetchSafeTokens } from 'src/logic/tokens/store/actions/fetchSafeTokens'\n\n/**\n * Builds a Safe Record that will be added to the app's store\n * It recovers, and merges information from client-gateway and localStore\n *\n * @note It's being used by \"Load Existing Safe\" and \"Create New Safe\" flows\n *\n * @param {string} safeAddress\n * @returns Promise\n */\nexport const buildSafe = async (safeAddress: string): Promise => {\n const address = checksumAddress(safeAddress)\n // setting `loadedViaUrl` to false, as `buildSafe` is called on safe Load or Open flows\n const safeInfo: Partial = { address, loadedViaUrl: false }\n\n const local = getLocalSafe(safeAddress)\n const remote = await getSafeInfo(safeAddress).catch((err) => {\n err.log()\n return null\n })\n\n // remote (client-gateway)\n const remoteSafeInfo = remote ? await extractRemoteSafeInfo(remote) : {}\n // local\n const localSafeInfo = local || ({} as Partial)\n\n // update owner's information\n const owners = buildSafeOwners(remote?.owners, localSafeInfo.owners)\n\n return { ...localSafeInfo, ...safeInfo, ...remoteSafeInfo, owners } as SafeRecordProps\n}\n\n/**\n * Updates the app's store with Safe Record built from data provided by client-gateway\n *\n * @note It's being used by the app when it loads for the first time and for the Safe's data polling\n *\n * @param {string} safeAddress\n * @param {boolean} isInitialLoad\n */\nexport const fetchSafe =\n (safeAddress: string, isInitialLoad = false) =>\n async (dispatch: Dispatch): Promise> | void> => {\n const dispatchPromises: ((dispatch: Dispatch, getState: () => AppReduxState) => Promise | void)[] = []\n\n const address = checksumAddress(safeAddress)\n\n let safeInfo: Partial = {}\n let remoteSafeInfo: SafeInfo | null = null\n\n try {\n remoteSafeInfo = await getSafeInfo(address)\n } catch (err) {\n err.log()\n }\n\n const state = store.getState()\n const chainId = currentChainId(state)\n\n // remote (client-gateway)\n if (remoteSafeInfo) {\n // If the network has changed while the safe was being loaded,\n // ignore the result\n if (remoteSafeInfo.chainId !== chainId) {\n return\n }\n\n safeInfo = await extractRemoteSafeInfo(remoteSafeInfo)\n\n // If these polling timestamps have changed, fetch again\n const { collectiblesTag, txQueuedTag, txHistoryTag } = currentSafeWithNames(state)\n\n const shouldUpdateCollectibles = collectiblesTag !== safeInfo.collectiblesTag\n const shouldUpdateTxHistory = txHistoryTag !== safeInfo.txHistoryTag\n const shouldUpdateTxQueued = txQueuedTag !== safeInfo.txQueuedTag\n\n dispatchPromises.push(dispatch(fetchSafeTokens(address)))\n\n if (shouldUpdateCollectibles || isInitialLoad) {\n dispatch(fetchCollectibles(address))\n }\n\n if (shouldUpdateTxHistory || shouldUpdateTxQueued || isInitialLoad) {\n dispatchPromises.push(dispatch(fetchTransactions(chainId, address)))\n }\n\n if (isInitialLoad) {\n dispatchPromises.push(dispatch(addViewedSafe(address)))\n }\n }\n\n const owners = buildSafeOwners(remoteSafeInfo?.owners || [])\n\n await Promise.all(dispatchPromises)\n\n return dispatch(updateSafe({ address, ...safeInfo, owners, loaded: true }))\n }\n","import { List } from 'immutable'\nimport { getNativeCurrency } from 'src/config'\nimport { getNativeCurrencyAddress } from 'src/config/utils'\n\nimport { makeToken, Token } from 'src/logic/tokens/store/model/token'\nimport { sameAddress } from 'src/logic/wallets/ethAddresses'\n\nexport const getEthAsToken = (balance: string | number): Token =>\n makeToken({\n ...getNativeCurrency(),\n address: getNativeCurrencyAddress(),\n balance: {\n tokenBalance: balance.toString(),\n },\n })\n\nexport type GetTokenByAddress = {\n tokenAddress: string\n tokens: List\n}\n\ntype TokenFound = {\n balance: string | number\n decimals: string | number\n}\n\n/**\n * Finds and returns a Token object by the provided address\n * @param {string} tokenAddress\n * @param {List} tokens\n * @returns Token | undefined\n */\nexport const getBalanceAndDecimalsFromToken = ({ tokenAddress, tokens }: GetTokenByAddress): TokenFound | undefined => {\n const token = tokens?.find(({ address }) => sameAddress(address, tokenAddress))\n\n if (!token) {\n return\n }\n\n return {\n balance: token.balance.tokenBalance ?? 0,\n decimals: token.decimals ?? 0,\n }\n}\n","const border = 'rgba(var(--Mgray-darker),1)'\nconst connectedColor = 'rgba(var(--Mgreen),1)'\nconst disabled = 'rgba(var(--Mgray),1)'\nconst errorColor = 'rgba(var(--Mred),1)'\nconst fancyColor = 'rgba(var(--Mred),1)'\nconst fontColor = 'rgba(var(--Mtext),1)'\nconst fontColor2 = 'rgba(var(--Mtxt),1)'\nconst headerHeight = '72px'\nconst lg = '24px'\nconst marginButtonImg = '12px'\nconst md = '16px'\n\nconst primary = 'rgba(var(--Mprimary),1)'\nconst primaryLite = 'rgba(var(--Mprimary-lighter),1)'\nconst primaryActive = 'rgba(var(--Mprimary-darkest),1)'\nconst secondary = 'rgba(var(--Mprimary),1)'\nconst secondaryTextOrSvg = 'rgba(var(--Mtext),1)'\nconst secondaryBackground = 'rgba(var(--Mprimary-darkest),1)'\n\nconst sm = '8px'\nconst warningColor = 'rgba(var(--Myellow),1)'\nconst alertWarningColor = 'rgba(var(--Myellow),1)'\nconst infoColor = 'rgba(var(--Mblue),1)'\nconst xl = '32px'\nconst xs = '4px'\nconst xxl = '40px'\n\nmodule.exports = {\n white: 'rgba(var(--Mwhite),1)',\n light: 'rgba(var(--Mlight),1)',\n dark: 'rgba(var(--Mdark),1)',\n background: 'rgba(var(--Mgray),1)',\n black300: 'rgba(var(--Mtext-lightest),1)',\n black400: 'rgba(var(--Mtext-lighter),1)',\n black500: 'rgba(var(--Mtext),1)',\n black600: 'rgba(var(--Mtext-darker),1)',\n boldFont: 700,\n bolderFont: 500,\n border,\n buttonLargeFontSize: '16px',\n connected: connectedColor,\n disabled,\n error: errorColor,\n extraBoldFont: 800,\n extraLargeFontSize: '20px',\n extraSmallFontSize: '11px',\n fancy: fancyColor,\n fontColor,\n fontColor2,\n fontSizeHeadingLg: 32,\n fontSizeHeadingMd: 20,\n fontSizeHeadingSm: 16,\n fontSizeHeadingXs: 13,\n grey400: 'rgba(var(--Mgray-lightest),1)',\n gray500: 'rgba(var(--Mgray-lighter),1)',\n green200: 'rgba(var(--Mgray),1)',\n green500: 'rgba(var(--Mgray-darker),1)',\n headerHeight,\n largeFontSize: '16px',\n lg,\n lightFont: 300,\n mainFontFamily: \"'Montserrat', sans-serif\",\n marginButtonImg,\n md,\n mediumFontSize: '14px',\n orange500: '#e8663d',\n orange200: '#FFF4E3',\n primary,\n primaryLite,\n primaryActive,\n primary200: primaryLite,\n primary300: 'rgba(var(--Mprimary),1)',\n primary400: primaryActive,\n infoColor,\n regularFont: 400,\n red400: 'rgba(var(--Mred),1)',\n screenLg: 1200,\n screenMd: 992,\n screenMdMax: 1199,\n screenSm: 768,\n screenSmMax: 991,\n screenXs: 480,\n screenXsMax: 767,\n secondary,\n secondaryFontFamily: \"'Montserrat', sans-serif\",\n secondaryText: secondaryTextOrSvg,\n secondaryBackground,\n sm,\n smallFontSize: '12px',\n warning: warningColor,\n alertWarning: alertWarningColor,\n xl,\n xs,\n xxl,\n xxlFontSize: '32px',\n}\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.findDeployment = void 0;\nconst satisfies_1 = __importDefault(require(\"semver/functions/satisfies\"));\nconst DEFAULT_FILTER = { released: true };\nconst findDeployment = (criteria = DEFAULT_FILTER, deployments) => deployments.find((deployment) => {\n if (criteria.version && !satisfies_1.default(deployment.version, criteria.version))\n return false;\n if (typeof criteria.released === 'boolean' && deployment.released != criteria.released)\n return false;\n if (criteria.network && !deployment.networkAddresses[criteria.network])\n return false;\n return true;\n});\nexports.findDeployment = findDeployment;\n","export const sortObject = (obj: Record, order = 'asc'): any => {\n return Object.keys(obj)\n .sort((a: string, b: string) => Number(order === 'desc' ? b : a) - Number(order === 'desc' ? a : b))\n .reduce(\n (acc, key) => ({\n ...acc,\n [key]: obj[key],\n }),\n {},\n )\n}\n\nexport const objectByString = function (o: any, s: string) {\n s = s.replace(/\\[(\\w+)\\]/g, '.$1') // convert indexes to properties\n s = s.replace(/^\\./, '') // strip a leading dot\n var a = s.split('.')\n for (var i = 0, n = a.length; i < n; ++i) {\n var k = a[i]\n if (k in o) {\n o = o[k]\n } else {\n return\n }\n }\n return o\n}\n\nexport function deepen(obj: object): object {\n const result = {}\n\n // For each object path (property key) in the object\n for (const objectPath in obj) {\n // Split path into component parts\n const parts = objectPath.split('.')\n\n // Create sub-objects along path as needed\n let target = result\n while (parts.length > 1) {\n const part = parts.shift()\n if (part) {\n target = target[part] = target[part] || {}\n }\n }\n\n // Set value at end of path\n target[parts[0]] = obj[objectPath]\n }\n\n return result\n}\n","import { getTransactionDetails, TransactionDetails } from '@gnosis.pm/safe-react-gateway-sdk'\n\nimport { _getChainId } from 'src/config'\n\n// Cache the request promise to avoid simulateneous requests\n// It's cleared as soon as the promise is resolved\nconst cache = {}\n\n/**\n * @param {string} txId safeTxHash or transaction id from client-gateway\n */\nexport const fetchSafeTransaction = async (txId: string): Promise => {\n const chainId = _getChainId()\n const cacheKey = `${chainId}_${txId}`\n\n const promise: Promise = cache[cacheKey] || getTransactionDetails(chainId, txId)\n\n // Save the promise into cache\n cache[cacheKey] = promise\n\n // Clear cache when promise finishes\n promise.catch(() => null).then(() => delete cache[cacheKey])\n\n return promise\n}\n","import { createAction } from 'redux-actions'\n\nexport const REMOVE_SAFE = 'REMOVE_SAFE'\n\nconst removeSafe = createAction(REMOVE_SAFE)\n\nexport default removeSafe\n","import { List } from 'immutable'\nimport { createSelector } from 'reselect'\nimport { AddressBookEntry, makeAddressBookEntry } from 'src/logic/addressBook/model/addressBook'\nimport { currentNetworkAddressBookAsMap } from 'src/logic/addressBook/store/selectors'\nimport { currentChainId } from 'src/logic/config/store/selectors'\nimport makeSafe, { SafeRecord, SafeRecordProps } from 'src/logic/safe/store/models/safe'\nimport { SAFE_REDUCER_ID } from 'src/logic/safe/store/reducer/safe'\nimport { SafesMap } from 'src/logic/safe/store/reducer/types/safe'\nimport { AppReduxState } from 'src/store'\nimport { Overwrite } from 'src/types/helpers'\nimport { currentSafeAddress } from 'src/logic/currentSession/store/selectors'\n\nconst safesState = (state: AppReduxState) => state[SAFE_REDUCER_ID]\n\nexport const safesAsMap = (state: AppReduxState): SafesMap => safesState(state).get('safes')\n\nexport const safesAsList = createSelector(safesAsMap, (safes): List => safes.toList())\n\nexport const latestMasterContractVersion = createSelector(safesState, (safeState) =>\n safeState.get('latestMasterContractVersion'),\n)\n\nexport const currentSafe = createSelector([safesAsMap, currentSafeAddress], (safes: SafesMap, address: string) => {\n return safes.get(address, baseSafe(address)) ?? {}\n})\n\nconst baseSafe = (address = '') => makeSafe({ address })\n\nexport const safeFieldSelector =\n (field: K) =>\n (safe: SafeRecord): SafeRecordProps[K] =>\n safe.get(field, baseSafe().get(field))\n\nexport const currentSafeEthBalance = createSelector(currentSafe, safeFieldSelector('ethBalance'))\n\nexport const currentSafeBalances = createSelector(currentSafe, safeFieldSelector('balances'))\n\nexport const currentSafeLoaded = createSelector(currentSafe, safeFieldSelector('loaded'))\n\nexport const currentSafeNeedsUpdate = createSelector(currentSafe, safeFieldSelector('needsUpdate'))\n\nexport const currentSafeCurrentVersion = createSelector(currentSafe, safeFieldSelector('currentVersion'))\n\nexport const currentSafeThreshold = createSelector(currentSafe, safeFieldSelector('threshold'))\n\nexport const currentSafeNonce = createSelector(currentSafe, safeFieldSelector('nonce'))\n\nexport const currentSafeOwners = createSelector(currentSafe, safeFieldSelector('owners'))\n\nexport const currentSafeModules = createSelector(currentSafe, safeFieldSelector('modules'))\n\nexport const currentSafeFeaturesEnabled = createSelector(currentSafe, safeFieldSelector('featuresEnabled'))\n\nexport const currentSafeSpendingLimits = createSelector(currentSafe, safeFieldSelector('spendingLimits'))\n\nexport const currentSafeTotalFiatBalance = createSelector(currentSafe, safeFieldSelector('totalFiatBalance'))\n\n/*************************/\n/* With AddressBook Data */\n/*************************/\nconst baseSafeWithName = (address = '') => ({ ...baseSafe(address).toJS(), name: '' })\n\nexport type SafeRecordWithNames = Overwrite & { name: string }\n\nexport const safesWithNamesAsList = createSelector(\n [safesAsList, currentNetworkAddressBookAsMap, currentChainId],\n (safesList, addressBookMap, chainId): SafeRecordWithNames[] => {\n return safesList\n .map((safeRecord) => {\n const safe = safeRecord.toObject()\n const name = addressBookMap?.[safe.address]?.name ?? ''\n\n const owners = safe.owners.map((ownerAddress) => {\n return addressBookMap?.[ownerAddress] ?? makeAddressBookEntry({ address: ownerAddress, name: '', chainId })\n })\n\n return { ...safe, name, owners }\n })\n .toJS()\n },\n)\n\nexport const safesWithNamesAsMap = createSelector(\n [safesWithNamesAsList],\n (\n safesList,\n ): {\n [address: string]: SafeRecordWithNames\n } => {\n \n return safesList.reduce((acc, safe) => {\n acc[safe.address] = safe\n return acc\n }, {})\n },\n)\n\nexport const currentSafeWithNames = createSelector(\n [safesWithNamesAsMap, currentSafe],\n (safesMap, safe): SafeRecordWithNames => safesMap[safe.address] || baseSafeWithName(safe.address),\n)\n","import { ReactElement } from 'react'\nimport styled from 'styled-components'\n\nimport ConnectButton from 'src/components/ConnectButton'\nimport MobilePairing from 'src/walliro/containers/AppLayout/Header/ProviderDetails/MobilePairing'\n\nconst StyledContainer = styled.div<{\n $vertical: boolean\n}>`\n display: flex;\n flex-wrap: wrap;\n box-sizing: border-box;\n justify-content: space-between;\n gap: ${(props) => (props.$vertical ? '20px' : '60px')};\n max-width: ${(props) => (props.$vertical ? '280px' : 'auto')};\n padding: ${(props) => (props.$vertical ? '20px' : '0')};\n`\n\nconst ConnectDetails = ({ vertical = false }: { vertical?: boolean }): ReactElement => (\n \n \n\n {/* */}\n \n)\n\nexport default ConnectDetails\n","import { ReactElement } from 'react'\nimport { Text } from '@gnosis.pm/safe-react-components'\nimport { switchWalletChain } from 'src/logic/wallets/utils/network'\nimport ChainIndicator from 'src/components/ChainIndicator'\nimport { useSelector } from 'react-redux'\nimport { currentChainId } from 'src/logic/config/store/selectors'\nimport { Button } from 'react-bootstrap'\n\nconst WalletSwitch = (): ReactElement => {\n const chainId = useSelector(currentChainId)\n return (\n \n )\n}\n\nexport default WalletSwitch\n","import { useState, useEffect } from 'react'\nimport local from './local'\n\nconst useCachedState = (key: string): [T | undefined, React.Dispatch>] => {\n const [cache, setCache] = useState()\n\n useEffect(() => {\n const saved = local.getItem(key)\n setCache(saved)\n }, [key, setCache])\n\n useEffect(() => {\n local.setItem(key, cache)\n }, [key, cache])\n\n return [cache, setCache]\n}\n\nexport default useCachedState\n","import { EMPTY_DATA } from 'src/logic/wallets/ethTransactions'\nimport { getWeb3 } from 'src/logic/wallets/getWeb3'\nimport { AbstractProvider } from 'web3-core/types'\nimport { adjustV } from './utils'\n\nconst ETH_SIGN_NOT_SUPPORTED_ERROR_MSG = 'ETH_SIGN_NOT_SUPPORTED'\n\nexport type EthSignerArgs = {\n safeTxHash: string\n sender: string\n}\n\nexport const ethSigner = async ({ safeTxHash, sender }: EthSignerArgs): Promise => {\n const web3 = getWeb3()\n\n return new Promise(function (resolve, reject) {\n const provider = web3.currentProvider as AbstractProvider\n provider.sendAsync(\n {\n jsonrpc: '2.0',\n method: 'eth_sign',\n params: [sender, safeTxHash],\n id: new Date().getTime(),\n },\n async function (err, signature) {\n if (err) {\n return reject(err)\n }\n\n if (signature?.result == null) {\n reject(new Error(ETH_SIGN_NOT_SUPPORTED_ERROR_MSG))\n return\n }\n\n const sig = adjustV('eth_sign', signature.result, safeTxHash, sender)\n\n resolve(sig.replace(EMPTY_DATA, ''))\n },\n )\n })\n}\n","import semverSatisfies from 'semver/functions/satisfies'\n\nimport { isPairingModule } from 'src/logic/wallets/pairing/utils'\nimport { isWalletRejection } from 'src/logic/wallets/errors'\nimport { getEIP712Signer, SigningTxArgs } from './EIP712Signer'\nimport { ethSigner, EthSignerArgs } from './ethSigner'\n\n// 1. we try to sign via EIP-712 if user's wallet supports it\n// 2. If not, try to use eth_sign (Safe version has to be >1.1.1)\n// If eth_sign, doesn't work continue with the regular flow (on-chain signatures, more in createTransaction.ts)\n\nconst SIGNERS = {\n EIP712_V3: getEIP712Signer('v3'),\n EIP712_V4: getEIP712Signer('v4'),\n EIP712: getEIP712Signer(),\n ETH_SIGN: ethSigner,\n}\n\nexport const SAFE_VERSION_FOR_OFF_CHAIN_SIGNATURES = '>=1.0.0'\n\n// hardware wallets support eth_sign only\n// eth_sign is only supported by safes >= 1.1.0\ntype SupportedSigners = typeof SIGNERS[keyof typeof SIGNERS][]\nconst getSupportedSigners = (isHW: boolean, safeVersion: string): SupportedSigners => {\n // v1 of desktop pairing only supports eth_sign\n if (isPairingModule()) {\n return [SIGNERS.ETH_SIGN]\n }\n\n const safeSupportsEthSigner = semverSatisfies(safeVersion, '>=1.1.0')\n\n const signers: SupportedSigners = isHW ? [] : [SIGNERS.EIP712_V3, SIGNERS.EIP712_V4, SIGNERS.EIP712]\n\n if (safeSupportsEthSigner) {\n signers.push(SIGNERS.ETH_SIGN)\n }\n\n return signers\n}\n\nexport const tryOffChainSigning = async (\n safeTxHash: string,\n txArgs: Omit,\n isHW: boolean,\n safeVersion: string,\n): Promise => {\n let signature\n\n const signerByWallet = getSupportedSigners(isHW, safeVersion)\n for (const signingFunc of signerByWallet) {\n try {\n signature = await signingFunc({ ...txArgs, safeTxHash, safeVersion })\n\n break\n } catch (err) {\n if (isWalletRejection(err)) {\n // user rejected, exit\n throw err\n }\n // continue to the next signing method\n }\n }\n\n return signature\n}\n","import classNames from 'classnames/bind'\nimport * as React from 'react'\n\nimport { capitalize } from 'src/utils/css'\nimport styles from './index.module.scss'\n\nconst cx = classNames.bind(styles)\n\nclass Block extends React.PureComponent {\n render(): React.ReactElement {\n const { children, className, justify, margin, padding, ...props } = this.props\n\n const paddingStyle = padding ? capitalize(padding, 'padding') : undefined\n return (\n
\n {children}\n
\n )\n }\n}\n\nexport default Block\n","import classNames from 'classnames/bind'\nimport { ReactElement } from 'react'\n\nimport styles from './index.module.scss'\n\nimport { capitalize } from 'src/utils/css'\n\nconst cx = classNames.bind(styles)\n\nconst Row = ({ align, children, className, grow, margin, testId = '', ...props }: any): ReactElement => {\n const rowClassNames = cx(\n styles.row,\n margin ? capitalize(margin, 'margin') : undefined,\n align ? capitalize(align, 'align') : undefined,\n { grow },\n className,\n )\n\n return (\n
\n {children}\n
\n )\n}\n\nexport default Row\n","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKgAAAAoCAYAAABq+7FsAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2hpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDA2IDc5LmRhYmFjYmIsIDIwMjEvMDQvMTQtMDA6Mzk6NDQgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6REMwREQ0OEYxODgzMTFFQzg2ODg5QjVCRkU5OTYxNjkiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QTE3MjhFRkIyQTVBMTFFQ0ExOTVDNjNEM0U1NUQxMEUiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QTE3MjhFRkEyQTVBMTFFQ0ExOTVDNjNEM0U1NUQxMEUiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIyLjQgKFdpbmRvd3MpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6OUY1MkVFRjQxQUE5MTFFQzg5N0M4MTZGNzUxNTVCQzMiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6OUY1MkVFRjUxQUE5MTFFQzg5N0M4MTZGNzUxNTVCQzMiLz4gPC9yZGY6RGVzY3Jp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\"","import { useState, useCallback } from 'react'\n\nexport type ReturnValue = {\n open: boolean\n toggle: (e?: Event) => void\n clickAway: () => void\n}\n\nexport const useStateHandler = (openInitialValue = false): ReturnValue => {\n const [open, setOpen] = useState(openInitialValue)\n const toggle = useCallback((e?: Event) => {\n e?.stopPropagation()\n\n setOpen((prevOpen) => !prevOpen)\n }, [])\n const clickAway = useCallback(() => setOpen(false), [])\n\n return {\n open,\n toggle,\n clickAway,\n }\n}\n","import { createAction } from 'redux-actions'\n\nexport const CLEAR_SAFE_LIST = 'CLEAR_SAFE_LIST'\n\nexport const clearSafeList = createAction(CLEAR_SAFE_LIST)\n","import { createAction } from 'redux-actions'\n\nexport const LOAD_CURRENT_SESSION = 'LOAD_CURRENT_SESSION'\n\nconst loadCurrentSession = createAction(LOAD_CURRENT_SESSION)\n\nexport default loadCurrentSession\n","import { createAction } from 'redux-actions'\n\nexport const UPDATE_VIEWED_SAFES = 'UPDATE_VIEWED_SAFES'\n\nconst updateViewedSafes = createAction(UPDATE_VIEWED_SAFES)\n\nexport default updateViewedSafes\n","import { createAction } from 'redux-actions'\n\nexport const CLEAR_CURRENT_SESSION = 'CLEAR_CURRENT_SESSION'\n\nexport const clearCurrentSession = createAction(CLEAR_CURRENT_SESSION)\n","import { createAction } from 'redux-actions'\n\nexport const ADD_CURRENT_SHORT_NAME = 'ADD_CURRENT_SHORT_NAME'\n\nconst addCurrentShortName = createAction(ADD_CURRENT_SHORT_NAME)\n\nexport default addCurrentShortName\n","import { createAction } from 'redux-actions'\n\nexport const ADD_TOKENS = 'ADD_TOKENS'\n\nexport const addTokens = createAction(ADD_TOKENS, (tokens) => ({\n tokens,\n}))\n","import { sameString } from 'src/utils/strings'\nimport { bufferToHex, ecrecover, pubToAddress } from 'ethereumjs-util'\n\nexport const isTxHashSignedWithPrefix = (txHash: string, signature: string, ownerAddress: string): boolean => {\n let hasPrefix\n try {\n const rsvSig = {\n r: Buffer.from(signature.slice(2, 66), 'hex'),\n s: Buffer.from(signature.slice(66, 130), 'hex'),\n v: parseInt(signature.slice(130, 132), 16),\n }\n const recoveredData = ecrecover(Buffer.from(txHash.slice(2), 'hex'), rsvSig.v, rsvSig.r, rsvSig.s)\n const recoveredAddress = bufferToHex(pubToAddress(recoveredData))\n hasPrefix = !sameString(recoveredAddress, ownerAddress)\n } catch (e) {\n hasPrefix = true\n }\n return hasPrefix\n}\n\ntype AdjustVOverload = {\n (signingMethod: 'eth_signTypedData', signature: string): string\n (signingMethod: 'eth_sign', signature: string, safeTxHash: string, sender: string): string\n}\n\nexport const adjustV: AdjustVOverload = (\n signingMethod: 'eth_sign' | 'eth_signTypedData',\n signature: string,\n safeTxHash?: string,\n sender?: string,\n): string => {\n const MIN_VALID_V_VALUE = 27\n let sigV = parseInt(signature.slice(-2), 16)\n\n if (signingMethod === 'eth_sign') {\n /* \n Usually returned V (last 1 byte) is 27 or 28 (valid ethereum value)\n Metamask with ledger returns v = 01, this is not valid for ethereum\n In case V = 0 or 1 we add it to 27 or 28\n Adding 4 is required if signed message was prefixed with \"\\x19Ethereum Signed Message:\\n32\"\n Some wallets do that, some wallets don't, V > 30 is used by contracts to differentiate between prefixed and non-prefixed messages\n https://github.com/gnosis/safe-contracts/blob/main/contracts/GnosisSafe.sol#L292\n */\n if (sigV < MIN_VALID_V_VALUE) {\n sigV += MIN_VALID_V_VALUE\n }\n const adjusted = signature.slice(0, -2) + sigV.toString(16)\n const signatureHasPrefix = isTxHashSignedWithPrefix(safeTxHash as string, adjusted, sender as string)\n if (signatureHasPrefix) {\n sigV += 4\n }\n }\n\n if (signingMethod === 'eth_signTypedData') {\n // Metamask with ledger returns V=0/1 here too, we need to adjust it to be ethereum's valid value (27 or 28)\n if (sigV < MIN_VALID_V_VALUE) {\n sigV += MIN_VALID_V_VALUE\n }\n }\n\n return signature.slice(0, -2) + sigV.toString(16)\n}\n","import { Record } from 'immutable'\nimport { ConfirmationProps } from './types/confirmation'\n\nexport const makeConfirmation = Record({\n owner: '',\n type: 'initialised',\n hash: '',\n signature: null,\n})\n","import { TokenType } from '@gnosis.pm/safe-react-gateway-sdk'\nimport { Record, RecordOf } from 'immutable'\n\nimport { BalanceRecord } from 'src/logic/tokens/store/actions/fetchSafeTokens'\n\nexport type TokenProps = {\n address: string\n name: string\n symbol: string\n decimals: number | string\n logoUri: string | null\n balance: BalanceRecord\n type?: TokenType\n}\n\nexport const makeToken = Record({\n address: '',\n name: '',\n symbol: '',\n decimals: 0,\n logoUri: '',\n balance: {\n fiatBalance: '0',\n tokenBalance: '0',\n },\n})\n// balance is only set in extendedSafeTokensSelector when we display user's token balances\n\nexport type Token = RecordOf\n","export default __webpack_public_path__ + \"static/media/token_placeholder.c1abe466.svg\";","import { FEATURES } from '@gnosis.pm/safe-react-gateway-sdk'\nimport { useSelector } from 'react-redux'\nimport { currentSafeCurrentVersion } from 'src/logic/safe/store/selectors'\nimport { hasFeature } from 'src/logic/safe/utils/safeVersion'\n\nconst useSafeTxGas = (): boolean => {\n const safeVersion = useSelector(currentSafeCurrentVersion)\n const showSafeTxGas = !hasFeature(FEATURES.SAFE_TX_GAS_OPTIONAL, safeVersion)\n return showSafeTxGas\n}\n\nexport default useSafeTxGas\n","import { createStyles, makeStyles } from '@material-ui/core'\nimport { sm } from 'src/theme/variables'\nimport Row from 'src/components/layout/Row'\nimport Paragraph from 'src/components/layout/Paragraph'\nimport Img from 'src/components/layout/Img'\nimport InfoIcon from 'src/assets/icons/info_red.svg'\n\nimport { useSelector } from 'react-redux'\nimport { shouldSwitchWalletChain } from 'src/logic/wallets/store/selectors'\nimport { grantedSelector, sameAddressAsSafeSelector } from 'src/routes/safe/container/selector'\nimport { EstimationStatus } from 'src/logic/hooks/useEstimateTransactionGas'\n\nenum ErrorMessage {\n general = 'This transaction will most likely fail.',\n creation = 'To save gas costs, avoid creating the transaction.',\n execution = 'To save gas costs, reject this transaction.',\n notOwner = `You are currently not an owner of this Walliro and won't be able to submit this transaction.`,\n wrongChain = 'Your wallet is connected to the wrong chain.',\n sameAddress = `Cannot execute a transaction from the Walliro itself, please connect a different account.`,\n}\n\nconst styles = createStyles({\n executionWarningRow: {\n display: 'flex',\n alignItems: 'center',\n },\n warningIcon: {\n marginRight: sm,\n },\n})\n\nconst useStyles = makeStyles(styles)\n\ntype TransactionFailTextProps = {\n isExecution: boolean\n isCreation: boolean\n estimationStatus: EstimationStatus\n}\n\nexport const TransactionFailText = ({\n isExecution,\n isCreation,\n estimationStatus,\n}: TransactionFailTextProps): React.ReactElement | null => {\n const classes = useStyles()\n const isWrongChain = useSelector(shouldSwitchWalletChain)\n const isOwner = useSelector(grantedSelector)\n const isSameAddressAsSafe = useSelector(sameAddressAsSafeSelector)\n\n const showError =\n isWrongChain ||\n (isExecution && estimationStatus === EstimationStatus.FAILURE) ||\n (isCreation && !isOwner) ||\n isSameAddressAsSafe\n if (!showError) return null\n\n const errorDesc = isCreation ? ErrorMessage.creation : ErrorMessage.execution\n const defaultMsg = `${ErrorMessage.general} ${errorDesc}`\n\n const error = isWrongChain\n ? ErrorMessage.wrongChain\n : isCreation && !isOwner\n ? ErrorMessage.notOwner\n : isSameAddressAsSafe\n ? ErrorMessage.sameAddress\n : defaultMsg\n\n return (\n \n \n \"Info\n {error}\n \n \n )\n}\n\n// For tests\nexport const _ErrorMessage = ErrorMessage\n","export default __webpack_public_path__ + \"static/media/cypress_logo.071c7e70.svg\";","import HDWalletProvider from '@truffle/hdwallet-provider'\nimport { WalletModule } from 'bnc-onboard/dist/src/interfaces'\nimport { getRpcServiceUrl } from 'src/config'\nimport CypressLogo from 'src/assets/icons/cypress_logo.svg'\n\nconst WALLET_NAME = 'E2E Wallet'\n\nconst getE2EWalletModule = (): WalletModule => {\n return {\n name: WALLET_NAME,\n type: 'injected',\n iconSrc: CypressLogo,\n wallet: async (helpers) => {\n const { createModernProviderInterface } = helpers\n const provider = new HDWalletProvider({\n mnemonic: window.Cypress.env('CYPRESS_MNEMONIC'),\n providerOrUrl: getRpcServiceUrl(),\n })\n return {\n provider,\n interface: createModernProviderInterface(provider),\n }\n },\n desktop: true,\n mobile: true,\n }\n}\n\nexport default getE2EWalletModule\n","import { WalletInitOptions, WalletModule, WalletSelectModuleOptions } from 'bnc-onboard/dist/src/interfaces'\n\nimport { getRpcServiceUrl, getDisabledWallets, getChainById } from 'src/config'\nimport { ChainId, CHAIN_ID, WALLETS } from 'src/config/chain.d'\nimport { FORTMATIC_KEY, PORTIS_ID, WC_BRIDGE } from 'src/utils/constants'\nimport getPairingModule from 'src/logic/wallets/pairing/module'\nimport { isPairingSupported } from 'src/logic/wallets/pairing/utils'\nimport { getChains } from 'src/config/cache/chains'\nimport getE2EWalletModule from '../e2e-wallet/module'\n\ntype Wallet = (WalletInitOptions | WalletModule) & {\n desktop: boolean // Whether wallet supports desktop app\n walletName: WALLETS\n}\n\nconst wallets = (chainId: ChainId): Wallet[] => {\n // Ensure RPC matches chainId drilled from Onboard init\n const { rpcUri } = getChainById(chainId)\n const rpcUrl = getRpcServiceUrl(rpcUri)\n\n return [\n { walletName: WALLETS.METAMASK, preferred: true, desktop: false },\n { walletName: WALLETS.TALLYHO, preferred: false, desktop: false },\n {\n walletName: WALLETS.WALLET_CONNECT,\n rpc: getChains().reduce((map, { chainId, rpcUri }) => {\n return {\n ...map,\n [chainId]: getRpcServiceUrl(rpcUri),\n }\n }, {}),\n bridge: WC_BRIDGE,\n preferred: true,\n desktop: true,\n },\n {\n walletName: WALLETS.TREZOR,\n appUrl: 'gnosis-safe.io',\n preferred: true,\n email: 'safe@gnosis.io',\n desktop: true,\n rpcUrl,\n },\n {\n walletName: WALLETS.LEDGER,\n desktop: true,\n preferred: true,\n rpcUrl,\n LedgerTransport: (window as any).TransportNodeHid,\n },\n {\n walletName: WALLETS.KEYSTONE,\n desktop: false,\n rpcUrl,\n appName: 'Walliro',\n },\n { walletName: WALLETS.TRUST, preferred: true, desktop: false },\n {\n walletName: WALLETS.LATTICE,\n rpcUrl,\n appName: 'Walliro',\n desktop: false,\n },\n {\n walletName: WALLETS.FORTMATIC,\n apiKey: FORTMATIC_KEY,\n desktop: true,\n },\n {\n walletName: WALLETS.PORTIS,\n apiKey: PORTIS_ID,\n desktop: true,\n },\n { walletName: WALLETS.AUTHEREUM, desktop: false },\n { walletName: WALLETS.TORUS, desktop: true },\n { walletName: WALLETS.COINBASE, desktop: false },\n { walletName: WALLETS.WALLET_LINK, rpcUrl, desktop: false },\n { walletName: WALLETS.OPERA, desktop: false },\n { walletName: WALLETS.OPERA_TOUCH, desktop: false },\n ]\n}\n\nexport const isSupportedWallet = (name: WALLETS | string): boolean => {\n return !getDisabledWallets().some((walletName) => {\n // walletName is config wallet name, name is the wallet module name and differ\n return walletName.replace(/\\s/g, '').toLowerCase() === name.replace(/\\s/g, '').toLowerCase()\n })\n}\n\nexport const getSupportedWallets = (chainId: ChainId): WalletSelectModuleOptions['wallets'] => {\n const supportedWallets: WalletSelectModuleOptions['wallets'] = wallets(chainId)\n .filter(({ walletName, desktop }) => {\n if (!isSupportedWallet(walletName)) {\n return false\n }\n // Desktop vs. Web app wallet support\n return window.isDesktop ? desktop : true\n })\n .map(({ desktop: _, ...rest }) => rest)\n\n if (chainId === CHAIN_ID.RINKEBY && window.Cypress && window.Cypress.env('CYPRESS_MNEMONIC')) {\n supportedWallets.push(getE2EWalletModule())\n }\n\n return isPairingSupported() ? [getPairingModule(chainId), ...supportedWallets] : supportedWallets\n}\n","import { EthAdapterTransaction } from '@gnosis.pm/safe-core-sdk-types'\nimport { GasPriceOracle } from '@gnosis.pm/safe-react-gateway-sdk'\nimport axios from 'axios'\nimport { BigNumber } from 'bignumber.js'\nimport { FeeHistoryResult } from 'web3-eth'\nimport { hexToNumber } from 'web3-utils'\n\nimport { getSDKWeb3ReadOnly, getWeb3ReadOnly } from 'src/logic/wallets/getWeb3'\nimport { getFixedGasPrice, getGasPriceOracles } from 'src/config'\nimport { CodedException, Errors, logError } from 'src/logic/exceptions/CodedException'\n\nexport const EMPTY_DATA = '0x'\n\nexport const DEFAULT_MAX_GAS_FEE = 3.5e9 // 3.5 GWEI\nexport const DEFAULT_MAX_PRIO_FEE = 2.5e9 // 2.5 GWEI\n\nconst fetchGasPrice = async (gasPriceOracle: GasPriceOracle): Promise => {\n const { uri, gasParameter, gweiFactor } = gasPriceOracle\n const { data: response } = await axios.get(uri)\n const data = response.data || response.result || response // Sometimes the data comes with a data parameter\n\n const gasPrice = new BigNumber(data[gasParameter]).multipliedBy(gweiFactor)\n if (gasPrice.isNaN()) {\n throw new Error('Fetched gas price is NaN')\n }\n return gasPrice.toString()\n}\n\nexport const setMaxPrioFeePerGas = (maxPriorityFeePerGas: number, maxFeePerGas: number): number => {\n return maxPriorityFeePerGas > maxFeePerGas ? maxFeePerGas : maxPriorityFeePerGas\n}\n\nexport const getFeesPerGas = async (): Promise<{\n maxFeePerGas: number\n maxPriorityFeePerGas: number\n}> => {\n let blocks: FeeHistoryResult | undefined\n let maxPriorityFeePerGas: number | undefined\n let baseFeePerGas: number | undefined\n\n const web3 = getWeb3ReadOnly()\n\n try {\n // Lastest block, 50th reward percentile\n blocks = await web3.eth.getFeeHistory(1, 'latest', [50])\n\n // hexToNumber can throw if not parsing a valid hex string\n baseFeePerGas = hexToNumber(blocks.baseFeePerGas[0])\n maxPriorityFeePerGas = hexToNumber(blocks.reward[0][0])\n } catch (err) {\n logError(Errors._618, err.message)\n }\n\n if (!blocks || !maxPriorityFeePerGas || isNaN(maxPriorityFeePerGas) || !baseFeePerGas || isNaN(baseFeePerGas)) {\n return {\n maxFeePerGas: DEFAULT_MAX_GAS_FEE,\n maxPriorityFeePerGas: DEFAULT_MAX_PRIO_FEE,\n }\n }\n\n return {\n maxFeePerGas: baseFeePerGas + maxPriorityFeePerGas,\n maxPriorityFeePerGas,\n }\n}\n\nexport const calculateGasPrice = async (): Promise => {\n const gasPriceOracles = getGasPriceOracles()\n\n for (const gasPriceOracle of gasPriceOracles) {\n try {\n const fetchedGasPrice = await fetchGasPrice(gasPriceOracle)\n return fetchedGasPrice\n } catch (err) {\n // Keep iterating price oracles\n }\n }\n\n // A fallback to fixed gas price from the chain config\n const fixedGasPrice = getFixedGasPrice()\n if (fixedGasPrice) {\n return fixedGasPrice.weiValue\n }\n\n // A fallback based on the median of a few last blocks\n const web3ReadOnly = getWeb3ReadOnly()\n return await web3ReadOnly.eth.getGasPrice()\n}\n\nexport const calculateGasOf = async (txConfig: EthAdapterTransaction): Promise => {\n try {\n const ethAdapter = getSDKWeb3ReadOnly()\n\n return await ethAdapter.estimateGas(txConfig)\n } catch (err) {\n throw new CodedException(Errors._612, err.message)\n }\n}\n\nexport const getUserNonce = async (userAddress: string): Promise => {\n const web3 = getWeb3ReadOnly()\n try {\n return await web3.eth.getTransactionCount(userAddress, 'pending')\n } catch (error) {\n return Promise.reject(error)\n }\n}\n","import { useDispatch, useSelector } from 'react-redux'\nimport { loadPagedQueuedTransactions } from 'src/logic/safe/store/actions/transactions/fetchTransactions/loadGatewayTransactions'\nimport { addQueuedTransactions } from 'src/logic/safe/store/actions/transactions/gatewayTransactions'\nimport { currentChainId } from 'src/logic/config/store/selectors'\nimport { QueueTransactionsInfo, useQueueTransactions } from './useQueueTransactions'\nimport { Errors } from 'src/logic/exceptions/CodedException'\nimport { Await } from 'src/types/helpers'\nimport useSafeAddress from 'src/logic/currentSession/hooks/useSafeAddress'\n\ntype PagedQueuedTransactions = {\n count: number\n isLoading: boolean\n transactions?: QueueTransactionsInfo\n next: () => Promise\n}\n\nexport const usePagedQueuedTransactions = (): PagedQueuedTransactions => {\n const transactions = useQueueTransactions()\n const chainId = useSelector(currentChainId)\n\n const dispatch = useDispatch()\n const { safeAddress } = useSafeAddress()\n\n const nextPage = async () => {\n let results: Await>\n try {\n results = await loadPagedQueuedTransactions(safeAddress)\n } catch (e) {\n // No next page\n if (e.content !== Errors._608) {\n e.log()\n }\n }\n\n if (results) {\n dispatch(addQueuedTransactions({ chainId, safeAddress, values: results.values }))\n }\n }\n\n let count\n if (transactions) {\n count = transactions.next.count + transactions.queue.count\n }\n\n const isLoading = typeof transactions === 'undefined' || typeof count === 'undefined'\n\n return { count, isLoading, transactions, next: nextPage }\n}\n","import { useEffect, useState } from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\n\nimport { TransactionDetails } from 'src/logic/safe/store/models/types/gateway.d'\nimport { nextTransactions, queuedTransactions } from 'src/logic/safe/store/selectors/gatewayTransactions'\n\nexport type QueueTransactionsInfo = {\n next: TransactionDetails\n queue: TransactionDetails\n}\n\n/**\n * Get transactions (next and queue) from nextTransactions and queuedTransactions selectors\n */\nexport const useQueueTransactions = (): QueueTransactionsInfo | undefined => {\n const nextTxs = useSelector(nextTransactions)\n\n const queuedTxs = useSelector(queuedTransactions)\n const dispatch = useDispatch()\n const [txsCount, setTxsCount] = useState<{ next: number; queued: number } | undefined>()\n\n useEffect(() => {\n const next = nextTxs\n ? Object.entries(nextTxs).reduce((acc, [, transactions]) => (acc += transactions.length), 0)\n : 0\n const queued = queuedTxs\n ? Object.entries(queuedTxs).reduce((acc, [, transactions]) => (acc += transactions.length), 0)\n : 0\n\n setTxsCount({ next, queued })\n }, [dispatch, nextTxs, queuedTxs])\n\n // no data loaded to the store yet\n if ((!nextTxs && !queuedTxs) || typeof txsCount === 'undefined') {\n return\n }\n\n return {\n next: {\n count: txsCount.next,\n transactions: nextTxs ? Object.entries(nextTxs) : [],\n },\n queue: {\n count: txsCount.queued,\n transactions: queuedTxs ? Object.entries(queuedTxs) : [],\n },\n }\n}\n","import { MultisigExecutionInfo } from '@gnosis.pm/safe-react-gateway-sdk'\nimport { MouseEvent as ReactMouseEvent, useCallback, useContext, useRef } from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\n\nimport {\n isMultiSigExecutionDetails,\n LocalTransactionStatus,\n Transaction,\n} from 'src/logic/safe/store/models/types/gateway.d'\nimport { userAccountSelector } from 'src/logic/wallets/store/selectors'\nimport { addressInList } from 'src/routes/safe/components/Transactions/TxList/utils'\nimport { useTransactionActions } from './useTransactionActions'\nimport { TransactionActionStateContext } from 'src/routes/safe/components/Transactions/TxList/TxActionProvider'\nimport { TxHoverContext } from 'src/routes/safe/components/Transactions/TxList/TxHoverProvider'\nimport { TxLocationContext } from 'src/routes/safe/components/Transactions/TxList/TxLocationProvider'\nimport { showNotification } from 'src/logic/notifications/store/notifications'\nimport { NOTIFICATIONS } from 'src/logic/notifications'\nimport useTxStatus from 'src/logic/hooks/useTxStatus'\nimport { trackEvent } from 'src/utils/googleTagManager'\nimport { TX_LIST_EVENTS } from 'src/utils/events/txList'\nimport { generatePath } from 'react-router-dom'\nimport useSafeAddress from 'src/logic/currentSession/hooks/useSafeAddress'\nimport { SAFE_ROUTES, SAFE_ADDRESS_SLUG, getPrefixedSafeAddressSlug, TRANSACTION_ID_SLUG } from 'src/routes/routes'\n\ntype ActionButtonsHandlers = {\n canCancel: boolean\n handleConfirmButtonClick: (event: ReactMouseEvent) => void\n handleCancelButtonClick: (event: ReactMouseEvent) => void\n handleOnMouseEnter: () => void\n handleOnMouseLeave: () => void\n isPending: boolean\n disabledActions: boolean\n}\n\nexport const useActionButtonsHandlers = (transaction: Transaction): ActionButtonsHandlers => {\n const currentUser = useSelector(userAccountSelector)\n const actionContext = useRef(useContext(TransactionActionStateContext))\n const hoverContext = useRef(useContext(TxHoverContext))\n const locationContext = useContext(TxLocationContext)\n const dispatch = useDispatch()\n const { canCancel, canConfirmThenExecute, canExecute } = useTransactionActions(transaction)\n const txStatus = useTxStatus(transaction)\n const isPending = txStatus === LocalTransactionStatus.PENDING\n const { shortName, safeAddress } = useSafeAddress()\n\n const handleConfirmButtonClick = useCallback(\n (event: ReactMouseEvent) => {\n event.stopPropagation()\n if (transaction.txDetails && isMultiSigExecutionDetails(transaction.txDetails.detailedExecutionInfo)) {\n const details = transaction.txDetails.detailedExecutionInfo\n if (\n (canExecute && details.confirmationsRequired > details.confirmations.length) ||\n (canConfirmThenExecute && details.confirmationsRequired - 1 > details.confirmations.length)\n ) {\n const deeplink = generatePath(SAFE_ROUTES.TRANSACTIONS_SINGULAR, {\n [SAFE_ADDRESS_SLUG]: getPrefixedSafeAddressSlug({ shortName, safeAddress }),\n [TRANSACTION_ID_SLUG]: transaction.id,\n })\n\n dispatch(\n showNotification({\n ...NOTIFICATIONS.TX_FETCH_SIGNATURES_ERROR_MSG,\n link: { to: deeplink, title: 'View Transaction' },\n }),\n )\n return\n }\n }\n const actionSelected = canExecute || canConfirmThenExecute ? 'execute' : 'confirm'\n\n trackEvent(TX_LIST_EVENTS[actionSelected.toUpperCase()])\n\n actionContext.current.selectAction({\n actionSelected,\n transactionId: transaction.id,\n })\n },\n [canConfirmThenExecute, canExecute, dispatch, transaction.id, transaction.txDetails, safeAddress, shortName],\n )\n\n const handleCancelButtonClick = useCallback(\n (event: ReactMouseEvent) => {\n event.stopPropagation()\n\n trackEvent(TX_LIST_EVENTS.REJECT)\n\n actionContext.current.selectAction({\n actionSelected: 'cancel',\n transactionId: transaction.id,\n })\n },\n [transaction.id],\n )\n\n const handleOnMouseEnter = useCallback(() => {\n if (canExecute) {\n hoverContext.current.setActiveHover(transaction.id)\n }\n }, [canExecute, transaction.id])\n\n const handleOnMouseLeave = useCallback(() => {\n hoverContext.current.setActiveHover()\n }, [])\n\n const signaturePending = addressInList(\n (transaction.executionInfo as MultisigExecutionInfo)?.missingSigners ?? undefined,\n )\n\n const disabledActions =\n !currentUser ||\n isPending ||\n (txStatus === LocalTransactionStatus.AWAITING_EXECUTION && locationContext.txLocation === 'queued.queued') ||\n (txStatus === LocalTransactionStatus.AWAITING_CONFIRMATIONS && !signaturePending(currentUser))\n\n return {\n canCancel,\n handleConfirmButtonClick,\n handleCancelButtonClick,\n handleOnMouseEnter,\n handleOnMouseLeave,\n isPending,\n disabledActions,\n }\n}\n","import { MultisigExecutionInfo } from '@gnosis.pm/safe-react-gateway-sdk'\nimport { useContext, useEffect, useState } from 'react'\nimport { useSelector } from 'react-redux'\nimport useSafeAddress from 'src/logic/currentSession/hooks/useSafeAddress'\n\nimport { isCustomTxInfo, isMultisigExecutionInfo, Transaction } from 'src/logic/safe/store/models/types/gateway.d'\nimport { getTransactionsByNonce } from 'src/logic/safe/store/selectors/gatewayTransactions'\nimport { sameAddress } from 'src/logic/wallets/ethAddresses'\nimport { shouldSwitchWalletChain, userAccountSelector } from 'src/logic/wallets/store/selectors'\nimport { grantedSelector } from 'src/routes/safe/container/selector'\nimport { AppReduxState } from 'src/store'\nimport { TxLocationContext } from '../TxLocationProvider'\n\nexport type TransactionActions = {\n canConfirm: boolean\n canConfirmThenExecute: boolean\n canExecute: boolean\n canCancel: boolean\n isUserAnOwner: boolean\n}\n\nexport const useTransactionActions = (transaction: Transaction): TransactionActions => {\n const currentUser = useSelector(userAccountSelector)\n const { safeAddress } = useSafeAddress()\n const isUserAnOwner = useSelector(grantedSelector)\n const isWrongChain = useSelector(shouldSwitchWalletChain)\n const { txLocation } = useContext(TxLocationContext)\n const transactionsByNonce = useSelector((state: AppReduxState) =>\n getTransactionsByNonce(state, (transaction.executionInfo as MultisigExecutionInfo)?.nonce ?? -1),\n )\n const canCancel =\n !transactionsByNonce.some(({ txInfo }) => isCustomTxInfo(txInfo) && txInfo.isCancellation) &&\n isUserAnOwner &&\n !isWrongChain\n\n const [state, setState] = useState({\n canConfirm: false,\n canConfirmThenExecute: false,\n canExecute: false,\n canCancel: false,\n isUserAnOwner,\n })\n\n useEffect(() => {\n if (\n !!currentUser &&\n txLocation !== 'history' &&\n isMultisigExecutionInfo(transaction.executionInfo) &&\n transaction.executionInfo\n ) {\n const { missingSigners, confirmationsSubmitted = 0, confirmationsRequired = 0 } = transaction.executionInfo || {}\n\n const currentUserSigned = !missingSigners?.some((missingSigner) => sameAddress(missingSigner.value, currentUser))\n const oneToGo = confirmationsSubmitted === confirmationsRequired - 1\n const canConfirm =\n ['queued.next', 'queued.queued'].includes(txLocation) && !currentUserSigned && isUserAnOwner && !isWrongChain\n const thresholdReached = confirmationsSubmitted >= confirmationsRequired\n\n setState({\n canConfirm,\n canConfirmThenExecute: txLocation === 'queued.next' && canConfirm && oneToGo,\n canExecute: txLocation === 'queued.next' && thresholdReached && !!currentUser && !isWrongChain,\n canCancel,\n isUserAnOwner,\n })\n } else {\n setState((prev) => ({ ...prev, isUserAnOwner }))\n }\n }, [currentUser, isUserAnOwner, safeAddress, transaction, txLocation, canCancel, isWrongChain])\n\n return state\n}\n","import { createSelector } from 'reselect'\n\nimport { AppReduxState } from 'src/store'\nimport { ChainId } from 'src/config/chain.d'\nimport { CONFIG_REDUCER_ID } from '../reducer'\nimport { ConfigState } from '../reducer/reducer.d'\n\nexport const configState = (state: AppReduxState): ConfigState => state[CONFIG_REDUCER_ID]\n\nexport const currentChainId = createSelector([configState], (config): ChainId => {\n return config.chainId\n})\n","import { Text, Accordion, AccordionDetails, AccordionSummary, EthHashInfo } from '@gnosis.pm/safe-react-components'\n\nimport PrefixedEthHashInfo from 'src/components/PrefixedEthHashInfo'\nimport { grey400, lg, md, primary200, primary300, sm } from 'src/theme/variables'\nimport styled, { css } from 'styled-components'\nimport { isDeeplinkedTx } from './utils'\n\nexport const Wrapper = styled.div`\n display: flex;\n flex-direction: column;\n height: 100%;\n`\n\nexport const ContentWrapper = styled.div`\n display: flex;\n flex-direction: column;\n flex-grow: 1;\n align-items: center;\n`\n\nexport const ColumnDisplayAccordionDetails = styled(AccordionDetails)`\n flex-flow: column;\n`\n\nexport const NoPaddingAccordion = styled(Accordion).attrs((props) =>\n isDeeplinkedTx() ? { expanded: true, ...props } : props,\n)`\n &.MuiAccordion-root .MuiAccordionDetails-root {\n padding: 0;\n }\n`\n\nexport const ActionAccordion = styled(Accordion)`\n &.MuiAccordion-root {\n &:first-child {\n border-top: none;\n }\n\n &:last-child {\n border-bottom: none;\n }\n\n &.Mui-expanded {\n &:last-child {\n border-bottom: none;\n }\n }\n\n .MuiAccordionDetails-root {\n padding: ${lg};\n }\n }\n`\n\nexport const StyledTransactionsGroup = styled.div`\n box-sizing: border-box;\n align-items: flex-start;\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n margin: 16px 0px;\n width: 100%;\n padding: 0px 8px;\n box-sizing: border-box;\n`\n\nexport const H2 = styled.h2`\n text-transform: uppercase;\n font-size: smaller;\n`\n\nexport const SubTitle = styled(Text)`\n margin-bottom: 8px;\n margin-left: 2px;\n font-size: 0.76em;\n font-weight: 600;\n line-height: 1.5;\n letter-spacing: 1px;\n color: ${({ theme }) => theme.colors.placeHolder};\n text-transform: uppercase;\n`\n\nexport const StyledTransactions = styled.div`\n overflow: hidden;\n width: 100%;\n\n display: flex;\n flex-direction: column;\n row-gap: 6px;\n\n & .MuiAccordion-root.highlight .MuiAccordionSummary-root {\n background-color: ${primary200};\n }\n\n & > .MuiAccordion-root {\n border: 2px solid ${grey400};\n border-radius: 8px;\n\n &:first-child {\n border: 2px solid ${grey400};\n }\n\n & .MuiAccordionSummary-root.Mui-expanded,\n & .MuiAccordionSummary-root:hover {\n background-color: ${primary200};\n }\n\n &.Mui-expanded {\n border: 2px solid ${primary300};\n }\n }\n`\n\nexport const GroupedTransactionsCard = styled(StyledTransactions)<{ expanded?: boolean }>`\n transition: all 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;\n background-color: ${({ theme }) => theme.colors.white};\n\n border: 2px solid ${({ expanded }) => (expanded ? `${primary300}` : `${grey400}`)};\n box-sizing: border-box;\n border-radius: 8px;\n\n .MuiAccordion-root,\n .MuiAccordionSummary-root,\n .MuiAccordionDetails-root {\n background-color: transparent;\n\n &:hover,\n &.Mui-expanded {\n background-color: transparent;\n }\n }\n\n .disclaimer-container {\n background-color: ${({ theme, expanded }) => (expanded ? `${primary200}` : theme.colors.inputField)};\n }\n\n &:hover {\n background-color: ${primary200};\n\n .tx-data > div,\n .tx-data ~ div > div {\n background-color: ${primary200};\n }\n\n .disclaimer-container {\n background-color: transparent;\n }\n }\n`\nconst gridColumns = {\n nonce: '1fr',\n type: '3fr',\n info: '3fr',\n time: '2.5fr',\n votes: '1.5fr',\n actions: '1fr',\n status: '2.5fr',\n}\n\nconst willBeReplaced = css`\n .will-be-replaced {\n pointer-events: none;\n }\n\n .will-be-replaced.tx-details-actions button,\n .will-be-replaced img {\n filter: grayscale(1) opacity(0.8) !important;\n }\n\n .will-be-replaced * {\n pointer-events: none;\n color: gray !important;\n text-decoration: line-through !important;\n }\n`\n\nconst failedTransaction = css`\n &.failed-transaction {\n div[class^='tx-']:not(.tx-status):not(.tx-nonce) {\n opacity: 0.5;\n }\n }\n`\n\nexport const StyledTransaction = styled.div`\n ${willBeReplaced};\n ${failedTransaction};\n\n display: grid;\n grid-template-columns: ${Object.values(gridColumns).join(' ')};\n width: 100%;\n\n & > div {\n align-self: center;\n }\n\n .tx-votes {\n justify-self: center;\n }\n\n .tx-actions {\n visibility: hidden;\n justify-self: end;\n }\n\n .tx-status {\n justify-self: end;\n margin-right: 8px;\n display: flex;\n flex-flow: row nowrap;\n align-items: center;\n justify-content: end;\n\n p {\n margin-left: 8px;\n }\n }\n\n &:hover {\n .tx-actions {\n visibility: visible;\n\n &.will-be-replaced {\n visibility: hidden;\n }\n }\n }\n`\n\nexport const StyledGroupedTransactions = styled(StyledTransaction)`\n // no \\`tx-nonce\\` column required\n grid-template-columns: ${Object.values(gridColumns).slice(1).join(' ')};\n`\n\nexport const GroupedTransactions = styled(StyledTransaction)`\n // add a bottom division line for all elements but the last\n &:not(:last-of-type) {\n border-bottom: 2px solid ${({ theme }) => theme.colors.separator};\n }\n\n // builds the tree-view layout\n .tree-lines {\n height: auto;\n margin: 0 0 0 30px;\n position: relative;\n width: 30%;\n\n // this is a special case, the first element in the list needs to have a block child component\n // add tree lines line to the first item of the list\n .first-node {\n display: block;\n position: absolute;\n top: -16px;\n width: 100%;\n\n &::before {\n border-bottom: 2px solid ${({ theme }) => theme.colors.separator};\n border-left: 2px solid ${({ theme }) => theme.colors.separator};\n content: '';\n height: 22px;\n position: absolute;\n top: 18px;\n width: 100%;\n }\n }\n\n // add tree lines to all elements of the list (except for the last one)\n // :last-of-type won't work with classes selector (HTML elements only)\n // as we need block-level elements, we're using paragraphs for .tree-lines and .first-node\n // given that divs are already being used for the transaction row, and both (p and div) are siblings\n &:not(:last-of-type) {\n &::before {\n border-bottom: 2px solid ${({ theme }) => theme.colors.separator};\n border-left: 2px solid ${({ theme }) => theme.colors.separator};\n content: '';\n height: 100%;\n margin-top: 26px;\n position: absolute;\n width: 100%;\n }\n }\n }\n\n // overrides Accordion styles, as grouped txs behave differently\n > .MuiAccordion-root {\n transition: none;\n border: 0;\n grid-column-end: span 6;\n grid-column-start: 2;\n\n &.Mui-expanded {\n justify-self: center;\n width: calc(100% - 32px);\n\n &:not(:last-of-type) {\n border-bottom: 2px solid ${({ theme }) => theme.colors.separator};\n }\n\n &:not(:first-of-type) {\n border-top: 2px solid ${({ theme }) => theme.colors.separator};\n // if two consecutive accordions are expanded, borders will get duplicated\n // this rule is to overlap them\n margin-top: -2px;\n }\n\n > .MuiAccordionSummary-root {\n padding: 0;\n }\n }\n }\n}\n`\n\nexport const DisclaimerContainer = styled(StyledTransaction)`\n background-color: ${({ theme }) => theme.colors.inputField};\n border-radius: 4px;\n margin: 12px 8px 0 12px;\n padding: 8px 12px;\n width: calc(100% - 48px);\n\n .nonce {\n grid-column-start: 1;\n }\n\n .disclaimer {\n grid-column-start: 2;\n grid-column-end: span 6;\n }\n`\n\nexport const TxDetailsContainer = styled.div`\n ${willBeReplaced};\n\n background-color: ${({ theme }) => theme.colors.separator} !important;\n display: grid;\n gap: 2px;\n grid-template-columns: 2fr 1fr;\n width: 100%;\n\n & > div {\n display: grid;\n grid-auto-rows: minmax(min-content, max-content);\n grid-template-rows: [tx-summary] minmax(min-content, max-content) [tx-details] minmax(min-content, 1fr);\n line-break: anywhere;\n overflow: hidden;\n word-break: break-all;\n\n & > div {\n padding: 20px 24px;\n background-color: rgb(var(--Mgray-lightest));\n }\n }\n\n .tx-summary {\n background-color: rgb(var(--Mgray-lightest));\n // grows to the height of tx-owner column\n flex-grow: 1;\n position: relative;\n\n &.no-data {\n row-span: 2;\n }\n }\n\n .tx-creation {\n // to occupy the unexistant \"owners\" column\n grid-column: span 2;\n display: flex;\n flex-direction: column;\n gap: 2px;\n }\n\n .tx-share {\n position: absolute;\n top: 20px;\n right: 24px;\n }\n\n .tx-data {\n display: flex;\n flex-direction: column;\n gap: 2px;\n height: 100%;\n\n & > div:last-of-type {\n flex: 1;\n }\n\n &.no-owners {\n grid-column: span 2;\n }\n\n &.no-data {\n gap: 0;\n }\n }\n\n .tx-details {\n position: relative;\n\n &.not-executed {\n grid-row-end: span 2;\n }\n\n &.no-padding {\n padding: 0;\n }\n }\n\n .tx-owners {\n padding: 24px;\n grid-row-end: span 2;\n }\n\n .tx-details-actions {\n align-items: flex-end;\n padding-bottom: 24px;\n display: flex;\n gap: 8px;\n justify-content: center;\n\n button {\n color: ${({ theme }) => theme.colors.white};\n\n &:hover {\n color: ${({ theme }) => theme.colors.white};\n }\n\n &.error {\n background-color: ${({ theme }) => theme.colors.error};\n\n &:hover {\n background-color: ${({ theme }) => theme.colors.errorHover};\n }\n }\n\n &.primary {\n background-color: ${({ theme }) => theme.colors.primary};\n\n &:hover {\n background-color: ${({ theme }) => theme.colors.secondary};\n }\n }\n }\n }\n`\n\nexport const InlineEthHashInfo = styled(EthHashInfo)`\n display: inline-flex;\n\n span {\n font-weight: bold;\n }\n`\n\nexport const InlinePrefixedEthHashInfo = styled(PrefixedEthHashInfo)`\n display: inline-flex;\n\n span {\n font-weight: bold;\n }\n`\n\nexport const StyledScrollableBar = styled.div`\n &::-webkit-scrollbar {\n width: 0.7em;\n scroll-behavior: smooth;\n }\n\n &::-webkit-scrollbar-track {\n box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.3);\n border-radius: 20px;\n }\n\n &::-webkit-scrollbar-thumb {\n background-color: darkgrey;\n outline: 1px solid #dadada;\n border-radius: 20px;\n }\n\n // firefox experimental\n scrollbar-color: darkgrey #dadada;\n scrollbar-width: thin;\n`\n\nexport const ScrollableTransactionsContainer = styled(StyledScrollableBar)`\n height: calc(100vh - 218px);\n overflow-x: hidden;\n overflow-y: auto;\n width: 100%;\n`\nexport const Centered = styled.div<{ padding?: number }>`\n width: 100%;\n height: 100%;\n display: flex;\n padding: ${({ padding }) => `${padding}px`};\n justify-content: center;\n align-items: center;\n`\n\nexport const HorizontallyCentered = styled(Centered)<{ isVisible: boolean }>`\n display: ${({ isVisible }) => (isVisible ? 'flex' : 'none')};\n height: 100px;\n`\n\nexport const StyledAccordionSummary = styled(AccordionSummary).attrs((props) =>\n isDeeplinkedTx() ? { expandIcon: null, ...props } : props,\n)`\n height: 52px;\n .tx-nonce {\n margin: 0 16px 0 8px;\n }\n`\nexport const AlignItemsWithMargin = styled.div`\n display: flex;\n align-items: center;\n\n span:first-child {\n margin-right: 6px;\n }\n`\nexport const NoTransactions = styled.div`\n display: flex;\n flex-direction: column;\n margin-top: 60px;\n`\nexport const StyledGridRow = styled.div`\n display: grid;\n grid-template-columns: 1fr 2.5fr;\n gap: ${md};\n justify-content: flex-start;\n max-width: 900px;\n\n & > * {\n flex-shrink: 0;\n }\n`\n\nexport const StyledTxInfoDetails = styled.div`\n display: flex;\n flex-direction: column;\n gap: ${sm};\n margin-bottom: ${md};\n\n &:last-of-type {\n margin-bottom: 0;\n }\n`\n\nexport const StyledDetailsTitle = styled(Text)<{ uppercase?: boolean }>`\n text-transform: ${({ uppercase }) => (uppercase ? 'uppercase' : null)};\n letter-spacing: ${({ uppercase }) => (uppercase ? '1px' : null)};\n`\n","/**\n * Setups `shortenText` options\n * @param {object} opts\n * @param {number} opts.charsStart=10 - characters to preserve from the beginning\n * @param {number} opts.charsEnd=10 - characters to preserve at the end\n * @param {string} opts.ellipsis='...' - ellipsis characters\n * @returns {function} shortener\n */\nexport const textShortener =\n ({ charsEnd = 10, charsStart = 10, ellipsis = '...' } = {}) =>\n /**\n * @function\n * @name shortener\n *\n * Shortens a text string based on options\n * @param {string} text=null - String to shorten\n * @param text\n * @returns {string|?string}\n */\n (text = ''): string => {\n const amountOfCharsToKeep = charsEnd + charsStart\n const finalStringLength = amountOfCharsToKeep + ellipsis.length\n\n if (finalStringLength >= text.length || !amountOfCharsToKeep) {\n // no need to shorten\n return text\n }\n\n const r = new RegExp(`^(.{${charsStart}}).+(.{${charsEnd}})$`)\n const matchResult = r.exec(text)\n\n if (!matchResult) {\n // if for any reason the exec returns null, the text remains untouched\n return text\n }\n\n const [, textStart, textEnd] = matchResult\n\n return `${textStart}${ellipsis}${textEnd}`\n }\n\n/**\n * Util to remove whitespace from both sides of a string.\n * @param {string} value\n * @returns {string} string without side whitespaces\n */\nexport const trimSpaces = (value: string): string => (value === undefined ? '' : value.trim())\n\n/**\n * Util to compare two strings, comparison is case insensitive\n * @param str1\n * @param str2\n * @returns {boolean}\n */\nexport const sameString = (str1: string | undefined, str2: string | undefined): boolean => {\n if (!str1 || !str2) {\n return false\n }\n\n return str1.toLowerCase() === str2.toLowerCase()\n}\n","import {\n AddressEx,\n Erc20Transfer,\n Erc721Transfer,\n MultisigExecutionDetails,\n MultisigExecutionInfo,\n Operation,\n TransactionDetails,\n TransactionInfo,\n TransactionTokenType,\n Transfer,\n} from '@gnosis.pm/safe-react-gateway-sdk'\nimport { BigNumber } from 'bignumber.js'\nimport { matchPath } from 'react-router-dom'\nimport { getNativeCurrency } from 'src/config'\nimport { getNativeCurrencyAddress } from 'src/config/utils'\n\nimport {\n isCustomTxInfo,\n isModuleExecutionInfo,\n isMultiSigExecutionDetails,\n isMultisigExecutionInfo,\n isTransferTxInfo,\n isTxQueued,\n LocalTransactionStatus,\n Transaction,\n} from 'src/logic/safe/store/models/types/gateway.d'\nimport { formatAmount } from 'src/logic/tokens/utils/formatAmount'\nimport { sameAddress, ZERO_ADDRESS } from 'src/logic/wallets/ethAddresses'\nimport { history, SAFE_ROUTES, TRANSACTION_ID_SLUG } from 'src/routes/routes'\nimport { TxArgs } from 'src/logic/safe/store/models/types/transaction'\nimport { EMPTY_DATA } from 'src/logic/wallets/ethTransactions'\nimport { List } from 'immutable'\nimport { makeConfirmation } from 'src/logic/safe/store/models/confirmation'\nimport { Confirmation } from 'src/logic/safe/store/models/types/confirmation'\n\ntype TxInfoProps = Pick<\n TxArgs,\n | 'data'\n | 'baseGas'\n | 'gasPrice'\n | 'safeTxGas'\n | 'gasToken'\n | 'nonce'\n | 'refundReceiver'\n | 'valueInWei'\n | 'to'\n | 'operation'\n>\n\nexport const NOT_AVAILABLE = 'n/a'\ninterface AmountData {\n decimals?: number | string\n symbol?: string\n value: number | string\n}\n\nconst getAmountWithSymbol = (\n { decimals = 0, symbol = NOT_AVAILABLE, value }: AmountData,\n formatted = false,\n): string => {\n const nonFormattedValue = new BigNumber(value).times(`1e-${decimals}`).toFixed()\n const finalValue = formatted ? formatAmount(nonFormattedValue).toString() : nonFormattedValue\n const txAmount = finalValue === 'NaN' ? NOT_AVAILABLE : finalValue\n\n return `${txAmount} ${symbol}`\n}\n\nexport const getTokenIdLabel = ({ tokenId }: Erc721Transfer): string => {\n return tokenId ? `(#${tokenId})` : ''\n}\n\nexport const getTxAmount = (txInfo?: TransactionInfo, formatted = true): string => {\n if (!txInfo || !isTransferTxInfo(txInfo)) {\n return NOT_AVAILABLE\n }\n\n switch (txInfo.transferInfo.type) {\n case TransactionTokenType.ERC20:\n return getAmountWithSymbol(\n {\n decimals: `${txInfo.transferInfo.decimals ?? 0}`,\n symbol: `${txInfo.transferInfo.tokenSymbol ?? NOT_AVAILABLE}`,\n value: txInfo.transferInfo.value,\n },\n formatted,\n )\n case TransactionTokenType.ERC721:\n // simple workaround to avoid displaying unexpected values for incoming NFT transfer\n return `1 ${txInfo.transferInfo.tokenSymbol} ${getTokenIdLabel(txInfo.transferInfo)}`\n case TransactionTokenType.NATIVE_COIN: {\n const nativeCurrency = getNativeCurrency()\n return getAmountWithSymbol(\n {\n decimals: nativeCurrency.decimals,\n symbol: nativeCurrency.symbol,\n value: txInfo.transferInfo.value,\n },\n formatted,\n )\n }\n default:\n return NOT_AVAILABLE\n }\n}\n\ntype txTokenData = {\n address: string\n value: string\n decimals: number | null\n}\n\nexport const getTxTokenData = (txInfo: Transfer): txTokenData => {\n const nativeCurrency = getNativeCurrency()\n switch (txInfo.transferInfo.type) {\n case TransactionTokenType.ERC20:\n return {\n address: txInfo.transferInfo.tokenAddress,\n value: txInfo.transferInfo.value,\n decimals: txInfo.transferInfo.decimals,\n }\n case TransactionTokenType.ERC721:\n return { address: txInfo.transferInfo.tokenAddress, value: '1', decimals: 0 }\n default:\n return {\n address: getNativeCurrencyAddress(),\n value: txInfo.transferInfo.value,\n decimals: nativeCurrency.decimals,\n }\n }\n}\n\nexport const isCancelTxDetails = (txInfo: Transaction['txInfo']): boolean =>\n // custom transaction\n isCustomTxInfo(txInfo) &&\n // flag-based identification\n txInfo.isCancellation\n\nexport const addressInList =\n (list: AddressEx[] = []) =>\n (address: string): boolean =>\n list.some((ownerAddress) => sameAddress(ownerAddress.value, address))\n\nexport const getTxTo = ({ txInfo }: Pick): AddressEx | undefined => {\n switch (txInfo.type) {\n case 'Transfer': {\n return txInfo.recipient\n }\n case 'SettingsChange': {\n return undefined\n }\n case 'Custom': {\n return txInfo.to\n }\n case 'Creation': {\n return txInfo.factory || undefined\n }\n }\n}\n\nexport const getTxInfo = (transaction: Transaction, safeAddress: string): TxInfoProps => {\n if (!transaction.txDetails) return {} as TxInfoProps\n\n const DEFAULT_TX_INFO = {\n data: EMPTY_DATA,\n baseGas: '0',\n gasPrice: '0',\n safeTxGas: '0',\n gasToken: ZERO_ADDRESS,\n nonce: 0,\n refundReceiver: ZERO_ADDRESS,\n valueInWei: getTxValue(transaction.txInfo, transaction.txDetails),\n to: getTxRecipient(transaction.txInfo, safeAddress),\n operation: Operation.CALL,\n }\n\n if (!isMultiSigExecutionDetails(transaction.txDetails.detailedExecutionInfo)) {\n return DEFAULT_TX_INFO\n }\n\n const { baseGas, gasPrice, safeTxGas, gasToken, refundReceiver } = transaction.txDetails.detailedExecutionInfo\n const data = transaction.txDetails.txData?.hexData ?? DEFAULT_TX_INFO.data\n const nonce = isMultisigExecutionInfo(transaction.executionInfo)\n ? transaction.executionInfo.nonce\n : DEFAULT_TX_INFO.nonce\n const operation = transaction.txDetails.txData?.operation ?? DEFAULT_TX_INFO.operation\n\n return {\n ...DEFAULT_TX_INFO,\n data,\n baseGas,\n gasPrice,\n safeTxGas,\n gasToken,\n nonce,\n refundReceiver: refundReceiver.value,\n operation,\n }\n}\n\nexport const getTxConfirmations = (transaction: Transaction): List => {\n if (!transaction.txDetails) return List([])\n\n return transaction.txDetails.detailedExecutionInfo &&\n isMultiSigExecutionDetails(transaction.txDetails.detailedExecutionInfo)\n ? List(\n transaction.txDetails.detailedExecutionInfo.confirmations.map(({ signer, signature }) =>\n makeConfirmation({ owner: signer.value, signature }),\n ),\n )\n : List([])\n}\n\nexport const getTxValue = (txInfo: TransactionInfo, txDetails: TransactionDetails): string => {\n switch (txInfo.type) {\n case 'Transfer':\n if (txInfo.transferInfo.type === TransactionTokenType.NATIVE_COIN) {\n return txInfo.transferInfo.value\n } else {\n return txDetails.txData?.value ?? '0'\n }\n case 'Custom':\n return txInfo.value\n case 'Creation':\n case 'SettingsChange':\n default:\n return '0'\n }\n}\n\nexport const getTxRecipient = (txInfo: TransactionInfo, safeAddress: string): string => {\n switch (txInfo.type) {\n case 'Transfer':\n if (txInfo.transferInfo.type === TransactionTokenType.NATIVE_COIN) {\n return txInfo.recipient.value\n } else {\n return (txInfo.transferInfo as Erc20Transfer | Erc721Transfer).tokenAddress\n }\n case 'Custom':\n return txInfo.to.value\n case 'Creation':\n case 'SettingsChange':\n default:\n return safeAddress\n }\n}\n\n// Our store does not match the details returned from the endpoint\nexport const makeTxFromDetails = (txDetails: TransactionDetails): Transaction => {\n const getMissingSigners = ({\n signers,\n confirmations,\n }: MultisigExecutionDetails): MultisigExecutionInfo['missingSigners'] => {\n const missingSigners = signers.filter(({ value }) => {\n const hasConfirmed = confirmations?.some(({ signer }) => signer?.value === value)\n return !hasConfirmed\n })\n\n return missingSigners.length ? missingSigners : null\n }\n\n const getMultisigExecutionInfo = ({\n detailedExecutionInfo,\n }: TransactionDetails): MultisigExecutionInfo | undefined => {\n if (!isMultiSigExecutionDetails(detailedExecutionInfo)) return undefined\n\n return {\n type: detailedExecutionInfo.type,\n nonce: detailedExecutionInfo.nonce,\n confirmationsRequired: detailedExecutionInfo.confirmationsRequired,\n confirmationsSubmitted: detailedExecutionInfo.confirmations?.length || 0,\n missingSigners: getMissingSigners(detailedExecutionInfo),\n }\n }\n\n const executionInfo: Transaction['executionInfo'] = isModuleExecutionInfo(txDetails.detailedExecutionInfo)\n ? txDetails.detailedExecutionInfo\n : getMultisigExecutionInfo(txDetails)\n\n // Will only be used as a fallback whilst waiting on backend tx creation cache\n const now = Date.now()\n const timestamp = isTxQueued(txDetails.txStatus)\n ? isMultiSigExecutionDetails(txDetails.detailedExecutionInfo)\n ? txDetails.detailedExecutionInfo.submittedAt\n : now\n : txDetails.executedAt || now\n\n return {\n id: txDetails.txId,\n timestamp,\n txStatus: txDetails.txStatus,\n txInfo: txDetails.txInfo,\n executionInfo,\n safeAppInfo: txDetails?.safeAppInfo || undefined,\n txDetails,\n }\n}\n\nexport const isDeeplinkedTx = (): boolean => {\n const txMatch = matchPath(history.location.pathname, {\n path: [SAFE_ROUTES.TRANSACTIONS_HISTORY, SAFE_ROUTES.TRANSACTIONS_QUEUE],\n })\n\n const deeplinkMatch = matchPath(history.location.pathname, {\n path: SAFE_ROUTES.TRANSACTIONS_SINGULAR,\n })\n\n return !txMatch && !!deeplinkMatch?.params?.[TRANSACTION_ID_SLUG]\n}\n\nexport const isAwaitingExecution = (\n txStatus: typeof LocalTransactionStatus[keyof typeof LocalTransactionStatus],\n): boolean => LocalTransactionStatus.AWAITING_EXECUTION === txStatus\n","/**\n * When creating a new error type, please try to group them semantically\n * with the existing errors in the same hundred. For example, if it's\n * related to fetching data from the backend, add it to the 6xx errors.\n * This is not a hard requirement, just a useful convention.\n */\nenum ErrorCodes {\n ___0 = '0: No such error code',\n _100 = '100: Invalid input in the address field',\n _101 = '101: Failed to resolve the address',\n _102 = '102: Error getting an address checksum',\n _300 = '300: Error switching the wallet network',\n _301 = '301: Error adding a new wallet network',\n _600 = '600: Error fetching token list',\n _601 = '601: Error fetching balances',\n _602 = '602: Error fetching history txs',\n _603 = '603: Error fetching queued txs',\n _604 = '604: Error fetching collectibles',\n _605 = '605: Walliro not found',\n _606 = '605: Error fetching Walliro version',\n _607 = '607: Error fetching available currencies',\n _608 = '608: No next page',\n _609 = '609: Failed to retrieve SpendingLimits module information',\n _610 = '610: Error fetching Walliro by owner',\n _611 = '611: Error fetching gasPrice',\n _612 = '612: Error estimating gas',\n _613 = '613: Error fetching Walliro info',\n _614 = '614: Error fetching transaction by id',\n _615 = '615: Failed to retrieve last transaction from server',\n _616 = '616: Failed to retrieve recommended nonce',\n _617 = '617: Error fetching walliroTxGas',\n _618 = '618: Error fetching fee history',\n _619 = '619: Failed to prepare a multisend tx',\n _620 = '620: Failed to load master copy information',\n _700 = '700: Failed to read from local/session storage',\n _701 = '701: Failed to write to local/session storage',\n _702 = '702: Failed to remove from local/session storage',\n _800 = '800: Walliro creation tx failed',\n _801 = '801: Failed to send a tx with a spending limit',\n _802 = '802: Error submitting a transaction, walliroAddress not found',\n _803 = '803: Error creating a transaction',\n _804 = '804: Error processing a transaction',\n _805 = '805: TX monitor error',\n _806 = '806: Failed to remove module',\n _807 = '807: Failed to remove guard',\n _808 = '808: Error adding a Walliro owner',\n _809 = '809: Error removing a Walliro owner',\n _810 = '810: Error replacing a Walliro owner',\n _811 = '811: Error calculating ERC721 transfer data for adding a Walliro owner',\n _812 = '812: Error calculating ERC721 transfer data for removing a Walliro owner',\n _813 = '813: Error calculating ERC721 transfer data for replacing a Walliro owner',\n _814 = '814: Error performing an off-chain tx signature',\n _815 = '815: Error preparing transaction sender',\n _816 = '816: Error saving transaction to history',\n _817 = '817: Unable to decode contract error message',\n _818 = '818: Error submitting a multi-send transaction',\n _900 = '900: Error loading Walliro App',\n _901 = '901: Error processing Walliro Apps SDK request',\n _902 = '902: Error loading Walliro Apps list',\n _903 = '903: Error loading Walliro App manifest',\n _904 = '904: Error loading chains',\n}\n\nexport default ErrorCodes\n","import { useEffect, useState } from 'react'\nimport { Errors, logError } from 'src/logic/exceptions/CodedException'\nimport useAsync from 'src/logic/hooks/useAsync'\n\nexport const DEFAULT_GAS_LIMIT = '0'\n\nexport const useEstimateGasLimit = (\n estimationFn: () => Promise,\n isExecution: boolean,\n txData: string,\n manualGasLimit: string | undefined,\n): string | undefined => {\n const [gasLimit, setGasLimit] = useState(manualGasLimit)\n\n const [data, error] = useAsync(async () => {\n if (!isExecution || !txData) return\n if (manualGasLimit) return manualGasLimit\n\n return await estimationFn()\n }, [estimationFn, isExecution, manualGasLimit, txData])\n\n useEffect(() => {\n const newGasLimit = error ? DEFAULT_GAS_LIMIT : data ? data.toString() : undefined\n\n if (newGasLimit) {\n setGasLimit(newGasLimit)\n }\n\n if (error) {\n logError(Errors._612, error.message)\n }\n }, [data, error])\n\n return gasLimit\n}\n","import { MultisigExecutionInfo } from '@gnosis.pm/safe-react-gateway-sdk'\nimport { ReactElement } from 'react'\n\nimport useTxStatus from 'src/logic/hooks/useTxStatus'\nimport { LocalTransactionStatus, Transaction } from 'src/logic/safe/store/models/types/gateway.d'\nimport { useAssetInfo } from './hooks/useAssetInfo'\nimport { useTransactionStatus } from './hooks/useTransactionStatus'\nimport { useTransactionType } from './hooks/useTransactionType'\nimport { TxCollapsed } from './TxCollapsed'\n\nexport type CalculatedVotes = { votes: string; submitted: number; required: number }\n\nconst calculateVotes = (executionInfo: MultisigExecutionInfo, isPending: boolean): CalculatedVotes | undefined => {\n if (!executionInfo) return\n\n const submitted = executionInfo.confirmationsSubmitted\n const required = executionInfo.confirmationsRequired\n\n if (isPending && submitted < required) return\n\n return {\n votes: `${submitted} out of ${required}`,\n submitted,\n required,\n }\n}\n\ntype TxQueuedCollapsedProps = {\n isGrouped?: boolean\n transaction: Transaction\n}\n\nexport const TxQueueCollapsed = ({ isGrouped = false, transaction }: TxQueuedCollapsedProps): ReactElement => {\n const executionInfo = transaction.executionInfo as MultisigExecutionInfo\n const nonce = executionInfo?.nonce\n const type = useTransactionType(transaction)\n const info = useAssetInfo(transaction.txInfo)\n const status = useTransactionStatus(transaction)\n const txStatus = useTxStatus(transaction)\n const isPending = txStatus === LocalTransactionStatus.PENDING\n const votes = calculateVotes(executionInfo, isPending)\n\n return (\n \n )\n}\n","import { AccordionDetails } from '@gnosis.pm/safe-react-components'\nimport { ReactElement, useContext, useEffect, useState } from 'react'\n\nimport {\n isMultisigExecutionInfo,\n LocalTransactionStatus,\n Transaction,\n} from 'src/logic/safe/store/models/types/gateway.d'\nimport { NoPaddingAccordion, StyledAccordionSummary } from './styled'\nimport { TxDetails } from './TxDetails'\nimport { TxHoverContext } from './TxHoverProvider'\nimport { TxQueueCollapsed } from './TxQueueCollapsed'\nimport { useSelector } from 'react-redux'\nimport { AppReduxState } from 'src/store'\nimport { isTxPending, pendingTxsByChain } from 'src/logic/safe/store/selectors/pendingTransactions'\nimport { BatchExecuteHoverContext } from 'src/routes/safe/components/Transactions/TxList/BatchExecuteHoverProvider'\n\ntype TxQueueRowProps = {\n isGrouped?: boolean\n transaction: Transaction\n onChildExpand?: (isExpanded: number) => void\n}\n\nexport const TxQueueRow = ({ isGrouped = false, transaction, onChildExpand }: TxQueueRowProps): ReactElement => {\n const { activeHover } = useContext(TxHoverContext)\n const { activeHover: batchTxActiveHover } = useContext(BatchExecuteHoverContext)\n const [tx, setTx] = useState(transaction)\n const willBeReplaced = tx.txStatus === LocalTransactionStatus.WILL_BE_REPLACED ? ' will-be-replaced' : ''\n const inBatch = batchTxActiveHover?.includes(transaction.id) ? ' highlight' : ''\n const isThisTxPending = useSelector((state: AppReduxState) => isTxPending(state, transaction.id))\n const pendingTxs = useSelector(pendingTxsByChain)\n const isReplacementTxPending = pendingTxs?.some(\n (pendingTx) =>\n isMultisigExecutionInfo(pendingTx.executionInfo) &&\n isMultisigExecutionInfo(transaction.executionInfo) &&\n pendingTx.executionInfo.nonce === transaction.executionInfo.nonce,\n )\n\n useEffect(() => {\n if ((activeHover && activeHover !== transaction.id) || (!isThisTxPending && isReplacementTxPending)) {\n setTx((currTx) => ({ ...currTx, txStatus: LocalTransactionStatus.WILL_BE_REPLACED }))\n return\n }\n\n setTx(transaction)\n }, [activeHover, transaction, isReplacementTxPending, isThisTxPending])\n\n return (\n onChildExpand?.(expanded ? 1 : -1)}\n >\n \n \n \n \n \n \n \n )\n}\n","import { createStyles, makeStyles } from '@material-ui/core'\nimport { lg, md, sm } from 'src/theme/variables'\n\nexport const useStyles = makeStyles(\n createStyles({\n container: {\n padding: `${md} ${lg}`,\n },\n nonceNumber: {\n marginTop: sm,\n fontSize: md,\n },\n }),\n)\n","import { List } from 'immutable'\nimport {\n Erc20Transfer,\n Erc721Transfer,\n MultisigExecutionInfo,\n Operation,\n TransactionTokenType,\n} from '@gnosis.pm/safe-react-gateway-sdk'\nimport { useMemo, useRef } from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\n\nimport { useStyles } from './style'\n\nimport Modal from 'src/components/Modal'\nimport Block from 'src/components/layout/Block'\nimport Bold from 'src/components/layout/Bold'\nimport Hairline from 'src/components/layout/Hairline'\nimport Paragraph from 'src/components/layout/Paragraph'\nimport Row from 'src/components/layout/Row'\nimport { TX_NOTIFICATION_TYPES } from 'src/logic/safe/transactions'\nimport { processTransaction } from 'src/logic/safe/store/actions/processTransaction'\nimport { TxParameters } from 'src/routes/safe/container/hooks/useTransactionParameters'\nimport { EMPTY_DATA } from 'src/logic/wallets/ethTransactions'\nimport { userAccountSelector } from 'src/logic/wallets/store/selectors'\nimport { ModalHeader } from 'src/routes/safe/components/Balances/SendModal/screens/ModalHeader'\nimport { Overwrite } from 'src/types/helpers'\nimport { ZERO_ADDRESS } from 'src/logic/wallets/ethAddresses'\nimport { makeConfirmation } from 'src/logic/safe/store/models/confirmation'\nimport {\n ExpandedTxDetails,\n isMultiSigExecutionDetails,\n isMultisigExecutionInfo,\n Transaction,\n} from 'src/logic/safe/store/models/types/gateway.d'\nimport { TxModalWrapper } from '../../helpers/TxModalWrapper'\n\nimport { grantedSelector, sameAddressAsSafeSelector } from 'src/routes/safe/container/selector'\nimport useSafeAddress from 'src/logic/currentSession/hooks/useSafeAddress'\n\nexport const REJECT_TX_MODAL_SUBMIT_BTN_TEST_ID = 'reject-tx-modal-submit-btn'\n\nconst getModalTitleAndDescription = (thresholdReached: boolean): { title: string; description: string } => {\n const modalInfo = {\n title: 'Execute transaction rejection',\n description: 'This action will execute this transaction.',\n }\n\n if (thresholdReached) {\n modalInfo.title = 'Execute transaction'\n modalInfo.description = 'This action will execute this transaction.'\n } else {\n modalInfo.title = 'Approve Transaction'\n modalInfo.description =\n 'This action will approve this transaction. A separate Transaction will be performed to submit the approval.'\n }\n\n return modalInfo\n}\n\nconst useTxInfo = (transaction: Props['transaction']) => {\n const t = useRef(transaction)\n const { safeAddress } = useSafeAddress()\n\n const confirmations = useMemo(\n () =>\n t.current.txDetails.detailedExecutionInfo && isMultiSigExecutionDetails(t.current.txDetails.detailedExecutionInfo)\n ? List(\n t.current.txDetails.detailedExecutionInfo.confirmations.map(({ signer, signature }) =>\n makeConfirmation({ owner: signer.value, signature }),\n ),\n )\n : List([]),\n [],\n )\n\n const data = useMemo(() => t.current.txDetails.txData?.hexData ?? EMPTY_DATA, [])\n\n const baseGas = useMemo(\n () =>\n isMultiSigExecutionDetails(t.current.txDetails.detailedExecutionInfo)\n ? t.current.txDetails.detailedExecutionInfo.baseGas\n : '0',\n [],\n )\n\n const gasPrice = useMemo(\n () =>\n isMultiSigExecutionDetails(t.current.txDetails.detailedExecutionInfo)\n ? t.current.txDetails.detailedExecutionInfo.gasPrice\n : '0',\n [],\n )\n\n const safeTxGas = useMemo(\n () =>\n isMultiSigExecutionDetails(t.current.txDetails.detailedExecutionInfo)\n ? t.current.txDetails.detailedExecutionInfo.safeTxGas\n : '0',\n [],\n )\n\n const gasToken = useMemo(\n () =>\n isMultiSigExecutionDetails(t.current.txDetails.detailedExecutionInfo)\n ? t.current.txDetails.detailedExecutionInfo.gasToken\n : ZERO_ADDRESS,\n [],\n )\n\n const nonce = useMemo(() => (t.current.executionInfo as MultisigExecutionInfo)?.nonce ?? 0, [])\n\n const refundReceiver = useMemo(\n () =>\n isMultiSigExecutionDetails(t.current.txDetails.detailedExecutionInfo)\n ? t.current.txDetails.detailedExecutionInfo.refundReceiver.value\n : ZERO_ADDRESS,\n [],\n )\n\n const safeTxHash = useMemo(\n () =>\n isMultiSigExecutionDetails(t.current.txDetails.detailedExecutionInfo)\n ? t.current.txDetails.detailedExecutionInfo.safeTxHash\n : EMPTY_DATA,\n [],\n )\n\n const value = useMemo(() => {\n switch (t.current.txInfo.type) {\n case 'Transfer':\n if (t.current.txInfo.transferInfo.type === TransactionTokenType.NATIVE_COIN) {\n return t.current.txInfo.transferInfo.value\n } else {\n return t.current.txDetails.txData?.value ?? '0'\n }\n case 'Custom':\n return t.current.txInfo.value\n case 'Creation':\n case 'SettingsChange':\n default:\n return '0'\n }\n }, [])\n\n const to = useMemo(() => {\n switch (t.current.txInfo.type) {\n case 'Transfer':\n if (t.current.txInfo.transferInfo.type === TransactionTokenType.NATIVE_COIN) {\n return t.current.txInfo.recipient.value\n } else {\n return (t.current.txInfo.transferInfo as Erc20Transfer | Erc721Transfer).tokenAddress\n }\n case 'Custom':\n return t.current.txInfo.to.value\n case 'Creation':\n case 'SettingsChange':\n default:\n return safeAddress\n }\n }, [safeAddress])\n\n const operation = useMemo(() => t.current.txDetails.txData?.operation ?? Operation.CALL, [])\n\n const origin = useMemo(\n () =>\n t.current.safeAppInfo ? JSON.stringify({ name: t.current.safeAppInfo.name, url: t.current.safeAppInfo.url }) : '',\n [],\n )\n\n const id = useMemo(() => t.current.id, [])\n\n return {\n confirmations,\n data,\n baseGas,\n gasPrice,\n safeTxGas,\n gasToken,\n nonce,\n refundReceiver,\n safeTxHash,\n value,\n to,\n operation,\n origin,\n id,\n }\n}\n\ntype Props = {\n onClose: () => void\n isOpen: boolean\n transaction: Overwrite\n}\n\nexport const ApproveTxModal = ({ onClose, isOpen, transaction }: Props): React.ReactElement => {\n const dispatch = useDispatch()\n const userAddress = useSelector(userAccountSelector)\n const isOwner = useSelector(grantedSelector)\n const classes = useStyles()\n const { safeAddress } = useSafeAddress()\n const txInfo = useTxInfo(transaction)\n const submitDisabled = useSelector(sameAddressAsSafeSelector)\n\n const { executionInfo } = transaction\n const { confirmationsSubmitted = 0, confirmationsRequired = 0 } = isMultisigExecutionInfo(executionInfo)\n ? executionInfo\n : {}\n const thresholdReached = confirmationsSubmitted >= confirmationsRequired\n const { description, title } = getModalTitleAndDescription(thresholdReached)\n\n let preApprovingOwner: string | undefined = undefined\n if (!thresholdReached && isOwner && confirmationsSubmitted === confirmationsRequired - 1) {\n preApprovingOwner = userAddress\n }\n\n const approveTx = (txParameters: TxParameters, delayExecution: boolean) => {\n dispatch(\n processTransaction({\n safeAddress,\n tx: txInfo,\n preApprovingOwner,\n notifiedTransaction: TX_NOTIFICATION_TYPES.CONFIRMATION_TX,\n approveAndExecute: !delayExecution,\n ethParameters: txParameters,\n thresholdReached,\n }),\n )\n onClose()\n }\n\n return (\n \n \n \n\n \n\n {/* Tx info */}\n \n \n {description}\n \n Transaction nonce:\n
\n {txInfo.nonce}\n
\n
\n
\n \n
\n )\n}\n","import { List } from 'immutable'\nimport { AnyAction } from 'redux'\nimport { ThunkAction } from 'redux-thunk'\nimport { Operation } from '@gnosis.pm/safe-react-gateway-sdk'\n\nimport { generateSignaturesFromTxConfirmations } from 'src/logic/safe/safeTxSigner'\nimport { EMPTY_DATA } from 'src/logic/wallets/ethTransactions'\nimport { AppReduxState } from 'src/store'\nimport { TxParameters } from 'src/routes/safe/container/hooks/useTransactionParameters'\nimport { Dispatch, DispatchReturn } from './types'\nimport { Confirmation } from 'src/logic/safe/store/models/types/confirmation'\nimport { TxSender } from './createTransaction'\nimport { logError, Errors } from 'src/logic/exceptions/CodedException'\nimport { TX_NOTIFICATION_TYPES } from '../../transactions'\n\ninterface ProcessTransactionArgs {\n approveAndExecute: boolean\n notifiedTransaction: TX_NOTIFICATION_TYPES\n safeAddress: string\n tx: {\n id: string\n confirmations: List\n origin: string // json.stringified url, name\n to: string\n value: string\n data: string\n operation: Operation\n nonce: number\n safeTxGas: string\n safeTxHash: string\n baseGas: string\n gasPrice: string\n gasToken: string\n refundReceiver: string\n }\n ethParameters?: Pick\n preApprovingOwner?: string\n thresholdReached: boolean\n}\n\ntype ProcessTransactionAction = ThunkAction, AppReduxState, DispatchReturn, AnyAction>\n\nexport const processTransaction = (props: ProcessTransactionArgs): ProcessTransactionAction => {\n return async (dispatch: Dispatch, getState: () => AppReduxState): Promise => {\n const sender = new TxSender()\n\n // Selectors\n const state = getState()\n\n const { tx, approveAndExecute } = props\n\n // Set specific transaction being finalised\n sender.txId = tx.id\n\n const txProps = {\n navigateToTransactionsTab: false,\n notifiedTransaction: props.notifiedTransaction,\n operation: tx.operation,\n origin: tx.origin,\n safeAddress: props.safeAddress,\n to: tx.to,\n txData: tx.data ?? EMPTY_DATA,\n txNonce: tx.nonce,\n valueInWei: tx.value,\n safeTxGas: tx.safeTxGas,\n ethParameters: props.ethParameters,\n }\n\n // Populate instance vars\n try {\n await sender.prepare(dispatch, state, txProps)\n } catch (err) {\n logError(Errors._815, err.message)\n return\n }\n\n sender.isFinalization = approveAndExecute && !!(props.thresholdReached || props.preApprovingOwner)\n\n sender.txArgs = {\n ...tx, // Merge previous tx with new data\n safeInstance: sender.safeInstance,\n valueInWei: tx.value,\n data: txProps.txData,\n gasPrice: tx.gasPrice || '0',\n sender: sender.from,\n sigs: generateSignaturesFromTxConfirmations(\n tx.confirmations,\n approveAndExecute ? props.preApprovingOwner : undefined,\n ),\n }\n\n sender.safeTxHash = tx.safeTxHash\n\n sender.submitTx()\n }\n}\n","import { useDispatch } from 'react-redux'\nimport { useStyles } from './style'\nimport Modal from 'src/components/Modal'\nimport Block from 'src/components/layout/Block'\nimport Bold from 'src/components/layout/Bold'\nimport Hairline from 'src/components/layout/Hairline'\nimport Paragraph from 'src/components/layout/Paragraph'\nimport Row from 'src/components/layout/Row'\nimport { TX_NOTIFICATION_TYPES } from 'src/logic/safe/transactions'\nimport { createTransaction } from 'src/logic/safe/store/actions/createTransaction'\nimport { ExpandedTxDetails, isMultisigExecutionInfo, Transaction } from 'src/logic/safe/store/models/types/gateway.d'\nimport { TxParameters } from 'src/routes/safe/container/hooks/useTransactionParameters'\nimport { ModalHeader } from 'src/routes/safe/components/Balances/SendModal/screens/ModalHeader'\nimport { Overwrite } from 'src/types/helpers'\nimport { TxModalWrapper } from '../../helpers/TxModalWrapper'\nimport { EMPTY_DATA } from 'src/logic/wallets/ethTransactions'\nimport useSafeAddress from 'src/logic/currentSession/hooks/useSafeAddress'\nimport { useSafeAppUrl } from 'src/logic/hooks/useSafeAppUrl'\nimport { useRouteMatch } from 'react-router-dom'\nimport { SAFE_ROUTES } from 'src/routes/routes'\n\ntype Props = {\n isOpen: boolean\n onClose: () => void\n transaction: Overwrite\n}\n\nexport const RejectTxModal = ({ isOpen, onClose, transaction }: Props): React.ReactElement => {\n const dispatch = useDispatch()\n const { safeAddress } = useSafeAddress()\n const classes = useStyles()\n const executionInfo = isMultisigExecutionInfo(transaction.executionInfo) ? transaction.executionInfo : undefined\n\n const origin = transaction.safeAppInfo\n ? JSON.stringify({ name: transaction.safeAppInfo.name, url: transaction.safeAppInfo.url })\n : ''\n\n const nonce = isMultisigExecutionInfo(transaction.executionInfo) ? transaction.executionInfo.nonce : 0\n\n const isSafeAppView = !!useSafeAppUrl().getAppUrl()\n const isSafeAppRoute = !!useRouteMatch(SAFE_ROUTES.APPS) && isSafeAppView\n\n // if we are in a Safe App we show the transaction queue bar instead of redirect\n const navigateToTransactionsTab = !isSafeAppRoute\n\n const sendReplacementTransaction = (txParameters: TxParameters, delayExecution: boolean) => {\n dispatch(\n createTransaction({\n safeAddress,\n to: safeAddress,\n valueInWei: '0',\n txNonce: nonce,\n origin,\n safeTxGas: txParameters.safeTxGas,\n ethParameters: txParameters,\n notifiedTransaction: TX_NOTIFICATION_TYPES.CANCELLATION_TX,\n delayExecution,\n navigateToTransactionsTab,\n }),\n )\n onClose()\n }\n\n return (\n \n \n \n \n \n \n \n This action will reject this transaction. A separate transaction will be performed to submit the\n rejection.\n \n \n Transaction nonce:\n
\n {nonce}\n
\n
\n
\n \n
\n )\n}\n","import { ReactElement, useContext } from 'react'\nimport { useSelector } from 'react-redux'\n\nimport { ExpandedTxDetails, Transaction } from 'src/logic/safe/store/models/types/gateway.d'\nimport { getTransactionByAttribute } from 'src/logic/safe/store/selectors/gatewayTransactions'\nimport { AppReduxState } from 'src/store'\nimport { ApproveTxModal } from './modals/ApproveTxModal'\nimport { RejectTxModal } from './modals/RejectTxModal'\nimport { TransactionActionStateContext } from './TxActionProvider'\nimport { Overwrite } from 'src/types/helpers'\n\nexport const ActionModal = (): ReactElement | null => {\n const { selectedAction, selectAction } = useContext(TransactionActionStateContext)\n\n const transaction = useSelector((state: AppReduxState) =>\n getTransactionByAttribute(state, {\n attributeValue: selectedAction.transactionId,\n attributeName: 'id',\n }),\n )\n\n const onClose = () => selectAction({ actionSelected: 'none', transactionId: '' })\n\n if (!transaction?.txDetails || selectedAction.actionSelected === 'none') {\n return null\n }\n\n const Modal = selectedAction.actionSelected === 'cancel' ? RejectTxModal : ApproveTxModal\n\n return (\n }\n />\n )\n}\n","import { Icon, Link, Text } from '@gnosis.pm/safe-react-components'\nimport { Fragment, ReactElement, useContext, useState } from 'react'\nimport { useSelector } from 'react-redux'\n\nimport { Transaction, TransactionDetails } from 'src/logic/safe/store/models/types/gateway.d'\nimport { sameString } from 'src/utils/strings'\nimport { currentSafeNonce } from 'src/logic/safe/store/selectors'\n\nimport {\n DisclaimerContainer,\n GroupedTransactions,\n GroupedTransactionsCard,\n SubTitle,\n StyledTransactions,\n StyledTransactionsGroup,\n AlignItemsWithMargin,\n} from './styled'\nimport { TxHoverProvider } from './TxHoverProvider'\nimport { TxLocationContext } from './TxLocationProvider'\nimport { TxQueueRow } from './TxQueueRow'\nimport { TxsInfiniteScrollContext } from './TxsInfiniteScroll'\nimport { TxActionProvider } from './TxActionProvider'\nimport { ActionModal } from './ActionModal'\n\nconst TreeView = ({ firstElement }: { firstElement: boolean }): ReactElement => {\n return

{firstElement ? : null}

\n}\n\nconst Disclaimer = ({ nonce }: { nonce: string }): ReactElement => {\n return (\n \n \n {nonce}\n \n \n \n These transactions conflict as they use the same nonce. Executing one will automatically replace the other(s).{' '}\n \n \n \n \n Learn more\n \n \n \n \n \n \n )\n}\n\ntype QueueTransactionProps = {\n nonce: string\n transactions: Transaction[]\n}\n\nconst QueueTransaction = ({ nonce, transactions }: QueueTransactionProps): ReactElement => {\n const [nrChildrenExpanded, setNrChildrenExpanded] = useState(0)\n\n const handleChildExpand = (expand: number) => {\n setNrChildrenExpanded((val) => val + expand)\n }\n\n if (transactions.length === 1) {\n return \n }\n\n return (\n \n \n \n \n {transactions.map((transaction, index) => (\n \n \n \n \n ))}\n \n \n \n )\n}\n\ntype QueueTxListProps = {\n transactions: TransactionDetails['transactions']\n}\n\nexport const QueueTxList = ({ transactions }: QueueTxListProps): ReactElement => {\n const { txLocation } = useContext(TxLocationContext)\n const nonce = useSelector(currentSafeNonce)\n\n const { lastItemId, setLastItemId } = useContext(TxsInfiniteScrollContext)\n if (transactions.length) {\n const [, lastTransactionsGroup] = transactions[transactions.length - 1]\n const lastTransaction = lastTransactionsGroup[lastTransactionsGroup.length - 1]\n\n if (txLocation === 'queued.queued' && !sameString(lastItemId, lastTransaction.id)) {\n setLastItemId(lastTransaction.id)\n }\n }\n\n const title =\n txLocation === 'queued.next'\n ? 'NEXT TRANSACTION'\n : `QUEUE - Transaction with nonce ${nonce} needs to be executed first`\n\n return (\n \n \n {title}\n \n {transactions.map(([nonce, txs]) => (\n \n ))}\n \n \n \n \n )\n}\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"paragraph\":\"Paragraph_paragraph__24o_f\",\"soft\":\"Paragraph_soft__24ofb\",\"medium\":\"Paragraph_medium__1_JT7\",\"dark\":\"Paragraph_dark__4KVsB\",\"fancy\":\"Paragraph_fancy__3RaGr\",\"warning\":\"Paragraph_warning__2Yw7_\",\"primary\":\"Paragraph_primary__3vULU\",\"secondary\":\"Paragraph_secondary__3l-oJ\",\"disabled\":\"Paragraph_disabled__EsGph\",\"error\":\"Paragraph_error__1Q6wS\",\"white\":\"Paragraph_white__21Az6\",\"black400\":\"Paragraph_black400__1GGUA\",\"black600\":\"Paragraph_black600__BoX5P\",\"capitalize\":\"Paragraph_capitalize__2CZwO\",\"lowercase\":\"Paragraph_lowercase__3bpC-\",\"uppercase\":\"Paragraph_uppercase__3Y6BQ\",\"noMargin\":\"Paragraph_noMargin__jl8U0\",\"center\":\"Paragraph_center__2zSp9\",\"left\":\"Paragraph_left__14gJA\",\"right\":\"Paragraph_right__3LC5t\",\"xs\":\"Paragraph_xs__1BYOP\",\"sm\":\"Paragraph_sm__3NBQ9\",\"md\":\"Paragraph_md__1RGec\",\"lg\":\"Paragraph_lg__2_-kp\",\"xl\":\"Paragraph_xl__2JG7G\",\"xxl\":\"Paragraph_xxl__1naBM\",\"light\":\"Paragraph_light__2xHaV\",\"regular\":\"Paragraph_regular__2h9IR\",\"bolder\":\"Paragraph_bolder__1rx77\",\"bold\":\"Paragraph_bold__35wdX\",\"dot\":\"Paragraph_dot__28xTZ\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"img\":\"Img_img__3-ZJX\",\"bordered\":\"Img_bordered__2Iqbk\",\"fullwidth\":\"Img_fullwidth__2MmtF\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"row\":\"Row_row__2Ty1y\",\"grow\":\"Row_grow__Y6K_F\",\"marginXs\":\"Row_marginXs__1JUUy\",\"marginSm\":\"Row_marginSm__THbNz\",\"marginMd\":\"Row_marginMd__12pgl\",\"marginLg\":\"Row_marginLg__ESOQd\",\"marginXl\":\"Row_marginXl__2CbjD\",\"alignStart\":\"Row_alignStart__2Vr6v\",\"alignEnd\":\"Row_alignEnd__2CTzB\",\"alignCenter\":\"Row_alignCenter__yblAH\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"link\":\"Link_link__-dKdJ\",\"regular\":\"Link_regular__12Aj2\",\"white\":\"Link_white__1aYKn\",\"paddingXs\":\"Link_paddingXs__7H_x4\",\"paddingSm\":\"Link_paddingSm__4lbTG\",\"paddingMd\":\"Link_paddingMd__3l9V9\"};","// https://github.com/gnosis/safe-contracts/blob/main/docs/error_codes.md\nexport enum CONTRACT_ERRORS {\n // General init related\n GS000 = 'Could not finish initialization',\n GS001 = 'Threshold needs to be defined',\n\n // General gas/ execution related\n GS010 = 'Not enough gas to execute Walliro transaction',\n GS011 = 'Could not pay gas costs with ether',\n GS012 = 'Could not pay gas costs with token',\n GS013 = 'Walliro transaction failed when gasPrice and walliroTxGas were 0',\n\n // General signature validation related\n GS020 = 'Signatures data too short',\n GS021 = 'Invalid contract signature location = inside static part',\n GS022 = 'Invalid contract signature location = length not present',\n GS023 = 'Invalid contract signature location = data not complete',\n GS024 = 'Invalid contract signature provided',\n GS025 = 'Hash has not been approved',\n GS026 = 'Invalid owner provided',\n\n // General auth related\n GS030 = 'Only owners can approve a hash',\n GS031 = 'Method can only be called from this contract',\n\n // Module management related\n GS100 = 'Modules have already been initialized',\n GS101 = 'Invalid module address provided',\n GS102 = 'Module has already been added',\n GS103 = 'Invalid prevModule, module pair provided',\n GS104 = 'Method can only be called from an enabled module',\n\n // Owner management related\n GS200 = 'Owners have already been setup',\n GS201 = 'Threshold cannot exceed owner count',\n GS202 = 'Threshold needs to be greater than 0',\n GS203 = 'Invalid owner address provided',\n GS204 = 'Address is already an owner',\n GS205 = 'Invalid prevOwner, owner pair provided',\n\n // Guard management related\n GS300 = 'Guard does not implement IERC165',\n}\n\nexport const CONTRACT_ERROR_CODES = Object.keys(CONTRACT_ERRORS)\n","import { EthHashInfo } from '@gnosis.pm/safe-react-components'\nimport { ReactElement } from 'react'\nimport { useSelector } from 'react-redux'\nimport { copyShortNameSelector, showShortNameSelector } from 'src/logic/appearance/selectors'\nimport useSafeAddress from 'src/logic/currentSession/hooks/useSafeAddress'\nimport { parsePrefixedAddress } from 'src/utils/prefixedAddress'\n\ntype Props = Omit[0], 'shouldShowShortName'>\n\nconst PrefixedEthHashInfo = ({ hash, ...rest }: Props): ReactElement => {\n const showChainPrefix = useSelector(showShortNameSelector)\n const copyChainPrefix = useSelector(copyShortNameSelector)\n const { address } = parsePrefixedAddress(hash)\n const { shortName } = useSafeAddress()\n\n return (\n \n )\n}\n\nexport default PrefixedEthHashInfo\n","import { ReactElement } from 'react'\nimport { Form } from 'react-final-form'\n\nconst stylesBasedOn = (padding) => ({\n padding: `0 ${padding}%`,\n flexDirection: 'column',\n flex: '1 0 auto',\n})\n\nconst GnoForm = ({\n children,\n decorators,\n formMutators,\n initialValues,\n onSubmit,\n padding = 0,\n subscription,\n testId = '',\n validation,\n}: any): ReactElement => (\n (\n
\n {children(rest.submitting, rest.validating, rest, rest.form.mutators)}\n
\n )}\n subscription={subscription}\n validate={validation}\n />\n)\n\nexport default GnoForm\n","import { SyntheticEvent } from 'react'\n\nimport TokenPlaceholder from 'src/routes/safe/components/Balances/assets/token_placeholder.svg'\n\nexport const setImageToPlaceholder = (event: SyntheticEvent): void => {\n const img = event.currentTarget\n if (!/token_placeholder/.test(img.src)) {\n img.src = TokenPlaceholder\n }\n}\n","import { GTM_EVENT } from 'src/utils/googleTagManager'\nimport { addEventCategory } from 'src/utils/events/utils'\n\nconst SAFE_APPS = {\n OPEN_APP: {\n event: GTM_EVENT.CLICK,\n action: 'Open Safe App',\n },\n PIN: {\n event: GTM_EVENT.CLICK,\n action: 'Pin Safe App',\n },\n UNPIN: {\n event: GTM_EVENT.CLICK,\n action: 'Unpin Safe App',\n },\n SEARCH: {\n event: GTM_EVENT.META,\n action: 'Search for Safe App',\n },\n ADD_CUSTOM_APP: {\n event: GTM_EVENT.META,\n action: 'Add custom Safe App',\n },\n TRANSACTION_CONFIRMED: {\n event: GTM_EVENT.META,\n action: 'Transaction Confirmed',\n },\n TRANSACTION_REJECTED: {\n event: GTM_EVENT.META,\n action: 'Transaction Rejected',\n },\n LEGACY_API_CALL: {\n event: GTM_EVENT.META,\n action: 'Legacy API call',\n },\n SHARED_APP_LANDING: {\n event: GTM_EVENT.META,\n action: 'Shared App landing page visited',\n },\n SHARED_APP_CHAIN_ID: {\n event: GTM_EVENT.META,\n action: 'Shared App chainId',\n },\n SHARED_APP_OPEN_DEMO: {\n event: GTM_EVENT.META,\n action: 'Open demo safe from shared app',\n },\n SHARED_APP_OPEN_AFTER_SAFE_CREATION: {\n event: GTM_EVENT.META,\n action: 'Open shared app after Safe creation',\n },\n}\n\nconst SAFE_APPS_CATEGORY = 'safe-apps'\nexport const SAFE_APPS_EVENTS = addEventCategory(SAFE_APPS, SAFE_APPS_CATEGORY)\n","import FormControl from '@material-ui/core/FormControl'\nimport FormHelperText from '@material-ui/core/FormHelperText'\nimport InputLabel from '@material-ui/core/InputLabel'\nimport Select, { SelectProps } from '@material-ui/core/Select'\nimport { FieldMetaState } from 'react-final-form'\nimport { FormControlProps } from '@material-ui/core/FormControl/FormControl'\n\nconst style = {\n minWidth: '100%',\n}\n\ntype Props = {\n classes: SelectProps['classes']\n label: SelectProps['label']\n renderValue: SelectProps['renderValue']\n disableError: boolean\n formControlProps: FormControlProps\n input: {\n name: string\n onChange?: () => void\n value: string\n placeholder: string\n type: string\n }\n meta: FieldMetaState\n}\n\nconst SelectInput = ({\n classes,\n disableError,\n formControlProps,\n input: { name, onChange, value, ...restInput },\n label,\n meta,\n renderValue,\n ...rest\n}: Props): React.ReactElement => {\n const showError = ((meta.submitError && !meta.dirtySinceLastSubmit) || meta.error) && meta.touched && !disableError\n const inputProps = {\n ...restInput,\n name,\n }\n\n return (\n \n {label}\n \n {showError && {meta.error || meta.submitError}}\n \n )\n}\n\nexport default SelectInput\n","import classNames from 'classnames/bind'\nimport * as React from 'react'\n\nimport styles from './index.module.scss'\n\nimport { capitalize } from 'src/utils/css'\n\nconst cx = classNames.bind(styles)\n\nconst Heading = (props) => {\n const { align, children, className = '', color, margin, tag, testId, truncate, ...rest } = props\n\n const classes = cx(className, 'heading', align, tag, margin ? capitalize(margin, 'margin') : undefined, color, {\n truncate,\n })\n\n return React.createElement(tag, { ...rest, className: classes, 'data-testid': testId || '' }, children)\n}\n\nexport default Heading\n","export default __webpack_public_path__ + \"static/media/apps.70657d32.svg\";","import { Button, Switch } from '@gnosis.pm/safe-react-components'\nimport IconButton from '@material-ui/core/IconButton'\nimport { createStyles, makeStyles } from '@material-ui/core/styles'\nimport Close from '@material-ui/icons/Close'\nimport QRCode from 'qrcode.react'\nimport { ReactElement, useState } from 'react'\nimport FormControlLabel from '@material-ui/core/FormControlLabel/FormControlLabel'\nimport { useSelector } from 'react-redux'\n\nimport Block from 'src/components/layout/Block'\nimport Col from 'src/components/layout/Col'\nimport Hairline from 'src/components/layout/Hairline'\nimport Paragraph from 'src/components/layout/Paragraph'\nimport Row from 'src/components/layout/Row'\nimport PrefixedEthHashInfo from '../PrefixedEthHashInfo'\nimport { border, fontColor, lg, md, screenSm, secondaryText } from 'src/theme/variables'\nimport { getChainInfo, getExplorerInfo } from 'src/config'\nimport { ChainInfo } from '@gnosis.pm/safe-react-gateway-sdk'\nimport { copyShortNameSelector } from 'src/logic/appearance/selectors'\nimport { getPrefixedSafeAddressSlug } from 'src/routes/routes'\nimport useSafeAddress from 'src/logic/currentSession/hooks/useSafeAddress'\n\nconst useStyles = (chainInfo: ChainInfo) =>\n makeStyles(\n createStyles({\n heading: {\n padding: `${md} ${lg}`,\n justifyContent: 'space-between',\n height: '74px',\n boxSizing: 'border-box',\n },\n close: {\n height: lg,\n width: lg,\n fill: secondaryText,\n },\n qrContainer: {\n // backgroundColor: 'red',\n padding: md,\n borderRadius: '6px',\n border: `1px solid ${secondaryText}`,\n },\n networkInfo: {\n backgroundColor: `${chainInfo?.theme?.backgroundColor ?? border}`,\n color: `${chainInfo?.theme?.textColor ?? fontColor}`,\n padding: md,\n marginBottom: 0,\n },\n annotation: {\n margin: lg,\n marginBottom: 0,\n },\n safeName: {\n margin: `${md} 0`,\n },\n buttonRow: {\n height: '84px',\n justifyContent: 'center',\n '& > button': {\n fontFamily: 'Averta',\n fontSize: md,\n boxShadow: '1px 2px 10px 0 rgba(212, 212, 211, 0.59)',\n },\n },\n addressContainer: {\n flexDirection: 'column',\n justifyContent: 'center',\n margin: `${lg} 0`,\n\n [`@media (min-width: ${screenSm}px)`]: {\n flexDirection: 'row',\n },\n },\n }),\n )()\n\nexport const RECEIVE_ASSETS_MODAL_TEST_ID = 'receive-assets-modal'\n\ntype Props = {\n onClose: () => void\n safeAddress: string\n safeName: string\n}\n\nconst ReceiveModal = ({ onClose, safeAddress, safeName }: Props): ReactElement => {\n const chainInfo = getChainInfo()\n const classes = useStyles(chainInfo)\n const { shortName } = useSafeAddress()\n\n const copyShortName = useSelector(copyShortNameSelector)\n const [shouldEncodePrefix, setShouldEncodePrefix] = useState(copyShortName)\n\n const qrCodeString = shouldEncodePrefix ? getPrefixedSafeAddressSlug({ shortName, safeAddress }) : safeAddress\n\n return (\n
\n \n \n Receive assets\n \n \n \n \n \n \n \n {chainInfo.chainName} Network–only send {chainInfo.chainName} assets to this Walliro.\n \n \n This is the address of your Walliro. Deposit funds by scanning the QR code or copying the address below. Only\n send {chainInfo.nativeCurrency.symbol} and assets to this address (e.g. ETH, ERC20, ERC721)!\n \n \n \n {safeName}\n \n \n \n \n }\n label={\n <>\n QR code with chain prefix ({shortName}:)\n \n }\n />\n \n \n \n \n \n \n \n \n
\n )\n}\n\nexport default ReceiveModal\n","import { createTheme } from '@material-ui/core/styles'\nimport { alpha } from '@material-ui/core/styles/colorManipulator'\n\nimport {\n alertWarning,\n background,\n boldFont,\n bolderFont,\n border,\n buttonLargeFontSize,\n disabled,\n error,\n extraSmallFontSize,\n fontColor,\n largeFontSize,\n lg,\n mainFontFamily,\n md,\n mediumFontSize,\n primary,\n regularFont,\n secondary,\n secondaryBackground,\n secondaryFontFamily,\n secondaryText,\n sm,\n smallFontSize,\n xs,\n black300,\n black400,\n infoColor,\n white,\n primaryLite,\n primaryActive,\n light,\n gray500,\n primary200,\n grey400,\n} from './variables'\n\nconst palette = {\n primary: {\n main: primary,\n },\n secondary: {\n main: secondary,\n },\n error: {\n main: error,\n },\n success: {\n main: secondary,\n },\n contrastThreshold: 3,\n tonalOffset: 0.2,\n}\n\n// see https://material-ui-next.com/customization/themes/\n// see https://github.com/mui-org/material-ui/blob/v1-beta/src/styles/createMuiTheme.js\nconst theme = createTheme({\n typography: {\n fontFamily: mainFontFamily,\n useNextVariants: true,\n },\n\n overrides: {\n MuiSkeleton: {\n root: {\n backgroundColor: 'rgba(var(--Mlight-darkest),1) !important',\n },\n },\n MuiButton: {\n label: {\n lineHeight: '1',\n fontSize: largeFontSize,\n fontWeight: regularFont,\n },\n root: {\n fontFamily: secondaryFontFamily,\n letterSpacing: '0.9px',\n '&$disabled': {\n color: disabled,\n },\n color: disabled,\n textTransform: 'none',\n borderRadius: sm,\n },\n contained: {\n boxShadow: '1px 2px 10px 0 rgba(var(--Mprimary-darkest),.6)',\n },\n containedPrimary: {\n backgroundColor: primary,\n color: white,\n '&:hover': {\n backgroundColor: primaryLite,\n },\n '&:active': {\n backgroundColor: primaryActive,\n },\n },\n containedSecondary: {\n backgroundColor: error,\n '&:hover': {\n backgroundColor: '#d4d5d3',\n },\n },\n outlinedPrimary: {\n border: `2px solid ${primary}`,\n '&:hover': {\n border: `2px solid ${primary}`,\n },\n },\n sizeLarge: {\n padding: `${md} ${lg}`,\n minHeight: '52px',\n fontSize: buttonLargeFontSize,\n },\n sizeSmall: {\n minWidth: '130px',\n fontSize: smallFontSize,\n },\n textSecondary: {\n '&:hover': {\n borderRadius: '3px',\n },\n },\n },\n MuiPaper: {\n root: {\n backgroundColor: light,\n color: fontColor,\n },\n rounded: {\n borderRadius: sm,\n },\n },\n MuiStepper: {\n root: {\n padding: `${lg} 0 0 15px`,\n background: 'transparent',\n },\n },\n MuiIconButton: {\n root: {\n padding: '0',\n },\n },\n MuiChip: {\n root: {\n fontFamily: secondaryFontFamily,\n },\n },\n MuiStepIcon: {\n root: {\n fontSize: '22px',\n color: `${secondaryText} !important`,\n },\n completed: {\n color: `${secondary} !important`,\n },\n active: {\n color: `${secondary} !important`,\n fontWeight: boldFont,\n },\n },\n MuiStepContent: {\n root: {\n borderLeft: `1px solid ${secondaryText}`,\n },\n },\n MuiTypography: {\n body1: {\n fontFamily: secondaryFontFamily,\n letterSpacing: '-0.5px',\n fontSize: mediumFontSize,\n },\n body2: {\n fontFamily: secondaryFontFamily,\n },\n },\n MuiFormControl: {\n root: {\n width: '100%',\n },\n },\n MuiInputBase: {\n root: {\n color: fontColor,\n },\n },\n MuiFormLabel: {\n root: {\n color: fontColor,\n },\n },\n\n MuiInputLabel: {\n outlined: {\n '&$error': {\n color: error,\n },\n },\n },\n MuiOutlinedInput: {\n root: {\n '& $notchedOutline': {\n borderColor: grey400,\n },\n '&:hover $notchedOutline': {\n borderColor: gray500,\n },\n },\n },\n\n MuiFilledInput: {\n root: {\n backgroundColor: grey400,\n '&:hover': {\n backgroundColor: gray500,\n },\n '&$focused': {\n backgroundColor: gray500,\n },\n },\n underline: {\n '&::before': {\n borderBottomStyle: 'solid',\n borderBottomWidth: '2px !important',\n borderBottom: `2px solid rgb(var(--Mprimary)) !important`,\n },\n '&::after': {\n borderBottom: `2px solid rgb(var(--Mprimary-darkest)) !important`,\n },\n '&.isValid::before': {\n borderBottomColor: `rgb(var(--Mgreen)) !important`,\n },\n '&.isInvalid::after': {\n borderBottomColor: `${error} !important`,\n },\n '&.isValid::after': {\n display: 'none',\n },\n },\n },\n\n MuiStepLabel: {\n label: {\n textAlign: 'left',\n color: secondary,\n '&$active': {\n color: primary,\n },\n '&$completed': {\n color: 'rgb(var(--Mtxt))',\n },\n },\n },\n MuiSvgIcon: {\n colorSecondary: {\n color: secondaryText,\n },\n },\n MuiSnackbar: {\n root: {\n maxWidth: '100%',\n width: '340px',\n },\n },\n MuiSnackbarContent: {\n root: {\n borderRadius: `${sm} !important`,\n display: 'flex',\n flexDirection: 'row',\n flexWrap: 'nowrap',\n padding: '20px',\n width: '100%',\n boxShadow: 'none',\n },\n message: {\n color: 'rgb(var(--Mwhite))',\n flexGrow: '1',\n fontSize: '14px',\n lineHeight: '1.43',\n padding: '0 10px 0 0',\n '& > span': {\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'stretch',\n overflowX: 'hidden',\n overflowY: 'auto',\n maxHeight: '160px',\n wordBreak: 'break-word',\n '& > img': {\n display: 'block',\n marginRight: '13px',\n },\n },\n },\n action: {\n paddingLeft: '0',\n '& > button': {\n color: 'rgb(var(--Mtxt))',\n },\n },\n },\n MuiTabs: {\n indicator: {\n backgroundColor: primary + '!important',\n },\n },\n MuiTab: {\n root: {\n fontFamily: secondaryFontFamily,\n fontWeight: 'normal',\n fontSize: extraSmallFontSize,\n\n '&$selected': {\n fontWeight: boldFont,\n backgroundColor: gray500,\n '& p': {\n color: primary + '!important',\n },\n },\n '@media (min-width: 960px)': {\n fontSize: extraSmallFontSize, // override material-ui media query\n },\n },\n },\n MuiTable: {\n root: {\n backgroundColor: 'rgb(var(--Mgray-lightest)) !important',\n boxShadow: 'none !important',\n border: '1px solid rgb(var(--Mgray))',\n },\n },\n MuiTableContainer: {\n root: {\n marginLeft: '-10px',\n marginRight: '-10px',\n marginTop: '-10px',\n paddingLeft: '10px',\n paddingRight: '10px',\n paddingTop: '10px',\n },\n },\n MuiTablePagination: {\n root: {\n backgroundColor: 'rgb(var(--Mgray-lightest)) !important',\n boxShadow: 'none !important',\n border: '1px solid rgb(var(--Mgray))',\n },\n toolbar: {\n paddingRight: '15px',\n '& > span:nth-child(2)': {\n order: 1,\n },\n },\n selectIcon: {\n height: '100%',\n top: '0px',\n },\n caption: {\n color: fontColor,\n fontFamily: secondaryFontFamily,\n fontSize: mediumFontSize,\n order: '2',\n },\n input: {\n color: fontColor,\n order: '2',\n width: '60px',\n },\n select: {\n minWidth: lg,\n paddingRight: '30',\n backgroundColor: 'rgb(var(--Mgray-lightest)) !important',\n },\n actions: {\n color: fontColor,\n order: '4',\n },\n },\n MuiTableSortLabel: {\n root: {\n fontSize: extraSmallFontSize,\n },\n active: {\n fontWeight: boldFont,\n color: 'rgb(var(--Mprimary)) !important',\n },\n },\n MuiTableRow: {\n hover: {\n backgroundColor: 'rgb(var(--Mgray)) !important',\n },\n },\n MuiTableCell: {\n root: {\n borderBottomWidth: '1px',\n borderColor: 'rgb(var(--Mgray)) !important',\n fontFamily: secondaryFontFamily,\n fontSize: mediumFontSize,\n },\n head: {\n color: 'rgb(var(--Mtxt))',\n letterSpacing: '1px',\n textTransform: 'uppercase',\n },\n body: {\n color: 'rgb(var(--Mtext))',\n fontWeight: 'normal',\n letterSpacing: 'normal',\n overflow: 'hidden',\n paddingBottom: xs,\n paddingTop: xs,\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n },\n },\n MuiBackdrop: {\n root: {\n backdropFilter: 'blur(1px)',\n backgroundColor: 'rgba(228, 232, 241, 0.75)',\n top: '0',\n },\n },\n MuiMenu: {\n paper: {\n backgroundColor: 'rgb(var(--Mgray-lightest))',\n },\n },\n MuiMenuItem: {\n root: {\n color: 'rgb(var(--Mtext))',\n fontFamily: secondaryFontFamily,\n },\n },\n MuiListItemIcon: {\n root: {\n minWidth: 'auto',\n },\n },\n MuiListItemText: {\n primary: {\n color: fontColor,\n fontFamily: secondaryFontFamily,\n fontSize: mediumFontSize,\n fontWeight: bolderFont,\n },\n secondary: {\n color: fontColor,\n fontFamily: secondaryFontFamily,\n fontSize: smallFontSize,\n },\n },\n MuiCheckbox: {\n colorSecondary: {\n '&$disabled': {\n color: alpha(secondary, 0.5),\n },\n },\n },\n\n MuiFormControlLabel: {\n label: {\n '&$disabled': {\n color: primary,\n },\n },\n },\n MuiAlert: {\n root: {\n color: fontColor,\n alignItems: 'center',\n },\n standardWarning: {\n backgroundColor: alertWarning,\n },\n standardInfo: {\n backgroundColor: infoColor,\n borderRadius: '8px',\n '& svg': {\n color: secondary,\n },\n },\n icon: {\n '& > svg': {\n width: md,\n height: md,\n },\n },\n },\n MuiAlertTitle: {\n root: {\n color: fontColor,\n fontSize: md,\n margin: 0,\n },\n },\n },\n palette,\n} as any)\n\nexport default theme\n\nexport const DropdownListTheme = {\n ...theme,\n overrides: {\n ...theme.overrides,\n MuiPaper: {\n root: {\n marginTop: '10px',\n backgroundColor: 'rgba(var(--Mgray-lightest), 1)',\n },\n elevation0: {\n boxShadow: 'none',\n },\n rounded: {\n borderRadius: xs,\n },\n },\n MuiList: {\n padding: {\n paddingBottom: '0',\n paddingTop: '0',\n },\n },\n MuiListItem: {\n root: {\n borderBottom: `1px solid ${border}`,\n '&:last-child': {\n borderBottom: 'none',\n },\n boxSizing: 'border-box',\n },\n button: {\n '&:hover': {\n backgroundColor: 'rgba(var(--Mgray-lighter), 1)',\n },\n },\n },\n },\n}\n","import { ReactElement } from 'react'\nimport styled from 'styled-components'\n\nconst UnStyledButton = styled.button`\n background: none;\n color: inherit;\n border: none;\n padding: 0;\n font: inherit;\n cursor: pointer;\n border-radius: 50%;\n transition: background-color 0.2s ease-in-out;\n outline-color: transparent;\n height: 24px;\n width: 24px;\n display: flex;\n justify-content: center;\n align-items: center;\n :hover {\n background-color: ${({ theme }) => theme.colors.separator};\n }\n`\ntype Props = {\n onClick?: () => void\n children: ReactElement\n dataTestId?: string\n}\n\nconst ButtonHelper = ({ onClick = () => undefined, children, dataTestId }: Props): React.ReactElement => {\n return (\n \n {children}\n \n )\n}\n\nexport default ButtonHelper\n","import { useSelector } from 'react-redux'\nimport { getShortName } from 'src/config'\nimport { currentSafe } from 'src/logic/safe/store/selectors'\nimport { currentSession } from '../store/selectors'\n\nconst useSafeAddress = (): { shortName: string; safeAddress: string } => {\n const safe = useSelector(currentSafe)\n const { currentShortName, currentSafeAddress } = useSelector(currentSession)\n\n return {\n shortName: currentShortName || getShortName(),\n safeAddress: currentSafeAddress || safe.address,\n }\n}\n\nexport default useSafeAddress\n","import classNames from 'classnames/bind'\nimport { ReactElement } from 'react'\n\nimport styles from './index.module.scss'\n\nimport { capitalize } from 'src/utils/css'\n\nconst cx = classNames.bind(styles)\n\nconst Col = ({\n around,\n between,\n bottom,\n center,\n children,\n className,\n end,\n layout = 'inherit',\n lg,\n lgOffset,\n margin,\n md,\n mdOffset,\n middle,\n overflow,\n sm,\n smOffset,\n start,\n top,\n xs,\n xsOffset,\n ...props\n}: any): ReactElement => {\n const colClassNames = cx(\n 'col',\n center ? capitalize(center, 'center') : undefined,\n start ? capitalize(start, 'start') : undefined,\n end ? capitalize(end, 'end') : undefined,\n top ? capitalize(top, 'top') : undefined,\n middle ? capitalize(middle, 'middle') : undefined,\n bottom ? capitalize(bottom, 'bottom') : undefined,\n around ? capitalize(around, 'around') : undefined,\n between ? capitalize(between, 'between') : undefined,\n margin ? capitalize(margin, 'margin') : undefined,\n xs ? capitalize(xs, 'xs') : undefined,\n sm ? capitalize(sm, 'sm') : undefined,\n md ? capitalize(md, 'md') : undefined,\n lg ? capitalize(lg, 'lg') : undefined,\n xsOffset ? capitalize(xsOffset, 'xsOffset') : undefined,\n smOffset ? capitalize(smOffset, 'smOffset') : undefined,\n mdOffset ? capitalize(mdOffset, 'mdOffset') : undefined,\n lgOffset ? capitalize(lgOffset, 'lgOffset') : undefined,\n { overflow },\n layout,\n className,\n )\n\n return (\n
\n {children}\n
\n )\n}\n\nexport default Col\n","import { createAction } from 'redux-actions'\nimport { SelectedCurrencyPayload } from 'src/logic/currencyValues/store/reducer/currencyValues'\n\nexport const SET_CURRENT_CURRENCY = 'SET_CURRENT_CURRENCY'\n\nexport const setSelectedCurrency = createAction(SET_CURRENT_CURRENCY)\n","export default __webpack_public_path__ + \"static/media/info_red.2d444d88.svg\";","import BigNumber from 'bignumber.js'\nimport { Dispatch } from 'redux'\n\nimport { fetchTokenCurrenciesBalances, TokenBalance } from 'src/logic/safe/api/fetchTokenCurrenciesBalances'\nimport { addTokens } from 'src/logic/tokens/store/actions/addTokens'\nimport { makeToken, Token } from 'src/logic/tokens/store/model/token'\nimport { updateSafe } from 'src/logic/safe/store/actions/updateSafe'\nimport { AppReduxState } from 'src/store'\nimport { humanReadableValue } from 'src/logic/tokens/utils/humanReadableValue'\nimport { currentSafe } from 'src/logic/safe/store/selectors'\nimport { currentCurrencySelector } from 'src/logic/currencyValues/store/selectors'\nimport { ZERO_ADDRESS, sameAddress } from 'src/logic/wallets/ethAddresses'\nimport { Errors, logError } from 'src/logic/exceptions/CodedException'\nimport { SafeBalanceResponse } from '@gnosis.pm/safe-react-gateway-sdk'\n\nexport type BalanceRecord = {\n tokenAddress?: string\n tokenBalance: string\n fiatBalance?: string\n}\n\ninterface ExtractedData {\n balances: Array\n ethBalance: string\n tokens: Array\n}\n\nconst extractDataFromResult = (\n acc: ExtractedData,\n { balance, fiatBalance, tokenInfo }: TokenBalance,\n): ExtractedData => {\n const { address, decimals } = tokenInfo\n\n acc.balances.push({\n tokenAddress: address,\n fiatBalance,\n tokenBalance: humanReadableValue(balance, Number(decimals)),\n })\n\n // Extract network token balance from backend balances\n if (sameAddress(address, ZERO_ADDRESS)) {\n acc.ethBalance = humanReadableValue(balance, Number(decimals))\n } else {\n acc.tokens.push(makeToken({ ...tokenInfo }))\n }\n\n return acc\n}\n\nexport const fetchSafeTokens =\n (safeAddress: string, currency?: string) =>\n async (dispatch: Dispatch, getState: () => AppReduxState): Promise => {\n const state = getState()\n const safe = currentSafe(state)\n\n if (!safe) {\n return\n }\n const selectedCurrency = currency ?? currentCurrencySelector(state)\n\n let tokenCurrenciesBalances: SafeBalanceResponse\n try {\n tokenCurrenciesBalances = await fetchTokenCurrenciesBalances({\n safeAddress,\n selectedCurrency,\n })\n } catch (e) {\n logError(Errors._601, e.message)\n return\n }\n\n const { balances, ethBalance, tokens } = tokenCurrenciesBalances.items.reduce(\n extractDataFromResult,\n {\n balances: [],\n ethBalance: '0',\n tokens: [],\n },\n )\n\n dispatch(\n updateSafe({\n address: safeAddress,\n balances,\n ethBalance,\n totalFiatBalance: new BigNumber(tokenCurrenciesBalances.fiatTotal).toFixed(2),\n }),\n )\n dispatch(addTokens(tokens))\n }\n","import { useMemo } from 'react'\nimport { useLocation } from 'react-router-dom'\n\nconst useQuery = (): URLSearchParams => {\n const { search } = useLocation()\n\n return useMemo(() => new URLSearchParams(search), [search])\n}\n\nexport { useQuery }\n","import { useEffect, useState } from 'react'\n\nimport { getChainName } from 'src/config'\nimport { animalsDict, adjectivesDict } from './useMnemonicName.dict'\n\nconst animals: string[] = animalsDict.trim().split(/\\s+/)\nconst adjectives: string[] = adjectivesDict.trim().split(/\\s+/)\n\nconst getRandomItem = (arr: T[]): T => {\n return arr[Math.floor(arr.length * Math.random())]\n}\n\nexport const getRandomName = (noun = getRandomItem(animals)): string => {\n const adj = getRandomItem(adjectives)\n return `${adj}-${noun}`\n}\n\nexport const useMnemonicName = (noun?: string): string => {\n const [name, setName] = useState('')\n\n useEffect(() => {\n setName(getRandomName(noun))\n }, [noun])\n\n return name\n}\n\nexport const useMnemonicSafeName = (): string => {\n const networkName = getChainName().toLowerCase()\n return useMnemonicName(`${networkName}-walliro`)\n}\n","/**\n * The word lists are from https://github.com/mmkal/ts/tree/main/packages/memorable-moniker/src/dict\n */\nexport const animalsDict = `\naardvark\nalbatross\nalligator\nalpaca\nant\nanteater\nantelope\nape\narmadillo\nbaboon\nbadger\nbarracuda\nbat\nbear\nbeaver\nbee\nbinturong\nbird\nbison\nbluebird\nboar\nbobcat\nbuffalo\nbutterfly\ncamel\ncapybara\ncaracal\ncaribou\ncassowary\ncat\ncaterpillar\ncattle\nchameleon\nchamois\ncheetah\nchicken\nchimpanzee\nchinchilla\nchough\ncoati\ncobra\ncockroach\ncod\ncormorant\ncougar\ncoyote\ncrab\ncrane\ncricket\ncrocodile\ncrow\ncuckoo\ncurlew\ndeer\ndegu\ndhole\ndingo\ndinosaur\ndog\ndogfish\ndolphin\ndonkey\ndotterel\ndove\ndragonfly\nduck\ndugong\ndunlin\neagle\nechidna\neel\neland\nelephant\nelk\nemu\nfalcon\nferret\nfinch\nfish\nflamingo\nfly\nfox\nfrog\ngaur\ngazelle\ngecko\ngerbil\ngiraffe\ngnat\ngnu\ngoat\ngoldfinch\ngoosander\ngoose\ngorilla\ngoshawk\ngrasshopper\ngrouse\nguanaco\nguinea-pig\ngull\nhamster\nhare\nhawk\nhedgehog\nheron\nherring\nhippopotamus\nhoatzin\nhoopoe\nhornet\nhorse\nhuman\nhummingbird\nhyena\nibex\nibis\niguana\nimpala\njackal\njaguar\njay\njellyfish\njerboa\nkangaroo\nkingfisher\nkinkajou\nkoala\nkomodo-dragon\nkookaburra\nkouprey\nkudu\nlapwing\nlark\nlemur\nleopard\nlion\nlizard\nllama\nlobster\nlocust\nloris\nlouse\nlynx\nlyrebird\nmacaque\nmacaw\nmagpie\nmallard\nmammoth\nmanatee\nmandrill\nmarmoset\nmarmot\nmeerkat\nmink\nmole\nmongoose\nmonkey\nmoose\nmosquito\nmouse\nmyna\nnarwhal\nnewt\nnightingale\noctopus\nokapi\nopossum\norangutan\noryx\nostrich\notter\nowl\noyster\npanther\nparrot\npanda\npartridge\npeafowl\npelican\npenguin\npheasant\npig\npigeon\npika\npolar-bear\npony\nporcupine\nporpoise\npug\nquail\nquelea\nquetzal\nrabbit\nraccoon\nram\nrat\nraven\nred-deer\nred-panda\nreindeer\nrhea\nrhinoceros\nrook\nsalamander\nsalmon\nsand-dollar\nsandpiper\nsardine\nsea-lion\nseahorse\nseal\nshark\nsheep\nshrew\nsiamang\nskunk\nsloth\nsnail\nsnake\nspider\nsquid\nsquirrel\nstarling\nstegosaurus\nswan\ntamarin\ntapir\ntarsier\ntermite\ntiger\ntoad\ntoucan\nturaco\nturkey\nturtle\numbrellabird\nvinegaroon\nviper\nvulture\nwallaby\nwalrus\nwasp\nwaxwing\nweasel\nwhale\nwobbegong\nwolf\nwolverine\nwombat\nwoodpecker\nworm\nwren\nyak\nzebra\n`\n\nexport const adjectivesDict = `\nadmirable\nenergetic\nlucky\naffable\nenjoyable\nmagnificent\naffectionate\nenthusiastic\nmarvelous\nagreeable\neuphoric\nmeritorious\namazing\nexcellent\nmerry\namiable\nexceptional\nmild-mannered\namused\nexcited\nnice\namusing\nextraordinary\nnoble\nanimated\nexultant\noutstanding\nappreciative\nfabulous\noverjoyed\nastonishing\nfaithful\npassionate\nauthentic\nfantastic\npeaceful\nbelievable\nfervent\nplacid\nbenevolent\nfortunate\npleasant\nblissful\nfriendly\npleasing\nbouncy\nfun\npleasurable\nbrilliant\ngenuine\npositive\nbubbly\nglad\npraiseworthy\nbuoyant\nglorious\nprominent\ncalm\ngood\nproud\ncharming\ngood-humored\nrelaxed\ncheerful\ngood-natured\nreliable\ncheery\ngracious\nrespectable\nclever\ngrateful\nsharp\ncomfortable\ngreat\nsincere\ncomical\nhappy\nspirited\ncommendable\nheartfelt\nsplendid\nconfident\nhonest\nsuperb\ncongenial\nhonorable\nsuperior\ncontent\nhopeful\nterrific\ncordial\nhumorous\nthankful\ncourteous\nincredible\ntremendous\ndedicated\ninspirational\ntriumphant\ndelighted\njolly\ntrustworthy\ndelightful\njovial\ntrusty\ndependable\njoyful\ntruthful\ndevoted\njoyous\nuplifting\ndocile\njubilant\nvictorious\ndynamic\nkeen\nvigorous\neager\nkind\nvirtuous\nearnest\nlaudable\nvivacious\neasygoing\nlaughing\nwhimsical\nebullient\nlikable\nwitty\necstatic\nlively\nwonderful\nelated\nlovely\nworthy\nemphatic\nloving\nzealous\nenchanting\nloyal\nzestful\n`\n","import { createSelector } from 'reselect'\n\nimport { safesWithNamesAsList } from 'src/logic/safe/store/selectors'\n\n/**\n * Sort safe list by the name in the address book\n */\nexport const sortedSafeListSelector = createSelector([safesWithNamesAsList], (safes) =>\n safes.sort((a, b) => (a.name.toLowerCase() > b.name.toLowerCase() ? 1 : -1)),\n)\n","import { useEffect, useState } from 'react'\nimport { useSelector } from 'react-redux'\n\nimport { sortedSafeListSelector } from 'src/components/SafeListSidebar/selectors'\nimport { getChains } from 'src/config/cache/chains'\nimport { ChainId } from 'src/config/chain.d'\nimport { SafeRecordProps } from '../store/models/safe'\nimport { getLocalNetworkSafesById } from '../utils'\n\nexport type LocalSafes = Record\n\nconst getEmptyLocalSafes = (): LocalSafes => {\n return getChains().reduce((safes, { chainId }) => ({ ...safes, [chainId]: [] }), {} as LocalSafes)\n}\n\nconst useLocalSafes = (): LocalSafes => {\n const [localSafes, setLocalSafes] = useState(() => getEmptyLocalSafes())\n const addedSafes = useSelector(sortedSafeListSelector)\n const addedAddresses = addedSafes.map(({ address }) => address).join()\n\n // Reload added Safes from the localStorage when addedAddresses changes\n useEffect(() => {\n const getLocalSafes = () => {\n getChains().forEach(({ chainId }) => {\n const localSafe = getLocalNetworkSafesById(chainId)\n setLocalSafes((prevSafes) => ({\n ...prevSafes,\n ...(localSafe && { [chainId]: localSafe }),\n }))\n })\n }\n\n getLocalSafes()\n }, [addedAddresses])\n\n return localSafes\n}\n\nexport default useLocalSafes\n","import { ReactElement } from 'react'\nimport styled from 'styled-components'\nimport { DecodedDataParameterValue, DecodedDataResponse } from '@gnosis.pm/safe-react-gateway-sdk'\n\nimport { getNativeCurrency } from 'src/config'\nimport { fromTokenUnit } from 'src/logic/tokens/utils/humanReadableValue'\nimport { BasicTxInfo, getParameterElement } from 'src/components/DecodeTxs'\nimport { DecodedTxDetailType } from 'src/routes/safe/components/Apps/components/ConfirmTxModal/index'\n\nconst Container = styled.div`\n word-break: break-word;\n\n & > div:last-child {\n margin: 0;\n }\n`\n\nexport function isDataDecodedParameterValue(arg: DecodedTxDetailType): arg is DecodedDataParameterValue {\n return arg ? arg.hasOwnProperty('operation') : false\n}\n\ntype Props = {\n decodedTxData: DecodedDataParameterValue | DecodedDataResponse\n}\n\nexport const DecodedTxDetail = ({ decodedTxData: tx }: Props): ReactElement => {\n const nativeCurrency = getNativeCurrency()\n let body\n // If we are dealing with a multiSend\n // decodedTxData is of type DataDecodedParameter\n if (isDataDecodedParameterValue(tx)) {\n const txValue = fromTokenUnit(tx.value, nativeCurrency.decimals)\n\n body = (\n <>\n \n {tx.dataDecoded?.parameters.map((p, index) => getParameterElement(p, index))}\n \n )\n } else {\n // If we are dealing with a single tx\n // decodedTxData is of type DecodedData\n body = <>{tx.parameters.map((p, index) => getParameterElement(p, index))}\n }\n\n return {body}\n}\n","import { ReactElement, useState } from 'react'\nimport styled from 'styled-components'\nimport { Transaction } from '@gnosis.pm/safe-apps-sdk-v1'\nimport { DecodedDataBasicParameter, DecodedDataParameterValue } from '@gnosis.pm/safe-react-gateway-sdk'\nimport get from 'lodash/get'\nimport {\n Text,\n CopyToClipboardBtn,\n IconText,\n Accordion,\n AccordionSummary,\n AccordionDetails,\n} from '@gnosis.pm/safe-react-components'\n\nimport Paragraph from 'src/components/layout/Paragraph'\nimport Row from 'src/components/layout/Row'\nimport { getExplorerInfo } from 'src/config'\nimport { DecodedTxDetailType } from 'src/routes/safe/components/Apps/components/ConfirmTxModal'\nimport PrefixedEthHashInfo from '../PrefixedEthHashInfo'\nimport { getByteLength } from 'src/utils/getByteLength'\nimport { getInteractionTitle } from 'src/routes/safe/components/Transactions/helpers/utils'\nimport {\n DecodedTxDetail,\n isDataDecodedParameterValue,\n} from 'src/routes/safe/components/Apps/components/ConfirmTxModal/DecodedTxDetail'\n\nconst FlexWrapper = styled.div<{ margin: number }>`\n display: flex;\n align-items: center;\n\n > :nth-child(2) {\n margin-left: ${({ margin }) => margin}px;\n }\n`\n\nconst StyledAccordionSummary = styled(AccordionSummary)`\n & .MuiAccordionSummary-content {\n justify-content: space-between;\n }\n`\n\nconst BasicTxInfoWrapper = styled.div`\n margin-bottom: 15px;\n\n > :nth-child(2) {\n margin-bottom: 15px;\n }\n`\n\nconst ElementWrapper = styled.div`\n margin-bottom: 15px;\n`\n\nexport const BasicTxInfo = ({\n txRecipient,\n txData,\n txValue,\n recipientName,\n}: {\n txRecipient: string\n txData: string\n txValue: string\n recipientName?: string\n}): ReactElement => {\n return (\n \n {/* TO */}\n <>\n \n \n {getInteractionTitle(txValue)}\n \n \n \n \n <>\n {/* Data */}\n \n \n Data (hex encoded):\n \n \n \n \n {txData ? getByteLength(txData) : 0} bytes\n \n \n \n \n \n )\n}\n\nexport const getParameterElement = ({ name, type, value }: DecodedDataBasicParameter, index: number): ReactElement => {\n let valueElement\n\n if (!Array.isArray(value)) {\n switch (type) {\n case 'address':\n valueElement = (\n \n )\n break\n case 'bytes':\n valueElement = (\n \n {getByteLength(value)} bytes\n \n \n )\n break\n }\n }\n\n if (!valueElement) {\n valueElement = {JSON.stringify(value)}\n }\n\n return (\n \n \n {name} ({type})\n \n {valueElement}\n \n )\n}\n\nconst SingleTx = ({ decodedData }: { decodedData: DecodedTxDetailType }): ReactElement | null => {\n const [isAccordionExpanded, setIsAccordionExpanded] = useState(false)\n\n const onChangeExpand = () => {\n setIsAccordionExpanded((prev) => !prev)\n }\n\n if (!decodedData) {\n return null\n }\n\n const method = isDataDecodedParameterValue(decodedData) ? decodedData.dataDecoded?.method : decodedData.method\n\n return (\n \n \n \n {method}\n \n \n \n \n \n )\n}\n\nconst MultiSendTx = ({ decodedData }: { decodedData: DecodedTxDetailType }): ReactElement | null => {\n const txs: DecodedDataParameterValue[] | undefined = get(decodedData, 'parameters[0].valueDecoded')\n\n if (!txs) {\n return null\n }\n\n return (\n <>\n {txs.map((tx, index) => (\n \n ))}\n \n )\n}\n\ntype Props = {\n txs: Transaction[]\n decodedData: DecodedTxDetailType\n}\n\nexport const DecodeTxs = ({ txs, decodedData }: Props): ReactElement => {\n return txs.length > 1 ? : \n}\n","import styled from 'styled-components'\nimport { Button, Loader, theme, Title as TitleSRC } from '@gnosis.pm/safe-react-components'\nimport { ButtonProps as ButtonPropsMUI, Modal as ModalMUI } from '@material-ui/core'\nimport cn from 'classnames'\nimport { ReactElement, ReactNode } from 'react'\nimport { ModalHeader } from 'src/routes/safe/components/Balances/SendModal/screens/ModalHeader'\nimport { getModalEvent } from 'src/utils/events/modals'\nimport { trackEvent } from 'src/utils/googleTagManager'\nimport { screenSm } from 'src/theme/variables'\n\ntype Theme = typeof theme\n\nconst ModalStyled = styled(ModalMUI)`\n & {\n align-items: center;\n flex-direction: column;\n display: flex;\n overflow-y: scroll;\n }\n\n .overlay {\n background-color: rgba(232, 231, 230, 0.75) !important;\n }\n\n .paper {\n position: relative;\n top: 68px;\n width: 525px;\n border-radius: 8px;\n background-color: rgba(var(--Mlight), 1);\n box-shadow: 1px 2px 10px 0 rgba(40, 54, 61, 0.18);\n display: flex;\n flex-direction: column;\n\n &:focus {\n outline: none;\n }\n\n // TODO: replace class-based styles by params\n &.receive-modal {\n height: auto;\n max-width: calc(100% - 130px);\n min-height: 544px;\n overflow: hidden;\n }\n\n &.bigger-modal-window {\n width: 775px;\n height: auto;\n }\n\n &.smaller-modal-window {\n height: auto;\n }\n\n &.modal {\n height: auto;\n max-width: calc(100% - 130px);\n }\n\n @media (max-width: ${screenSm}px) {\n width: 100vw;\n max-width: 100vw !important;\n }\n }\n`\n\ninterface GnoModalProps {\n children: ReactNode\n description: string\n // type copied from Material-UI Modal's `close` prop\n handleClose?: (event: Record, reason: 'backdropClick' | 'escapeKeyDown') => void\n open: boolean\n paperClassName?: string\n title: string\n}\n\nconst GnoModal = ({ children, description, handleClose, open, paperClassName, title }: GnoModalProps): ReactElement => {\n return (\n \n
{children}
\n \n )\n}\n\nexport default GnoModal\n\n/*****************/\n/* Generic Modal */\n/*****************/\n\nconst TitleStyled = styled(TitleSRC)`\n display: flex;\n align-items: center;\n flex-basis: 100%;\n\n .image,\n img {\n width: 20px;\n margin-right: 10px;\n }\n\n .note,\n span {\n margin-left: 12px;\n }\n`\n\ninterface TitleProps {\n children: string | ReactNode\n size?: keyof Theme['title']['size']\n withoutMargin?: boolean\n strong?: boolean\n}\n\nconst Title = ({ children, ...props }: TitleProps): ReactElement => (\n \n {children}\n \n)\n\ninterface HeaderProps {\n children?: ReactNode\n onClose?: () => unknown\n}\n\nconst Header = ({ children = '', onClose = () => null }: HeaderProps): ReactElement => {\n return \n}\n\nHeader.Title = Title\n\n/*** Body ***/\nconst BodySection = styled.div<{ withoutPadding: BodyProps['withoutPadding'] }>`\n padding: ${({ withoutPadding }) => (withoutPadding ? 0 : '24px')};\n min-height: 200px;\n`\n\ninterface BodyProps {\n children: ReactNode\n withoutPadding?: boolean\n}\n\nconst Body = ({ children, withoutPadding = false }: BodyProps): ReactElement => (\n \n {children}\n \n)\n\n/*** Footer ***/\nconst FooterSection = styled.div<{ withoutBorder: boolean }>`\n display: flex;\n justify-content: center;\n align-items: center;\n border-top: ${({ withoutBorder }) => (withoutBorder ? '0' : '2px')} solid ${({ theme }) => theme.colors.separator};\n height: 84px;\n gap: 16px;\n`\n\nconst LoaderText = styled.span`\n margin-left: 10px;\n`\n\nexport enum ButtonStatus {\n ERROR = -1,\n DISABLED,\n READY,\n LOADING,\n}\n\ntype CustomButtonMUIProps = Omit & {\n to?: string\n component?: ReactNode\n}\n\nexport interface ButtonProps extends CustomButtonMUIProps {\n text?: string\n status?: ButtonStatus\n size?: keyof Theme['buttons']['size']\n color?: 'primary' | 'secondary' | 'error'\n variant?: 'bordered' | 'contained' | 'outlined'\n testId?: string\n}\n\ninterface ButtonsProps {\n cancelButtonProps?: ButtonProps\n confirmButtonProps?: ButtonProps\n}\n\nconst Buttons = ({ cancelButtonProps = {}, confirmButtonProps = {} }: ButtonsProps): ReactElement => {\n const {\n disabled: cancelDisabled,\n status: cancelStatus = ButtonStatus.READY,\n text: cancelText = ButtonStatus.LOADING === cancelStatus ? 'Cancelling' : 'Cancel',\n testId: cancelTestId = '',\n onClick: cancelOnClick,\n ...cancelProps\n } = cancelButtonProps\n const {\n disabled: confirmDisabled,\n status: confirmStatus = ButtonStatus.READY,\n text: confirmText = ButtonStatus.LOADING === confirmStatus ? 'Submitting' : 'Submit',\n testId: confirmTestId = '',\n onClick: confirmOnClick,\n ...confirmProps\n } = confirmButtonProps\n\n return (\n <>\n {\n trackEvent(getModalEvent(cancelText))\n cancelOnClick?.(e)\n }}\n {...cancelProps}\n >\n {ButtonStatus.LOADING === cancelStatus ? (\n <>\n \n {cancelText}\n \n ) : (\n cancelText\n )}\n \n {\n trackEvent(getModalEvent(confirmText))\n confirmOnClick?.(e)\n }}\n {...confirmProps}\n >\n {ButtonStatus.LOADING === confirmStatus ? (\n <>\n \n {confirmText}\n \n ) : (\n confirmText\n )}\n \n \n )\n}\n\ninterface FooterProps {\n children: ReactNode\n withoutBorder?: boolean\n}\n\nconst Footer = ({ children, withoutBorder = false }: FooterProps): ReactElement => (\n \n {children}\n \n)\n\nFooter.Buttons = Buttons\n\ninterface ModalProps {\n children: ReactNode\n description?: string\n handleClose: () => void\n open?: boolean\n title?: string\n}\n\nexport const Modal = ({ children, description = '', open = true, title = '', ...props }: ModalProps): ReactElement => {\n return (\n \n {children}\n \n )\n}\n\nModal.Header = Header\nModal.Body = Body\nModal.Footer = Footer\n","import { lg, md, sm, xl, xs } from 'src/theme/variables'\n\nexport const getSize = (size: string): string => {\n switch (size) {\n case 'xs':\n return xs\n case 'sm':\n return sm\n case 'md':\n return md\n case 'lg':\n return lg\n case 'xl':\n return xl\n default:\n return '0px'\n }\n}\n","import { ReactElement } from 'react'\n\nimport { getSize } from 'src/theme/size'\nimport { border } from 'src/theme/variables'\n\nconst calculateStyleFrom = (color, margin) => ({\n width: '100%',\n minHeight: '2px',\n height: '2px',\n backgroundColor: color || border,\n margin: `${getSize(margin)} 0px`,\n})\n\nconst Hairline = ({ className, color, margin, style }: any): ReactElement => {\n const calculatedStyles = calculateStyleFrom(color, margin)\n const mergedStyles = { ...calculatedStyles, ...(style || {}) }\n\n return
\n}\n\nexport default Hairline\n","import { OptionsObject, SnackbarKey } from 'notistack'\nimport { AnyAction } from 'redux'\nimport { Action, createAction, handleActions } from 'redux-actions'\nimport { ThunkAction } from 'redux-thunk'\n\nimport { Notification } from 'src/logic/notifications/notificationTypes'\nimport { AppReduxState } from 'src/store'\n\nexport const NOTIFICATIONS_REDUCER_ID = 'notifications'\n\nenum NOTIFICATION_ACTIONS {\n SHOW = 'notifications/show',\n READ = 'notifications/read',\n CLOSE = 'notifications/close',\n CLOSE_ALL = 'notifications/closeAll',\n DELETE = 'notifications/delete',\n DELETE_ALL = 'notifications/deleteAll',\n}\n\ntype WithRequiredProperty = Type & {\n [Property in Key]-?: Type[Property]\n}\n\n// `showNotification` generates `options.key` if none is provided\ntype KeyedNotification = Notification & { options: WithRequiredProperty }\n\nexport type NotificationsState = (KeyedNotification & {\n timestamp: number\n dismissed: boolean\n read: boolean\n})[]\n\ntype ShowPayload = KeyedNotification\ntype KeyPayload = { key: SnackbarKey }\ntype ClosePayload = KeyPayload & { read?: boolean }\n\ntype Payloads = ShowPayload | ClosePayload | KeyPayload\n\nconst notificationsReducer = handleActions(\n {\n [NOTIFICATION_ACTIONS.SHOW]: (state, { payload }: Action) => {\n return [...state, { ...payload, read: false, dismissed: false, timestamp: new Date().getTime() }]\n },\n [NOTIFICATION_ACTIONS.READ]: (state, action: Action) => {\n return state.map((notification) => {\n return notification.options?.key === action.payload.key ? { ...notification, read: true } : notification\n })\n },\n [NOTIFICATION_ACTIONS.CLOSE]: (state, action: Action) => {\n return state.map((notification) => {\n return notification.options?.key === action.payload.key ? { ...notification, dismissed: true } : notification\n })\n },\n\n [NOTIFICATION_ACTIONS.CLOSE_ALL]: (state) => {\n return state.map((notification) => ({ ...notification, dismissed: true }))\n },\n [NOTIFICATION_ACTIONS.DELETE]: (state, { payload }: Action) => {\n return state.filter((notification) => notification.options?.key !== payload.key)\n },\n [NOTIFICATION_ACTIONS.DELETE_ALL]: () => {\n return []\n },\n },\n [],\n)\n\nexport const showNotification = (\n payload: Notification,\n): ThunkAction => {\n return (dispatch): SnackbarKey => {\n const action = createAction(NOTIFICATION_ACTIONS.SHOW)\n\n // Generate/append random key in case key was dispatched before and is `read`\n const key = `${payload.options?.key || ''}${Math.random().toString(32).slice(2)}`\n\n dispatch(action({ ...payload, options: { ...payload.options, key } }))\n\n return key\n }\n}\nexport const readNotification = createAction(NOTIFICATION_ACTIONS.READ)\nexport const closeNotification = (payload: ClosePayload): ThunkAction => {\n return (dispatch): void => {\n const { read = true } = payload\n if (read) {\n dispatch(readNotification(payload))\n }\n\n const action = createAction(NOTIFICATION_ACTIONS.CLOSE)\n dispatch(action(payload))\n }\n}\nexport const closeAllNotifications = createAction(NOTIFICATION_ACTIONS.CLOSE_ALL)\nexport const deleteNotification = createAction(NOTIFICATION_ACTIONS.DELETE)\nexport const deleteAllNotifications = createAction(NOTIFICATION_ACTIONS.DELETE_ALL)\n\nexport const selectNotifications = (state: AppReduxState): NotificationsState => {\n return state[NOTIFICATIONS_REDUCER_ID]\n}\n\nexport default notificationsReducer\n","import memoize from 'lodash/memoize'\n\nimport { sameAddress } from 'src/logic/wallets/ethAddresses'\nimport { getWeb3 } from 'src/logic/wallets/getWeb3'\nimport { getShortName } from 'src/config'\nimport { isValidAddress } from 'src/utils/isValidAddress'\nimport { ADDRESS_BOOK_INVALID_NAMES, isValidAddressBookName } from 'src/logic/addressBook/utils'\nimport { FEATURES } from '@gnosis.pm/safe-react-gateway-sdk'\nimport { isValidPrefix, parsePrefixedAddress } from 'src/utils/prefixedAddress'\nimport { hasFeature } from 'src/logic/safe/utils/safeVersion'\n\ntype ValidatorReturnType = string | undefined\nexport type GenericValidatorType = (...args: unknown[]) => ValidatorReturnType\ntype AsyncValidator = (...args: unknown[]) => Promise\nexport type Validator = GenericValidatorType | AsyncValidator\n\nexport const required = (value?: string): ValidatorReturnType => {\n const required = 'Required'\n\n if (!value) {\n return required\n }\n\n if (typeof value === 'string' && !value.trim().length) {\n return required\n }\n\n return undefined\n}\n\nexport const mustBeInteger = (value: string): ValidatorReturnType =>\n !Number.isInteger(Number(value)) || value.includes('.') ? 'Must be an integer' : undefined\n\nexport const mustBeFloat = (value: string): ValidatorReturnType =>\n value && Number.isNaN(Number(value)) ? 'Must be a number' : undefined\n\nexport const minValue =\n (min: number | string, inclusive = true) =>\n (value: string): ValidatorReturnType => {\n if (!value) {\n return undefined\n }\n\n if (Number.parseFloat(value) > Number(min) || (inclusive && Number.parseFloat(value) >= Number(min))) {\n return undefined\n }\n\n return `Must be greater than ${inclusive ? 'or equal to ' : ''}${min}`\n }\n\nexport const maxValue =\n (max: number | string) =>\n (value: string): ValidatorReturnType => {\n if (!max || parseFloat(value) <= parseFloat(max.toString())) {\n return undefined\n }\n\n return `Maximum value is ${max}`\n }\n\nexport const ok = (): undefined => undefined\n\nexport const mustBeHexData = (data: string): ValidatorReturnType => {\n const isData = getWeb3().utils.isHexStrict(data)\n\n if (!isData) {\n return 'Has to be a valid strict hex data (it must start with 0x)'\n }\n}\n\nexport const mustBeAddressHash = memoize((address: string): ValidatorReturnType => {\n const errorMessage = 'Must be a valid address'\n return isValidAddress(address) ? undefined : errorMessage\n})\n\nconst mustHaveValidPrefix = (prefix: string): ValidatorReturnType => {\n if (!isValidPrefix(prefix)) {\n return 'Wrong chain prefix'\n }\n\n if (prefix !== getShortName()) {\n return 'The chain prefix must match the current network'\n }\n}\n\nexport const mustBeEthereumAddress = (fullAddress: string): ValidatorReturnType => {\n const errorMessage = 'Must be a valid address, ENS or Unstoppable domain'\n const { address, prefix } = parsePrefixedAddress(fullAddress)\n\n const prefixError = mustHaveValidPrefix(prefix)\n if (prefixError) return prefixError\n\n const result = mustBeAddressHash(address)\n if (result !== undefined && hasFeature(FEATURES.DOMAIN_LOOKUP)) {\n return errorMessage\n }\n return result\n}\n\nexport const mustBeEthereumContractAddress = memoize(async (fullAddress: string): Promise => {\n const { address } = parsePrefixedAddress(fullAddress)\n\n const contractCode = await getWeb3().eth.getCode(address)\n\n const errorMessage = `Must resolve to a valid smart contract address.`\n\n return !contractCode || contractCode.replace('0x', '').replace(/0/g, '') === '' ? errorMessage : undefined\n})\n\nexport const minMaxLength =\n (minLen: number, maxLen: number) =>\n (value: string): ValidatorReturnType => {\n const testValue = value || ''\n return testValue.length >= +minLen && testValue.length <= +maxLen\n ? undefined\n : `Should be ${minLen} to ${maxLen} symbols`\n }\n\nexport const minMaxDecimalsLength =\n (minLen: number, maxLen: number) =>\n (value: string): ValidatorReturnType => {\n const decimals = value.split('.')[1] || '0'\n const minMaxLengthErrMsg = minMaxLength(minLen, maxLen)(decimals)\n return minMaxLengthErrMsg ? `Should be ${minLen} to ${maxLen} decimals` : undefined\n }\n\nexport const ADDRESS_REPEATED_ERROR = 'Address already added'\nexport const OWNER_ADDRESS_IS_SAFE_ADDRESS_ERROR = 'Cannot use Walliro itself as owner.'\nexport const THRESHOLD_ERROR = 'You cannot set more confirmations than owners'\n\nexport const uniqueAddress =\n (addresses: string[] = []) =>\n (address?: string): string | undefined => {\n const addressExists = addresses.some((addressFromList) => sameAddress(addressFromList, address))\n return addressExists ? ADDRESS_REPEATED_ERROR : undefined\n }\n\nexport const addressIsNotCurrentSafe =\n (safeAddress: string) =>\n (address?: string): string | undefined =>\n sameAddress(safeAddress, address) ? OWNER_ADDRESS_IS_SAFE_ADDRESS_ERROR : undefined\n\nexport const composeValidators =\n (...validators: Validator[]) =>\n (value: unknown): ValidatorReturnType =>\n validators.reduce(\n (error: string | undefined, validator: GenericValidatorType): ValidatorReturnType => error || validator(value),\n undefined,\n )\n\nexport const differentFrom =\n (diffValue: number | string) =>\n (value: string): ValidatorReturnType => {\n if (value === diffValue.toString()) {\n return `Value should be different than ${diffValue}`\n }\n\n return undefined\n }\n\nexport const noErrorsOn = (name: string, errors: Record): boolean => errors[name] === undefined\n\nexport const validAddressBookName = (name: string): string | undefined => {\n const lengthError = minMaxLength(1, 50)(name)\n\n if (lengthError === undefined) {\n return isValidAddressBookName(name)\n ? undefined\n : `Name should not include: ${ADDRESS_BOOK_INVALID_NAMES.join(', ')}`\n }\n\n return lengthError\n}\n","export const enum TX_NOTIFICATION_TYPES {\n STANDARD_TX = 'STANDARD_TX',\n CONFIRMATION_TX = 'CONFIRMATION_TX',\n CANCELLATION_TX = 'CANCELLATION_TX',\n SETTINGS_CHANGE_TX = 'SETTINGS_CHANGE_TX',\n NEW_SPENDING_LIMIT_TX = 'NEW_SPENDING_LIMIT_TX',\n REMOVE_SPENDING_LIMIT_TX = 'REMOVE_SPENDING_LIMIT_TX',\n SPENDING_LIMIT_TX = 'SPENDING_LIMIT_TX',\n}\n","import { NonPayableTransactionObject } from 'src/types/contracts/types.d'\nimport { TxArgs } from 'src/logic/safe/store/models/types/transaction'\nimport { GnosisSafe } from 'src/types/contracts/gnosis_safe.d'\n\nexport const getTransactionHash = async ({\n baseGas,\n data,\n gasPrice,\n gasToken,\n nonce,\n operation,\n refundReceiver,\n safeInstance,\n safeTxGas,\n sender,\n to,\n valueInWei,\n}: TxArgs): Promise => {\n const txHash = await safeInstance.methods\n .getTransactionHash(to, valueInWei, data, operation, safeTxGas, baseGas, gasPrice, gasToken, refundReceiver, nonce)\n .call({\n from: sender,\n })\n\n return txHash\n}\n\nexport const getApprovalTransaction = (safeInstance: GnosisSafe, txHash: string): NonPayableTransactionObject => {\n try {\n return safeInstance.methods.approveHash(txHash)\n } catch (err) {\n console.error(`Error while approving transaction: ${err}`)\n throw err\n }\n}\n\nexport const getExecutionTransaction = ({\n baseGas,\n data,\n gasPrice,\n gasToken,\n operation,\n refundReceiver,\n safeInstance,\n safeTxGas,\n sigs,\n to,\n valueInWei,\n}: TxArgs): NonPayableTransactionObject => {\n try {\n return safeInstance.methods.execTransaction(\n to,\n valueInWei,\n data,\n operation,\n safeTxGas,\n baseGas,\n gasPrice,\n gasToken,\n refundReceiver,\n sigs,\n )\n } catch (err) {\n console.error(`Error while creating transaction: ${err}`)\n\n throw err\n }\n}\n","import { MultisigTransactionRequest, proposeTransaction, TransactionDetails } from '@gnosis.pm/safe-react-gateway-sdk'\n\nimport { GnosisSafe } from 'src/types/contracts/gnosis_safe.d'\nimport { _getChainId } from 'src/config'\n\nimport { checksumAddress } from 'src/utils/checksumAddress'\nimport { TxArgs } from '../store/models/types/transaction'\n\ntype ProposeTxBody = Omit & {\n safeInstance: GnosisSafe\n data: string | number[]\n}\n\nconst calculateBodyFrom = async ({\n safeInstance,\n to,\n value,\n data,\n operation,\n nonce,\n safeTxGas,\n baseGas,\n gasPrice,\n gasToken,\n refundReceiver,\n sender,\n origin,\n signature,\n}: ProposeTxBody): Promise => {\n const safeTxHash = await safeInstance.methods\n .getTransactionHash(to, value, data, operation, safeTxGas, baseGas, gasPrice, gasToken, refundReceiver || '', nonce)\n .call()\n\n return {\n to: checksumAddress(to),\n value,\n data,\n operation,\n nonce: nonce.toString(),\n safeTxGas: safeTxGas.toString(),\n baseGas: baseGas.toString(),\n gasPrice,\n gasToken,\n refundReceiver,\n safeTxHash,\n sender: checksumAddress(sender),\n origin,\n signature,\n }\n}\n\ntype SaveTxToHistoryTypes = TxArgs & { origin?: string | null; signature?: string }\n\nexport const saveTxToHistory = async ({\n baseGas,\n data,\n gasPrice,\n gasToken,\n nonce,\n operation,\n origin,\n refundReceiver,\n safeInstance,\n safeTxGas,\n sender,\n signature,\n to,\n valueInWei,\n}: SaveTxToHistoryTypes): Promise => {\n const address = checksumAddress(safeInstance.options.address)\n const body = await calculateBodyFrom({\n safeInstance,\n to,\n value: valueInWei,\n data,\n operation,\n nonce: nonce.toString(),\n safeTxGas,\n baseGas,\n gasPrice,\n gasToken,\n refundReceiver,\n sender,\n origin: origin ? origin : null,\n signature,\n })\n const txDetails = await proposeTransaction(_getChainId(), address, body)\n return txDetails\n}\n","import { createAction } from 'redux-actions'\n\nexport const SET_LATEST_MASTER_CONTRACT_VERSION = 'SET_LATEST_MASTER_CONTRACT_VERSION'\n\nconst setLatestMasterContractVersion = createAction(SET_LATEST_MASTER_CONTRACT_VERSION)\n\nexport default setLatestMasterContractVersion\n","import { createAction } from 'redux-actions'\n\nexport const REMOVE_VIEWED_SAFE = 'REMOVE_VIEWED_SAFE'\n\nconst removeViewedSafe = createAction(REMOVE_VIEWED_SAFE)\n\nexport default removeViewedSafe\n","import { ReactElement } from 'react'\nimport styled from 'styled-components'\n\nimport Button from 'src/components/layout/Button'\nimport { KeyRing } from 'src/walliro/containers/AppLayout/Header/KeyRing'\nimport onboard, { checkWallet } from 'src/logic/wallets/onboard'\nimport { OVERVIEW_EVENTS } from 'src/utils/events/overview'\nimport Track from '../Track'\n\nexport const onConnectButtonClick = async (): Promise => {\n const walletSelected = await onboard().walletSelect()\n if (walletSelected) {\n await checkWallet()\n }\n}\n\nconst StyledContainer = styled.div`\n text-align: center;\n`\n\nconst StyledTitle = styled.h5`\n font-size: 18px;\n font-weight: 600;\n letter-spacing: 0.4px;\n margin: 0;\n`\n\nconst StyledKeyring = styled.div`\n width: 100px;\n margin: 24px auto;\n`\n\nconst ConnectButton = (props: { 'data-testid': string }): ReactElement => (\n \n Connect a Wallet\n\n \n \n \n\n \n \n \n \n)\n\nexport default ConnectButton\n","import semverSatisfies from 'semver/functions/satisfies'\nimport {\n getSafeSingletonDeployment,\n getSafeL2SingletonDeployment,\n getProxyFactoryDeployment,\n getFallbackHandlerDeployment,\n getMultiSendCallOnlyDeployment,\n getSignMessageLibDeployment,\n SingletonDeployment,\n} from 'src/safe-deployments'\nimport Web3 from 'web3'\nimport { AbiItem } from 'web3-utils'\n\nimport { LATEST_SAFE_VERSION } from 'src/utils/constants'\nimport { getChainById, _getChainId } from 'src/config'\nimport { ChainId } from 'src/config/chain.d'\nimport { ZERO_ADDRESS } from 'src/logic/wallets/ethAddresses'\nimport { calculateGasOf, EMPTY_DATA } from 'src/logic/wallets/ethTransactions'\nimport { getWeb3 } from 'src/logic/wallets/getWeb3'\nimport { GnosisSafe } from 'src/types/contracts/gnosis_safe.d'\nimport { ProxyFactory } from 'src/types/contracts/proxy_factory.d'\nimport { CompatibilityFallbackHandler } from 'src/types/contracts/compatibility_fallback_handler.d'\nimport { SignMessageLib } from 'src/types/contracts/sign_message_lib.d'\nimport { MultiSend } from 'src/types/contracts/multi_send.d'\nimport { getSafeInfo } from 'src/logic/safe/utils/safeInformation'\nimport { NonPayableTransactionObject } from 'src/types/contracts/types'\n\nexport const SENTINEL_ADDRESS = '0x0000000000000000000000000000000000000001'\n\nlet proxyFactoryMaster: ProxyFactory\nlet safeMaster: GnosisSafe\nlet fallbackHandler: CompatibilityFallbackHandler\nlet multiSend: MultiSend\n\nconst getSafeContractDeployment = ({ safeVersion }: { safeVersion: string }): SingletonDeployment | undefined => {\n // We check if version is prior to v1.0.0 as they are not supported but still we want to keep a minimum compatibility\n const useOldestContractVersion = semverSatisfies(safeVersion, '<1.0.0')\n // We have to check if network is L2\n const networkId = _getChainId()\n const chainConfig = getChainById(networkId)\n\n // We had L1 contracts in three L2 networks, xDai, EWC and Volta so even if network is L2 we have to check that safe version is after v1.3.0\n const useL2ContractVersion = chainConfig.l2 && semverSatisfies(safeVersion, '>=1.3.0')\n const getDeployment = useL2ContractVersion ? getSafeL2SingletonDeployment : getSafeSingletonDeployment\n\n return (\n getDeployment({\n version: safeVersion,\n network: networkId.toString(),\n }) ||\n getDeployment({\n version: safeVersion,\n }) ||\n // In case we couldn't find a valid deployment and it's a version before 1.0.0 we return v1.0.0 to allow a minimum compatibility\n (useOldestContractVersion\n ? getDeployment({\n version: '1.0.0',\n })\n : undefined)\n )\n}\n\n/**\n * Creates a Contract instance of the GnosisSafe contract\n * @param {Web3} web3\n * @param {ChainId} chainId\n */\nconst getGnosisSafeContractInstance = (web3: Web3, chainId: ChainId): GnosisSafe => {\n const safeSingletonDeployment = getSafeContractDeployment({ safeVersion: LATEST_SAFE_VERSION })\n const contractAddress = safeSingletonDeployment?.networkAddresses[chainId]\n\n if (!contractAddress) {\n throw new Error(`Walliro contract not found for chainId: ${chainId}`)\n }\n\n return new web3.eth.Contract(safeSingletonDeployment?.abi as AbiItem[], contractAddress) as unknown as GnosisSafe\n}\n\n/**\n * Creates a Contract instance of the GnosisSafeProxyFactory contract\n * @param {Web3} web3\n * @param {ChainId} chainId\n */\nconst getProxyFactoryContractInstance = (web3: Web3, chainId: ChainId): ProxyFactory => {\n const proxyFactoryDeployment =\n getProxyFactoryDeployment({\n version: LATEST_SAFE_VERSION,\n network: chainId.toString(),\n }) ||\n getProxyFactoryDeployment({\n version: LATEST_SAFE_VERSION,\n })\n const contractAddress = proxyFactoryDeployment?.networkAddresses[chainId]\n\n if (!contractAddress) {\n throw new Error(`WalliroProxyFactory contract not found for chainId: ${chainId}`)\n }\n\n return new web3.eth.Contract(proxyFactoryDeployment?.abi as AbiItem[], contractAddress) as unknown as ProxyFactory\n}\n\n/**\n * Creates a Contract instance of the FallbackHandler contract\n * @param {Web3} web3\n * @param {ChainId} chainId\n */\nconst getFallbackHandlerContractInstance = (web3: Web3, chainId: ChainId): CompatibilityFallbackHandler => {\n const fallbackHandlerDeployment =\n getFallbackHandlerDeployment({\n version: LATEST_SAFE_VERSION,\n network: chainId.toString(),\n }) ||\n getFallbackHandlerDeployment({\n version: LATEST_SAFE_VERSION,\n })\n const contractAddress = fallbackHandlerDeployment?.networkAddresses[chainId]\n\n if (!contractAddress) {\n throw new Error(`FallbackHandler contract not found for chainId: ${chainId}`)\n }\n\n return new web3.eth.Contract(\n fallbackHandlerDeployment?.abi as AbiItem[],\n contractAddress,\n ) as unknown as CompatibilityFallbackHandler\n}\n\n/**\n * Creates a Contract instance of the MultiSend contract\n * @param {Web3} web3\n * @param {ChainId} chainId\n */\nconst getMultiSendContractInstance = (web3: Web3, chainId: ChainId): MultiSend => {\n const multiSendDeployment =\n getMultiSendCallOnlyDeployment({\n network: chainId.toString(),\n }) || getMultiSendCallOnlyDeployment()\n const contractAddress = multiSendDeployment?.networkAddresses[chainId]\n\n if (!contractAddress) {\n throw new Error(`MultiSend contract not found for chainId: ${chainId}`)\n }\n\n return new web3.eth.Contract(multiSendDeployment?.abi as AbiItem[], contractAddress) as unknown as MultiSend\n}\n\n/**\n * Returns an address of SignMessageLib for passed chainId\n * @param {ChainId} chainId\n * @returns {string}\n */\nexport const getSignMessageLibAddress = (chainId: ChainId): string | undefined => {\n const signMessageLibDeployment =\n getSignMessageLibDeployment({\n network: chainId.toString(),\n }) || getSignMessageLibDeployment()\n const contractAddress = signMessageLibDeployment?.networkAddresses[chainId]\n\n if (!contractAddress) {\n throw new Error(`SignMessageLib contract not found for chainId: ${chainId}`)\n }\n\n return contractAddress\n}\n\n/**\n * Returns a Web3 Contract instance of the SignMessageLib contract\n * @param {Web3} web3\n * @param {ChainId} chainId\n * @returns {SignMessageLib}\n */\nexport const getSignMessageLibContractInstance = (web3: Web3, chainId: ChainId): SignMessageLib => {\n const signMessageLibDeployment =\n getSignMessageLibDeployment({\n network: chainId.toString(),\n }) || getSignMessageLibDeployment()\n const contractAddress = signMessageLibDeployment?.networkAddresses[chainId]\n\n if (!contractAddress) {\n throw new Error(`SignMessageLib contract not found for chainId: ${chainId}`)\n }\n\n return new web3.eth.Contract(signMessageLibDeployment?.abi as AbiItem[], contractAddress) as unknown as SignMessageLib\n}\n\nexport const getMasterCopyAddressFromProxyAddress = async (proxyAddress: string): Promise => {\n let masterCopyAddress: string | undefined\n try {\n const res = await getSafeInfo(proxyAddress)\n masterCopyAddress = res.implementation.value\n if (!masterCopyAddress) {\n console.error(`There was not possible to get masterCopy address from proxy ${proxyAddress}.`)\n }\n } catch (e) {\n e.log()\n }\n return masterCopyAddress\n}\n\nexport const instantiateSafeContracts = (): void => {\n const web3 = getWeb3()\n const chainId = _getChainId()\n\n // Create ProxyFactory Master Copy\n proxyFactoryMaster = getProxyFactoryContractInstance(web3, chainId)\n\n // Create Safe Master copy\n safeMaster = getGnosisSafeContractInstance(web3, chainId)\n\n // Create Fallback Handler\n fallbackHandler = getFallbackHandlerContractInstance(web3, chainId)\n\n // Create MultiSend contract\n multiSend = getMultiSendContractInstance(web3, chainId)\n}\n\nexport const getSafeMasterContract = (): GnosisSafe => {\n instantiateSafeContracts()\n return safeMaster\n}\n\nexport const getSafeMasterContractAddress = (): string => {\n return safeMaster.options.address\n}\n\nexport const getFallbackHandlerContractAddress = (): string => {\n return fallbackHandler.options.address\n}\n\nexport const getMultisendContract = (): MultiSend => {\n return multiSend\n}\n\nexport const getMultisendContractAddress = (): string => {\n return multiSend.options.address\n}\n\nexport const getSafeDeploymentTransaction = (\n safeAccounts: string[],\n numConfirmations: number,\n safeCreationSalt: number,\n): NonPayableTransactionObject => {\n const gnosisSafeData = safeMaster.methods\n .setup(\n safeAccounts,\n numConfirmations,\n ZERO_ADDRESS,\n EMPTY_DATA,\n fallbackHandler.options.address,\n ZERO_ADDRESS,\n 0,\n ZERO_ADDRESS,\n )\n .encodeABI()\n\n return proxyFactoryMaster.methods.createProxyWithNonce(safeMaster.options.address, gnosisSafeData, safeCreationSalt)\n}\n\nexport const estimateGasForDeployingSafe = async (\n safeAccounts: string[],\n numConfirmations: number,\n userAccount: string,\n safeCreationSalt: number,\n): Promise => {\n const proxyFactoryData = getSafeDeploymentTransaction(safeAccounts, numConfirmations, safeCreationSalt).encodeABI()\n\n return calculateGasOf({\n data: proxyFactoryData,\n from: userAccount,\n to: proxyFactoryMaster.options.address,\n }).then((value) => value * 2)\n}\n\nexport const getGnosisSafeInstanceAt = (safeAddress: string, safeVersion: string): GnosisSafe => {\n const safeSingletonDeployment = getSafeContractDeployment({ safeVersion })\n\n const web3 = getWeb3()\n return new web3.eth.Contract(safeSingletonDeployment?.abi as AbiItem[], safeAddress) as unknown as GnosisSafe\n}\n","import { _getChainId } from 'src/config'\nimport { ChainId } from 'src/config/chain.d'\nimport Storage from './Storage'\n\n// Legacy storage keys. New chains will use the chain id as prefix.\n// @TODO: migrate them to chain ids.\nconst STORAGE_KEYS: Record = {\n '1': 'MAINNET',\n '4': 'RINKEBY',\n '56': 'BSC',\n '100': 'XDAI',\n '137': 'POLYGON',\n '246': 'ENERGY_WEB_CHAIN',\n '42161': 'ARBITRUM',\n '73799': 'VOLTA',\n}\n\nexport const storage = new Storage(window.localStorage, '')\n\nexport const getStoragePrefix = (id = _getChainId()): string => {\n const name = STORAGE_KEYS[id] || id\n // Legacy ImmortalDB prefix\n // @TODO: migrate it\n return `_immortal|v2_${name}__`\n}\n\nexport const loadFromStorage = (key: string, prefix = getStoragePrefix()): T | undefined => {\n return storage.getItem(`${prefix}${key}`)\n}\n\nexport const saveToStorage = (key: string, value: T): void => {\n storage.setItem(`${getStoragePrefix()}${key}`, value)\n}\n\nexport const removeFromStorage = (key: string): void => {\n storage.removeItem(`${getStoragePrefix()}${key}`)\n}\n\nexport const saveToStorageWithExpiry = (key: string, value: T, expiry: number): void => {\n storage.setWithExpiry(key, value, expiry)\n}\n\nexport const loadFromStorageWithExpiry = (key: string): T | undefined => {\n return storage.getWithExpiry(key)\n}\n\nexport const removeFromStorageWithExpiry = (key: string): void => {\n return storage.removeItem(key)\n}\n"],"sourceRoot":""}