UNPKG

@linkedmink/node-route53-dynamic-dns

Version:

Background process that updates AWS Route 53 DNS address records whenever the public IP of the hosting environment changes

43 lines 2.77 kB
import { Command } from "commander"; import { ConfigKey } from "../constants/config.mjs"; import { PublicIpEvent, DnsRecordsEvent } from "../constants/events.mjs"; import { PACKAGE_VERSION } from "../constants/version.mjs"; import { initializeLogging } from "../environment/logger.mjs"; import { HealthCheckServer } from "../event-handlers/health-check-server.mjs"; import { PublicIpClient } from "../event-handlers/public-ip-event-emitter.mjs"; import { Route53AddressRecordUpdater } from "../event-handlers/route53-address-record-updater.mjs"; import { Route53DnsRecordSetStore } from "../services/dns-record-set-source.mjs"; import { Route53UpdateClient } from "../services/route53-update-client.mjs"; export default (config) => { const main = async () => { const logger = initializeLogging(config); logger.info("Initializing App"); const route53Client = new Route53UpdateClient(); const inputHostnames = config.getJson(ConfigKey.HostnamesToUpdate); const isCachedRecordsEnabled = config.getBool(ConfigKey.CacheDnsRecords); const dnsRecordSetSource = new Route53DnsRecordSetStore(route53Client, isCachedRecordsEnabled, inputHostnames); const route53Updater = new Route53AddressRecordUpdater(route53Client, dnsRecordSetSource); const ipUpdateInterval = config.getNumber(ConfigKey.IpCheckIntervalSeconds) * 1000; const ipUpdateTimeout = config.getNumber(ConfigKey.IpCheckTimeoutMs); const isIpV6Enabled = config.getBool(ConfigKey.IpV6Enabled); const publicIpClient = new PublicIpClient(ipUpdateInterval, ipUpdateTimeout, isIpV6Enabled); // eslint-disable-next-line @typescript-eslint/no-misused-promises publicIpClient.on(PublicIpEvent.Retrieved, route53Updater.handlePublicIpUpdate); const port = config.getNumberOrNull(ConfigKey.BindPort); if (port !== null) { const healthCheckServer = new HealthCheckServer(); dnsRecordSetSource.on(DnsRecordsEvent.Retrieved, healthCheckServer.handleRecordsRetrievedEvent); dnsRecordSetSource.on(DnsRecordsEvent.Updated, healthCheckServer.handleRecordsUpdatedEvent); publicIpClient.on(PublicIpEvent.Retrieved, healthCheckServer.handlePublicIpEvent); const host = config.getStringOrNull(ConfigKey.BindHost); await healthCheckServer.start(port, host !== null ? host : undefined); } void publicIpClient.start(); logger.verbose("Initialized App"); }; return new Command("service") .version(PACKAGE_VERSION) .description("This will run the background process that updates host records from your public IP until it's terminated") .action(main); }; //# sourceMappingURL=service.mjs.map