195 lines
5.3 KiB
JavaScript
195 lines
5.3 KiB
JavaScript
![]() |
// Configuration for the frontend application
|
||
|
const CONFIG = {
|
||
|
// API Configuration
|
||
|
API_BASE_URL: process.env.NODE_ENV === 'production'
|
||
|
? 'https://api.seo-image-renamer.com'
|
||
|
: 'http://localhost:3001',
|
||
|
|
||
|
// WebSocket Configuration
|
||
|
WEBSOCKET_URL: process.env.NODE_ENV === 'production'
|
||
|
? 'wss://api.seo-image-renamer.com'
|
||
|
: 'ws://localhost:3001',
|
||
|
|
||
|
// Stripe Configuration
|
||
|
STRIPE_PUBLISHABLE_KEY: process.env.NODE_ENV === 'production'
|
||
|
? 'pk_live_your_stripe_publishable_key'
|
||
|
: 'pk_test_51234567890abcdef',
|
||
|
|
||
|
// Google OAuth Configuration
|
||
|
GOOGLE_CLIENT_ID: process.env.NODE_ENV === 'production'
|
||
|
? 'your-production-google-client-id.apps.googleusercontent.com'
|
||
|
: 'your-dev-google-client-id.apps.googleusercontent.com',
|
||
|
|
||
|
// Upload Configuration
|
||
|
MAX_FILE_SIZE: 10 * 1024 * 1024, // 10MB
|
||
|
MAX_FILES: 50,
|
||
|
SUPPORTED_FORMATS: ['image/jpeg', 'image/png', 'image/webp', 'image/gif'],
|
||
|
|
||
|
// Processing Configuration
|
||
|
WEBSOCKET_RECONNECT_INTERVAL: 5000,
|
||
|
MAX_RECONNECT_ATTEMPTS: 5,
|
||
|
|
||
|
// UI Configuration
|
||
|
ANIMATION_DURATION: 300,
|
||
|
TOAST_DURATION: 5000,
|
||
|
|
||
|
// Feature Flags
|
||
|
FEATURES: {
|
||
|
GOOGLE_AUTH: true,
|
||
|
STRIPE_PAYMENTS: true,
|
||
|
WEBSOCKET_UPDATES: true,
|
||
|
IMAGE_PREVIEW: true,
|
||
|
BATCH_PROCESSING: true,
|
||
|
DOWNLOAD_TRACKING: true,
|
||
|
},
|
||
|
|
||
|
// Error Messages
|
||
|
ERRORS: {
|
||
|
NETWORK_ERROR: 'Network error. Please check your connection and try again.',
|
||
|
AUTH_REQUIRED: 'Please sign in to continue.',
|
||
|
QUOTA_EXCEEDED: 'You have reached your monthly quota. Please upgrade your plan.',
|
||
|
FILE_TOO_LARGE: 'File is too large. Maximum size is 10MB.',
|
||
|
UNSUPPORTED_FORMAT: 'Unsupported file format. Please use JPG, PNG, WebP, or GIF.',
|
||
|
TOO_MANY_FILES: 'Too many files. Maximum is 50 files per batch.',
|
||
|
PROCESSING_FAILED: 'Processing failed. Please try again.',
|
||
|
DOWNLOAD_FAILED: 'Download failed. Please try again.',
|
||
|
},
|
||
|
|
||
|
// Success Messages
|
||
|
SUCCESS: {
|
||
|
UPLOAD_COMPLETE: 'Files uploaded successfully!',
|
||
|
PROCESSING_COMPLETE: 'Images processed successfully!',
|
||
|
DOWNLOAD_READY: 'Your download is ready!',
|
||
|
PAYMENT_SUCCESS: 'Payment successful! Your plan has been upgraded.',
|
||
|
KEYWORDS_ENHANCED: 'Keywords enhanced successfully!',
|
||
|
},
|
||
|
|
||
|
// API Endpoints
|
||
|
ENDPOINTS: {
|
||
|
// Auth
|
||
|
GOOGLE_AUTH: '/api/auth/google',
|
||
|
LOGIN: '/api/auth/login',
|
||
|
LOGOUT: '/api/auth/logout',
|
||
|
ME: '/api/auth/me',
|
||
|
|
||
|
// Users
|
||
|
USER_PROFILE: '/api/users/profile',
|
||
|
USER_STATS: '/api/users/stats',
|
||
|
USER_QUOTA: '/api/users/quota',
|
||
|
|
||
|
// Batches
|
||
|
BATCHES: '/api/batches',
|
||
|
BATCH_STATUS: '/api/batches/:id/status',
|
||
|
BATCH_IMAGES: '/api/batches/:id/images',
|
||
|
|
||
|
// Images
|
||
|
IMAGES: '/api/images',
|
||
|
IMAGE_UPLOAD: '/api/images/upload',
|
||
|
IMAGE_UPDATE: '/api/images/:id',
|
||
|
|
||
|
// Keywords
|
||
|
KEYWORD_ENHANCE: '/api/keywords/enhance',
|
||
|
|
||
|
// Payments
|
||
|
PAYMENT_CHECKOUT: '/api/payments/checkout',
|
||
|
PAYMENT_PORTAL: '/api/payments/portal',
|
||
|
PAYMENT_SUBSCRIPTION: '/api/payments/subscription',
|
||
|
PAYMENT_PLANS: '/api/payments/plans',
|
||
|
|
||
|
// Downloads
|
||
|
DOWNLOAD_CREATE: '/api/downloads/create',
|
||
|
DOWNLOAD_STATUS: '/api/downloads/:id/status',
|
||
|
DOWNLOAD_FILE: '/api/downloads/:id',
|
||
|
DOWNLOAD_HISTORY: '/api/downloads/user/history',
|
||
|
},
|
||
|
|
||
|
// WebSocket Events
|
||
|
WEBSOCKET_EVENTS: {
|
||
|
// Connection
|
||
|
CONNECT: 'connect',
|
||
|
DISCONNECT: 'disconnect',
|
||
|
ERROR: 'error',
|
||
|
|
||
|
// Batch Processing
|
||
|
BATCH_CREATED: 'batch.created',
|
||
|
BATCH_UPDATED: 'batch.updated',
|
||
|
BATCH_COMPLETED: 'batch.completed',
|
||
|
BATCH_FAILED: 'batch.failed',
|
||
|
|
||
|
// Image Processing
|
||
|
IMAGE_PROCESSING: 'image.processing',
|
||
|
IMAGE_COMPLETED: 'image.completed',
|
||
|
IMAGE_FAILED: 'image.failed',
|
||
|
|
||
|
// Progress Updates
|
||
|
PROGRESS_UPDATE: 'progress.update',
|
||
|
|
||
|
// User Updates
|
||
|
QUOTA_UPDATED: 'quota.updated',
|
||
|
SUBSCRIPTION_UPDATED: 'subscription.updated',
|
||
|
},
|
||
|
|
||
|
// Local Storage Keys
|
||
|
STORAGE_KEYS: {
|
||
|
AUTH_TOKEN: 'seo_auth_token',
|
||
|
USER_DATA: 'seo_user_data',
|
||
|
RECENT_KEYWORDS: 'seo_recent_keywords',
|
||
|
UPLOAD_PROGRESS: 'seo_upload_progress',
|
||
|
BATCH_DATA: 'seo_batch_data',
|
||
|
},
|
||
|
|
||
|
// URLs
|
||
|
URLS: {
|
||
|
TERMS_OF_SERVICE: '/terms',
|
||
|
PRIVACY_POLICY: '/privacy',
|
||
|
SUPPORT: '/support',
|
||
|
DOCUMENTATION: '/docs',
|
||
|
},
|
||
|
|
||
|
// Quota Limits by Plan
|
||
|
PLAN_LIMITS: {
|
||
|
BASIC: 50,
|
||
|
PRO: 500,
|
||
|
MAX: 1000,
|
||
|
},
|
||
|
|
||
|
// Plan Prices (in cents)
|
||
|
PLAN_PRICES: {
|
||
|
BASIC: 0,
|
||
|
PRO: 900, // $9.00
|
||
|
MAX: 1900, // $19.00
|
||
|
},
|
||
|
|
||
|
// Image Processing Settings
|
||
|
IMAGE_PROCESSING: {
|
||
|
MAX_FILENAME_LENGTH: 100,
|
||
|
MIN_KEYWORDS: 1,
|
||
|
MAX_KEYWORDS: 10,
|
||
|
SUPPORTED_EXTENSIONS: ['.jpg', '.jpeg', '.png', '.webp', '.gif'],
|
||
|
},
|
||
|
|
||
|
// Development Settings
|
||
|
DEV: {
|
||
|
ENABLE_LOGGING: true,
|
||
|
MOCK_API_DELAY: 1000,
|
||
|
ENABLE_DEBUG_MODE: process.env.NODE_ENV === 'development',
|
||
|
},
|
||
|
};
|
||
|
|
||
|
// Environment-specific overrides
|
||
|
if (typeof window !== 'undefined') {
|
||
|
// Browser environment
|
||
|
const hostname = window.location.hostname;
|
||
|
|
||
|
if (hostname === 'localhost' || hostname === '127.0.0.1') {
|
||
|
CONFIG.API_BASE_URL = 'http://localhost:3001';
|
||
|
CONFIG.WEBSOCKET_URL = 'ws://localhost:3001';
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Export configuration
|
||
|
if (typeof module !== 'undefined' && module.exports) {
|
||
|
module.exports = CONFIG;
|
||
|
} else if (typeof window !== 'undefined') {
|
||
|
window.CONFIG = CONFIG;
|
||
|
}
|