import * as plugins from '../plugins.js'; import type { IIdentity } from '../data/user.js'; import type { IMailAddressBinding, IMailCredentialOneTimeSecret, IMailConnectionInfo, IMailDeliveryJournalEvent, IMailDeliveryStatus, IMailDomainAuthority, IMailEnvelope, IMailInboundMessagePayload, IMailOutboundIdentity, IMailOutboundMessagePayload, IMailRecipientResolution, IMailResourceOwner, IMailSpoolItem, IWorkAppMailBinding, TMailSubmissionErrorCode, } from '../data/mail.js'; export interface IMailControlRequestAuth { identity?: IIdentity; apiToken?: string; } export interface IMailSubmissionRequestAuth extends IMailControlRequestAuth { credentialId?: string; credentialSecret?: string; } export type TMailDomainAuthoritySync = Omit< IMailDomainAuthority, 'id' | 'status' | 'createdAt' | 'updatedAt' | 'createdBy' > & { id?: string; }; export type TMailAddressBindingSync = Omit< IMailAddressBinding, 'id' | 'status' | 'createdAt' | 'updatedAt' | 'createdBy' > & { id?: string; /** Explicitly controls managed SMTP credential availability for this binding. */ outboundEnabled?: boolean; }; export type TWorkAppMailBindingSync = Omit< IWorkAppMailBinding, 'id' | 'status' | 'createdAt' | 'updatedAt' | 'createdBy' > & { id?: string; }; export interface IReq_ListMailDomainAuthorities extends plugins.typedrequestInterfaces.implementsTR< plugins.typedrequestInterfaces.ITypedRequest, IReq_ListMailDomainAuthorities > { method: 'listMailDomainAuthorities'; request: { auth: IMailControlRequestAuth; owner?: Partial; domain?: string; }; response: { authorities: IMailDomainAuthority[]; }; } export interface IReq_SyncMailDomainAuthority extends plugins.typedrequestInterfaces.implementsTR< plugins.typedrequestInterfaces.ITypedRequest, IReq_SyncMailDomainAuthority > { method: 'syncMailDomainAuthority'; request: { auth: IMailControlRequestAuth; authority: TMailDomainAuthoritySync; }; response: { success: boolean; authority?: IMailDomainAuthority; message?: string; }; } export interface IReq_DeleteMailDomainAuthority extends plugins.typedrequestInterfaces.implementsTR< plugins.typedrequestInterfaces.ITypedRequest, IReq_DeleteMailDomainAuthority > { method: 'deleteMailDomainAuthority'; request: { auth: IMailControlRequestAuth; id: string; }; response: { success: boolean; message?: string; }; } export interface IReq_ListMailAddressBindings extends plugins.typedrequestInterfaces.implementsTR< plugins.typedrequestInterfaces.ITypedRequest, IReq_ListMailAddressBindings > { method: 'listMailAddressBindings'; request: { auth: IMailControlRequestAuth; owner?: Partial; domain?: string; address?: string; }; response: { bindings: IMailAddressBinding[]; }; } export interface IReq_SyncMailAddressBinding extends plugins.typedrequestInterfaces.implementsTR< plugins.typedrequestInterfaces.ITypedRequest, IReq_SyncMailAddressBinding > { method: 'syncMailAddressBinding'; request: { auth: IMailControlRequestAuth; binding: TMailAddressBindingSync; }; response: { success: boolean; binding?: IMailAddressBinding; message?: string; }; } export interface IReq_DeleteMailAddressBinding extends plugins.typedrequestInterfaces.implementsTR< plugins.typedrequestInterfaces.ITypedRequest, IReq_DeleteMailAddressBinding > { method: 'deleteMailAddressBinding'; request: { auth: IMailControlRequestAuth; id: string; }; response: { success: boolean; message?: string; }; } export interface IReq_ListWorkAppMailBindings extends plugins.typedrequestInterfaces.implementsTR< plugins.typedrequestInterfaces.ITypedRequest, IReq_ListWorkAppMailBindings > { method: 'listWorkAppMailBindings'; request: { auth: IMailControlRequestAuth; owner?: Partial; }; response: { bindings: IWorkAppMailBinding[]; }; } export interface IReq_SyncWorkAppMailBinding extends plugins.typedrequestInterfaces.implementsTR< plugins.typedrequestInterfaces.ITypedRequest, IReq_SyncWorkAppMailBinding > { method: 'syncWorkAppMailBinding'; request: { auth: IMailControlRequestAuth; binding: TWorkAppMailBindingSync; }; response: { success: boolean; binding?: IWorkAppMailBinding; credentials?: IMailCredentialOneTimeSecret[]; message?: string; }; } export interface IReq_RotateMailCredential extends plugins.typedrequestInterfaces.implementsTR< plugins.typedrequestInterfaces.ITypedRequest, IReq_RotateMailCredential > { method: 'rotateMailCredential'; request: { auth: IMailControlRequestAuth; credentialId: string; }; response: { success: boolean; credential?: IMailCredentialOneTimeSecret; message?: string; }; } export interface IReq_ResolveMailRecipients extends plugins.typedrequestInterfaces.implementsTR< plugins.typedrequestInterfaces.ITypedRequest, IReq_ResolveMailRecipients > { method: 'resolveMailRecipients'; request: { auth: IMailControlRequestAuth; owner: IMailResourceOwner; domainAuthorityId?: string; envelope: IMailEnvelope; recipients: string[]; source?: IMailConnectionInfo; }; response: { resolutions: IMailRecipientResolution[]; cacheTtlMs?: number; }; } export interface IReq_DeliverInboundMail extends plugins.typedrequestInterfaces.implementsTR< plugins.typedrequestInterfaces.ITypedRequest, IReq_DeliverInboundMail > { method: 'deliverInboundMail'; request: { auth: IMailControlRequestAuth; delivery: IMailInboundMessagePayload; }; response: { accepted: boolean; workAppMessageId?: string; message?: string; }; } export interface IReq_RegisterServiceMailEndpoint extends plugins.typedrequestInterfaces.implementsTR< plugins.typedrequestInterfaces.ITypedRequest, IReq_RegisterServiceMailEndpoint > { method: 'registerServiceMailEndpoint'; request: { auth: IMailSubmissionRequestAuth; addresses?: string[]; }; response: { success: boolean; addresses?: string[]; message?: string; }; } export interface IReq_GetMailDeliveryStatus extends plugins.typedrequestInterfaces.implementsTR< plugins.typedrequestInterfaces.ITypedRequest, IReq_GetMailDeliveryStatus > { method: 'getMailDeliveryStatus'; request: { auth: IMailSubmissionRequestAuth; spoolItemId: string; }; response: IMailDeliveryStatus; } export interface IReq_ListMailSpoolItems extends plugins.typedrequestInterfaces.implementsTR< plugins.typedrequestInterfaces.ITypedRequest, IReq_ListMailSpoolItems > { method: 'listMailSpoolItems'; request: { auth: IMailControlRequestAuth; owner?: Partial; status?: IMailSpoolItem['status']; direction?: IMailSpoolItem['direction']; limit?: number; }; response: { spoolItems: IMailSpoolItem[]; }; } export interface IReq_ListMailDeliveryJournal extends plugins.typedrequestInterfaces.implementsTR< plugins.typedrequestInterfaces.ITypedRequest, IReq_ListMailDeliveryJournal > { method: 'listMailDeliveryJournal'; request: { auth: IMailControlRequestAuth; owner?: Partial; spoolItemId?: string; direction?: IMailSpoolItem['direction']; status?: IMailSpoolItem['status']; type?: IMailDeliveryJournalEvent['type']; limit?: number; }; response: { events: IMailDeliveryJournalEvent[]; }; } export interface IReq_EnqueueMail extends plugins.typedrequestInterfaces.implementsTR< plugins.typedrequestInterfaces.ITypedRequest, IReq_EnqueueMail > { method: 'enqueueMail'; request: { auth: IMailSubmissionRequestAuth; /** Credential-scoped replay key. Reuse with different message semantics must fail closed. */ idempotencyKey?: string; outboundIdentityId?: string; message: IMailOutboundMessagePayload; }; response: { accepted: boolean; spoolItemId?: string; outboundIdentity?: IMailOutboundIdentity; errorCode?: TMailSubmissionErrorCode; message?: string; }; } /** * Shared read-only mail overview used by the gateway-client API and Cloudly UI: * configured email domains and recent queue entries. */ export interface IMailOverviewDomain { domain: string; dnsMode?: string; status?: string; } export interface IMailOverviewEmail { id: string; direction?: string; from?: string; to?: string; subject?: string; status?: string; timestamp?: number; } export interface IReq_Any_Cloudly_GetMailOverview extends plugins.typedrequestInterfaces.implementsTR< plugins.typedrequestInterfaces.ITypedRequest, IReq_Any_Cloudly_GetMailOverview > { method: 'getMailOverview'; request: { identity: IIdentity; }; response: { /** False when no dcrouter gateway-client credential is configured. */ configured: boolean; gatewayUrl?: string; domains: IMailOverviewDomain[]; emails: IMailOverviewEmail[]; errorText?: string; }; }