@dbx-tools/shared-email 0.6.46 → 0.6.48
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/README.md +1 -1
- package/lib/src/email.js +3 -11
- package/package.json +2 -2
- package/src/email.ts +2 -12
package/README.md
CHANGED
|
@@ -30,7 +30,7 @@ const message: EmailMessage = email.emailMessageSchema.parse({
|
|
|
30
30
|
});
|
|
31
31
|
```
|
|
32
32
|
|
|
33
|
-
The message schema covers recipients, subject,
|
|
33
|
+
The message schema covers recipients, subject, body content, and attachments.
|
|
34
34
|
Attachments can carry inline content, a local path, a URL, encoding metadata, and
|
|
35
35
|
content type hints.
|
|
36
36
|
|
package/lib/src/email.js
CHANGED
|
@@ -37,16 +37,8 @@ export const emailMessageSchema = z.object({
|
|
|
37
37
|
to: z
|
|
38
38
|
.array(z.string())
|
|
39
39
|
.describe('One or more recipient email addresses (e.g. ["alice@example.com", "bob@example.com"]). Provide at least one.'),
|
|
40
|
-
subject: z.string().describe("
|
|
41
|
-
body: z
|
|
42
|
-
.string()
|
|
43
|
-
.describe([
|
|
44
|
-
"Email body in GitHub-Flavored Markdown; it is rendered to HTML before sending.",
|
|
45
|
-
"Use real Markdown structure: '#'/'##' headings, '-' or '1.' lists, **bold**/_italic_, '>' blockquotes, and fenced ``` code blocks.",
|
|
46
|
-
"For tabular data, emit a real Markdown table: a header row, then a '| --- | --- |' separator row, then one '| ... |' row per record.",
|
|
47
|
-
"Do NOT format with ASCII art: no '=====' or '-----' divider lines, and never hand-draw tables or bar charts with spaces, pipes, or '#'. Use the Markdown constructs above instead.",
|
|
48
|
-
"Be self-contained: the recipient has none of the chat context.",
|
|
49
|
-
].join(" ")),
|
|
40
|
+
subject: z.string().describe("Email subject line."),
|
|
41
|
+
body: z.string().describe("Email content rendered through the configured React Email template."),
|
|
50
42
|
cc: z.array(z.string()).optional().describe("Optional CC recipient addresses (one or more)."),
|
|
51
43
|
bcc: z.array(z.string()).optional().describe("Optional BCC recipient addresses (one or more)."),
|
|
52
44
|
attachments: z
|
|
@@ -83,4 +75,4 @@ export const emailSendersSchema = z.object({
|
|
|
83
75
|
.boolean()
|
|
84
76
|
.describe("True when `senders` is an enforced allow-list rather than a hint."),
|
|
85
77
|
});
|
|
86
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
78
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1haWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZW1haWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7OztHQVlHO0FBRUgsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLEtBQUssQ0FBQztBQUV4Qiw4REFBOEQ7QUFDOUQsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUM1QyxRQUFRLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyx1REFBdUQsQ0FBQztJQUN0RixPQUFPLEVBQUUsQ0FBQztTQUNQLE1BQU0sRUFBRTtTQUNSLFFBQVEsRUFBRTtTQUNWLFFBQVEsQ0FDUCxvSEFBb0gsQ0FDckg7SUFDSCxRQUFRLEVBQUUsQ0FBQztTQUNSLE1BQU0sRUFBRTtTQUNSLFFBQVEsRUFBRTtTQUNWLFFBQVEsQ0FDUCx3RkFBd0YsQ0FDekY7SUFDSCxJQUFJLEVBQUUsQ0FBQztTQUNKLE1BQU0sRUFBRTtTQUNSLFFBQVEsRUFBRTtTQUNWLFFBQVEsQ0FDUCwwSUFBMEksQ0FDM0k7SUFDSCxXQUFXLEVBQUUsQ0FBQztTQUNYLE1BQU0sRUFBRTtTQUNSLFFBQVEsRUFBRTtTQUNWLFFBQVEsQ0FDUCx1RkFBdUYsQ0FDeEY7Q0FDSixDQUFDLENBQUM7QUFLSCxrRUFBa0U7QUFDbEUsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUN6QyxFQUFFLEVBQUUsQ0FBQztTQUNGLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7U0FDakIsUUFBUSxDQUNQLDhHQUE4RyxDQUMvRztJQUNILE9BQU8sRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLHFCQUFxQixDQUFDO0lBQ25ELElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLHFFQUFxRSxDQUFDO0lBQ2hHLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxnREFBZ0QsQ0FBQztJQUM3RixHQUFHLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMsaURBQWlELENBQUM7SUFDL0YsV0FBVyxFQUFFLENBQUM7U0FDWCxLQUFLLENBQUMscUJBQXFCLENBQUM7U0FDNUIsUUFBUSxFQUFFO1NBQ1YsUUFBUSxDQUFDLHdEQUF3RCxDQUFDO0NBQ3RFLENBQUMsQ0FBQztBQUtILHlFQUF5RTtBQUN6RSxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQ3hDLElBQUksRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDLHNEQUFzRCxDQUFDO0lBQ2xGLFNBQVMsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLDhEQUE4RCxDQUFDO0lBQzlGLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLGlFQUFpRSxDQUFDO0lBQzVGLFNBQVMsRUFBRSxDQUFDO1NBQ1QsTUFBTSxFQUFFO1NBQ1IsUUFBUSxFQUFFO1NBQ1YsUUFBUSxDQUFDLGdFQUFnRSxDQUFDO0NBQzlFLENBQUMsQ0FBQztBQUtIOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUN6QyxPQUFPLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsd0RBQXdELENBQUM7SUFDL0YsYUFBYSxFQUFFLENBQUM7U0FDYixNQUFNLEVBQUU7U0FDUixRQUFRLEVBQUU7U0FDVixRQUFRLENBQUMscUVBQXFFLENBQUM7SUFDbEYsVUFBVSxFQUFFLENBQUM7U0FDVixPQUFPLEVBQUU7U0FDVCxRQUFRLENBQUMsbUVBQW1FLENBQUM7Q0FDakYsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBXaXJlLWZvcm1hdCBjb250cmFjdCBmb3IgdGhlIGVtYWlsIGFkZC1vbjogdGhlIGVtYWlsIGEgbW9kZWwgZHJhZnRzIGFuZCB0aGVcbiAqIHJlc3VsdCBvZiBkaXNwYXRjaGluZyBpdC4gUHVyZSAoem9kICsgaW5mZXJyZWQgdHlwZXMsIG5vIE5vZGUtb25seSBpbXBvcnRzKVxuICogc28gdGhlIHNlcnZlci1zaWRlIHNlbmRlciwgdGhlIE1hc3RyYSB0b29sLCBhbmQgdGhlIFJlYWN0IGFwcHJvdmFsIFVJIGFsbFxuICogdmFsaWRhdGUgLyB0eXBlIGFnYWluc3Qgb25lIGRlZmluaXRpb24uXG4gKlxuICogQXJyYXkgZmllbGRzIGludGVudGlvbmFsbHkgYXZvaWQgYC5taW4oKWAgLyBgLm5vbmVtcHR5KClgOiB0aG9zZSBlbWl0XG4gKiBgbWluSXRlbXNgIGluIHRoZSBKU09OIHNjaGVtYSwgd2hpY2ggc29tZSBNb2RlbCBTZXJ2aW5nIGVuZHBvaW50cyByZWplY3RcbiAqIChcImFycmF5IHR5cGVzIGRvIG5vdCBzdXBwb3J0IG1pbkl0ZW1zXCIpIHdoZW4gdGhlIHNjaGVtYSBpcyBmb3J3YXJkZWQgYXMgYVxuICogdG9vbCBkZWZpbml0aW9uLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiO1xuXG4vKiogU2NoZW1hIGZvciBhIHNpbmdsZSBmaWxlIGF0dGFjaGVkIHRvIGFuIG91dGJvdW5kIGVtYWlsLiAqL1xuZXhwb3J0IGNvbnN0IGVtYWlsQXR0YWNobWVudFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgZmlsZW5hbWU6IHouc3RyaW5nKCkuZGVzY3JpYmUoJ0ZpbGUgbmFtZSBzaG93biB0byB0aGUgcmVjaXBpZW50IChlLmcuIFwicmVwb3J0LnBkZlwiKS4nKSxcbiAgY29udGVudDogelxuICAgIC5zdHJpbmcoKVxuICAgIC5vcHRpb25hbCgpXG4gICAgLmRlc2NyaWJlKFxuICAgICAgJ0lubGluZSBmaWxlIGNvbnRlbnQgYXMgYSBzdHJpbmcuIEZvciBiaW5hcnkgZGF0YSBzZXQgYGVuY29kaW5nYCAoZS5nLiBcImJhc2U2NFwiKS4gUHJvdmlkZSB0aGlzIG9yIGBwYXRoYCwgbm90IGJvdGguJyxcbiAgICApLFxuICBlbmNvZGluZzogelxuICAgIC5zdHJpbmcoKVxuICAgIC5vcHRpb25hbCgpXG4gICAgLmRlc2NyaWJlKFxuICAgICAgJ0VuY29kaW5nIG9mIGBjb250ZW50YCAoZS5nLiBcImJhc2U2NFwiLCBcInV0Zi04XCIsIFwiaGV4XCIpLiBEZWZhdWx0cyB0byB1dGYtOCB3aGVuIG9taXR0ZWQuJyxcbiAgICApLFxuICBwYXRoOiB6XG4gICAgLnN0cmluZygpXG4gICAgLm9wdGlvbmFsKClcbiAgICAuZGVzY3JpYmUoXG4gICAgICBcIlJlYWQgdGhlIGNvbnRlbnQgZnJvbSBoZXJlIGluc3RlYWQgb2YgaW5saW5pbmcgaXQ6IGEgbG9jYWwgZmlsZSBwYXRoLCBhIGRhdGE6IFVSSSwgb3IgYW4gaHR0cHMgVVJMLiBQcm92aWRlIHRoaXMgb3IgYGNvbnRlbnRgLCBub3QgYm90aC5cIixcbiAgICApLFxuICBjb250ZW50VHlwZTogelxuICAgIC5zdHJpbmcoKVxuICAgIC5vcHRpb25hbCgpXG4gICAgLmRlc2NyaWJlKFxuICAgICAgJ01JTUUgdHlwZSBvdmVycmlkZSAoZS5nLiBcImFwcGxpY2F0aW9uL3BkZlwiKS4gSW5mZXJyZWQgZnJvbSB0aGUgZmlsZW5hbWUgd2hlbiBvbWl0dGVkLicsXG4gICAgKSxcbn0pO1xuXG4vKiogQSBzaW5nbGUgZmlsZSBhdHRhY2hlZCB0byBhbiB7QGxpbmsgRW1haWxNZXNzYWdlfS4gKi9cbmV4cG9ydCB0eXBlIEVtYWlsQXR0YWNobWVudCA9IHouaW5mZXI8dHlwZW9mIGVtYWlsQXR0YWNobWVudFNjaGVtYT47XG5cbi8qKiBTY2hlbWEgZm9yIHRoZSBlbWFpbCBhIG1vZGVsIGFza3MgdG8gc2VuZCAodGhlIHRvb2wgaW5wdXQpLiAqL1xuZXhwb3J0IGNvbnN0IGVtYWlsTWVzc2FnZVNjaGVtYSA9IHoub2JqZWN0KHtcbiAgdG86IHpcbiAgICAuYXJyYXkoei5zdHJpbmcoKSlcbiAgICAuZGVzY3JpYmUoXG4gICAgICAnT25lIG9yIG1vcmUgcmVjaXBpZW50IGVtYWlsIGFkZHJlc3NlcyAoZS5nLiBbXCJhbGljZUBleGFtcGxlLmNvbVwiLCBcImJvYkBleGFtcGxlLmNvbVwiXSkuIFByb3ZpZGUgYXQgbGVhc3Qgb25lLicsXG4gICAgKSxcbiAgc3ViamVjdDogei5zdHJpbmcoKS5kZXNjcmliZShcIkVtYWlsIHN1YmplY3QgbGluZS5cIiksXG4gIGJvZHk6IHouc3RyaW5nKCkuZGVzY3JpYmUoXCJFbWFpbCBjb250ZW50IHJlbmRlcmVkIHRocm91Z2ggdGhlIGNvbmZpZ3VyZWQgUmVhY3QgRW1haWwgdGVtcGxhdGUuXCIpLFxuICBjYzogei5hcnJheSh6LnN0cmluZygpKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiT3B0aW9uYWwgQ0MgcmVjaXBpZW50IGFkZHJlc3NlcyAob25lIG9yIG1vcmUpLlwiKSxcbiAgYmNjOiB6LmFycmF5KHouc3RyaW5nKCkpLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJPcHRpb25hbCBCQ0MgcmVjaXBpZW50IGFkZHJlc3NlcyAob25lIG9yIG1vcmUpLlwiKSxcbiAgYXR0YWNobWVudHM6IHpcbiAgICAuYXJyYXkoZW1haWxBdHRhY2htZW50U2NoZW1hKVxuICAgIC5vcHRpb25hbCgpXG4gICAgLmRlc2NyaWJlKFwiT3B0aW9uYWwgZmlsZSBhdHRhY2htZW50cyB0byBpbmNsdWRlIHdpdGggdGhlIG1lc3NhZ2UuXCIpLFxufSk7XG5cbi8qKiBBIHZhbGlkYXRlZCBvdXRib3VuZCBlbWFpbCBtZXNzYWdlLiAqL1xuZXhwb3J0IHR5cGUgRW1haWxNZXNzYWdlID0gei5pbmZlcjx0eXBlb2YgZW1haWxNZXNzYWdlU2NoZW1hPjtcblxuLyoqIFNjaGVtYSBmb3IgdGhlIGRpc3BhdGNoIHJlc3VsdCByZXR1cm5lZCB0byB0aGUgbW9kZWwgYWZ0ZXIgYSBzZW5kLiAqL1xuZXhwb3J0IGNvbnN0IGVtYWlsUmVzdWx0U2NoZW1hID0gei5vYmplY3Qoe1xuICBzZW50OiB6LmJvb2xlYW4oKS5kZXNjcmliZShcIlRydWUgb25jZSB0aGUgbWVzc2FnZSB3YXMgaGFuZGVkIHRvIHRoZSBTTVRQIHNlcnZlci5cIiksXG4gIHJlY2lwaWVudDogei5zdHJpbmcoKS5kZXNjcmliZShcIkVjaG8gb2YgdGhlIGB0b2AgcmVjaXBpZW50cyAoY29tbWEtam9pbmVkKSBmb3IgY29uZmlybWF0aW9uLlwiKSxcbiAgZnJvbTogei5zdHJpbmcoKS5kZXNjcmliZShcIlRoZSByZXNvbHZlZCBzZW5kZXIgYWRkcmVzcyB0aGUgbWVzc2FnZSB3YXMgYWN0dWFsbHkgc2VudCBmcm9tLlwiKSxcbiAgbWVzc2FnZUlkOiB6XG4gICAgLnN0cmluZygpXG4gICAgLm9wdGlvbmFsKClcbiAgICAuZGVzY3JpYmUoXCJTTVRQIG1lc3NhZ2UgaWQgYXNzaWduZWQgYnkgdGhlIHNlcnZlciwgd2hlbiBvbmUgd2FzIHJldHVybmVkLlwiKSxcbn0pO1xuXG4vKiogVGhlIG91dGNvbWUgb2YgZGlzcGF0Y2hpbmcgYW4ge0BsaW5rIEVtYWlsTWVzc2FnZX0uICovXG5leHBvcnQgdHlwZSBFbWFpbFJlc3VsdCA9IHouaW5mZXI8dHlwZW9mIGVtYWlsUmVzdWx0U2NoZW1hPjtcblxuLyoqXG4gKiBTY2hlbWEgZm9yIHRoZSBzZW5kZXIgb3B0aW9ucyBhIFVJIGNhbiBvZmZlciBmb3IgdGhlIGBGcm9tYCBhZGRyZXNzIC0gdGhlXG4gKiBwYXlsb2FkIG9mIHRoZSBwbHVnaW4ncyBgR0VUIC9zZW5kZXJzYCByb3V0ZS4gV2hlbiB0aGUgcGx1Z2luIGNvbmZpZ3VyZXMgYVxuICogc2VuZGVyIGFsbG93LWxpc3QsIGBzZW5kZXJzYCBob2xkcyB0aGUgY29uY3JldGUgYWRkcmVzc2VzIHRoZSBjdXJyZW50IHVzZXJcbiAqIG1heSBzZW5kIGFzIChkb21haW4gd2lsZGNhcmRzIGV4cGFuZGVkIGFnYWluc3QgdGhlIHVzZXIncyBsb2NhbCBwYXJ0KSBhbmRcbiAqIGByZXN0cmljdGVkYCBpcyB0cnVlOyBhIHBpY2tlciBzaG91bGQgcmVxdWlyZSBhIGNob2ljZSBmcm9tIHRoZSBsaXN0LiBXaGVuXG4gKiB1bnJlc3RyaWN0ZWQsIGBzZW5kZXJzYCBob2xkcyBhdCBtb3N0IHRoZSBzaW5nbGUgZGVmYXVsdCBhZGRyZXNzIChpZiBvbmUgY2FuXG4gKiBiZSByZXNvbHZlZCkgYW5kIGByZXN0cmljdGVkYCBpcyBmYWxzZSwgc28gYSBVSSBtYXkgYWxsb3cgZnJlZSBlbnRyeS5cbiAqL1xuZXhwb3J0IGNvbnN0IGVtYWlsU2VuZGVyc1NjaGVtYSA9IHoub2JqZWN0KHtcbiAgc2VuZGVyczogei5hcnJheSh6LnN0cmluZygpKS5kZXNjcmliZShcIlBlcm1pdHRlZCBzZW5kZXIgYWRkcmVzc2VzIHRvIG9mZmVyIGFzIGBGcm9tYCBjaG9pY2VzLlwiKSxcbiAgZGVmYXVsdFNlbmRlcjogelxuICAgIC5zdHJpbmcoKVxuICAgIC5vcHRpb25hbCgpXG4gICAgLmRlc2NyaWJlKFwiVGhlIGFkZHJlc3MgYSBzZW5kIHVzZXMgYnkgZGVmYXVsdCAoZmlyc3QgYHNlbmRlcnNgIGVudHJ5LCBpZiBhbnkpLlwiKSxcbiAgcmVzdHJpY3RlZDogelxuICAgIC5ib29sZWFuKClcbiAgICAuZGVzY3JpYmUoXCJUcnVlIHdoZW4gYHNlbmRlcnNgIGlzIGFuIGVuZm9yY2VkIGFsbG93LWxpc3QgcmF0aGVyIHRoYW4gYSBoaW50LlwiKSxcbn0pO1xuXG4vKiogU2VuZGVyIG9wdGlvbnMgZm9yIGEgYEZyb21gIHBpY2tlciAoc2VlIHtAbGluayBlbWFpbFNlbmRlcnNTY2hlbWF9KS4gKi9cbmV4cG9ydCB0eXBlIEVtYWlsU2VuZGVycyA9IHouaW5mZXI8dHlwZW9mIGVtYWlsU2VuZGVyc1NjaGVtYT47XG4iXX0=
|
package/package.json
CHANGED
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
"typescript": "^5.9.3"
|
|
24
24
|
},
|
|
25
25
|
"dependencies": {
|
|
26
|
-
"@dbx-tools/shared-core": "0.6.
|
|
26
|
+
"@dbx-tools/shared-core": "0.6.48",
|
|
27
27
|
"zod": "4.3.6"
|
|
28
28
|
},
|
|
29
29
|
"main": "./lib/index.js",
|
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
"./package.json": "./package.json"
|
|
41
41
|
}
|
|
42
42
|
},
|
|
43
|
-
"version": "0.6.
|
|
43
|
+
"version": "0.6.48",
|
|
44
44
|
"types": "./lib/index.d.ts",
|
|
45
45
|
"type": "module",
|
|
46
46
|
"exports": {
|
package/src/email.ts
CHANGED
|
@@ -53,18 +53,8 @@ export const emailMessageSchema = z.object({
|
|
|
53
53
|
.describe(
|
|
54
54
|
'One or more recipient email addresses (e.g. ["alice@example.com", "bob@example.com"]). Provide at least one.',
|
|
55
55
|
),
|
|
56
|
-
subject: z.string().describe("
|
|
57
|
-
body: z
|
|
58
|
-
.string()
|
|
59
|
-
.describe(
|
|
60
|
-
[
|
|
61
|
-
"Email body in GitHub-Flavored Markdown; it is rendered to HTML before sending.",
|
|
62
|
-
"Use real Markdown structure: '#'/'##' headings, '-' or '1.' lists, **bold**/_italic_, '>' blockquotes, and fenced ``` code blocks.",
|
|
63
|
-
"For tabular data, emit a real Markdown table: a header row, then a '| --- | --- |' separator row, then one '| ... |' row per record.",
|
|
64
|
-
"Do NOT format with ASCII art: no '=====' or '-----' divider lines, and never hand-draw tables or bar charts with spaces, pipes, or '#'. Use the Markdown constructs above instead.",
|
|
65
|
-
"Be self-contained: the recipient has none of the chat context.",
|
|
66
|
-
].join(" "),
|
|
67
|
-
),
|
|
56
|
+
subject: z.string().describe("Email subject line."),
|
|
57
|
+
body: z.string().describe("Email content rendered through the configured React Email template."),
|
|
68
58
|
cc: z.array(z.string()).optional().describe("Optional CC recipient addresses (one or more)."),
|
|
69
59
|
bcc: z.array(z.string()).optional().describe("Optional BCC recipient addresses (one or more)."),
|
|
70
60
|
attachments: z
|