Files
COMERCIAL-GTI/src/env.mjs
T
2026-09-28 15:48:44 -03:00

72 lines
2.7 KiB
JavaScript

import fs from 'node:fs/promises';
import path from 'node:path';
import { fileURLToPath } from 'node:url';
// Raiz do projeto resolvida a partir deste arquivo (src/env.mjs -> pasta acima),
// para funcionar igual quando o servidor e iniciado pelo launcher (cwd diferente).
export const projectRoot = path.dirname(fileURLToPath(new URL('.', import.meta.url)));
export const paths = {
root: projectRoot,
data: path.join(projectRoot, 'data'),
db: process.env.APP_DB_PATH || path.join(projectRoot, 'data', 'maquina-pessoal.db'),
whatsappAuth: process.env.APP_WHATSAPP_AUTH_DIR || path.join(projectRoot, 'data', 'runtime', 'whatsapp-auth'),
exports: path.join(projectRoot, 'data', 'exports'),
seeds: path.join(projectRoot, 'data', 'seeds'),
cnpjDir: process.env.CNPJ_BASE_DIR || path.join(projectRoot, 'prospeccao', 'cnpj'),
rfbRaw: path.join(projectRoot, 'prospeccao', 'cnpj', 'rfb-raw'),
config: path.join(projectRoot, 'prospeccao', 'config.json'),
public: path.join(projectRoot, 'public')
};
export let APP_PORT = envNumber('APP_PORT', 3910);
export let APP_HOST = envString('APP_HOST', '127.0.0.1');
function refreshEnvDerivedValues() {
paths.db = process.env.APP_DB_PATH || path.join(projectRoot, 'data', 'maquina-pessoal.db');
paths.whatsappAuth = process.env.APP_WHATSAPP_AUTH_DIR || path.join(projectRoot, 'data', 'runtime', 'whatsapp-auth');
paths.cnpjDir = process.env.CNPJ_BASE_DIR || path.join(projectRoot, 'prospeccao', 'cnpj');
paths.rfbRaw = path.join(paths.cnpjDir, 'rfb-raw');
APP_PORT = envNumber('APP_PORT', 3910);
APP_HOST = envString('APP_HOST', '127.0.0.1');
}
export async function loadDotEnv(rootDir = projectRoot) {
try {
const content = await fs.readFile(path.join(rootDir, '.env'), 'utf8');
for (const line of content.split(/\r?\n/)) {
const trimmed = line.trim();
if (!trimmed || trimmed.startsWith('#')) continue;
const separator = trimmed.indexOf('=');
if (separator === -1) continue;
const key = trimmed.slice(0, separator).trim();
const value = trimmed.slice(separator + 1).trim();
if (!process.env[key]) process.env[key] = value;
}
refreshEnvDerivedValues();
} catch (error) {
if (error.code !== 'ENOENT') throw error;
}
}
export function envNumber(name, fallback) {
const value = Number(process.env[name]);
return Number.isFinite(value) && value > 0 ? value : fallback;
}
export function envString(name, fallback) {
return process.env[name] || fallback;
}
export function telegramConfig() {
return {
enabled: process.env.TELEGRAM_ALERTS_ENABLED === 'true',
botToken: process.env.TELEGRAM_BOT_TOKEN || '',
chatId: process.env.TELEGRAM_CHAT_ID || ''
};
}