/** * DDNS Manager for Local Managed Mode * * Responsibilities (Local managed mode): * - Allocate a managed domain on Cloud (subdomain -> fqdn) * - Keep the record updated when network changes * * Note: if the machine has no public IP, we assume tunnel mode and let Cloud * point the managed domain to the configured tunnel provider. */ import type { SubdomainClient } from '../subdomain/SubdomainClient'; import type { EdgeNodeCapabilityDetector } from './EdgeNodeCapabilityDetector'; export interface DdnsManagerOptions { client: SubdomainClient; detector: EdgeNodeCapabilityDetector; subdomain: string; localPort?: number; intervalMs?: number; autoAllocate?: boolean; tunnelProvider?: 'cloudflare' | 'sakura_frp' | 'ngrok' | 'frp' | 'none'; } export declare class DdnsManager { private readonly logger; private readonly client; private readonly detector; private readonly subdomain; private readonly localPort?; private readonly intervalMs; private readonly autoAllocate; private readonly tunnelProvider; private interval?; private allocated; private fqdn?; private lastIpv4?; private lastIpv6?; private lastMode; constructor(options: DdnsManagerOptions); start(): Promise; stop(): void; getFqdn(): string | undefined; isAllocated(): boolean; getStatus(): { allocated: boolean; fqdn?: string; ipv4?: string; ipv6?: string; mode: 'direct' | 'tunnel' | 'unknown'; tunnelProvider: string; }; runOnce(): Promise; private runCycle; private allocateSubdomain; private updateDdns; }