perf: 支持腾讯云teo dns解析

This commit is contained in:
xiaojunnuo
2025-11-13 00:45:05 +08:00
parent 86ce00adf9
commit 1d23dd2426
9 changed files with 187 additions and 16 deletions
+4 -1
View File
@@ -7,7 +7,7 @@ import { createHash } from 'crypto';
import { getPemBodyAsB64u } from './crypto/index.js';
import HttpClient from './http.js';
import AcmeApi from './api.js';
import verify from './verify.js';
import {createChallengeFn} from './verify.js';
import * as util from './util.js';
import auto from './auto.js';
import { CancelError } from './error.js';
@@ -492,6 +492,9 @@ class AcmeClient {
throw new Error('Unable to verify ACME challenge, URL not found');
}
const {challenges} = createChallengeFn({logger:this.opts.logger});
const verify = challenges
if (typeof verify[challenge.type] === 'undefined') {
throw new Error(`Unable to verify ACME challenge, unknown type: ${challenge.type}`);
}
+20 -11
View File
@@ -4,14 +4,22 @@
import dnsSdk from "dns"
import https from 'https'
import {log} from './logger.js'
import {log as defaultLog} from './logger.js'
import axios from './axios.js'
import * as util from './util.js'
import {isAlpnCertificateAuthorizationValid} from './crypto/index.js'
const dns = dnsSdk.promises
/**
export function createChallengeFn(opts = {}){
const logger = opts?.logger || {info:defaultLog,error:defaultLog,warn:defaultLog,debug:defaultLog}
const log = function(...args){
logger.info(...args)
}
/**
* Verify ACME HTTP challenge
*
* https://datatracker.ietf.org/doc/html/rfc8555#section-8.3
@@ -112,7 +120,7 @@ async function walkDnsChallengeRecord(recordName, resolver = dns,deep = 0) {
return records
}
export async function walkTxtRecord(recordName,deep = 0) {
async function walkTxtRecord(recordName,deep = 0) {
if(deep >5){
log(`walkTxtRecord too deep (#${deep}) , skip walk`)
return []
@@ -207,12 +215,13 @@ async function verifyTlsAlpnChallenge(authz, challenge, keyAuthorization) {
return true;
}
/**
* Export API
*/
return {
challenges:{
'http-01': verifyHttpChallenge,
'dns-01': verifyDnsChallenge,
'tls-alpn-01': verifyTlsAlpnChallenge,
},
walkTxtRecord,
}
export default {
'http-01': verifyHttpChallenge,
'dns-01': verifyDnsChallenge,
'tls-alpn-01': verifyTlsAlpnChallenge,
};
}
+2 -1
View File
@@ -207,7 +207,8 @@ export const agents: any;
export function setLogger(fn: (message: any, ...args: any[]) => void): void;
export function walkTxtRecord(record: any): Promise<string[]>;
export function createChallengeFn(opts?: {logger?:any}): any;
// export function walkTxtRecord(record: any): Promise<string[]>;
export function getAuthoritativeDnsResolver(record:string): Promise<any>;
export const CancelError: typeof CancelError;