import type { TunnelProvider, TunnelConfig, TunnelSetupOptions, TunnelStatus } from './TunnelProvider'; /** * Cloudflare Tunnel Provider 配置 */ export interface CloudflareTunnelProviderOptions { /** Cloudflare API Token (需要 Tunnel 和 DNS 权限) */ apiToken: string; /** Cloudflare Account ID */ accountId: string; /** 基础域名 (如 pods.undefieds.co) */ baseDomain: string; /** cloudflared 可执行文件路径 (默认 'cloudflared') */ cloudflaredPath?: string; } /** * Cloudflare Tunnel Provider * * 使用 Cloudflare Tunnel 实现隧道穿透 */ export declare class CloudflareTunnelProvider implements TunnelProvider { readonly name = "cloudflare"; private readonly apiToken; private readonly accountId; private readonly baseDomain; private readonly cloudflaredPath; private process; private status; private currentConfig; /** 标记隧道进程是否由我们启动和管理 */ private managedByUs; constructor(options: CloudflareTunnelProviderOptions); /** * 初始化隧道 */ setup(options: TunnelSetupOptions): Promise; /** * 启动隧道客户端 * 如果 cloudflared 已经在运行,则跳过启动 */ start(config: TunnelConfig): Promise; /** * 停止隧道 * 只有当隧道是由我们启动时才会停止 */ stop(): Promise; /** * 获取隧道状态 */ getStatus(): TunnelStatus; /** * 获取公网端点 */ getEndpoint(): string | undefined; /** * 清理资源 */ cleanup(config: TunnelConfig): Promise; /** * 创建 Tunnel */ private createTunnel; /** * 配置 Tunnel Ingress */ private configureTunnelIngress; /** * 获取 Tunnel Token */ private getTunnelToken; /** * 删除 Tunnel */ private deleteTunnel; /** * 创建 DNS CNAME 记录 */ private createDnsRecord; /** * 删除 DNS 记录 */ private deleteDnsRecord; /** * 获取 Zone ID */ private getZoneId; /** * Cloudflare API 请求 */ private cloudflareApi; /** * 生成 Tunnel Secret */ private generateTunnelSecret; /** * 等待连接建立 */ private waitForConnection; /** * 检测 cloudflared 是否已经在运行 * 通过进程检测 + metrics 端口检测 */ isCloudflaredRunning(): Promise; /** * 检测 cloudflared 进程是否存在 */ private isCloudflaredProcessRunning; /** * 检测 cloudflared metrics 端口是否开放 */ private isMetricsPortOpen; /** * 检测隧道是否可从外部访问 * @param domain 要检测的域名 */ isReachable(domain: string): Promise; /** * 获取是否由我们管理 */ isManagedByUs(): boolean; }