migma 1.9.0 → 1.10.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.
package/README.md CHANGED
@@ -424,6 +424,13 @@ await migma.campaigns.schedule(
424
424
  { idempotencyKey: `campaign-send-${campaign.id}` },
425
425
  );
426
426
 
427
+ // Or 11:00 in each contact's own time zone (by country), the same clock time as 11:00 New York
428
+ await migma.campaigns.schedule(campaign.id, {
429
+ scheduledAt: '2026-07-01T15:00:00Z',
430
+ scheduledTimezone: 'America/New_York',
431
+ localTimeDelivery: true,
432
+ });
433
+
427
434
  // Aggregated engagement metrics (cached, may be slightly stale)
428
435
  const { data: stats } = await migma.campaigns.stats(campaign.id);
429
436
  console.log(stats?.openRate, stats?.clickRate, stats?.lastUpdated);
package/dist/index.d.mts CHANGED
@@ -1752,6 +1752,8 @@ interface Campaign {
1752
1752
  status: CampaignStatus;
1753
1753
  scheduledAt?: string | null;
1754
1754
  scheduledTimezone?: string | null;
1755
+ /** True when the scheduled clock time is used in each contact's own time zone. */
1756
+ localTimeDelivery?: boolean;
1755
1757
  batchId?: string | null;
1756
1758
  sentAt?: string | null;
1757
1759
  completedAt?: string | null;
@@ -1795,6 +1797,13 @@ interface ListCampaignsResponse {
1795
1797
  interface ScheduleCampaignParams {
1796
1798
  scheduledAt: string;
1797
1799
  scheduledTimezone?: string;
1800
+ /**
1801
+ * Send at the clock time of `scheduledAt` in `scheduledTimezone`, in each contact's own time zone (by country).
1802
+ * Requires `scheduledTimezone`. Contacts without a country get it at `scheduledAt`; where that time has passed,
1803
+ * the same time the next day. Not available with A/B tests or batch sending. Omit to keep the campaign's current
1804
+ * setting; `false` turns it off.
1805
+ */
1806
+ localTimeDelivery?: boolean;
1798
1807
  }
1799
1808
  /**
1800
1809
  * Aggregated engagement metrics for a campaign.
package/dist/index.d.ts CHANGED
@@ -1752,6 +1752,8 @@ interface Campaign {
1752
1752
  status: CampaignStatus;
1753
1753
  scheduledAt?: string | null;
1754
1754
  scheduledTimezone?: string | null;
1755
+ /** True when the scheduled clock time is used in each contact's own time zone. */
1756
+ localTimeDelivery?: boolean;
1755
1757
  batchId?: string | null;
1756
1758
  sentAt?: string | null;
1757
1759
  completedAt?: string | null;
@@ -1795,6 +1797,13 @@ interface ListCampaignsResponse {
1795
1797
  interface ScheduleCampaignParams {
1796
1798
  scheduledAt: string;
1797
1799
  scheduledTimezone?: string;
1800
+ /**
1801
+ * Send at the clock time of `scheduledAt` in `scheduledTimezone`, in each contact's own time zone (by country).
1802
+ * Requires `scheduledTimezone`. Contacts without a country get it at `scheduledAt`; where that time has passed,
1803
+ * the same time the next day. Not available with A/B tests or batch sending. Omit to keep the campaign's current
1804
+ * setting; `false` turns it off.
1805
+ */
1806
+ localTimeDelivery?: boolean;
1798
1807
  }
1799
1808
  /**
1800
1809
  * Aggregated engagement metrics for a campaign.
package/dist/index.js CHANGED
@@ -100,12 +100,9 @@ var MigmaClient = class {
100
100
  headers: { ...this.headers, ...options.headers },
101
101
  body: options.body ? JSON.stringify(options.body) : void 0
102
102
  });
103
- const json = await response.json();
104
- if (!response.ok || !json.success) {
105
- const error = new MigmaError(
106
- json.error || `Request failed with status ${response.status}`,
107
- response.status
108
- );
103
+ const json = await readJson(response);
104
+ if (!response.ok || !json?.success) {
105
+ const error = new MigmaError(failureMessage(response, json), response.status);
109
106
  if (response.status >= 500 || response.status === 429) {
110
107
  lastError = error;
111
108
  if (attempt < attempts - 1) {
@@ -143,14 +140,11 @@ var MigmaClient = class {
143
140
  headers: { ...this.headers, ...options.headers },
144
141
  body: options.body ? JSON.stringify(options.body) : void 0
145
142
  });
146
- const json = await response.json();
147
- if (!response.ok || !json.success) {
143
+ const json = await readJson(response);
144
+ if (!response.ok || !json?.success) {
148
145
  return {
149
146
  data: null,
150
- error: new MigmaError(
151
- json.error || `Request failed with status ${response.status}`,
152
- response.status
153
- )
147
+ error: new MigmaError(failureMessage(response, json), response.status)
154
148
  };
155
149
  }
156
150
  return {
@@ -215,6 +209,18 @@ var MigmaClient = class {
215
209
  return new Promise((resolve) => setTimeout(resolve, ms));
216
210
  }
217
211
  };
212
+ async function readJson(response) {
213
+ const text = await response.text();
214
+ try {
215
+ return JSON.parse(text);
216
+ } catch {
217
+ return null;
218
+ }
219
+ }
220
+ function failureMessage(response, json) {
221
+ if (json?.error) return json.error;
222
+ return json ? `Request failed with status ${response.status}` : `Request failed with status ${response.status}: the server did not return JSON`;
223
+ }
218
224
 
219
225
  // src/resources/contacts.ts
220
226
  var Contacts = class {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/agent-identity.ts","../src/errors.ts","../src/client.ts","../src/resources/contacts.ts","../src/resources/tags.ts","../src/resources/segments.ts","../src/resources/topics.ts","../src/resources/sending.ts","../src/polling.ts","../src/resources/projects.ts","../src/resources/emails.ts","../src/resources/validation.ts","../src/resources/previews.ts","../src/resources/export.ts","../src/resources/domains.ts","../src/resources/domain-purchases.ts","../src/resources/billing.ts","../src/resources/webhooks.ts","../src/resources/knowledge-base.ts","../src/resources/images.ts","../src/resources/campaigns.ts","../src/resources/metrics.ts","../src/resources/workspaces.ts","../src/migma.ts"],"names":["MigmaErrorCode","randomUUID"],"mappings":"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","file":"index.js","sourcesContent":["// Auto-identify the AI agent driving this SDK so Migma can show live\n// presence (\"Claude Code · creating\") in the user's dashboard. An explicit\n// MIGMA_AGENT_ID always wins; host detection is best-effort and silent.\nconst AGENT_ID_PATTERN = /^ai:[a-z0-9][a-z0-9._-]{0,62}$/;\n\nconst HOST_AGENT_ENV: Array<{ env: string; id: string }> = [\n { env: 'CLAUDECODE', id: 'ai:claude-code' },\n { env: 'CURSOR_TRACE_ID', id: 'ai:cursor' },\n { env: 'CODEX_HOME', id: 'ai:codex' },\n];\n\nexport function detectAgentId(): string | null {\n if (typeof process === 'undefined' || !process.env) return null;\n\n const explicit = (process.env.MIGMA_AGENT_ID || '').trim().toLowerCase();\n if (AGENT_ID_PATTERN.test(explicit)) return explicit;\n\n for (const { env, id } of HOST_AGENT_ENV) {\n if (process.env[env]) return id;\n }\n return null;\n}\n","export enum MigmaErrorCode {\n VALIDATION_ERROR = 'validation_error',\n NOT_FOUND = 'not_found',\n UNAUTHORIZED = 'unauthorized',\n FORBIDDEN = 'forbidden',\n RATE_LIMIT_EXCEEDED = 'rate_limit_exceeded',\n CONFLICT = 'conflict',\n TIMEOUT = 'timeout',\n NETWORK_ERROR = 'network_error',\n INTERNAL_ERROR = 'internal_error',\n UNKNOWN = 'unknown',\n}\n\nexport class MigmaError extends Error {\n readonly statusCode: number;\n readonly code: MigmaErrorCode;\n\n constructor(message: string, statusCode: number, code?: MigmaErrorCode) {\n super(message);\n this.name = 'MigmaError';\n this.statusCode = statusCode;\n this.code = code ?? MigmaError.codeFromStatus(statusCode);\n }\n\n private static codeFromStatus(status: number): MigmaErrorCode {\n switch (status) {\n case 400:\n return MigmaErrorCode.VALIDATION_ERROR;\n case 401:\n return MigmaErrorCode.UNAUTHORIZED;\n case 403:\n return MigmaErrorCode.FORBIDDEN;\n case 404:\n return MigmaErrorCode.NOT_FOUND;\n case 409:\n return MigmaErrorCode.CONFLICT;\n case 429:\n return MigmaErrorCode.RATE_LIMIT_EXCEEDED;\n default:\n if (status >= 500) return MigmaErrorCode.INTERNAL_ERROR;\n return MigmaErrorCode.UNKNOWN;\n }\n }\n\n toJSON() {\n return {\n name: this.name,\n message: this.message,\n statusCode: this.statusCode,\n code: this.code,\n };\n }\n}\n","import { detectAgentId } from './agent-identity';\nimport { MigmaError, MigmaErrorCode } from './errors';\nimport type { ApiResponse, MigmaResult } from './types/common';\n\nexport interface ClientConfig {\n baseUrl: string;\n maxRetries: number;\n retryDelay: number;\n}\n\ntype HttpMethod = 'GET' | 'POST' | 'PATCH' | 'PUT' | 'DELETE';\n\ninterface RequestOptions {\n method: HttpMethod;\n path: string;\n body?: Record<string, unknown>;\n query?: Record<string, string | number | boolean | undefined>;\n headers?: Record<string, string>;\n maxRetries?: number;\n}\n\n/** Per-call options for write methods (POST/PATCH/DELETE). */\nexport interface CallOptions {\n /** Override automatic retries for this call. Use 0 for unsafe writes. */\n maxRetries?: number;\n /**\n * Optional Idempotency-Key (max 100 chars). Same key + same body within 24h\n * replays the original response; a different body returns 409 IDEMPOTENCY_CONFLICT.\n * Reused across the SDK's own automatic retries so a retried call never duplicates.\n */\n idempotencyKey?: string;\n}\n\nexport class MigmaClient {\n private readonly apiKey: string;\n private readonly config: ClientConfig;\n private readonly headers: Record<string, string>;\n\n constructor(apiKey: string, config: ClientConfig) {\n this.apiKey = apiKey;\n this.config = config;\n\n this.headers = {\n Authorization: `Bearer ${this.apiKey}`,\n 'Content-Type': 'application/json',\n 'User-Agent': 'migma-node/1.0.0',\n };\n const agentId = detectAgentId();\n if (agentId) {\n this.headers['X-Agent-Id'] = agentId;\n }\n }\n\n async request<T>(options: RequestOptions): Promise<MigmaResult<T>> {\n const url = this.buildUrl(options.path, options.query);\n const attempts = (options.maxRetries ?? this.config.maxRetries) + 1;\n\n let lastError: MigmaError | null = null;\n\n for (let attempt = 0; attempt < attempts; attempt++) {\n try {\n const response = await fetch(url, {\n method: options.method,\n headers: { ...this.headers, ...options.headers },\n body: options.body ? JSON.stringify(options.body) : undefined,\n });\n\n const json = (await response.json()) as ApiResponse<T>;\n\n if (!response.ok || !json.success) {\n const error = new MigmaError(\n json.error || `Request failed with status ${response.status}`,\n response.status\n );\n\n if (response.status >= 500 || response.status === 429) {\n lastError = error;\n if (attempt < attempts - 1) {\n const delay =\n response.status === 429\n ? (this.parseRetryAfter(response) ??\n this.config.retryDelay * (attempt + 1))\n : this.config.retryDelay * Math.pow(2, attempt);\n await this.sleep(delay);\n continue;\n }\n }\n\n return { data: null, error };\n }\n\n return { data: json.data as T, error: null };\n } catch (err: unknown) {\n lastError = new MigmaError(\n err instanceof Error ? err.message : 'Network error',\n 0,\n MigmaErrorCode.NETWORK_ERROR\n );\n\n if (attempt < attempts - 1) {\n await this.sleep(this.config.retryDelay * Math.pow(2, attempt));\n continue;\n }\n }\n }\n\n return { data: null, error: lastError! };\n }\n\n /**\n * For endpoints where the API returns `{ success, data, count }` and we want\n * both the data array and the count together.\n */\n async requestWithCount<T>(\n options: RequestOptions\n ): Promise<MigmaResult<{ data: T; count: number }>> {\n const url = this.buildUrl(options.path, options.query);\n\n try {\n const response = await fetch(url, {\n method: options.method,\n headers: { ...this.headers, ...options.headers },\n body: options.body ? JSON.stringify(options.body) : undefined,\n });\n\n const json = (await response.json()) as ApiResponse<T>;\n\n if (!response.ok || !json.success) {\n return {\n data: null,\n error: new MigmaError(\n json.error || `Request failed with status ${response.status}`,\n response.status\n ),\n };\n }\n\n return {\n data: { data: json.data as T, count: json.count ?? 0 },\n error: null,\n };\n } catch (err: unknown) {\n return {\n data: null,\n error: new MigmaError(\n err instanceof Error ? err.message : 'Network error',\n 0,\n MigmaErrorCode.NETWORK_ERROR\n ),\n };\n }\n }\n\n async get<T>(\n path: string,\n query?: Record<string, string | number | boolean | undefined>\n ) {\n return this.request<T>({ method: 'GET', path, query });\n }\n\n async getWithCount<T>(\n path: string,\n query?: Record<string, string | number | boolean | undefined>\n ) {\n return this.requestWithCount<T>({ method: 'GET', path, query });\n }\n\n async post<T>(path: string, body?: Record<string, unknown>, options?: CallOptions) {\n return this.request<T>({ method: 'POST', path, body, headers: this.callHeaders(options), maxRetries: options?.maxRetries });\n }\n\n async patch<T>(path: string, body?: Record<string, unknown>, options?: CallOptions) {\n return this.request<T>({ method: 'PATCH', path, body, headers: this.callHeaders(options), maxRetries: options?.maxRetries });\n }\n\n async put<T>(path: string, body?: Record<string, unknown>) {\n return this.request<T>({ method: 'PUT', path, body });\n }\n\n async delete<T>(\n path: string,\n query?: Record<string, string | number | boolean | undefined>,\n options?: CallOptions\n ) {\n return this.request<T>({ method: 'DELETE', path, query, headers: this.callHeaders(options), maxRetries: options?.maxRetries });\n }\n\n private callHeaders(options?: CallOptions): Record<string, string> | undefined {\n if (options?.idempotencyKey) {\n return { 'Idempotency-Key': options.idempotencyKey };\n }\n return undefined;\n }\n\n private buildUrl(\n path: string,\n query?: Record<string, string | number | boolean | undefined>\n ): string {\n const url = new URL(`${this.config.baseUrl}${path}`);\n if (query) {\n for (const [key, value] of Object.entries(query)) {\n if (value !== undefined && value !== null) {\n url.searchParams.set(key, String(value));\n }\n }\n }\n return url.toString();\n }\n\n private parseRetryAfter(response: Response): number | null {\n const retryAfter = response.headers.get('Retry-After');\n if (retryAfter) {\n const seconds = parseInt(retryAfter, 10);\n if (!isNaN(seconds)) return seconds * 1000;\n }\n return null;\n }\n\n private sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n }\n}\n","import type { CallOptions, MigmaClient } from '../client';\nimport type { MigmaResult, DeleteResponse } from '../types/common';\nimport type {\n Contact,\n CreateContactParams,\n UpdateContactParams,\n ListContactsParams,\n ListContactsResponse,\n BulkImportParams,\n BulkImportResponse,\n BulkImportJobStatus,\n BatchDeleteContactsParams,\n BatchDeleteResponse,\n ChangeStatusParams,\n CreateContactExportParams,\n ContactExportStatus,\n ListProviderImportSourcesParams,\n ProviderImportSource,\n ImportFromProviderParams,\n ProviderImportStarted,\n} from '../types/contacts';\n\nexport class Contacts {\n constructor(private readonly client: MigmaClient) {}\n\n async create(params: CreateContactParams, options?: CallOptions): Promise<MigmaResult<Contact>> {\n return this.client.post<Contact>('/contacts', params as unknown as Record<string, unknown>, options);\n }\n\n async list(params: ListContactsParams): Promise<MigmaResult<ListContactsResponse>> {\n const { projectId, page, limit, tags, status, search } = params;\n return this.client.getWithCount<Contact[]>('/contacts', {\n projectId,\n page,\n limit,\n tags,\n status,\n search,\n }) as Promise<MigmaResult<ListContactsResponse>>;\n }\n\n async get(id: string, projectId: string): Promise<MigmaResult<Contact>> {\n return this.client.get<Contact>(`/contacts/${id}`, { projectId });\n }\n\n async update(id: string, params: UpdateContactParams, options?: CallOptions): Promise<MigmaResult<Contact>> {\n return this.client.patch<Contact>(`/contacts/${id}`, params as unknown as Record<string, unknown>, options);\n }\n\n async remove(id: string, projectId: string, options?: CallOptions): Promise<MigmaResult<DeleteResponse>> {\n return this.client.delete<DeleteResponse>(`/contacts/${id}`, { projectId }, options);\n }\n\n async bulkImport(params: BulkImportParams, options?: CallOptions): Promise<MigmaResult<BulkImportResponse>> {\n return this.client.post<BulkImportResponse>('/contacts/bulk', params as unknown as Record<string, unknown>, options);\n }\n\n async getBulkImportStatus(jobId: string): Promise<MigmaResult<BulkImportJobStatus>> {\n return this.client.get<BulkImportJobStatus>(`/contacts/bulk/${jobId}`);\n }\n\n /** Batch delete contacts by email (up to 1000). Emails with no match come back in `notFound`. */\n async bulkDeleteByEmail(params: BatchDeleteContactsParams, options?: CallOptions): Promise<MigmaResult<BatchDeleteResponse>> {\n return this.client.post<BatchDeleteResponse>('/contacts/bulk-delete', params as unknown as Record<string, unknown>, options);\n }\n\n /** Queue a filtered CSV export. Poll getExport; do not list every contact to build a CSV. */\n async createExport(params: CreateContactExportParams, options?: CallOptions): Promise<MigmaResult<ContactExportStatus>> {\n return this.client.post<ContactExportStatus>('/contacts/exports', params as unknown as Record<string, unknown>, { ...options, maxRetries: options?.idempotencyKey ? options.maxRetries : 0 });\n }\n\n async getExport(jobId: string, projectId: string): Promise<MigmaResult<ContactExportStatus>> {\n return this.client.get<ContactExportStatus>(`/contacts/exports/${encodeURIComponent(jobId)}`, { projectId });\n }\n\n /** Lists and segments in the brand's connected Klaviyo, Mailchimp or HubSpot account. A 409 error message includes the link to connect it. */\n async listProviderImportSources(params: ListProviderImportSourcesParams): Promise<MigmaResult<{ sources: ProviderImportSource[] }>> {\n const { provider, projectId, connectionId } = params;\n return this.client.get<{ sources: ProviderImportSource[] }>(`/contacts/imports/providers/${encodeURIComponent(provider)}/sources`, { projectId, connectionId });\n }\n\n /** Import provider sources as contacts (subscribed only by default). Poll GET /contacts/imports/{id} for counts. */\n async importFromProvider(params: ImportFromProviderParams, options?: CallOptions): Promise<MigmaResult<ProviderImportStarted>> {\n return this.client.post<ProviderImportStarted>('/contacts/imports/provider', params as unknown as Record<string, unknown>, { ...options, maxRetries: options?.idempotencyKey ? options.maxRetries : 0 });\n }\n\n async changeStatus(params: ChangeStatusParams, options?: CallOptions): Promise<MigmaResult<{ success: boolean }>> {\n return this.client.post<{ success: boolean }>('/contacts/status', params as unknown as Record<string, unknown>, options);\n }\n}\n","import type { MigmaClient } from '../client';\nimport type { MigmaResult, DeleteResponse } from '../types/common';\nimport type {\n Tag,\n CreateTagParams,\n UpdateTagParams,\n ListTagsParams,\n ListTagsResponse,\n} from '../types/tags';\n\nexport class Tags {\n constructor(private readonly client: MigmaClient) {}\n\n async list(params: ListTagsParams): Promise<MigmaResult<ListTagsResponse>> {\n const { projectId, page, limit, search, sortBy, sortOrder } = params;\n return this.client.getWithCount<Tag[]>('/tags', {\n projectId,\n page,\n limit,\n search,\n sortBy,\n sortOrder,\n }) as Promise<MigmaResult<ListTagsResponse>>;\n }\n\n async create(params: CreateTagParams): Promise<MigmaResult<Tag>> {\n return this.client.post<Tag>('/tags', params as unknown as Record<string, unknown>);\n }\n\n async get(id: string, projectId: string): Promise<MigmaResult<Tag>> {\n return this.client.get<Tag>(`/tags/${id}`, { projectId });\n }\n\n async update(id: string, params: UpdateTagParams): Promise<MigmaResult<Tag>> {\n return this.client.patch<Tag>(`/tags/${id}`, params as unknown as Record<string, unknown>);\n }\n\n async remove(id: string, projectId: string): Promise<MigmaResult<DeleteResponse>> {\n return this.client.delete<DeleteResponse>(`/tags/${id}`, { projectId });\n }\n}\n","import type { MigmaClient } from '../client';\nimport type { MigmaResult, DeleteResponse } from '../types/common';\nimport type {\n Segment,\n CreateSegmentParams,\n UpdateSegmentParams,\n ListSegmentsResponse,\n} from '../types/segments';\n\nexport class Segments {\n constructor(private readonly client: MigmaClient) {}\n\n async list(projectId: string): Promise<MigmaResult<ListSegmentsResponse>> {\n return this.client.getWithCount<Segment[]>('/segments', {\n projectId,\n }) as Promise<MigmaResult<ListSegmentsResponse>>;\n }\n\n async create(params: CreateSegmentParams): Promise<MigmaResult<Segment>> {\n return this.client.post<Segment>('/segments', params as unknown as Record<string, unknown>);\n }\n\n async get(id: string, projectId: string): Promise<MigmaResult<Segment>> {\n return this.client.get<Segment>(`/segments/${id}`, { projectId });\n }\n\n async update(id: string, params: UpdateSegmentParams): Promise<MigmaResult<Segment>> {\n return this.client.patch<Segment>(`/segments/${id}`, params as unknown as Record<string, unknown>);\n }\n\n async remove(id: string, projectId: string): Promise<MigmaResult<DeleteResponse>> {\n return this.client.delete<DeleteResponse>(`/segments/${id}`, { projectId });\n }\n}\n","import type { MigmaClient } from '../client';\nimport type { MigmaResult, DeleteResponse } from '../types/common';\nimport type {\n Topic,\n CreateTopicParams,\n UpdateTopicParams,\n ListTopicsParams,\n ListTopicsResponse,\n TopicSubscriptionParams,\n TopicSubscriptionResponse,\n} from '../types/topics';\n\nexport class Topics {\n constructor(private readonly client: MigmaClient) {}\n\n async list(params: ListTopicsParams): Promise<MigmaResult<ListTopicsResponse>> {\n const { projectId, includeInactive } = params;\n return this.client.getWithCount<Topic[]>('/topics', {\n projectId,\n includeInactive,\n }) as Promise<MigmaResult<ListTopicsResponse>>;\n }\n\n async create(params: CreateTopicParams): Promise<MigmaResult<Topic>> {\n return this.client.post<Topic>('/topics', params as unknown as Record<string, unknown>);\n }\n\n async get(id: string, projectId: string): Promise<MigmaResult<Topic>> {\n return this.client.get<Topic>(`/topics/${id}`, { projectId });\n }\n\n async update(id: string, params: UpdateTopicParams): Promise<MigmaResult<Topic>> {\n return this.client.patch<Topic>(`/topics/${id}`, params as unknown as Record<string, unknown>);\n }\n\n async remove(id: string, projectId: string): Promise<MigmaResult<DeleteResponse>> {\n return this.client.delete<DeleteResponse>(`/topics/${id}`, { projectId });\n }\n\n async subscribe(\n topicId: string,\n params: TopicSubscriptionParams\n ): Promise<MigmaResult<TopicSubscriptionResponse>> {\n return this.client.post<TopicSubscriptionResponse>(\n `/topics/${topicId}/subscribe`,\n params as unknown as Record<string, unknown>\n );\n }\n\n async unsubscribe(\n topicId: string,\n params: TopicSubscriptionParams\n ): Promise<MigmaResult<TopicSubscriptionResponse>> {\n return this.client.post<TopicSubscriptionResponse>(\n `/topics/${topicId}/unsubscribe`,\n params as unknown as Record<string, unknown>\n );\n }\n}\n","import type { CallOptions, MigmaClient } from '../client';\nimport type { MigmaResult } from '../types/common';\nimport type {\n SendEmailParams,\n SendEmailResponse,\n BatchStatus,\n} from '../types/sending';\n\nexport class Sending {\n constructor(private readonly client: MigmaClient) {}\n\n async send(params: SendEmailParams, options?: CallOptions): Promise<MigmaResult<SendEmailResponse>> {\n return this.client.post<SendEmailResponse>('/sending', params as unknown as Record<string, unknown>, options);\n }\n\n async getBatchStatus(batchId: string): Promise<MigmaResult<BatchStatus>> {\n return this.client.get<BatchStatus>(`/sending/batches/${batchId}`);\n }\n}\n","import { MigmaError, MigmaErrorCode } from './errors';\nimport type { MigmaResult } from './types/common';\n\nexport interface PollingOptions {\n /** Polling interval in ms. Default: 2000 */\n interval?: number;\n /** Maximum number of polls before giving up. Default: 150 (5 minutes at 2s) */\n maxAttempts?: number;\n /** Callback on each poll with current status */\n onPoll?: (status: unknown, attempt: number) => void;\n /** AbortSignal to cancel polling */\n signal?: AbortSignal;\n}\n\n/**\n * Generic polling function.\n * Calls `fetcher()` repeatedly until `isComplete(result)` returns true\n * or max attempts are reached.\n */\nexport async function poll<T>(\n fetcher: () => Promise<MigmaResult<T>>,\n isComplete: (data: T) => boolean,\n options?: PollingOptions\n): Promise<MigmaResult<T>> {\n const interval = options?.interval ?? 2000;\n const maxAttempts = options?.maxAttempts ?? 150;\n\n for (let attempt = 0; attempt < maxAttempts; attempt++) {\n if (options?.signal?.aborted) {\n return {\n data: null,\n error: new MigmaError('Polling aborted', 0, MigmaErrorCode.TIMEOUT),\n };\n }\n\n const result = await fetcher();\n\n if (result.error) {\n return result;\n }\n\n options?.onPoll?.(result.data, attempt);\n\n if (isComplete(result.data)) {\n return result;\n }\n\n await new Promise<void>((resolve) => {\n const timer = setTimeout(resolve, interval);\n if (options?.signal) {\n const onAbort = () => {\n clearTimeout(timer);\n resolve();\n };\n options.signal.addEventListener('abort', onAbort, { once: true });\n }\n });\n }\n\n return {\n data: null,\n error: new MigmaError(\n 'Polling timed out after maximum attempts',\n 0,\n MigmaErrorCode.TIMEOUT\n ),\n };\n}\n","import type { ConnectedToolScope, ConnectedToolSchema, ListConnectedToolsParams, ListConnectedToolsResponse } from '../types/connected-tools';\nimport type { MigmaClient } from '../client';\nimport type { MigmaResult } from '../types/common';\nimport type {\n Project,\n ListProjectsParams,\n ListProjectsResponse,\n ImportProjectParams,\n ImportProjectResponse,\n ImportStatusResponse,\n RetryImportResponse,\n FieldCatalogParams,\n FieldCatalogResponse,\n BrandGuidelinesParams,\n BrandGuidelinesResponse,\n ProjectReferencesResponse,\n} from '../types/projects';\nimport { poll, type PollingOptions } from '../polling';\n\nexport class Projects {\n constructor(private readonly client: MigmaClient) {}\n\n async list(params?: ListProjectsParams): Promise<MigmaResult<ListProjectsResponse>> {\n return this.client.get<ListProjectsResponse>('/projects', {\n limit: params?.limit,\n offset: params?.offset,\n status: params?.status,\n organizationId: params?.organizationId,\n });\n }\n\n async get(projectId: string): Promise<MigmaResult<Project>> {\n return this.client.get<Project>(`/projects/${projectId}`);\n }\n\n async import(params: ImportProjectParams): Promise<MigmaResult<ImportProjectResponse>> {\n return this.client.post<ImportProjectResponse>(\n '/projects/import',\n params as unknown as Record<string, unknown>\n );\n }\n\n async getImportStatus(projectId: string): Promise<MigmaResult<ImportStatusResponse>> {\n return this.client.get<ImportStatusResponse>(\n `/projects/import/${projectId}/status`\n );\n }\n\n /** Replace the brand's standing design rules and/or image style notes. */\n async updateBrandGuidelines(\n projectId: string,\n params: BrandGuidelinesParams,\n ): Promise<MigmaResult<BrandGuidelinesResponse>> {\n return this.client.put<BrandGuidelinesResponse>(\n `/projects/${projectId}/brand-guidelines`,\n params as unknown as Record<string, unknown>,\n );\n }\n\n /** Design references generation reads: favorites, saved designs, saved sections. */\n async references(projectId: string): Promise<MigmaResult<ProjectReferencesResponse>> {\n return this.client.get<ProjectReferencesResponse>(`/projects/${projectId}/references`);\n }\n\n async retryImport(projectId: string): Promise<MigmaResult<RetryImportResponse>> {\n return this.client.post<RetryImportResponse>(\n `/projects/import/${projectId}/retry`\n );\n }\n\n async fieldCatalog(\n projectId: string,\n params?: FieldCatalogParams\n ): Promise<MigmaResult<FieldCatalogResponse>> {\n return this.client.get<FieldCatalogResponse>(\n `/projects/${projectId}/field-catalog`,\n {\n segmentId: params?.segmentId,\n tag: params?.tag,\n }\n );\n }\n\n async listConnectedTools(params: ListConnectedToolsParams): Promise<MigmaResult<ListConnectedToolsResponse>> {\n return this.client.get<ListConnectedToolsResponse>('/connected-tools', { ...params });\n }\n\n async getConnectedTool(params: ConnectedToolScope): Promise<MigmaResult<ConnectedToolSchema>> {\n return this.client.get<ConnectedToolSchema>('/connected-tools/schema', { ...params });\n }\n\n /** Never automatically replay external writes; provider outcome can be unknown. */\n async callConnectedTool(params: ConnectedToolScope & { parameters: Record<string, unknown> }): Promise<MigmaResult<unknown>> {\n return this.client.post<unknown>('/connected-tools/call', { ...params }, { maxRetries: 0 });\n }\n\n /**\n * Import a project and wait for completion.\n * Polls getImportStatus until status is 'active' or 'error'.\n */\n async importAndWait(\n params: ImportProjectParams,\n options?: PollingOptions\n ): Promise<MigmaResult<ImportStatusResponse>> {\n const startResult = await this.import(params);\n if (startResult.error) {\n return { data: null, error: startResult.error };\n }\n\n const projectId = startResult.data.projectId;\n\n return poll(\n () => this.getImportStatus(projectId),\n (status) => status.status === 'active' || status.status === 'error',\n options\n );\n }\n}\n","import type { CallOptions, MigmaClient } from '../client';\nimport { randomUUID } from 'node:crypto';\nimport type { MigmaResult } from '../types/common';\nimport type {\n GenerateEmailParams,\n GenerateEmailResponse,\n ImportHtmlEmailParams,\n EmailGenerationStatus,\n Email,\n EditEmailParams,\n EmailEditOperation,\n ListEmailsParams,\n ListEmailsResponse,\n SendTestEmailParams,\n SendTestEmailResponse,\n EmailMetrics,\n EmailLogsParams,\n EmailLogsResponse,\n EmailFavorite,\n} from '../types/emails';\nimport { poll, type PollingOptions } from '../polling';\n\nexport class Emails {\n constructor(private readonly client: MigmaClient) {}\n\n /** List emails for a project */\n async list(\n params: ListEmailsParams\n ): Promise<MigmaResult<ListEmailsResponse>> {\n const { projectId, limit, page, status, search } = params;\n return this.client.get<ListEmailsResponse>('/projects/emails', {\n projectId,\n limit,\n page,\n status,\n search,\n });\n }\n\n /** Start async email generation */\n async generate(\n params: GenerateEmailParams,\n options?: CallOptions\n ): Promise<MigmaResult<GenerateEmailResponse>> {\n return this.client.post<GenerateEmailResponse>(\n '/projects/emails/generate',\n params as unknown as Record<string, unknown>,\n options\n );\n }\n\n /** Convert existing HTML or .eml into editable emails (async). */\n async importHtml(\n params: ImportHtmlEmailParams,\n options?: CallOptions\n ): Promise<MigmaResult<GenerateEmailResponse>> {\n return this.client.post<GenerateEmailResponse>(\n '/projects/emails/import-html',\n params as unknown as Record<string, unknown>,\n options\n );\n }\n\n /** Check email generation status */\n async getGenerationStatus(\n conversationId: string\n ): Promise<MigmaResult<EmailGenerationStatus>> {\n return this.client.get<EmailGenerationStatus>(\n `/projects/emails/${conversationId}/status`\n );\n }\n\n /** Fetch one generated email by email id */\n async get(emailId: string): Promise<MigmaResult<Email>> {\n return this.client.get<Email>(`/emails/${emailId}`);\n }\n\n /** Synchronous edit. No automatic retries; use startEdit for long edits. */\n async edit(\n emailId: string,\n params: EditEmailParams\n ): Promise<MigmaResult<Email>> {\n return this.client.post<Email>(\n `/emails/${emailId}/edit`,\n params as unknown as Record<string, unknown>,\n { maxRetries: 0 }\n );\n }\n\n /** Queue an edit immediately. Retain an explicit key to recover uncertain submissions. */\n async startEdit(\n emailId: string,\n params: EditEmailParams,\n options?: CallOptions\n ): Promise<MigmaResult<EmailEditOperation>> {\n return this.client.post<EmailEditOperation>(\n `/emails/${encodeURIComponent(emailId)}/edit`,\n { ...params, async: true },\n { ...options, idempotencyKey: options?.idempotencyKey || randomUUID() }\n );\n }\n\n /** Poll the exact edit; a completed conversation may belong to an earlier turn. */\n async getEditStatus(emailId: string, editId: string): Promise<MigmaResult<EmailEditOperation>> {\n return this.client.get<EmailEditOperation>(\n `/emails/${encodeURIComponent(emailId)}/edits/${encodeURIComponent(editId)}`\n );\n }\n\n /**\n * Generate an email and wait for completion.\n * Polls getGenerationStatus until status is 'completed' or 'failed'.\n */\n async generateAndWait(\n params: GenerateEmailParams,\n options?: PollingOptions,\n callOptions?: CallOptions\n ): Promise<MigmaResult<EmailGenerationStatus>> {\n const startResult = await this.generate(params, callOptions);\n if (startResult.error) {\n return { data: null, error: startResult.error };\n }\n\n const conversationId = startResult.data.conversationId;\n\n return poll(\n () => this.getGenerationStatus(conversationId),\n (status) => status.status === 'completed' || status.status === 'failed',\n options\n );\n }\n\n /**\n * Import HTML and wait for completion.\n * Polls getGenerationStatus until status is 'completed' or 'failed'.\n */\n async importHtmlAndWait(\n params: ImportHtmlEmailParams,\n options?: PollingOptions,\n callOptions?: CallOptions\n ): Promise<MigmaResult<EmailGenerationStatus>> {\n const startResult = await this.importHtml(params, callOptions);\n if (startResult.error) {\n return { data: null, error: startResult.error };\n }\n\n const conversationId = startResult.data.conversationId;\n\n return poll(\n () => this.getGenerationStatus(conversationId),\n (status) => status.status === 'completed' || status.status === 'failed',\n options\n );\n }\n\n /** Send a test email from a completed conversation */\n async sendTest(\n params: SendTestEmailParams\n ): Promise<MigmaResult<SendTestEmailResponse>> {\n return this.client.post<SendTestEmailResponse>(\n '/emails/test/send',\n params as unknown as Record<string, unknown>\n );\n }\n\n /**\n * Aggregate performance for one generated email across every API send of it:\n * delivery, opens, clicks, bounces, complaints, unsubscribes + a daily time\n * series. Events arrive asynchronously; opens are directional while clicks\n * and delivery events are stronger signals.\n */\n /** Star or unstar one generated email as a design reference. Idempotent. */\n async setFavorite(emailId: string, favorite: boolean): Promise<MigmaResult<EmailFavorite>> {\n return this.client.put<EmailFavorite>(`/emails/${emailId}/favorite`, { favorite });\n }\n\n async metrics(emailId: string): Promise<MigmaResult<EmailMetrics>> {\n return this.client.get<EmailMetrics>(`/emails/${emailId}/metrics`);\n }\n\n /** Per-recipient send log for one generated email (cursor-paginated). */\n async logs(\n emailId: string,\n params?: EmailLogsParams\n ): Promise<MigmaResult<EmailLogsResponse>> {\n return this.client.get<EmailLogsResponse>(`/emails/${emailId}/logs`, {\n limit: params?.limit,\n cursor: params?.cursor,\n status: params?.status,\n });\n }\n}\n","import type { MigmaClient } from '../client';\nimport type { MigmaResult } from '../types/common';\nimport type {\n ValidateAllParams,\n ValidateAllResponse,\n CheckCompatibilityParams,\n CompatibilityResponse,\n AnalyzeLinksParams,\n LinkAnalysisResponse,\n CheckSpellingParams,\n SpellingResponse,\n AnalyzeDeliverabilityParams,\n DeliverabilityResponse,\n} from '../types/validation';\n\nexport class Validation {\n constructor(private readonly client: MigmaClient) {}\n\n async all(params: ValidateAllParams): Promise<MigmaResult<ValidateAllResponse>> {\n return this.client.post<ValidateAllResponse>(\n '/emails/validate/all',\n params as unknown as Record<string, unknown>\n );\n }\n\n async compatibility(\n params: CheckCompatibilityParams\n ): Promise<MigmaResult<CompatibilityResponse>> {\n return this.client.post<CompatibilityResponse>(\n '/emails/validate/compatibility',\n params as unknown as Record<string, unknown>\n );\n }\n\n async links(params: AnalyzeLinksParams): Promise<MigmaResult<LinkAnalysisResponse>> {\n return this.client.post<LinkAnalysisResponse>(\n '/emails/validate/links',\n params as unknown as Record<string, unknown>\n );\n }\n\n async spelling(params: CheckSpellingParams): Promise<MigmaResult<SpellingResponse>> {\n return this.client.post<SpellingResponse>(\n '/emails/validate/spelling',\n params as unknown as Record<string, unknown>\n );\n }\n\n async deliverability(\n params: AnalyzeDeliverabilityParams\n ): Promise<MigmaResult<DeliverabilityResponse>> {\n return this.client.post<DeliverabilityResponse>(\n '/emails/validate/deliverability',\n params as unknown as Record<string, unknown>\n );\n }\n}\n","import type { MigmaClient } from '../client';\nimport type { MigmaResult } from '../types/common';\nimport type {\n CreatePreviewParams,\n CreatePreviewResponse,\n GetPreviewResponse,\n GetPreviewStatusResponse,\n GetDevicePreviewResponse,\n GetSupportedDevicesResponse,\n} from '../types/previews';\nimport { poll, type PollingOptions } from '../polling';\n\nexport class Previews {\n constructor(private readonly client: MigmaClient) {}\n\n async create(\n params: CreatePreviewParams\n ): Promise<MigmaResult<CreatePreviewResponse>> {\n return this.client.post<CreatePreviewResponse>(\n '/emails/previews',\n params as unknown as Record<string, unknown>\n );\n }\n\n async get(previewId: string): Promise<MigmaResult<GetPreviewResponse>> {\n return this.client.get<GetPreviewResponse>(`/emails/previews/${previewId}`);\n }\n\n async getStatus(\n previewId: string\n ): Promise<MigmaResult<GetPreviewStatusResponse>> {\n return this.client.get<GetPreviewStatusResponse>(\n `/emails/previews/${previewId}/status`\n );\n }\n\n async getDevice(\n previewId: string,\n deviceKey: string\n ): Promise<MigmaResult<GetDevicePreviewResponse>> {\n return this.client.get<GetDevicePreviewResponse>(\n `/emails/previews/${previewId}/devices/${deviceKey}`\n );\n }\n\n async getSupportedDevices(): Promise<MigmaResult<GetSupportedDevicesResponse>> {\n return this.client.get<GetSupportedDevicesResponse>(\n '/emails/devices/supported'\n );\n }\n\n /**\n * Create a preview and wait for completion.\n * Polls getStatus until status is 'COMPLETED', 'PARTIAL_SUCCESS', or 'FAILED'.\n */\n async createAndWait(\n params: CreatePreviewParams,\n options?: PollingOptions\n ): Promise<MigmaResult<GetPreviewResponse>> {\n const startResult = await this.create(params);\n if (startResult.error) {\n return { data: null, error: startResult.error };\n }\n\n const previewId = startResult.data.previewId;\n\n return poll(\n () => this.get(previewId),\n (preview) =>\n preview.status === 'COMPLETED' ||\n preview.status === 'PARTIAL_SUCCESS' ||\n preview.status === 'FAILED',\n options\n );\n }\n}\n","import type { MigmaClient } from '../client';\nimport type { MigmaResult } from '../types/common';\nimport type {\n ExportResult,\n ExportFormatsResponse,\n ExportStatusResponse,\n HubspotExportParams,\n} from '../types/export';\n\nexport class Export {\n constructor(private readonly client: MigmaClient) {}\n\n async getFormats(): Promise<MigmaResult<ExportFormatsResponse>> {\n return this.client.get<ExportFormatsResponse>('/export/formats');\n }\n\n async getStatus(conversationId: string): Promise<MigmaResult<ExportStatusResponse>> {\n return this.client.get<ExportStatusResponse>(\n `/export/status/${conversationId}`\n );\n }\n\n async html(conversationId: string): Promise<MigmaResult<ExportResult>> {\n return this.client.get<ExportResult>(`/export/html/${conversationId}`);\n }\n\n async pdf(conversationId: string): Promise<MigmaResult<ExportResult>> {\n return this.client.get<ExportResult>(`/export/pdf/${conversationId}`);\n }\n\n async png(conversationId: string): Promise<MigmaResult<ExportResult>> {\n return this.client.get<ExportResult>(`/export/png/${conversationId}`);\n }\n\n async klaviyo(\n conversationId: string,\n klaviyoType?: 'html' | 'hybrid' | 'code'\n ): Promise<MigmaResult<ExportResult>> {\n return this.client.get<ExportResult>(\n `/export/klaviyo/${conversationId}`,\n { klaviyoType }\n );\n }\n\n async mailchimp(conversationId: string): Promise<MigmaResult<ExportResult>> {\n return this.client.get<ExportResult>(`/export/mailchimp/${conversationId}`);\n }\n\n async hubspot(params: HubspotExportParams): Promise<MigmaResult<ExportResult>> {\n return this.client.post<ExportResult>(\n '/export/hubspot',\n params as unknown as Record<string, unknown>\n );\n }\n}\n","import type { MigmaClient } from '../client';\nimport type { MigmaResult } from '../types/common';\nimport type {\n Domain,\n CreateDomainParams,\n UpdateDomainParams,\n DomainVerificationResult,\n DomainAvailability,\n CreateManagedDomainParams,\n ProvisionStreamParams,\n SetupDomainParams,\n SetupDomainResponse,\n DomainDeleteResponse,\n} from '../types/domains';\n\nexport class Domains {\n constructor(private readonly client: MigmaClient) {}\n\n async list(): Promise<MigmaResult<Domain[]>> {\n return this.client.get<Domain[]>('/domains');\n }\n\n async create(params: CreateDomainParams): Promise<MigmaResult<Domain>> {\n return this.client.post<Domain>('/domains', params as unknown as Record<string, unknown>);\n }\n\n async get(domain: string): Promise<MigmaResult<Domain>> {\n return this.client.get<Domain>(`/domains/${domain}`);\n }\n\n async verify(domain: string): Promise<MigmaResult<DomainVerificationResult>> {\n return this.client.post<DomainVerificationResult>(`/domains/${domain}/verify`);\n }\n\n async update(domain: string, params: UpdateDomainParams): Promise<MigmaResult<Domain>> {\n return this.client.patch<Domain>(`/domains/${domain}`, params as unknown as Record<string, unknown>);\n }\n\n async remove(domain: string): Promise<MigmaResult<DomainDeleteResponse>> {\n return this.client.delete<DomainDeleteResponse>(`/domains/${domain}`);\n }\n\n async checkAvailability(prefix: string): Promise<MigmaResult<DomainAvailability>> {\n return this.client.get<DomainAvailability>(`/domains/managed/check/${prefix}`);\n }\n\n async listManaged(): Promise<MigmaResult<Domain[]>> {\n return this.client.get<Domain[]>('/domains/managed');\n }\n\n async createManaged(params: CreateManagedDomainParams): Promise<MigmaResult<Domain>> {\n return this.client.post<Domain>('/domains/managed', params as unknown as Record<string, unknown>);\n }\n\n async removeManaged(domain: string): Promise<MigmaResult<DomainDeleteResponse>> {\n return this.client.delete<DomainDeleteResponse>(`/domains/managed/${domain}`);\n }\n\n /**\n * Provision a transactional or marketing stream identity on a domain you own.\n * Creates notify.<rootDomain> (transactional) or send.<rootDomain> (marketing)\n * to isolate transactional reputation from marketing. Returns DNS records to publish.\n */\n async provisionStream(params: ProvisionStreamParams): Promise<MigmaResult<Domain>> {\n return this.client.post<Domain>('/domains/streams', params as unknown as Record<string, unknown>);\n }\n\n /**\n * Provision BOTH stream identities for a domain you own in one call:\n * send.<rootDomain> (marketing) and notify.<rootDomain> (transactional).\n * Idempotent. Returns both domains with DNS records to publish.\n */\n async setup(params: SetupDomainParams): Promise<MigmaResult<SetupDomainResponse>> {\n return this.client.post<SetupDomainResponse>('/domains/setup', params as unknown as Record<string, unknown>);\n }\n}\n","import type { MigmaClient } from '../client';\nimport type { MigmaResult } from '../types/common';\nimport type {\n AddCustomDnsRecordParams,\n CustomDnsRecord,\n CustomDnsRecordList,\n DomainPurchaseCheckout,\n DomainPurchaseParams,\n DomainPurchaseQuote,\n DomainPurchaseSearchParams,\n DomainRegistration,\n} from '../types/domain-purchases';\n\nexport class DomainPurchases {\n constructor(private readonly client: MigmaClient) {}\n\n /** Availability and price quotes for domains you could buy. */\n async search(params: DomainPurchaseSearchParams): Promise<MigmaResult<{ quotes: DomainPurchaseQuote[] }>> {\n return this.client.get<{ quotes: DomainPurchaseQuote[] }>('/domains/purchase/search', {\n q: params.q,\n limit: params.limit,\n });\n }\n\n /**\n * Start buying a domain. Returns a Stripe checkout URL the account owner\n * opens in a browser; the domain registers after payment clears. Requires\n * an active paid Migma subscription.\n */\n async create(params: DomainPurchaseParams): Promise<MigmaResult<DomainPurchaseCheckout>> {\n return this.client.post<DomainPurchaseCheckout>('/domains/purchase', params as unknown as Record<string, unknown>);\n }\n\n /** Purchase history and status: payment_pending → registering → active. */\n async registrations(params?: { limit?: number }): Promise<MigmaResult<{ registrations: DomainRegistration[] }>> {\n return this.client.get<{ registrations: DomainRegistration[] }>('/domains/purchase/registrations', {\n limit: params?.limit,\n });\n }\n\n // DNS records live on Migma-hosted zones, which exist exactly for domains\n // bought in Migma — hence they sit on this resource even though the API\n // path is /domains/:domain/dns-records.\n\n /** DNS records you added to a domain bought in Migma. `managed: false` = zone not hosted by Migma. */\n async listDnsRecords(domain: string): Promise<MigmaResult<CustomDnsRecordList>> {\n return this.client.get<CustomDnsRecordList>(`/domains/${encodeURIComponent(domain)}/dns-records`);\n }\n\n /**\n * Add a DNS record (A, AAAA, CNAME, MX, TXT, or NS) to a domain bought in\n * Migma. Migma's email sending records are protected and cannot be\n * overridden; the root and www stay with domain forwarding.\n */\n async addDnsRecord(domain: string, params: AddCustomDnsRecordParams): Promise<MigmaResult<{ record: CustomDnsRecord }>> {\n return this.client.post<{ record: CustomDnsRecord }>(\n `/domains/${encodeURIComponent(domain)}/dns-records`,\n params as unknown as Record<string, unknown>,\n );\n }\n\n /** Remove a DNS record you added earlier (never Migma's own records). */\n async removeDnsRecord(domain: string, recordId: string): Promise<MigmaResult<{ ok: boolean }>> {\n return this.client.delete<{ ok: boolean }>(\n `/domains/${encodeURIComponent(domain)}/dns-records/${encodeURIComponent(recordId)}`,\n );\n }\n}\n","import type { MigmaClient } from '../client';\nimport type { MigmaResult } from '../types/common';\nimport type { CreditStatus, UpgradeLink, UpgradeLinkParams } from '../types/billing';\n\nexport class Billing {\n constructor(private readonly client: MigmaClient) {}\n\n /** Plan and remaining credits for the API key owner. */\n async credits(): Promise<MigmaResult<CreditStatus>> {\n return this.client.get<CreditStatus>('/billing/credits');\n }\n\n /**\n * Create checkout for a user-chosen new plan, or omit plan for the existing\n * customer's billing portal. Passing plan for an active subscription can\n * change it and charge prorated payment immediately; obtain charge approval.\n * The returned URL alone does not confirm payment. Do not retry unknown writes.\n */\n async upgradeLink(params: UpgradeLinkParams = {}): Promise<MigmaResult<UpgradeLink>> {\n return this.client.post<UpgradeLink>('/billing/upgrade-link', params as unknown as Record<string, unknown>);\n }\n}\n","import type { MigmaClient } from '../client';\nimport type { MigmaResult } from '../types/common';\nimport type {\n WebhookDetail,\n CreateWebhookParams,\n CreateWebhookResponse,\n UpdateWebhookParams,\n ListWebhooksResponse,\n WebhookTestResult,\n WebhookDeliveriesResponse,\n WebhookEventsResponse,\n} from '../types/webhooks';\n\nexport class Webhooks {\n constructor(private readonly client: MigmaClient) {}\n\n async list(): Promise<MigmaResult<ListWebhooksResponse>> {\n return this.client.get<ListWebhooksResponse>('/webhooks');\n }\n\n async create(params: CreateWebhookParams): Promise<MigmaResult<CreateWebhookResponse>> {\n return this.client.post<CreateWebhookResponse>('/webhooks', params as unknown as Record<string, unknown>);\n }\n\n async get(webhookId: string): Promise<MigmaResult<WebhookDetail>> {\n return this.client.get<WebhookDetail>(`/webhooks/${webhookId}`);\n }\n\n async update(\n webhookId: string,\n params: UpdateWebhookParams\n ): Promise<MigmaResult<{ updated: boolean }>> {\n return this.client.patch<{ updated: boolean }>(\n `/webhooks/${webhookId}`,\n params as unknown as Record<string, unknown>\n );\n }\n\n async remove(webhookId: string): Promise<MigmaResult<{ deleted: boolean }>> {\n return this.client.delete<{ deleted: boolean }>(`/webhooks/${webhookId}`);\n }\n\n async test(webhookId: string): Promise<MigmaResult<WebhookTestResult>> {\n return this.client.post<WebhookTestResult>(`/webhooks/${webhookId}/test`);\n }\n\n async getDeliveries(\n webhookId: string,\n limit?: number\n ): Promise<MigmaResult<WebhookDeliveriesResponse>> {\n return this.client.get<WebhookDeliveriesResponse>(\n `/webhooks/${webhookId}/deliveries`,\n { limit }\n );\n }\n\n async getEvents(): Promise<MigmaResult<WebhookEventsResponse>> {\n return this.client.get<WebhookEventsResponse>('/webhooks/events');\n }\n\n async getStats(): Promise<MigmaResult<Record<string, unknown>>> {\n return this.client.get<Record<string, unknown>>('/webhooks/stats');\n }\n}\n","import type { MigmaClient } from '../client';\nimport type { MigmaResult, MessageResponse } from '../types/common';\nimport type {\n KnowledgeBaseEntry,\n KnowledgeBaseListResponse,\n AddKnowledgeBaseParams,\n UpdateKnowledgeBaseParams,\n} from '../types/knowledge-base';\n\nexport class KnowledgeBase {\n constructor(private readonly client: MigmaClient) {}\n\n async list(projectId: string): Promise<MigmaResult<KnowledgeBaseListResponse>> {\n return this.client.get<KnowledgeBaseListResponse>(\n `/projects/${projectId}/knowledge-base`\n );\n }\n\n async add(\n projectId: string,\n params: AddKnowledgeBaseParams\n ): Promise<MigmaResult<KnowledgeBaseEntry>> {\n return this.client.post<KnowledgeBaseEntry>(\n `/projects/${projectId}/knowledge-base`,\n params as unknown as Record<string, unknown>\n );\n }\n\n async update(\n projectId: string,\n entryId: string,\n params: UpdateKnowledgeBaseParams\n ): Promise<MigmaResult<KnowledgeBaseEntry>> {\n return this.client.put<KnowledgeBaseEntry>(\n `/projects/${projectId}/knowledge-base/${entryId}`,\n params as unknown as Record<string, unknown>\n );\n }\n\n async remove(\n projectId: string,\n entryId: string\n ): Promise<MigmaResult<MessageResponse>> {\n return this.client.delete<MessageResponse>(\n `/projects/${projectId}/knowledge-base/${entryId}`\n );\n }\n}\n","import type { MigmaClient } from '../client';\nimport type { MigmaResult, MessageResponse } from '../types/common';\nimport type {\n ProjectImage,\n AddImageParams,\n UpdateImageParams,\n UpdateLogosParams,\n LogosResponse,\n} from '../types/images';\n\nexport class Images {\n constructor(private readonly client: MigmaClient) {}\n\n async add(\n projectId: string,\n params: AddImageParams\n ): Promise<MigmaResult<ProjectImage>> {\n return this.client.post<ProjectImage>(\n `/projects/${projectId}/images`,\n params as unknown as Record<string, unknown>\n );\n }\n\n async update(\n projectId: string,\n params: UpdateImageParams\n ): Promise<MigmaResult<ProjectImage>> {\n return this.client.put<ProjectImage>(\n `/projects/${projectId}/images`,\n params as unknown as Record<string, unknown>\n );\n }\n\n async remove(\n projectId: string,\n imageUrl: string\n ): Promise<MigmaResult<MessageResponse>> {\n return this.client.delete<MessageResponse>(\n `/projects/${projectId}/images`,\n { imageUrl }\n );\n }\n\n async updateLogos(\n projectId: string,\n params: UpdateLogosParams\n ): Promise<MigmaResult<LogosResponse>> {\n return this.client.put<LogosResponse>(\n `/projects/${projectId}/logos`,\n params as unknown as Record<string, unknown>\n );\n }\n}\n","import type { CallOptions, MigmaClient } from '../client';\nimport type { MigmaResult } from '../types/common';\nimport type {\n Campaign,\n CampaignLogsParams,\n CampaignLogsResponse,\n CampaignStats,\n CreateCampaignParams,\n ListCampaignsParams,\n ListCampaignsResponse,\n ScheduleCampaignParams,\n} from '../types/campaigns';\n\nexport class Campaigns {\n constructor(private readonly client: MigmaClient) {}\n\n async list(params: ListCampaignsParams): Promise<MigmaResult<ListCampaignsResponse>> {\n const { projectId, status, page, limit, archived } = params;\n return this.client.get<ListCampaignsResponse>('/campaigns', {\n projectId,\n status,\n page,\n limit,\n archived,\n });\n }\n\n async create(params: CreateCampaignParams, options?: CallOptions): Promise<MigmaResult<Campaign>> {\n return this.client.post<Campaign>('/campaigns', params as unknown as Record<string, unknown>, options);\n }\n\n async get(id: string): Promise<MigmaResult<Campaign>> {\n return this.client.get<Campaign>(`/campaigns/${id}`);\n }\n\n async send(id: string, options?: CallOptions): Promise<MigmaResult<Campaign>> {\n return this.client.post<Campaign>(`/campaigns/${id}/send`, undefined, options);\n }\n\n async schedule(id: string, params: ScheduleCampaignParams, options?: CallOptions): Promise<MigmaResult<Campaign>> {\n return this.client.post<Campaign>(`/campaigns/${id}/schedule`, params as unknown as Record<string, unknown>, options);\n }\n\n async cancel(id: string, options?: CallOptions): Promise<MigmaResult<Campaign>> {\n return this.client.post<Campaign>(`/campaigns/${id}/cancel`, undefined, options);\n }\n\n /** Aggregated engagement metrics for a campaign (cached, may be slightly stale). */\n async stats(id: string): Promise<MigmaResult<CampaignStats>> {\n return this.client.get<CampaignStats>(`/campaigns/${id}/stats`);\n }\n\n /** Per-recipient email logs for a campaign (cursor-paginated). */\n async logs(id: string, params?: CampaignLogsParams): Promise<MigmaResult<CampaignLogsResponse>> {\n return this.client.get<CampaignLogsResponse>(`/campaigns/${id}/logs`, {\n limit: params?.limit,\n cursor: params?.cursor,\n status: params?.status,\n });\n }\n\n async archive(id: string): Promise<MigmaResult<Campaign>> {\n return this.client.post<Campaign>(`/campaigns/${id}/archive`);\n }\n\n async unarchive(id: string): Promise<MigmaResult<Campaign>> {\n return this.client.post<Campaign>(`/campaigns/${id}/unarchive`);\n }\n}\n","import type { MigmaClient } from '../client';\nimport type { MigmaResult } from '../types/common';\nimport type { SendingMetrics, SendingMetricsParams } from '../types/metrics';\n\nexport class Metrics {\n constructor(private readonly client: MigmaClient) {}\n\n async sending(params?: SendingMetricsParams): Promise<MigmaResult<SendingMetrics>> {\n return this.client.get<SendingMetrics>('/metrics/sending', {\n months: params?.months,\n });\n }\n}\n","import type { MigmaClient } from '../client';\nimport type { MigmaResult } from '../types/common';\nimport type { ListWorkspacesResponse } from '../types/workspaces';\n\nexport class Workspaces {\n constructor(private readonly client: MigmaClient) {}\n\n /**\n * Workspaces the API key owner belongs to. Pass a workspace id as\n * `organizationId` to projects.list() to scope brands to it.\n */\n async list(): Promise<MigmaResult<ListWorkspacesResponse>> {\n return this.client.get<ListWorkspacesResponse>('/workspaces');\n }\n}\n","import { MigmaClient } from './client';\nimport { Contacts } from './resources/contacts';\nimport { Tags } from './resources/tags';\nimport { Segments } from './resources/segments';\nimport { Topics } from './resources/topics';\nimport { Sending } from './resources/sending';\nimport { Projects } from './resources/projects';\nimport { Emails } from './resources/emails';\nimport { Validation } from './resources/validation';\nimport { Previews } from './resources/previews';\nimport { Export } from './resources/export';\nimport { Domains } from './resources/domains';\nimport { DomainPurchases } from './resources/domain-purchases';\nimport { Billing } from './resources/billing';\nimport { Webhooks } from './resources/webhooks';\nimport { KnowledgeBase } from './resources/knowledge-base';\nimport { Images } from './resources/images';\nimport { Campaigns } from './resources/campaigns';\nimport { Metrics } from './resources/metrics';\nimport { Workspaces } from './resources/workspaces';\n\nexport interface MigmaConfig {\n /** API base URL. Default: 'https://api.migma.ai/v1' */\n baseUrl?: string;\n /** Max retries on 5xx/429 errors. Default: 2 */\n maxRetries?: number;\n /** Base delay between retries in ms. Default: 1000 */\n retryDelay?: number;\n}\n\nexport class Migma {\n private readonly client: MigmaClient;\n\n readonly contacts: Contacts;\n readonly tags: Tags;\n readonly segments: Segments;\n readonly topics: Topics;\n readonly sending: Sending;\n readonly projects: Projects;\n readonly emails: Emails;\n readonly validation: Validation;\n readonly previews: Previews;\n readonly export: Export;\n readonly domains: Domains;\n readonly domainPurchases: DomainPurchases;\n readonly billing: Billing;\n readonly webhooks: Webhooks;\n readonly knowledgeBase: KnowledgeBase;\n readonly images: Images;\n readonly campaigns: Campaigns;\n readonly metrics: Metrics;\n readonly workspaces: Workspaces;\n\n constructor(apiKey: string, config?: MigmaConfig) {\n if (!apiKey) {\n throw new Error(\n 'Missing API key. Pass it to the constructor: `new Migma(\"your-api-key\")`'\n );\n }\n\n this.client = new MigmaClient(apiKey, {\n baseUrl: config?.baseUrl ?? 'https://api.migma.ai/v1',\n maxRetries: config?.maxRetries ?? 2,\n retryDelay: config?.retryDelay ?? 1000,\n });\n\n this.contacts = new Contacts(this.client);\n this.tags = new Tags(this.client);\n this.segments = new Segments(this.client);\n this.topics = new Topics(this.client);\n this.sending = new Sending(this.client);\n this.projects = new Projects(this.client);\n this.emails = new Emails(this.client);\n this.validation = new Validation(this.client);\n this.previews = new Previews(this.client);\n this.export = new Export(this.client);\n this.domains = new Domains(this.client);\n this.domainPurchases = new DomainPurchases(this.client);\n this.billing = new Billing(this.client);\n this.webhooks = new Webhooks(this.client);\n this.knowledgeBase = new KnowledgeBase(this.client);\n this.images = new Images(this.client);\n this.campaigns = new Campaigns(this.client);\n this.metrics = new Metrics(this.client);\n this.workspaces = new Workspaces(this.client);\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/agent-identity.ts","../src/errors.ts","../src/client.ts","../src/resources/contacts.ts","../src/resources/tags.ts","../src/resources/segments.ts","../src/resources/topics.ts","../src/resources/sending.ts","../src/polling.ts","../src/resources/projects.ts","../src/resources/emails.ts","../src/resources/validation.ts","../src/resources/previews.ts","../src/resources/export.ts","../src/resources/domains.ts","../src/resources/domain-purchases.ts","../src/resources/billing.ts","../src/resources/webhooks.ts","../src/resources/knowledge-base.ts","../src/resources/images.ts","../src/resources/campaigns.ts","../src/resources/metrics.ts","../src/resources/workspaces.ts","../src/migma.ts"],"names":["MigmaErrorCode","randomUUID"],"mappings":"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","file":"index.js","sourcesContent":["// Auto-identify the AI agent driving this SDK so Migma can show live\n// presence (\"Claude Code · creating\") in the user's dashboard. An explicit\n// MIGMA_AGENT_ID always wins; host detection is best-effort and silent.\nconst AGENT_ID_PATTERN = /^ai:[a-z0-9][a-z0-9._-]{0,62}$/;\n\nconst HOST_AGENT_ENV: Array<{ env: string; id: string }> = [\n { env: 'CLAUDECODE', id: 'ai:claude-code' },\n { env: 'CURSOR_TRACE_ID', id: 'ai:cursor' },\n { env: 'CODEX_HOME', id: 'ai:codex' },\n];\n\nexport function detectAgentId(): string | null {\n if (typeof process === 'undefined' || !process.env) return null;\n\n const explicit = (process.env.MIGMA_AGENT_ID || '').trim().toLowerCase();\n if (AGENT_ID_PATTERN.test(explicit)) return explicit;\n\n for (const { env, id } of HOST_AGENT_ENV) {\n if (process.env[env]) return id;\n }\n return null;\n}\n","export enum MigmaErrorCode {\n VALIDATION_ERROR = 'validation_error',\n NOT_FOUND = 'not_found',\n UNAUTHORIZED = 'unauthorized',\n FORBIDDEN = 'forbidden',\n RATE_LIMIT_EXCEEDED = 'rate_limit_exceeded',\n CONFLICT = 'conflict',\n TIMEOUT = 'timeout',\n NETWORK_ERROR = 'network_error',\n INTERNAL_ERROR = 'internal_error',\n UNKNOWN = 'unknown',\n}\n\nexport class MigmaError extends Error {\n readonly statusCode: number;\n readonly code: MigmaErrorCode;\n\n constructor(message: string, statusCode: number, code?: MigmaErrorCode) {\n super(message);\n this.name = 'MigmaError';\n this.statusCode = statusCode;\n this.code = code ?? MigmaError.codeFromStatus(statusCode);\n }\n\n private static codeFromStatus(status: number): MigmaErrorCode {\n switch (status) {\n case 400:\n return MigmaErrorCode.VALIDATION_ERROR;\n case 401:\n return MigmaErrorCode.UNAUTHORIZED;\n case 403:\n return MigmaErrorCode.FORBIDDEN;\n case 404:\n return MigmaErrorCode.NOT_FOUND;\n case 409:\n return MigmaErrorCode.CONFLICT;\n case 429:\n return MigmaErrorCode.RATE_LIMIT_EXCEEDED;\n default:\n if (status >= 500) return MigmaErrorCode.INTERNAL_ERROR;\n return MigmaErrorCode.UNKNOWN;\n }\n }\n\n toJSON() {\n return {\n name: this.name,\n message: this.message,\n statusCode: this.statusCode,\n code: this.code,\n };\n }\n}\n","import { detectAgentId } from './agent-identity';\nimport { MigmaError, MigmaErrorCode } from './errors';\nimport type { ApiResponse, MigmaResult } from './types/common';\n\nexport interface ClientConfig {\n baseUrl: string;\n maxRetries: number;\n retryDelay: number;\n}\n\ntype HttpMethod = 'GET' | 'POST' | 'PATCH' | 'PUT' | 'DELETE';\n\ninterface RequestOptions {\n method: HttpMethod;\n path: string;\n body?: Record<string, unknown>;\n query?: Record<string, string | number | boolean | undefined>;\n headers?: Record<string, string>;\n maxRetries?: number;\n}\n\n/** Per-call options for write methods (POST/PATCH/DELETE). */\nexport interface CallOptions {\n /** Override automatic retries for this call. Use 0 for unsafe writes. */\n maxRetries?: number;\n /**\n * Optional Idempotency-Key (max 100 chars). Same key + same body within 24h\n * replays the original response; a different body returns 409 IDEMPOTENCY_CONFLICT.\n * Reused across the SDK's own automatic retries so a retried call never duplicates.\n */\n idempotencyKey?: string;\n}\n\nexport class MigmaClient {\n private readonly apiKey: string;\n private readonly config: ClientConfig;\n private readonly headers: Record<string, string>;\n\n constructor(apiKey: string, config: ClientConfig) {\n this.apiKey = apiKey;\n this.config = config;\n\n this.headers = {\n Authorization: `Bearer ${this.apiKey}`,\n 'Content-Type': 'application/json',\n 'User-Agent': 'migma-node/1.0.0',\n };\n const agentId = detectAgentId();\n if (agentId) {\n this.headers['X-Agent-Id'] = agentId;\n }\n }\n\n async request<T>(options: RequestOptions): Promise<MigmaResult<T>> {\n const url = this.buildUrl(options.path, options.query);\n const attempts = (options.maxRetries ?? this.config.maxRetries) + 1;\n\n let lastError: MigmaError | null = null;\n\n for (let attempt = 0; attempt < attempts; attempt++) {\n try {\n const response = await fetch(url, {\n method: options.method,\n headers: { ...this.headers, ...options.headers },\n body: options.body ? JSON.stringify(options.body) : undefined,\n });\n\n const json = await readJson<T>(response);\n\n if (!response.ok || !json?.success) {\n const error = new MigmaError(failureMessage(response, json), response.status);\n\n if (response.status >= 500 || response.status === 429) {\n lastError = error;\n if (attempt < attempts - 1) {\n const delay =\n response.status === 429\n ? (this.parseRetryAfter(response) ??\n this.config.retryDelay * (attempt + 1))\n : this.config.retryDelay * Math.pow(2, attempt);\n await this.sleep(delay);\n continue;\n }\n }\n\n return { data: null, error };\n }\n\n return { data: json.data as T, error: null };\n } catch (err: unknown) {\n lastError = new MigmaError(\n err instanceof Error ? err.message : 'Network error',\n 0,\n MigmaErrorCode.NETWORK_ERROR\n );\n\n if (attempt < attempts - 1) {\n await this.sleep(this.config.retryDelay * Math.pow(2, attempt));\n continue;\n }\n }\n }\n\n return { data: null, error: lastError! };\n }\n\n /**\n * For endpoints where the API returns `{ success, data, count }` and we want\n * both the data array and the count together.\n */\n async requestWithCount<T>(\n options: RequestOptions\n ): Promise<MigmaResult<{ data: T; count: number }>> {\n const url = this.buildUrl(options.path, options.query);\n\n try {\n const response = await fetch(url, {\n method: options.method,\n headers: { ...this.headers, ...options.headers },\n body: options.body ? JSON.stringify(options.body) : undefined,\n });\n\n const json = await readJson<T>(response);\n\n if (!response.ok || !json?.success) {\n return {\n data: null,\n error: new MigmaError(failureMessage(response, json), response.status),\n };\n }\n\n return {\n data: { data: json.data as T, count: json.count ?? 0 },\n error: null,\n };\n } catch (err: unknown) {\n return {\n data: null,\n error: new MigmaError(\n err instanceof Error ? err.message : 'Network error',\n 0,\n MigmaErrorCode.NETWORK_ERROR\n ),\n };\n }\n }\n\n async get<T>(\n path: string,\n query?: Record<string, string | number | boolean | undefined>\n ) {\n return this.request<T>({ method: 'GET', path, query });\n }\n\n async getWithCount<T>(\n path: string,\n query?: Record<string, string | number | boolean | undefined>\n ) {\n return this.requestWithCount<T>({ method: 'GET', path, query });\n }\n\n async post<T>(path: string, body?: Record<string, unknown>, options?: CallOptions) {\n return this.request<T>({ method: 'POST', path, body, headers: this.callHeaders(options), maxRetries: options?.maxRetries });\n }\n\n async patch<T>(path: string, body?: Record<string, unknown>, options?: CallOptions) {\n return this.request<T>({ method: 'PATCH', path, body, headers: this.callHeaders(options), maxRetries: options?.maxRetries });\n }\n\n async put<T>(path: string, body?: Record<string, unknown>) {\n return this.request<T>({ method: 'PUT', path, body });\n }\n\n async delete<T>(\n path: string,\n query?: Record<string, string | number | boolean | undefined>,\n options?: CallOptions\n ) {\n return this.request<T>({ method: 'DELETE', path, query, headers: this.callHeaders(options), maxRetries: options?.maxRetries });\n }\n\n private callHeaders(options?: CallOptions): Record<string, string> | undefined {\n if (options?.idempotencyKey) {\n return { 'Idempotency-Key': options.idempotencyKey };\n }\n return undefined;\n }\n\n private buildUrl(\n path: string,\n query?: Record<string, string | number | boolean | undefined>\n ): string {\n const url = new URL(`${this.config.baseUrl}${path}`);\n if (query) {\n for (const [key, value] of Object.entries(query)) {\n if (value !== undefined && value !== null) {\n url.searchParams.set(key, String(value));\n }\n }\n }\n return url.toString();\n }\n\n private parseRetryAfter(response: Response): number | null {\n const retryAfter = response.headers.get('Retry-After');\n if (retryAfter) {\n const seconds = parseInt(retryAfter, 10);\n if (!isNaN(seconds)) return seconds * 1000;\n }\n return null;\n }\n\n private sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n }\n}\n\n/** A gateway or proxy can answer with an HTML page; report its status instead of a JSON parse error. */\nasync function readJson<T>(response: Response): Promise<ApiResponse<T> | null> {\n const text = await response.text();\n try {\n return JSON.parse(text) as ApiResponse<T>;\n } catch {\n return null;\n }\n}\n\nfunction failureMessage(response: Response, json: ApiResponse<unknown> | null): string {\n if (json?.error) return json.error;\n return json\n ? `Request failed with status ${response.status}`\n : `Request failed with status ${response.status}: the server did not return JSON`;\n}\n","import type { CallOptions, MigmaClient } from '../client';\nimport type { MigmaResult, DeleteResponse } from '../types/common';\nimport type {\n Contact,\n CreateContactParams,\n UpdateContactParams,\n ListContactsParams,\n ListContactsResponse,\n BulkImportParams,\n BulkImportResponse,\n BulkImportJobStatus,\n BatchDeleteContactsParams,\n BatchDeleteResponse,\n ChangeStatusParams,\n CreateContactExportParams,\n ContactExportStatus,\n ListProviderImportSourcesParams,\n ProviderImportSource,\n ImportFromProviderParams,\n ProviderImportStarted,\n} from '../types/contacts';\n\nexport class Contacts {\n constructor(private readonly client: MigmaClient) {}\n\n async create(params: CreateContactParams, options?: CallOptions): Promise<MigmaResult<Contact>> {\n return this.client.post<Contact>('/contacts', params as unknown as Record<string, unknown>, options);\n }\n\n async list(params: ListContactsParams): Promise<MigmaResult<ListContactsResponse>> {\n const { projectId, page, limit, tags, status, search } = params;\n return this.client.getWithCount<Contact[]>('/contacts', {\n projectId,\n page,\n limit,\n tags,\n status,\n search,\n }) as Promise<MigmaResult<ListContactsResponse>>;\n }\n\n async get(id: string, projectId: string): Promise<MigmaResult<Contact>> {\n return this.client.get<Contact>(`/contacts/${id}`, { projectId });\n }\n\n async update(id: string, params: UpdateContactParams, options?: CallOptions): Promise<MigmaResult<Contact>> {\n return this.client.patch<Contact>(`/contacts/${id}`, params as unknown as Record<string, unknown>, options);\n }\n\n async remove(id: string, projectId: string, options?: CallOptions): Promise<MigmaResult<DeleteResponse>> {\n return this.client.delete<DeleteResponse>(`/contacts/${id}`, { projectId }, options);\n }\n\n async bulkImport(params: BulkImportParams, options?: CallOptions): Promise<MigmaResult<BulkImportResponse>> {\n return this.client.post<BulkImportResponse>('/contacts/bulk', params as unknown as Record<string, unknown>, options);\n }\n\n async getBulkImportStatus(jobId: string): Promise<MigmaResult<BulkImportJobStatus>> {\n return this.client.get<BulkImportJobStatus>(`/contacts/bulk/${jobId}`);\n }\n\n /** Batch delete contacts by email (up to 1000). Emails with no match come back in `notFound`. */\n async bulkDeleteByEmail(params: BatchDeleteContactsParams, options?: CallOptions): Promise<MigmaResult<BatchDeleteResponse>> {\n return this.client.post<BatchDeleteResponse>('/contacts/bulk-delete', params as unknown as Record<string, unknown>, options);\n }\n\n /** Queue a filtered CSV export. Poll getExport; do not list every contact to build a CSV. */\n async createExport(params: CreateContactExportParams, options?: CallOptions): Promise<MigmaResult<ContactExportStatus>> {\n return this.client.post<ContactExportStatus>('/contacts/exports', params as unknown as Record<string, unknown>, { ...options, maxRetries: options?.idempotencyKey ? options.maxRetries : 0 });\n }\n\n async getExport(jobId: string, projectId: string): Promise<MigmaResult<ContactExportStatus>> {\n return this.client.get<ContactExportStatus>(`/contacts/exports/${encodeURIComponent(jobId)}`, { projectId });\n }\n\n /** Lists and segments in the brand's connected Klaviyo, Mailchimp or HubSpot account. A 409 error message includes the link to connect it. */\n async listProviderImportSources(params: ListProviderImportSourcesParams): Promise<MigmaResult<{ sources: ProviderImportSource[] }>> {\n const { provider, projectId, connectionId } = params;\n return this.client.get<{ sources: ProviderImportSource[] }>(`/contacts/imports/providers/${encodeURIComponent(provider)}/sources`, { projectId, connectionId });\n }\n\n /** Import provider sources as contacts (subscribed only by default). Poll GET /contacts/imports/{id} for counts. */\n async importFromProvider(params: ImportFromProviderParams, options?: CallOptions): Promise<MigmaResult<ProviderImportStarted>> {\n return this.client.post<ProviderImportStarted>('/contacts/imports/provider', params as unknown as Record<string, unknown>, { ...options, maxRetries: options?.idempotencyKey ? options.maxRetries : 0 });\n }\n\n async changeStatus(params: ChangeStatusParams, options?: CallOptions): Promise<MigmaResult<{ success: boolean }>> {\n return this.client.post<{ success: boolean }>('/contacts/status', params as unknown as Record<string, unknown>, options);\n }\n}\n","import type { MigmaClient } from '../client';\nimport type { MigmaResult, DeleteResponse } from '../types/common';\nimport type {\n Tag,\n CreateTagParams,\n UpdateTagParams,\n ListTagsParams,\n ListTagsResponse,\n} from '../types/tags';\n\nexport class Tags {\n constructor(private readonly client: MigmaClient) {}\n\n async list(params: ListTagsParams): Promise<MigmaResult<ListTagsResponse>> {\n const { projectId, page, limit, search, sortBy, sortOrder } = params;\n return this.client.getWithCount<Tag[]>('/tags', {\n projectId,\n page,\n limit,\n search,\n sortBy,\n sortOrder,\n }) as Promise<MigmaResult<ListTagsResponse>>;\n }\n\n async create(params: CreateTagParams): Promise<MigmaResult<Tag>> {\n return this.client.post<Tag>('/tags', params as unknown as Record<string, unknown>);\n }\n\n async get(id: string, projectId: string): Promise<MigmaResult<Tag>> {\n return this.client.get<Tag>(`/tags/${id}`, { projectId });\n }\n\n async update(id: string, params: UpdateTagParams): Promise<MigmaResult<Tag>> {\n return this.client.patch<Tag>(`/tags/${id}`, params as unknown as Record<string, unknown>);\n }\n\n async remove(id: string, projectId: string): Promise<MigmaResult<DeleteResponse>> {\n return this.client.delete<DeleteResponse>(`/tags/${id}`, { projectId });\n }\n}\n","import type { MigmaClient } from '../client';\nimport type { MigmaResult, DeleteResponse } from '../types/common';\nimport type {\n Segment,\n CreateSegmentParams,\n UpdateSegmentParams,\n ListSegmentsResponse,\n} from '../types/segments';\n\nexport class Segments {\n constructor(private readonly client: MigmaClient) {}\n\n async list(projectId: string): Promise<MigmaResult<ListSegmentsResponse>> {\n return this.client.getWithCount<Segment[]>('/segments', {\n projectId,\n }) as Promise<MigmaResult<ListSegmentsResponse>>;\n }\n\n async create(params: CreateSegmentParams): Promise<MigmaResult<Segment>> {\n return this.client.post<Segment>('/segments', params as unknown as Record<string, unknown>);\n }\n\n async get(id: string, projectId: string): Promise<MigmaResult<Segment>> {\n return this.client.get<Segment>(`/segments/${id}`, { projectId });\n }\n\n async update(id: string, params: UpdateSegmentParams): Promise<MigmaResult<Segment>> {\n return this.client.patch<Segment>(`/segments/${id}`, params as unknown as Record<string, unknown>);\n }\n\n async remove(id: string, projectId: string): Promise<MigmaResult<DeleteResponse>> {\n return this.client.delete<DeleteResponse>(`/segments/${id}`, { projectId });\n }\n}\n","import type { MigmaClient } from '../client';\nimport type { MigmaResult, DeleteResponse } from '../types/common';\nimport type {\n Topic,\n CreateTopicParams,\n UpdateTopicParams,\n ListTopicsParams,\n ListTopicsResponse,\n TopicSubscriptionParams,\n TopicSubscriptionResponse,\n} from '../types/topics';\n\nexport class Topics {\n constructor(private readonly client: MigmaClient) {}\n\n async list(params: ListTopicsParams): Promise<MigmaResult<ListTopicsResponse>> {\n const { projectId, includeInactive } = params;\n return this.client.getWithCount<Topic[]>('/topics', {\n projectId,\n includeInactive,\n }) as Promise<MigmaResult<ListTopicsResponse>>;\n }\n\n async create(params: CreateTopicParams): Promise<MigmaResult<Topic>> {\n return this.client.post<Topic>('/topics', params as unknown as Record<string, unknown>);\n }\n\n async get(id: string, projectId: string): Promise<MigmaResult<Topic>> {\n return this.client.get<Topic>(`/topics/${id}`, { projectId });\n }\n\n async update(id: string, params: UpdateTopicParams): Promise<MigmaResult<Topic>> {\n return this.client.patch<Topic>(`/topics/${id}`, params as unknown as Record<string, unknown>);\n }\n\n async remove(id: string, projectId: string): Promise<MigmaResult<DeleteResponse>> {\n return this.client.delete<DeleteResponse>(`/topics/${id}`, { projectId });\n }\n\n async subscribe(\n topicId: string,\n params: TopicSubscriptionParams\n ): Promise<MigmaResult<TopicSubscriptionResponse>> {\n return this.client.post<TopicSubscriptionResponse>(\n `/topics/${topicId}/subscribe`,\n params as unknown as Record<string, unknown>\n );\n }\n\n async unsubscribe(\n topicId: string,\n params: TopicSubscriptionParams\n ): Promise<MigmaResult<TopicSubscriptionResponse>> {\n return this.client.post<TopicSubscriptionResponse>(\n `/topics/${topicId}/unsubscribe`,\n params as unknown as Record<string, unknown>\n );\n }\n}\n","import type { CallOptions, MigmaClient } from '../client';\nimport type { MigmaResult } from '../types/common';\nimport type {\n SendEmailParams,\n SendEmailResponse,\n BatchStatus,\n} from '../types/sending';\n\nexport class Sending {\n constructor(private readonly client: MigmaClient) {}\n\n async send(params: SendEmailParams, options?: CallOptions): Promise<MigmaResult<SendEmailResponse>> {\n return this.client.post<SendEmailResponse>('/sending', params as unknown as Record<string, unknown>, options);\n }\n\n async getBatchStatus(batchId: string): Promise<MigmaResult<BatchStatus>> {\n return this.client.get<BatchStatus>(`/sending/batches/${batchId}`);\n }\n}\n","import { MigmaError, MigmaErrorCode } from './errors';\nimport type { MigmaResult } from './types/common';\n\nexport interface PollingOptions {\n /** Polling interval in ms. Default: 2000 */\n interval?: number;\n /** Maximum number of polls before giving up. Default: 150 (5 minutes at 2s) */\n maxAttempts?: number;\n /** Callback on each poll with current status */\n onPoll?: (status: unknown, attempt: number) => void;\n /** AbortSignal to cancel polling */\n signal?: AbortSignal;\n}\n\n/**\n * Generic polling function.\n * Calls `fetcher()` repeatedly until `isComplete(result)` returns true\n * or max attempts are reached.\n */\nexport async function poll<T>(\n fetcher: () => Promise<MigmaResult<T>>,\n isComplete: (data: T) => boolean,\n options?: PollingOptions\n): Promise<MigmaResult<T>> {\n const interval = options?.interval ?? 2000;\n const maxAttempts = options?.maxAttempts ?? 150;\n\n for (let attempt = 0; attempt < maxAttempts; attempt++) {\n if (options?.signal?.aborted) {\n return {\n data: null,\n error: new MigmaError('Polling aborted', 0, MigmaErrorCode.TIMEOUT),\n };\n }\n\n const result = await fetcher();\n\n if (result.error) {\n return result;\n }\n\n options?.onPoll?.(result.data, attempt);\n\n if (isComplete(result.data)) {\n return result;\n }\n\n await new Promise<void>((resolve) => {\n const timer = setTimeout(resolve, interval);\n if (options?.signal) {\n const onAbort = () => {\n clearTimeout(timer);\n resolve();\n };\n options.signal.addEventListener('abort', onAbort, { once: true });\n }\n });\n }\n\n return {\n data: null,\n error: new MigmaError(\n 'Polling timed out after maximum attempts',\n 0,\n MigmaErrorCode.TIMEOUT\n ),\n };\n}\n","import type { ConnectedToolScope, ConnectedToolSchema, ListConnectedToolsParams, ListConnectedToolsResponse } from '../types/connected-tools';\nimport type { MigmaClient } from '../client';\nimport type { MigmaResult } from '../types/common';\nimport type {\n Project,\n ListProjectsParams,\n ListProjectsResponse,\n ImportProjectParams,\n ImportProjectResponse,\n ImportStatusResponse,\n RetryImportResponse,\n FieldCatalogParams,\n FieldCatalogResponse,\n BrandGuidelinesParams,\n BrandGuidelinesResponse,\n ProjectReferencesResponse,\n} from '../types/projects';\nimport { poll, type PollingOptions } from '../polling';\n\nexport class Projects {\n constructor(private readonly client: MigmaClient) {}\n\n async list(params?: ListProjectsParams): Promise<MigmaResult<ListProjectsResponse>> {\n return this.client.get<ListProjectsResponse>('/projects', {\n limit: params?.limit,\n offset: params?.offset,\n status: params?.status,\n organizationId: params?.organizationId,\n });\n }\n\n async get(projectId: string): Promise<MigmaResult<Project>> {\n return this.client.get<Project>(`/projects/${projectId}`);\n }\n\n async import(params: ImportProjectParams): Promise<MigmaResult<ImportProjectResponse>> {\n return this.client.post<ImportProjectResponse>(\n '/projects/import',\n params as unknown as Record<string, unknown>\n );\n }\n\n async getImportStatus(projectId: string): Promise<MigmaResult<ImportStatusResponse>> {\n return this.client.get<ImportStatusResponse>(\n `/projects/import/${projectId}/status`\n );\n }\n\n /** Replace the brand's standing design rules and/or image style notes. */\n async updateBrandGuidelines(\n projectId: string,\n params: BrandGuidelinesParams,\n ): Promise<MigmaResult<BrandGuidelinesResponse>> {\n return this.client.put<BrandGuidelinesResponse>(\n `/projects/${projectId}/brand-guidelines`,\n params as unknown as Record<string, unknown>,\n );\n }\n\n /** Design references generation reads: favorites, saved designs, saved sections. */\n async references(projectId: string): Promise<MigmaResult<ProjectReferencesResponse>> {\n return this.client.get<ProjectReferencesResponse>(`/projects/${projectId}/references`);\n }\n\n async retryImport(projectId: string): Promise<MigmaResult<RetryImportResponse>> {\n return this.client.post<RetryImportResponse>(\n `/projects/import/${projectId}/retry`\n );\n }\n\n async fieldCatalog(\n projectId: string,\n params?: FieldCatalogParams\n ): Promise<MigmaResult<FieldCatalogResponse>> {\n return this.client.get<FieldCatalogResponse>(\n `/projects/${projectId}/field-catalog`,\n {\n segmentId: params?.segmentId,\n tag: params?.tag,\n }\n );\n }\n\n async listConnectedTools(params: ListConnectedToolsParams): Promise<MigmaResult<ListConnectedToolsResponse>> {\n return this.client.get<ListConnectedToolsResponse>('/connected-tools', { ...params });\n }\n\n async getConnectedTool(params: ConnectedToolScope): Promise<MigmaResult<ConnectedToolSchema>> {\n return this.client.get<ConnectedToolSchema>('/connected-tools/schema', { ...params });\n }\n\n /** Never automatically replay external writes; provider outcome can be unknown. */\n async callConnectedTool(params: ConnectedToolScope & { parameters: Record<string, unknown> }): Promise<MigmaResult<unknown>> {\n return this.client.post<unknown>('/connected-tools/call', { ...params }, { maxRetries: 0 });\n }\n\n /**\n * Import a project and wait for completion.\n * Polls getImportStatus until status is 'active' or 'error'.\n */\n async importAndWait(\n params: ImportProjectParams,\n options?: PollingOptions\n ): Promise<MigmaResult<ImportStatusResponse>> {\n const startResult = await this.import(params);\n if (startResult.error) {\n return { data: null, error: startResult.error };\n }\n\n const projectId = startResult.data.projectId;\n\n return poll(\n () => this.getImportStatus(projectId),\n (status) => status.status === 'active' || status.status === 'error',\n options\n );\n }\n}\n","import type { CallOptions, MigmaClient } from '../client';\nimport { randomUUID } from 'node:crypto';\nimport type { MigmaResult } from '../types/common';\nimport type {\n GenerateEmailParams,\n GenerateEmailResponse,\n ImportHtmlEmailParams,\n EmailGenerationStatus,\n Email,\n EditEmailParams,\n EmailEditOperation,\n ListEmailsParams,\n ListEmailsResponse,\n SendTestEmailParams,\n SendTestEmailResponse,\n EmailMetrics,\n EmailLogsParams,\n EmailLogsResponse,\n EmailFavorite,\n} from '../types/emails';\nimport { poll, type PollingOptions } from '../polling';\n\nexport class Emails {\n constructor(private readonly client: MigmaClient) {}\n\n /** List emails for a project */\n async list(\n params: ListEmailsParams\n ): Promise<MigmaResult<ListEmailsResponse>> {\n const { projectId, limit, page, status, search } = params;\n return this.client.get<ListEmailsResponse>('/projects/emails', {\n projectId,\n limit,\n page,\n status,\n search,\n });\n }\n\n /** Start async email generation */\n async generate(\n params: GenerateEmailParams,\n options?: CallOptions\n ): Promise<MigmaResult<GenerateEmailResponse>> {\n return this.client.post<GenerateEmailResponse>(\n '/projects/emails/generate',\n params as unknown as Record<string, unknown>,\n options\n );\n }\n\n /** Convert existing HTML or .eml into editable emails (async). */\n async importHtml(\n params: ImportHtmlEmailParams,\n options?: CallOptions\n ): Promise<MigmaResult<GenerateEmailResponse>> {\n return this.client.post<GenerateEmailResponse>(\n '/projects/emails/import-html',\n params as unknown as Record<string, unknown>,\n options\n );\n }\n\n /** Check email generation status */\n async getGenerationStatus(\n conversationId: string\n ): Promise<MigmaResult<EmailGenerationStatus>> {\n return this.client.get<EmailGenerationStatus>(\n `/projects/emails/${conversationId}/status`\n );\n }\n\n /** Fetch one generated email by email id */\n async get(emailId: string): Promise<MigmaResult<Email>> {\n return this.client.get<Email>(`/emails/${emailId}`);\n }\n\n /** Synchronous edit. No automatic retries; use startEdit for long edits. */\n async edit(\n emailId: string,\n params: EditEmailParams\n ): Promise<MigmaResult<Email>> {\n return this.client.post<Email>(\n `/emails/${emailId}/edit`,\n params as unknown as Record<string, unknown>,\n { maxRetries: 0 }\n );\n }\n\n /** Queue an edit immediately. Retain an explicit key to recover uncertain submissions. */\n async startEdit(\n emailId: string,\n params: EditEmailParams,\n options?: CallOptions\n ): Promise<MigmaResult<EmailEditOperation>> {\n return this.client.post<EmailEditOperation>(\n `/emails/${encodeURIComponent(emailId)}/edit`,\n { ...params, async: true },\n { ...options, idempotencyKey: options?.idempotencyKey || randomUUID() }\n );\n }\n\n /** Poll the exact edit; a completed conversation may belong to an earlier turn. */\n async getEditStatus(emailId: string, editId: string): Promise<MigmaResult<EmailEditOperation>> {\n return this.client.get<EmailEditOperation>(\n `/emails/${encodeURIComponent(emailId)}/edits/${encodeURIComponent(editId)}`\n );\n }\n\n /**\n * Generate an email and wait for completion.\n * Polls getGenerationStatus until status is 'completed' or 'failed'.\n */\n async generateAndWait(\n params: GenerateEmailParams,\n options?: PollingOptions,\n callOptions?: CallOptions\n ): Promise<MigmaResult<EmailGenerationStatus>> {\n const startResult = await this.generate(params, callOptions);\n if (startResult.error) {\n return { data: null, error: startResult.error };\n }\n\n const conversationId = startResult.data.conversationId;\n\n return poll(\n () => this.getGenerationStatus(conversationId),\n (status) => status.status === 'completed' || status.status === 'failed',\n options\n );\n }\n\n /**\n * Import HTML and wait for completion.\n * Polls getGenerationStatus until status is 'completed' or 'failed'.\n */\n async importHtmlAndWait(\n params: ImportHtmlEmailParams,\n options?: PollingOptions,\n callOptions?: CallOptions\n ): Promise<MigmaResult<EmailGenerationStatus>> {\n const startResult = await this.importHtml(params, callOptions);\n if (startResult.error) {\n return { data: null, error: startResult.error };\n }\n\n const conversationId = startResult.data.conversationId;\n\n return poll(\n () => this.getGenerationStatus(conversationId),\n (status) => status.status === 'completed' || status.status === 'failed',\n options\n );\n }\n\n /** Send a test email from a completed conversation */\n async sendTest(\n params: SendTestEmailParams\n ): Promise<MigmaResult<SendTestEmailResponse>> {\n return this.client.post<SendTestEmailResponse>(\n '/emails/test/send',\n params as unknown as Record<string, unknown>\n );\n }\n\n /**\n * Aggregate performance for one generated email across every API send of it:\n * delivery, opens, clicks, bounces, complaints, unsubscribes + a daily time\n * series. Events arrive asynchronously; opens are directional while clicks\n * and delivery events are stronger signals.\n */\n /** Star or unstar one generated email as a design reference. Idempotent. */\n async setFavorite(emailId: string, favorite: boolean): Promise<MigmaResult<EmailFavorite>> {\n return this.client.put<EmailFavorite>(`/emails/${emailId}/favorite`, { favorite });\n }\n\n async metrics(emailId: string): Promise<MigmaResult<EmailMetrics>> {\n return this.client.get<EmailMetrics>(`/emails/${emailId}/metrics`);\n }\n\n /** Per-recipient send log for one generated email (cursor-paginated). */\n async logs(\n emailId: string,\n params?: EmailLogsParams\n ): Promise<MigmaResult<EmailLogsResponse>> {\n return this.client.get<EmailLogsResponse>(`/emails/${emailId}/logs`, {\n limit: params?.limit,\n cursor: params?.cursor,\n status: params?.status,\n });\n }\n}\n","import type { MigmaClient } from '../client';\nimport type { MigmaResult } from '../types/common';\nimport type {\n ValidateAllParams,\n ValidateAllResponse,\n CheckCompatibilityParams,\n CompatibilityResponse,\n AnalyzeLinksParams,\n LinkAnalysisResponse,\n CheckSpellingParams,\n SpellingResponse,\n AnalyzeDeliverabilityParams,\n DeliverabilityResponse,\n} from '../types/validation';\n\nexport class Validation {\n constructor(private readonly client: MigmaClient) {}\n\n async all(params: ValidateAllParams): Promise<MigmaResult<ValidateAllResponse>> {\n return this.client.post<ValidateAllResponse>(\n '/emails/validate/all',\n params as unknown as Record<string, unknown>\n );\n }\n\n async compatibility(\n params: CheckCompatibilityParams\n ): Promise<MigmaResult<CompatibilityResponse>> {\n return this.client.post<CompatibilityResponse>(\n '/emails/validate/compatibility',\n params as unknown as Record<string, unknown>\n );\n }\n\n async links(params: AnalyzeLinksParams): Promise<MigmaResult<LinkAnalysisResponse>> {\n return this.client.post<LinkAnalysisResponse>(\n '/emails/validate/links',\n params as unknown as Record<string, unknown>\n );\n }\n\n async spelling(params: CheckSpellingParams): Promise<MigmaResult<SpellingResponse>> {\n return this.client.post<SpellingResponse>(\n '/emails/validate/spelling',\n params as unknown as Record<string, unknown>\n );\n }\n\n async deliverability(\n params: AnalyzeDeliverabilityParams\n ): Promise<MigmaResult<DeliverabilityResponse>> {\n return this.client.post<DeliverabilityResponse>(\n '/emails/validate/deliverability',\n params as unknown as Record<string, unknown>\n );\n }\n}\n","import type { MigmaClient } from '../client';\nimport type { MigmaResult } from '../types/common';\nimport type {\n CreatePreviewParams,\n CreatePreviewResponse,\n GetPreviewResponse,\n GetPreviewStatusResponse,\n GetDevicePreviewResponse,\n GetSupportedDevicesResponse,\n} from '../types/previews';\nimport { poll, type PollingOptions } from '../polling';\n\nexport class Previews {\n constructor(private readonly client: MigmaClient) {}\n\n async create(\n params: CreatePreviewParams\n ): Promise<MigmaResult<CreatePreviewResponse>> {\n return this.client.post<CreatePreviewResponse>(\n '/emails/previews',\n params as unknown as Record<string, unknown>\n );\n }\n\n async get(previewId: string): Promise<MigmaResult<GetPreviewResponse>> {\n return this.client.get<GetPreviewResponse>(`/emails/previews/${previewId}`);\n }\n\n async getStatus(\n previewId: string\n ): Promise<MigmaResult<GetPreviewStatusResponse>> {\n return this.client.get<GetPreviewStatusResponse>(\n `/emails/previews/${previewId}/status`\n );\n }\n\n async getDevice(\n previewId: string,\n deviceKey: string\n ): Promise<MigmaResult<GetDevicePreviewResponse>> {\n return this.client.get<GetDevicePreviewResponse>(\n `/emails/previews/${previewId}/devices/${deviceKey}`\n );\n }\n\n async getSupportedDevices(): Promise<MigmaResult<GetSupportedDevicesResponse>> {\n return this.client.get<GetSupportedDevicesResponse>(\n '/emails/devices/supported'\n );\n }\n\n /**\n * Create a preview and wait for completion.\n * Polls getStatus until status is 'COMPLETED', 'PARTIAL_SUCCESS', or 'FAILED'.\n */\n async createAndWait(\n params: CreatePreviewParams,\n options?: PollingOptions\n ): Promise<MigmaResult<GetPreviewResponse>> {\n const startResult = await this.create(params);\n if (startResult.error) {\n return { data: null, error: startResult.error };\n }\n\n const previewId = startResult.data.previewId;\n\n return poll(\n () => this.get(previewId),\n (preview) =>\n preview.status === 'COMPLETED' ||\n preview.status === 'PARTIAL_SUCCESS' ||\n preview.status === 'FAILED',\n options\n );\n }\n}\n","import type { MigmaClient } from '../client';\nimport type { MigmaResult } from '../types/common';\nimport type {\n ExportResult,\n ExportFormatsResponse,\n ExportStatusResponse,\n HubspotExportParams,\n} from '../types/export';\n\nexport class Export {\n constructor(private readonly client: MigmaClient) {}\n\n async getFormats(): Promise<MigmaResult<ExportFormatsResponse>> {\n return this.client.get<ExportFormatsResponse>('/export/formats');\n }\n\n async getStatus(conversationId: string): Promise<MigmaResult<ExportStatusResponse>> {\n return this.client.get<ExportStatusResponse>(\n `/export/status/${conversationId}`\n );\n }\n\n async html(conversationId: string): Promise<MigmaResult<ExportResult>> {\n return this.client.get<ExportResult>(`/export/html/${conversationId}`);\n }\n\n async pdf(conversationId: string): Promise<MigmaResult<ExportResult>> {\n return this.client.get<ExportResult>(`/export/pdf/${conversationId}`);\n }\n\n async png(conversationId: string): Promise<MigmaResult<ExportResult>> {\n return this.client.get<ExportResult>(`/export/png/${conversationId}`);\n }\n\n async klaviyo(\n conversationId: string,\n klaviyoType?: 'html' | 'hybrid' | 'code'\n ): Promise<MigmaResult<ExportResult>> {\n return this.client.get<ExportResult>(\n `/export/klaviyo/${conversationId}`,\n { klaviyoType }\n );\n }\n\n async mailchimp(conversationId: string): Promise<MigmaResult<ExportResult>> {\n return this.client.get<ExportResult>(`/export/mailchimp/${conversationId}`);\n }\n\n async hubspot(params: HubspotExportParams): Promise<MigmaResult<ExportResult>> {\n return this.client.post<ExportResult>(\n '/export/hubspot',\n params as unknown as Record<string, unknown>\n );\n }\n}\n","import type { MigmaClient } from '../client';\nimport type { MigmaResult } from '../types/common';\nimport type {\n Domain,\n CreateDomainParams,\n UpdateDomainParams,\n DomainVerificationResult,\n DomainAvailability,\n CreateManagedDomainParams,\n ProvisionStreamParams,\n SetupDomainParams,\n SetupDomainResponse,\n DomainDeleteResponse,\n} from '../types/domains';\n\nexport class Domains {\n constructor(private readonly client: MigmaClient) {}\n\n async list(): Promise<MigmaResult<Domain[]>> {\n return this.client.get<Domain[]>('/domains');\n }\n\n async create(params: CreateDomainParams): Promise<MigmaResult<Domain>> {\n return this.client.post<Domain>('/domains', params as unknown as Record<string, unknown>);\n }\n\n async get(domain: string): Promise<MigmaResult<Domain>> {\n return this.client.get<Domain>(`/domains/${domain}`);\n }\n\n async verify(domain: string): Promise<MigmaResult<DomainVerificationResult>> {\n return this.client.post<DomainVerificationResult>(`/domains/${domain}/verify`);\n }\n\n async update(domain: string, params: UpdateDomainParams): Promise<MigmaResult<Domain>> {\n return this.client.patch<Domain>(`/domains/${domain}`, params as unknown as Record<string, unknown>);\n }\n\n async remove(domain: string): Promise<MigmaResult<DomainDeleteResponse>> {\n return this.client.delete<DomainDeleteResponse>(`/domains/${domain}`);\n }\n\n async checkAvailability(prefix: string): Promise<MigmaResult<DomainAvailability>> {\n return this.client.get<DomainAvailability>(`/domains/managed/check/${prefix}`);\n }\n\n async listManaged(): Promise<MigmaResult<Domain[]>> {\n return this.client.get<Domain[]>('/domains/managed');\n }\n\n async createManaged(params: CreateManagedDomainParams): Promise<MigmaResult<Domain>> {\n return this.client.post<Domain>('/domains/managed', params as unknown as Record<string, unknown>);\n }\n\n async removeManaged(domain: string): Promise<MigmaResult<DomainDeleteResponse>> {\n return this.client.delete<DomainDeleteResponse>(`/domains/managed/${domain}`);\n }\n\n /**\n * Provision a transactional or marketing stream identity on a domain you own.\n * Creates notify.<rootDomain> (transactional) or send.<rootDomain> (marketing)\n * to isolate transactional reputation from marketing. Returns DNS records to publish.\n */\n async provisionStream(params: ProvisionStreamParams): Promise<MigmaResult<Domain>> {\n return this.client.post<Domain>('/domains/streams', params as unknown as Record<string, unknown>);\n }\n\n /**\n * Provision BOTH stream identities for a domain you own in one call:\n * send.<rootDomain> (marketing) and notify.<rootDomain> (transactional).\n * Idempotent. Returns both domains with DNS records to publish.\n */\n async setup(params: SetupDomainParams): Promise<MigmaResult<SetupDomainResponse>> {\n return this.client.post<SetupDomainResponse>('/domains/setup', params as unknown as Record<string, unknown>);\n }\n}\n","import type { MigmaClient } from '../client';\nimport type { MigmaResult } from '../types/common';\nimport type {\n AddCustomDnsRecordParams,\n CustomDnsRecord,\n CustomDnsRecordList,\n DomainPurchaseCheckout,\n DomainPurchaseParams,\n DomainPurchaseQuote,\n DomainPurchaseSearchParams,\n DomainRegistration,\n} from '../types/domain-purchases';\n\nexport class DomainPurchases {\n constructor(private readonly client: MigmaClient) {}\n\n /** Availability and price quotes for domains you could buy. */\n async search(params: DomainPurchaseSearchParams): Promise<MigmaResult<{ quotes: DomainPurchaseQuote[] }>> {\n return this.client.get<{ quotes: DomainPurchaseQuote[] }>('/domains/purchase/search', {\n q: params.q,\n limit: params.limit,\n });\n }\n\n /**\n * Start buying a domain. Returns a Stripe checkout URL the account owner\n * opens in a browser; the domain registers after payment clears. Requires\n * an active paid Migma subscription.\n */\n async create(params: DomainPurchaseParams): Promise<MigmaResult<DomainPurchaseCheckout>> {\n return this.client.post<DomainPurchaseCheckout>('/domains/purchase', params as unknown as Record<string, unknown>);\n }\n\n /** Purchase history and status: payment_pending → registering → active. */\n async registrations(params?: { limit?: number }): Promise<MigmaResult<{ registrations: DomainRegistration[] }>> {\n return this.client.get<{ registrations: DomainRegistration[] }>('/domains/purchase/registrations', {\n limit: params?.limit,\n });\n }\n\n // DNS records live on Migma-hosted zones, which exist exactly for domains\n // bought in Migma — hence they sit on this resource even though the API\n // path is /domains/:domain/dns-records.\n\n /** DNS records you added to a domain bought in Migma. `managed: false` = zone not hosted by Migma. */\n async listDnsRecords(domain: string): Promise<MigmaResult<CustomDnsRecordList>> {\n return this.client.get<CustomDnsRecordList>(`/domains/${encodeURIComponent(domain)}/dns-records`);\n }\n\n /**\n * Add a DNS record (A, AAAA, CNAME, MX, TXT, or NS) to a domain bought in\n * Migma. Migma's email sending records are protected and cannot be\n * overridden; the root and www stay with domain forwarding.\n */\n async addDnsRecord(domain: string, params: AddCustomDnsRecordParams): Promise<MigmaResult<{ record: CustomDnsRecord }>> {\n return this.client.post<{ record: CustomDnsRecord }>(\n `/domains/${encodeURIComponent(domain)}/dns-records`,\n params as unknown as Record<string, unknown>,\n );\n }\n\n /** Remove a DNS record you added earlier (never Migma's own records). */\n async removeDnsRecord(domain: string, recordId: string): Promise<MigmaResult<{ ok: boolean }>> {\n return this.client.delete<{ ok: boolean }>(\n `/domains/${encodeURIComponent(domain)}/dns-records/${encodeURIComponent(recordId)}`,\n );\n }\n}\n","import type { MigmaClient } from '../client';\nimport type { MigmaResult } from '../types/common';\nimport type { CreditStatus, UpgradeLink, UpgradeLinkParams } from '../types/billing';\n\nexport class Billing {\n constructor(private readonly client: MigmaClient) {}\n\n /** Plan and remaining credits for the API key owner. */\n async credits(): Promise<MigmaResult<CreditStatus>> {\n return this.client.get<CreditStatus>('/billing/credits');\n }\n\n /**\n * Create checkout for a user-chosen new plan, or omit plan for the existing\n * customer's billing portal. Passing plan for an active subscription can\n * change it and charge prorated payment immediately; obtain charge approval.\n * The returned URL alone does not confirm payment. Do not retry unknown writes.\n */\n async upgradeLink(params: UpgradeLinkParams = {}): Promise<MigmaResult<UpgradeLink>> {\n return this.client.post<UpgradeLink>('/billing/upgrade-link', params as unknown as Record<string, unknown>);\n }\n}\n","import type { MigmaClient } from '../client';\nimport type { MigmaResult } from '../types/common';\nimport type {\n WebhookDetail,\n CreateWebhookParams,\n CreateWebhookResponse,\n UpdateWebhookParams,\n ListWebhooksResponse,\n WebhookTestResult,\n WebhookDeliveriesResponse,\n WebhookEventsResponse,\n} from '../types/webhooks';\n\nexport class Webhooks {\n constructor(private readonly client: MigmaClient) {}\n\n async list(): Promise<MigmaResult<ListWebhooksResponse>> {\n return this.client.get<ListWebhooksResponse>('/webhooks');\n }\n\n async create(params: CreateWebhookParams): Promise<MigmaResult<CreateWebhookResponse>> {\n return this.client.post<CreateWebhookResponse>('/webhooks', params as unknown as Record<string, unknown>);\n }\n\n async get(webhookId: string): Promise<MigmaResult<WebhookDetail>> {\n return this.client.get<WebhookDetail>(`/webhooks/${webhookId}`);\n }\n\n async update(\n webhookId: string,\n params: UpdateWebhookParams\n ): Promise<MigmaResult<{ updated: boolean }>> {\n return this.client.patch<{ updated: boolean }>(\n `/webhooks/${webhookId}`,\n params as unknown as Record<string, unknown>\n );\n }\n\n async remove(webhookId: string): Promise<MigmaResult<{ deleted: boolean }>> {\n return this.client.delete<{ deleted: boolean }>(`/webhooks/${webhookId}`);\n }\n\n async test(webhookId: string): Promise<MigmaResult<WebhookTestResult>> {\n return this.client.post<WebhookTestResult>(`/webhooks/${webhookId}/test`);\n }\n\n async getDeliveries(\n webhookId: string,\n limit?: number\n ): Promise<MigmaResult<WebhookDeliveriesResponse>> {\n return this.client.get<WebhookDeliveriesResponse>(\n `/webhooks/${webhookId}/deliveries`,\n { limit }\n );\n }\n\n async getEvents(): Promise<MigmaResult<WebhookEventsResponse>> {\n return this.client.get<WebhookEventsResponse>('/webhooks/events');\n }\n\n async getStats(): Promise<MigmaResult<Record<string, unknown>>> {\n return this.client.get<Record<string, unknown>>('/webhooks/stats');\n }\n}\n","import type { MigmaClient } from '../client';\nimport type { MigmaResult, MessageResponse } from '../types/common';\nimport type {\n KnowledgeBaseEntry,\n KnowledgeBaseListResponse,\n AddKnowledgeBaseParams,\n UpdateKnowledgeBaseParams,\n} from '../types/knowledge-base';\n\nexport class KnowledgeBase {\n constructor(private readonly client: MigmaClient) {}\n\n async list(projectId: string): Promise<MigmaResult<KnowledgeBaseListResponse>> {\n return this.client.get<KnowledgeBaseListResponse>(\n `/projects/${projectId}/knowledge-base`\n );\n }\n\n async add(\n projectId: string,\n params: AddKnowledgeBaseParams\n ): Promise<MigmaResult<KnowledgeBaseEntry>> {\n return this.client.post<KnowledgeBaseEntry>(\n `/projects/${projectId}/knowledge-base`,\n params as unknown as Record<string, unknown>\n );\n }\n\n async update(\n projectId: string,\n entryId: string,\n params: UpdateKnowledgeBaseParams\n ): Promise<MigmaResult<KnowledgeBaseEntry>> {\n return this.client.put<KnowledgeBaseEntry>(\n `/projects/${projectId}/knowledge-base/${entryId}`,\n params as unknown as Record<string, unknown>\n );\n }\n\n async remove(\n projectId: string,\n entryId: string\n ): Promise<MigmaResult<MessageResponse>> {\n return this.client.delete<MessageResponse>(\n `/projects/${projectId}/knowledge-base/${entryId}`\n );\n }\n}\n","import type { MigmaClient } from '../client';\nimport type { MigmaResult, MessageResponse } from '../types/common';\nimport type {\n ProjectImage,\n AddImageParams,\n UpdateImageParams,\n UpdateLogosParams,\n LogosResponse,\n} from '../types/images';\n\nexport class Images {\n constructor(private readonly client: MigmaClient) {}\n\n async add(\n projectId: string,\n params: AddImageParams\n ): Promise<MigmaResult<ProjectImage>> {\n return this.client.post<ProjectImage>(\n `/projects/${projectId}/images`,\n params as unknown as Record<string, unknown>\n );\n }\n\n async update(\n projectId: string,\n params: UpdateImageParams\n ): Promise<MigmaResult<ProjectImage>> {\n return this.client.put<ProjectImage>(\n `/projects/${projectId}/images`,\n params as unknown as Record<string, unknown>\n );\n }\n\n async remove(\n projectId: string,\n imageUrl: string\n ): Promise<MigmaResult<MessageResponse>> {\n return this.client.delete<MessageResponse>(\n `/projects/${projectId}/images`,\n { imageUrl }\n );\n }\n\n async updateLogos(\n projectId: string,\n params: UpdateLogosParams\n ): Promise<MigmaResult<LogosResponse>> {\n return this.client.put<LogosResponse>(\n `/projects/${projectId}/logos`,\n params as unknown as Record<string, unknown>\n );\n }\n}\n","import type { CallOptions, MigmaClient } from '../client';\nimport type { MigmaResult } from '../types/common';\nimport type {\n Campaign,\n CampaignLogsParams,\n CampaignLogsResponse,\n CampaignStats,\n CreateCampaignParams,\n ListCampaignsParams,\n ListCampaignsResponse,\n ScheduleCampaignParams,\n} from '../types/campaigns';\n\nexport class Campaigns {\n constructor(private readonly client: MigmaClient) {}\n\n async list(params: ListCampaignsParams): Promise<MigmaResult<ListCampaignsResponse>> {\n const { projectId, status, page, limit, archived } = params;\n return this.client.get<ListCampaignsResponse>('/campaigns', {\n projectId,\n status,\n page,\n limit,\n archived,\n });\n }\n\n async create(params: CreateCampaignParams, options?: CallOptions): Promise<MigmaResult<Campaign>> {\n return this.client.post<Campaign>('/campaigns', params as unknown as Record<string, unknown>, options);\n }\n\n async get(id: string): Promise<MigmaResult<Campaign>> {\n return this.client.get<Campaign>(`/campaigns/${id}`);\n }\n\n async send(id: string, options?: CallOptions): Promise<MigmaResult<Campaign>> {\n return this.client.post<Campaign>(`/campaigns/${id}/send`, undefined, options);\n }\n\n async schedule(id: string, params: ScheduleCampaignParams, options?: CallOptions): Promise<MigmaResult<Campaign>> {\n return this.client.post<Campaign>(`/campaigns/${id}/schedule`, params as unknown as Record<string, unknown>, options);\n }\n\n async cancel(id: string, options?: CallOptions): Promise<MigmaResult<Campaign>> {\n return this.client.post<Campaign>(`/campaigns/${id}/cancel`, undefined, options);\n }\n\n /** Aggregated engagement metrics for a campaign (cached, may be slightly stale). */\n async stats(id: string): Promise<MigmaResult<CampaignStats>> {\n return this.client.get<CampaignStats>(`/campaigns/${id}/stats`);\n }\n\n /** Per-recipient email logs for a campaign (cursor-paginated). */\n async logs(id: string, params?: CampaignLogsParams): Promise<MigmaResult<CampaignLogsResponse>> {\n return this.client.get<CampaignLogsResponse>(`/campaigns/${id}/logs`, {\n limit: params?.limit,\n cursor: params?.cursor,\n status: params?.status,\n });\n }\n\n async archive(id: string): Promise<MigmaResult<Campaign>> {\n return this.client.post<Campaign>(`/campaigns/${id}/archive`);\n }\n\n async unarchive(id: string): Promise<MigmaResult<Campaign>> {\n return this.client.post<Campaign>(`/campaigns/${id}/unarchive`);\n }\n}\n","import type { MigmaClient } from '../client';\nimport type { MigmaResult } from '../types/common';\nimport type { SendingMetrics, SendingMetricsParams } from '../types/metrics';\n\nexport class Metrics {\n constructor(private readonly client: MigmaClient) {}\n\n async sending(params?: SendingMetricsParams): Promise<MigmaResult<SendingMetrics>> {\n return this.client.get<SendingMetrics>('/metrics/sending', {\n months: params?.months,\n });\n }\n}\n","import type { MigmaClient } from '../client';\nimport type { MigmaResult } from '../types/common';\nimport type { ListWorkspacesResponse } from '../types/workspaces';\n\nexport class Workspaces {\n constructor(private readonly client: MigmaClient) {}\n\n /**\n * Workspaces the API key owner belongs to. Pass a workspace id as\n * `organizationId` to projects.list() to scope brands to it.\n */\n async list(): Promise<MigmaResult<ListWorkspacesResponse>> {\n return this.client.get<ListWorkspacesResponse>('/workspaces');\n }\n}\n","import { MigmaClient } from './client';\nimport { Contacts } from './resources/contacts';\nimport { Tags } from './resources/tags';\nimport { Segments } from './resources/segments';\nimport { Topics } from './resources/topics';\nimport { Sending } from './resources/sending';\nimport { Projects } from './resources/projects';\nimport { Emails } from './resources/emails';\nimport { Validation } from './resources/validation';\nimport { Previews } from './resources/previews';\nimport { Export } from './resources/export';\nimport { Domains } from './resources/domains';\nimport { DomainPurchases } from './resources/domain-purchases';\nimport { Billing } from './resources/billing';\nimport { Webhooks } from './resources/webhooks';\nimport { KnowledgeBase } from './resources/knowledge-base';\nimport { Images } from './resources/images';\nimport { Campaigns } from './resources/campaigns';\nimport { Metrics } from './resources/metrics';\nimport { Workspaces } from './resources/workspaces';\n\nexport interface MigmaConfig {\n /** API base URL. Default: 'https://api.migma.ai/v1' */\n baseUrl?: string;\n /** Max retries on 5xx/429 errors. Default: 2 */\n maxRetries?: number;\n /** Base delay between retries in ms. Default: 1000 */\n retryDelay?: number;\n}\n\nexport class Migma {\n private readonly client: MigmaClient;\n\n readonly contacts: Contacts;\n readonly tags: Tags;\n readonly segments: Segments;\n readonly topics: Topics;\n readonly sending: Sending;\n readonly projects: Projects;\n readonly emails: Emails;\n readonly validation: Validation;\n readonly previews: Previews;\n readonly export: Export;\n readonly domains: Domains;\n readonly domainPurchases: DomainPurchases;\n readonly billing: Billing;\n readonly webhooks: Webhooks;\n readonly knowledgeBase: KnowledgeBase;\n readonly images: Images;\n readonly campaigns: Campaigns;\n readonly metrics: Metrics;\n readonly workspaces: Workspaces;\n\n constructor(apiKey: string, config?: MigmaConfig) {\n if (!apiKey) {\n throw new Error(\n 'Missing API key. Pass it to the constructor: `new Migma(\"your-api-key\")`'\n );\n }\n\n this.client = new MigmaClient(apiKey, {\n baseUrl: config?.baseUrl ?? 'https://api.migma.ai/v1',\n maxRetries: config?.maxRetries ?? 2,\n retryDelay: config?.retryDelay ?? 1000,\n });\n\n this.contacts = new Contacts(this.client);\n this.tags = new Tags(this.client);\n this.segments = new Segments(this.client);\n this.topics = new Topics(this.client);\n this.sending = new Sending(this.client);\n this.projects = new Projects(this.client);\n this.emails = new Emails(this.client);\n this.validation = new Validation(this.client);\n this.previews = new Previews(this.client);\n this.export = new Export(this.client);\n this.domains = new Domains(this.client);\n this.domainPurchases = new DomainPurchases(this.client);\n this.billing = new Billing(this.client);\n this.webhooks = new Webhooks(this.client);\n this.knowledgeBase = new KnowledgeBase(this.client);\n this.images = new Images(this.client);\n this.campaigns = new Campaigns(this.client);\n this.metrics = new Metrics(this.client);\n this.workspaces = new Workspaces(this.client);\n }\n}\n"]}
package/dist/index.mjs CHANGED
@@ -98,12 +98,9 @@ var MigmaClient = class {
98
98
  headers: { ...this.headers, ...options.headers },
99
99
  body: options.body ? JSON.stringify(options.body) : void 0
100
100
  });
101
- const json = await response.json();
102
- if (!response.ok || !json.success) {
103
- const error = new MigmaError(
104
- json.error || `Request failed with status ${response.status}`,
105
- response.status
106
- );
101
+ const json = await readJson(response);
102
+ if (!response.ok || !json?.success) {
103
+ const error = new MigmaError(failureMessage(response, json), response.status);
107
104
  if (response.status >= 500 || response.status === 429) {
108
105
  lastError = error;
109
106
  if (attempt < attempts - 1) {
@@ -141,14 +138,11 @@ var MigmaClient = class {
141
138
  headers: { ...this.headers, ...options.headers },
142
139
  body: options.body ? JSON.stringify(options.body) : void 0
143
140
  });
144
- const json = await response.json();
145
- if (!response.ok || !json.success) {
141
+ const json = await readJson(response);
142
+ if (!response.ok || !json?.success) {
146
143
  return {
147
144
  data: null,
148
- error: new MigmaError(
149
- json.error || `Request failed with status ${response.status}`,
150
- response.status
151
- )
145
+ error: new MigmaError(failureMessage(response, json), response.status)
152
146
  };
153
147
  }
154
148
  return {
@@ -213,6 +207,18 @@ var MigmaClient = class {
213
207
  return new Promise((resolve) => setTimeout(resolve, ms));
214
208
  }
215
209
  };
210
+ async function readJson(response) {
211
+ const text = await response.text();
212
+ try {
213
+ return JSON.parse(text);
214
+ } catch {
215
+ return null;
216
+ }
217
+ }
218
+ function failureMessage(response, json) {
219
+ if (json?.error) return json.error;
220
+ return json ? `Request failed with status ${response.status}` : `Request failed with status ${response.status}: the server did not return JSON`;
221
+ }
216
222
 
217
223
  // src/resources/contacts.ts
218
224
  var Contacts = class {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/agent-identity.ts","../src/errors.ts","../src/client.ts","../src/resources/contacts.ts","../src/resources/tags.ts","../src/resources/segments.ts","../src/resources/topics.ts","../src/resources/sending.ts","../src/polling.ts","../src/resources/projects.ts","../src/resources/emails.ts","../src/resources/validation.ts","../src/resources/previews.ts","../src/resources/export.ts","../src/resources/domains.ts","../src/resources/domain-purchases.ts","../src/resources/billing.ts","../src/resources/webhooks.ts","../src/resources/knowledge-base.ts","../src/resources/images.ts","../src/resources/campaigns.ts","../src/resources/metrics.ts","../src/resources/workspaces.ts","../src/migma.ts"],"names":["MigmaErrorCode"],"mappings":"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","file":"index.mjs","sourcesContent":["// Auto-identify the AI agent driving this SDK so Migma can show live\n// presence (\"Claude Code · creating\") in the user's dashboard. An explicit\n// MIGMA_AGENT_ID always wins; host detection is best-effort and silent.\nconst AGENT_ID_PATTERN = /^ai:[a-z0-9][a-z0-9._-]{0,62}$/;\n\nconst HOST_AGENT_ENV: Array<{ env: string; id: string }> = [\n { env: 'CLAUDECODE', id: 'ai:claude-code' },\n { env: 'CURSOR_TRACE_ID', id: 'ai:cursor' },\n { env: 'CODEX_HOME', id: 'ai:codex' },\n];\n\nexport function detectAgentId(): string | null {\n if (typeof process === 'undefined' || !process.env) return null;\n\n const explicit = (process.env.MIGMA_AGENT_ID || '').trim().toLowerCase();\n if (AGENT_ID_PATTERN.test(explicit)) return explicit;\n\n for (const { env, id } of HOST_AGENT_ENV) {\n if (process.env[env]) return id;\n }\n return null;\n}\n","export enum MigmaErrorCode {\n VALIDATION_ERROR = 'validation_error',\n NOT_FOUND = 'not_found',\n UNAUTHORIZED = 'unauthorized',\n FORBIDDEN = 'forbidden',\n RATE_LIMIT_EXCEEDED = 'rate_limit_exceeded',\n CONFLICT = 'conflict',\n TIMEOUT = 'timeout',\n NETWORK_ERROR = 'network_error',\n INTERNAL_ERROR = 'internal_error',\n UNKNOWN = 'unknown',\n}\n\nexport class MigmaError extends Error {\n readonly statusCode: number;\n readonly code: MigmaErrorCode;\n\n constructor(message: string, statusCode: number, code?: MigmaErrorCode) {\n super(message);\n this.name = 'MigmaError';\n this.statusCode = statusCode;\n this.code = code ?? MigmaError.codeFromStatus(statusCode);\n }\n\n private static codeFromStatus(status: number): MigmaErrorCode {\n switch (status) {\n case 400:\n return MigmaErrorCode.VALIDATION_ERROR;\n case 401:\n return MigmaErrorCode.UNAUTHORIZED;\n case 403:\n return MigmaErrorCode.FORBIDDEN;\n case 404:\n return MigmaErrorCode.NOT_FOUND;\n case 409:\n return MigmaErrorCode.CONFLICT;\n case 429:\n return MigmaErrorCode.RATE_LIMIT_EXCEEDED;\n default:\n if (status >= 500) return MigmaErrorCode.INTERNAL_ERROR;\n return MigmaErrorCode.UNKNOWN;\n }\n }\n\n toJSON() {\n return {\n name: this.name,\n message: this.message,\n statusCode: this.statusCode,\n code: this.code,\n };\n }\n}\n","import { detectAgentId } from './agent-identity';\nimport { MigmaError, MigmaErrorCode } from './errors';\nimport type { ApiResponse, MigmaResult } from './types/common';\n\nexport interface ClientConfig {\n baseUrl: string;\n maxRetries: number;\n retryDelay: number;\n}\n\ntype HttpMethod = 'GET' | 'POST' | 'PATCH' | 'PUT' | 'DELETE';\n\ninterface RequestOptions {\n method: HttpMethod;\n path: string;\n body?: Record<string, unknown>;\n query?: Record<string, string | number | boolean | undefined>;\n headers?: Record<string, string>;\n maxRetries?: number;\n}\n\n/** Per-call options for write methods (POST/PATCH/DELETE). */\nexport interface CallOptions {\n /** Override automatic retries for this call. Use 0 for unsafe writes. */\n maxRetries?: number;\n /**\n * Optional Idempotency-Key (max 100 chars). Same key + same body within 24h\n * replays the original response; a different body returns 409 IDEMPOTENCY_CONFLICT.\n * Reused across the SDK's own automatic retries so a retried call never duplicates.\n */\n idempotencyKey?: string;\n}\n\nexport class MigmaClient {\n private readonly apiKey: string;\n private readonly config: ClientConfig;\n private readonly headers: Record<string, string>;\n\n constructor(apiKey: string, config: ClientConfig) {\n this.apiKey = apiKey;\n this.config = config;\n\n this.headers = {\n Authorization: `Bearer ${this.apiKey}`,\n 'Content-Type': 'application/json',\n 'User-Agent': 'migma-node/1.0.0',\n };\n const agentId = detectAgentId();\n if (agentId) {\n this.headers['X-Agent-Id'] = agentId;\n }\n }\n\n async request<T>(options: RequestOptions): Promise<MigmaResult<T>> {\n const url = this.buildUrl(options.path, options.query);\n const attempts = (options.maxRetries ?? this.config.maxRetries) + 1;\n\n let lastError: MigmaError | null = null;\n\n for (let attempt = 0; attempt < attempts; attempt++) {\n try {\n const response = await fetch(url, {\n method: options.method,\n headers: { ...this.headers, ...options.headers },\n body: options.body ? JSON.stringify(options.body) : undefined,\n });\n\n const json = (await response.json()) as ApiResponse<T>;\n\n if (!response.ok || !json.success) {\n const error = new MigmaError(\n json.error || `Request failed with status ${response.status}`,\n response.status\n );\n\n if (response.status >= 500 || response.status === 429) {\n lastError = error;\n if (attempt < attempts - 1) {\n const delay =\n response.status === 429\n ? (this.parseRetryAfter(response) ??\n this.config.retryDelay * (attempt + 1))\n : this.config.retryDelay * Math.pow(2, attempt);\n await this.sleep(delay);\n continue;\n }\n }\n\n return { data: null, error };\n }\n\n return { data: json.data as T, error: null };\n } catch (err: unknown) {\n lastError = new MigmaError(\n err instanceof Error ? err.message : 'Network error',\n 0,\n MigmaErrorCode.NETWORK_ERROR\n );\n\n if (attempt < attempts - 1) {\n await this.sleep(this.config.retryDelay * Math.pow(2, attempt));\n continue;\n }\n }\n }\n\n return { data: null, error: lastError! };\n }\n\n /**\n * For endpoints where the API returns `{ success, data, count }` and we want\n * both the data array and the count together.\n */\n async requestWithCount<T>(\n options: RequestOptions\n ): Promise<MigmaResult<{ data: T; count: number }>> {\n const url = this.buildUrl(options.path, options.query);\n\n try {\n const response = await fetch(url, {\n method: options.method,\n headers: { ...this.headers, ...options.headers },\n body: options.body ? JSON.stringify(options.body) : undefined,\n });\n\n const json = (await response.json()) as ApiResponse<T>;\n\n if (!response.ok || !json.success) {\n return {\n data: null,\n error: new MigmaError(\n json.error || `Request failed with status ${response.status}`,\n response.status\n ),\n };\n }\n\n return {\n data: { data: json.data as T, count: json.count ?? 0 },\n error: null,\n };\n } catch (err: unknown) {\n return {\n data: null,\n error: new MigmaError(\n err instanceof Error ? err.message : 'Network error',\n 0,\n MigmaErrorCode.NETWORK_ERROR\n ),\n };\n }\n }\n\n async get<T>(\n path: string,\n query?: Record<string, string | number | boolean | undefined>\n ) {\n return this.request<T>({ method: 'GET', path, query });\n }\n\n async getWithCount<T>(\n path: string,\n query?: Record<string, string | number | boolean | undefined>\n ) {\n return this.requestWithCount<T>({ method: 'GET', path, query });\n }\n\n async post<T>(path: string, body?: Record<string, unknown>, options?: CallOptions) {\n return this.request<T>({ method: 'POST', path, body, headers: this.callHeaders(options), maxRetries: options?.maxRetries });\n }\n\n async patch<T>(path: string, body?: Record<string, unknown>, options?: CallOptions) {\n return this.request<T>({ method: 'PATCH', path, body, headers: this.callHeaders(options), maxRetries: options?.maxRetries });\n }\n\n async put<T>(path: string, body?: Record<string, unknown>) {\n return this.request<T>({ method: 'PUT', path, body });\n }\n\n async delete<T>(\n path: string,\n query?: Record<string, string | number | boolean | undefined>,\n options?: CallOptions\n ) {\n return this.request<T>({ method: 'DELETE', path, query, headers: this.callHeaders(options), maxRetries: options?.maxRetries });\n }\n\n private callHeaders(options?: CallOptions): Record<string, string> | undefined {\n if (options?.idempotencyKey) {\n return { 'Idempotency-Key': options.idempotencyKey };\n }\n return undefined;\n }\n\n private buildUrl(\n path: string,\n query?: Record<string, string | number | boolean | undefined>\n ): string {\n const url = new URL(`${this.config.baseUrl}${path}`);\n if (query) {\n for (const [key, value] of Object.entries(query)) {\n if (value !== undefined && value !== null) {\n url.searchParams.set(key, String(value));\n }\n }\n }\n return url.toString();\n }\n\n private parseRetryAfter(response: Response): number | null {\n const retryAfter = response.headers.get('Retry-After');\n if (retryAfter) {\n const seconds = parseInt(retryAfter, 10);\n if (!isNaN(seconds)) return seconds * 1000;\n }\n return null;\n }\n\n private sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n }\n}\n","import type { CallOptions, MigmaClient } from '../client';\nimport type { MigmaResult, DeleteResponse } from '../types/common';\nimport type {\n Contact,\n CreateContactParams,\n UpdateContactParams,\n ListContactsParams,\n ListContactsResponse,\n BulkImportParams,\n BulkImportResponse,\n BulkImportJobStatus,\n BatchDeleteContactsParams,\n BatchDeleteResponse,\n ChangeStatusParams,\n CreateContactExportParams,\n ContactExportStatus,\n ListProviderImportSourcesParams,\n ProviderImportSource,\n ImportFromProviderParams,\n ProviderImportStarted,\n} from '../types/contacts';\n\nexport class Contacts {\n constructor(private readonly client: MigmaClient) {}\n\n async create(params: CreateContactParams, options?: CallOptions): Promise<MigmaResult<Contact>> {\n return this.client.post<Contact>('/contacts', params as unknown as Record<string, unknown>, options);\n }\n\n async list(params: ListContactsParams): Promise<MigmaResult<ListContactsResponse>> {\n const { projectId, page, limit, tags, status, search } = params;\n return this.client.getWithCount<Contact[]>('/contacts', {\n projectId,\n page,\n limit,\n tags,\n status,\n search,\n }) as Promise<MigmaResult<ListContactsResponse>>;\n }\n\n async get(id: string, projectId: string): Promise<MigmaResult<Contact>> {\n return this.client.get<Contact>(`/contacts/${id}`, { projectId });\n }\n\n async update(id: string, params: UpdateContactParams, options?: CallOptions): Promise<MigmaResult<Contact>> {\n return this.client.patch<Contact>(`/contacts/${id}`, params as unknown as Record<string, unknown>, options);\n }\n\n async remove(id: string, projectId: string, options?: CallOptions): Promise<MigmaResult<DeleteResponse>> {\n return this.client.delete<DeleteResponse>(`/contacts/${id}`, { projectId }, options);\n }\n\n async bulkImport(params: BulkImportParams, options?: CallOptions): Promise<MigmaResult<BulkImportResponse>> {\n return this.client.post<BulkImportResponse>('/contacts/bulk', params as unknown as Record<string, unknown>, options);\n }\n\n async getBulkImportStatus(jobId: string): Promise<MigmaResult<BulkImportJobStatus>> {\n return this.client.get<BulkImportJobStatus>(`/contacts/bulk/${jobId}`);\n }\n\n /** Batch delete contacts by email (up to 1000). Emails with no match come back in `notFound`. */\n async bulkDeleteByEmail(params: BatchDeleteContactsParams, options?: CallOptions): Promise<MigmaResult<BatchDeleteResponse>> {\n return this.client.post<BatchDeleteResponse>('/contacts/bulk-delete', params as unknown as Record<string, unknown>, options);\n }\n\n /** Queue a filtered CSV export. Poll getExport; do not list every contact to build a CSV. */\n async createExport(params: CreateContactExportParams, options?: CallOptions): Promise<MigmaResult<ContactExportStatus>> {\n return this.client.post<ContactExportStatus>('/contacts/exports', params as unknown as Record<string, unknown>, { ...options, maxRetries: options?.idempotencyKey ? options.maxRetries : 0 });\n }\n\n async getExport(jobId: string, projectId: string): Promise<MigmaResult<ContactExportStatus>> {\n return this.client.get<ContactExportStatus>(`/contacts/exports/${encodeURIComponent(jobId)}`, { projectId });\n }\n\n /** Lists and segments in the brand's connected Klaviyo, Mailchimp or HubSpot account. A 409 error message includes the link to connect it. */\n async listProviderImportSources(params: ListProviderImportSourcesParams): Promise<MigmaResult<{ sources: ProviderImportSource[] }>> {\n const { provider, projectId, connectionId } = params;\n return this.client.get<{ sources: ProviderImportSource[] }>(`/contacts/imports/providers/${encodeURIComponent(provider)}/sources`, { projectId, connectionId });\n }\n\n /** Import provider sources as contacts (subscribed only by default). Poll GET /contacts/imports/{id} for counts. */\n async importFromProvider(params: ImportFromProviderParams, options?: CallOptions): Promise<MigmaResult<ProviderImportStarted>> {\n return this.client.post<ProviderImportStarted>('/contacts/imports/provider', params as unknown as Record<string, unknown>, { ...options, maxRetries: options?.idempotencyKey ? options.maxRetries : 0 });\n }\n\n async changeStatus(params: ChangeStatusParams, options?: CallOptions): Promise<MigmaResult<{ success: boolean }>> {\n return this.client.post<{ success: boolean }>('/contacts/status', params as unknown as Record<string, unknown>, options);\n }\n}\n","import type { MigmaClient } from '../client';\nimport type { MigmaResult, DeleteResponse } from '../types/common';\nimport type {\n Tag,\n CreateTagParams,\n UpdateTagParams,\n ListTagsParams,\n ListTagsResponse,\n} from '../types/tags';\n\nexport class Tags {\n constructor(private readonly client: MigmaClient) {}\n\n async list(params: ListTagsParams): Promise<MigmaResult<ListTagsResponse>> {\n const { projectId, page, limit, search, sortBy, sortOrder } = params;\n return this.client.getWithCount<Tag[]>('/tags', {\n projectId,\n page,\n limit,\n search,\n sortBy,\n sortOrder,\n }) as Promise<MigmaResult<ListTagsResponse>>;\n }\n\n async create(params: CreateTagParams): Promise<MigmaResult<Tag>> {\n return this.client.post<Tag>('/tags', params as unknown as Record<string, unknown>);\n }\n\n async get(id: string, projectId: string): Promise<MigmaResult<Tag>> {\n return this.client.get<Tag>(`/tags/${id}`, { projectId });\n }\n\n async update(id: string, params: UpdateTagParams): Promise<MigmaResult<Tag>> {\n return this.client.patch<Tag>(`/tags/${id}`, params as unknown as Record<string, unknown>);\n }\n\n async remove(id: string, projectId: string): Promise<MigmaResult<DeleteResponse>> {\n return this.client.delete<DeleteResponse>(`/tags/${id}`, { projectId });\n }\n}\n","import type { MigmaClient } from '../client';\nimport type { MigmaResult, DeleteResponse } from '../types/common';\nimport type {\n Segment,\n CreateSegmentParams,\n UpdateSegmentParams,\n ListSegmentsResponse,\n} from '../types/segments';\n\nexport class Segments {\n constructor(private readonly client: MigmaClient) {}\n\n async list(projectId: string): Promise<MigmaResult<ListSegmentsResponse>> {\n return this.client.getWithCount<Segment[]>('/segments', {\n projectId,\n }) as Promise<MigmaResult<ListSegmentsResponse>>;\n }\n\n async create(params: CreateSegmentParams): Promise<MigmaResult<Segment>> {\n return this.client.post<Segment>('/segments', params as unknown as Record<string, unknown>);\n }\n\n async get(id: string, projectId: string): Promise<MigmaResult<Segment>> {\n return this.client.get<Segment>(`/segments/${id}`, { projectId });\n }\n\n async update(id: string, params: UpdateSegmentParams): Promise<MigmaResult<Segment>> {\n return this.client.patch<Segment>(`/segments/${id}`, params as unknown as Record<string, unknown>);\n }\n\n async remove(id: string, projectId: string): Promise<MigmaResult<DeleteResponse>> {\n return this.client.delete<DeleteResponse>(`/segments/${id}`, { projectId });\n }\n}\n","import type { MigmaClient } from '../client';\nimport type { MigmaResult, DeleteResponse } from '../types/common';\nimport type {\n Topic,\n CreateTopicParams,\n UpdateTopicParams,\n ListTopicsParams,\n ListTopicsResponse,\n TopicSubscriptionParams,\n TopicSubscriptionResponse,\n} from '../types/topics';\n\nexport class Topics {\n constructor(private readonly client: MigmaClient) {}\n\n async list(params: ListTopicsParams): Promise<MigmaResult<ListTopicsResponse>> {\n const { projectId, includeInactive } = params;\n return this.client.getWithCount<Topic[]>('/topics', {\n projectId,\n includeInactive,\n }) as Promise<MigmaResult<ListTopicsResponse>>;\n }\n\n async create(params: CreateTopicParams): Promise<MigmaResult<Topic>> {\n return this.client.post<Topic>('/topics', params as unknown as Record<string, unknown>);\n }\n\n async get(id: string, projectId: string): Promise<MigmaResult<Topic>> {\n return this.client.get<Topic>(`/topics/${id}`, { projectId });\n }\n\n async update(id: string, params: UpdateTopicParams): Promise<MigmaResult<Topic>> {\n return this.client.patch<Topic>(`/topics/${id}`, params as unknown as Record<string, unknown>);\n }\n\n async remove(id: string, projectId: string): Promise<MigmaResult<DeleteResponse>> {\n return this.client.delete<DeleteResponse>(`/topics/${id}`, { projectId });\n }\n\n async subscribe(\n topicId: string,\n params: TopicSubscriptionParams\n ): Promise<MigmaResult<TopicSubscriptionResponse>> {\n return this.client.post<TopicSubscriptionResponse>(\n `/topics/${topicId}/subscribe`,\n params as unknown as Record<string, unknown>\n );\n }\n\n async unsubscribe(\n topicId: string,\n params: TopicSubscriptionParams\n ): Promise<MigmaResult<TopicSubscriptionResponse>> {\n return this.client.post<TopicSubscriptionResponse>(\n `/topics/${topicId}/unsubscribe`,\n params as unknown as Record<string, unknown>\n );\n }\n}\n","import type { CallOptions, MigmaClient } from '../client';\nimport type { MigmaResult } from '../types/common';\nimport type {\n SendEmailParams,\n SendEmailResponse,\n BatchStatus,\n} from '../types/sending';\n\nexport class Sending {\n constructor(private readonly client: MigmaClient) {}\n\n async send(params: SendEmailParams, options?: CallOptions): Promise<MigmaResult<SendEmailResponse>> {\n return this.client.post<SendEmailResponse>('/sending', params as unknown as Record<string, unknown>, options);\n }\n\n async getBatchStatus(batchId: string): Promise<MigmaResult<BatchStatus>> {\n return this.client.get<BatchStatus>(`/sending/batches/${batchId}`);\n }\n}\n","import { MigmaError, MigmaErrorCode } from './errors';\nimport type { MigmaResult } from './types/common';\n\nexport interface PollingOptions {\n /** Polling interval in ms. Default: 2000 */\n interval?: number;\n /** Maximum number of polls before giving up. Default: 150 (5 minutes at 2s) */\n maxAttempts?: number;\n /** Callback on each poll with current status */\n onPoll?: (status: unknown, attempt: number) => void;\n /** AbortSignal to cancel polling */\n signal?: AbortSignal;\n}\n\n/**\n * Generic polling function.\n * Calls `fetcher()` repeatedly until `isComplete(result)` returns true\n * or max attempts are reached.\n */\nexport async function poll<T>(\n fetcher: () => Promise<MigmaResult<T>>,\n isComplete: (data: T) => boolean,\n options?: PollingOptions\n): Promise<MigmaResult<T>> {\n const interval = options?.interval ?? 2000;\n const maxAttempts = options?.maxAttempts ?? 150;\n\n for (let attempt = 0; attempt < maxAttempts; attempt++) {\n if (options?.signal?.aborted) {\n return {\n data: null,\n error: new MigmaError('Polling aborted', 0, MigmaErrorCode.TIMEOUT),\n };\n }\n\n const result = await fetcher();\n\n if (result.error) {\n return result;\n }\n\n options?.onPoll?.(result.data, attempt);\n\n if (isComplete(result.data)) {\n return result;\n }\n\n await new Promise<void>((resolve) => {\n const timer = setTimeout(resolve, interval);\n if (options?.signal) {\n const onAbort = () => {\n clearTimeout(timer);\n resolve();\n };\n options.signal.addEventListener('abort', onAbort, { once: true });\n }\n });\n }\n\n return {\n data: null,\n error: new MigmaError(\n 'Polling timed out after maximum attempts',\n 0,\n MigmaErrorCode.TIMEOUT\n ),\n };\n}\n","import type { ConnectedToolScope, ConnectedToolSchema, ListConnectedToolsParams, ListConnectedToolsResponse } from '../types/connected-tools';\nimport type { MigmaClient } from '../client';\nimport type { MigmaResult } from '../types/common';\nimport type {\n Project,\n ListProjectsParams,\n ListProjectsResponse,\n ImportProjectParams,\n ImportProjectResponse,\n ImportStatusResponse,\n RetryImportResponse,\n FieldCatalogParams,\n FieldCatalogResponse,\n BrandGuidelinesParams,\n BrandGuidelinesResponse,\n ProjectReferencesResponse,\n} from '../types/projects';\nimport { poll, type PollingOptions } from '../polling';\n\nexport class Projects {\n constructor(private readonly client: MigmaClient) {}\n\n async list(params?: ListProjectsParams): Promise<MigmaResult<ListProjectsResponse>> {\n return this.client.get<ListProjectsResponse>('/projects', {\n limit: params?.limit,\n offset: params?.offset,\n status: params?.status,\n organizationId: params?.organizationId,\n });\n }\n\n async get(projectId: string): Promise<MigmaResult<Project>> {\n return this.client.get<Project>(`/projects/${projectId}`);\n }\n\n async import(params: ImportProjectParams): Promise<MigmaResult<ImportProjectResponse>> {\n return this.client.post<ImportProjectResponse>(\n '/projects/import',\n params as unknown as Record<string, unknown>\n );\n }\n\n async getImportStatus(projectId: string): Promise<MigmaResult<ImportStatusResponse>> {\n return this.client.get<ImportStatusResponse>(\n `/projects/import/${projectId}/status`\n );\n }\n\n /** Replace the brand's standing design rules and/or image style notes. */\n async updateBrandGuidelines(\n projectId: string,\n params: BrandGuidelinesParams,\n ): Promise<MigmaResult<BrandGuidelinesResponse>> {\n return this.client.put<BrandGuidelinesResponse>(\n `/projects/${projectId}/brand-guidelines`,\n params as unknown as Record<string, unknown>,\n );\n }\n\n /** Design references generation reads: favorites, saved designs, saved sections. */\n async references(projectId: string): Promise<MigmaResult<ProjectReferencesResponse>> {\n return this.client.get<ProjectReferencesResponse>(`/projects/${projectId}/references`);\n }\n\n async retryImport(projectId: string): Promise<MigmaResult<RetryImportResponse>> {\n return this.client.post<RetryImportResponse>(\n `/projects/import/${projectId}/retry`\n );\n }\n\n async fieldCatalog(\n projectId: string,\n params?: FieldCatalogParams\n ): Promise<MigmaResult<FieldCatalogResponse>> {\n return this.client.get<FieldCatalogResponse>(\n `/projects/${projectId}/field-catalog`,\n {\n segmentId: params?.segmentId,\n tag: params?.tag,\n }\n );\n }\n\n async listConnectedTools(params: ListConnectedToolsParams): Promise<MigmaResult<ListConnectedToolsResponse>> {\n return this.client.get<ListConnectedToolsResponse>('/connected-tools', { ...params });\n }\n\n async getConnectedTool(params: ConnectedToolScope): Promise<MigmaResult<ConnectedToolSchema>> {\n return this.client.get<ConnectedToolSchema>('/connected-tools/schema', { ...params });\n }\n\n /** Never automatically replay external writes; provider outcome can be unknown. */\n async callConnectedTool(params: ConnectedToolScope & { parameters: Record<string, unknown> }): Promise<MigmaResult<unknown>> {\n return this.client.post<unknown>('/connected-tools/call', { ...params }, { maxRetries: 0 });\n }\n\n /**\n * Import a project and wait for completion.\n * Polls getImportStatus until status is 'active' or 'error'.\n */\n async importAndWait(\n params: ImportProjectParams,\n options?: PollingOptions\n ): Promise<MigmaResult<ImportStatusResponse>> {\n const startResult = await this.import(params);\n if (startResult.error) {\n return { data: null, error: startResult.error };\n }\n\n const projectId = startResult.data.projectId;\n\n return poll(\n () => this.getImportStatus(projectId),\n (status) => status.status === 'active' || status.status === 'error',\n options\n );\n }\n}\n","import type { CallOptions, MigmaClient } from '../client';\nimport { randomUUID } from 'node:crypto';\nimport type { MigmaResult } from '../types/common';\nimport type {\n GenerateEmailParams,\n GenerateEmailResponse,\n ImportHtmlEmailParams,\n EmailGenerationStatus,\n Email,\n EditEmailParams,\n EmailEditOperation,\n ListEmailsParams,\n ListEmailsResponse,\n SendTestEmailParams,\n SendTestEmailResponse,\n EmailMetrics,\n EmailLogsParams,\n EmailLogsResponse,\n EmailFavorite,\n} from '../types/emails';\nimport { poll, type PollingOptions } from '../polling';\n\nexport class Emails {\n constructor(private readonly client: MigmaClient) {}\n\n /** List emails for a project */\n async list(\n params: ListEmailsParams\n ): Promise<MigmaResult<ListEmailsResponse>> {\n const { projectId, limit, page, status, search } = params;\n return this.client.get<ListEmailsResponse>('/projects/emails', {\n projectId,\n limit,\n page,\n status,\n search,\n });\n }\n\n /** Start async email generation */\n async generate(\n params: GenerateEmailParams,\n options?: CallOptions\n ): Promise<MigmaResult<GenerateEmailResponse>> {\n return this.client.post<GenerateEmailResponse>(\n '/projects/emails/generate',\n params as unknown as Record<string, unknown>,\n options\n );\n }\n\n /** Convert existing HTML or .eml into editable emails (async). */\n async importHtml(\n params: ImportHtmlEmailParams,\n options?: CallOptions\n ): Promise<MigmaResult<GenerateEmailResponse>> {\n return this.client.post<GenerateEmailResponse>(\n '/projects/emails/import-html',\n params as unknown as Record<string, unknown>,\n options\n );\n }\n\n /** Check email generation status */\n async getGenerationStatus(\n conversationId: string\n ): Promise<MigmaResult<EmailGenerationStatus>> {\n return this.client.get<EmailGenerationStatus>(\n `/projects/emails/${conversationId}/status`\n );\n }\n\n /** Fetch one generated email by email id */\n async get(emailId: string): Promise<MigmaResult<Email>> {\n return this.client.get<Email>(`/emails/${emailId}`);\n }\n\n /** Synchronous edit. No automatic retries; use startEdit for long edits. */\n async edit(\n emailId: string,\n params: EditEmailParams\n ): Promise<MigmaResult<Email>> {\n return this.client.post<Email>(\n `/emails/${emailId}/edit`,\n params as unknown as Record<string, unknown>,\n { maxRetries: 0 }\n );\n }\n\n /** Queue an edit immediately. Retain an explicit key to recover uncertain submissions. */\n async startEdit(\n emailId: string,\n params: EditEmailParams,\n options?: CallOptions\n ): Promise<MigmaResult<EmailEditOperation>> {\n return this.client.post<EmailEditOperation>(\n `/emails/${encodeURIComponent(emailId)}/edit`,\n { ...params, async: true },\n { ...options, idempotencyKey: options?.idempotencyKey || randomUUID() }\n );\n }\n\n /** Poll the exact edit; a completed conversation may belong to an earlier turn. */\n async getEditStatus(emailId: string, editId: string): Promise<MigmaResult<EmailEditOperation>> {\n return this.client.get<EmailEditOperation>(\n `/emails/${encodeURIComponent(emailId)}/edits/${encodeURIComponent(editId)}`\n );\n }\n\n /**\n * Generate an email and wait for completion.\n * Polls getGenerationStatus until status is 'completed' or 'failed'.\n */\n async generateAndWait(\n params: GenerateEmailParams,\n options?: PollingOptions,\n callOptions?: CallOptions\n ): Promise<MigmaResult<EmailGenerationStatus>> {\n const startResult = await this.generate(params, callOptions);\n if (startResult.error) {\n return { data: null, error: startResult.error };\n }\n\n const conversationId = startResult.data.conversationId;\n\n return poll(\n () => this.getGenerationStatus(conversationId),\n (status) => status.status === 'completed' || status.status === 'failed',\n options\n );\n }\n\n /**\n * Import HTML and wait for completion.\n * Polls getGenerationStatus until status is 'completed' or 'failed'.\n */\n async importHtmlAndWait(\n params: ImportHtmlEmailParams,\n options?: PollingOptions,\n callOptions?: CallOptions\n ): Promise<MigmaResult<EmailGenerationStatus>> {\n const startResult = await this.importHtml(params, callOptions);\n if (startResult.error) {\n return { data: null, error: startResult.error };\n }\n\n const conversationId = startResult.data.conversationId;\n\n return poll(\n () => this.getGenerationStatus(conversationId),\n (status) => status.status === 'completed' || status.status === 'failed',\n options\n );\n }\n\n /** Send a test email from a completed conversation */\n async sendTest(\n params: SendTestEmailParams\n ): Promise<MigmaResult<SendTestEmailResponse>> {\n return this.client.post<SendTestEmailResponse>(\n '/emails/test/send',\n params as unknown as Record<string, unknown>\n );\n }\n\n /**\n * Aggregate performance for one generated email across every API send of it:\n * delivery, opens, clicks, bounces, complaints, unsubscribes + a daily time\n * series. Events arrive asynchronously; opens are directional while clicks\n * and delivery events are stronger signals.\n */\n /** Star or unstar one generated email as a design reference. Idempotent. */\n async setFavorite(emailId: string, favorite: boolean): Promise<MigmaResult<EmailFavorite>> {\n return this.client.put<EmailFavorite>(`/emails/${emailId}/favorite`, { favorite });\n }\n\n async metrics(emailId: string): Promise<MigmaResult<EmailMetrics>> {\n return this.client.get<EmailMetrics>(`/emails/${emailId}/metrics`);\n }\n\n /** Per-recipient send log for one generated email (cursor-paginated). */\n async logs(\n emailId: string,\n params?: EmailLogsParams\n ): Promise<MigmaResult<EmailLogsResponse>> {\n return this.client.get<EmailLogsResponse>(`/emails/${emailId}/logs`, {\n limit: params?.limit,\n cursor: params?.cursor,\n status: params?.status,\n });\n }\n}\n","import type { MigmaClient } from '../client';\nimport type { MigmaResult } from '../types/common';\nimport type {\n ValidateAllParams,\n ValidateAllResponse,\n CheckCompatibilityParams,\n CompatibilityResponse,\n AnalyzeLinksParams,\n LinkAnalysisResponse,\n CheckSpellingParams,\n SpellingResponse,\n AnalyzeDeliverabilityParams,\n DeliverabilityResponse,\n} from '../types/validation';\n\nexport class Validation {\n constructor(private readonly client: MigmaClient) {}\n\n async all(params: ValidateAllParams): Promise<MigmaResult<ValidateAllResponse>> {\n return this.client.post<ValidateAllResponse>(\n '/emails/validate/all',\n params as unknown as Record<string, unknown>\n );\n }\n\n async compatibility(\n params: CheckCompatibilityParams\n ): Promise<MigmaResult<CompatibilityResponse>> {\n return this.client.post<CompatibilityResponse>(\n '/emails/validate/compatibility',\n params as unknown as Record<string, unknown>\n );\n }\n\n async links(params: AnalyzeLinksParams): Promise<MigmaResult<LinkAnalysisResponse>> {\n return this.client.post<LinkAnalysisResponse>(\n '/emails/validate/links',\n params as unknown as Record<string, unknown>\n );\n }\n\n async spelling(params: CheckSpellingParams): Promise<MigmaResult<SpellingResponse>> {\n return this.client.post<SpellingResponse>(\n '/emails/validate/spelling',\n params as unknown as Record<string, unknown>\n );\n }\n\n async deliverability(\n params: AnalyzeDeliverabilityParams\n ): Promise<MigmaResult<DeliverabilityResponse>> {\n return this.client.post<DeliverabilityResponse>(\n '/emails/validate/deliverability',\n params as unknown as Record<string, unknown>\n );\n }\n}\n","import type { MigmaClient } from '../client';\nimport type { MigmaResult } from '../types/common';\nimport type {\n CreatePreviewParams,\n CreatePreviewResponse,\n GetPreviewResponse,\n GetPreviewStatusResponse,\n GetDevicePreviewResponse,\n GetSupportedDevicesResponse,\n} from '../types/previews';\nimport { poll, type PollingOptions } from '../polling';\n\nexport class Previews {\n constructor(private readonly client: MigmaClient) {}\n\n async create(\n params: CreatePreviewParams\n ): Promise<MigmaResult<CreatePreviewResponse>> {\n return this.client.post<CreatePreviewResponse>(\n '/emails/previews',\n params as unknown as Record<string, unknown>\n );\n }\n\n async get(previewId: string): Promise<MigmaResult<GetPreviewResponse>> {\n return this.client.get<GetPreviewResponse>(`/emails/previews/${previewId}`);\n }\n\n async getStatus(\n previewId: string\n ): Promise<MigmaResult<GetPreviewStatusResponse>> {\n return this.client.get<GetPreviewStatusResponse>(\n `/emails/previews/${previewId}/status`\n );\n }\n\n async getDevice(\n previewId: string,\n deviceKey: string\n ): Promise<MigmaResult<GetDevicePreviewResponse>> {\n return this.client.get<GetDevicePreviewResponse>(\n `/emails/previews/${previewId}/devices/${deviceKey}`\n );\n }\n\n async getSupportedDevices(): Promise<MigmaResult<GetSupportedDevicesResponse>> {\n return this.client.get<GetSupportedDevicesResponse>(\n '/emails/devices/supported'\n );\n }\n\n /**\n * Create a preview and wait for completion.\n * Polls getStatus until status is 'COMPLETED', 'PARTIAL_SUCCESS', or 'FAILED'.\n */\n async createAndWait(\n params: CreatePreviewParams,\n options?: PollingOptions\n ): Promise<MigmaResult<GetPreviewResponse>> {\n const startResult = await this.create(params);\n if (startResult.error) {\n return { data: null, error: startResult.error };\n }\n\n const previewId = startResult.data.previewId;\n\n return poll(\n () => this.get(previewId),\n (preview) =>\n preview.status === 'COMPLETED' ||\n preview.status === 'PARTIAL_SUCCESS' ||\n preview.status === 'FAILED',\n options\n );\n }\n}\n","import type { MigmaClient } from '../client';\nimport type { MigmaResult } from '../types/common';\nimport type {\n ExportResult,\n ExportFormatsResponse,\n ExportStatusResponse,\n HubspotExportParams,\n} from '../types/export';\n\nexport class Export {\n constructor(private readonly client: MigmaClient) {}\n\n async getFormats(): Promise<MigmaResult<ExportFormatsResponse>> {\n return this.client.get<ExportFormatsResponse>('/export/formats');\n }\n\n async getStatus(conversationId: string): Promise<MigmaResult<ExportStatusResponse>> {\n return this.client.get<ExportStatusResponse>(\n `/export/status/${conversationId}`\n );\n }\n\n async html(conversationId: string): Promise<MigmaResult<ExportResult>> {\n return this.client.get<ExportResult>(`/export/html/${conversationId}`);\n }\n\n async pdf(conversationId: string): Promise<MigmaResult<ExportResult>> {\n return this.client.get<ExportResult>(`/export/pdf/${conversationId}`);\n }\n\n async png(conversationId: string): Promise<MigmaResult<ExportResult>> {\n return this.client.get<ExportResult>(`/export/png/${conversationId}`);\n }\n\n async klaviyo(\n conversationId: string,\n klaviyoType?: 'html' | 'hybrid' | 'code'\n ): Promise<MigmaResult<ExportResult>> {\n return this.client.get<ExportResult>(\n `/export/klaviyo/${conversationId}`,\n { klaviyoType }\n );\n }\n\n async mailchimp(conversationId: string): Promise<MigmaResult<ExportResult>> {\n return this.client.get<ExportResult>(`/export/mailchimp/${conversationId}`);\n }\n\n async hubspot(params: HubspotExportParams): Promise<MigmaResult<ExportResult>> {\n return this.client.post<ExportResult>(\n '/export/hubspot',\n params as unknown as Record<string, unknown>\n );\n }\n}\n","import type { MigmaClient } from '../client';\nimport type { MigmaResult } from '../types/common';\nimport type {\n Domain,\n CreateDomainParams,\n UpdateDomainParams,\n DomainVerificationResult,\n DomainAvailability,\n CreateManagedDomainParams,\n ProvisionStreamParams,\n SetupDomainParams,\n SetupDomainResponse,\n DomainDeleteResponse,\n} from '../types/domains';\n\nexport class Domains {\n constructor(private readonly client: MigmaClient) {}\n\n async list(): Promise<MigmaResult<Domain[]>> {\n return this.client.get<Domain[]>('/domains');\n }\n\n async create(params: CreateDomainParams): Promise<MigmaResult<Domain>> {\n return this.client.post<Domain>('/domains', params as unknown as Record<string, unknown>);\n }\n\n async get(domain: string): Promise<MigmaResult<Domain>> {\n return this.client.get<Domain>(`/domains/${domain}`);\n }\n\n async verify(domain: string): Promise<MigmaResult<DomainVerificationResult>> {\n return this.client.post<DomainVerificationResult>(`/domains/${domain}/verify`);\n }\n\n async update(domain: string, params: UpdateDomainParams): Promise<MigmaResult<Domain>> {\n return this.client.patch<Domain>(`/domains/${domain}`, params as unknown as Record<string, unknown>);\n }\n\n async remove(domain: string): Promise<MigmaResult<DomainDeleteResponse>> {\n return this.client.delete<DomainDeleteResponse>(`/domains/${domain}`);\n }\n\n async checkAvailability(prefix: string): Promise<MigmaResult<DomainAvailability>> {\n return this.client.get<DomainAvailability>(`/domains/managed/check/${prefix}`);\n }\n\n async listManaged(): Promise<MigmaResult<Domain[]>> {\n return this.client.get<Domain[]>('/domains/managed');\n }\n\n async createManaged(params: CreateManagedDomainParams): Promise<MigmaResult<Domain>> {\n return this.client.post<Domain>('/domains/managed', params as unknown as Record<string, unknown>);\n }\n\n async removeManaged(domain: string): Promise<MigmaResult<DomainDeleteResponse>> {\n return this.client.delete<DomainDeleteResponse>(`/domains/managed/${domain}`);\n }\n\n /**\n * Provision a transactional or marketing stream identity on a domain you own.\n * Creates notify.<rootDomain> (transactional) or send.<rootDomain> (marketing)\n * to isolate transactional reputation from marketing. Returns DNS records to publish.\n */\n async provisionStream(params: ProvisionStreamParams): Promise<MigmaResult<Domain>> {\n return this.client.post<Domain>('/domains/streams', params as unknown as Record<string, unknown>);\n }\n\n /**\n * Provision BOTH stream identities for a domain you own in one call:\n * send.<rootDomain> (marketing) and notify.<rootDomain> (transactional).\n * Idempotent. Returns both domains with DNS records to publish.\n */\n async setup(params: SetupDomainParams): Promise<MigmaResult<SetupDomainResponse>> {\n return this.client.post<SetupDomainResponse>('/domains/setup', params as unknown as Record<string, unknown>);\n }\n}\n","import type { MigmaClient } from '../client';\nimport type { MigmaResult } from '../types/common';\nimport type {\n AddCustomDnsRecordParams,\n CustomDnsRecord,\n CustomDnsRecordList,\n DomainPurchaseCheckout,\n DomainPurchaseParams,\n DomainPurchaseQuote,\n DomainPurchaseSearchParams,\n DomainRegistration,\n} from '../types/domain-purchases';\n\nexport class DomainPurchases {\n constructor(private readonly client: MigmaClient) {}\n\n /** Availability and price quotes for domains you could buy. */\n async search(params: DomainPurchaseSearchParams): Promise<MigmaResult<{ quotes: DomainPurchaseQuote[] }>> {\n return this.client.get<{ quotes: DomainPurchaseQuote[] }>('/domains/purchase/search', {\n q: params.q,\n limit: params.limit,\n });\n }\n\n /**\n * Start buying a domain. Returns a Stripe checkout URL the account owner\n * opens in a browser; the domain registers after payment clears. Requires\n * an active paid Migma subscription.\n */\n async create(params: DomainPurchaseParams): Promise<MigmaResult<DomainPurchaseCheckout>> {\n return this.client.post<DomainPurchaseCheckout>('/domains/purchase', params as unknown as Record<string, unknown>);\n }\n\n /** Purchase history and status: payment_pending → registering → active. */\n async registrations(params?: { limit?: number }): Promise<MigmaResult<{ registrations: DomainRegistration[] }>> {\n return this.client.get<{ registrations: DomainRegistration[] }>('/domains/purchase/registrations', {\n limit: params?.limit,\n });\n }\n\n // DNS records live on Migma-hosted zones, which exist exactly for domains\n // bought in Migma — hence they sit on this resource even though the API\n // path is /domains/:domain/dns-records.\n\n /** DNS records you added to a domain bought in Migma. `managed: false` = zone not hosted by Migma. */\n async listDnsRecords(domain: string): Promise<MigmaResult<CustomDnsRecordList>> {\n return this.client.get<CustomDnsRecordList>(`/domains/${encodeURIComponent(domain)}/dns-records`);\n }\n\n /**\n * Add a DNS record (A, AAAA, CNAME, MX, TXT, or NS) to a domain bought in\n * Migma. Migma's email sending records are protected and cannot be\n * overridden; the root and www stay with domain forwarding.\n */\n async addDnsRecord(domain: string, params: AddCustomDnsRecordParams): Promise<MigmaResult<{ record: CustomDnsRecord }>> {\n return this.client.post<{ record: CustomDnsRecord }>(\n `/domains/${encodeURIComponent(domain)}/dns-records`,\n params as unknown as Record<string, unknown>,\n );\n }\n\n /** Remove a DNS record you added earlier (never Migma's own records). */\n async removeDnsRecord(domain: string, recordId: string): Promise<MigmaResult<{ ok: boolean }>> {\n return this.client.delete<{ ok: boolean }>(\n `/domains/${encodeURIComponent(domain)}/dns-records/${encodeURIComponent(recordId)}`,\n );\n }\n}\n","import type { MigmaClient } from '../client';\nimport type { MigmaResult } from '../types/common';\nimport type { CreditStatus, UpgradeLink, UpgradeLinkParams } from '../types/billing';\n\nexport class Billing {\n constructor(private readonly client: MigmaClient) {}\n\n /** Plan and remaining credits for the API key owner. */\n async credits(): Promise<MigmaResult<CreditStatus>> {\n return this.client.get<CreditStatus>('/billing/credits');\n }\n\n /**\n * Create checkout for a user-chosen new plan, or omit plan for the existing\n * customer's billing portal. Passing plan for an active subscription can\n * change it and charge prorated payment immediately; obtain charge approval.\n * The returned URL alone does not confirm payment. Do not retry unknown writes.\n */\n async upgradeLink(params: UpgradeLinkParams = {}): Promise<MigmaResult<UpgradeLink>> {\n return this.client.post<UpgradeLink>('/billing/upgrade-link', params as unknown as Record<string, unknown>);\n }\n}\n","import type { MigmaClient } from '../client';\nimport type { MigmaResult } from '../types/common';\nimport type {\n WebhookDetail,\n CreateWebhookParams,\n CreateWebhookResponse,\n UpdateWebhookParams,\n ListWebhooksResponse,\n WebhookTestResult,\n WebhookDeliveriesResponse,\n WebhookEventsResponse,\n} from '../types/webhooks';\n\nexport class Webhooks {\n constructor(private readonly client: MigmaClient) {}\n\n async list(): Promise<MigmaResult<ListWebhooksResponse>> {\n return this.client.get<ListWebhooksResponse>('/webhooks');\n }\n\n async create(params: CreateWebhookParams): Promise<MigmaResult<CreateWebhookResponse>> {\n return this.client.post<CreateWebhookResponse>('/webhooks', params as unknown as Record<string, unknown>);\n }\n\n async get(webhookId: string): Promise<MigmaResult<WebhookDetail>> {\n return this.client.get<WebhookDetail>(`/webhooks/${webhookId}`);\n }\n\n async update(\n webhookId: string,\n params: UpdateWebhookParams\n ): Promise<MigmaResult<{ updated: boolean }>> {\n return this.client.patch<{ updated: boolean }>(\n `/webhooks/${webhookId}`,\n params as unknown as Record<string, unknown>\n );\n }\n\n async remove(webhookId: string): Promise<MigmaResult<{ deleted: boolean }>> {\n return this.client.delete<{ deleted: boolean }>(`/webhooks/${webhookId}`);\n }\n\n async test(webhookId: string): Promise<MigmaResult<WebhookTestResult>> {\n return this.client.post<WebhookTestResult>(`/webhooks/${webhookId}/test`);\n }\n\n async getDeliveries(\n webhookId: string,\n limit?: number\n ): Promise<MigmaResult<WebhookDeliveriesResponse>> {\n return this.client.get<WebhookDeliveriesResponse>(\n `/webhooks/${webhookId}/deliveries`,\n { limit }\n );\n }\n\n async getEvents(): Promise<MigmaResult<WebhookEventsResponse>> {\n return this.client.get<WebhookEventsResponse>('/webhooks/events');\n }\n\n async getStats(): Promise<MigmaResult<Record<string, unknown>>> {\n return this.client.get<Record<string, unknown>>('/webhooks/stats');\n }\n}\n","import type { MigmaClient } from '../client';\nimport type { MigmaResult, MessageResponse } from '../types/common';\nimport type {\n KnowledgeBaseEntry,\n KnowledgeBaseListResponse,\n AddKnowledgeBaseParams,\n UpdateKnowledgeBaseParams,\n} from '../types/knowledge-base';\n\nexport class KnowledgeBase {\n constructor(private readonly client: MigmaClient) {}\n\n async list(projectId: string): Promise<MigmaResult<KnowledgeBaseListResponse>> {\n return this.client.get<KnowledgeBaseListResponse>(\n `/projects/${projectId}/knowledge-base`\n );\n }\n\n async add(\n projectId: string,\n params: AddKnowledgeBaseParams\n ): Promise<MigmaResult<KnowledgeBaseEntry>> {\n return this.client.post<KnowledgeBaseEntry>(\n `/projects/${projectId}/knowledge-base`,\n params as unknown as Record<string, unknown>\n );\n }\n\n async update(\n projectId: string,\n entryId: string,\n params: UpdateKnowledgeBaseParams\n ): Promise<MigmaResult<KnowledgeBaseEntry>> {\n return this.client.put<KnowledgeBaseEntry>(\n `/projects/${projectId}/knowledge-base/${entryId}`,\n params as unknown as Record<string, unknown>\n );\n }\n\n async remove(\n projectId: string,\n entryId: string\n ): Promise<MigmaResult<MessageResponse>> {\n return this.client.delete<MessageResponse>(\n `/projects/${projectId}/knowledge-base/${entryId}`\n );\n }\n}\n","import type { MigmaClient } from '../client';\nimport type { MigmaResult, MessageResponse } from '../types/common';\nimport type {\n ProjectImage,\n AddImageParams,\n UpdateImageParams,\n UpdateLogosParams,\n LogosResponse,\n} from '../types/images';\n\nexport class Images {\n constructor(private readonly client: MigmaClient) {}\n\n async add(\n projectId: string,\n params: AddImageParams\n ): Promise<MigmaResult<ProjectImage>> {\n return this.client.post<ProjectImage>(\n `/projects/${projectId}/images`,\n params as unknown as Record<string, unknown>\n );\n }\n\n async update(\n projectId: string,\n params: UpdateImageParams\n ): Promise<MigmaResult<ProjectImage>> {\n return this.client.put<ProjectImage>(\n `/projects/${projectId}/images`,\n params as unknown as Record<string, unknown>\n );\n }\n\n async remove(\n projectId: string,\n imageUrl: string\n ): Promise<MigmaResult<MessageResponse>> {\n return this.client.delete<MessageResponse>(\n `/projects/${projectId}/images`,\n { imageUrl }\n );\n }\n\n async updateLogos(\n projectId: string,\n params: UpdateLogosParams\n ): Promise<MigmaResult<LogosResponse>> {\n return this.client.put<LogosResponse>(\n `/projects/${projectId}/logos`,\n params as unknown as Record<string, unknown>\n );\n }\n}\n","import type { CallOptions, MigmaClient } from '../client';\nimport type { MigmaResult } from '../types/common';\nimport type {\n Campaign,\n CampaignLogsParams,\n CampaignLogsResponse,\n CampaignStats,\n CreateCampaignParams,\n ListCampaignsParams,\n ListCampaignsResponse,\n ScheduleCampaignParams,\n} from '../types/campaigns';\n\nexport class Campaigns {\n constructor(private readonly client: MigmaClient) {}\n\n async list(params: ListCampaignsParams): Promise<MigmaResult<ListCampaignsResponse>> {\n const { projectId, status, page, limit, archived } = params;\n return this.client.get<ListCampaignsResponse>('/campaigns', {\n projectId,\n status,\n page,\n limit,\n archived,\n });\n }\n\n async create(params: CreateCampaignParams, options?: CallOptions): Promise<MigmaResult<Campaign>> {\n return this.client.post<Campaign>('/campaigns', params as unknown as Record<string, unknown>, options);\n }\n\n async get(id: string): Promise<MigmaResult<Campaign>> {\n return this.client.get<Campaign>(`/campaigns/${id}`);\n }\n\n async send(id: string, options?: CallOptions): Promise<MigmaResult<Campaign>> {\n return this.client.post<Campaign>(`/campaigns/${id}/send`, undefined, options);\n }\n\n async schedule(id: string, params: ScheduleCampaignParams, options?: CallOptions): Promise<MigmaResult<Campaign>> {\n return this.client.post<Campaign>(`/campaigns/${id}/schedule`, params as unknown as Record<string, unknown>, options);\n }\n\n async cancel(id: string, options?: CallOptions): Promise<MigmaResult<Campaign>> {\n return this.client.post<Campaign>(`/campaigns/${id}/cancel`, undefined, options);\n }\n\n /** Aggregated engagement metrics for a campaign (cached, may be slightly stale). */\n async stats(id: string): Promise<MigmaResult<CampaignStats>> {\n return this.client.get<CampaignStats>(`/campaigns/${id}/stats`);\n }\n\n /** Per-recipient email logs for a campaign (cursor-paginated). */\n async logs(id: string, params?: CampaignLogsParams): Promise<MigmaResult<CampaignLogsResponse>> {\n return this.client.get<CampaignLogsResponse>(`/campaigns/${id}/logs`, {\n limit: params?.limit,\n cursor: params?.cursor,\n status: params?.status,\n });\n }\n\n async archive(id: string): Promise<MigmaResult<Campaign>> {\n return this.client.post<Campaign>(`/campaigns/${id}/archive`);\n }\n\n async unarchive(id: string): Promise<MigmaResult<Campaign>> {\n return this.client.post<Campaign>(`/campaigns/${id}/unarchive`);\n }\n}\n","import type { MigmaClient } from '../client';\nimport type { MigmaResult } from '../types/common';\nimport type { SendingMetrics, SendingMetricsParams } from '../types/metrics';\n\nexport class Metrics {\n constructor(private readonly client: MigmaClient) {}\n\n async sending(params?: SendingMetricsParams): Promise<MigmaResult<SendingMetrics>> {\n return this.client.get<SendingMetrics>('/metrics/sending', {\n months: params?.months,\n });\n }\n}\n","import type { MigmaClient } from '../client';\nimport type { MigmaResult } from '../types/common';\nimport type { ListWorkspacesResponse } from '../types/workspaces';\n\nexport class Workspaces {\n constructor(private readonly client: MigmaClient) {}\n\n /**\n * Workspaces the API key owner belongs to. Pass a workspace id as\n * `organizationId` to projects.list() to scope brands to it.\n */\n async list(): Promise<MigmaResult<ListWorkspacesResponse>> {\n return this.client.get<ListWorkspacesResponse>('/workspaces');\n }\n}\n","import { MigmaClient } from './client';\nimport { Contacts } from './resources/contacts';\nimport { Tags } from './resources/tags';\nimport { Segments } from './resources/segments';\nimport { Topics } from './resources/topics';\nimport { Sending } from './resources/sending';\nimport { Projects } from './resources/projects';\nimport { Emails } from './resources/emails';\nimport { Validation } from './resources/validation';\nimport { Previews } from './resources/previews';\nimport { Export } from './resources/export';\nimport { Domains } from './resources/domains';\nimport { DomainPurchases } from './resources/domain-purchases';\nimport { Billing } from './resources/billing';\nimport { Webhooks } from './resources/webhooks';\nimport { KnowledgeBase } from './resources/knowledge-base';\nimport { Images } from './resources/images';\nimport { Campaigns } from './resources/campaigns';\nimport { Metrics } from './resources/metrics';\nimport { Workspaces } from './resources/workspaces';\n\nexport interface MigmaConfig {\n /** API base URL. Default: 'https://api.migma.ai/v1' */\n baseUrl?: string;\n /** Max retries on 5xx/429 errors. Default: 2 */\n maxRetries?: number;\n /** Base delay between retries in ms. Default: 1000 */\n retryDelay?: number;\n}\n\nexport class Migma {\n private readonly client: MigmaClient;\n\n readonly contacts: Contacts;\n readonly tags: Tags;\n readonly segments: Segments;\n readonly topics: Topics;\n readonly sending: Sending;\n readonly projects: Projects;\n readonly emails: Emails;\n readonly validation: Validation;\n readonly previews: Previews;\n readonly export: Export;\n readonly domains: Domains;\n readonly domainPurchases: DomainPurchases;\n readonly billing: Billing;\n readonly webhooks: Webhooks;\n readonly knowledgeBase: KnowledgeBase;\n readonly images: Images;\n readonly campaigns: Campaigns;\n readonly metrics: Metrics;\n readonly workspaces: Workspaces;\n\n constructor(apiKey: string, config?: MigmaConfig) {\n if (!apiKey) {\n throw new Error(\n 'Missing API key. Pass it to the constructor: `new Migma(\"your-api-key\")`'\n );\n }\n\n this.client = new MigmaClient(apiKey, {\n baseUrl: config?.baseUrl ?? 'https://api.migma.ai/v1',\n maxRetries: config?.maxRetries ?? 2,\n retryDelay: config?.retryDelay ?? 1000,\n });\n\n this.contacts = new Contacts(this.client);\n this.tags = new Tags(this.client);\n this.segments = new Segments(this.client);\n this.topics = new Topics(this.client);\n this.sending = new Sending(this.client);\n this.projects = new Projects(this.client);\n this.emails = new Emails(this.client);\n this.validation = new Validation(this.client);\n this.previews = new Previews(this.client);\n this.export = new Export(this.client);\n this.domains = new Domains(this.client);\n this.domainPurchases = new DomainPurchases(this.client);\n this.billing = new Billing(this.client);\n this.webhooks = new Webhooks(this.client);\n this.knowledgeBase = new KnowledgeBase(this.client);\n this.images = new Images(this.client);\n this.campaigns = new Campaigns(this.client);\n this.metrics = new Metrics(this.client);\n this.workspaces = new Workspaces(this.client);\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/agent-identity.ts","../src/errors.ts","../src/client.ts","../src/resources/contacts.ts","../src/resources/tags.ts","../src/resources/segments.ts","../src/resources/topics.ts","../src/resources/sending.ts","../src/polling.ts","../src/resources/projects.ts","../src/resources/emails.ts","../src/resources/validation.ts","../src/resources/previews.ts","../src/resources/export.ts","../src/resources/domains.ts","../src/resources/domain-purchases.ts","../src/resources/billing.ts","../src/resources/webhooks.ts","../src/resources/knowledge-base.ts","../src/resources/images.ts","../src/resources/campaigns.ts","../src/resources/metrics.ts","../src/resources/workspaces.ts","../src/migma.ts"],"names":["MigmaErrorCode"],"mappings":"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","file":"index.mjs","sourcesContent":["// Auto-identify the AI agent driving this SDK so Migma can show live\n// presence (\"Claude Code · creating\") in the user's dashboard. An explicit\n// MIGMA_AGENT_ID always wins; host detection is best-effort and silent.\nconst AGENT_ID_PATTERN = /^ai:[a-z0-9][a-z0-9._-]{0,62}$/;\n\nconst HOST_AGENT_ENV: Array<{ env: string; id: string }> = [\n { env: 'CLAUDECODE', id: 'ai:claude-code' },\n { env: 'CURSOR_TRACE_ID', id: 'ai:cursor' },\n { env: 'CODEX_HOME', id: 'ai:codex' },\n];\n\nexport function detectAgentId(): string | null {\n if (typeof process === 'undefined' || !process.env) return null;\n\n const explicit = (process.env.MIGMA_AGENT_ID || '').trim().toLowerCase();\n if (AGENT_ID_PATTERN.test(explicit)) return explicit;\n\n for (const { env, id } of HOST_AGENT_ENV) {\n if (process.env[env]) return id;\n }\n return null;\n}\n","export enum MigmaErrorCode {\n VALIDATION_ERROR = 'validation_error',\n NOT_FOUND = 'not_found',\n UNAUTHORIZED = 'unauthorized',\n FORBIDDEN = 'forbidden',\n RATE_LIMIT_EXCEEDED = 'rate_limit_exceeded',\n CONFLICT = 'conflict',\n TIMEOUT = 'timeout',\n NETWORK_ERROR = 'network_error',\n INTERNAL_ERROR = 'internal_error',\n UNKNOWN = 'unknown',\n}\n\nexport class MigmaError extends Error {\n readonly statusCode: number;\n readonly code: MigmaErrorCode;\n\n constructor(message: string, statusCode: number, code?: MigmaErrorCode) {\n super(message);\n this.name = 'MigmaError';\n this.statusCode = statusCode;\n this.code = code ?? MigmaError.codeFromStatus(statusCode);\n }\n\n private static codeFromStatus(status: number): MigmaErrorCode {\n switch (status) {\n case 400:\n return MigmaErrorCode.VALIDATION_ERROR;\n case 401:\n return MigmaErrorCode.UNAUTHORIZED;\n case 403:\n return MigmaErrorCode.FORBIDDEN;\n case 404:\n return MigmaErrorCode.NOT_FOUND;\n case 409:\n return MigmaErrorCode.CONFLICT;\n case 429:\n return MigmaErrorCode.RATE_LIMIT_EXCEEDED;\n default:\n if (status >= 500) return MigmaErrorCode.INTERNAL_ERROR;\n return MigmaErrorCode.UNKNOWN;\n }\n }\n\n toJSON() {\n return {\n name: this.name,\n message: this.message,\n statusCode: this.statusCode,\n code: this.code,\n };\n }\n}\n","import { detectAgentId } from './agent-identity';\nimport { MigmaError, MigmaErrorCode } from './errors';\nimport type { ApiResponse, MigmaResult } from './types/common';\n\nexport interface ClientConfig {\n baseUrl: string;\n maxRetries: number;\n retryDelay: number;\n}\n\ntype HttpMethod = 'GET' | 'POST' | 'PATCH' | 'PUT' | 'DELETE';\n\ninterface RequestOptions {\n method: HttpMethod;\n path: string;\n body?: Record<string, unknown>;\n query?: Record<string, string | number | boolean | undefined>;\n headers?: Record<string, string>;\n maxRetries?: number;\n}\n\n/** Per-call options for write methods (POST/PATCH/DELETE). */\nexport interface CallOptions {\n /** Override automatic retries for this call. Use 0 for unsafe writes. */\n maxRetries?: number;\n /**\n * Optional Idempotency-Key (max 100 chars). Same key + same body within 24h\n * replays the original response; a different body returns 409 IDEMPOTENCY_CONFLICT.\n * Reused across the SDK's own automatic retries so a retried call never duplicates.\n */\n idempotencyKey?: string;\n}\n\nexport class MigmaClient {\n private readonly apiKey: string;\n private readonly config: ClientConfig;\n private readonly headers: Record<string, string>;\n\n constructor(apiKey: string, config: ClientConfig) {\n this.apiKey = apiKey;\n this.config = config;\n\n this.headers = {\n Authorization: `Bearer ${this.apiKey}`,\n 'Content-Type': 'application/json',\n 'User-Agent': 'migma-node/1.0.0',\n };\n const agentId = detectAgentId();\n if (agentId) {\n this.headers['X-Agent-Id'] = agentId;\n }\n }\n\n async request<T>(options: RequestOptions): Promise<MigmaResult<T>> {\n const url = this.buildUrl(options.path, options.query);\n const attempts = (options.maxRetries ?? this.config.maxRetries) + 1;\n\n let lastError: MigmaError | null = null;\n\n for (let attempt = 0; attempt < attempts; attempt++) {\n try {\n const response = await fetch(url, {\n method: options.method,\n headers: { ...this.headers, ...options.headers },\n body: options.body ? JSON.stringify(options.body) : undefined,\n });\n\n const json = await readJson<T>(response);\n\n if (!response.ok || !json?.success) {\n const error = new MigmaError(failureMessage(response, json), response.status);\n\n if (response.status >= 500 || response.status === 429) {\n lastError = error;\n if (attempt < attempts - 1) {\n const delay =\n response.status === 429\n ? (this.parseRetryAfter(response) ??\n this.config.retryDelay * (attempt + 1))\n : this.config.retryDelay * Math.pow(2, attempt);\n await this.sleep(delay);\n continue;\n }\n }\n\n return { data: null, error };\n }\n\n return { data: json.data as T, error: null };\n } catch (err: unknown) {\n lastError = new MigmaError(\n err instanceof Error ? err.message : 'Network error',\n 0,\n MigmaErrorCode.NETWORK_ERROR\n );\n\n if (attempt < attempts - 1) {\n await this.sleep(this.config.retryDelay * Math.pow(2, attempt));\n continue;\n }\n }\n }\n\n return { data: null, error: lastError! };\n }\n\n /**\n * For endpoints where the API returns `{ success, data, count }` and we want\n * both the data array and the count together.\n */\n async requestWithCount<T>(\n options: RequestOptions\n ): Promise<MigmaResult<{ data: T; count: number }>> {\n const url = this.buildUrl(options.path, options.query);\n\n try {\n const response = await fetch(url, {\n method: options.method,\n headers: { ...this.headers, ...options.headers },\n body: options.body ? JSON.stringify(options.body) : undefined,\n });\n\n const json = await readJson<T>(response);\n\n if (!response.ok || !json?.success) {\n return {\n data: null,\n error: new MigmaError(failureMessage(response, json), response.status),\n };\n }\n\n return {\n data: { data: json.data as T, count: json.count ?? 0 },\n error: null,\n };\n } catch (err: unknown) {\n return {\n data: null,\n error: new MigmaError(\n err instanceof Error ? err.message : 'Network error',\n 0,\n MigmaErrorCode.NETWORK_ERROR\n ),\n };\n }\n }\n\n async get<T>(\n path: string,\n query?: Record<string, string | number | boolean | undefined>\n ) {\n return this.request<T>({ method: 'GET', path, query });\n }\n\n async getWithCount<T>(\n path: string,\n query?: Record<string, string | number | boolean | undefined>\n ) {\n return this.requestWithCount<T>({ method: 'GET', path, query });\n }\n\n async post<T>(path: string, body?: Record<string, unknown>, options?: CallOptions) {\n return this.request<T>({ method: 'POST', path, body, headers: this.callHeaders(options), maxRetries: options?.maxRetries });\n }\n\n async patch<T>(path: string, body?: Record<string, unknown>, options?: CallOptions) {\n return this.request<T>({ method: 'PATCH', path, body, headers: this.callHeaders(options), maxRetries: options?.maxRetries });\n }\n\n async put<T>(path: string, body?: Record<string, unknown>) {\n return this.request<T>({ method: 'PUT', path, body });\n }\n\n async delete<T>(\n path: string,\n query?: Record<string, string | number | boolean | undefined>,\n options?: CallOptions\n ) {\n return this.request<T>({ method: 'DELETE', path, query, headers: this.callHeaders(options), maxRetries: options?.maxRetries });\n }\n\n private callHeaders(options?: CallOptions): Record<string, string> | undefined {\n if (options?.idempotencyKey) {\n return { 'Idempotency-Key': options.idempotencyKey };\n }\n return undefined;\n }\n\n private buildUrl(\n path: string,\n query?: Record<string, string | number | boolean | undefined>\n ): string {\n const url = new URL(`${this.config.baseUrl}${path}`);\n if (query) {\n for (const [key, value] of Object.entries(query)) {\n if (value !== undefined && value !== null) {\n url.searchParams.set(key, String(value));\n }\n }\n }\n return url.toString();\n }\n\n private parseRetryAfter(response: Response): number | null {\n const retryAfter = response.headers.get('Retry-After');\n if (retryAfter) {\n const seconds = parseInt(retryAfter, 10);\n if (!isNaN(seconds)) return seconds * 1000;\n }\n return null;\n }\n\n private sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n }\n}\n\n/** A gateway or proxy can answer with an HTML page; report its status instead of a JSON parse error. */\nasync function readJson<T>(response: Response): Promise<ApiResponse<T> | null> {\n const text = await response.text();\n try {\n return JSON.parse(text) as ApiResponse<T>;\n } catch {\n return null;\n }\n}\n\nfunction failureMessage(response: Response, json: ApiResponse<unknown> | null): string {\n if (json?.error) return json.error;\n return json\n ? `Request failed with status ${response.status}`\n : `Request failed with status ${response.status}: the server did not return JSON`;\n}\n","import type { CallOptions, MigmaClient } from '../client';\nimport type { MigmaResult, DeleteResponse } from '../types/common';\nimport type {\n Contact,\n CreateContactParams,\n UpdateContactParams,\n ListContactsParams,\n ListContactsResponse,\n BulkImportParams,\n BulkImportResponse,\n BulkImportJobStatus,\n BatchDeleteContactsParams,\n BatchDeleteResponse,\n ChangeStatusParams,\n CreateContactExportParams,\n ContactExportStatus,\n ListProviderImportSourcesParams,\n ProviderImportSource,\n ImportFromProviderParams,\n ProviderImportStarted,\n} from '../types/contacts';\n\nexport class Contacts {\n constructor(private readonly client: MigmaClient) {}\n\n async create(params: CreateContactParams, options?: CallOptions): Promise<MigmaResult<Contact>> {\n return this.client.post<Contact>('/contacts', params as unknown as Record<string, unknown>, options);\n }\n\n async list(params: ListContactsParams): Promise<MigmaResult<ListContactsResponse>> {\n const { projectId, page, limit, tags, status, search } = params;\n return this.client.getWithCount<Contact[]>('/contacts', {\n projectId,\n page,\n limit,\n tags,\n status,\n search,\n }) as Promise<MigmaResult<ListContactsResponse>>;\n }\n\n async get(id: string, projectId: string): Promise<MigmaResult<Contact>> {\n return this.client.get<Contact>(`/contacts/${id}`, { projectId });\n }\n\n async update(id: string, params: UpdateContactParams, options?: CallOptions): Promise<MigmaResult<Contact>> {\n return this.client.patch<Contact>(`/contacts/${id}`, params as unknown as Record<string, unknown>, options);\n }\n\n async remove(id: string, projectId: string, options?: CallOptions): Promise<MigmaResult<DeleteResponse>> {\n return this.client.delete<DeleteResponse>(`/contacts/${id}`, { projectId }, options);\n }\n\n async bulkImport(params: BulkImportParams, options?: CallOptions): Promise<MigmaResult<BulkImportResponse>> {\n return this.client.post<BulkImportResponse>('/contacts/bulk', params as unknown as Record<string, unknown>, options);\n }\n\n async getBulkImportStatus(jobId: string): Promise<MigmaResult<BulkImportJobStatus>> {\n return this.client.get<BulkImportJobStatus>(`/contacts/bulk/${jobId}`);\n }\n\n /** Batch delete contacts by email (up to 1000). Emails with no match come back in `notFound`. */\n async bulkDeleteByEmail(params: BatchDeleteContactsParams, options?: CallOptions): Promise<MigmaResult<BatchDeleteResponse>> {\n return this.client.post<BatchDeleteResponse>('/contacts/bulk-delete', params as unknown as Record<string, unknown>, options);\n }\n\n /** Queue a filtered CSV export. Poll getExport; do not list every contact to build a CSV. */\n async createExport(params: CreateContactExportParams, options?: CallOptions): Promise<MigmaResult<ContactExportStatus>> {\n return this.client.post<ContactExportStatus>('/contacts/exports', params as unknown as Record<string, unknown>, { ...options, maxRetries: options?.idempotencyKey ? options.maxRetries : 0 });\n }\n\n async getExport(jobId: string, projectId: string): Promise<MigmaResult<ContactExportStatus>> {\n return this.client.get<ContactExportStatus>(`/contacts/exports/${encodeURIComponent(jobId)}`, { projectId });\n }\n\n /** Lists and segments in the brand's connected Klaviyo, Mailchimp or HubSpot account. A 409 error message includes the link to connect it. */\n async listProviderImportSources(params: ListProviderImportSourcesParams): Promise<MigmaResult<{ sources: ProviderImportSource[] }>> {\n const { provider, projectId, connectionId } = params;\n return this.client.get<{ sources: ProviderImportSource[] }>(`/contacts/imports/providers/${encodeURIComponent(provider)}/sources`, { projectId, connectionId });\n }\n\n /** Import provider sources as contacts (subscribed only by default). Poll GET /contacts/imports/{id} for counts. */\n async importFromProvider(params: ImportFromProviderParams, options?: CallOptions): Promise<MigmaResult<ProviderImportStarted>> {\n return this.client.post<ProviderImportStarted>('/contacts/imports/provider', params as unknown as Record<string, unknown>, { ...options, maxRetries: options?.idempotencyKey ? options.maxRetries : 0 });\n }\n\n async changeStatus(params: ChangeStatusParams, options?: CallOptions): Promise<MigmaResult<{ success: boolean }>> {\n return this.client.post<{ success: boolean }>('/contacts/status', params as unknown as Record<string, unknown>, options);\n }\n}\n","import type { MigmaClient } from '../client';\nimport type { MigmaResult, DeleteResponse } from '../types/common';\nimport type {\n Tag,\n CreateTagParams,\n UpdateTagParams,\n ListTagsParams,\n ListTagsResponse,\n} from '../types/tags';\n\nexport class Tags {\n constructor(private readonly client: MigmaClient) {}\n\n async list(params: ListTagsParams): Promise<MigmaResult<ListTagsResponse>> {\n const { projectId, page, limit, search, sortBy, sortOrder } = params;\n return this.client.getWithCount<Tag[]>('/tags', {\n projectId,\n page,\n limit,\n search,\n sortBy,\n sortOrder,\n }) as Promise<MigmaResult<ListTagsResponse>>;\n }\n\n async create(params: CreateTagParams): Promise<MigmaResult<Tag>> {\n return this.client.post<Tag>('/tags', params as unknown as Record<string, unknown>);\n }\n\n async get(id: string, projectId: string): Promise<MigmaResult<Tag>> {\n return this.client.get<Tag>(`/tags/${id}`, { projectId });\n }\n\n async update(id: string, params: UpdateTagParams): Promise<MigmaResult<Tag>> {\n return this.client.patch<Tag>(`/tags/${id}`, params as unknown as Record<string, unknown>);\n }\n\n async remove(id: string, projectId: string): Promise<MigmaResult<DeleteResponse>> {\n return this.client.delete<DeleteResponse>(`/tags/${id}`, { projectId });\n }\n}\n","import type { MigmaClient } from '../client';\nimport type { MigmaResult, DeleteResponse } from '../types/common';\nimport type {\n Segment,\n CreateSegmentParams,\n UpdateSegmentParams,\n ListSegmentsResponse,\n} from '../types/segments';\n\nexport class Segments {\n constructor(private readonly client: MigmaClient) {}\n\n async list(projectId: string): Promise<MigmaResult<ListSegmentsResponse>> {\n return this.client.getWithCount<Segment[]>('/segments', {\n projectId,\n }) as Promise<MigmaResult<ListSegmentsResponse>>;\n }\n\n async create(params: CreateSegmentParams): Promise<MigmaResult<Segment>> {\n return this.client.post<Segment>('/segments', params as unknown as Record<string, unknown>);\n }\n\n async get(id: string, projectId: string): Promise<MigmaResult<Segment>> {\n return this.client.get<Segment>(`/segments/${id}`, { projectId });\n }\n\n async update(id: string, params: UpdateSegmentParams): Promise<MigmaResult<Segment>> {\n return this.client.patch<Segment>(`/segments/${id}`, params as unknown as Record<string, unknown>);\n }\n\n async remove(id: string, projectId: string): Promise<MigmaResult<DeleteResponse>> {\n return this.client.delete<DeleteResponse>(`/segments/${id}`, { projectId });\n }\n}\n","import type { MigmaClient } from '../client';\nimport type { MigmaResult, DeleteResponse } from '../types/common';\nimport type {\n Topic,\n CreateTopicParams,\n UpdateTopicParams,\n ListTopicsParams,\n ListTopicsResponse,\n TopicSubscriptionParams,\n TopicSubscriptionResponse,\n} from '../types/topics';\n\nexport class Topics {\n constructor(private readonly client: MigmaClient) {}\n\n async list(params: ListTopicsParams): Promise<MigmaResult<ListTopicsResponse>> {\n const { projectId, includeInactive } = params;\n return this.client.getWithCount<Topic[]>('/topics', {\n projectId,\n includeInactive,\n }) as Promise<MigmaResult<ListTopicsResponse>>;\n }\n\n async create(params: CreateTopicParams): Promise<MigmaResult<Topic>> {\n return this.client.post<Topic>('/topics', params as unknown as Record<string, unknown>);\n }\n\n async get(id: string, projectId: string): Promise<MigmaResult<Topic>> {\n return this.client.get<Topic>(`/topics/${id}`, { projectId });\n }\n\n async update(id: string, params: UpdateTopicParams): Promise<MigmaResult<Topic>> {\n return this.client.patch<Topic>(`/topics/${id}`, params as unknown as Record<string, unknown>);\n }\n\n async remove(id: string, projectId: string): Promise<MigmaResult<DeleteResponse>> {\n return this.client.delete<DeleteResponse>(`/topics/${id}`, { projectId });\n }\n\n async subscribe(\n topicId: string,\n params: TopicSubscriptionParams\n ): Promise<MigmaResult<TopicSubscriptionResponse>> {\n return this.client.post<TopicSubscriptionResponse>(\n `/topics/${topicId}/subscribe`,\n params as unknown as Record<string, unknown>\n );\n }\n\n async unsubscribe(\n topicId: string,\n params: TopicSubscriptionParams\n ): Promise<MigmaResult<TopicSubscriptionResponse>> {\n return this.client.post<TopicSubscriptionResponse>(\n `/topics/${topicId}/unsubscribe`,\n params as unknown as Record<string, unknown>\n );\n }\n}\n","import type { CallOptions, MigmaClient } from '../client';\nimport type { MigmaResult } from '../types/common';\nimport type {\n SendEmailParams,\n SendEmailResponse,\n BatchStatus,\n} from '../types/sending';\n\nexport class Sending {\n constructor(private readonly client: MigmaClient) {}\n\n async send(params: SendEmailParams, options?: CallOptions): Promise<MigmaResult<SendEmailResponse>> {\n return this.client.post<SendEmailResponse>('/sending', params as unknown as Record<string, unknown>, options);\n }\n\n async getBatchStatus(batchId: string): Promise<MigmaResult<BatchStatus>> {\n return this.client.get<BatchStatus>(`/sending/batches/${batchId}`);\n }\n}\n","import { MigmaError, MigmaErrorCode } from './errors';\nimport type { MigmaResult } from './types/common';\n\nexport interface PollingOptions {\n /** Polling interval in ms. Default: 2000 */\n interval?: number;\n /** Maximum number of polls before giving up. Default: 150 (5 minutes at 2s) */\n maxAttempts?: number;\n /** Callback on each poll with current status */\n onPoll?: (status: unknown, attempt: number) => void;\n /** AbortSignal to cancel polling */\n signal?: AbortSignal;\n}\n\n/**\n * Generic polling function.\n * Calls `fetcher()` repeatedly until `isComplete(result)` returns true\n * or max attempts are reached.\n */\nexport async function poll<T>(\n fetcher: () => Promise<MigmaResult<T>>,\n isComplete: (data: T) => boolean,\n options?: PollingOptions\n): Promise<MigmaResult<T>> {\n const interval = options?.interval ?? 2000;\n const maxAttempts = options?.maxAttempts ?? 150;\n\n for (let attempt = 0; attempt < maxAttempts; attempt++) {\n if (options?.signal?.aborted) {\n return {\n data: null,\n error: new MigmaError('Polling aborted', 0, MigmaErrorCode.TIMEOUT),\n };\n }\n\n const result = await fetcher();\n\n if (result.error) {\n return result;\n }\n\n options?.onPoll?.(result.data, attempt);\n\n if (isComplete(result.data)) {\n return result;\n }\n\n await new Promise<void>((resolve) => {\n const timer = setTimeout(resolve, interval);\n if (options?.signal) {\n const onAbort = () => {\n clearTimeout(timer);\n resolve();\n };\n options.signal.addEventListener('abort', onAbort, { once: true });\n }\n });\n }\n\n return {\n data: null,\n error: new MigmaError(\n 'Polling timed out after maximum attempts',\n 0,\n MigmaErrorCode.TIMEOUT\n ),\n };\n}\n","import type { ConnectedToolScope, ConnectedToolSchema, ListConnectedToolsParams, ListConnectedToolsResponse } from '../types/connected-tools';\nimport type { MigmaClient } from '../client';\nimport type { MigmaResult } from '../types/common';\nimport type {\n Project,\n ListProjectsParams,\n ListProjectsResponse,\n ImportProjectParams,\n ImportProjectResponse,\n ImportStatusResponse,\n RetryImportResponse,\n FieldCatalogParams,\n FieldCatalogResponse,\n BrandGuidelinesParams,\n BrandGuidelinesResponse,\n ProjectReferencesResponse,\n} from '../types/projects';\nimport { poll, type PollingOptions } from '../polling';\n\nexport class Projects {\n constructor(private readonly client: MigmaClient) {}\n\n async list(params?: ListProjectsParams): Promise<MigmaResult<ListProjectsResponse>> {\n return this.client.get<ListProjectsResponse>('/projects', {\n limit: params?.limit,\n offset: params?.offset,\n status: params?.status,\n organizationId: params?.organizationId,\n });\n }\n\n async get(projectId: string): Promise<MigmaResult<Project>> {\n return this.client.get<Project>(`/projects/${projectId}`);\n }\n\n async import(params: ImportProjectParams): Promise<MigmaResult<ImportProjectResponse>> {\n return this.client.post<ImportProjectResponse>(\n '/projects/import',\n params as unknown as Record<string, unknown>\n );\n }\n\n async getImportStatus(projectId: string): Promise<MigmaResult<ImportStatusResponse>> {\n return this.client.get<ImportStatusResponse>(\n `/projects/import/${projectId}/status`\n );\n }\n\n /** Replace the brand's standing design rules and/or image style notes. */\n async updateBrandGuidelines(\n projectId: string,\n params: BrandGuidelinesParams,\n ): Promise<MigmaResult<BrandGuidelinesResponse>> {\n return this.client.put<BrandGuidelinesResponse>(\n `/projects/${projectId}/brand-guidelines`,\n params as unknown as Record<string, unknown>,\n );\n }\n\n /** Design references generation reads: favorites, saved designs, saved sections. */\n async references(projectId: string): Promise<MigmaResult<ProjectReferencesResponse>> {\n return this.client.get<ProjectReferencesResponse>(`/projects/${projectId}/references`);\n }\n\n async retryImport(projectId: string): Promise<MigmaResult<RetryImportResponse>> {\n return this.client.post<RetryImportResponse>(\n `/projects/import/${projectId}/retry`\n );\n }\n\n async fieldCatalog(\n projectId: string,\n params?: FieldCatalogParams\n ): Promise<MigmaResult<FieldCatalogResponse>> {\n return this.client.get<FieldCatalogResponse>(\n `/projects/${projectId}/field-catalog`,\n {\n segmentId: params?.segmentId,\n tag: params?.tag,\n }\n );\n }\n\n async listConnectedTools(params: ListConnectedToolsParams): Promise<MigmaResult<ListConnectedToolsResponse>> {\n return this.client.get<ListConnectedToolsResponse>('/connected-tools', { ...params });\n }\n\n async getConnectedTool(params: ConnectedToolScope): Promise<MigmaResult<ConnectedToolSchema>> {\n return this.client.get<ConnectedToolSchema>('/connected-tools/schema', { ...params });\n }\n\n /** Never automatically replay external writes; provider outcome can be unknown. */\n async callConnectedTool(params: ConnectedToolScope & { parameters: Record<string, unknown> }): Promise<MigmaResult<unknown>> {\n return this.client.post<unknown>('/connected-tools/call', { ...params }, { maxRetries: 0 });\n }\n\n /**\n * Import a project and wait for completion.\n * Polls getImportStatus until status is 'active' or 'error'.\n */\n async importAndWait(\n params: ImportProjectParams,\n options?: PollingOptions\n ): Promise<MigmaResult<ImportStatusResponse>> {\n const startResult = await this.import(params);\n if (startResult.error) {\n return { data: null, error: startResult.error };\n }\n\n const projectId = startResult.data.projectId;\n\n return poll(\n () => this.getImportStatus(projectId),\n (status) => status.status === 'active' || status.status === 'error',\n options\n );\n }\n}\n","import type { CallOptions, MigmaClient } from '../client';\nimport { randomUUID } from 'node:crypto';\nimport type { MigmaResult } from '../types/common';\nimport type {\n GenerateEmailParams,\n GenerateEmailResponse,\n ImportHtmlEmailParams,\n EmailGenerationStatus,\n Email,\n EditEmailParams,\n EmailEditOperation,\n ListEmailsParams,\n ListEmailsResponse,\n SendTestEmailParams,\n SendTestEmailResponse,\n EmailMetrics,\n EmailLogsParams,\n EmailLogsResponse,\n EmailFavorite,\n} from '../types/emails';\nimport { poll, type PollingOptions } from '../polling';\n\nexport class Emails {\n constructor(private readonly client: MigmaClient) {}\n\n /** List emails for a project */\n async list(\n params: ListEmailsParams\n ): Promise<MigmaResult<ListEmailsResponse>> {\n const { projectId, limit, page, status, search } = params;\n return this.client.get<ListEmailsResponse>('/projects/emails', {\n projectId,\n limit,\n page,\n status,\n search,\n });\n }\n\n /** Start async email generation */\n async generate(\n params: GenerateEmailParams,\n options?: CallOptions\n ): Promise<MigmaResult<GenerateEmailResponse>> {\n return this.client.post<GenerateEmailResponse>(\n '/projects/emails/generate',\n params as unknown as Record<string, unknown>,\n options\n );\n }\n\n /** Convert existing HTML or .eml into editable emails (async). */\n async importHtml(\n params: ImportHtmlEmailParams,\n options?: CallOptions\n ): Promise<MigmaResult<GenerateEmailResponse>> {\n return this.client.post<GenerateEmailResponse>(\n '/projects/emails/import-html',\n params as unknown as Record<string, unknown>,\n options\n );\n }\n\n /** Check email generation status */\n async getGenerationStatus(\n conversationId: string\n ): Promise<MigmaResult<EmailGenerationStatus>> {\n return this.client.get<EmailGenerationStatus>(\n `/projects/emails/${conversationId}/status`\n );\n }\n\n /** Fetch one generated email by email id */\n async get(emailId: string): Promise<MigmaResult<Email>> {\n return this.client.get<Email>(`/emails/${emailId}`);\n }\n\n /** Synchronous edit. No automatic retries; use startEdit for long edits. */\n async edit(\n emailId: string,\n params: EditEmailParams\n ): Promise<MigmaResult<Email>> {\n return this.client.post<Email>(\n `/emails/${emailId}/edit`,\n params as unknown as Record<string, unknown>,\n { maxRetries: 0 }\n );\n }\n\n /** Queue an edit immediately. Retain an explicit key to recover uncertain submissions. */\n async startEdit(\n emailId: string,\n params: EditEmailParams,\n options?: CallOptions\n ): Promise<MigmaResult<EmailEditOperation>> {\n return this.client.post<EmailEditOperation>(\n `/emails/${encodeURIComponent(emailId)}/edit`,\n { ...params, async: true },\n { ...options, idempotencyKey: options?.idempotencyKey || randomUUID() }\n );\n }\n\n /** Poll the exact edit; a completed conversation may belong to an earlier turn. */\n async getEditStatus(emailId: string, editId: string): Promise<MigmaResult<EmailEditOperation>> {\n return this.client.get<EmailEditOperation>(\n `/emails/${encodeURIComponent(emailId)}/edits/${encodeURIComponent(editId)}`\n );\n }\n\n /**\n * Generate an email and wait for completion.\n * Polls getGenerationStatus until status is 'completed' or 'failed'.\n */\n async generateAndWait(\n params: GenerateEmailParams,\n options?: PollingOptions,\n callOptions?: CallOptions\n ): Promise<MigmaResult<EmailGenerationStatus>> {\n const startResult = await this.generate(params, callOptions);\n if (startResult.error) {\n return { data: null, error: startResult.error };\n }\n\n const conversationId = startResult.data.conversationId;\n\n return poll(\n () => this.getGenerationStatus(conversationId),\n (status) => status.status === 'completed' || status.status === 'failed',\n options\n );\n }\n\n /**\n * Import HTML and wait for completion.\n * Polls getGenerationStatus until status is 'completed' or 'failed'.\n */\n async importHtmlAndWait(\n params: ImportHtmlEmailParams,\n options?: PollingOptions,\n callOptions?: CallOptions\n ): Promise<MigmaResult<EmailGenerationStatus>> {\n const startResult = await this.importHtml(params, callOptions);\n if (startResult.error) {\n return { data: null, error: startResult.error };\n }\n\n const conversationId = startResult.data.conversationId;\n\n return poll(\n () => this.getGenerationStatus(conversationId),\n (status) => status.status === 'completed' || status.status === 'failed',\n options\n );\n }\n\n /** Send a test email from a completed conversation */\n async sendTest(\n params: SendTestEmailParams\n ): Promise<MigmaResult<SendTestEmailResponse>> {\n return this.client.post<SendTestEmailResponse>(\n '/emails/test/send',\n params as unknown as Record<string, unknown>\n );\n }\n\n /**\n * Aggregate performance for one generated email across every API send of it:\n * delivery, opens, clicks, bounces, complaints, unsubscribes + a daily time\n * series. Events arrive asynchronously; opens are directional while clicks\n * and delivery events are stronger signals.\n */\n /** Star or unstar one generated email as a design reference. Idempotent. */\n async setFavorite(emailId: string, favorite: boolean): Promise<MigmaResult<EmailFavorite>> {\n return this.client.put<EmailFavorite>(`/emails/${emailId}/favorite`, { favorite });\n }\n\n async metrics(emailId: string): Promise<MigmaResult<EmailMetrics>> {\n return this.client.get<EmailMetrics>(`/emails/${emailId}/metrics`);\n }\n\n /** Per-recipient send log for one generated email (cursor-paginated). */\n async logs(\n emailId: string,\n params?: EmailLogsParams\n ): Promise<MigmaResult<EmailLogsResponse>> {\n return this.client.get<EmailLogsResponse>(`/emails/${emailId}/logs`, {\n limit: params?.limit,\n cursor: params?.cursor,\n status: params?.status,\n });\n }\n}\n","import type { MigmaClient } from '../client';\nimport type { MigmaResult } from '../types/common';\nimport type {\n ValidateAllParams,\n ValidateAllResponse,\n CheckCompatibilityParams,\n CompatibilityResponse,\n AnalyzeLinksParams,\n LinkAnalysisResponse,\n CheckSpellingParams,\n SpellingResponse,\n AnalyzeDeliverabilityParams,\n DeliverabilityResponse,\n} from '../types/validation';\n\nexport class Validation {\n constructor(private readonly client: MigmaClient) {}\n\n async all(params: ValidateAllParams): Promise<MigmaResult<ValidateAllResponse>> {\n return this.client.post<ValidateAllResponse>(\n '/emails/validate/all',\n params as unknown as Record<string, unknown>\n );\n }\n\n async compatibility(\n params: CheckCompatibilityParams\n ): Promise<MigmaResult<CompatibilityResponse>> {\n return this.client.post<CompatibilityResponse>(\n '/emails/validate/compatibility',\n params as unknown as Record<string, unknown>\n );\n }\n\n async links(params: AnalyzeLinksParams): Promise<MigmaResult<LinkAnalysisResponse>> {\n return this.client.post<LinkAnalysisResponse>(\n '/emails/validate/links',\n params as unknown as Record<string, unknown>\n );\n }\n\n async spelling(params: CheckSpellingParams): Promise<MigmaResult<SpellingResponse>> {\n return this.client.post<SpellingResponse>(\n '/emails/validate/spelling',\n params as unknown as Record<string, unknown>\n );\n }\n\n async deliverability(\n params: AnalyzeDeliverabilityParams\n ): Promise<MigmaResult<DeliverabilityResponse>> {\n return this.client.post<DeliverabilityResponse>(\n '/emails/validate/deliverability',\n params as unknown as Record<string, unknown>\n );\n }\n}\n","import type { MigmaClient } from '../client';\nimport type { MigmaResult } from '../types/common';\nimport type {\n CreatePreviewParams,\n CreatePreviewResponse,\n GetPreviewResponse,\n GetPreviewStatusResponse,\n GetDevicePreviewResponse,\n GetSupportedDevicesResponse,\n} from '../types/previews';\nimport { poll, type PollingOptions } from '../polling';\n\nexport class Previews {\n constructor(private readonly client: MigmaClient) {}\n\n async create(\n params: CreatePreviewParams\n ): Promise<MigmaResult<CreatePreviewResponse>> {\n return this.client.post<CreatePreviewResponse>(\n '/emails/previews',\n params as unknown as Record<string, unknown>\n );\n }\n\n async get(previewId: string): Promise<MigmaResult<GetPreviewResponse>> {\n return this.client.get<GetPreviewResponse>(`/emails/previews/${previewId}`);\n }\n\n async getStatus(\n previewId: string\n ): Promise<MigmaResult<GetPreviewStatusResponse>> {\n return this.client.get<GetPreviewStatusResponse>(\n `/emails/previews/${previewId}/status`\n );\n }\n\n async getDevice(\n previewId: string,\n deviceKey: string\n ): Promise<MigmaResult<GetDevicePreviewResponse>> {\n return this.client.get<GetDevicePreviewResponse>(\n `/emails/previews/${previewId}/devices/${deviceKey}`\n );\n }\n\n async getSupportedDevices(): Promise<MigmaResult<GetSupportedDevicesResponse>> {\n return this.client.get<GetSupportedDevicesResponse>(\n '/emails/devices/supported'\n );\n }\n\n /**\n * Create a preview and wait for completion.\n * Polls getStatus until status is 'COMPLETED', 'PARTIAL_SUCCESS', or 'FAILED'.\n */\n async createAndWait(\n params: CreatePreviewParams,\n options?: PollingOptions\n ): Promise<MigmaResult<GetPreviewResponse>> {\n const startResult = await this.create(params);\n if (startResult.error) {\n return { data: null, error: startResult.error };\n }\n\n const previewId = startResult.data.previewId;\n\n return poll(\n () => this.get(previewId),\n (preview) =>\n preview.status === 'COMPLETED' ||\n preview.status === 'PARTIAL_SUCCESS' ||\n preview.status === 'FAILED',\n options\n );\n }\n}\n","import type { MigmaClient } from '../client';\nimport type { MigmaResult } from '../types/common';\nimport type {\n ExportResult,\n ExportFormatsResponse,\n ExportStatusResponse,\n HubspotExportParams,\n} from '../types/export';\n\nexport class Export {\n constructor(private readonly client: MigmaClient) {}\n\n async getFormats(): Promise<MigmaResult<ExportFormatsResponse>> {\n return this.client.get<ExportFormatsResponse>('/export/formats');\n }\n\n async getStatus(conversationId: string): Promise<MigmaResult<ExportStatusResponse>> {\n return this.client.get<ExportStatusResponse>(\n `/export/status/${conversationId}`\n );\n }\n\n async html(conversationId: string): Promise<MigmaResult<ExportResult>> {\n return this.client.get<ExportResult>(`/export/html/${conversationId}`);\n }\n\n async pdf(conversationId: string): Promise<MigmaResult<ExportResult>> {\n return this.client.get<ExportResult>(`/export/pdf/${conversationId}`);\n }\n\n async png(conversationId: string): Promise<MigmaResult<ExportResult>> {\n return this.client.get<ExportResult>(`/export/png/${conversationId}`);\n }\n\n async klaviyo(\n conversationId: string,\n klaviyoType?: 'html' | 'hybrid' | 'code'\n ): Promise<MigmaResult<ExportResult>> {\n return this.client.get<ExportResult>(\n `/export/klaviyo/${conversationId}`,\n { klaviyoType }\n );\n }\n\n async mailchimp(conversationId: string): Promise<MigmaResult<ExportResult>> {\n return this.client.get<ExportResult>(`/export/mailchimp/${conversationId}`);\n }\n\n async hubspot(params: HubspotExportParams): Promise<MigmaResult<ExportResult>> {\n return this.client.post<ExportResult>(\n '/export/hubspot',\n params as unknown as Record<string, unknown>\n );\n }\n}\n","import type { MigmaClient } from '../client';\nimport type { MigmaResult } from '../types/common';\nimport type {\n Domain,\n CreateDomainParams,\n UpdateDomainParams,\n DomainVerificationResult,\n DomainAvailability,\n CreateManagedDomainParams,\n ProvisionStreamParams,\n SetupDomainParams,\n SetupDomainResponse,\n DomainDeleteResponse,\n} from '../types/domains';\n\nexport class Domains {\n constructor(private readonly client: MigmaClient) {}\n\n async list(): Promise<MigmaResult<Domain[]>> {\n return this.client.get<Domain[]>('/domains');\n }\n\n async create(params: CreateDomainParams): Promise<MigmaResult<Domain>> {\n return this.client.post<Domain>('/domains', params as unknown as Record<string, unknown>);\n }\n\n async get(domain: string): Promise<MigmaResult<Domain>> {\n return this.client.get<Domain>(`/domains/${domain}`);\n }\n\n async verify(domain: string): Promise<MigmaResult<DomainVerificationResult>> {\n return this.client.post<DomainVerificationResult>(`/domains/${domain}/verify`);\n }\n\n async update(domain: string, params: UpdateDomainParams): Promise<MigmaResult<Domain>> {\n return this.client.patch<Domain>(`/domains/${domain}`, params as unknown as Record<string, unknown>);\n }\n\n async remove(domain: string): Promise<MigmaResult<DomainDeleteResponse>> {\n return this.client.delete<DomainDeleteResponse>(`/domains/${domain}`);\n }\n\n async checkAvailability(prefix: string): Promise<MigmaResult<DomainAvailability>> {\n return this.client.get<DomainAvailability>(`/domains/managed/check/${prefix}`);\n }\n\n async listManaged(): Promise<MigmaResult<Domain[]>> {\n return this.client.get<Domain[]>('/domains/managed');\n }\n\n async createManaged(params: CreateManagedDomainParams): Promise<MigmaResult<Domain>> {\n return this.client.post<Domain>('/domains/managed', params as unknown as Record<string, unknown>);\n }\n\n async removeManaged(domain: string): Promise<MigmaResult<DomainDeleteResponse>> {\n return this.client.delete<DomainDeleteResponse>(`/domains/managed/${domain}`);\n }\n\n /**\n * Provision a transactional or marketing stream identity on a domain you own.\n * Creates notify.<rootDomain> (transactional) or send.<rootDomain> (marketing)\n * to isolate transactional reputation from marketing. Returns DNS records to publish.\n */\n async provisionStream(params: ProvisionStreamParams): Promise<MigmaResult<Domain>> {\n return this.client.post<Domain>('/domains/streams', params as unknown as Record<string, unknown>);\n }\n\n /**\n * Provision BOTH stream identities for a domain you own in one call:\n * send.<rootDomain> (marketing) and notify.<rootDomain> (transactional).\n * Idempotent. Returns both domains with DNS records to publish.\n */\n async setup(params: SetupDomainParams): Promise<MigmaResult<SetupDomainResponse>> {\n return this.client.post<SetupDomainResponse>('/domains/setup', params as unknown as Record<string, unknown>);\n }\n}\n","import type { MigmaClient } from '../client';\nimport type { MigmaResult } from '../types/common';\nimport type {\n AddCustomDnsRecordParams,\n CustomDnsRecord,\n CustomDnsRecordList,\n DomainPurchaseCheckout,\n DomainPurchaseParams,\n DomainPurchaseQuote,\n DomainPurchaseSearchParams,\n DomainRegistration,\n} from '../types/domain-purchases';\n\nexport class DomainPurchases {\n constructor(private readonly client: MigmaClient) {}\n\n /** Availability and price quotes for domains you could buy. */\n async search(params: DomainPurchaseSearchParams): Promise<MigmaResult<{ quotes: DomainPurchaseQuote[] }>> {\n return this.client.get<{ quotes: DomainPurchaseQuote[] }>('/domains/purchase/search', {\n q: params.q,\n limit: params.limit,\n });\n }\n\n /**\n * Start buying a domain. Returns a Stripe checkout URL the account owner\n * opens in a browser; the domain registers after payment clears. Requires\n * an active paid Migma subscription.\n */\n async create(params: DomainPurchaseParams): Promise<MigmaResult<DomainPurchaseCheckout>> {\n return this.client.post<DomainPurchaseCheckout>('/domains/purchase', params as unknown as Record<string, unknown>);\n }\n\n /** Purchase history and status: payment_pending → registering → active. */\n async registrations(params?: { limit?: number }): Promise<MigmaResult<{ registrations: DomainRegistration[] }>> {\n return this.client.get<{ registrations: DomainRegistration[] }>('/domains/purchase/registrations', {\n limit: params?.limit,\n });\n }\n\n // DNS records live on Migma-hosted zones, which exist exactly for domains\n // bought in Migma — hence they sit on this resource even though the API\n // path is /domains/:domain/dns-records.\n\n /** DNS records you added to a domain bought in Migma. `managed: false` = zone not hosted by Migma. */\n async listDnsRecords(domain: string): Promise<MigmaResult<CustomDnsRecordList>> {\n return this.client.get<CustomDnsRecordList>(`/domains/${encodeURIComponent(domain)}/dns-records`);\n }\n\n /**\n * Add a DNS record (A, AAAA, CNAME, MX, TXT, or NS) to a domain bought in\n * Migma. Migma's email sending records are protected and cannot be\n * overridden; the root and www stay with domain forwarding.\n */\n async addDnsRecord(domain: string, params: AddCustomDnsRecordParams): Promise<MigmaResult<{ record: CustomDnsRecord }>> {\n return this.client.post<{ record: CustomDnsRecord }>(\n `/domains/${encodeURIComponent(domain)}/dns-records`,\n params as unknown as Record<string, unknown>,\n );\n }\n\n /** Remove a DNS record you added earlier (never Migma's own records). */\n async removeDnsRecord(domain: string, recordId: string): Promise<MigmaResult<{ ok: boolean }>> {\n return this.client.delete<{ ok: boolean }>(\n `/domains/${encodeURIComponent(domain)}/dns-records/${encodeURIComponent(recordId)}`,\n );\n }\n}\n","import type { MigmaClient } from '../client';\nimport type { MigmaResult } from '../types/common';\nimport type { CreditStatus, UpgradeLink, UpgradeLinkParams } from '../types/billing';\n\nexport class Billing {\n constructor(private readonly client: MigmaClient) {}\n\n /** Plan and remaining credits for the API key owner. */\n async credits(): Promise<MigmaResult<CreditStatus>> {\n return this.client.get<CreditStatus>('/billing/credits');\n }\n\n /**\n * Create checkout for a user-chosen new plan, or omit plan for the existing\n * customer's billing portal. Passing plan for an active subscription can\n * change it and charge prorated payment immediately; obtain charge approval.\n * The returned URL alone does not confirm payment. Do not retry unknown writes.\n */\n async upgradeLink(params: UpgradeLinkParams = {}): Promise<MigmaResult<UpgradeLink>> {\n return this.client.post<UpgradeLink>('/billing/upgrade-link', params as unknown as Record<string, unknown>);\n }\n}\n","import type { MigmaClient } from '../client';\nimport type { MigmaResult } from '../types/common';\nimport type {\n WebhookDetail,\n CreateWebhookParams,\n CreateWebhookResponse,\n UpdateWebhookParams,\n ListWebhooksResponse,\n WebhookTestResult,\n WebhookDeliveriesResponse,\n WebhookEventsResponse,\n} from '../types/webhooks';\n\nexport class Webhooks {\n constructor(private readonly client: MigmaClient) {}\n\n async list(): Promise<MigmaResult<ListWebhooksResponse>> {\n return this.client.get<ListWebhooksResponse>('/webhooks');\n }\n\n async create(params: CreateWebhookParams): Promise<MigmaResult<CreateWebhookResponse>> {\n return this.client.post<CreateWebhookResponse>('/webhooks', params as unknown as Record<string, unknown>);\n }\n\n async get(webhookId: string): Promise<MigmaResult<WebhookDetail>> {\n return this.client.get<WebhookDetail>(`/webhooks/${webhookId}`);\n }\n\n async update(\n webhookId: string,\n params: UpdateWebhookParams\n ): Promise<MigmaResult<{ updated: boolean }>> {\n return this.client.patch<{ updated: boolean }>(\n `/webhooks/${webhookId}`,\n params as unknown as Record<string, unknown>\n );\n }\n\n async remove(webhookId: string): Promise<MigmaResult<{ deleted: boolean }>> {\n return this.client.delete<{ deleted: boolean }>(`/webhooks/${webhookId}`);\n }\n\n async test(webhookId: string): Promise<MigmaResult<WebhookTestResult>> {\n return this.client.post<WebhookTestResult>(`/webhooks/${webhookId}/test`);\n }\n\n async getDeliveries(\n webhookId: string,\n limit?: number\n ): Promise<MigmaResult<WebhookDeliveriesResponse>> {\n return this.client.get<WebhookDeliveriesResponse>(\n `/webhooks/${webhookId}/deliveries`,\n { limit }\n );\n }\n\n async getEvents(): Promise<MigmaResult<WebhookEventsResponse>> {\n return this.client.get<WebhookEventsResponse>('/webhooks/events');\n }\n\n async getStats(): Promise<MigmaResult<Record<string, unknown>>> {\n return this.client.get<Record<string, unknown>>('/webhooks/stats');\n }\n}\n","import type { MigmaClient } from '../client';\nimport type { MigmaResult, MessageResponse } from '../types/common';\nimport type {\n KnowledgeBaseEntry,\n KnowledgeBaseListResponse,\n AddKnowledgeBaseParams,\n UpdateKnowledgeBaseParams,\n} from '../types/knowledge-base';\n\nexport class KnowledgeBase {\n constructor(private readonly client: MigmaClient) {}\n\n async list(projectId: string): Promise<MigmaResult<KnowledgeBaseListResponse>> {\n return this.client.get<KnowledgeBaseListResponse>(\n `/projects/${projectId}/knowledge-base`\n );\n }\n\n async add(\n projectId: string,\n params: AddKnowledgeBaseParams\n ): Promise<MigmaResult<KnowledgeBaseEntry>> {\n return this.client.post<KnowledgeBaseEntry>(\n `/projects/${projectId}/knowledge-base`,\n params as unknown as Record<string, unknown>\n );\n }\n\n async update(\n projectId: string,\n entryId: string,\n params: UpdateKnowledgeBaseParams\n ): Promise<MigmaResult<KnowledgeBaseEntry>> {\n return this.client.put<KnowledgeBaseEntry>(\n `/projects/${projectId}/knowledge-base/${entryId}`,\n params as unknown as Record<string, unknown>\n );\n }\n\n async remove(\n projectId: string,\n entryId: string\n ): Promise<MigmaResult<MessageResponse>> {\n return this.client.delete<MessageResponse>(\n `/projects/${projectId}/knowledge-base/${entryId}`\n );\n }\n}\n","import type { MigmaClient } from '../client';\nimport type { MigmaResult, MessageResponse } from '../types/common';\nimport type {\n ProjectImage,\n AddImageParams,\n UpdateImageParams,\n UpdateLogosParams,\n LogosResponse,\n} from '../types/images';\n\nexport class Images {\n constructor(private readonly client: MigmaClient) {}\n\n async add(\n projectId: string,\n params: AddImageParams\n ): Promise<MigmaResult<ProjectImage>> {\n return this.client.post<ProjectImage>(\n `/projects/${projectId}/images`,\n params as unknown as Record<string, unknown>\n );\n }\n\n async update(\n projectId: string,\n params: UpdateImageParams\n ): Promise<MigmaResult<ProjectImage>> {\n return this.client.put<ProjectImage>(\n `/projects/${projectId}/images`,\n params as unknown as Record<string, unknown>\n );\n }\n\n async remove(\n projectId: string,\n imageUrl: string\n ): Promise<MigmaResult<MessageResponse>> {\n return this.client.delete<MessageResponse>(\n `/projects/${projectId}/images`,\n { imageUrl }\n );\n }\n\n async updateLogos(\n projectId: string,\n params: UpdateLogosParams\n ): Promise<MigmaResult<LogosResponse>> {\n return this.client.put<LogosResponse>(\n `/projects/${projectId}/logos`,\n params as unknown as Record<string, unknown>\n );\n }\n}\n","import type { CallOptions, MigmaClient } from '../client';\nimport type { MigmaResult } from '../types/common';\nimport type {\n Campaign,\n CampaignLogsParams,\n CampaignLogsResponse,\n CampaignStats,\n CreateCampaignParams,\n ListCampaignsParams,\n ListCampaignsResponse,\n ScheduleCampaignParams,\n} from '../types/campaigns';\n\nexport class Campaigns {\n constructor(private readonly client: MigmaClient) {}\n\n async list(params: ListCampaignsParams): Promise<MigmaResult<ListCampaignsResponse>> {\n const { projectId, status, page, limit, archived } = params;\n return this.client.get<ListCampaignsResponse>('/campaigns', {\n projectId,\n status,\n page,\n limit,\n archived,\n });\n }\n\n async create(params: CreateCampaignParams, options?: CallOptions): Promise<MigmaResult<Campaign>> {\n return this.client.post<Campaign>('/campaigns', params as unknown as Record<string, unknown>, options);\n }\n\n async get(id: string): Promise<MigmaResult<Campaign>> {\n return this.client.get<Campaign>(`/campaigns/${id}`);\n }\n\n async send(id: string, options?: CallOptions): Promise<MigmaResult<Campaign>> {\n return this.client.post<Campaign>(`/campaigns/${id}/send`, undefined, options);\n }\n\n async schedule(id: string, params: ScheduleCampaignParams, options?: CallOptions): Promise<MigmaResult<Campaign>> {\n return this.client.post<Campaign>(`/campaigns/${id}/schedule`, params as unknown as Record<string, unknown>, options);\n }\n\n async cancel(id: string, options?: CallOptions): Promise<MigmaResult<Campaign>> {\n return this.client.post<Campaign>(`/campaigns/${id}/cancel`, undefined, options);\n }\n\n /** Aggregated engagement metrics for a campaign (cached, may be slightly stale). */\n async stats(id: string): Promise<MigmaResult<CampaignStats>> {\n return this.client.get<CampaignStats>(`/campaigns/${id}/stats`);\n }\n\n /** Per-recipient email logs for a campaign (cursor-paginated). */\n async logs(id: string, params?: CampaignLogsParams): Promise<MigmaResult<CampaignLogsResponse>> {\n return this.client.get<CampaignLogsResponse>(`/campaigns/${id}/logs`, {\n limit: params?.limit,\n cursor: params?.cursor,\n status: params?.status,\n });\n }\n\n async archive(id: string): Promise<MigmaResult<Campaign>> {\n return this.client.post<Campaign>(`/campaigns/${id}/archive`);\n }\n\n async unarchive(id: string): Promise<MigmaResult<Campaign>> {\n return this.client.post<Campaign>(`/campaigns/${id}/unarchive`);\n }\n}\n","import type { MigmaClient } from '../client';\nimport type { MigmaResult } from '../types/common';\nimport type { SendingMetrics, SendingMetricsParams } from '../types/metrics';\n\nexport class Metrics {\n constructor(private readonly client: MigmaClient) {}\n\n async sending(params?: SendingMetricsParams): Promise<MigmaResult<SendingMetrics>> {\n return this.client.get<SendingMetrics>('/metrics/sending', {\n months: params?.months,\n });\n }\n}\n","import type { MigmaClient } from '../client';\nimport type { MigmaResult } from '../types/common';\nimport type { ListWorkspacesResponse } from '../types/workspaces';\n\nexport class Workspaces {\n constructor(private readonly client: MigmaClient) {}\n\n /**\n * Workspaces the API key owner belongs to. Pass a workspace id as\n * `organizationId` to projects.list() to scope brands to it.\n */\n async list(): Promise<MigmaResult<ListWorkspacesResponse>> {\n return this.client.get<ListWorkspacesResponse>('/workspaces');\n }\n}\n","import { MigmaClient } from './client';\nimport { Contacts } from './resources/contacts';\nimport { Tags } from './resources/tags';\nimport { Segments } from './resources/segments';\nimport { Topics } from './resources/topics';\nimport { Sending } from './resources/sending';\nimport { Projects } from './resources/projects';\nimport { Emails } from './resources/emails';\nimport { Validation } from './resources/validation';\nimport { Previews } from './resources/previews';\nimport { Export } from './resources/export';\nimport { Domains } from './resources/domains';\nimport { DomainPurchases } from './resources/domain-purchases';\nimport { Billing } from './resources/billing';\nimport { Webhooks } from './resources/webhooks';\nimport { KnowledgeBase } from './resources/knowledge-base';\nimport { Images } from './resources/images';\nimport { Campaigns } from './resources/campaigns';\nimport { Metrics } from './resources/metrics';\nimport { Workspaces } from './resources/workspaces';\n\nexport interface MigmaConfig {\n /** API base URL. Default: 'https://api.migma.ai/v1' */\n baseUrl?: string;\n /** Max retries on 5xx/429 errors. Default: 2 */\n maxRetries?: number;\n /** Base delay between retries in ms. Default: 1000 */\n retryDelay?: number;\n}\n\nexport class Migma {\n private readonly client: MigmaClient;\n\n readonly contacts: Contacts;\n readonly tags: Tags;\n readonly segments: Segments;\n readonly topics: Topics;\n readonly sending: Sending;\n readonly projects: Projects;\n readonly emails: Emails;\n readonly validation: Validation;\n readonly previews: Previews;\n readonly export: Export;\n readonly domains: Domains;\n readonly domainPurchases: DomainPurchases;\n readonly billing: Billing;\n readonly webhooks: Webhooks;\n readonly knowledgeBase: KnowledgeBase;\n readonly images: Images;\n readonly campaigns: Campaigns;\n readonly metrics: Metrics;\n readonly workspaces: Workspaces;\n\n constructor(apiKey: string, config?: MigmaConfig) {\n if (!apiKey) {\n throw new Error(\n 'Missing API key. Pass it to the constructor: `new Migma(\"your-api-key\")`'\n );\n }\n\n this.client = new MigmaClient(apiKey, {\n baseUrl: config?.baseUrl ?? 'https://api.migma.ai/v1',\n maxRetries: config?.maxRetries ?? 2,\n retryDelay: config?.retryDelay ?? 1000,\n });\n\n this.contacts = new Contacts(this.client);\n this.tags = new Tags(this.client);\n this.segments = new Segments(this.client);\n this.topics = new Topics(this.client);\n this.sending = new Sending(this.client);\n this.projects = new Projects(this.client);\n this.emails = new Emails(this.client);\n this.validation = new Validation(this.client);\n this.previews = new Previews(this.client);\n this.export = new Export(this.client);\n this.domains = new Domains(this.client);\n this.domainPurchases = new DomainPurchases(this.client);\n this.billing = new Billing(this.client);\n this.webhooks = new Webhooks(this.client);\n this.knowledgeBase = new KnowledgeBase(this.client);\n this.images = new Images(this.client);\n this.campaigns = new Campaigns(this.client);\n this.metrics = new Metrics(this.client);\n this.workspaces = new Workspaces(this.client);\n }\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "migma",
3
- "version": "1.9.0",
3
+ "version": "1.10.0",
4
4
  "description": "Official Node.js SDK for the Migma email platform API",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.mjs",