// Wildduck Type Definitions // Comprehensive type definitions for the Wildduck mail server // // Organization: // - types/database.d.ts - Internal MongoDB document structures // - types/api.d.ts - REST API request/response types // - types/handlers.d.ts - Handler interfaces and service classes // - types/events.d.ts - Event bus types and interfaces // // All types are prefixed with "Wildduck" and organized under the Wildduck namespace import { ObjectId } from 'mongodb'; import { Readable } from 'stream'; // Re-export all types from separate files export * from './database'; export * from './api'; export * from './handlers'; export * from './events'; // Unified namespace for convenient access export namespace Wildduck { // ============================================================================ // DATABASE TYPES (from types/database.d.ts) // ============================================================================ // Core Database Models export type { WildduckUser, WildduckMailbox, WildduckMessage, WildduckAddress, WildduckFilter, WildduckTask, WildduckWebhook, WildduckSettings, WildduckASP, WildduckDKIM, WildduckCertificate } from './database'; // MIME and Email Structures export type { WildduckMimeTree, WildduckEnvelope, WildduckAddressObject, WildduckAttachment, WildduckAttachmentFile } from './database'; // Session Types export type { WildduckIMAPSession, WildduckSelectedMailbox } from './database'; // Protocol Response Types export type { WildduckIMAPResponse, WildduckCopyResponse } from './database'; // ============================================================================ // API TYPES (from types/api.d.ts) // ============================================================================ // Common API Types export type { WildduckAPIResponse, WildduckAPIErrorResponse, WildduckPaginatedResponse, WildduckQuota } from './api'; // User API export type { WildduckGetUsersResultItem, WildduckGetUsersResponse, WildduckCreateUserRequest, WildduckCreateUserResponse, WildduckGetUserResponse, WildduckUpdateUserRequest } from './api'; // Address API export type { WildduckGetAddressesResultItem, WildduckGetUserAddressesResultItem, WildduckAddressLimits, WildduckAutoreplyInfo, WildduckAutoreplyRequest, WildduckCreateAddressRequest } from './api'; // Mailbox API export type { WildduckGetMailboxesResultItem, WildduckGetMailboxesResponse, WildduckCreateMailboxRequest, WildduckCreateMailboxResponse, WildduckUpdateMailboxRequest } from './api'; // Message API export type { WildduckSMTPEnvelope, WildduckMessageAddress, WildduckMessageHeader, WildduckMessageAttachment, WildduckMessageReference, WildduckMessageBimi, WildduckUploadMessageRequest, WildduckSubmitMessageRequest, WildduckSubmitMessageResponse, WildduckUpdateMessageRequest, WildduckGetMessagesResultItem, WildduckGetMessagesResponse, WildduckSearchMessagesResultItem, WildduckSearchMessagesResponse, WildduckSearchApplyRequest, WildduckSearchApplyResponse, WildduckGetMessageResponse, WildduckForwardMessageRequest, WildduckSubmitDraftRequest, WildduckGetArchivedMessagesResultItem, WildduckGetArchivedMessagesResponse, WildduckRestoreMessagesRequest, WildduckRestoreMessagesResponse } from './api'; // Filter API export type { WildduckFilterQuery, WildduckFilterAction, WildduckGetFiltersResultItem, WildduckGetAllFiltersResultItem, WildduckCreateFilterRequest, WildduckCreateFilterResponse, WildduckUpdateFilterRequest } from './api'; // Authentication API export type { WildduckAuthenticateRequest, WildduckAuthenticateCryptoRequest, WildduckAuthenticateResponse } from './api'; // ASP API export type { WildduckGetASPsResultItem, WildduckCreateASPRequest, WildduckCreateASPResponse } from './api'; // 2FA API export type { WildduckEnable2FARequest, WildduckSetup2FAResponse } from './api'; // Webhook API export type { WildduckGetWebhooksResultItem, WildduckCreateWebhookRequest, WildduckCreateWebhookResponse } from './api'; // DKIM API export type { WildduckGetDKIMResultItem, WildduckCreateDKIMRequest, WildduckCreateDKIMResponse } from './api'; // Settings API export type { WildduckGetSettingsResultItem, WildduckUpdateSettingRequest, WildduckGetStorageResponse, WildduckUploadFileRequest, WildduckUploadFileResponse, WildduckGetFilesResultItem, WildduckGetFilesResponse } from './api'; // Audit API export type { WildduckCreateAuditRequest, WildduckCreateAuditResponse, WildduckGetAuditResponse } from './api'; // Health API export type { WildduckHealthResponse, WildduckHealthErrorResponse } from './api'; // Certificate API export type { WildduckGetCertsResultItem, WildduckCreateCertRequest, WildduckCreateCertResponse } from './api'; // Domain Aliases API export type { WildduckGetDomainAliasesResultItem, WildduckCreateDomainAliasRequest, WildduckCreateDomainAliasResponse, WildduckGetDomainAliasResponse, WildduckResolveDomainResponse } from './api'; // Updates API export type { WildduckGetUpdatesResponse } from './api'; // ============================================================================ // HANDLER TYPES (from types/handlers.d.ts) // ============================================================================ // Message Handler export type { WildduckMessageHandler, WildduckMessageAddOptions, WildduckMessageGetOptions, WildduckMessageMoveOptions, WildduckMessageInfo, WildduckPrepareMessageOptions, WildduckPreparedMessage, WildduckMessageAddCallback, WildduckMessageGetCallback, WildduckMessageDelCallback, WildduckMessageMoveCallback, WildduckEncryptCallback, WildduckPrepareMessageCallback } from './handlers'; // User Handler export type { WildduckUserHandler, WildduckUserCreateOptions, WildduckUserGetOptions, WildduckPasswordResetOptions, WildduckAuthMeta, WildduckAuthData, WildduckUserCreateCallback, WildduckUserGetCallback, WildduckAuthCallback } from './handlers'; // Mailbox Handler export type { WildduckMailboxHandler, WildduckMailboxCreateCallback, WildduckMailboxRenameCallback, WildduckMailboxDelCallback, WildduckMailboxGetCallback } from './handlers'; // Attachment Storage export type { WildduckAttachmentStorage, WildduckAttachmentData, WildduckAttachmentGetCallback, WildduckAttachmentCreateCallback } from './handlers'; // Other Handlers export type { WildduckIndexer, WildduckUserCache, WildduckCacheGetCallback, WildduckTaskHandler, WildduckTaskCallback, WildduckTaskProcessor, WildduckSettingsHandler, WildduckSettingGetCallback, WildduckSettingsGetCallback, WildduckIMAPNotifier } from './handlers'; // Common Callbacks export type { WildduckCallback, WildduckBooleanCallback, WildduckCountCallback } from './handlers'; // ============================================================================ // EVENT TYPES (from types/events.d.ts) // ============================================================================ // Event Type Constants export type { WildduckEventType, WildduckEventCategory, WildduckEventAction, WildduckEventSource } from './events'; // Core Event Types export type { WildduckEvent, WildduckRawEventData } from './events'; // Event Attachment System export type { WildduckEventAttachment, WildduckEventBus } from './events'; // Specific Event Data export type { WildduckMessageAddedEventData, WildduckMessageFlagsChangedEventData, WildduckMessageMovedEventData, WildduckMailboxCreatedEventData, WildduckMailboxRenamedEventData, WildduckAddressCreatedEventData, WildduckFilterCreatedEventData, WildduckSettingsUpdatedEventData } from './events'; // Built-in Attachments export type { WildduckTestTracker, WildduckDebugLogger } from './events'; // Event Publishing export type { WildduckPublish, WildduckEventTypes } from './events'; } // ============================================================================ // Type Guards and Utilities // ============================================================================ /** * Type guard to check if a value is a valid ObjectId */ export function isWildduckObjectId(value: any): value is ObjectId { return value && typeof value === 'object' && value.constructor.name === 'ObjectId'; } /** * Type guard to check if a response is an error */ export function isWildduckAPIError(response: Wildduck.WildduckAPIResponse): response is Wildduck.WildduckAPIErrorResponse { return response.success === false; } /** * Type guard to check if a response is paginated */ export function isWildduckPaginatedResponse(response: any): response is Wildduck.WildduckPaginatedResponse { return response && typeof response === 'object' && 'results' in response && 'total' in response && 'page' in response; } // ============================================================================ // Constants // ============================================================================ /** * Default values and limits */ export const WildduckConstants = { /** * Maximum items per page for paginated responses */ MAX_PAGE_SIZE: 250, /** * Default items per page */ DEFAULT_PAGE_SIZE: 20, /** * ObjectId string length */ OBJECT_ID_LENGTH: 24, /** * IMAP states */ IMAP_STATES: { NOT_AUTHENTICATED: 'Not Authenticated', AUTHENTICATED: 'Authenticated', SELECTED: 'Selected' } as const, /** * Special use mailbox flags */ SPECIAL_USE: { SENT: '\\Sent', TRASH: '\\Trash', JUNK: '\\Junk', DRAFTS: '\\Drafts', ARCHIVE: '\\Archive', ALL: '\\All', FLAGGED: '\\Flagged' } as const, /** * Authentication scopes */ SCOPES: { MASTER: 'master', IMAP: 'imap', POP3: 'pop3', SMTP: 'smtp' } as const } as const; // ============================================================================ // Module Information // ============================================================================ /** * Wildduck type definitions version * Update this when making significant changes to type definitions */ export const WILDDUCK_TYPES_VERSION = '2.0.0'; /** * Type definition metadata */ export const WildduckTypeInfo = { version: WILDDUCK_TYPES_VERSION, description: 'Comprehensive TypeScript definitions for Wildduck mail server', organization: { database: 'Internal MongoDB document structures and database models', api: 'REST API request/response types from Joi validation schemas', handlers: 'Handler interfaces and internal service classes', events: 'Event bus types and event attachment system' }, coverage: { databaseModels: 11, apiEndpoints: 100, handlers: 8, eventTypes: 15 } } as const;