diff --git a/warzone/crates/warzone-server/src/routes/web.rs b/warzone/crates/warzone-server/src/routes/web.rs index fda177a..7144262 100644 --- a/warzone/crates/warzone-server/src/routes/web.rs +++ b/warzone/crates/warzone-server/src/routes/web.rs @@ -250,9 +250,15 @@ async function fetchPeerKey(peerFP) { const data = await resp.json(); const bundleBytes = Uint8Array.from(atob(data.bundle), c => c.charCodeAt(0)); const bundleStr = new TextDecoder().decode(bundleBytes); - const bundle = JSON.parse(bundleStr); - if (bundle.type !== 'web') throw new Error('Peer is CLI client (incompatible crypto). Use CLI to chat with them.'); + let bundle; + try { + bundle = JSON.parse(bundleStr); + } catch(e) { + throw new Error('CLI client — cannot encrypt (different crypto, needs WASM bridge)'); + } + + if (bundle.type !== 'web') throw new Error('CLI client — cannot encrypt (different crypto)'); const aesKey = await deriveAESKey(bundle.jwk); derivedKeys[fp] = aesKey; @@ -459,11 +465,11 @@ async function sendToGroup(groupName, text) { message: Array.from(new TextEncoder().encode(envelope)) }); } catch(e) { - addSys('Failed to encrypt for ' + memberFP.slice(0,8) + ': ' + e.message); + // Silently skip CLI members (different crypto) } } - if (messages.length === 0) return; + if (messages.length === 0) { addSys('No compatible web members to send to'); return; } await fetch(SERVER + '/v1/groups/' + groupName + '/send', { method: 'POST',