@marlinjai/mail-contract 0.18.0 → 0.19.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 +31 -1
- package/dist/index.d.ts +31 -1
- package/dist/index.js +350 -331
- package/dist/index.mjs +348 -331
- package/package.json +1 -1
package/dist/index.mjs
CHANGED
|
@@ -151,7 +151,7 @@ var API_VERSION_PREFIX = "/v1";
|
|
|
151
151
|
var HEALTH_PATH = "/healthz";
|
|
152
152
|
|
|
153
153
|
// src/workspace.ts
|
|
154
|
-
import { z as
|
|
154
|
+
import { z as z12 } from "zod";
|
|
155
155
|
|
|
156
156
|
// src/automations.ts
|
|
157
157
|
import { z as z10 } from "zod";
|
|
@@ -2783,16 +2783,23 @@ var EventListQuery = PageQuery.extend({
|
|
|
2783
2783
|
contact_id: Id.optional()
|
|
2784
2784
|
});
|
|
2785
2785
|
|
|
2786
|
+
// src/legal.ts
|
|
2787
|
+
import { z as z11 } from "zod";
|
|
2788
|
+
var LEGAL_TERMS_VERSION = "2026-10-23";
|
|
2789
|
+
var AcceptTerms = z11.literal(LEGAL_TERMS_VERSION, {
|
|
2790
|
+
errorMap: () => ({ message: `must be "${LEGAL_TERMS_VERSION}": accept the current terms of service and processing agreement` })
|
|
2791
|
+
});
|
|
2792
|
+
|
|
2786
2793
|
// src/workspace.ts
|
|
2787
|
-
var CompanyId =
|
|
2794
|
+
var CompanyId = z12.string().min(1).max(64);
|
|
2788
2795
|
var ASSET_POLICIES = ["any", "service_only"];
|
|
2789
|
-
var AssetPolicy =
|
|
2796
|
+
var AssetPolicy = z12.enum(ASSET_POLICIES);
|
|
2790
2797
|
var MAX_ALLOWED_ASSET_HOSTS = 20;
|
|
2791
|
-
var AssetHost =
|
|
2792
|
-
var MergeDefaults =
|
|
2798
|
+
var AssetHost = z12.string().trim().toLowerCase().min(1).max(253).regex(/^(?=.{1,253}(?::\d{1,5})?$)[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?(\.[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?)+(:\d{1,5})?$/, "a host name such as example.com");
|
|
2799
|
+
var MergeDefaults = z12.record(MergeFieldName, MergeDefaultValue).refine((m) => Object.keys(m).length <= MAX_MERGE_DEFAULTS, `at most ${MAX_MERGE_DEFAULTS} merge defaults`).refine((m) => !Object.keys(m).some((k) => k in RESERVED_MERGE_FIELDS), {
|
|
2793
2800
|
message: `a reserved merge field (${Object.keys(RESERVED_MERGE_FIELDS).join(", ")}) cannot have a workspace default`
|
|
2794
2801
|
});
|
|
2795
|
-
var WorkspaceSettings =
|
|
2802
|
+
var WorkspaceSettings = z12.object({
|
|
2796
2803
|
/**
|
|
2797
2804
|
* The workspace's main language (a {@link LocaleTag}, e.g. "de"): the main
|
|
2798
2805
|
* language of a new template, and of the hosted pages when nothing else
|
|
@@ -2805,9 +2812,9 @@ var WorkspaceSettings = z11.object({
|
|
|
2805
2812
|
* each; the hosted pages are offered in those of them they support (English,
|
|
2806
2813
|
* German, French, Italian, Spanish). The service stores canonical casing.
|
|
2807
2814
|
*/
|
|
2808
|
-
locales:
|
|
2815
|
+
locales: z12.array(LocaleTag).min(1).max(20).refine((l) => new Set(l.map((t) => t.toLowerCase())).size === l.length, "a language appears twice"),
|
|
2809
2816
|
/** Open and click tracking. Off by default, opt-in per workspace. */
|
|
2810
|
-
tracking_enabled:
|
|
2817
|
+
tracking_enabled: z12.boolean(),
|
|
2811
2818
|
/** Where images, stylesheets and fonts in a mail may load from. `any` by default. */
|
|
2812
2819
|
asset_policy: AssetPolicy,
|
|
2813
2820
|
/**
|
|
@@ -2815,7 +2822,7 @@ var WorkspaceSettings = z11.object({
|
|
|
2815
2822
|
* the workspace's website, typically. Empty by default. Ignored under `any`,
|
|
2816
2823
|
* which allows everything already.
|
|
2817
2824
|
*/
|
|
2818
|
-
allowed_asset_hosts:
|
|
2825
|
+
allowed_asset_hosts: z12.array(AssetHost).max(MAX_ALLOWED_ASSET_HOSTS),
|
|
2819
2826
|
/** Merge values every mail of the workspace can use (see `MergeDefaults`). Empty by default. */
|
|
2820
2827
|
merge_defaults: MergeDefaults,
|
|
2821
2828
|
/**
|
|
@@ -2824,10 +2831,10 @@ var WorkspaceSettings = z11.object({
|
|
|
2824
2831
|
*/
|
|
2825
2832
|
default_timezone: TimezoneName.nullable()
|
|
2826
2833
|
});
|
|
2827
|
-
var Workspace =
|
|
2834
|
+
var Workspace = z12.object({
|
|
2828
2835
|
id: Id,
|
|
2829
2836
|
slug: Slug,
|
|
2830
|
-
name:
|
|
2837
|
+
name: z12.string().min(1).max(120),
|
|
2831
2838
|
settings: WorkspaceSettings,
|
|
2832
2839
|
/**
|
|
2833
2840
|
* The auth-brain company (tenant) the workspace was created for, or null for
|
|
@@ -2838,13 +2845,13 @@ var Workspace = z11.object({
|
|
|
2838
2845
|
created_at: Timestamp,
|
|
2839
2846
|
updated_at: Timestamp
|
|
2840
2847
|
});
|
|
2841
|
-
var WorkspaceCreate =
|
|
2848
|
+
var WorkspaceCreate = z12.object({
|
|
2842
2849
|
slug: Slug,
|
|
2843
|
-
name:
|
|
2850
|
+
name: z12.string().min(1).max(120),
|
|
2844
2851
|
settings: WorkspaceSettings.partial().optional(),
|
|
2845
|
-
owner:
|
|
2852
|
+
owner: z12.object({
|
|
2846
2853
|
email: Email,
|
|
2847
|
-
name:
|
|
2854
|
+
name: z12.string().max(200).nullable().optional()
|
|
2848
2855
|
}),
|
|
2849
2856
|
/**
|
|
2850
2857
|
* The auth-brain company the workspace is created in. Required since 0.14.0:
|
|
@@ -2853,27 +2860,33 @@ var WorkspaceCreate = z11.object({
|
|
|
2853
2860
|
* invitation (`members.syncCompanyRole`). A workspace created before, without
|
|
2854
2861
|
* one, keeps working and simply has no such inheritance.
|
|
2855
2862
|
*/
|
|
2856
|
-
company_id: CompanyId
|
|
2863
|
+
company_id: CompanyId,
|
|
2864
|
+
/**
|
|
2865
|
+
* The person creating the workspace accepts the terms of service and the
|
|
2866
|
+
* processing agreement for its company, of this version (required since
|
|
2867
|
+
* 0.19.0): the workspace processes recipients' data from its first contact.
|
|
2868
|
+
*/
|
|
2869
|
+
accept_terms: AcceptTerms
|
|
2857
2870
|
});
|
|
2858
|
-
var WorkspaceUpdate =
|
|
2859
|
-
name:
|
|
2871
|
+
var WorkspaceUpdate = z12.object({
|
|
2872
|
+
name: z12.string().min(1).max(120),
|
|
2860
2873
|
settings: WorkspaceSettings.partial()
|
|
2861
2874
|
}).partial().refine((v) => Object.keys(v).length > 0, "at least one field");
|
|
2862
|
-
var WorkspaceMove =
|
|
2875
|
+
var WorkspaceMove = z12.object({ company_id: CompanyId });
|
|
2863
2876
|
var MEMBER_ROLES = ["owner", "admin", "editor", "viewer"];
|
|
2864
|
-
var MemberRole =
|
|
2877
|
+
var MemberRole = z12.enum(MEMBER_ROLES);
|
|
2865
2878
|
var WorkspaceMembership = Workspace.extend({ role: MemberRole });
|
|
2866
2879
|
var MEMBER_SOURCES = ["invited", "company"];
|
|
2867
|
-
var MemberSource =
|
|
2880
|
+
var MemberSource = z12.enum(MEMBER_SOURCES);
|
|
2868
2881
|
var COMPANY_GRANT_ROLES = ["owner", "admin"];
|
|
2869
|
-
var CompanyGrantRole =
|
|
2882
|
+
var CompanyGrantRole = z12.enum(COMPANY_GRANT_ROLES);
|
|
2870
2883
|
var COMPANY_ROLE_MAX_AGE_HOURS = 24;
|
|
2871
|
-
var Member =
|
|
2884
|
+
var Member = z12.object({
|
|
2872
2885
|
id: Id,
|
|
2873
2886
|
/** The person's auth-brain subject. */
|
|
2874
|
-
subject:
|
|
2887
|
+
subject: z12.string().min(1).max(255),
|
|
2875
2888
|
email: Email,
|
|
2876
|
-
name:
|
|
2889
|
+
name: z12.string().max(200).nullable(),
|
|
2877
2890
|
/**
|
|
2878
2891
|
* The role in force: the higher of the person's own role in the workspace
|
|
2879
2892
|
* and the one a confirmed company role carries. For a `company` row that is
|
|
@@ -2900,48 +2913,48 @@ var Member = z11.object({
|
|
|
2900
2913
|
* false is one whose company role has not been confirmed within
|
|
2901
2914
|
* `COMPANY_ROLE_MAX_AGE_HOURS`; it grants nothing and an admin may remove it.
|
|
2902
2915
|
*/
|
|
2903
|
-
inherited:
|
|
2916
|
+
inherited: z12.boolean().optional()
|
|
2904
2917
|
});
|
|
2905
2918
|
var MAX_SYNC_COMPANIES = 100;
|
|
2906
|
-
var MemberCompanySync =
|
|
2919
|
+
var MemberCompanySync = z12.object({
|
|
2907
2920
|
email: Email,
|
|
2908
|
-
name:
|
|
2909
|
-
companies:
|
|
2921
|
+
name: z12.string().max(200).nullable().optional(),
|
|
2922
|
+
companies: z12.array(z12.object({ company_id: CompanyId, role: CompanyGrantRole })).max(MAX_SYNC_COMPANIES).refine((list2) => new Set(list2.map((c) => c.company_id)).size === list2.length, "each company at most once")
|
|
2910
2923
|
});
|
|
2911
|
-
var MemberCompanySyncResult =
|
|
2924
|
+
var MemberCompanySyncResult = z12.object({
|
|
2912
2925
|
/** Workspaces in which the person now holds a company role they did not hold, or held differently, before this call. */
|
|
2913
|
-
granted:
|
|
2926
|
+
granted: z12.array(Id),
|
|
2914
2927
|
/** Workspaces in which a company role was taken away by this call. */
|
|
2915
|
-
revoked:
|
|
2928
|
+
revoked: z12.array(Id),
|
|
2916
2929
|
/** Workspaces in which the person's company role was already as stated. */
|
|
2917
|
-
unchanged:
|
|
2930
|
+
unchanged: z12.array(Id)
|
|
2918
2931
|
});
|
|
2919
|
-
var MemberCreate =
|
|
2920
|
-
subject:
|
|
2932
|
+
var MemberCreate = z12.object({
|
|
2933
|
+
subject: z12.string().min(1).max(255),
|
|
2921
2934
|
email: Email,
|
|
2922
|
-
name:
|
|
2935
|
+
name: z12.string().max(200).nullable().optional(),
|
|
2923
2936
|
role: MemberRole
|
|
2924
2937
|
});
|
|
2925
|
-
var MemberUpdate =
|
|
2938
|
+
var MemberUpdate = z12.object({ role: MemberRole });
|
|
2926
2939
|
var API_KEY_SCOPES = ["full", "read", "send"];
|
|
2927
|
-
var ApiKeyScope =
|
|
2928
|
-
var ApiKey =
|
|
2940
|
+
var ApiKeyScope = z12.enum(API_KEY_SCOPES);
|
|
2941
|
+
var ApiKey = z12.object({
|
|
2929
2942
|
id: Id,
|
|
2930
|
-
name:
|
|
2943
|
+
name: z12.string().min(1).max(120),
|
|
2931
2944
|
/** The first characters of the key, for recognising it in a list. */
|
|
2932
|
-
prefix:
|
|
2945
|
+
prefix: z12.string().min(4).max(32),
|
|
2933
2946
|
scope: ApiKeyScope,
|
|
2934
2947
|
last_used_at: Timestamp.nullable(),
|
|
2935
2948
|
revoked_at: Timestamp.nullable(),
|
|
2936
2949
|
created_at: Timestamp
|
|
2937
2950
|
});
|
|
2938
|
-
var ApiKeyCreate =
|
|
2939
|
-
name:
|
|
2951
|
+
var ApiKeyCreate = z12.object({
|
|
2952
|
+
name: z12.string().min(1).max(120),
|
|
2940
2953
|
/** Omitted means `full`. */
|
|
2941
2954
|
scope: ApiKeyScope.optional()
|
|
2942
2955
|
});
|
|
2943
|
-
var ApiKeyCreated =
|
|
2944
|
-
key:
|
|
2956
|
+
var ApiKeyCreated = z12.object({
|
|
2957
|
+
key: z12.string().min(20),
|
|
2945
2958
|
api_key: ApiKey
|
|
2946
2959
|
});
|
|
2947
2960
|
var AUDIT_ACTIONS = [
|
|
@@ -3037,14 +3050,14 @@ var AUDIT_ACTIONS = [
|
|
|
3037
3050
|
"automation.run_ended",
|
|
3038
3051
|
"event.recorded"
|
|
3039
3052
|
];
|
|
3040
|
-
var AuditAction =
|
|
3053
|
+
var AuditAction = z12.enum(AUDIT_ACTIONS);
|
|
3041
3054
|
var TRUSTED_APPS = ["booking"];
|
|
3042
|
-
var TrustedApp =
|
|
3043
|
-
var AuditActor =
|
|
3044
|
-
|
|
3045
|
-
type:
|
|
3055
|
+
var TrustedApp = z12.enum(TRUSTED_APPS);
|
|
3056
|
+
var AuditActor = z12.discriminatedUnion("type", [
|
|
3057
|
+
z12.object({
|
|
3058
|
+
type: z12.literal("member"),
|
|
3046
3059
|
member_id: Id,
|
|
3047
|
-
subject:
|
|
3060
|
+
subject: z12.string().min(1),
|
|
3048
3061
|
/**
|
|
3049
3062
|
* The application the person acted through, when it was not the dashboard:
|
|
3050
3063
|
* the service set it from the service token the call carried, so it is
|
|
@@ -3052,26 +3065,26 @@ var AuditActor = z11.discriminatedUnion("type", [
|
|
|
3052
3065
|
*/
|
|
3053
3066
|
app: TrustedApp.optional()
|
|
3054
3067
|
}),
|
|
3055
|
-
|
|
3056
|
-
type:
|
|
3068
|
+
z12.object({
|
|
3069
|
+
type: z12.literal("api_key"),
|
|
3057
3070
|
api_key_id: Id,
|
|
3058
3071
|
/**
|
|
3059
3072
|
* Who the client's application said it was acting for, from
|
|
3060
3073
|
* `ON_BEHALF_OF_HEADER`: reported by that application, never verified.
|
|
3061
3074
|
* Absent when the call carried no label.
|
|
3062
3075
|
*/
|
|
3063
|
-
on_behalf_of:
|
|
3076
|
+
on_behalf_of: z12.string().min(1).max(ON_BEHALF_OF_MAX_LENGTH).optional()
|
|
3064
3077
|
}),
|
|
3065
3078
|
/** The service itself (the worker, a bounce, the hosted unsubscribe page). */
|
|
3066
|
-
|
|
3079
|
+
z12.object({ type: z12.literal("system"), reason: z12.string().min(1).max(200) })
|
|
3067
3080
|
]);
|
|
3068
|
-
var AuditEntry =
|
|
3081
|
+
var AuditEntry = z12.object({
|
|
3069
3082
|
id: Id,
|
|
3070
3083
|
action: AuditAction,
|
|
3071
3084
|
actor: AuditActor,
|
|
3072
|
-
target_type:
|
|
3085
|
+
target_type: z12.string().min(1).max(64),
|
|
3073
3086
|
target_id: Id.nullable(),
|
|
3074
|
-
details:
|
|
3087
|
+
details: z12.record(z12.unknown()),
|
|
3075
3088
|
created_at: Timestamp
|
|
3076
3089
|
});
|
|
3077
3090
|
var AuditQuery = PageQuery.extend({
|
|
@@ -3080,12 +3093,12 @@ var AuditQuery = PageQuery.extend({
|
|
|
3080
3093
|
});
|
|
3081
3094
|
|
|
3082
3095
|
// src/invites.ts
|
|
3083
|
-
import { z as
|
|
3096
|
+
import { z as z13 } from "zod";
|
|
3084
3097
|
var INVITE_STATUSES = ["pending", "accepted", "revoked", "expired"];
|
|
3085
|
-
var InviteStatus =
|
|
3098
|
+
var InviteStatus = z13.enum(INVITE_STATUSES);
|
|
3086
3099
|
var DEFAULT_INVITE_TTL_DAYS = 7;
|
|
3087
3100
|
var MAX_INVITE_TTL_DAYS = 30;
|
|
3088
|
-
var Invite =
|
|
3101
|
+
var Invite = z13.object({
|
|
3089
3102
|
id: Id,
|
|
3090
3103
|
/** Stored lowercased; only a person signed in with this address can accept. */
|
|
3091
3104
|
email: Email,
|
|
@@ -3093,32 +3106,32 @@ var Invite = z12.object({
|
|
|
3093
3106
|
/** Derived from the timestamps below, never stored. */
|
|
3094
3107
|
status: InviteStatus,
|
|
3095
3108
|
/** The member who invited, while they are still one (null after they left). */
|
|
3096
|
-
invited_by:
|
|
3109
|
+
invited_by: z13.object({ member_id: Id.nullable(), email: Email.nullable() }),
|
|
3097
3110
|
expires_at: Timestamp,
|
|
3098
3111
|
accepted_at: Timestamp.nullable(),
|
|
3099
3112
|
revoked_at: Timestamp.nullable(),
|
|
3100
3113
|
created_at: Timestamp
|
|
3101
3114
|
});
|
|
3102
|
-
var InviteCreate =
|
|
3115
|
+
var InviteCreate = z13.object({
|
|
3103
3116
|
email: Email,
|
|
3104
3117
|
role: MemberRole,
|
|
3105
|
-
expires_in_days:
|
|
3118
|
+
expires_in_days: z13.number().int().min(1).max(MAX_INVITE_TTL_DAYS).optional()
|
|
3106
3119
|
});
|
|
3107
|
-
var InviteCreated =
|
|
3120
|
+
var InviteCreated = z13.object({
|
|
3108
3121
|
invite: Invite,
|
|
3109
|
-
token:
|
|
3122
|
+
token: z13.string().min(32).max(128)
|
|
3110
3123
|
});
|
|
3111
3124
|
var InviteListQuery = PageQuery.extend({
|
|
3112
3125
|
status: InviteStatus.optional()
|
|
3113
3126
|
});
|
|
3114
|
-
var InviteAccept =
|
|
3115
|
-
token:
|
|
3127
|
+
var InviteAccept = z13.object({
|
|
3128
|
+
token: z13.string().min(32).max(128),
|
|
3116
3129
|
email: Email,
|
|
3117
|
-
name:
|
|
3130
|
+
name: z13.string().max(200).nullable().optional()
|
|
3118
3131
|
});
|
|
3119
|
-
var InviteAccepted =
|
|
3132
|
+
var InviteAccepted = z13.object({
|
|
3120
3133
|
workspace: WorkspaceMembership,
|
|
3121
|
-
already_member:
|
|
3134
|
+
already_member: z13.boolean()
|
|
3122
3135
|
});
|
|
3123
3136
|
var INVITE_REFUSAL_REASONS = ["email_mismatch", "inviter_lacks_role", "expired", "revoked", "accepted"];
|
|
3124
3137
|
|
|
@@ -3748,13 +3761,13 @@ function renameInsertionEverywhere(drafts, from, rawTo) {
|
|
|
3748
3761
|
}
|
|
3749
3762
|
|
|
3750
3763
|
// src/providers.ts
|
|
3751
|
-
import { z as
|
|
3764
|
+
import { z as z14 } from "zod";
|
|
3752
3765
|
var PROVIDER_KINDS = ["smtp", "resend"];
|
|
3753
|
-
var ProviderKind =
|
|
3754
|
-
var ProviderPolicy =
|
|
3755
|
-
daily_recipient_budget:
|
|
3756
|
-
min_interval_ms:
|
|
3757
|
-
max_recipients_per_message:
|
|
3766
|
+
var ProviderKind = z14.enum(PROVIDER_KINDS);
|
|
3767
|
+
var ProviderPolicy = z14.object({
|
|
3768
|
+
daily_recipient_budget: z14.number().int().min(1).max(1e7),
|
|
3769
|
+
min_interval_ms: z14.number().int().min(0).max(36e5),
|
|
3770
|
+
max_recipients_per_message: z14.number().int().min(1).max(1e3)
|
|
3758
3771
|
});
|
|
3759
3772
|
var ICLOUD_SMTP_POLICY = {
|
|
3760
3773
|
daily_recipient_budget: 800,
|
|
@@ -3762,17 +3775,17 @@ var ICLOUD_SMTP_POLICY = {
|
|
|
3762
3775
|
max_recipients_per_message: 1
|
|
3763
3776
|
};
|
|
3764
3777
|
var SMTP_SECURITY = ["tls", "starttls"];
|
|
3765
|
-
var SmtpConfigBase =
|
|
3766
|
-
host:
|
|
3767
|
-
port:
|
|
3778
|
+
var SmtpConfigBase = z14.object({
|
|
3779
|
+
host: z14.string().min(1).max(255),
|
|
3780
|
+
port: z14.number().int().min(1).max(65535),
|
|
3768
3781
|
/** `tls` connects encrypted (465), `starttls` upgrades (587). Never plaintext. */
|
|
3769
|
-
security:
|
|
3770
|
-
username:
|
|
3782
|
+
security: z14.enum(SMTP_SECURITY),
|
|
3783
|
+
username: z14.string().min(1).max(255)
|
|
3771
3784
|
});
|
|
3772
|
-
var ResendConfigBase =
|
|
3773
|
-
var ProviderRejections =
|
|
3774
|
-
count:
|
|
3775
|
-
last_error:
|
|
3785
|
+
var ResendConfigBase = z14.object({});
|
|
3786
|
+
var ProviderRejections = z14.object({
|
|
3787
|
+
count: z14.number().int().min(0),
|
|
3788
|
+
last_error: z14.string().nullable(),
|
|
3776
3789
|
last_at: Timestamp.nullable(),
|
|
3777
3790
|
/**
|
|
3778
3791
|
* The last time the bounce circuit breaker tripped on one of this provider's
|
|
@@ -3782,59 +3795,59 @@ var ProviderRejections = z13.object({
|
|
|
3782
3795
|
* run's bounce blocks were undone and the mailing paused. `sample` is the
|
|
3783
3796
|
* reply that tripped it.
|
|
3784
3797
|
*/
|
|
3785
|
-
anomaly:
|
|
3798
|
+
anomaly: z14.object({
|
|
3786
3799
|
at: Timestamp,
|
|
3787
3800
|
/** `mailing`: one mailing was paused. `provider`: 5 refusals in a row with the same reply across the provider's sends (test sends and one-recipient mailings included) within 24 hours. */
|
|
3788
|
-
scope:
|
|
3801
|
+
scope: z14.enum(["mailing", "provider"]),
|
|
3789
3802
|
/**
|
|
3790
3803
|
* True while the provider-wide breaker is open: no bounce blocks through
|
|
3791
3804
|
* this provider, test sends refused and mailings not started or resumed
|
|
3792
3805
|
* (`provider_anomaly`), until an admin clears it (`providers.clearAnomaly`).
|
|
3793
3806
|
*/
|
|
3794
|
-
blocking:
|
|
3807
|
+
blocking: z14.boolean(),
|
|
3795
3808
|
mailing_id: Id.nullable(),
|
|
3796
|
-
reason:
|
|
3797
|
-
sample:
|
|
3809
|
+
reason: z14.string(),
|
|
3810
|
+
sample: z14.string()
|
|
3798
3811
|
}).nullable()
|
|
3799
3812
|
});
|
|
3800
|
-
var ProviderEvents =
|
|
3801
|
-
status:
|
|
3802
|
-
source:
|
|
3803
|
-
url:
|
|
3804
|
-
error:
|
|
3813
|
+
var ProviderEvents = z14.object({
|
|
3814
|
+
status: z14.enum(["active", "needs_secret"]),
|
|
3815
|
+
source: z14.enum(["automatic", "manual", "managed"]).nullable(),
|
|
3816
|
+
url: z14.string().url(),
|
|
3817
|
+
error: z14.string().nullable(),
|
|
3805
3818
|
/**
|
|
3806
3819
|
* Events that named an email this provider never sent through the service
|
|
3807
3820
|
* (another workspace or system sharing the Resend account): counted, never
|
|
3808
3821
|
* acted on.
|
|
3809
3822
|
*/
|
|
3810
|
-
unmatched:
|
|
3823
|
+
unmatched: z14.number().int().min(0)
|
|
3811
3824
|
});
|
|
3812
3825
|
var RESEND_EVENT_TYPES = ["email.bounced", "email.complained", "email.delivery_delayed"];
|
|
3813
|
-
var ResendSigningSecret =
|
|
3814
|
-
var ProviderEventsSecret =
|
|
3826
|
+
var ResendSigningSecret = z14.string().max(200).regex(/^whsec_[A-Za-z0-9+/]{16,}={0,2}$/, "must be the signing secret Resend shows, starting with whsec_");
|
|
3827
|
+
var ProviderEventsSecret = z14.object({ signing_secret: ResendSigningSecret });
|
|
3815
3828
|
var ProviderFields = {
|
|
3816
|
-
name:
|
|
3817
|
-
from_name:
|
|
3829
|
+
name: z14.string().min(1).max(120),
|
|
3830
|
+
from_name: z14.string().min(1).max(120),
|
|
3818
3831
|
from_email: Email,
|
|
3819
3832
|
reply_to: Email.nullable(),
|
|
3820
3833
|
policy: ProviderPolicy
|
|
3821
3834
|
};
|
|
3822
|
-
var Provider =
|
|
3823
|
-
|
|
3835
|
+
var Provider = z14.discriminatedUnion("kind", [
|
|
3836
|
+
z14.object({
|
|
3824
3837
|
id: Id,
|
|
3825
|
-
kind:
|
|
3838
|
+
kind: z14.literal("smtp"),
|
|
3826
3839
|
config: SmtpConfigBase,
|
|
3827
|
-
has_secret:
|
|
3840
|
+
has_secret: z14.boolean(),
|
|
3828
3841
|
...ProviderFields,
|
|
3829
3842
|
rejections: ProviderRejections,
|
|
3830
3843
|
created_at: Timestamp,
|
|
3831
3844
|
updated_at: Timestamp
|
|
3832
3845
|
}),
|
|
3833
|
-
|
|
3846
|
+
z14.object({
|
|
3834
3847
|
id: Id,
|
|
3835
|
-
kind:
|
|
3848
|
+
kind: z14.literal("resend"),
|
|
3836
3849
|
config: ResendConfigBase,
|
|
3837
|
-
has_secret:
|
|
3850
|
+
has_secret: z14.boolean(),
|
|
3838
3851
|
...ProviderFields,
|
|
3839
3852
|
rejections: ProviderRejections,
|
|
3840
3853
|
events: ProviderEvents,
|
|
@@ -3842,31 +3855,31 @@ var Provider = z13.discriminatedUnion("kind", [
|
|
|
3842
3855
|
updated_at: Timestamp
|
|
3843
3856
|
})
|
|
3844
3857
|
]);
|
|
3845
|
-
var ProviderCreate =
|
|
3846
|
-
|
|
3847
|
-
kind:
|
|
3848
|
-
config: SmtpConfigBase.extend({ password:
|
|
3858
|
+
var ProviderCreate = z14.discriminatedUnion("kind", [
|
|
3859
|
+
z14.object({
|
|
3860
|
+
kind: z14.literal("smtp"),
|
|
3861
|
+
config: SmtpConfigBase.extend({ password: z14.string().min(1).max(1024) }),
|
|
3849
3862
|
...ProviderFields
|
|
3850
3863
|
}),
|
|
3851
|
-
|
|
3852
|
-
kind:
|
|
3853
|
-
config: ResendConfigBase.extend({ api_key:
|
|
3864
|
+
z14.object({
|
|
3865
|
+
kind: z14.literal("resend"),
|
|
3866
|
+
config: ResendConfigBase.extend({ api_key: z14.string().min(1).max(1024) }),
|
|
3854
3867
|
...ProviderFields
|
|
3855
3868
|
})
|
|
3856
3869
|
]);
|
|
3857
|
-
var ProviderUpdate =
|
|
3858
|
-
|
|
3859
|
-
kind:
|
|
3860
|
-
config: SmtpConfigBase.extend({ password:
|
|
3870
|
+
var ProviderUpdate = z14.discriminatedUnion("kind", [
|
|
3871
|
+
z14.object({
|
|
3872
|
+
kind: z14.literal("smtp"),
|
|
3873
|
+
config: SmtpConfigBase.extend({ password: z14.string().min(1).max(1024).optional() }).partial().optional(),
|
|
3861
3874
|
name: ProviderFields.name.optional(),
|
|
3862
3875
|
from_name: ProviderFields.from_name.optional(),
|
|
3863
3876
|
from_email: ProviderFields.from_email.optional(),
|
|
3864
3877
|
reply_to: ProviderFields.reply_to.optional(),
|
|
3865
3878
|
policy: ProviderPolicy.partial().optional()
|
|
3866
3879
|
}),
|
|
3867
|
-
|
|
3868
|
-
kind:
|
|
3869
|
-
config: ResendConfigBase.extend({ api_key:
|
|
3880
|
+
z14.object({
|
|
3881
|
+
kind: z14.literal("resend"),
|
|
3882
|
+
config: ResendConfigBase.extend({ api_key: z14.string().min(1).max(1024).optional() }).optional(),
|
|
3870
3883
|
name: ProviderFields.name.optional(),
|
|
3871
3884
|
from_name: ProviderFields.from_name.optional(),
|
|
3872
3885
|
from_email: ProviderFields.from_email.optional(),
|
|
@@ -3874,37 +3887,37 @@ var ProviderUpdate = z13.discriminatedUnion("kind", [
|
|
|
3874
3887
|
policy: ProviderPolicy.partial().optional()
|
|
3875
3888
|
})
|
|
3876
3889
|
]);
|
|
3877
|
-
var ProviderUsage =
|
|
3890
|
+
var ProviderUsage = z14.object({
|
|
3878
3891
|
provider_id: Id,
|
|
3879
|
-
recipients_last_24h:
|
|
3880
|
-
remaining_budget:
|
|
3892
|
+
recipients_last_24h: z14.number().int().min(0),
|
|
3893
|
+
remaining_budget: z14.number().int().min(0),
|
|
3881
3894
|
/** When enough of the rolling window frees up to send again, if exhausted. */
|
|
3882
3895
|
next_capacity_at: Timestamp.nullable()
|
|
3883
3896
|
});
|
|
3884
|
-
var ProviderVerifyResult =
|
|
3885
|
-
ok:
|
|
3886
|
-
error:
|
|
3897
|
+
var ProviderVerifyResult = z14.object({
|
|
3898
|
+
ok: z14.boolean(),
|
|
3899
|
+
error: z14.string().nullable()
|
|
3887
3900
|
});
|
|
3888
3901
|
|
|
3889
3902
|
// src/sending-domains.ts
|
|
3890
|
-
import { z as
|
|
3903
|
+
import { z as z15 } from "zod";
|
|
3891
3904
|
var SENDING_DOMAIN_STATUSES = ["pending_dns", "verifying", "verified", "failed", "temporary_failure"];
|
|
3892
|
-
var SendingDomainStatus =
|
|
3905
|
+
var SendingDomainStatus = z15.enum(SENDING_DOMAIN_STATUSES);
|
|
3893
3906
|
var SENDING_DOMAIN_DNS_MODES = ["manual", "managed"];
|
|
3894
|
-
var SendingDomainDnsMode =
|
|
3907
|
+
var SendingDomainDnsMode = z15.enum(SENDING_DOMAIN_DNS_MODES);
|
|
3895
3908
|
var SENDING_DOMAIN_REGION = "eu-west-1";
|
|
3896
|
-
var SendingDomainName =
|
|
3909
|
+
var SendingDomainName = z15.string().trim().toLowerCase().max(253).regex(
|
|
3897
3910
|
/^(?=.{1,253}$)(?!-)[a-z0-9-]{1,63}(?<!-)(\.(?!-)[a-z0-9-]{1,63}(?<!-))*\.[a-z]{2,63}$/,
|
|
3898
3911
|
"must be a domain such as example.com, without https:// or an @"
|
|
3899
3912
|
);
|
|
3900
|
-
var SendingDomainRecord =
|
|
3901
|
-
record:
|
|
3902
|
-
name:
|
|
3903
|
-
type:
|
|
3904
|
-
value:
|
|
3905
|
-
ttl:
|
|
3906
|
-
status:
|
|
3907
|
-
priority:
|
|
3913
|
+
var SendingDomainRecord = z15.object({
|
|
3914
|
+
record: z15.string().max(40),
|
|
3915
|
+
name: z15.string().max(253),
|
|
3916
|
+
type: z15.string().max(10),
|
|
3917
|
+
value: z15.string().max(4096),
|
|
3918
|
+
ttl: z15.string().max(20),
|
|
3919
|
+
status: z15.string().max(40),
|
|
3920
|
+
priority: z15.number().int().min(0).max(65535).optional()
|
|
3908
3921
|
});
|
|
3909
3922
|
function sendingDomainRecordFullName(domain, name) {
|
|
3910
3923
|
const d = domain.toLowerCase();
|
|
@@ -3917,66 +3930,66 @@ function sendingDomainRecordFullName(domain, name) {
|
|
|
3917
3930
|
}
|
|
3918
3931
|
return `${n}.${d}`;
|
|
3919
3932
|
}
|
|
3920
|
-
var SendingDomain =
|
|
3933
|
+
var SendingDomain = z15.object({
|
|
3921
3934
|
id: Id,
|
|
3922
|
-
domain:
|
|
3923
|
-
from_name:
|
|
3935
|
+
domain: z15.string(),
|
|
3936
|
+
from_name: z15.string(),
|
|
3924
3937
|
from_email: Email,
|
|
3925
3938
|
reply_to: Email.nullable(),
|
|
3926
3939
|
status: SendingDomainStatus,
|
|
3927
3940
|
dns_mode: SendingDomainDnsMode,
|
|
3928
|
-
records:
|
|
3941
|
+
records: z15.array(SendingDomainRecord),
|
|
3929
3942
|
provider_id: Id.nullable(),
|
|
3930
3943
|
checked_at: Timestamp.nullable(),
|
|
3931
3944
|
verified_at: Timestamp.nullable(),
|
|
3932
|
-
last_error:
|
|
3945
|
+
last_error: z15.string().nullable(),
|
|
3933
3946
|
created_at: Timestamp,
|
|
3934
3947
|
updated_at: Timestamp
|
|
3935
3948
|
});
|
|
3936
3949
|
var SenderFields = {
|
|
3937
|
-
from_name:
|
|
3950
|
+
from_name: z15.string().trim().min(1).max(120),
|
|
3938
3951
|
from_email: Email,
|
|
3939
3952
|
reply_to: Email.nullable().optional()
|
|
3940
3953
|
};
|
|
3941
3954
|
function senderOnDomain(input, ctx) {
|
|
3942
3955
|
const at = input.from_email.lastIndexOf("@");
|
|
3943
3956
|
if (at < 0 || input.from_email.slice(at + 1).toLowerCase() !== input.domain) {
|
|
3944
|
-
ctx.addIssue({ code:
|
|
3957
|
+
ctx.addIssue({ code: z15.ZodIssueCode.custom, path: ["from_email"], message: `must be an address on ${input.domain}` });
|
|
3945
3958
|
}
|
|
3946
3959
|
}
|
|
3947
|
-
var SendingDomainCreate =
|
|
3948
|
-
var SendingDomainUpdate =
|
|
3960
|
+
var SendingDomainCreate = z15.object({ domain: SendingDomainName, ...SenderFields }).superRefine(senderOnDomain);
|
|
3961
|
+
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");
|
|
3949
3962
|
|
|
3950
3963
|
// src/contacts.ts
|
|
3951
|
-
import { z as
|
|
3952
|
-
var Topic =
|
|
3964
|
+
import { z as z16 } from "zod";
|
|
3965
|
+
var Topic = z16.object({
|
|
3953
3966
|
id: Id,
|
|
3954
3967
|
slug: Slug,
|
|
3955
|
-
name:
|
|
3968
|
+
name: z16.string().min(1).max(120),
|
|
3956
3969
|
/** Shown on the hosted preference page. */
|
|
3957
|
-
description:
|
|
3970
|
+
description: z16.string().max(1e3).nullable(),
|
|
3958
3971
|
/** Translations of `name` and `description` per locale, for the hosted page. */
|
|
3959
|
-
translations:
|
|
3960
|
-
|
|
3972
|
+
translations: z16.record(
|
|
3973
|
+
z16.object({ name: z16.string().min(1).max(120), description: z16.string().max(1e3).nullable() })
|
|
3961
3974
|
),
|
|
3962
3975
|
created_at: Timestamp,
|
|
3963
3976
|
updated_at: Timestamp
|
|
3964
3977
|
});
|
|
3965
|
-
var TopicCreate =
|
|
3978
|
+
var TopicCreate = z16.object({
|
|
3966
3979
|
slug: Slug,
|
|
3967
|
-
name:
|
|
3968
|
-
description:
|
|
3980
|
+
name: z16.string().min(1).max(120),
|
|
3981
|
+
description: z16.string().max(1e3).optional(),
|
|
3969
3982
|
translations: Topic.shape.translations.optional()
|
|
3970
3983
|
});
|
|
3971
3984
|
var TopicUpdate = TopicCreate.omit({ slug: true }).partial().refine((v) => Object.keys(v).length > 0, "at least one field");
|
|
3972
|
-
var Contact =
|
|
3985
|
+
var Contact = z16.object({
|
|
3973
3986
|
id: Id,
|
|
3974
|
-
external_id:
|
|
3987
|
+
external_id: z16.string().min(1).max(255).nullable(),
|
|
3975
3988
|
/** Stored lowercased, unique per workspace. */
|
|
3976
3989
|
email: Email,
|
|
3977
|
-
first_name:
|
|
3978
|
-
last_name:
|
|
3979
|
-
locale:
|
|
3990
|
+
first_name: z16.string().max(200).nullable(),
|
|
3991
|
+
last_name: z16.string().max(200).nullable(),
|
|
3992
|
+
locale: z16.string().min(2).max(35).nullable(),
|
|
3980
3993
|
/**
|
|
3981
3994
|
* The person's own time zone, an IANA name such as `Europe/Berlin` (A1).
|
|
3982
3995
|
* Every wall clock an automation waits for is read in it, falling back to the
|
|
@@ -3984,65 +3997,65 @@ var Contact = z15.object({
|
|
|
3984
3997
|
*/
|
|
3985
3998
|
timezone: TimezoneName.nullable(),
|
|
3986
3999
|
properties: Properties,
|
|
3987
|
-
topics:
|
|
4000
|
+
topics: z16.array(Slug),
|
|
3988
4001
|
/** The slugs of the contact's tags (S4). */
|
|
3989
|
-
tags:
|
|
4002
|
+
tags: z16.array(Slug),
|
|
3990
4003
|
created_at: Timestamp,
|
|
3991
4004
|
updated_at: Timestamp
|
|
3992
4005
|
});
|
|
3993
|
-
var ContactUpsert =
|
|
3994
|
-
external_id:
|
|
4006
|
+
var ContactUpsert = z16.object({
|
|
4007
|
+
external_id: z16.string().min(1).max(255).optional(),
|
|
3995
4008
|
email: Email.optional(),
|
|
3996
|
-
first_name:
|
|
3997
|
-
last_name:
|
|
3998
|
-
locale:
|
|
4009
|
+
first_name: z16.string().max(200).nullable().optional(),
|
|
4010
|
+
last_name: z16.string().max(200).nullable().optional(),
|
|
4011
|
+
locale: z16.string().min(2).max(35).nullable().optional(),
|
|
3999
4012
|
timezone: TimezoneName.nullable().optional(),
|
|
4000
4013
|
properties: Properties.optional(),
|
|
4001
|
-
topics:
|
|
4014
|
+
topics: z16.array(Slug).max(100).optional()
|
|
4002
4015
|
}).refine((v) => v.external_id !== void 0 || v.email !== void 0, {
|
|
4003
4016
|
message: "external_id or email is required",
|
|
4004
4017
|
path: ["email"]
|
|
4005
4018
|
});
|
|
4006
|
-
var ContactUpsertResult =
|
|
4019
|
+
var ContactUpsertResult = z16.object({
|
|
4007
4020
|
contact: Contact,
|
|
4008
|
-
created:
|
|
4021
|
+
created: z16.boolean()
|
|
4009
4022
|
});
|
|
4010
4023
|
var ContactListQuery = PageQuery.extend({
|
|
4011
|
-
email:
|
|
4012
|
-
external_id:
|
|
4024
|
+
email: z16.string().min(1).max(254).optional(),
|
|
4025
|
+
external_id: z16.string().min(1).max(255).optional(),
|
|
4013
4026
|
topic: Slug.optional()
|
|
4014
4027
|
});
|
|
4015
|
-
var ContactErased =
|
|
4016
|
-
ok:
|
|
4017
|
-
erased_messages:
|
|
4018
|
-
erased_recipients:
|
|
4019
|
-
suppressions_kept:
|
|
4028
|
+
var ContactErased = z16.object({
|
|
4029
|
+
ok: z16.literal(true),
|
|
4030
|
+
erased_messages: z16.number().int().min(0),
|
|
4031
|
+
erased_recipients: z16.number().int().min(0),
|
|
4032
|
+
suppressions_kept: z16.number().int().min(0)
|
|
4020
4033
|
});
|
|
4021
4034
|
var SUPPRESSION_REASONS = ["unsubscribed", "bounced", "complained", "manual"];
|
|
4022
|
-
var SuppressionReason =
|
|
4023
|
-
var Suppression =
|
|
4035
|
+
var SuppressionReason = z16.enum(SUPPRESSION_REASONS);
|
|
4036
|
+
var Suppression = z16.object({
|
|
4024
4037
|
id: Id,
|
|
4025
4038
|
email: Email,
|
|
4026
4039
|
reason: SuppressionReason,
|
|
4027
4040
|
topic: Slug.nullable(),
|
|
4028
4041
|
source_message_id: Id.nullable(),
|
|
4029
|
-
note:
|
|
4042
|
+
note: z16.string().max(1e3).nullable(),
|
|
4030
4043
|
created_at: Timestamp
|
|
4031
4044
|
});
|
|
4032
|
-
var SuppressionCreate =
|
|
4045
|
+
var SuppressionCreate = z16.object({
|
|
4033
4046
|
email: Email,
|
|
4034
|
-
reason:
|
|
4047
|
+
reason: z16.enum(["manual", "unsubscribed"]),
|
|
4035
4048
|
topic: Slug.nullable().optional(),
|
|
4036
|
-
note:
|
|
4049
|
+
note: z16.string().max(1e3).optional()
|
|
4037
4050
|
});
|
|
4038
4051
|
var SuppressionListQuery = PageQuery.extend({
|
|
4039
|
-
email:
|
|
4052
|
+
email: z16.string().min(1).max(254).optional(),
|
|
4040
4053
|
reason: SuppressionReason.optional(),
|
|
4041
4054
|
topic: Slug.optional()
|
|
4042
4055
|
});
|
|
4043
4056
|
|
|
4044
4057
|
// src/webhooks.ts
|
|
4045
|
-
import { z as
|
|
4058
|
+
import { z as z17 } from "zod";
|
|
4046
4059
|
var WEBHOOK_EVENT_TYPES = [
|
|
4047
4060
|
"message.sent",
|
|
4048
4061
|
"message.failed",
|
|
@@ -4086,23 +4099,23 @@ var WEBHOOK_EVENT_TYPES = [
|
|
|
4086
4099
|
"template.updated",
|
|
4087
4100
|
"template.deleted"
|
|
4088
4101
|
];
|
|
4089
|
-
var WebhookEventType =
|
|
4090
|
-
var MessageEventBase =
|
|
4102
|
+
var WebhookEventType = z17.enum(WEBHOOK_EVENT_TYPES);
|
|
4103
|
+
var MessageEventBase = z17.object({
|
|
4091
4104
|
message_id: Id,
|
|
4092
4105
|
mailing_id: Id.nullable(),
|
|
4093
4106
|
mailing_metadata: MailingMetadata.nullable(),
|
|
4094
4107
|
recipient_id: Id.nullable(),
|
|
4095
4108
|
contact_id: Id.nullable(),
|
|
4096
|
-
external_id:
|
|
4109
|
+
external_id: z17.string().nullable(),
|
|
4097
4110
|
email: Email,
|
|
4098
|
-
subject:
|
|
4111
|
+
subject: z17.string(),
|
|
4099
4112
|
topic: Slug.nullable(),
|
|
4100
|
-
provider_message_id:
|
|
4101
|
-
is_test:
|
|
4113
|
+
provider_message_id: z17.string().nullable(),
|
|
4114
|
+
is_test: z17.boolean()
|
|
4102
4115
|
});
|
|
4103
4116
|
var MessageSentData = MessageEventBase.extend({
|
|
4104
4117
|
/** The final HTML as sent, so the client can archive it beside its own records. */
|
|
4105
|
-
html:
|
|
4118
|
+
html: z17.string(),
|
|
4106
4119
|
sent_at: Timestamp,
|
|
4107
4120
|
/**
|
|
4108
4121
|
* The choice each insertion made (see `Message.insertions`); absent or null
|
|
@@ -4113,20 +4126,20 @@ var MessageSentData = MessageEventBase.extend({
|
|
|
4113
4126
|
insertions: InsertionChoices.nullish()
|
|
4114
4127
|
});
|
|
4115
4128
|
var MessageFailedData = MessageEventBase.extend({
|
|
4116
|
-
error:
|
|
4129
|
+
error: z17.string(),
|
|
4117
4130
|
/** False when the provider rejected permanently; the recipient will not be retried. */
|
|
4118
|
-
retryable:
|
|
4131
|
+
retryable: z17.boolean(),
|
|
4119
4132
|
failed_at: Timestamp
|
|
4120
4133
|
});
|
|
4121
4134
|
var UNSUBSCRIBE_SOURCES = ["hosted_page", "one_click", "api", "dashboard", "signup_form"];
|
|
4122
|
-
var ContactUnsubscribedData =
|
|
4135
|
+
var ContactUnsubscribedData = z17.object({
|
|
4123
4136
|
contact_id: Id.nullable(),
|
|
4124
|
-
external_id:
|
|
4137
|
+
external_id: z17.string().nullable(),
|
|
4125
4138
|
email: Email,
|
|
4126
4139
|
/** The topic unsubscribed from; null means every topic. */
|
|
4127
4140
|
topic: Slug.nullable(),
|
|
4128
4141
|
mailing_id: Id.nullable(),
|
|
4129
|
-
source:
|
|
4142
|
+
source: z17.enum(UNSUBSCRIBE_SOURCES),
|
|
4130
4143
|
unsubscribed_at: Timestamp
|
|
4131
4144
|
});
|
|
4132
4145
|
var ContactResubscribedData = ContactUnsubscribedData.omit({ unsubscribed_at: true }).extend({
|
|
@@ -4135,142 +4148,142 @@ var ContactResubscribedData = ContactUnsubscribedData.omit({ unsubscribed_at: tr
|
|
|
4135
4148
|
* breaker undid a `bounced` block it judged false (a `contact.bounced` for the
|
|
4136
4149
|
* same address and mailing went out before); `topic` is null.
|
|
4137
4150
|
*/
|
|
4138
|
-
source:
|
|
4151
|
+
source: z17.enum([...UNSUBSCRIBE_SOURCES, "bounce_reverted"]),
|
|
4139
4152
|
resubscribed_at: Timestamp
|
|
4140
4153
|
});
|
|
4141
|
-
var ContactBouncedData =
|
|
4154
|
+
var ContactBouncedData = z17.object({
|
|
4142
4155
|
contact_id: Id.nullable(),
|
|
4143
|
-
external_id:
|
|
4156
|
+
external_id: z17.string().nullable(),
|
|
4144
4157
|
email: Email,
|
|
4145
4158
|
/** `bounced` for a hard bounce, `complained` for a spam complaint. */
|
|
4146
|
-
reason:
|
|
4159
|
+
reason: z17.enum(["bounced", "complained"]),
|
|
4147
4160
|
message_id: Id.nullable(),
|
|
4148
|
-
diagnostic:
|
|
4161
|
+
diagnostic: z17.string().nullable(),
|
|
4149
4162
|
bounced_at: Timestamp
|
|
4150
4163
|
});
|
|
4151
|
-
var MailingFinishedData =
|
|
4164
|
+
var MailingFinishedData = z17.object({
|
|
4152
4165
|
mailing_id: Id,
|
|
4153
4166
|
mailing_metadata: MailingMetadata,
|
|
4154
|
-
status:
|
|
4167
|
+
status: z17.enum(["sent", "partially_failed", "cancelled"]),
|
|
4155
4168
|
counts: MailingCounts,
|
|
4156
4169
|
finished_at: Timestamp
|
|
4157
4170
|
});
|
|
4158
|
-
var ContactSubscribedData =
|
|
4171
|
+
var ContactSubscribedData = z17.object({
|
|
4159
4172
|
contact_id: Id,
|
|
4160
|
-
external_id:
|
|
4173
|
+
external_id: z17.string().nullable(),
|
|
4161
4174
|
email: Email,
|
|
4162
|
-
topics:
|
|
4163
|
-
source:
|
|
4175
|
+
topics: z17.array(Slug),
|
|
4176
|
+
source: z17.enum(["signup_form", "api", "dashboard", "automation"]),
|
|
4164
4177
|
signup_form_id: Id.nullable(),
|
|
4165
|
-
signup_form_version:
|
|
4178
|
+
signup_form_version: z17.number().int().min(1).nullable(),
|
|
4166
4179
|
subscribed_at: Timestamp
|
|
4167
4180
|
});
|
|
4168
|
-
var ImportFinishedData =
|
|
4181
|
+
var ImportFinishedData = z17.object({
|
|
4169
4182
|
import_id: Id,
|
|
4170
|
-
status:
|
|
4183
|
+
status: z17.enum(["completed", "cancelled", "failed"]),
|
|
4171
4184
|
result: ImportReport.nullable(),
|
|
4172
|
-
error:
|
|
4185
|
+
error: z17.string().nullable(),
|
|
4173
4186
|
finished_at: Timestamp
|
|
4174
4187
|
});
|
|
4175
|
-
var MailingScheduledData =
|
|
4188
|
+
var MailingScheduledData = z17.object({
|
|
4176
4189
|
mailing_id: Id,
|
|
4177
4190
|
mailing_metadata: MailingMetadata,
|
|
4178
4191
|
scheduled_at: Timestamp.nullable()
|
|
4179
4192
|
});
|
|
4180
|
-
var MailingStartedData =
|
|
4193
|
+
var MailingStartedData = z17.object({
|
|
4181
4194
|
mailing_id: Id,
|
|
4182
4195
|
mailing_metadata: MailingMetadata,
|
|
4183
|
-
trigger:
|
|
4184
|
-
recipients:
|
|
4196
|
+
trigger: z17.enum(["send", "schedule"]),
|
|
4197
|
+
recipients: z17.number().int().min(0),
|
|
4185
4198
|
started_at: Timestamp
|
|
4186
4199
|
});
|
|
4187
|
-
var MailingScheduleFailedData =
|
|
4200
|
+
var MailingScheduleFailedData = z17.object({
|
|
4188
4201
|
mailing_id: Id,
|
|
4189
4202
|
mailing_metadata: MailingMetadata,
|
|
4190
|
-
code:
|
|
4191
|
-
message:
|
|
4203
|
+
code: z17.string(),
|
|
4204
|
+
message: z17.string(),
|
|
4192
4205
|
failed_at: Timestamp
|
|
4193
4206
|
});
|
|
4194
|
-
var MailingAbWinnerSelectedData =
|
|
4207
|
+
var MailingAbWinnerSelectedData = z17.object({
|
|
4195
4208
|
mailing_id: Id,
|
|
4196
4209
|
mailing_metadata: MailingMetadata,
|
|
4197
|
-
winner:
|
|
4198
|
-
decided_by:
|
|
4199
|
-
variants:
|
|
4210
|
+
winner: z17.string(),
|
|
4211
|
+
decided_by: z17.enum(["metric", "manual"]),
|
|
4212
|
+
variants: z17.array(VariantAnalytics),
|
|
4200
4213
|
decided_at: Timestamp
|
|
4201
4214
|
});
|
|
4202
|
-
var ContactTaggedData =
|
|
4215
|
+
var ContactTaggedData = z17.object({
|
|
4203
4216
|
contact_id: Id,
|
|
4204
|
-
external_id:
|
|
4217
|
+
external_id: z17.string().nullable(),
|
|
4205
4218
|
email: Email,
|
|
4206
4219
|
/** Only the tags the contact did not already have. */
|
|
4207
|
-
tags:
|
|
4208
|
-
source:
|
|
4220
|
+
tags: z17.array(Slug).min(1),
|
|
4221
|
+
source: z17.enum(["api", "dashboard", "signup_form", "import", "automation"]),
|
|
4209
4222
|
tagged_at: Timestamp
|
|
4210
4223
|
});
|
|
4211
|
-
var ContactUpdatedData =
|
|
4224
|
+
var ContactUpdatedData = z17.object({
|
|
4212
4225
|
contact_id: Id,
|
|
4213
|
-
external_id:
|
|
4226
|
+
external_id: z17.string().nullable(),
|
|
4214
4227
|
email: Email,
|
|
4215
|
-
changed:
|
|
4228
|
+
changed: z17.array(z17.string()).min(1),
|
|
4216
4229
|
properties: Properties,
|
|
4217
|
-
source:
|
|
4230
|
+
source: z17.enum(["api", "dashboard", "signup_form", "import", "automation"]),
|
|
4218
4231
|
updated_at: Timestamp
|
|
4219
4232
|
});
|
|
4220
|
-
var AutomationRunEventBase =
|
|
4233
|
+
var AutomationRunEventBase = z17.object({
|
|
4221
4234
|
automation_id: Id,
|
|
4222
|
-
automation_name:
|
|
4235
|
+
automation_name: z17.string(),
|
|
4223
4236
|
run_id: Id,
|
|
4224
|
-
version:
|
|
4237
|
+
version: z17.number().int().min(1),
|
|
4225
4238
|
contact_id: Id,
|
|
4226
|
-
external_id:
|
|
4239
|
+
external_id: z17.string().nullable(),
|
|
4227
4240
|
email: Email
|
|
4228
4241
|
});
|
|
4229
4242
|
var AutomationRunStartedData = AutomationRunEventBase.extend({
|
|
4230
4243
|
/** What let them in: a trigger kind, or `manual` for an explicit enrolment. */
|
|
4231
|
-
trigger_kind:
|
|
4244
|
+
trigger_kind: z17.string(),
|
|
4232
4245
|
entered_at: Timestamp
|
|
4233
4246
|
});
|
|
4234
4247
|
var AutomationRunCompletedData = AutomationRunEventBase.extend({
|
|
4235
|
-
last_step_id:
|
|
4248
|
+
last_step_id: z17.string().nullable(),
|
|
4236
4249
|
completed_at: Timestamp
|
|
4237
4250
|
});
|
|
4238
4251
|
var AutomationRunExitedData = AutomationRunEventBase.extend({
|
|
4239
4252
|
reason: AutomationEndReason,
|
|
4240
|
-
step_id:
|
|
4253
|
+
step_id: z17.string().nullable(),
|
|
4241
4254
|
exited_at: Timestamp
|
|
4242
4255
|
});
|
|
4243
4256
|
var AutomationRunFailedData = AutomationRunEventBase.extend({
|
|
4244
|
-
reason:
|
|
4245
|
-
step_id:
|
|
4257
|
+
reason: z17.string(),
|
|
4258
|
+
step_id: z17.string().nullable(),
|
|
4246
4259
|
failed_at: Timestamp
|
|
4247
4260
|
});
|
|
4248
4261
|
var AutomationWebhookData = AutomationRunEventBase.extend({
|
|
4249
|
-
step_id:
|
|
4262
|
+
step_id: z17.string(),
|
|
4250
4263
|
/** The step's own label, when it was given one, so a receiver can branch on a name. */
|
|
4251
|
-
step_label:
|
|
4264
|
+
step_label: z17.string().nullable(),
|
|
4252
4265
|
/** Whatever the step carries, verbatim. Null when it carries nothing. */
|
|
4253
4266
|
payload: JsonValue.nullable(),
|
|
4254
4267
|
fired_at: Timestamp
|
|
4255
4268
|
});
|
|
4256
|
-
var TemplateEventBase =
|
|
4269
|
+
var TemplateEventBase = z17.object({
|
|
4257
4270
|
template_id: Id,
|
|
4258
|
-
name:
|
|
4259
|
-
version:
|
|
4260
|
-
source:
|
|
4271
|
+
name: z17.string().min(1).max(200),
|
|
4272
|
+
version: z17.number().int().min(1),
|
|
4273
|
+
source: z17.enum(["api", "dashboard", "mjml_import"])
|
|
4261
4274
|
});
|
|
4262
4275
|
var TemplateCreatedData = TemplateEventBase.extend({ created_at: Timestamp });
|
|
4263
|
-
var TemplateUpdatedData = TemplateEventBase.extend({ archived:
|
|
4276
|
+
var TemplateUpdatedData = TemplateEventBase.extend({ archived: z17.boolean(), updated_at: Timestamp });
|
|
4264
4277
|
var TemplateDeletedData = TemplateEventBase.extend({ deleted_at: Timestamp });
|
|
4265
|
-
var envelope = (type, data) =>
|
|
4278
|
+
var envelope = (type, data) => z17.object({
|
|
4266
4279
|
/** Unique per event: a receiver deduplicates on it (deliveries may repeat). */
|
|
4267
4280
|
id: Id,
|
|
4268
|
-
type:
|
|
4281
|
+
type: z17.literal(type),
|
|
4269
4282
|
created_at: Timestamp,
|
|
4270
4283
|
workspace_id: Id,
|
|
4271
4284
|
data
|
|
4272
4285
|
});
|
|
4273
|
-
var WebhookEvent =
|
|
4286
|
+
var WebhookEvent = z17.discriminatedUnion("type", [
|
|
4274
4287
|
envelope("message.sent", MessageSentData),
|
|
4275
4288
|
envelope("message.failed", MessageFailedData),
|
|
4276
4289
|
envelope("contact.unsubscribed", ContactUnsubscribedData),
|
|
@@ -4294,16 +4307,16 @@ var WebhookEvent = z16.discriminatedUnion("type", [
|
|
|
4294
4307
|
envelope("template.updated", TemplateUpdatedData),
|
|
4295
4308
|
envelope("template.deleted", TemplateDeletedData)
|
|
4296
4309
|
]);
|
|
4297
|
-
var WebhookEndpoint =
|
|
4310
|
+
var WebhookEndpoint = z17.object({
|
|
4298
4311
|
id: Id,
|
|
4299
|
-
url:
|
|
4300
|
-
description:
|
|
4301
|
-
events:
|
|
4302
|
-
enabled:
|
|
4312
|
+
url: z17.string().url(),
|
|
4313
|
+
description: z17.string().max(500).nullable(),
|
|
4314
|
+
events: z17.array(WebhookEventType).min(1),
|
|
4315
|
+
enabled: z17.boolean(),
|
|
4303
4316
|
created_at: Timestamp,
|
|
4304
4317
|
updated_at: Timestamp
|
|
4305
4318
|
});
|
|
4306
|
-
var WebhookUrl =
|
|
4319
|
+
var WebhookUrl = z17.string().url().refine((u) => {
|
|
4307
4320
|
try {
|
|
4308
4321
|
const url = new URL(u);
|
|
4309
4322
|
if (url.protocol === "https:") return true;
|
|
@@ -4312,35 +4325,35 @@ var WebhookUrl = z16.string().url().refine((u) => {
|
|
|
4312
4325
|
return false;
|
|
4313
4326
|
}
|
|
4314
4327
|
}, "must be https (http only for localhost)");
|
|
4315
|
-
var WebhookEndpointCreate =
|
|
4328
|
+
var WebhookEndpointCreate = z17.object({
|
|
4316
4329
|
url: WebhookUrl,
|
|
4317
|
-
description:
|
|
4318
|
-
events:
|
|
4319
|
-
enabled:
|
|
4330
|
+
description: z17.string().max(500).optional(),
|
|
4331
|
+
events: z17.array(WebhookEventType).min(1),
|
|
4332
|
+
enabled: z17.boolean().optional()
|
|
4320
4333
|
});
|
|
4321
|
-
var WebhookEndpointUpdate =
|
|
4334
|
+
var WebhookEndpointUpdate = z17.object({
|
|
4322
4335
|
url: WebhookUrl,
|
|
4323
|
-
description:
|
|
4324
|
-
events:
|
|
4325
|
-
enabled:
|
|
4336
|
+
description: z17.string().max(500).nullable(),
|
|
4337
|
+
events: z17.array(WebhookEventType).min(1),
|
|
4338
|
+
enabled: z17.boolean()
|
|
4326
4339
|
}).partial().refine((v) => Object.keys(v).length > 0, "at least one field");
|
|
4327
|
-
var WebhookEndpointWithSecret =
|
|
4340
|
+
var WebhookEndpointWithSecret = z17.object({
|
|
4328
4341
|
endpoint: WebhookEndpoint,
|
|
4329
|
-
secret:
|
|
4342
|
+
secret: z17.string().min(32)
|
|
4330
4343
|
});
|
|
4331
4344
|
var WEBHOOK_DELIVERY_STATUSES = ["pending", "succeeded", "failed"];
|
|
4332
|
-
var WebhookDeliveryStatus =
|
|
4345
|
+
var WebhookDeliveryStatus = z17.enum(WEBHOOK_DELIVERY_STATUSES);
|
|
4333
4346
|
var WEBHOOK_MAX_ATTEMPTS = 8;
|
|
4334
4347
|
var WEBHOOK_RETRY_DELAYS_SECONDS = [30, 120, 600, 1800, 3600, 7200, 21600];
|
|
4335
|
-
var WebhookDelivery =
|
|
4348
|
+
var WebhookDelivery = z17.object({
|
|
4336
4349
|
id: Id,
|
|
4337
4350
|
endpoint_id: Id,
|
|
4338
4351
|
event_id: Id,
|
|
4339
4352
|
event_type: WebhookEventType,
|
|
4340
4353
|
status: WebhookDeliveryStatus,
|
|
4341
|
-
attempts:
|
|
4342
|
-
last_status_code:
|
|
4343
|
-
last_error:
|
|
4354
|
+
attempts: z17.number().int().min(0),
|
|
4355
|
+
last_status_code: z17.number().int().min(100).max(599).nullable(),
|
|
4356
|
+
last_error: z17.string().nullable(),
|
|
4344
4357
|
next_attempt_at: Timestamp.nullable(),
|
|
4345
4358
|
delivered_at: Timestamp.nullable(),
|
|
4346
4359
|
created_at: Timestamp
|
|
@@ -4349,7 +4362,7 @@ var WebhookDeliveryListQuery = PageQuery.extend({
|
|
|
4349
4362
|
status: WebhookDeliveryStatus.optional(),
|
|
4350
4363
|
event_type: WebhookEventType.optional()
|
|
4351
4364
|
});
|
|
4352
|
-
var WebhookDeliveryParams =
|
|
4365
|
+
var WebhookDeliveryParams = z17.object({ id: Id, delivery_id: Id });
|
|
4353
4366
|
|
|
4354
4367
|
// src/webhook-signing.ts
|
|
4355
4368
|
var WEBHOOK_SIGNATURE_HEADER = "x-mail-signature";
|
|
@@ -4416,94 +4429,96 @@ async function verifyWebhook(input) {
|
|
|
4416
4429
|
}
|
|
4417
4430
|
|
|
4418
4431
|
// src/billing.ts
|
|
4419
|
-
import { z as
|
|
4432
|
+
import { z as z18 } from "zod";
|
|
4420
4433
|
var PLAN_IDS = ["free", "starter", "growth", "design_partner"];
|
|
4421
|
-
var PlanId =
|
|
4422
|
-
var PlanLimits =
|
|
4423
|
-
monthly_messages:
|
|
4424
|
-
contacts:
|
|
4425
|
-
members:
|
|
4426
|
-
providers:
|
|
4427
|
-
webhook_endpoints:
|
|
4434
|
+
var PlanId = z18.enum(PLAN_IDS);
|
|
4435
|
+
var PlanLimits = z18.object({
|
|
4436
|
+
monthly_messages: z18.number().int().min(0).nullable(),
|
|
4437
|
+
contacts: z18.number().int().min(0).nullable(),
|
|
4438
|
+
members: z18.number().int().min(1).nullable(),
|
|
4439
|
+
providers: z18.number().int().min(1).nullable(),
|
|
4440
|
+
webhook_endpoints: z18.number().int().min(0).nullable(),
|
|
4428
4441
|
/** Automations that may be live (active or paused) at once (A1). */
|
|
4429
|
-
active_automations:
|
|
4442
|
+
active_automations: z18.number().int().min(0).nullable(),
|
|
4430
4443
|
/** Steps one automation may hold. Null is the flow's own cap, not unlimited. */
|
|
4431
|
-
automation_steps:
|
|
4444
|
+
automation_steps: z18.number().int().min(1).nullable(),
|
|
4432
4445
|
/** Own domains Lumitra Mail sends from (managed sending domains); 0 when the plan has none. */
|
|
4433
|
-
sending_domains:
|
|
4446
|
+
sending_domains: z18.number().int().min(0).nullable()
|
|
4434
4447
|
});
|
|
4435
|
-
var PlanFeatures =
|
|
4448
|
+
var PlanFeatures = z18.object({
|
|
4436
4449
|
/** A/B tests of subject and content on a mailing (S4). */
|
|
4437
|
-
ab_testing:
|
|
4450
|
+
ab_testing: z18.boolean(),
|
|
4438
4451
|
/** Open and click tracking, still off until a workspace turns it on (`settings.tracking_enabled`). */
|
|
4439
|
-
tracking:
|
|
4452
|
+
tracking: z18.boolean(),
|
|
4440
4453
|
/** Automations: flows a person walks through step by step (A1). */
|
|
4441
|
-
automations:
|
|
4454
|
+
automations: z18.boolean()
|
|
4442
4455
|
});
|
|
4443
4456
|
var PLAN_FEATURES = ["ab_testing", "tracking", "automations"];
|
|
4444
|
-
var Plan =
|
|
4457
|
+
var Plan = z18.object({
|
|
4445
4458
|
id: PlanId,
|
|
4446
|
-
name:
|
|
4459
|
+
name: z18.string().min(1),
|
|
4447
4460
|
/** Price in the smallest currency unit per month; null for plans not sold. */
|
|
4448
|
-
monthly_price_cents:
|
|
4449
|
-
currency:
|
|
4461
|
+
monthly_price_cents: z18.number().int().min(0).nullable(),
|
|
4462
|
+
currency: z18.string().length(3),
|
|
4450
4463
|
limits: PlanLimits,
|
|
4451
4464
|
features: PlanFeatures
|
|
4452
4465
|
});
|
|
4453
|
-
var CatalogPlan = Plan.extend({ sellable:
|
|
4454
|
-
var Subscription =
|
|
4466
|
+
var CatalogPlan = Plan.extend({ sellable: z18.boolean() });
|
|
4467
|
+
var Subscription = z18.object({
|
|
4455
4468
|
workspace_id: Id,
|
|
4456
4469
|
plan: PlanId,
|
|
4457
|
-
status:
|
|
4470
|
+
status: z18.enum(["active", "trialing", "past_due", "cancelled"]),
|
|
4458
4471
|
current_period_start: Timestamp,
|
|
4459
4472
|
current_period_end: Timestamp,
|
|
4460
|
-
cancel_at_period_end:
|
|
4473
|
+
cancel_at_period_end: z18.boolean(),
|
|
4461
4474
|
/**
|
|
4462
4475
|
* A design partner outside billing (plan `design_partner`, no limits, no
|
|
4463
4476
|
* checkout). Set only by an operator, never through the API.
|
|
4464
4477
|
*/
|
|
4465
|
-
billing_exempt:
|
|
4478
|
+
billing_exempt: z18.boolean(),
|
|
4466
4479
|
/**
|
|
4467
4480
|
* Own sending domains bought on top of the plan's included ones (the
|
|
4468
4481
|
* add-on), each a monthly charge on the same subscription. 0 without the
|
|
4469
4482
|
* add-on; the usage limit `sending_domains` is the plan's plus these.
|
|
4470
4483
|
*/
|
|
4471
|
-
extra_sending_domains:
|
|
4484
|
+
extra_sending_domains: z18.number().int().min(0)
|
|
4472
4485
|
});
|
|
4473
|
-
var BillingAddons =
|
|
4474
|
-
sending_domain:
|
|
4475
|
-
monthly_price_cents:
|
|
4476
|
-
currency:
|
|
4477
|
-
sellable:
|
|
4486
|
+
var BillingAddons = z18.object({
|
|
4487
|
+
sending_domain: z18.object({
|
|
4488
|
+
monthly_price_cents: z18.number().int().min(0),
|
|
4489
|
+
currency: z18.string().length(3),
|
|
4490
|
+
sellable: z18.boolean()
|
|
4478
4491
|
})
|
|
4479
4492
|
});
|
|
4480
4493
|
var MAX_EXTRA_SENDING_DOMAINS = 100;
|
|
4481
|
-
var ExtraSendingDomainsUpdate =
|
|
4494
|
+
var ExtraSendingDomainsUpdate = z18.object({ quantity: z18.number().int().min(0).max(MAX_EXTRA_SENDING_DOMAINS) });
|
|
4482
4495
|
var USAGE_METRICS = ["messages", "contacts", "members", "providers", "webhook_endpoints", "active_automations", "sending_domains"];
|
|
4483
|
-
var UsageMetric =
|
|
4496
|
+
var UsageMetric = z18.enum(USAGE_METRICS);
|
|
4484
4497
|
var USAGE_WARNING_RATIO = 0.8;
|
|
4485
|
-
var UsageWarning =
|
|
4498
|
+
var UsageWarning = z18.object({
|
|
4486
4499
|
metric: UsageMetric,
|
|
4487
|
-
used:
|
|
4488
|
-
limit:
|
|
4500
|
+
used: z18.number().int().min(0),
|
|
4501
|
+
limit: z18.number().int().min(0),
|
|
4489
4502
|
/** `approaching`: at or above USAGE_WARNING_RATIO of the limit; `reached`: at or above the limit. */
|
|
4490
|
-
level:
|
|
4503
|
+
level: z18.enum(["approaching", "reached"])
|
|
4491
4504
|
});
|
|
4492
|
-
var Usage =
|
|
4505
|
+
var Usage = z18.object({
|
|
4493
4506
|
plan: PlanId,
|
|
4494
4507
|
period_start: Timestamp,
|
|
4495
4508
|
period_end: Timestamp,
|
|
4496
|
-
metrics:
|
|
4497
|
-
warnings:
|
|
4498
|
-
});
|
|
4499
|
-
var CheckoutRequest =
|
|
4500
|
-
plan:
|
|
4501
|
-
success_url:
|
|
4502
|
-
cancel_url:
|
|
4503
|
-
|
|
4504
|
-
|
|
4505
|
-
|
|
4506
|
-
var
|
|
4509
|
+
metrics: z18.record(UsageMetric, z18.object({ used: z18.number().int().min(0), limit: z18.number().int().min(0).nullable() })),
|
|
4510
|
+
warnings: z18.array(UsageWarning)
|
|
4511
|
+
});
|
|
4512
|
+
var CheckoutRequest = z18.object({
|
|
4513
|
+
plan: z18.enum(["starter", "growth"]),
|
|
4514
|
+
success_url: z18.string().url(),
|
|
4515
|
+
cancel_url: z18.string().url(),
|
|
4516
|
+
/** The buyer accepted the terms of service and the processing agreement of this version. */
|
|
4517
|
+
accept_terms: AcceptTerms
|
|
4518
|
+
});
|
|
4519
|
+
var CheckoutSession = z18.object({ url: z18.string().url() });
|
|
4520
|
+
var PortalRequest = z18.object({ return_url: z18.string().url() });
|
|
4521
|
+
var PortalSession = z18.object({ url: z18.string().url() });
|
|
4507
4522
|
var USAGE_WARNING_HEADER = "x-mail-usage-warning";
|
|
4508
4523
|
function formatUsageWarningHeader(warnings) {
|
|
4509
4524
|
if (warnings.length === 0) return null;
|
|
@@ -4523,7 +4538,7 @@ function parseUsageWarningHeader(value) {
|
|
|
4523
4538
|
}
|
|
4524
4539
|
|
|
4525
4540
|
// src/routes.ts
|
|
4526
|
-
import { z as
|
|
4541
|
+
import { z as z19 } from "zod";
|
|
4527
4542
|
var list = (item) => page(item);
|
|
4528
4543
|
var foundationRoutes = {
|
|
4529
4544
|
"workspaces.create": {
|
|
@@ -4769,7 +4784,7 @@ var templateRoutes = {
|
|
|
4769
4784
|
path: "/v1/templates/:id/export",
|
|
4770
4785
|
params: IdParams,
|
|
4771
4786
|
query: TemplateExportQuery,
|
|
4772
|
-
response:
|
|
4787
|
+
response: z19.string(),
|
|
4773
4788
|
responseType: "text",
|
|
4774
4789
|
status: 200,
|
|
4775
4790
|
access: "read",
|
|
@@ -5149,7 +5164,7 @@ var sendingRoutes = {
|
|
|
5149
5164
|
path: "/v1/mailings/:id/export",
|
|
5150
5165
|
params: IdParams,
|
|
5151
5166
|
query: MailingExportQuery,
|
|
5152
|
-
response:
|
|
5167
|
+
response: z19.string(),
|
|
5153
5168
|
responseType: "text",
|
|
5154
5169
|
status: 200,
|
|
5155
5170
|
access: "read",
|
|
@@ -5416,7 +5431,7 @@ var platformRoutes = {
|
|
|
5416
5431
|
"contactProperties.list": {
|
|
5417
5432
|
method: "GET",
|
|
5418
5433
|
path: "/v1/contact-properties",
|
|
5419
|
-
response:
|
|
5434
|
+
response: z19.object({ data: z19.array(ContactPropertyDefinition) }),
|
|
5420
5435
|
status: 200,
|
|
5421
5436
|
access: "read",
|
|
5422
5437
|
phase: "S4"
|
|
@@ -5715,7 +5730,7 @@ var billingRoutes = {
|
|
|
5715
5730
|
"billing.plans": {
|
|
5716
5731
|
method: "GET",
|
|
5717
5732
|
path: "/v1/billing/plans",
|
|
5718
|
-
response:
|
|
5733
|
+
response: z19.object({ data: z19.array(CatalogPlan), addons: BillingAddons }),
|
|
5719
5734
|
status: 200,
|
|
5720
5735
|
access: "read",
|
|
5721
5736
|
phase: "S5"
|
|
@@ -5866,7 +5881,7 @@ var automationRoutes = {
|
|
|
5866
5881
|
method: "POST",
|
|
5867
5882
|
path: "/v1/automations/:id/pause",
|
|
5868
5883
|
params: IdParams,
|
|
5869
|
-
body:
|
|
5884
|
+
body: z19.object({}).strict(),
|
|
5870
5885
|
response: Automation,
|
|
5871
5886
|
status: 200,
|
|
5872
5887
|
access: "write",
|
|
@@ -5876,7 +5891,7 @@ var automationRoutes = {
|
|
|
5876
5891
|
method: "POST",
|
|
5877
5892
|
path: "/v1/automations/:id/resume",
|
|
5878
5893
|
params: IdParams,
|
|
5879
|
-
body:
|
|
5894
|
+
body: z19.object({}).strict(),
|
|
5880
5895
|
response: Automation,
|
|
5881
5896
|
status: 200,
|
|
5882
5897
|
access: "write",
|
|
@@ -5886,7 +5901,7 @@ var automationRoutes = {
|
|
|
5886
5901
|
method: "POST",
|
|
5887
5902
|
path: "/v1/automations/:id/archive",
|
|
5888
5903
|
params: IdParams,
|
|
5889
|
-
body:
|
|
5904
|
+
body: z19.object({}).strict(),
|
|
5890
5905
|
response: Automation,
|
|
5891
5906
|
status: 200,
|
|
5892
5907
|
access: "write",
|
|
@@ -6066,6 +6081,7 @@ export {
|
|
|
6066
6081
|
AbTestState,
|
|
6067
6082
|
AbVariant,
|
|
6068
6083
|
AbWinnerRequest,
|
|
6084
|
+
AcceptTerms,
|
|
6069
6085
|
ApiKey,
|
|
6070
6086
|
ApiKeyCreate,
|
|
6071
6087
|
ApiKeyCreated,
|
|
@@ -6237,6 +6253,7 @@ export {
|
|
|
6237
6253
|
InviteListQuery,
|
|
6238
6254
|
InviteStatus,
|
|
6239
6255
|
JsonValue,
|
|
6256
|
+
LEGAL_TERMS_VERSION,
|
|
6240
6257
|
LETTER_ONLY_MERGE_FIELDS,
|
|
6241
6258
|
LETTER_RECIPIENT_REFUSAL,
|
|
6242
6259
|
LIST_UNSUBSCRIBE_POST_VALUE,
|