mirror of
https://github.com/profullstack/logicsrc.git
synced 2026-08-15 07:17:30 +00:00
34 lines
1.3 KiB
TypeScript
34 lines
1.3 KiB
TypeScript
import type { FeedDiscoveryConfig } from "./types.js";
|
|
|
|
const DEFAULT_TIMEOUT_MS = 8_000;
|
|
const DEFAULT_MAX_BODY_BYTES = 1_000_000;
|
|
|
|
export function readFeedDiscoveryConfig(env: NodeJS.ProcessEnv = process.env): FeedDiscoveryConfig {
|
|
return {
|
|
cacheTtlSeconds: readNumber(env.LOGICSRC_FEEDS_CACHE_TTL_SECONDS, 86_400),
|
|
maxProviders: readNumber(env.LOGICSRC_FEEDS_MAX_PROVIDERS, 10),
|
|
maxProbes: readNumber(env.LOGICSRC_FEEDS_MAX_PROBES, 50),
|
|
requestTimeoutMs: readNumber(env.LOGICSRC_FEEDS_REQUEST_TIMEOUT_MS, DEFAULT_TIMEOUT_MS),
|
|
maxBodyBytes: readNumber(env.LOGICSRC_FEEDS_MAX_BODY_BYTES, DEFAULT_MAX_BODY_BYTES),
|
|
userAgent: env.LOGICSRC_FEEDS_USER_AGENT || "LogicSrcFeedDiscovery/0.1",
|
|
opmlPaths: splitList(env.LOGICSRC_FEEDS_OPML_PATHS),
|
|
candidateUrls: splitList(env.LOGICSRC_FEEDS_CANDIDATE_URLS),
|
|
podcastIndexApiKey: env.PODCASTINDEX_API_KEY,
|
|
podcastIndexApiSecret: env.PODCASTINDEX_API_SECRET
|
|
};
|
|
}
|
|
|
|
function readNumber(value: string | undefined, fallback: number) {
|
|
if (!value) {
|
|
return fallback;
|
|
}
|
|
const parsed = Number(value);
|
|
return Number.isFinite(parsed) && parsed > 0 ? parsed : fallback;
|
|
}
|
|
|
|
function splitList(value: string | undefined) {
|
|
return (value ?? "")
|
|
.split(",")
|
|
.map((entry) => entry.trim())
|
|
.filter(Boolean);
|
|
}
|