# Quick Start Guide Get TurboTrades backend up and running in 5 minutes! ## Prerequisites - Node.js 18+ installed - MongoDB running locally or accessible remotely - Steam API key ([Get one here](https://steamcommunity.com/dev/apikey)) ## Step 1: Install Dependencies ```bash npm install ``` ## Step 2: Configure Environment Create a `.env` file in the root directory: ```bash cp .env.example .env ``` Edit `.env` with your settings: ```env # Minimum required configuration MONGODB_URI=mongodb://localhost:27017/turbotrades STEAM_API_KEY=YOUR_STEAM_API_KEY_HERE SESSION_SECRET=change-this-to-something-random JWT_ACCESS_SECRET=change-this-to-something-random JWT_REFRESH_SECRET=change-this-to-something-different ``` **Important**: Generate secure random secrets for production: ```bash # On Linux/Mac node -e "console.log(require('crypto').randomBytes(32).toString('hex'))" # Or use this online: https://randomkeygen.com/ ``` ## Step 3: Start MongoDB If MongoDB isn't running: ```bash # Start MongoDB service mongod # Or with Docker docker run -d -p 27017:27017 --name mongodb mongo:latest ``` ## Step 4: Start the Server ```bash # Development mode (auto-reload on file changes) npm run dev # Production mode npm start ``` You should see: ``` ✅ MongoDB connected successfully ✅ All plugins registered ✅ All routes registered ✅ Server running on http://0.0.0.0:3000 📡 WebSocket available at ws://0.0.0.0:3000/ws 🔐 Steam Login: http://0.0.0.0:3000/auth/steam ``` ## Step 5: Test the API ### Check Health ```bash curl http://localhost:3000/health ``` Response: ```json { "status": "ok", "timestamp": 1234567890, "uptime": 12.34, "environment": "development" } ``` ### Test Steam Login Open your browser and navigate to: ``` http://localhost:3000/auth/steam ``` This will redirect you to Steam for authentication. After logging in, you'll be redirected back with JWT tokens set as httpOnly cookies. ### Get Current User ```bash curl http://localhost:3000/auth/me \ -H "Cookie: accessToken=YOUR_ACCESS_TOKEN" ``` Or from browser console after logging in: ```javascript fetch('/auth/me', { credentials: 'include' }) .then(r => r.json()) .then(console.log); ``` ## Step 6: Test WebSocket Open browser console and run: ```javascript const ws = new WebSocket('ws://localhost:3000/ws'); ws.onopen = () => console.log('✅ Connected'); ws.onmessage = (e) => console.log('📨 Received:', JSON.parse(e.data)); ws.onerror = (e) => console.error('❌ Error:', e); // Send a ping ws.send(JSON.stringify({ type: 'ping' })); // You should receive a pong response ``` ## Common Issues ### MongoDB Connection Error **Error**: `MongoServerError: connect ECONNREFUSED` **Solution**: Make sure MongoDB is running: ```bash # Check if MongoDB is running ps aux | grep mongod # Or check the service brew services list | grep mongodb # macOS systemctl status mongod # Linux ``` ### Steam Auth Not Working **Error**: Redirect loop or "Invalid API Key" **Solutions**: 1. Make sure your Steam API key is correct in `.env` 2. Check that `STEAM_REALM` and `STEAM_RETURN_URL` match your domain 3. For local development, use `http://localhost:3000` (not 127.0.0.1) ### Port Already in Use **Error**: `EADDRINUSE: address already in use` **Solution**: Either kill the process using port 3000 or change the port: ```bash # Find process using port 3000 lsof -i :3000 # macOS/Linux netstat -ano | find "3000" # Windows # Kill the process kill -9 # Or change port in .env PORT=3001 ``` ### CORS Errors **Error**: `Access-Control-Allow-Origin` error in browser **Solution**: Update `CORS_ORIGIN` in `.env` to match your frontend URL: ```env CORS_ORIGIN=http://localhost:3000 ``` ## Next Steps ### 1. Explore the API Check out all available endpoints in `README.md` ### 2. Implement 2FA The user schema is ready for 2FA. You'll need to: - Install `speakeasy` or `otplib` - Create routes for enabling/disabling 2FA - Verify TOTP codes during sensitive operations ### 3. Add Email Service The schema includes email fields. Set up email service: - Install `nodemailer` - Configure SMTP settings in `.env` - Create email templates - Send verification emails ### 4. Create Item Models Create models for: - Items/Listings - Transactions - Trade history - Inventory Example in `models/Listing.js`: ```javascript import mongoose from "mongoose"; const ListingSchema = new mongoose.Schema({ itemName: { type: String, required: true }, game: { type: String, enum: ['cs2', 'rust'], required: true }, price: { type: Number, required: true, min: 0 }, seller: { type: mongoose.Schema.Types.ObjectId, ref: 'User' }, status: { type: String, enum: ['active', 'sold', 'cancelled'], default: 'active' }, assetId: String, description: String, createdAt: { type: Date, default: Date.now } }, { timestamps: true }); export default mongoose.model('Listing', ListingSchema); ``` ### 5. Integrate Steam API For inventory management and trade offers: - Install `steam-community` and `steam-tradeoffer-manager` - Fetch user inventories - Send trade offers automatically - Handle trade confirmations ### 6. Add Payment Processing Integrate payment providers: - Stripe for card payments - PayPal - Crypto payments - Steam Wallet top-ups ### 7. Build Admin Dashboard Create admin routes in `routes/admin.js`: - User management - Transaction monitoring - Site statistics - Ban/unban users - Manage listings ### 8. Deploy to Production See `README.md` for deployment instructions using: - PM2 for process management - Nginx as reverse proxy - SSL certificates with Let's Encrypt - MongoDB Atlas for hosted database ## Useful Commands ```bash # Start with watch mode (auto-reload) npm run dev # Start production npm start # Install new package npm install package-name # Check for updates npm outdated # Update dependencies npm update ``` ## Development Tips ### 1. Use VSCode Extensions - ESLint - Prettier - MongoDB for VS Code - REST Client (for testing APIs) ### 2. Enable Logging Set log level in Fastify config: ```javascript logger: { level: 'debug' // trace, debug, info, warn, error, fatal } ``` ### 3. Hot Reload Node 18+ has built-in watch mode: ```bash node --watch src/index.js ``` ### 4. Database GUI Use MongoDB Compass for visual database management: - Download: https://www.mongodb.com/products/compass ### 5. API Testing Use tools like: - Postman - Insomnia - HTTPie - curl Example Postman collection structure: ``` TurboTrades/ ├── Auth/ │ ├── Login (GET /auth/steam) │ ├── Get Me (GET /auth/me) │ ├── Refresh Token (POST /auth/refresh) │ └── Logout (POST /auth/logout) ├── User/ │ ├── Get Profile │ ├── Update Trade URL │ └── Update Email └── WebSocket/ └── Get Stats ``` ## Resources - [Fastify Documentation](https://www.fastify.io/docs/latest/) - [Mongoose Documentation](https://mongoosejs.com/docs/) - [Steam Web API Documentation](https://developer.valvesoftware.com/wiki/Steam_Web_API) - [JWT.io](https://jwt.io/) - Debug JWT tokens - [WebSocket API](https://developer.mozilla.org/en-US/docs/Web/API/WebSocket) ## Get Help - Check `README.md` for detailed documentation - Read `WEBSOCKET_GUIDE.md` for WebSocket integration - Review example code in `src/routes/marketplace.example.js` - Open an issue on GitHub --- **Happy coding! 🚀**