import { existsSync } from 'node:fs'; import { resolve } from 'node:path'; import { loadEnvFile } from 'node:process'; for (const directory of [ process.cwd(), resolve(process.cwd(), '..'), resolve(process.cwd(), '../..'), ]) { const path = resolve(directory, '.env'); if (existsSync(path)) { loadEnvFile(path); break; } } function required(name: string): string { const value = process.env[name]; if (!value) throw new Error(`${name} is required`); return value; } function objectStorageCredential( accessKeyName: string, localFallbackName: string, ): string { return process.env[accessKeyName] || required(localFallbackName); } export const workerConfig = { databaseUrl: required('DATABASE_URL'), redisUrl: required('REDIS_URL'), storeSecretEncryptionKey: required('STORE_SECRET_ENCRYPTION_KEY'), legacyMinioEndpoint: process.env.LEGACY_MINIO_ENDPOINT ?? 'http://localhost:9000', legacyMinioAccessKey: process.env.MINIO_ROOT_USER ?? '', legacyMinioSecretKey: process.env.MINIO_ROOT_PASSWORD ?? '', objectStorageProvider: process.env.OBJECT_STORAGE_PROVIDER ?? 'local_minio', ozonImageDownloadOrigin: process.env.OZON_IMAGE_DOWNLOAD_ORIGIN ?? '', ozonImageUrlTtlSeconds: Number(process.env.OZON_IMAGE_URL_TTL_SECONDS ?? 604800), qiniuAccessKey: process.env.QINIU_ACCESS_KEY ?? process.env.OBJECT_STORAGE_ACCESS_KEY ?? '', qiniuSecretKey: process.env.QINIU_SECRET_KEY ?? process.env.OBJECT_STORAGE_SECRET_KEY ?? '', objectStorageEndpoint: process.env.OBJECT_STORAGE_ENDPOINT ?? 'http://localhost:9000', objectStorageRegion: process.env.OBJECT_STORAGE_REGION ?? 'us-east-1', objectStorageBucket: process.env.OBJECT_STORAGE_BUCKET ?? 'atlas-assets', objectStorageForcePathStyle: (process.env.OBJECT_STORAGE_FORCE_PATH_STYLE ?? 'true') === 'true', objectStorageAccessKey: objectStorageCredential( 'OBJECT_STORAGE_ACCESS_KEY', 'MINIO_ROOT_USER', ), objectStorageSecretKey: objectStorageCredential( 'OBJECT_STORAGE_SECRET_KEY', 'MINIO_ROOT_PASSWORD', ), };