import * as plugins from '../plugins.js'; import type * as authInterfaces from '../data/auth.js'; import type { IEmailDomain, IEmailDnsRecord, IEmailDomainRemoteIngress } from '../data/email-domain.js'; export type TEmailDomainLifecycleStatus = 'active' | 'pending' | 'failed' | 'deleting'; export interface IEmailDomainActionError { code: string; message: string; recordKey?: string; retryable?: boolean; } /** * Optional lifecycle metadata shared by email-domain mutations. The fields are * additive so older clients can continue to rely on `success` and `message`. */ export interface IEmailDomainActionResult { success: boolean; message?: string; lifecycleStatus?: TEmailDomainLifecycleStatus; code?: string; errors?: IEmailDomainActionError[]; retryAt?: string; capability?: 'supported' | 'unsupported'; } /** * List all email domains. */ export interface IReq_GetEmailDomains extends plugins.typedrequestInterfaces.implementsTR { method: 'getEmailDomains'; request: { identity?: authInterfaces.IIdentity; apiToken?: string; }; response: { domains: IEmailDomain[]; }; } /** * Get a single email domain by id. */ export interface IReq_GetEmailDomain extends plugins.typedrequestInterfaces.implementsTR { method: 'getEmailDomain'; request: { identity?: authInterfaces.IIdentity; apiToken?: string; id: string; }; response: { domain: IEmailDomain | null; }; } /** * Create an email domain. Links to an existing dcrouter DNS domain. * Generates DKIM keys and computes the required DNS records. */ export interface IReq_CreateEmailDomain extends plugins.typedrequestInterfaces.implementsTR { method: 'createEmailDomain'; request: { identity?: authInterfaces.IIdentity; apiToken?: string; /** ID of the existing dcrouter DNS domain to link to. */ linkedDomainId: string; /** Optional subdomain prefix (e.g. 'mail' for mail.example.com). Leave empty for bare domain. */ subdomain?: string; /** DKIM selector (default: 'default'). */ dkimSelector?: string; /** RSA key size (default: 2048). */ dkimKeySize?: number; /** Enable automatic key rotation (default: false). */ rotateKeys?: boolean; /** Days between rotations (default: 90). */ rotationIntervalDays?: number; /** Optional RemoteIngress edge pinning for this domain. */ remoteIngress?: IEmailDomainRemoteIngress; }; response: IEmailDomainActionResult & { domain?: IEmailDomain; }; } /** * Update an email domain's configuration. */ export interface IReq_UpdateEmailDomain extends plugins.typedrequestInterfaces.implementsTR { method: 'updateEmailDomain'; request: { identity?: authInterfaces.IIdentity; apiToken?: string; id: string; rotateKeys?: boolean; rotationIntervalDays?: number; rateLimits?: IEmailDomain['rateLimits']; /** RemoteIngress edge pinning; null clears the pin. */ remoteIngress?: IEmailDomainRemoteIngress | null; }; response: IEmailDomainActionResult; } /** * Delete an email domain. */ export interface IReq_DeleteEmailDomain extends plugins.typedrequestInterfaces.implementsTR { method: 'deleteEmailDomain'; request: { identity?: authInterfaces.IIdentity; apiToken?: string; id: string; }; response: IEmailDomainActionResult; } /** * Trigger DNS validation for an email domain. * Performs live lookups for MX, SPF, DKIM, and DMARC records. */ export interface IReq_ValidateEmailDomain extends plugins.typedrequestInterfaces.implementsTR { method: 'validateEmailDomain'; request: { identity?: authInterfaces.IIdentity; apiToken?: string; id: string; }; response: IEmailDomainActionResult & { domain?: IEmailDomain; records?: IEmailDnsRecord[]; }; } /** * Get the required DNS records for an email domain (for display / copy-paste). */ export interface IReq_GetEmailDomainDnsRecords extends plugins.typedrequestInterfaces.implementsTR { method: 'getEmailDomainDnsRecords'; request: { identity?: authInterfaces.IIdentity; apiToken?: string; id: string; }; response: { records: IEmailDnsRecord[]; }; } /** * Auto-provision DNS records for an email domain. * Creates any missing MX, SPF, DKIM, and DMARC records via the linked * domain's DNS path (dcrouter zone or provider API). */ export interface IReq_ProvisionEmailDomainDns extends plugins.typedrequestInterfaces.implementsTR { method: 'provisionEmailDomainDns'; request: { identity?: authInterfaces.IIdentity; apiToken?: string; id: string; }; response: IEmailDomainActionResult & { /** Number of records created. */ provisioned?: number; }; }