diff --git a/src/pages/DebugPage.tsx b/src/pages/DebugPage.tsx new file mode 100644 index 0000000..f151ba3 --- /dev/null +++ b/src/pages/DebugPage.tsx @@ -0,0 +1,103 @@ +import { Fragment, useEffect, useMemo, useRef, useState } from 'react'; +import messageManager from '@/lib/waku'; +import { MessageType } from '@/types/waku'; +import type { OpchanMessage } from '@/types/forum'; + +interface ReceivedMessage { + receivedAt: number; + message: OpchanMessage; +} + +export default function DebugPage() { + const [messages, setMessages] = useState([]); + const unsubscribeRef = useRef<(() => void) | null>(null); + + useEffect(() => { + // Subscribe to inbound messages from reliable channel + unsubscribeRef.current = messageManager.onMessageReceived(msg => { + setMessages(prev => [{ receivedAt: Date.now(), message: msg }, ...prev].slice(0, 500)); + }); + + return () => { + unsubscribeRef.current?.(); + }; + }, []); + + const formatTs = (ts: number) => new Date(ts).toLocaleTimeString(); + + const typeCounts = useMemo(() => { + const counts: Record = {}; + for (const item of messages) { + counts[item.message.type] = (counts[item.message.type] || 0) + 1; + } + return counts; + }, [messages]); + + return ( +
+

Reliable Channel Debug

+
+ Total received: {messages.length} +
+ +
+ {Object.values(MessageType).map(t => ( +
+ {t}: {typeCounts[t] || 0} +
+ ))} +
+ +
+
Recent messages
+
+
Received
+
Type
+
ID / Author
+
Msg Timestamp
+ {messages.map(m => ( + +
{formatTs(m.receivedAt)}
+
{m.message.type}
+
+ {m.message.id} — {m.message.author} +
+
{formatTs(m.message.timestamp)}
+
+ ))} +
+
+
+ ); +}