perf: 新增站点证书监控从DNS解析记录批量导入功能

本次提交新增了从DNS解析记录批量导入站点监控的完整功能:
1. 扩展Registrable类型新增icon字段支持
2. 新增DNS解析记录获取接口和基础实现
3. 为阿里云、腾讯云、Cloudflare等DNS提供商添加解析记录分页获取支持
4. 新增站点监控导入任务管理功能,支持保存、启动、删除导入任务
5. 新增中文/英文多语言支持
6. 优化暗黑模式表格样式
7. 修复ACME账户访问修复逻辑中项目ID可选的问题
8. 优化HiPM DNS提供商的域名获取逻辑
This commit is contained in:
xiaojunnuo
2026-06-10 23:32:39 +08:00
parent 8d9870e9c6
commit f9541fab70
21 changed files with 749 additions and 55 deletions
@@ -34,6 +34,14 @@ export type DomainRecord = {
domain: string;
};
export type DnsResolveRecord = {
id: string;
hostRecord: string;
fullRecord: string;
type: string;
value: string;
};
export interface IDnsProvider<T = any> {
onInstance(): Promise<void>;
@@ -59,6 +67,8 @@ export interface IDnsProvider<T = any> {
usePunyCode(): boolean;
getDomainListPage(pager: PageSearch): Promise<PageRes<DomainRecord>>;
getRecordListPage?(domain: string, pager: PageSearch): Promise<PageRes<DnsResolveRecord>>;
}
export interface ISubDomainsGetter {
@@ -1,7 +1,7 @@
import { HttpClient, ILogger } from "@certd/basic";
import { IAccessService, PageRes, PageSearch } from "@certd/pipeline";
import punycode from "punycode.js";
import { CreateRecordOptions, DnsProviderContext, DnsProviderDefine, DomainRecord, IDnsProvider, RemoveRecordOptions } from "./api.js";
import { CreateRecordOptions, DnsProviderContext, DnsProviderDefine, DnsResolveRecord, DomainRecord, IDnsProvider, RemoveRecordOptions } from "./api.js";
import { dnsProviderRegistry } from "./registry.js";
export abstract class AbstractDnsProvider<T = any> implements IDnsProvider<T> {
ctx!: DnsProviderContext;
@@ -49,6 +49,10 @@ export abstract class AbstractDnsProvider<T = any> implements IDnsProvider<T> {
async getDomainListPage(req: PageSearch): Promise<PageRes<DomainRecord>> {
throw new Error("Method not implemented.");
}
async getRecordListPage(domain: string, req: PageSearch): Promise<PageRes<DnsResolveRecord>> {
throw new Error("Method not implemented.");
}
}
export async function createDnsProvider(opts: { dnsProviderType: string; context: DnsProviderContext }): Promise<IDnsProvider> {