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