15173a9278
New privacy-focused messaging controls in the composer: - Code blocks: button wraps the message in a fenced block; both peers render a monospace code window with a copy button (clipboard auto-clears after ~30s). Window is built from sanitized text via React nodes — no new XSS surface. - View-once: recipient sees a blurred bubble, reveals on tap, then it is wiped. Honestly cooperative (not screenshot-proof). - Disappearing messages: optional 30s/5m/1h timer auto-deletes on both sides with a live countdown; incoming TTL clamped to [5s, 24h]. - Unsend (delete for everyone) via new MESSAGE_TYPES.message_delete control. - Panic wipe: clears chat, wipes keys and disconnects (behind a confirm). Transport: - Per-message metadata (id / view-once / timer) travels inside the encrypted envelope, not in the sanitized text, so content cannot spoof these controls. - _sanitizeMessageMeta whitelists + bounds metadata on send and receive. - AAD/replay protection, SAS gate and receive-side DOMPurify are unchanged. Adds tests/secure-chat-features.test.mjs (full suite: 17 files, all passing). Bumps version to 4.8.14 across package.json, package-lock.json, manifest.json, index.html, meta.json, README, SECURITY_DISCLAIMER, header and init banner.
118 lines
2.6 KiB
JSON
118 lines
2.6 KiB
JSON
{
|
|
"name": "SecureBit.chat v4.8.14 - ECDH + DTLS + SAS",
|
|
"short_name": "SecureBit",
|
|
"description": "P2P messenger with ECDH + DTLS + SAS security, military-grade cryptography and Lightning Network payments",
|
|
"start_url": "./",
|
|
"display": "standalone",
|
|
"background_color": "#1a1a1a",
|
|
"theme_color": "#ff6b35",
|
|
"orientation": "portrait-primary",
|
|
"scope": "./",
|
|
"lang": "en",
|
|
"dir": "ltr",
|
|
"categories": ["communication", "security", "productivity"],
|
|
"prefer_related_applications": false,
|
|
"icons": [
|
|
{
|
|
"src": "./logo/icon-72x72.png",
|
|
"sizes": "72x72",
|
|
"type": "image/png",
|
|
"purpose": "any"
|
|
},
|
|
{
|
|
"src": "./logo/icon-96x96.png",
|
|
"sizes": "96x96",
|
|
"type": "image/png",
|
|
"purpose": "any"
|
|
},
|
|
{
|
|
"src": "./logo/icon-128x128.png",
|
|
"sizes": "128x128",
|
|
"type": "image/png",
|
|
"purpose": "any"
|
|
},
|
|
{
|
|
"src": "./logo/icon-144x144.png",
|
|
"sizes": "144x144",
|
|
"type": "image/png",
|
|
"purpose": "any"
|
|
},
|
|
{
|
|
"src": "./logo/icon-152x152.png",
|
|
"sizes": "152x152",
|
|
"type": "image/png",
|
|
"purpose": "any"
|
|
},
|
|
{
|
|
"src": "./logo/icon-180x180.png",
|
|
"sizes": "180x180",
|
|
"type": "image/png",
|
|
"purpose": "any"
|
|
},
|
|
{
|
|
"src": "./logo/icon-192x192.png",
|
|
"sizes": "192x192",
|
|
"type": "image/png",
|
|
"purpose": "any"
|
|
},
|
|
{
|
|
"src": "./logo/icon-256x256.png",
|
|
"sizes": "256x256",
|
|
"type": "image/png",
|
|
"purpose": "any"
|
|
},
|
|
{
|
|
"src": "./logo/icon-384x384.png",
|
|
"sizes": "384x384",
|
|
"type": "image/png",
|
|
"purpose": "any"
|
|
},
|
|
{
|
|
"src": "./logo/icon-512x512.png",
|
|
"sizes": "512x512",
|
|
"type": "image/png",
|
|
"purpose": "any"
|
|
},
|
|
{
|
|
"src": "./logo/icon-192x192.png",
|
|
"sizes": "192x192",
|
|
"type": "image/png",
|
|
"purpose": "maskable"
|
|
},
|
|
{
|
|
"src": "./logo/icon-512x512.png",
|
|
"sizes": "512x512",
|
|
"type": "image/png",
|
|
"purpose": "maskable"
|
|
}
|
|
],
|
|
"shortcuts": [
|
|
{
|
|
"name": "Create Channel",
|
|
"short_name": "Create",
|
|
"description": "Create a new secure channel",
|
|
"url": "./?action=create",
|
|
"icons": [
|
|
{
|
|
"src": "./logo/icon-96x96.png",
|
|
"sizes": "96x96",
|
|
"type": "image/png"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"name": "Join Channel",
|
|
"short_name": "Join",
|
|
"description": "Join an existing secure channel",
|
|
"url": "./?action=join",
|
|
"icons": [
|
|
{
|
|
"src": "./logo/icon-96x96.png",
|
|
"sizes": "96x96",
|
|
"type": "image/png"
|
|
}
|
|
]
|
|
}
|
|
]
|
|
}
|