@marlinjai/mail-contract 0.21.0 → 0.23.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 +1107 -71
- package/dist/index.d.ts +1107 -71
- package/dist/index.js +686 -188
- package/dist/index.mjs +668 -188
- package/package.json +1 -1
package/dist/index.mjs
CHANGED
|
@@ -3047,8 +3047,15 @@ var AUDIT_ACTIONS = [
|
|
|
3047
3047
|
"domain_order.registered",
|
|
3048
3048
|
"domain_order.ready",
|
|
3049
3049
|
"domain_order.needs_attention",
|
|
3050
|
+
"domain_order.kind_changed",
|
|
3050
3051
|
"domain_order.refunded",
|
|
3051
3052
|
"domain_order.cancelled",
|
|
3053
|
+
// Bought domains, managed by their holder
|
|
3054
|
+
"domain_record.created",
|
|
3055
|
+
"domain_record.updated",
|
|
3056
|
+
"domain_record.deleted",
|
|
3057
|
+
"domain_leave.requested",
|
|
3058
|
+
"domain_leave.done",
|
|
3052
3059
|
// A1: automations
|
|
3053
3060
|
"automation.created",
|
|
3054
3061
|
"automation.updated",
|
|
@@ -3974,6 +3981,292 @@ var SendingDomainUpdate = z15.object({ from_name: SenderFields.from_name.optiona
|
|
|
3974
3981
|
|
|
3975
3982
|
// src/domains.ts
|
|
3976
3983
|
import { z as z16 } from "zod";
|
|
3984
|
+
|
|
3985
|
+
// src/phone.ts
|
|
3986
|
+
var REGISTRY_PHONE = /^\+\d{1,3}\.\d{4,14}$/;
|
|
3987
|
+
var CALLING_CODE_OF_COUNTRY = {
|
|
3988
|
+
DE: "49",
|
|
3989
|
+
AT: "43",
|
|
3990
|
+
CH: "41",
|
|
3991
|
+
LI: "423",
|
|
3992
|
+
LU: "352",
|
|
3993
|
+
NL: "31",
|
|
3994
|
+
BE: "32",
|
|
3995
|
+
FR: "33",
|
|
3996
|
+
IT: "39",
|
|
3997
|
+
ES: "34",
|
|
3998
|
+
PT: "351",
|
|
3999
|
+
IE: "353",
|
|
4000
|
+
GB: "44",
|
|
4001
|
+
DK: "45",
|
|
4002
|
+
SE: "46",
|
|
4003
|
+
NO: "47",
|
|
4004
|
+
FI: "358",
|
|
4005
|
+
IS: "354",
|
|
4006
|
+
PL: "48",
|
|
4007
|
+
CZ: "420",
|
|
4008
|
+
SK: "421",
|
|
4009
|
+
HU: "36",
|
|
4010
|
+
SI: "386",
|
|
4011
|
+
HR: "385",
|
|
4012
|
+
RO: "40",
|
|
4013
|
+
BG: "359",
|
|
4014
|
+
GR: "30",
|
|
4015
|
+
CY: "357",
|
|
4016
|
+
MT: "356",
|
|
4017
|
+
EE: "372",
|
|
4018
|
+
LV: "371",
|
|
4019
|
+
LT: "370",
|
|
4020
|
+
US: "1",
|
|
4021
|
+
CA: "1",
|
|
4022
|
+
AU: "61",
|
|
4023
|
+
NZ: "64",
|
|
4024
|
+
TR: "90",
|
|
4025
|
+
IL: "972",
|
|
4026
|
+
AE: "971",
|
|
4027
|
+
IN: "91",
|
|
4028
|
+
JP: "81",
|
|
4029
|
+
CN: "86",
|
|
4030
|
+
SG: "65",
|
|
4031
|
+
ZA: "27",
|
|
4032
|
+
BR: "55",
|
|
4033
|
+
MX: "52",
|
|
4034
|
+
UA: "380",
|
|
4035
|
+
RS: "381"
|
|
4036
|
+
};
|
|
4037
|
+
var CALLING_CODES = /* @__PURE__ */ new Set([
|
|
4038
|
+
"1",
|
|
4039
|
+
"7",
|
|
4040
|
+
"20",
|
|
4041
|
+
"27",
|
|
4042
|
+
"30",
|
|
4043
|
+
"31",
|
|
4044
|
+
"32",
|
|
4045
|
+
"33",
|
|
4046
|
+
"34",
|
|
4047
|
+
"36",
|
|
4048
|
+
"39",
|
|
4049
|
+
"40",
|
|
4050
|
+
"41",
|
|
4051
|
+
"43",
|
|
4052
|
+
"44",
|
|
4053
|
+
"45",
|
|
4054
|
+
"46",
|
|
4055
|
+
"47",
|
|
4056
|
+
"48",
|
|
4057
|
+
"49",
|
|
4058
|
+
"51",
|
|
4059
|
+
"52",
|
|
4060
|
+
"53",
|
|
4061
|
+
"54",
|
|
4062
|
+
"55",
|
|
4063
|
+
"56",
|
|
4064
|
+
"57",
|
|
4065
|
+
"58",
|
|
4066
|
+
"60",
|
|
4067
|
+
"61",
|
|
4068
|
+
"62",
|
|
4069
|
+
"63",
|
|
4070
|
+
"64",
|
|
4071
|
+
"65",
|
|
4072
|
+
"66",
|
|
4073
|
+
"81",
|
|
4074
|
+
"82",
|
|
4075
|
+
"84",
|
|
4076
|
+
"86",
|
|
4077
|
+
"90",
|
|
4078
|
+
"91",
|
|
4079
|
+
"92",
|
|
4080
|
+
"93",
|
|
4081
|
+
"94",
|
|
4082
|
+
"95",
|
|
4083
|
+
"98",
|
|
4084
|
+
"211",
|
|
4085
|
+
"212",
|
|
4086
|
+
"213",
|
|
4087
|
+
"216",
|
|
4088
|
+
"218",
|
|
4089
|
+
"220",
|
|
4090
|
+
"221",
|
|
4091
|
+
"222",
|
|
4092
|
+
"223",
|
|
4093
|
+
"224",
|
|
4094
|
+
"225",
|
|
4095
|
+
"226",
|
|
4096
|
+
"227",
|
|
4097
|
+
"228",
|
|
4098
|
+
"229",
|
|
4099
|
+
"230",
|
|
4100
|
+
"231",
|
|
4101
|
+
"232",
|
|
4102
|
+
"233",
|
|
4103
|
+
"234",
|
|
4104
|
+
"235",
|
|
4105
|
+
"236",
|
|
4106
|
+
"237",
|
|
4107
|
+
"238",
|
|
4108
|
+
"239",
|
|
4109
|
+
"240",
|
|
4110
|
+
"241",
|
|
4111
|
+
"242",
|
|
4112
|
+
"243",
|
|
4113
|
+
"244",
|
|
4114
|
+
"245",
|
|
4115
|
+
"246",
|
|
4116
|
+
"247",
|
|
4117
|
+
"248",
|
|
4118
|
+
"249",
|
|
4119
|
+
"250",
|
|
4120
|
+
"251",
|
|
4121
|
+
"252",
|
|
4122
|
+
"253",
|
|
4123
|
+
"254",
|
|
4124
|
+
"255",
|
|
4125
|
+
"256",
|
|
4126
|
+
"257",
|
|
4127
|
+
"258",
|
|
4128
|
+
"260",
|
|
4129
|
+
"261",
|
|
4130
|
+
"262",
|
|
4131
|
+
"263",
|
|
4132
|
+
"264",
|
|
4133
|
+
"265",
|
|
4134
|
+
"266",
|
|
4135
|
+
"267",
|
|
4136
|
+
"268",
|
|
4137
|
+
"269",
|
|
4138
|
+
"290",
|
|
4139
|
+
"291",
|
|
4140
|
+
"297",
|
|
4141
|
+
"298",
|
|
4142
|
+
"299",
|
|
4143
|
+
"350",
|
|
4144
|
+
"351",
|
|
4145
|
+
"352",
|
|
4146
|
+
"353",
|
|
4147
|
+
"354",
|
|
4148
|
+
"355",
|
|
4149
|
+
"356",
|
|
4150
|
+
"357",
|
|
4151
|
+
"358",
|
|
4152
|
+
"359",
|
|
4153
|
+
"370",
|
|
4154
|
+
"371",
|
|
4155
|
+
"372",
|
|
4156
|
+
"373",
|
|
4157
|
+
"374",
|
|
4158
|
+
"375",
|
|
4159
|
+
"376",
|
|
4160
|
+
"377",
|
|
4161
|
+
"378",
|
|
4162
|
+
"379",
|
|
4163
|
+
"380",
|
|
4164
|
+
"381",
|
|
4165
|
+
"382",
|
|
4166
|
+
"383",
|
|
4167
|
+
"385",
|
|
4168
|
+
"386",
|
|
4169
|
+
"387",
|
|
4170
|
+
"389",
|
|
4171
|
+
"420",
|
|
4172
|
+
"421",
|
|
4173
|
+
"423",
|
|
4174
|
+
"500",
|
|
4175
|
+
"501",
|
|
4176
|
+
"502",
|
|
4177
|
+
"503",
|
|
4178
|
+
"504",
|
|
4179
|
+
"505",
|
|
4180
|
+
"506",
|
|
4181
|
+
"507",
|
|
4182
|
+
"508",
|
|
4183
|
+
"509",
|
|
4184
|
+
"590",
|
|
4185
|
+
"591",
|
|
4186
|
+
"592",
|
|
4187
|
+
"593",
|
|
4188
|
+
"594",
|
|
4189
|
+
"595",
|
|
4190
|
+
"596",
|
|
4191
|
+
"597",
|
|
4192
|
+
"598",
|
|
4193
|
+
"599",
|
|
4194
|
+
"670",
|
|
4195
|
+
"672",
|
|
4196
|
+
"673",
|
|
4197
|
+
"674",
|
|
4198
|
+
"675",
|
|
4199
|
+
"676",
|
|
4200
|
+
"677",
|
|
4201
|
+
"678",
|
|
4202
|
+
"679",
|
|
4203
|
+
"680",
|
|
4204
|
+
"681",
|
|
4205
|
+
"682",
|
|
4206
|
+
"683",
|
|
4207
|
+
"685",
|
|
4208
|
+
"686",
|
|
4209
|
+
"687",
|
|
4210
|
+
"688",
|
|
4211
|
+
"689",
|
|
4212
|
+
"690",
|
|
4213
|
+
"691",
|
|
4214
|
+
"692",
|
|
4215
|
+
"850",
|
|
4216
|
+
"852",
|
|
4217
|
+
"853",
|
|
4218
|
+
"855",
|
|
4219
|
+
"856",
|
|
4220
|
+
"880",
|
|
4221
|
+
"886",
|
|
4222
|
+
"960",
|
|
4223
|
+
"961",
|
|
4224
|
+
"962",
|
|
4225
|
+
"963",
|
|
4226
|
+
"964",
|
|
4227
|
+
"965",
|
|
4228
|
+
"966",
|
|
4229
|
+
"967",
|
|
4230
|
+
"968",
|
|
4231
|
+
"970",
|
|
4232
|
+
"971",
|
|
4233
|
+
"972",
|
|
4234
|
+
"973",
|
|
4235
|
+
"974",
|
|
4236
|
+
"975",
|
|
4237
|
+
"976",
|
|
4238
|
+
"977",
|
|
4239
|
+
"992",
|
|
4240
|
+
"993",
|
|
4241
|
+
"994",
|
|
4242
|
+
"995",
|
|
4243
|
+
"996",
|
|
4244
|
+
"998"
|
|
4245
|
+
]);
|
|
4246
|
+
var KEEPS_LEADING_ZERO = /* @__PURE__ */ new Set(["39", "378", "379"]);
|
|
4247
|
+
function normalizePhone(raw, country) {
|
|
4248
|
+
const text = raw.trim();
|
|
4249
|
+
if (REGISTRY_PHONE.test(text)) return text;
|
|
4250
|
+
const compact = text.replace(/\(0\)/g, "").replace(/[\s\-./()]/g, "");
|
|
4251
|
+
let international;
|
|
4252
|
+
if (/^\+\d+$/.test(compact)) international = compact.slice(1);
|
|
4253
|
+
else if (/^00\d+$/.test(compact)) international = compact.slice(2);
|
|
4254
|
+
else if (/^0\d+$/.test(compact)) {
|
|
4255
|
+
const code = country ? CALLING_CODE_OF_COUNTRY[country.trim().toUpperCase()] : void 0;
|
|
4256
|
+
if (!code) return raw;
|
|
4257
|
+
return `+${code}.${KEEPS_LEADING_ZERO.has(code) ? compact : compact.slice(1)}`;
|
|
4258
|
+
} else return raw;
|
|
4259
|
+
for (const length of [1, 2, 3]) {
|
|
4260
|
+
const code = international.slice(0, length);
|
|
4261
|
+
if (CALLING_CODES.has(code)) {
|
|
4262
|
+
const rest = international.slice(length);
|
|
4263
|
+
return `+${code}.${KEEPS_LEADING_ZERO.has(code) ? rest : rest.replace(/^0/, "")}`;
|
|
4264
|
+
}
|
|
4265
|
+
}
|
|
4266
|
+
return raw;
|
|
4267
|
+
}
|
|
4268
|
+
|
|
4269
|
+
// src/domains.ts
|
|
3977
4270
|
var DomainSearchQuery = z16.object({ q: z16.string().trim().min(1).max(63) });
|
|
3978
4271
|
var DOMAIN_UNAVAILABLE_REASONS = ["taken", "extension_not_supported", "premium", "not_registrable"];
|
|
3979
4272
|
var DomainUnavailableReason = z16.enum(DOMAIN_UNAVAILABLE_REASONS);
|
|
@@ -3995,20 +4288,27 @@ var DomainRegistrant = z16.object({
|
|
|
3995
4288
|
name: z16.string().trim().min(3).max(120).regex(/\S+\s+\S+/, "must be a first and a last name"),
|
|
3996
4289
|
organization: z16.string().trim().min(1).max(120).nullable().optional(),
|
|
3997
4290
|
email: Email,
|
|
3998
|
-
phone: z16.string().trim().
|
|
4291
|
+
phone: z16.string().trim().min(1).max(40),
|
|
3999
4292
|
street: z16.string().trim().min(3).max(200),
|
|
4000
4293
|
city: z16.string().trim().min(1).max(100),
|
|
4001
4294
|
state: z16.string().trim().min(1).max(100),
|
|
4002
4295
|
postal_code: z16.string().trim().min(2).max(20),
|
|
4003
4296
|
country_code: z16.string().trim().toUpperCase().regex(/^[A-Z]{2}$/, "must be a two-letter country code such as DE")
|
|
4004
|
-
})
|
|
4297
|
+
}).superRefine((holder, ctx) => {
|
|
4298
|
+
if (typeof holder.phone === "string" && !REGISTRY_PHONE.test(normalizePhone(holder.phone, holder.country_code))) {
|
|
4299
|
+
ctx.addIssue({ code: z16.ZodIssueCode.custom, path: ["phone"], message: "must be a phone number with its country code, such as +49 30 1234 5678" });
|
|
4300
|
+
}
|
|
4301
|
+
}).transform((holder) => ({ ...holder, phone: normalizePhone(holder.phone, holder.country_code) }));
|
|
4005
4302
|
var MAX_DOMAIN_ORDERS_PER_DAY = 2;
|
|
4303
|
+
var DOMAIN_ORDER_KINDS = ["sending", "domain_only"];
|
|
4304
|
+
var DomainOrderKind = z16.enum(DOMAIN_ORDER_KINDS);
|
|
4006
4305
|
var DomainOrderCreate = z16.object({
|
|
4007
4306
|
domain: SendingDomainName,
|
|
4008
4307
|
price_cents: z16.number().int().min(0),
|
|
4009
4308
|
registrant: DomainRegistrant,
|
|
4010
|
-
|
|
4011
|
-
|
|
4309
|
+
kind: DomainOrderKind.default("sending"),
|
|
4310
|
+
from_name: z16.string().trim().min(1).max(120).optional(),
|
|
4311
|
+
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").optional(),
|
|
4012
4312
|
/**
|
|
4013
4313
|
* Where Stripe returns to after paying, and after leaving the payment. The
|
|
4014
4314
|
* service adds `domain_order=<order id>` to both, so the page coming back
|
|
@@ -4019,6 +4319,10 @@ var DomainOrderCreate = z16.object({
|
|
|
4019
4319
|
cancel_url: z16.string().url(),
|
|
4020
4320
|
/** The buyer accepted the terms of service (which cover bought domains) of this version. */
|
|
4021
4321
|
accept_terms: AcceptTerms
|
|
4322
|
+
}).superRefine((order, ctx) => {
|
|
4323
|
+
if (order.kind !== "sending") return;
|
|
4324
|
+
if (!order.from_name) ctx.addIssue({ code: z16.ZodIssueCode.custom, path: ["from_name"], message: "is needed for a domain mail is sent from" });
|
|
4325
|
+
if (!order.from_local_part) ctx.addIssue({ code: z16.ZodIssueCode.custom, path: ["from_local_part"], message: "is needed for a domain mail is sent from" });
|
|
4022
4326
|
});
|
|
4023
4327
|
var DOMAIN_ORDER_STATES = [
|
|
4024
4328
|
"awaiting_payment",
|
|
@@ -4041,8 +4345,10 @@ var DomainOrder = z16.object({
|
|
|
4041
4345
|
/** Stripe's payment page while `awaiting_payment`; null otherwise. */
|
|
4042
4346
|
checkout_url: z16.string().url().nullable(),
|
|
4043
4347
|
registrant_name: z16.string(),
|
|
4044
|
-
|
|
4045
|
-
|
|
4348
|
+
kind: DomainOrderKind,
|
|
4349
|
+
/** The sender, for a `sending` order; null for `domain_only`. */
|
|
4350
|
+
from_name: z16.string().nullable(),
|
|
4351
|
+
from_email: Email.nullable(),
|
|
4046
4352
|
/** The sending domain once `ready`. */
|
|
4047
4353
|
sending_domain_id: Id.nullable(),
|
|
4048
4354
|
/** When the paid year ends, once registered. */
|
|
@@ -4055,36 +4361,124 @@ var DomainOrder = z16.object({
|
|
|
4055
4361
|
updated_at: Timestamp
|
|
4056
4362
|
});
|
|
4057
4363
|
|
|
4058
|
-
// src/
|
|
4364
|
+
// src/bought-domains.ts
|
|
4059
4365
|
import { z as z17 } from "zod";
|
|
4060
|
-
var
|
|
4366
|
+
var DOMAIN_LEAVE_WAYS = ["cloudflare_account", "transfer"];
|
|
4367
|
+
var DomainLeaveWay = z17.enum(DOMAIN_LEAVE_WAYS);
|
|
4368
|
+
var DOMAIN_LEAVE_STATES = ["requested", "done", "cancelled"];
|
|
4369
|
+
var DomainLeaveState = z17.enum(DOMAIN_LEAVE_STATES);
|
|
4370
|
+
var DomainLeave = z17.object({
|
|
4371
|
+
id: Id,
|
|
4372
|
+
way: DomainLeaveWay,
|
|
4373
|
+
state: DomainLeaveState,
|
|
4374
|
+
/** The Cloudflare account the domain moves into (way `cloudflare_account`). */
|
|
4375
|
+
target_account_id: z17.string().nullable(),
|
|
4376
|
+
/** The transfer code, once support has it (way `transfer`, state `done`); only owners and admins read it. */
|
|
4377
|
+
auth_code: z17.string().nullable(),
|
|
4378
|
+
requested_at: Timestamp,
|
|
4379
|
+
done_at: Timestamp.nullable()
|
|
4380
|
+
});
|
|
4381
|
+
var BoughtDomain = z17.object({
|
|
4382
|
+
/** The order the domain was bought with. */
|
|
4383
|
+
id: Id,
|
|
4384
|
+
domain: z17.string(),
|
|
4385
|
+
kind: DomainOrderKind,
|
|
4386
|
+
registrant_name: z17.string(),
|
|
4387
|
+
registered_at: Timestamp,
|
|
4388
|
+
/** When the paid year ends. */
|
|
4389
|
+
expires_at: Timestamp.nullable(),
|
|
4390
|
+
/** Each further year, final, in euro cents; 0 for a domain registered without a charge. */
|
|
4391
|
+
renewal_price_cents: z17.number().int().min(0),
|
|
4392
|
+
currency: z17.literal("EUR"),
|
|
4393
|
+
/** Registered for one of Lumitra's own companies, never charged. */
|
|
4394
|
+
no_charge: z17.boolean(),
|
|
4395
|
+
/** The earliest moment each way of leaving is possible. */
|
|
4396
|
+
move_account_from: Timestamp,
|
|
4397
|
+
transfer_from: Timestamp,
|
|
4398
|
+
/** The latest request to leave, if any. */
|
|
4399
|
+
leave: DomainLeave.nullable(),
|
|
4400
|
+
/** True once the domain has left: its records are no longer Lumitra Mail's to edit. */
|
|
4401
|
+
left: z17.boolean()
|
|
4402
|
+
});
|
|
4403
|
+
var DNS_RECORD_TYPES = ["A", "AAAA", "CNAME", "TXT", "MX", "NS"];
|
|
4404
|
+
var DnsRecordType = z17.enum(DNS_RECORD_TYPES);
|
|
4405
|
+
var DomainRecord = z17.object({
|
|
4406
|
+
id: z17.string(),
|
|
4407
|
+
type: z17.string(),
|
|
4408
|
+
/** The full name (www.example.com). */
|
|
4409
|
+
name: z17.string(),
|
|
4410
|
+
content: z17.string(),
|
|
4411
|
+
/** Seconds; 1 is automatic. */
|
|
4412
|
+
ttl: z17.number().int(),
|
|
4413
|
+
/** Served through Cloudflare's proxy (A, AAAA, CNAME only). */
|
|
4414
|
+
proxied: z17.boolean(),
|
|
4415
|
+
priority: z17.number().int().nullable(),
|
|
4416
|
+
/**
|
|
4417
|
+
* Not the holder's to change: a record Lumitra Mail wrote for sending (it
|
|
4418
|
+
* keeps those right itself), or a type the dashboard does not edit.
|
|
4419
|
+
*/
|
|
4420
|
+
locked: z17.boolean()
|
|
4421
|
+
});
|
|
4422
|
+
var IPV4 = /^(25[0-5]|2[0-4]\d|1?\d?\d)(\.(25[0-5]|2[0-4]\d|1?\d?\d)){3}$/;
|
|
4423
|
+
var HOSTNAME = /^(?=.{1,253}\.?$)([a-z0-9_](?:[a-z0-9_-]{0,61}[a-z0-9])?\.)*[a-z0-9_](?:[a-z0-9_-]{0,61}[a-z0-9])?\.?$/i;
|
|
4424
|
+
var DomainRecordInput = z17.object({
|
|
4425
|
+
type: DnsRecordType,
|
|
4426
|
+
name: z17.string().trim().min(1).max(253),
|
|
4427
|
+
content: z17.string().trim().min(1).max(2048),
|
|
4428
|
+
ttl: z17.union([z17.literal(1), z17.number().int().min(60).max(86400)]).default(1),
|
|
4429
|
+
proxied: z17.boolean().default(false),
|
|
4430
|
+
priority: z17.number().int().min(0).max(65535).nullable().optional()
|
|
4431
|
+
}).superRefine((r, ctx) => {
|
|
4432
|
+
const bad = (path, message) => ctx.addIssue({ code: z17.ZodIssueCode.custom, path: [path], message });
|
|
4433
|
+
if (r.type === "A" && !IPV4.test(r.content)) bad("content", "must be an IPv4 address, such as 192.0.2.10");
|
|
4434
|
+
if (r.type === "AAAA" && (!r.content.includes(":") || !/^[0-9a-f:.]+$/i.test(r.content))) bad("content", "must be an IPv6 address, such as 2001:db8::10");
|
|
4435
|
+
if ((r.type === "CNAME" || r.type === "MX" || r.type === "NS") && !HOSTNAME.test(r.content)) bad("content", "must be a host name, such as host.example.com");
|
|
4436
|
+
if (r.type === "MX" && (r.priority === void 0 || r.priority === null)) bad("priority", "is needed for an MX record");
|
|
4437
|
+
if (r.type !== "MX" && r.priority !== void 0 && r.priority !== null) bad("priority", "is only for an MX record");
|
|
4438
|
+
if (r.proxied && !["A", "AAAA", "CNAME"].includes(r.type)) bad("proxied", "is only for A, AAAA and CNAME records");
|
|
4439
|
+
});
|
|
4440
|
+
var BoughtDomainRecordParams = z17.object({ id: Id, record_id: z17.string().regex(/^[0-9a-f]{32}$/, "must be a record id") });
|
|
4441
|
+
var DomainLeaveCreate = z17.object({
|
|
4442
|
+
way: DomainLeaveWay,
|
|
4443
|
+
/** The holder's own Cloudflare account id (32 hex characters), for `cloudflare_account`. */
|
|
4444
|
+
target_account_id: z17.string().trim().toLowerCase().regex(/^[0-9a-f]{32}$/, "must be a Cloudflare account id: 32 letters and digits, from the account\u2019s overview page").optional()
|
|
4445
|
+
}).superRefine((r, ctx) => {
|
|
4446
|
+
if (r.way === "cloudflare_account" && !r.target_account_id) {
|
|
4447
|
+
ctx.addIssue({ code: z17.ZodIssueCode.custom, path: ["target_account_id"], message: "is needed to move the domain into your Cloudflare account" });
|
|
4448
|
+
}
|
|
4449
|
+
});
|
|
4450
|
+
var ZoneFile = z17.object({ domain: z17.string(), zone_file: z17.string() });
|
|
4451
|
+
|
|
4452
|
+
// src/contacts.ts
|
|
4453
|
+
import { z as z18 } from "zod";
|
|
4454
|
+
var Topic = z18.object({
|
|
4061
4455
|
id: Id,
|
|
4062
4456
|
slug: Slug,
|
|
4063
|
-
name:
|
|
4457
|
+
name: z18.string().min(1).max(120),
|
|
4064
4458
|
/** Shown on the hosted preference page. */
|
|
4065
|
-
description:
|
|
4459
|
+
description: z18.string().max(1e3).nullable(),
|
|
4066
4460
|
/** Translations of `name` and `description` per locale, for the hosted page. */
|
|
4067
|
-
translations:
|
|
4068
|
-
|
|
4461
|
+
translations: z18.record(
|
|
4462
|
+
z18.object({ name: z18.string().min(1).max(120), description: z18.string().max(1e3).nullable() })
|
|
4069
4463
|
),
|
|
4070
4464
|
created_at: Timestamp,
|
|
4071
4465
|
updated_at: Timestamp
|
|
4072
4466
|
});
|
|
4073
|
-
var TopicCreate =
|
|
4467
|
+
var TopicCreate = z18.object({
|
|
4074
4468
|
slug: Slug,
|
|
4075
|
-
name:
|
|
4076
|
-
description:
|
|
4469
|
+
name: z18.string().min(1).max(120),
|
|
4470
|
+
description: z18.string().max(1e3).optional(),
|
|
4077
4471
|
translations: Topic.shape.translations.optional()
|
|
4078
4472
|
});
|
|
4079
4473
|
var TopicUpdate = TopicCreate.omit({ slug: true }).partial().refine((v) => Object.keys(v).length > 0, "at least one field");
|
|
4080
|
-
var Contact =
|
|
4474
|
+
var Contact = z18.object({
|
|
4081
4475
|
id: Id,
|
|
4082
|
-
external_id:
|
|
4476
|
+
external_id: z18.string().min(1).max(255).nullable(),
|
|
4083
4477
|
/** Stored lowercased, unique per workspace. */
|
|
4084
4478
|
email: Email,
|
|
4085
|
-
first_name:
|
|
4086
|
-
last_name:
|
|
4087
|
-
locale:
|
|
4479
|
+
first_name: z18.string().max(200).nullable(),
|
|
4480
|
+
last_name: z18.string().max(200).nullable(),
|
|
4481
|
+
locale: z18.string().min(2).max(35).nullable(),
|
|
4088
4482
|
/**
|
|
4089
4483
|
* The person's own time zone, an IANA name such as `Europe/Berlin` (A1).
|
|
4090
4484
|
* Every wall clock an automation waits for is read in it, falling back to the
|
|
@@ -4092,65 +4486,65 @@ var Contact = z17.object({
|
|
|
4092
4486
|
*/
|
|
4093
4487
|
timezone: TimezoneName.nullable(),
|
|
4094
4488
|
properties: Properties,
|
|
4095
|
-
topics:
|
|
4489
|
+
topics: z18.array(Slug),
|
|
4096
4490
|
/** The slugs of the contact's tags (S4). */
|
|
4097
|
-
tags:
|
|
4491
|
+
tags: z18.array(Slug),
|
|
4098
4492
|
created_at: Timestamp,
|
|
4099
4493
|
updated_at: Timestamp
|
|
4100
4494
|
});
|
|
4101
|
-
var ContactUpsert =
|
|
4102
|
-
external_id:
|
|
4495
|
+
var ContactUpsert = z18.object({
|
|
4496
|
+
external_id: z18.string().min(1).max(255).optional(),
|
|
4103
4497
|
email: Email.optional(),
|
|
4104
|
-
first_name:
|
|
4105
|
-
last_name:
|
|
4106
|
-
locale:
|
|
4498
|
+
first_name: z18.string().max(200).nullable().optional(),
|
|
4499
|
+
last_name: z18.string().max(200).nullable().optional(),
|
|
4500
|
+
locale: z18.string().min(2).max(35).nullable().optional(),
|
|
4107
4501
|
timezone: TimezoneName.nullable().optional(),
|
|
4108
4502
|
properties: Properties.optional(),
|
|
4109
|
-
topics:
|
|
4503
|
+
topics: z18.array(Slug).max(100).optional()
|
|
4110
4504
|
}).refine((v) => v.external_id !== void 0 || v.email !== void 0, {
|
|
4111
4505
|
message: "external_id or email is required",
|
|
4112
4506
|
path: ["email"]
|
|
4113
4507
|
});
|
|
4114
|
-
var ContactUpsertResult =
|
|
4508
|
+
var ContactUpsertResult = z18.object({
|
|
4115
4509
|
contact: Contact,
|
|
4116
|
-
created:
|
|
4510
|
+
created: z18.boolean()
|
|
4117
4511
|
});
|
|
4118
4512
|
var ContactListQuery = PageQuery.extend({
|
|
4119
|
-
email:
|
|
4120
|
-
external_id:
|
|
4513
|
+
email: z18.string().min(1).max(254).optional(),
|
|
4514
|
+
external_id: z18.string().min(1).max(255).optional(),
|
|
4121
4515
|
topic: Slug.optional()
|
|
4122
4516
|
});
|
|
4123
|
-
var ContactErased =
|
|
4124
|
-
ok:
|
|
4125
|
-
erased_messages:
|
|
4126
|
-
erased_recipients:
|
|
4127
|
-
suppressions_kept:
|
|
4517
|
+
var ContactErased = z18.object({
|
|
4518
|
+
ok: z18.literal(true),
|
|
4519
|
+
erased_messages: z18.number().int().min(0),
|
|
4520
|
+
erased_recipients: z18.number().int().min(0),
|
|
4521
|
+
suppressions_kept: z18.number().int().min(0)
|
|
4128
4522
|
});
|
|
4129
4523
|
var SUPPRESSION_REASONS = ["unsubscribed", "bounced", "complained", "manual"];
|
|
4130
|
-
var SuppressionReason =
|
|
4131
|
-
var Suppression =
|
|
4524
|
+
var SuppressionReason = z18.enum(SUPPRESSION_REASONS);
|
|
4525
|
+
var Suppression = z18.object({
|
|
4132
4526
|
id: Id,
|
|
4133
4527
|
email: Email,
|
|
4134
4528
|
reason: SuppressionReason,
|
|
4135
4529
|
topic: Slug.nullable(),
|
|
4136
4530
|
source_message_id: Id.nullable(),
|
|
4137
|
-
note:
|
|
4531
|
+
note: z18.string().max(1e3).nullable(),
|
|
4138
4532
|
created_at: Timestamp
|
|
4139
4533
|
});
|
|
4140
|
-
var SuppressionCreate =
|
|
4534
|
+
var SuppressionCreate = z18.object({
|
|
4141
4535
|
email: Email,
|
|
4142
|
-
reason:
|
|
4536
|
+
reason: z18.enum(["manual", "unsubscribed"]),
|
|
4143
4537
|
topic: Slug.nullable().optional(),
|
|
4144
|
-
note:
|
|
4538
|
+
note: z18.string().max(1e3).optional()
|
|
4145
4539
|
});
|
|
4146
4540
|
var SuppressionListQuery = PageQuery.extend({
|
|
4147
|
-
email:
|
|
4541
|
+
email: z18.string().min(1).max(254).optional(),
|
|
4148
4542
|
reason: SuppressionReason.optional(),
|
|
4149
4543
|
topic: Slug.optional()
|
|
4150
4544
|
});
|
|
4151
4545
|
|
|
4152
4546
|
// src/webhooks.ts
|
|
4153
|
-
import { z as
|
|
4547
|
+
import { z as z19 } from "zod";
|
|
4154
4548
|
var WEBHOOK_EVENT_TYPES = [
|
|
4155
4549
|
"message.sent",
|
|
4156
4550
|
"message.failed",
|
|
@@ -4194,23 +4588,23 @@ var WEBHOOK_EVENT_TYPES = [
|
|
|
4194
4588
|
"template.updated",
|
|
4195
4589
|
"template.deleted"
|
|
4196
4590
|
];
|
|
4197
|
-
var WebhookEventType =
|
|
4198
|
-
var MessageEventBase =
|
|
4591
|
+
var WebhookEventType = z19.enum(WEBHOOK_EVENT_TYPES);
|
|
4592
|
+
var MessageEventBase = z19.object({
|
|
4199
4593
|
message_id: Id,
|
|
4200
4594
|
mailing_id: Id.nullable(),
|
|
4201
4595
|
mailing_metadata: MailingMetadata.nullable(),
|
|
4202
4596
|
recipient_id: Id.nullable(),
|
|
4203
4597
|
contact_id: Id.nullable(),
|
|
4204
|
-
external_id:
|
|
4598
|
+
external_id: z19.string().nullable(),
|
|
4205
4599
|
email: Email,
|
|
4206
|
-
subject:
|
|
4600
|
+
subject: z19.string(),
|
|
4207
4601
|
topic: Slug.nullable(),
|
|
4208
|
-
provider_message_id:
|
|
4209
|
-
is_test:
|
|
4602
|
+
provider_message_id: z19.string().nullable(),
|
|
4603
|
+
is_test: z19.boolean()
|
|
4210
4604
|
});
|
|
4211
4605
|
var MessageSentData = MessageEventBase.extend({
|
|
4212
4606
|
/** The final HTML as sent, so the client can archive it beside its own records. */
|
|
4213
|
-
html:
|
|
4607
|
+
html: z19.string(),
|
|
4214
4608
|
sent_at: Timestamp,
|
|
4215
4609
|
/**
|
|
4216
4610
|
* The choice each insertion made (see `Message.insertions`); absent or null
|
|
@@ -4221,20 +4615,20 @@ var MessageSentData = MessageEventBase.extend({
|
|
|
4221
4615
|
insertions: InsertionChoices.nullish()
|
|
4222
4616
|
});
|
|
4223
4617
|
var MessageFailedData = MessageEventBase.extend({
|
|
4224
|
-
error:
|
|
4618
|
+
error: z19.string(),
|
|
4225
4619
|
/** False when the provider rejected permanently; the recipient will not be retried. */
|
|
4226
|
-
retryable:
|
|
4620
|
+
retryable: z19.boolean(),
|
|
4227
4621
|
failed_at: Timestamp
|
|
4228
4622
|
});
|
|
4229
4623
|
var UNSUBSCRIBE_SOURCES = ["hosted_page", "one_click", "api", "dashboard", "signup_form"];
|
|
4230
|
-
var ContactUnsubscribedData =
|
|
4624
|
+
var ContactUnsubscribedData = z19.object({
|
|
4231
4625
|
contact_id: Id.nullable(),
|
|
4232
|
-
external_id:
|
|
4626
|
+
external_id: z19.string().nullable(),
|
|
4233
4627
|
email: Email,
|
|
4234
4628
|
/** The topic unsubscribed from; null means every topic. */
|
|
4235
4629
|
topic: Slug.nullable(),
|
|
4236
4630
|
mailing_id: Id.nullable(),
|
|
4237
|
-
source:
|
|
4631
|
+
source: z19.enum(UNSUBSCRIBE_SOURCES),
|
|
4238
4632
|
unsubscribed_at: Timestamp
|
|
4239
4633
|
});
|
|
4240
4634
|
var ContactResubscribedData = ContactUnsubscribedData.omit({ unsubscribed_at: true }).extend({
|
|
@@ -4243,142 +4637,142 @@ var ContactResubscribedData = ContactUnsubscribedData.omit({ unsubscribed_at: tr
|
|
|
4243
4637
|
* breaker undid a `bounced` block it judged false (a `contact.bounced` for the
|
|
4244
4638
|
* same address and mailing went out before); `topic` is null.
|
|
4245
4639
|
*/
|
|
4246
|
-
source:
|
|
4640
|
+
source: z19.enum([...UNSUBSCRIBE_SOURCES, "bounce_reverted"]),
|
|
4247
4641
|
resubscribed_at: Timestamp
|
|
4248
4642
|
});
|
|
4249
|
-
var ContactBouncedData =
|
|
4643
|
+
var ContactBouncedData = z19.object({
|
|
4250
4644
|
contact_id: Id.nullable(),
|
|
4251
|
-
external_id:
|
|
4645
|
+
external_id: z19.string().nullable(),
|
|
4252
4646
|
email: Email,
|
|
4253
4647
|
/** `bounced` for a hard bounce, `complained` for a spam complaint. */
|
|
4254
|
-
reason:
|
|
4648
|
+
reason: z19.enum(["bounced", "complained"]),
|
|
4255
4649
|
message_id: Id.nullable(),
|
|
4256
|
-
diagnostic:
|
|
4650
|
+
diagnostic: z19.string().nullable(),
|
|
4257
4651
|
bounced_at: Timestamp
|
|
4258
4652
|
});
|
|
4259
|
-
var MailingFinishedData =
|
|
4653
|
+
var MailingFinishedData = z19.object({
|
|
4260
4654
|
mailing_id: Id,
|
|
4261
4655
|
mailing_metadata: MailingMetadata,
|
|
4262
|
-
status:
|
|
4656
|
+
status: z19.enum(["sent", "partially_failed", "cancelled"]),
|
|
4263
4657
|
counts: MailingCounts,
|
|
4264
4658
|
finished_at: Timestamp
|
|
4265
4659
|
});
|
|
4266
|
-
var ContactSubscribedData =
|
|
4660
|
+
var ContactSubscribedData = z19.object({
|
|
4267
4661
|
contact_id: Id,
|
|
4268
|
-
external_id:
|
|
4662
|
+
external_id: z19.string().nullable(),
|
|
4269
4663
|
email: Email,
|
|
4270
|
-
topics:
|
|
4271
|
-
source:
|
|
4664
|
+
topics: z19.array(Slug),
|
|
4665
|
+
source: z19.enum(["signup_form", "api", "dashboard", "automation"]),
|
|
4272
4666
|
signup_form_id: Id.nullable(),
|
|
4273
|
-
signup_form_version:
|
|
4667
|
+
signup_form_version: z19.number().int().min(1).nullable(),
|
|
4274
4668
|
subscribed_at: Timestamp
|
|
4275
4669
|
});
|
|
4276
|
-
var ImportFinishedData =
|
|
4670
|
+
var ImportFinishedData = z19.object({
|
|
4277
4671
|
import_id: Id,
|
|
4278
|
-
status:
|
|
4672
|
+
status: z19.enum(["completed", "cancelled", "failed"]),
|
|
4279
4673
|
result: ImportReport.nullable(),
|
|
4280
|
-
error:
|
|
4674
|
+
error: z19.string().nullable(),
|
|
4281
4675
|
finished_at: Timestamp
|
|
4282
4676
|
});
|
|
4283
|
-
var MailingScheduledData =
|
|
4677
|
+
var MailingScheduledData = z19.object({
|
|
4284
4678
|
mailing_id: Id,
|
|
4285
4679
|
mailing_metadata: MailingMetadata,
|
|
4286
4680
|
scheduled_at: Timestamp.nullable()
|
|
4287
4681
|
});
|
|
4288
|
-
var MailingStartedData =
|
|
4682
|
+
var MailingStartedData = z19.object({
|
|
4289
4683
|
mailing_id: Id,
|
|
4290
4684
|
mailing_metadata: MailingMetadata,
|
|
4291
|
-
trigger:
|
|
4292
|
-
recipients:
|
|
4685
|
+
trigger: z19.enum(["send", "schedule"]),
|
|
4686
|
+
recipients: z19.number().int().min(0),
|
|
4293
4687
|
started_at: Timestamp
|
|
4294
4688
|
});
|
|
4295
|
-
var MailingScheduleFailedData =
|
|
4689
|
+
var MailingScheduleFailedData = z19.object({
|
|
4296
4690
|
mailing_id: Id,
|
|
4297
4691
|
mailing_metadata: MailingMetadata,
|
|
4298
|
-
code:
|
|
4299
|
-
message:
|
|
4692
|
+
code: z19.string(),
|
|
4693
|
+
message: z19.string(),
|
|
4300
4694
|
failed_at: Timestamp
|
|
4301
4695
|
});
|
|
4302
|
-
var MailingAbWinnerSelectedData =
|
|
4696
|
+
var MailingAbWinnerSelectedData = z19.object({
|
|
4303
4697
|
mailing_id: Id,
|
|
4304
4698
|
mailing_metadata: MailingMetadata,
|
|
4305
|
-
winner:
|
|
4306
|
-
decided_by:
|
|
4307
|
-
variants:
|
|
4699
|
+
winner: z19.string(),
|
|
4700
|
+
decided_by: z19.enum(["metric", "manual"]),
|
|
4701
|
+
variants: z19.array(VariantAnalytics),
|
|
4308
4702
|
decided_at: Timestamp
|
|
4309
4703
|
});
|
|
4310
|
-
var ContactTaggedData =
|
|
4704
|
+
var ContactTaggedData = z19.object({
|
|
4311
4705
|
contact_id: Id,
|
|
4312
|
-
external_id:
|
|
4706
|
+
external_id: z19.string().nullable(),
|
|
4313
4707
|
email: Email,
|
|
4314
4708
|
/** Only the tags the contact did not already have. */
|
|
4315
|
-
tags:
|
|
4316
|
-
source:
|
|
4709
|
+
tags: z19.array(Slug).min(1),
|
|
4710
|
+
source: z19.enum(["api", "dashboard", "signup_form", "import", "automation"]),
|
|
4317
4711
|
tagged_at: Timestamp
|
|
4318
4712
|
});
|
|
4319
|
-
var ContactUpdatedData =
|
|
4713
|
+
var ContactUpdatedData = z19.object({
|
|
4320
4714
|
contact_id: Id,
|
|
4321
|
-
external_id:
|
|
4715
|
+
external_id: z19.string().nullable(),
|
|
4322
4716
|
email: Email,
|
|
4323
|
-
changed:
|
|
4717
|
+
changed: z19.array(z19.string()).min(1),
|
|
4324
4718
|
properties: Properties,
|
|
4325
|
-
source:
|
|
4719
|
+
source: z19.enum(["api", "dashboard", "signup_form", "import", "automation"]),
|
|
4326
4720
|
updated_at: Timestamp
|
|
4327
4721
|
});
|
|
4328
|
-
var AutomationRunEventBase =
|
|
4722
|
+
var AutomationRunEventBase = z19.object({
|
|
4329
4723
|
automation_id: Id,
|
|
4330
|
-
automation_name:
|
|
4724
|
+
automation_name: z19.string(),
|
|
4331
4725
|
run_id: Id,
|
|
4332
|
-
version:
|
|
4726
|
+
version: z19.number().int().min(1),
|
|
4333
4727
|
contact_id: Id,
|
|
4334
|
-
external_id:
|
|
4728
|
+
external_id: z19.string().nullable(),
|
|
4335
4729
|
email: Email
|
|
4336
4730
|
});
|
|
4337
4731
|
var AutomationRunStartedData = AutomationRunEventBase.extend({
|
|
4338
4732
|
/** What let them in: a trigger kind, or `manual` for an explicit enrolment. */
|
|
4339
|
-
trigger_kind:
|
|
4733
|
+
trigger_kind: z19.string(),
|
|
4340
4734
|
entered_at: Timestamp
|
|
4341
4735
|
});
|
|
4342
4736
|
var AutomationRunCompletedData = AutomationRunEventBase.extend({
|
|
4343
|
-
last_step_id:
|
|
4737
|
+
last_step_id: z19.string().nullable(),
|
|
4344
4738
|
completed_at: Timestamp
|
|
4345
4739
|
});
|
|
4346
4740
|
var AutomationRunExitedData = AutomationRunEventBase.extend({
|
|
4347
4741
|
reason: AutomationEndReason,
|
|
4348
|
-
step_id:
|
|
4742
|
+
step_id: z19.string().nullable(),
|
|
4349
4743
|
exited_at: Timestamp
|
|
4350
4744
|
});
|
|
4351
4745
|
var AutomationRunFailedData = AutomationRunEventBase.extend({
|
|
4352
|
-
reason:
|
|
4353
|
-
step_id:
|
|
4746
|
+
reason: z19.string(),
|
|
4747
|
+
step_id: z19.string().nullable(),
|
|
4354
4748
|
failed_at: Timestamp
|
|
4355
4749
|
});
|
|
4356
4750
|
var AutomationWebhookData = AutomationRunEventBase.extend({
|
|
4357
|
-
step_id:
|
|
4751
|
+
step_id: z19.string(),
|
|
4358
4752
|
/** The step's own label, when it was given one, so a receiver can branch on a name. */
|
|
4359
|
-
step_label:
|
|
4753
|
+
step_label: z19.string().nullable(),
|
|
4360
4754
|
/** Whatever the step carries, verbatim. Null when it carries nothing. */
|
|
4361
4755
|
payload: JsonValue.nullable(),
|
|
4362
4756
|
fired_at: Timestamp
|
|
4363
4757
|
});
|
|
4364
|
-
var TemplateEventBase =
|
|
4758
|
+
var TemplateEventBase = z19.object({
|
|
4365
4759
|
template_id: Id,
|
|
4366
|
-
name:
|
|
4367
|
-
version:
|
|
4368
|
-
source:
|
|
4760
|
+
name: z19.string().min(1).max(200),
|
|
4761
|
+
version: z19.number().int().min(1),
|
|
4762
|
+
source: z19.enum(["api", "dashboard", "mjml_import"])
|
|
4369
4763
|
});
|
|
4370
4764
|
var TemplateCreatedData = TemplateEventBase.extend({ created_at: Timestamp });
|
|
4371
|
-
var TemplateUpdatedData = TemplateEventBase.extend({ archived:
|
|
4765
|
+
var TemplateUpdatedData = TemplateEventBase.extend({ archived: z19.boolean(), updated_at: Timestamp });
|
|
4372
4766
|
var TemplateDeletedData = TemplateEventBase.extend({ deleted_at: Timestamp });
|
|
4373
|
-
var envelope = (type, data) =>
|
|
4767
|
+
var envelope = (type, data) => z19.object({
|
|
4374
4768
|
/** Unique per event: a receiver deduplicates on it (deliveries may repeat). */
|
|
4375
4769
|
id: Id,
|
|
4376
|
-
type:
|
|
4770
|
+
type: z19.literal(type),
|
|
4377
4771
|
created_at: Timestamp,
|
|
4378
4772
|
workspace_id: Id,
|
|
4379
4773
|
data
|
|
4380
4774
|
});
|
|
4381
|
-
var WebhookEvent =
|
|
4775
|
+
var WebhookEvent = z19.discriminatedUnion("type", [
|
|
4382
4776
|
envelope("message.sent", MessageSentData),
|
|
4383
4777
|
envelope("message.failed", MessageFailedData),
|
|
4384
4778
|
envelope("contact.unsubscribed", ContactUnsubscribedData),
|
|
@@ -4402,16 +4796,16 @@ var WebhookEvent = z18.discriminatedUnion("type", [
|
|
|
4402
4796
|
envelope("template.updated", TemplateUpdatedData),
|
|
4403
4797
|
envelope("template.deleted", TemplateDeletedData)
|
|
4404
4798
|
]);
|
|
4405
|
-
var WebhookEndpoint =
|
|
4799
|
+
var WebhookEndpoint = z19.object({
|
|
4406
4800
|
id: Id,
|
|
4407
|
-
url:
|
|
4408
|
-
description:
|
|
4409
|
-
events:
|
|
4410
|
-
enabled:
|
|
4801
|
+
url: z19.string().url(),
|
|
4802
|
+
description: z19.string().max(500).nullable(),
|
|
4803
|
+
events: z19.array(WebhookEventType).min(1),
|
|
4804
|
+
enabled: z19.boolean(),
|
|
4411
4805
|
created_at: Timestamp,
|
|
4412
4806
|
updated_at: Timestamp
|
|
4413
4807
|
});
|
|
4414
|
-
var WebhookUrl =
|
|
4808
|
+
var WebhookUrl = z19.string().url().refine((u) => {
|
|
4415
4809
|
try {
|
|
4416
4810
|
const url = new URL(u);
|
|
4417
4811
|
if (url.protocol === "https:") return true;
|
|
@@ -4420,35 +4814,35 @@ var WebhookUrl = z18.string().url().refine((u) => {
|
|
|
4420
4814
|
return false;
|
|
4421
4815
|
}
|
|
4422
4816
|
}, "must be https (http only for localhost)");
|
|
4423
|
-
var WebhookEndpointCreate =
|
|
4817
|
+
var WebhookEndpointCreate = z19.object({
|
|
4424
4818
|
url: WebhookUrl,
|
|
4425
|
-
description:
|
|
4426
|
-
events:
|
|
4427
|
-
enabled:
|
|
4819
|
+
description: z19.string().max(500).optional(),
|
|
4820
|
+
events: z19.array(WebhookEventType).min(1),
|
|
4821
|
+
enabled: z19.boolean().optional()
|
|
4428
4822
|
});
|
|
4429
|
-
var WebhookEndpointUpdate =
|
|
4823
|
+
var WebhookEndpointUpdate = z19.object({
|
|
4430
4824
|
url: WebhookUrl,
|
|
4431
|
-
description:
|
|
4432
|
-
events:
|
|
4433
|
-
enabled:
|
|
4825
|
+
description: z19.string().max(500).nullable(),
|
|
4826
|
+
events: z19.array(WebhookEventType).min(1),
|
|
4827
|
+
enabled: z19.boolean()
|
|
4434
4828
|
}).partial().refine((v) => Object.keys(v).length > 0, "at least one field");
|
|
4435
|
-
var WebhookEndpointWithSecret =
|
|
4829
|
+
var WebhookEndpointWithSecret = z19.object({
|
|
4436
4830
|
endpoint: WebhookEndpoint,
|
|
4437
|
-
secret:
|
|
4831
|
+
secret: z19.string().min(32)
|
|
4438
4832
|
});
|
|
4439
4833
|
var WEBHOOK_DELIVERY_STATUSES = ["pending", "succeeded", "failed"];
|
|
4440
|
-
var WebhookDeliveryStatus =
|
|
4834
|
+
var WebhookDeliveryStatus = z19.enum(WEBHOOK_DELIVERY_STATUSES);
|
|
4441
4835
|
var WEBHOOK_MAX_ATTEMPTS = 8;
|
|
4442
4836
|
var WEBHOOK_RETRY_DELAYS_SECONDS = [30, 120, 600, 1800, 3600, 7200, 21600];
|
|
4443
|
-
var WebhookDelivery =
|
|
4837
|
+
var WebhookDelivery = z19.object({
|
|
4444
4838
|
id: Id,
|
|
4445
4839
|
endpoint_id: Id,
|
|
4446
4840
|
event_id: Id,
|
|
4447
4841
|
event_type: WebhookEventType,
|
|
4448
4842
|
status: WebhookDeliveryStatus,
|
|
4449
|
-
attempts:
|
|
4450
|
-
last_status_code:
|
|
4451
|
-
last_error:
|
|
4843
|
+
attempts: z19.number().int().min(0),
|
|
4844
|
+
last_status_code: z19.number().int().min(100).max(599).nullable(),
|
|
4845
|
+
last_error: z19.string().nullable(),
|
|
4452
4846
|
next_attempt_at: Timestamp.nullable(),
|
|
4453
4847
|
delivered_at: Timestamp.nullable(),
|
|
4454
4848
|
created_at: Timestamp
|
|
@@ -4457,7 +4851,7 @@ var WebhookDeliveryListQuery = PageQuery.extend({
|
|
|
4457
4851
|
status: WebhookDeliveryStatus.optional(),
|
|
4458
4852
|
event_type: WebhookEventType.optional()
|
|
4459
4853
|
});
|
|
4460
|
-
var WebhookDeliveryParams =
|
|
4854
|
+
var WebhookDeliveryParams = z19.object({ id: Id, delivery_id: Id });
|
|
4461
4855
|
|
|
4462
4856
|
// src/webhook-signing.ts
|
|
4463
4857
|
var WEBHOOK_SIGNATURE_HEADER = "x-mail-signature";
|
|
@@ -4524,99 +4918,99 @@ async function verifyWebhook(input) {
|
|
|
4524
4918
|
}
|
|
4525
4919
|
|
|
4526
4920
|
// src/billing.ts
|
|
4527
|
-
import { z as
|
|
4921
|
+
import { z as z20 } from "zod";
|
|
4528
4922
|
var PLAN_IDS = ["free", "starter", "growth", "design_partner"];
|
|
4529
|
-
var PlanId =
|
|
4530
|
-
var PlanLimits =
|
|
4531
|
-
monthly_messages:
|
|
4532
|
-
contacts:
|
|
4533
|
-
members:
|
|
4534
|
-
providers:
|
|
4535
|
-
webhook_endpoints:
|
|
4923
|
+
var PlanId = z20.enum(PLAN_IDS);
|
|
4924
|
+
var PlanLimits = z20.object({
|
|
4925
|
+
monthly_messages: z20.number().int().min(0).nullable(),
|
|
4926
|
+
contacts: z20.number().int().min(0).nullable(),
|
|
4927
|
+
members: z20.number().int().min(1).nullable(),
|
|
4928
|
+
providers: z20.number().int().min(1).nullable(),
|
|
4929
|
+
webhook_endpoints: z20.number().int().min(0).nullable(),
|
|
4536
4930
|
/** Automations that may be live (active or paused) at once (A1). */
|
|
4537
|
-
active_automations:
|
|
4931
|
+
active_automations: z20.number().int().min(0).nullable(),
|
|
4538
4932
|
/** Steps one automation may hold. Null is the flow's own cap, not unlimited. */
|
|
4539
|
-
automation_steps:
|
|
4933
|
+
automation_steps: z20.number().int().min(1).nullable(),
|
|
4540
4934
|
/** Own domains Lumitra Mail sends from (managed sending domains); 0 when the plan has none. */
|
|
4541
|
-
sending_domains:
|
|
4935
|
+
sending_domains: z20.number().int().min(0).nullable()
|
|
4542
4936
|
});
|
|
4543
|
-
var PlanFeatures =
|
|
4937
|
+
var PlanFeatures = z20.object({
|
|
4544
4938
|
/** A/B tests of subject and content on a mailing (S4). */
|
|
4545
|
-
ab_testing:
|
|
4939
|
+
ab_testing: z20.boolean(),
|
|
4546
4940
|
/** Open and click tracking, still off until a workspace turns it on (`settings.tracking_enabled`). */
|
|
4547
|
-
tracking:
|
|
4941
|
+
tracking: z20.boolean(),
|
|
4548
4942
|
/** Automations: flows a person walks through step by step (A1). */
|
|
4549
|
-
automations:
|
|
4943
|
+
automations: z20.boolean()
|
|
4550
4944
|
});
|
|
4551
4945
|
var PLAN_FEATURES = ["ab_testing", "tracking", "automations"];
|
|
4552
|
-
var Plan =
|
|
4946
|
+
var Plan = z20.object({
|
|
4553
4947
|
id: PlanId,
|
|
4554
|
-
name:
|
|
4948
|
+
name: z20.string().min(1),
|
|
4555
4949
|
/** Price in the smallest currency unit per month; null for plans not sold. */
|
|
4556
|
-
monthly_price_cents:
|
|
4557
|
-
currency:
|
|
4950
|
+
monthly_price_cents: z20.number().int().min(0).nullable(),
|
|
4951
|
+
currency: z20.string().length(3),
|
|
4558
4952
|
limits: PlanLimits,
|
|
4559
4953
|
features: PlanFeatures
|
|
4560
4954
|
});
|
|
4561
|
-
var CatalogPlan = Plan.extend({ sellable:
|
|
4562
|
-
var Subscription =
|
|
4955
|
+
var CatalogPlan = Plan.extend({ sellable: z20.boolean() });
|
|
4956
|
+
var Subscription = z20.object({
|
|
4563
4957
|
workspace_id: Id,
|
|
4564
4958
|
plan: PlanId,
|
|
4565
|
-
status:
|
|
4959
|
+
status: z20.enum(["active", "trialing", "past_due", "cancelled"]),
|
|
4566
4960
|
current_period_start: Timestamp,
|
|
4567
4961
|
current_period_end: Timestamp,
|
|
4568
|
-
cancel_at_period_end:
|
|
4962
|
+
cancel_at_period_end: z20.boolean(),
|
|
4569
4963
|
/**
|
|
4570
4964
|
* A design partner outside billing (plan `design_partner`, no limits, no
|
|
4571
4965
|
* checkout). Set only by an operator, never through the API.
|
|
4572
4966
|
*/
|
|
4573
|
-
billing_exempt:
|
|
4967
|
+
billing_exempt: z20.boolean(),
|
|
4574
4968
|
/**
|
|
4575
4969
|
* Own sending domains bought on top of the plan's included ones (the
|
|
4576
4970
|
* add-on), each a monthly charge on the same subscription. 0 without the
|
|
4577
4971
|
* add-on; the usage limit `sending_domains` is the plan's plus these.
|
|
4578
4972
|
*/
|
|
4579
|
-
extra_sending_domains:
|
|
4973
|
+
extra_sending_domains: z20.number().int().min(0)
|
|
4580
4974
|
});
|
|
4581
|
-
var BillingAddons =
|
|
4582
|
-
sending_domain:
|
|
4583
|
-
monthly_price_cents:
|
|
4584
|
-
currency:
|
|
4585
|
-
sellable:
|
|
4975
|
+
var BillingAddons = z20.object({
|
|
4976
|
+
sending_domain: z20.object({
|
|
4977
|
+
monthly_price_cents: z20.number().int().min(0),
|
|
4978
|
+
currency: z20.string().length(3),
|
|
4979
|
+
sellable: z20.boolean()
|
|
4586
4980
|
})
|
|
4587
4981
|
});
|
|
4588
4982
|
var MAX_EXTRA_SENDING_DOMAINS = 100;
|
|
4589
|
-
var ExtraSendingDomainsUpdate =
|
|
4983
|
+
var ExtraSendingDomainsUpdate = z20.object({ quantity: z20.number().int().min(0).max(MAX_EXTRA_SENDING_DOMAINS) });
|
|
4590
4984
|
var USAGE_METRICS = ["messages", "contacts", "members", "providers", "webhook_endpoints", "active_automations", "sending_domains"];
|
|
4591
|
-
var UsageMetric =
|
|
4985
|
+
var UsageMetric = z20.enum(USAGE_METRICS);
|
|
4592
4986
|
var USAGE_WARNING_RATIO = 0.8;
|
|
4593
|
-
var UsageWarning =
|
|
4987
|
+
var UsageWarning = z20.object({
|
|
4594
4988
|
metric: UsageMetric,
|
|
4595
|
-
used:
|
|
4596
|
-
limit:
|
|
4989
|
+
used: z20.number().int().min(0),
|
|
4990
|
+
limit: z20.number().int().min(0),
|
|
4597
4991
|
/** `approaching`: at or above USAGE_WARNING_RATIO of the limit; `reached`: at or above the limit. */
|
|
4598
|
-
level:
|
|
4992
|
+
level: z20.enum(["approaching", "reached"])
|
|
4599
4993
|
});
|
|
4600
|
-
var TermsStatus =
|
|
4601
|
-
var Usage =
|
|
4994
|
+
var TermsStatus = z20.object({ accepted_version: z20.string().nullable(), current_version: z20.string() });
|
|
4995
|
+
var Usage = z20.object({
|
|
4602
4996
|
plan: PlanId,
|
|
4603
4997
|
period_start: Timestamp,
|
|
4604
4998
|
period_end: Timestamp,
|
|
4605
|
-
metrics:
|
|
4606
|
-
warnings:
|
|
4999
|
+
metrics: z20.record(UsageMetric, z20.object({ used: z20.number().int().min(0), limit: z20.number().int().min(0).nullable() })),
|
|
5000
|
+
warnings: z20.array(UsageWarning),
|
|
4607
5001
|
terms: TermsStatus
|
|
4608
5002
|
});
|
|
4609
|
-
var TermsAcceptance =
|
|
4610
|
-
var CheckoutRequest =
|
|
4611
|
-
plan:
|
|
4612
|
-
success_url:
|
|
4613
|
-
cancel_url:
|
|
5003
|
+
var TermsAcceptance = z20.object({ accept_terms: AcceptTerms });
|
|
5004
|
+
var CheckoutRequest = z20.object({
|
|
5005
|
+
plan: z20.enum(["starter", "growth"]),
|
|
5006
|
+
success_url: z20.string().url(),
|
|
5007
|
+
cancel_url: z20.string().url(),
|
|
4614
5008
|
/** The buyer accepted the terms of service and the processing agreement of this version. */
|
|
4615
5009
|
accept_terms: AcceptTerms
|
|
4616
5010
|
});
|
|
4617
|
-
var CheckoutSession =
|
|
4618
|
-
var PortalRequest =
|
|
4619
|
-
var PortalSession =
|
|
5011
|
+
var CheckoutSession = z20.object({ url: z20.string().url() });
|
|
5012
|
+
var PortalRequest = z20.object({ return_url: z20.string().url() });
|
|
5013
|
+
var PortalSession = z20.object({ url: z20.string().url() });
|
|
4620
5014
|
var USAGE_WARNING_HEADER = "x-mail-usage-warning";
|
|
4621
5015
|
function formatUsageWarningHeader(warnings) {
|
|
4622
5016
|
if (warnings.length === 0) return null;
|
|
@@ -4636,7 +5030,7 @@ function parseUsageWarningHeader(value) {
|
|
|
4636
5030
|
}
|
|
4637
5031
|
|
|
4638
5032
|
// src/routes.ts
|
|
4639
|
-
import { z as
|
|
5033
|
+
import { z as z21 } from "zod";
|
|
4640
5034
|
var list = (item) => page(item);
|
|
4641
5035
|
var foundationRoutes = {
|
|
4642
5036
|
"workspaces.create": {
|
|
@@ -4882,7 +5276,7 @@ var templateRoutes = {
|
|
|
4882
5276
|
path: "/v1/templates/:id/export",
|
|
4883
5277
|
params: IdParams,
|
|
4884
5278
|
query: TemplateExportQuery,
|
|
4885
|
-
response:
|
|
5279
|
+
response: z21.string(),
|
|
4886
5280
|
responseType: "text",
|
|
4887
5281
|
status: 200,
|
|
4888
5282
|
access: "read",
|
|
@@ -5262,7 +5656,7 @@ var sendingRoutes = {
|
|
|
5262
5656
|
path: "/v1/mailings/:id/export",
|
|
5263
5657
|
params: IdParams,
|
|
5264
5658
|
query: MailingExportQuery,
|
|
5265
|
-
response:
|
|
5659
|
+
response: z21.string(),
|
|
5266
5660
|
responseType: "text",
|
|
5267
5661
|
status: 200,
|
|
5268
5662
|
access: "read",
|
|
@@ -5529,7 +5923,7 @@ var platformRoutes = {
|
|
|
5529
5923
|
"contactProperties.list": {
|
|
5530
5924
|
method: "GET",
|
|
5531
5925
|
path: "/v1/contact-properties",
|
|
5532
|
-
response:
|
|
5926
|
+
response: z21.object({ data: z21.array(ContactPropertyDefinition) }),
|
|
5533
5927
|
status: 200,
|
|
5534
5928
|
access: "read",
|
|
5535
5929
|
phase: "S4"
|
|
@@ -5828,7 +6222,7 @@ var billingRoutes = {
|
|
|
5828
6222
|
"billing.plans": {
|
|
5829
6223
|
method: "GET",
|
|
5830
6224
|
path: "/v1/billing/plans",
|
|
5831
|
-
response:
|
|
6225
|
+
response: z21.object({ data: z21.array(CatalogPlan), addons: BillingAddons }),
|
|
5832
6226
|
status: 200,
|
|
5833
6227
|
access: "read",
|
|
5834
6228
|
phase: "S5"
|
|
@@ -5917,6 +6311,73 @@ var domainBuyingRoutes = {
|
|
|
5917
6311
|
phase: "S5"
|
|
5918
6312
|
}
|
|
5919
6313
|
};
|
|
6314
|
+
var boughtDomainRoutes = {
|
|
6315
|
+
"boughtDomains.list": {
|
|
6316
|
+
method: "GET",
|
|
6317
|
+
path: "/v1/bought-domains",
|
|
6318
|
+
response: z21.object({ data: z21.array(BoughtDomain) }),
|
|
6319
|
+
status: 200,
|
|
6320
|
+
access: "admin",
|
|
6321
|
+
phase: "S5"
|
|
6322
|
+
},
|
|
6323
|
+
"boughtDomains.records": {
|
|
6324
|
+
method: "GET",
|
|
6325
|
+
path: "/v1/bought-domains/:id/records",
|
|
6326
|
+
params: IdParams,
|
|
6327
|
+
response: z21.object({ data: z21.array(DomainRecord) }),
|
|
6328
|
+
status: 200,
|
|
6329
|
+
access: "admin",
|
|
6330
|
+
phase: "S5"
|
|
6331
|
+
},
|
|
6332
|
+
"boughtDomains.createRecord": {
|
|
6333
|
+
method: "POST",
|
|
6334
|
+
path: "/v1/bought-domains/:id/records",
|
|
6335
|
+
params: IdParams,
|
|
6336
|
+
body: DomainRecordInput,
|
|
6337
|
+
response: DomainRecord,
|
|
6338
|
+
status: 201,
|
|
6339
|
+
access: "admin",
|
|
6340
|
+
phase: "S5"
|
|
6341
|
+
},
|
|
6342
|
+
"boughtDomains.updateRecord": {
|
|
6343
|
+
method: "PATCH",
|
|
6344
|
+
path: "/v1/bought-domains/:id/records/:record_id",
|
|
6345
|
+
params: BoughtDomainRecordParams,
|
|
6346
|
+
body: DomainRecordInput,
|
|
6347
|
+
response: DomainRecord,
|
|
6348
|
+
status: 200,
|
|
6349
|
+
access: "admin",
|
|
6350
|
+
phase: "S5"
|
|
6351
|
+
},
|
|
6352
|
+
"boughtDomains.deleteRecord": {
|
|
6353
|
+
method: "DELETE",
|
|
6354
|
+
path: "/v1/bought-domains/:id/records/:record_id",
|
|
6355
|
+
params: BoughtDomainRecordParams,
|
|
6356
|
+
response: Ok,
|
|
6357
|
+
status: 200,
|
|
6358
|
+
access: "admin",
|
|
6359
|
+
phase: "S5"
|
|
6360
|
+
},
|
|
6361
|
+
"boughtDomains.zoneFile": {
|
|
6362
|
+
method: "GET",
|
|
6363
|
+
path: "/v1/bought-domains/:id/zone-file",
|
|
6364
|
+
params: IdParams,
|
|
6365
|
+
response: ZoneFile,
|
|
6366
|
+
status: 200,
|
|
6367
|
+
access: "admin",
|
|
6368
|
+
phase: "S5"
|
|
6369
|
+
},
|
|
6370
|
+
"boughtDomains.leave": {
|
|
6371
|
+
method: "POST",
|
|
6372
|
+
path: "/v1/bought-domains/:id/leave",
|
|
6373
|
+
params: IdParams,
|
|
6374
|
+
body: DomainLeaveCreate,
|
|
6375
|
+
response: BoughtDomain,
|
|
6376
|
+
status: 201,
|
|
6377
|
+
access: "admin",
|
|
6378
|
+
phase: "S5"
|
|
6379
|
+
}
|
|
6380
|
+
};
|
|
5920
6381
|
var inviteRoutes = {
|
|
5921
6382
|
"invites.create": {
|
|
5922
6383
|
method: "POST",
|
|
@@ -6026,7 +6487,7 @@ var automationRoutes = {
|
|
|
6026
6487
|
method: "POST",
|
|
6027
6488
|
path: "/v1/automations/:id/pause",
|
|
6028
6489
|
params: IdParams,
|
|
6029
|
-
body:
|
|
6490
|
+
body: z21.object({}).strict(),
|
|
6030
6491
|
response: Automation,
|
|
6031
6492
|
status: 200,
|
|
6032
6493
|
access: "write",
|
|
@@ -6036,7 +6497,7 @@ var automationRoutes = {
|
|
|
6036
6497
|
method: "POST",
|
|
6037
6498
|
path: "/v1/automations/:id/resume",
|
|
6038
6499
|
params: IdParams,
|
|
6039
|
-
body:
|
|
6500
|
+
body: z21.object({}).strict(),
|
|
6040
6501
|
response: Automation,
|
|
6041
6502
|
status: 200,
|
|
6042
6503
|
access: "write",
|
|
@@ -6046,7 +6507,7 @@ var automationRoutes = {
|
|
|
6046
6507
|
method: "POST",
|
|
6047
6508
|
path: "/v1/automations/:id/archive",
|
|
6048
6509
|
params: IdParams,
|
|
6049
|
-
body:
|
|
6510
|
+
body: z21.object({}).strict(),
|
|
6050
6511
|
response: Automation,
|
|
6051
6512
|
status: 200,
|
|
6052
6513
|
access: "write",
|
|
@@ -6162,6 +6623,7 @@ var routes = {
|
|
|
6162
6623
|
...platformRoutes,
|
|
6163
6624
|
...billingRoutes,
|
|
6164
6625
|
...domainBuyingRoutes,
|
|
6626
|
+
...boughtDomainRoutes,
|
|
6165
6627
|
...automationRoutes
|
|
6166
6628
|
};
|
|
6167
6629
|
var TRUSTED_APP_OPERATIONS = {
|
|
@@ -6293,6 +6755,8 @@ export {
|
|
|
6293
6755
|
BEARER_PREFIX,
|
|
6294
6756
|
BILLING_NOT_CONFIGURED_REASON,
|
|
6295
6757
|
BillingAddons,
|
|
6758
|
+
BoughtDomain,
|
|
6759
|
+
BoughtDomainRecordParams,
|
|
6296
6760
|
BoundedAutomationFilter,
|
|
6297
6761
|
BoundedSegmentFilter,
|
|
6298
6762
|
COMPANY_GRANT_ROLES,
|
|
@@ -6327,21 +6791,33 @@ export {
|
|
|
6327
6791
|
DATE_PASSED_ANSWERS,
|
|
6328
6792
|
DEFAULT_INVITE_TTL_DAYS,
|
|
6329
6793
|
DEFAULT_PAGE_LIMIT,
|
|
6794
|
+
DNS_RECORD_TYPES,
|
|
6330
6795
|
DOCUMENT_SCHEMA_VERSIONS,
|
|
6331
6796
|
DOMAIN_BUYING_BLOCKS,
|
|
6332
6797
|
DOMAIN_BUYING_NOT_CONFIGURED_REASON,
|
|
6798
|
+
DOMAIN_LEAVE_STATES,
|
|
6799
|
+
DOMAIN_LEAVE_WAYS,
|
|
6800
|
+
DOMAIN_ORDER_KINDS,
|
|
6333
6801
|
DOMAIN_ORDER_STATES,
|
|
6334
6802
|
DOMAIN_PRICE_CHANGED_REASON,
|
|
6335
6803
|
DOMAIN_UNAVAILABLE_REASONS,
|
|
6336
6804
|
DateOnly,
|
|
6337
6805
|
DatePassedAnswer,
|
|
6338
6806
|
DelayStep,
|
|
6807
|
+
DnsRecordType,
|
|
6339
6808
|
DocumentSchemaVersion,
|
|
6340
6809
|
DomainBuyingBlock,
|
|
6810
|
+
DomainLeave,
|
|
6811
|
+
DomainLeaveCreate,
|
|
6812
|
+
DomainLeaveState,
|
|
6813
|
+
DomainLeaveWay,
|
|
6341
6814
|
DomainOffer,
|
|
6342
6815
|
DomainOrder,
|
|
6343
6816
|
DomainOrderCreate,
|
|
6817
|
+
DomainOrderKind,
|
|
6344
6818
|
DomainOrderState,
|
|
6819
|
+
DomainRecord,
|
|
6820
|
+
DomainRecordInput,
|
|
6345
6821
|
DomainRegistrant,
|
|
6346
6822
|
DomainSearchQuery,
|
|
6347
6823
|
DomainSearchResult,
|
|
@@ -6554,6 +7030,7 @@ export {
|
|
|
6554
7030
|
QuietHours,
|
|
6555
7031
|
RECIPIENT_REJECTIONS,
|
|
6556
7032
|
RECIPIENT_STATUSES,
|
|
7033
|
+
REGISTRY_PHONE,
|
|
6557
7034
|
REQUEST_ID_HEADER,
|
|
6558
7035
|
RESEND_EVENT_TYPES,
|
|
6559
7036
|
RESERVED_MERGE_FIELDS,
|
|
@@ -6718,6 +7195,7 @@ export {
|
|
|
6718
7195
|
WorkspaceMove,
|
|
6719
7196
|
WorkspaceSettings,
|
|
6720
7197
|
WorkspaceUpdate,
|
|
7198
|
+
ZoneFile,
|
|
6721
7199
|
acceptsIdempotencyKey,
|
|
6722
7200
|
addInsertion,
|
|
6723
7201
|
addInsertionChoice,
|
|
@@ -6727,6 +7205,7 @@ export {
|
|
|
6727
7205
|
automationFilterFamily,
|
|
6728
7206
|
automationRoutes,
|
|
6729
7207
|
billingRoutes,
|
|
7208
|
+
boughtDomainRoutes,
|
|
6730
7209
|
buildPath,
|
|
6731
7210
|
buildTemplatePatch,
|
|
6732
7211
|
canDeleteMailing,
|
|
@@ -6791,6 +7270,7 @@ export {
|
|
|
6791
7270
|
missingInsertionTexts,
|
|
6792
7271
|
missingRequiredMergeFields,
|
|
6793
7272
|
normalizeChoiceKey,
|
|
7273
|
+
normalizePhone,
|
|
6794
7274
|
nowSeconds,
|
|
6795
7275
|
operationsWithAccess,
|
|
6796
7276
|
ownEntry,
|