migma 1.0.5 → 1.0.6

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
@@ -63,16 +63,14 @@ const { data: email } = await migma.emails.generateAndWait({
63
63
  prompt: 'Create a summer sale email with 30% off everything',
64
64
  });
65
65
 
66
- // 3. Send it
66
+ // 3. Send it — conversationId resolves the template and project automatically
67
67
  await migma.sending.send({
68
68
  recipientType: 'email',
69
69
  recipientEmail: 'sarah@example.com',
70
70
  from: 'hello@yourcompany.migma.email',
71
71
  fromName: 'Your Company',
72
72
  subject: email.result.subject,
73
- template: email.result.html,
74
- providerType: 'migma',
75
- projectId: process.env.MIGMA_PROJECT_ID,
73
+ conversationId: email.conversationId,
76
74
  });
77
75
  ```
78
76
 
@@ -107,8 +105,7 @@ await migma.sending.send({
107
105
  import { Migma } from 'migma';
108
106
 
109
107
  const migma = new Migma('mgma_sk_live_...', {
110
- baseUrl: 'https://api.migma.ai/api/v1', // default
111
- timeout: 30000, // 30s default
108
+ baseUrl: 'https://api.migma.ai/v1', // default
112
109
  maxRetries: 2, // retries on 5xx/429
113
110
  retryDelay: 1000, // base delay between retries
114
111
  });
@@ -223,15 +220,14 @@ const { data: result } = await migma.contacts.bulkImport({
223
220
  Send to a single recipient, segment, tag, or full audience.
224
221
 
225
222
  ```typescript
226
- // Send to a single recipient
223
+ // Send using a conversationId (template + project resolved automatically)
227
224
  await migma.sending.send({
228
225
  recipientType: 'email',
229
226
  recipientEmail: 'user@example.com',
230
227
  from: 'hello@yourdomain.com',
231
228
  fromName: 'Your Company',
232
229
  subject: 'Welcome!',
233
- template: '<html>...</html>',
234
- projectId: 'proj_abc123',
230
+ conversationId: 'conv_abc123',
235
231
  });
236
232
 
237
233
  // Send to a segment
@@ -241,8 +237,7 @@ await migma.sending.send({
241
237
  from: 'hello@yourdomain.com',
242
238
  fromName: 'Your Company',
243
239
  subject: 'Big Announcement',
244
- template: '<html>...</html>',
245
- projectId: 'proj_abc123',
240
+ conversationId: 'conv_abc123',
246
241
  });
247
242
  ```
248
243
 
@@ -459,8 +454,7 @@ if (checks.overallScore > 80) {
459
454
  from: 'hello@yourdomain.com',
460
455
  fromName: 'Your Brand',
461
456
  subject: email.result.subject,
462
- template: email.result.html,
463
- projectId: 'proj_abc123',
457
+ conversationId: email.conversationId,
464
458
  });
465
459
  }
466
460
  ```
package/dist/index.d.mts CHANGED
@@ -51,7 +51,6 @@ interface MessageResponse {
51
51
 
52
52
  interface ClientConfig {
53
53
  baseUrl: string;
54
- timeout: number;
55
54
  maxRetries: number;
56
55
  retryDelay: number;
57
56
  }
@@ -61,7 +60,6 @@ interface RequestOptions {
61
60
  path: string;
62
61
  body?: Record<string, unknown>;
63
62
  query?: Record<string, string | number | boolean | undefined>;
64
- timeout?: number;
65
63
  }
66
64
  declare class MigmaClient {
67
65
  private readonly apiKey;
@@ -353,11 +351,13 @@ interface SendEmailParams {
353
351
  fromName: string;
354
352
  replyTo?: string;
355
353
  subject: string;
356
- /** Email template — raw HTML or a React Email TSX component with a default export */
357
- template: string;
354
+ /** Email template HTML. Required unless conversationId is provided. */
355
+ template?: string;
358
356
  variables?: Record<string, unknown>;
359
357
  providerType?: ProviderType;
360
- projectId: string;
358
+ /** Required unless conversationId is provided. */
359
+ projectId?: string;
360
+ /** When provided, template and projectId are resolved automatically from the conversation. */
361
361
  conversationId?: string;
362
362
  }
363
363
  interface SendEmailResponse {
@@ -1041,8 +1041,6 @@ declare class Images {
1041
1041
  interface MigmaConfig {
1042
1042
  /** API base URL. Default: 'https://api.migma.ai/v1' */
1043
1043
  baseUrl?: string;
1044
- /** Request timeout in ms. Default: 30000 */
1045
- timeout?: number;
1046
1044
  /** Max retries on 5xx/429 errors. Default: 2 */
1047
1045
  maxRetries?: number;
1048
1046
  /** Base delay between retries in ms. Default: 1000 */
package/dist/index.d.ts CHANGED
@@ -51,7 +51,6 @@ interface MessageResponse {
51
51
 
52
52
  interface ClientConfig {
53
53
  baseUrl: string;
54
- timeout: number;
55
54
  maxRetries: number;
56
55
  retryDelay: number;
57
56
  }
@@ -61,7 +60,6 @@ interface RequestOptions {
61
60
  path: string;
62
61
  body?: Record<string, unknown>;
63
62
  query?: Record<string, string | number | boolean | undefined>;
64
- timeout?: number;
65
63
  }
66
64
  declare class MigmaClient {
67
65
  private readonly apiKey;
@@ -353,11 +351,13 @@ interface SendEmailParams {
353
351
  fromName: string;
354
352
  replyTo?: string;
355
353
  subject: string;
356
- /** Email template — raw HTML or a React Email TSX component with a default export */
357
- template: string;
354
+ /** Email template HTML. Required unless conversationId is provided. */
355
+ template?: string;
358
356
  variables?: Record<string, unknown>;
359
357
  providerType?: ProviderType;
360
- projectId: string;
358
+ /** Required unless conversationId is provided. */
359
+ projectId?: string;
360
+ /** When provided, template and projectId are resolved automatically from the conversation. */
361
361
  conversationId?: string;
362
362
  }
363
363
  interface SendEmailResponse {
@@ -1041,8 +1041,6 @@ declare class Images {
1041
1041
  interface MigmaConfig {
1042
1042
  /** API base URL. Default: 'https://api.migma.ai/v1' */
1043
1043
  baseUrl?: string;
1044
- /** Request timeout in ms. Default: 30000 */
1045
- timeout?: number;
1046
1044
  /** Max retries on 5xx/429 errors. Default: 2 */
1047
1045
  maxRetries?: number;
1048
1046
  /** Base delay between retries in ms. Default: 1000 */
package/dist/index.js CHANGED
@@ -62,12 +62,9 @@ var MigmaClient = class {
62
62
  }
63
63
  async request(options) {
64
64
  const url = this.buildUrl(options.path, options.query);
65
- const timeout = options.timeout ?? this.config.timeout;
66
65
  const attempts = this.config.maxRetries + 1;
67
66
  let lastError = null;
68
67
  for (let attempt = 0; attempt < attempts; attempt++) {
69
- const controller = new AbortController();
70
- const timeoutId = setTimeout(() => controller.abort(), timeout);
71
68
  try {
72
69
  const response = await fetch(url, {
73
70
  method: options.method,
@@ -76,10 +73,8 @@ var MigmaClient = class {
76
73
  "Content-Type": "application/json",
77
74
  "User-Agent": "migma-node/1.0.0"
78
75
  },
79
- body: options.body ? JSON.stringify(options.body) : void 0,
80
- signal: controller.signal
76
+ body: options.body ? JSON.stringify(options.body) : void 0
81
77
  });
82
- clearTimeout(timeoutId);
83
78
  const json = await response.json();
84
79
  if (!response.ok || !json.success) {
85
80
  const error = new MigmaError(
@@ -98,17 +93,6 @@ var MigmaClient = class {
98
93
  }
99
94
  return { data: json.data, error: null };
100
95
  } catch (err) {
101
- clearTimeout(timeoutId);
102
- if (err instanceof Error && err.name === "AbortError") {
103
- return {
104
- data: null,
105
- error: new MigmaError(
106
- "Request timed out",
107
- 0,
108
- "timeout" /* TIMEOUT */
109
- )
110
- };
111
- }
112
96
  lastError = new MigmaError(
113
97
  err instanceof Error ? err.message : "Network error",
114
98
  0,
@@ -128,9 +112,6 @@ var MigmaClient = class {
128
112
  */
129
113
  async requestWithCount(options) {
130
114
  const url = this.buildUrl(options.path, options.query);
131
- const timeout = options.timeout ?? this.config.timeout;
132
- const controller = new AbortController();
133
- const timeoutId = setTimeout(() => controller.abort(), timeout);
134
115
  try {
135
116
  const response = await fetch(url, {
136
117
  method: options.method,
@@ -139,10 +120,8 @@ var MigmaClient = class {
139
120
  "Content-Type": "application/json",
140
121
  "User-Agent": "migma-node/1.0.0"
141
122
  },
142
- body: options.body ? JSON.stringify(options.body) : void 0,
143
- signal: controller.signal
123
+ body: options.body ? JSON.stringify(options.body) : void 0
144
124
  });
145
- clearTimeout(timeoutId);
146
125
  const json = await response.json();
147
126
  if (!response.ok || !json.success) {
148
127
  return {
@@ -158,17 +137,6 @@ var MigmaClient = class {
158
137
  error: null
159
138
  };
160
139
  } catch (err) {
161
- clearTimeout(timeoutId);
162
- if (err instanceof Error && err.name === "AbortError") {
163
- return {
164
- data: null,
165
- error: new MigmaError(
166
- "Request timed out",
167
- 0,
168
- "timeout" /* TIMEOUT */
169
- )
170
- };
171
- }
172
140
  return {
173
141
  data: null,
174
142
  error: new MigmaError(
@@ -782,7 +750,6 @@ var Migma = class {
782
750
  }
783
751
  this.client = new MigmaClient(apiKey, {
784
752
  baseUrl: config?.baseUrl ?? "https://api.migma.ai/v1",
785
- timeout: config?.timeout ?? 3e4,
786
753
  maxRetries: config?.maxRetries ?? 2,
787
754
  retryDelay: config?.retryDelay ?? 1e3
788
755
  });
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../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/webhooks.ts","../src/resources/knowledge-base.ts","../src/resources/images.ts","../src/migma.ts"],"names":["MigmaErrorCode"],"mappings":"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","file":"index.js","sourcesContent":["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 { MigmaError, MigmaErrorCode } from './errors';\nimport type { ApiResponse, MigmaResult } from './types/common';\n\nexport interface ClientConfig {\n baseUrl: string;\n timeout: number;\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 timeout?: number;\n}\n\nexport class MigmaClient {\n private readonly apiKey: string;\n private readonly config: ClientConfig;\n\n constructor(apiKey: string, config: ClientConfig) {\n this.apiKey = apiKey;\n this.config = config;\n }\n\n async request<T>(options: RequestOptions): Promise<MigmaResult<T>> {\n const url = this.buildUrl(options.path, options.query);\n const timeout = options.timeout ?? this.config.timeout;\n const attempts = this.config.maxRetries + 1;\n\n let lastError: MigmaError | null = null;\n\n for (let attempt = 0; attempt < attempts; attempt++) {\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), timeout);\n\n try {\n const response = await fetch(url, {\n method: options.method,\n headers: {\n Authorization: `Bearer ${this.apiKey}`,\n 'Content-Type': 'application/json',\n 'User-Agent': 'migma-node/1.0.0',\n },\n body: options.body ? JSON.stringify(options.body) : undefined,\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\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 clearTimeout(timeoutId);\n\n if (err instanceof Error && err.name === 'AbortError') {\n return {\n data: null,\n error: new MigmaError(\n 'Request timed out',\n 0,\n MigmaErrorCode.TIMEOUT\n ),\n };\n }\n\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 const timeout = options.timeout ?? this.config.timeout;\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), timeout);\n\n try {\n const response = await fetch(url, {\n method: options.method,\n headers: {\n Authorization: `Bearer ${this.apiKey}`,\n 'Content-Type': 'application/json',\n 'User-Agent': 'migma-node/1.0.0',\n },\n body: options.body ? JSON.stringify(options.body) : undefined,\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\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 clearTimeout(timeoutId);\n\n if (err instanceof Error && err.name === 'AbortError') {\n return {\n data: null,\n error: new MigmaError(\n 'Request timed out',\n 0,\n MigmaErrorCode.TIMEOUT\n ),\n };\n }\n\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>) {\n return this.request<T>({ method: 'POST', path, body });\n }\n\n async patch<T>(path: string, body?: Record<string, unknown>) {\n return this.request<T>({ method: 'PATCH', path, body });\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 ) {\n return this.request<T>({ method: 'DELETE', path, query });\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 { 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 ChangeStatusParams,\n} from '../types/contacts';\n\nexport class Contacts {\n constructor(private readonly client: MigmaClient) {}\n\n async create(params: CreateContactParams): Promise<MigmaResult<Contact>> {\n return this.client.post<Contact>('/contacts', params as unknown as Record<string, unknown>);\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): Promise<MigmaResult<Contact>> {\n return this.client.patch<Contact>(`/contacts/${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>(`/contacts/${id}`, { projectId });\n }\n\n async bulkImport(params: BulkImportParams): Promise<MigmaResult<BulkImportResponse>> {\n return this.client.post<BulkImportResponse>('/contacts/bulk', params as unknown as Record<string, unknown>);\n }\n\n async getBulkImportStatus(jobId: string): Promise<MigmaResult<BulkImportJobStatus>> {\n return this.client.get<BulkImportJobStatus>(`/contacts/bulk/${jobId}`);\n }\n\n async changeStatus(params: ChangeStatusParams): Promise<MigmaResult<{ success: boolean }>> {\n return this.client.post<{ success: boolean }>('/contacts/status', params as unknown as Record<string, unknown>);\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 { 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): Promise<MigmaResult<SendEmailResponse>> {\n return this.client.post<SendEmailResponse>('/sending', params as unknown as Record<string, unknown>);\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 { 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} 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 });\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 async retryImport(projectId: string): Promise<MigmaResult<RetryImportResponse>> {\n return this.client.post<RetryImportResponse>(\n `/projects/import/${projectId}/retry`\n );\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 { MigmaClient } from '../client';\nimport type { MigmaResult } from '../types/common';\nimport type {\n GenerateEmailParams,\n GenerateEmailResponse,\n EmailGenerationStatus,\n SendTestEmailParams,\n SendTestEmailResponse,\n} from '../types/emails';\nimport { poll, type PollingOptions } from '../polling';\n\nexport class Emails {\n constructor(private readonly client: MigmaClient) {}\n\n /** Start async email generation */\n async generate(\n params: GenerateEmailParams\n ): Promise<MigmaResult<GenerateEmailResponse>> {\n return this.client.post<GenerateEmailResponse>(\n '/projects/emails/generate',\n params as unknown as Record<string, unknown>\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 /**\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 ): Promise<MigmaResult<EmailGenerationStatus>> {\n const startResult = await this.generate(params);\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","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 mjml(conversationId: string): Promise<MigmaResult<ExportResult>> {\n return this.client.get<ExportResult>(`/export/mjml/${conversationId}`);\n }\n\n async pdf(conversationId: string): Promise<MigmaResult<ExportResult>> {\n return this.client.get<ExportResult>(`/export/pdf/${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 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","import type { MigmaClient } from '../client';\nimport type { MigmaResult } from '../types/common';\nimport type {\n Webhook,\n WebhookDetail,\n CreateWebhookParams,\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<Webhook>> {\n return this.client.post<Webhook>('/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 { 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 { Webhooks } from './resources/webhooks';\nimport { KnowledgeBase } from './resources/knowledge-base';\nimport { Images } from './resources/images';\n\nexport interface MigmaConfig {\n /** API base URL. Default: 'https://api.migma.ai/v1' */\n baseUrl?: string;\n /** Request timeout in ms. Default: 30000 */\n timeout?: number;\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 webhooks: Webhooks;\n readonly knowledgeBase: KnowledgeBase;\n readonly images: Images;\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 timeout: config?.timeout ?? 30000,\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.webhooks = new Webhooks(this.client);\n this.knowledgeBase = new KnowledgeBase(this.client);\n this.images = new Images(this.client);\n }\n}\n"]}
1
+ {"version":3,"sources":["../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/webhooks.ts","../src/resources/knowledge-base.ts","../src/resources/images.ts","../src/migma.ts"],"names":["MigmaErrorCode"],"mappings":"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","file":"index.js","sourcesContent":["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 { 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}\n\nexport class MigmaClient {\n private readonly apiKey: string;\n private readonly config: ClientConfig;\n\n constructor(apiKey: string, config: ClientConfig) {\n this.apiKey = apiKey;\n this.config = config;\n }\n\n async request<T>(options: RequestOptions): Promise<MigmaResult<T>> {\n const url = this.buildUrl(options.path, options.query);\n const attempts = 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: {\n Authorization: `Bearer ${this.apiKey}`,\n 'Content-Type': 'application/json',\n 'User-Agent': 'migma-node/1.0.0',\n },\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: {\n Authorization: `Bearer ${this.apiKey}`,\n 'Content-Type': 'application/json',\n 'User-Agent': 'migma-node/1.0.0',\n },\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>) {\n return this.request<T>({ method: 'POST', path, body });\n }\n\n async patch<T>(path: string, body?: Record<string, unknown>) {\n return this.request<T>({ method: 'PATCH', path, body });\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 ) {\n return this.request<T>({ method: 'DELETE', path, query });\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 { 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 ChangeStatusParams,\n} from '../types/contacts';\n\nexport class Contacts {\n constructor(private readonly client: MigmaClient) {}\n\n async create(params: CreateContactParams): Promise<MigmaResult<Contact>> {\n return this.client.post<Contact>('/contacts', params as unknown as Record<string, unknown>);\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): Promise<MigmaResult<Contact>> {\n return this.client.patch<Contact>(`/contacts/${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>(`/contacts/${id}`, { projectId });\n }\n\n async bulkImport(params: BulkImportParams): Promise<MigmaResult<BulkImportResponse>> {\n return this.client.post<BulkImportResponse>('/contacts/bulk', params as unknown as Record<string, unknown>);\n }\n\n async getBulkImportStatus(jobId: string): Promise<MigmaResult<BulkImportJobStatus>> {\n return this.client.get<BulkImportJobStatus>(`/contacts/bulk/${jobId}`);\n }\n\n async changeStatus(params: ChangeStatusParams): Promise<MigmaResult<{ success: boolean }>> {\n return this.client.post<{ success: boolean }>('/contacts/status', params as unknown as Record<string, unknown>);\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 { 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): Promise<MigmaResult<SendEmailResponse>> {\n return this.client.post<SendEmailResponse>('/sending', params as unknown as Record<string, unknown>);\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 { 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} 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 });\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 async retryImport(projectId: string): Promise<MigmaResult<RetryImportResponse>> {\n return this.client.post<RetryImportResponse>(\n `/projects/import/${projectId}/retry`\n );\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 { MigmaClient } from '../client';\nimport type { MigmaResult } from '../types/common';\nimport type {\n GenerateEmailParams,\n GenerateEmailResponse,\n EmailGenerationStatus,\n SendTestEmailParams,\n SendTestEmailResponse,\n} from '../types/emails';\nimport { poll, type PollingOptions } from '../polling';\n\nexport class Emails {\n constructor(private readonly client: MigmaClient) {}\n\n /** Start async email generation */\n async generate(\n params: GenerateEmailParams\n ): Promise<MigmaResult<GenerateEmailResponse>> {\n return this.client.post<GenerateEmailResponse>(\n '/projects/emails/generate',\n params as unknown as Record<string, unknown>\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 /**\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 ): Promise<MigmaResult<EmailGenerationStatus>> {\n const startResult = await this.generate(params);\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","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 mjml(conversationId: string): Promise<MigmaResult<ExportResult>> {\n return this.client.get<ExportResult>(`/export/mjml/${conversationId}`);\n }\n\n async pdf(conversationId: string): Promise<MigmaResult<ExportResult>> {\n return this.client.get<ExportResult>(`/export/pdf/${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 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","import type { MigmaClient } from '../client';\nimport type { MigmaResult } from '../types/common';\nimport type {\n Webhook,\n WebhookDetail,\n CreateWebhookParams,\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<Webhook>> {\n return this.client.post<Webhook>('/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 { 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 { Webhooks } from './resources/webhooks';\nimport { KnowledgeBase } from './resources/knowledge-base';\nimport { Images } from './resources/images';\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 webhooks: Webhooks;\n readonly knowledgeBase: KnowledgeBase;\n readonly images: Images;\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.webhooks = new Webhooks(this.client);\n this.knowledgeBase = new KnowledgeBase(this.client);\n this.images = new Images(this.client);\n }\n}\n"]}
package/dist/index.mjs CHANGED
@@ -60,12 +60,9 @@ var MigmaClient = class {
60
60
  }
61
61
  async request(options) {
62
62
  const url = this.buildUrl(options.path, options.query);
63
- const timeout = options.timeout ?? this.config.timeout;
64
63
  const attempts = this.config.maxRetries + 1;
65
64
  let lastError = null;
66
65
  for (let attempt = 0; attempt < attempts; attempt++) {
67
- const controller = new AbortController();
68
- const timeoutId = setTimeout(() => controller.abort(), timeout);
69
66
  try {
70
67
  const response = await fetch(url, {
71
68
  method: options.method,
@@ -74,10 +71,8 @@ var MigmaClient = class {
74
71
  "Content-Type": "application/json",
75
72
  "User-Agent": "migma-node/1.0.0"
76
73
  },
77
- body: options.body ? JSON.stringify(options.body) : void 0,
78
- signal: controller.signal
74
+ body: options.body ? JSON.stringify(options.body) : void 0
79
75
  });
80
- clearTimeout(timeoutId);
81
76
  const json = await response.json();
82
77
  if (!response.ok || !json.success) {
83
78
  const error = new MigmaError(
@@ -96,17 +91,6 @@ var MigmaClient = class {
96
91
  }
97
92
  return { data: json.data, error: null };
98
93
  } catch (err) {
99
- clearTimeout(timeoutId);
100
- if (err instanceof Error && err.name === "AbortError") {
101
- return {
102
- data: null,
103
- error: new MigmaError(
104
- "Request timed out",
105
- 0,
106
- "timeout" /* TIMEOUT */
107
- )
108
- };
109
- }
110
94
  lastError = new MigmaError(
111
95
  err instanceof Error ? err.message : "Network error",
112
96
  0,
@@ -126,9 +110,6 @@ var MigmaClient = class {
126
110
  */
127
111
  async requestWithCount(options) {
128
112
  const url = this.buildUrl(options.path, options.query);
129
- const timeout = options.timeout ?? this.config.timeout;
130
- const controller = new AbortController();
131
- const timeoutId = setTimeout(() => controller.abort(), timeout);
132
113
  try {
133
114
  const response = await fetch(url, {
134
115
  method: options.method,
@@ -137,10 +118,8 @@ var MigmaClient = class {
137
118
  "Content-Type": "application/json",
138
119
  "User-Agent": "migma-node/1.0.0"
139
120
  },
140
- body: options.body ? JSON.stringify(options.body) : void 0,
141
- signal: controller.signal
121
+ body: options.body ? JSON.stringify(options.body) : void 0
142
122
  });
143
- clearTimeout(timeoutId);
144
123
  const json = await response.json();
145
124
  if (!response.ok || !json.success) {
146
125
  return {
@@ -156,17 +135,6 @@ var MigmaClient = class {
156
135
  error: null
157
136
  };
158
137
  } catch (err) {
159
- clearTimeout(timeoutId);
160
- if (err instanceof Error && err.name === "AbortError") {
161
- return {
162
- data: null,
163
- error: new MigmaError(
164
- "Request timed out",
165
- 0,
166
- "timeout" /* TIMEOUT */
167
- )
168
- };
169
- }
170
138
  return {
171
139
  data: null,
172
140
  error: new MigmaError(
@@ -780,7 +748,6 @@ var Migma = class {
780
748
  }
781
749
  this.client = new MigmaClient(apiKey, {
782
750
  baseUrl: config?.baseUrl ?? "https://api.migma.ai/v1",
783
- timeout: config?.timeout ?? 3e4,
784
751
  maxRetries: config?.maxRetries ?? 2,
785
752
  retryDelay: config?.retryDelay ?? 1e3
786
753
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../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/webhooks.ts","../src/resources/knowledge-base.ts","../src/resources/images.ts","../src/migma.ts"],"names":["MigmaErrorCode"],"mappings":"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","file":"index.mjs","sourcesContent":["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 { MigmaError, MigmaErrorCode } from './errors';\nimport type { ApiResponse, MigmaResult } from './types/common';\n\nexport interface ClientConfig {\n baseUrl: string;\n timeout: number;\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 timeout?: number;\n}\n\nexport class MigmaClient {\n private readonly apiKey: string;\n private readonly config: ClientConfig;\n\n constructor(apiKey: string, config: ClientConfig) {\n this.apiKey = apiKey;\n this.config = config;\n }\n\n async request<T>(options: RequestOptions): Promise<MigmaResult<T>> {\n const url = this.buildUrl(options.path, options.query);\n const timeout = options.timeout ?? this.config.timeout;\n const attempts = this.config.maxRetries + 1;\n\n let lastError: MigmaError | null = null;\n\n for (let attempt = 0; attempt < attempts; attempt++) {\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), timeout);\n\n try {\n const response = await fetch(url, {\n method: options.method,\n headers: {\n Authorization: `Bearer ${this.apiKey}`,\n 'Content-Type': 'application/json',\n 'User-Agent': 'migma-node/1.0.0',\n },\n body: options.body ? JSON.stringify(options.body) : undefined,\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\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 clearTimeout(timeoutId);\n\n if (err instanceof Error && err.name === 'AbortError') {\n return {\n data: null,\n error: new MigmaError(\n 'Request timed out',\n 0,\n MigmaErrorCode.TIMEOUT\n ),\n };\n }\n\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 const timeout = options.timeout ?? this.config.timeout;\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), timeout);\n\n try {\n const response = await fetch(url, {\n method: options.method,\n headers: {\n Authorization: `Bearer ${this.apiKey}`,\n 'Content-Type': 'application/json',\n 'User-Agent': 'migma-node/1.0.0',\n },\n body: options.body ? JSON.stringify(options.body) : undefined,\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\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 clearTimeout(timeoutId);\n\n if (err instanceof Error && err.name === 'AbortError') {\n return {\n data: null,\n error: new MigmaError(\n 'Request timed out',\n 0,\n MigmaErrorCode.TIMEOUT\n ),\n };\n }\n\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>) {\n return this.request<T>({ method: 'POST', path, body });\n }\n\n async patch<T>(path: string, body?: Record<string, unknown>) {\n return this.request<T>({ method: 'PATCH', path, body });\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 ) {\n return this.request<T>({ method: 'DELETE', path, query });\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 { 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 ChangeStatusParams,\n} from '../types/contacts';\n\nexport class Contacts {\n constructor(private readonly client: MigmaClient) {}\n\n async create(params: CreateContactParams): Promise<MigmaResult<Contact>> {\n return this.client.post<Contact>('/contacts', params as unknown as Record<string, unknown>);\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): Promise<MigmaResult<Contact>> {\n return this.client.patch<Contact>(`/contacts/${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>(`/contacts/${id}`, { projectId });\n }\n\n async bulkImport(params: BulkImportParams): Promise<MigmaResult<BulkImportResponse>> {\n return this.client.post<BulkImportResponse>('/contacts/bulk', params as unknown as Record<string, unknown>);\n }\n\n async getBulkImportStatus(jobId: string): Promise<MigmaResult<BulkImportJobStatus>> {\n return this.client.get<BulkImportJobStatus>(`/contacts/bulk/${jobId}`);\n }\n\n async changeStatus(params: ChangeStatusParams): Promise<MigmaResult<{ success: boolean }>> {\n return this.client.post<{ success: boolean }>('/contacts/status', params as unknown as Record<string, unknown>);\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 { 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): Promise<MigmaResult<SendEmailResponse>> {\n return this.client.post<SendEmailResponse>('/sending', params as unknown as Record<string, unknown>);\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 { 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} 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 });\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 async retryImport(projectId: string): Promise<MigmaResult<RetryImportResponse>> {\n return this.client.post<RetryImportResponse>(\n `/projects/import/${projectId}/retry`\n );\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 { MigmaClient } from '../client';\nimport type { MigmaResult } from '../types/common';\nimport type {\n GenerateEmailParams,\n GenerateEmailResponse,\n EmailGenerationStatus,\n SendTestEmailParams,\n SendTestEmailResponse,\n} from '../types/emails';\nimport { poll, type PollingOptions } from '../polling';\n\nexport class Emails {\n constructor(private readonly client: MigmaClient) {}\n\n /** Start async email generation */\n async generate(\n params: GenerateEmailParams\n ): Promise<MigmaResult<GenerateEmailResponse>> {\n return this.client.post<GenerateEmailResponse>(\n '/projects/emails/generate',\n params as unknown as Record<string, unknown>\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 /**\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 ): Promise<MigmaResult<EmailGenerationStatus>> {\n const startResult = await this.generate(params);\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","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 mjml(conversationId: string): Promise<MigmaResult<ExportResult>> {\n return this.client.get<ExportResult>(`/export/mjml/${conversationId}`);\n }\n\n async pdf(conversationId: string): Promise<MigmaResult<ExportResult>> {\n return this.client.get<ExportResult>(`/export/pdf/${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 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","import type { MigmaClient } from '../client';\nimport type { MigmaResult } from '../types/common';\nimport type {\n Webhook,\n WebhookDetail,\n CreateWebhookParams,\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<Webhook>> {\n return this.client.post<Webhook>('/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 { 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 { Webhooks } from './resources/webhooks';\nimport { KnowledgeBase } from './resources/knowledge-base';\nimport { Images } from './resources/images';\n\nexport interface MigmaConfig {\n /** API base URL. Default: 'https://api.migma.ai/v1' */\n baseUrl?: string;\n /** Request timeout in ms. Default: 30000 */\n timeout?: number;\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 webhooks: Webhooks;\n readonly knowledgeBase: KnowledgeBase;\n readonly images: Images;\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 timeout: config?.timeout ?? 30000,\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.webhooks = new Webhooks(this.client);\n this.knowledgeBase = new KnowledgeBase(this.client);\n this.images = new Images(this.client);\n }\n}\n"]}
1
+ {"version":3,"sources":["../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/webhooks.ts","../src/resources/knowledge-base.ts","../src/resources/images.ts","../src/migma.ts"],"names":["MigmaErrorCode"],"mappings":"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","file":"index.mjs","sourcesContent":["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 { 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}\n\nexport class MigmaClient {\n private readonly apiKey: string;\n private readonly config: ClientConfig;\n\n constructor(apiKey: string, config: ClientConfig) {\n this.apiKey = apiKey;\n this.config = config;\n }\n\n async request<T>(options: RequestOptions): Promise<MigmaResult<T>> {\n const url = this.buildUrl(options.path, options.query);\n const attempts = 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: {\n Authorization: `Bearer ${this.apiKey}`,\n 'Content-Type': 'application/json',\n 'User-Agent': 'migma-node/1.0.0',\n },\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: {\n Authorization: `Bearer ${this.apiKey}`,\n 'Content-Type': 'application/json',\n 'User-Agent': 'migma-node/1.0.0',\n },\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>) {\n return this.request<T>({ method: 'POST', path, body });\n }\n\n async patch<T>(path: string, body?: Record<string, unknown>) {\n return this.request<T>({ method: 'PATCH', path, body });\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 ) {\n return this.request<T>({ method: 'DELETE', path, query });\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 { 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 ChangeStatusParams,\n} from '../types/contacts';\n\nexport class Contacts {\n constructor(private readonly client: MigmaClient) {}\n\n async create(params: CreateContactParams): Promise<MigmaResult<Contact>> {\n return this.client.post<Contact>('/contacts', params as unknown as Record<string, unknown>);\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): Promise<MigmaResult<Contact>> {\n return this.client.patch<Contact>(`/contacts/${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>(`/contacts/${id}`, { projectId });\n }\n\n async bulkImport(params: BulkImportParams): Promise<MigmaResult<BulkImportResponse>> {\n return this.client.post<BulkImportResponse>('/contacts/bulk', params as unknown as Record<string, unknown>);\n }\n\n async getBulkImportStatus(jobId: string): Promise<MigmaResult<BulkImportJobStatus>> {\n return this.client.get<BulkImportJobStatus>(`/contacts/bulk/${jobId}`);\n }\n\n async changeStatus(params: ChangeStatusParams): Promise<MigmaResult<{ success: boolean }>> {\n return this.client.post<{ success: boolean }>('/contacts/status', params as unknown as Record<string, unknown>);\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 { 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): Promise<MigmaResult<SendEmailResponse>> {\n return this.client.post<SendEmailResponse>('/sending', params as unknown as Record<string, unknown>);\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 { 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} 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 });\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 async retryImport(projectId: string): Promise<MigmaResult<RetryImportResponse>> {\n return this.client.post<RetryImportResponse>(\n `/projects/import/${projectId}/retry`\n );\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 { MigmaClient } from '../client';\nimport type { MigmaResult } from '../types/common';\nimport type {\n GenerateEmailParams,\n GenerateEmailResponse,\n EmailGenerationStatus,\n SendTestEmailParams,\n SendTestEmailResponse,\n} from '../types/emails';\nimport { poll, type PollingOptions } from '../polling';\n\nexport class Emails {\n constructor(private readonly client: MigmaClient) {}\n\n /** Start async email generation */\n async generate(\n params: GenerateEmailParams\n ): Promise<MigmaResult<GenerateEmailResponse>> {\n return this.client.post<GenerateEmailResponse>(\n '/projects/emails/generate',\n params as unknown as Record<string, unknown>\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 /**\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 ): Promise<MigmaResult<EmailGenerationStatus>> {\n const startResult = await this.generate(params);\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","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 mjml(conversationId: string): Promise<MigmaResult<ExportResult>> {\n return this.client.get<ExportResult>(`/export/mjml/${conversationId}`);\n }\n\n async pdf(conversationId: string): Promise<MigmaResult<ExportResult>> {\n return this.client.get<ExportResult>(`/export/pdf/${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 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","import type { MigmaClient } from '../client';\nimport type { MigmaResult } from '../types/common';\nimport type {\n Webhook,\n WebhookDetail,\n CreateWebhookParams,\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<Webhook>> {\n return this.client.post<Webhook>('/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 { 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 { Webhooks } from './resources/webhooks';\nimport { KnowledgeBase } from './resources/knowledge-base';\nimport { Images } from './resources/images';\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 webhooks: Webhooks;\n readonly knowledgeBase: KnowledgeBase;\n readonly images: Images;\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.webhooks = new Webhooks(this.client);\n this.knowledgeBase = new KnowledgeBase(this.client);\n this.images = new Images(this.client);\n }\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "migma",
3
- "version": "1.0.5",
3
+ "version": "1.0.6",
4
4
  "description": "Official Node.js SDK for the Migma email platform API",
5
5
  "main": "./dist/index.cjs",
6
6
  "module": "./dist/index.mjs",