* fix(nip-29): fetch admin and member lists in parallel and correctly tag admins
This commit improves NIP-29 group member fetching with two key changes:
1. **Parallel fetching**: Admins (kind 39001) and members (kind 39002) are now
fetched in parallel using separate subscriptions, improving performance
2. **Correct admin role tagging**: Users in kind 39001 events now correctly
default to "admin" role instead of "member" when no explicit role tag is
provided, as per NIP-29 spec
Changes:
- Split participantsFilter into separate adminsFilter and membersFilter
- Use Promise.all to fetch both kinds in parallel
- Updated normalizeRole helper to accept a defaultRole parameter
- Process kind 39001 with "admin" default, kind 39002 with "member" default
- Added clearer logging for admin/member event counts
Related: src/lib/chat/adapters/nip-29-adapter.ts:192-320
* refactor(nip-29): simplify parallel fetch using pool.request
Use pool.request() with both filters in a single call instead of manual
subscription management. This is cleaner and more idiomatic:
- Auto-closes on EOSE (no manual unsubscribe needed)
- Fetches both kinds (39001 and 39002) in parallel with one request
- Reduces code complexity significantly
* fix(nip-29): use limit 1 for replaceable participant events
Kinds 39001 and 39002 are replaceable events with d-tag, so there should
only be one valid event of each kind per group. Changed limit from 5 to 1.
* fix(chat): change "Sign in to send messages" to "Sign in to post"
Simplified the login prompt text in chat interface for clarity.
---------
Co-authored-by: Claude <noreply@anthropic.com>