/** * Email Port * * Defines the interface for email sending operations. * This is a secondary port (output port) in hexagonal architecture. */ export const EMAIL_PORT = 'EmailPort'; export interface EmailAttachment { filename: string; content: Buffer | string; contentType?: string; } export interface EmailOptions { to: string | string[]; cc?: string | string[]; bcc?: string | string[]; replyTo?: string; subject: string; html?: string; text?: string; attachments?: EmailAttachment[]; } export interface EmailPort { /** * Send an email */ send(options: EmailOptions): Promise; /** * Send booking confirmation email */ sendBookingConfirmation( email: string, bookingNumber: string, bookingDetails: any, pdfAttachment?: Buffer ): Promise; /** * Send email verification email */ sendVerificationEmail(email: string, token: string): Promise; /** * Send password reset email */ sendPasswordResetEmail(email: string, token: string): Promise; /** * Send welcome email */ sendWelcomeEmail(email: string, firstName: string): Promise; /** * Send user invitation email (legacy - with temp password) */ sendUserInvitation( email: string, organizationName: string, inviterName: string, tempPassword: string ): Promise; /** * Send invitation email with registration link (token-based) */ sendInvitationWithToken( email: string, firstName: string, lastName: string, organizationName: string, inviterName: string, invitationLink: string, expiresAt: Date ): Promise; /** * Send CSV booking request email to carrier */ sendCsvBookingRequest( carrierEmail: string, bookingDetails: { bookingId: string; origin: string; destination: string; volumeCBM: number; weightKG: number; palletCount: number; priceUSD: number; priceEUR: number; primaryCurrency: string; transitDays: number; containerType: string; documents: Array<{ type: string; fileName: string; }>; confirmationToken: string; } ): Promise; /** * Send carrier account creation email with temporary password */ sendCarrierAccountCreated( email: string, carrierName: string, temporaryPassword: string ): Promise; /** * Send carrier password reset email with temporary password */ sendCarrierPasswordReset( email: string, carrierName: string, temporaryPassword: string ): Promise; }