2026-05-23 23:30:48 +08:00
|
|
|
import { PAYMENT_RECOVERY_STORAGE_KEY } from "./constants";
|
|
|
|
|
|
|
|
|
|
export function chainIdToDisplayName(chainId: number | undefined | null): string {
|
|
|
|
|
if (chainId === 137) return "Polygon";
|
|
|
|
|
if (chainId === 1) return "Ethereum Mainnet";
|
|
|
|
|
if (chainId) return `Chain ID ${chainId}`;
|
|
|
|
|
return "Polygon";
|
|
|
|
|
}
|
|
|
|
|
|
2026-05-29 01:57:42 +08:00
|
|
|
export function chainIdToExplorerBase(chainId: number | undefined | null): string {
|
|
|
|
|
if (chainId === 1) return "https://etherscan.io";
|
|
|
|
|
if (chainId === 137) return "https://polygonscan.com";
|
|
|
|
|
return "";
|
|
|
|
|
}
|
|
|
|
|
|
2026-05-23 23:30:48 +08:00
|
|
|
export function formatTime(value: string | undefined | null, locale: string) {
|
|
|
|
|
if (!value) return "--";
|
|
|
|
|
try {
|
|
|
|
|
const dt = new Date(value);
|
|
|
|
|
if (Number.isNaN(dt.getTime())) return "--";
|
|
|
|
|
return new Intl.DateTimeFormat(locale, {
|
|
|
|
|
year: "numeric",
|
|
|
|
|
month: "2-digit",
|
|
|
|
|
day: "2-digit",
|
|
|
|
|
}).format(dt);
|
|
|
|
|
} catch {
|
|
|
|
|
return "--";
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export function parseSubscriptionExpiry(value: string | undefined | null) {
|
|
|
|
|
const raw = String(value || "").trim();
|
|
|
|
|
if (!raw) return null;
|
|
|
|
|
const dt = new Date(raw);
|
|
|
|
|
if (Number.isNaN(dt.getTime())) return null;
|
|
|
|
|
const diffMs = dt.getTime() - Date.now();
|
|
|
|
|
return {
|
|
|
|
|
raw,
|
|
|
|
|
date: dt,
|
|
|
|
|
expired: diffMs <= 0,
|
|
|
|
|
daysLeft: Math.ceil(diffMs / 86_400_000),
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export function shortAddress(address: string) {
|
|
|
|
|
const text = String(address || "");
|
|
|
|
|
if (!text.startsWith("0x") || text.length < 12) return text || "--";
|
|
|
|
|
return `${text.slice(0, 8)}...${text.slice(-6)}`;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export function clearStoredPaymentRecovery() {
|
|
|
|
|
if (typeof window === "undefined") return;
|
|
|
|
|
window.sessionStorage.removeItem(PAYMENT_RECOVERY_STORAGE_KEY);
|
|
|
|
|
}
|
|
|
|
|
|