import { AlertTriangleIcon } from "lucide-react";
import React from "react";
import { Alert, AlertDescription, AlertTitle } from "src/components/ui/alert";
import { useInfo } from "src/hooks/useInfo";
import { useNodeDetails } from "src/hooks/useNodeDetails";
import { request } from "src/utils/request";
export function LDKChannelMonitorSizeAlert() {
const { data: info } = useInfo();
if (info?.backendType !== "LDK") {
return null;
}
return ChannelMonitorSizeAlert();
}
function ChannelMonitorSizeAlert() {
const [channelMonitorSizes, setChannelMonitorSizes] =
React.useState<
{ remotePubkey: string; sizeBytes: number; hasWarning: boolean }[]
>();
React.useEffect(() => {
(async () => {
try {
const requestOptions: RequestInit = {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({ command: "list_channel_monitor_sizes" }),
};
const data = await request("/api/command", requestOptions);
setChannelMonitorSizes(data as typeof channelMonitorSizes);
} catch (error) {
console.error(error);
}
})();
}, []);
if (!channelMonitorSizes) {
return null;
}
const largestChannelMonitor = channelMonitorSizes.find(
(c1) => !channelMonitorSizes.find((c2) => c2.sizeBytes > c1.sizeBytes)
);
if (!largestChannelMonitor) {
return null;
}
if (!largestChannelMonitor.hasWarning) {
return;
}
return (
);
}
function ChannelMonitorSizeAlertForPubkey({
remotePubkey,
sizeBytes,
}: {
remotePubkey: string;
sizeBytes: number;
}) {
const { data: peerDetails } = useNodeDetails(remotePubkey);
return (
<>
Large channel state detected
The channel state for your channel with{" "}
{peerDetails?.alias || remotePubkey} is over{" "}
{Math.floor(sizeBytes / 1_000_000)} MB. Consider closing this channel
and opening a new one to improve your node performance.
>
);
}