@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
JavaScript
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