72 lines
2.7 KiB
JavaScript
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 || ''
|
|
};
|
|
}
|