import * as plugins from '../smartacme.plugins.js'; import type { IChallengeHandler } from './IChallengeHandler.js'; /** * DNS-01 challenge handler using CloudflareAccount and Smartdns. */ export class Dns01Handler implements IChallengeHandler { private cf: any; private smartdns: plugins.smartdnsClient.Smartdns; constructor( cloudflareAccount: any, smartdnsInstance?: plugins.smartdnsClient.Smartdns, ) { this.cf = cloudflareAccount; this.smartdns = smartdnsInstance ?? new plugins.smartdnsClient.Smartdns({}); } public getSupportedTypes(): string[] { return ['dns-01']; } public async prepare(ch: plugins.tsclass.network.IDnsChallenge): Promise { // set DNS TXT record await this.cf.convenience.acmeSetDnsChallenge(ch); // wait for DNS propagation await this.smartdns.checkUntilAvailable( ch.hostName, 'TXT', ch.challenge, 100, 5000, ); } public async cleanup(ch: plugins.tsclass.network.IDnsChallenge): Promise { // remove DNS TXT record await this.cf.convenience.acmeRemoveDnsChallenge(ch); } }