@tracearr/shared 2.2.4-beta.2 → 2.3.0-beta.1

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.
Files changed (46) hide show
  1. package/dist/automations/__tests__/definition.test.js +6 -2
  2. package/dist/automations/__tests__/definition.test.js.map +1 -1
  3. package/dist/automations/__tests__/triggers.test.js +18 -1
  4. package/dist/automations/__tests__/triggers.test.js.map +1 -1
  5. package/dist/automations/definition.d.ts +7 -0
  6. package/dist/automations/definition.d.ts.map +1 -1
  7. package/dist/automations/dryRun.d.ts +2 -0
  8. package/dist/automations/dryRun.d.ts.map +1 -1
  9. package/dist/automations/templates.d.ts +4 -0
  10. package/dist/automations/templates.d.ts.map +1 -1
  11. package/dist/automations/triggers.d.ts +13 -1
  12. package/dist/automations/triggers.d.ts.map +1 -1
  13. package/dist/automations/triggers.js +16 -1
  14. package/dist/automations/triggers.js.map +1 -1
  15. package/dist/constants.d.ts +1 -0
  16. package/dist/constants.d.ts.map +1 -1
  17. package/dist/constants.js +4 -0
  18. package/dist/constants.js.map +1 -1
  19. package/dist/destinations.d.ts +102 -12
  20. package/dist/destinations.d.ts.map +1 -1
  21. package/dist/destinations.js +201 -4
  22. package/dist/destinations.js.map +1 -1
  23. package/dist/emailRichText.d.ts +199 -0
  24. package/dist/emailRichText.d.ts.map +1 -0
  25. package/dist/emailRichText.js +133 -0
  26. package/dist/emailRichText.js.map +1 -0
  27. package/dist/index.d.ts +8 -4
  28. package/dist/index.d.ts.map +1 -1
  29. package/dist/index.js +7 -3
  30. package/dist/index.js.map +1 -1
  31. package/dist/mediaServerLinks.d.ts +15 -0
  32. package/dist/mediaServerLinks.d.ts.map +1 -1
  33. package/dist/mediaServerLinks.js +60 -0
  34. package/dist/mediaServerLinks.js.map +1 -1
  35. package/dist/newsletters.d.ts +1367 -0
  36. package/dist/newsletters.d.ts.map +1 -0
  37. package/dist/newsletters.js +215 -0
  38. package/dist/newsletters.js.map +1 -0
  39. package/dist/schemas.d.ts +13 -0
  40. package/dist/schemas.d.ts.map +1 -1
  41. package/dist/schemas.js +49 -18
  42. package/dist/schemas.js.map +1 -1
  43. package/dist/types.d.ts +4 -1
  44. package/dist/types.d.ts.map +1 -1
  45. package/dist/types.js.map +1 -1
  46. package/package.json +1 -1
@@ -1,16 +1,21 @@
1
1
  import { z } from 'zod';
2
2
  import type { NotificationEventType, ViolationSeverity } from './types.js';
3
- export declare const DESTINATION_KINDS: readonly ['discord', 'json_webhook', 'ntfy', 'gotify', 'apprise', 'pushover', 'push', 'web_toast'];
3
+ export declare const DESTINATION_KINDS: readonly ['discord', 'json_webhook', 'ntfy', 'gotify', 'apprise', 'pushover', 'email', 'push', 'web_toast'];
4
4
  export type DestinationKind = (typeof DESTINATION_KINDS)[number];
5
- export declare const NOTIFICATION_EVENT_TYPES: readonly ["violation_detected", "stream_started", "stream_stopped", "server_down", "server_up", "plugin_update_available", "server_update_available", "tracearr_update_available", "media_added", "media_upgraded", "new_device", "trust_score_changed"];
5
+ export declare const NOTIFICATION_EVENT_TYPES: readonly ["violation_detected", "stream_started", "stream_stopped", "server_down", "server_up", "plugin_update_available", "server_update_available", "tracearr_update_available", "media_added", "media_upgraded", "new_device", "trust_score_changed", "newsletter_send"];
6
6
  /** What a destination may subscribe to on its own; every other event reaches it through an automation. */
7
7
  export declare const SUBSCRIBABLE_EVENTS: readonly ["violation_detected"];
8
8
  export type SubscribableEvent = (typeof SUBSCRIBABLE_EVENTS)[number];
9
+ export interface DestinationFieldOption {
10
+ value: string;
11
+ /** i18n key under pages:settings.destinations.options */
12
+ label: string;
13
+ }
9
14
  export interface DestinationFieldDescriptor {
10
15
  key: string;
11
16
  /** i18n key under pages:settings.destinations.fields */
12
17
  label: string;
13
- input: 'text' | 'url' | 'secret';
18
+ input: 'text' | 'url' | 'secret' | 'select' | 'number' | 'email' | 'emails';
14
19
  required: boolean;
15
20
  /** Masked on read, kept on omit; every url is secret because webhook urls embed credentials */
16
21
  secret: boolean;
@@ -18,6 +23,18 @@ export interface DestinationFieldDescriptor {
18
23
  /** i18n key under pages:settings.destinations.hints, rendered as the field description */
19
24
  hint?: string;
20
25
  default?: string;
26
+ /** select only */
27
+ options?: readonly DestinationFieldOption[];
28
+ /** number only; validated on the string value, whole non-negative integers regardless of min */
29
+ min?: number;
30
+ max?: number;
31
+ /** text/secret only: overrides the default 2000-char max and adds a format check */
32
+ maxLength?: number;
33
+ pattern?: RegExp;
34
+ /** select only: choosing a value also writes these sibling fields */
35
+ presets?: Readonly<Record<string, Readonly<Record<string, string>>>>;
36
+ /** i18n key under pages:settings.destinations.groups; the dialog draws a separator where the group changes */
37
+ group?: string;
21
38
  }
22
39
  export interface DestinationDescriptor {
23
40
  kind: DestinationKind;
@@ -29,13 +46,67 @@ export interface DestinationDescriptor {
29
46
  events: readonly NotificationEventType[];
30
47
  fields: readonly DestinationFieldDescriptor[];
31
48
  }
49
+ export declare const EMAIL_SECURITY: readonly ['starttls', 'tls', 'none'];
50
+ export type EmailSecurity = (typeof EMAIL_SECURITY)[number];
51
+ /** Host, port and security per provider; the dialog copies them into the sibling fields. usernameHint/passwordHint are i18n keys under pages:settings.destinations.hints, resolved by the dialog rather than copied into the form. */
52
+ export declare const EMAIL_SMTP_PRESETS: {
53
+ readonly postmark: {
54
+ readonly host: 'smtp.postmarkapp.com';
55
+ readonly port: '587';
56
+ readonly security: 'starttls';
57
+ readonly usernameHint: 'smtpPostmarkUsername';
58
+ readonly passwordHint: 'smtpPostmarkPassword';
59
+ };
60
+ readonly resend: {
61
+ readonly host: 'smtp.resend.com';
62
+ readonly port: '465';
63
+ readonly security: 'tls';
64
+ readonly usernameHint: 'smtpResendUsername';
65
+ readonly passwordHint: 'smtpResendPassword';
66
+ };
67
+ readonly ses: {
68
+ readonly host: 'email-smtp.us-east-1.amazonaws.com';
69
+ readonly port: '587';
70
+ readonly security: 'starttls';
71
+ readonly usernameHint: 'smtpSesUsername';
72
+ readonly passwordHint: 'smtpSesPassword';
73
+ };
74
+ readonly mailgun: {
75
+ readonly host: 'smtp.mailgun.org';
76
+ readonly port: '587';
77
+ readonly security: 'starttls';
78
+ readonly usernameHint: 'smtpMailgunUsername';
79
+ readonly passwordHint: 'smtpMailgunPassword';
80
+ };
81
+ readonly sendgrid: {
82
+ readonly host: 'smtp.sendgrid.net';
83
+ readonly port: '587';
84
+ readonly security: 'starttls';
85
+ readonly usernameHint: 'smtpSendgridUsername';
86
+ readonly passwordHint: 'smtpSendgridPassword';
87
+ };
88
+ readonly brevo: {
89
+ readonly host: 'smtp-relay.brevo.com';
90
+ readonly port: '587';
91
+ readonly security: 'starttls';
92
+ readonly usernameHint: 'smtpBrevoUsername';
93
+ readonly passwordHint: 'smtpBrevoPassword';
94
+ };
95
+ readonly gmail: {
96
+ readonly host: 'smtp.gmail.com';
97
+ readonly port: '587';
98
+ readonly security: 'starttls';
99
+ readonly usernameHint: 'smtpGmailUsername';
100
+ readonly passwordHint: 'smtpGmailPassword';
101
+ };
102
+ };
32
103
  export declare const DESTINATION_TYPES: {
33
104
  readonly discord: {
34
105
  readonly kind: 'discord';
35
106
  readonly label: 'discord';
36
107
  readonly icon: 'MessageSquare';
37
108
  readonly builtin: false;
38
- readonly events: readonly ["violation_detected", "stream_started", "stream_stopped", "server_down", "server_up", "plugin_update_available", "server_update_available", "tracearr_update_available", "media_added", "media_upgraded", "new_device", "trust_score_changed"];
109
+ readonly events: readonly ["violation_detected", "stream_started", "stream_stopped", "server_down", "server_up", "plugin_update_available", "server_update_available", "tracearr_update_available", "media_added", "media_upgraded", "new_device", "trust_score_changed", "newsletter_send"];
39
110
  readonly fields: readonly [DestinationFieldDescriptor];
40
111
  };
41
112
  readonly json_webhook: {
@@ -43,7 +114,7 @@ export declare const DESTINATION_TYPES: {
43
114
  readonly label: 'jsonWebhook';
44
115
  readonly icon: 'Webhook';
45
116
  readonly builtin: false;
46
- readonly events: readonly ["violation_detected", "stream_started", "stream_stopped", "server_down", "server_up", "plugin_update_available", "server_update_available", "tracearr_update_available", "media_added", "media_upgraded", "new_device", "trust_score_changed"];
117
+ readonly events: readonly ["violation_detected", "stream_started", "stream_stopped", "server_down", "server_up", "plugin_update_available", "server_update_available", "tracearr_update_available", "media_added", "media_upgraded", "new_device", "trust_score_changed", "newsletter_send"];
47
118
  readonly fields: readonly [DestinationFieldDescriptor];
48
119
  };
49
120
  readonly ntfy: {
@@ -51,7 +122,7 @@ export declare const DESTINATION_TYPES: {
51
122
  readonly label: 'ntfy';
52
123
  readonly icon: 'Bell';
53
124
  readonly builtin: false;
54
- readonly events: readonly ["violation_detected", "stream_started", "stream_stopped", "server_down", "server_up", "plugin_update_available", "server_update_available", "tracearr_update_available", "media_added", "media_upgraded", "new_device", "trust_score_changed"];
125
+ readonly events: readonly ["violation_detected", "stream_started", "stream_stopped", "server_down", "server_up", "plugin_update_available", "server_update_available", "tracearr_update_available", "media_added", "media_upgraded", "new_device", "trust_score_changed", "newsletter_send"];
55
126
  readonly fields: readonly [DestinationFieldDescriptor, DestinationFieldDescriptor, DestinationFieldDescriptor];
56
127
  };
57
128
  readonly gotify: {
@@ -59,7 +130,7 @@ export declare const DESTINATION_TYPES: {
59
130
  readonly label: 'gotify';
60
131
  readonly icon: 'Bell';
61
132
  readonly builtin: false;
62
- readonly events: readonly ["violation_detected", "stream_started", "stream_stopped", "server_down", "server_up", "plugin_update_available", "server_update_available", "tracearr_update_available", "media_added", "media_upgraded", "new_device", "trust_score_changed"];
133
+ readonly events: readonly ["violation_detected", "stream_started", "stream_stopped", "server_down", "server_up", "plugin_update_available", "server_update_available", "tracearr_update_available", "media_added", "media_upgraded", "new_device", "trust_score_changed", "newsletter_send"];
63
134
  readonly fields: readonly [DestinationFieldDescriptor];
64
135
  };
65
136
  readonly apprise: {
@@ -67,7 +138,7 @@ export declare const DESTINATION_TYPES: {
67
138
  readonly label: 'apprise';
68
139
  readonly icon: 'Share2';
69
140
  readonly builtin: false;
70
- readonly events: readonly ["violation_detected", "stream_started", "stream_stopped", "server_down", "server_up", "plugin_update_available", "server_update_available", "tracearr_update_available", "media_added", "media_upgraded", "new_device", "trust_score_changed"];
141
+ readonly events: readonly ["violation_detected", "stream_started", "stream_stopped", "server_down", "server_up", "plugin_update_available", "server_update_available", "tracearr_update_available", "media_added", "media_upgraded", "new_device", "trust_score_changed", "newsletter_send"];
71
142
  readonly fields: readonly [DestinationFieldDescriptor];
72
143
  };
73
144
  readonly pushover: {
@@ -75,15 +146,23 @@ export declare const DESTINATION_TYPES: {
75
146
  readonly label: 'pushover';
76
147
  readonly icon: 'Smartphone';
77
148
  readonly builtin: false;
78
- readonly events: readonly ["violation_detected", "stream_started", "stream_stopped", "server_down", "server_up", "plugin_update_available", "server_update_available", "tracearr_update_available", "media_added", "media_upgraded", "new_device", "trust_score_changed"];
149
+ readonly events: readonly ["violation_detected", "stream_started", "stream_stopped", "server_down", "server_up", "plugin_update_available", "server_update_available", "tracearr_update_available", "media_added", "media_upgraded", "new_device", "trust_score_changed", "newsletter_send"];
79
150
  readonly fields: readonly [DestinationFieldDescriptor, DestinationFieldDescriptor];
80
151
  };
152
+ readonly email: {
153
+ readonly kind: 'email';
154
+ readonly label: 'email';
155
+ readonly icon: 'Mail';
156
+ readonly builtin: false;
157
+ readonly events: readonly ["violation_detected", "stream_started", "stream_stopped", "server_down", "server_up", "plugin_update_available", "server_update_available", "tracearr_update_available", "media_added", "media_upgraded", "new_device", "trust_score_changed", "newsletter_send"];
158
+ readonly fields: readonly DestinationFieldDescriptor[];
159
+ };
81
160
  readonly push: {
82
161
  readonly kind: 'push';
83
162
  readonly label: 'push';
84
163
  readonly icon: 'Smartphone';
85
164
  readonly builtin: true;
86
- readonly events: readonly ("media_added" | "media_upgraded" | "new_device" | "server_down" | "server_up" | "server_update_available" | "stream_started" | "stream_stopped" | "tracearr_update_available" | "trust_score_changed" | "violation_detected")[];
165
+ readonly events: readonly ("media_added" | "media_upgraded" | "new_device" | "newsletter_send" | "server_down" | "server_up" | "server_update_available" | "stream_started" | "stream_stopped" | "tracearr_update_available" | "trust_score_changed" | "violation_detected")[];
87
166
  readonly fields: readonly [];
88
167
  };
89
168
  readonly web_toast: {
@@ -91,16 +170,20 @@ export declare const DESTINATION_TYPES: {
91
170
  readonly label: 'webToast';
92
171
  readonly icon: 'Globe';
93
172
  readonly builtin: true;
94
- readonly events: readonly ("media_added" | "media_upgraded" | "new_device" | "server_down" | "server_up" | "server_update_available" | "stream_started" | "stream_stopped" | "tracearr_update_available" | "trust_score_changed" | "violation_detected")[];
173
+ readonly events: readonly ("media_added" | "media_upgraded" | "new_device" | "newsletter_send" | "server_down" | "server_up" | "server_update_available" | "stream_started" | "stream_stopped" | "tracearr_update_available" | "trust_score_changed" | "violation_detected")[];
95
174
  readonly fields: readonly [];
96
175
  };
97
176
  };
98
- /** Zod object for one kind's config, built from its descriptor; unknown keys rejected. */
177
+ export declare function addressList(value: string): string[];
178
+ /** Zod object for a field list; unknown keys rejected. Exported so refinements are testable without a kind. */
179
+ export declare function configSchemaForFields(fields: readonly DestinationFieldDescriptor[]): z.ZodObject<z.ZodRawShape>;
180
+ /** Zod object for one kind's config, built from its descriptor. */
99
181
  export declare function destinationConfigSchema(kind: DestinationKind): z.ZodObject<z.ZodRawShape>;
100
182
  export declare const notificationEventTypeSchema: z.ZodEnum<{
101
183
  media_added: "media_added";
102
184
  media_upgraded: "media_upgraded";
103
185
  new_device: "new_device";
186
+ newsletter_send: "newsletter_send";
104
187
  plugin_update_available: "plugin_update_available";
105
188
  server_down: "server_down";
106
189
  server_up: "server_up";
@@ -116,6 +199,7 @@ export declare const createDestinationSchema: z.ZodObject<{
116
199
  type: z.ZodEnum<{
117
200
  apprise: "apprise";
118
201
  discord: "discord";
202
+ email: "email";
119
203
  gotify: "gotify";
120
204
  json_webhook: "json_webhook";
121
205
  ntfy: "ntfy";
@@ -152,9 +236,15 @@ export interface Destination {
152
236
  config: Record<string, string | null> | null;
153
237
  secretsSet: string[];
154
238
  referencedByAutomationCount: number;
239
+ referencedByNewsletterCount: number;
155
240
  createdAt: string;
156
241
  updatedAt: string;
157
242
  }
243
+ /** 200 body of the two test routes. `sentTo` is set by kinds that pick the address themselves. */
244
+ export interface DestinationTestResult {
245
+ success: true;
246
+ sentTo?: string;
247
+ }
158
248
  export interface NotificationToast {
159
249
  title: string;
160
250
  message: string;
@@ -1 +1 @@
1
- {"version":3,"file":"destinations.d.ts","sourceRoot":"","sources":["../src/destinations.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"destinations.d.ts","sourceRoot":"","sources":["../src/destinations.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,7 @@ export const DESTINATION_KINDS = [
6
6
  'gotify',
7
7
  'apprise',
8
8
  'pushover',
9
+ 'email',
9
10
  'push',
10
11
  'web_toast',
11
12
  ];
@@ -22,6 +23,7 @@ export const NOTIFICATION_EVENT_TYPES = [
22
23
  'media_upgraded',
23
24
  'new_device',
24
25
  'trust_score_changed',
26
+ 'newsletter_send',
25
27
  ];
26
28
  /** What a destination may subscribe to on its own; every other event reaches it through an automation. */
27
29
  export const SUBSCRIBABLE_EVENTS = [
@@ -55,6 +57,113 @@ const text = (key, label, required, placeholder, def) => ({
55
57
  placeholder,
56
58
  default: def,
57
59
  });
60
+ export const EMAIL_SECURITY = ['starttls', 'tls', 'none'];
61
+ /** Host, port and security per provider; the dialog copies them into the sibling fields. usernameHint/passwordHint are i18n keys under pages:settings.destinations.hints, resolved by the dialog rather than copied into the form. */
62
+ export const EMAIL_SMTP_PRESETS = {
63
+ postmark: {
64
+ host: 'smtp.postmarkapp.com',
65
+ port: '587',
66
+ security: 'starttls',
67
+ usernameHint: 'smtpPostmarkUsername',
68
+ passwordHint: 'smtpPostmarkPassword',
69
+ },
70
+ resend: {
71
+ host: 'smtp.resend.com',
72
+ port: '465',
73
+ security: 'tls',
74
+ usernameHint: 'smtpResendUsername',
75
+ passwordHint: 'smtpResendPassword',
76
+ },
77
+ ses: {
78
+ host: 'email-smtp.us-east-1.amazonaws.com',
79
+ port: '587',
80
+ security: 'starttls',
81
+ usernameHint: 'smtpSesUsername',
82
+ passwordHint: 'smtpSesPassword',
83
+ },
84
+ mailgun: {
85
+ host: 'smtp.mailgun.org',
86
+ port: '587',
87
+ security: 'starttls',
88
+ usernameHint: 'smtpMailgunUsername',
89
+ passwordHint: 'smtpMailgunPassword',
90
+ },
91
+ sendgrid: {
92
+ host: 'smtp.sendgrid.net',
93
+ port: '587',
94
+ security: 'starttls',
95
+ usernameHint: 'smtpSendgridUsername',
96
+ passwordHint: 'smtpSendgridPassword',
97
+ },
98
+ brevo: {
99
+ host: 'smtp-relay.brevo.com',
100
+ port: '587',
101
+ security: 'starttls',
102
+ usernameHint: 'smtpBrevoUsername',
103
+ passwordHint: 'smtpBrevoPassword',
104
+ },
105
+ gmail: {
106
+ host: 'smtp.gmail.com',
107
+ port: '587',
108
+ security: 'starttls',
109
+ usernameHint: 'smtpGmailUsername',
110
+ passwordHint: 'smtpGmailPassword',
111
+ },
112
+ };
113
+ const select = (key, label, options, def, extra = {}) => ({
114
+ key,
115
+ label,
116
+ input: 'select',
117
+ required: true,
118
+ secret: false,
119
+ options,
120
+ default: def,
121
+ ...extra,
122
+ });
123
+ const number = (key, label, def, min, max, hint) => ({
124
+ key,
125
+ label,
126
+ input: 'number',
127
+ required: true,
128
+ secret: false,
129
+ default: def,
130
+ min,
131
+ max,
132
+ hint,
133
+ });
134
+ const email = (key, label, required, placeholder) => ({
135
+ key,
136
+ label,
137
+ input: 'email',
138
+ required,
139
+ secret: false,
140
+ placeholder,
141
+ });
142
+ const emails = (key, label, required, placeholder, hint) => ({
143
+ key,
144
+ label,
145
+ input: 'emails',
146
+ required,
147
+ secret: false,
148
+ placeholder,
149
+ hint,
150
+ });
151
+ const grouped = (group, fields) => fields.map((field) => ({ ...field, group }));
152
+ const PRESET_OPTIONS = [
153
+ { value: 'custom', label: 'presetCustom' },
154
+ { value: 'postmark', label: 'presetPostmark' },
155
+ { value: 'resend', label: 'presetResend' },
156
+ { value: 'ses', label: 'presetSes' },
157
+ { value: 'mailgun', label: 'presetMailgun' },
158
+ { value: 'sendgrid', label: 'presetSendgrid' },
159
+ { value: 'brevo', label: 'presetBrevo' },
160
+ { value: 'gmail', label: 'presetGmail' },
161
+ ];
162
+ const SECURITY_OPTIONS = [
163
+ { value: 'starttls', label: 'securityStarttls' },
164
+ { value: 'tls', label: 'securityTls' },
165
+ { value: 'none', label: 'securityNone' },
166
+ ];
58
167
  export const DESTINATION_TYPES = {
59
168
  discord: {
60
169
  kind: 'discord',
@@ -108,6 +217,41 @@ export const DESTINATION_TYPES = {
108
217
  events: ALL_EVENTS,
109
218
  fields: [secret('userKey', 'userKey', true), secret('apiToken', 'apiToken', true)],
110
219
  },
220
+ email: {
221
+ kind: 'email',
222
+ label: 'email',
223
+ icon: 'Mail',
224
+ builtin: false,
225
+ events: ALL_EVENTS,
226
+ fields: [
227
+ ...grouped('connection', [
228
+ select('preset', 'preset', PRESET_OPTIONS, 'custom', {
229
+ hint: 'smtpPreset',
230
+ presets: EMAIL_SMTP_PRESETS,
231
+ }),
232
+ text('host', 'host', true, 'smtp.example.com'),
233
+ number('port', 'port', '587', 1, 65535),
234
+ select('security', 'security', SECURITY_OPTIONS, 'starttls'),
235
+ { ...text('username', 'username', false), hint: 'smtpUsernameOptional' },
236
+ secret('password', 'password', false),
237
+ number('messagesPerSecond', 'messagesPerSecond', '2', 1, 50, 'smtpRate'),
238
+ {
239
+ ...text('messageStream', 'messageStream', false),
240
+ hint: 'smtpMessageStream',
241
+ maxLength: 64,
242
+ pattern: /^[A-Za-z0-9-]*$/,
243
+ },
244
+ ]),
245
+ ...grouped('sender', [
246
+ text('fromName', 'fromName', false, undefined, 'Tracearr'),
247
+ email('fromAddress', 'fromAddress', true, 'tracearr@example.com'),
248
+ email('replyTo', 'replyTo', false),
249
+ ]),
250
+ ...grouped('alerts', [
251
+ emails('to', 'to', false, 'you@example.com, admin@example.com', 'smtpTo'),
252
+ ]),
253
+ ],
254
+ },
111
255
  push: {
112
256
  kind: 'push',
113
257
  label: 'push',
@@ -129,11 +273,60 @@ const httpUrl = z
129
273
  .string()
130
274
  .trim()
131
275
  .refine((v) => /^https?:\/\/\S+$/i.test(v), 'Must be an http(s) URL');
132
- /** Zod object for one kind's config, built from its descriptor; unknown keys rejected. */
133
- export function destinationConfigSchema(kind) {
276
+ const address = z.email();
277
+ function isAddress(value) {
278
+ return address.safeParse(value).success;
279
+ }
280
+ export function addressList(value) {
281
+ return value
282
+ .split(',')
283
+ .map((part) => part.trim())
284
+ .filter((part) => part !== '');
285
+ }
286
+ /** An optional field may be left blank; a required one gets `.min(1)` after this, so blank fails there. */
287
+ function fieldSchema(f) {
288
+ const blankOk = (check) => (v) => (!f.required && v === '') || check(v);
289
+ switch (f.input) {
290
+ case 'url':
291
+ return httpUrl;
292
+ case 'email':
293
+ return z.string().trim().max(254).refine(blankOk(isAddress), 'Must be an email address');
294
+ case 'emails':
295
+ return z
296
+ .string()
297
+ .trim()
298
+ .max(2000)
299
+ .refine(blankOk((v) => addressList(v).length > 0 && addressList(v).every(isAddress)), 'Must be one or more comma-separated email addresses');
300
+ case 'number': {
301
+ const min = f.min ?? Number.MIN_SAFE_INTEGER;
302
+ const max = f.max ?? Number.MAX_SAFE_INTEGER;
303
+ return z
304
+ .string()
305
+ .trim()
306
+ .refine(blankOk((v) => /^\d+$/.test(v) && Number(v) >= min && Number(v) <= max), `Must be a whole number between ${min} and ${max}`);
307
+ }
308
+ case 'select': {
309
+ const allowed = (f.options ?? []).map((o) => o.value);
310
+ return z.string().refine(blankOk((v) => allowed.includes(v)), 'Must be one of the listed options');
311
+ }
312
+ case 'text':
313
+ case 'secret': {
314
+ const { pattern } = f;
315
+ const base = z
316
+ .string()
317
+ .trim()
318
+ .max(f.maxLength ?? 2000);
319
+ return pattern
320
+ ? base.refine(blankOk((v) => pattern.test(v)), 'Invalid format')
321
+ : base;
322
+ }
323
+ }
324
+ }
325
+ /** Zod object for a field list; unknown keys rejected. Exported so refinements are testable without a kind. */
326
+ export function configSchemaForFields(fields) {
134
327
  const shape = {};
135
- for (const f of DESTINATION_TYPES[kind].fields) {
136
- let s = f.input === 'url' ? httpUrl : z.string().trim().max(2000);
328
+ for (const f of fields) {
329
+ let s = fieldSchema(f);
137
330
  if (f.required)
138
331
  s = s.min(1);
139
332
  shape[f.key] =
@@ -141,6 +334,10 @@ export function destinationConfigSchema(kind) {
141
334
  }
142
335
  return z.strictObject(shape);
143
336
  }
337
+ /** Zod object for one kind's config, built from its descriptor. */
338
+ export function destinationConfigSchema(kind) {
339
+ return configSchemaForFields(DESTINATION_TYPES[kind].fields);
340
+ }
144
341
  export const notificationEventTypeSchema = z.enum(NOTIFICATION_EVENT_TYPES);
145
342
  const subscribableEventSchema = z.enum(SUBSCRIBABLE_EVENTS);
146
343
  const nonBuiltinKind = z.enum(DESTINATION_KINDS.filter((k) => !DESTINATION_TYPES[k].builtin));
@@ -1 +1 @@
1
- {"version":3,"file":"destinations.js","sourceRoot":"","sources":["../src/destinations.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"destinations.js","sourceRoot":"","sources":["../src/destinations.ts"],"names":[],"mappings":"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"}