NestJS backend with: - Authentication (JWT) - WebSocket real-time support - ML integration services - Payments module - User management Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
122 lines
4.3 KiB
TypeScript
122 lines
4.3 KiB
TypeScript
/**
|
|
* Application Configuration
|
|
*/
|
|
|
|
import dotenv from 'dotenv';
|
|
|
|
dotenv.config();
|
|
|
|
export const config = {
|
|
app: {
|
|
name: 'Trading Platform',
|
|
version: '0.1.0',
|
|
env: process.env.NODE_ENV || 'development',
|
|
port: parseInt(process.env.PORT || '3000', 10),
|
|
frontendUrl: process.env.FRONTEND_URL || 'http://localhost:5173',
|
|
apiUrl: process.env.API_URL || 'http://localhost:3000',
|
|
},
|
|
|
|
cors: {
|
|
origins: process.env.CORS_ORIGINS?.split(',') || ['http://localhost:5173'],
|
|
},
|
|
|
|
jwt: {
|
|
accessSecret: process.env.JWT_ACCESS_SECRET || 'your-access-secret-change-in-production',
|
|
refreshSecret: process.env.JWT_REFRESH_SECRET || 'your-refresh-secret-change-in-production',
|
|
accessExpiry: process.env.JWT_ACCESS_EXPIRES || '15m',
|
|
refreshExpiry: process.env.JWT_REFRESH_EXPIRES || '7d',
|
|
},
|
|
|
|
database: {
|
|
host: process.env.DB_HOST || 'localhost',
|
|
port: parseInt(process.env.DB_PORT || '5432', 10),
|
|
name: process.env.DB_NAME || 'trading',
|
|
user: process.env.DB_USER || 'postgres',
|
|
password: process.env.DB_PASSWORD || 'postgres',
|
|
ssl: process.env.DB_SSL === 'true',
|
|
poolMax: parseInt(process.env.DB_POOL_MAX || '20', 10),
|
|
idleTimeout: parseInt(process.env.DB_IDLE_TIMEOUT || '30000', 10),
|
|
connectionTimeout: parseInt(process.env.DB_CONNECTION_TIMEOUT || '5000', 10),
|
|
},
|
|
|
|
redis: {
|
|
url: process.env.REDIS_URL,
|
|
host: process.env.REDIS_HOST || 'localhost',
|
|
port: parseInt(process.env.REDIS_PORT || '6379', 10),
|
|
password: process.env.REDIS_PASSWORD,
|
|
db: parseInt(process.env.REDIS_DB || '0', 10),
|
|
},
|
|
|
|
stripe: {
|
|
secretKey: process.env.STRIPE_SECRET_KEY || '',
|
|
webhookSecret: process.env.STRIPE_WEBHOOK_SECRET || '',
|
|
publishableKey: process.env.STRIPE_PUBLISHABLE_KEY || '',
|
|
},
|
|
|
|
mlEngine: {
|
|
baseUrl: process.env.ML_ENGINE_URL || 'http://localhost:3083',
|
|
timeout: parseInt(process.env.ML_ENGINE_TIMEOUT || '5000', 10),
|
|
},
|
|
|
|
rateLimit: {
|
|
windowMs: parseInt(process.env.RATE_LIMIT_WINDOW_MS || '60000', 10),
|
|
max: parseInt(process.env.RATE_LIMIT_MAX || '100', 10),
|
|
},
|
|
|
|
email: {
|
|
host: process.env.EMAIL_HOST || 'smtp.gmail.com',
|
|
port: parseInt(process.env.EMAIL_PORT || '587', 10),
|
|
secure: process.env.EMAIL_SECURE === 'true',
|
|
user: process.env.EMAIL_USER || '',
|
|
password: process.env.EMAIL_PASSWORD || '',
|
|
from: process.env.EMAIL_FROM || 'noreply@trading.io',
|
|
},
|
|
|
|
twilio: {
|
|
accountSid: process.env.TWILIO_ACCOUNT_SID || '',
|
|
authToken: process.env.TWILIO_AUTH_TOKEN || '',
|
|
phoneNumber: process.env.TWILIO_PHONE_NUMBER || '',
|
|
whatsappNumber: process.env.TWILIO_WHATSAPP_NUMBER || '',
|
|
verifyServiceSid: process.env.TWILIO_VERIFY_SERVICE_SID || '',
|
|
useVerifyService: process.env.TWILIO_USE_VERIFY_SERVICE === 'true',
|
|
},
|
|
|
|
oauth: {
|
|
google: {
|
|
clientId: process.env.GOOGLE_CLIENT_ID || '',
|
|
clientSecret: process.env.GOOGLE_CLIENT_SECRET || '',
|
|
callbackUrl: process.env.GOOGLE_CALLBACK_URL || 'http://localhost:3000/api/auth/google/callback',
|
|
scope: ['openid', 'email', 'profile'],
|
|
},
|
|
facebook: {
|
|
clientId: process.env.FACEBOOK_CLIENT_ID || '',
|
|
clientSecret: process.env.FACEBOOK_CLIENT_SECRET || '',
|
|
callbackUrl: process.env.FACEBOOK_CALLBACK_URL || 'http://localhost:3000/api/auth/facebook/callback',
|
|
scope: ['email', 'public_profile'],
|
|
},
|
|
twitter: {
|
|
clientId: process.env.TWITTER_CLIENT_ID || '',
|
|
clientSecret: process.env.TWITTER_CLIENT_SECRET || '',
|
|
callbackUrl: process.env.TWITTER_CALLBACK_URL || 'http://localhost:3000/api/auth/twitter/callback',
|
|
scope: ['users.read', 'tweet.read', 'offline.access'],
|
|
},
|
|
apple: {
|
|
clientId: process.env.APPLE_CLIENT_ID || '',
|
|
clientSecret: process.env.APPLE_CLIENT_SECRET || '',
|
|
teamId: process.env.APPLE_TEAM_ID || '',
|
|
keyId: process.env.APPLE_KEY_ID || '',
|
|
privateKey: process.env.APPLE_PRIVATE_KEY || '',
|
|
callbackUrl: process.env.APPLE_CALLBACK_URL || 'http://localhost:3000/api/auth/apple/callback',
|
|
scope: ['name', 'email'],
|
|
},
|
|
github: {
|
|
clientId: process.env.GITHUB_CLIENT_ID || '',
|
|
clientSecret: process.env.GITHUB_CLIENT_SECRET || '',
|
|
callbackUrl: process.env.GITHUB_CALLBACK_URL || 'http://localhost:3000/api/auth/github/callback',
|
|
scope: ['read:user', 'user:email'],
|
|
},
|
|
},
|
|
};
|
|
|
|
export type Config = typeof config;
|