@marlinjai/mail-contract 0.15.2 → 0.16.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.js CHANGED
@@ -368,6 +368,9 @@ __export(index_exports, {
368
368
  ResolveProblem: () => ResolveProblem,
369
369
  ResolvedRecipient: () => ResolvedRecipient,
370
370
  ResolvedValue: () => ResolvedValue,
371
+ SENDING_DOMAIN_DNS_MODES: () => SENDING_DOMAIN_DNS_MODES,
372
+ SENDING_DOMAIN_REGION: () => SENDING_DOMAIN_REGION,
373
+ SENDING_DOMAIN_STATUSES: () => SENDING_DOMAIN_STATUSES,
371
374
  SERVICE_FILLED_MERGE_FIELDS: () => SERVICE_FILLED_MERGE_FIELDS,
372
375
  SIGNUP_FORM_FIELDS: () => SIGNUP_FORM_FIELDS,
373
376
  SKIP_REASONS: () => SKIP_REASONS,
@@ -383,6 +386,13 @@ __export(index_exports, {
383
386
  SegmentFilter: () => SegmentFilter,
384
387
  SegmentPreview: () => SegmentPreview,
385
388
  SegmentPreviewRequest: () => SegmentPreviewRequest,
389
+ SendingDomain: () => SendingDomain,
390
+ SendingDomainCreate: () => SendingDomainCreate,
391
+ SendingDomainDnsMode: () => SendingDomainDnsMode,
392
+ SendingDomainName: () => SendingDomainName,
393
+ SendingDomainRecord: () => SendingDomainRecord,
394
+ SendingDomainStatus: () => SendingDomainStatus,
395
+ SendingDomainUpdate: () => SendingDomainUpdate,
386
396
  SignupForm: () => SignupForm,
387
397
  SignupFormCreate: () => SignupFormCreate,
388
398
  SignupFormEmbed: () => SignupFormEmbed,
@@ -3602,6 +3612,10 @@ var AUDIT_ACTIONS = [
3602
3612
  "provider.events_secret_set",
3603
3613
  "provider.bounces_halted",
3604
3614
  "provider.anomaly_cleared",
3615
+ "sending_domain.created",
3616
+ "sending_domain.updated",
3617
+ "sending_domain.checked",
3618
+ "sending_domain.deleted",
3605
3619
  "topic.created",
3606
3620
  "topic.updated",
3607
3621
  "topic.deleted",
@@ -4433,7 +4447,7 @@ var ProviderRejections = import_zod13.z.object({
4433
4447
  });
4434
4448
  var ProviderEvents = import_zod13.z.object({
4435
4449
  status: import_zod13.z.enum(["active", "needs_secret"]),
4436
- source: import_zod13.z.enum(["automatic", "manual"]).nullable(),
4450
+ source: import_zod13.z.enum(["automatic", "manual", "managed"]).nullable(),
4437
4451
  url: import_zod13.z.string().url(),
4438
4452
  error: import_zod13.z.string().nullable(),
4439
4453
  /**
@@ -4520,36 +4534,86 @@ var ProviderVerifyResult = import_zod13.z.object({
4520
4534
  error: import_zod13.z.string().nullable()
4521
4535
  });
4522
4536
 
4523
- // src/contacts.ts
4537
+ // src/sending-domains.ts
4524
4538
  var import_zod14 = require("zod");
4525
- var Topic = import_zod14.z.object({
4539
+ var SENDING_DOMAIN_STATUSES = ["pending_dns", "verifying", "verified", "failed", "temporary_failure"];
4540
+ var SendingDomainStatus = import_zod14.z.enum(SENDING_DOMAIN_STATUSES);
4541
+ var SENDING_DOMAIN_DNS_MODES = ["manual", "managed"];
4542
+ var SendingDomainDnsMode = import_zod14.z.enum(SENDING_DOMAIN_DNS_MODES);
4543
+ var SENDING_DOMAIN_REGION = "eu-west-1";
4544
+ var SendingDomainName = import_zod14.z.string().trim().toLowerCase().max(253).regex(
4545
+ /^(?=.{1,253}$)(?!-)[a-z0-9-]{1,63}(?<!-)(\.(?!-)[a-z0-9-]{1,63}(?<!-))*\.[a-z]{2,63}$/,
4546
+ "must be a domain such as example.com, without https:// or an @"
4547
+ );
4548
+ var SendingDomainRecord = import_zod14.z.object({
4549
+ record: import_zod14.z.string().max(40),
4550
+ name: import_zod14.z.string().max(253),
4551
+ type: import_zod14.z.string().max(10),
4552
+ value: import_zod14.z.string().max(4096),
4553
+ ttl: import_zod14.z.string().max(20),
4554
+ status: import_zod14.z.string().max(40),
4555
+ priority: import_zod14.z.number().int().min(0).max(65535).optional()
4556
+ });
4557
+ var SendingDomain = import_zod14.z.object({
4558
+ id: Id,
4559
+ domain: import_zod14.z.string(),
4560
+ from_name: import_zod14.z.string(),
4561
+ from_email: Email,
4562
+ reply_to: Email.nullable(),
4563
+ status: SendingDomainStatus,
4564
+ dns_mode: SendingDomainDnsMode,
4565
+ records: import_zod14.z.array(SendingDomainRecord),
4566
+ provider_id: Id.nullable(),
4567
+ checked_at: Timestamp.nullable(),
4568
+ verified_at: Timestamp.nullable(),
4569
+ last_error: import_zod14.z.string().nullable(),
4570
+ created_at: Timestamp,
4571
+ updated_at: Timestamp
4572
+ });
4573
+ var SenderFields = {
4574
+ from_name: import_zod14.z.string().trim().min(1).max(120),
4575
+ from_email: Email,
4576
+ reply_to: Email.nullable().optional()
4577
+ };
4578
+ function senderOnDomain(input, ctx) {
4579
+ const at = input.from_email.lastIndexOf("@");
4580
+ if (at < 0 || input.from_email.slice(at + 1).toLowerCase() !== input.domain) {
4581
+ ctx.addIssue({ code: import_zod14.z.ZodIssueCode.custom, path: ["from_email"], message: `must be an address on ${input.domain}` });
4582
+ }
4583
+ }
4584
+ var SendingDomainCreate = import_zod14.z.object({ domain: SendingDomainName, ...SenderFields }).superRefine(senderOnDomain);
4585
+ var SendingDomainUpdate = import_zod14.z.object({ from_name: SenderFields.from_name.optional(), from_email: Email.optional(), reply_to: Email.nullable().optional() }).refine((v) => Object.keys(v).length > 0, "nothing to change");
4586
+
4587
+ // src/contacts.ts
4588
+ var import_zod15 = require("zod");
4589
+ var Topic = import_zod15.z.object({
4526
4590
  id: Id,
4527
4591
  slug: Slug,
4528
- name: import_zod14.z.string().min(1).max(120),
4592
+ name: import_zod15.z.string().min(1).max(120),
4529
4593
  /** Shown on the hosted preference page. */
4530
- description: import_zod14.z.string().max(1e3).nullable(),
4594
+ description: import_zod15.z.string().max(1e3).nullable(),
4531
4595
  /** Translations of `name` and `description` per locale, for the hosted page. */
4532
- translations: import_zod14.z.record(
4533
- import_zod14.z.object({ name: import_zod14.z.string().min(1).max(120), description: import_zod14.z.string().max(1e3).nullable() })
4596
+ translations: import_zod15.z.record(
4597
+ import_zod15.z.object({ name: import_zod15.z.string().min(1).max(120), description: import_zod15.z.string().max(1e3).nullable() })
4534
4598
  ),
4535
4599
  created_at: Timestamp,
4536
4600
  updated_at: Timestamp
4537
4601
  });
4538
- var TopicCreate = import_zod14.z.object({
4602
+ var TopicCreate = import_zod15.z.object({
4539
4603
  slug: Slug,
4540
- name: import_zod14.z.string().min(1).max(120),
4541
- description: import_zod14.z.string().max(1e3).optional(),
4604
+ name: import_zod15.z.string().min(1).max(120),
4605
+ description: import_zod15.z.string().max(1e3).optional(),
4542
4606
  translations: Topic.shape.translations.optional()
4543
4607
  });
4544
4608
  var TopicUpdate = TopicCreate.omit({ slug: true }).partial().refine((v) => Object.keys(v).length > 0, "at least one field");
4545
- var Contact = import_zod14.z.object({
4609
+ var Contact = import_zod15.z.object({
4546
4610
  id: Id,
4547
- external_id: import_zod14.z.string().min(1).max(255).nullable(),
4611
+ external_id: import_zod15.z.string().min(1).max(255).nullable(),
4548
4612
  /** Stored lowercased, unique per workspace. */
4549
4613
  email: Email,
4550
- first_name: import_zod14.z.string().max(200).nullable(),
4551
- last_name: import_zod14.z.string().max(200).nullable(),
4552
- locale: import_zod14.z.string().min(2).max(35).nullable(),
4614
+ first_name: import_zod15.z.string().max(200).nullable(),
4615
+ last_name: import_zod15.z.string().max(200).nullable(),
4616
+ locale: import_zod15.z.string().min(2).max(35).nullable(),
4553
4617
  /**
4554
4618
  * The person's own time zone, an IANA name such as `Europe/Berlin` (A1).
4555
4619
  * Every wall clock an automation waits for is read in it, falling back to the
@@ -4557,65 +4621,65 @@ var Contact = import_zod14.z.object({
4557
4621
  */
4558
4622
  timezone: TimezoneName.nullable(),
4559
4623
  properties: Properties,
4560
- topics: import_zod14.z.array(Slug),
4624
+ topics: import_zod15.z.array(Slug),
4561
4625
  /** The slugs of the contact's tags (S4). */
4562
- tags: import_zod14.z.array(Slug),
4626
+ tags: import_zod15.z.array(Slug),
4563
4627
  created_at: Timestamp,
4564
4628
  updated_at: Timestamp
4565
4629
  });
4566
- var ContactUpsert = import_zod14.z.object({
4567
- external_id: import_zod14.z.string().min(1).max(255).optional(),
4630
+ var ContactUpsert = import_zod15.z.object({
4631
+ external_id: import_zod15.z.string().min(1).max(255).optional(),
4568
4632
  email: Email.optional(),
4569
- first_name: import_zod14.z.string().max(200).nullable().optional(),
4570
- last_name: import_zod14.z.string().max(200).nullable().optional(),
4571
- locale: import_zod14.z.string().min(2).max(35).nullable().optional(),
4633
+ first_name: import_zod15.z.string().max(200).nullable().optional(),
4634
+ last_name: import_zod15.z.string().max(200).nullable().optional(),
4635
+ locale: import_zod15.z.string().min(2).max(35).nullable().optional(),
4572
4636
  timezone: TimezoneName.nullable().optional(),
4573
4637
  properties: Properties.optional(),
4574
- topics: import_zod14.z.array(Slug).max(100).optional()
4638
+ topics: import_zod15.z.array(Slug).max(100).optional()
4575
4639
  }).refine((v) => v.external_id !== void 0 || v.email !== void 0, {
4576
4640
  message: "external_id or email is required",
4577
4641
  path: ["email"]
4578
4642
  });
4579
- var ContactUpsertResult = import_zod14.z.object({
4643
+ var ContactUpsertResult = import_zod15.z.object({
4580
4644
  contact: Contact,
4581
- created: import_zod14.z.boolean()
4645
+ created: import_zod15.z.boolean()
4582
4646
  });
4583
4647
  var ContactListQuery = PageQuery.extend({
4584
- email: import_zod14.z.string().min(1).max(254).optional(),
4585
- external_id: import_zod14.z.string().min(1).max(255).optional(),
4648
+ email: import_zod15.z.string().min(1).max(254).optional(),
4649
+ external_id: import_zod15.z.string().min(1).max(255).optional(),
4586
4650
  topic: Slug.optional()
4587
4651
  });
4588
- var ContactErased = import_zod14.z.object({
4589
- ok: import_zod14.z.literal(true),
4590
- erased_messages: import_zod14.z.number().int().min(0),
4591
- erased_recipients: import_zod14.z.number().int().min(0),
4592
- suppressions_kept: import_zod14.z.number().int().min(0)
4652
+ var ContactErased = import_zod15.z.object({
4653
+ ok: import_zod15.z.literal(true),
4654
+ erased_messages: import_zod15.z.number().int().min(0),
4655
+ erased_recipients: import_zod15.z.number().int().min(0),
4656
+ suppressions_kept: import_zod15.z.number().int().min(0)
4593
4657
  });
4594
4658
  var SUPPRESSION_REASONS = ["unsubscribed", "bounced", "complained", "manual"];
4595
- var SuppressionReason = import_zod14.z.enum(SUPPRESSION_REASONS);
4596
- var Suppression = import_zod14.z.object({
4659
+ var SuppressionReason = import_zod15.z.enum(SUPPRESSION_REASONS);
4660
+ var Suppression = import_zod15.z.object({
4597
4661
  id: Id,
4598
4662
  email: Email,
4599
4663
  reason: SuppressionReason,
4600
4664
  topic: Slug.nullable(),
4601
4665
  source_message_id: Id.nullable(),
4602
- note: import_zod14.z.string().max(1e3).nullable(),
4666
+ note: import_zod15.z.string().max(1e3).nullable(),
4603
4667
  created_at: Timestamp
4604
4668
  });
4605
- var SuppressionCreate = import_zod14.z.object({
4669
+ var SuppressionCreate = import_zod15.z.object({
4606
4670
  email: Email,
4607
- reason: import_zod14.z.enum(["manual", "unsubscribed"]),
4671
+ reason: import_zod15.z.enum(["manual", "unsubscribed"]),
4608
4672
  topic: Slug.nullable().optional(),
4609
- note: import_zod14.z.string().max(1e3).optional()
4673
+ note: import_zod15.z.string().max(1e3).optional()
4610
4674
  });
4611
4675
  var SuppressionListQuery = PageQuery.extend({
4612
- email: import_zod14.z.string().min(1).max(254).optional(),
4676
+ email: import_zod15.z.string().min(1).max(254).optional(),
4613
4677
  reason: SuppressionReason.optional(),
4614
4678
  topic: Slug.optional()
4615
4679
  });
4616
4680
 
4617
4681
  // src/webhooks.ts
4618
- var import_zod15 = require("zod");
4682
+ var import_zod16 = require("zod");
4619
4683
  var WEBHOOK_EVENT_TYPES = [
4620
4684
  "message.sent",
4621
4685
  "message.failed",
@@ -4659,23 +4723,23 @@ var WEBHOOK_EVENT_TYPES = [
4659
4723
  "template.updated",
4660
4724
  "template.deleted"
4661
4725
  ];
4662
- var WebhookEventType = import_zod15.z.enum(WEBHOOK_EVENT_TYPES);
4663
- var MessageEventBase = import_zod15.z.object({
4726
+ var WebhookEventType = import_zod16.z.enum(WEBHOOK_EVENT_TYPES);
4727
+ var MessageEventBase = import_zod16.z.object({
4664
4728
  message_id: Id,
4665
4729
  mailing_id: Id.nullable(),
4666
4730
  mailing_metadata: MailingMetadata.nullable(),
4667
4731
  recipient_id: Id.nullable(),
4668
4732
  contact_id: Id.nullable(),
4669
- external_id: import_zod15.z.string().nullable(),
4733
+ external_id: import_zod16.z.string().nullable(),
4670
4734
  email: Email,
4671
- subject: import_zod15.z.string(),
4735
+ subject: import_zod16.z.string(),
4672
4736
  topic: Slug.nullable(),
4673
- provider_message_id: import_zod15.z.string().nullable(),
4674
- is_test: import_zod15.z.boolean()
4737
+ provider_message_id: import_zod16.z.string().nullable(),
4738
+ is_test: import_zod16.z.boolean()
4675
4739
  });
4676
4740
  var MessageSentData = MessageEventBase.extend({
4677
4741
  /** The final HTML as sent, so the client can archive it beside its own records. */
4678
- html: import_zod15.z.string(),
4742
+ html: import_zod16.z.string(),
4679
4743
  sent_at: Timestamp,
4680
4744
  /**
4681
4745
  * The choice each insertion made (see `Message.insertions`); absent or null
@@ -4686,20 +4750,20 @@ var MessageSentData = MessageEventBase.extend({
4686
4750
  insertions: InsertionChoices.nullish()
4687
4751
  });
4688
4752
  var MessageFailedData = MessageEventBase.extend({
4689
- error: import_zod15.z.string(),
4753
+ error: import_zod16.z.string(),
4690
4754
  /** False when the provider rejected permanently; the recipient will not be retried. */
4691
- retryable: import_zod15.z.boolean(),
4755
+ retryable: import_zod16.z.boolean(),
4692
4756
  failed_at: Timestamp
4693
4757
  });
4694
4758
  var UNSUBSCRIBE_SOURCES = ["hosted_page", "one_click", "api", "dashboard", "signup_form"];
4695
- var ContactUnsubscribedData = import_zod15.z.object({
4759
+ var ContactUnsubscribedData = import_zod16.z.object({
4696
4760
  contact_id: Id.nullable(),
4697
- external_id: import_zod15.z.string().nullable(),
4761
+ external_id: import_zod16.z.string().nullable(),
4698
4762
  email: Email,
4699
4763
  /** The topic unsubscribed from; null means every topic. */
4700
4764
  topic: Slug.nullable(),
4701
4765
  mailing_id: Id.nullable(),
4702
- source: import_zod15.z.enum(UNSUBSCRIBE_SOURCES),
4766
+ source: import_zod16.z.enum(UNSUBSCRIBE_SOURCES),
4703
4767
  unsubscribed_at: Timestamp
4704
4768
  });
4705
4769
  var ContactResubscribedData = ContactUnsubscribedData.omit({ unsubscribed_at: true }).extend({
@@ -4708,142 +4772,142 @@ var ContactResubscribedData = ContactUnsubscribedData.omit({ unsubscribed_at: tr
4708
4772
  * breaker undid a `bounced` block it judged false (a `contact.bounced` for the
4709
4773
  * same address and mailing went out before); `topic` is null.
4710
4774
  */
4711
- source: import_zod15.z.enum([...UNSUBSCRIBE_SOURCES, "bounce_reverted"]),
4775
+ source: import_zod16.z.enum([...UNSUBSCRIBE_SOURCES, "bounce_reverted"]),
4712
4776
  resubscribed_at: Timestamp
4713
4777
  });
4714
- var ContactBouncedData = import_zod15.z.object({
4778
+ var ContactBouncedData = import_zod16.z.object({
4715
4779
  contact_id: Id.nullable(),
4716
- external_id: import_zod15.z.string().nullable(),
4780
+ external_id: import_zod16.z.string().nullable(),
4717
4781
  email: Email,
4718
4782
  /** `bounced` for a hard bounce, `complained` for a spam complaint. */
4719
- reason: import_zod15.z.enum(["bounced", "complained"]),
4783
+ reason: import_zod16.z.enum(["bounced", "complained"]),
4720
4784
  message_id: Id.nullable(),
4721
- diagnostic: import_zod15.z.string().nullable(),
4785
+ diagnostic: import_zod16.z.string().nullable(),
4722
4786
  bounced_at: Timestamp
4723
4787
  });
4724
- var MailingFinishedData = import_zod15.z.object({
4788
+ var MailingFinishedData = import_zod16.z.object({
4725
4789
  mailing_id: Id,
4726
4790
  mailing_metadata: MailingMetadata,
4727
- status: import_zod15.z.enum(["sent", "partially_failed", "cancelled"]),
4791
+ status: import_zod16.z.enum(["sent", "partially_failed", "cancelled"]),
4728
4792
  counts: MailingCounts,
4729
4793
  finished_at: Timestamp
4730
4794
  });
4731
- var ContactSubscribedData = import_zod15.z.object({
4795
+ var ContactSubscribedData = import_zod16.z.object({
4732
4796
  contact_id: Id,
4733
- external_id: import_zod15.z.string().nullable(),
4797
+ external_id: import_zod16.z.string().nullable(),
4734
4798
  email: Email,
4735
- topics: import_zod15.z.array(Slug),
4736
- source: import_zod15.z.enum(["signup_form", "api", "dashboard", "automation"]),
4799
+ topics: import_zod16.z.array(Slug),
4800
+ source: import_zod16.z.enum(["signup_form", "api", "dashboard", "automation"]),
4737
4801
  signup_form_id: Id.nullable(),
4738
- signup_form_version: import_zod15.z.number().int().min(1).nullable(),
4802
+ signup_form_version: import_zod16.z.number().int().min(1).nullable(),
4739
4803
  subscribed_at: Timestamp
4740
4804
  });
4741
- var ImportFinishedData = import_zod15.z.object({
4805
+ var ImportFinishedData = import_zod16.z.object({
4742
4806
  import_id: Id,
4743
- status: import_zod15.z.enum(["completed", "cancelled", "failed"]),
4807
+ status: import_zod16.z.enum(["completed", "cancelled", "failed"]),
4744
4808
  result: ImportReport.nullable(),
4745
- error: import_zod15.z.string().nullable(),
4809
+ error: import_zod16.z.string().nullable(),
4746
4810
  finished_at: Timestamp
4747
4811
  });
4748
- var MailingScheduledData = import_zod15.z.object({
4812
+ var MailingScheduledData = import_zod16.z.object({
4749
4813
  mailing_id: Id,
4750
4814
  mailing_metadata: MailingMetadata,
4751
4815
  scheduled_at: Timestamp.nullable()
4752
4816
  });
4753
- var MailingStartedData = import_zod15.z.object({
4817
+ var MailingStartedData = import_zod16.z.object({
4754
4818
  mailing_id: Id,
4755
4819
  mailing_metadata: MailingMetadata,
4756
- trigger: import_zod15.z.enum(["send", "schedule"]),
4757
- recipients: import_zod15.z.number().int().min(0),
4820
+ trigger: import_zod16.z.enum(["send", "schedule"]),
4821
+ recipients: import_zod16.z.number().int().min(0),
4758
4822
  started_at: Timestamp
4759
4823
  });
4760
- var MailingScheduleFailedData = import_zod15.z.object({
4824
+ var MailingScheduleFailedData = import_zod16.z.object({
4761
4825
  mailing_id: Id,
4762
4826
  mailing_metadata: MailingMetadata,
4763
- code: import_zod15.z.string(),
4764
- message: import_zod15.z.string(),
4827
+ code: import_zod16.z.string(),
4828
+ message: import_zod16.z.string(),
4765
4829
  failed_at: Timestamp
4766
4830
  });
4767
- var MailingAbWinnerSelectedData = import_zod15.z.object({
4831
+ var MailingAbWinnerSelectedData = import_zod16.z.object({
4768
4832
  mailing_id: Id,
4769
4833
  mailing_metadata: MailingMetadata,
4770
- winner: import_zod15.z.string(),
4771
- decided_by: import_zod15.z.enum(["metric", "manual"]),
4772
- variants: import_zod15.z.array(VariantAnalytics),
4834
+ winner: import_zod16.z.string(),
4835
+ decided_by: import_zod16.z.enum(["metric", "manual"]),
4836
+ variants: import_zod16.z.array(VariantAnalytics),
4773
4837
  decided_at: Timestamp
4774
4838
  });
4775
- var ContactTaggedData = import_zod15.z.object({
4839
+ var ContactTaggedData = import_zod16.z.object({
4776
4840
  contact_id: Id,
4777
- external_id: import_zod15.z.string().nullable(),
4841
+ external_id: import_zod16.z.string().nullable(),
4778
4842
  email: Email,
4779
4843
  /** Only the tags the contact did not already have. */
4780
- tags: import_zod15.z.array(Slug).min(1),
4781
- source: import_zod15.z.enum(["api", "dashboard", "signup_form", "import", "automation"]),
4844
+ tags: import_zod16.z.array(Slug).min(1),
4845
+ source: import_zod16.z.enum(["api", "dashboard", "signup_form", "import", "automation"]),
4782
4846
  tagged_at: Timestamp
4783
4847
  });
4784
- var ContactUpdatedData = import_zod15.z.object({
4848
+ var ContactUpdatedData = import_zod16.z.object({
4785
4849
  contact_id: Id,
4786
- external_id: import_zod15.z.string().nullable(),
4850
+ external_id: import_zod16.z.string().nullable(),
4787
4851
  email: Email,
4788
- changed: import_zod15.z.array(import_zod15.z.string()).min(1),
4852
+ changed: import_zod16.z.array(import_zod16.z.string()).min(1),
4789
4853
  properties: Properties,
4790
- source: import_zod15.z.enum(["api", "dashboard", "signup_form", "import", "automation"]),
4854
+ source: import_zod16.z.enum(["api", "dashboard", "signup_form", "import", "automation"]),
4791
4855
  updated_at: Timestamp
4792
4856
  });
4793
- var AutomationRunEventBase = import_zod15.z.object({
4857
+ var AutomationRunEventBase = import_zod16.z.object({
4794
4858
  automation_id: Id,
4795
- automation_name: import_zod15.z.string(),
4859
+ automation_name: import_zod16.z.string(),
4796
4860
  run_id: Id,
4797
- version: import_zod15.z.number().int().min(1),
4861
+ version: import_zod16.z.number().int().min(1),
4798
4862
  contact_id: Id,
4799
- external_id: import_zod15.z.string().nullable(),
4863
+ external_id: import_zod16.z.string().nullable(),
4800
4864
  email: Email
4801
4865
  });
4802
4866
  var AutomationRunStartedData = AutomationRunEventBase.extend({
4803
4867
  /** What let them in: a trigger kind, or `manual` for an explicit enrolment. */
4804
- trigger_kind: import_zod15.z.string(),
4868
+ trigger_kind: import_zod16.z.string(),
4805
4869
  entered_at: Timestamp
4806
4870
  });
4807
4871
  var AutomationRunCompletedData = AutomationRunEventBase.extend({
4808
- last_step_id: import_zod15.z.string().nullable(),
4872
+ last_step_id: import_zod16.z.string().nullable(),
4809
4873
  completed_at: Timestamp
4810
4874
  });
4811
4875
  var AutomationRunExitedData = AutomationRunEventBase.extend({
4812
4876
  reason: AutomationEndReason,
4813
- step_id: import_zod15.z.string().nullable(),
4877
+ step_id: import_zod16.z.string().nullable(),
4814
4878
  exited_at: Timestamp
4815
4879
  });
4816
4880
  var AutomationRunFailedData = AutomationRunEventBase.extend({
4817
- reason: import_zod15.z.string(),
4818
- step_id: import_zod15.z.string().nullable(),
4881
+ reason: import_zod16.z.string(),
4882
+ step_id: import_zod16.z.string().nullable(),
4819
4883
  failed_at: Timestamp
4820
4884
  });
4821
4885
  var AutomationWebhookData = AutomationRunEventBase.extend({
4822
- step_id: import_zod15.z.string(),
4886
+ step_id: import_zod16.z.string(),
4823
4887
  /** The step's own label, when it was given one, so a receiver can branch on a name. */
4824
- step_label: import_zod15.z.string().nullable(),
4888
+ step_label: import_zod16.z.string().nullable(),
4825
4889
  /** Whatever the step carries, verbatim. Null when it carries nothing. */
4826
4890
  payload: JsonValue.nullable(),
4827
4891
  fired_at: Timestamp
4828
4892
  });
4829
- var TemplateEventBase = import_zod15.z.object({
4893
+ var TemplateEventBase = import_zod16.z.object({
4830
4894
  template_id: Id,
4831
- name: import_zod15.z.string().min(1).max(200),
4832
- version: import_zod15.z.number().int().min(1),
4833
- source: import_zod15.z.enum(["api", "dashboard", "mjml_import"])
4895
+ name: import_zod16.z.string().min(1).max(200),
4896
+ version: import_zod16.z.number().int().min(1),
4897
+ source: import_zod16.z.enum(["api", "dashboard", "mjml_import"])
4834
4898
  });
4835
4899
  var TemplateCreatedData = TemplateEventBase.extend({ created_at: Timestamp });
4836
- var TemplateUpdatedData = TemplateEventBase.extend({ archived: import_zod15.z.boolean(), updated_at: Timestamp });
4900
+ var TemplateUpdatedData = TemplateEventBase.extend({ archived: import_zod16.z.boolean(), updated_at: Timestamp });
4837
4901
  var TemplateDeletedData = TemplateEventBase.extend({ deleted_at: Timestamp });
4838
- var envelope = (type, data) => import_zod15.z.object({
4902
+ var envelope = (type, data) => import_zod16.z.object({
4839
4903
  /** Unique per event: a receiver deduplicates on it (deliveries may repeat). */
4840
4904
  id: Id,
4841
- type: import_zod15.z.literal(type),
4905
+ type: import_zod16.z.literal(type),
4842
4906
  created_at: Timestamp,
4843
4907
  workspace_id: Id,
4844
4908
  data
4845
4909
  });
4846
- var WebhookEvent = import_zod15.z.discriminatedUnion("type", [
4910
+ var WebhookEvent = import_zod16.z.discriminatedUnion("type", [
4847
4911
  envelope("message.sent", MessageSentData),
4848
4912
  envelope("message.failed", MessageFailedData),
4849
4913
  envelope("contact.unsubscribed", ContactUnsubscribedData),
@@ -4867,16 +4931,16 @@ var WebhookEvent = import_zod15.z.discriminatedUnion("type", [
4867
4931
  envelope("template.updated", TemplateUpdatedData),
4868
4932
  envelope("template.deleted", TemplateDeletedData)
4869
4933
  ]);
4870
- var WebhookEndpoint = import_zod15.z.object({
4934
+ var WebhookEndpoint = import_zod16.z.object({
4871
4935
  id: Id,
4872
- url: import_zod15.z.string().url(),
4873
- description: import_zod15.z.string().max(500).nullable(),
4874
- events: import_zod15.z.array(WebhookEventType).min(1),
4875
- enabled: import_zod15.z.boolean(),
4936
+ url: import_zod16.z.string().url(),
4937
+ description: import_zod16.z.string().max(500).nullable(),
4938
+ events: import_zod16.z.array(WebhookEventType).min(1),
4939
+ enabled: import_zod16.z.boolean(),
4876
4940
  created_at: Timestamp,
4877
4941
  updated_at: Timestamp
4878
4942
  });
4879
- var WebhookUrl = import_zod15.z.string().url().refine((u) => {
4943
+ var WebhookUrl = import_zod16.z.string().url().refine((u) => {
4880
4944
  try {
4881
4945
  const url = new URL(u);
4882
4946
  if (url.protocol === "https:") return true;
@@ -4885,35 +4949,35 @@ var WebhookUrl = import_zod15.z.string().url().refine((u) => {
4885
4949
  return false;
4886
4950
  }
4887
4951
  }, "must be https (http only for localhost)");
4888
- var WebhookEndpointCreate = import_zod15.z.object({
4952
+ var WebhookEndpointCreate = import_zod16.z.object({
4889
4953
  url: WebhookUrl,
4890
- description: import_zod15.z.string().max(500).optional(),
4891
- events: import_zod15.z.array(WebhookEventType).min(1),
4892
- enabled: import_zod15.z.boolean().optional()
4954
+ description: import_zod16.z.string().max(500).optional(),
4955
+ events: import_zod16.z.array(WebhookEventType).min(1),
4956
+ enabled: import_zod16.z.boolean().optional()
4893
4957
  });
4894
- var WebhookEndpointUpdate = import_zod15.z.object({
4958
+ var WebhookEndpointUpdate = import_zod16.z.object({
4895
4959
  url: WebhookUrl,
4896
- description: import_zod15.z.string().max(500).nullable(),
4897
- events: import_zod15.z.array(WebhookEventType).min(1),
4898
- enabled: import_zod15.z.boolean()
4960
+ description: import_zod16.z.string().max(500).nullable(),
4961
+ events: import_zod16.z.array(WebhookEventType).min(1),
4962
+ enabled: import_zod16.z.boolean()
4899
4963
  }).partial().refine((v) => Object.keys(v).length > 0, "at least one field");
4900
- var WebhookEndpointWithSecret = import_zod15.z.object({
4964
+ var WebhookEndpointWithSecret = import_zod16.z.object({
4901
4965
  endpoint: WebhookEndpoint,
4902
- secret: import_zod15.z.string().min(32)
4966
+ secret: import_zod16.z.string().min(32)
4903
4967
  });
4904
4968
  var WEBHOOK_DELIVERY_STATUSES = ["pending", "succeeded", "failed"];
4905
- var WebhookDeliveryStatus = import_zod15.z.enum(WEBHOOK_DELIVERY_STATUSES);
4969
+ var WebhookDeliveryStatus = import_zod16.z.enum(WEBHOOK_DELIVERY_STATUSES);
4906
4970
  var WEBHOOK_MAX_ATTEMPTS = 8;
4907
4971
  var WEBHOOK_RETRY_DELAYS_SECONDS = [30, 120, 600, 1800, 3600, 7200, 21600];
4908
- var WebhookDelivery = import_zod15.z.object({
4972
+ var WebhookDelivery = import_zod16.z.object({
4909
4973
  id: Id,
4910
4974
  endpoint_id: Id,
4911
4975
  event_id: Id,
4912
4976
  event_type: WebhookEventType,
4913
4977
  status: WebhookDeliveryStatus,
4914
- attempts: import_zod15.z.number().int().min(0),
4915
- last_status_code: import_zod15.z.number().int().min(100).max(599).nullable(),
4916
- last_error: import_zod15.z.string().nullable(),
4978
+ attempts: import_zod16.z.number().int().min(0),
4979
+ last_status_code: import_zod16.z.number().int().min(100).max(599).nullable(),
4980
+ last_error: import_zod16.z.string().nullable(),
4917
4981
  next_attempt_at: Timestamp.nullable(),
4918
4982
  delivered_at: Timestamp.nullable(),
4919
4983
  created_at: Timestamp
@@ -4922,7 +4986,7 @@ var WebhookDeliveryListQuery = PageQuery.extend({
4922
4986
  status: WebhookDeliveryStatus.optional(),
4923
4987
  event_type: WebhookEventType.optional()
4924
4988
  });
4925
- var WebhookDeliveryParams = import_zod15.z.object({ id: Id, delivery_id: Id });
4989
+ var WebhookDeliveryParams = import_zod16.z.object({ id: Id, delivery_id: Id });
4926
4990
 
4927
4991
  // src/webhook-signing.ts
4928
4992
  var WEBHOOK_SIGNATURE_HEADER = "x-mail-signature";
@@ -4989,79 +5053,79 @@ async function verifyWebhook(input) {
4989
5053
  }
4990
5054
 
4991
5055
  // src/billing.ts
4992
- var import_zod16 = require("zod");
5056
+ var import_zod17 = require("zod");
4993
5057
  var PLAN_IDS = ["free", "starter", "growth", "design_partner"];
4994
- var PlanId = import_zod16.z.enum(PLAN_IDS);
4995
- var PlanLimits = import_zod16.z.object({
4996
- monthly_messages: import_zod16.z.number().int().min(0).nullable(),
4997
- contacts: import_zod16.z.number().int().min(0).nullable(),
4998
- members: import_zod16.z.number().int().min(1).nullable(),
4999
- providers: import_zod16.z.number().int().min(1).nullable(),
5000
- webhook_endpoints: import_zod16.z.number().int().min(0).nullable(),
5058
+ var PlanId = import_zod17.z.enum(PLAN_IDS);
5059
+ var PlanLimits = import_zod17.z.object({
5060
+ monthly_messages: import_zod17.z.number().int().min(0).nullable(),
5061
+ contacts: import_zod17.z.number().int().min(0).nullable(),
5062
+ members: import_zod17.z.number().int().min(1).nullable(),
5063
+ providers: import_zod17.z.number().int().min(1).nullable(),
5064
+ webhook_endpoints: import_zod17.z.number().int().min(0).nullable(),
5001
5065
  /** Automations that may be live (active or paused) at once (A1). */
5002
- active_automations: import_zod16.z.number().int().min(0).nullable(),
5066
+ active_automations: import_zod17.z.number().int().min(0).nullable(),
5003
5067
  /** Steps one automation may hold. Null is the flow's own cap, not unlimited. */
5004
- automation_steps: import_zod16.z.number().int().min(1).nullable()
5068
+ automation_steps: import_zod17.z.number().int().min(1).nullable(),
5069
+ /** Own domains Lumitra Mail sends from (managed sending domains); 0 when the plan has none. */
5070
+ sending_domains: import_zod17.z.number().int().min(0).nullable()
5005
5071
  });
5006
- var PlanFeatures = import_zod16.z.object({
5072
+ var PlanFeatures = import_zod17.z.object({
5007
5073
  /** A/B tests of subject and content on a mailing (S4). */
5008
- ab_testing: import_zod16.z.boolean(),
5074
+ ab_testing: import_zod17.z.boolean(),
5009
5075
  /** Open and click tracking, still off until a workspace turns it on (`settings.tracking_enabled`). */
5010
- tracking: import_zod16.z.boolean(),
5011
- /** Sending and hosting pages on the workspace's own domain (a later phase). */
5012
- custom_domains: import_zod16.z.boolean(),
5076
+ tracking: import_zod17.z.boolean(),
5013
5077
  /** Automations: flows a person walks through step by step (A1). */
5014
- automations: import_zod16.z.boolean()
5078
+ automations: import_zod17.z.boolean()
5015
5079
  });
5016
- var PLAN_FEATURES = ["ab_testing", "tracking", "custom_domains", "automations"];
5017
- var Plan = import_zod16.z.object({
5080
+ var PLAN_FEATURES = ["ab_testing", "tracking", "automations"];
5081
+ var Plan = import_zod17.z.object({
5018
5082
  id: PlanId,
5019
- name: import_zod16.z.string().min(1),
5083
+ name: import_zod17.z.string().min(1),
5020
5084
  /** Price in the smallest currency unit per month; null for plans not sold. */
5021
- monthly_price_cents: import_zod16.z.number().int().min(0).nullable(),
5022
- currency: import_zod16.z.string().length(3),
5085
+ monthly_price_cents: import_zod17.z.number().int().min(0).nullable(),
5086
+ currency: import_zod17.z.string().length(3),
5023
5087
  limits: PlanLimits,
5024
5088
  features: PlanFeatures
5025
5089
  });
5026
- var CatalogPlan = Plan.extend({ sellable: import_zod16.z.boolean() });
5027
- var Subscription = import_zod16.z.object({
5090
+ var CatalogPlan = Plan.extend({ sellable: import_zod17.z.boolean() });
5091
+ var Subscription = import_zod17.z.object({
5028
5092
  workspace_id: Id,
5029
5093
  plan: PlanId,
5030
- status: import_zod16.z.enum(["active", "trialing", "past_due", "cancelled"]),
5094
+ status: import_zod17.z.enum(["active", "trialing", "past_due", "cancelled"]),
5031
5095
  current_period_start: Timestamp,
5032
5096
  current_period_end: Timestamp,
5033
- cancel_at_period_end: import_zod16.z.boolean(),
5097
+ cancel_at_period_end: import_zod17.z.boolean(),
5034
5098
  /**
5035
5099
  * A design partner outside billing (plan `design_partner`, no limits, no
5036
5100
  * checkout). Set only by an operator, never through the API.
5037
5101
  */
5038
- billing_exempt: import_zod16.z.boolean()
5102
+ billing_exempt: import_zod17.z.boolean()
5039
5103
  });
5040
- var USAGE_METRICS = ["messages", "contacts", "members", "providers", "webhook_endpoints", "active_automations"];
5041
- var UsageMetric = import_zod16.z.enum(USAGE_METRICS);
5104
+ var USAGE_METRICS = ["messages", "contacts", "members", "providers", "webhook_endpoints", "active_automations", "sending_domains"];
5105
+ var UsageMetric = import_zod17.z.enum(USAGE_METRICS);
5042
5106
  var USAGE_WARNING_RATIO = 0.8;
5043
- var UsageWarning = import_zod16.z.object({
5107
+ var UsageWarning = import_zod17.z.object({
5044
5108
  metric: UsageMetric,
5045
- used: import_zod16.z.number().int().min(0),
5046
- limit: import_zod16.z.number().int().min(0),
5109
+ used: import_zod17.z.number().int().min(0),
5110
+ limit: import_zod17.z.number().int().min(0),
5047
5111
  /** `approaching`: at or above USAGE_WARNING_RATIO of the limit; `reached`: at or above the limit. */
5048
- level: import_zod16.z.enum(["approaching", "reached"])
5112
+ level: import_zod17.z.enum(["approaching", "reached"])
5049
5113
  });
5050
- var Usage = import_zod16.z.object({
5114
+ var Usage = import_zod17.z.object({
5051
5115
  plan: PlanId,
5052
5116
  period_start: Timestamp,
5053
5117
  period_end: Timestamp,
5054
- metrics: import_zod16.z.record(UsageMetric, import_zod16.z.object({ used: import_zod16.z.number().int().min(0), limit: import_zod16.z.number().int().min(0).nullable() })),
5055
- warnings: import_zod16.z.array(UsageWarning)
5118
+ metrics: import_zod17.z.record(UsageMetric, import_zod17.z.object({ used: import_zod17.z.number().int().min(0), limit: import_zod17.z.number().int().min(0).nullable() })),
5119
+ warnings: import_zod17.z.array(UsageWarning)
5056
5120
  });
5057
- var CheckoutRequest = import_zod16.z.object({
5058
- plan: import_zod16.z.enum(["starter", "growth"]),
5059
- success_url: import_zod16.z.string().url(),
5060
- cancel_url: import_zod16.z.string().url()
5121
+ var CheckoutRequest = import_zod17.z.object({
5122
+ plan: import_zod17.z.enum(["starter", "growth"]),
5123
+ success_url: import_zod17.z.string().url(),
5124
+ cancel_url: import_zod17.z.string().url()
5061
5125
  });
5062
- var CheckoutSession = import_zod16.z.object({ url: import_zod16.z.string().url() });
5063
- var PortalRequest = import_zod16.z.object({ return_url: import_zod16.z.string().url() });
5064
- var PortalSession = import_zod16.z.object({ url: import_zod16.z.string().url() });
5126
+ var CheckoutSession = import_zod17.z.object({ url: import_zod17.z.string().url() });
5127
+ var PortalRequest = import_zod17.z.object({ return_url: import_zod17.z.string().url() });
5128
+ var PortalSession = import_zod17.z.object({ url: import_zod17.z.string().url() });
5065
5129
  var USAGE_WARNING_HEADER = "x-mail-usage-warning";
5066
5130
  function formatUsageWarningHeader(warnings) {
5067
5131
  if (warnings.length === 0) return null;
@@ -5081,7 +5145,7 @@ function parseUsageWarningHeader(value) {
5081
5145
  }
5082
5146
 
5083
5147
  // src/routes.ts
5084
- var import_zod17 = require("zod");
5148
+ var import_zod18 = require("zod");
5085
5149
  var list = (item) => page(item);
5086
5150
  var foundationRoutes = {
5087
5151
  "workspaces.create": {
@@ -5327,7 +5391,7 @@ var templateRoutes = {
5327
5391
  path: "/v1/templates/:id/export",
5328
5392
  params: IdParams,
5329
5393
  query: TemplateExportQuery,
5330
- response: import_zod17.z.string(),
5394
+ response: import_zod18.z.string(),
5331
5395
  responseType: "text",
5332
5396
  status: 200,
5333
5397
  access: "read",
@@ -5508,6 +5572,62 @@ var sendingRoutes = {
5508
5572
  access: "read",
5509
5573
  phase: "S2"
5510
5574
  },
5575
+ // Managed sending domains (docs/plans/2026-10-18-managed-sending-domains.md).
5576
+ "sendingDomains.list": {
5577
+ method: "GET",
5578
+ path: "/v1/sending-domains",
5579
+ query: PageQuery,
5580
+ response: list(SendingDomain),
5581
+ status: 200,
5582
+ access: "read",
5583
+ phase: "S2"
5584
+ },
5585
+ "sendingDomains.create": {
5586
+ method: "POST",
5587
+ path: "/v1/sending-domains",
5588
+ body: SendingDomainCreate,
5589
+ response: SendingDomain,
5590
+ status: 201,
5591
+ access: "admin",
5592
+ phase: "S2"
5593
+ },
5594
+ "sendingDomains.get": {
5595
+ method: "GET",
5596
+ path: "/v1/sending-domains/:id",
5597
+ params: IdParams,
5598
+ response: SendingDomain,
5599
+ status: 200,
5600
+ access: "read",
5601
+ phase: "S2"
5602
+ },
5603
+ "sendingDomains.update": {
5604
+ method: "PATCH",
5605
+ path: "/v1/sending-domains/:id",
5606
+ params: IdParams,
5607
+ body: SendingDomainUpdate,
5608
+ response: SendingDomain,
5609
+ status: 200,
5610
+ access: "admin",
5611
+ phase: "S2"
5612
+ },
5613
+ "sendingDomains.check": {
5614
+ method: "POST",
5615
+ path: "/v1/sending-domains/:id/check",
5616
+ params: IdParams,
5617
+ response: SendingDomain,
5618
+ status: 200,
5619
+ access: "admin",
5620
+ phase: "S2"
5621
+ },
5622
+ "sendingDomains.delete": {
5623
+ method: "DELETE",
5624
+ path: "/v1/sending-domains/:id",
5625
+ params: IdParams,
5626
+ response: Ok,
5627
+ status: 200,
5628
+ access: "admin",
5629
+ phase: "S2"
5630
+ },
5511
5631
  "topics.list": {
5512
5632
  method: "GET",
5513
5633
  path: "/v1/topics",
@@ -5651,7 +5771,7 @@ var sendingRoutes = {
5651
5771
  path: "/v1/mailings/:id/export",
5652
5772
  params: IdParams,
5653
5773
  query: MailingExportQuery,
5654
- response: import_zod17.z.string(),
5774
+ response: import_zod18.z.string(),
5655
5775
  responseType: "text",
5656
5776
  status: 200,
5657
5777
  access: "read",
@@ -5918,7 +6038,7 @@ var platformRoutes = {
5918
6038
  "contactProperties.list": {
5919
6039
  method: "GET",
5920
6040
  path: "/v1/contact-properties",
5921
- response: import_zod17.z.object({ data: import_zod17.z.array(ContactPropertyDefinition) }),
6041
+ response: import_zod18.z.object({ data: import_zod18.z.array(ContactPropertyDefinition) }),
5922
6042
  status: 200,
5923
6043
  access: "read",
5924
6044
  phase: "S4"
@@ -6217,7 +6337,7 @@ var billingRoutes = {
6217
6337
  "billing.plans": {
6218
6338
  method: "GET",
6219
6339
  path: "/v1/billing/plans",
6220
- response: import_zod17.z.object({ data: import_zod17.z.array(CatalogPlan) }),
6340
+ response: import_zod18.z.object({ data: import_zod18.z.array(CatalogPlan) }),
6221
6341
  status: 200,
6222
6342
  access: "read",
6223
6343
  phase: "S5"
@@ -6359,7 +6479,7 @@ var automationRoutes = {
6359
6479
  method: "POST",
6360
6480
  path: "/v1/automations/:id/pause",
6361
6481
  params: IdParams,
6362
- body: import_zod17.z.object({}).strict(),
6482
+ body: import_zod18.z.object({}).strict(),
6363
6483
  response: Automation,
6364
6484
  status: 200,
6365
6485
  access: "write",
@@ -6369,7 +6489,7 @@ var automationRoutes = {
6369
6489
  method: "POST",
6370
6490
  path: "/v1/automations/:id/resume",
6371
6491
  params: IdParams,
6372
- body: import_zod17.z.object({}).strict(),
6492
+ body: import_zod18.z.object({}).strict(),
6373
6493
  response: Automation,
6374
6494
  status: 200,
6375
6495
  access: "write",
@@ -6379,7 +6499,7 @@ var automationRoutes = {
6379
6499
  method: "POST",
6380
6500
  path: "/v1/automations/:id/archive",
6381
6501
  params: IdParams,
6382
- body: import_zod17.z.object({}).strict(),
6502
+ body: import_zod18.z.object({}).strict(),
6383
6503
  response: Automation,
6384
6504
  status: 200,
6385
6505
  access: "write",
@@ -6497,7 +6617,7 @@ var routes = {
6497
6617
  ...automationRoutes
6498
6618
  };
6499
6619
  var TRUSTED_APP_OPERATIONS = {
6500
- booking: ["workspaces.list", "workspace.update", "providers.list", "apiKeys.create", "apiKeys.revoke"]
6620
+ booking: ["workspaces.list", "workspace.update", "providers.list", "sendingDomains.list", "apiKeys.create", "apiKeys.revoke"]
6501
6621
  };
6502
6622
  function trustedAppMayCall(app, id) {
6503
6623
  return TRUSTED_APP_OPERATIONS[app].includes(id);
@@ -6885,6 +7005,9 @@ function matchRoute(method, pathname) {
6885
7005
  ResolveProblem,
6886
7006
  ResolvedRecipient,
6887
7007
  ResolvedValue,
7008
+ SENDING_DOMAIN_DNS_MODES,
7009
+ SENDING_DOMAIN_REGION,
7010
+ SENDING_DOMAIN_STATUSES,
6888
7011
  SERVICE_FILLED_MERGE_FIELDS,
6889
7012
  SIGNUP_FORM_FIELDS,
6890
7013
  SKIP_REASONS,
@@ -6900,6 +7023,13 @@ function matchRoute(method, pathname) {
6900
7023
  SegmentFilter,
6901
7024
  SegmentPreview,
6902
7025
  SegmentPreviewRequest,
7026
+ SendingDomain,
7027
+ SendingDomainCreate,
7028
+ SendingDomainDnsMode,
7029
+ SendingDomainName,
7030
+ SendingDomainRecord,
7031
+ SendingDomainStatus,
7032
+ SendingDomainUpdate,
6903
7033
  SignupForm,
6904
7034
  SignupFormCreate,
6905
7035
  SignupFormEmbed,