@marlinjai/mail-contract 0.20.0 → 0.21.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
@@ -142,10 +142,24 @@ __export(index_exports, {
142
142
  DEFAULT_INVITE_TTL_DAYS: () => DEFAULT_INVITE_TTL_DAYS,
143
143
  DEFAULT_PAGE_LIMIT: () => DEFAULT_PAGE_LIMIT,
144
144
  DOCUMENT_SCHEMA_VERSIONS: () => DOCUMENT_SCHEMA_VERSIONS,
145
+ DOMAIN_BUYING_BLOCKS: () => DOMAIN_BUYING_BLOCKS,
146
+ DOMAIN_BUYING_NOT_CONFIGURED_REASON: () => DOMAIN_BUYING_NOT_CONFIGURED_REASON,
147
+ DOMAIN_ORDER_STATES: () => DOMAIN_ORDER_STATES,
148
+ DOMAIN_PRICE_CHANGED_REASON: () => DOMAIN_PRICE_CHANGED_REASON,
149
+ DOMAIN_UNAVAILABLE_REASONS: () => DOMAIN_UNAVAILABLE_REASONS,
145
150
  DateOnly: () => DateOnly,
146
151
  DatePassedAnswer: () => DatePassedAnswer,
147
152
  DelayStep: () => DelayStep,
148
153
  DocumentSchemaVersion: () => DocumentSchemaVersion,
154
+ DomainBuyingBlock: () => DomainBuyingBlock,
155
+ DomainOffer: () => DomainOffer,
156
+ DomainOrder: () => DomainOrder,
157
+ DomainOrderCreate: () => DomainOrderCreate,
158
+ DomainOrderState: () => DomainOrderState,
159
+ DomainRegistrant: () => DomainRegistrant,
160
+ DomainSearchQuery: () => DomainSearchQuery,
161
+ DomainSearchResult: () => DomainSearchResult,
162
+ DomainUnavailableReason: () => DomainUnavailableReason,
149
163
  EDITABLE_MAILING_STATUSES: () => EDITABLE_MAILING_STATUSES,
150
164
  ERROR_CODES: () => ERROR_CODES,
151
165
  ERROR_STATUS: () => ERROR_STATUS,
@@ -229,6 +243,7 @@ __export(index_exports, {
229
243
  MAX_ASSET_BYTES: () => MAX_ASSET_BYTES,
230
244
  MAX_DELAY_SECONDS: () => MAX_DELAY_SECONDS,
231
245
  MAX_DOCUMENT_BYTES: () => MAX_DOCUMENT_BYTES,
246
+ MAX_DOMAIN_ORDERS_PER_DAY: () => MAX_DOMAIN_ORDERS_PER_DAY,
232
247
  MAX_ENGAGEMENT_DAYS: () => MAX_ENGAGEMENT_DAYS,
233
248
  MAX_EXPORT_WARNINGS_HEADER_LENGTH: () => MAX_EXPORT_WARNINGS_HEADER_LENGTH,
234
249
  MAX_EXTRA_SENDING_DOMAINS: () => MAX_EXTRA_SENDING_DOMAINS,
@@ -539,6 +554,7 @@ __export(index_exports, {
539
554
  demoteForSave: () => demoteForSave,
540
555
  demotedBySave: () => demotedBySave,
541
556
  describeMissingTexts: () => describeMissingTexts,
557
+ domainBuyingRoutes: () => domainBuyingRoutes,
542
558
  draftDocument: () => draftDocument,
543
559
  draftInsertionProblems: () => draftInsertionProblems,
544
560
  draftsDirty: () => draftsDirty,
@@ -789,8 +805,11 @@ var RETRYABLE_ERRORS = [
789
805
  "service_unavailable"
790
806
  ];
791
807
  var BILLING_NOT_CONFIGURED_REASON = "billing_not_configured";
808
+ var DOMAIN_BUYING_NOT_CONFIGURED_REASON = "domain_buying_not_configured";
809
+ var DOMAIN_PRICE_CHANGED_REASON = "price_changed";
810
+ var LASTING_REASONS = [BILLING_NOT_CONFIGURED_REASON, DOMAIN_BUYING_NOT_CONFIGURED_REASON];
792
811
  function isRetryableError(code, details) {
793
- return RETRYABLE_ERRORS.includes(code) && details?.reason !== BILLING_NOT_CONFIGURED_REASON;
812
+ return RETRYABLE_ERRORS.includes(code) && !LASTING_REASONS.includes(details?.reason);
794
813
  }
795
814
 
796
815
  // src/headers.ts
@@ -3443,7 +3462,7 @@ var EventListQuery = PageQuery.extend({
3443
3462
 
3444
3463
  // src/legal.ts
3445
3464
  var import_zod11 = require("zod");
3446
- var LEGAL_TERMS_VERSION = "2026-10-23";
3465
+ var LEGAL_TERMS_VERSION = "2026-10-28";
3447
3466
  var AcceptTerms = import_zod11.z.literal(LEGAL_TERMS_VERSION, {
3448
3467
  errorMap: () => ({ message: `must be "${LEGAL_TERMS_VERSION}": accept the current terms of service and processing agreement` })
3449
3468
  });
@@ -3696,6 +3715,14 @@ var AUDIT_ACTIONS = [
3696
3715
  "billing.exemption_changed",
3697
3716
  "billing.extra_sending_domains_changed",
3698
3717
  "billing.terms_accepted",
3718
+ // Domains bought inside Lumitra Mail
3719
+ "domain_order.created",
3720
+ "domain_order.paid",
3721
+ "domain_order.registered",
3722
+ "domain_order.ready",
3723
+ "domain_order.needs_attention",
3724
+ "domain_order.refunded",
3725
+ "domain_order.cancelled",
3699
3726
  // A1: automations
3700
3727
  "automation.created",
3701
3728
  "automation.updated",
@@ -3710,7 +3737,7 @@ var AUDIT_ACTIONS = [
3710
3737
  "event.recorded"
3711
3738
  ];
3712
3739
  var AuditAction = import_zod12.z.enum(AUDIT_ACTIONS);
3713
- var TRUSTED_APPS = ["booking"];
3740
+ var TRUSTED_APPS = ["booking", "sites"];
3714
3741
  var TrustedApp = import_zod12.z.enum(TRUSTED_APPS);
3715
3742
  var AuditActor = import_zod12.z.discriminatedUnion("type", [
3716
3743
  import_zod12.z.object({
@@ -4619,36 +4646,119 @@ function senderOnDomain(input, ctx) {
4619
4646
  var SendingDomainCreate = import_zod15.z.object({ domain: SendingDomainName, ...SenderFields }).superRefine(senderOnDomain);
4620
4647
  var SendingDomainUpdate = import_zod15.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");
4621
4648
 
4622
- // src/contacts.ts
4649
+ // src/domains.ts
4623
4650
  var import_zod16 = require("zod");
4624
- var Topic = import_zod16.z.object({
4651
+ var DomainSearchQuery = import_zod16.z.object({ q: import_zod16.z.string().trim().min(1).max(63) });
4652
+ var DOMAIN_UNAVAILABLE_REASONS = ["taken", "extension_not_supported", "premium", "not_registrable"];
4653
+ var DomainUnavailableReason = import_zod16.z.enum(DOMAIN_UNAVAILABLE_REASONS);
4654
+ var DomainOffer = import_zod16.z.object({
4655
+ domain: import_zod16.z.string(),
4656
+ available: import_zod16.z.boolean(),
4657
+ reason: DomainUnavailableReason.nullable(),
4658
+ price_cents: import_zod16.z.number().int().min(0).nullable(),
4659
+ renewal_price_cents: import_zod16.z.number().int().min(0).nullable(),
4660
+ currency: import_zod16.z.literal("EUR")
4661
+ });
4662
+ var DOMAIN_BUYING_BLOCKS = ["not_configured", "paid_plan_required", "no_company"];
4663
+ var DomainBuyingBlock = import_zod16.z.enum(DOMAIN_BUYING_BLOCKS);
4664
+ var DomainSearchResult = import_zod16.z.object({
4665
+ data: import_zod16.z.array(DomainOffer),
4666
+ blocked: DomainBuyingBlock.nullable()
4667
+ });
4668
+ var DomainRegistrant = import_zod16.z.object({
4669
+ name: import_zod16.z.string().trim().min(3).max(120).regex(/\S+\s+\S+/, "must be a first and a last name"),
4670
+ organization: import_zod16.z.string().trim().min(1).max(120).nullable().optional(),
4671
+ email: Email,
4672
+ phone: import_zod16.z.string().trim().regex(/^\+\d{1,3}\.\d{4,14}$/, "must be +<country code>.<number>, such as +49.3012345678"),
4673
+ street: import_zod16.z.string().trim().min(3).max(200),
4674
+ city: import_zod16.z.string().trim().min(1).max(100),
4675
+ state: import_zod16.z.string().trim().min(1).max(100),
4676
+ postal_code: import_zod16.z.string().trim().min(2).max(20),
4677
+ country_code: import_zod16.z.string().trim().toUpperCase().regex(/^[A-Z]{2}$/, "must be a two-letter country code such as DE")
4678
+ });
4679
+ var MAX_DOMAIN_ORDERS_PER_DAY = 2;
4680
+ var DomainOrderCreate = import_zod16.z.object({
4681
+ domain: SendingDomainName,
4682
+ price_cents: import_zod16.z.number().int().min(0),
4683
+ registrant: DomainRegistrant,
4684
+ from_name: import_zod16.z.string().trim().min(1).max(120),
4685
+ from_local_part: import_zod16.z.string().trim().toLowerCase().regex(/^[a-z0-9](?:[a-z0-9._+-]{0,62}[a-z0-9])?$/, "must be the part before the @, such as hello"),
4686
+ /**
4687
+ * Where Stripe returns to after paying, and after leaving the payment. The
4688
+ * service adds `domain_order=<order id>` to both, so the page coming back
4689
+ * knows which order to show (and read: `domainOrders.get` confirms a
4690
+ * payment at once, before Stripe's webhook arrives).
4691
+ */
4692
+ success_url: import_zod16.z.string().url(),
4693
+ cancel_url: import_zod16.z.string().url(),
4694
+ /** The buyer accepted the terms of service (which cover bought domains) of this version. */
4695
+ accept_terms: AcceptTerms
4696
+ });
4697
+ var DOMAIN_ORDER_STATES = [
4698
+ "awaiting_payment",
4699
+ "paid",
4700
+ "registering",
4701
+ "setting_up",
4702
+ "ready",
4703
+ "needs_attention",
4704
+ "refunded",
4705
+ "cancelled"
4706
+ ];
4707
+ var DomainOrderState = import_zod16.z.enum(DOMAIN_ORDER_STATES);
4708
+ var DomainOrder = import_zod16.z.object({
4709
+ id: Id,
4710
+ domain: import_zod16.z.string(),
4711
+ state: DomainOrderState,
4712
+ price_cents: import_zod16.z.number().int().min(0),
4713
+ renewal_price_cents: import_zod16.z.number().int().min(0),
4714
+ currency: import_zod16.z.literal("EUR"),
4715
+ /** Stripe's payment page while `awaiting_payment`; null otherwise. */
4716
+ checkout_url: import_zod16.z.string().url().nullable(),
4717
+ registrant_name: import_zod16.z.string(),
4718
+ from_name: import_zod16.z.string(),
4719
+ from_email: Email,
4720
+ /** The sending domain once `ready`. */
4721
+ sending_domain_id: Id.nullable(),
4722
+ /** When the paid year ends, once registered. */
4723
+ expires_at: Timestamp.nullable(),
4724
+ /** What went wrong, for `needs_attention` and `refunded`; null otherwise. */
4725
+ last_error: import_zod16.z.string().nullable(),
4726
+ paid_at: Timestamp.nullable(),
4727
+ registered_at: Timestamp.nullable(),
4728
+ created_at: Timestamp,
4729
+ updated_at: Timestamp
4730
+ });
4731
+
4732
+ // src/contacts.ts
4733
+ var import_zod17 = require("zod");
4734
+ var Topic = import_zod17.z.object({
4625
4735
  id: Id,
4626
4736
  slug: Slug,
4627
- name: import_zod16.z.string().min(1).max(120),
4737
+ name: import_zod17.z.string().min(1).max(120),
4628
4738
  /** Shown on the hosted preference page. */
4629
- description: import_zod16.z.string().max(1e3).nullable(),
4739
+ description: import_zod17.z.string().max(1e3).nullable(),
4630
4740
  /** Translations of `name` and `description` per locale, for the hosted page. */
4631
- translations: import_zod16.z.record(
4632
- import_zod16.z.object({ name: import_zod16.z.string().min(1).max(120), description: import_zod16.z.string().max(1e3).nullable() })
4741
+ translations: import_zod17.z.record(
4742
+ import_zod17.z.object({ name: import_zod17.z.string().min(1).max(120), description: import_zod17.z.string().max(1e3).nullable() })
4633
4743
  ),
4634
4744
  created_at: Timestamp,
4635
4745
  updated_at: Timestamp
4636
4746
  });
4637
- var TopicCreate = import_zod16.z.object({
4747
+ var TopicCreate = import_zod17.z.object({
4638
4748
  slug: Slug,
4639
- name: import_zod16.z.string().min(1).max(120),
4640
- description: import_zod16.z.string().max(1e3).optional(),
4749
+ name: import_zod17.z.string().min(1).max(120),
4750
+ description: import_zod17.z.string().max(1e3).optional(),
4641
4751
  translations: Topic.shape.translations.optional()
4642
4752
  });
4643
4753
  var TopicUpdate = TopicCreate.omit({ slug: true }).partial().refine((v) => Object.keys(v).length > 0, "at least one field");
4644
- var Contact = import_zod16.z.object({
4754
+ var Contact = import_zod17.z.object({
4645
4755
  id: Id,
4646
- external_id: import_zod16.z.string().min(1).max(255).nullable(),
4756
+ external_id: import_zod17.z.string().min(1).max(255).nullable(),
4647
4757
  /** Stored lowercased, unique per workspace. */
4648
4758
  email: Email,
4649
- first_name: import_zod16.z.string().max(200).nullable(),
4650
- last_name: import_zod16.z.string().max(200).nullable(),
4651
- locale: import_zod16.z.string().min(2).max(35).nullable(),
4759
+ first_name: import_zod17.z.string().max(200).nullable(),
4760
+ last_name: import_zod17.z.string().max(200).nullable(),
4761
+ locale: import_zod17.z.string().min(2).max(35).nullable(),
4652
4762
  /**
4653
4763
  * The person's own time zone, an IANA name such as `Europe/Berlin` (A1).
4654
4764
  * Every wall clock an automation waits for is read in it, falling back to the
@@ -4656,65 +4766,65 @@ var Contact = import_zod16.z.object({
4656
4766
  */
4657
4767
  timezone: TimezoneName.nullable(),
4658
4768
  properties: Properties,
4659
- topics: import_zod16.z.array(Slug),
4769
+ topics: import_zod17.z.array(Slug),
4660
4770
  /** The slugs of the contact's tags (S4). */
4661
- tags: import_zod16.z.array(Slug),
4771
+ tags: import_zod17.z.array(Slug),
4662
4772
  created_at: Timestamp,
4663
4773
  updated_at: Timestamp
4664
4774
  });
4665
- var ContactUpsert = import_zod16.z.object({
4666
- external_id: import_zod16.z.string().min(1).max(255).optional(),
4775
+ var ContactUpsert = import_zod17.z.object({
4776
+ external_id: import_zod17.z.string().min(1).max(255).optional(),
4667
4777
  email: Email.optional(),
4668
- first_name: import_zod16.z.string().max(200).nullable().optional(),
4669
- last_name: import_zod16.z.string().max(200).nullable().optional(),
4670
- locale: import_zod16.z.string().min(2).max(35).nullable().optional(),
4778
+ first_name: import_zod17.z.string().max(200).nullable().optional(),
4779
+ last_name: import_zod17.z.string().max(200).nullable().optional(),
4780
+ locale: import_zod17.z.string().min(2).max(35).nullable().optional(),
4671
4781
  timezone: TimezoneName.nullable().optional(),
4672
4782
  properties: Properties.optional(),
4673
- topics: import_zod16.z.array(Slug).max(100).optional()
4783
+ topics: import_zod17.z.array(Slug).max(100).optional()
4674
4784
  }).refine((v) => v.external_id !== void 0 || v.email !== void 0, {
4675
4785
  message: "external_id or email is required",
4676
4786
  path: ["email"]
4677
4787
  });
4678
- var ContactUpsertResult = import_zod16.z.object({
4788
+ var ContactUpsertResult = import_zod17.z.object({
4679
4789
  contact: Contact,
4680
- created: import_zod16.z.boolean()
4790
+ created: import_zod17.z.boolean()
4681
4791
  });
4682
4792
  var ContactListQuery = PageQuery.extend({
4683
- email: import_zod16.z.string().min(1).max(254).optional(),
4684
- external_id: import_zod16.z.string().min(1).max(255).optional(),
4793
+ email: import_zod17.z.string().min(1).max(254).optional(),
4794
+ external_id: import_zod17.z.string().min(1).max(255).optional(),
4685
4795
  topic: Slug.optional()
4686
4796
  });
4687
- var ContactErased = import_zod16.z.object({
4688
- ok: import_zod16.z.literal(true),
4689
- erased_messages: import_zod16.z.number().int().min(0),
4690
- erased_recipients: import_zod16.z.number().int().min(0),
4691
- suppressions_kept: import_zod16.z.number().int().min(0)
4797
+ var ContactErased = import_zod17.z.object({
4798
+ ok: import_zod17.z.literal(true),
4799
+ erased_messages: import_zod17.z.number().int().min(0),
4800
+ erased_recipients: import_zod17.z.number().int().min(0),
4801
+ suppressions_kept: import_zod17.z.number().int().min(0)
4692
4802
  });
4693
4803
  var SUPPRESSION_REASONS = ["unsubscribed", "bounced", "complained", "manual"];
4694
- var SuppressionReason = import_zod16.z.enum(SUPPRESSION_REASONS);
4695
- var Suppression = import_zod16.z.object({
4804
+ var SuppressionReason = import_zod17.z.enum(SUPPRESSION_REASONS);
4805
+ var Suppression = import_zod17.z.object({
4696
4806
  id: Id,
4697
4807
  email: Email,
4698
4808
  reason: SuppressionReason,
4699
4809
  topic: Slug.nullable(),
4700
4810
  source_message_id: Id.nullable(),
4701
- note: import_zod16.z.string().max(1e3).nullable(),
4811
+ note: import_zod17.z.string().max(1e3).nullable(),
4702
4812
  created_at: Timestamp
4703
4813
  });
4704
- var SuppressionCreate = import_zod16.z.object({
4814
+ var SuppressionCreate = import_zod17.z.object({
4705
4815
  email: Email,
4706
- reason: import_zod16.z.enum(["manual", "unsubscribed"]),
4816
+ reason: import_zod17.z.enum(["manual", "unsubscribed"]),
4707
4817
  topic: Slug.nullable().optional(),
4708
- note: import_zod16.z.string().max(1e3).optional()
4818
+ note: import_zod17.z.string().max(1e3).optional()
4709
4819
  });
4710
4820
  var SuppressionListQuery = PageQuery.extend({
4711
- email: import_zod16.z.string().min(1).max(254).optional(),
4821
+ email: import_zod17.z.string().min(1).max(254).optional(),
4712
4822
  reason: SuppressionReason.optional(),
4713
4823
  topic: Slug.optional()
4714
4824
  });
4715
4825
 
4716
4826
  // src/webhooks.ts
4717
- var import_zod17 = require("zod");
4827
+ var import_zod18 = require("zod");
4718
4828
  var WEBHOOK_EVENT_TYPES = [
4719
4829
  "message.sent",
4720
4830
  "message.failed",
@@ -4758,23 +4868,23 @@ var WEBHOOK_EVENT_TYPES = [
4758
4868
  "template.updated",
4759
4869
  "template.deleted"
4760
4870
  ];
4761
- var WebhookEventType = import_zod17.z.enum(WEBHOOK_EVENT_TYPES);
4762
- var MessageEventBase = import_zod17.z.object({
4871
+ var WebhookEventType = import_zod18.z.enum(WEBHOOK_EVENT_TYPES);
4872
+ var MessageEventBase = import_zod18.z.object({
4763
4873
  message_id: Id,
4764
4874
  mailing_id: Id.nullable(),
4765
4875
  mailing_metadata: MailingMetadata.nullable(),
4766
4876
  recipient_id: Id.nullable(),
4767
4877
  contact_id: Id.nullable(),
4768
- external_id: import_zod17.z.string().nullable(),
4878
+ external_id: import_zod18.z.string().nullable(),
4769
4879
  email: Email,
4770
- subject: import_zod17.z.string(),
4880
+ subject: import_zod18.z.string(),
4771
4881
  topic: Slug.nullable(),
4772
- provider_message_id: import_zod17.z.string().nullable(),
4773
- is_test: import_zod17.z.boolean()
4882
+ provider_message_id: import_zod18.z.string().nullable(),
4883
+ is_test: import_zod18.z.boolean()
4774
4884
  });
4775
4885
  var MessageSentData = MessageEventBase.extend({
4776
4886
  /** The final HTML as sent, so the client can archive it beside its own records. */
4777
- html: import_zod17.z.string(),
4887
+ html: import_zod18.z.string(),
4778
4888
  sent_at: Timestamp,
4779
4889
  /**
4780
4890
  * The choice each insertion made (see `Message.insertions`); absent or null
@@ -4785,20 +4895,20 @@ var MessageSentData = MessageEventBase.extend({
4785
4895
  insertions: InsertionChoices.nullish()
4786
4896
  });
4787
4897
  var MessageFailedData = MessageEventBase.extend({
4788
- error: import_zod17.z.string(),
4898
+ error: import_zod18.z.string(),
4789
4899
  /** False when the provider rejected permanently; the recipient will not be retried. */
4790
- retryable: import_zod17.z.boolean(),
4900
+ retryable: import_zod18.z.boolean(),
4791
4901
  failed_at: Timestamp
4792
4902
  });
4793
4903
  var UNSUBSCRIBE_SOURCES = ["hosted_page", "one_click", "api", "dashboard", "signup_form"];
4794
- var ContactUnsubscribedData = import_zod17.z.object({
4904
+ var ContactUnsubscribedData = import_zod18.z.object({
4795
4905
  contact_id: Id.nullable(),
4796
- external_id: import_zod17.z.string().nullable(),
4906
+ external_id: import_zod18.z.string().nullable(),
4797
4907
  email: Email,
4798
4908
  /** The topic unsubscribed from; null means every topic. */
4799
4909
  topic: Slug.nullable(),
4800
4910
  mailing_id: Id.nullable(),
4801
- source: import_zod17.z.enum(UNSUBSCRIBE_SOURCES),
4911
+ source: import_zod18.z.enum(UNSUBSCRIBE_SOURCES),
4802
4912
  unsubscribed_at: Timestamp
4803
4913
  });
4804
4914
  var ContactResubscribedData = ContactUnsubscribedData.omit({ unsubscribed_at: true }).extend({
@@ -4807,142 +4917,142 @@ var ContactResubscribedData = ContactUnsubscribedData.omit({ unsubscribed_at: tr
4807
4917
  * breaker undid a `bounced` block it judged false (a `contact.bounced` for the
4808
4918
  * same address and mailing went out before); `topic` is null.
4809
4919
  */
4810
- source: import_zod17.z.enum([...UNSUBSCRIBE_SOURCES, "bounce_reverted"]),
4920
+ source: import_zod18.z.enum([...UNSUBSCRIBE_SOURCES, "bounce_reverted"]),
4811
4921
  resubscribed_at: Timestamp
4812
4922
  });
4813
- var ContactBouncedData = import_zod17.z.object({
4923
+ var ContactBouncedData = import_zod18.z.object({
4814
4924
  contact_id: Id.nullable(),
4815
- external_id: import_zod17.z.string().nullable(),
4925
+ external_id: import_zod18.z.string().nullable(),
4816
4926
  email: Email,
4817
4927
  /** `bounced` for a hard bounce, `complained` for a spam complaint. */
4818
- reason: import_zod17.z.enum(["bounced", "complained"]),
4928
+ reason: import_zod18.z.enum(["bounced", "complained"]),
4819
4929
  message_id: Id.nullable(),
4820
- diagnostic: import_zod17.z.string().nullable(),
4930
+ diagnostic: import_zod18.z.string().nullable(),
4821
4931
  bounced_at: Timestamp
4822
4932
  });
4823
- var MailingFinishedData = import_zod17.z.object({
4933
+ var MailingFinishedData = import_zod18.z.object({
4824
4934
  mailing_id: Id,
4825
4935
  mailing_metadata: MailingMetadata,
4826
- status: import_zod17.z.enum(["sent", "partially_failed", "cancelled"]),
4936
+ status: import_zod18.z.enum(["sent", "partially_failed", "cancelled"]),
4827
4937
  counts: MailingCounts,
4828
4938
  finished_at: Timestamp
4829
4939
  });
4830
- var ContactSubscribedData = import_zod17.z.object({
4940
+ var ContactSubscribedData = import_zod18.z.object({
4831
4941
  contact_id: Id,
4832
- external_id: import_zod17.z.string().nullable(),
4942
+ external_id: import_zod18.z.string().nullable(),
4833
4943
  email: Email,
4834
- topics: import_zod17.z.array(Slug),
4835
- source: import_zod17.z.enum(["signup_form", "api", "dashboard", "automation"]),
4944
+ topics: import_zod18.z.array(Slug),
4945
+ source: import_zod18.z.enum(["signup_form", "api", "dashboard", "automation"]),
4836
4946
  signup_form_id: Id.nullable(),
4837
- signup_form_version: import_zod17.z.number().int().min(1).nullable(),
4947
+ signup_form_version: import_zod18.z.number().int().min(1).nullable(),
4838
4948
  subscribed_at: Timestamp
4839
4949
  });
4840
- var ImportFinishedData = import_zod17.z.object({
4950
+ var ImportFinishedData = import_zod18.z.object({
4841
4951
  import_id: Id,
4842
- status: import_zod17.z.enum(["completed", "cancelled", "failed"]),
4952
+ status: import_zod18.z.enum(["completed", "cancelled", "failed"]),
4843
4953
  result: ImportReport.nullable(),
4844
- error: import_zod17.z.string().nullable(),
4954
+ error: import_zod18.z.string().nullable(),
4845
4955
  finished_at: Timestamp
4846
4956
  });
4847
- var MailingScheduledData = import_zod17.z.object({
4957
+ var MailingScheduledData = import_zod18.z.object({
4848
4958
  mailing_id: Id,
4849
4959
  mailing_metadata: MailingMetadata,
4850
4960
  scheduled_at: Timestamp.nullable()
4851
4961
  });
4852
- var MailingStartedData = import_zod17.z.object({
4962
+ var MailingStartedData = import_zod18.z.object({
4853
4963
  mailing_id: Id,
4854
4964
  mailing_metadata: MailingMetadata,
4855
- trigger: import_zod17.z.enum(["send", "schedule"]),
4856
- recipients: import_zod17.z.number().int().min(0),
4965
+ trigger: import_zod18.z.enum(["send", "schedule"]),
4966
+ recipients: import_zod18.z.number().int().min(0),
4857
4967
  started_at: Timestamp
4858
4968
  });
4859
- var MailingScheduleFailedData = import_zod17.z.object({
4969
+ var MailingScheduleFailedData = import_zod18.z.object({
4860
4970
  mailing_id: Id,
4861
4971
  mailing_metadata: MailingMetadata,
4862
- code: import_zod17.z.string(),
4863
- message: import_zod17.z.string(),
4972
+ code: import_zod18.z.string(),
4973
+ message: import_zod18.z.string(),
4864
4974
  failed_at: Timestamp
4865
4975
  });
4866
- var MailingAbWinnerSelectedData = import_zod17.z.object({
4976
+ var MailingAbWinnerSelectedData = import_zod18.z.object({
4867
4977
  mailing_id: Id,
4868
4978
  mailing_metadata: MailingMetadata,
4869
- winner: import_zod17.z.string(),
4870
- decided_by: import_zod17.z.enum(["metric", "manual"]),
4871
- variants: import_zod17.z.array(VariantAnalytics),
4979
+ winner: import_zod18.z.string(),
4980
+ decided_by: import_zod18.z.enum(["metric", "manual"]),
4981
+ variants: import_zod18.z.array(VariantAnalytics),
4872
4982
  decided_at: Timestamp
4873
4983
  });
4874
- var ContactTaggedData = import_zod17.z.object({
4984
+ var ContactTaggedData = import_zod18.z.object({
4875
4985
  contact_id: Id,
4876
- external_id: import_zod17.z.string().nullable(),
4986
+ external_id: import_zod18.z.string().nullable(),
4877
4987
  email: Email,
4878
4988
  /** Only the tags the contact did not already have. */
4879
- tags: import_zod17.z.array(Slug).min(1),
4880
- source: import_zod17.z.enum(["api", "dashboard", "signup_form", "import", "automation"]),
4989
+ tags: import_zod18.z.array(Slug).min(1),
4990
+ source: import_zod18.z.enum(["api", "dashboard", "signup_form", "import", "automation"]),
4881
4991
  tagged_at: Timestamp
4882
4992
  });
4883
- var ContactUpdatedData = import_zod17.z.object({
4993
+ var ContactUpdatedData = import_zod18.z.object({
4884
4994
  contact_id: Id,
4885
- external_id: import_zod17.z.string().nullable(),
4995
+ external_id: import_zod18.z.string().nullable(),
4886
4996
  email: Email,
4887
- changed: import_zod17.z.array(import_zod17.z.string()).min(1),
4997
+ changed: import_zod18.z.array(import_zod18.z.string()).min(1),
4888
4998
  properties: Properties,
4889
- source: import_zod17.z.enum(["api", "dashboard", "signup_form", "import", "automation"]),
4999
+ source: import_zod18.z.enum(["api", "dashboard", "signup_form", "import", "automation"]),
4890
5000
  updated_at: Timestamp
4891
5001
  });
4892
- var AutomationRunEventBase = import_zod17.z.object({
5002
+ var AutomationRunEventBase = import_zod18.z.object({
4893
5003
  automation_id: Id,
4894
- automation_name: import_zod17.z.string(),
5004
+ automation_name: import_zod18.z.string(),
4895
5005
  run_id: Id,
4896
- version: import_zod17.z.number().int().min(1),
5006
+ version: import_zod18.z.number().int().min(1),
4897
5007
  contact_id: Id,
4898
- external_id: import_zod17.z.string().nullable(),
5008
+ external_id: import_zod18.z.string().nullable(),
4899
5009
  email: Email
4900
5010
  });
4901
5011
  var AutomationRunStartedData = AutomationRunEventBase.extend({
4902
5012
  /** What let them in: a trigger kind, or `manual` for an explicit enrolment. */
4903
- trigger_kind: import_zod17.z.string(),
5013
+ trigger_kind: import_zod18.z.string(),
4904
5014
  entered_at: Timestamp
4905
5015
  });
4906
5016
  var AutomationRunCompletedData = AutomationRunEventBase.extend({
4907
- last_step_id: import_zod17.z.string().nullable(),
5017
+ last_step_id: import_zod18.z.string().nullable(),
4908
5018
  completed_at: Timestamp
4909
5019
  });
4910
5020
  var AutomationRunExitedData = AutomationRunEventBase.extend({
4911
5021
  reason: AutomationEndReason,
4912
- step_id: import_zod17.z.string().nullable(),
5022
+ step_id: import_zod18.z.string().nullable(),
4913
5023
  exited_at: Timestamp
4914
5024
  });
4915
5025
  var AutomationRunFailedData = AutomationRunEventBase.extend({
4916
- reason: import_zod17.z.string(),
4917
- step_id: import_zod17.z.string().nullable(),
5026
+ reason: import_zod18.z.string(),
5027
+ step_id: import_zod18.z.string().nullable(),
4918
5028
  failed_at: Timestamp
4919
5029
  });
4920
5030
  var AutomationWebhookData = AutomationRunEventBase.extend({
4921
- step_id: import_zod17.z.string(),
5031
+ step_id: import_zod18.z.string(),
4922
5032
  /** The step's own label, when it was given one, so a receiver can branch on a name. */
4923
- step_label: import_zod17.z.string().nullable(),
5033
+ step_label: import_zod18.z.string().nullable(),
4924
5034
  /** Whatever the step carries, verbatim. Null when it carries nothing. */
4925
5035
  payload: JsonValue.nullable(),
4926
5036
  fired_at: Timestamp
4927
5037
  });
4928
- var TemplateEventBase = import_zod17.z.object({
5038
+ var TemplateEventBase = import_zod18.z.object({
4929
5039
  template_id: Id,
4930
- name: import_zod17.z.string().min(1).max(200),
4931
- version: import_zod17.z.number().int().min(1),
4932
- source: import_zod17.z.enum(["api", "dashboard", "mjml_import"])
5040
+ name: import_zod18.z.string().min(1).max(200),
5041
+ version: import_zod18.z.number().int().min(1),
5042
+ source: import_zod18.z.enum(["api", "dashboard", "mjml_import"])
4933
5043
  });
4934
5044
  var TemplateCreatedData = TemplateEventBase.extend({ created_at: Timestamp });
4935
- var TemplateUpdatedData = TemplateEventBase.extend({ archived: import_zod17.z.boolean(), updated_at: Timestamp });
5045
+ var TemplateUpdatedData = TemplateEventBase.extend({ archived: import_zod18.z.boolean(), updated_at: Timestamp });
4936
5046
  var TemplateDeletedData = TemplateEventBase.extend({ deleted_at: Timestamp });
4937
- var envelope = (type, data) => import_zod17.z.object({
5047
+ var envelope = (type, data) => import_zod18.z.object({
4938
5048
  /** Unique per event: a receiver deduplicates on it (deliveries may repeat). */
4939
5049
  id: Id,
4940
- type: import_zod17.z.literal(type),
5050
+ type: import_zod18.z.literal(type),
4941
5051
  created_at: Timestamp,
4942
5052
  workspace_id: Id,
4943
5053
  data
4944
5054
  });
4945
- var WebhookEvent = import_zod17.z.discriminatedUnion("type", [
5055
+ var WebhookEvent = import_zod18.z.discriminatedUnion("type", [
4946
5056
  envelope("message.sent", MessageSentData),
4947
5057
  envelope("message.failed", MessageFailedData),
4948
5058
  envelope("contact.unsubscribed", ContactUnsubscribedData),
@@ -4966,16 +5076,16 @@ var WebhookEvent = import_zod17.z.discriminatedUnion("type", [
4966
5076
  envelope("template.updated", TemplateUpdatedData),
4967
5077
  envelope("template.deleted", TemplateDeletedData)
4968
5078
  ]);
4969
- var WebhookEndpoint = import_zod17.z.object({
5079
+ var WebhookEndpoint = import_zod18.z.object({
4970
5080
  id: Id,
4971
- url: import_zod17.z.string().url(),
4972
- description: import_zod17.z.string().max(500).nullable(),
4973
- events: import_zod17.z.array(WebhookEventType).min(1),
4974
- enabled: import_zod17.z.boolean(),
5081
+ url: import_zod18.z.string().url(),
5082
+ description: import_zod18.z.string().max(500).nullable(),
5083
+ events: import_zod18.z.array(WebhookEventType).min(1),
5084
+ enabled: import_zod18.z.boolean(),
4975
5085
  created_at: Timestamp,
4976
5086
  updated_at: Timestamp
4977
5087
  });
4978
- var WebhookUrl = import_zod17.z.string().url().refine((u) => {
5088
+ var WebhookUrl = import_zod18.z.string().url().refine((u) => {
4979
5089
  try {
4980
5090
  const url = new URL(u);
4981
5091
  if (url.protocol === "https:") return true;
@@ -4984,35 +5094,35 @@ var WebhookUrl = import_zod17.z.string().url().refine((u) => {
4984
5094
  return false;
4985
5095
  }
4986
5096
  }, "must be https (http only for localhost)");
4987
- var WebhookEndpointCreate = import_zod17.z.object({
5097
+ var WebhookEndpointCreate = import_zod18.z.object({
4988
5098
  url: WebhookUrl,
4989
- description: import_zod17.z.string().max(500).optional(),
4990
- events: import_zod17.z.array(WebhookEventType).min(1),
4991
- enabled: import_zod17.z.boolean().optional()
5099
+ description: import_zod18.z.string().max(500).optional(),
5100
+ events: import_zod18.z.array(WebhookEventType).min(1),
5101
+ enabled: import_zod18.z.boolean().optional()
4992
5102
  });
4993
- var WebhookEndpointUpdate = import_zod17.z.object({
5103
+ var WebhookEndpointUpdate = import_zod18.z.object({
4994
5104
  url: WebhookUrl,
4995
- description: import_zod17.z.string().max(500).nullable(),
4996
- events: import_zod17.z.array(WebhookEventType).min(1),
4997
- enabled: import_zod17.z.boolean()
5105
+ description: import_zod18.z.string().max(500).nullable(),
5106
+ events: import_zod18.z.array(WebhookEventType).min(1),
5107
+ enabled: import_zod18.z.boolean()
4998
5108
  }).partial().refine((v) => Object.keys(v).length > 0, "at least one field");
4999
- var WebhookEndpointWithSecret = import_zod17.z.object({
5109
+ var WebhookEndpointWithSecret = import_zod18.z.object({
5000
5110
  endpoint: WebhookEndpoint,
5001
- secret: import_zod17.z.string().min(32)
5111
+ secret: import_zod18.z.string().min(32)
5002
5112
  });
5003
5113
  var WEBHOOK_DELIVERY_STATUSES = ["pending", "succeeded", "failed"];
5004
- var WebhookDeliveryStatus = import_zod17.z.enum(WEBHOOK_DELIVERY_STATUSES);
5114
+ var WebhookDeliveryStatus = import_zod18.z.enum(WEBHOOK_DELIVERY_STATUSES);
5005
5115
  var WEBHOOK_MAX_ATTEMPTS = 8;
5006
5116
  var WEBHOOK_RETRY_DELAYS_SECONDS = [30, 120, 600, 1800, 3600, 7200, 21600];
5007
- var WebhookDelivery = import_zod17.z.object({
5117
+ var WebhookDelivery = import_zod18.z.object({
5008
5118
  id: Id,
5009
5119
  endpoint_id: Id,
5010
5120
  event_id: Id,
5011
5121
  event_type: WebhookEventType,
5012
5122
  status: WebhookDeliveryStatus,
5013
- attempts: import_zod17.z.number().int().min(0),
5014
- last_status_code: import_zod17.z.number().int().min(100).max(599).nullable(),
5015
- last_error: import_zod17.z.string().nullable(),
5123
+ attempts: import_zod18.z.number().int().min(0),
5124
+ last_status_code: import_zod18.z.number().int().min(100).max(599).nullable(),
5125
+ last_error: import_zod18.z.string().nullable(),
5016
5126
  next_attempt_at: Timestamp.nullable(),
5017
5127
  delivered_at: Timestamp.nullable(),
5018
5128
  created_at: Timestamp
@@ -5021,7 +5131,7 @@ var WebhookDeliveryListQuery = PageQuery.extend({
5021
5131
  status: WebhookDeliveryStatus.optional(),
5022
5132
  event_type: WebhookEventType.optional()
5023
5133
  });
5024
- var WebhookDeliveryParams = import_zod17.z.object({ id: Id, delivery_id: Id });
5134
+ var WebhookDeliveryParams = import_zod18.z.object({ id: Id, delivery_id: Id });
5025
5135
 
5026
5136
  // src/webhook-signing.ts
5027
5137
  var WEBHOOK_SIGNATURE_HEADER = "x-mail-signature";
@@ -5088,99 +5198,99 @@ async function verifyWebhook(input) {
5088
5198
  }
5089
5199
 
5090
5200
  // src/billing.ts
5091
- var import_zod18 = require("zod");
5201
+ var import_zod19 = require("zod");
5092
5202
  var PLAN_IDS = ["free", "starter", "growth", "design_partner"];
5093
- var PlanId = import_zod18.z.enum(PLAN_IDS);
5094
- var PlanLimits = import_zod18.z.object({
5095
- monthly_messages: import_zod18.z.number().int().min(0).nullable(),
5096
- contacts: import_zod18.z.number().int().min(0).nullable(),
5097
- members: import_zod18.z.number().int().min(1).nullable(),
5098
- providers: import_zod18.z.number().int().min(1).nullable(),
5099
- webhook_endpoints: import_zod18.z.number().int().min(0).nullable(),
5203
+ var PlanId = import_zod19.z.enum(PLAN_IDS);
5204
+ var PlanLimits = import_zod19.z.object({
5205
+ monthly_messages: import_zod19.z.number().int().min(0).nullable(),
5206
+ contacts: import_zod19.z.number().int().min(0).nullable(),
5207
+ members: import_zod19.z.number().int().min(1).nullable(),
5208
+ providers: import_zod19.z.number().int().min(1).nullable(),
5209
+ webhook_endpoints: import_zod19.z.number().int().min(0).nullable(),
5100
5210
  /** Automations that may be live (active or paused) at once (A1). */
5101
- active_automations: import_zod18.z.number().int().min(0).nullable(),
5211
+ active_automations: import_zod19.z.number().int().min(0).nullable(),
5102
5212
  /** Steps one automation may hold. Null is the flow's own cap, not unlimited. */
5103
- automation_steps: import_zod18.z.number().int().min(1).nullable(),
5213
+ automation_steps: import_zod19.z.number().int().min(1).nullable(),
5104
5214
  /** Own domains Lumitra Mail sends from (managed sending domains); 0 when the plan has none. */
5105
- sending_domains: import_zod18.z.number().int().min(0).nullable()
5215
+ sending_domains: import_zod19.z.number().int().min(0).nullable()
5106
5216
  });
5107
- var PlanFeatures = import_zod18.z.object({
5217
+ var PlanFeatures = import_zod19.z.object({
5108
5218
  /** A/B tests of subject and content on a mailing (S4). */
5109
- ab_testing: import_zod18.z.boolean(),
5219
+ ab_testing: import_zod19.z.boolean(),
5110
5220
  /** Open and click tracking, still off until a workspace turns it on (`settings.tracking_enabled`). */
5111
- tracking: import_zod18.z.boolean(),
5221
+ tracking: import_zod19.z.boolean(),
5112
5222
  /** Automations: flows a person walks through step by step (A1). */
5113
- automations: import_zod18.z.boolean()
5223
+ automations: import_zod19.z.boolean()
5114
5224
  });
5115
5225
  var PLAN_FEATURES = ["ab_testing", "tracking", "automations"];
5116
- var Plan = import_zod18.z.object({
5226
+ var Plan = import_zod19.z.object({
5117
5227
  id: PlanId,
5118
- name: import_zod18.z.string().min(1),
5228
+ name: import_zod19.z.string().min(1),
5119
5229
  /** Price in the smallest currency unit per month; null for plans not sold. */
5120
- monthly_price_cents: import_zod18.z.number().int().min(0).nullable(),
5121
- currency: import_zod18.z.string().length(3),
5230
+ monthly_price_cents: import_zod19.z.number().int().min(0).nullable(),
5231
+ currency: import_zod19.z.string().length(3),
5122
5232
  limits: PlanLimits,
5123
5233
  features: PlanFeatures
5124
5234
  });
5125
- var CatalogPlan = Plan.extend({ sellable: import_zod18.z.boolean() });
5126
- var Subscription = import_zod18.z.object({
5235
+ var CatalogPlan = Plan.extend({ sellable: import_zod19.z.boolean() });
5236
+ var Subscription = import_zod19.z.object({
5127
5237
  workspace_id: Id,
5128
5238
  plan: PlanId,
5129
- status: import_zod18.z.enum(["active", "trialing", "past_due", "cancelled"]),
5239
+ status: import_zod19.z.enum(["active", "trialing", "past_due", "cancelled"]),
5130
5240
  current_period_start: Timestamp,
5131
5241
  current_period_end: Timestamp,
5132
- cancel_at_period_end: import_zod18.z.boolean(),
5242
+ cancel_at_period_end: import_zod19.z.boolean(),
5133
5243
  /**
5134
5244
  * A design partner outside billing (plan `design_partner`, no limits, no
5135
5245
  * checkout). Set only by an operator, never through the API.
5136
5246
  */
5137
- billing_exempt: import_zod18.z.boolean(),
5247
+ billing_exempt: import_zod19.z.boolean(),
5138
5248
  /**
5139
5249
  * Own sending domains bought on top of the plan's included ones (the
5140
5250
  * add-on), each a monthly charge on the same subscription. 0 without the
5141
5251
  * add-on; the usage limit `sending_domains` is the plan's plus these.
5142
5252
  */
5143
- extra_sending_domains: import_zod18.z.number().int().min(0)
5253
+ extra_sending_domains: import_zod19.z.number().int().min(0)
5144
5254
  });
5145
- var BillingAddons = import_zod18.z.object({
5146
- sending_domain: import_zod18.z.object({
5147
- monthly_price_cents: import_zod18.z.number().int().min(0),
5148
- currency: import_zod18.z.string().length(3),
5149
- sellable: import_zod18.z.boolean()
5255
+ var BillingAddons = import_zod19.z.object({
5256
+ sending_domain: import_zod19.z.object({
5257
+ monthly_price_cents: import_zod19.z.number().int().min(0),
5258
+ currency: import_zod19.z.string().length(3),
5259
+ sellable: import_zod19.z.boolean()
5150
5260
  })
5151
5261
  });
5152
5262
  var MAX_EXTRA_SENDING_DOMAINS = 100;
5153
- var ExtraSendingDomainsUpdate = import_zod18.z.object({ quantity: import_zod18.z.number().int().min(0).max(MAX_EXTRA_SENDING_DOMAINS) });
5263
+ var ExtraSendingDomainsUpdate = import_zod19.z.object({ quantity: import_zod19.z.number().int().min(0).max(MAX_EXTRA_SENDING_DOMAINS) });
5154
5264
  var USAGE_METRICS = ["messages", "contacts", "members", "providers", "webhook_endpoints", "active_automations", "sending_domains"];
5155
- var UsageMetric = import_zod18.z.enum(USAGE_METRICS);
5265
+ var UsageMetric = import_zod19.z.enum(USAGE_METRICS);
5156
5266
  var USAGE_WARNING_RATIO = 0.8;
5157
- var UsageWarning = import_zod18.z.object({
5267
+ var UsageWarning = import_zod19.z.object({
5158
5268
  metric: UsageMetric,
5159
- used: import_zod18.z.number().int().min(0),
5160
- limit: import_zod18.z.number().int().min(0),
5269
+ used: import_zod19.z.number().int().min(0),
5270
+ limit: import_zod19.z.number().int().min(0),
5161
5271
  /** `approaching`: at or above USAGE_WARNING_RATIO of the limit; `reached`: at or above the limit. */
5162
- level: import_zod18.z.enum(["approaching", "reached"])
5272
+ level: import_zod19.z.enum(["approaching", "reached"])
5163
5273
  });
5164
- var TermsStatus = import_zod18.z.object({ accepted_version: import_zod18.z.string().nullable(), current_version: import_zod18.z.string() });
5165
- var Usage = import_zod18.z.object({
5274
+ var TermsStatus = import_zod19.z.object({ accepted_version: import_zod19.z.string().nullable(), current_version: import_zod19.z.string() });
5275
+ var Usage = import_zod19.z.object({
5166
5276
  plan: PlanId,
5167
5277
  period_start: Timestamp,
5168
5278
  period_end: Timestamp,
5169
- metrics: import_zod18.z.record(UsageMetric, import_zod18.z.object({ used: import_zod18.z.number().int().min(0), limit: import_zod18.z.number().int().min(0).nullable() })),
5170
- warnings: import_zod18.z.array(UsageWarning),
5279
+ metrics: import_zod19.z.record(UsageMetric, import_zod19.z.object({ used: import_zod19.z.number().int().min(0), limit: import_zod19.z.number().int().min(0).nullable() })),
5280
+ warnings: import_zod19.z.array(UsageWarning),
5171
5281
  terms: TermsStatus
5172
5282
  });
5173
- var TermsAcceptance = import_zod18.z.object({ accept_terms: AcceptTerms });
5174
- var CheckoutRequest = import_zod18.z.object({
5175
- plan: import_zod18.z.enum(["starter", "growth"]),
5176
- success_url: import_zod18.z.string().url(),
5177
- cancel_url: import_zod18.z.string().url(),
5283
+ var TermsAcceptance = import_zod19.z.object({ accept_terms: AcceptTerms });
5284
+ var CheckoutRequest = import_zod19.z.object({
5285
+ plan: import_zod19.z.enum(["starter", "growth"]),
5286
+ success_url: import_zod19.z.string().url(),
5287
+ cancel_url: import_zod19.z.string().url(),
5178
5288
  /** The buyer accepted the terms of service and the processing agreement of this version. */
5179
5289
  accept_terms: AcceptTerms
5180
5290
  });
5181
- var CheckoutSession = import_zod18.z.object({ url: import_zod18.z.string().url() });
5182
- var PortalRequest = import_zod18.z.object({ return_url: import_zod18.z.string().url() });
5183
- var PortalSession = import_zod18.z.object({ url: import_zod18.z.string().url() });
5291
+ var CheckoutSession = import_zod19.z.object({ url: import_zod19.z.string().url() });
5292
+ var PortalRequest = import_zod19.z.object({ return_url: import_zod19.z.string().url() });
5293
+ var PortalSession = import_zod19.z.object({ url: import_zod19.z.string().url() });
5184
5294
  var USAGE_WARNING_HEADER = "x-mail-usage-warning";
5185
5295
  function formatUsageWarningHeader(warnings) {
5186
5296
  if (warnings.length === 0) return null;
@@ -5200,7 +5310,7 @@ function parseUsageWarningHeader(value) {
5200
5310
  }
5201
5311
 
5202
5312
  // src/routes.ts
5203
- var import_zod19 = require("zod");
5313
+ var import_zod20 = require("zod");
5204
5314
  var list = (item) => page(item);
5205
5315
  var foundationRoutes = {
5206
5316
  "workspaces.create": {
@@ -5446,7 +5556,7 @@ var templateRoutes = {
5446
5556
  path: "/v1/templates/:id/export",
5447
5557
  params: IdParams,
5448
5558
  query: TemplateExportQuery,
5449
- response: import_zod19.z.string(),
5559
+ response: import_zod20.z.string(),
5450
5560
  responseType: "text",
5451
5561
  status: 200,
5452
5562
  access: "read",
@@ -5826,7 +5936,7 @@ var sendingRoutes = {
5826
5936
  path: "/v1/mailings/:id/export",
5827
5937
  params: IdParams,
5828
5938
  query: MailingExportQuery,
5829
- response: import_zod19.z.string(),
5939
+ response: import_zod20.z.string(),
5830
5940
  responseType: "text",
5831
5941
  status: 200,
5832
5942
  access: "read",
@@ -6093,7 +6203,7 @@ var platformRoutes = {
6093
6203
  "contactProperties.list": {
6094
6204
  method: "GET",
6095
6205
  path: "/v1/contact-properties",
6096
- response: import_zod19.z.object({ data: import_zod19.z.array(ContactPropertyDefinition) }),
6206
+ response: import_zod20.z.object({ data: import_zod20.z.array(ContactPropertyDefinition) }),
6097
6207
  status: 200,
6098
6208
  access: "read",
6099
6209
  phase: "S4"
@@ -6392,7 +6502,7 @@ var billingRoutes = {
6392
6502
  "billing.plans": {
6393
6503
  method: "GET",
6394
6504
  path: "/v1/billing/plans",
6395
- response: import_zod19.z.object({ data: import_zod19.z.array(CatalogPlan), addons: BillingAddons }),
6505
+ response: import_zod20.z.object({ data: import_zod20.z.array(CatalogPlan), addons: BillingAddons }),
6396
6506
  status: 200,
6397
6507
  access: "read",
6398
6508
  phase: "S5"
@@ -6443,6 +6553,44 @@ var billingRoutes = {
6443
6553
  phase: "S5"
6444
6554
  }
6445
6555
  };
6556
+ var domainBuyingRoutes = {
6557
+ "domains.search": {
6558
+ method: "GET",
6559
+ path: "/v1/domains/search",
6560
+ query: DomainSearchQuery,
6561
+ response: DomainSearchResult,
6562
+ status: 200,
6563
+ access: "admin",
6564
+ phase: "S5"
6565
+ },
6566
+ "domainOrders.create": {
6567
+ method: "POST",
6568
+ path: "/v1/domain-orders",
6569
+ body: DomainOrderCreate,
6570
+ response: DomainOrder,
6571
+ status: 201,
6572
+ access: "admin",
6573
+ phase: "S5"
6574
+ },
6575
+ "domainOrders.list": {
6576
+ method: "GET",
6577
+ path: "/v1/domain-orders",
6578
+ query: PageQuery,
6579
+ response: list(DomainOrder),
6580
+ status: 200,
6581
+ access: "admin",
6582
+ phase: "S5"
6583
+ },
6584
+ "domainOrders.get": {
6585
+ method: "GET",
6586
+ path: "/v1/domain-orders/:id",
6587
+ params: IdParams,
6588
+ response: DomainOrder,
6589
+ status: 200,
6590
+ access: "admin",
6591
+ phase: "S5"
6592
+ }
6593
+ };
6446
6594
  var inviteRoutes = {
6447
6595
  "invites.create": {
6448
6596
  method: "POST",
@@ -6552,7 +6700,7 @@ var automationRoutes = {
6552
6700
  method: "POST",
6553
6701
  path: "/v1/automations/:id/pause",
6554
6702
  params: IdParams,
6555
- body: import_zod19.z.object({}).strict(),
6703
+ body: import_zod20.z.object({}).strict(),
6556
6704
  response: Automation,
6557
6705
  status: 200,
6558
6706
  access: "write",
@@ -6562,7 +6710,7 @@ var automationRoutes = {
6562
6710
  method: "POST",
6563
6711
  path: "/v1/automations/:id/resume",
6564
6712
  params: IdParams,
6565
- body: import_zod19.z.object({}).strict(),
6713
+ body: import_zod20.z.object({}).strict(),
6566
6714
  response: Automation,
6567
6715
  status: 200,
6568
6716
  access: "write",
@@ -6572,7 +6720,7 @@ var automationRoutes = {
6572
6720
  method: "POST",
6573
6721
  path: "/v1/automations/:id/archive",
6574
6722
  params: IdParams,
6575
- body: import_zod19.z.object({}).strict(),
6723
+ body: import_zod20.z.object({}).strict(),
6576
6724
  response: Automation,
6577
6725
  status: 200,
6578
6726
  access: "write",
@@ -6687,10 +6835,13 @@ var routes = {
6687
6835
  ...inviteRoutes,
6688
6836
  ...platformRoutes,
6689
6837
  ...billingRoutes,
6838
+ ...domainBuyingRoutes,
6690
6839
  ...automationRoutes
6691
6840
  };
6692
6841
  var TRUSTED_APP_OPERATIONS = {
6693
- booking: ["workspaces.list", "workspace.update", "providers.list", "sendingDomains.list", "apiKeys.create", "apiKeys.revoke"]
6842
+ booking: ["workspaces.list", "workspace.update", "providers.list", "sendingDomains.list", "apiKeys.create", "apiKeys.revoke"],
6843
+ // The shop's receipt email needs exactly what connecting a booking page needs.
6844
+ sites: ["workspaces.list", "workspace.update", "providers.list", "sendingDomains.list", "apiKeys.create", "apiKeys.revoke"]
6694
6845
  };
6695
6846
  function trustedAppMayCall(app, id) {
6696
6847
  return TRUSTED_APP_OPERATIONS[app].includes(id);
@@ -6852,10 +7003,24 @@ function matchRoute(method, pathname) {
6852
7003
  DEFAULT_INVITE_TTL_DAYS,
6853
7004
  DEFAULT_PAGE_LIMIT,
6854
7005
  DOCUMENT_SCHEMA_VERSIONS,
7006
+ DOMAIN_BUYING_BLOCKS,
7007
+ DOMAIN_BUYING_NOT_CONFIGURED_REASON,
7008
+ DOMAIN_ORDER_STATES,
7009
+ DOMAIN_PRICE_CHANGED_REASON,
7010
+ DOMAIN_UNAVAILABLE_REASONS,
6855
7011
  DateOnly,
6856
7012
  DatePassedAnswer,
6857
7013
  DelayStep,
6858
7014
  DocumentSchemaVersion,
7015
+ DomainBuyingBlock,
7016
+ DomainOffer,
7017
+ DomainOrder,
7018
+ DomainOrderCreate,
7019
+ DomainOrderState,
7020
+ DomainRegistrant,
7021
+ DomainSearchQuery,
7022
+ DomainSearchResult,
7023
+ DomainUnavailableReason,
6859
7024
  EDITABLE_MAILING_STATUSES,
6860
7025
  ERROR_CODES,
6861
7026
  ERROR_STATUS,
@@ -6939,6 +7104,7 @@ function matchRoute(method, pathname) {
6939
7104
  MAX_ASSET_BYTES,
6940
7105
  MAX_DELAY_SECONDS,
6941
7106
  MAX_DOCUMENT_BYTES,
7107
+ MAX_DOMAIN_ORDERS_PER_DAY,
6942
7108
  MAX_ENGAGEMENT_DAYS,
6943
7109
  MAX_EXPORT_WARNINGS_HEADER_LENGTH,
6944
7110
  MAX_EXTRA_SENDING_DOMAINS,
@@ -7249,6 +7415,7 @@ function matchRoute(method, pathname) {
7249
7415
  demoteForSave,
7250
7416
  demotedBySave,
7251
7417
  describeMissingTexts,
7418
+ domainBuyingRoutes,
7252
7419
  draftDocument,
7253
7420
  draftInsertionProblems,
7254
7421
  draftsDirty,