import type { TDnsRecordType } from '../../../ts_interfaces/data/dns-record.js'; import type { IProviderDomainListing } from '../../../ts_interfaces/data/dns-provider.js'; /** * A DNS record as seen at a provider's API. The `providerRecordId` field * is the provider's internal identifier, used for subsequent updates and * deletes (since providers can have multiple records of the same name+type). */ export interface IProviderRecord { providerRecordId: string; name: string; type: TDnsRecordType; value: string; ttl: number; proxied?: boolean; } /** * Input shape for creating / updating a DNS record at a provider. */ export interface IProviderRecordInput { name: string; type: TDnsRecordType; value: string; ttl?: number; proxied?: boolean; } /** * Outcome of a connection test against a provider's API. */ export interface IConnectionTestResult { ok: boolean; error?: string; } /** * Pluggable DNS provider client interface. One implementation per provider type * (Cloudflare, Route53, …). Implementations live in ts/dns/providers/ and are * instantiated by `createDnsProvider()` in factory.ts. * * NOT a smartdata interface — this is the *runtime* client. The persisted * representation is in `IDnsProvider` (ts_interfaces/data/dns-provider.ts). */ export interface IDnsProviderClient { /** Lightweight check that credentials are valid and the API is reachable. */ testConnection(): Promise; /** List all DNS zones visible to this provider account. */ listDomains(): Promise; /** List all DNS records for a zone (FQDN). */ listRecords(domain: string): Promise; /** Create a new DNS record at the provider; returns the created record (with id). */ createRecord(domain: string, record: IProviderRecordInput): Promise; /** Update an existing record by provider id; returns the updated record. */ updateRecord( domain: string, providerRecordId: string, record: IProviderRecordInput, ): Promise; /** Delete a record by provider id. */ deleteRecord(domain: string, providerRecordId: string): Promise; }