Files
app.zeusln.zeus/App.tsx
T

1838 lines
124 KiB
TypeScript

import * as React from 'react';
import { Observer, Provider } from 'mobx-react';
import { GestureHandlerRootView } from 'react-native-gesture-handler';
import { NavigationContainer, DarkTheme } from '@react-navigation/native';
import { createNativeStackNavigator } from '@react-navigation/native-stack';
import {
SafeAreaProvider,
SafeAreaView,
initialWindowMetrics
} from 'react-native-safe-area-context';
import {
BackHandler,
NativeEventSubscription,
Platform,
StatusBar,
AppState
} from 'react-native';
import {
activityStore,
alertStore,
balanceStore,
cashuStore,
channelBackupStore,
channelsStore,
connectivityStore,
contactStore,
feeStore,
fiatStore,
inventoryStore,
invoicesStore,
lightningAddressStore,
lnurlPayStore,
lspStore,
messageSignStore,
modalStore,
nodeInfoStore,
notesStore,
offersStore,
paymentsStore,
posStore,
settingsStore,
swapStore,
syncStore,
transactionsStore,
unitsStore,
utxosStore,
sweepStore,
nostrWalletConnectStore
} from './stores/Stores';
import NavigationService from './NavigationService';
import PushNotificationManager from './PushNotificationManager';
import StealthModeUtils from './utils/StealthModeUtils';
import StealthModeWrapper from './components/StealthModeWrapper';
import { AppContainer } from './components/layout/AppContainer';
import CopiedToastHost from './components/CopiedToast';
import AlertModal from './components/Modals/AlertModal';
import ExternalLinkModal from './components/Modals/ExternalLinkModal';
import AndroidNfcModal from './components/Modals/AndroidNfcModal';
import InfoModal from './components/Modals/InfoModal';
import ShareModal from './components/Modals/ShareModal';
import NewChannelModal from './components/Modals/NewChannelModal';
import GraphSyncPromptModal from './components/Modals/GraphSyncPromptModal';
import RatingModal from './components/Modals/RatingModal';
import RestoreChannelModal from './components/Modals/RestoreChannelModal';
// Views
import Transaction from './views/Transaction';
import Wallet from './views/Wallet/Wallet';
import Send from './views/Send';
import LnurlPay from './views/LnurlPay/LnurlPay';
import ClinkPay from './views/ClinkPay/ClinkPay';
import LnurlChannel from './views/LnurlChannel';
import LnurlAuth from './views/LnurlAuth';
import Receive from './views/Receive';
import PaymentRequest from './views/PaymentRequest';
import HandleAnythingQRScanner from './views/HandleAnythingQRScanner';
import SwapsQRScanner from './views/SwapsQRScanner';
import RefundSwapQRScanner from './views/RefundSwapQRScanner';
import NodeQRScanner from './views/NodeQRScanner';
import OpenChannel from './views/OpenChannel';
import SendingOnChain from './views/SendingOnChain';
import VerifyOnChain from './views/VerifyOnChain';
import SendingLightning from './views/SendingLightning';
import Channel from './views/Channels/Channel';
import Payment from './views/Payment';
import PaymentPaths from './views/PaymentPaths';
import Invoice from './views/Invoice';
import OnChainAddresses from './views/OnChainAddresses';
import DonateToZEUS from './views/DonateToZEUS';
import ChangeDonationSettings from './views/ChangeDonationSettings';
import NodeInfo from './views/NodeInfo';
import Lockscreen from './views/Lockscreen';
import NostrContacts from './views/NostrContacts';
import MultiQR from './views/MultiQR';
// Settings views
import Settings from './views/Settings/Settings';
import WalletConfiguration from './views/Settings/WalletConfiguration';
import Wallets from './views/Settings/Wallets';
import Networking from './views/Settings/Networking';
import Privacy from './views/Settings/Privacy';
import StealthMode from './views/Settings/StealthMode';
import Security from './views/Settings/Security';
import SetPassword from './views/Settings/SetPassword';
import SetDuressPassword from './views/Settings/SetDuressPassword';
import SetPin from './views/Settings/SetPin';
import SetDuressPin from './views/Settings/SetDuressPin';
import Language from './views/Settings/Language';
import Currency from './views/Settings/Currency';
import SelectCurrency from './views/Settings/SelectCurrency';
import Display from './views/Settings/Display';
import CertInstallInstructions from './views/Settings/CertInstallInstructions';
import Support from './views/Settings/Support';
import Help from './views/Settings/Help';
import SocialMedia from './views/Settings/SocialMedia';
import Sponsors from './views/Settings/Sponsors';
import Olympians from './views/Settings/Olympians';
import Gods from './views/Settings/Gods';
import Mortals from './views/Settings/Mortals';
import PointOfSale from './views/Settings/PointOfSale';
import PointOfSaleRecon from './views/Settings/PointOfSaleRecon';
import PointOfSaleReconExport from './views/Settings/PointOfSaleReconExport';
import Categories from './views/POS/Categories';
import ProductCategoryDetails from './views/POS/ProductCategoryDetails';
import Products from './views/POS/Products';
import ProductDetails from './views/POS/ProductDetails';
import PaymentsSettings from './views/Settings/PaymentsSettings';
import InvoicesSettings from './views/Settings/InvoicesSettings';
import LSP from './views/Settings/LSP';
import ChannelsSettings from './views/Settings/ChannelsSettings';
import SetWalletPicture from './views/Settings/SetWalletPicture';
import ChoosePaymentMethod from './views/ChoosePaymentMethod';
import NWCConnectionsList from './views/Settings/NostrWalletConnect/NWCConnectionsList';
import AddOrEditNWCConnection from './views/Settings/NostrWalletConnect/AddOrEditNWCConnection';
import NWCConnectionDetails from './views/Settings/NostrWalletConnect/NWCConnectionDetails';
import NWCConnectionQR from './views/Settings/NostrWalletConnect/NWCConnectionQR';
import NWCSettings from './views/Settings/NostrWalletConnect/NWCSettings';
import NWCConnectionActivity from './views/Settings/NostrWalletConnect/NWCConnectionActivity';
import NWCConnectionActivityFilter from './views/Settings/NostrWalletConnect/NWCConnectionActivityFilter';
// Lightning address
import LightningAddress from './views/LightningAddress';
import CreateZaplockerLightningAddress from './views/LightningAddress/CreateZaplockerLightningAddress';
import CreateNWCLightningAddress from './views/LightningAddress/CreateNWCLightningAddress';
import ZaplockerGetChan from './views/LightningAddress/ZaplockerGetChan';
import ZaplockerInfo from './views/LightningAddress/ZaplockerInfo';
import NWCAddressInfo from './views/LightningAddress/NWCAddressInfo';
import LightningAddressSettings from './views/LightningAddress/LightningAddressSettings';
import LightningAddressQR from './views/LightningAddress/LightningAddressQR';
import NWCAddressSettings from './views/LightningAddress/NWCAddressSettings';
import Attestation from './views/LightningAddress/Attestation';
import Attestations from './views/LightningAddress/Attestations';
import NostrKeys from './views/LightningAddress/NostrKeys';
import NostrRelays from './views/LightningAddress/NostrRelays';
import ChangeAddress from './views/LightningAddress/ChangeAddress';
import EditProfile from './views/LightningAddress/EditProfile';
import ZeusPayPlus from './views/LightningAddress/ZeusPayPlus';
import ZeusPayPlusPerks from './views/LightningAddress/ZeusPayPlusPerks';
import WebPortalPOS from './views/LightningAddress/WebPortalPOS';
// BOLT 12
import PayCodes from './views/PayCodes';
import PayCode from './views/PayCode';
import CreatePayCode from './views/PayCodeCreate';
import Bolt12Address from './views/Settings/Bolt12Address';
// Embedded Node
import EmbeddedNode from './views/Settings/EmbeddedNode';
import DisasterRecovery from './views/Settings/EmbeddedNode/DisasterRecovery';
import DisasterRecoveryAdvanced from './views/Settings/EmbeddedNode/DisasterRecoveryAdvanced';
import Pathfinding from './views/Settings/EmbeddedNode/Pathfinding';
import ExpressGraphSync from './views/Settings/EmbeddedNode/ExpressGraphSync';
import RapidGossipSync from './views/Settings/EmbeddedNode/RapidGossipSync';
import EsploraServer from './views/Settings/EmbeddedNode/EsploraServer';
import VssServer from './views/Settings/EmbeddedNode/VssServer';
import PathfindingScorer from './views/Settings/EmbeddedNode/PathfindingScorer';
import LNDLogs from './views/Settings/EmbeddedNode/LNDLogs';
import LDKLogs from './views/Settings/EmbeddedNode/LDKLogs';
import Peers from './views/Settings/EmbeddedNode/Peers';
import NeutrinoPeers from './views/Settings/EmbeddedNode/Peers/NeutrinoPeers';
import ZeroConfPeers from './views/Settings/EmbeddedNode/Peers/ZeroConfPeers';
import Advanced from './views/Settings/EmbeddedNode/Advanced';
import AdvancedRescan from './views/Settings/EmbeddedNode/AdvancedRescan';
import Troubleshooting from './views/Settings/EmbeddedNode/Troubleshooting';
// Routing
import Routing from './views/Routing/Routing';
import RoutingEvent from './views/Routing/RoutingEvent';
import SetFees from './views/Routing/SetFees';
// new views
import Activity from './views/Activity/Activity';
import ActivityFilter from './views/Activity/ActivityFilter';
import CoinControl from './views/UTXOs/CoinControl';
import Utxo from './views/UTXOs/UTXO';
import QR from './views/QR';
import AddNotes from './views/AddNotes';
import Contacts from './views/Settings/Contacts';
import AddContact from './views/Settings/AddContact';
import ContactDetails from './views/ContactDetails';
import PendingHTLCs from './views/PendingHTLCs';
import Swaps from './views/Swaps/index';
import SwapDetails from './views/Swaps/SwapDetails';
import SwapsPane from './views/Swaps/SwapsPane';
import RefundSwap from './views/Swaps/Refund';
import SwapSettings from './views/Swaps/Settings';
// POS
import Order from './views/Order';
import IntroSplash from './views/IntroSplash';
// Onboarding
import Onboarding1 from './views/Onboarding/Onboarding1';
import RecommendedSettings from './views/Onboarding/RecommendedSettings';
import WalletSetup from './views/Onboarding/WalletSetup';
import WalletType from './views/Onboarding/WalletType';
import NodeChoice from './views/Onboarding/NodeChoice';
import MintDiscovery from './views/Onboarding/MintDiscovery';
import WalletSettings from './views/Onboarding/WalletSettings';
import EditFee from './views/EditFee';
// Embedded LND/LDK
import Seed from './views/Settings/Seed';
import SeedRecovery from './views/Settings/SeedRecovery';
import LdkWalletRecoverySettings from './views/Settings/LdkRecovery/LdkWalletRecoverySettings';
import LdkRecoveryVssServer from './views/Settings/LdkRecovery/LdkRecoveryVssServer';
import SeedQRExport from './views/Settings/SeedQRExport';
import Sync from './views/Sync';
import SyncRecovery from './views/SyncRecovery';
import LspExplanationFees from './views/Explanations/LspExplanationFees';
import LspExplanationRouting from './views/Explanations/LspExplanationRouting';
import LspExplanationWrappedInvoices from './views/Explanations/LspExplanationWrappedInvoices';
import LspExplanationOverview from './views/Explanations/LspExplanationOverview';
import RestoreChannelBackups from './views/Settings/EmbeddedNode/RestoreChannelBackups';
// LSP
import LSPServicesList from './views/Settings/LSPServicesList';
// LSPS1
import LSPS1 from './views/LSPS1/index';
import LSPS1Settings from './views/LSPS1/Settings';
import OrdersPane from './views/LSPS1/OrdersPane';
import LSPS1Order from './views/LSPS1/Order';
import LSPPaymentAwait from './views/LSPS/LSPPaymentAwait';
// LSPS7
import LSPS7 from './views/LSPS7/index';
import LSPS7Order from './views/LSPS7/Order';
// Cashu Ecash
import EcashSettings from './views/Settings/EcashSettings';
import ReceiveEcash from './views/Cashu/ReceiveEcash';
import CashuInvoice from './views/Cashu/CashuInvoice';
import CashuPayment from './views/Cashu/CashuPayment';
import CashuPaymentRequest from './views/Cashu/CashuPaymentRequest';
import CashuSendingLightning from './views/Cashu/CashuSendingLightning';
import MultimintPayment from './views/Cashu/MultimintPayment';
import Mint from './views/Cashu/Mint';
import Mints from './views/Cashu/Mints';
import AddMint from './views/Cashu/AddMint';
import CashuToken from './views/Cashu/CashuToken';
import SendEcash from './views/Cashu/SendEcash';
import UnspentTokens from './views/Cashu/UnspentTokens';
import CashuSeed from './views/Cashu/CashuSeed';
import CashuLockSettings from './views/Cashu/CashuLockSettings';
import LegacySeedRecovery from './views/Cashu/LegacySeedRecovery';
import RecoverMintQuote from './views/Cashu/RecoverMintQuote';
// Cashu Lightning address
import CreateCashuLightningAddress from './views/Cashu/LightningAddress/CreateCashuLightningAddress';
import CashuLightningAddressInfo from './views/Cashu/LightningAddress/LightningAddressInfo';
import CashuLightningAddressSettings from './views/Cashu/LightningAddress/LightningAddressSettings';
// Chantools
import Chantools from './views/Settings/EmbeddedNode/Chantools';
import Sweepremoteclosed from './views/Settings/EmbeddedNode/Chantools/Sweepremoteclosed';
import RawTxHex from './views/RawTxHex';
import AmountKeypad from './views/AmountKeypad';
import CustodialWalletWarning from './views/Settings/CustodialWalletWarning';
import PSBT from './views/PSBT';
import TxHex from './views/TxHex';
import Menu from './views/Menu';
// Tools
import Tools from './views/Tools';
import ActivityExport from './views/Tools/ActivityExport';
import BumpFee from './views/Tools/BumpFee';
import CurrencyConverter from './views/Tools/CurrencyConverter';
import DeveloperTools from './views/Tools/DeveloperTools';
import Rebalance from './views/Tools/Rebalance';
import RebalancingChannels from './views/Tools/RebalancingChannels';
import SignVerifyMessage from './views/Tools/SignVerifyMessage';
import Sweep from './views/Tools/Sweep';
import Accounts from './views/Tools/Accounts/Accounts';
import ImportAccount from './views/Tools/Accounts/ImportAccount';
import ImportingAccount from './views/Tools/Accounts/ImportingAccount';
import CashuTools from './views/Tools/CashuTools';
import NostrKeysTools from './views/Tools/NostrKeys';
import NostrMintSync from './views/Tools/NostrKeys/NostrMintSync';
import NodeConfigExportImport from './views/Tools/NodeConfigExportImport';
import Watchtowers from './views/Tools/Watchtowers/WatchtowerList';
import AddWatchtower from './views/Tools/Watchtowers/AddWatchtower';
import WatchtowerDetails from './views/Tools/Watchtowers/WatchtowerDetails';
import ShareIntentProcessing from './views/ShareIntentProcessing';
import WIFSweeper from './views/Tools/WIFSweeper';
import { isLightTheme, themeColor } from './utils/ThemeUtils';
import LinkingUtils from './utils/LinkingUtils';
import CreateWithdrawalRequest from './views/Tools/CreateWithdrawalRequest';
import WithdrawalRequestInfo from './views/WithdrawalRequestInfo';
import RedeemWithdrawalRequest from './views/RedeemWithdrawalRequest';
const Stack = createNativeStackNavigator();
export default class App extends React.PureComponent {
private backPressListenerSubscription: NativeEventSubscription;
private appStateSubscription: NativeEventSubscription;
private navigation: any = null;
private static SCREENS_WITH_CUSTOM_BACK_HANDLER = [
'SendingLightning',
'SendingOnChain',
'CashuSendingLightning',
'IntroSplash',
'NostrContacts'
];
private handleBackPress = (navigation: any) => {
const dialogHasBeenClosed = modalStore.closeVisibleModalDialog();
if (dialogHasBeenClosed) {
return true;
}
if (settingsStore.loginRequired()) {
BackHandler.exitApp();
return true;
}
const navigationState = navigation.getState();
const currentRoute =
navigationState.routes[navigationState.routes.length - 1];
if (App.SCREENS_WITH_CUSTOM_BACK_HANDLER.includes(currentRoute?.name)) {
return false;
}
if (navigationState.routes.length > 1) {
navigation.pop();
return true;
}
return false;
};
componentDidMount() {
this.appStateSubscription = AppState.addEventListener(
'change',
this.handleAppStateChange
);
// Ensure stealth mode is in a valid state (safety check)
StealthModeUtils.fixStealthModeIfNeeded();
}
componentWillUnmount() {
if (this.appStateSubscription) {
this.appStateSubscription.remove();
}
}
handleAppStateChange = async (nextAppState: string) => {
if (nextAppState === 'active' && this.navigation) {
LinkingUtils.resetShareIntentFlag();
if (Platform.OS === 'android') {
setTimeout(() => {
LinkingUtils.handleAndroidIntents(this.navigation);
}, 100);
}
}
// Sync stealth mode when app goes to background
if (nextAppState === 'background') {
try {
const settings = await settingsStore.getSettings();
if (settings?.privacy?.stealthMode) {
const stealthApp =
settings.privacy.stealthApp || 'calculator';
await StealthModeUtils.enableStealthMode(stealthApp);
} else {
// If stealth was toggled off but native state wasn't
// synced (e.g. user pressed Home instead of Back),
// disable it now
const nativeActive =
await StealthModeUtils.isStealthModeActive();
if (nativeActive) {
await StealthModeUtils.disableStealthMode();
}
}
} catch (error) {
console.error(
'Error applying stealth mode on background:',
error
);
}
}
};
render() {
return (
<Provider
ActivityStore={activityStore}
AlertStore={alertStore}
BalanceStore={balanceStore}
CashuStore={cashuStore}
ChannelBackupStore={channelBackupStore}
ChannelsStore={channelsStore}
ConnectivityStore={connectivityStore}
ContactStore={contactStore}
FeeStore={feeStore}
FiatStore={fiatStore}
InventoryStore={inventoryStore}
InvoicesStore={invoicesStore}
LightningAddressStore={lightningAddressStore}
LnurlPayStore={lnurlPayStore}
LSPStore={lspStore}
MessageSignStore={messageSignStore}
ModalStore={modalStore}
NodeInfoStore={nodeInfoStore}
NotesStore={notesStore}
OffersStore={offersStore}
PaymentsStore={paymentsStore}
PosStore={posStore}
SettingsStore={settingsStore}
SwapStore={swapStore}
SyncStore={syncStore}
TransactionsStore={transactionsStore}
UnitsStore={unitsStore}
UTXOsStore={utxosStore}
SweepStore={sweepStore}
NostrWalletConnectStore={nostrWalletConnectStore}
>
<SafeAreaProvider initialMetrics={initialWindowMetrics}>
<AppContainer>
<PushNotificationManager>
<GestureHandlerRootView style={{ flex: 1 }}>
<StealthModeWrapper>
<SafeAreaView
style={{ flex: 1 }}
edges={['left', 'right', 'bottom']}
>
<Observer>
{() => (
<>
<StatusBar
barStyle={
isLightTheme()
? 'dark-content'
: 'light-content'
}
/>
<NavigationContainer
ref={(nav) => {
if (nav != null) {
this.navigation =
nav;
NavigationService.setTopLevelNavigator(
// @ts-ignore:next-line
nav
);
}
}}
// @ts-ignore:next-line
theme={{
...DarkTheme,
colors: {
...DarkTheme.colors,
background:
themeColor(
'background'
),
card: themeColor(
'background'
),
notification:
themeColor(
'text'
),
primary:
themeColor(
'highlight'
),
text: themeColor(
'text'
)
}
}}
>
<Stack.Navigator
screenOptions={({
route
}) => ({
headerShown:
false,
animationDuration:
Platform.OS ===
'android'
? 300
: 350,
// Only override animation when explicitly provided - undefined breaks shared element transitions
...((
route.params as any
)?.animation !=
null && {
animation: (
route.params as any
).animation
})
})}
screenListeners={({
navigation
}) => ({
focus: () => {
this.backPressListenerSubscription?.remove();
this.backPressListenerSubscription =
BackHandler.addEventListener(
'hardwareBackPress',
() =>
this.handleBackPress(
navigation
)
);
},
blur: () =>
this.backPressListenerSubscription?.remove()
})}
>
<Stack.Screen
name="Wallet" // @ts-ignore:next-line
component={
Wallet
}
/>
<Stack.Screen
name="IntroSplash" // @ts-ignore:next-line
component={
IntroSplash
}
/>
<Stack.Screen
name="Onboarding1" // @ts-ignore:next-line
component={
Onboarding1
}
/>
<Stack.Screen
name="RecommendedSettings" // @ts-ignore:next-line
component={
RecommendedSettings
}
/>
<Stack.Screen
name="WalletSetup" // @ts-ignore:next-line
component={
WalletSetup
}
/>
<Stack.Screen
name="WalletType" // @ts-ignore:next-line
component={
WalletType
}
/>
<Stack.Screen
name="NodeChoice" // @ts-ignore:next-line
component={
NodeChoice
}
/>
<Stack.Screen
name="MintDiscovery" // @ts-ignore:next-line
component={
MintDiscovery
}
/>
<Stack.Screen
name="WalletSettings" // @ts-ignore:next-line
component={
WalletSettings
}
/>
<Stack.Screen
name="Lockscreen" // @ts-ignore:next-line
component={
Lockscreen
}
/>
<Stack.Screen
name="Accounts" // @ts-ignore:next-line
component={
Accounts
}
/>
<Stack.Screen
name="ChoosePaymentMethod" // @ts-ignore:next-line
component={
ChoosePaymentMethod
}
/>
<Stack.Screen
name="ShareIntentProcessing" // @ts-ignore:next-line
component={
ShareIntentProcessing
}
/>
<Stack.Screen
name="Send" // @ts-ignore:next-line
component={Send}
/>
<Stack.Screen
name="Sweep" // @ts-ignore:next-line
component={
Sweep
}
/>
<Stack.Screen
name="EditFee" // @ts-ignore:next-line
component={
EditFee
}
/>
<Stack.Screen
name="Menu" // @ts-ignore:next-line
component={Menu}
/>
<Stack.Screen
name="Settings" // @ts-ignore:next-line
component={
Settings
}
/>
<Stack.Screen
name="Tools" // @ts-ignore:next-line
component={
Tools
}
/>
<Stack.Screen
name="WalletConfiguration" // @ts-ignore:next-line
component={
WalletConfiguration
}
/>
<Stack.Screen
name="Wallets" // @ts-ignore:next-line
component={
Wallets
}
/>
<Stack.Screen
name="Networking" // @ts-ignore:next-line
component={
Networking
}
/>
<Stack.Screen
name="Privacy" // @ts-ignore:next-line
component={
Privacy
}
/>
<Stack.Screen
name="StealthMode" // @ts-ignore:next-line
component={
StealthMode
}
/>
<Stack.Screen
name="Security" // @ts-ignore:next-line
component={
Security
}
/>
<Stack.Screen
name="SetPassword" // @ts-ignore:next-line
component={
SetPassword
}
/>
<Stack.Screen
name="SetDuressPassword" // @ts-ignore:next-line
component={
SetDuressPassword
}
/>
<Stack.Screen
name="SetPin" // @ts-ignore:next-line
component={
SetPin
}
/>
<Stack.Screen
name="SetDuressPin" // @ts-ignore:next-line
component={
SetDuressPin
}
/>
<Stack.Screen
name="Language" // @ts-ignore:next-line
component={
Language
}
/>
<Stack.Screen
name="Currency" // @ts-ignore:next-line
component={
Currency
}
/>
<Stack.Screen
name="SelectCurrency" // @ts-ignore:next-line
component={
SelectCurrency
}
/>
<Stack.Screen
name="Display" // @ts-ignore:next-line
component={
Display
}
/>
<Stack.Screen
name="Support" // @ts-ignore:next-line
component={
Support
}
/>
<Stack.Screen
name="Help" // @ts-ignore:next-line
component={Help}
/>
<Stack.Screen
name="Sponsors" // @ts-ignore:next-line
component={
Sponsors
}
/>
<Stack.Screen
name="Olympians" // @ts-ignore:next-line
component={
Olympians
}
/>
<Stack.Screen
name="Gods" // @ts-ignore:next-line
component={Gods}
/>
<Stack.Screen
name="Mortals" // @ts-ignore:next-line
component={
Mortals
}
/>
<Stack.Screen
name="CertInstallInstructions" // @ts-ignore:next-line
component={
CertInstallInstructions
}
/>
<Stack.Screen
name="SignVerifyMessage" // @ts-ignore:next-line
component={
SignVerifyMessage
}
/>
<Stack.Screen
name="Transaction" // @ts-ignore:next-line
component={
Transaction
}
/>
<Stack.Screen
name="Channel" // @ts-ignore:next-line
component={
Channel
}
/>
<Stack.Screen
name="Payment" // @ts-ignore:next-line
component={
Payment
}
/>
<Stack.Screen
name="PaymentPaths" // @ts-ignore:next-line
component={
PaymentPaths
}
/>
<Stack.Screen
name="Invoice" // @ts-ignore:next-line
component={
Invoice
}
/>
<Stack.Screen
name="LnurlPay" // @ts-ignore:next-line
component={
LnurlPay
}
/>
<Stack.Screen
name="ClinkPay" // @ts-ignore:next-line
component={
ClinkPay
}
/>
<Stack.Screen
name="Receive" // @ts-ignore:next-line
component={
Receive
}
/>
<Stack.Screen
name="LnurlChannel" // @ts-ignore:next-line
component={
LnurlChannel
}
/>
<Stack.Screen
name="LnurlAuth" // @ts-ignore:next-line
component={
LnurlAuth
}
/>
<Stack.Screen
name="PaymentRequest" // @ts-ignore:next-line
component={
PaymentRequest
}
options={{
gestureEnabled:
false // disables swipe back
}}
/>
<Stack.Screen
name="OpenChannel" // @ts-ignore:next-line
component={
OpenChannel
}
/>
<Stack.Screen
name="VerifyOnChain" // @ts-ignore:next-line
component={
VerifyOnChain
}
options={{
gestureEnabled:
false // disables swipe back
}}
/>
<Stack.Screen
name="SendingOnChain" // @ts-ignore:next-line
component={
SendingOnChain
}
/>
<Stack.Screen
name="SendingLightning" // @ts-ignore:next-line
component={
SendingLightning
}
/>
<Stack.Screen
name="NodeInfo" // @ts-ignore:next-line
component={
NodeInfo
}
/>
<Stack.Screen
name="Routing" // @ts-ignore:next-line
component={
Routing
}
/>
<Stack.Screen
name="RoutingEvent" // @ts-ignore:next-line
component={
RoutingEvent
}
/>
<Stack.Screen
name="SetFees" // @ts-ignore:next-line
component={
SetFees
}
/>
<Stack.Screen
name="Rebalance" // @ts-ignore:next-line
component={
Rebalance
}
/>
<Stack.Screen
name="RebalancingChannels"
// @ts-ignore:next-line
component={
RebalancingChannels
}
/>
<Stack.Screen
name="Activity" // @ts-ignore:next-line
component={
Activity
}
/>
<Stack.Screen
name="ActivityFilter" // @ts-ignore:next-line
component={
ActivityFilter
}
/>
<Stack.Screen
name="CoinControl" // @ts-ignore:next-line
component={
CoinControl
}
/>
<Stack.Screen
name="Utxo" // @ts-ignore:next-line
component={Utxo}
/>
<Stack.Screen
name="ImportAccount" // @ts-ignore:next-line
component={
ImportAccount
}
/>
<Stack.Screen
name="ImportingAccount" // @ts-ignore:next-line
component={
ImportingAccount
}
/>
<Stack.Screen
name="HandleAnythingQRScanner" // @ts-ignore:next-line
component={
HandleAnythingQRScanner
}
/>
<Stack.Screen
name="SwapsQRScanner" // @ts-ignore:next-line
component={
SwapsQRScanner
}
/>
<Stack.Screen
name="RefundSwapQRScanner" // @ts-ignore:next-line
component={
RefundSwapQRScanner
}
/>
<Stack.Screen
name="NodeQRCodeScanner" // @ts-ignore:next-line
component={
NodeQRScanner
}
/>
<Stack.Screen
name="Order" // @ts-ignore:next-line
component={
Order
}
/>
<Stack.Screen
name="PointOfSaleSettings" // @ts-ignore:next-line
component={
PointOfSale
}
/>
<Stack.Screen
name="PointOfSaleRecon" // @ts-ignore:next-line
component={
PointOfSaleRecon
}
/>
<Stack.Screen
name="PointOfSaleReconExport" // @ts-ignore:next-line
component={
PointOfSaleReconExport
}
/>
<Stack.Screen
name="Categories" // @ts-ignore:next-line
component={
Categories
}
/>
<Stack.Screen
name="ProductCategoryDetails" // @ts-ignore:next-line
component={
ProductCategoryDetails
}
/>
<Stack.Screen
name="Products" // @ts-ignore:next-line
component={
Products
}
/>
<Stack.Screen
name="ProductDetails" // @ts-ignore:next-line
component={
ProductDetails
}
/>
<Stack.Screen
name="PaymentsSettings" // @ts-ignore:next-line
component={
PaymentsSettings
}
/>
<Stack.Screen
name="InvoicesSettings" // @ts-ignore:next-line
component={
InvoicesSettings
}
/>
<Stack.Screen
name="NostrWalletConnect" // @ts-ignore:next-line
component={
NWCConnectionsList
}
/>
<Stack.Screen
name="AddOrEditNWCConnection" // @ts-ignore:next-line
component={
AddOrEditNWCConnection
}
/>
<Stack.Screen
name="NWCConnectionDetails" // @ts-ignore:next-line
component={
NWCConnectionDetails
}
/>
<Stack.Screen
name="NWCConnectionQR" // @ts-ignore:next-line
component={
NWCConnectionQR
}
/>
<Stack.Screen
name="NWCConnectionActivity" // @ts-ignore:next-line
component={
NWCConnectionActivity
}
/>
<Stack.Screen
name="NWCConnectionActivityFilter" // @ts-ignore:next-line
component={
NWCConnectionActivityFilter
}
/>
<Stack.Screen
name="NWCSettings" // @ts-ignore:next-line
component={
NWCSettings
}
/>
<Stack.Screen
name="Seed" // @ts-ignore:next-line
component={Seed}
/>
<Stack.Screen
name="SeedRecovery" // @ts-ignore:next-line
component={
SeedRecovery
}
/>
<Stack.Screen
name="LdkWalletRecoverySettings" // @ts-ignore:next-line
component={
LdkWalletRecoverySettings
}
/>
<Stack.Screen
name="LdkRecoveryVssServer" // @ts-ignore:next-line
component={
LdkRecoveryVssServer
}
/>
<Stack.Screen
name="SeedQRExport" // @ts-ignore:next-line
component={
SeedQRExport
}
/>
<Stack.Screen
name="Sync" // @ts-ignore:next-line
component={Sync}
/>
<Stack.Screen
name="SyncRecovery" // @ts-ignore:next-line
component={
SyncRecovery
}
/>
<Stack.Screen
name="BumpFee" // @ts-ignore:next-line
component={
BumpFee
}
/>
<Stack.Screen
name="QR" // @ts-ignore:next-line
component={QR}
/>
<Stack.Screen
name="AmountKeypad" // @ts-ignore:next-line
component={
AmountKeypad
}
/>
<Stack.Screen
name="AddNotes" // @ts-ignore:next-line
component={
AddNotes
}
/>
<Stack.Screen
name="LspExplanationFees" // @ts-ignore:next-line
component={
LspExplanationFees
}
/>
<Stack.Screen
name="LspExplanationRouting" // @ts-ignore:next-line
component={
LspExplanationRouting
}
/>
<Stack.Screen
name="LspExplanationWrappedInvoices" // @ts-ignore:next-line
component={
LspExplanationWrappedInvoices
}
/>
<Stack.Screen
name="LspExplanationOverview" // @ts-ignore:next-line
component={
LspExplanationOverview
}
/>
<Stack.Screen
name="EmbeddedNodeSettings" // @ts-ignore:next-line
component={
EmbeddedNode
}
/>
<Stack.Screen
name="DisasterRecovery" // @ts-ignore:next-line
component={
DisasterRecovery
}
/>
<Stack.Screen
name="DisasterRecoveryAdvanced" // @ts-ignore:next-line
component={
DisasterRecoveryAdvanced
}
/>
<Stack.Screen
name="Pathfinding" // @ts-ignore:next-line
component={
Pathfinding
}
/>
<Stack.Screen
name="ExpressGraphSync" // @ts-ignore:next-line
component={
ExpressGraphSync
}
/>
<Stack.Screen
name="RapidGossipSync" // @ts-ignore:next-line
component={
RapidGossipSync
}
/>
<Stack.Screen
name="EsploraServer" // @ts-ignore:next-line
component={
EsploraServer
}
/>
<Stack.Screen
name="VssServer" // @ts-ignore:next-line
component={
VssServer
}
/>
<Stack.Screen
name="PathfindingScorer" // @ts-ignore:next-line
component={
PathfindingScorer
}
/>
<Stack.Screen
name="LNDLogs" // @ts-ignore:next-line
component={
LNDLogs
}
/>
<Stack.Screen
name="LDKLogs" // @ts-ignore:next-line
component={
LDKLogs
}
/>
<Stack.Screen
name="Peers" // @ts-ignore:next-line
component={
Peers
}
/>
<Stack.Screen
name="NeutrinoPeers" // @ts-ignore:next-line
component={
NeutrinoPeers
}
/>
<Stack.Screen
name="ZeroConfPeers" // @ts-ignore:next-line
component={
ZeroConfPeers
}
/>
<Stack.Screen
name="EmbeddedNodeSettingsAdvanced" // @ts-ignore:next-line
component={
Advanced
}
/>
<Stack.Screen
name="EmbeddedNodeTroubleshooting" // @ts-ignore:next-line
component={
Troubleshooting
}
/>
<Stack.Screen
name="AdvancedRescan" // @ts-ignore:next-line
component={
AdvancedRescan
}
/>
<Stack.Screen
name="LSPSettings" // @ts-ignore:next-line
component={LSP}
/>
<Stack.Screen
name="ZaplockerGetChan" // @ts-ignore:next-line
component={
ZaplockerGetChan
}
/>
<Stack.Screen
name="LightningAddress" // @ts-ignore:next-line
component={
LightningAddress
}
/>
<Stack.Screen
name="LightningAddressQR" // @ts-ignore:next-line
component={
LightningAddressQR
}
/>
<Stack.Screen
name="ZaplockerInfo" // @ts-ignore:next-line
component={
ZaplockerInfo
}
/>
<Stack.Screen
name="LightningAddressSettings" // @ts-ignore:next-line
component={
LightningAddressSettings
}
/>
<Stack.Screen
name="CreateZaplockerLightningAddress" // @ts-ignore:next-line
component={
CreateZaplockerLightningAddress
}
/>
<Stack.Screen
name="CreateCashuLightningAddress" // @ts-ignore:next-line
component={
CreateCashuLightningAddress
}
/>
<Stack.Screen
name="CashuLightningAddressInfo" // @ts-ignore:next-line
component={
CashuLightningAddressInfo
}
/>
<Stack.Screen
name="CashuLightningAddressSettings" // @ts-ignore:next-line
component={
CashuLightningAddressSettings
}
/>
<Stack.Screen
name="Attestations" // @ts-ignore:next-line
component={
Attestations
}
/>
<Stack.Screen
name="Attestation" // @ts-ignore:next-line
component={
Attestation
}
/>
<Stack.Screen
name="Contacts" // @ts-ignore:next-line
component={
Contacts
}
/>
<Stack.Screen
name="AddContact" // @ts-ignore:next-line
component={
AddContact
}
/>
<Stack.Screen
name="ContactDetails" // @ts-ignore:next-line
component={
ContactDetails
}
/>
<Stack.Screen
name="NostrKeys" // @ts-ignore:next-line
component={
NostrKeys
}
/>
<Stack.Screen
name="NostrRelays" // @ts-ignore:next-line
component={
NostrRelays
}
/>
<Stack.Screen
name="ChangeAddress" // @ts-ignore:next-line
component={
ChangeAddress
}
/>
<Stack.Screen
name="EditProfile" // @ts-ignore:next-line
component={
EditProfile
}
/>
<Stack.Screen
name="PayCodes" // @ts-ignore:next-line
component={
PayCodes
}
/>
<Stack.Screen
name="PayCode" // @ts-ignore:next-line
component={
PayCode
}
/>
<Stack.Screen
name="CreatePayCode" // @ts-ignore:next-line
component={
CreatePayCode
}
/>
<Stack.Screen
name="Bolt12Address" // @ts-ignore:next-line
component={
Bolt12Address
}
/>
<Stack.Screen
name="SocialMedia" // @ts-ignore:next-line
component={
SocialMedia
}
/>
<Stack.Screen
name="NostrContacts" // @ts-ignore:next-line
component={
NostrContacts
}
/>
<Stack.Screen
name="MultiQR" // @ts-ignore:next-line
component={
MultiQR
}
/>
<Stack.Screen
name="CurrencyConverter" // @ts-ignore:next-line
component={
CurrencyConverter
}
/>
<Stack.Screen
name="ChannelsSettings" // @ts-ignore:next-line
component={
ChannelsSettings
}
/>
<Stack.Screen
name="RawTxHex" // @ts-ignore:next-line
component={
RawTxHex
}
/>
<Stack.Screen
name="RestoreChannelBackups" // @ts-ignore:next-line
component={
RestoreChannelBackups
}
/>
<Stack.Screen
name="SetWalletPicture" // @ts-ignore:next-line
component={
SetWalletPicture
}
/>
<Stack.Screen
name="CustodialWalletWarning" // @ts-ignore:next-line
component={
CustodialWalletWarning
}
/>
<Stack.Screen
name="PSBT" // @ts-ignore:next-line
component={PSBT}
/>
<Stack.Screen
name="TxHex" // @ts-ignore:next-line
component={
TxHex
}
/>
<Stack.Screen
name="LSPServicesList" // @ts-ignore:next-line
component={
LSPServicesList
}
/>
<Stack.Screen
name="LSPS1" // @ts-ignore:next-line
component={
LSPS1
}
/>
<Stack.Screen
name="LSPS1Settings" // @ts-ignore:next-line
component={
LSPS1Settings
}
/>
<Stack.Screen
name="OrdersPane" // @ts-ignore:next-line
component={
OrdersPane
}
/>
<Stack.Screen
name="LSPS1Order" // @ts-ignore:next-line
component={
LSPS1Order
}
/>
<Stack.Screen
name="LSPS1PaymentAwait" // @ts-ignore:next-line
component={
LSPPaymentAwait
}
/>
<Stack.Screen
name="LSPS7" // @ts-ignore:next-line
component={
LSPS7
}
/>
<Stack.Screen
name="LSPS7Order" // @ts-ignore:next-line
component={
LSPS7Order
}
/>
<Stack.Screen
name="LSPS7PaymentAwait" // @ts-ignore:next-line
component={
LSPPaymentAwait
}
/>
<Stack.Screen
name="PendingHTLCs" // @ts-ignore:next-line
component={
PendingHTLCs
}
/>
<Stack.Screen
name="OnChainAddresses" // @ts-ignore:next-line
component={
OnChainAddresses
}
/>
<Stack.Screen
name="DeveloperTools" // @ts-ignore:next-line
component={
DeveloperTools
}
/>
<Stack.Screen
name="Watchtowers" // @ts-ignore:next-line
component={
Watchtowers
}
/>
<Stack.Screen
name="WatchtowerDetails" // @ts-ignore:next-line
component={
WatchtowerDetails
}
/>
<Stack.Screen
name="AddWatchtower" // @ts-ignore:next-line
component={
AddWatchtower
}
/>
<Stack.Screen
name="Chantools" // @ts-ignore:next-line
component={
Chantools
}
/>
<Stack.Screen
name="Sweepremoteclosed" // @ts-ignore:next-line
component={
Sweepremoteclosed
}
/>
<Stack.Screen
name="ActivityExport" // @ts-ignore:next-line
component={
ActivityExport
}
/>
<Stack.Screen
name="EcashSettings" // @ts-ignore:next-line
component={
EcashSettings
}
/>
<Stack.Screen
name="ReceiveEcash" // @ts-ignore:next-line
component={
ReceiveEcash
}
/>
<Stack.Screen
name="CashuInvoice" // @ts-ignore:next-line
component={
CashuInvoice
}
/>
<Stack.Screen
name="CashuPayment" // @ts-ignore:next-line
component={
CashuPayment
}
/>
<Stack.Screen
name="CashuToken" // @ts-ignore:next-line
component={
CashuToken
}
/>
<Stack.Screen
name="SendEcash" // @ts-ignore:next-line
component={
SendEcash
}
/>
<Stack.Screen
name="CashuLockSettings" // @ts-ignore:next-line
component={
CashuLockSettings
}
/>
<Stack.Screen
name="UnspentTokens" // @ts-ignore:next-line
component={
UnspentTokens
}
/>
<Stack.Screen
name="CashuSeed" // @ts-ignore:next-line
component={
CashuSeed
}
/>
<Stack.Screen
name="LegacySeedRecovery" // @ts-ignore:next-line
component={
LegacySeedRecovery
}
/>
<Stack.Screen
name="RecoverMintQuote" // @ts-ignore:next-line
component={
RecoverMintQuote
}
/>
<Stack.Screen
name="CashuPaymentRequest" // @ts-ignore:next-line
component={
CashuPaymentRequest
}
options={{
gestureEnabled:
false // disables swipe back
}}
/>
<Stack.Screen
name="CashuSendingLightning" // @ts-ignore:next-line
component={
CashuSendingLightning
}
/>
<Stack.Screen
name="MultimintPayment" // @ts-ignore:next-line
component={
MultimintPayment
}
/>
<Stack.Screen
name="Mint" // @ts-ignore:next-line
component={Mint}
/>
<Stack.Screen
name="Mints" // @ts-ignore:next-line
component={
Mints
}
/>
<Stack.Screen
name="AddMint" // @ts-ignore:next-line
component={
AddMint
}
/>
<Stack.Screen
name="CashuTools" // @ts-ignore:next-line
component={
CashuTools
}
/>
<Stack.Screen
name="NostrKeysTools" // @ts-ignore:next-line
component={
NostrKeysTools
}
/>
<Stack.Screen
name="NostrMintSync" // @ts-ignore:next-line
component={
NostrMintSync
}
/>
<Stack.Screen
name="ZeusPayPlus" // @ts-ignore:next-line
component={
ZeusPayPlus
}
/>
<Stack.Screen
name="ZeusPayPlusPerks" // @ts-ignore:next-line
component={
ZeusPayPlusPerks
}
/>
<Stack.Screen
name="WebPortalPOS" // @ts-ignore:next-line
component={
WebPortalPOS
}
/>
<Stack.Screen
name="CreateNWCLightningAddress" // @ts-ignore:next-line
component={
CreateNWCLightningAddress
}
/>
<Stack.Screen
name="NWCAddressInfo" // @ts-ignore:next-line
component={
NWCAddressInfo
}
/>
<Stack.Screen
name="NWCAddressSettings" // @ts-ignore:next-line
component={
NWCAddressSettings
}
/>
<Stack.Screen
name="Swaps" // @ts-ignore:next-line
component={
Swaps
}
/>
<Stack.Screen
name="SwapDetails" // @ts-ignore:next-line
component={
SwapDetails
}
/>
<Stack.Screen
name="SwapsPane" // @ts-ignore:next-line
component={
SwapsPane
}
/>
<Stack.Screen
name="RefundSwap" // @ts-ignore:next-line
component={
RefundSwap
}
/>
<Stack.Screen
name="SwapSettings" // @ts-ignore:next-line
component={
SwapSettings
}
/>
<Stack.Screen
name="NodeConfigExportImport" // @ts-ignore:next-line
component={
NodeConfigExportImport
}
/>
<Stack.Screen
name="CreateWithdrawalRequest" // @ts-ignore:next-line
component={
CreateWithdrawalRequest
}
/>
<Stack.Screen
name="WithdrawalRequestInfo" // @ts-ignore:next-line
component={
WithdrawalRequestInfo
}
/>
<Stack.Screen
name="RedeemWithdrawalRequest" // @ts-ignore:next-line
component={
RedeemWithdrawalRequest
}
/>
<Stack.Screen
name="DonateToZEUS" // @ts-ignore:next-line
component={
DonateToZEUS
}
/>
<Stack.Screen
name="ChangeDonationSettings" // @ts-ignore:next-line
component={
ChangeDonationSettings
}
/>
<Stack.Screen
name="WIFSweeper" // @ts-ignore:next-line
component={
WIFSweeper
}
/>
</Stack.Navigator>
</NavigationContainer>
</>
)}
</Observer>
</SafeAreaView>
</StealthModeWrapper>
{/* @ts-ignore:next-line */}
<AlertModal />
{/* @ts-ignore:next-line */}
<ExternalLinkModal />
{/* @ts-ignore:next-line */}
<AndroidNfcModal />
{/* @ts-ignore:next-line */}
<ShareModal />
{/* @ts-ignore:next-line */}
<NewChannelModal />
{/* @ts-ignore:next-line */}
<GraphSyncPromptModal />
{/* @ts-ignore:next-line */}
<InfoModal />
{/* @ts-ignore:next-line */}
<RatingModal />
{/* @ts-ignore:next-line */}
<RestoreChannelModal />
<CopiedToastHost />
</GestureHandlerRootView>
</PushNotificationManager>
</AppContainer>
</SafeAreaProvider>
</Provider>
);
}
}