mirror of
https://github.com/Such-Software/wownerogue.git
synced 2026-10-17 22:31:26 +02:00
- Add alertService.js with Resend email alerts for low balance, disconnects, failed payouts - Update admin.html with full dashboard UI (stats, charts, tables, payout retry) - Add wallet balance to /health endpoint - Add getBalance() and checkTransactionStatus() to walletRPCService - Fix payoutRetryService query and add alert integration - Update .env.example with alert config (RESEND_API_KEY, ADMIN_EMAIL, etc) - Reorganize docs: move TODO.md, LOGS_AND_BACKUP.md to docs/ - Extract deployment guide from README to docs/DEPLOY.md - Consolidate TEMP_TODO.md into docs/TODO.md
8.7 KiB
8.7 KiB
Wownerogue Development Todo
High Priority
- Verify Server Startup: Server starts cleanly with
npm run dev✅ - Test Payment Flow: Fixed critical bug where payment confirmation wasn't updating DB status ✅
- Test Payouts: Payout flow verified with duplicate prevention and proper mode tracking ✅
- Address Persistence: Verify that payout addresses persist across server restarts via session tokens. ✅
- Mixed Mode Logic: Per-user mode determination based on credits balance ✅
- Credits Package Bug: Credits correctly parsed from package info on confirmation ✅
- Stagenet Support: Added MONERO_NETWORK config with UI warnings for non-mainnet ✅
- Difficulty Tuning: Configurable presets (easy/normal/hard/casino) for house edge control ✅
- Provably Fair: SHA-256 commitment scheme for verifiable game generation ✅
Recent Fixes (Jan 2026)
- Payment DB Status Bug: Fixed critical issue where single_game payments weren't marked 'confirmed' in DB, causing game start to fail ✅
- TileMap Character Error: Fixed '●' character not in tileMap causing tile mode rendering failures ✅
- Test Suite Fixes: All 106 tests now pass (10 test suites) ✅
- Credit Deduction Bug: Fixed race condition where credits could go negative - now uses
WHERE credits >= $1✅ - Payout Mode Bug: Fixed
completeGameusing globalgameModeinstead of recordedpayment_modefrom game record ✅ - Duplicate Payout Prevention: Added check for existing payout before processing to prevent double-payouts ✅
- Dead Code Cleanup: Removed unused MoneroPayService (was never used, WalletRPCService is the actual service) ✅
- Game Reconnection/Resume: Added
SuspendedGameManagerto preserve and restore games when users disconnect and reconnect. Users in dungeon or awaiting payment can now resume seamlessly ✅
New Features (Just Added)
- Chat History Persistence:
ChatHistoryManagerstores messages in PostgreSQL with 30-day retention ✅ - Chat History on Connect: New users receive last 50 messages on connect via
chat_historyevent ✅ - Spectator System: Full spectator mode with
SpectatorManagerfor watching live games ✅ - Active Games List: Real-time game list with pagination, sorting, and auto-refresh ✅
- Spectate UI: "Watch Games" button, live game panel, and spectator controls ✅
- Spectator Broadcasts: Game updates broadcast to spectators via Socket.IO rooms ✅
- Help Modal: Added instructions modal with game rules, controls, and payment mode info ✅
- Dynamic Treasure Icon: Treasure tile now shows $W (Wownero) or $M (Monero) based on crypto type ✅
- Address Status Indicator: Payout address button shows warning when no address is set ✅
User Feedback (Beta Tester - Dec 2025)
- History Panel Bug: User reported payout not showing in History after winning with treasure (needs investigation - may be timing/status issue with "confirmed" vs "pending" payouts)
- Early Dungeon Entry: Allow credits/free mode users to enter dungeon immediately without waiting for next block (risky - they die if block found before escape). Toggleable via config. ✅
Improvements / Refactoring
- Error Handling: Extended
normalizeErrorto queueHandler, queueManager, sessionManager ✅ - Configuration Persistence: Added
configPersistence.jsfor hot-reloadable DB-backed config ✅ - Monitoring Dashboard: Created
/admin.htmlwith live metrics (games, queue, memory, wallet) ✅ - Frontend Cleanup: Removed rot.js (using minified), game1.mid (unused), .DS_Store, moved tiles.xcf ✅
- Provably Fair UI: Hash commitment shown at game start, seed revealed with verification link at game end ✅
- Verification Endpoint:
/verify/:gameIdHTML page +/api/verifyJSON endpoint for public verification ✅
Documentation
- API Documentation: README updated with accurate API surface including health check and Socket.IO events ✅
- Session Persistence: README documents session token behavior and localStorage requirements ✅
- Difficulty System: README documents difficulty presets and house edge tuning ✅
- Provably Fair: README documents cryptographic verification system ✅
- Deployment Guide: README includes production deployment with Nginx/Caddy configs and systemd ✅
Pre-Beta Checklist
- All 106 tests pass (10 test suites) ✅
- Health check endpoint available at
/health✅ - REST endpoints implemented:
/api/user/:socketId/credits,/api/user/:socketId/mode,/api/user/:socketId/address✅ - Payout eligibility shown per payment mode in UI ✅
- Session persistence tooltip and localStorage warning added ✅
- Stagenet/testnet warning banner for Monero non-mainnet ✅
- Chat history persisted and sent to new users ✅
- Spectator system functional with live game viewing ✅
- TLS/HTTPS: Configure reverse proxy (Nginx/Caddy) with SSL certificates before exposing to real users.
- Database Backups:
scripts/backup_db.sh+ systemd timer for daily backups with 30-day retention (seeLOGS_AND_BACKUP.md) ✅ - Manual Integration Test: Run full payment flow with real
wownero-wallet-rpc(not mocked). - Rate Limit Tuning: Current defaults (60 games/hour, 100 payouts/day) suitable for launch ✅
- Log Rotation: Using systemd journald with configurable retention (see
LOGS_AND_BACKUP.md) ✅
Security Audit Fixes (Jan 2026)
- XSS Vulnerability: Complete HTML entity escaping in chat handler (
&,<,>,",') - tx_hash Idempotency: UNIQUE partial indexes on payments/payouts tables (migration 008)
- Timing-Safe Auth: Admin API uses
crypto.timingSafeEqual()for key comparison - Transactional Payouts: Payout flow creates pending record first, updates atomically
- Payout Retry Service: Auto-retries failed payouts (max 3 attempts, 5-min interval)
- Address Validation:
validateAddress()called before every payout attempt - Transaction Status Check:
checkTransactionStatus()verifies blockchain before retry
Smirk Wallet Integration (Jan 2026)
- Database Schema:
smirk_public_keycolumn,smirk_challengestable (migration 009) - Auth Endpoints:
/api/auth/smirk/challenge,/verify,/status - Frontend Module:
smirkAuth.jswith extension detection and login flow - Address Modal: Shows Smirk connect button or install link
Admin Dashboard (Jan 2026)
- Alert Service: Email alerts via Resend for low balance, disconnects, failed payouts
- Stats Endpoints:
/api/admin/stats/overview,/payouts,/games,/users - Admin UI: Full dashboard at
/admin.htmlwith charts and tables - Payout Retry: Manual retry button in admin dashboard
Pre-Production Testing Checklist
Security Verification
- Chat XSS:
<script>and"onclick=render as plain text - Duplicate tx_hash insertion fails with constraint error
- Payout creates pending record before RPC call
- Failed payouts have records for retry
- Retry service processes failed payouts (check logs)
Smirk Integration Verification
- "Connect Smirk" button appears when extension installed
- "Get Smirk Wallet" link appears when extension NOT installed
- Challenge generated and stored in DB
- Signature verification links public key to user
- Payout address auto-populated from wallet
- Anonymous sessions still work (backwards compatible)
End-to-End Testing
- Play full game with Smirk login
- Win and receive payout to Smirk address
- Verify payout recorded in transaction history
- Manual integration test with real wallet-rpc
Known Issues / Future Improvements
Backend
- Database Transactions:
withTransaction()helper for atomic financial operations ✅ - Payment Idempotency: Replace in-memory Set with database-backed idempotency keys for payment confirmation
- Payout Retry Queue: Automatic retry mechanism via
payoutRetryService.js✅ - Address Validation: Wallet RPC
validate_addressmethod ✅ - Redis Rate Limiting: Replace in-memory rate limiter with Redis for persistence across restarts
Frontend
- Socket Reconnection: Add
reconnectanddisconnecthandlers to restore state after connection loss - Payment Timeout UI: Show countdown timer for payment expiration, auto-clean expired payment UI
- Event Cleanup: Add proper cleanup for event listeners when modules are re-initialized
- Connection Status Indicator: Show real-time socket connection state in UI