feat(dns): add db-backed DNS provider, domain, and record management with ops UI support
This commit is contained in:
73
ts_interfaces/data/dns-provider.ts
Normal file
73
ts_interfaces/data/dns-provider.ts
Normal file
@@ -0,0 +1,73 @@
|
||||
/**
|
||||
* Supported DNS provider types. Initially Cloudflare; the abstraction is
|
||||
* designed so additional providers (Route53, Gandi, DigitalOcean…) can be
|
||||
* added by implementing the IDnsProvider class interface in ts/dns/providers/.
|
||||
*/
|
||||
export type TDnsProviderType = 'cloudflare';
|
||||
|
||||
/**
|
||||
* Status of the last connection test against a provider.
|
||||
*/
|
||||
export type TDnsProviderStatus = 'untested' | 'ok' | 'error';
|
||||
|
||||
/**
|
||||
* Cloudflare-specific credential shape.
|
||||
*/
|
||||
export interface ICloudflareCredentials {
|
||||
apiToken: string;
|
||||
}
|
||||
|
||||
/**
|
||||
* Discriminated union of all supported provider credential shapes.
|
||||
* Persisted opaquely on `IDnsProvider.credentials`.
|
||||
*/
|
||||
export type TDnsProviderCredentials =
|
||||
| ({ type: 'cloudflare' } & ICloudflareCredentials);
|
||||
|
||||
/**
|
||||
* A registered DNS provider account. Holds the credentials needed to
|
||||
* call the provider's API and a snapshot of its last health check.
|
||||
*/
|
||||
export interface IDnsProvider {
|
||||
id: string;
|
||||
name: string;
|
||||
type: TDnsProviderType;
|
||||
/** Opaque credentials object — shape depends on `type`. */
|
||||
credentials: TDnsProviderCredentials;
|
||||
status: TDnsProviderStatus;
|
||||
lastTestedAt?: number;
|
||||
lastError?: string;
|
||||
createdAt: number;
|
||||
updatedAt: number;
|
||||
createdBy: string;
|
||||
}
|
||||
|
||||
/**
|
||||
* A redacted view of IDnsProvider safe to send to the UI / over the wire.
|
||||
* Strips secret fields from `credentials` while preserving the rest.
|
||||
*/
|
||||
export interface IDnsProviderPublic {
|
||||
id: string;
|
||||
name: string;
|
||||
type: TDnsProviderType;
|
||||
status: TDnsProviderStatus;
|
||||
lastTestedAt?: number;
|
||||
lastError?: string;
|
||||
createdAt: number;
|
||||
updatedAt: number;
|
||||
createdBy: string;
|
||||
/** Whether credentials are configured (true after creation). Never the secret itself. */
|
||||
hasCredentials: boolean;
|
||||
}
|
||||
|
||||
/**
|
||||
* A domain reported by a provider's API (not yet imported into dcrouter).
|
||||
*/
|
||||
export interface IProviderDomainListing {
|
||||
/** FQDN of the zone (e.g. 'example.com'). */
|
||||
name: string;
|
||||
/** Provider's internal zone identifier (zone_id for Cloudflare). */
|
||||
externalId: string;
|
||||
/** Authoritative nameservers reported by the provider. */
|
||||
nameservers: string[];
|
||||
}
|
||||
Reference in New Issue
Block a user