mirror of
https://github.com/block/buzz.git
synced 2026-08-18 06:50:31 +02:00
Root cause of 'everything is rate-limited' / 'noting too much': the serverless transport opened a FRESH WebSocket per query and per publish (connect→send→close). get_channels fires ~10 queries, create channel 2 publishes, add-agent several more — each a new connection. Public relays (damus, nos.lol) aggressively rate-limit connection storms + event bursts, so every action failed. Fix (validated against damus/nostr-tools idiomatic patterns + NIP-01/65): - ws_pool.rs: one persistent WebSocket per relay, reused for all queries/publishes; background reader dispatches by sub/event id; transparent reconnect; NIP-42 AUTH answered on the same socket. - Don't block on slow relays: publish returns on FIRST acceptance (FuturesUnordered); connect has a 4s timeout; failed relays enter a 30s cooldown so a dead relay isn't re-dialed every query. - Multi-relay publish (success if any accepts) confirmed idiomatic — not a mistake; it's the resilience model and hides per-relay rate caps. - Pool cleared on workspace switch. Verified live: 5-relay burst (15 queries + 6 publishes) that previously hung 3+min now completes in 17s with zero rate-limits; create→join roundtrip passes on 2 relays. 426 unit tests pass, clippy clean. New live test: serverless_burst_no_rate_limit.
Sprout
Desktop chat shell with:
- Tauri + React + TypeScript + Vite
- Tailwind CSS
- shadcn/ui-ready shared components
- Biome (lint/format/check)
- Feature-driven frontend structure
Scripts
pnpm dev- run the web frontendpnpm tauri dev- run the desktop apppnpm build- typecheck and build frontendpnpm typecheck- TypeScript checkspnpm lint- Biome lintpnpm format- Biome format (write)pnpm check- Biome check
Structure
src/shared- reusable app-wide code (ui,lib,styles)src/features- feature modules (vertical slices)src/app- top-level app composition