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