68 lines
2.2 KiB
TypeScript
68 lines
2.2 KiB
TypeScript
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<IConnectionTestResult>;
|
|
|
|
/** List all DNS zones visible to this provider account. */
|
|
listDomains(): Promise<IProviderDomainListing[]>;
|
|
|
|
/** List all DNS records for a zone (FQDN). */
|
|
listRecords(domain: string): Promise<IProviderRecord[]>;
|
|
|
|
/** Create a new DNS record at the provider; returns the created record (with id). */
|
|
createRecord(domain: string, record: IProviderRecordInput): Promise<IProviderRecord>;
|
|
|
|
/** Update an existing record by provider id; returns the updated record. */
|
|
updateRecord(
|
|
domain: string,
|
|
providerRecordId: string,
|
|
record: IProviderRecordInput,
|
|
): Promise<IProviderRecord>;
|
|
|
|
/** Delete a record by provider id. */
|
|
deleteRecord(domain: string, providerRecordId: string): Promise<void>;
|
|
}
|