@marlinjai/mail-contract 0.20.0 → 0.21.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +771 -59
- package/dist/index.d.ts +771 -59
- package/dist/index.js +353 -186
- package/dist/index.mjs +337 -186
- package/package.json +1 -1
package/dist/index.mjs
CHANGED
|
@@ -131,8 +131,11 @@ var RETRYABLE_ERRORS = [
|
|
|
131
131
|
"service_unavailable"
|
|
132
132
|
];
|
|
133
133
|
var BILLING_NOT_CONFIGURED_REASON = "billing_not_configured";
|
|
134
|
+
var DOMAIN_BUYING_NOT_CONFIGURED_REASON = "domain_buying_not_configured";
|
|
135
|
+
var DOMAIN_PRICE_CHANGED_REASON = "price_changed";
|
|
136
|
+
var LASTING_REASONS = [BILLING_NOT_CONFIGURED_REASON, DOMAIN_BUYING_NOT_CONFIGURED_REASON];
|
|
134
137
|
function isRetryableError(code, details) {
|
|
135
|
-
return RETRYABLE_ERRORS.includes(code) && details?.reason
|
|
138
|
+
return RETRYABLE_ERRORS.includes(code) && !LASTING_REASONS.includes(details?.reason);
|
|
136
139
|
}
|
|
137
140
|
|
|
138
141
|
// src/headers.ts
|
|
@@ -2785,7 +2788,7 @@ var EventListQuery = PageQuery.extend({
|
|
|
2785
2788
|
|
|
2786
2789
|
// src/legal.ts
|
|
2787
2790
|
import { z as z11 } from "zod";
|
|
2788
|
-
var LEGAL_TERMS_VERSION = "2026-10-
|
|
2791
|
+
var LEGAL_TERMS_VERSION = "2026-10-28";
|
|
2789
2792
|
var AcceptTerms = z11.literal(LEGAL_TERMS_VERSION, {
|
|
2790
2793
|
errorMap: () => ({ message: `must be "${LEGAL_TERMS_VERSION}": accept the current terms of service and processing agreement` })
|
|
2791
2794
|
});
|
|
@@ -3038,6 +3041,14 @@ var AUDIT_ACTIONS = [
|
|
|
3038
3041
|
"billing.exemption_changed",
|
|
3039
3042
|
"billing.extra_sending_domains_changed",
|
|
3040
3043
|
"billing.terms_accepted",
|
|
3044
|
+
// Domains bought inside Lumitra Mail
|
|
3045
|
+
"domain_order.created",
|
|
3046
|
+
"domain_order.paid",
|
|
3047
|
+
"domain_order.registered",
|
|
3048
|
+
"domain_order.ready",
|
|
3049
|
+
"domain_order.needs_attention",
|
|
3050
|
+
"domain_order.refunded",
|
|
3051
|
+
"domain_order.cancelled",
|
|
3041
3052
|
// A1: automations
|
|
3042
3053
|
"automation.created",
|
|
3043
3054
|
"automation.updated",
|
|
@@ -3052,7 +3063,7 @@ var AUDIT_ACTIONS = [
|
|
|
3052
3063
|
"event.recorded"
|
|
3053
3064
|
];
|
|
3054
3065
|
var AuditAction = z12.enum(AUDIT_ACTIONS);
|
|
3055
|
-
var TRUSTED_APPS = ["booking"];
|
|
3066
|
+
var TRUSTED_APPS = ["booking", "sites"];
|
|
3056
3067
|
var TrustedApp = z12.enum(TRUSTED_APPS);
|
|
3057
3068
|
var AuditActor = z12.discriminatedUnion("type", [
|
|
3058
3069
|
z12.object({
|
|
@@ -3961,36 +3972,119 @@ function senderOnDomain(input, ctx) {
|
|
|
3961
3972
|
var SendingDomainCreate = z15.object({ domain: SendingDomainName, ...SenderFields }).superRefine(senderOnDomain);
|
|
3962
3973
|
var SendingDomainUpdate = z15.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");
|
|
3963
3974
|
|
|
3964
|
-
// src/
|
|
3975
|
+
// src/domains.ts
|
|
3965
3976
|
import { z as z16 } from "zod";
|
|
3966
|
-
var
|
|
3977
|
+
var DomainSearchQuery = z16.object({ q: z16.string().trim().min(1).max(63) });
|
|
3978
|
+
var DOMAIN_UNAVAILABLE_REASONS = ["taken", "extension_not_supported", "premium", "not_registrable"];
|
|
3979
|
+
var DomainUnavailableReason = z16.enum(DOMAIN_UNAVAILABLE_REASONS);
|
|
3980
|
+
var DomainOffer = z16.object({
|
|
3981
|
+
domain: z16.string(),
|
|
3982
|
+
available: z16.boolean(),
|
|
3983
|
+
reason: DomainUnavailableReason.nullable(),
|
|
3984
|
+
price_cents: z16.number().int().min(0).nullable(),
|
|
3985
|
+
renewal_price_cents: z16.number().int().min(0).nullable(),
|
|
3986
|
+
currency: z16.literal("EUR")
|
|
3987
|
+
});
|
|
3988
|
+
var DOMAIN_BUYING_BLOCKS = ["not_configured", "paid_plan_required", "no_company"];
|
|
3989
|
+
var DomainBuyingBlock = z16.enum(DOMAIN_BUYING_BLOCKS);
|
|
3990
|
+
var DomainSearchResult = z16.object({
|
|
3991
|
+
data: z16.array(DomainOffer),
|
|
3992
|
+
blocked: DomainBuyingBlock.nullable()
|
|
3993
|
+
});
|
|
3994
|
+
var DomainRegistrant = z16.object({
|
|
3995
|
+
name: z16.string().trim().min(3).max(120).regex(/\S+\s+\S+/, "must be a first and a last name"),
|
|
3996
|
+
organization: z16.string().trim().min(1).max(120).nullable().optional(),
|
|
3997
|
+
email: Email,
|
|
3998
|
+
phone: z16.string().trim().regex(/^\+\d{1,3}\.\d{4,14}$/, "must be +<country code>.<number>, such as +49.3012345678"),
|
|
3999
|
+
street: z16.string().trim().min(3).max(200),
|
|
4000
|
+
city: z16.string().trim().min(1).max(100),
|
|
4001
|
+
state: z16.string().trim().min(1).max(100),
|
|
4002
|
+
postal_code: z16.string().trim().min(2).max(20),
|
|
4003
|
+
country_code: z16.string().trim().toUpperCase().regex(/^[A-Z]{2}$/, "must be a two-letter country code such as DE")
|
|
4004
|
+
});
|
|
4005
|
+
var MAX_DOMAIN_ORDERS_PER_DAY = 2;
|
|
4006
|
+
var DomainOrderCreate = z16.object({
|
|
4007
|
+
domain: SendingDomainName,
|
|
4008
|
+
price_cents: z16.number().int().min(0),
|
|
4009
|
+
registrant: DomainRegistrant,
|
|
4010
|
+
from_name: z16.string().trim().min(1).max(120),
|
|
4011
|
+
from_local_part: z16.string().trim().toLowerCase().regex(/^[a-z0-9](?:[a-z0-9._+-]{0,62}[a-z0-9])?$/, "must be the part before the @, such as hello"),
|
|
4012
|
+
/**
|
|
4013
|
+
* Where Stripe returns to after paying, and after leaving the payment. The
|
|
4014
|
+
* service adds `domain_order=<order id>` to both, so the page coming back
|
|
4015
|
+
* knows which order to show (and read: `domainOrders.get` confirms a
|
|
4016
|
+
* payment at once, before Stripe's webhook arrives).
|
|
4017
|
+
*/
|
|
4018
|
+
success_url: z16.string().url(),
|
|
4019
|
+
cancel_url: z16.string().url(),
|
|
4020
|
+
/** The buyer accepted the terms of service (which cover bought domains) of this version. */
|
|
4021
|
+
accept_terms: AcceptTerms
|
|
4022
|
+
});
|
|
4023
|
+
var DOMAIN_ORDER_STATES = [
|
|
4024
|
+
"awaiting_payment",
|
|
4025
|
+
"paid",
|
|
4026
|
+
"registering",
|
|
4027
|
+
"setting_up",
|
|
4028
|
+
"ready",
|
|
4029
|
+
"needs_attention",
|
|
4030
|
+
"refunded",
|
|
4031
|
+
"cancelled"
|
|
4032
|
+
];
|
|
4033
|
+
var DomainOrderState = z16.enum(DOMAIN_ORDER_STATES);
|
|
4034
|
+
var DomainOrder = z16.object({
|
|
4035
|
+
id: Id,
|
|
4036
|
+
domain: z16.string(),
|
|
4037
|
+
state: DomainOrderState,
|
|
4038
|
+
price_cents: z16.number().int().min(0),
|
|
4039
|
+
renewal_price_cents: z16.number().int().min(0),
|
|
4040
|
+
currency: z16.literal("EUR"),
|
|
4041
|
+
/** Stripe's payment page while `awaiting_payment`; null otherwise. */
|
|
4042
|
+
checkout_url: z16.string().url().nullable(),
|
|
4043
|
+
registrant_name: z16.string(),
|
|
4044
|
+
from_name: z16.string(),
|
|
4045
|
+
from_email: Email,
|
|
4046
|
+
/** The sending domain once `ready`. */
|
|
4047
|
+
sending_domain_id: Id.nullable(),
|
|
4048
|
+
/** When the paid year ends, once registered. */
|
|
4049
|
+
expires_at: Timestamp.nullable(),
|
|
4050
|
+
/** What went wrong, for `needs_attention` and `refunded`; null otherwise. */
|
|
4051
|
+
last_error: z16.string().nullable(),
|
|
4052
|
+
paid_at: Timestamp.nullable(),
|
|
4053
|
+
registered_at: Timestamp.nullable(),
|
|
4054
|
+
created_at: Timestamp,
|
|
4055
|
+
updated_at: Timestamp
|
|
4056
|
+
});
|
|
4057
|
+
|
|
4058
|
+
// src/contacts.ts
|
|
4059
|
+
import { z as z17 } from "zod";
|
|
4060
|
+
var Topic = z17.object({
|
|
3967
4061
|
id: Id,
|
|
3968
4062
|
slug: Slug,
|
|
3969
|
-
name:
|
|
4063
|
+
name: z17.string().min(1).max(120),
|
|
3970
4064
|
/** Shown on the hosted preference page. */
|
|
3971
|
-
description:
|
|
4065
|
+
description: z17.string().max(1e3).nullable(),
|
|
3972
4066
|
/** Translations of `name` and `description` per locale, for the hosted page. */
|
|
3973
|
-
translations:
|
|
3974
|
-
|
|
4067
|
+
translations: z17.record(
|
|
4068
|
+
z17.object({ name: z17.string().min(1).max(120), description: z17.string().max(1e3).nullable() })
|
|
3975
4069
|
),
|
|
3976
4070
|
created_at: Timestamp,
|
|
3977
4071
|
updated_at: Timestamp
|
|
3978
4072
|
});
|
|
3979
|
-
var TopicCreate =
|
|
4073
|
+
var TopicCreate = z17.object({
|
|
3980
4074
|
slug: Slug,
|
|
3981
|
-
name:
|
|
3982
|
-
description:
|
|
4075
|
+
name: z17.string().min(1).max(120),
|
|
4076
|
+
description: z17.string().max(1e3).optional(),
|
|
3983
4077
|
translations: Topic.shape.translations.optional()
|
|
3984
4078
|
});
|
|
3985
4079
|
var TopicUpdate = TopicCreate.omit({ slug: true }).partial().refine((v) => Object.keys(v).length > 0, "at least one field");
|
|
3986
|
-
var Contact =
|
|
4080
|
+
var Contact = z17.object({
|
|
3987
4081
|
id: Id,
|
|
3988
|
-
external_id:
|
|
4082
|
+
external_id: z17.string().min(1).max(255).nullable(),
|
|
3989
4083
|
/** Stored lowercased, unique per workspace. */
|
|
3990
4084
|
email: Email,
|
|
3991
|
-
first_name:
|
|
3992
|
-
last_name:
|
|
3993
|
-
locale:
|
|
4085
|
+
first_name: z17.string().max(200).nullable(),
|
|
4086
|
+
last_name: z17.string().max(200).nullable(),
|
|
4087
|
+
locale: z17.string().min(2).max(35).nullable(),
|
|
3994
4088
|
/**
|
|
3995
4089
|
* The person's own time zone, an IANA name such as `Europe/Berlin` (A1).
|
|
3996
4090
|
* Every wall clock an automation waits for is read in it, falling back to the
|
|
@@ -3998,65 +4092,65 @@ var Contact = z16.object({
|
|
|
3998
4092
|
*/
|
|
3999
4093
|
timezone: TimezoneName.nullable(),
|
|
4000
4094
|
properties: Properties,
|
|
4001
|
-
topics:
|
|
4095
|
+
topics: z17.array(Slug),
|
|
4002
4096
|
/** The slugs of the contact's tags (S4). */
|
|
4003
|
-
tags:
|
|
4097
|
+
tags: z17.array(Slug),
|
|
4004
4098
|
created_at: Timestamp,
|
|
4005
4099
|
updated_at: Timestamp
|
|
4006
4100
|
});
|
|
4007
|
-
var ContactUpsert =
|
|
4008
|
-
external_id:
|
|
4101
|
+
var ContactUpsert = z17.object({
|
|
4102
|
+
external_id: z17.string().min(1).max(255).optional(),
|
|
4009
4103
|
email: Email.optional(),
|
|
4010
|
-
first_name:
|
|
4011
|
-
last_name:
|
|
4012
|
-
locale:
|
|
4104
|
+
first_name: z17.string().max(200).nullable().optional(),
|
|
4105
|
+
last_name: z17.string().max(200).nullable().optional(),
|
|
4106
|
+
locale: z17.string().min(2).max(35).nullable().optional(),
|
|
4013
4107
|
timezone: TimezoneName.nullable().optional(),
|
|
4014
4108
|
properties: Properties.optional(),
|
|
4015
|
-
topics:
|
|
4109
|
+
topics: z17.array(Slug).max(100).optional()
|
|
4016
4110
|
}).refine((v) => v.external_id !== void 0 || v.email !== void 0, {
|
|
4017
4111
|
message: "external_id or email is required",
|
|
4018
4112
|
path: ["email"]
|
|
4019
4113
|
});
|
|
4020
|
-
var ContactUpsertResult =
|
|
4114
|
+
var ContactUpsertResult = z17.object({
|
|
4021
4115
|
contact: Contact,
|
|
4022
|
-
created:
|
|
4116
|
+
created: z17.boolean()
|
|
4023
4117
|
});
|
|
4024
4118
|
var ContactListQuery = PageQuery.extend({
|
|
4025
|
-
email:
|
|
4026
|
-
external_id:
|
|
4119
|
+
email: z17.string().min(1).max(254).optional(),
|
|
4120
|
+
external_id: z17.string().min(1).max(255).optional(),
|
|
4027
4121
|
topic: Slug.optional()
|
|
4028
4122
|
});
|
|
4029
|
-
var ContactErased =
|
|
4030
|
-
ok:
|
|
4031
|
-
erased_messages:
|
|
4032
|
-
erased_recipients:
|
|
4033
|
-
suppressions_kept:
|
|
4123
|
+
var ContactErased = z17.object({
|
|
4124
|
+
ok: z17.literal(true),
|
|
4125
|
+
erased_messages: z17.number().int().min(0),
|
|
4126
|
+
erased_recipients: z17.number().int().min(0),
|
|
4127
|
+
suppressions_kept: z17.number().int().min(0)
|
|
4034
4128
|
});
|
|
4035
4129
|
var SUPPRESSION_REASONS = ["unsubscribed", "bounced", "complained", "manual"];
|
|
4036
|
-
var SuppressionReason =
|
|
4037
|
-
var Suppression =
|
|
4130
|
+
var SuppressionReason = z17.enum(SUPPRESSION_REASONS);
|
|
4131
|
+
var Suppression = z17.object({
|
|
4038
4132
|
id: Id,
|
|
4039
4133
|
email: Email,
|
|
4040
4134
|
reason: SuppressionReason,
|
|
4041
4135
|
topic: Slug.nullable(),
|
|
4042
4136
|
source_message_id: Id.nullable(),
|
|
4043
|
-
note:
|
|
4137
|
+
note: z17.string().max(1e3).nullable(),
|
|
4044
4138
|
created_at: Timestamp
|
|
4045
4139
|
});
|
|
4046
|
-
var SuppressionCreate =
|
|
4140
|
+
var SuppressionCreate = z17.object({
|
|
4047
4141
|
email: Email,
|
|
4048
|
-
reason:
|
|
4142
|
+
reason: z17.enum(["manual", "unsubscribed"]),
|
|
4049
4143
|
topic: Slug.nullable().optional(),
|
|
4050
|
-
note:
|
|
4144
|
+
note: z17.string().max(1e3).optional()
|
|
4051
4145
|
});
|
|
4052
4146
|
var SuppressionListQuery = PageQuery.extend({
|
|
4053
|
-
email:
|
|
4147
|
+
email: z17.string().min(1).max(254).optional(),
|
|
4054
4148
|
reason: SuppressionReason.optional(),
|
|
4055
4149
|
topic: Slug.optional()
|
|
4056
4150
|
});
|
|
4057
4151
|
|
|
4058
4152
|
// src/webhooks.ts
|
|
4059
|
-
import { z as
|
|
4153
|
+
import { z as z18 } from "zod";
|
|
4060
4154
|
var WEBHOOK_EVENT_TYPES = [
|
|
4061
4155
|
"message.sent",
|
|
4062
4156
|
"message.failed",
|
|
@@ -4100,23 +4194,23 @@ var WEBHOOK_EVENT_TYPES = [
|
|
|
4100
4194
|
"template.updated",
|
|
4101
4195
|
"template.deleted"
|
|
4102
4196
|
];
|
|
4103
|
-
var WebhookEventType =
|
|
4104
|
-
var MessageEventBase =
|
|
4197
|
+
var WebhookEventType = z18.enum(WEBHOOK_EVENT_TYPES);
|
|
4198
|
+
var MessageEventBase = z18.object({
|
|
4105
4199
|
message_id: Id,
|
|
4106
4200
|
mailing_id: Id.nullable(),
|
|
4107
4201
|
mailing_metadata: MailingMetadata.nullable(),
|
|
4108
4202
|
recipient_id: Id.nullable(),
|
|
4109
4203
|
contact_id: Id.nullable(),
|
|
4110
|
-
external_id:
|
|
4204
|
+
external_id: z18.string().nullable(),
|
|
4111
4205
|
email: Email,
|
|
4112
|
-
subject:
|
|
4206
|
+
subject: z18.string(),
|
|
4113
4207
|
topic: Slug.nullable(),
|
|
4114
|
-
provider_message_id:
|
|
4115
|
-
is_test:
|
|
4208
|
+
provider_message_id: z18.string().nullable(),
|
|
4209
|
+
is_test: z18.boolean()
|
|
4116
4210
|
});
|
|
4117
4211
|
var MessageSentData = MessageEventBase.extend({
|
|
4118
4212
|
/** The final HTML as sent, so the client can archive it beside its own records. */
|
|
4119
|
-
html:
|
|
4213
|
+
html: z18.string(),
|
|
4120
4214
|
sent_at: Timestamp,
|
|
4121
4215
|
/**
|
|
4122
4216
|
* The choice each insertion made (see `Message.insertions`); absent or null
|
|
@@ -4127,20 +4221,20 @@ var MessageSentData = MessageEventBase.extend({
|
|
|
4127
4221
|
insertions: InsertionChoices.nullish()
|
|
4128
4222
|
});
|
|
4129
4223
|
var MessageFailedData = MessageEventBase.extend({
|
|
4130
|
-
error:
|
|
4224
|
+
error: z18.string(),
|
|
4131
4225
|
/** False when the provider rejected permanently; the recipient will not be retried. */
|
|
4132
|
-
retryable:
|
|
4226
|
+
retryable: z18.boolean(),
|
|
4133
4227
|
failed_at: Timestamp
|
|
4134
4228
|
});
|
|
4135
4229
|
var UNSUBSCRIBE_SOURCES = ["hosted_page", "one_click", "api", "dashboard", "signup_form"];
|
|
4136
|
-
var ContactUnsubscribedData =
|
|
4230
|
+
var ContactUnsubscribedData = z18.object({
|
|
4137
4231
|
contact_id: Id.nullable(),
|
|
4138
|
-
external_id:
|
|
4232
|
+
external_id: z18.string().nullable(),
|
|
4139
4233
|
email: Email,
|
|
4140
4234
|
/** The topic unsubscribed from; null means every topic. */
|
|
4141
4235
|
topic: Slug.nullable(),
|
|
4142
4236
|
mailing_id: Id.nullable(),
|
|
4143
|
-
source:
|
|
4237
|
+
source: z18.enum(UNSUBSCRIBE_SOURCES),
|
|
4144
4238
|
unsubscribed_at: Timestamp
|
|
4145
4239
|
});
|
|
4146
4240
|
var ContactResubscribedData = ContactUnsubscribedData.omit({ unsubscribed_at: true }).extend({
|
|
@@ -4149,142 +4243,142 @@ var ContactResubscribedData = ContactUnsubscribedData.omit({ unsubscribed_at: tr
|
|
|
4149
4243
|
* breaker undid a `bounced` block it judged false (a `contact.bounced` for the
|
|
4150
4244
|
* same address and mailing went out before); `topic` is null.
|
|
4151
4245
|
*/
|
|
4152
|
-
source:
|
|
4246
|
+
source: z18.enum([...UNSUBSCRIBE_SOURCES, "bounce_reverted"]),
|
|
4153
4247
|
resubscribed_at: Timestamp
|
|
4154
4248
|
});
|
|
4155
|
-
var ContactBouncedData =
|
|
4249
|
+
var ContactBouncedData = z18.object({
|
|
4156
4250
|
contact_id: Id.nullable(),
|
|
4157
|
-
external_id:
|
|
4251
|
+
external_id: z18.string().nullable(),
|
|
4158
4252
|
email: Email,
|
|
4159
4253
|
/** `bounced` for a hard bounce, `complained` for a spam complaint. */
|
|
4160
|
-
reason:
|
|
4254
|
+
reason: z18.enum(["bounced", "complained"]),
|
|
4161
4255
|
message_id: Id.nullable(),
|
|
4162
|
-
diagnostic:
|
|
4256
|
+
diagnostic: z18.string().nullable(),
|
|
4163
4257
|
bounced_at: Timestamp
|
|
4164
4258
|
});
|
|
4165
|
-
var MailingFinishedData =
|
|
4259
|
+
var MailingFinishedData = z18.object({
|
|
4166
4260
|
mailing_id: Id,
|
|
4167
4261
|
mailing_metadata: MailingMetadata,
|
|
4168
|
-
status:
|
|
4262
|
+
status: z18.enum(["sent", "partially_failed", "cancelled"]),
|
|
4169
4263
|
counts: MailingCounts,
|
|
4170
4264
|
finished_at: Timestamp
|
|
4171
4265
|
});
|
|
4172
|
-
var ContactSubscribedData =
|
|
4266
|
+
var ContactSubscribedData = z18.object({
|
|
4173
4267
|
contact_id: Id,
|
|
4174
|
-
external_id:
|
|
4268
|
+
external_id: z18.string().nullable(),
|
|
4175
4269
|
email: Email,
|
|
4176
|
-
topics:
|
|
4177
|
-
source:
|
|
4270
|
+
topics: z18.array(Slug),
|
|
4271
|
+
source: z18.enum(["signup_form", "api", "dashboard", "automation"]),
|
|
4178
4272
|
signup_form_id: Id.nullable(),
|
|
4179
|
-
signup_form_version:
|
|
4273
|
+
signup_form_version: z18.number().int().min(1).nullable(),
|
|
4180
4274
|
subscribed_at: Timestamp
|
|
4181
4275
|
});
|
|
4182
|
-
var ImportFinishedData =
|
|
4276
|
+
var ImportFinishedData = z18.object({
|
|
4183
4277
|
import_id: Id,
|
|
4184
|
-
status:
|
|
4278
|
+
status: z18.enum(["completed", "cancelled", "failed"]),
|
|
4185
4279
|
result: ImportReport.nullable(),
|
|
4186
|
-
error:
|
|
4280
|
+
error: z18.string().nullable(),
|
|
4187
4281
|
finished_at: Timestamp
|
|
4188
4282
|
});
|
|
4189
|
-
var MailingScheduledData =
|
|
4283
|
+
var MailingScheduledData = z18.object({
|
|
4190
4284
|
mailing_id: Id,
|
|
4191
4285
|
mailing_metadata: MailingMetadata,
|
|
4192
4286
|
scheduled_at: Timestamp.nullable()
|
|
4193
4287
|
});
|
|
4194
|
-
var MailingStartedData =
|
|
4288
|
+
var MailingStartedData = z18.object({
|
|
4195
4289
|
mailing_id: Id,
|
|
4196
4290
|
mailing_metadata: MailingMetadata,
|
|
4197
|
-
trigger:
|
|
4198
|
-
recipients:
|
|
4291
|
+
trigger: z18.enum(["send", "schedule"]),
|
|
4292
|
+
recipients: z18.number().int().min(0),
|
|
4199
4293
|
started_at: Timestamp
|
|
4200
4294
|
});
|
|
4201
|
-
var MailingScheduleFailedData =
|
|
4295
|
+
var MailingScheduleFailedData = z18.object({
|
|
4202
4296
|
mailing_id: Id,
|
|
4203
4297
|
mailing_metadata: MailingMetadata,
|
|
4204
|
-
code:
|
|
4205
|
-
message:
|
|
4298
|
+
code: z18.string(),
|
|
4299
|
+
message: z18.string(),
|
|
4206
4300
|
failed_at: Timestamp
|
|
4207
4301
|
});
|
|
4208
|
-
var MailingAbWinnerSelectedData =
|
|
4302
|
+
var MailingAbWinnerSelectedData = z18.object({
|
|
4209
4303
|
mailing_id: Id,
|
|
4210
4304
|
mailing_metadata: MailingMetadata,
|
|
4211
|
-
winner:
|
|
4212
|
-
decided_by:
|
|
4213
|
-
variants:
|
|
4305
|
+
winner: z18.string(),
|
|
4306
|
+
decided_by: z18.enum(["metric", "manual"]),
|
|
4307
|
+
variants: z18.array(VariantAnalytics),
|
|
4214
4308
|
decided_at: Timestamp
|
|
4215
4309
|
});
|
|
4216
|
-
var ContactTaggedData =
|
|
4310
|
+
var ContactTaggedData = z18.object({
|
|
4217
4311
|
contact_id: Id,
|
|
4218
|
-
external_id:
|
|
4312
|
+
external_id: z18.string().nullable(),
|
|
4219
4313
|
email: Email,
|
|
4220
4314
|
/** Only the tags the contact did not already have. */
|
|
4221
|
-
tags:
|
|
4222
|
-
source:
|
|
4315
|
+
tags: z18.array(Slug).min(1),
|
|
4316
|
+
source: z18.enum(["api", "dashboard", "signup_form", "import", "automation"]),
|
|
4223
4317
|
tagged_at: Timestamp
|
|
4224
4318
|
});
|
|
4225
|
-
var ContactUpdatedData =
|
|
4319
|
+
var ContactUpdatedData = z18.object({
|
|
4226
4320
|
contact_id: Id,
|
|
4227
|
-
external_id:
|
|
4321
|
+
external_id: z18.string().nullable(),
|
|
4228
4322
|
email: Email,
|
|
4229
|
-
changed:
|
|
4323
|
+
changed: z18.array(z18.string()).min(1),
|
|
4230
4324
|
properties: Properties,
|
|
4231
|
-
source:
|
|
4325
|
+
source: z18.enum(["api", "dashboard", "signup_form", "import", "automation"]),
|
|
4232
4326
|
updated_at: Timestamp
|
|
4233
4327
|
});
|
|
4234
|
-
var AutomationRunEventBase =
|
|
4328
|
+
var AutomationRunEventBase = z18.object({
|
|
4235
4329
|
automation_id: Id,
|
|
4236
|
-
automation_name:
|
|
4330
|
+
automation_name: z18.string(),
|
|
4237
4331
|
run_id: Id,
|
|
4238
|
-
version:
|
|
4332
|
+
version: z18.number().int().min(1),
|
|
4239
4333
|
contact_id: Id,
|
|
4240
|
-
external_id:
|
|
4334
|
+
external_id: z18.string().nullable(),
|
|
4241
4335
|
email: Email
|
|
4242
4336
|
});
|
|
4243
4337
|
var AutomationRunStartedData = AutomationRunEventBase.extend({
|
|
4244
4338
|
/** What let them in: a trigger kind, or `manual` for an explicit enrolment. */
|
|
4245
|
-
trigger_kind:
|
|
4339
|
+
trigger_kind: z18.string(),
|
|
4246
4340
|
entered_at: Timestamp
|
|
4247
4341
|
});
|
|
4248
4342
|
var AutomationRunCompletedData = AutomationRunEventBase.extend({
|
|
4249
|
-
last_step_id:
|
|
4343
|
+
last_step_id: z18.string().nullable(),
|
|
4250
4344
|
completed_at: Timestamp
|
|
4251
4345
|
});
|
|
4252
4346
|
var AutomationRunExitedData = AutomationRunEventBase.extend({
|
|
4253
4347
|
reason: AutomationEndReason,
|
|
4254
|
-
step_id:
|
|
4348
|
+
step_id: z18.string().nullable(),
|
|
4255
4349
|
exited_at: Timestamp
|
|
4256
4350
|
});
|
|
4257
4351
|
var AutomationRunFailedData = AutomationRunEventBase.extend({
|
|
4258
|
-
reason:
|
|
4259
|
-
step_id:
|
|
4352
|
+
reason: z18.string(),
|
|
4353
|
+
step_id: z18.string().nullable(),
|
|
4260
4354
|
failed_at: Timestamp
|
|
4261
4355
|
});
|
|
4262
4356
|
var AutomationWebhookData = AutomationRunEventBase.extend({
|
|
4263
|
-
step_id:
|
|
4357
|
+
step_id: z18.string(),
|
|
4264
4358
|
/** The step's own label, when it was given one, so a receiver can branch on a name. */
|
|
4265
|
-
step_label:
|
|
4359
|
+
step_label: z18.string().nullable(),
|
|
4266
4360
|
/** Whatever the step carries, verbatim. Null when it carries nothing. */
|
|
4267
4361
|
payload: JsonValue.nullable(),
|
|
4268
4362
|
fired_at: Timestamp
|
|
4269
4363
|
});
|
|
4270
|
-
var TemplateEventBase =
|
|
4364
|
+
var TemplateEventBase = z18.object({
|
|
4271
4365
|
template_id: Id,
|
|
4272
|
-
name:
|
|
4273
|
-
version:
|
|
4274
|
-
source:
|
|
4366
|
+
name: z18.string().min(1).max(200),
|
|
4367
|
+
version: z18.number().int().min(1),
|
|
4368
|
+
source: z18.enum(["api", "dashboard", "mjml_import"])
|
|
4275
4369
|
});
|
|
4276
4370
|
var TemplateCreatedData = TemplateEventBase.extend({ created_at: Timestamp });
|
|
4277
|
-
var TemplateUpdatedData = TemplateEventBase.extend({ archived:
|
|
4371
|
+
var TemplateUpdatedData = TemplateEventBase.extend({ archived: z18.boolean(), updated_at: Timestamp });
|
|
4278
4372
|
var TemplateDeletedData = TemplateEventBase.extend({ deleted_at: Timestamp });
|
|
4279
|
-
var envelope = (type, data) =>
|
|
4373
|
+
var envelope = (type, data) => z18.object({
|
|
4280
4374
|
/** Unique per event: a receiver deduplicates on it (deliveries may repeat). */
|
|
4281
4375
|
id: Id,
|
|
4282
|
-
type:
|
|
4376
|
+
type: z18.literal(type),
|
|
4283
4377
|
created_at: Timestamp,
|
|
4284
4378
|
workspace_id: Id,
|
|
4285
4379
|
data
|
|
4286
4380
|
});
|
|
4287
|
-
var WebhookEvent =
|
|
4381
|
+
var WebhookEvent = z18.discriminatedUnion("type", [
|
|
4288
4382
|
envelope("message.sent", MessageSentData),
|
|
4289
4383
|
envelope("message.failed", MessageFailedData),
|
|
4290
4384
|
envelope("contact.unsubscribed", ContactUnsubscribedData),
|
|
@@ -4308,16 +4402,16 @@ var WebhookEvent = z17.discriminatedUnion("type", [
|
|
|
4308
4402
|
envelope("template.updated", TemplateUpdatedData),
|
|
4309
4403
|
envelope("template.deleted", TemplateDeletedData)
|
|
4310
4404
|
]);
|
|
4311
|
-
var WebhookEndpoint =
|
|
4405
|
+
var WebhookEndpoint = z18.object({
|
|
4312
4406
|
id: Id,
|
|
4313
|
-
url:
|
|
4314
|
-
description:
|
|
4315
|
-
events:
|
|
4316
|
-
enabled:
|
|
4407
|
+
url: z18.string().url(),
|
|
4408
|
+
description: z18.string().max(500).nullable(),
|
|
4409
|
+
events: z18.array(WebhookEventType).min(1),
|
|
4410
|
+
enabled: z18.boolean(),
|
|
4317
4411
|
created_at: Timestamp,
|
|
4318
4412
|
updated_at: Timestamp
|
|
4319
4413
|
});
|
|
4320
|
-
var WebhookUrl =
|
|
4414
|
+
var WebhookUrl = z18.string().url().refine((u) => {
|
|
4321
4415
|
try {
|
|
4322
4416
|
const url = new URL(u);
|
|
4323
4417
|
if (url.protocol === "https:") return true;
|
|
@@ -4326,35 +4420,35 @@ var WebhookUrl = z17.string().url().refine((u) => {
|
|
|
4326
4420
|
return false;
|
|
4327
4421
|
}
|
|
4328
4422
|
}, "must be https (http only for localhost)");
|
|
4329
|
-
var WebhookEndpointCreate =
|
|
4423
|
+
var WebhookEndpointCreate = z18.object({
|
|
4330
4424
|
url: WebhookUrl,
|
|
4331
|
-
description:
|
|
4332
|
-
events:
|
|
4333
|
-
enabled:
|
|
4425
|
+
description: z18.string().max(500).optional(),
|
|
4426
|
+
events: z18.array(WebhookEventType).min(1),
|
|
4427
|
+
enabled: z18.boolean().optional()
|
|
4334
4428
|
});
|
|
4335
|
-
var WebhookEndpointUpdate =
|
|
4429
|
+
var WebhookEndpointUpdate = z18.object({
|
|
4336
4430
|
url: WebhookUrl,
|
|
4337
|
-
description:
|
|
4338
|
-
events:
|
|
4339
|
-
enabled:
|
|
4431
|
+
description: z18.string().max(500).nullable(),
|
|
4432
|
+
events: z18.array(WebhookEventType).min(1),
|
|
4433
|
+
enabled: z18.boolean()
|
|
4340
4434
|
}).partial().refine((v) => Object.keys(v).length > 0, "at least one field");
|
|
4341
|
-
var WebhookEndpointWithSecret =
|
|
4435
|
+
var WebhookEndpointWithSecret = z18.object({
|
|
4342
4436
|
endpoint: WebhookEndpoint,
|
|
4343
|
-
secret:
|
|
4437
|
+
secret: z18.string().min(32)
|
|
4344
4438
|
});
|
|
4345
4439
|
var WEBHOOK_DELIVERY_STATUSES = ["pending", "succeeded", "failed"];
|
|
4346
|
-
var WebhookDeliveryStatus =
|
|
4440
|
+
var WebhookDeliveryStatus = z18.enum(WEBHOOK_DELIVERY_STATUSES);
|
|
4347
4441
|
var WEBHOOK_MAX_ATTEMPTS = 8;
|
|
4348
4442
|
var WEBHOOK_RETRY_DELAYS_SECONDS = [30, 120, 600, 1800, 3600, 7200, 21600];
|
|
4349
|
-
var WebhookDelivery =
|
|
4443
|
+
var WebhookDelivery = z18.object({
|
|
4350
4444
|
id: Id,
|
|
4351
4445
|
endpoint_id: Id,
|
|
4352
4446
|
event_id: Id,
|
|
4353
4447
|
event_type: WebhookEventType,
|
|
4354
4448
|
status: WebhookDeliveryStatus,
|
|
4355
|
-
attempts:
|
|
4356
|
-
last_status_code:
|
|
4357
|
-
last_error:
|
|
4449
|
+
attempts: z18.number().int().min(0),
|
|
4450
|
+
last_status_code: z18.number().int().min(100).max(599).nullable(),
|
|
4451
|
+
last_error: z18.string().nullable(),
|
|
4358
4452
|
next_attempt_at: Timestamp.nullable(),
|
|
4359
4453
|
delivered_at: Timestamp.nullable(),
|
|
4360
4454
|
created_at: Timestamp
|
|
@@ -4363,7 +4457,7 @@ var WebhookDeliveryListQuery = PageQuery.extend({
|
|
|
4363
4457
|
status: WebhookDeliveryStatus.optional(),
|
|
4364
4458
|
event_type: WebhookEventType.optional()
|
|
4365
4459
|
});
|
|
4366
|
-
var WebhookDeliveryParams =
|
|
4460
|
+
var WebhookDeliveryParams = z18.object({ id: Id, delivery_id: Id });
|
|
4367
4461
|
|
|
4368
4462
|
// src/webhook-signing.ts
|
|
4369
4463
|
var WEBHOOK_SIGNATURE_HEADER = "x-mail-signature";
|
|
@@ -4430,99 +4524,99 @@ async function verifyWebhook(input) {
|
|
|
4430
4524
|
}
|
|
4431
4525
|
|
|
4432
4526
|
// src/billing.ts
|
|
4433
|
-
import { z as
|
|
4527
|
+
import { z as z19 } from "zod";
|
|
4434
4528
|
var PLAN_IDS = ["free", "starter", "growth", "design_partner"];
|
|
4435
|
-
var PlanId =
|
|
4436
|
-
var PlanLimits =
|
|
4437
|
-
monthly_messages:
|
|
4438
|
-
contacts:
|
|
4439
|
-
members:
|
|
4440
|
-
providers:
|
|
4441
|
-
webhook_endpoints:
|
|
4529
|
+
var PlanId = z19.enum(PLAN_IDS);
|
|
4530
|
+
var PlanLimits = z19.object({
|
|
4531
|
+
monthly_messages: z19.number().int().min(0).nullable(),
|
|
4532
|
+
contacts: z19.number().int().min(0).nullable(),
|
|
4533
|
+
members: z19.number().int().min(1).nullable(),
|
|
4534
|
+
providers: z19.number().int().min(1).nullable(),
|
|
4535
|
+
webhook_endpoints: z19.number().int().min(0).nullable(),
|
|
4442
4536
|
/** Automations that may be live (active or paused) at once (A1). */
|
|
4443
|
-
active_automations:
|
|
4537
|
+
active_automations: z19.number().int().min(0).nullable(),
|
|
4444
4538
|
/** Steps one automation may hold. Null is the flow's own cap, not unlimited. */
|
|
4445
|
-
automation_steps:
|
|
4539
|
+
automation_steps: z19.number().int().min(1).nullable(),
|
|
4446
4540
|
/** Own domains Lumitra Mail sends from (managed sending domains); 0 when the plan has none. */
|
|
4447
|
-
sending_domains:
|
|
4541
|
+
sending_domains: z19.number().int().min(0).nullable()
|
|
4448
4542
|
});
|
|
4449
|
-
var PlanFeatures =
|
|
4543
|
+
var PlanFeatures = z19.object({
|
|
4450
4544
|
/** A/B tests of subject and content on a mailing (S4). */
|
|
4451
|
-
ab_testing:
|
|
4545
|
+
ab_testing: z19.boolean(),
|
|
4452
4546
|
/** Open and click tracking, still off until a workspace turns it on (`settings.tracking_enabled`). */
|
|
4453
|
-
tracking:
|
|
4547
|
+
tracking: z19.boolean(),
|
|
4454
4548
|
/** Automations: flows a person walks through step by step (A1). */
|
|
4455
|
-
automations:
|
|
4549
|
+
automations: z19.boolean()
|
|
4456
4550
|
});
|
|
4457
4551
|
var PLAN_FEATURES = ["ab_testing", "tracking", "automations"];
|
|
4458
|
-
var Plan =
|
|
4552
|
+
var Plan = z19.object({
|
|
4459
4553
|
id: PlanId,
|
|
4460
|
-
name:
|
|
4554
|
+
name: z19.string().min(1),
|
|
4461
4555
|
/** Price in the smallest currency unit per month; null for plans not sold. */
|
|
4462
|
-
monthly_price_cents:
|
|
4463
|
-
currency:
|
|
4556
|
+
monthly_price_cents: z19.number().int().min(0).nullable(),
|
|
4557
|
+
currency: z19.string().length(3),
|
|
4464
4558
|
limits: PlanLimits,
|
|
4465
4559
|
features: PlanFeatures
|
|
4466
4560
|
});
|
|
4467
|
-
var CatalogPlan = Plan.extend({ sellable:
|
|
4468
|
-
var Subscription =
|
|
4561
|
+
var CatalogPlan = Plan.extend({ sellable: z19.boolean() });
|
|
4562
|
+
var Subscription = z19.object({
|
|
4469
4563
|
workspace_id: Id,
|
|
4470
4564
|
plan: PlanId,
|
|
4471
|
-
status:
|
|
4565
|
+
status: z19.enum(["active", "trialing", "past_due", "cancelled"]),
|
|
4472
4566
|
current_period_start: Timestamp,
|
|
4473
4567
|
current_period_end: Timestamp,
|
|
4474
|
-
cancel_at_period_end:
|
|
4568
|
+
cancel_at_period_end: z19.boolean(),
|
|
4475
4569
|
/**
|
|
4476
4570
|
* A design partner outside billing (plan `design_partner`, no limits, no
|
|
4477
4571
|
* checkout). Set only by an operator, never through the API.
|
|
4478
4572
|
*/
|
|
4479
|
-
billing_exempt:
|
|
4573
|
+
billing_exempt: z19.boolean(),
|
|
4480
4574
|
/**
|
|
4481
4575
|
* Own sending domains bought on top of the plan's included ones (the
|
|
4482
4576
|
* add-on), each a monthly charge on the same subscription. 0 without the
|
|
4483
4577
|
* add-on; the usage limit `sending_domains` is the plan's plus these.
|
|
4484
4578
|
*/
|
|
4485
|
-
extra_sending_domains:
|
|
4579
|
+
extra_sending_domains: z19.number().int().min(0)
|
|
4486
4580
|
});
|
|
4487
|
-
var BillingAddons =
|
|
4488
|
-
sending_domain:
|
|
4489
|
-
monthly_price_cents:
|
|
4490
|
-
currency:
|
|
4491
|
-
sellable:
|
|
4581
|
+
var BillingAddons = z19.object({
|
|
4582
|
+
sending_domain: z19.object({
|
|
4583
|
+
monthly_price_cents: z19.number().int().min(0),
|
|
4584
|
+
currency: z19.string().length(3),
|
|
4585
|
+
sellable: z19.boolean()
|
|
4492
4586
|
})
|
|
4493
4587
|
});
|
|
4494
4588
|
var MAX_EXTRA_SENDING_DOMAINS = 100;
|
|
4495
|
-
var ExtraSendingDomainsUpdate =
|
|
4589
|
+
var ExtraSendingDomainsUpdate = z19.object({ quantity: z19.number().int().min(0).max(MAX_EXTRA_SENDING_DOMAINS) });
|
|
4496
4590
|
var USAGE_METRICS = ["messages", "contacts", "members", "providers", "webhook_endpoints", "active_automations", "sending_domains"];
|
|
4497
|
-
var UsageMetric =
|
|
4591
|
+
var UsageMetric = z19.enum(USAGE_METRICS);
|
|
4498
4592
|
var USAGE_WARNING_RATIO = 0.8;
|
|
4499
|
-
var UsageWarning =
|
|
4593
|
+
var UsageWarning = z19.object({
|
|
4500
4594
|
metric: UsageMetric,
|
|
4501
|
-
used:
|
|
4502
|
-
limit:
|
|
4595
|
+
used: z19.number().int().min(0),
|
|
4596
|
+
limit: z19.number().int().min(0),
|
|
4503
4597
|
/** `approaching`: at or above USAGE_WARNING_RATIO of the limit; `reached`: at or above the limit. */
|
|
4504
|
-
level:
|
|
4598
|
+
level: z19.enum(["approaching", "reached"])
|
|
4505
4599
|
});
|
|
4506
|
-
var TermsStatus =
|
|
4507
|
-
var Usage =
|
|
4600
|
+
var TermsStatus = z19.object({ accepted_version: z19.string().nullable(), current_version: z19.string() });
|
|
4601
|
+
var Usage = z19.object({
|
|
4508
4602
|
plan: PlanId,
|
|
4509
4603
|
period_start: Timestamp,
|
|
4510
4604
|
period_end: Timestamp,
|
|
4511
|
-
metrics:
|
|
4512
|
-
warnings:
|
|
4605
|
+
metrics: z19.record(UsageMetric, z19.object({ used: z19.number().int().min(0), limit: z19.number().int().min(0).nullable() })),
|
|
4606
|
+
warnings: z19.array(UsageWarning),
|
|
4513
4607
|
terms: TermsStatus
|
|
4514
4608
|
});
|
|
4515
|
-
var TermsAcceptance =
|
|
4516
|
-
var CheckoutRequest =
|
|
4517
|
-
plan:
|
|
4518
|
-
success_url:
|
|
4519
|
-
cancel_url:
|
|
4609
|
+
var TermsAcceptance = z19.object({ accept_terms: AcceptTerms });
|
|
4610
|
+
var CheckoutRequest = z19.object({
|
|
4611
|
+
plan: z19.enum(["starter", "growth"]),
|
|
4612
|
+
success_url: z19.string().url(),
|
|
4613
|
+
cancel_url: z19.string().url(),
|
|
4520
4614
|
/** The buyer accepted the terms of service and the processing agreement of this version. */
|
|
4521
4615
|
accept_terms: AcceptTerms
|
|
4522
4616
|
});
|
|
4523
|
-
var CheckoutSession =
|
|
4524
|
-
var PortalRequest =
|
|
4525
|
-
var PortalSession =
|
|
4617
|
+
var CheckoutSession = z19.object({ url: z19.string().url() });
|
|
4618
|
+
var PortalRequest = z19.object({ return_url: z19.string().url() });
|
|
4619
|
+
var PortalSession = z19.object({ url: z19.string().url() });
|
|
4526
4620
|
var USAGE_WARNING_HEADER = "x-mail-usage-warning";
|
|
4527
4621
|
function formatUsageWarningHeader(warnings) {
|
|
4528
4622
|
if (warnings.length === 0) return null;
|
|
@@ -4542,7 +4636,7 @@ function parseUsageWarningHeader(value) {
|
|
|
4542
4636
|
}
|
|
4543
4637
|
|
|
4544
4638
|
// src/routes.ts
|
|
4545
|
-
import { z as
|
|
4639
|
+
import { z as z20 } from "zod";
|
|
4546
4640
|
var list = (item) => page(item);
|
|
4547
4641
|
var foundationRoutes = {
|
|
4548
4642
|
"workspaces.create": {
|
|
@@ -4788,7 +4882,7 @@ var templateRoutes = {
|
|
|
4788
4882
|
path: "/v1/templates/:id/export",
|
|
4789
4883
|
params: IdParams,
|
|
4790
4884
|
query: TemplateExportQuery,
|
|
4791
|
-
response:
|
|
4885
|
+
response: z20.string(),
|
|
4792
4886
|
responseType: "text",
|
|
4793
4887
|
status: 200,
|
|
4794
4888
|
access: "read",
|
|
@@ -5168,7 +5262,7 @@ var sendingRoutes = {
|
|
|
5168
5262
|
path: "/v1/mailings/:id/export",
|
|
5169
5263
|
params: IdParams,
|
|
5170
5264
|
query: MailingExportQuery,
|
|
5171
|
-
response:
|
|
5265
|
+
response: z20.string(),
|
|
5172
5266
|
responseType: "text",
|
|
5173
5267
|
status: 200,
|
|
5174
5268
|
access: "read",
|
|
@@ -5435,7 +5529,7 @@ var platformRoutes = {
|
|
|
5435
5529
|
"contactProperties.list": {
|
|
5436
5530
|
method: "GET",
|
|
5437
5531
|
path: "/v1/contact-properties",
|
|
5438
|
-
response:
|
|
5532
|
+
response: z20.object({ data: z20.array(ContactPropertyDefinition) }),
|
|
5439
5533
|
status: 200,
|
|
5440
5534
|
access: "read",
|
|
5441
5535
|
phase: "S4"
|
|
@@ -5734,7 +5828,7 @@ var billingRoutes = {
|
|
|
5734
5828
|
"billing.plans": {
|
|
5735
5829
|
method: "GET",
|
|
5736
5830
|
path: "/v1/billing/plans",
|
|
5737
|
-
response:
|
|
5831
|
+
response: z20.object({ data: z20.array(CatalogPlan), addons: BillingAddons }),
|
|
5738
5832
|
status: 200,
|
|
5739
5833
|
access: "read",
|
|
5740
5834
|
phase: "S5"
|
|
@@ -5785,6 +5879,44 @@ var billingRoutes = {
|
|
|
5785
5879
|
phase: "S5"
|
|
5786
5880
|
}
|
|
5787
5881
|
};
|
|
5882
|
+
var domainBuyingRoutes = {
|
|
5883
|
+
"domains.search": {
|
|
5884
|
+
method: "GET",
|
|
5885
|
+
path: "/v1/domains/search",
|
|
5886
|
+
query: DomainSearchQuery,
|
|
5887
|
+
response: DomainSearchResult,
|
|
5888
|
+
status: 200,
|
|
5889
|
+
access: "admin",
|
|
5890
|
+
phase: "S5"
|
|
5891
|
+
},
|
|
5892
|
+
"domainOrders.create": {
|
|
5893
|
+
method: "POST",
|
|
5894
|
+
path: "/v1/domain-orders",
|
|
5895
|
+
body: DomainOrderCreate,
|
|
5896
|
+
response: DomainOrder,
|
|
5897
|
+
status: 201,
|
|
5898
|
+
access: "admin",
|
|
5899
|
+
phase: "S5"
|
|
5900
|
+
},
|
|
5901
|
+
"domainOrders.list": {
|
|
5902
|
+
method: "GET",
|
|
5903
|
+
path: "/v1/domain-orders",
|
|
5904
|
+
query: PageQuery,
|
|
5905
|
+
response: list(DomainOrder),
|
|
5906
|
+
status: 200,
|
|
5907
|
+
access: "admin",
|
|
5908
|
+
phase: "S5"
|
|
5909
|
+
},
|
|
5910
|
+
"domainOrders.get": {
|
|
5911
|
+
method: "GET",
|
|
5912
|
+
path: "/v1/domain-orders/:id",
|
|
5913
|
+
params: IdParams,
|
|
5914
|
+
response: DomainOrder,
|
|
5915
|
+
status: 200,
|
|
5916
|
+
access: "admin",
|
|
5917
|
+
phase: "S5"
|
|
5918
|
+
}
|
|
5919
|
+
};
|
|
5788
5920
|
var inviteRoutes = {
|
|
5789
5921
|
"invites.create": {
|
|
5790
5922
|
method: "POST",
|
|
@@ -5894,7 +6026,7 @@ var automationRoutes = {
|
|
|
5894
6026
|
method: "POST",
|
|
5895
6027
|
path: "/v1/automations/:id/pause",
|
|
5896
6028
|
params: IdParams,
|
|
5897
|
-
body:
|
|
6029
|
+
body: z20.object({}).strict(),
|
|
5898
6030
|
response: Automation,
|
|
5899
6031
|
status: 200,
|
|
5900
6032
|
access: "write",
|
|
@@ -5904,7 +6036,7 @@ var automationRoutes = {
|
|
|
5904
6036
|
method: "POST",
|
|
5905
6037
|
path: "/v1/automations/:id/resume",
|
|
5906
6038
|
params: IdParams,
|
|
5907
|
-
body:
|
|
6039
|
+
body: z20.object({}).strict(),
|
|
5908
6040
|
response: Automation,
|
|
5909
6041
|
status: 200,
|
|
5910
6042
|
access: "write",
|
|
@@ -5914,7 +6046,7 @@ var automationRoutes = {
|
|
|
5914
6046
|
method: "POST",
|
|
5915
6047
|
path: "/v1/automations/:id/archive",
|
|
5916
6048
|
params: IdParams,
|
|
5917
|
-
body:
|
|
6049
|
+
body: z20.object({}).strict(),
|
|
5918
6050
|
response: Automation,
|
|
5919
6051
|
status: 200,
|
|
5920
6052
|
access: "write",
|
|
@@ -6029,10 +6161,13 @@ var routes = {
|
|
|
6029
6161
|
...inviteRoutes,
|
|
6030
6162
|
...platformRoutes,
|
|
6031
6163
|
...billingRoutes,
|
|
6164
|
+
...domainBuyingRoutes,
|
|
6032
6165
|
...automationRoutes
|
|
6033
6166
|
};
|
|
6034
6167
|
var TRUSTED_APP_OPERATIONS = {
|
|
6035
|
-
booking: ["workspaces.list", "workspace.update", "providers.list", "sendingDomains.list", "apiKeys.create", "apiKeys.revoke"]
|
|
6168
|
+
booking: ["workspaces.list", "workspace.update", "providers.list", "sendingDomains.list", "apiKeys.create", "apiKeys.revoke"],
|
|
6169
|
+
// The shop's receipt email needs exactly what connecting a booking page needs.
|
|
6170
|
+
sites: ["workspaces.list", "workspace.update", "providers.list", "sendingDomains.list", "apiKeys.create", "apiKeys.revoke"]
|
|
6036
6171
|
};
|
|
6037
6172
|
function trustedAppMayCall(app, id) {
|
|
6038
6173
|
return TRUSTED_APP_OPERATIONS[app].includes(id);
|
|
@@ -6193,10 +6328,24 @@ export {
|
|
|
6193
6328
|
DEFAULT_INVITE_TTL_DAYS,
|
|
6194
6329
|
DEFAULT_PAGE_LIMIT,
|
|
6195
6330
|
DOCUMENT_SCHEMA_VERSIONS,
|
|
6331
|
+
DOMAIN_BUYING_BLOCKS,
|
|
6332
|
+
DOMAIN_BUYING_NOT_CONFIGURED_REASON,
|
|
6333
|
+
DOMAIN_ORDER_STATES,
|
|
6334
|
+
DOMAIN_PRICE_CHANGED_REASON,
|
|
6335
|
+
DOMAIN_UNAVAILABLE_REASONS,
|
|
6196
6336
|
DateOnly,
|
|
6197
6337
|
DatePassedAnswer,
|
|
6198
6338
|
DelayStep,
|
|
6199
6339
|
DocumentSchemaVersion,
|
|
6340
|
+
DomainBuyingBlock,
|
|
6341
|
+
DomainOffer,
|
|
6342
|
+
DomainOrder,
|
|
6343
|
+
DomainOrderCreate,
|
|
6344
|
+
DomainOrderState,
|
|
6345
|
+
DomainRegistrant,
|
|
6346
|
+
DomainSearchQuery,
|
|
6347
|
+
DomainSearchResult,
|
|
6348
|
+
DomainUnavailableReason,
|
|
6200
6349
|
EDITABLE_MAILING_STATUSES,
|
|
6201
6350
|
ERROR_CODES,
|
|
6202
6351
|
ERROR_STATUS,
|
|
@@ -6280,6 +6429,7 @@ export {
|
|
|
6280
6429
|
MAX_ASSET_BYTES,
|
|
6281
6430
|
MAX_DELAY_SECONDS,
|
|
6282
6431
|
MAX_DOCUMENT_BYTES,
|
|
6432
|
+
MAX_DOMAIN_ORDERS_PER_DAY,
|
|
6283
6433
|
MAX_ENGAGEMENT_DAYS,
|
|
6284
6434
|
MAX_EXPORT_WARNINGS_HEADER_LENGTH,
|
|
6285
6435
|
MAX_EXTRA_SENDING_DOMAINS,
|
|
@@ -6590,6 +6740,7 @@ export {
|
|
|
6590
6740
|
demoteForSave,
|
|
6591
6741
|
demotedBySave,
|
|
6592
6742
|
describeMissingTexts,
|
|
6743
|
+
domainBuyingRoutes,
|
|
6593
6744
|
draftDocument,
|
|
6594
6745
|
draftInsertionProblems,
|
|
6595
6746
|
draftsDirty,
|