Files
sejong-office/packages/backend/src/config.ts
T
2026-07-15 17:29:25 +09:00

52 lines
1.4 KiB
TypeScript

import './loadEnv.js';
import path from 'node:path';
import { fileURLToPath } from 'node:url';
const __dirname = path.dirname(fileURLToPath(import.meta.url));
function env(name: string, fallback?: string): string {
const value = process.env[name] ?? fallback;
if (value === undefined) {
throw new Error(`Missing required env: ${name}`);
}
return value;
}
export const config = {
port: Number(process.env.PORT ?? 3000),
jwtSecret: env('JWT_SECRET', 'dev-only-change-me'),
publicUrl: env('PUBLIC_URL', 'http://localhost:3000').replace(/\/$/, ''),
internalUrl: env('INTERNAL_URL', 'http://localhost:3000').replace(/\/$/, ''),
onlyOfficeUrl: env('ONLYOFFICE_URL', 'http://localhost:8080').replace(/\/$/, ''),
onlyOfficeInternalUrl: env(
'ONLYOFFICE_INTERNAL_URL',
process.env.ONLYOFFICE_URL ?? 'http://localhost:8080',
).replace(/\/$/, ''),
sessionTtlMs: Number(process.env.SESSION_TTL_MS ?? 900_000),
tempDir: env('TEMP_DIR', '/tmp/sejong'),
maxUploadMb: Number(process.env.MAX_UPLOAD_MB ?? 50),
publicDir: path.resolve(__dirname, '../public'),
};
/** Extensions handled by OnlyOffice (not HWP — that stays client-side via rhwp). */
export const OFFICE_EXTENSIONS = new Set([
'docx',
'xlsx',
'pptx',
'odt',
'ods',
'odp',
'doc',
'xls',
'ppt',
'rtf',
'txt',
'pdf',
'csv',
'dotx',
'xltx',
'potx',
]);
export const HWP_EXTENSIONS = new Set(['hwp', 'hwpx']);