Skip to content

Commit 588547d

Browse files
author
robot
committed
feat: rpc-caller
1 parent b4cfb88 commit 588547d

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

44 files changed

+7446
-0
lines changed

docs/features/rpc-caller.md

Lines changed: 1109 additions & 0 deletions
Large diffs are not rendered by default.

package.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,11 @@
1616
"@radix-ui/react-icons": "^1.3.2",
1717
"@radix-ui/react-label": "^2.1.8",
1818
"@radix-ui/react-scroll-area": "^1.2.10",
19+
"@radix-ui/react-select": "^2.2.6",
1920
"@radix-ui/react-separator": "^1.1.8",
2021
"@radix-ui/react-slot": "^1.2.4",
22+
"@radix-ui/react-tabs": "^1.1.13",
23+
"@radix-ui/react-toast": "^1.2.15",
2124
"@radix-ui/react-tooltip": "^1.2.8",
2225
"@solana/web3.js": "^1.98.2",
2326
"bip39": "^3.1.0",
@@ -33,6 +36,7 @@
3336
"react-json-view": "^1.21.3",
3437
"react-textarea-autosize": "^8.5.9",
3538
"recharts": "^3.5.1",
39+
"sonner": "^2.0.7",
3640
"tailwind-merge": "^3.4.0",
3741
"viem": "^2.40.3"
3842
},

pnpm-lock.yaml

Lines changed: 142 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/app/evm/rpc-caller/page.tsx

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
'use client';
2+
3+
import EvmRpcCaller from '@/components/features/evm/rpc-caller/EvmRpcCaller';
4+
5+
export default function Page() {
6+
return (
7+
<div className="flex flex-col items-center justify-items-center"
8+
style={{ fontFamily: 'Monaco, "Bitstream Vera Sans Mono", "Lucida Console", Terminal, "Courier New", monospace' }}>
9+
<article className="w-full flex flex-col items-start">
10+
<EvmRpcCaller />
11+
</article>
12+
<footer className="flex gap-6 flex-wrap items-center justify-center">
13+
</footer>
14+
</div>
15+
);
16+
}
17+

src/app/layout.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import { AppSidebar } from "@/components/layout/app-sidebar"
2222

2323
import { ThemeProvider } from "@/components/layout/theme-provider"
2424
import { SiteHeader } from "@/components/layout/site-header"
25+
import { Toaster } from '@/components/layout/sonner-toaster';
2526

2627
export default function RootLayout({
2728
children,
@@ -46,6 +47,7 @@ export default function RootLayout({
4647
{children}
4748
</main>
4849
</SidebarProvider>
50+
<Toaster />
4951
</ThemeProvider>
5052
</body>
5153
</html>

src/app/sol/rpc-caller/page.tsx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
import SolanaRpcCaller from '@/components/features/sol/rpc-caller/SolanaRpcCaller';
2+
3+
export default function SolanaRpcCallerPage() {
4+
return <SolanaRpcCaller />;
5+
}
6+

src/app/sui/rpc-caller/page.tsx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
import SuiRpcCaller from '@/components/features/sui/rpc-caller/SuiRpcCaller';
2+
3+
export default function SuiRpcCallerPage() {
4+
return <SuiRpcCaller />;
5+
}
6+

src/app/tron/rpc-caller/page.tsx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
import TronRpcCaller from '@/components/features/tron/rpc-caller/TronRpcCaller';
2+
3+
export default function TronRpcCallerPage() {
4+
return <TronRpcCaller />;
5+
}
6+
Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
'use client';
2+
3+
import { Button } from '@/components/ui/button';
4+
import {
5+
Card,
6+
CardContent,
7+
CardDescription,
8+
CardHeader,
9+
CardTitle,
10+
} from '@/components/ui/card';
11+
import { Trash2, X } from 'lucide-react';
12+
import { type CallHistoryItem } from './types';
13+
14+
interface CallHistoryProps {
15+
callHistory: CallHistoryItem[];
16+
onItemClick: (method: string, params: unknown[]) => void;
17+
onDeleteItem: (id: string) => void;
18+
onClearAll: () => void;
19+
}
20+
21+
export default function CallHistory({
22+
callHistory,
23+
onItemClick,
24+
onDeleteItem,
25+
onClearAll,
26+
}: CallHistoryProps) {
27+
const handleItemClick = (item: CallHistoryItem) => {
28+
onItemClick(item.method, item.params);
29+
};
30+
31+
return (
32+
<Card>
33+
<CardHeader>
34+
<div className="flex items-center justify-between">
35+
<div>
36+
<CardTitle>Call History</CardTitle>
37+
<CardDescription>Recent call records</CardDescription>
38+
</div>
39+
{callHistory.length > 0 && (
40+
<Button
41+
variant="ghost"
42+
size="sm"
43+
onClick={onClearAll}
44+
className="h-7 px-2 text-xs text-destructive hover:text-destructive"
45+
>
46+
<Trash2 className="h-3 w-3 mr-1" />
47+
Clear All
48+
</Button>
49+
)}
50+
</div>
51+
</CardHeader>
52+
<CardContent>
53+
{callHistory.length === 0 ? (
54+
<p className="text-sm text-muted-foreground">No history yet</p>
55+
) : (
56+
<div className="space-y-1.5 max-h-[300px] overflow-y-auto">
57+
{callHistory.map((item) => (
58+
<div
59+
key={item.id}
60+
className="rounded-md border px-3 py-2 text-xs group hover:bg-muted/50"
61+
>
62+
<div
63+
className="cursor-pointer"
64+
onClick={() => handleItemClick(item)}
65+
>
66+
<div className="flex items-center justify-between mb-0.5">
67+
<span className="font-mono font-medium">{item.method}</span>
68+
<span className="text-muted-foreground">
69+
{new Date(item.timestamp).toLocaleTimeString()}
70+
</span>
71+
</div>
72+
<div className="flex items-center justify-between">
73+
<div className="flex items-center gap-1.5">
74+
{item.error ? (
75+
<span className="text-destructive">✗ Failed</span>
76+
) : (
77+
<span className="text-green-600">✓ Success</span>
78+
)}
79+
{item.duration && (
80+
<span className="text-muted-foreground">
81+
{item.duration}ms
82+
</span>
83+
)}
84+
</div>
85+
<Button
86+
variant="ghost"
87+
size="sm"
88+
className="h-5 px-1.5 text-destructive hover:text-destructive opacity-0 group-hover:opacity-100 transition-opacity"
89+
onClick={(e) => {
90+
e.stopPropagation();
91+
onDeleteItem(item.id);
92+
}}
93+
>
94+
<X className="h-3 w-3" />
95+
</Button>
96+
</div>
97+
</div>
98+
</div>
99+
))}
100+
</div>
101+
)}
102+
</CardContent>
103+
</Card>
104+
);
105+
}
106+

0 commit comments

Comments
 (0)