bitchat-node 0.1.0 → 0.1.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.
- package/README.md +94 -23
- package/dist/client.d.ts +1 -0
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +143 -28
- package/dist/client.js.map +1 -1
- package/dist/debug.d.ts +39 -0
- package/dist/debug.d.ts.map +1 -0
- package/dist/debug.js +89 -0
- package/dist/debug.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/mesh/router.d.ts.map +1 -1
- package/dist/mesh/router.js +9 -1
- package/dist/mesh/router.js.map +1 -1
- package/dist/protocol/binary.d.ts +1 -1
- package/dist/protocol/binary.d.ts.map +1 -1
- package/dist/protocol/binary.js +2 -2
- package/dist/protocol/binary.js.map +1 -1
- package/dist/session/manager.d.ts.map +1 -1
- package/dist/session/manager.js +18 -1
- package/dist/session/manager.js.map +1 -1
- package/dist/transport/ble.d.ts +15 -0
- package/dist/transport/ble.d.ts.map +1 -1
- package/dist/transport/ble.js +63 -16
- package/dist/transport/ble.js.map +1 -1
- package/dist/ui/html.d.ts +5 -0
- package/dist/ui/html.d.ts.map +1 -0
- package/dist/ui/html.js +506 -0
- package/dist/ui/html.js.map +1 -0
- package/dist/ui/server.d.ts +5 -1
- package/dist/ui/server.d.ts.map +1 -1
- package/dist/ui/server.js +61 -255
- package/dist/ui/server.js.map +1 -1
- package/package.json +3 -2
- package/src/client.ts +159 -34
- package/src/debug.ts +119 -0
- package/src/index.ts +11 -0
- package/src/mesh/router.ts +11 -1
- package/src/protocol/binary.ts +2 -2
- package/src/session/manager.ts +19 -1
- package/src/transport/ble.ts +70 -16
- package/src/ui/html.ts +506 -0
- package/src/ui/server.ts +78 -258
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ble.js","sourceRoot":"","sources":["../../src/transport/ble.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ble.js","sourceRoot":"","sources":["../../src/transport/ble.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Enhanced Bitchat Web UI with Debug Panel
|
|
3
|
+
*/
|
|
4
|
+
export declare const HTML = "<!DOCTYPE html>\n<html>\n<head>\n <meta charset=\"UTF-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n <title>Bitchat Node</title>\n <style>\n * { box-sizing: border-box; margin: 0; padding: 0; }\n body { \n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n background: #0f0f1a; color: #eee; height: 100vh; display: flex; flex-direction: column;\n }\n \n /* Header */\n header { \n background: #1a1a2e; padding: 12px 20px; border-bottom: 1px solid #2a2a4a;\n display: flex; justify-content: space-between; align-items: center;\n }\n header h1 { font-size: 16px; font-weight: 600; display: flex; align-items: center; gap: 8px; }\n header h1 .logo { font-size: 20px; }\n .header-info { display: flex; align-items: center; gap: 16px; }\n .status { \n font-size: 11px; padding: 4px 10px; border-radius: 12px;\n background: #2a2a4a; color: #888;\n }\n .status.connected { background: #064e3b; color: #34d399; }\n .peer-count { font-size: 11px; color: #60a5fa; }\n .my-info { font-size: 11px; color: #888; font-family: monospace; }\n \n /* Tab Navigation */\n .tabs {\n background: #1a1a2e; display: flex; border-bottom: 1px solid #2a2a4a;\n }\n .tab {\n padding: 10px 20px; cursor: pointer; font-size: 13px; color: #888;\n border-bottom: 2px solid transparent; transition: all 0.2s;\n }\n .tab:hover { color: #ccc; }\n .tab.active { color: #60a5fa; border-bottom-color: #60a5fa; }\n .tab .badge {\n background: #dc2626; color: white; font-size: 10px; padding: 2px 6px;\n border-radius: 10px; margin-left: 6px;\n }\n \n /* Main Layout */\n main { flex: 1; display: flex; overflow: hidden; }\n .panel { display: none; flex: 1; flex-direction: column; overflow: hidden; }\n .panel.active { display: flex; }\n \n /* Chat Panel */\n .chat-container { display: flex; flex: 1; overflow: hidden; }\n .messages-area { flex: 1; display: flex; flex-direction: column; }\n .messages { \n flex: 1; overflow-y: auto; padding: 16px; display: flex; flex-direction: column; gap: 8px;\n }\n .message { \n background: #1a1a2e; padding: 10px 14px; border-radius: 12px; max-width: 75%;\n animation: fadeIn 0.15s ease;\n }\n @keyframes fadeIn { from { opacity: 0; transform: translateY(4px); } }\n .message.mine { background: #1e3a5f; align-self: flex-end; }\n .message.private { border-left: 3px solid #ec4899; }\n .message .meta { font-size: 10px; color: #666; margin-bottom: 4px; }\n .message .meta .nickname { color: #60a5fa; font-weight: 500; }\n .message .meta .private-tag { color: #ec4899; margin-left: 6px; }\n .message .content { line-height: 1.4; word-wrap: break-word; font-size: 14px; }\n .system { text-align: center; font-size: 11px; color: #555; padding: 6px; }\n \n /* Input Area */\n .input-area { background: #1a1a2e; padding: 12px 16px; border-top: 1px solid #2a2a4a; }\n .dm-indicator { \n font-size: 11px; color: #ec4899; margin-bottom: 8px; \n display: flex; align-items: center; gap: 8px;\n }\n .dm-indicator .clear { cursor: pointer; color: #888; }\n .dm-indicator .clear:hover { color: #fff; }\n .input-row { display: flex; gap: 8px; }\n input[type=\"text\"] { \n flex: 1; background: #0f0f1a; border: 1px solid #2a2a4a; border-radius: 8px;\n padding: 10px 14px; color: #eee; font-size: 14px; outline: none;\n }\n input[type=\"text\"]:focus { border-color: #3b82f6; }\n input[type=\"text\"]::placeholder { color: #444; }\n button { \n background: #3b82f6; color: white; border: none; border-radius: 8px;\n padding: 10px 20px; font-size: 13px; font-weight: 500; cursor: pointer;\n }\n button:hover { background: #2563eb; }\n button:disabled { background: #374151; cursor: not-allowed; }\n button.secondary { background: #2a2a4a; }\n button.secondary:hover { background: #3a3a5a; }\n \n /* Peers Sidebar */\n .peers-panel {\n width: 180px; background: #1a1a2e; border-left: 1px solid #2a2a4a;\n padding: 12px; overflow-y: auto;\n }\n .peers-panel h3 { \n font-size: 10px; color: #666; margin-bottom: 10px; \n text-transform: uppercase; letter-spacing: 1px;\n }\n .peer { \n padding: 8px 10px; background: #0f0f1a; border-radius: 6px; margin-bottom: 6px;\n font-size: 12px; cursor: pointer; transition: all 0.15s;\n }\n .peer:hover { background: #1e3a5f; }\n .peer.selected { background: #3b82f6; }\n .peer .peer-nick { font-weight: 500; }\n .peer .peer-id { font-size: 9px; color: #555; margin-top: 2px; font-family: monospace; }\n \n /* Debug Panel */\n .debug-panel { padding: 0; display: flex; flex-direction: column; }\n .debug-toolbar {\n background: #1a1a2e; padding: 10px 16px; border-bottom: 1px solid #2a2a4a;\n display: flex; gap: 8px; align-items: center;\n }\n .debug-toolbar label { font-size: 11px; color: #888; display: flex; align-items: center; gap: 4px; }\n .debug-toolbar input[type=\"checkbox\"] { accent-color: #3b82f6; }\n .debug-toolbar select {\n background: #0f0f1a; border: 1px solid #2a2a4a; border-radius: 4px;\n padding: 4px 8px; color: #eee; font-size: 11px;\n }\n .debug-log {\n flex: 1; overflow-y: auto; padding: 8px; font-family: 'SF Mono', Monaco, monospace;\n font-size: 11px; line-height: 1.6; background: #0a0a12;\n }\n .debug-entry { padding: 4px 8px; border-radius: 4px; margin-bottom: 2px; }\n .debug-entry.ble-rx { background: #1e293b; border-left: 3px solid #3b82f6; }\n .debug-entry.ble-tx { background: #1e2d1e; border-left: 3px solid #22c55e; }\n .debug-entry.session { background: #2d1e2d; border-left: 3px solid #a855f7; }\n .debug-entry.error { background: #2d1e1e; border-left: 3px solid #ef4444; }\n .debug-entry .time { color: #555; }\n .debug-entry .tag { \n font-weight: 600; padding: 1px 4px; border-radius: 3px; margin: 0 4px;\n }\n .debug-entry.ble-rx .tag { color: #60a5fa; }\n .debug-entry.ble-tx .tag { color: #4ade80; }\n .debug-entry.session .tag { color: #c084fc; }\n .debug-entry.error .tag { color: #f87171; }\n .debug-entry .hex { color: #fbbf24; word-break: break-all; }\n .debug-entry .decoded { color: #94a3b8; margin-top: 2px; font-size: 10px; }\n \n /* Sessions Panel */\n .sessions-panel { padding: 16px; }\n .session-card {\n background: #1a1a2e; border-radius: 8px; padding: 12px 16px; margin-bottom: 12px;\n }\n .session-card h4 { font-size: 13px; color: #60a5fa; margin-bottom: 8px; font-family: monospace; }\n .session-card .status-row { \n display: flex; justify-content: space-between; font-size: 11px; \n color: #888; margin-bottom: 4px;\n }\n .session-card .status-value { color: #eee; }\n .session-card .status-value.success { color: #4ade80; }\n .session-card .status-value.pending { color: #fbbf24; }\n .session-card .status-value.error { color: #f87171; }\n </style>\n</head>\n<body>\n <header>\n <div>\n <h1><span class=\"logo\">\u26A1</span> Bitchat Node</h1>\n </div>\n <div class=\"header-info\">\n <span class=\"peer-count\" id=\"peer-count\">0 peers</span>\n <span class=\"status\" id=\"status\">Connecting...</span>\n <span class=\"my-info\" id=\"my-info\"></span>\n </div>\n </header>\n \n <div class=\"tabs\">\n <div class=\"tab active\" data-panel=\"chat\">\uD83D\uDCAC Chat</div>\n <div class=\"tab\" data-panel=\"debug\">\uD83D\uDD0D Debug <span class=\"badge\" id=\"debug-count\" style=\"display:none\">0</span></div>\n <div class=\"tab\" data-panel=\"sessions\">\uD83D\uDD10 Sessions</div>\n </div>\n \n <main>\n <!-- Chat Panel -->\n <div class=\"panel active\" id=\"panel-chat\">\n <div class=\"chat-container\">\n <div class=\"messages-area\">\n <div class=\"messages\" id=\"messages\"></div>\n <div class=\"input-area\">\n <div class=\"dm-indicator\" id=\"dm-indicator\" style=\"display:none\">\n Sending to: <strong id=\"dm-target\"></strong>\n <span class=\"clear\" onclick=\"clearDM()\">\u2715 clear</span>\n </div>\n <div class=\"input-row\">\n <input type=\"text\" id=\"input\" placeholder=\"Type a message...\" autocomplete=\"off\">\n <button id=\"send\">Send</button>\n </div>\n </div>\n </div>\n <div class=\"peers-panel\">\n <h3>Peers</h3>\n <div id=\"peers-list\"></div>\n </div>\n </div>\n </div>\n \n <!-- Debug Panel -->\n <div class=\"panel\" id=\"panel-debug\">\n <div class=\"debug-panel\">\n <div class=\"debug-toolbar\">\n <label><input type=\"checkbox\" id=\"filter-ble\" checked> BLE</label>\n <label><input type=\"checkbox\" id=\"filter-session\" checked> Session</label>\n <label><input type=\"checkbox\" id=\"filter-error\" checked> Errors</label>\n <select id=\"filter-direction\">\n <option value=\"all\">All directions</option>\n <option value=\"rx\">RX only</option>\n <option value=\"tx\">TX only</option>\n </select>\n <button class=\"secondary\" onclick=\"clearDebug()\">Clear</button>\n <label style=\"margin-left:auto\"><input type=\"checkbox\" id=\"auto-scroll\" checked> Auto-scroll</label>\n </div>\n <div class=\"debug-log\" id=\"debug-log\"></div>\n </div>\n </div>\n \n <!-- Sessions Panel -->\n <div class=\"panel\" id=\"panel-sessions\">\n <div class=\"sessions-panel\" id=\"sessions-list\">\n <p style=\"color:#666;font-size:12px\">No active sessions</p>\n </div>\n </div>\n </main>\n \n <script>\n const messagesEl = document.getElementById('messages');\n const inputEl = document.getElementById('input');\n const sendBtn = document.getElementById('send');\n const statusEl = document.getElementById('status');\n const peerCountEl = document.getElementById('peer-count');\n const peersListEl = document.getElementById('peers-list');\n const myInfoEl = document.getElementById('my-info');\n const debugLogEl = document.getElementById('debug-log');\n const debugCountEl = document.getElementById('debug-count');\n const dmIndicatorEl = document.getElementById('dm-indicator');\n const dmTargetEl = document.getElementById('dm-target');\n const sessionsListEl = document.getElementById('sessions-list');\n \n let ws;\n let myPeerID = '';\n let selectedPeer = null;\n let debugCount = 0;\n const peers = new Map();\n const sessions = new Map();\n \n // Tab switching\n document.querySelectorAll('.tab').forEach(tab => {\n tab.addEventListener('click', () => {\n document.querySelectorAll('.tab').forEach(t => t.classList.remove('active'));\n document.querySelectorAll('.panel').forEach(p => p.classList.remove('active'));\n tab.classList.add('active');\n document.getElementById('panel-' + tab.dataset.panel).classList.add('active');\n if (tab.dataset.panel === 'debug') {\n debugCount = 0;\n debugCountEl.style.display = 'none';\n }\n });\n });\n \n function connect() {\n ws = new WebSocket('ws://' + location.host + '/ws');\n \n ws.onopen = () => {\n statusEl.textContent = 'Connected';\n statusEl.className = 'status connected';\n };\n \n ws.onclose = () => {\n statusEl.textContent = 'Disconnected';\n statusEl.className = 'status';\n setTimeout(connect, 2000);\n };\n \n ws.onmessage = (e) => {\n const msg = JSON.parse(e.data);\n handleMessage(msg);\n };\n }\n \n function handleMessage(msg) {\n switch (msg.type) {\n case 'init':\n myPeerID = msg.peerID;\n myInfoEl.textContent = msg.nickname + ' \u00B7 ' + msg.peerID.slice(0, 8) + '...';\n break;\n \n case 'message':\n addMessage(msg.message);\n break;\n \n case 'peer:connected':\n peers.set(msg.peer.peerID, msg.peer);\n updatePeersList();\n addSystem(msg.peer.nickname + ' joined');\n break;\n \n case 'peer:disconnected':\n const peer = peers.get(msg.peerID);\n peers.delete(msg.peerID);\n updatePeersList();\n if (peer) addSystem(peer.nickname + ' left');\n break;\n \n case 'peers':\n peers.clear();\n msg.peers.forEach(p => peers.set(p.peerID, p));\n updatePeersList();\n break;\n \n case 'debug':\n addDebugEntry(msg);\n break;\n \n case 'session':\n updateSession(msg);\n break;\n \n case 'error':\n addSystem('Error: ' + msg.error);\n addDebugEntry({ category: 'error', text: msg.error, time: Date.now() });\n break;\n }\n }\n \n function addMessage(msg) {\n const div = document.createElement('div');\n div.className = 'message' + (msg.sender === myPeerID ? ' mine' : '') + (msg.isPrivate ? ' private' : '');\n div.innerHTML = \n '<div class=\"meta\">' +\n '<span class=\"nickname\">' + escapeHtml(msg.senderNickname || 'unknown') + '</span> \u00B7 ' +\n new Date(msg.timestamp).toLocaleTimeString() +\n (msg.isPrivate ? '<span class=\"private-tag\">\uD83D\uDD12 private</span>' : '') +\n '</div>' +\n '<div class=\"content\">' + escapeHtml(msg.content || msg.text) + '</div>';\n messagesEl.appendChild(div);\n messagesEl.scrollTop = messagesEl.scrollHeight;\n }\n \n function addSystem(text) {\n const div = document.createElement('div');\n div.className = 'system';\n div.textContent = '\u2014 ' + text + ' \u2014';\n messagesEl.appendChild(div);\n messagesEl.scrollTop = messagesEl.scrollHeight;\n }\n \n function addDebugEntry(entry) {\n const categoryClass = entry.category || 'ble-rx';\n const filterCheckbox = document.getElementById('filter-' + (categoryClass.split('-')[0] || 'ble'));\n const directionFilter = document.getElementById('filter-direction').value;\n \n // Apply filters\n if (filterCheckbox && !filterCheckbox.checked) return;\n if (directionFilter === 'rx' && categoryClass === 'ble-tx') return;\n if (directionFilter === 'tx' && categoryClass === 'ble-rx') return;\n \n const div = document.createElement('div');\n div.className = 'debug-entry ' + categoryClass;\n \n const time = new Date(entry.time || Date.now()).toLocaleTimeString();\n const tag = entry.tag || categoryClass.toUpperCase();\n \n let content = '<span class=\"time\">' + time + '</span>' +\n '<span class=\"tag\">[' + tag + ']</span> ';\n \n if (entry.hex) {\n content += '<span class=\"hex\">' + entry.hex + '</span>';\n }\n if (entry.text) {\n content += escapeHtml(entry.text);\n }\n if (entry.decoded) {\n content += '<div class=\"decoded\">\u21B3 ' + escapeHtml(entry.decoded) + '</div>';\n }\n \n div.innerHTML = content;\n debugLogEl.appendChild(div);\n \n // Update badge if not viewing debug\n if (!document.getElementById('panel-debug').classList.contains('active')) {\n debugCount++;\n debugCountEl.textContent = debugCount > 99 ? '99+' : debugCount;\n debugCountEl.style.display = 'inline';\n }\n \n if (document.getElementById('auto-scroll').checked) {\n debugLogEl.scrollTop = debugLogEl.scrollHeight;\n }\n }\n \n function clearDebug() {\n debugLogEl.innerHTML = '';\n }\n \n function updateSession(msg) {\n sessions.set(msg.peerID, msg);\n renderSessions();\n }\n \n function renderSessions() {\n if (sessions.size === 0) {\n sessionsListEl.innerHTML = '<p style=\"color:#666;font-size:12px\">No active sessions</p>';\n return;\n }\n \n sessionsListEl.innerHTML = '';\n sessions.forEach((session, peerID) => {\n const card = document.createElement('div');\n card.className = 'session-card';\n \n const statusClass = session.established ? 'success' : (session.error ? 'error' : 'pending');\n const statusText = session.established ? 'Established' : (session.error || 'Handshaking...');\n \n card.innerHTML = \n '<h4>' + peerID.slice(0, 16) + '...</h4>' +\n '<div class=\"status-row\"><span>Status:</span><span class=\"status-value ' + statusClass + '\">' + statusText + '</span></div>' +\n '<div class=\"status-row\"><span>Direction:</span><span class=\"status-value\">' + (session.initiator ? 'Initiator' : 'Responder') + '</span></div>' +\n '<div class=\"status-row\"><span>TX Nonce:</span><span class=\"status-value\">' + (session.txNonce ?? '\u2014') + '</span></div>' +\n '<div class=\"status-row\"><span>RX Nonce:</span><span class=\"status-value\">' + (session.rxNonce ?? '\u2014') + '</span></div>';\n \n sessionsListEl.appendChild(card);\n });\n }\n \n function updatePeersList() {\n peerCountEl.textContent = peers.size + ' peer' + (peers.size !== 1 ? 's' : '');\n peersListEl.innerHTML = '';\n \n if (peers.size === 0) {\n peersListEl.innerHTML = '<p style=\"color:#555;font-size:11px;padding:8px\">No peers nearby</p>';\n return;\n }\n \n peers.forEach((peer, id) => {\n const div = document.createElement('div');\n div.className = 'peer' + (selectedPeer === id ? ' selected' : '');\n div.innerHTML = \n '<div class=\"peer-nick\">' + escapeHtml(peer.nickname) + '</div>' +\n '<div class=\"peer-id\">' + id.slice(0, 12) + '...</div>';\n div.onclick = () => selectPeer(id, peer.nickname);\n peersListEl.appendChild(div);\n });\n }\n \n function selectPeer(id, nickname) {\n if (selectedPeer === id) {\n clearDM();\n } else {\n selectedPeer = id;\n dmTargetEl.textContent = nickname;\n dmIndicatorEl.style.display = 'flex';\n inputEl.placeholder = 'Private message to ' + nickname + '...';\n updatePeersList();\n }\n }\n \n function clearDM() {\n selectedPeer = null;\n dmIndicatorEl.style.display = 'none';\n inputEl.placeholder = 'Type a message...';\n updatePeersList();\n }\n window.clearDM = clearDM;\n \n function send() {\n const text = inputEl.value.trim();\n if (!text || !ws || ws.readyState !== WebSocket.OPEN) return;\n \n addMessage({\n id: Date.now().toString(),\n sender: myPeerID,\n senderNickname: 'me',\n content: text,\n timestamp: new Date().toISOString(),\n isPrivate: !!selectedPeer\n });\n \n ws.send(JSON.stringify({\n type: 'send',\n text: text,\n to: selectedPeer || null\n }));\n \n inputEl.value = '';\n }\n \n function escapeHtml(text) {\n const div = document.createElement('div');\n div.textContent = text;\n return div.innerHTML;\n }\n \n sendBtn.onclick = send;\n inputEl.onkeydown = (e) => { if (e.key === 'Enter') send(); };\n \n connect();\n </script>\n</body>\n</html>";
|
|
5
|
+
//# sourceMappingURL=html.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"html.d.ts","sourceRoot":"","sources":["../../src/ui/html.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,eAAO,MAAM,IAAI,izmBAqfT,CAAC"}
|
package/dist/ui/html.js
ADDED
|
@@ -0,0 +1,506 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Enhanced Bitchat Web UI with Debug Panel
|
|
3
|
+
*/
|
|
4
|
+
export const HTML = `<!DOCTYPE html>
|
|
5
|
+
<html>
|
|
6
|
+
<head>
|
|
7
|
+
<meta charset="UTF-8">
|
|
8
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
9
|
+
<title>Bitchat Node</title>
|
|
10
|
+
<style>
|
|
11
|
+
* { box-sizing: border-box; margin: 0; padding: 0; }
|
|
12
|
+
body {
|
|
13
|
+
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
|
|
14
|
+
background: #0f0f1a; color: #eee; height: 100vh; display: flex; flex-direction: column;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/* Header */
|
|
18
|
+
header {
|
|
19
|
+
background: #1a1a2e; padding: 12px 20px; border-bottom: 1px solid #2a2a4a;
|
|
20
|
+
display: flex; justify-content: space-between; align-items: center;
|
|
21
|
+
}
|
|
22
|
+
header h1 { font-size: 16px; font-weight: 600; display: flex; align-items: center; gap: 8px; }
|
|
23
|
+
header h1 .logo { font-size: 20px; }
|
|
24
|
+
.header-info { display: flex; align-items: center; gap: 16px; }
|
|
25
|
+
.status {
|
|
26
|
+
font-size: 11px; padding: 4px 10px; border-radius: 12px;
|
|
27
|
+
background: #2a2a4a; color: #888;
|
|
28
|
+
}
|
|
29
|
+
.status.connected { background: #064e3b; color: #34d399; }
|
|
30
|
+
.peer-count { font-size: 11px; color: #60a5fa; }
|
|
31
|
+
.my-info { font-size: 11px; color: #888; font-family: monospace; }
|
|
32
|
+
|
|
33
|
+
/* Tab Navigation */
|
|
34
|
+
.tabs {
|
|
35
|
+
background: #1a1a2e; display: flex; border-bottom: 1px solid #2a2a4a;
|
|
36
|
+
}
|
|
37
|
+
.tab {
|
|
38
|
+
padding: 10px 20px; cursor: pointer; font-size: 13px; color: #888;
|
|
39
|
+
border-bottom: 2px solid transparent; transition: all 0.2s;
|
|
40
|
+
}
|
|
41
|
+
.tab:hover { color: #ccc; }
|
|
42
|
+
.tab.active { color: #60a5fa; border-bottom-color: #60a5fa; }
|
|
43
|
+
.tab .badge {
|
|
44
|
+
background: #dc2626; color: white; font-size: 10px; padding: 2px 6px;
|
|
45
|
+
border-radius: 10px; margin-left: 6px;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/* Main Layout */
|
|
49
|
+
main { flex: 1; display: flex; overflow: hidden; }
|
|
50
|
+
.panel { display: none; flex: 1; flex-direction: column; overflow: hidden; }
|
|
51
|
+
.panel.active { display: flex; }
|
|
52
|
+
|
|
53
|
+
/* Chat Panel */
|
|
54
|
+
.chat-container { display: flex; flex: 1; overflow: hidden; }
|
|
55
|
+
.messages-area { flex: 1; display: flex; flex-direction: column; }
|
|
56
|
+
.messages {
|
|
57
|
+
flex: 1; overflow-y: auto; padding: 16px; display: flex; flex-direction: column; gap: 8px;
|
|
58
|
+
}
|
|
59
|
+
.message {
|
|
60
|
+
background: #1a1a2e; padding: 10px 14px; border-radius: 12px; max-width: 75%;
|
|
61
|
+
animation: fadeIn 0.15s ease;
|
|
62
|
+
}
|
|
63
|
+
@keyframes fadeIn { from { opacity: 0; transform: translateY(4px); } }
|
|
64
|
+
.message.mine { background: #1e3a5f; align-self: flex-end; }
|
|
65
|
+
.message.private { border-left: 3px solid #ec4899; }
|
|
66
|
+
.message .meta { font-size: 10px; color: #666; margin-bottom: 4px; }
|
|
67
|
+
.message .meta .nickname { color: #60a5fa; font-weight: 500; }
|
|
68
|
+
.message .meta .private-tag { color: #ec4899; margin-left: 6px; }
|
|
69
|
+
.message .content { line-height: 1.4; word-wrap: break-word; font-size: 14px; }
|
|
70
|
+
.system { text-align: center; font-size: 11px; color: #555; padding: 6px; }
|
|
71
|
+
|
|
72
|
+
/* Input Area */
|
|
73
|
+
.input-area { background: #1a1a2e; padding: 12px 16px; border-top: 1px solid #2a2a4a; }
|
|
74
|
+
.dm-indicator {
|
|
75
|
+
font-size: 11px; color: #ec4899; margin-bottom: 8px;
|
|
76
|
+
display: flex; align-items: center; gap: 8px;
|
|
77
|
+
}
|
|
78
|
+
.dm-indicator .clear { cursor: pointer; color: #888; }
|
|
79
|
+
.dm-indicator .clear:hover { color: #fff; }
|
|
80
|
+
.input-row { display: flex; gap: 8px; }
|
|
81
|
+
input[type="text"] {
|
|
82
|
+
flex: 1; background: #0f0f1a; border: 1px solid #2a2a4a; border-radius: 8px;
|
|
83
|
+
padding: 10px 14px; color: #eee; font-size: 14px; outline: none;
|
|
84
|
+
}
|
|
85
|
+
input[type="text"]:focus { border-color: #3b82f6; }
|
|
86
|
+
input[type="text"]::placeholder { color: #444; }
|
|
87
|
+
button {
|
|
88
|
+
background: #3b82f6; color: white; border: none; border-radius: 8px;
|
|
89
|
+
padding: 10px 20px; font-size: 13px; font-weight: 500; cursor: pointer;
|
|
90
|
+
}
|
|
91
|
+
button:hover { background: #2563eb; }
|
|
92
|
+
button:disabled { background: #374151; cursor: not-allowed; }
|
|
93
|
+
button.secondary { background: #2a2a4a; }
|
|
94
|
+
button.secondary:hover { background: #3a3a5a; }
|
|
95
|
+
|
|
96
|
+
/* Peers Sidebar */
|
|
97
|
+
.peers-panel {
|
|
98
|
+
width: 180px; background: #1a1a2e; border-left: 1px solid #2a2a4a;
|
|
99
|
+
padding: 12px; overflow-y: auto;
|
|
100
|
+
}
|
|
101
|
+
.peers-panel h3 {
|
|
102
|
+
font-size: 10px; color: #666; margin-bottom: 10px;
|
|
103
|
+
text-transform: uppercase; letter-spacing: 1px;
|
|
104
|
+
}
|
|
105
|
+
.peer {
|
|
106
|
+
padding: 8px 10px; background: #0f0f1a; border-radius: 6px; margin-bottom: 6px;
|
|
107
|
+
font-size: 12px; cursor: pointer; transition: all 0.15s;
|
|
108
|
+
}
|
|
109
|
+
.peer:hover { background: #1e3a5f; }
|
|
110
|
+
.peer.selected { background: #3b82f6; }
|
|
111
|
+
.peer .peer-nick { font-weight: 500; }
|
|
112
|
+
.peer .peer-id { font-size: 9px; color: #555; margin-top: 2px; font-family: monospace; }
|
|
113
|
+
|
|
114
|
+
/* Debug Panel */
|
|
115
|
+
.debug-panel { padding: 0; display: flex; flex-direction: column; }
|
|
116
|
+
.debug-toolbar {
|
|
117
|
+
background: #1a1a2e; padding: 10px 16px; border-bottom: 1px solid #2a2a4a;
|
|
118
|
+
display: flex; gap: 8px; align-items: center;
|
|
119
|
+
}
|
|
120
|
+
.debug-toolbar label { font-size: 11px; color: #888; display: flex; align-items: center; gap: 4px; }
|
|
121
|
+
.debug-toolbar input[type="checkbox"] { accent-color: #3b82f6; }
|
|
122
|
+
.debug-toolbar select {
|
|
123
|
+
background: #0f0f1a; border: 1px solid #2a2a4a; border-radius: 4px;
|
|
124
|
+
padding: 4px 8px; color: #eee; font-size: 11px;
|
|
125
|
+
}
|
|
126
|
+
.debug-log {
|
|
127
|
+
flex: 1; overflow-y: auto; padding: 8px; font-family: 'SF Mono', Monaco, monospace;
|
|
128
|
+
font-size: 11px; line-height: 1.6; background: #0a0a12;
|
|
129
|
+
}
|
|
130
|
+
.debug-entry { padding: 4px 8px; border-radius: 4px; margin-bottom: 2px; }
|
|
131
|
+
.debug-entry.ble-rx { background: #1e293b; border-left: 3px solid #3b82f6; }
|
|
132
|
+
.debug-entry.ble-tx { background: #1e2d1e; border-left: 3px solid #22c55e; }
|
|
133
|
+
.debug-entry.session { background: #2d1e2d; border-left: 3px solid #a855f7; }
|
|
134
|
+
.debug-entry.error { background: #2d1e1e; border-left: 3px solid #ef4444; }
|
|
135
|
+
.debug-entry .time { color: #555; }
|
|
136
|
+
.debug-entry .tag {
|
|
137
|
+
font-weight: 600; padding: 1px 4px; border-radius: 3px; margin: 0 4px;
|
|
138
|
+
}
|
|
139
|
+
.debug-entry.ble-rx .tag { color: #60a5fa; }
|
|
140
|
+
.debug-entry.ble-tx .tag { color: #4ade80; }
|
|
141
|
+
.debug-entry.session .tag { color: #c084fc; }
|
|
142
|
+
.debug-entry.error .tag { color: #f87171; }
|
|
143
|
+
.debug-entry .hex { color: #fbbf24; word-break: break-all; }
|
|
144
|
+
.debug-entry .decoded { color: #94a3b8; margin-top: 2px; font-size: 10px; }
|
|
145
|
+
|
|
146
|
+
/* Sessions Panel */
|
|
147
|
+
.sessions-panel { padding: 16px; }
|
|
148
|
+
.session-card {
|
|
149
|
+
background: #1a1a2e; border-radius: 8px; padding: 12px 16px; margin-bottom: 12px;
|
|
150
|
+
}
|
|
151
|
+
.session-card h4 { font-size: 13px; color: #60a5fa; margin-bottom: 8px; font-family: monospace; }
|
|
152
|
+
.session-card .status-row {
|
|
153
|
+
display: flex; justify-content: space-between; font-size: 11px;
|
|
154
|
+
color: #888; margin-bottom: 4px;
|
|
155
|
+
}
|
|
156
|
+
.session-card .status-value { color: #eee; }
|
|
157
|
+
.session-card .status-value.success { color: #4ade80; }
|
|
158
|
+
.session-card .status-value.pending { color: #fbbf24; }
|
|
159
|
+
.session-card .status-value.error { color: #f87171; }
|
|
160
|
+
</style>
|
|
161
|
+
</head>
|
|
162
|
+
<body>
|
|
163
|
+
<header>
|
|
164
|
+
<div>
|
|
165
|
+
<h1><span class="logo">⚡</span> Bitchat Node</h1>
|
|
166
|
+
</div>
|
|
167
|
+
<div class="header-info">
|
|
168
|
+
<span class="peer-count" id="peer-count">0 peers</span>
|
|
169
|
+
<span class="status" id="status">Connecting...</span>
|
|
170
|
+
<span class="my-info" id="my-info"></span>
|
|
171
|
+
</div>
|
|
172
|
+
</header>
|
|
173
|
+
|
|
174
|
+
<div class="tabs">
|
|
175
|
+
<div class="tab active" data-panel="chat">💬 Chat</div>
|
|
176
|
+
<div class="tab" data-panel="debug">🔍 Debug <span class="badge" id="debug-count" style="display:none">0</span></div>
|
|
177
|
+
<div class="tab" data-panel="sessions">🔐 Sessions</div>
|
|
178
|
+
</div>
|
|
179
|
+
|
|
180
|
+
<main>
|
|
181
|
+
<!-- Chat Panel -->
|
|
182
|
+
<div class="panel active" id="panel-chat">
|
|
183
|
+
<div class="chat-container">
|
|
184
|
+
<div class="messages-area">
|
|
185
|
+
<div class="messages" id="messages"></div>
|
|
186
|
+
<div class="input-area">
|
|
187
|
+
<div class="dm-indicator" id="dm-indicator" style="display:none">
|
|
188
|
+
Sending to: <strong id="dm-target"></strong>
|
|
189
|
+
<span class="clear" onclick="clearDM()">✕ clear</span>
|
|
190
|
+
</div>
|
|
191
|
+
<div class="input-row">
|
|
192
|
+
<input type="text" id="input" placeholder="Type a message..." autocomplete="off">
|
|
193
|
+
<button id="send">Send</button>
|
|
194
|
+
</div>
|
|
195
|
+
</div>
|
|
196
|
+
</div>
|
|
197
|
+
<div class="peers-panel">
|
|
198
|
+
<h3>Peers</h3>
|
|
199
|
+
<div id="peers-list"></div>
|
|
200
|
+
</div>
|
|
201
|
+
</div>
|
|
202
|
+
</div>
|
|
203
|
+
|
|
204
|
+
<!-- Debug Panel -->
|
|
205
|
+
<div class="panel" id="panel-debug">
|
|
206
|
+
<div class="debug-panel">
|
|
207
|
+
<div class="debug-toolbar">
|
|
208
|
+
<label><input type="checkbox" id="filter-ble" checked> BLE</label>
|
|
209
|
+
<label><input type="checkbox" id="filter-session" checked> Session</label>
|
|
210
|
+
<label><input type="checkbox" id="filter-error" checked> Errors</label>
|
|
211
|
+
<select id="filter-direction">
|
|
212
|
+
<option value="all">All directions</option>
|
|
213
|
+
<option value="rx">RX only</option>
|
|
214
|
+
<option value="tx">TX only</option>
|
|
215
|
+
</select>
|
|
216
|
+
<button class="secondary" onclick="clearDebug()">Clear</button>
|
|
217
|
+
<label style="margin-left:auto"><input type="checkbox" id="auto-scroll" checked> Auto-scroll</label>
|
|
218
|
+
</div>
|
|
219
|
+
<div class="debug-log" id="debug-log"></div>
|
|
220
|
+
</div>
|
|
221
|
+
</div>
|
|
222
|
+
|
|
223
|
+
<!-- Sessions Panel -->
|
|
224
|
+
<div class="panel" id="panel-sessions">
|
|
225
|
+
<div class="sessions-panel" id="sessions-list">
|
|
226
|
+
<p style="color:#666;font-size:12px">No active sessions</p>
|
|
227
|
+
</div>
|
|
228
|
+
</div>
|
|
229
|
+
</main>
|
|
230
|
+
|
|
231
|
+
<script>
|
|
232
|
+
const messagesEl = document.getElementById('messages');
|
|
233
|
+
const inputEl = document.getElementById('input');
|
|
234
|
+
const sendBtn = document.getElementById('send');
|
|
235
|
+
const statusEl = document.getElementById('status');
|
|
236
|
+
const peerCountEl = document.getElementById('peer-count');
|
|
237
|
+
const peersListEl = document.getElementById('peers-list');
|
|
238
|
+
const myInfoEl = document.getElementById('my-info');
|
|
239
|
+
const debugLogEl = document.getElementById('debug-log');
|
|
240
|
+
const debugCountEl = document.getElementById('debug-count');
|
|
241
|
+
const dmIndicatorEl = document.getElementById('dm-indicator');
|
|
242
|
+
const dmTargetEl = document.getElementById('dm-target');
|
|
243
|
+
const sessionsListEl = document.getElementById('sessions-list');
|
|
244
|
+
|
|
245
|
+
let ws;
|
|
246
|
+
let myPeerID = '';
|
|
247
|
+
let selectedPeer = null;
|
|
248
|
+
let debugCount = 0;
|
|
249
|
+
const peers = new Map();
|
|
250
|
+
const sessions = new Map();
|
|
251
|
+
|
|
252
|
+
// Tab switching
|
|
253
|
+
document.querySelectorAll('.tab').forEach(tab => {
|
|
254
|
+
tab.addEventListener('click', () => {
|
|
255
|
+
document.querySelectorAll('.tab').forEach(t => t.classList.remove('active'));
|
|
256
|
+
document.querySelectorAll('.panel').forEach(p => p.classList.remove('active'));
|
|
257
|
+
tab.classList.add('active');
|
|
258
|
+
document.getElementById('panel-' + tab.dataset.panel).classList.add('active');
|
|
259
|
+
if (tab.dataset.panel === 'debug') {
|
|
260
|
+
debugCount = 0;
|
|
261
|
+
debugCountEl.style.display = 'none';
|
|
262
|
+
}
|
|
263
|
+
});
|
|
264
|
+
});
|
|
265
|
+
|
|
266
|
+
function connect() {
|
|
267
|
+
ws = new WebSocket('ws://' + location.host + '/ws');
|
|
268
|
+
|
|
269
|
+
ws.onopen = () => {
|
|
270
|
+
statusEl.textContent = 'Connected';
|
|
271
|
+
statusEl.className = 'status connected';
|
|
272
|
+
};
|
|
273
|
+
|
|
274
|
+
ws.onclose = () => {
|
|
275
|
+
statusEl.textContent = 'Disconnected';
|
|
276
|
+
statusEl.className = 'status';
|
|
277
|
+
setTimeout(connect, 2000);
|
|
278
|
+
};
|
|
279
|
+
|
|
280
|
+
ws.onmessage = (e) => {
|
|
281
|
+
const msg = JSON.parse(e.data);
|
|
282
|
+
handleMessage(msg);
|
|
283
|
+
};
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
function handleMessage(msg) {
|
|
287
|
+
switch (msg.type) {
|
|
288
|
+
case 'init':
|
|
289
|
+
myPeerID = msg.peerID;
|
|
290
|
+
myInfoEl.textContent = msg.nickname + ' · ' + msg.peerID.slice(0, 8) + '...';
|
|
291
|
+
break;
|
|
292
|
+
|
|
293
|
+
case 'message':
|
|
294
|
+
addMessage(msg.message);
|
|
295
|
+
break;
|
|
296
|
+
|
|
297
|
+
case 'peer:connected':
|
|
298
|
+
peers.set(msg.peer.peerID, msg.peer);
|
|
299
|
+
updatePeersList();
|
|
300
|
+
addSystem(msg.peer.nickname + ' joined');
|
|
301
|
+
break;
|
|
302
|
+
|
|
303
|
+
case 'peer:disconnected':
|
|
304
|
+
const peer = peers.get(msg.peerID);
|
|
305
|
+
peers.delete(msg.peerID);
|
|
306
|
+
updatePeersList();
|
|
307
|
+
if (peer) addSystem(peer.nickname + ' left');
|
|
308
|
+
break;
|
|
309
|
+
|
|
310
|
+
case 'peers':
|
|
311
|
+
peers.clear();
|
|
312
|
+
msg.peers.forEach(p => peers.set(p.peerID, p));
|
|
313
|
+
updatePeersList();
|
|
314
|
+
break;
|
|
315
|
+
|
|
316
|
+
case 'debug':
|
|
317
|
+
addDebugEntry(msg);
|
|
318
|
+
break;
|
|
319
|
+
|
|
320
|
+
case 'session':
|
|
321
|
+
updateSession(msg);
|
|
322
|
+
break;
|
|
323
|
+
|
|
324
|
+
case 'error':
|
|
325
|
+
addSystem('Error: ' + msg.error);
|
|
326
|
+
addDebugEntry({ category: 'error', text: msg.error, time: Date.now() });
|
|
327
|
+
break;
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
function addMessage(msg) {
|
|
332
|
+
const div = document.createElement('div');
|
|
333
|
+
div.className = 'message' + (msg.sender === myPeerID ? ' mine' : '') + (msg.isPrivate ? ' private' : '');
|
|
334
|
+
div.innerHTML =
|
|
335
|
+
'<div class="meta">' +
|
|
336
|
+
'<span class="nickname">' + escapeHtml(msg.senderNickname || 'unknown') + '</span> · ' +
|
|
337
|
+
new Date(msg.timestamp).toLocaleTimeString() +
|
|
338
|
+
(msg.isPrivate ? '<span class="private-tag">🔒 private</span>' : '') +
|
|
339
|
+
'</div>' +
|
|
340
|
+
'<div class="content">' + escapeHtml(msg.content || msg.text) + '</div>';
|
|
341
|
+
messagesEl.appendChild(div);
|
|
342
|
+
messagesEl.scrollTop = messagesEl.scrollHeight;
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
function addSystem(text) {
|
|
346
|
+
const div = document.createElement('div');
|
|
347
|
+
div.className = 'system';
|
|
348
|
+
div.textContent = '— ' + text + ' —';
|
|
349
|
+
messagesEl.appendChild(div);
|
|
350
|
+
messagesEl.scrollTop = messagesEl.scrollHeight;
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
function addDebugEntry(entry) {
|
|
354
|
+
const categoryClass = entry.category || 'ble-rx';
|
|
355
|
+
const filterCheckbox = document.getElementById('filter-' + (categoryClass.split('-')[0] || 'ble'));
|
|
356
|
+
const directionFilter = document.getElementById('filter-direction').value;
|
|
357
|
+
|
|
358
|
+
// Apply filters
|
|
359
|
+
if (filterCheckbox && !filterCheckbox.checked) return;
|
|
360
|
+
if (directionFilter === 'rx' && categoryClass === 'ble-tx') return;
|
|
361
|
+
if (directionFilter === 'tx' && categoryClass === 'ble-rx') return;
|
|
362
|
+
|
|
363
|
+
const div = document.createElement('div');
|
|
364
|
+
div.className = 'debug-entry ' + categoryClass;
|
|
365
|
+
|
|
366
|
+
const time = new Date(entry.time || Date.now()).toLocaleTimeString();
|
|
367
|
+
const tag = entry.tag || categoryClass.toUpperCase();
|
|
368
|
+
|
|
369
|
+
let content = '<span class="time">' + time + '</span>' +
|
|
370
|
+
'<span class="tag">[' + tag + ']</span> ';
|
|
371
|
+
|
|
372
|
+
if (entry.hex) {
|
|
373
|
+
content += '<span class="hex">' + entry.hex + '</span>';
|
|
374
|
+
}
|
|
375
|
+
if (entry.text) {
|
|
376
|
+
content += escapeHtml(entry.text);
|
|
377
|
+
}
|
|
378
|
+
if (entry.decoded) {
|
|
379
|
+
content += '<div class="decoded">↳ ' + escapeHtml(entry.decoded) + '</div>';
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
div.innerHTML = content;
|
|
383
|
+
debugLogEl.appendChild(div);
|
|
384
|
+
|
|
385
|
+
// Update badge if not viewing debug
|
|
386
|
+
if (!document.getElementById('panel-debug').classList.contains('active')) {
|
|
387
|
+
debugCount++;
|
|
388
|
+
debugCountEl.textContent = debugCount > 99 ? '99+' : debugCount;
|
|
389
|
+
debugCountEl.style.display = 'inline';
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
if (document.getElementById('auto-scroll').checked) {
|
|
393
|
+
debugLogEl.scrollTop = debugLogEl.scrollHeight;
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
function clearDebug() {
|
|
398
|
+
debugLogEl.innerHTML = '';
|
|
399
|
+
}
|
|
400
|
+
|
|
401
|
+
function updateSession(msg) {
|
|
402
|
+
sessions.set(msg.peerID, msg);
|
|
403
|
+
renderSessions();
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
function renderSessions() {
|
|
407
|
+
if (sessions.size === 0) {
|
|
408
|
+
sessionsListEl.innerHTML = '<p style="color:#666;font-size:12px">No active sessions</p>';
|
|
409
|
+
return;
|
|
410
|
+
}
|
|
411
|
+
|
|
412
|
+
sessionsListEl.innerHTML = '';
|
|
413
|
+
sessions.forEach((session, peerID) => {
|
|
414
|
+
const card = document.createElement('div');
|
|
415
|
+
card.className = 'session-card';
|
|
416
|
+
|
|
417
|
+
const statusClass = session.established ? 'success' : (session.error ? 'error' : 'pending');
|
|
418
|
+
const statusText = session.established ? 'Established' : (session.error || 'Handshaking...');
|
|
419
|
+
|
|
420
|
+
card.innerHTML =
|
|
421
|
+
'<h4>' + peerID.slice(0, 16) + '...</h4>' +
|
|
422
|
+
'<div class="status-row"><span>Status:</span><span class="status-value ' + statusClass + '">' + statusText + '</span></div>' +
|
|
423
|
+
'<div class="status-row"><span>Direction:</span><span class="status-value">' + (session.initiator ? 'Initiator' : 'Responder') + '</span></div>' +
|
|
424
|
+
'<div class="status-row"><span>TX Nonce:</span><span class="status-value">' + (session.txNonce ?? '—') + '</span></div>' +
|
|
425
|
+
'<div class="status-row"><span>RX Nonce:</span><span class="status-value">' + (session.rxNonce ?? '—') + '</span></div>';
|
|
426
|
+
|
|
427
|
+
sessionsListEl.appendChild(card);
|
|
428
|
+
});
|
|
429
|
+
}
|
|
430
|
+
|
|
431
|
+
function updatePeersList() {
|
|
432
|
+
peerCountEl.textContent = peers.size + ' peer' + (peers.size !== 1 ? 's' : '');
|
|
433
|
+
peersListEl.innerHTML = '';
|
|
434
|
+
|
|
435
|
+
if (peers.size === 0) {
|
|
436
|
+
peersListEl.innerHTML = '<p style="color:#555;font-size:11px;padding:8px">No peers nearby</p>';
|
|
437
|
+
return;
|
|
438
|
+
}
|
|
439
|
+
|
|
440
|
+
peers.forEach((peer, id) => {
|
|
441
|
+
const div = document.createElement('div');
|
|
442
|
+
div.className = 'peer' + (selectedPeer === id ? ' selected' : '');
|
|
443
|
+
div.innerHTML =
|
|
444
|
+
'<div class="peer-nick">' + escapeHtml(peer.nickname) + '</div>' +
|
|
445
|
+
'<div class="peer-id">' + id.slice(0, 12) + '...</div>';
|
|
446
|
+
div.onclick = () => selectPeer(id, peer.nickname);
|
|
447
|
+
peersListEl.appendChild(div);
|
|
448
|
+
});
|
|
449
|
+
}
|
|
450
|
+
|
|
451
|
+
function selectPeer(id, nickname) {
|
|
452
|
+
if (selectedPeer === id) {
|
|
453
|
+
clearDM();
|
|
454
|
+
} else {
|
|
455
|
+
selectedPeer = id;
|
|
456
|
+
dmTargetEl.textContent = nickname;
|
|
457
|
+
dmIndicatorEl.style.display = 'flex';
|
|
458
|
+
inputEl.placeholder = 'Private message to ' + nickname + '...';
|
|
459
|
+
updatePeersList();
|
|
460
|
+
}
|
|
461
|
+
}
|
|
462
|
+
|
|
463
|
+
function clearDM() {
|
|
464
|
+
selectedPeer = null;
|
|
465
|
+
dmIndicatorEl.style.display = 'none';
|
|
466
|
+
inputEl.placeholder = 'Type a message...';
|
|
467
|
+
updatePeersList();
|
|
468
|
+
}
|
|
469
|
+
window.clearDM = clearDM;
|
|
470
|
+
|
|
471
|
+
function send() {
|
|
472
|
+
const text = inputEl.value.trim();
|
|
473
|
+
if (!text || !ws || ws.readyState !== WebSocket.OPEN) return;
|
|
474
|
+
|
|
475
|
+
addMessage({
|
|
476
|
+
id: Date.now().toString(),
|
|
477
|
+
sender: myPeerID,
|
|
478
|
+
senderNickname: 'me',
|
|
479
|
+
content: text,
|
|
480
|
+
timestamp: new Date().toISOString(),
|
|
481
|
+
isPrivate: !!selectedPeer
|
|
482
|
+
});
|
|
483
|
+
|
|
484
|
+
ws.send(JSON.stringify({
|
|
485
|
+
type: 'send',
|
|
486
|
+
text: text,
|
|
487
|
+
to: selectedPeer || null
|
|
488
|
+
}));
|
|
489
|
+
|
|
490
|
+
inputEl.value = '';
|
|
491
|
+
}
|
|
492
|
+
|
|
493
|
+
function escapeHtml(text) {
|
|
494
|
+
const div = document.createElement('div');
|
|
495
|
+
div.textContent = text;
|
|
496
|
+
return div.innerHTML;
|
|
497
|
+
}
|
|
498
|
+
|
|
499
|
+
sendBtn.onclick = send;
|
|
500
|
+
inputEl.onkeydown = (e) => { if (e.key === 'Enter') send(); };
|
|
501
|
+
|
|
502
|
+
connect();
|
|
503
|
+
</script>
|
|
504
|
+
</body>
|
|
505
|
+
</html>`;
|
|
506
|
+
//# sourceMappingURL=html.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"html.js","sourceRoot":"","sources":["../../src/ui/html.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,CAAC,MAAM,IAAI,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAqfZ,CAAC"}
|
package/dist/ui/server.d.ts
CHANGED
|
@@ -1,16 +1,20 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Bitchat Web UI Server
|
|
3
|
-
*
|
|
3
|
+
* Enhanced with debug panel and session monitoring
|
|
4
4
|
*/
|
|
5
5
|
import type { BitchatClient } from '../client.js';
|
|
6
|
+
import { type DebugEvent, type SessionState } from '../debug.js';
|
|
6
7
|
export interface UIServerConfig {
|
|
7
8
|
port: number;
|
|
8
9
|
webhookUrl?: string;
|
|
9
10
|
}
|
|
11
|
+
export type { DebugEvent, SessionState } from '../debug.js';
|
|
10
12
|
/**
|
|
11
13
|
* Start a web UI server for the Bitchat client
|
|
12
14
|
*/
|
|
13
15
|
export declare function startUIServer(client: BitchatClient, config: UIServerConfig): {
|
|
14
16
|
stop: () => void;
|
|
17
|
+
emitDebug: (event: DebugEvent) => void;
|
|
18
|
+
updateSession: (state: SessionState) => void;
|
|
15
19
|
};
|
|
16
20
|
//# sourceMappingURL=server.d.ts.map
|