@marlinjai/mail-contract 0.19.0 → 0.21.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +851 -53
- package/dist/index.d.ts +851 -53
- package/dist/index.js +369 -185
- package/dist/index.mjs +351 -185
- 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
|
});
|
|
@@ -3037,6 +3040,15 @@ var AUDIT_ACTIONS = [
|
|
|
3037
3040
|
"billing.subscription_changed",
|
|
3038
3041
|
"billing.exemption_changed",
|
|
3039
3042
|
"billing.extra_sending_domains_changed",
|
|
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",
|
|
3040
3052
|
// A1: automations
|
|
3041
3053
|
"automation.created",
|
|
3042
3054
|
"automation.updated",
|
|
@@ -3051,7 +3063,7 @@ var AUDIT_ACTIONS = [
|
|
|
3051
3063
|
"event.recorded"
|
|
3052
3064
|
];
|
|
3053
3065
|
var AuditAction = z12.enum(AUDIT_ACTIONS);
|
|
3054
|
-
var TRUSTED_APPS = ["booking"];
|
|
3066
|
+
var TRUSTED_APPS = ["booking", "sites"];
|
|
3055
3067
|
var TrustedApp = z12.enum(TRUSTED_APPS);
|
|
3056
3068
|
var AuditActor = z12.discriminatedUnion("type", [
|
|
3057
3069
|
z12.object({
|
|
@@ -3960,36 +3972,119 @@ function senderOnDomain(input, ctx) {
|
|
|
3960
3972
|
var SendingDomainCreate = z15.object({ domain: SendingDomainName, ...SenderFields }).superRefine(senderOnDomain);
|
|
3961
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");
|
|
3962
3974
|
|
|
3963
|
-
// src/
|
|
3975
|
+
// src/domains.ts
|
|
3964
3976
|
import { z as z16 } from "zod";
|
|
3965
|
-
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({
|
|
3966
4061
|
id: Id,
|
|
3967
4062
|
slug: Slug,
|
|
3968
|
-
name:
|
|
4063
|
+
name: z17.string().min(1).max(120),
|
|
3969
4064
|
/** Shown on the hosted preference page. */
|
|
3970
|
-
description:
|
|
4065
|
+
description: z17.string().max(1e3).nullable(),
|
|
3971
4066
|
/** Translations of `name` and `description` per locale, for the hosted page. */
|
|
3972
|
-
translations:
|
|
3973
|
-
|
|
4067
|
+
translations: z17.record(
|
|
4068
|
+
z17.object({ name: z17.string().min(1).max(120), description: z17.string().max(1e3).nullable() })
|
|
3974
4069
|
),
|
|
3975
4070
|
created_at: Timestamp,
|
|
3976
4071
|
updated_at: Timestamp
|
|
3977
4072
|
});
|
|
3978
|
-
var TopicCreate =
|
|
4073
|
+
var TopicCreate = z17.object({
|
|
3979
4074
|
slug: Slug,
|
|
3980
|
-
name:
|
|
3981
|
-
description:
|
|
4075
|
+
name: z17.string().min(1).max(120),
|
|
4076
|
+
description: z17.string().max(1e3).optional(),
|
|
3982
4077
|
translations: Topic.shape.translations.optional()
|
|
3983
4078
|
});
|
|
3984
4079
|
var TopicUpdate = TopicCreate.omit({ slug: true }).partial().refine((v) => Object.keys(v).length > 0, "at least one field");
|
|
3985
|
-
var Contact =
|
|
4080
|
+
var Contact = z17.object({
|
|
3986
4081
|
id: Id,
|
|
3987
|
-
external_id:
|
|
4082
|
+
external_id: z17.string().min(1).max(255).nullable(),
|
|
3988
4083
|
/** Stored lowercased, unique per workspace. */
|
|
3989
4084
|
email: Email,
|
|
3990
|
-
first_name:
|
|
3991
|
-
last_name:
|
|
3992
|
-
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(),
|
|
3993
4088
|
/**
|
|
3994
4089
|
* The person's own time zone, an IANA name such as `Europe/Berlin` (A1).
|
|
3995
4090
|
* Every wall clock an automation waits for is read in it, falling back to the
|
|
@@ -3997,65 +4092,65 @@ var Contact = z16.object({
|
|
|
3997
4092
|
*/
|
|
3998
4093
|
timezone: TimezoneName.nullable(),
|
|
3999
4094
|
properties: Properties,
|
|
4000
|
-
topics:
|
|
4095
|
+
topics: z17.array(Slug),
|
|
4001
4096
|
/** The slugs of the contact's tags (S4). */
|
|
4002
|
-
tags:
|
|
4097
|
+
tags: z17.array(Slug),
|
|
4003
4098
|
created_at: Timestamp,
|
|
4004
4099
|
updated_at: Timestamp
|
|
4005
4100
|
});
|
|
4006
|
-
var ContactUpsert =
|
|
4007
|
-
external_id:
|
|
4101
|
+
var ContactUpsert = z17.object({
|
|
4102
|
+
external_id: z17.string().min(1).max(255).optional(),
|
|
4008
4103
|
email: Email.optional(),
|
|
4009
|
-
first_name:
|
|
4010
|
-
last_name:
|
|
4011
|
-
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(),
|
|
4012
4107
|
timezone: TimezoneName.nullable().optional(),
|
|
4013
4108
|
properties: Properties.optional(),
|
|
4014
|
-
topics:
|
|
4109
|
+
topics: z17.array(Slug).max(100).optional()
|
|
4015
4110
|
}).refine((v) => v.external_id !== void 0 || v.email !== void 0, {
|
|
4016
4111
|
message: "external_id or email is required",
|
|
4017
4112
|
path: ["email"]
|
|
4018
4113
|
});
|
|
4019
|
-
var ContactUpsertResult =
|
|
4114
|
+
var ContactUpsertResult = z17.object({
|
|
4020
4115
|
contact: Contact,
|
|
4021
|
-
created:
|
|
4116
|
+
created: z17.boolean()
|
|
4022
4117
|
});
|
|
4023
4118
|
var ContactListQuery = PageQuery.extend({
|
|
4024
|
-
email:
|
|
4025
|
-
external_id:
|
|
4119
|
+
email: z17.string().min(1).max(254).optional(),
|
|
4120
|
+
external_id: z17.string().min(1).max(255).optional(),
|
|
4026
4121
|
topic: Slug.optional()
|
|
4027
4122
|
});
|
|
4028
|
-
var ContactErased =
|
|
4029
|
-
ok:
|
|
4030
|
-
erased_messages:
|
|
4031
|
-
erased_recipients:
|
|
4032
|
-
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)
|
|
4033
4128
|
});
|
|
4034
4129
|
var SUPPRESSION_REASONS = ["unsubscribed", "bounced", "complained", "manual"];
|
|
4035
|
-
var SuppressionReason =
|
|
4036
|
-
var Suppression =
|
|
4130
|
+
var SuppressionReason = z17.enum(SUPPRESSION_REASONS);
|
|
4131
|
+
var Suppression = z17.object({
|
|
4037
4132
|
id: Id,
|
|
4038
4133
|
email: Email,
|
|
4039
4134
|
reason: SuppressionReason,
|
|
4040
4135
|
topic: Slug.nullable(),
|
|
4041
4136
|
source_message_id: Id.nullable(),
|
|
4042
|
-
note:
|
|
4137
|
+
note: z17.string().max(1e3).nullable(),
|
|
4043
4138
|
created_at: Timestamp
|
|
4044
4139
|
});
|
|
4045
|
-
var SuppressionCreate =
|
|
4140
|
+
var SuppressionCreate = z17.object({
|
|
4046
4141
|
email: Email,
|
|
4047
|
-
reason:
|
|
4142
|
+
reason: z17.enum(["manual", "unsubscribed"]),
|
|
4048
4143
|
topic: Slug.nullable().optional(),
|
|
4049
|
-
note:
|
|
4144
|
+
note: z17.string().max(1e3).optional()
|
|
4050
4145
|
});
|
|
4051
4146
|
var SuppressionListQuery = PageQuery.extend({
|
|
4052
|
-
email:
|
|
4147
|
+
email: z17.string().min(1).max(254).optional(),
|
|
4053
4148
|
reason: SuppressionReason.optional(),
|
|
4054
4149
|
topic: Slug.optional()
|
|
4055
4150
|
});
|
|
4056
4151
|
|
|
4057
4152
|
// src/webhooks.ts
|
|
4058
|
-
import { z as
|
|
4153
|
+
import { z as z18 } from "zod";
|
|
4059
4154
|
var WEBHOOK_EVENT_TYPES = [
|
|
4060
4155
|
"message.sent",
|
|
4061
4156
|
"message.failed",
|
|
@@ -4099,23 +4194,23 @@ var WEBHOOK_EVENT_TYPES = [
|
|
|
4099
4194
|
"template.updated",
|
|
4100
4195
|
"template.deleted"
|
|
4101
4196
|
];
|
|
4102
|
-
var WebhookEventType =
|
|
4103
|
-
var MessageEventBase =
|
|
4197
|
+
var WebhookEventType = z18.enum(WEBHOOK_EVENT_TYPES);
|
|
4198
|
+
var MessageEventBase = z18.object({
|
|
4104
4199
|
message_id: Id,
|
|
4105
4200
|
mailing_id: Id.nullable(),
|
|
4106
4201
|
mailing_metadata: MailingMetadata.nullable(),
|
|
4107
4202
|
recipient_id: Id.nullable(),
|
|
4108
4203
|
contact_id: Id.nullable(),
|
|
4109
|
-
external_id:
|
|
4204
|
+
external_id: z18.string().nullable(),
|
|
4110
4205
|
email: Email,
|
|
4111
|
-
subject:
|
|
4206
|
+
subject: z18.string(),
|
|
4112
4207
|
topic: Slug.nullable(),
|
|
4113
|
-
provider_message_id:
|
|
4114
|
-
is_test:
|
|
4208
|
+
provider_message_id: z18.string().nullable(),
|
|
4209
|
+
is_test: z18.boolean()
|
|
4115
4210
|
});
|
|
4116
4211
|
var MessageSentData = MessageEventBase.extend({
|
|
4117
4212
|
/** The final HTML as sent, so the client can archive it beside its own records. */
|
|
4118
|
-
html:
|
|
4213
|
+
html: z18.string(),
|
|
4119
4214
|
sent_at: Timestamp,
|
|
4120
4215
|
/**
|
|
4121
4216
|
* The choice each insertion made (see `Message.insertions`); absent or null
|
|
@@ -4126,20 +4221,20 @@ var MessageSentData = MessageEventBase.extend({
|
|
|
4126
4221
|
insertions: InsertionChoices.nullish()
|
|
4127
4222
|
});
|
|
4128
4223
|
var MessageFailedData = MessageEventBase.extend({
|
|
4129
|
-
error:
|
|
4224
|
+
error: z18.string(),
|
|
4130
4225
|
/** False when the provider rejected permanently; the recipient will not be retried. */
|
|
4131
|
-
retryable:
|
|
4226
|
+
retryable: z18.boolean(),
|
|
4132
4227
|
failed_at: Timestamp
|
|
4133
4228
|
});
|
|
4134
4229
|
var UNSUBSCRIBE_SOURCES = ["hosted_page", "one_click", "api", "dashboard", "signup_form"];
|
|
4135
|
-
var ContactUnsubscribedData =
|
|
4230
|
+
var ContactUnsubscribedData = z18.object({
|
|
4136
4231
|
contact_id: Id.nullable(),
|
|
4137
|
-
external_id:
|
|
4232
|
+
external_id: z18.string().nullable(),
|
|
4138
4233
|
email: Email,
|
|
4139
4234
|
/** The topic unsubscribed from; null means every topic. */
|
|
4140
4235
|
topic: Slug.nullable(),
|
|
4141
4236
|
mailing_id: Id.nullable(),
|
|
4142
|
-
source:
|
|
4237
|
+
source: z18.enum(UNSUBSCRIBE_SOURCES),
|
|
4143
4238
|
unsubscribed_at: Timestamp
|
|
4144
4239
|
});
|
|
4145
4240
|
var ContactResubscribedData = ContactUnsubscribedData.omit({ unsubscribed_at: true }).extend({
|
|
@@ -4148,142 +4243,142 @@ var ContactResubscribedData = ContactUnsubscribedData.omit({ unsubscribed_at: tr
|
|
|
4148
4243
|
* breaker undid a `bounced` block it judged false (a `contact.bounced` for the
|
|
4149
4244
|
* same address and mailing went out before); `topic` is null.
|
|
4150
4245
|
*/
|
|
4151
|
-
source:
|
|
4246
|
+
source: z18.enum([...UNSUBSCRIBE_SOURCES, "bounce_reverted"]),
|
|
4152
4247
|
resubscribed_at: Timestamp
|
|
4153
4248
|
});
|
|
4154
|
-
var ContactBouncedData =
|
|
4249
|
+
var ContactBouncedData = z18.object({
|
|
4155
4250
|
contact_id: Id.nullable(),
|
|
4156
|
-
external_id:
|
|
4251
|
+
external_id: z18.string().nullable(),
|
|
4157
4252
|
email: Email,
|
|
4158
4253
|
/** `bounced` for a hard bounce, `complained` for a spam complaint. */
|
|
4159
|
-
reason:
|
|
4254
|
+
reason: z18.enum(["bounced", "complained"]),
|
|
4160
4255
|
message_id: Id.nullable(),
|
|
4161
|
-
diagnostic:
|
|
4256
|
+
diagnostic: z18.string().nullable(),
|
|
4162
4257
|
bounced_at: Timestamp
|
|
4163
4258
|
});
|
|
4164
|
-
var MailingFinishedData =
|
|
4259
|
+
var MailingFinishedData = z18.object({
|
|
4165
4260
|
mailing_id: Id,
|
|
4166
4261
|
mailing_metadata: MailingMetadata,
|
|
4167
|
-
status:
|
|
4262
|
+
status: z18.enum(["sent", "partially_failed", "cancelled"]),
|
|
4168
4263
|
counts: MailingCounts,
|
|
4169
4264
|
finished_at: Timestamp
|
|
4170
4265
|
});
|
|
4171
|
-
var ContactSubscribedData =
|
|
4266
|
+
var ContactSubscribedData = z18.object({
|
|
4172
4267
|
contact_id: Id,
|
|
4173
|
-
external_id:
|
|
4268
|
+
external_id: z18.string().nullable(),
|
|
4174
4269
|
email: Email,
|
|
4175
|
-
topics:
|
|
4176
|
-
source:
|
|
4270
|
+
topics: z18.array(Slug),
|
|
4271
|
+
source: z18.enum(["signup_form", "api", "dashboard", "automation"]),
|
|
4177
4272
|
signup_form_id: Id.nullable(),
|
|
4178
|
-
signup_form_version:
|
|
4273
|
+
signup_form_version: z18.number().int().min(1).nullable(),
|
|
4179
4274
|
subscribed_at: Timestamp
|
|
4180
4275
|
});
|
|
4181
|
-
var ImportFinishedData =
|
|
4276
|
+
var ImportFinishedData = z18.object({
|
|
4182
4277
|
import_id: Id,
|
|
4183
|
-
status:
|
|
4278
|
+
status: z18.enum(["completed", "cancelled", "failed"]),
|
|
4184
4279
|
result: ImportReport.nullable(),
|
|
4185
|
-
error:
|
|
4280
|
+
error: z18.string().nullable(),
|
|
4186
4281
|
finished_at: Timestamp
|
|
4187
4282
|
});
|
|
4188
|
-
var MailingScheduledData =
|
|
4283
|
+
var MailingScheduledData = z18.object({
|
|
4189
4284
|
mailing_id: Id,
|
|
4190
4285
|
mailing_metadata: MailingMetadata,
|
|
4191
4286
|
scheduled_at: Timestamp.nullable()
|
|
4192
4287
|
});
|
|
4193
|
-
var MailingStartedData =
|
|
4288
|
+
var MailingStartedData = z18.object({
|
|
4194
4289
|
mailing_id: Id,
|
|
4195
4290
|
mailing_metadata: MailingMetadata,
|
|
4196
|
-
trigger:
|
|
4197
|
-
recipients:
|
|
4291
|
+
trigger: z18.enum(["send", "schedule"]),
|
|
4292
|
+
recipients: z18.number().int().min(0),
|
|
4198
4293
|
started_at: Timestamp
|
|
4199
4294
|
});
|
|
4200
|
-
var MailingScheduleFailedData =
|
|
4295
|
+
var MailingScheduleFailedData = z18.object({
|
|
4201
4296
|
mailing_id: Id,
|
|
4202
4297
|
mailing_metadata: MailingMetadata,
|
|
4203
|
-
code:
|
|
4204
|
-
message:
|
|
4298
|
+
code: z18.string(),
|
|
4299
|
+
message: z18.string(),
|
|
4205
4300
|
failed_at: Timestamp
|
|
4206
4301
|
});
|
|
4207
|
-
var MailingAbWinnerSelectedData =
|
|
4302
|
+
var MailingAbWinnerSelectedData = z18.object({
|
|
4208
4303
|
mailing_id: Id,
|
|
4209
4304
|
mailing_metadata: MailingMetadata,
|
|
4210
|
-
winner:
|
|
4211
|
-
decided_by:
|
|
4212
|
-
variants:
|
|
4305
|
+
winner: z18.string(),
|
|
4306
|
+
decided_by: z18.enum(["metric", "manual"]),
|
|
4307
|
+
variants: z18.array(VariantAnalytics),
|
|
4213
4308
|
decided_at: Timestamp
|
|
4214
4309
|
});
|
|
4215
|
-
var ContactTaggedData =
|
|
4310
|
+
var ContactTaggedData = z18.object({
|
|
4216
4311
|
contact_id: Id,
|
|
4217
|
-
external_id:
|
|
4312
|
+
external_id: z18.string().nullable(),
|
|
4218
4313
|
email: Email,
|
|
4219
4314
|
/** Only the tags the contact did not already have. */
|
|
4220
|
-
tags:
|
|
4221
|
-
source:
|
|
4315
|
+
tags: z18.array(Slug).min(1),
|
|
4316
|
+
source: z18.enum(["api", "dashboard", "signup_form", "import", "automation"]),
|
|
4222
4317
|
tagged_at: Timestamp
|
|
4223
4318
|
});
|
|
4224
|
-
var ContactUpdatedData =
|
|
4319
|
+
var ContactUpdatedData = z18.object({
|
|
4225
4320
|
contact_id: Id,
|
|
4226
|
-
external_id:
|
|
4321
|
+
external_id: z18.string().nullable(),
|
|
4227
4322
|
email: Email,
|
|
4228
|
-
changed:
|
|
4323
|
+
changed: z18.array(z18.string()).min(1),
|
|
4229
4324
|
properties: Properties,
|
|
4230
|
-
source:
|
|
4325
|
+
source: z18.enum(["api", "dashboard", "signup_form", "import", "automation"]),
|
|
4231
4326
|
updated_at: Timestamp
|
|
4232
4327
|
});
|
|
4233
|
-
var AutomationRunEventBase =
|
|
4328
|
+
var AutomationRunEventBase = z18.object({
|
|
4234
4329
|
automation_id: Id,
|
|
4235
|
-
automation_name:
|
|
4330
|
+
automation_name: z18.string(),
|
|
4236
4331
|
run_id: Id,
|
|
4237
|
-
version:
|
|
4332
|
+
version: z18.number().int().min(1),
|
|
4238
4333
|
contact_id: Id,
|
|
4239
|
-
external_id:
|
|
4334
|
+
external_id: z18.string().nullable(),
|
|
4240
4335
|
email: Email
|
|
4241
4336
|
});
|
|
4242
4337
|
var AutomationRunStartedData = AutomationRunEventBase.extend({
|
|
4243
4338
|
/** What let them in: a trigger kind, or `manual` for an explicit enrolment. */
|
|
4244
|
-
trigger_kind:
|
|
4339
|
+
trigger_kind: z18.string(),
|
|
4245
4340
|
entered_at: Timestamp
|
|
4246
4341
|
});
|
|
4247
4342
|
var AutomationRunCompletedData = AutomationRunEventBase.extend({
|
|
4248
|
-
last_step_id:
|
|
4343
|
+
last_step_id: z18.string().nullable(),
|
|
4249
4344
|
completed_at: Timestamp
|
|
4250
4345
|
});
|
|
4251
4346
|
var AutomationRunExitedData = AutomationRunEventBase.extend({
|
|
4252
4347
|
reason: AutomationEndReason,
|
|
4253
|
-
step_id:
|
|
4348
|
+
step_id: z18.string().nullable(),
|
|
4254
4349
|
exited_at: Timestamp
|
|
4255
4350
|
});
|
|
4256
4351
|
var AutomationRunFailedData = AutomationRunEventBase.extend({
|
|
4257
|
-
reason:
|
|
4258
|
-
step_id:
|
|
4352
|
+
reason: z18.string(),
|
|
4353
|
+
step_id: z18.string().nullable(),
|
|
4259
4354
|
failed_at: Timestamp
|
|
4260
4355
|
});
|
|
4261
4356
|
var AutomationWebhookData = AutomationRunEventBase.extend({
|
|
4262
|
-
step_id:
|
|
4357
|
+
step_id: z18.string(),
|
|
4263
4358
|
/** The step's own label, when it was given one, so a receiver can branch on a name. */
|
|
4264
|
-
step_label:
|
|
4359
|
+
step_label: z18.string().nullable(),
|
|
4265
4360
|
/** Whatever the step carries, verbatim. Null when it carries nothing. */
|
|
4266
4361
|
payload: JsonValue.nullable(),
|
|
4267
4362
|
fired_at: Timestamp
|
|
4268
4363
|
});
|
|
4269
|
-
var TemplateEventBase =
|
|
4364
|
+
var TemplateEventBase = z18.object({
|
|
4270
4365
|
template_id: Id,
|
|
4271
|
-
name:
|
|
4272
|
-
version:
|
|
4273
|
-
source:
|
|
4366
|
+
name: z18.string().min(1).max(200),
|
|
4367
|
+
version: z18.number().int().min(1),
|
|
4368
|
+
source: z18.enum(["api", "dashboard", "mjml_import"])
|
|
4274
4369
|
});
|
|
4275
4370
|
var TemplateCreatedData = TemplateEventBase.extend({ created_at: Timestamp });
|
|
4276
|
-
var TemplateUpdatedData = TemplateEventBase.extend({ archived:
|
|
4371
|
+
var TemplateUpdatedData = TemplateEventBase.extend({ archived: z18.boolean(), updated_at: Timestamp });
|
|
4277
4372
|
var TemplateDeletedData = TemplateEventBase.extend({ deleted_at: Timestamp });
|
|
4278
|
-
var envelope = (type, data) =>
|
|
4373
|
+
var envelope = (type, data) => z18.object({
|
|
4279
4374
|
/** Unique per event: a receiver deduplicates on it (deliveries may repeat). */
|
|
4280
4375
|
id: Id,
|
|
4281
|
-
type:
|
|
4376
|
+
type: z18.literal(type),
|
|
4282
4377
|
created_at: Timestamp,
|
|
4283
4378
|
workspace_id: Id,
|
|
4284
4379
|
data
|
|
4285
4380
|
});
|
|
4286
|
-
var WebhookEvent =
|
|
4381
|
+
var WebhookEvent = z18.discriminatedUnion("type", [
|
|
4287
4382
|
envelope("message.sent", MessageSentData),
|
|
4288
4383
|
envelope("message.failed", MessageFailedData),
|
|
4289
4384
|
envelope("contact.unsubscribed", ContactUnsubscribedData),
|
|
@@ -4307,16 +4402,16 @@ var WebhookEvent = z17.discriminatedUnion("type", [
|
|
|
4307
4402
|
envelope("template.updated", TemplateUpdatedData),
|
|
4308
4403
|
envelope("template.deleted", TemplateDeletedData)
|
|
4309
4404
|
]);
|
|
4310
|
-
var WebhookEndpoint =
|
|
4405
|
+
var WebhookEndpoint = z18.object({
|
|
4311
4406
|
id: Id,
|
|
4312
|
-
url:
|
|
4313
|
-
description:
|
|
4314
|
-
events:
|
|
4315
|
-
enabled:
|
|
4407
|
+
url: z18.string().url(),
|
|
4408
|
+
description: z18.string().max(500).nullable(),
|
|
4409
|
+
events: z18.array(WebhookEventType).min(1),
|
|
4410
|
+
enabled: z18.boolean(),
|
|
4316
4411
|
created_at: Timestamp,
|
|
4317
4412
|
updated_at: Timestamp
|
|
4318
4413
|
});
|
|
4319
|
-
var WebhookUrl =
|
|
4414
|
+
var WebhookUrl = z18.string().url().refine((u) => {
|
|
4320
4415
|
try {
|
|
4321
4416
|
const url = new URL(u);
|
|
4322
4417
|
if (url.protocol === "https:") return true;
|
|
@@ -4325,35 +4420,35 @@ var WebhookUrl = z17.string().url().refine((u) => {
|
|
|
4325
4420
|
return false;
|
|
4326
4421
|
}
|
|
4327
4422
|
}, "must be https (http only for localhost)");
|
|
4328
|
-
var WebhookEndpointCreate =
|
|
4423
|
+
var WebhookEndpointCreate = z18.object({
|
|
4329
4424
|
url: WebhookUrl,
|
|
4330
|
-
description:
|
|
4331
|
-
events:
|
|
4332
|
-
enabled:
|
|
4425
|
+
description: z18.string().max(500).optional(),
|
|
4426
|
+
events: z18.array(WebhookEventType).min(1),
|
|
4427
|
+
enabled: z18.boolean().optional()
|
|
4333
4428
|
});
|
|
4334
|
-
var WebhookEndpointUpdate =
|
|
4429
|
+
var WebhookEndpointUpdate = z18.object({
|
|
4335
4430
|
url: WebhookUrl,
|
|
4336
|
-
description:
|
|
4337
|
-
events:
|
|
4338
|
-
enabled:
|
|
4431
|
+
description: z18.string().max(500).nullable(),
|
|
4432
|
+
events: z18.array(WebhookEventType).min(1),
|
|
4433
|
+
enabled: z18.boolean()
|
|
4339
4434
|
}).partial().refine((v) => Object.keys(v).length > 0, "at least one field");
|
|
4340
|
-
var WebhookEndpointWithSecret =
|
|
4435
|
+
var WebhookEndpointWithSecret = z18.object({
|
|
4341
4436
|
endpoint: WebhookEndpoint,
|
|
4342
|
-
secret:
|
|
4437
|
+
secret: z18.string().min(32)
|
|
4343
4438
|
});
|
|
4344
4439
|
var WEBHOOK_DELIVERY_STATUSES = ["pending", "succeeded", "failed"];
|
|
4345
|
-
var WebhookDeliveryStatus =
|
|
4440
|
+
var WebhookDeliveryStatus = z18.enum(WEBHOOK_DELIVERY_STATUSES);
|
|
4346
4441
|
var WEBHOOK_MAX_ATTEMPTS = 8;
|
|
4347
4442
|
var WEBHOOK_RETRY_DELAYS_SECONDS = [30, 120, 600, 1800, 3600, 7200, 21600];
|
|
4348
|
-
var WebhookDelivery =
|
|
4443
|
+
var WebhookDelivery = z18.object({
|
|
4349
4444
|
id: Id,
|
|
4350
4445
|
endpoint_id: Id,
|
|
4351
4446
|
event_id: Id,
|
|
4352
4447
|
event_type: WebhookEventType,
|
|
4353
4448
|
status: WebhookDeliveryStatus,
|
|
4354
|
-
attempts:
|
|
4355
|
-
last_status_code:
|
|
4356
|
-
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(),
|
|
4357
4452
|
next_attempt_at: Timestamp.nullable(),
|
|
4358
4453
|
delivered_at: Timestamp.nullable(),
|
|
4359
4454
|
created_at: Timestamp
|
|
@@ -4362,7 +4457,7 @@ var WebhookDeliveryListQuery = PageQuery.extend({
|
|
|
4362
4457
|
status: WebhookDeliveryStatus.optional(),
|
|
4363
4458
|
event_type: WebhookEventType.optional()
|
|
4364
4459
|
});
|
|
4365
|
-
var WebhookDeliveryParams =
|
|
4460
|
+
var WebhookDeliveryParams = z18.object({ id: Id, delivery_id: Id });
|
|
4366
4461
|
|
|
4367
4462
|
// src/webhook-signing.ts
|
|
4368
4463
|
var WEBHOOK_SIGNATURE_HEADER = "x-mail-signature";
|
|
@@ -4429,96 +4524,99 @@ async function verifyWebhook(input) {
|
|
|
4429
4524
|
}
|
|
4430
4525
|
|
|
4431
4526
|
// src/billing.ts
|
|
4432
|
-
import { z as
|
|
4527
|
+
import { z as z19 } from "zod";
|
|
4433
4528
|
var PLAN_IDS = ["free", "starter", "growth", "design_partner"];
|
|
4434
|
-
var PlanId =
|
|
4435
|
-
var PlanLimits =
|
|
4436
|
-
monthly_messages:
|
|
4437
|
-
contacts:
|
|
4438
|
-
members:
|
|
4439
|
-
providers:
|
|
4440
|
-
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(),
|
|
4441
4536
|
/** Automations that may be live (active or paused) at once (A1). */
|
|
4442
|
-
active_automations:
|
|
4537
|
+
active_automations: z19.number().int().min(0).nullable(),
|
|
4443
4538
|
/** Steps one automation may hold. Null is the flow's own cap, not unlimited. */
|
|
4444
|
-
automation_steps:
|
|
4539
|
+
automation_steps: z19.number().int().min(1).nullable(),
|
|
4445
4540
|
/** Own domains Lumitra Mail sends from (managed sending domains); 0 when the plan has none. */
|
|
4446
|
-
sending_domains:
|
|
4541
|
+
sending_domains: z19.number().int().min(0).nullable()
|
|
4447
4542
|
});
|
|
4448
|
-
var PlanFeatures =
|
|
4543
|
+
var PlanFeatures = z19.object({
|
|
4449
4544
|
/** A/B tests of subject and content on a mailing (S4). */
|
|
4450
|
-
ab_testing:
|
|
4545
|
+
ab_testing: z19.boolean(),
|
|
4451
4546
|
/** Open and click tracking, still off until a workspace turns it on (`settings.tracking_enabled`). */
|
|
4452
|
-
tracking:
|
|
4547
|
+
tracking: z19.boolean(),
|
|
4453
4548
|
/** Automations: flows a person walks through step by step (A1). */
|
|
4454
|
-
automations:
|
|
4549
|
+
automations: z19.boolean()
|
|
4455
4550
|
});
|
|
4456
4551
|
var PLAN_FEATURES = ["ab_testing", "tracking", "automations"];
|
|
4457
|
-
var Plan =
|
|
4552
|
+
var Plan = z19.object({
|
|
4458
4553
|
id: PlanId,
|
|
4459
|
-
name:
|
|
4554
|
+
name: z19.string().min(1),
|
|
4460
4555
|
/** Price in the smallest currency unit per month; null for plans not sold. */
|
|
4461
|
-
monthly_price_cents:
|
|
4462
|
-
currency:
|
|
4556
|
+
monthly_price_cents: z19.number().int().min(0).nullable(),
|
|
4557
|
+
currency: z19.string().length(3),
|
|
4463
4558
|
limits: PlanLimits,
|
|
4464
4559
|
features: PlanFeatures
|
|
4465
4560
|
});
|
|
4466
|
-
var CatalogPlan = Plan.extend({ sellable:
|
|
4467
|
-
var Subscription =
|
|
4561
|
+
var CatalogPlan = Plan.extend({ sellable: z19.boolean() });
|
|
4562
|
+
var Subscription = z19.object({
|
|
4468
4563
|
workspace_id: Id,
|
|
4469
4564
|
plan: PlanId,
|
|
4470
|
-
status:
|
|
4565
|
+
status: z19.enum(["active", "trialing", "past_due", "cancelled"]),
|
|
4471
4566
|
current_period_start: Timestamp,
|
|
4472
4567
|
current_period_end: Timestamp,
|
|
4473
|
-
cancel_at_period_end:
|
|
4568
|
+
cancel_at_period_end: z19.boolean(),
|
|
4474
4569
|
/**
|
|
4475
4570
|
* A design partner outside billing (plan `design_partner`, no limits, no
|
|
4476
4571
|
* checkout). Set only by an operator, never through the API.
|
|
4477
4572
|
*/
|
|
4478
|
-
billing_exempt:
|
|
4573
|
+
billing_exempt: z19.boolean(),
|
|
4479
4574
|
/**
|
|
4480
4575
|
* Own sending domains bought on top of the plan's included ones (the
|
|
4481
4576
|
* add-on), each a monthly charge on the same subscription. 0 without the
|
|
4482
4577
|
* add-on; the usage limit `sending_domains` is the plan's plus these.
|
|
4483
4578
|
*/
|
|
4484
|
-
extra_sending_domains:
|
|
4579
|
+
extra_sending_domains: z19.number().int().min(0)
|
|
4485
4580
|
});
|
|
4486
|
-
var BillingAddons =
|
|
4487
|
-
sending_domain:
|
|
4488
|
-
monthly_price_cents:
|
|
4489
|
-
currency:
|
|
4490
|
-
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()
|
|
4491
4586
|
})
|
|
4492
4587
|
});
|
|
4493
4588
|
var MAX_EXTRA_SENDING_DOMAINS = 100;
|
|
4494
|
-
var ExtraSendingDomainsUpdate =
|
|
4589
|
+
var ExtraSendingDomainsUpdate = z19.object({ quantity: z19.number().int().min(0).max(MAX_EXTRA_SENDING_DOMAINS) });
|
|
4495
4590
|
var USAGE_METRICS = ["messages", "contacts", "members", "providers", "webhook_endpoints", "active_automations", "sending_domains"];
|
|
4496
|
-
var UsageMetric =
|
|
4591
|
+
var UsageMetric = z19.enum(USAGE_METRICS);
|
|
4497
4592
|
var USAGE_WARNING_RATIO = 0.8;
|
|
4498
|
-
var UsageWarning =
|
|
4593
|
+
var UsageWarning = z19.object({
|
|
4499
4594
|
metric: UsageMetric,
|
|
4500
|
-
used:
|
|
4501
|
-
limit:
|
|
4595
|
+
used: z19.number().int().min(0),
|
|
4596
|
+
limit: z19.number().int().min(0),
|
|
4502
4597
|
/** `approaching`: at or above USAGE_WARNING_RATIO of the limit; `reached`: at or above the limit. */
|
|
4503
|
-
level:
|
|
4598
|
+
level: z19.enum(["approaching", "reached"])
|
|
4504
4599
|
});
|
|
4505
|
-
var
|
|
4600
|
+
var TermsStatus = z19.object({ accepted_version: z19.string().nullable(), current_version: z19.string() });
|
|
4601
|
+
var Usage = z19.object({
|
|
4506
4602
|
plan: PlanId,
|
|
4507
4603
|
period_start: Timestamp,
|
|
4508
4604
|
period_end: Timestamp,
|
|
4509
|
-
metrics:
|
|
4510
|
-
warnings:
|
|
4511
|
-
|
|
4512
|
-
|
|
4513
|
-
|
|
4514
|
-
|
|
4515
|
-
|
|
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),
|
|
4607
|
+
terms: TermsStatus
|
|
4608
|
+
});
|
|
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(),
|
|
4516
4614
|
/** The buyer accepted the terms of service and the processing agreement of this version. */
|
|
4517
4615
|
accept_terms: AcceptTerms
|
|
4518
4616
|
});
|
|
4519
|
-
var CheckoutSession =
|
|
4520
|
-
var PortalRequest =
|
|
4521
|
-
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() });
|
|
4522
4620
|
var USAGE_WARNING_HEADER = "x-mail-usage-warning";
|
|
4523
4621
|
function formatUsageWarningHeader(warnings) {
|
|
4524
4622
|
if (warnings.length === 0) return null;
|
|
@@ -4538,7 +4636,7 @@ function parseUsageWarningHeader(value) {
|
|
|
4538
4636
|
}
|
|
4539
4637
|
|
|
4540
4638
|
// src/routes.ts
|
|
4541
|
-
import { z as
|
|
4639
|
+
import { z as z20 } from "zod";
|
|
4542
4640
|
var list = (item) => page(item);
|
|
4543
4641
|
var foundationRoutes = {
|
|
4544
4642
|
"workspaces.create": {
|
|
@@ -4784,7 +4882,7 @@ var templateRoutes = {
|
|
|
4784
4882
|
path: "/v1/templates/:id/export",
|
|
4785
4883
|
params: IdParams,
|
|
4786
4884
|
query: TemplateExportQuery,
|
|
4787
|
-
response:
|
|
4885
|
+
response: z20.string(),
|
|
4788
4886
|
responseType: "text",
|
|
4789
4887
|
status: 200,
|
|
4790
4888
|
access: "read",
|
|
@@ -5164,7 +5262,7 @@ var sendingRoutes = {
|
|
|
5164
5262
|
path: "/v1/mailings/:id/export",
|
|
5165
5263
|
params: IdParams,
|
|
5166
5264
|
query: MailingExportQuery,
|
|
5167
|
-
response:
|
|
5265
|
+
response: z20.string(),
|
|
5168
5266
|
responseType: "text",
|
|
5169
5267
|
status: 200,
|
|
5170
5268
|
access: "read",
|
|
@@ -5431,7 +5529,7 @@ var platformRoutes = {
|
|
|
5431
5529
|
"contactProperties.list": {
|
|
5432
5530
|
method: "GET",
|
|
5433
5531
|
path: "/v1/contact-properties",
|
|
5434
|
-
response:
|
|
5532
|
+
response: z20.object({ data: z20.array(ContactPropertyDefinition) }),
|
|
5435
5533
|
status: 200,
|
|
5436
5534
|
access: "read",
|
|
5437
5535
|
phase: "S4"
|
|
@@ -5730,7 +5828,7 @@ var billingRoutes = {
|
|
|
5730
5828
|
"billing.plans": {
|
|
5731
5829
|
method: "GET",
|
|
5732
5830
|
path: "/v1/billing/plans",
|
|
5733
|
-
response:
|
|
5831
|
+
response: z20.object({ data: z20.array(CatalogPlan), addons: BillingAddons }),
|
|
5734
5832
|
status: 200,
|
|
5735
5833
|
access: "read",
|
|
5736
5834
|
phase: "S5"
|
|
@@ -5770,6 +5868,53 @@ var billingRoutes = {
|
|
|
5770
5868
|
status: 200,
|
|
5771
5869
|
access: "admin",
|
|
5772
5870
|
phase: "S5"
|
|
5871
|
+
},
|
|
5872
|
+
"billing.acceptTerms": {
|
|
5873
|
+
method: "POST",
|
|
5874
|
+
path: "/v1/billing/terms",
|
|
5875
|
+
body: TermsAcceptance,
|
|
5876
|
+
response: TermsStatus,
|
|
5877
|
+
status: 200,
|
|
5878
|
+
access: "admin",
|
|
5879
|
+
phase: "S5"
|
|
5880
|
+
}
|
|
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"
|
|
5773
5918
|
}
|
|
5774
5919
|
};
|
|
5775
5920
|
var inviteRoutes = {
|
|
@@ -5881,7 +6026,7 @@ var automationRoutes = {
|
|
|
5881
6026
|
method: "POST",
|
|
5882
6027
|
path: "/v1/automations/:id/pause",
|
|
5883
6028
|
params: IdParams,
|
|
5884
|
-
body:
|
|
6029
|
+
body: z20.object({}).strict(),
|
|
5885
6030
|
response: Automation,
|
|
5886
6031
|
status: 200,
|
|
5887
6032
|
access: "write",
|
|
@@ -5891,7 +6036,7 @@ var automationRoutes = {
|
|
|
5891
6036
|
method: "POST",
|
|
5892
6037
|
path: "/v1/automations/:id/resume",
|
|
5893
6038
|
params: IdParams,
|
|
5894
|
-
body:
|
|
6039
|
+
body: z20.object({}).strict(),
|
|
5895
6040
|
response: Automation,
|
|
5896
6041
|
status: 200,
|
|
5897
6042
|
access: "write",
|
|
@@ -5901,7 +6046,7 @@ var automationRoutes = {
|
|
|
5901
6046
|
method: "POST",
|
|
5902
6047
|
path: "/v1/automations/:id/archive",
|
|
5903
6048
|
params: IdParams,
|
|
5904
|
-
body:
|
|
6049
|
+
body: z20.object({}).strict(),
|
|
5905
6050
|
response: Automation,
|
|
5906
6051
|
status: 200,
|
|
5907
6052
|
access: "write",
|
|
@@ -6016,10 +6161,13 @@ var routes = {
|
|
|
6016
6161
|
...inviteRoutes,
|
|
6017
6162
|
...platformRoutes,
|
|
6018
6163
|
...billingRoutes,
|
|
6164
|
+
...domainBuyingRoutes,
|
|
6019
6165
|
...automationRoutes
|
|
6020
6166
|
};
|
|
6021
6167
|
var TRUSTED_APP_OPERATIONS = {
|
|
6022
|
-
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"]
|
|
6023
6171
|
};
|
|
6024
6172
|
function trustedAppMayCall(app, id) {
|
|
6025
6173
|
return TRUSTED_APP_OPERATIONS[app].includes(id);
|
|
@@ -6180,10 +6328,24 @@ export {
|
|
|
6180
6328
|
DEFAULT_INVITE_TTL_DAYS,
|
|
6181
6329
|
DEFAULT_PAGE_LIMIT,
|
|
6182
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,
|
|
6183
6336
|
DateOnly,
|
|
6184
6337
|
DatePassedAnswer,
|
|
6185
6338
|
DelayStep,
|
|
6186
6339
|
DocumentSchemaVersion,
|
|
6340
|
+
DomainBuyingBlock,
|
|
6341
|
+
DomainOffer,
|
|
6342
|
+
DomainOrder,
|
|
6343
|
+
DomainOrderCreate,
|
|
6344
|
+
DomainOrderState,
|
|
6345
|
+
DomainRegistrant,
|
|
6346
|
+
DomainSearchQuery,
|
|
6347
|
+
DomainSearchResult,
|
|
6348
|
+
DomainUnavailableReason,
|
|
6187
6349
|
EDITABLE_MAILING_STATUSES,
|
|
6188
6350
|
ERROR_CODES,
|
|
6189
6351
|
ERROR_STATUS,
|
|
@@ -6267,6 +6429,7 @@ export {
|
|
|
6267
6429
|
MAX_ASSET_BYTES,
|
|
6268
6430
|
MAX_DELAY_SECONDS,
|
|
6269
6431
|
MAX_DOCUMENT_BYTES,
|
|
6432
|
+
MAX_DOMAIN_ORDERS_PER_DAY,
|
|
6270
6433
|
MAX_ENGAGEMENT_DAYS,
|
|
6271
6434
|
MAX_EXPORT_WARNINGS_HEADER_LENGTH,
|
|
6272
6435
|
MAX_EXTRA_SENDING_DOMAINS,
|
|
@@ -6500,6 +6663,8 @@ export {
|
|
|
6500
6663
|
TemplateUpdatedData,
|
|
6501
6664
|
TemplateVersion,
|
|
6502
6665
|
TemplateVersionParams,
|
|
6666
|
+
TermsAcceptance,
|
|
6667
|
+
TermsStatus,
|
|
6503
6668
|
TimeOfDay,
|
|
6504
6669
|
Timestamp,
|
|
6505
6670
|
TimezoneName,
|
|
@@ -6575,6 +6740,7 @@ export {
|
|
|
6575
6740
|
demoteForSave,
|
|
6576
6741
|
demotedBySave,
|
|
6577
6742
|
describeMissingTexts,
|
|
6743
|
+
domainBuyingRoutes,
|
|
6578
6744
|
draftDocument,
|
|
6579
6745
|
draftInsertionProblems,
|
|
6580
6746
|
draftsDirty,
|