@microcosmmoney/portal-react 3.13.0 → 3.13.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (73) hide show
  1. package/dist/index.d.ts +13 -0
  2. package/dist/index.js +27 -1
  3. package/dist/main-portal/components/dashboard/EcosystemStatsCard.d.ts +1 -0
  4. package/dist/main-portal/components/dashboard/EcosystemStatsCard.js +37 -0
  5. package/dist/main-portal/components/dashboard/LockPeriodsCard.d.ts +1 -0
  6. package/dist/main-portal/components/dashboard/LockPeriodsCard.js +16 -0
  7. package/dist/main-portal/components/dashboard/MCCPriceChart.d.ts +1 -0
  8. package/dist/main-portal/components/dashboard/MCCPriceChart.js +74 -0
  9. package/dist/main-portal/components/dashboard/MCCTokenStatsCard.d.ts +1 -0
  10. package/dist/main-portal/components/dashboard/MCCTokenStatsCard.js +39 -0
  11. package/dist/main-portal/components/dashboard/MCDStatsCard.d.ts +1 -0
  12. package/dist/main-portal/components/dashboard/MCDStatsCard.js +39 -0
  13. package/dist/main-portal/components/dashboard/MarketOverviewBar.d.ts +1 -0
  14. package/dist/main-portal/components/dashboard/MarketOverviewBar.js +141 -0
  15. package/dist/main-portal/components/dashboard/MiningWeightCard.d.ts +1 -0
  16. package/dist/main-portal/components/dashboard/MiningWeightCard.js +56 -0
  17. package/dist/main-portal/components/dashboard/MintingStatsCard.d.ts +1 -0
  18. package/dist/main-portal/components/dashboard/MintingStatsCard.js +29 -0
  19. package/dist/main-portal/components/dashboard/MyAssetsSummary.d.ts +1 -0
  20. package/dist/main-portal/components/dashboard/MyAssetsSummary.js +69 -0
  21. package/dist/main-portal/components/dashboard/MyMiningCard.d.ts +1 -0
  22. package/dist/main-portal/components/dashboard/MyMiningCard.js +46 -0
  23. package/dist/main-portal/components/dashboard/QuickActions.d.ts +1 -0
  24. package/dist/main-portal/components/dashboard/QuickActions.js +49 -0
  25. package/dist/main-portal/components/dashboard/UserDashboardPage.d.ts +1 -0
  26. package/dist/main-portal/components/dashboard/UserDashboardPage.js +36 -0
  27. package/dist/main-portal/components/mainnet/wave-text.d.ts +8 -0
  28. package/dist/main-portal/components/mainnet/wave-text.js +50 -0
  29. package/dist/main-portal/components/mining/MiningModal.js +1 -1
  30. package/dist/main-portal/components/providers/SolanaWalletProvider.js +1 -1
  31. package/dist/main-portal/components/resources/public-mining-modal.js +1 -1
  32. package/dist/main-portal/hooks/useAuth.js +3 -2
  33. package/dist/main-portal/lib/api/index.d.ts +2 -9
  34. package/dist/main-portal/lib/api/index.js +17 -210
  35. package/package.json +1 -1
  36. package/dist/main-portal/lib/analytics/hooks.d.ts +0 -139
  37. package/dist/main-portal/lib/analytics/hooks.js +0 -277
  38. package/dist/main-portal/lib/analytics/index.d.ts +0 -2
  39. package/dist/main-portal/lib/analytics/index.js +0 -19
  40. package/dist/main-portal/lib/analytics/types.d.ts +0 -611
  41. package/dist/main-portal/lib/analytics/types.js +0 -2
  42. package/dist/main-portal/lib/api/account.d.ts +0 -39
  43. package/dist/main-portal/lib/api/account.js +0 -86
  44. package/dist/main-portal/lib/api/admin.d.ts +0 -78
  45. package/dist/main-portal/lib/api/admin.js +0 -195
  46. package/dist/main-portal/lib/api/analytics.d.ts +0 -217
  47. package/dist/main-portal/lib/api/analytics.js +0 -55
  48. package/dist/main-portal/lib/api/mcc-holders.d.ts +0 -130
  49. package/dist/main-portal/lib/api/mcc-holders.js +0 -47
  50. package/dist/main-portal/lib/api/org-service-proxy.d.ts +0 -7
  51. package/dist/main-portal/lib/api/org-service-proxy.js +0 -55
  52. package/dist/main-portal/lib/api/strategies.d.ts +0 -101
  53. package/dist/main-portal/lib/api/strategies.js +0 -87
  54. package/dist/main-portal/lib/exchanges/config.d.ts +0 -34
  55. package/dist/main-portal/lib/exchanges/config.js +0 -185
  56. package/dist/main-portal/lib/exchanges/hooks/index.d.ts +0 -5
  57. package/dist/main-portal/lib/exchanges/hooks/index.js +0 -10
  58. package/dist/main-portal/lib/exchanges/hooks/useBinanceData.d.ts +0 -15
  59. package/dist/main-portal/lib/exchanges/hooks/useBinanceData.js +0 -216
  60. package/dist/main-portal/lib/exchanges/hooks/useBinanceDialogs.d.ts +0 -32
  61. package/dist/main-portal/lib/exchanges/hooks/useBinanceDialogs.js +0 -395
  62. package/dist/main-portal/lib/exchanges/hooks/useUserExchanges.d.ts +0 -15
  63. package/dist/main-portal/lib/exchanges/hooks/useUserExchanges.js +0 -51
  64. package/dist/main-portal/lib/exchanges/index.d.ts +0 -4
  65. package/dist/main-portal/lib/exchanges/index.js +0 -21
  66. package/dist/main-portal/lib/exchanges/types.d.ts +0 -102
  67. package/dist/main-portal/lib/exchanges/types.js +0 -2
  68. package/dist/main-portal/lib/exchanges/utils.d.ts +0 -1
  69. package/dist/main-portal/lib/exchanges/utils.js +0 -10
  70. package/dist/main-portal/lib/gcp-secrets.d.ts +0 -7
  71. package/dist/main-portal/lib/gcp-secrets.js +0 -45
  72. package/dist/main-portal/lib/mockWallet.d.ts +0 -130
  73. package/dist/main-portal/lib/mockWallet.js +0 -284
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ 'use client';
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.default = MyAssetsSummary;
5
+ const jsx_runtime_1 = require("react/jsx-runtime");
6
+ const react_1 = require("react");
7
+ const WalletContext_1 = require("../../contexts/WalletContext");
8
+ const useMarketData_1 = require("../../hooks/useMarketData");
9
+ const api_1 = require("../../lib/api");
10
+ const blockchain_1 = require("../../lib/api/blockchain");
11
+ const navigation_1 = require("../../i18n/navigation");
12
+ const lucide_react_1 = require("lucide-react");
13
+ function MyAssetsSummary() {
14
+ const { mcdAmount, mcdTotalReceived, mcdTotalSpent, lockPeriods, userRank, nextRank, progressPercent, nextLevelRequirement, } = (0, WalletContext_1.useWallet)();
15
+ const { data: marketData } = (0, useMarketData_1.useMarketData)();
16
+ const [onChainMCC, setOnChainMCC] = (0, react_1.useState)(null);
17
+ const [mccLoading, setMccLoading] = (0, react_1.useState)(true);
18
+ const [walletCount, setWalletCount] = (0, react_1.useState)(0);
19
+ const loadOnChainMCC = (0, react_1.useCallback)(async () => {
20
+ setMccLoading(true);
21
+ try {
22
+ const listRes = await (0, api_1.fetchApi)('/auth/wallet/list');
23
+ if (!listRes.success || !listRes.data?.wallets) {
24
+ setOnChainMCC(0);
25
+ setMccLoading(false);
26
+ return;
27
+ }
28
+ const wallets = listRes.data.wallets;
29
+ setWalletCount(wallets.length);
30
+ if (wallets.length === 0) {
31
+ setOnChainMCC(0);
32
+ setMccLoading(false);
33
+ return;
34
+ }
35
+ const results = await Promise.allSettled(wallets.map(w => (0, blockchain_1.getMCCBalance)(w.wallet_address)));
36
+ let total = 0;
37
+ for (const r of results) {
38
+ if (r.status === 'fulfilled' && r.value)
39
+ total += r.value.balance;
40
+ }
41
+ setOnChainMCC(total);
42
+ }
43
+ catch {
44
+ setOnChainMCC(0);
45
+ }
46
+ finally {
47
+ setMccLoading(false);
48
+ }
49
+ }, []);
50
+ (0, react_1.useEffect)(() => {
51
+ loadOnChainMCC();
52
+ }, [loadOnChainMCC]);
53
+ const mccDisplay = onChainMCC ?? 0;
54
+ const mccUsdValue = marketData?.price ? mccDisplay * marketData.price : 0;
55
+ const activeLocks = Array.isArray(lockPeriods) ? lockPeriods.filter((p) => p.status === 'locked') : [];
56
+ const lockedAmount = activeLocks.reduce((sum, l) => sum + (l.amount || 0), 0);
57
+ const getRankColor = (rank) => {
58
+ if (!rank)
59
+ return 'text-neutral-500';
60
+ const map = {
61
+ miner: 'text-cyan-300',
62
+ commander: 'text-white', pioneer: 'text-cyan-400', warden: 'text-cyan-300', admiral: 'text-cyan-300',
63
+ };
64
+ return map[rank.toLowerCase()] || 'text-neutral-400';
65
+ };
66
+ return ((0, jsx_runtime_1.jsxs)("div", { className: "grid grid-cols-2 sm:grid-cols-3 md:grid-cols-5 gap-2 sm:gap-3", children: [(0, jsx_runtime_1.jsx)(navigation_1.Link, { href: "/mcc/wallet", className: "block group", children: (0, jsx_runtime_1.jsxs)("div", { className: "bg-neutral-900 border border-neutral-700 rounded-lg p-2.5 sm:p-4 hover:border-cyan-400/50 dash-card h-full", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex items-center gap-1.5 mb-2", children: [(0, jsx_runtime_1.jsx)(lucide_react_1.Eye, { className: "w-3.5 h-3.5 text-neutral-400" }), (0, jsx_runtime_1.jsx)("span", { className: "text-neutral-400 text-[10px] font-mono tracking-wider", children: "MCC_BALANCE" })] }), (0, jsx_runtime_1.jsx)("div", { className: "text-base sm:text-2xl font-bold font-mono text-cyan-400", children: mccLoading
67
+ ? (0, jsx_runtime_1.jsx)(lucide_react_1.Loader2, { className: "w-5 h-5 animate-spin inline" })
68
+ : mccDisplay.toLocaleString('en-US', { minimumFractionDigits: 3, maximumFractionDigits: 3 }) }), mccUsdValue > 0 && ((0, jsx_runtime_1.jsxs)("div", { className: "text-xs text-neutral-500 font-mono mt-1", children: ["\u2248 $", mccUsdValue.toLocaleString('en-US', { minimumFractionDigits: 2, maximumFractionDigits: 2 })] }))] }) }), (0, jsx_runtime_1.jsx)(navigation_1.Link, { href: "/mcc/mcd", className: "block group", children: (0, jsx_runtime_1.jsxs)("div", { className: "bg-neutral-900 border border-neutral-700 rounded-lg p-2.5 sm:p-4 hover:border-cyan-400/50 dash-card h-full", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex items-center gap-1.5 mb-2", children: [(0, jsx_runtime_1.jsx)(lucide_react_1.TrendingUp, { className: "w-3.5 h-3.5 text-neutral-400" }), (0, jsx_runtime_1.jsx)("span", { className: "text-neutral-400 text-[10px] font-mono tracking-wider", children: "MCD_BALANCE" })] }), (0, jsx_runtime_1.jsx)("div", { className: "text-base sm:text-2xl font-bold font-mono text-white", children: mcdAmount.toLocaleString('en-US', { minimumFractionDigits: 2, maximumFractionDigits: 2 }) }), (0, jsx_runtime_1.jsxs)("div", { className: "text-[10px] text-neutral-500 font-mono mt-1", children: ["in: ", mcdTotalReceived.toLocaleString('en-US', { maximumFractionDigits: 0 }), " out: ", mcdTotalSpent.toLocaleString('en-US', { maximumFractionDigits: 0 })] })] }) }), (0, jsx_runtime_1.jsxs)("div", { className: "bg-neutral-900 border border-neutral-700 rounded-lg p-2.5 sm:p-4 hover:border-cyan-400/50 dash-card", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex items-center gap-1.5 mb-2", children: [(0, jsx_runtime_1.jsx)(lucide_react_1.Lock, { className: "w-3.5 h-3.5 text-neutral-400" }), (0, jsx_runtime_1.jsx)("span", { className: "text-neutral-400 text-[10px] font-mono tracking-wider", children: "LOCKED" })] }), (0, jsx_runtime_1.jsx)("div", { className: "text-base sm:text-2xl font-bold font-mono text-white", children: lockedAmount.toLocaleString('en-US', { maximumFractionDigits: 0 }) }), (0, jsx_runtime_1.jsxs)("div", { className: "text-[10px] text-neutral-500 font-mono mt-1", children: [activeLocks.length, " lock period", activeLocks.length !== 1 ? 's' : ''] })] }), (0, jsx_runtime_1.jsxs)("div", { className: "bg-neutral-900 border border-neutral-700 rounded-lg p-2.5 sm:p-4 hover:border-cyan-400/50 dash-card", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex items-center gap-1.5 mb-2", children: [(0, jsx_runtime_1.jsx)(lucide_react_1.Wallet, { className: "w-3.5 h-3.5 text-neutral-400" }), (0, jsx_runtime_1.jsx)("span", { className: "text-neutral-400 text-[10px] font-mono tracking-wider", children: "WALLETS" })] }), (0, jsx_runtime_1.jsx)("div", { className: "text-base sm:text-2xl font-bold font-mono text-white", children: walletCount })] }), (0, jsx_runtime_1.jsxs)("div", { className: "bg-neutral-900 border border-neutral-700 rounded-lg p-2.5 sm:p-4 hover:border-cyan-400/50 dash-card", children: [(0, jsx_runtime_1.jsx)("div", { className: "text-neutral-400 text-[10px] font-mono tracking-wider mb-2", children: "RANK" }), (0, jsx_runtime_1.jsx)("div", { className: `text-lg font-bold font-mono ${getRankColor(userRank)}`, children: userRank || 'N/A' }), nextRank && ((0, jsx_runtime_1.jsxs)("div", { className: "mt-2", children: [(0, jsx_runtime_1.jsx)("div", { className: "w-full bg-neutral-800 rounded-full h-1.5", children: (0, jsx_runtime_1.jsx)("div", { className: "bg-cyan-400 h-1.5 rounded-full transition-all", style: { width: `${Math.min(progressPercent, 100)}%` } }) }), (0, jsx_runtime_1.jsxs)("div", { className: "text-[10px] text-neutral-500 font-mono mt-1", children: [nextLevelRequirement ? `${nextLevelRequirement.have}/${nextLevelRequirement.need} ${nextLevelRequirement.tier}` : `${progressPercent.toFixed(0)}%`, " \u2192 ", nextRank] })] }))] })] }));
69
+ }
@@ -0,0 +1 @@
1
+ export default function MyMiningCard(): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ // AI-generated · AI-managed · AI-maintained
3
+ 'use client';
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ exports.default = MyMiningCard;
6
+ const jsx_runtime_1 = require("react/jsx-runtime");
7
+ const react_1 = require("react");
8
+ const card_1 = require("../ui/card");
9
+ const api_1 = require("../../lib/api");
10
+ const lucide_react_1 = require("lucide-react");
11
+ const navigation_1 = require("../../i18n/navigation");
12
+ function MyMiningCard() {
13
+ const [stats, setStats] = (0, react_1.useState)(null);
14
+ const [loading, setLoading] = (0, react_1.useState)(true);
15
+ const loadStats = (0, react_1.useCallback)(async () => {
16
+ try {
17
+ const json = await (0, api_1.fetchApi)('/mining/my-stats');
18
+ if (json.success && json.data) {
19
+ setStats(json.data);
20
+ }
21
+ }
22
+ catch {
23
+ // ignore
24
+ }
25
+ finally {
26
+ setLoading(false);
27
+ }
28
+ }, []);
29
+ (0, react_1.useEffect)(() => { loadStats(); }, [loadStats]);
30
+ const fmt = (v) => v.toLocaleString('en-US', { minimumFractionDigits: 2, maximumFractionDigits: 2 });
31
+ const formatDateTime = (iso) => {
32
+ if (!iso)
33
+ return '-';
34
+ const d = new Date(iso);
35
+ return d.toLocaleString('zh-CN', { timeZone: 'Asia/Shanghai' });
36
+ };
37
+ const items = stats ? [
38
+ { label: 'total_mined', value: fmt(stats.total_mined), icon: (0, jsx_runtime_1.jsx)(lucide_react_1.Coins, { className: "w-3.5 h-3.5 text-cyan-400" }) },
39
+ { label: 'total_paid', value: fmt(stats.total_paid), icon: (0, jsx_runtime_1.jsx)(lucide_react_1.DollarSign, { className: "w-3.5 h-3.5 text-cyan-400" }) },
40
+ { label: 'mining_count', value: `${stats.mining_count}`, icon: (0, jsx_runtime_1.jsx)(lucide_react_1.Hash, { className: "w-3.5 h-3.5 text-cyan-400" }) },
41
+ { label: 'last_30d', value: fmt(stats.last_30d_mined), icon: (0, jsx_runtime_1.jsx)(lucide_react_1.CalendarDays, { className: "w-3.5 h-3.5 text-cyan-400" }) },
42
+ { label: 'active_days', value: `${stats.active_days_30d}`, icon: (0, jsx_runtime_1.jsx)(lucide_react_1.Timer, { className: "w-3.5 h-3.5 text-cyan-400" }) },
43
+ { label: 'last_mined', value: formatDateTime(stats.last_mined_at), icon: (0, jsx_runtime_1.jsx)(lucide_react_1.Clock, { className: "w-3.5 h-3.5 text-cyan-400" }) },
44
+ ] : [];
45
+ return ((0, jsx_runtime_1.jsx)(card_1.Card, { className: "bg-neutral-900 border-neutral-700 h-full hover:border-cyan-400/50 dash-card", children: (0, jsx_runtime_1.jsxs)(card_1.CardContent, { className: "p-3 sm:p-6", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex items-center justify-between mb-3 sm:mb-4", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex items-center gap-2", children: [(0, jsx_runtime_1.jsx)(lucide_react_1.Pickaxe, { className: "w-4 h-4 text-cyan-400" }), (0, jsx_runtime_1.jsx)("span", { className: "text-neutral-400 text-[10px] sm:text-xs font-mono tracking-wider", children: "MY_MINING" })] }), (0, jsx_runtime_1.jsxs)(navigation_1.Link, { href: "/mcc/mining", className: "flex items-center gap-1 text-xs text-neutral-500 hover:text-cyan-400 font-mono", children: ["details ", (0, jsx_runtime_1.jsx)(lucide_react_1.ChevronRight, { size: 12 })] })] }), loading ? ((0, jsx_runtime_1.jsx)("div", { className: "flex items-center justify-center py-8", children: (0, jsx_runtime_1.jsx)(lucide_react_1.Loader2, { className: "w-5 h-5 animate-spin text-cyan-400" }) })) : !stats || stats.mining_count === 0 ? ((0, jsx_runtime_1.jsx)("div", { className: "text-center py-8 text-neutral-500 font-mono text-sm", children: "no mining records" })) : ((0, jsx_runtime_1.jsx)("div", { className: "grid grid-cols-2 gap-2 sm:gap-3", children: items.map((s) => ((0, jsx_runtime_1.jsxs)("div", { className: "bg-neutral-800 rounded p-2 sm:p-3", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex items-center gap-1.5 mb-1", children: [s.icon, (0, jsx_runtime_1.jsx)("span", { className: "text-[9px] sm:text-[10px] text-neutral-400 font-mono tracking-wider", children: s.label })] }), (0, jsx_runtime_1.jsx)("div", { className: "text-sm sm:text-xl font-bold font-mono text-white truncate", children: s.value })] }, s.label))) }))] }) }));
46
+ }
@@ -0,0 +1 @@
1
+ export default function QuickActions(): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ // AI-generated · AI-managed · AI-maintained
3
+ 'use client';
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ exports.default = QuickActions;
6
+ const jsx_runtime_1 = require("react/jsx-runtime");
7
+ const lucide_react_1 = require("lucide-react");
8
+ const dexscreener_1 = require("../../lib/api/dexscreener");
9
+ const exchanges = [
10
+ {
11
+ label: 'OKX DEX',
12
+ href: dexscreener_1.OKX_DEX_URL,
13
+ icon: lucide_react_1.Repeat,
14
+ color: 'text-cyan-300 border-cyan-400/30 hover:bg-cyan-950/30',
15
+ },
16
+ {
17
+ label: 'Raydium',
18
+ href: dexscreener_1.RAYDIUM_POOL_URL,
19
+ icon: lucide_react_1.Droplets,
20
+ color: 'text-cyan-300 border-cyan-400/30 hover:bg-cyan-950/30',
21
+ },
22
+ {
23
+ label: 'Jupiter',
24
+ href: dexscreener_1.JUPITER_TRADE_URL,
25
+ icon: lucide_react_1.Repeat,
26
+ color: 'text-white border-neutral-700 hover:bg-neutral-800',
27
+ },
28
+ {
29
+ label: 'BirdEye',
30
+ href: dexscreener_1.BIRDEYE_TOKEN_URL,
31
+ icon: lucide_react_1.Eye,
32
+ color: 'text-cyan-300 border-cyan-400/30 hover:bg-cyan-950/30',
33
+ },
34
+ {
35
+ label: 'GMGN',
36
+ href: dexscreener_1.GMGN_TOKEN_URL,
37
+ icon: lucide_react_1.BarChart3,
38
+ color: 'text-white border-neutral-700 hover:bg-neutral-800',
39
+ },
40
+ {
41
+ label: 'DexScreener',
42
+ href: dexscreener_1.DEXSCREENER_URL,
43
+ icon: lucide_react_1.LineChart,
44
+ color: 'text-cyan-300 border-cyan-400/30 hover:bg-cyan-950/30',
45
+ },
46
+ ];
47
+ function QuickActions() {
48
+ return ((0, jsx_runtime_1.jsx)("div", { className: "mb-3 sm:mb-6", children: (0, jsx_runtime_1.jsx)("div", { className: "grid grid-cols-3 xs:grid-cols-3 sm:grid-cols-4 lg:grid-cols-6 gap-2 sm:gap-3", children: exchanges.map((ex) => ((0, jsx_runtime_1.jsx)("a", { href: ex.href, target: "_blank", rel: "noopener noreferrer", children: (0, jsx_runtime_1.jsxs)("div", { className: `bg-neutral-900 border ${ex.color} rounded-lg p-2.5 sm:p-4 flex items-center gap-2 sm:gap-3 cursor-pointer active:scale-[0.98] dash-card`, children: [(0, jsx_runtime_1.jsx)(ex.icon, { size: 16, className: "shrink-0 sm:w-5 sm:h-5" }), (0, jsx_runtime_1.jsx)("span", { className: "font-mono text-xs sm:text-sm font-bold tracking-wider truncate", children: ex.label })] }) }, ex.label))) }) }));
49
+ }
@@ -0,0 +1 @@
1
+ export default function UserDashboardPage(): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ // AI-generated · AI-managed · AI-maintained
3
+ 'use client';
4
+ var __importDefault = (this && this.__importDefault) || function (mod) {
5
+ return (mod && mod.__esModule) ? mod : { "default": mod };
6
+ };
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.default = UserDashboardPage;
9
+ const jsx_runtime_1 = require("react/jsx-runtime");
10
+ const WalletContext_1 = require("../../contexts/WalletContext");
11
+ const lucide_react_1 = require("lucide-react");
12
+ const card_1 = require("../ui/card");
13
+ const MarketOverviewBar_1 = __importDefault(require("./MarketOverviewBar"));
14
+ const QuickActions_1 = __importDefault(require("./QuickActions"));
15
+ const EcosystemStatsCard_1 = __importDefault(require("./EcosystemStatsCard"));
16
+ const MyAssetsSummary_1 = __importDefault(require("./MyAssetsSummary"));
17
+ const MCCPriceChart_1 = __importDefault(require("./MCCPriceChart"));
18
+ const MintingStatsCard_1 = __importDefault(require("./MintingStatsCard"));
19
+ const MiningWeightCard_1 = __importDefault(require("./MiningWeightCard"));
20
+ const LockPeriodsCard_1 = __importDefault(require("./LockPeriodsCard"));
21
+ const MyMiningCard_1 = __importDefault(require("./MyMiningCard"));
22
+ const MCCTokenStatsCard_1 = __importDefault(require("./MCCTokenStatsCard"));
23
+ const MCDStatsCard_1 = __importDefault(require("./MCDStatsCard"));
24
+ const wave_text_1 = require("../mainnet/wave-text");
25
+ const next_intl_1 = require("next-intl");
26
+ function UserDashboardPage() {
27
+ const t = (0, next_intl_1.useTranslations)('mccDashboard');
28
+ const { loading, error } = (0, WalletContext_1.useWallet)();
29
+ if (loading) {
30
+ return ((0, jsx_runtime_1.jsx)("div", { className: "flex items-center justify-center min-h-[60vh] font-mono", children: (0, jsx_runtime_1.jsxs)("div", { className: "text-center space-y-4", children: [(0, jsx_runtime_1.jsx)(lucide_react_1.Loader2, { className: "w-8 h-8 animate-spin mx-auto text-cyan-400" }), (0, jsx_runtime_1.jsx)("div", { className: "text-neutral-500", children: "loading user_data..." })] }) }));
31
+ }
32
+ if (error) {
33
+ return ((0, jsx_runtime_1.jsx)("div", { className: "flex items-center justify-center min-h-[60vh] font-mono", children: (0, jsx_runtime_1.jsx)(card_1.Card, { className: "bg-red-500/10 border-red-500/20", children: (0, jsx_runtime_1.jsxs)(card_1.CardContent, { className: "p-6", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex items-center gap-2 text-red-400 mb-2", children: [(0, jsx_runtime_1.jsx)(lucide_react_1.AlertTriangle, { className: "w-5 h-5" }), (0, jsx_runtime_1.jsx)("span", { className: "font-medium", children: error })] }), (0, jsx_runtime_1.jsx)("p", { className: "text-neutral-500 text-sm", children: t('refreshRetry') })] }) }) }));
34
+ }
35
+ return ((0, jsx_runtime_1.jsxs)("div", { className: "max-w-7xl mx-auto font-mono px-3 py-4 space-y-3 xs:px-4 xs:space-y-4 sm:px-6 sm:py-6 sm:space-y-6", children: [(0, jsx_runtime_1.jsx)("div", { className: "text-center", children: (0, jsx_runtime_1.jsx)(wave_text_1.WaveText, { text: "SHARED NETWORK \u00B7 SHARED FUTURE", className: "text-lg 2xs:text-xl xs:text-2xl sm:text-3xl md:text-4xl lg:text-5xl font-[var(--font-bebas)] tracking-tight" }) }), (0, jsx_runtime_1.jsx)(MarketOverviewBar_1.default, {}), (0, jsx_runtime_1.jsx)(QuickActions_1.default, {}), (0, jsx_runtime_1.jsx)(MyAssetsSummary_1.default, {}), (0, jsx_runtime_1.jsx)(MCCPriceChart_1.default, {}), (0, jsx_runtime_1.jsxs)("div", { className: "grid lg:grid-cols-2 gap-3 sm:gap-6", children: [(0, jsx_runtime_1.jsx)(MyMiningCard_1.default, {}), (0, jsx_runtime_1.jsx)(MiningWeightCard_1.default, {})] }), (0, jsx_runtime_1.jsxs)("div", { className: "grid lg:grid-cols-2 gap-3 sm:gap-6", children: [(0, jsx_runtime_1.jsx)(MintingStatsCard_1.default, {}), (0, jsx_runtime_1.jsx)(EcosystemStatsCard_1.default, {})] }), (0, jsx_runtime_1.jsxs)("div", { className: "grid lg:grid-cols-2 gap-3 sm:gap-6", children: [(0, jsx_runtime_1.jsx)(MCCTokenStatsCard_1.default, {}), (0, jsx_runtime_1.jsx)(MCDStatsCard_1.default, {})] }), (0, jsx_runtime_1.jsx)(LockPeriodsCard_1.default, {}), (0, jsx_runtime_1.jsxs)("div", { className: "text-center py-4 space-y-1", children: [(0, jsx_runtime_1.jsx)("div", { className: "text-xs text-cyan-400/60 font-mono", children: "Data refreshes every 4 hours \u00B7 For real-time data, please check on-chain directly" }), (0, jsx_runtime_1.jsx)("div", { className: "text-xs text-cyan-400/60 font-mono", children: "\u6570\u636E\u6BCF 4 \u5C0F\u65F6\u66F4\u65B0 \u00B7 \u5373\u65F6\u6570\u636E\u8BF7\u76F4\u63A5\u67E5\u8BE2\u94FE\u4E0A" }), (0, jsx_runtime_1.jsx)("div", { className: "text-xs text-cyan-400/60 font-mono", children: "\u30C7\u30FC\u30BF\u306F4\u6642\u9593\u3054\u3068\u306B\u66F4\u65B0 \u00B7 \u30EA\u30A2\u30EB\u30BF\u30A4\u30E0\u30C7\u30FC\u30BF\u306F\u30AA\u30F3\u30C1\u30A7\u30FC\u30F3\u3067\u78BA\u8A8D" }), (0, jsx_runtime_1.jsx)("div", { className: "text-xs text-cyan-400/60 font-mono", children: "\uB370\uC774\uD130\uB294 4\uC2DC\uAC04\uB9C8\uB2E4 \uAC31\uC2E0 \u00B7 \uC2E4\uC2DC\uAC04 \uB370\uC774\uD130\uB294 \uC628\uCCB4\uC778\uC5D0\uC11C \uD655\uC778" })] })] }));
36
+ }
@@ -0,0 +1,8 @@
1
+ interface WaveTextProps {
2
+ text?: string;
3
+ className?: string;
4
+ color?: "cyan" | "red" | "gold" | "green";
5
+ delay?: number;
6
+ }
7
+ export declare function WaveText({ text, className, color, delay }: WaveTextProps): import("react/jsx-runtime").JSX.Element | null;
8
+ export {};
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ // AI-generated · AI-managed · AI-maintained
3
+ "use client";
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ exports.WaveText = WaveText;
6
+ const jsx_runtime_1 = require("react/jsx-runtime");
7
+ const framer_motion_1 = require("framer-motion");
8
+ const react_1 = require("react");
9
+ function WaveText({ text = "", className = "", color = "cyan", delay = 0.1 }) {
10
+ const [characters, setCharacters] = (0, react_1.useState)([]);
11
+ (0, react_1.useEffect)(() => {
12
+ if (text) {
13
+ setCharacters(Array.from(text));
14
+ }
15
+ }, [text]);
16
+ if (!characters.length)
17
+ return null;
18
+ const colorMap = {
19
+ cyan: {
20
+ gradient: "linear-gradient(180deg, #67e8f9 0%, #22d3ee 100%)",
21
+ shadow: "0 0 20px rgba(34, 211, 238, 0.3)",
22
+ },
23
+ red: {
24
+ gradient: "linear-gradient(180deg, #dc2626 0%, #991b1b 100%)",
25
+ shadow: "0 0 20px rgba(220, 38, 38, 0.3)",
26
+ },
27
+ gold: {
28
+ gradient: "linear-gradient(180deg, #fbbf24 0%, #f59e0b 100%)",
29
+ shadow: "0 0 20px rgba(245, 158, 11, 0.3)",
30
+ },
31
+ green: {
32
+ gradient: "linear-gradient(180deg, #34d399 0%, #10b981 100%)",
33
+ shadow: "0 0 20px rgba(16, 185, 129, 0.3)",
34
+ },
35
+ };
36
+ const colors = colorMap[color];
37
+ return ((0, jsx_runtime_1.jsx)("span", { className: `inline-flex flex-wrap gap-[1px] ${className}`, children: characters.map((char, index) => ((0, jsx_runtime_1.jsx)(framer_motion_1.motion.span, { className: "relative inline-block font-semibold text-transparent bg-clip-text", style: {
38
+ background: colors.gradient,
39
+ WebkitBackgroundClip: "text",
40
+ textShadow: colors.shadow,
41
+ }, animate: {
42
+ y: [0, -4, 0],
43
+ opacity: [0.5, 1, 0.5],
44
+ }, transition: {
45
+ duration: 2,
46
+ ease: "easeInOut",
47
+ repeat: Infinity,
48
+ delay: index * delay,
49
+ }, children: char === " " ? "\u00A0" : char }, `${char}-${index}`))) }));
50
+ }
@@ -55,7 +55,7 @@ const STABLECOIN_VAULTS = {
55
55
  usdt: new web3_js_1.PublicKey("BnHA9jSm88wzQS4c2nCgTXch1Byzc3FWn2G7Wgrvazy3"),
56
56
  };
57
57
  const POOL_PDA_WALLET = new web3_js_1.PublicKey("GSBWtaX9WcBh8jUcmbXtQ1afQPHKSUKvsTxkqpJU3G9S");
58
- const SOLANA_RPC = process.env.NEXT_PUBLIC_HELIUS_RPC_URL || process.env.NEXT_PUBLIC_SOLANA_RPC_URL || "";
58
+ const SOLANA_RPC = process.env.NEXT_PUBLIC_SOLANA_RPC_URL || "";
59
59
  const COIN_INFO = {
60
60
  usdc: { symbol: 'USDC', name: 'USD Coin', icon: '💵' },
61
61
  usdt: { symbol: 'USDT', name: 'Tether', icon: '💴' },
@@ -10,7 +10,7 @@ const wallet_adapter_react_ui_1 = require("@solana/wallet-adapter-react-ui");
10
10
  require("@solana/wallet-adapter-react-ui/styles.css");
11
11
  function SolanaWalletProvider({ children }) {
12
12
  const endpoint = (0, react_1.useMemo)(() => {
13
- return process.env.NEXT_PUBLIC_HELIUS_RPC_URL || process.env.NEXT_PUBLIC_SOLANA_RPC_URL || '';
13
+ return process.env.NEXT_PUBLIC_SOLANA_RPC_URL || '';
14
14
  }, []);
15
15
  const wallets = (0, react_1.useMemo)(() => [], []);
16
16
  return ((0, jsx_runtime_1.jsx)(wallet_adapter_react_1.ConnectionProvider, { endpoint: endpoint, children: (0, jsx_runtime_1.jsx)(wallet_adapter_react_1.WalletProvider, { wallets: wallets, autoConnect: true, children: (0, jsx_runtime_1.jsx)(wallet_adapter_react_ui_1.WalletModalProvider, { children: children }) }) }));
@@ -15,7 +15,7 @@ const solana_pay_1 = require("../../lib/solana/solana-pay");
15
15
  const next_intl_1 = require("next-intl");
16
16
  const STABLECOIN_MINTS = { usdc: new web3_js_1.PublicKey("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"), usdt: new web3_js_1.PublicKey("Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB") };
17
17
  const STABLECOIN_VAULTS = { usdc: new web3_js_1.PublicKey("5L8vPTvGH14keLq4R6CGGvSFksZFjb7bRPXarCwZbmUA"), usdt: new web3_js_1.PublicKey("BnHA9jSm88wzQS4c2nCgTXch1Byzc3FWn2G7Wgrvazy3") };
18
- const SOLANA_RPC = process.env.NEXT_PUBLIC_HELIUS_RPC_URL || process.env.NEXT_PUBLIC_SOLANA_RPC_URL || "";
18
+ const SOLANA_RPC = process.env.NEXT_PUBLIC_SOLANA_RPC_URL || "";
19
19
  const COIN_INFO = { usdc: { symbol: 'USDC', name: 'USD Coin', icon: '💵' }, usdt: { symbol: 'USDT', name: 'Tether', icon: '💴' } };
20
20
  function PublicMiningModal({ isOpen, onClose, onSuccess }) {
21
21
  const t = (0, next_intl_1.useTranslations)("miningModal");
@@ -5,7 +5,8 @@ exports.useAuth = void 0;
5
5
  // Native Auth Hook — 同步初始化 + 缓存,刷新无闪烁
6
6
  const react_1 = require("react");
7
7
  const auth_service_1 = require("../lib/auth-service");
8
- const api_service_1 = require("../lib/api-service");
8
+ const core_1 = require("../lib/api/core");
9
+ const getCurrentUserProfile = () => (0, core_1.fetchApi)('/users/profile');
9
10
  const ROLE_HIERARCHY = {
10
11
  'admin': ['admin', 'agent', 'user'],
11
12
  'agent': ['agent', 'user'],
@@ -60,7 +61,7 @@ const useAuth = () => {
60
61
  const [error, setError] = (0, react_1.useState)(null);
61
62
  const fetchUserInfo = (0, react_1.useCallback)(async (nativeUser) => {
62
63
  try {
63
- const data = await (0, api_service_1.getCurrentUserProfile)();
64
+ const data = await getCurrentUserProfile();
64
65
  if (data.success && data.user) {
65
66
  const info = {
66
67
  uid: data.user.uid,
@@ -5,12 +5,5 @@ export declare const apiService: {
5
5
  put: (endpoint: string, data?: unknown) => Promise<any>;
6
6
  delete: (endpoint: string) => Promise<any>;
7
7
  };
8
- export { getStrategies, getStrategyDetails, startStrategy, stopStrategy, createStrategy, deleteStrategy, updateStrategy, getEnergyOrders, getEnergyHistory, batchPreviewStrategies, batchUpdateStrategies, getBatchHistory } from './strategies';
9
- export { getAccountInfo, getAccountInfoRaw, getUserProfile, getBalanceHistory, getTradeHistory, saveApiKey, getKeyHistory, getAllExchangeAccounts, getExchangeAccounts, saveApiKeys, deleteApiKeys, getUserLogs, getUserSymbols, addUserSymbol, getFundPoolInfo, updateFundPoolSettings, getCurrentUserProfile, getUserList, updateUserRole, dbHealthCheck, getTraderPermissions, getTraderPermission, updateTraderPermission, deleteTraderPermission } from './account';
10
- export { getSystemSettings, updateSystemSettings, auditStrategy, listUserStrategies, getUserStrategySnapshot, getCoinRankings, getCoinMarketTiers, refreshCoinRankings, searchCoin, getCoinAmplitudeHistory, getBtcSignal, getSurfingRanking, analyzeSurfingSymbol, getSurfingSignals, getSurfingHistory, getAmplitudeRankingsV2, getAmplitudeSymbolDetail, getAmplitudeTrackedSymbols, refreshAmplitudeData, getAmplitudeHistorySnapshots } from './admin';
11
- export { getPnLAnalysis, getTradingStats, getRiskMetrics, getStrategyPerformance, getSymbolAnalysis, getTimeAnalysis, getCapitalAnalysis, getFeeAnalysis, getOrderSourceAnalysis } from './analytics';
12
- export type { TradingStatsData, RiskMetricsData, StrategyPerformanceData, SymbolAnalysisData, TimeAnalysisData, CapitalAnalysisData, FeeAnalysisData, OrderSourceAnalysisData, PnLAnalysisData } from './analytics';
13
- export { getAIProducts, getAIProductDetail, submitAIRequest, getUserAIRequests, getAIRequestDetail, cancelAIRequest, stopAIStrategy, getPendingAIRequests, acceptAIRequest, configureAIStrategy, startAIStrategy, rejectAIRequest, chatWithAIProduct, getMyAIRequests, getUnits, getUnitDetails, createUnit, updateUnit, deleteUnit, getUnitMembers, getTerritoryNameStatus, updateTerritoryName, getActiveAuctions, getAuctionDetails, createAuction, placeBid, endAuction, getAuctionHistory, getMyBids, refundDeposit, getMCCBalance, getMCCLockPeriods, getMCCMintingHistory, getMCCMintingStats, withdrawMCC, getMCCWithdrawalHistory, getMCCHistory, getRechargeHistory, withdrawFromPDA, getPDABalance, getPDAAddress, getUserRank, getUserLevelProgress, getMiningWeight, getLevelSystemConfig, getLevelProfile, getLevelProfileByWallet, getUserLevelStatus, getStationKPI, getTechBonus, getDistributionPlans, setUnitDistributionPlan, getVaultBalance, getVaultRecords, executeVaultDistribution, depositToVault, getUnitsSummary, getUnitDetailedStats, getUnitIncomeChart, getUnitKPIHistory, getUnitMemberRanking, cancelBinanceOrder, placeBinanceOrder, modifyBinanceOrder, joinStation, leaveStation, joinStationQueue, getQueueStatus, cancelQueue, getAdminQueueStatus, processQueue, checkExpansionNeeded, triggerExpansion, getStationIncome, getManagerIncome, getTeamCustodySummary, getMCDBalance, getMCDTransactions, getMCDDailyRewards, spendMCD, checkMiningWallet, createMiningRequest, confirmMiningPayment, buildMiningTransaction, getMiningRatio, getMiningRequestStatus, getX402MiningHistory, getTerritoryNftCollection, getTerritoryNftMetadata, getUserTerritoryNfts, getUnitTerritoryNft, prepareMintTerritoryNft, prepareTransferTerritoryNft, getOnchainAuctionConfig, getActiveOnchainAuctions, getOnchainAuctionDetails, getOnchainAuctionBids, getUserOnchainBids, getUserOnchainAuctions, prepareCreateOnchainAuction, preparePlaceOnchainBid, prepareSettleOnchainAuction, prepareCancelOnchainAuction, getFragmentConfig, getFragmentVaults, getFragmentVault, getUserFragmentHoldings, getVaultHolders, prepareFragmentize, prepareBuyFragment, prepareRedeemNft, getLendingPool, getLendingPoolStats, getUserLendingPosition, getUserLoans, getLoanDetails, getLpBalance, calculateLendingInterest, estimateBorrowCost, prepareLendingDeposit, prepareLendingWithdraw, prepareLendingBorrow, prepareLendingRepay, prepareLendingLiquidate, getPublicMiningPreflight, createPublicMiningRequest, buildPublicMcdTransaction, confirmPublicMiningPayment } from './services';
14
- export { getWalletBalance, getMCCBalance as getBlockchainMCCBalance, refreshWalletBalance, invalidateWalletCache, getPoolStatus, getTokenFromBalance, formatTokenBalance } from './blockchain';
15
- export type { TokenBalance, WalletBalance, PoolStatus } from './blockchain';
16
- export type { TerritoryNameStatus, TerritoryNameUpdateResult } from './services';
8
+ export * from './services';
9
+ export { getMCCBalance as getOnchainMCCBalance, getPoolStatus, type PoolStatus, } from './blockchain';