mirror of
https://github.com/Memo-2023/mana-monorepo.git
synced 2026-05-22 12:46:42 +02:00
## Runtime Environment Fix - Updated all web app hooks.server.ts to use $env/dynamic/private - This allows Docker containers to inject env vars at runtime - Updated docker-compose.staging.yml with HTTPS staging domains - Fixes Mixed Content errors when accessing staging via domains ## New Features - Added email service to mana-core-auth for sending emails - Added storage module to chat backend 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
58 lines
1.7 KiB
TypeScript
58 lines
1.7 KiB
TypeScript
export default () => ({
|
|
port: parseInt(process.env.PORT || '3001', 10),
|
|
nodeEnv: process.env.NODE_ENV || 'development',
|
|
|
|
database: {
|
|
url: process.env.DATABASE_URL || 'postgresql://manacore:password@localhost:5432/manacore',
|
|
},
|
|
|
|
jwt: {
|
|
// Convert \n string literals to actual newlines for PEM format
|
|
publicKey: (process.env.JWT_PUBLIC_KEY || '').replace(/\\n/g, '\n'),
|
|
privateKey: (process.env.JWT_PRIVATE_KEY || '').replace(/\\n/g, '\n'),
|
|
accessTokenExpiry: process.env.JWT_ACCESS_TOKEN_EXPIRY || '15m',
|
|
refreshTokenExpiry: process.env.JWT_REFRESH_TOKEN_EXPIRY || '7d',
|
|
issuer: process.env.JWT_ISSUER || 'manacore',
|
|
audience: process.env.JWT_AUDIENCE || 'manacore',
|
|
},
|
|
|
|
redis: {
|
|
host: process.env.REDIS_HOST || 'localhost',
|
|
port: parseInt(process.env.REDIS_PORT || '6379', 10),
|
|
password: process.env.REDIS_PASSWORD,
|
|
},
|
|
|
|
stripe: {
|
|
secretKey: process.env.STRIPE_SECRET_KEY || '',
|
|
webhookSecret: process.env.STRIPE_WEBHOOK_SECRET || '',
|
|
publishableKey: process.env.STRIPE_PUBLISHABLE_KEY || '',
|
|
},
|
|
|
|
email: {
|
|
brevoApiKey: process.env.BREVO_API_KEY || '',
|
|
fromEmail: process.env.BREVO_FROM_EMAIL || 'noreply@manacore.app',
|
|
fromName: process.env.BREVO_FROM_NAME || 'Mana Core',
|
|
},
|
|
|
|
cors: {
|
|
origin: process.env.CORS_ORIGINS?.split(',') || [
|
|
'http://localhost:3000',
|
|
'http://localhost:8081',
|
|
],
|
|
credentials: true,
|
|
},
|
|
|
|
rateLimit: {
|
|
ttl: parseInt(process.env.RATE_LIMIT_TTL || '60', 10),
|
|
limit: parseInt(process.env.RATE_LIMIT_MAX || '100', 10),
|
|
},
|
|
|
|
credits: {
|
|
signupBonus: parseInt(process.env.CREDITS_SIGNUP_BONUS || '150', 10),
|
|
dailyFreeCredits: parseInt(process.env.CREDITS_DAILY_FREE || '5', 10),
|
|
},
|
|
|
|
ai: {
|
|
geminiApiKey: process.env.GOOGLE_GENAI_API_KEY || '',
|
|
},
|
|
});
|