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