Replace existing docs with fresh documentation built entirely from source code analysis. OpenAPI 3.1 spec as source of truth, plus human-readable Markdown with curl examples, response samples, and workflow guides. - OpenAPI 3.1 spec covering all 42 endpoints (validated against source) - 7 endpoint reference docs (auth, games, sessions, picker, stats, votes, webhooks) - WebSocket protocol documentation (auth, subscriptions, 4 event types) - 4 guide documents (getting started, session lifecycle, voting, webhooks) - API README with overview, auth docs, and quick reference table - Old docs archived to docs/archive/ Made-with: Cursor
240 lines
6.0 KiB
Markdown
240 lines
6.0 KiB
Markdown
# WebSocket Integration Testing Guide
|
|
|
|
This guide walks you through testing the WebSocket event system for game notifications.
|
|
|
|
## Prerequisites
|
|
|
|
1. Backend API running with WebSocket support
|
|
2. Valid JWT token for authentication
|
|
3. Active session with games (or ability to create one)
|
|
|
|
## Testing Steps
|
|
|
|
### Step 1: Install Backend Dependencies
|
|
|
|
```bash
|
|
cd backend
|
|
npm install
|
|
```
|
|
|
|
This will install the `ws` package that was added to `package.json`.
|
|
|
|
### Step 2: Start the Backend
|
|
|
|
```bash
|
|
cd backend
|
|
npm start
|
|
```
|
|
|
|
You should see:
|
|
```
|
|
Server is running on port 5000
|
|
WebSocket server available at ws://localhost:5000/api/sessions/live
|
|
[WebSocket] WebSocket server initialized on /api/sessions/live
|
|
```
|
|
|
|
### Step 3: Get JWT Token
|
|
|
|
```bash
|
|
curl -X POST "http://localhost:5000/api/auth/login" \
|
|
-H "Content-Type: application/json" \
|
|
-d '{"key":"YOUR_ADMIN_KEY"}'
|
|
```
|
|
|
|
Save the token from the response.
|
|
|
|
### Step 4: Test WebSocket Connection
|
|
|
|
Run the test script:
|
|
|
|
```bash
|
|
cd backend
|
|
JWT_TOKEN="your_token_here" node test-websocket.js
|
|
```
|
|
|
|
Expected output:
|
|
```
|
|
🚀 WebSocket Test Client
|
|
═══════════════════════════════════════════════════════
|
|
Connecting to: ws://localhost:5000/api/sessions/live
|
|
|
|
✅ Connected to WebSocket server
|
|
|
|
📝 Step 1: Authenticating...
|
|
✅ Authentication successful
|
|
|
|
📝 Step 2: Subscribing to session 1...
|
|
✅ Subscribed to session 1
|
|
|
|
🎧 Listening for events...
|
|
Add a game in the Picker page to see events here
|
|
Press Ctrl+C to exit
|
|
```
|
|
|
|
### Step 5: Test Game Added Event
|
|
|
|
1. Keep the WebSocket test client running
|
|
2. Open the web app in your browser
|
|
3. Go to the Picker page
|
|
4. Add a game to the session
|
|
|
|
You should see in the test client:
|
|
```
|
|
🎮 GAME ADDED EVENT RECEIVED!
|
|
═══════════════════════════════════════════════════════
|
|
Game: Fibbage 4
|
|
Pack: The Jackbox Party Pack 9
|
|
Players: 2-8
|
|
Session ID: 1
|
|
Games Played: 1
|
|
Timestamp: 2025-11-01T...
|
|
═══════════════════════════════════════════════════════
|
|
```
|
|
|
|
### Step 6: Test Bot Integration
|
|
|
|
If you're using the `irc-kosmi-relay` bot:
|
|
|
|
1. Make sure `UseWebSocket=true` in `matterbridge.toml`
|
|
2. Build and run the bot:
|
|
```bash
|
|
cd irc-kosmi-relay
|
|
go build
|
|
./matterbridge -conf matterbridge.toml
|
|
```
|
|
|
|
3. Look for these log messages:
|
|
```
|
|
INFO Jackbox integration initialized successfully
|
|
INFO Connecting to WebSocket: wss://your-api-url/api/sessions/live
|
|
INFO WebSocket connected
|
|
INFO Authentication successful
|
|
INFO Subscribed to session X
|
|
```
|
|
|
|
4. Add a game in the Picker page
|
|
|
|
5. The bot should announce in Kosmi/IRC:
|
|
```
|
|
🎮 Coming up next: Fibbage 4!
|
|
```
|
|
|
|
## Troubleshooting
|
|
|
|
### Connection Refused
|
|
|
|
**Problem**: `Error: connect ECONNREFUSED`
|
|
|
|
**Solution**: Make sure the backend is running on the correct port (default 5000).
|
|
|
|
### Authentication Failed
|
|
|
|
**Problem**: `Authentication failed: Invalid or expired token`
|
|
|
|
**Solution**:
|
|
- Get a fresh JWT token
|
|
- Make sure you're using the correct admin key
|
|
- Check token hasn't expired (tokens expire after 24 hours)
|
|
|
|
### No Events Received
|
|
|
|
**Problem**: WebSocket connects but no `game.added` events are received
|
|
|
|
**Solution**:
|
|
- Make sure you're subscribed to the correct session ID
|
|
- Verify the session is active
|
|
- Check backend logs for errors
|
|
- Try adding a game manually via the Picker page
|
|
|
|
### Bot Not Connecting
|
|
|
|
**Problem**: Bot fails to connect to WebSocket
|
|
|
|
**Solution**:
|
|
- Check `APIURL` in `matterbridge.toml` is correct
|
|
- Verify `UseWebSocket=true` is set
|
|
- Check bot has valid JWT token (authentication succeeded)
|
|
- Look for error messages in bot logs
|
|
|
|
### Reconnection Issues
|
|
|
|
**Problem**: WebSocket disconnects and doesn't reconnect
|
|
|
|
**Solution**:
|
|
- Check network connectivity
|
|
- Backend automatically handles reconnection with exponential backoff
|
|
- Bot automatically reconnects on disconnect
|
|
- Check logs for reconnection attempts
|
|
|
|
## Advanced Testing
|
|
|
|
### Test Multiple Clients
|
|
|
|
You can run multiple test clients simultaneously:
|
|
|
|
```bash
|
|
# Terminal 1
|
|
JWT_TOKEN="token1" node test-websocket.js
|
|
|
|
# Terminal 2
|
|
JWT_TOKEN="token2" node test-websocket.js
|
|
```
|
|
|
|
Both should receive the same `game.added` events.
|
|
|
|
### Test Heartbeat
|
|
|
|
The WebSocket connection sends ping/pong messages every 30 seconds. You should see:
|
|
|
|
```
|
|
💓 Heartbeat
|
|
```
|
|
|
|
If you don't see heartbeats, the connection may be stale.
|
|
|
|
### Test Reconnection
|
|
|
|
1. Start the test client
|
|
2. Stop the backend (Ctrl+C)
|
|
3. The client should log: `WebSocket disconnected, reconnecting...`
|
|
4. Restart the backend
|
|
5. The client should reconnect automatically
|
|
|
|
## Integration Checklist
|
|
|
|
- [ ] Backend WebSocket server starts successfully
|
|
- [ ] Test client can connect and authenticate
|
|
- [ ] Test client receives `game.added` events
|
|
- [ ] Heartbeat keeps connection alive (30s interval)
|
|
- [ ] Auto-reconnect works after disconnect
|
|
- [ ] Multiple clients can connect simultaneously
|
|
- [ ] Invalid JWT is rejected properly
|
|
- [ ] Bot connects and authenticates
|
|
- [ ] Bot receives events and broadcasts to chat
|
|
- [ ] Bot reconnects after network issues
|
|
|
|
## Next Steps
|
|
|
|
Once testing is complete:
|
|
|
|
1. Update your bot configuration to use `UseWebSocket=true`
|
|
2. Deploy the updated backend with WebSocket support
|
|
3. Restart your bot to connect via WebSocket
|
|
4. Monitor logs for any connection issues
|
|
5. Webhooks remain available as a fallback option
|
|
|
|
## Comparison: WebSocket vs Webhooks
|
|
|
|
| Feature | WebSocket | Webhooks |
|
|
|---------|-----------|----------|
|
|
| Setup Complexity | Simple | Moderate |
|
|
| Inbound Ports | Not needed | Required |
|
|
| Docker Networking | Simple | Complex |
|
|
| Latency | Lower | Higher |
|
|
| Connection Type | Persistent | Per-event |
|
|
| Reconnection | Automatic | N/A |
|
|
| Best For | Real-time bots | Serverless integrations |
|
|
|
|
**Recommendation**: Use WebSocket for bot integrations. Use webhooks for serverless/stateless integrations or when WebSocket is not feasible.
|
|
|