mirror of
https://github.com/cupcakearmy/docker-ddns-cloudflare.git
synced 2025-09-10 15:00:41 +00:00
1.3.0 (#6)
This commit is contained in:
50
src/config.ts
Normal file
50
src/config.ts
Normal file
@@ -0,0 +1,50 @@
|
||||
import { config } from 'dotenv'
|
||||
import { validate } from 'node-cron'
|
||||
|
||||
config()
|
||||
|
||||
function getEnv(key: string, fallback: string, parse?: undefined, validator?: (s: string) => boolean): string
|
||||
function getEnv<T>(key: string, fallback: T, parse: (value: string) => T, validator?: (T: string) => boolean): T
|
||||
function getEnv<T>(
|
||||
key: string,
|
||||
fallback: T,
|
||||
parse?: (value: string) => T,
|
||||
validator?: (s: string | T) => boolean
|
||||
): T | string {
|
||||
const value = process.env[key]
|
||||
const parsed = value === undefined ? fallback : parse ? parse(value) : value
|
||||
if (validator && !validator(parsed)) {
|
||||
console.error(`Invalid or missing value for ${key}: ${value}`)
|
||||
process.exit(1)
|
||||
}
|
||||
return parsed
|
||||
}
|
||||
|
||||
function parseBoolean(value: string): boolean {
|
||||
value = value.toLowerCase()
|
||||
const truthy = ['true', 'yes', '1']
|
||||
return truthy.includes(value)
|
||||
}
|
||||
|
||||
function isPresent(s: string): boolean {
|
||||
return s.length > 0
|
||||
}
|
||||
|
||||
export const Config = {
|
||||
version: getEnv('npm_package_version', 'unknown'),
|
||||
logging: {
|
||||
level: getEnv('LOG_LEVEL', 'info'),
|
||||
},
|
||||
auth: {
|
||||
token: getEnv('TOKEN', '', undefined, isPresent),
|
||||
},
|
||||
dns: {
|
||||
zone: getEnv('ZONE', '', undefined, isPresent),
|
||||
record: getEnv('DNS_RECORD', '', undefined, isPresent),
|
||||
proxied: getEnv('PROXIED', false, parseBoolean),
|
||||
},
|
||||
runner: {
|
||||
cron: getEnv('CRON', '*/5 * * * *', undefined, (s) => validate(s)),
|
||||
resolver: getEnv('RESOLVER', 'https://api.ipify.org'),
|
||||
},
|
||||
}
|
Reference in New Issue
Block a user