WASM fix (critical):
- encrypt_key_exchange_with_id was calling x3dh::initiate a second time,
generating a new ephemeral key that didn't match the ratchet — receiver
always failed to decrypt. Now stores X3DH result from initiate() and
reuses it. Added 2 protocol tests confirming the fix + the bug.
- Bumped service worker cache to wz-v2 to force browsers to re-fetch.
- Disabled wasm-opt for Hetzner builds (libc compat issue).
Federation — alias support:
- resolve_alias falls back to federation peer if not found locally
- register_alias checks peer server before allowing — globally unique aliases
- Added resolve_remote_alias() and is_alias_taken_remote() to FederationHandle
Federation — key proxy fix:
- Remote bundles no longer cached locally (stale cache caused decrypt failures)
- Local vs remote determined by device: prefix in keys DB
Client fixes:
- Self-messaging blocked ("Cannot send messages to yourself")
- /peer <self> blocked
- last_dm_peer never set to self
- /r <message> sends reply inline (switches peer + sends in one command)
Deploy tooling:
- scripts/build-linux.sh with --ship (build + deploy + destroy)
- --update-all, --status, --logs commands
- WASM rebuilt on Hetzner VM before server binary
- deploy/ directory: systemd service, federation configs, setup script
- Journald log cap (50MB, 7-day retention)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
29 lines
704 B
TOML
29 lines
704 B
TOML
[package]
|
|
name = "warzone-wasm"
|
|
version.workspace = true
|
|
edition.workspace = true
|
|
|
|
[package.metadata.wasm-pack.profile.release]
|
|
wasm-opt = false
|
|
|
|
[lib]
|
|
crate-type = ["cdylib"]
|
|
|
|
[dependencies]
|
|
warzone-protocol = { path = "../warzone-protocol" }
|
|
wasm-bindgen = "0.2"
|
|
serde = { workspace = true }
|
|
serde_json = { workspace = true }
|
|
js-sys = "0.3"
|
|
web-sys = { version = "0.3", features = ["console"] }
|
|
getrandom = { version = "0.2", features = ["js"] }
|
|
base64.workspace = true
|
|
hex.workspace = true
|
|
bincode.workspace = true
|
|
x25519-dalek.workspace = true
|
|
ed25519-dalek.workspace = true
|
|
rand.workspace = true
|
|
uuid = { version = "1", features = ["v4", "serde", "js"] }
|
|
|
|
# profile.release is set at workspace root
|