52 lines
1.4 KiB
TypeScript
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']);
|