migma 1.1.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.mts CHANGED
@@ -351,6 +351,7 @@ interface SendEmailParams {
351
351
  from: string;
352
352
  fromName: string;
353
353
  replyTo?: string;
354
+ bcc?: string[];
354
355
  subject: string;
355
356
  /** Email template HTML. Required unless conversationId is provided. */
356
357
  template?: string;
@@ -467,6 +468,24 @@ interface RetryImportResponse {
467
468
  status: string;
468
469
  message: string;
469
470
  }
471
+ type FieldCatalogValueType = 'string' | 'number' | 'boolean' | 'date' | 'url' | 'unknown';
472
+ interface FieldCatalogEntry {
473
+ key: string;
474
+ label: string;
475
+ type: FieldCatalogValueType;
476
+ fillRate: number;
477
+ sample: string[];
478
+ auto: boolean;
479
+ }
480
+ interface FieldCatalogResponse {
481
+ entries: FieldCatalogEntry[];
482
+ totalSubscribers: number;
483
+ computedAt: string;
484
+ }
485
+ interface FieldCatalogParams {
486
+ segmentId?: string;
487
+ tag?: string;
488
+ }
470
489
 
471
490
  interface PollingOptions {
472
491
  /** Polling interval in ms. Default: 2000 */
@@ -493,6 +512,12 @@ declare class Projects {
493
512
  import(params: ImportProjectParams): Promise<MigmaResult<ImportProjectResponse>>;
494
513
  getImportStatus(projectId: string): Promise<MigmaResult<ImportStatusResponse>>;
495
514
  retryImport(projectId: string): Promise<MigmaResult<RetryImportResponse>>;
515
+ /**
516
+ * Get the project's subscriber field catalog: which fields exist, how often
517
+ * each is populated, example values, and whether it's auto-filled at send
518
+ * time. Optionally scope by segment or tag.
519
+ */
520
+ fieldCatalog(projectId: string, params?: FieldCatalogParams): Promise<MigmaResult<FieldCatalogResponse>>;
496
521
  /**
497
522
  * Import a project and wait for completion.
498
523
  * Polls getImportStatus until status is 'active' or 'error'.
@@ -1102,6 +1127,8 @@ interface Campaign {
1102
1127
  sentAt?: string | null;
1103
1128
  completedAt?: string | null;
1104
1129
  error?: string | null;
1130
+ archived?: boolean;
1131
+ archivedAt?: string | null;
1105
1132
  triggeredBy?: 'manual' | 'api' | 'automation';
1106
1133
  createdAt: string;
1107
1134
  updatedAt: string;
@@ -1126,6 +1153,7 @@ interface ListCampaignsParams {
1126
1153
  status?: CampaignStatus;
1127
1154
  page?: number;
1128
1155
  limit?: number;
1156
+ archived?: boolean;
1129
1157
  }
1130
1158
  interface ListCampaignsResponse {
1131
1159
  campaigns: Campaign[];
@@ -1145,6 +1173,8 @@ declare class Campaigns {
1145
1173
  send(id: string): Promise<MigmaResult<Campaign>>;
1146
1174
  schedule(id: string, params: ScheduleCampaignParams): Promise<MigmaResult<Campaign>>;
1147
1175
  cancel(id: string): Promise<MigmaResult<Campaign>>;
1176
+ archive(id: string): Promise<MigmaResult<Campaign>>;
1177
+ unarchive(id: string): Promise<MigmaResult<Campaign>>;
1148
1178
  }
1149
1179
 
1150
1180
  interface MigmaConfig {
@@ -1175,4 +1205,4 @@ declare class Migma {
1175
1205
  constructor(apiKey: string, config?: MigmaConfig);
1176
1206
  }
1177
1207
 
1178
- export { type AddImageParams, type AddKnowledgeBaseParams, type AnalyzeDeliverabilityParams, type AnalyzeLinksParams, type ApiResponse, type BatchStatus, type BulkImportAsyncResponse, type BulkImportContactItem, type BulkImportJobStatus, type BulkImportParams, type BulkImportResponse, type BulkImportSyncResponse, type Campaign, type CampaignStatus, type ChangeStatusParams, type CheckCompatibilityParams, type CheckSpellingParams, type CheckedLink, type ClientConfig, type CompatibilityResponse, type Contact, type ContactStatus, type CreateCampaignParams, type CreateContactParams, type CreateDomainParams, type CreateManagedDomainParams, type CreatePreviewParams, type CreatePreviewResponse, type CreateSegmentParams, type CreateTagParams, type CreateTopicParams, type CreateWebhookParams, type DeleteResponse, type DeliverabilityResponse, type DeviceCategoriesResponse, type DnsRecord, type Domain, type DomainAvailability, type DomainDeleteResponse, type DomainVerificationResult, type EmailGenerationResult, type EmailGenerationStatus, type EmailImage, type ExportFile, type ExportFormat, type ExportFormatsResponse, type ExportResult, type ExportStatusResponse, type GenerateEmailParams, type GenerateEmailResponse, type GetDevicePreviewResponse, type GetPreviewResponse, type GetPreviewStatusResponse, type GetSupportedDevicesResponse, type HubspotExportParams, type ImportProjectParams, type ImportProjectResponse, type ImportStatusResponse, type KnowledgeBaseEntry, type KnowledgeBaseListResponse, type LinkAnalysisResponse, type ListCampaignsParams, type ListCampaignsResponse, type ListContactsParams, type ListContactsResponse, type ListEmailsEmail, type ListEmailsParams, type ListEmailsResponse, type ListProjectsParams, type ListProjectsResponse, type ListSegmentsResponse, type ListTagsParams, type ListTagsResponse, type ListTopicsParams, type ListTopicsResponse, type ListWebhooksResponse, type LogosResponse, type MessageResponse, Migma, MigmaClient, type MigmaConfig, MigmaError, MigmaErrorCode, type MigmaResult, type PollingOptions, type PreviewDevice, type PreviewDeviceCategory, type PreviewDeviceStatus, type PreviewMetadata, type PreviewStatus, type Project, type ProjectImage, type ProviderType, type RecipientType, type RetryImportResponse, type ScheduleCampaignParams, type Segment, type SegmentFilters, type SendEmailParams, type SendEmailResponse, type SendTestEmailParams, type SendTestEmailResponse, type SpellingResponse, type SupportedDevice, type Tag, type Topic, type TopicSubscriptionParams, type TopicSubscriptionResponse, type UpdateContactParams, type UpdateDomainParams, type UpdateImageParams, type UpdateKnowledgeBaseParams, type UpdateLogosParams, type UpdateSegmentParams, type UpdateTagParams, type UpdateTopicParams, type UpdateWebhookParams, type ValidateAllParams, type ValidateAllResponse, type Webhook, type WebhookDeliveriesResponse, type WebhookDelivery, type WebhookDetail, type WebhookEvent, type WebhookEventType, type WebhookEventsResponse, type WebhookTestResult, poll };
1208
+ export { type AddImageParams, type AddKnowledgeBaseParams, type AnalyzeDeliverabilityParams, type AnalyzeLinksParams, type ApiResponse, type BatchStatus, type BulkImportAsyncResponse, type BulkImportContactItem, type BulkImportJobStatus, type BulkImportParams, type BulkImportResponse, type BulkImportSyncResponse, type Campaign, type CampaignStatus, type ChangeStatusParams, type CheckCompatibilityParams, type CheckSpellingParams, type CheckedLink, type ClientConfig, type CompatibilityResponse, type Contact, type ContactStatus, type CreateCampaignParams, type CreateContactParams, type CreateDomainParams, type CreateManagedDomainParams, type CreatePreviewParams, type CreatePreviewResponse, type CreateSegmentParams, type CreateTagParams, type CreateTopicParams, type CreateWebhookParams, type DeleteResponse, type DeliverabilityResponse, type DeviceCategoriesResponse, type DnsRecord, type Domain, type DomainAvailability, type DomainDeleteResponse, type DomainVerificationResult, type EmailGenerationResult, type EmailGenerationStatus, type EmailImage, type ExportFile, type ExportFormat, type ExportFormatsResponse, type ExportResult, type ExportStatusResponse, type FieldCatalogEntry, type FieldCatalogParams, type FieldCatalogResponse, type FieldCatalogValueType, type GenerateEmailParams, type GenerateEmailResponse, type GetDevicePreviewResponse, type GetPreviewResponse, type GetPreviewStatusResponse, type GetSupportedDevicesResponse, type HubspotExportParams, type ImportProjectParams, type ImportProjectResponse, type ImportStatusResponse, type KnowledgeBaseEntry, type KnowledgeBaseListResponse, type LinkAnalysisResponse, type ListCampaignsParams, type ListCampaignsResponse, type ListContactsParams, type ListContactsResponse, type ListEmailsEmail, type ListEmailsParams, type ListEmailsResponse, type ListProjectsParams, type ListProjectsResponse, type ListSegmentsResponse, type ListTagsParams, type ListTagsResponse, type ListTopicsParams, type ListTopicsResponse, type ListWebhooksResponse, type LogosResponse, type MessageResponse, Migma, MigmaClient, type MigmaConfig, MigmaError, MigmaErrorCode, type MigmaResult, type PollingOptions, type PreviewDevice, type PreviewDeviceCategory, type PreviewDeviceStatus, type PreviewMetadata, type PreviewStatus, type Project, type ProjectImage, type ProviderType, type RecipientType, type RetryImportResponse, type ScheduleCampaignParams, type Segment, type SegmentFilters, type SendEmailParams, type SendEmailResponse, type SendTestEmailParams, type SendTestEmailResponse, type SpellingResponse, type SupportedDevice, type Tag, type Topic, type TopicSubscriptionParams, type TopicSubscriptionResponse, type UpdateContactParams, type UpdateDomainParams, type UpdateImageParams, type UpdateKnowledgeBaseParams, type UpdateLogosParams, type UpdateSegmentParams, type UpdateTagParams, type UpdateTopicParams, type UpdateWebhookParams, type ValidateAllParams, type ValidateAllResponse, type Webhook, type WebhookDeliveriesResponse, type WebhookDelivery, type WebhookDetail, type WebhookEvent, type WebhookEventType, type WebhookEventsResponse, type WebhookTestResult, poll };
package/dist/index.d.ts CHANGED
@@ -351,6 +351,7 @@ interface SendEmailParams {
351
351
  from: string;
352
352
  fromName: string;
353
353
  replyTo?: string;
354
+ bcc?: string[];
354
355
  subject: string;
355
356
  /** Email template HTML. Required unless conversationId is provided. */
356
357
  template?: string;
@@ -467,6 +468,24 @@ interface RetryImportResponse {
467
468
  status: string;
468
469
  message: string;
469
470
  }
471
+ type FieldCatalogValueType = 'string' | 'number' | 'boolean' | 'date' | 'url' | 'unknown';
472
+ interface FieldCatalogEntry {
473
+ key: string;
474
+ label: string;
475
+ type: FieldCatalogValueType;
476
+ fillRate: number;
477
+ sample: string[];
478
+ auto: boolean;
479
+ }
480
+ interface FieldCatalogResponse {
481
+ entries: FieldCatalogEntry[];
482
+ totalSubscribers: number;
483
+ computedAt: string;
484
+ }
485
+ interface FieldCatalogParams {
486
+ segmentId?: string;
487
+ tag?: string;
488
+ }
470
489
 
471
490
  interface PollingOptions {
472
491
  /** Polling interval in ms. Default: 2000 */
@@ -493,6 +512,12 @@ declare class Projects {
493
512
  import(params: ImportProjectParams): Promise<MigmaResult<ImportProjectResponse>>;
494
513
  getImportStatus(projectId: string): Promise<MigmaResult<ImportStatusResponse>>;
495
514
  retryImport(projectId: string): Promise<MigmaResult<RetryImportResponse>>;
515
+ /**
516
+ * Get the project's subscriber field catalog: which fields exist, how often
517
+ * each is populated, example values, and whether it's auto-filled at send
518
+ * time. Optionally scope by segment or tag.
519
+ */
520
+ fieldCatalog(projectId: string, params?: FieldCatalogParams): Promise<MigmaResult<FieldCatalogResponse>>;
496
521
  /**
497
522
  * Import a project and wait for completion.
498
523
  * Polls getImportStatus until status is 'active' or 'error'.
@@ -1102,6 +1127,8 @@ interface Campaign {
1102
1127
  sentAt?: string | null;
1103
1128
  completedAt?: string | null;
1104
1129
  error?: string | null;
1130
+ archived?: boolean;
1131
+ archivedAt?: string | null;
1105
1132
  triggeredBy?: 'manual' | 'api' | 'automation';
1106
1133
  createdAt: string;
1107
1134
  updatedAt: string;
@@ -1126,6 +1153,7 @@ interface ListCampaignsParams {
1126
1153
  status?: CampaignStatus;
1127
1154
  page?: number;
1128
1155
  limit?: number;
1156
+ archived?: boolean;
1129
1157
  }
1130
1158
  interface ListCampaignsResponse {
1131
1159
  campaigns: Campaign[];
@@ -1145,6 +1173,8 @@ declare class Campaigns {
1145
1173
  send(id: string): Promise<MigmaResult<Campaign>>;
1146
1174
  schedule(id: string, params: ScheduleCampaignParams): Promise<MigmaResult<Campaign>>;
1147
1175
  cancel(id: string): Promise<MigmaResult<Campaign>>;
1176
+ archive(id: string): Promise<MigmaResult<Campaign>>;
1177
+ unarchive(id: string): Promise<MigmaResult<Campaign>>;
1148
1178
  }
1149
1179
 
1150
1180
  interface MigmaConfig {
@@ -1175,4 +1205,4 @@ declare class Migma {
1175
1205
  constructor(apiKey: string, config?: MigmaConfig);
1176
1206
  }
1177
1207
 
1178
- export { type AddImageParams, type AddKnowledgeBaseParams, type AnalyzeDeliverabilityParams, type AnalyzeLinksParams, type ApiResponse, type BatchStatus, type BulkImportAsyncResponse, type BulkImportContactItem, type BulkImportJobStatus, type BulkImportParams, type BulkImportResponse, type BulkImportSyncResponse, type Campaign, type CampaignStatus, type ChangeStatusParams, type CheckCompatibilityParams, type CheckSpellingParams, type CheckedLink, type ClientConfig, type CompatibilityResponse, type Contact, type ContactStatus, type CreateCampaignParams, type CreateContactParams, type CreateDomainParams, type CreateManagedDomainParams, type CreatePreviewParams, type CreatePreviewResponse, type CreateSegmentParams, type CreateTagParams, type CreateTopicParams, type CreateWebhookParams, type DeleteResponse, type DeliverabilityResponse, type DeviceCategoriesResponse, type DnsRecord, type Domain, type DomainAvailability, type DomainDeleteResponse, type DomainVerificationResult, type EmailGenerationResult, type EmailGenerationStatus, type EmailImage, type ExportFile, type ExportFormat, type ExportFormatsResponse, type ExportResult, type ExportStatusResponse, type GenerateEmailParams, type GenerateEmailResponse, type GetDevicePreviewResponse, type GetPreviewResponse, type GetPreviewStatusResponse, type GetSupportedDevicesResponse, type HubspotExportParams, type ImportProjectParams, type ImportProjectResponse, type ImportStatusResponse, type KnowledgeBaseEntry, type KnowledgeBaseListResponse, type LinkAnalysisResponse, type ListCampaignsParams, type ListCampaignsResponse, type ListContactsParams, type ListContactsResponse, type ListEmailsEmail, type ListEmailsParams, type ListEmailsResponse, type ListProjectsParams, type ListProjectsResponse, type ListSegmentsResponse, type ListTagsParams, type ListTagsResponse, type ListTopicsParams, type ListTopicsResponse, type ListWebhooksResponse, type LogosResponse, type MessageResponse, Migma, MigmaClient, type MigmaConfig, MigmaError, MigmaErrorCode, type MigmaResult, type PollingOptions, type PreviewDevice, type PreviewDeviceCategory, type PreviewDeviceStatus, type PreviewMetadata, type PreviewStatus, type Project, type ProjectImage, type ProviderType, type RecipientType, type RetryImportResponse, type ScheduleCampaignParams, type Segment, type SegmentFilters, type SendEmailParams, type SendEmailResponse, type SendTestEmailParams, type SendTestEmailResponse, type SpellingResponse, type SupportedDevice, type Tag, type Topic, type TopicSubscriptionParams, type TopicSubscriptionResponse, type UpdateContactParams, type UpdateDomainParams, type UpdateImageParams, type UpdateKnowledgeBaseParams, type UpdateLogosParams, type UpdateSegmentParams, type UpdateTagParams, type UpdateTopicParams, type UpdateWebhookParams, type ValidateAllParams, type ValidateAllResponse, type Webhook, type WebhookDeliveriesResponse, type WebhookDelivery, type WebhookDetail, type WebhookEvent, type WebhookEventType, type WebhookEventsResponse, type WebhookTestResult, poll };
1208
+ export { type AddImageParams, type AddKnowledgeBaseParams, type AnalyzeDeliverabilityParams, type AnalyzeLinksParams, type ApiResponse, type BatchStatus, type BulkImportAsyncResponse, type BulkImportContactItem, type BulkImportJobStatus, type BulkImportParams, type BulkImportResponse, type BulkImportSyncResponse, type Campaign, type CampaignStatus, type ChangeStatusParams, type CheckCompatibilityParams, type CheckSpellingParams, type CheckedLink, type ClientConfig, type CompatibilityResponse, type Contact, type ContactStatus, type CreateCampaignParams, type CreateContactParams, type CreateDomainParams, type CreateManagedDomainParams, type CreatePreviewParams, type CreatePreviewResponse, type CreateSegmentParams, type CreateTagParams, type CreateTopicParams, type CreateWebhookParams, type DeleteResponse, type DeliverabilityResponse, type DeviceCategoriesResponse, type DnsRecord, type Domain, type DomainAvailability, type DomainDeleteResponse, type DomainVerificationResult, type EmailGenerationResult, type EmailGenerationStatus, type EmailImage, type ExportFile, type ExportFormat, type ExportFormatsResponse, type ExportResult, type ExportStatusResponse, type FieldCatalogEntry, type FieldCatalogParams, type FieldCatalogResponse, type FieldCatalogValueType, type GenerateEmailParams, type GenerateEmailResponse, type GetDevicePreviewResponse, type GetPreviewResponse, type GetPreviewStatusResponse, type GetSupportedDevicesResponse, type HubspotExportParams, type ImportProjectParams, type ImportProjectResponse, type ImportStatusResponse, type KnowledgeBaseEntry, type KnowledgeBaseListResponse, type LinkAnalysisResponse, type ListCampaignsParams, type ListCampaignsResponse, type ListContactsParams, type ListContactsResponse, type ListEmailsEmail, type ListEmailsParams, type ListEmailsResponse, type ListProjectsParams, type ListProjectsResponse, type ListSegmentsResponse, type ListTagsParams, type ListTagsResponse, type ListTopicsParams, type ListTopicsResponse, type ListWebhooksResponse, type LogosResponse, type MessageResponse, Migma, MigmaClient, type MigmaConfig, MigmaError, MigmaErrorCode, type MigmaResult, type PollingOptions, type PreviewDevice, type PreviewDeviceCategory, type PreviewDeviceStatus, type PreviewMetadata, type PreviewStatus, type Project, type ProjectImage, type ProviderType, type RecipientType, type RetryImportResponse, type ScheduleCampaignParams, type Segment, type SegmentFilters, type SendEmailParams, type SendEmailResponse, type SendTestEmailParams, type SendTestEmailResponse, type SpellingResponse, type SupportedDevice, type Tag, type Topic, type TopicSubscriptionParams, type TopicSubscriptionResponse, type UpdateContactParams, type UpdateDomainParams, type UpdateImageParams, type UpdateKnowledgeBaseParams, type UpdateLogosParams, type UpdateSegmentParams, type UpdateTagParams, type UpdateTopicParams, type UpdateWebhookParams, type ValidateAllParams, type ValidateAllResponse, type Webhook, type WebhookDeliveriesResponse, type WebhookDelivery, type WebhookDetail, type WebhookEvent, type WebhookEventType, type WebhookEventsResponse, type WebhookTestResult, poll };
package/dist/index.js CHANGED
@@ -71,7 +71,7 @@ var MigmaClient = class {
71
71
  headers: {
72
72
  Authorization: `Bearer ${this.apiKey}`,
73
73
  "Content-Type": "application/json",
74
- "User-Agent": "migma-node/1.0.0"
74
+ "User-Agent": "migma-node/1.1.0"
75
75
  },
76
76
  body: options.body ? JSON.stringify(options.body) : void 0
77
77
  });
@@ -404,6 +404,20 @@ var Projects = class {
404
404
  `/projects/import/${projectId}/retry`
405
405
  );
406
406
  }
407
+ /**
408
+ * Get the project's subscriber field catalog: which fields exist, how often
409
+ * each is populated, example values, and whether it's auto-filled at send
410
+ * time. Optionally scope by segment or tag.
411
+ */
412
+ async fieldCatalog(projectId, params) {
413
+ return this.client.get(
414
+ `/projects/${projectId}/field-catalog`,
415
+ {
416
+ segmentId: params?.segmentId,
417
+ tag: params?.tag
418
+ }
419
+ );
420
+ }
407
421
  /**
408
422
  * Import a project and wait for completion.
409
423
  * Polls getImportStatus until status is 'active' or 'error'.
@@ -742,12 +756,13 @@ var Campaigns = class {
742
756
  this.client = client;
743
757
  }
744
758
  async list(params) {
745
- const { projectId, status, page, limit } = params;
759
+ const { projectId, status, page, limit, archived } = params;
746
760
  return this.client.get("/campaigns", {
747
761
  projectId,
748
762
  status,
749
763
  page,
750
- limit
764
+ limit,
765
+ archived
751
766
  });
752
767
  }
753
768
  async create(params) {
@@ -765,6 +780,12 @@ var Campaigns = class {
765
780
  async cancel(id) {
766
781
  return this.client.post(`/campaigns/${id}/cancel`);
767
782
  }
783
+ async archive(id) {
784
+ return this.client.post(`/campaigns/${id}/archive`);
785
+ }
786
+ async unarchive(id) {
787
+ return this.client.post(`/campaigns/${id}/unarchive`);
788
+ }
768
789
  };
769
790
 
770
791
  // src/migma.ts
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/resources/campaigns.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 ListEmailsParams,\n ListEmailsResponse,\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 /** List emails for a project */\n async list(\n params: ListEmailsParams\n ): Promise<MigmaResult<ListEmailsResponse>> {\n const { projectId, limit, page, status, search } = params;\n return this.client.get<ListEmailsResponse>('/projects/emails', {\n projectId,\n limit,\n page,\n status,\n search,\n });\n }\n\n /** Start async email generation */\n async generate(\n params: GenerateEmailParams\n ): 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 type { MigmaClient } from '../client';\nimport type { MigmaResult } from '../types/common';\nimport type {\n Campaign,\n CreateCampaignParams,\n ListCampaignsParams,\n ListCampaignsResponse,\n ScheduleCampaignParams,\n} from '../types/campaigns';\n\nexport class Campaigns {\n constructor(private readonly client: MigmaClient) {}\n\n async list(params: ListCampaignsParams): Promise<MigmaResult<ListCampaignsResponse>> {\n const { projectId, status, page, limit } = params;\n return this.client.get<ListCampaignsResponse>('/campaigns', {\n projectId,\n status,\n page,\n limit,\n });\n }\n\n async create(params: CreateCampaignParams): Promise<MigmaResult<Campaign>> {\n return this.client.post<Campaign>('/campaigns', params as unknown as Record<string, unknown>);\n }\n\n async get(id: string): Promise<MigmaResult<Campaign>> {\n return this.client.get<Campaign>(`/campaigns/${id}`);\n }\n\n async send(id: string): Promise<MigmaResult<Campaign>> {\n return this.client.post<Campaign>(`/campaigns/${id}/send`);\n }\n\n async schedule(id: string, params: ScheduleCampaignParams): Promise<MigmaResult<Campaign>> {\n return this.client.post<Campaign>(`/campaigns/${id}/schedule`, params as unknown as Record<string, unknown>);\n }\n\n async cancel(id: string): Promise<MigmaResult<Campaign>> {\n return this.client.post<Campaign>(`/campaigns/${id}/cancel`);\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';\nimport { Campaigns } from './resources/campaigns';\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 readonly campaigns: Campaigns;\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 this.campaigns = new Campaigns(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/resources/campaigns.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.1.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 FieldCatalogResponse,\n FieldCatalogParams,\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 * Get the project's subscriber field catalog: which fields exist, how often\n * each is populated, example values, and whether it's auto-filled at send\n * time. Optionally scope by segment or tag.\n */\n async fieldCatalog(\n projectId: string,\n params?: FieldCatalogParams\n ): Promise<MigmaResult<FieldCatalogResponse>> {\n return this.client.get<FieldCatalogResponse>(\n `/projects/${projectId}/field-catalog`,\n {\n segmentId: params?.segmentId,\n tag: params?.tag,\n }\n );\n }\n\n /**\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 ListEmailsParams,\n ListEmailsResponse,\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 /** List emails for a project */\n async list(\n params: ListEmailsParams\n ): Promise<MigmaResult<ListEmailsResponse>> {\n const { projectId, limit, page, status, search } = params;\n return this.client.get<ListEmailsResponse>('/projects/emails', {\n projectId,\n limit,\n page,\n status,\n search,\n });\n }\n\n /** Start async email generation */\n async generate(\n params: GenerateEmailParams\n ): 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 type { MigmaClient } from '../client';\nimport type { MigmaResult } from '../types/common';\nimport type {\n Campaign,\n CreateCampaignParams,\n ListCampaignsParams,\n ListCampaignsResponse,\n ScheduleCampaignParams,\n} from '../types/campaigns';\n\nexport class Campaigns {\n constructor(private readonly client: MigmaClient) {}\n\n async list(params: ListCampaignsParams): Promise<MigmaResult<ListCampaignsResponse>> {\n const { projectId, status, page, limit, archived } = params;\n return this.client.get<ListCampaignsResponse>('/campaigns', {\n projectId,\n status,\n page,\n limit,\n archived,\n });\n }\n\n async create(params: CreateCampaignParams): Promise<MigmaResult<Campaign>> {\n return this.client.post<Campaign>('/campaigns', params as unknown as Record<string, unknown>);\n }\n\n async get(id: string): Promise<MigmaResult<Campaign>> {\n return this.client.get<Campaign>(`/campaigns/${id}`);\n }\n\n async send(id: string): Promise<MigmaResult<Campaign>> {\n return this.client.post<Campaign>(`/campaigns/${id}/send`);\n }\n\n async schedule(id: string, params: ScheduleCampaignParams): Promise<MigmaResult<Campaign>> {\n return this.client.post<Campaign>(`/campaigns/${id}/schedule`, params as unknown as Record<string, unknown>);\n }\n\n async cancel(id: string): Promise<MigmaResult<Campaign>> {\n return this.client.post<Campaign>(`/campaigns/${id}/cancel`);\n }\n\n async archive(id: string): Promise<MigmaResult<Campaign>> {\n return this.client.post<Campaign>(`/campaigns/${id}/archive`);\n }\n\n async unarchive(id: string): Promise<MigmaResult<Campaign>> {\n return this.client.post<Campaign>(`/campaigns/${id}/unarchive`);\n }\n}\n","import { 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';\nimport { Campaigns } from './resources/campaigns';\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 readonly campaigns: Campaigns;\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 this.campaigns = new Campaigns(this.client);\n }\n}\n"]}
package/dist/index.mjs CHANGED
@@ -69,7 +69,7 @@ var MigmaClient = class {
69
69
  headers: {
70
70
  Authorization: `Bearer ${this.apiKey}`,
71
71
  "Content-Type": "application/json",
72
- "User-Agent": "migma-node/1.0.0"
72
+ "User-Agent": "migma-node/1.1.0"
73
73
  },
74
74
  body: options.body ? JSON.stringify(options.body) : void 0
75
75
  });
@@ -402,6 +402,20 @@ var Projects = class {
402
402
  `/projects/import/${projectId}/retry`
403
403
  );
404
404
  }
405
+ /**
406
+ * Get the project's subscriber field catalog: which fields exist, how often
407
+ * each is populated, example values, and whether it's auto-filled at send
408
+ * time. Optionally scope by segment or tag.
409
+ */
410
+ async fieldCatalog(projectId, params) {
411
+ return this.client.get(
412
+ `/projects/${projectId}/field-catalog`,
413
+ {
414
+ segmentId: params?.segmentId,
415
+ tag: params?.tag
416
+ }
417
+ );
418
+ }
405
419
  /**
406
420
  * Import a project and wait for completion.
407
421
  * Polls getImportStatus until status is 'active' or 'error'.
@@ -740,12 +754,13 @@ var Campaigns = class {
740
754
  this.client = client;
741
755
  }
742
756
  async list(params) {
743
- const { projectId, status, page, limit } = params;
757
+ const { projectId, status, page, limit, archived } = params;
744
758
  return this.client.get("/campaigns", {
745
759
  projectId,
746
760
  status,
747
761
  page,
748
- limit
762
+ limit,
763
+ archived
749
764
  });
750
765
  }
751
766
  async create(params) {
@@ -763,6 +778,12 @@ var Campaigns = class {
763
778
  async cancel(id) {
764
779
  return this.client.post(`/campaigns/${id}/cancel`);
765
780
  }
781
+ async archive(id) {
782
+ return this.client.post(`/campaigns/${id}/archive`);
783
+ }
784
+ async unarchive(id) {
785
+ return this.client.post(`/campaigns/${id}/unarchive`);
786
+ }
766
787
  };
767
788
 
768
789
  // src/migma.ts
@@ -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/resources/campaigns.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 ListEmailsParams,\n ListEmailsResponse,\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 /** List emails for a project */\n async list(\n params: ListEmailsParams\n ): Promise<MigmaResult<ListEmailsResponse>> {\n const { projectId, limit, page, status, search } = params;\n return this.client.get<ListEmailsResponse>('/projects/emails', {\n projectId,\n limit,\n page,\n status,\n search,\n });\n }\n\n /** Start async email generation */\n async generate(\n params: GenerateEmailParams\n ): 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 type { MigmaClient } from '../client';\nimport type { MigmaResult } from '../types/common';\nimport type {\n Campaign,\n CreateCampaignParams,\n ListCampaignsParams,\n ListCampaignsResponse,\n ScheduleCampaignParams,\n} from '../types/campaigns';\n\nexport class Campaigns {\n constructor(private readonly client: MigmaClient) {}\n\n async list(params: ListCampaignsParams): Promise<MigmaResult<ListCampaignsResponse>> {\n const { projectId, status, page, limit } = params;\n return this.client.get<ListCampaignsResponse>('/campaigns', {\n projectId,\n status,\n page,\n limit,\n });\n }\n\n async create(params: CreateCampaignParams): Promise<MigmaResult<Campaign>> {\n return this.client.post<Campaign>('/campaigns', params as unknown as Record<string, unknown>);\n }\n\n async get(id: string): Promise<MigmaResult<Campaign>> {\n return this.client.get<Campaign>(`/campaigns/${id}`);\n }\n\n async send(id: string): Promise<MigmaResult<Campaign>> {\n return this.client.post<Campaign>(`/campaigns/${id}/send`);\n }\n\n async schedule(id: string, params: ScheduleCampaignParams): Promise<MigmaResult<Campaign>> {\n return this.client.post<Campaign>(`/campaigns/${id}/schedule`, params as unknown as Record<string, unknown>);\n }\n\n async cancel(id: string): Promise<MigmaResult<Campaign>> {\n return this.client.post<Campaign>(`/campaigns/${id}/cancel`);\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';\nimport { Campaigns } from './resources/campaigns';\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 readonly campaigns: Campaigns;\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 this.campaigns = new Campaigns(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/resources/campaigns.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.1.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 FieldCatalogResponse,\n FieldCatalogParams,\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 * Get the project's subscriber field catalog: which fields exist, how often\n * each is populated, example values, and whether it's auto-filled at send\n * time. Optionally scope by segment or tag.\n */\n async fieldCatalog(\n projectId: string,\n params?: FieldCatalogParams\n ): Promise<MigmaResult<FieldCatalogResponse>> {\n return this.client.get<FieldCatalogResponse>(\n `/projects/${projectId}/field-catalog`,\n {\n segmentId: params?.segmentId,\n tag: params?.tag,\n }\n );\n }\n\n /**\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 ListEmailsParams,\n ListEmailsResponse,\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 /** List emails for a project */\n async list(\n params: ListEmailsParams\n ): Promise<MigmaResult<ListEmailsResponse>> {\n const { projectId, limit, page, status, search } = params;\n return this.client.get<ListEmailsResponse>('/projects/emails', {\n projectId,\n limit,\n page,\n status,\n search,\n });\n }\n\n /** Start async email generation */\n async generate(\n params: GenerateEmailParams\n ): 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 type { MigmaClient } from '../client';\nimport type { MigmaResult } from '../types/common';\nimport type {\n Campaign,\n CreateCampaignParams,\n ListCampaignsParams,\n ListCampaignsResponse,\n ScheduleCampaignParams,\n} from '../types/campaigns';\n\nexport class Campaigns {\n constructor(private readonly client: MigmaClient) {}\n\n async list(params: ListCampaignsParams): Promise<MigmaResult<ListCampaignsResponse>> {\n const { projectId, status, page, limit, archived } = params;\n return this.client.get<ListCampaignsResponse>('/campaigns', {\n projectId,\n status,\n page,\n limit,\n archived,\n });\n }\n\n async create(params: CreateCampaignParams): Promise<MigmaResult<Campaign>> {\n return this.client.post<Campaign>('/campaigns', params as unknown as Record<string, unknown>);\n }\n\n async get(id: string): Promise<MigmaResult<Campaign>> {\n return this.client.get<Campaign>(`/campaigns/${id}`);\n }\n\n async send(id: string): Promise<MigmaResult<Campaign>> {\n return this.client.post<Campaign>(`/campaigns/${id}/send`);\n }\n\n async schedule(id: string, params: ScheduleCampaignParams): Promise<MigmaResult<Campaign>> {\n return this.client.post<Campaign>(`/campaigns/${id}/schedule`, params as unknown as Record<string, unknown>);\n }\n\n async cancel(id: string): Promise<MigmaResult<Campaign>> {\n return this.client.post<Campaign>(`/campaigns/${id}/cancel`);\n }\n\n async archive(id: string): Promise<MigmaResult<Campaign>> {\n return this.client.post<Campaign>(`/campaigns/${id}/archive`);\n }\n\n async unarchive(id: string): Promise<MigmaResult<Campaign>> {\n return this.client.post<Campaign>(`/campaigns/${id}/unarchive`);\n }\n}\n","import { 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';\nimport { Campaigns } from './resources/campaigns';\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 readonly campaigns: Campaigns;\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 this.campaigns = new Campaigns(this.client);\n }\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "migma",
3
- "version": "1.1.0",
3
+ "version": "1.2.0",
4
4
  "description": "Official Node.js SDK for the Migma email platform API",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.mjs",