feat(dns): Implement DNS management functionality
- Added DnsManager and DnsEntry classes to handle DNS entries. - Introduced new interfaces for DNS entry requests and data structures. - Updated Cloudly class to include DnsManager instance. - Enhanced app state to manage DNS entries and actions for creating, updating, and deleting DNS records. - Created UI components for DNS management, including forms for adding and editing DNS entries. - Updated overview and services views to reflect DNS entries. - Added validation and formatting methods for DNS entries.
This commit is contained in:
		
							
								
								
									
										81
									
								
								ts_interfaces/data/dns.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										81
									
								
								ts_interfaces/data/dns.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,81 @@ | ||||
| export type TDnsRecordType = 'A' | 'AAAA' | 'CNAME' | 'MX' | 'TXT' | 'NS' | 'SOA' | 'SRV' | 'CAA' | 'PTR'; | ||||
|  | ||||
| export interface IDnsEntry { | ||||
|   id: string; | ||||
|   data: { | ||||
|     /** | ||||
|      * The DNS record type | ||||
|      */ | ||||
|     type: TDnsRecordType; | ||||
|      | ||||
|     /** | ||||
|      * The DNS record name (e.g., www, @, mail) | ||||
|      * @ represents the root domain | ||||
|      */ | ||||
|     name: string; | ||||
|      | ||||
|     /** | ||||
|      * The value of the DNS record | ||||
|      * - For A/AAAA: IP address | ||||
|      * - For CNAME: Target domain | ||||
|      * - For MX: Mail server hostname | ||||
|      * - For TXT: Text value | ||||
|      * - For NS: Nameserver hostname | ||||
|      * - For SRV: Target hostname | ||||
|      * - For CAA: CAA record value | ||||
|      * - For PTR: Domain name | ||||
|      */ | ||||
|     value: string; | ||||
|      | ||||
|     /** | ||||
|      * Time to live in seconds | ||||
|      * Default: 3600 (1 hour) | ||||
|      */ | ||||
|     ttl: number; | ||||
|      | ||||
|     /** | ||||
|      * Priority (used for MX and SRV records) | ||||
|      * Lower values have higher priority | ||||
|      */ | ||||
|     priority?: number; | ||||
|      | ||||
|     /** | ||||
|      * The DNS zone this entry belongs to | ||||
|      * e.g., example.com | ||||
|      * @deprecated Use domainId instead | ||||
|      */ | ||||
|     zone: string; | ||||
|      | ||||
|     /** | ||||
|      * The domain ID this DNS entry belongs to | ||||
|      * Links to the Domain entity | ||||
|      */ | ||||
|     domainId?: string; | ||||
|      | ||||
|     /** | ||||
|      * Additional fields for SRV records | ||||
|      */ | ||||
|     weight?: number; | ||||
|     port?: number; | ||||
|      | ||||
|     /** | ||||
|      * Whether this DNS entry is active | ||||
|      */ | ||||
|     active: boolean; | ||||
|      | ||||
|     /** | ||||
|      * Optional description for documentation | ||||
|      */ | ||||
|     description?: string; | ||||
|      | ||||
|     /** | ||||
|      * Timestamp when the entry was created | ||||
|      */ | ||||
|     createdAt?: number; | ||||
|      | ||||
|     /** | ||||
|      * Timestamp when the entry was last updated | ||||
|      */ | ||||
|     updatedAt?: number; | ||||
|   }; | ||||
| } | ||||
							
								
								
									
										110
									
								
								ts_interfaces/data/domain.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										110
									
								
								ts_interfaces/data/domain.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,110 @@ | ||||
| export type TDomainStatus = 'active' | 'pending' | 'expired' | 'suspended' | 'transferred'; | ||||
| export type TDomainVerificationStatus = 'verified' | 'pending' | 'failed' | 'not_required'; | ||||
|  | ||||
| export interface IDomain { | ||||
|   id: string; | ||||
|   data: { | ||||
|     /** | ||||
|      * The domain name (e.g., example.com) | ||||
|      */ | ||||
|     name: string; | ||||
|      | ||||
|     /** | ||||
|      * Description or notes about the domain | ||||
|      */ | ||||
|     description?: string; | ||||
|      | ||||
|     /** | ||||
|      * Current status of the domain | ||||
|      */ | ||||
|     status: TDomainStatus; | ||||
|      | ||||
|     /** | ||||
|      * Domain verification status | ||||
|      */ | ||||
|     verificationStatus: TDomainVerificationStatus; | ||||
|      | ||||
|     /** | ||||
|      * Nameservers for the domain | ||||
|      */ | ||||
|     nameservers: string[]; | ||||
|      | ||||
|     /** | ||||
|      * Domain registrar information | ||||
|      */ | ||||
|     registrar?: { | ||||
|       name: string; | ||||
|       url?: string; | ||||
|     }; | ||||
|      | ||||
|     /** | ||||
|      * Domain registration date (timestamp) | ||||
|      */ | ||||
|     registeredAt?: number; | ||||
|      | ||||
|     /** | ||||
|      * Domain expiration date (timestamp) | ||||
|      */ | ||||
|     expiresAt?: number; | ||||
|      | ||||
|     /** | ||||
|      * Whether auto-renewal is enabled | ||||
|      */ | ||||
|     autoRenew: boolean; | ||||
|      | ||||
|     /** | ||||
|      * DNSSEC enabled | ||||
|      */ | ||||
|     dnssecEnabled?: boolean; | ||||
|      | ||||
|     /** | ||||
|      * Tags for categorization | ||||
|      */ | ||||
|     tags?: string[]; | ||||
|      | ||||
|     /** | ||||
|      * Whether this domain is primary for the organization | ||||
|      */ | ||||
|     isPrimary?: boolean; | ||||
|      | ||||
|     /** | ||||
|      * SSL certificate status | ||||
|      */ | ||||
|     sslStatus?: 'active' | 'pending' | 'expired' | 'none'; | ||||
|      | ||||
|     /** | ||||
|      * Last verification attempt timestamp | ||||
|      */ | ||||
|     lastVerificationAt?: number; | ||||
|      | ||||
|     /** | ||||
|      * Verification method used | ||||
|      */ | ||||
|     verificationMethod?: 'dns' | 'http' | 'email' | 'manual'; | ||||
|      | ||||
|     /** | ||||
|      * Verification token (for DNS/HTTP verification) | ||||
|      */ | ||||
|     verificationToken?: string; | ||||
|      | ||||
|     /** | ||||
|      * Cloudflare zone ID if managed by Cloudflare | ||||
|      */ | ||||
|     cloudflareZoneId?: string; | ||||
|      | ||||
|     /** | ||||
|      * Whether domain is managed externally | ||||
|      */ | ||||
|     isExternal?: boolean; | ||||
|      | ||||
|     /** | ||||
|      * Creation timestamp | ||||
|      */ | ||||
|     createdAt?: number; | ||||
|      | ||||
|     /** | ||||
|      * Last update timestamp | ||||
|      */ | ||||
|     updatedAt?: number; | ||||
|   }; | ||||
| } | ||||
| @@ -2,7 +2,9 @@ export * from './cloudlyconfig.js'; | ||||
| export * from './cluster.js'; | ||||
| export * from './config.js'; | ||||
| export * from './deployment.js'; | ||||
| export * from './dns.js'; | ||||
| export * from './docker.js'; | ||||
| export * from './domain.js'; | ||||
| export * from './event.js'; | ||||
| export * from './externalregistry.js'; | ||||
| export * from './image.js'; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user