45 lines
1.6 KiB
TypeScript
45 lines
1.6 KiB
TypeScript
import path from "node:path"
|
|
import os from "node:os"
|
|
import { AgentConfig } from "./types.js"
|
|
import { loadDotEnv } from "./env.js"
|
|
|
|
const optional = (value: string | undefined) => {
|
|
const trimmed = value?.trim()
|
|
return trimmed ? trimmed : undefined
|
|
}
|
|
|
|
const numberFromEnv = (value: string | undefined, fallback: number) => {
|
|
if (!value) return fallback
|
|
|
|
const parsed = Number(value)
|
|
return Number.isFinite(parsed) && parsed > 0 ? parsed : fallback
|
|
}
|
|
|
|
const scanFormatFromEnv = (value: string | undefined): AgentConfig["scanFormat"] => {
|
|
if (value === "png" || value === "tiff" || value === "pdf") return value
|
|
return "pdf"
|
|
}
|
|
|
|
export const loadConfig = (): AgentConfig => {
|
|
loadDotEnv(process.env.FEDEO_AGENT_ENV || ".env")
|
|
|
|
const fedeoUrl = optional(process.env.FEDEO_URL)
|
|
const agentToken = optional(process.env.FEDEO_AGENT_TOKEN)
|
|
|
|
if (!fedeoUrl) throw new Error("FEDEO_URL fehlt")
|
|
if (!agentToken) throw new Error("FEDEO_AGENT_TOKEN fehlt")
|
|
|
|
return {
|
|
fedeoUrl: fedeoUrl.replace(/\/+$/, ""),
|
|
agentToken,
|
|
pollSeconds: numberFromEnv(process.env.FEDEO_POLL_SECONDS, 5),
|
|
workDir: optional(process.env.FEDEO_WORK_DIR) || path.join(os.tmpdir(), "fedeo-device-agent"),
|
|
scannerName: optional(process.env.FEDEO_SCANNER_NAME),
|
|
printerName: optional(process.env.FEDEO_PRINTER_NAME),
|
|
scanFormat: scanFormatFromEnv(process.env.FEDEO_SCAN_FORMAT),
|
|
scanResolution: numberFromEnv(process.env.FEDEO_SCAN_RESOLUTION, 300),
|
|
scanMode: optional(process.env.FEDEO_SCAN_MODE) || "Color",
|
|
scanSource: optional(process.env.FEDEO_SCAN_SOURCE),
|
|
}
|
|
}
|