Root cause of 'two users can't chat': all accounts on one browser shared a single IndexedDB, so the second registration overwrote the first's Signal identity keys, corrupting both. Verified via two-isolated-client integration test (real crypto.js + store.js) that the protocol itself is correct. - store.js: useAccount(username) namespaces IndexedDB as cipher:<username>; keys generated at registration now persist under the right account - accounts.js: localStorage-backed account registry + active pointer - app.js: multi-account boot/activate, account-switch/add/logout menu, error toasts on send/decrypt failures (no more silent failures) - login guards against missing on-device keys (multi-device linking still TODO) - SW cache v2->v3 + precache accounts.js Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
23 lines
642 B
JSON
23 lines
642 B
JSON
{
|
|
"name": "cipher",
|
|
"version": "0.1.0",
|
|
"private": true,
|
|
"description": "Cipher — end-to-end encrypted messenger (Signal Protocol) on Cloudflare",
|
|
"type": "module",
|
|
"scripts": {
|
|
"dev": "wrangler dev",
|
|
"deploy": "wrangler deploy",
|
|
"db:migrate:local": "wrangler d1 migrations apply cipher --local",
|
|
"db:migrate": "wrangler d1 migrations apply cipher --remote"
|
|
},
|
|
"dependencies": {
|
|
"hono": "^4.6.14"
|
|
},
|
|
"devDependencies": {
|
|
"@privacyresearch/libsignal-protocol-typescript": "^0.0.16",
|
|
"buffer": "^6.0.3",
|
|
"esbuild": "^0.28.1",
|
|
"fake-indexeddb": "^6.2.5",
|
|
"wrangler": "^4.96.0"
|
|
}
|
|
}
|