namespace Tiku.Application.Tenancy; public sealed class DomainLifecycleOptions { public bool Enabled { get; set; } = true; public int PollSeconds { get; set; } = 60; public int BatchSize { get; set; } = 50; public string DnsJsonEndpoint { get; set; } = "https://cloudflare-dns.com/dns-query"; public string VerificationRecordPrefix { get; set; } = "_tiku-verification"; public string[] AllowedCnameTargets { get; set; } = []; public string? GatewayBaseUrl { get; set; } public string? GatewayApiKey { get; set; } } public sealed record DomainOwnershipResult(bool Verified, bool Configured, string? FailureReason); public sealed record DomainGatewayResult(bool TlsReady, bool Configured, string? FailureReason); public interface IDomainOwnershipVerifier { Task VerifyAsync( string host, string verificationToken, CancellationToken cancellationToken = default); } public interface IDomainGatewayProvisioner { Task EnsureTlsAsync(string host, CancellationToken cancellationToken = default); } public interface ITenantDomainLifecycleService { Task ProcessPendingAsync(CancellationToken cancellationToken = default); } public interface ITenantRuntimeCacheInvalidator { Task InvalidateAsync(Guid tenantId, CancellationToken cancellationToken = default); }