mailbreeze 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/http/errors.ts","../src/http/fetcher.ts","../src/resources/base.ts","../src/resources/attachments.ts","../src/resources/automations.ts","../src/resources/contacts.ts","../src/resources/emails.ts","../src/resources/lists.ts","../src/resources/verification.ts","../src/client.ts"],"names":[],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Base error class for all MailBreeze SDK errors.\n * All API-related errors extend from this class.\n */\nexport class MailBreezeError extends Error {\n /** Error code for programmatic handling */\n public readonly code: string;\n\n /** HTTP status code (if applicable) */\n public readonly statusCode?: number;\n\n /** Unique request ID for debugging with support */\n public readonly requestId?: string;\n\n /** Additional error details (e.g., field-level validation errors) */\n public readonly details?: Record<string, unknown>;\n\n constructor(\n message: string,\n code: string,\n statusCode?: number,\n requestId?: string,\n details?: Record<string, unknown>,\n ) {\n super(message);\n this.name = \"MailBreezeError\";\n this.code = code;\n if (statusCode !== undefined) this.statusCode = statusCode;\n if (requestId !== undefined) this.requestId = requestId;\n if (details !== undefined) this.details = details;\n\n // Maintains proper stack trace for where our error was thrown (V8 engines)\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n }\n\n /**\n * Serialize error to JSON-friendly object.\n * Useful for logging and error reporting.\n */\n toJSON(): Record<string, unknown> {\n return {\n name: this.name,\n message: this.message,\n code: this.code,\n statusCode: this.statusCode,\n requestId: this.requestId,\n details: this.details,\n };\n }\n}\n\n/**\n * Authentication failed (401).\n * Thrown when API key is missing, invalid, or expired.\n */\nexport class AuthenticationError extends MailBreezeError {\n constructor(message: string, code = \"AUTHENTICATION_ERROR\", requestId?: string) {\n super(message, code, 401, requestId);\n this.name = \"AuthenticationError\";\n }\n}\n\n/**\n * Validation failed (400).\n * Thrown when request data fails validation.\n */\nexport class ValidationError extends MailBreezeError {\n constructor(message: string, code = \"VALIDATION_ERROR\", requestId?: string, details?: Record<string, unknown>) {\n super(message, code, 400, requestId, details);\n this.name = \"ValidationError\";\n }\n}\n\n/**\n * Resource not found (404).\n * Thrown when the requested resource does not exist.\n */\nexport class NotFoundError extends MailBreezeError {\n constructor(message: string, code = \"NOT_FOUND\", requestId?: string) {\n super(message, code, 404, requestId);\n this.name = \"NotFoundError\";\n }\n}\n\n/**\n * Rate limit exceeded (429).\n * Thrown when too many requests are made in a time window.\n */\nexport class RateLimitError extends MailBreezeError {\n /** Seconds to wait before retrying */\n public readonly retryAfter?: number;\n\n constructor(message: string, code = \"RATE_LIMIT_EXCEEDED\", requestId?: string, retryAfter?: number) {\n super(message, code, 429, requestId);\n this.name = \"RateLimitError\";\n if (retryAfter !== undefined) this.retryAfter = retryAfter;\n }\n\n override toJSON(): Record<string, unknown> {\n return {\n ...super.toJSON(),\n retryAfter: this.retryAfter,\n };\n }\n}\n\n/**\n * Server error (5xx).\n * Thrown when the API encounters an internal error.\n */\nexport class ServerError extends MailBreezeError {\n constructor(message: string, code = \"SERVER_ERROR\", statusCode = 500, requestId?: string) {\n super(message, code, statusCode, requestId);\n this.name = \"ServerError\";\n }\n}\n\n/**\n * Error response body from the API\n */\ninterface ErrorResponseBody {\n code?: string;\n message?: string;\n details?: Record<string, unknown>;\n}\n\n/**\n * Factory function to create the appropriate error class from an HTTP response.\n * Maps status codes to specific error types.\n */\nexport function createErrorFromResponse(\n statusCode: number,\n body: ErrorResponseBody | null | undefined,\n requestId?: string,\n retryAfter?: number,\n): MailBreezeError {\n const message = body?.message ?? \"Unknown error\";\n const code = body?.code ?? \"UNKNOWN_ERROR\";\n const details = body?.details;\n\n switch (statusCode) {\n case 400:\n return new ValidationError(message, code, requestId, details);\n case 401:\n return new AuthenticationError(message, code, requestId);\n case 404:\n return new NotFoundError(message, code, requestId);\n case 429:\n return new RateLimitError(message, code, requestId, retryAfter);\n default:\n if (statusCode >= 500) {\n return new ServerError(message, code, statusCode, requestId);\n }\n return new MailBreezeError(message, code, statusCode, requestId, details);\n }\n}\n","import { createErrorFromResponse, MailBreezeError, RateLimitError, ServerError } from \"./errors\";\n\nconst SDK_VERSION = \"0.1.0\";\n\nexport interface FetcherConfig {\n apiKey: string;\n baseUrl: string;\n timeout: number;\n maxRetries: number;\n authStyle?: \"header\" | \"bearer\";\n}\n\nexport interface RequestOptions {\n idempotencyKey?: string;\n timeout?: number;\n}\n\ninterface ApiSuccessResponse<T> {\n success: true;\n data: T;\n meta?: Record<string, unknown>;\n}\n\ninterface ApiErrorResponse {\n success: false;\n error: {\n code: string;\n message: string;\n details?: Record<string, unknown>;\n };\n}\n\ntype ApiResponse<T> = ApiSuccessResponse<T> | ApiErrorResponse;\n\n/**\n * HTTP client for making requests to the MailBreeze API.\n * Handles authentication, retries, timeouts, and error mapping.\n */\nexport class Fetcher {\n private readonly config: FetcherConfig;\n\n constructor(config: FetcherConfig) {\n this.config = {\n ...config,\n baseUrl: config.baseUrl.replace(/\\/$/, \"\"), // Remove trailing slash\n };\n }\n\n /**\n * Make an HTTP request to the API.\n *\n * @param method - HTTP method\n * @param path - API path (will be appended to baseUrl)\n * @param body - Request body (for POST/PUT/PATCH)\n * @param query - Query parameters\n * @param options - Additional request options\n * @returns Parsed response data\n */\n async request<T>(\n method: string,\n path: string,\n body?: Record<string, unknown>,\n query?: Record<string, unknown>,\n options?: RequestOptions,\n ): Promise<T> {\n const url = this.buildUrl(path, query);\n const headers = this.buildHeaders(options?.idempotencyKey);\n const timeout = options?.timeout ?? this.config.timeout;\n\n let lastError: MailBreezeError | undefined;\n let attempt = 0;\n const maxAttempts = this.config.maxRetries + 1;\n\n while (attempt < maxAttempts) {\n attempt++;\n\n try {\n const result = await this.executeRequest<T>(method, url, headers, body, timeout);\n return result;\n } catch (error) {\n lastError = error as MailBreezeError;\n\n // Don't retry on client errors (4xx except 429) or abort errors\n if (!this.isRetryable(lastError, error)) {\n throw lastError;\n }\n\n // Check if we have retries left\n if (attempt >= maxAttempts) {\n throw lastError;\n }\n\n // Calculate delay\n const delay = this.getRetryDelay(lastError, attempt);\n await this.sleep(delay);\n }\n }\n\n // This line should never be reached due to the retry logic above\n // but TypeScript needs a return path for safety\n throw lastError ?? new MailBreezeError(\"Unexpected error during request\", \"UNEXPECTED_ERROR\");\n }\n\n private async executeRequest<T>(\n method: string,\n url: string,\n headers: Record<string, string>,\n body?: Record<string, unknown>,\n timeout?: number,\n ): Promise<T> {\n const controller = new AbortController();\n const timeoutId = timeout ? setTimeout(() => controller.abort(), timeout) : undefined;\n\n try {\n const fetchOptions: RequestInit = {\n method,\n headers,\n signal: controller.signal,\n };\n\n if (body && method !== \"GET\" && method !== \"HEAD\") {\n fetchOptions.body = JSON.stringify(body);\n }\n\n const response = await fetch(url, fetchOptions);\n\n return await this.handleResponse<T>(response);\n } catch (error) {\n // Handle abort/timeout\n if (error instanceof Error && error.name === \"AbortError\") {\n throw new MailBreezeError(\"Request timeout\", \"TIMEOUT_ERROR\", 0);\n }\n\n // Network errors - wrap for retry handling\n if (error instanceof Error && !(error instanceof MailBreezeError)) {\n throw new ServerError(`Network error: ${error.message}`, \"NETWORK_ERROR\", 0);\n }\n\n throw error;\n } finally {\n // Clean up timeout to prevent memory leaks\n if (timeoutId !== undefined) {\n clearTimeout(timeoutId);\n }\n }\n }\n\n private async handleResponse<T>(response: Response): Promise<T> {\n const requestId = response.headers.get(\"X-Request-Id\") ?? undefined;\n const retryAfter = response.headers.get(\"Retry-After\");\n const retryAfterSeconds = retryAfter ? Number.parseInt(retryAfter, 10) : undefined;\n\n // Handle 204 No Content\n if (response.status === 204) {\n return undefined as T;\n }\n\n let body: ApiResponse<T>;\n try {\n body = (await response.json()) as ApiResponse<T>;\n } catch {\n // JSON parsing failed\n if (!response.ok) {\n throw createErrorFromResponse(response.status, undefined, requestId);\n }\n return undefined as T;\n }\n\n // Handle API error in body\n if (!body.success) {\n const errorBody = (body as ApiErrorResponse).error;\n // Use 400 as default for success: false with ok response (validation errors)\n const statusCode = response.ok ? 400 : response.status;\n throw createErrorFromResponse(statusCode, errorBody, requestId, retryAfterSeconds);\n }\n\n // Handle HTTP error even if success field is missing\n if (!response.ok) {\n throw createErrorFromResponse(response.status, undefined, requestId, retryAfterSeconds);\n }\n\n return (body as ApiSuccessResponse<T>).data;\n }\n\n private buildUrl(path: string, query?: Record<string, unknown>): string {\n // Ensure path starts with /\n const normalizedPath = path.startsWith(\"/\") ? path : `/${path}`;\n const url = new URL(`${this.config.baseUrl}${normalizedPath}`);\n\n if (query) {\n for (const [key, value] of Object.entries(query)) {\n if (value !== undefined && value !== null) {\n url.searchParams.append(key, String(value));\n }\n }\n }\n\n return url.toString();\n }\n\n private buildHeaders(idempotencyKey?: string): Record<string, string> {\n const headers: Record<string, string> = {\n \"Content-Type\": \"application/json\",\n \"User-Agent\": `mailbreeze-js/${SDK_VERSION}`,\n };\n\n // Authentication\n if (this.config.authStyle === \"bearer\") {\n headers.Authorization = `Bearer ${this.config.apiKey}`;\n } else {\n headers[\"X-API-Key\"] = this.config.apiKey;\n }\n\n // Idempotency - validate to prevent header injection\n if (idempotencyKey) {\n // Ensure key doesn't contain newlines or control characters\n if (/[\\r\\n]/.test(idempotencyKey)) {\n throw new MailBreezeError(\"Invalid idempotency key: contains invalid characters\", \"INVALID_IDEMPOTENCY_KEY\");\n }\n headers[\"X-Idempotency-Key\"] = idempotencyKey;\n }\n\n return headers;\n }\n\n private isRetryable(error: MailBreezeError, originalError: unknown): boolean {\n // Don't retry abort errors (timeouts)\n if (originalError instanceof Error && originalError.name === \"AbortError\") {\n return false;\n }\n\n // Retry on 429 (rate limit) and 5xx (server errors)\n if (error.statusCode === 429 || (error.statusCode !== undefined && error.statusCode >= 500)) {\n return true;\n }\n\n // Retry on network errors (statusCode 0)\n if (error.statusCode === 0 && error.code === \"NETWORK_ERROR\") {\n return true;\n }\n\n return false;\n }\n\n private getRetryDelay(error: MailBreezeError, attempt: number): number {\n // Use Retry-After header if available (for rate limits)\n if (error instanceof RateLimitError && error.retryAfter) {\n return error.retryAfter * 1000;\n }\n\n // Exponential backoff: 1s, 2s, 4s, 8s...\n return 2 ** (attempt - 1) * 1000;\n }\n\n private sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n }\n}\n","import type { Fetcher, RequestOptions } from \"../http/fetcher\";\nimport type { ListParams, PaginatedList } from \"../types/common\";\n\n/**\n * Base class for all API resources.\n * Provides common functionality for making API requests.\n */\nexport abstract class BaseResource {\n protected readonly fetcher: Fetcher;\n protected readonly domainId?: string;\n\n constructor(fetcher: Fetcher, domainId?: string) {\n this.fetcher = fetcher;\n if (domainId !== undefined) this.domainId = domainId;\n }\n\n /**\n * Make a GET request.\n */\n protected _get<T>(path: string, query?: Record<string, unknown>, options?: RequestOptions): Promise<T> {\n return this.fetcher.request<T>(\"GET\", this.buildPath(path), undefined, this.addDomainId(query), options);\n }\n\n /**\n * Make a POST request.\n */\n protected _post<T>(\n path: string,\n body?: object,\n query?: Record<string, unknown>,\n options?: RequestOptions,\n ): Promise<T> {\n return this.fetcher.request<T>(\n \"POST\",\n this.buildPath(path),\n body as Record<string, unknown>,\n this.addDomainId(query),\n options,\n );\n }\n\n /**\n * Make a PUT request.\n */\n protected _put<T>(\n path: string,\n body?: object,\n query?: Record<string, unknown>,\n options?: RequestOptions,\n ): Promise<T> {\n return this.fetcher.request<T>(\n \"PUT\",\n this.buildPath(path),\n body as Record<string, unknown>,\n this.addDomainId(query),\n options,\n );\n }\n\n /**\n * Make a PATCH request.\n */\n protected _patch<T>(\n path: string,\n body?: object,\n query?: Record<string, unknown>,\n options?: RequestOptions,\n ): Promise<T> {\n return this.fetcher.request<T>(\n \"PATCH\",\n this.buildPath(path),\n body as Record<string, unknown>,\n this.addDomainId(query),\n options,\n );\n }\n\n /**\n * Make a DELETE request.\n */\n protected _delete<T>(path: string, query?: Record<string, unknown>, options?: RequestOptions): Promise<T> {\n return this.fetcher.request<T>(\"DELETE\", this.buildPath(path), undefined, this.addDomainId(query), options);\n }\n\n /**\n * Build the full path including any base path for the resource.\n */\n protected buildPath(path: string): string {\n return path;\n }\n\n /**\n * Add domain ID to query params if configured.\n */\n private addDomainId(query?: Record<string, unknown>): Record<string, unknown> | undefined {\n if (!this.domainId) {\n return query;\n }\n return { ...query, domainId: this.domainId };\n }\n\n /**\n * Helper to extract pagination from list response.\n */\n protected extractPaginatedList<T>(\n response: { data: T[]; pagination: PaginatedList<T>[\"pagination\"] } | T[],\n ): PaginatedList<T> {\n if (Array.isArray(response)) {\n return {\n data: response,\n pagination: {\n page: 1,\n limit: response.length,\n total: response.length,\n totalPages: 1,\n hasNext: false,\n hasPrev: false,\n },\n };\n }\n return {\n data: response.data,\n pagination: response.pagination,\n };\n }\n\n /**\n * Convert list params to query object.\n */\n protected listParamsToQuery(params?: ListParams): Record<string, unknown> | undefined {\n if (!params) return undefined;\n const query: Record<string, unknown> = {};\n if (params.page !== undefined) query.page = params.page;\n if (params.limit !== undefined) query.limit = params.limit;\n return Object.keys(query).length > 0 ? query : undefined;\n }\n}\n","import type {\n Attachment,\n ConfirmAttachmentParams,\n CreateAttachmentUploadParams,\n CreateAttachmentUploadResult,\n} from \"../types\";\nimport { BaseResource } from \"./base\";\n\n/**\n * Email attachment handling.\n *\n * Attachments use a two-step process:\n * 1. Create an upload URL with `createUpload()`\n * 2. Upload the file directly to the URL\n * 3. Confirm the upload with `confirm()`\n * 4. Use the attachment ID when sending emails\n *\n * @example\n * ```ts\n * // Create upload\n * const { attachmentId, uploadUrl, uploadToken } = await mailbreeze.attachments.createUpload({\n * fileName: \"report.pdf\",\n * contentType: \"application/pdf\",\n * fileSize: 1024000,\n * });\n *\n * // Upload file directly\n * await fetch(uploadUrl, {\n * method: \"PUT\",\n * body: fileBuffer,\n * headers: { \"Content-Type\": \"application/pdf\" },\n * });\n *\n * // Confirm upload\n * const attachment = await mailbreeze.attachments.confirm({\n * uploadToken,\n * });\n *\n * // Use in email\n * await mailbreeze.emails.send({\n * from: \"hello@yourdomain.com\",\n * to: \"user@example.com\",\n * subject: \"Your report\",\n * html: \"<p>Please find the report attached.</p>\",\n * attachmentIds: [attachmentId],\n * });\n * ```\n */\nexport class Attachments extends BaseResource {\n /**\n * Create a presigned URL for uploading an attachment.\n *\n * @param params - Attachment metadata\n * @returns Upload URL and attachment ID\n *\n * @example\n * ```ts\n * const { attachmentId, uploadUrl, uploadToken, expiresAt } =\n * await mailbreeze.attachments.createUpload({\n * fileName: \"document.pdf\",\n * contentType: \"application/pdf\",\n * fileSize: 2048000,\n * });\n * ```\n */\n async createUpload(params: CreateAttachmentUploadParams): Promise<CreateAttachmentUploadResult> {\n return this._post<CreateAttachmentUploadResult>(\"/attachments/upload\", params);\n }\n\n /**\n * Confirm that an attachment has been uploaded.\n *\n * Must be called after uploading the file to the presigned URL.\n * The attachment is only available for use after confirmation.\n *\n * @param params - Confirmation parameters including upload token\n * @returns Confirmed attachment record\n *\n * @example\n * ```ts\n * const attachment = await mailbreeze.attachments.confirm({\n * uploadToken: \"token_xxx\",\n * });\n * console.log(attachment.status); // \"uploaded\"\n * ```\n */\n async confirm(params: ConfirmAttachmentParams): Promise<Attachment> {\n return this._post<Attachment>(\"/attachments/confirm\", params);\n }\n}\n","import type {\n CancelEnrollmentResult,\n Enrollment,\n EnrollParams,\n EnrollResult,\n ListEnrollmentsParams,\n PaginatedList,\n} from \"../types\";\nimport { BaseResource } from \"./base\";\n\n/**\n * Automation enrollment management.\n *\n * Enroll contacts in automations, list enrollments, and cancel them.\n *\n * @example\n * ```ts\n * // Enroll a contact\n * const enrollment = await mailbreeze.automations.enroll({\n * automationId: \"auto_xxx\",\n * contactId: \"contact_xxx\",\n * variables: { couponCode: \"WELCOME10\" },\n * });\n *\n * // List active enrollments\n * const { data } = await mailbreeze.automations.enrollments.list({\n * status: \"active\",\n * });\n * ```\n */\nexport class Automations extends BaseResource {\n /**\n * Enrollments sub-resource for listing and cancelling.\n */\n public readonly enrollments: AutomationEnrollments;\n\n constructor(fetcher: import(\"../http/fetcher\").Fetcher, domainId?: string) {\n super(fetcher, domainId);\n this.enrollments = new AutomationEnrollments(fetcher, domainId);\n }\n\n /**\n * Enroll a contact in an automation.\n *\n * @param params - Enrollment parameters\n * @returns Enrollment result\n *\n * @example\n * ```ts\n * const enrollment = await mailbreeze.automations.enroll({\n * automationId: \"auto_welcome\",\n * contactId: \"contact_xxx\",\n * variables: { firstName: \"John\" },\n * });\n * console.log(enrollment.enrollmentId);\n * ```\n */\n async enroll(params: EnrollParams): Promise<EnrollResult> {\n return this._post<EnrollResult>(`/automations/${params.automationId}/enroll`, {\n contactId: params.contactId,\n variables: params.variables,\n });\n }\n}\n\n/**\n * Automation enrollments sub-resource.\n */\nclass AutomationEnrollments extends BaseResource {\n /**\n * List automation enrollments.\n *\n * @param params - Filter and pagination options\n * @returns Paginated list of enrollments\n *\n * @example\n * ```ts\n * const { data, pagination } = await mailbreeze.automations.enrollments.list({\n * automationId: \"auto_xxx\",\n * status: \"active\",\n * });\n * ```\n */\n async list(params?: ListEnrollmentsParams): Promise<PaginatedList<Enrollment>> {\n const query: Record<string, unknown> = {\n ...this.listParamsToQuery(params),\n };\n\n if (params?.automationId) query.automationId = params.automationId;\n if (params?.status) query.status = params.status;\n\n const response = await this._get<{\n data: Enrollment[];\n pagination: PaginatedList<Enrollment>[\"pagination\"];\n }>(\"/automation-enrollments\", Object.keys(query).length > 0 ? query : undefined);\n\n return this.extractPaginatedList(response);\n }\n\n /**\n * Cancel an enrollment.\n *\n * The contact will stop receiving emails from this automation.\n *\n * @param enrollmentId - Enrollment ID\n * @returns Cancellation result\n *\n * @example\n * ```ts\n * const result = await mailbreeze.automations.enrollments.cancel(\"enroll_xxx\");\n * console.log(result.cancelled); // true\n * ```\n */\n async cancel(enrollmentId: string): Promise<CancelEnrollmentResult> {\n return this._post<CancelEnrollmentResult>(`/automation-enrollments/${enrollmentId}/cancel`, {});\n }\n}\n","import type { Fetcher } from \"../http/fetcher\";\nimport type {\n Contact,\n CreateContactParams,\n ListContactsParams,\n PaginatedList,\n SuppressReason,\n UpdateContactParams,\n} from \"../types\";\nimport { BaseResource } from \"./base\";\n\n/**\n * Contact management within a list.\n *\n * All contact operations require a list context. Get a contacts instance\n * by calling `mailbreeze.contacts(listId)`.\n *\n * @example\n * ```ts\n * const contacts = mailbreeze.contacts(\"list_xxx\");\n *\n * // Create a contact\n * const contact = await contacts.create({\n * email: \"user@example.com\",\n * firstName: \"John\",\n * lastName: \"Doe\",\n * customFields: { company: \"Acme Inc\" },\n * });\n *\n * // List contacts\n * const { data, pagination } = await contacts.list({ status: \"active\" });\n * ```\n */\nexport class Contacts extends BaseResource {\n private readonly listId: string;\n\n constructor(fetcher: Fetcher, listId: string, domainId?: string) {\n super(fetcher, domainId);\n this.listId = listId;\n }\n\n protected override buildPath(path: string): string {\n return `/contact-lists/${this.listId}/contacts${path}`;\n }\n\n /**\n * Create a new contact in the list.\n *\n * @param params - Contact data\n * @returns Created contact record\n *\n * @example\n * ```ts\n * const contact = await contacts.create({\n * email: \"user@example.com\",\n * firstName: \"Jane\",\n * lastName: \"Smith\",\n * customFields: { plan: \"pro\" },\n * });\n * ```\n */\n async create(params: CreateContactParams): Promise<Contact> {\n return this._post<Contact>(\"\", params);\n }\n\n /**\n * List contacts in the list.\n *\n * @param params - Filter and pagination options\n * @returns Paginated list of contacts\n *\n * @example\n * ```ts\n * const { data, pagination } = await contacts.list({\n * status: \"active\",\n * page: 1,\n * limit: 50,\n * });\n * ```\n */\n async list(params?: ListContactsParams): Promise<PaginatedList<Contact>> {\n const query: Record<string, unknown> = {\n ...this.listParamsToQuery(params),\n };\n\n if (params?.status) query.status = params.status;\n\n const response = await this._get<{ data: Contact[]; pagination: PaginatedList<Contact>[\"pagination\"] }>(\n \"\",\n Object.keys(query).length > 0 ? query : undefined,\n );\n\n return this.extractPaginatedList(response);\n }\n\n /**\n * Get a contact by ID.\n *\n * @param id - Contact ID\n * @returns Contact record\n *\n * @example\n * ```ts\n * const contact = await contacts.get(\"contact_xxx\");\n * ```\n */\n async get(id: string): Promise<Contact> {\n return this._get<Contact>(`/${id}`);\n }\n\n /**\n * Update a contact.\n *\n * @param id - Contact ID\n * @param params - Fields to update\n * @returns Updated contact record\n *\n * @example\n * ```ts\n * const contact = await contacts.update(\"contact_xxx\", {\n * firstName: \"Updated Name\",\n * customFields: { plan: \"enterprise\" },\n * });\n * ```\n */\n async update(id: string, params: UpdateContactParams): Promise<Contact> {\n return this._put<Contact>(`/${id}`, params);\n }\n\n /**\n * Delete a contact.\n *\n * @param id - Contact ID\n * @returns void\n *\n * @example\n * ```ts\n * await contacts.delete(\"contact_xxx\");\n * ```\n */\n async delete(id: string): Promise<void> {\n await this._delete<void>(`/${id}`);\n }\n\n /**\n * Suppress a contact.\n *\n * Suppressed contacts will not receive any emails.\n * This is different from unsubscribing - suppression is\n * typically used for bounces, complaints, or manual removal.\n *\n * @param id - Contact ID\n * @param reason - Reason for suppression\n * @returns void\n *\n * @example\n * ```ts\n * await contacts.suppress(\"contact_xxx\", \"manual\");\n * ```\n */\n async suppress(id: string, reason: SuppressReason): Promise<void> {\n await this._post<void>(`/${id}/suppress`, { reason });\n }\n}\n","import type { Email, EmailStats, ListEmailsParams, PaginatedList, SendEmailParams, SendEmailResult } from \"../types\";\nimport { BaseResource } from \"./base\";\n\n/**\n * Email sending and management.\n *\n * @example\n * ```ts\n * // Send an email\n * const result = await mailbreeze.emails.send({\n * from: \"hello@yourdomain.com\",\n * to: \"user@example.com\",\n * subject: \"Welcome!\",\n * html: \"<h1>Welcome to our platform!</h1>\",\n * });\n *\n * // Send with a template\n * const result = await mailbreeze.emails.send({\n * from: \"hello@yourdomain.com\",\n * to: \"user@example.com\",\n * templateId: \"welcome-template\",\n * variables: { name: \"John\", plan: \"Pro\" },\n * });\n * ```\n */\nexport class Emails extends BaseResource {\n /**\n * Send an email.\n *\n * @param params - Email parameters\n * @returns Send result with email ID and status\n *\n * @example\n * ```ts\n * const result = await mailbreeze.emails.send({\n * from: \"hello@yourdomain.com\",\n * to: \"user@example.com\",\n * subject: \"Hello\",\n * html: \"<p>Hello World!</p>\",\n * });\n * console.log(result.id); // email_xxx\n * ```\n */\n async send(params: SendEmailParams): Promise<SendEmailResult> {\n const { idempotencyKey, ...body } = params;\n\n // Normalize 'to' to always be an array\n const normalizedBody = {\n ...body,\n to: Array.isArray(body.to) ? body.to : [body.to],\n cc: body.cc ? (Array.isArray(body.cc) ? body.cc : [body.cc]) : undefined,\n bcc: body.bcc ? (Array.isArray(body.bcc) ? body.bcc : [body.bcc]) : undefined,\n };\n\n return this._post<SendEmailResult>(\n \"/emails\",\n normalizedBody,\n undefined,\n idempotencyKey ? { idempotencyKey } : undefined,\n );\n }\n\n /**\n * List sent emails with optional filtering.\n *\n * @param params - Filter and pagination options\n * @returns Paginated list of emails\n *\n * @example\n * ```ts\n * const { data, pagination } = await mailbreeze.emails.list({\n * status: \"delivered\",\n * page: 1,\n * limit: 20,\n * });\n * ```\n */\n async list(params?: ListEmailsParams): Promise<PaginatedList<Email>> {\n const query: Record<string, unknown> = {\n ...this.listParamsToQuery(params),\n };\n\n if (params?.status) query.status = params.status;\n if (params?.to) query.to = params.to;\n if (params?.from) query.from = params.from;\n if (params?.startDate) query.startDate = params.startDate;\n if (params?.endDate) query.endDate = params.endDate;\n\n const response = await this._get<{ data: Email[]; pagination: PaginatedList<Email>[\"pagination\"] }>(\n \"/emails\",\n Object.keys(query).length > 0 ? query : undefined,\n );\n\n return this.extractPaginatedList(response);\n }\n\n /**\n * Get a single email by ID.\n *\n * @param id - Email ID\n * @returns Email record\n *\n * @example\n * ```ts\n * const email = await mailbreeze.emails.get(\"email_xxx\");\n * console.log(email.status); // \"delivered\"\n * ```\n */\n async get(id: string): Promise<Email> {\n return this._get<Email>(`/emails/${id}`);\n }\n\n /**\n * Get email statistics for the domain.\n *\n * @returns Email statistics including delivery rates\n *\n * @example\n * ```ts\n * const stats = await mailbreeze.emails.stats();\n * console.log(stats.deliveryRate); // 0.98\n * ```\n */\n async stats(): Promise<EmailStats> {\n return this._get<EmailStats>(\"/emails/stats\");\n }\n}\n","import type {\n ContactList,\n CreateListParams,\n ListListsParams,\n ListStats,\n PaginatedList,\n UpdateListParams,\n} from \"../types\";\nimport { BaseResource } from \"./base\";\n\n/**\n * Contact list management.\n *\n * @example\n * ```ts\n * // Create a list\n * const list = await mailbreeze.lists.create({\n * name: \"Newsletter Subscribers\",\n * description: \"Weekly newsletter recipients\",\n * customFields: [\n * { key: \"company\", label: \"Company\", type: \"text\" },\n * { key: \"plan\", label: \"Plan\", type: \"select\", options: [\"free\", \"pro\", \"enterprise\"] },\n * ],\n * });\n *\n * // Get list stats\n * const stats = await mailbreeze.lists.stats(list.id);\n * console.log(stats.activeContacts);\n * ```\n */\nexport class Lists extends BaseResource {\n /**\n * Create a new contact list.\n *\n * @param params - List configuration\n * @returns Created list record\n *\n * @example\n * ```ts\n * const list = await mailbreeze.lists.create({\n * name: \"VIP Customers\",\n * customFields: [\n * { key: \"tier\", label: \"Tier\", type: \"select\", options: [\"gold\", \"platinum\"] },\n * ],\n * });\n * ```\n */\n async create(params: CreateListParams): Promise<ContactList> {\n return this._post<ContactList>(\"/contact-lists\", params);\n }\n\n /**\n * List all contact lists.\n *\n * @param params - Pagination options\n * @returns Paginated list of contact lists\n *\n * @example\n * ```ts\n * const { data, pagination } = await mailbreeze.lists.list({ page: 1, limit: 10 });\n * ```\n */\n async list(params?: ListListsParams): Promise<PaginatedList<ContactList>> {\n const response = await this._get<{ data: ContactList[]; pagination: PaginatedList<ContactList>[\"pagination\"] }>(\n \"/contact-lists\",\n this.listParamsToQuery(params),\n );\n return this.extractPaginatedList(response);\n }\n\n /**\n * Get a contact list by ID.\n *\n * @param id - List ID\n * @returns Contact list record\n *\n * @example\n * ```ts\n * const list = await mailbreeze.lists.get(\"list_xxx\");\n * ```\n */\n async get(id: string): Promise<ContactList> {\n return this._get<ContactList>(`/contact-lists/${id}`);\n }\n\n /**\n * Update a contact list.\n *\n * @param id - List ID\n * @param params - Fields to update\n * @returns Updated list record\n *\n * @example\n * ```ts\n * const list = await mailbreeze.lists.update(\"list_xxx\", {\n * name: \"Updated List Name\",\n * });\n * ```\n */\n async update(id: string, params: UpdateListParams): Promise<ContactList> {\n return this._patch<ContactList>(`/contact-lists/${id}`, params);\n }\n\n /**\n * Delete a contact list.\n *\n * Warning: This will also delete all contacts in the list.\n *\n * @param id - List ID\n * @returns void\n *\n * @example\n * ```ts\n * await mailbreeze.lists.delete(\"list_xxx\");\n * ```\n */\n async delete(id: string): Promise<void> {\n await this._delete<void>(`/contact-lists/${id}`);\n }\n\n /**\n * Get statistics for a contact list.\n *\n * @param id - List ID\n * @returns List statistics\n *\n * @example\n * ```ts\n * const stats = await mailbreeze.lists.stats(\"list_xxx\");\n * console.log(`Active: ${stats.activeContacts}, Bounced: ${stats.bouncedContacts}`);\n * ```\n */\n async stats(id: string): Promise<ListStats> {\n return this._get<ListStats>(`/contact-lists/${id}/stats`);\n }\n}\n","import type {\n BatchVerifyParams,\n BatchVerifyResult,\n ListVerificationsParams,\n PaginatedList,\n VerificationStats,\n VerificationStatus,\n VerifyEmailResult,\n} from \"../types\";\nimport { BaseResource } from \"./base\";\n\n/**\n * Email verification services.\n *\n * Verify email addresses before sending to reduce bounces\n * and protect sender reputation.\n *\n * @example\n * ```ts\n * // Verify a single email\n * const result = await mailbreeze.verification.verify(\"user@example.com\");\n * if (result.isValid) {\n * // Safe to send\n * }\n *\n * // Batch verification\n * const batch = await mailbreeze.verification.batch({\n * emails: [\"user1@example.com\", \"user2@example.com\"],\n * });\n *\n * // Poll for results\n * const status = await mailbreeze.verification.get(batch.verificationId);\n * ```\n */\nexport class Verification extends BaseResource {\n /**\n * Verify a single email address.\n *\n * This is a synchronous operation - the result is returned immediately.\n * Results are cached for 24 hours.\n *\n * @param email - Email address to verify\n * @returns Verification result\n *\n * @example\n * ```ts\n * const result = await mailbreeze.verification.verify(\"test@example.com\");\n * console.log(result.isValid); // true\n * console.log(result.result); // \"valid\"\n * console.log(result.details?.isDisposable); // false\n * ```\n */\n async verify(email: string): Promise<VerifyEmailResult> {\n return this._post<VerifyEmailResult>(\"/email-verification/single\", { email });\n }\n\n /**\n * Start batch verification.\n *\n * Submits a batch of emails for verification. For large batches,\n * results are processed asynchronously - poll with `get()` for status.\n *\n * If all emails are cached, results are returned immediately.\n *\n * @param params - Batch parameters including emails array\n * @returns Batch verification result with ID for polling\n *\n * @example\n * ```ts\n * const batch = await mailbreeze.verification.batch({\n * emails: [\"user1@example.com\", \"user2@example.com\", \"user3@example.com\"],\n * });\n *\n * if (batch.results) {\n * // All cached - results available immediately\n * console.log(batch.results);\n * } else {\n * // Poll for results\n * const status = await mailbreeze.verification.get(batch.verificationId);\n * }\n * ```\n */\n async batch(params: BatchVerifyParams): Promise<BatchVerifyResult> {\n return this._post<BatchVerifyResult>(\"/email-verification/batch\", params);\n }\n\n /**\n * Get verification batch status and results.\n *\n * @param verificationId - Verification batch ID\n * @returns Current status and results when complete\n *\n * @example\n * ```ts\n * const status = await mailbreeze.verification.get(\"ver_xxx\");\n * if (status.status === \"completed\") {\n * console.log(status.results);\n * console.log(status.analytics);\n * }\n * ```\n */\n async get(verificationId: string): Promise<VerificationStatus> {\n return this._get<VerificationStatus>(`/email-verification/${verificationId}`, {\n includeResults: true,\n });\n }\n\n /**\n * List verification batches.\n *\n * @param params - Filter and pagination options\n * @returns Paginated list of verification batches\n *\n * @example\n * ```ts\n * const { data, pagination } = await mailbreeze.verification.list({\n * status: \"completed\",\n * page: 1,\n * });\n * ```\n */\n async list(params?: ListVerificationsParams): Promise<PaginatedList<VerificationStatus>> {\n const query: Record<string, unknown> = {\n ...this.listParamsToQuery(params),\n };\n\n if (params?.status) query.status = params.status;\n\n const response = await this._get<{\n data: VerificationStatus[];\n pagination: PaginatedList<VerificationStatus>[\"pagination\"];\n }>(\"/email-verification\", Object.keys(query).length > 0 ? query : undefined);\n\n return this.extractPaginatedList(response);\n }\n\n /**\n * Get verification statistics.\n *\n * @returns Aggregate verification stats\n *\n * @example\n * ```ts\n * const stats = await mailbreeze.verification.stats();\n * console.log(`Verified: ${stats.totalVerified}, Valid: ${stats.valid}`);\n * ```\n */\n async stats(): Promise<VerificationStats> {\n return this._get<VerificationStats>(\"/email-verification/stats\");\n }\n}\n","import { Fetcher } from \"./http/fetcher\";\nimport { Attachments, Automations, Contacts, Emails, Lists, Verification } from \"./resources\";\nimport type { MailBreezeConfig } from \"./types/common\";\n\nconst DEFAULT_BASE_URL = \"https://api.mailbreeze.com\";\nconst DEFAULT_TIMEOUT = 30000;\nconst DEFAULT_MAX_RETRIES = 3;\n\n/**\n * MailBreeze SDK client.\n *\n * Create a client with your API key to access all MailBreeze APIs.\n *\n * @example\n * ```ts\n * import { MailBreeze } from \"mailbreeze\";\n *\n * const mailbreeze = new MailBreeze({\n * apiKey: \"sk_live_xxx\",\n * });\n *\n * // Send an email\n * const result = await mailbreeze.emails.send({\n * from: \"hello@yourdomain.com\",\n * to: \"user@example.com\",\n * subject: \"Hello!\",\n * html: \"<h1>Welcome!</h1>\",\n * });\n *\n * // Create a contact\n * const contacts = mailbreeze.contacts(\"list_xxx\");\n * const contact = await contacts.create({\n * email: \"user@example.com\",\n * firstName: \"John\",\n * });\n * ```\n */\nexport class MailBreeze {\n /**\n * Email sending and management.\n */\n public readonly emails: Emails;\n\n /**\n * Email attachment handling.\n */\n public readonly attachments: Attachments;\n\n /**\n * Contact list management.\n */\n public readonly lists: Lists;\n\n /**\n * Email verification services.\n */\n public readonly verification: Verification;\n\n /**\n * Automation enrollment management.\n */\n public readonly automations: Automations;\n\n private readonly fetcher: Fetcher;\n private readonly domainId?: string;\n\n /**\n * Create a new MailBreeze client.\n *\n * @param config - Client configuration\n *\n * @example\n * ```ts\n * // Basic usage\n * const mailbreeze = new MailBreeze({\n * apiKey: \"sk_live_xxx\",\n * });\n *\n * // With custom options\n * const mailbreeze = new MailBreeze({\n * apiKey: \"sk_live_xxx\",\n * baseUrl: \"https://api.eu.mailbreeze.com\",\n * timeout: 60000,\n * maxRetries: 5,\n * });\n * ```\n */\n constructor(config: MailBreezeConfig) {\n if (!config.apiKey) {\n throw new Error(\"API key is required\");\n }\n\n this.fetcher = new Fetcher({\n apiKey: config.apiKey,\n baseUrl: config.baseUrl ?? DEFAULT_BASE_URL,\n timeout: config.timeout ?? DEFAULT_TIMEOUT,\n maxRetries: config.maxRetries ?? DEFAULT_MAX_RETRIES,\n authStyle: config.authStyle ?? \"header\",\n });\n\n // Initialize resources\n this.emails = new Emails(this.fetcher, this.domainId);\n this.attachments = new Attachments(this.fetcher, this.domainId);\n this.lists = new Lists(this.fetcher, this.domainId);\n this.verification = new Verification(this.fetcher, this.domainId);\n this.automations = new Automations(this.fetcher, this.domainId);\n }\n\n /**\n * Get a contacts resource for a specific list.\n *\n * @param listId - Contact list ID\n * @returns Contacts resource bound to the list\n *\n * @example\n * ```ts\n * const contacts = mailbreeze.contacts(\"list_xxx\");\n *\n * // Create a contact in this list\n * const contact = await contacts.create({\n * email: \"user@example.com\",\n * });\n *\n * // List contacts in this list\n * const { data } = await contacts.list();\n * ```\n */\n contacts(listId: string): Contacts {\n return new Contacts(this.fetcher, listId, this.domainId);\n }\n}\n"]}