import { loadQueueTopologyFromEnv, type QueueTopology } from "@image-platform/queue" import { loadStorageConfigFromEnv, type StorageConfig } from "@image-platform/storage" export type WorkerConfig = { imgproxyUpstream: URL prefetch: number queueTopology: QueueTopology rabbitmqUrl: string storage: StorageConfig } export function loadWorkerConfig(env: NodeJS.ProcessEnv = process.env): WorkerConfig { return { imgproxyUpstream: new URL(getRequiredEnv(env, "IMGPROXY_UPSTREAM")), prefetch: parsePositiveInteger(env.WORKER_PREFETCH, 2), queueTopology: loadQueueTopologyFromEnv(env), rabbitmqUrl: getRequiredEnv(env, "RABBITMQ_URL"), storage: loadStorageConfigFromEnv(env), } } function getRequiredEnv(env: NodeJS.ProcessEnv, name: string) { const value = env[name] if (!value) { throw new Error(`${name} is required`) } return value } function parsePositiveInteger(value: string | undefined, fallback: number) { if (!value) { return fallback } const parsed = Number.parseInt(value, 10) return Number.isSafeInteger(parsed) && parsed > 0 ? parsed : fallback }