@marlinjai/mail-contract 0.15.2 → 0.17.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
@@ -105,6 +105,7 @@ __export(index_exports, {
105
105
  AutomationWithFlow: () => AutomationWithFlow,
106
106
  BEARER_PREFIX: () => BEARER_PREFIX,
107
107
  BILLING_NOT_CONFIGURED_REASON: () => BILLING_NOT_CONFIGURED_REASON,
108
+ BillingAddons: () => BillingAddons,
108
109
  BoundedAutomationFilter: () => BoundedAutomationFilter,
109
110
  BoundedSegmentFilter: () => BoundedSegmentFilter,
110
111
  COMPANY_GRANT_ROLES: () => COMPANY_GRANT_ROLES,
@@ -161,6 +162,7 @@ __export(index_exports, {
161
162
  EventListQuery: () => EventListQuery,
162
163
  EventName: () => EventName,
163
164
  ExportFormat: () => ExportFormat,
165
+ ExtraSendingDomainsUpdate: () => ExtraSendingDomainsUpdate,
164
166
  FILTER_FIELD_OPERATORS: () => FILTER_FIELD_OPERATORS,
165
167
  FILTER_OPERATORS: () => FILTER_OPERATORS,
166
168
  FilterCondition: () => FilterCondition,
@@ -227,6 +229,7 @@ __export(index_exports, {
227
229
  MAX_DOCUMENT_BYTES: () => MAX_DOCUMENT_BYTES,
228
230
  MAX_ENGAGEMENT_DAYS: () => MAX_ENGAGEMENT_DAYS,
229
231
  MAX_EXPORT_WARNINGS_HEADER_LENGTH: () => MAX_EXPORT_WARNINGS_HEADER_LENGTH,
232
+ MAX_EXTRA_SENDING_DOMAINS: () => MAX_EXTRA_SENDING_DOMAINS,
230
233
  MAX_FILTER_DEPTH: () => MAX_FILTER_DEPTH,
231
234
  MAX_IMPORTED_REMOTE_IMAGES: () => MAX_IMPORTED_REMOTE_IMAGES,
232
235
  MAX_IMPORT_BYTES: () => MAX_IMPORT_BYTES,
@@ -368,6 +371,9 @@ __export(index_exports, {
368
371
  ResolveProblem: () => ResolveProblem,
369
372
  ResolvedRecipient: () => ResolvedRecipient,
370
373
  ResolvedValue: () => ResolvedValue,
374
+ SENDING_DOMAIN_DNS_MODES: () => SENDING_DOMAIN_DNS_MODES,
375
+ SENDING_DOMAIN_REGION: () => SENDING_DOMAIN_REGION,
376
+ SENDING_DOMAIN_STATUSES: () => SENDING_DOMAIN_STATUSES,
371
377
  SERVICE_FILLED_MERGE_FIELDS: () => SERVICE_FILLED_MERGE_FIELDS,
372
378
  SIGNUP_FORM_FIELDS: () => SIGNUP_FORM_FIELDS,
373
379
  SKIP_REASONS: () => SKIP_REASONS,
@@ -383,6 +389,13 @@ __export(index_exports, {
383
389
  SegmentFilter: () => SegmentFilter,
384
390
  SegmentPreview: () => SegmentPreview,
385
391
  SegmentPreviewRequest: () => SegmentPreviewRequest,
392
+ SendingDomain: () => SendingDomain,
393
+ SendingDomainCreate: () => SendingDomainCreate,
394
+ SendingDomainDnsMode: () => SendingDomainDnsMode,
395
+ SendingDomainName: () => SendingDomainName,
396
+ SendingDomainRecord: () => SendingDomainRecord,
397
+ SendingDomainStatus: () => SendingDomainStatus,
398
+ SendingDomainUpdate: () => SendingDomainUpdate,
386
399
  SignupForm: () => SignupForm,
387
400
  SignupFormCreate: () => SignupFormCreate,
388
401
  SignupFormEmbed: () => SignupFormEmbed,
@@ -3602,6 +3615,10 @@ var AUDIT_ACTIONS = [
3602
3615
  "provider.events_secret_set",
3603
3616
  "provider.bounces_halted",
3604
3617
  "provider.anomaly_cleared",
3618
+ "sending_domain.created",
3619
+ "sending_domain.updated",
3620
+ "sending_domain.checked",
3621
+ "sending_domain.deleted",
3605
3622
  "topic.created",
3606
3623
  "topic.updated",
3607
3624
  "topic.deleted",
@@ -3658,6 +3675,7 @@ var AUDIT_ACTIONS = [
3658
3675
  "billing.checkout_started",
3659
3676
  "billing.subscription_changed",
3660
3677
  "billing.exemption_changed",
3678
+ "billing.extra_sending_domains_changed",
3661
3679
  // A1: automations
3662
3680
  "automation.created",
3663
3681
  "automation.updated",
@@ -4433,7 +4451,7 @@ var ProviderRejections = import_zod13.z.object({
4433
4451
  });
4434
4452
  var ProviderEvents = import_zod13.z.object({
4435
4453
  status: import_zod13.z.enum(["active", "needs_secret"]),
4436
- source: import_zod13.z.enum(["automatic", "manual"]).nullable(),
4454
+ source: import_zod13.z.enum(["automatic", "manual", "managed"]).nullable(),
4437
4455
  url: import_zod13.z.string().url(),
4438
4456
  error: import_zod13.z.string().nullable(),
4439
4457
  /**
@@ -4520,36 +4538,86 @@ var ProviderVerifyResult = import_zod13.z.object({
4520
4538
  error: import_zod13.z.string().nullable()
4521
4539
  });
4522
4540
 
4523
- // src/contacts.ts
4541
+ // src/sending-domains.ts
4524
4542
  var import_zod14 = require("zod");
4525
- var Topic = import_zod14.z.object({
4543
+ var SENDING_DOMAIN_STATUSES = ["pending_dns", "verifying", "verified", "failed", "temporary_failure"];
4544
+ var SendingDomainStatus = import_zod14.z.enum(SENDING_DOMAIN_STATUSES);
4545
+ var SENDING_DOMAIN_DNS_MODES = ["manual", "managed"];
4546
+ var SendingDomainDnsMode = import_zod14.z.enum(SENDING_DOMAIN_DNS_MODES);
4547
+ var SENDING_DOMAIN_REGION = "eu-west-1";
4548
+ var SendingDomainName = import_zod14.z.string().trim().toLowerCase().max(253).regex(
4549
+ /^(?=.{1,253}$)(?!-)[a-z0-9-]{1,63}(?<!-)(\.(?!-)[a-z0-9-]{1,63}(?<!-))*\.[a-z]{2,63}$/,
4550
+ "must be a domain such as example.com, without https:// or an @"
4551
+ );
4552
+ var SendingDomainRecord = import_zod14.z.object({
4553
+ record: import_zod14.z.string().max(40),
4554
+ name: import_zod14.z.string().max(253),
4555
+ type: import_zod14.z.string().max(10),
4556
+ value: import_zod14.z.string().max(4096),
4557
+ ttl: import_zod14.z.string().max(20),
4558
+ status: import_zod14.z.string().max(40),
4559
+ priority: import_zod14.z.number().int().min(0).max(65535).optional()
4560
+ });
4561
+ var SendingDomain = import_zod14.z.object({
4562
+ id: Id,
4563
+ domain: import_zod14.z.string(),
4564
+ from_name: import_zod14.z.string(),
4565
+ from_email: Email,
4566
+ reply_to: Email.nullable(),
4567
+ status: SendingDomainStatus,
4568
+ dns_mode: SendingDomainDnsMode,
4569
+ records: import_zod14.z.array(SendingDomainRecord),
4570
+ provider_id: Id.nullable(),
4571
+ checked_at: Timestamp.nullable(),
4572
+ verified_at: Timestamp.nullable(),
4573
+ last_error: import_zod14.z.string().nullable(),
4574
+ created_at: Timestamp,
4575
+ updated_at: Timestamp
4576
+ });
4577
+ var SenderFields = {
4578
+ from_name: import_zod14.z.string().trim().min(1).max(120),
4579
+ from_email: Email,
4580
+ reply_to: Email.nullable().optional()
4581
+ };
4582
+ function senderOnDomain(input, ctx) {
4583
+ const at = input.from_email.lastIndexOf("@");
4584
+ if (at < 0 || input.from_email.slice(at + 1).toLowerCase() !== input.domain) {
4585
+ ctx.addIssue({ code: import_zod14.z.ZodIssueCode.custom, path: ["from_email"], message: `must be an address on ${input.domain}` });
4586
+ }
4587
+ }
4588
+ var SendingDomainCreate = import_zod14.z.object({ domain: SendingDomainName, ...SenderFields }).superRefine(senderOnDomain);
4589
+ 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");
4590
+
4591
+ // src/contacts.ts
4592
+ var import_zod15 = require("zod");
4593
+ var Topic = import_zod15.z.object({
4526
4594
  id: Id,
4527
4595
  slug: Slug,
4528
- name: import_zod14.z.string().min(1).max(120),
4596
+ name: import_zod15.z.string().min(1).max(120),
4529
4597
  /** Shown on the hosted preference page. */
4530
- description: import_zod14.z.string().max(1e3).nullable(),
4598
+ description: import_zod15.z.string().max(1e3).nullable(),
4531
4599
  /** 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() })
4600
+ translations: import_zod15.z.record(
4601
+ import_zod15.z.object({ name: import_zod15.z.string().min(1).max(120), description: import_zod15.z.string().max(1e3).nullable() })
4534
4602
  ),
4535
4603
  created_at: Timestamp,
4536
4604
  updated_at: Timestamp
4537
4605
  });
4538
- var TopicCreate = import_zod14.z.object({
4606
+ var TopicCreate = import_zod15.z.object({
4539
4607
  slug: Slug,
4540
- name: import_zod14.z.string().min(1).max(120),
4541
- description: import_zod14.z.string().max(1e3).optional(),
4608
+ name: import_zod15.z.string().min(1).max(120),
4609
+ description: import_zod15.z.string().max(1e3).optional(),
4542
4610
  translations: Topic.shape.translations.optional()
4543
4611
  });
4544
4612
  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({
4613
+ var Contact = import_zod15.z.object({
4546
4614
  id: Id,
4547
- external_id: import_zod14.z.string().min(1).max(255).nullable(),
4615
+ external_id: import_zod15.z.string().min(1).max(255).nullable(),
4548
4616
  /** Stored lowercased, unique per workspace. */
4549
4617
  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(),
4618
+ first_name: import_zod15.z.string().max(200).nullable(),
4619
+ last_name: import_zod15.z.string().max(200).nullable(),
4620
+ locale: import_zod15.z.string().min(2).max(35).nullable(),
4553
4621
  /**
4554
4622
  * The person's own time zone, an IANA name such as `Europe/Berlin` (A1).
4555
4623
  * Every wall clock an automation waits for is read in it, falling back to the
@@ -4557,65 +4625,65 @@ var Contact = import_zod14.z.object({
4557
4625
  */
4558
4626
  timezone: TimezoneName.nullable(),
4559
4627
  properties: Properties,
4560
- topics: import_zod14.z.array(Slug),
4628
+ topics: import_zod15.z.array(Slug),
4561
4629
  /** The slugs of the contact's tags (S4). */
4562
- tags: import_zod14.z.array(Slug),
4630
+ tags: import_zod15.z.array(Slug),
4563
4631
  created_at: Timestamp,
4564
4632
  updated_at: Timestamp
4565
4633
  });
4566
- var ContactUpsert = import_zod14.z.object({
4567
- external_id: import_zod14.z.string().min(1).max(255).optional(),
4634
+ var ContactUpsert = import_zod15.z.object({
4635
+ external_id: import_zod15.z.string().min(1).max(255).optional(),
4568
4636
  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(),
4637
+ first_name: import_zod15.z.string().max(200).nullable().optional(),
4638
+ last_name: import_zod15.z.string().max(200).nullable().optional(),
4639
+ locale: import_zod15.z.string().min(2).max(35).nullable().optional(),
4572
4640
  timezone: TimezoneName.nullable().optional(),
4573
4641
  properties: Properties.optional(),
4574
- topics: import_zod14.z.array(Slug).max(100).optional()
4642
+ topics: import_zod15.z.array(Slug).max(100).optional()
4575
4643
  }).refine((v) => v.external_id !== void 0 || v.email !== void 0, {
4576
4644
  message: "external_id or email is required",
4577
4645
  path: ["email"]
4578
4646
  });
4579
- var ContactUpsertResult = import_zod14.z.object({
4647
+ var ContactUpsertResult = import_zod15.z.object({
4580
4648
  contact: Contact,
4581
- created: import_zod14.z.boolean()
4649
+ created: import_zod15.z.boolean()
4582
4650
  });
4583
4651
  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(),
4652
+ email: import_zod15.z.string().min(1).max(254).optional(),
4653
+ external_id: import_zod15.z.string().min(1).max(255).optional(),
4586
4654
  topic: Slug.optional()
4587
4655
  });
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)
4656
+ var ContactErased = import_zod15.z.object({
4657
+ ok: import_zod15.z.literal(true),
4658
+ erased_messages: import_zod15.z.number().int().min(0),
4659
+ erased_recipients: import_zod15.z.number().int().min(0),
4660
+ suppressions_kept: import_zod15.z.number().int().min(0)
4593
4661
  });
4594
4662
  var SUPPRESSION_REASONS = ["unsubscribed", "bounced", "complained", "manual"];
4595
- var SuppressionReason = import_zod14.z.enum(SUPPRESSION_REASONS);
4596
- var Suppression = import_zod14.z.object({
4663
+ var SuppressionReason = import_zod15.z.enum(SUPPRESSION_REASONS);
4664
+ var Suppression = import_zod15.z.object({
4597
4665
  id: Id,
4598
4666
  email: Email,
4599
4667
  reason: SuppressionReason,
4600
4668
  topic: Slug.nullable(),
4601
4669
  source_message_id: Id.nullable(),
4602
- note: import_zod14.z.string().max(1e3).nullable(),
4670
+ note: import_zod15.z.string().max(1e3).nullable(),
4603
4671
  created_at: Timestamp
4604
4672
  });
4605
- var SuppressionCreate = import_zod14.z.object({
4673
+ var SuppressionCreate = import_zod15.z.object({
4606
4674
  email: Email,
4607
- reason: import_zod14.z.enum(["manual", "unsubscribed"]),
4675
+ reason: import_zod15.z.enum(["manual", "unsubscribed"]),
4608
4676
  topic: Slug.nullable().optional(),
4609
- note: import_zod14.z.string().max(1e3).optional()
4677
+ note: import_zod15.z.string().max(1e3).optional()
4610
4678
  });
4611
4679
  var SuppressionListQuery = PageQuery.extend({
4612
- email: import_zod14.z.string().min(1).max(254).optional(),
4680
+ email: import_zod15.z.string().min(1).max(254).optional(),
4613
4681
  reason: SuppressionReason.optional(),
4614
4682
  topic: Slug.optional()
4615
4683
  });
4616
4684
 
4617
4685
  // src/webhooks.ts
4618
- var import_zod15 = require("zod");
4686
+ var import_zod16 = require("zod");
4619
4687
  var WEBHOOK_EVENT_TYPES = [
4620
4688
  "message.sent",
4621
4689
  "message.failed",
@@ -4659,23 +4727,23 @@ var WEBHOOK_EVENT_TYPES = [
4659
4727
  "template.updated",
4660
4728
  "template.deleted"
4661
4729
  ];
4662
- var WebhookEventType = import_zod15.z.enum(WEBHOOK_EVENT_TYPES);
4663
- var MessageEventBase = import_zod15.z.object({
4730
+ var WebhookEventType = import_zod16.z.enum(WEBHOOK_EVENT_TYPES);
4731
+ var MessageEventBase = import_zod16.z.object({
4664
4732
  message_id: Id,
4665
4733
  mailing_id: Id.nullable(),
4666
4734
  mailing_metadata: MailingMetadata.nullable(),
4667
4735
  recipient_id: Id.nullable(),
4668
4736
  contact_id: Id.nullable(),
4669
- external_id: import_zod15.z.string().nullable(),
4737
+ external_id: import_zod16.z.string().nullable(),
4670
4738
  email: Email,
4671
- subject: import_zod15.z.string(),
4739
+ subject: import_zod16.z.string(),
4672
4740
  topic: Slug.nullable(),
4673
- provider_message_id: import_zod15.z.string().nullable(),
4674
- is_test: import_zod15.z.boolean()
4741
+ provider_message_id: import_zod16.z.string().nullable(),
4742
+ is_test: import_zod16.z.boolean()
4675
4743
  });
4676
4744
  var MessageSentData = MessageEventBase.extend({
4677
4745
  /** The final HTML as sent, so the client can archive it beside its own records. */
4678
- html: import_zod15.z.string(),
4746
+ html: import_zod16.z.string(),
4679
4747
  sent_at: Timestamp,
4680
4748
  /**
4681
4749
  * The choice each insertion made (see `Message.insertions`); absent or null
@@ -4686,20 +4754,20 @@ var MessageSentData = MessageEventBase.extend({
4686
4754
  insertions: InsertionChoices.nullish()
4687
4755
  });
4688
4756
  var MessageFailedData = MessageEventBase.extend({
4689
- error: import_zod15.z.string(),
4757
+ error: import_zod16.z.string(),
4690
4758
  /** False when the provider rejected permanently; the recipient will not be retried. */
4691
- retryable: import_zod15.z.boolean(),
4759
+ retryable: import_zod16.z.boolean(),
4692
4760
  failed_at: Timestamp
4693
4761
  });
4694
4762
  var UNSUBSCRIBE_SOURCES = ["hosted_page", "one_click", "api", "dashboard", "signup_form"];
4695
- var ContactUnsubscribedData = import_zod15.z.object({
4763
+ var ContactUnsubscribedData = import_zod16.z.object({
4696
4764
  contact_id: Id.nullable(),
4697
- external_id: import_zod15.z.string().nullable(),
4765
+ external_id: import_zod16.z.string().nullable(),
4698
4766
  email: Email,
4699
4767
  /** The topic unsubscribed from; null means every topic. */
4700
4768
  topic: Slug.nullable(),
4701
4769
  mailing_id: Id.nullable(),
4702
- source: import_zod15.z.enum(UNSUBSCRIBE_SOURCES),
4770
+ source: import_zod16.z.enum(UNSUBSCRIBE_SOURCES),
4703
4771
  unsubscribed_at: Timestamp
4704
4772
  });
4705
4773
  var ContactResubscribedData = ContactUnsubscribedData.omit({ unsubscribed_at: true }).extend({
@@ -4708,142 +4776,142 @@ var ContactResubscribedData = ContactUnsubscribedData.omit({ unsubscribed_at: tr
4708
4776
  * breaker undid a `bounced` block it judged false (a `contact.bounced` for the
4709
4777
  * same address and mailing went out before); `topic` is null.
4710
4778
  */
4711
- source: import_zod15.z.enum([...UNSUBSCRIBE_SOURCES, "bounce_reverted"]),
4779
+ source: import_zod16.z.enum([...UNSUBSCRIBE_SOURCES, "bounce_reverted"]),
4712
4780
  resubscribed_at: Timestamp
4713
4781
  });
4714
- var ContactBouncedData = import_zod15.z.object({
4782
+ var ContactBouncedData = import_zod16.z.object({
4715
4783
  contact_id: Id.nullable(),
4716
- external_id: import_zod15.z.string().nullable(),
4784
+ external_id: import_zod16.z.string().nullable(),
4717
4785
  email: Email,
4718
4786
  /** `bounced` for a hard bounce, `complained` for a spam complaint. */
4719
- reason: import_zod15.z.enum(["bounced", "complained"]),
4787
+ reason: import_zod16.z.enum(["bounced", "complained"]),
4720
4788
  message_id: Id.nullable(),
4721
- diagnostic: import_zod15.z.string().nullable(),
4789
+ diagnostic: import_zod16.z.string().nullable(),
4722
4790
  bounced_at: Timestamp
4723
4791
  });
4724
- var MailingFinishedData = import_zod15.z.object({
4792
+ var MailingFinishedData = import_zod16.z.object({
4725
4793
  mailing_id: Id,
4726
4794
  mailing_metadata: MailingMetadata,
4727
- status: import_zod15.z.enum(["sent", "partially_failed", "cancelled"]),
4795
+ status: import_zod16.z.enum(["sent", "partially_failed", "cancelled"]),
4728
4796
  counts: MailingCounts,
4729
4797
  finished_at: Timestamp
4730
4798
  });
4731
- var ContactSubscribedData = import_zod15.z.object({
4799
+ var ContactSubscribedData = import_zod16.z.object({
4732
4800
  contact_id: Id,
4733
- external_id: import_zod15.z.string().nullable(),
4801
+ external_id: import_zod16.z.string().nullable(),
4734
4802
  email: Email,
4735
- topics: import_zod15.z.array(Slug),
4736
- source: import_zod15.z.enum(["signup_form", "api", "dashboard", "automation"]),
4803
+ topics: import_zod16.z.array(Slug),
4804
+ source: import_zod16.z.enum(["signup_form", "api", "dashboard", "automation"]),
4737
4805
  signup_form_id: Id.nullable(),
4738
- signup_form_version: import_zod15.z.number().int().min(1).nullable(),
4806
+ signup_form_version: import_zod16.z.number().int().min(1).nullable(),
4739
4807
  subscribed_at: Timestamp
4740
4808
  });
4741
- var ImportFinishedData = import_zod15.z.object({
4809
+ var ImportFinishedData = import_zod16.z.object({
4742
4810
  import_id: Id,
4743
- status: import_zod15.z.enum(["completed", "cancelled", "failed"]),
4811
+ status: import_zod16.z.enum(["completed", "cancelled", "failed"]),
4744
4812
  result: ImportReport.nullable(),
4745
- error: import_zod15.z.string().nullable(),
4813
+ error: import_zod16.z.string().nullable(),
4746
4814
  finished_at: Timestamp
4747
4815
  });
4748
- var MailingScheduledData = import_zod15.z.object({
4816
+ var MailingScheduledData = import_zod16.z.object({
4749
4817
  mailing_id: Id,
4750
4818
  mailing_metadata: MailingMetadata,
4751
4819
  scheduled_at: Timestamp.nullable()
4752
4820
  });
4753
- var MailingStartedData = import_zod15.z.object({
4821
+ var MailingStartedData = import_zod16.z.object({
4754
4822
  mailing_id: Id,
4755
4823
  mailing_metadata: MailingMetadata,
4756
- trigger: import_zod15.z.enum(["send", "schedule"]),
4757
- recipients: import_zod15.z.number().int().min(0),
4824
+ trigger: import_zod16.z.enum(["send", "schedule"]),
4825
+ recipients: import_zod16.z.number().int().min(0),
4758
4826
  started_at: Timestamp
4759
4827
  });
4760
- var MailingScheduleFailedData = import_zod15.z.object({
4828
+ var MailingScheduleFailedData = import_zod16.z.object({
4761
4829
  mailing_id: Id,
4762
4830
  mailing_metadata: MailingMetadata,
4763
- code: import_zod15.z.string(),
4764
- message: import_zod15.z.string(),
4831
+ code: import_zod16.z.string(),
4832
+ message: import_zod16.z.string(),
4765
4833
  failed_at: Timestamp
4766
4834
  });
4767
- var MailingAbWinnerSelectedData = import_zod15.z.object({
4835
+ var MailingAbWinnerSelectedData = import_zod16.z.object({
4768
4836
  mailing_id: Id,
4769
4837
  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),
4838
+ winner: import_zod16.z.string(),
4839
+ decided_by: import_zod16.z.enum(["metric", "manual"]),
4840
+ variants: import_zod16.z.array(VariantAnalytics),
4773
4841
  decided_at: Timestamp
4774
4842
  });
4775
- var ContactTaggedData = import_zod15.z.object({
4843
+ var ContactTaggedData = import_zod16.z.object({
4776
4844
  contact_id: Id,
4777
- external_id: import_zod15.z.string().nullable(),
4845
+ external_id: import_zod16.z.string().nullable(),
4778
4846
  email: Email,
4779
4847
  /** 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"]),
4848
+ tags: import_zod16.z.array(Slug).min(1),
4849
+ source: import_zod16.z.enum(["api", "dashboard", "signup_form", "import", "automation"]),
4782
4850
  tagged_at: Timestamp
4783
4851
  });
4784
- var ContactUpdatedData = import_zod15.z.object({
4852
+ var ContactUpdatedData = import_zod16.z.object({
4785
4853
  contact_id: Id,
4786
- external_id: import_zod15.z.string().nullable(),
4854
+ external_id: import_zod16.z.string().nullable(),
4787
4855
  email: Email,
4788
- changed: import_zod15.z.array(import_zod15.z.string()).min(1),
4856
+ changed: import_zod16.z.array(import_zod16.z.string()).min(1),
4789
4857
  properties: Properties,
4790
- source: import_zod15.z.enum(["api", "dashboard", "signup_form", "import", "automation"]),
4858
+ source: import_zod16.z.enum(["api", "dashboard", "signup_form", "import", "automation"]),
4791
4859
  updated_at: Timestamp
4792
4860
  });
4793
- var AutomationRunEventBase = import_zod15.z.object({
4861
+ var AutomationRunEventBase = import_zod16.z.object({
4794
4862
  automation_id: Id,
4795
- automation_name: import_zod15.z.string(),
4863
+ automation_name: import_zod16.z.string(),
4796
4864
  run_id: Id,
4797
- version: import_zod15.z.number().int().min(1),
4865
+ version: import_zod16.z.number().int().min(1),
4798
4866
  contact_id: Id,
4799
- external_id: import_zod15.z.string().nullable(),
4867
+ external_id: import_zod16.z.string().nullable(),
4800
4868
  email: Email
4801
4869
  });
4802
4870
  var AutomationRunStartedData = AutomationRunEventBase.extend({
4803
4871
  /** What let them in: a trigger kind, or `manual` for an explicit enrolment. */
4804
- trigger_kind: import_zod15.z.string(),
4872
+ trigger_kind: import_zod16.z.string(),
4805
4873
  entered_at: Timestamp
4806
4874
  });
4807
4875
  var AutomationRunCompletedData = AutomationRunEventBase.extend({
4808
- last_step_id: import_zod15.z.string().nullable(),
4876
+ last_step_id: import_zod16.z.string().nullable(),
4809
4877
  completed_at: Timestamp
4810
4878
  });
4811
4879
  var AutomationRunExitedData = AutomationRunEventBase.extend({
4812
4880
  reason: AutomationEndReason,
4813
- step_id: import_zod15.z.string().nullable(),
4881
+ step_id: import_zod16.z.string().nullable(),
4814
4882
  exited_at: Timestamp
4815
4883
  });
4816
4884
  var AutomationRunFailedData = AutomationRunEventBase.extend({
4817
- reason: import_zod15.z.string(),
4818
- step_id: import_zod15.z.string().nullable(),
4885
+ reason: import_zod16.z.string(),
4886
+ step_id: import_zod16.z.string().nullable(),
4819
4887
  failed_at: Timestamp
4820
4888
  });
4821
4889
  var AutomationWebhookData = AutomationRunEventBase.extend({
4822
- step_id: import_zod15.z.string(),
4890
+ step_id: import_zod16.z.string(),
4823
4891
  /** 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(),
4892
+ step_label: import_zod16.z.string().nullable(),
4825
4893
  /** Whatever the step carries, verbatim. Null when it carries nothing. */
4826
4894
  payload: JsonValue.nullable(),
4827
4895
  fired_at: Timestamp
4828
4896
  });
4829
- var TemplateEventBase = import_zod15.z.object({
4897
+ var TemplateEventBase = import_zod16.z.object({
4830
4898
  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"])
4899
+ name: import_zod16.z.string().min(1).max(200),
4900
+ version: import_zod16.z.number().int().min(1),
4901
+ source: import_zod16.z.enum(["api", "dashboard", "mjml_import"])
4834
4902
  });
4835
4903
  var TemplateCreatedData = TemplateEventBase.extend({ created_at: Timestamp });
4836
- var TemplateUpdatedData = TemplateEventBase.extend({ archived: import_zod15.z.boolean(), updated_at: Timestamp });
4904
+ var TemplateUpdatedData = TemplateEventBase.extend({ archived: import_zod16.z.boolean(), updated_at: Timestamp });
4837
4905
  var TemplateDeletedData = TemplateEventBase.extend({ deleted_at: Timestamp });
4838
- var envelope = (type, data) => import_zod15.z.object({
4906
+ var envelope = (type, data) => import_zod16.z.object({
4839
4907
  /** Unique per event: a receiver deduplicates on it (deliveries may repeat). */
4840
4908
  id: Id,
4841
- type: import_zod15.z.literal(type),
4909
+ type: import_zod16.z.literal(type),
4842
4910
  created_at: Timestamp,
4843
4911
  workspace_id: Id,
4844
4912
  data
4845
4913
  });
4846
- var WebhookEvent = import_zod15.z.discriminatedUnion("type", [
4914
+ var WebhookEvent = import_zod16.z.discriminatedUnion("type", [
4847
4915
  envelope("message.sent", MessageSentData),
4848
4916
  envelope("message.failed", MessageFailedData),
4849
4917
  envelope("contact.unsubscribed", ContactUnsubscribedData),
@@ -4867,16 +4935,16 @@ var WebhookEvent = import_zod15.z.discriminatedUnion("type", [
4867
4935
  envelope("template.updated", TemplateUpdatedData),
4868
4936
  envelope("template.deleted", TemplateDeletedData)
4869
4937
  ]);
4870
- var WebhookEndpoint = import_zod15.z.object({
4938
+ var WebhookEndpoint = import_zod16.z.object({
4871
4939
  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(),
4940
+ url: import_zod16.z.string().url(),
4941
+ description: import_zod16.z.string().max(500).nullable(),
4942
+ events: import_zod16.z.array(WebhookEventType).min(1),
4943
+ enabled: import_zod16.z.boolean(),
4876
4944
  created_at: Timestamp,
4877
4945
  updated_at: Timestamp
4878
4946
  });
4879
- var WebhookUrl = import_zod15.z.string().url().refine((u) => {
4947
+ var WebhookUrl = import_zod16.z.string().url().refine((u) => {
4880
4948
  try {
4881
4949
  const url = new URL(u);
4882
4950
  if (url.protocol === "https:") return true;
@@ -4885,35 +4953,35 @@ var WebhookUrl = import_zod15.z.string().url().refine((u) => {
4885
4953
  return false;
4886
4954
  }
4887
4955
  }, "must be https (http only for localhost)");
4888
- var WebhookEndpointCreate = import_zod15.z.object({
4956
+ var WebhookEndpointCreate = import_zod16.z.object({
4889
4957
  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()
4958
+ description: import_zod16.z.string().max(500).optional(),
4959
+ events: import_zod16.z.array(WebhookEventType).min(1),
4960
+ enabled: import_zod16.z.boolean().optional()
4893
4961
  });
4894
- var WebhookEndpointUpdate = import_zod15.z.object({
4962
+ var WebhookEndpointUpdate = import_zod16.z.object({
4895
4963
  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()
4964
+ description: import_zod16.z.string().max(500).nullable(),
4965
+ events: import_zod16.z.array(WebhookEventType).min(1),
4966
+ enabled: import_zod16.z.boolean()
4899
4967
  }).partial().refine((v) => Object.keys(v).length > 0, "at least one field");
4900
- var WebhookEndpointWithSecret = import_zod15.z.object({
4968
+ var WebhookEndpointWithSecret = import_zod16.z.object({
4901
4969
  endpoint: WebhookEndpoint,
4902
- secret: import_zod15.z.string().min(32)
4970
+ secret: import_zod16.z.string().min(32)
4903
4971
  });
4904
4972
  var WEBHOOK_DELIVERY_STATUSES = ["pending", "succeeded", "failed"];
4905
- var WebhookDeliveryStatus = import_zod15.z.enum(WEBHOOK_DELIVERY_STATUSES);
4973
+ var WebhookDeliveryStatus = import_zod16.z.enum(WEBHOOK_DELIVERY_STATUSES);
4906
4974
  var WEBHOOK_MAX_ATTEMPTS = 8;
4907
4975
  var WEBHOOK_RETRY_DELAYS_SECONDS = [30, 120, 600, 1800, 3600, 7200, 21600];
4908
- var WebhookDelivery = import_zod15.z.object({
4976
+ var WebhookDelivery = import_zod16.z.object({
4909
4977
  id: Id,
4910
4978
  endpoint_id: Id,
4911
4979
  event_id: Id,
4912
4980
  event_type: WebhookEventType,
4913
4981
  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(),
4982
+ attempts: import_zod16.z.number().int().min(0),
4983
+ last_status_code: import_zod16.z.number().int().min(100).max(599).nullable(),
4984
+ last_error: import_zod16.z.string().nullable(),
4917
4985
  next_attempt_at: Timestamp.nullable(),
4918
4986
  delivered_at: Timestamp.nullable(),
4919
4987
  created_at: Timestamp
@@ -4922,7 +4990,7 @@ var WebhookDeliveryListQuery = PageQuery.extend({
4922
4990
  status: WebhookDeliveryStatus.optional(),
4923
4991
  event_type: WebhookEventType.optional()
4924
4992
  });
4925
- var WebhookDeliveryParams = import_zod15.z.object({ id: Id, delivery_id: Id });
4993
+ var WebhookDeliveryParams = import_zod16.z.object({ id: Id, delivery_id: Id });
4926
4994
 
4927
4995
  // src/webhook-signing.ts
4928
4996
  var WEBHOOK_SIGNATURE_HEADER = "x-mail-signature";
@@ -4989,79 +5057,94 @@ async function verifyWebhook(input) {
4989
5057
  }
4990
5058
 
4991
5059
  // src/billing.ts
4992
- var import_zod16 = require("zod");
5060
+ var import_zod17 = require("zod");
4993
5061
  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(),
5062
+ var PlanId = import_zod17.z.enum(PLAN_IDS);
5063
+ var PlanLimits = import_zod17.z.object({
5064
+ monthly_messages: import_zod17.z.number().int().min(0).nullable(),
5065
+ contacts: import_zod17.z.number().int().min(0).nullable(),
5066
+ members: import_zod17.z.number().int().min(1).nullable(),
5067
+ providers: import_zod17.z.number().int().min(1).nullable(),
5068
+ webhook_endpoints: import_zod17.z.number().int().min(0).nullable(),
5001
5069
  /** Automations that may be live (active or paused) at once (A1). */
5002
- active_automations: import_zod16.z.number().int().min(0).nullable(),
5070
+ active_automations: import_zod17.z.number().int().min(0).nullable(),
5003
5071
  /** 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()
5072
+ automation_steps: import_zod17.z.number().int().min(1).nullable(),
5073
+ /** Own domains Lumitra Mail sends from (managed sending domains); 0 when the plan has none. */
5074
+ sending_domains: import_zod17.z.number().int().min(0).nullable()
5005
5075
  });
5006
- var PlanFeatures = import_zod16.z.object({
5076
+ var PlanFeatures = import_zod17.z.object({
5007
5077
  /** A/B tests of subject and content on a mailing (S4). */
5008
- ab_testing: import_zod16.z.boolean(),
5078
+ ab_testing: import_zod17.z.boolean(),
5009
5079
  /** 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(),
5080
+ tracking: import_zod17.z.boolean(),
5013
5081
  /** Automations: flows a person walks through step by step (A1). */
5014
- automations: import_zod16.z.boolean()
5082
+ automations: import_zod17.z.boolean()
5015
5083
  });
5016
- var PLAN_FEATURES = ["ab_testing", "tracking", "custom_domains", "automations"];
5017
- var Plan = import_zod16.z.object({
5084
+ var PLAN_FEATURES = ["ab_testing", "tracking", "automations"];
5085
+ var Plan = import_zod17.z.object({
5018
5086
  id: PlanId,
5019
- name: import_zod16.z.string().min(1),
5087
+ name: import_zod17.z.string().min(1),
5020
5088
  /** 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),
5089
+ monthly_price_cents: import_zod17.z.number().int().min(0).nullable(),
5090
+ currency: import_zod17.z.string().length(3),
5023
5091
  limits: PlanLimits,
5024
5092
  features: PlanFeatures
5025
5093
  });
5026
- var CatalogPlan = Plan.extend({ sellable: import_zod16.z.boolean() });
5027
- var Subscription = import_zod16.z.object({
5094
+ var CatalogPlan = Plan.extend({ sellable: import_zod17.z.boolean() });
5095
+ var Subscription = import_zod17.z.object({
5028
5096
  workspace_id: Id,
5029
5097
  plan: PlanId,
5030
- status: import_zod16.z.enum(["active", "trialing", "past_due", "cancelled"]),
5098
+ status: import_zod17.z.enum(["active", "trialing", "past_due", "cancelled"]),
5031
5099
  current_period_start: Timestamp,
5032
5100
  current_period_end: Timestamp,
5033
- cancel_at_period_end: import_zod16.z.boolean(),
5101
+ cancel_at_period_end: import_zod17.z.boolean(),
5034
5102
  /**
5035
5103
  * A design partner outside billing (plan `design_partner`, no limits, no
5036
5104
  * checkout). Set only by an operator, never through the API.
5037
5105
  */
5038
- billing_exempt: import_zod16.z.boolean()
5106
+ billing_exempt: import_zod17.z.boolean(),
5107
+ /**
5108
+ * Own sending domains bought on top of the plan's included ones (the
5109
+ * add-on), each a monthly charge on the same subscription. 0 without the
5110
+ * add-on; the usage limit `sending_domains` is the plan's plus these.
5111
+ */
5112
+ extra_sending_domains: import_zod17.z.number().int().min(0)
5113
+ });
5114
+ var BillingAddons = import_zod17.z.object({
5115
+ sending_domain: import_zod17.z.object({
5116
+ monthly_price_cents: import_zod17.z.number().int().min(0),
5117
+ currency: import_zod17.z.string().length(3),
5118
+ sellable: import_zod17.z.boolean()
5119
+ })
5039
5120
  });
5040
- var USAGE_METRICS = ["messages", "contacts", "members", "providers", "webhook_endpoints", "active_automations"];
5041
- var UsageMetric = import_zod16.z.enum(USAGE_METRICS);
5121
+ var MAX_EXTRA_SENDING_DOMAINS = 100;
5122
+ var ExtraSendingDomainsUpdate = import_zod17.z.object({ quantity: import_zod17.z.number().int().min(0).max(MAX_EXTRA_SENDING_DOMAINS) });
5123
+ var USAGE_METRICS = ["messages", "contacts", "members", "providers", "webhook_endpoints", "active_automations", "sending_domains"];
5124
+ var UsageMetric = import_zod17.z.enum(USAGE_METRICS);
5042
5125
  var USAGE_WARNING_RATIO = 0.8;
5043
- var UsageWarning = import_zod16.z.object({
5126
+ var UsageWarning = import_zod17.z.object({
5044
5127
  metric: UsageMetric,
5045
- used: import_zod16.z.number().int().min(0),
5046
- limit: import_zod16.z.number().int().min(0),
5128
+ used: import_zod17.z.number().int().min(0),
5129
+ limit: import_zod17.z.number().int().min(0),
5047
5130
  /** `approaching`: at or above USAGE_WARNING_RATIO of the limit; `reached`: at or above the limit. */
5048
- level: import_zod16.z.enum(["approaching", "reached"])
5131
+ level: import_zod17.z.enum(["approaching", "reached"])
5049
5132
  });
5050
- var Usage = import_zod16.z.object({
5133
+ var Usage = import_zod17.z.object({
5051
5134
  plan: PlanId,
5052
5135
  period_start: Timestamp,
5053
5136
  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)
5137
+ 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() })),
5138
+ warnings: import_zod17.z.array(UsageWarning)
5056
5139
  });
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()
5140
+ var CheckoutRequest = import_zod17.z.object({
5141
+ plan: import_zod17.z.enum(["starter", "growth"]),
5142
+ success_url: import_zod17.z.string().url(),
5143
+ cancel_url: import_zod17.z.string().url()
5061
5144
  });
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() });
5145
+ var CheckoutSession = import_zod17.z.object({ url: import_zod17.z.string().url() });
5146
+ var PortalRequest = import_zod17.z.object({ return_url: import_zod17.z.string().url() });
5147
+ var PortalSession = import_zod17.z.object({ url: import_zod17.z.string().url() });
5065
5148
  var USAGE_WARNING_HEADER = "x-mail-usage-warning";
5066
5149
  function formatUsageWarningHeader(warnings) {
5067
5150
  if (warnings.length === 0) return null;
@@ -5081,7 +5164,7 @@ function parseUsageWarningHeader(value) {
5081
5164
  }
5082
5165
 
5083
5166
  // src/routes.ts
5084
- var import_zod17 = require("zod");
5167
+ var import_zod18 = require("zod");
5085
5168
  var list = (item) => page(item);
5086
5169
  var foundationRoutes = {
5087
5170
  "workspaces.create": {
@@ -5327,7 +5410,7 @@ var templateRoutes = {
5327
5410
  path: "/v1/templates/:id/export",
5328
5411
  params: IdParams,
5329
5412
  query: TemplateExportQuery,
5330
- response: import_zod17.z.string(),
5413
+ response: import_zod18.z.string(),
5331
5414
  responseType: "text",
5332
5415
  status: 200,
5333
5416
  access: "read",
@@ -5508,6 +5591,62 @@ var sendingRoutes = {
5508
5591
  access: "read",
5509
5592
  phase: "S2"
5510
5593
  },
5594
+ // Managed sending domains (docs/plans/2026-10-18-managed-sending-domains.md).
5595
+ "sendingDomains.list": {
5596
+ method: "GET",
5597
+ path: "/v1/sending-domains",
5598
+ query: PageQuery,
5599
+ response: list(SendingDomain),
5600
+ status: 200,
5601
+ access: "read",
5602
+ phase: "S2"
5603
+ },
5604
+ "sendingDomains.create": {
5605
+ method: "POST",
5606
+ path: "/v1/sending-domains",
5607
+ body: SendingDomainCreate,
5608
+ response: SendingDomain,
5609
+ status: 201,
5610
+ access: "admin",
5611
+ phase: "S2"
5612
+ },
5613
+ "sendingDomains.get": {
5614
+ method: "GET",
5615
+ path: "/v1/sending-domains/:id",
5616
+ params: IdParams,
5617
+ response: SendingDomain,
5618
+ status: 200,
5619
+ access: "read",
5620
+ phase: "S2"
5621
+ },
5622
+ "sendingDomains.update": {
5623
+ method: "PATCH",
5624
+ path: "/v1/sending-domains/:id",
5625
+ params: IdParams,
5626
+ body: SendingDomainUpdate,
5627
+ response: SendingDomain,
5628
+ status: 200,
5629
+ access: "admin",
5630
+ phase: "S2"
5631
+ },
5632
+ "sendingDomains.check": {
5633
+ method: "POST",
5634
+ path: "/v1/sending-domains/:id/check",
5635
+ params: IdParams,
5636
+ response: SendingDomain,
5637
+ status: 200,
5638
+ access: "admin",
5639
+ phase: "S2"
5640
+ },
5641
+ "sendingDomains.delete": {
5642
+ method: "DELETE",
5643
+ path: "/v1/sending-domains/:id",
5644
+ params: IdParams,
5645
+ response: Ok,
5646
+ status: 200,
5647
+ access: "admin",
5648
+ phase: "S2"
5649
+ },
5511
5650
  "topics.list": {
5512
5651
  method: "GET",
5513
5652
  path: "/v1/topics",
@@ -5651,7 +5790,7 @@ var sendingRoutes = {
5651
5790
  path: "/v1/mailings/:id/export",
5652
5791
  params: IdParams,
5653
5792
  query: MailingExportQuery,
5654
- response: import_zod17.z.string(),
5793
+ response: import_zod18.z.string(),
5655
5794
  responseType: "text",
5656
5795
  status: 200,
5657
5796
  access: "read",
@@ -5918,7 +6057,7 @@ var platformRoutes = {
5918
6057
  "contactProperties.list": {
5919
6058
  method: "GET",
5920
6059
  path: "/v1/contact-properties",
5921
- response: import_zod17.z.object({ data: import_zod17.z.array(ContactPropertyDefinition) }),
6060
+ response: import_zod18.z.object({ data: import_zod18.z.array(ContactPropertyDefinition) }),
5922
6061
  status: 200,
5923
6062
  access: "read",
5924
6063
  phase: "S4"
@@ -6217,7 +6356,7 @@ var billingRoutes = {
6217
6356
  "billing.plans": {
6218
6357
  method: "GET",
6219
6358
  path: "/v1/billing/plans",
6220
- response: import_zod17.z.object({ data: import_zod17.z.array(CatalogPlan) }),
6359
+ response: import_zod18.z.object({ data: import_zod18.z.array(CatalogPlan), addons: BillingAddons }),
6221
6360
  status: 200,
6222
6361
  access: "read",
6223
6362
  phase: "S5"
@@ -6248,6 +6387,15 @@ var billingRoutes = {
6248
6387
  status: 200,
6249
6388
  access: "admin",
6250
6389
  phase: "S5"
6390
+ },
6391
+ "billing.setExtraSendingDomains": {
6392
+ method: "PUT",
6393
+ path: "/v1/billing/extra-sending-domains",
6394
+ body: ExtraSendingDomainsUpdate,
6395
+ response: Subscription,
6396
+ status: 200,
6397
+ access: "admin",
6398
+ phase: "S5"
6251
6399
  }
6252
6400
  };
6253
6401
  var inviteRoutes = {
@@ -6359,7 +6507,7 @@ var automationRoutes = {
6359
6507
  method: "POST",
6360
6508
  path: "/v1/automations/:id/pause",
6361
6509
  params: IdParams,
6362
- body: import_zod17.z.object({}).strict(),
6510
+ body: import_zod18.z.object({}).strict(),
6363
6511
  response: Automation,
6364
6512
  status: 200,
6365
6513
  access: "write",
@@ -6369,7 +6517,7 @@ var automationRoutes = {
6369
6517
  method: "POST",
6370
6518
  path: "/v1/automations/:id/resume",
6371
6519
  params: IdParams,
6372
- body: import_zod17.z.object({}).strict(),
6520
+ body: import_zod18.z.object({}).strict(),
6373
6521
  response: Automation,
6374
6522
  status: 200,
6375
6523
  access: "write",
@@ -6379,7 +6527,7 @@ var automationRoutes = {
6379
6527
  method: "POST",
6380
6528
  path: "/v1/automations/:id/archive",
6381
6529
  params: IdParams,
6382
- body: import_zod17.z.object({}).strict(),
6530
+ body: import_zod18.z.object({}).strict(),
6383
6531
  response: Automation,
6384
6532
  status: 200,
6385
6533
  access: "write",
@@ -6497,7 +6645,7 @@ var routes = {
6497
6645
  ...automationRoutes
6498
6646
  };
6499
6647
  var TRUSTED_APP_OPERATIONS = {
6500
- booking: ["workspaces.list", "workspace.update", "providers.list", "apiKeys.create", "apiKeys.revoke"]
6648
+ booking: ["workspaces.list", "workspace.update", "providers.list", "sendingDomains.list", "apiKeys.create", "apiKeys.revoke"]
6501
6649
  };
6502
6650
  function trustedAppMayCall(app, id) {
6503
6651
  return TRUSTED_APP_OPERATIONS[app].includes(id);
@@ -6622,6 +6770,7 @@ function matchRoute(method, pathname) {
6622
6770
  AutomationWithFlow,
6623
6771
  BEARER_PREFIX,
6624
6772
  BILLING_NOT_CONFIGURED_REASON,
6773
+ BillingAddons,
6625
6774
  BoundedAutomationFilter,
6626
6775
  BoundedSegmentFilter,
6627
6776
  COMPANY_GRANT_ROLES,
@@ -6678,6 +6827,7 @@ function matchRoute(method, pathname) {
6678
6827
  EventListQuery,
6679
6828
  EventName,
6680
6829
  ExportFormat,
6830
+ ExtraSendingDomainsUpdate,
6681
6831
  FILTER_FIELD_OPERATORS,
6682
6832
  FILTER_OPERATORS,
6683
6833
  FilterCondition,
@@ -6744,6 +6894,7 @@ function matchRoute(method, pathname) {
6744
6894
  MAX_DOCUMENT_BYTES,
6745
6895
  MAX_ENGAGEMENT_DAYS,
6746
6896
  MAX_EXPORT_WARNINGS_HEADER_LENGTH,
6897
+ MAX_EXTRA_SENDING_DOMAINS,
6747
6898
  MAX_FILTER_DEPTH,
6748
6899
  MAX_IMPORTED_REMOTE_IMAGES,
6749
6900
  MAX_IMPORT_BYTES,
@@ -6885,6 +7036,9 @@ function matchRoute(method, pathname) {
6885
7036
  ResolveProblem,
6886
7037
  ResolvedRecipient,
6887
7038
  ResolvedValue,
7039
+ SENDING_DOMAIN_DNS_MODES,
7040
+ SENDING_DOMAIN_REGION,
7041
+ SENDING_DOMAIN_STATUSES,
6888
7042
  SERVICE_FILLED_MERGE_FIELDS,
6889
7043
  SIGNUP_FORM_FIELDS,
6890
7044
  SKIP_REASONS,
@@ -6900,6 +7054,13 @@ function matchRoute(method, pathname) {
6900
7054
  SegmentFilter,
6901
7055
  SegmentPreview,
6902
7056
  SegmentPreviewRequest,
7057
+ SendingDomain,
7058
+ SendingDomainCreate,
7059
+ SendingDomainDnsMode,
7060
+ SendingDomainName,
7061
+ SendingDomainRecord,
7062
+ SendingDomainStatus,
7063
+ SendingDomainUpdate,
6903
7064
  SignupForm,
6904
7065
  SignupFormCreate,
6905
7066
  SignupFormEmbed,