"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || (function () { var ownKeys = function(o) { ownKeys = Object.getOwnPropertyNames || function (o) { var ar = []; for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; return ar; }; return ownKeys(o); }; return function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); __setModuleDefault(result, mod); return result; }; })(); Object.defineProperty(exports, "__esModule", { value: true }); exports.validationSchema = exports.envConfig = void 0; const Joi = __importStar(require("joi")); const envConfig = () => ({ nodeEnv: process.env.NODE_ENV || 'development', port: parseInt(process.env.PORT || '3001', 10), database: { host: process.env.DB_HOST || 'localhost', port: parseInt(process.env.DB_PORT || '5432', 10), name: process.env.DB_NAME || 'template_saas_dev', user: process.env.DB_USER || 'template_saas_user', password: process.env.DB_PASSWORD || 'template_saas_dev_2026', }, jwt: { secret: process.env.JWT_SECRET || 'dev-jwt-secret-change-in-production', expiresIn: process.env.JWT_EXPIRES_IN || '15m', refreshExpiresIn: process.env.JWT_REFRESH_EXPIRES_IN || '7d', }, cors: { origin: process.env.CORS_ORIGIN || 'http://localhost:3000', }, stripe: { secretKey: process.env.STRIPE_SECRET_KEY || '', webhookSecret: process.env.STRIPE_WEBHOOK_SECRET || '', publishableKey: process.env.STRIPE_PUBLISHABLE_KEY || '', }, ai: { openrouterApiKey: process.env.OPENROUTER_API_KEY || '', defaultModel: process.env.AI_DEFAULT_MODEL || 'anthropic/claude-3-haiku', fallbackModel: process.env.AI_FALLBACK_MODEL || 'openai/gpt-3.5-turbo', timeoutMs: parseInt(process.env.AI_TIMEOUT_MS || '30000', 10), }, email: { provider: process.env.EMAIL_PROVIDER || 'sendgrid', from: process.env.EMAIL_FROM || 'noreply@example.com', fromName: process.env.EMAIL_FROM_NAME || 'Template SaaS', replyTo: process.env.EMAIL_REPLY_TO || '', sendgridApiKey: process.env.SENDGRID_API_KEY || '', sesRegion: process.env.AWS_SES_REGION || 'us-east-1', sesAccessKeyId: process.env.AWS_SES_ACCESS_KEY_ID || '', sesSecretAccessKey: process.env.AWS_SES_SECRET_ACCESS_KEY || '', smtpHost: process.env.SMTP_HOST || '', smtpPort: parseInt(process.env.SMTP_PORT || '587', 10), smtpUser: process.env.SMTP_USER || '', smtpPassword: process.env.SMTP_PASSWORD || '', smtpSecure: process.env.SMTP_SECURE === 'true', }, }); exports.envConfig = envConfig; exports.validationSchema = Joi.object({ NODE_ENV: Joi.string() .valid('development', 'production', 'test') .default('development'), PORT: Joi.number().default(3001), DB_HOST: Joi.string().default('localhost'), DB_PORT: Joi.number().default(5432), DB_NAME: Joi.string().default('template_saas_dev'), DB_USER: Joi.string().default('template_saas_user'), DB_PASSWORD: Joi.string().default('template_saas_dev_2026'), JWT_SECRET: Joi.string().default('dev-jwt-secret-change-in-production'), JWT_EXPIRES_IN: Joi.string().default('15m'), JWT_REFRESH_EXPIRES_IN: Joi.string().default('7d'), CORS_ORIGIN: Joi.string().default('http://localhost:3000'), STRIPE_SECRET_KEY: Joi.string().allow('').default(''), STRIPE_WEBHOOK_SECRET: Joi.string().allow('').default(''), STRIPE_PUBLISHABLE_KEY: Joi.string().allow('').default(''), OPENROUTER_API_KEY: Joi.string().allow('').default(''), AI_DEFAULT_MODEL: Joi.string().default('anthropic/claude-3-haiku'), AI_FALLBACK_MODEL: Joi.string().default('openai/gpt-3.5-turbo'), AI_TIMEOUT_MS: Joi.number().default(30000), EMAIL_PROVIDER: Joi.string().valid('sendgrid', 'ses', 'smtp').default('sendgrid'), EMAIL_FROM: Joi.string().email().default('noreply@example.com'), EMAIL_FROM_NAME: Joi.string().default('Template SaaS'), EMAIL_REPLY_TO: Joi.string().allow('').default(''), SENDGRID_API_KEY: Joi.string().allow('').default(''), AWS_SES_REGION: Joi.string().default('us-east-1'), AWS_SES_ACCESS_KEY_ID: Joi.string().allow('').default(''), AWS_SES_SECRET_ACCESS_KEY: Joi.string().allow('').default(''), SMTP_HOST: Joi.string().allow('').default(''), SMTP_PORT: Joi.number().default(587), SMTP_USER: Joi.string().allow('').default(''), SMTP_PASSWORD: Joi.string().allow('').default(''), SMTP_SECURE: Joi.boolean().default(false), }); //# sourceMappingURL=env.config.js.map