@marlinjai/mail-contract 0.19.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,
@@ -462,6 +477,8 @@ __export(index_exports, {
462
477
  TemplateUpdatedData: () => TemplateUpdatedData,
463
478
  TemplateVersion: () => TemplateVersion,
464
479
  TemplateVersionParams: () => TemplateVersionParams,
480
+ TermsAcceptance: () => TermsAcceptance,
481
+ TermsStatus: () => TermsStatus,
465
482
  TimeOfDay: () => TimeOfDay,
466
483
  Timestamp: () => Timestamp,
467
484
  TimezoneName: () => TimezoneName,
@@ -537,6 +554,7 @@ __export(index_exports, {
537
554
  demoteForSave: () => demoteForSave,
538
555
  demotedBySave: () => demotedBySave,
539
556
  describeMissingTexts: () => describeMissingTexts,
557
+ domainBuyingRoutes: () => domainBuyingRoutes,
540
558
  draftDocument: () => draftDocument,
541
559
  draftInsertionProblems: () => draftInsertionProblems,
542
560
  draftsDirty: () => draftsDirty,
@@ -787,8 +805,11 @@ var RETRYABLE_ERRORS = [
787
805
  "service_unavailable"
788
806
  ];
789
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];
790
811
  function isRetryableError(code, details) {
791
- return RETRYABLE_ERRORS.includes(code) && details?.reason !== BILLING_NOT_CONFIGURED_REASON;
812
+ return RETRYABLE_ERRORS.includes(code) && !LASTING_REASONS.includes(details?.reason);
792
813
  }
793
814
 
794
815
  // src/headers.ts
@@ -3441,7 +3462,7 @@ var EventListQuery = PageQuery.extend({
3441
3462
 
3442
3463
  // src/legal.ts
3443
3464
  var import_zod11 = require("zod");
3444
- var LEGAL_TERMS_VERSION = "2026-10-23";
3465
+ var LEGAL_TERMS_VERSION = "2026-10-28";
3445
3466
  var AcceptTerms = import_zod11.z.literal(LEGAL_TERMS_VERSION, {
3446
3467
  errorMap: () => ({ message: `must be "${LEGAL_TERMS_VERSION}": accept the current terms of service and processing agreement` })
3447
3468
  });
@@ -3693,6 +3714,15 @@ var AUDIT_ACTIONS = [
3693
3714
  "billing.subscription_changed",
3694
3715
  "billing.exemption_changed",
3695
3716
  "billing.extra_sending_domains_changed",
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",
3696
3726
  // A1: automations
3697
3727
  "automation.created",
3698
3728
  "automation.updated",
@@ -3707,7 +3737,7 @@ var AUDIT_ACTIONS = [
3707
3737
  "event.recorded"
3708
3738
  ];
3709
3739
  var AuditAction = import_zod12.z.enum(AUDIT_ACTIONS);
3710
- var TRUSTED_APPS = ["booking"];
3740
+ var TRUSTED_APPS = ["booking", "sites"];
3711
3741
  var TrustedApp = import_zod12.z.enum(TRUSTED_APPS);
3712
3742
  var AuditActor = import_zod12.z.discriminatedUnion("type", [
3713
3743
  import_zod12.z.object({
@@ -4616,36 +4646,119 @@ function senderOnDomain(input, ctx) {
4616
4646
  var SendingDomainCreate = import_zod15.z.object({ domain: SendingDomainName, ...SenderFields }).superRefine(senderOnDomain);
4617
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");
4618
4648
 
4619
- // src/contacts.ts
4649
+ // src/domains.ts
4620
4650
  var import_zod16 = require("zod");
4621
- 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({
4622
4735
  id: Id,
4623
4736
  slug: Slug,
4624
- name: import_zod16.z.string().min(1).max(120),
4737
+ name: import_zod17.z.string().min(1).max(120),
4625
4738
  /** Shown on the hosted preference page. */
4626
- description: import_zod16.z.string().max(1e3).nullable(),
4739
+ description: import_zod17.z.string().max(1e3).nullable(),
4627
4740
  /** Translations of `name` and `description` per locale, for the hosted page. */
4628
- translations: import_zod16.z.record(
4629
- 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() })
4630
4743
  ),
4631
4744
  created_at: Timestamp,
4632
4745
  updated_at: Timestamp
4633
4746
  });
4634
- var TopicCreate = import_zod16.z.object({
4747
+ var TopicCreate = import_zod17.z.object({
4635
4748
  slug: Slug,
4636
- name: import_zod16.z.string().min(1).max(120),
4637
- 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(),
4638
4751
  translations: Topic.shape.translations.optional()
4639
4752
  });
4640
4753
  var TopicUpdate = TopicCreate.omit({ slug: true }).partial().refine((v) => Object.keys(v).length > 0, "at least one field");
4641
- var Contact = import_zod16.z.object({
4754
+ var Contact = import_zod17.z.object({
4642
4755
  id: Id,
4643
- external_id: import_zod16.z.string().min(1).max(255).nullable(),
4756
+ external_id: import_zod17.z.string().min(1).max(255).nullable(),
4644
4757
  /** Stored lowercased, unique per workspace. */
4645
4758
  email: Email,
4646
- first_name: import_zod16.z.string().max(200).nullable(),
4647
- last_name: import_zod16.z.string().max(200).nullable(),
4648
- 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(),
4649
4762
  /**
4650
4763
  * The person's own time zone, an IANA name such as `Europe/Berlin` (A1).
4651
4764
  * Every wall clock an automation waits for is read in it, falling back to the
@@ -4653,65 +4766,65 @@ var Contact = import_zod16.z.object({
4653
4766
  */
4654
4767
  timezone: TimezoneName.nullable(),
4655
4768
  properties: Properties,
4656
- topics: import_zod16.z.array(Slug),
4769
+ topics: import_zod17.z.array(Slug),
4657
4770
  /** The slugs of the contact's tags (S4). */
4658
- tags: import_zod16.z.array(Slug),
4771
+ tags: import_zod17.z.array(Slug),
4659
4772
  created_at: Timestamp,
4660
4773
  updated_at: Timestamp
4661
4774
  });
4662
- var ContactUpsert = import_zod16.z.object({
4663
- 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(),
4664
4777
  email: Email.optional(),
4665
- first_name: import_zod16.z.string().max(200).nullable().optional(),
4666
- last_name: import_zod16.z.string().max(200).nullable().optional(),
4667
- 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(),
4668
4781
  timezone: TimezoneName.nullable().optional(),
4669
4782
  properties: Properties.optional(),
4670
- topics: import_zod16.z.array(Slug).max(100).optional()
4783
+ topics: import_zod17.z.array(Slug).max(100).optional()
4671
4784
  }).refine((v) => v.external_id !== void 0 || v.email !== void 0, {
4672
4785
  message: "external_id or email is required",
4673
4786
  path: ["email"]
4674
4787
  });
4675
- var ContactUpsertResult = import_zod16.z.object({
4788
+ var ContactUpsertResult = import_zod17.z.object({
4676
4789
  contact: Contact,
4677
- created: import_zod16.z.boolean()
4790
+ created: import_zod17.z.boolean()
4678
4791
  });
4679
4792
  var ContactListQuery = PageQuery.extend({
4680
- email: import_zod16.z.string().min(1).max(254).optional(),
4681
- 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(),
4682
4795
  topic: Slug.optional()
4683
4796
  });
4684
- var ContactErased = import_zod16.z.object({
4685
- ok: import_zod16.z.literal(true),
4686
- erased_messages: import_zod16.z.number().int().min(0),
4687
- erased_recipients: import_zod16.z.number().int().min(0),
4688
- 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)
4689
4802
  });
4690
4803
  var SUPPRESSION_REASONS = ["unsubscribed", "bounced", "complained", "manual"];
4691
- var SuppressionReason = import_zod16.z.enum(SUPPRESSION_REASONS);
4692
- var Suppression = import_zod16.z.object({
4804
+ var SuppressionReason = import_zod17.z.enum(SUPPRESSION_REASONS);
4805
+ var Suppression = import_zod17.z.object({
4693
4806
  id: Id,
4694
4807
  email: Email,
4695
4808
  reason: SuppressionReason,
4696
4809
  topic: Slug.nullable(),
4697
4810
  source_message_id: Id.nullable(),
4698
- note: import_zod16.z.string().max(1e3).nullable(),
4811
+ note: import_zod17.z.string().max(1e3).nullable(),
4699
4812
  created_at: Timestamp
4700
4813
  });
4701
- var SuppressionCreate = import_zod16.z.object({
4814
+ var SuppressionCreate = import_zod17.z.object({
4702
4815
  email: Email,
4703
- reason: import_zod16.z.enum(["manual", "unsubscribed"]),
4816
+ reason: import_zod17.z.enum(["manual", "unsubscribed"]),
4704
4817
  topic: Slug.nullable().optional(),
4705
- note: import_zod16.z.string().max(1e3).optional()
4818
+ note: import_zod17.z.string().max(1e3).optional()
4706
4819
  });
4707
4820
  var SuppressionListQuery = PageQuery.extend({
4708
- email: import_zod16.z.string().min(1).max(254).optional(),
4821
+ email: import_zod17.z.string().min(1).max(254).optional(),
4709
4822
  reason: SuppressionReason.optional(),
4710
4823
  topic: Slug.optional()
4711
4824
  });
4712
4825
 
4713
4826
  // src/webhooks.ts
4714
- var import_zod17 = require("zod");
4827
+ var import_zod18 = require("zod");
4715
4828
  var WEBHOOK_EVENT_TYPES = [
4716
4829
  "message.sent",
4717
4830
  "message.failed",
@@ -4755,23 +4868,23 @@ var WEBHOOK_EVENT_TYPES = [
4755
4868
  "template.updated",
4756
4869
  "template.deleted"
4757
4870
  ];
4758
- var WebhookEventType = import_zod17.z.enum(WEBHOOK_EVENT_TYPES);
4759
- var MessageEventBase = import_zod17.z.object({
4871
+ var WebhookEventType = import_zod18.z.enum(WEBHOOK_EVENT_TYPES);
4872
+ var MessageEventBase = import_zod18.z.object({
4760
4873
  message_id: Id,
4761
4874
  mailing_id: Id.nullable(),
4762
4875
  mailing_metadata: MailingMetadata.nullable(),
4763
4876
  recipient_id: Id.nullable(),
4764
4877
  contact_id: Id.nullable(),
4765
- external_id: import_zod17.z.string().nullable(),
4878
+ external_id: import_zod18.z.string().nullable(),
4766
4879
  email: Email,
4767
- subject: import_zod17.z.string(),
4880
+ subject: import_zod18.z.string(),
4768
4881
  topic: Slug.nullable(),
4769
- provider_message_id: import_zod17.z.string().nullable(),
4770
- is_test: import_zod17.z.boolean()
4882
+ provider_message_id: import_zod18.z.string().nullable(),
4883
+ is_test: import_zod18.z.boolean()
4771
4884
  });
4772
4885
  var MessageSentData = MessageEventBase.extend({
4773
4886
  /** The final HTML as sent, so the client can archive it beside its own records. */
4774
- html: import_zod17.z.string(),
4887
+ html: import_zod18.z.string(),
4775
4888
  sent_at: Timestamp,
4776
4889
  /**
4777
4890
  * The choice each insertion made (see `Message.insertions`); absent or null
@@ -4782,20 +4895,20 @@ var MessageSentData = MessageEventBase.extend({
4782
4895
  insertions: InsertionChoices.nullish()
4783
4896
  });
4784
4897
  var MessageFailedData = MessageEventBase.extend({
4785
- error: import_zod17.z.string(),
4898
+ error: import_zod18.z.string(),
4786
4899
  /** False when the provider rejected permanently; the recipient will not be retried. */
4787
- retryable: import_zod17.z.boolean(),
4900
+ retryable: import_zod18.z.boolean(),
4788
4901
  failed_at: Timestamp
4789
4902
  });
4790
4903
  var UNSUBSCRIBE_SOURCES = ["hosted_page", "one_click", "api", "dashboard", "signup_form"];
4791
- var ContactUnsubscribedData = import_zod17.z.object({
4904
+ var ContactUnsubscribedData = import_zod18.z.object({
4792
4905
  contact_id: Id.nullable(),
4793
- external_id: import_zod17.z.string().nullable(),
4906
+ external_id: import_zod18.z.string().nullable(),
4794
4907
  email: Email,
4795
4908
  /** The topic unsubscribed from; null means every topic. */
4796
4909
  topic: Slug.nullable(),
4797
4910
  mailing_id: Id.nullable(),
4798
- source: import_zod17.z.enum(UNSUBSCRIBE_SOURCES),
4911
+ source: import_zod18.z.enum(UNSUBSCRIBE_SOURCES),
4799
4912
  unsubscribed_at: Timestamp
4800
4913
  });
4801
4914
  var ContactResubscribedData = ContactUnsubscribedData.omit({ unsubscribed_at: true }).extend({
@@ -4804,142 +4917,142 @@ var ContactResubscribedData = ContactUnsubscribedData.omit({ unsubscribed_at: tr
4804
4917
  * breaker undid a `bounced` block it judged false (a `contact.bounced` for the
4805
4918
  * same address and mailing went out before); `topic` is null.
4806
4919
  */
4807
- source: import_zod17.z.enum([...UNSUBSCRIBE_SOURCES, "bounce_reverted"]),
4920
+ source: import_zod18.z.enum([...UNSUBSCRIBE_SOURCES, "bounce_reverted"]),
4808
4921
  resubscribed_at: Timestamp
4809
4922
  });
4810
- var ContactBouncedData = import_zod17.z.object({
4923
+ var ContactBouncedData = import_zod18.z.object({
4811
4924
  contact_id: Id.nullable(),
4812
- external_id: import_zod17.z.string().nullable(),
4925
+ external_id: import_zod18.z.string().nullable(),
4813
4926
  email: Email,
4814
4927
  /** `bounced` for a hard bounce, `complained` for a spam complaint. */
4815
- reason: import_zod17.z.enum(["bounced", "complained"]),
4928
+ reason: import_zod18.z.enum(["bounced", "complained"]),
4816
4929
  message_id: Id.nullable(),
4817
- diagnostic: import_zod17.z.string().nullable(),
4930
+ diagnostic: import_zod18.z.string().nullable(),
4818
4931
  bounced_at: Timestamp
4819
4932
  });
4820
- var MailingFinishedData = import_zod17.z.object({
4933
+ var MailingFinishedData = import_zod18.z.object({
4821
4934
  mailing_id: Id,
4822
4935
  mailing_metadata: MailingMetadata,
4823
- status: import_zod17.z.enum(["sent", "partially_failed", "cancelled"]),
4936
+ status: import_zod18.z.enum(["sent", "partially_failed", "cancelled"]),
4824
4937
  counts: MailingCounts,
4825
4938
  finished_at: Timestamp
4826
4939
  });
4827
- var ContactSubscribedData = import_zod17.z.object({
4940
+ var ContactSubscribedData = import_zod18.z.object({
4828
4941
  contact_id: Id,
4829
- external_id: import_zod17.z.string().nullable(),
4942
+ external_id: import_zod18.z.string().nullable(),
4830
4943
  email: Email,
4831
- topics: import_zod17.z.array(Slug),
4832
- 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"]),
4833
4946
  signup_form_id: Id.nullable(),
4834
- signup_form_version: import_zod17.z.number().int().min(1).nullable(),
4947
+ signup_form_version: import_zod18.z.number().int().min(1).nullable(),
4835
4948
  subscribed_at: Timestamp
4836
4949
  });
4837
- var ImportFinishedData = import_zod17.z.object({
4950
+ var ImportFinishedData = import_zod18.z.object({
4838
4951
  import_id: Id,
4839
- status: import_zod17.z.enum(["completed", "cancelled", "failed"]),
4952
+ status: import_zod18.z.enum(["completed", "cancelled", "failed"]),
4840
4953
  result: ImportReport.nullable(),
4841
- error: import_zod17.z.string().nullable(),
4954
+ error: import_zod18.z.string().nullable(),
4842
4955
  finished_at: Timestamp
4843
4956
  });
4844
- var MailingScheduledData = import_zod17.z.object({
4957
+ var MailingScheduledData = import_zod18.z.object({
4845
4958
  mailing_id: Id,
4846
4959
  mailing_metadata: MailingMetadata,
4847
4960
  scheduled_at: Timestamp.nullable()
4848
4961
  });
4849
- var MailingStartedData = import_zod17.z.object({
4962
+ var MailingStartedData = import_zod18.z.object({
4850
4963
  mailing_id: Id,
4851
4964
  mailing_metadata: MailingMetadata,
4852
- trigger: import_zod17.z.enum(["send", "schedule"]),
4853
- 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),
4854
4967
  started_at: Timestamp
4855
4968
  });
4856
- var MailingScheduleFailedData = import_zod17.z.object({
4969
+ var MailingScheduleFailedData = import_zod18.z.object({
4857
4970
  mailing_id: Id,
4858
4971
  mailing_metadata: MailingMetadata,
4859
- code: import_zod17.z.string(),
4860
- message: import_zod17.z.string(),
4972
+ code: import_zod18.z.string(),
4973
+ message: import_zod18.z.string(),
4861
4974
  failed_at: Timestamp
4862
4975
  });
4863
- var MailingAbWinnerSelectedData = import_zod17.z.object({
4976
+ var MailingAbWinnerSelectedData = import_zod18.z.object({
4864
4977
  mailing_id: Id,
4865
4978
  mailing_metadata: MailingMetadata,
4866
- winner: import_zod17.z.string(),
4867
- decided_by: import_zod17.z.enum(["metric", "manual"]),
4868
- 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),
4869
4982
  decided_at: Timestamp
4870
4983
  });
4871
- var ContactTaggedData = import_zod17.z.object({
4984
+ var ContactTaggedData = import_zod18.z.object({
4872
4985
  contact_id: Id,
4873
- external_id: import_zod17.z.string().nullable(),
4986
+ external_id: import_zod18.z.string().nullable(),
4874
4987
  email: Email,
4875
4988
  /** Only the tags the contact did not already have. */
4876
- tags: import_zod17.z.array(Slug).min(1),
4877
- 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"]),
4878
4991
  tagged_at: Timestamp
4879
4992
  });
4880
- var ContactUpdatedData = import_zod17.z.object({
4993
+ var ContactUpdatedData = import_zod18.z.object({
4881
4994
  contact_id: Id,
4882
- external_id: import_zod17.z.string().nullable(),
4995
+ external_id: import_zod18.z.string().nullable(),
4883
4996
  email: Email,
4884
- changed: import_zod17.z.array(import_zod17.z.string()).min(1),
4997
+ changed: import_zod18.z.array(import_zod18.z.string()).min(1),
4885
4998
  properties: Properties,
4886
- source: import_zod17.z.enum(["api", "dashboard", "signup_form", "import", "automation"]),
4999
+ source: import_zod18.z.enum(["api", "dashboard", "signup_form", "import", "automation"]),
4887
5000
  updated_at: Timestamp
4888
5001
  });
4889
- var AutomationRunEventBase = import_zod17.z.object({
5002
+ var AutomationRunEventBase = import_zod18.z.object({
4890
5003
  automation_id: Id,
4891
- automation_name: import_zod17.z.string(),
5004
+ automation_name: import_zod18.z.string(),
4892
5005
  run_id: Id,
4893
- version: import_zod17.z.number().int().min(1),
5006
+ version: import_zod18.z.number().int().min(1),
4894
5007
  contact_id: Id,
4895
- external_id: import_zod17.z.string().nullable(),
5008
+ external_id: import_zod18.z.string().nullable(),
4896
5009
  email: Email
4897
5010
  });
4898
5011
  var AutomationRunStartedData = AutomationRunEventBase.extend({
4899
5012
  /** What let them in: a trigger kind, or `manual` for an explicit enrolment. */
4900
- trigger_kind: import_zod17.z.string(),
5013
+ trigger_kind: import_zod18.z.string(),
4901
5014
  entered_at: Timestamp
4902
5015
  });
4903
5016
  var AutomationRunCompletedData = AutomationRunEventBase.extend({
4904
- last_step_id: import_zod17.z.string().nullable(),
5017
+ last_step_id: import_zod18.z.string().nullable(),
4905
5018
  completed_at: Timestamp
4906
5019
  });
4907
5020
  var AutomationRunExitedData = AutomationRunEventBase.extend({
4908
5021
  reason: AutomationEndReason,
4909
- step_id: import_zod17.z.string().nullable(),
5022
+ step_id: import_zod18.z.string().nullable(),
4910
5023
  exited_at: Timestamp
4911
5024
  });
4912
5025
  var AutomationRunFailedData = AutomationRunEventBase.extend({
4913
- reason: import_zod17.z.string(),
4914
- step_id: import_zod17.z.string().nullable(),
5026
+ reason: import_zod18.z.string(),
5027
+ step_id: import_zod18.z.string().nullable(),
4915
5028
  failed_at: Timestamp
4916
5029
  });
4917
5030
  var AutomationWebhookData = AutomationRunEventBase.extend({
4918
- step_id: import_zod17.z.string(),
5031
+ step_id: import_zod18.z.string(),
4919
5032
  /** The step's own label, when it was given one, so a receiver can branch on a name. */
4920
- step_label: import_zod17.z.string().nullable(),
5033
+ step_label: import_zod18.z.string().nullable(),
4921
5034
  /** Whatever the step carries, verbatim. Null when it carries nothing. */
4922
5035
  payload: JsonValue.nullable(),
4923
5036
  fired_at: Timestamp
4924
5037
  });
4925
- var TemplateEventBase = import_zod17.z.object({
5038
+ var TemplateEventBase = import_zod18.z.object({
4926
5039
  template_id: Id,
4927
- name: import_zod17.z.string().min(1).max(200),
4928
- version: import_zod17.z.number().int().min(1),
4929
- 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"])
4930
5043
  });
4931
5044
  var TemplateCreatedData = TemplateEventBase.extend({ created_at: Timestamp });
4932
- 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 });
4933
5046
  var TemplateDeletedData = TemplateEventBase.extend({ deleted_at: Timestamp });
4934
- var envelope = (type, data) => import_zod17.z.object({
5047
+ var envelope = (type, data) => import_zod18.z.object({
4935
5048
  /** Unique per event: a receiver deduplicates on it (deliveries may repeat). */
4936
5049
  id: Id,
4937
- type: import_zod17.z.literal(type),
5050
+ type: import_zod18.z.literal(type),
4938
5051
  created_at: Timestamp,
4939
5052
  workspace_id: Id,
4940
5053
  data
4941
5054
  });
4942
- var WebhookEvent = import_zod17.z.discriminatedUnion("type", [
5055
+ var WebhookEvent = import_zod18.z.discriminatedUnion("type", [
4943
5056
  envelope("message.sent", MessageSentData),
4944
5057
  envelope("message.failed", MessageFailedData),
4945
5058
  envelope("contact.unsubscribed", ContactUnsubscribedData),
@@ -4963,16 +5076,16 @@ var WebhookEvent = import_zod17.z.discriminatedUnion("type", [
4963
5076
  envelope("template.updated", TemplateUpdatedData),
4964
5077
  envelope("template.deleted", TemplateDeletedData)
4965
5078
  ]);
4966
- var WebhookEndpoint = import_zod17.z.object({
5079
+ var WebhookEndpoint = import_zod18.z.object({
4967
5080
  id: Id,
4968
- url: import_zod17.z.string().url(),
4969
- description: import_zod17.z.string().max(500).nullable(),
4970
- events: import_zod17.z.array(WebhookEventType).min(1),
4971
- 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(),
4972
5085
  created_at: Timestamp,
4973
5086
  updated_at: Timestamp
4974
5087
  });
4975
- var WebhookUrl = import_zod17.z.string().url().refine((u) => {
5088
+ var WebhookUrl = import_zod18.z.string().url().refine((u) => {
4976
5089
  try {
4977
5090
  const url = new URL(u);
4978
5091
  if (url.protocol === "https:") return true;
@@ -4981,35 +5094,35 @@ var WebhookUrl = import_zod17.z.string().url().refine((u) => {
4981
5094
  return false;
4982
5095
  }
4983
5096
  }, "must be https (http only for localhost)");
4984
- var WebhookEndpointCreate = import_zod17.z.object({
5097
+ var WebhookEndpointCreate = import_zod18.z.object({
4985
5098
  url: WebhookUrl,
4986
- description: import_zod17.z.string().max(500).optional(),
4987
- events: import_zod17.z.array(WebhookEventType).min(1),
4988
- 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()
4989
5102
  });
4990
- var WebhookEndpointUpdate = import_zod17.z.object({
5103
+ var WebhookEndpointUpdate = import_zod18.z.object({
4991
5104
  url: WebhookUrl,
4992
- description: import_zod17.z.string().max(500).nullable(),
4993
- events: import_zod17.z.array(WebhookEventType).min(1),
4994
- 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()
4995
5108
  }).partial().refine((v) => Object.keys(v).length > 0, "at least one field");
4996
- var WebhookEndpointWithSecret = import_zod17.z.object({
5109
+ var WebhookEndpointWithSecret = import_zod18.z.object({
4997
5110
  endpoint: WebhookEndpoint,
4998
- secret: import_zod17.z.string().min(32)
5111
+ secret: import_zod18.z.string().min(32)
4999
5112
  });
5000
5113
  var WEBHOOK_DELIVERY_STATUSES = ["pending", "succeeded", "failed"];
5001
- var WebhookDeliveryStatus = import_zod17.z.enum(WEBHOOK_DELIVERY_STATUSES);
5114
+ var WebhookDeliveryStatus = import_zod18.z.enum(WEBHOOK_DELIVERY_STATUSES);
5002
5115
  var WEBHOOK_MAX_ATTEMPTS = 8;
5003
5116
  var WEBHOOK_RETRY_DELAYS_SECONDS = [30, 120, 600, 1800, 3600, 7200, 21600];
5004
- var WebhookDelivery = import_zod17.z.object({
5117
+ var WebhookDelivery = import_zod18.z.object({
5005
5118
  id: Id,
5006
5119
  endpoint_id: Id,
5007
5120
  event_id: Id,
5008
5121
  event_type: WebhookEventType,
5009
5122
  status: WebhookDeliveryStatus,
5010
- attempts: import_zod17.z.number().int().min(0),
5011
- last_status_code: import_zod17.z.number().int().min(100).max(599).nullable(),
5012
- 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(),
5013
5126
  next_attempt_at: Timestamp.nullable(),
5014
5127
  delivered_at: Timestamp.nullable(),
5015
5128
  created_at: Timestamp
@@ -5018,7 +5131,7 @@ var WebhookDeliveryListQuery = PageQuery.extend({
5018
5131
  status: WebhookDeliveryStatus.optional(),
5019
5132
  event_type: WebhookEventType.optional()
5020
5133
  });
5021
- var WebhookDeliveryParams = import_zod17.z.object({ id: Id, delivery_id: Id });
5134
+ var WebhookDeliveryParams = import_zod18.z.object({ id: Id, delivery_id: Id });
5022
5135
 
5023
5136
  // src/webhook-signing.ts
5024
5137
  var WEBHOOK_SIGNATURE_HEADER = "x-mail-signature";
@@ -5085,96 +5198,99 @@ async function verifyWebhook(input) {
5085
5198
  }
5086
5199
 
5087
5200
  // src/billing.ts
5088
- var import_zod18 = require("zod");
5201
+ var import_zod19 = require("zod");
5089
5202
  var PLAN_IDS = ["free", "starter", "growth", "design_partner"];
5090
- var PlanId = import_zod18.z.enum(PLAN_IDS);
5091
- var PlanLimits = import_zod18.z.object({
5092
- monthly_messages: import_zod18.z.number().int().min(0).nullable(),
5093
- contacts: import_zod18.z.number().int().min(0).nullable(),
5094
- members: import_zod18.z.number().int().min(1).nullable(),
5095
- providers: import_zod18.z.number().int().min(1).nullable(),
5096
- 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(),
5097
5210
  /** Automations that may be live (active or paused) at once (A1). */
5098
- active_automations: import_zod18.z.number().int().min(0).nullable(),
5211
+ active_automations: import_zod19.z.number().int().min(0).nullable(),
5099
5212
  /** Steps one automation may hold. Null is the flow's own cap, not unlimited. */
5100
- automation_steps: import_zod18.z.number().int().min(1).nullable(),
5213
+ automation_steps: import_zod19.z.number().int().min(1).nullable(),
5101
5214
  /** Own domains Lumitra Mail sends from (managed sending domains); 0 when the plan has none. */
5102
- sending_domains: import_zod18.z.number().int().min(0).nullable()
5215
+ sending_domains: import_zod19.z.number().int().min(0).nullable()
5103
5216
  });
5104
- var PlanFeatures = import_zod18.z.object({
5217
+ var PlanFeatures = import_zod19.z.object({
5105
5218
  /** A/B tests of subject and content on a mailing (S4). */
5106
- ab_testing: import_zod18.z.boolean(),
5219
+ ab_testing: import_zod19.z.boolean(),
5107
5220
  /** Open and click tracking, still off until a workspace turns it on (`settings.tracking_enabled`). */
5108
- tracking: import_zod18.z.boolean(),
5221
+ tracking: import_zod19.z.boolean(),
5109
5222
  /** Automations: flows a person walks through step by step (A1). */
5110
- automations: import_zod18.z.boolean()
5223
+ automations: import_zod19.z.boolean()
5111
5224
  });
5112
5225
  var PLAN_FEATURES = ["ab_testing", "tracking", "automations"];
5113
- var Plan = import_zod18.z.object({
5226
+ var Plan = import_zod19.z.object({
5114
5227
  id: PlanId,
5115
- name: import_zod18.z.string().min(1),
5228
+ name: import_zod19.z.string().min(1),
5116
5229
  /** Price in the smallest currency unit per month; null for plans not sold. */
5117
- monthly_price_cents: import_zod18.z.number().int().min(0).nullable(),
5118
- 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),
5119
5232
  limits: PlanLimits,
5120
5233
  features: PlanFeatures
5121
5234
  });
5122
- var CatalogPlan = Plan.extend({ sellable: import_zod18.z.boolean() });
5123
- var Subscription = import_zod18.z.object({
5235
+ var CatalogPlan = Plan.extend({ sellable: import_zod19.z.boolean() });
5236
+ var Subscription = import_zod19.z.object({
5124
5237
  workspace_id: Id,
5125
5238
  plan: PlanId,
5126
- status: import_zod18.z.enum(["active", "trialing", "past_due", "cancelled"]),
5239
+ status: import_zod19.z.enum(["active", "trialing", "past_due", "cancelled"]),
5127
5240
  current_period_start: Timestamp,
5128
5241
  current_period_end: Timestamp,
5129
- cancel_at_period_end: import_zod18.z.boolean(),
5242
+ cancel_at_period_end: import_zod19.z.boolean(),
5130
5243
  /**
5131
5244
  * A design partner outside billing (plan `design_partner`, no limits, no
5132
5245
  * checkout). Set only by an operator, never through the API.
5133
5246
  */
5134
- billing_exempt: import_zod18.z.boolean(),
5247
+ billing_exempt: import_zod19.z.boolean(),
5135
5248
  /**
5136
5249
  * Own sending domains bought on top of the plan's included ones (the
5137
5250
  * add-on), each a monthly charge on the same subscription. 0 without the
5138
5251
  * add-on; the usage limit `sending_domains` is the plan's plus these.
5139
5252
  */
5140
- extra_sending_domains: import_zod18.z.number().int().min(0)
5253
+ extra_sending_domains: import_zod19.z.number().int().min(0)
5141
5254
  });
5142
- var BillingAddons = import_zod18.z.object({
5143
- sending_domain: import_zod18.z.object({
5144
- monthly_price_cents: import_zod18.z.number().int().min(0),
5145
- currency: import_zod18.z.string().length(3),
5146
- 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()
5147
5260
  })
5148
5261
  });
5149
5262
  var MAX_EXTRA_SENDING_DOMAINS = 100;
5150
- 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) });
5151
5264
  var USAGE_METRICS = ["messages", "contacts", "members", "providers", "webhook_endpoints", "active_automations", "sending_domains"];
5152
- var UsageMetric = import_zod18.z.enum(USAGE_METRICS);
5265
+ var UsageMetric = import_zod19.z.enum(USAGE_METRICS);
5153
5266
  var USAGE_WARNING_RATIO = 0.8;
5154
- var UsageWarning = import_zod18.z.object({
5267
+ var UsageWarning = import_zod19.z.object({
5155
5268
  metric: UsageMetric,
5156
- used: import_zod18.z.number().int().min(0),
5157
- 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),
5158
5271
  /** `approaching`: at or above USAGE_WARNING_RATIO of the limit; `reached`: at or above the limit. */
5159
- level: import_zod18.z.enum(["approaching", "reached"])
5272
+ level: import_zod19.z.enum(["approaching", "reached"])
5160
5273
  });
5161
- 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({
5162
5276
  plan: PlanId,
5163
5277
  period_start: Timestamp,
5164
5278
  period_end: Timestamp,
5165
- 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() })),
5166
- warnings: import_zod18.z.array(UsageWarning)
5167
- });
5168
- var CheckoutRequest = import_zod18.z.object({
5169
- plan: import_zod18.z.enum(["starter", "growth"]),
5170
- success_url: import_zod18.z.string().url(),
5171
- cancel_url: import_zod18.z.string().url(),
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),
5281
+ terms: TermsStatus
5282
+ });
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(),
5172
5288
  /** The buyer accepted the terms of service and the processing agreement of this version. */
5173
5289
  accept_terms: AcceptTerms
5174
5290
  });
5175
- var CheckoutSession = import_zod18.z.object({ url: import_zod18.z.string().url() });
5176
- var PortalRequest = import_zod18.z.object({ return_url: import_zod18.z.string().url() });
5177
- 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() });
5178
5294
  var USAGE_WARNING_HEADER = "x-mail-usage-warning";
5179
5295
  function formatUsageWarningHeader(warnings) {
5180
5296
  if (warnings.length === 0) return null;
@@ -5194,7 +5310,7 @@ function parseUsageWarningHeader(value) {
5194
5310
  }
5195
5311
 
5196
5312
  // src/routes.ts
5197
- var import_zod19 = require("zod");
5313
+ var import_zod20 = require("zod");
5198
5314
  var list = (item) => page(item);
5199
5315
  var foundationRoutes = {
5200
5316
  "workspaces.create": {
@@ -5440,7 +5556,7 @@ var templateRoutes = {
5440
5556
  path: "/v1/templates/:id/export",
5441
5557
  params: IdParams,
5442
5558
  query: TemplateExportQuery,
5443
- response: import_zod19.z.string(),
5559
+ response: import_zod20.z.string(),
5444
5560
  responseType: "text",
5445
5561
  status: 200,
5446
5562
  access: "read",
@@ -5820,7 +5936,7 @@ var sendingRoutes = {
5820
5936
  path: "/v1/mailings/:id/export",
5821
5937
  params: IdParams,
5822
5938
  query: MailingExportQuery,
5823
- response: import_zod19.z.string(),
5939
+ response: import_zod20.z.string(),
5824
5940
  responseType: "text",
5825
5941
  status: 200,
5826
5942
  access: "read",
@@ -6087,7 +6203,7 @@ var platformRoutes = {
6087
6203
  "contactProperties.list": {
6088
6204
  method: "GET",
6089
6205
  path: "/v1/contact-properties",
6090
- response: import_zod19.z.object({ data: import_zod19.z.array(ContactPropertyDefinition) }),
6206
+ response: import_zod20.z.object({ data: import_zod20.z.array(ContactPropertyDefinition) }),
6091
6207
  status: 200,
6092
6208
  access: "read",
6093
6209
  phase: "S4"
@@ -6386,7 +6502,7 @@ var billingRoutes = {
6386
6502
  "billing.plans": {
6387
6503
  method: "GET",
6388
6504
  path: "/v1/billing/plans",
6389
- 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 }),
6390
6506
  status: 200,
6391
6507
  access: "read",
6392
6508
  phase: "S5"
@@ -6426,6 +6542,53 @@ var billingRoutes = {
6426
6542
  status: 200,
6427
6543
  access: "admin",
6428
6544
  phase: "S5"
6545
+ },
6546
+ "billing.acceptTerms": {
6547
+ method: "POST",
6548
+ path: "/v1/billing/terms",
6549
+ body: TermsAcceptance,
6550
+ response: TermsStatus,
6551
+ status: 200,
6552
+ access: "admin",
6553
+ phase: "S5"
6554
+ }
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"
6429
6592
  }
6430
6593
  };
6431
6594
  var inviteRoutes = {
@@ -6537,7 +6700,7 @@ var automationRoutes = {
6537
6700
  method: "POST",
6538
6701
  path: "/v1/automations/:id/pause",
6539
6702
  params: IdParams,
6540
- body: import_zod19.z.object({}).strict(),
6703
+ body: import_zod20.z.object({}).strict(),
6541
6704
  response: Automation,
6542
6705
  status: 200,
6543
6706
  access: "write",
@@ -6547,7 +6710,7 @@ var automationRoutes = {
6547
6710
  method: "POST",
6548
6711
  path: "/v1/automations/:id/resume",
6549
6712
  params: IdParams,
6550
- body: import_zod19.z.object({}).strict(),
6713
+ body: import_zod20.z.object({}).strict(),
6551
6714
  response: Automation,
6552
6715
  status: 200,
6553
6716
  access: "write",
@@ -6557,7 +6720,7 @@ var automationRoutes = {
6557
6720
  method: "POST",
6558
6721
  path: "/v1/automations/:id/archive",
6559
6722
  params: IdParams,
6560
- body: import_zod19.z.object({}).strict(),
6723
+ body: import_zod20.z.object({}).strict(),
6561
6724
  response: Automation,
6562
6725
  status: 200,
6563
6726
  access: "write",
@@ -6672,10 +6835,13 @@ var routes = {
6672
6835
  ...inviteRoutes,
6673
6836
  ...platformRoutes,
6674
6837
  ...billingRoutes,
6838
+ ...domainBuyingRoutes,
6675
6839
  ...automationRoutes
6676
6840
  };
6677
6841
  var TRUSTED_APP_OPERATIONS = {
6678
- 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"]
6679
6845
  };
6680
6846
  function trustedAppMayCall(app, id) {
6681
6847
  return TRUSTED_APP_OPERATIONS[app].includes(id);
@@ -6837,10 +7003,24 @@ function matchRoute(method, pathname) {
6837
7003
  DEFAULT_INVITE_TTL_DAYS,
6838
7004
  DEFAULT_PAGE_LIMIT,
6839
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,
6840
7011
  DateOnly,
6841
7012
  DatePassedAnswer,
6842
7013
  DelayStep,
6843
7014
  DocumentSchemaVersion,
7015
+ DomainBuyingBlock,
7016
+ DomainOffer,
7017
+ DomainOrder,
7018
+ DomainOrderCreate,
7019
+ DomainOrderState,
7020
+ DomainRegistrant,
7021
+ DomainSearchQuery,
7022
+ DomainSearchResult,
7023
+ DomainUnavailableReason,
6844
7024
  EDITABLE_MAILING_STATUSES,
6845
7025
  ERROR_CODES,
6846
7026
  ERROR_STATUS,
@@ -6924,6 +7104,7 @@ function matchRoute(method, pathname) {
6924
7104
  MAX_ASSET_BYTES,
6925
7105
  MAX_DELAY_SECONDS,
6926
7106
  MAX_DOCUMENT_BYTES,
7107
+ MAX_DOMAIN_ORDERS_PER_DAY,
6927
7108
  MAX_ENGAGEMENT_DAYS,
6928
7109
  MAX_EXPORT_WARNINGS_HEADER_LENGTH,
6929
7110
  MAX_EXTRA_SENDING_DOMAINS,
@@ -7157,6 +7338,8 @@ function matchRoute(method, pathname) {
7157
7338
  TemplateUpdatedData,
7158
7339
  TemplateVersion,
7159
7340
  TemplateVersionParams,
7341
+ TermsAcceptance,
7342
+ TermsStatus,
7160
7343
  TimeOfDay,
7161
7344
  Timestamp,
7162
7345
  TimezoneName,
@@ -7232,6 +7415,7 @@ function matchRoute(method, pathname) {
7232
7415
  demoteForSave,
7233
7416
  demotedBySave,
7234
7417
  describeMissingTexts,
7418
+ domainBuyingRoutes,
7235
7419
  draftDocument,
7236
7420
  draftInsertionProblems,
7237
7421
  draftsDirty,