Files
app.zeusln.zeus/utils/GraphSyncUtils.ts
T

108 lines
2.9 KiB
TypeScript

import { settingsStore, transactionsStore } from '../stores/Stores';
import { restartNeeded } from './RestartUtils';
import storage from '../storage';
import { SendPaymentReq } from '../stores/TransactionsStore';
const PENDING_PAYMENT_STORAGE_KEY = 'zeus-pending-payment-after-graph-sync';
export const handleEnableGraphSync = async (): Promise<void> => {
if (transactionsStore.pendingPaymentData) {
await savePendingPaymentData(transactionsStore.pendingPaymentData);
}
await settingsStore.updateSettings({
expressGraphSync: true,
graphSyncPromptIgnoreOnce: false
});
restartNeeded(true);
};
export const handleIgnoreOnce = async (): Promise<void> => {
await settingsStore.updateSettings({
graphSyncPromptIgnoreOnce: true
});
transactionsStore.proceedWithPayment();
};
export const handleNeverAskAgain = async (): Promise<void> => {
await settingsStore.updateSettings({
graphSyncPromptNeverAsk: true,
graphSyncPromptIgnoreOnce: false
});
};
export const savePendingPaymentData = async (
paymentData: SendPaymentReq
): Promise<void> => {
try {
await storage.setItem(
PENDING_PAYMENT_STORAGE_KEY,
JSON.stringify(paymentData)
);
} catch (error) {
console.error('Error saving pending payment data:', error);
throw error;
}
};
export const loadPendingPaymentData =
async (): Promise<SendPaymentReq | null> => {
try {
const data = await storage.getItem(PENDING_PAYMENT_STORAGE_KEY);
if (data) {
return JSON.parse(data);
}
} catch (error) {
console.error('Error loading pending payment data:', error);
}
return null;
};
export const clearPendingPaymentData = async (): Promise<void> => {
try {
await storage.removeItem(PENDING_PAYMENT_STORAGE_KEY);
} catch (error) {
console.error('Error clearing pending payment data:', error);
throw error;
}
};
export const checkGraphSyncBeforePayment = (
settings: any,
implementation: string,
paymentData: any,
transactionsStore: any
): boolean => {
const isEmbeddedNode = implementation === 'embedded-lnd';
if (!isEmbeddedNode) {
return true;
}
// Only show prompt on mainnet, not testnet
const isMainnet = settingsStore.embeddedLndNetwork === 'Mainnet';
if (!isMainnet) {
return true;
}
const isGraphSyncEnabled = settings.expressGraphSync === true;
if (isGraphSyncEnabled) {
return true;
}
if (settings.graphSyncPromptNeverAsk) {
return true;
}
if (settings.graphSyncPromptIgnoreOnce) {
settingsStore.updateSettings({
graphSyncPromptIgnoreOnce: false
});
}
transactionsStore.pendingPaymentData = paymentData;
transactionsStore.showGraphSyncPrompt = true;
return false;
};