organify-email 1.1.0 → 1.1.3

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.
@@ -1,8 +1,11 @@
1
1
  import { type EmailTemplateName } from './templates';
2
2
  export interface BrevoEmailConfig {
3
3
  apiKey: string;
4
+ mailerSendApiKey?: string;
4
5
  senderName?: string;
5
6
  senderEmail?: string;
7
+ mailerSendSenderName?: string;
8
+ mailerSendSenderEmail?: string;
6
9
  /** Daily send limit (default: 300) */
7
10
  dailyLimit?: number;
8
11
  /** Enable sending (set false for dev/test to just log) */
@@ -67,17 +70,23 @@ export interface DailyStats {
67
70
  };
68
71
  }
69
72
  export declare class BrevoEmailClient {
70
- private readonly apiKey;
71
- private readonly senderName;
72
- private readonly senderEmail;
73
+ private readonly brevoApiKey;
74
+ private readonly mailerSendApiKey;
75
+ private readonly brevoSenderName;
76
+ private readonly brevoSenderEmail;
77
+ private readonly mailerSendSenderName;
78
+ private readonly mailerSendSenderEmail;
73
79
  private readonly dailyLimit;
74
80
  private readonly enabled;
75
81
  private dailySent;
76
82
  private dailyDate;
77
83
  private dailyByPriority;
78
84
  private static readonly API_URL;
85
+ private static readonly MAILERSEND_API_URL;
79
86
  constructor(config: BrevoEmailConfig);
80
87
  send(options: SendEmailOptions): Promise<SendResult>;
88
+ private sendViaBrevo;
89
+ private sendViaMailerSend;
81
90
  sendBatch(recipients: EmailRecipient[], options: Omit<SendEmailOptions, 'to'>): Promise<SendResult[]>;
82
91
  getStats(): DailyStats;
83
92
  private checkDayReset;
@@ -1 +1 @@
1
- {"version":3,"file":"brevo-client.d.ts","sourceRoot":"","sources":["../src/brevo-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"brevo-client.d.ts","sourceRoot":"","sources":["../src/brevo-client.ts"],"names":[],"mappings":"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"}
@@ -18,16 +18,34 @@ Object.defineProperty(exports, "__esModule", { value: true });
18
18
  exports.BrevoEmailClient = exports.ORGANIFY_EMAIL_DAILY_LIMITS = exports.HARDCODED_BREVO_PROVIDER = void 0;
19
19
  exports.createOrganifyEmailClient = createOrganifyEmailClient;
20
20
  const templates_1 = require("./templates");
21
+ function getEnvVar(name) {
22
+ const value = globalThis?.process?.env?.[name];
23
+ if (typeof value !== 'string')
24
+ return undefined;
25
+ const trimmed = value.trim();
26
+ return trimmed.length > 0 ? trimmed : undefined;
27
+ }
28
+ function parseBooleanEnv(name) {
29
+ const value = getEnvVar(name)?.toLowerCase();
30
+ if (!value)
31
+ return undefined;
32
+ if (value === 'true' || value === '1' || value === 'yes')
33
+ return true;
34
+ if (value === 'false' || value === '0' || value === 'no')
35
+ return false;
36
+ return undefined;
37
+ }
21
38
  /**
22
39
  * Hardcoded Brevo provider configuration for package-level local/demo usage.
23
40
  * Replace apiKey with a valid Brevo key before using in real sends.
24
41
  */
25
42
  exports.HARDCODED_BREVO_PROVIDER = {
26
- apiKey: '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',
27
- senderName: 'Organify Team',
43
+ // Legacy fallback only. Prefer env-based configuration in createOrganifyEmailClient.
44
+ apiKey: '',
45
+ senderName: 'Organify',
28
46
  senderEmail: 'noreply@organify.studio',
29
47
  dailyLimit: 300,
30
- enabled: true,
48
+ enabled: false,
31
49
  };
32
50
  exports.ORGANIFY_EMAIL_DAILY_LIMITS = {
33
51
  users: 50,
@@ -36,19 +54,36 @@ exports.ORGANIFY_EMAIL_DAILY_LIMITS = {
36
54
  reports: 300,
37
55
  };
38
56
  function createOrganifyEmailClient(service) {
57
+ const apiKey = getEnvVar('BREVO_API_KEY') || exports.HARDCODED_BREVO_PROVIDER.apiKey;
58
+ const mailerSendApiKey = getEnvVar('MAILERSEND_API_KEY');
59
+ const senderName = getEnvVar('BREVO_SENDER_NAME') || exports.HARDCODED_BREVO_PROVIDER.senderName;
60
+ const senderEmail = getEnvVar('BREVO_SENDER_EMAIL') || exports.HARDCODED_BREVO_PROVIDER.senderEmail;
61
+ const mailerSendSenderName = getEnvVar('MAILERSEND_SENDER_NAME') || senderName;
62
+ const mailerSendSenderEmail = getEnvVar('MAILERSEND_SENDER_EMAIL') || senderEmail;
63
+ const forcedEnabled = parseBooleanEnv('BREVO_ENABLED');
64
+ const enabled = forcedEnabled ?? Boolean(apiKey || mailerSendApiKey);
65
+ if (!apiKey && !mailerSendApiKey) {
66
+ console.warn(`[Email] BREVO_API_KEY and MAILERSEND_API_KEY are missing for service "${service}". Running in DRY RUN mode (emails not sent).`);
67
+ }
39
68
  return new BrevoEmailClient({
40
- apiKey: exports.HARDCODED_BREVO_PROVIDER.apiKey,
41
- senderName: exports.HARDCODED_BREVO_PROVIDER.senderName,
42
- senderEmail: exports.HARDCODED_BREVO_PROVIDER.senderEmail,
69
+ apiKey,
70
+ mailerSendApiKey,
71
+ senderName,
72
+ senderEmail,
73
+ mailerSendSenderName,
74
+ mailerSendSenderEmail,
43
75
  dailyLimit: exports.ORGANIFY_EMAIL_DAILY_LIMITS[service],
44
- enabled: exports.HARDCODED_BREVO_PROVIDER.enabled,
76
+ enabled,
45
77
  });
46
78
  }
47
79
  // ─── Client ─────────────────────────────────
48
80
  class BrevoEmailClient {
49
- apiKey;
50
- senderName;
51
- senderEmail;
81
+ brevoApiKey;
82
+ mailerSendApiKey;
83
+ brevoSenderName;
84
+ brevoSenderEmail;
85
+ mailerSendSenderName;
86
+ mailerSendSenderEmail;
52
87
  dailyLimit;
53
88
  enabled;
54
89
  // Daily counter (in-memory, resets on restart)
@@ -56,10 +91,14 @@ class BrevoEmailClient {
56
91
  dailyDate = '';
57
92
  dailyByPriority = { critical: 0, normal: 0, low: 0 };
58
93
  static API_URL = 'https://api.brevo.com/v3/smtp/email';
94
+ static MAILERSEND_API_URL = 'https://api.mailersend.com/v1/email';
59
95
  constructor(config) {
60
- this.apiKey = config.apiKey;
61
- this.senderName = config.senderName || 'Organify Team';
62
- this.senderEmail = config.senderEmail || 'noreply@organify.studio';
96
+ this.brevoApiKey = config.apiKey;
97
+ this.mailerSendApiKey = config.mailerSendApiKey || '';
98
+ this.brevoSenderName = config.senderName || 'Organify Team';
99
+ this.brevoSenderEmail = config.senderEmail || 'noreply@organify.studio';
100
+ this.mailerSendSenderName = config.mailerSendSenderName || this.brevoSenderName;
101
+ this.mailerSendSenderEmail = config.mailerSendSenderEmail || this.brevoSenderEmail;
63
102
  this.dailyLimit = config.dailyLimit || 300;
64
103
  this.enabled = config.enabled !== false;
65
104
  }
@@ -105,15 +144,55 @@ class BrevoEmailClient {
105
144
  this.incrementCounter(priority);
106
145
  return { success: true, messageId: `dry-run-${Date.now()}`, skipped: false };
107
146
  }
108
- // Build Brevo payload
147
+ // Build Brevo/MailerSend payload basis
109
148
  const recipients = Array.isArray(options.to) ? options.to : [options.to];
149
+ const recipientPayload = recipients.map((r) => ({ email: r.email, name: r.name }));
150
+ if (!this.brevoApiKey && !this.mailerSendApiKey) {
151
+ return { success: false, error: 'No email provider key configured (BREVO_API_KEY or MAILERSEND_API_KEY)' };
152
+ }
153
+ if (this.brevoApiKey) {
154
+ const brevoResult = await this.sendViaBrevo({
155
+ recipients: recipientPayload,
156
+ subject: options.subject,
157
+ htmlContent,
158
+ textContent: options.textContent,
159
+ params: options.params,
160
+ tags: options.tags,
161
+ cc: options.cc,
162
+ bcc: options.bcc,
163
+ replyTo: options.replyTo,
164
+ });
165
+ if (brevoResult.success) {
166
+ this.incrementCounter(priority);
167
+ return brevoResult;
168
+ }
169
+ console.warn(`[Email] Brevo send failed; trying MailerSend fallback: ${brevoResult.error || 'unknown error'}`);
170
+ }
171
+ if (this.mailerSendApiKey) {
172
+ const mailerSendResult = await this.sendViaMailerSend({
173
+ recipients: recipientPayload,
174
+ subject: options.subject,
175
+ htmlContent,
176
+ textContent: options.textContent,
177
+ cc: options.cc,
178
+ bcc: options.bcc,
179
+ replyTo: options.replyTo,
180
+ });
181
+ if (mailerSendResult.success) {
182
+ this.incrementCounter(priority);
183
+ }
184
+ return mailerSendResult;
185
+ }
186
+ return { success: false, error: 'Brevo failed and MAILERSEND_API_KEY is not configured for fallback' };
187
+ }
188
+ async sendViaBrevo(options) {
110
189
  const payload = {
111
- sender: { name: this.senderName, email: this.senderEmail },
112
- to: recipients.map((r) => ({ email: r.email, name: r.name })),
190
+ sender: { name: this.brevoSenderName, email: this.brevoSenderEmail },
191
+ to: options.recipients,
113
192
  subject: options.subject,
114
193
  };
115
- if (htmlContent)
116
- payload.htmlContent = htmlContent;
194
+ if (options.htmlContent)
195
+ payload.htmlContent = options.htmlContent;
117
196
  else if (options.textContent)
118
197
  payload.textContent = options.textContent;
119
198
  if (options.params)
@@ -130,8 +209,8 @@ class BrevoEmailClient {
130
209
  const response = await fetch(BrevoEmailClient.API_URL, {
131
210
  method: 'POST',
132
211
  headers: {
133
- 'accept': 'application/json',
134
- 'api-key': this.apiKey,
212
+ accept: 'application/json',
213
+ 'api-key': this.brevoApiKey,
135
214
  'content-type': 'application/json',
136
215
  },
137
216
  body: JSON.stringify(payload),
@@ -139,15 +218,70 @@ class BrevoEmailClient {
139
218
  if (!response.ok) {
140
219
  const body = await response.text();
141
220
  console.error(`[BrevoEmail] API error ${response.status}: ${body}`);
221
+ if (response.status === 401) {
222
+ console.error('[BrevoEmail] Check BREVO_API_KEY in env and ensure it is enabled for Transactional API/SMTP.');
223
+ }
142
224
  return { success: false, error: `Brevo API error: ${response.status} — ${body}` };
143
225
  }
144
226
  const data = await response.json();
145
- this.incrementCounter(priority);
146
227
  return { success: true, messageId: data.messageId };
147
228
  }
148
229
  catch (err) {
149
- console.error(`[BrevoEmail] Network error: ${err.message}`);
150
- return { success: false, error: `Network error: ${err.message}` };
230
+ const message = err instanceof Error ? err.message : String(err);
231
+ console.error(`[BrevoEmail] Network error: ${message}`);
232
+ return { success: false, error: `Brevo network error: ${message}` };
233
+ }
234
+ }
235
+ async sendViaMailerSend(options) {
236
+ const payload = {
237
+ from: { email: this.mailerSendSenderEmail, name: this.mailerSendSenderName },
238
+ to: options.recipients,
239
+ subject: options.subject,
240
+ };
241
+ if (options.htmlContent)
242
+ payload.html = options.htmlContent;
243
+ if (options.textContent)
244
+ payload.text = options.textContent;
245
+ if (!options.textContent && options.htmlContent) {
246
+ payload.text = 'Mensagem enviada pelo Organify.';
247
+ }
248
+ if (options.cc)
249
+ payload.cc = options.cc;
250
+ if (options.bcc)
251
+ payload.bcc = options.bcc;
252
+ if (options.replyTo) {
253
+ payload.reply_to = {
254
+ email: options.replyTo.email,
255
+ name: options.replyTo.name,
256
+ };
257
+ }
258
+ else {
259
+ payload.reply_to = {
260
+ email: this.mailerSendSenderEmail,
261
+ name: this.mailerSendSenderName,
262
+ };
263
+ }
264
+ try {
265
+ const response = await fetch(BrevoEmailClient.MAILERSEND_API_URL, {
266
+ method: 'POST',
267
+ headers: {
268
+ Authorization: `Bearer ${this.mailerSendApiKey}`,
269
+ 'Content-Type': 'application/json',
270
+ },
271
+ body: JSON.stringify(payload),
272
+ });
273
+ if (!response.ok) {
274
+ const body = await response.text();
275
+ console.error(`[MailerSendEmail] API error ${response.status}: ${body}`);
276
+ return { success: false, error: `MailerSend API error: ${response.status} — ${body}` };
277
+ }
278
+ const messageId = response.headers.get('x-message-id') || undefined;
279
+ return { success: true, messageId };
280
+ }
281
+ catch (err) {
282
+ const message = err instanceof Error ? err.message : String(err);
283
+ console.error(`[MailerSendEmail] Network error: ${message}`);
284
+ return { success: false, error: `MailerSend network error: ${message}` };
151
285
  }
152
286
  }
153
287
  // ─── Batch Send (same template, multiple recipients) ──
@@ -1 +1 @@
1
- {"version":3,"file":"brevo-client.js","sourceRoot":"","sources":["../src/brevo-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"brevo-client.js","sourceRoot":"","sources":["../src/brevo-client.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../src/templates.ts"],"names":[],"mappings":"AAyBA,MAAM,MAAM,iBAAiB,GACzB,cAAc,GACd,SAAS,GACT,gBAAgB,GAChB,kBAAkB,GAClB,eAAe,GACf,eAAe,GACf,gBAAgB,GAChB,gBAAgB,GAChB,eAAe,CAAC;AAEpB,KAAK,gBAAgB,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,MAAM,CAAC;AA6dhE,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,iBAAiB,EAAE,gBAAgB,CAUtE,CAAC"}
1
+ {"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../src/templates.ts"],"names":[],"mappings":"AAyBA,MAAM,MAAM,iBAAiB,GACzB,cAAc,GACd,SAAS,GACT,gBAAgB,GAChB,kBAAkB,GAClB,eAAe,GACf,eAAe,GACf,gBAAgB,GAChB,gBAAgB,GAChB,eAAe,CAAC;AAEpB,KAAK,gBAAgB,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,MAAM,CAAC;AAgehE,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,iBAAiB,EAAE,gBAAgB,CAUtE,CAAC"}
package/dist/templates.js CHANGED
@@ -18,7 +18,7 @@
18
18
  //
19
19
  // Design Rules:
20
20
  // - Dark mode only
21
- // - Organify logo (text-based, no external images)
21
+ // - Organify logo (frontend geometric mark, no external images)
22
22
  // - No emojis
23
23
  // - Professional, clean, Space Grotesk feel
24
24
  // - Glass-morphism borders (rgba white)
@@ -70,8 +70,11 @@ function baseLayout(content, preheader) {
70
70
  <td align="center" style="padding-bottom:32px;">
71
71
  <table role="presentation" cellpadding="0" cellspacing="0">
72
72
  <tr>
73
- <td style="padding-right:10px;vertical-align:middle;">
74
- <div style="width:36px;height:36px;border-radius:10px;background:linear-gradient(135deg,#7C3AED,#8B5CF6);display:inline-block;text-align:center;line-height:36px;color:#fff;font-weight:700;font-size:16px;">O</div>
73
+ <td style="padding-right:12px;vertical-align:middle;">
74
+ <div style="position:relative;width:40px;height:40px;border-radius:12px;border:2px solid rgba(124,58,237,0.35);background:linear-gradient(135deg,rgba(124,58,237,0.16),rgba(124,58,237,0.02));box-shadow:0 0 20px rgba(124,58,237,0.2);">
75
+ <div style="position:absolute;top:50%;left:50%;width:16px;height:16px;transform:translate(-50%,-50%) rotate(45deg);border-radius:6px;background:linear-gradient(135deg,#7C3AED,#A78BFA);box-shadow:0 0 12px rgba(124,58,237,0.55);"></div>
76
+ <div style="position:absolute;right:-2px;top:-2px;width:10px;height:10px;border-right:2px solid rgba(124,58,237,0.45);border-top:2px solid rgba(124,58,237,0.45);border-top-right-radius:6px;"></div>
77
+ </div>
75
78
  </td>
76
79
  <td style="vertical-align:middle;">
77
80
  <span style="font-size:22px;font-weight:700;color:#FFFFFF;letter-spacing:-0.5px;">Organify</span>
@@ -1 +1 @@
1
- {"version":3,"file":"templates.js","sourceRoot":"","sources":["../src/templates.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"templates.js","sourceRoot":"","sources":["../src/templates.ts"],"names":[],"mappings":"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"}
Binary file
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "organify-email",
3
- "version": "1.1.0",
3
+ "version": "1.1.3",
4
4
  "description": "Shared email service for Organify — Brevo transactional API",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -12,4 +12,4 @@
12
12
  "devDependencies": {
13
13
  "typescript": "^5.4.0"
14
14
  }
15
- }
15
+ }
@@ -20,14 +20,32 @@ import { emailTemplates, type EmailTemplateName } from './templates';
20
20
 
21
21
  export interface BrevoEmailConfig {
22
22
  apiKey: string;
23
+ mailerSendApiKey?: string;
23
24
  senderName?: string;
24
25
  senderEmail?: string;
26
+ mailerSendSenderName?: string;
27
+ mailerSendSenderEmail?: string;
25
28
  /** Daily send limit (default: 300) */
26
29
  dailyLimit?: number;
27
30
  /** Enable sending (set false for dev/test to just log) */
28
31
  enabled?: boolean;
29
32
  }
30
33
 
34
+ function getEnvVar(name: string): string | undefined {
35
+ const value = (globalThis as any)?.process?.env?.[name];
36
+ if (typeof value !== 'string') return undefined;
37
+ const trimmed = value.trim();
38
+ return trimmed.length > 0 ? trimmed : undefined;
39
+ }
40
+
41
+ function parseBooleanEnv(name: string): boolean | undefined {
42
+ const value = getEnvVar(name)?.toLowerCase();
43
+ if (!value) return undefined;
44
+ if (value === 'true' || value === '1' || value === 'yes') return true;
45
+ if (value === 'false' || value === '0' || value === 'no') return false;
46
+ return undefined;
47
+ }
48
+
31
49
  /**
32
50
  * Hardcoded Brevo provider configuration for package-level local/demo usage.
33
51
  * Replace apiKey with a valid Brevo key before using in real sends.
@@ -39,11 +57,12 @@ export const HARDCODED_BREVO_PROVIDER: Readonly<{
39
57
  dailyLimit: number;
40
58
  enabled: boolean;
41
59
  }> = {
42
- apiKey: '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',
43
- senderName: 'Organify Team',
60
+ // Legacy fallback only. Prefer env-based configuration in createOrganifyEmailClient.
61
+ apiKey: '',
62
+ senderName: 'Organify',
44
63
  senderEmail: 'noreply@organify.studio',
45
64
  dailyLimit: 300,
46
- enabled: true,
65
+ enabled: false,
47
66
  };
48
67
 
49
68
  export type OrganifyEmailService = 'users' | 'workspaces' | 'notifications' | 'reports';
@@ -56,12 +75,30 @@ export const ORGANIFY_EMAIL_DAILY_LIMITS: Readonly<Record<OrganifyEmailService,
56
75
  };
57
76
 
58
77
  export function createOrganifyEmailClient(service: OrganifyEmailService): BrevoEmailClient {
78
+ const apiKey = getEnvVar('BREVO_API_KEY') || HARDCODED_BREVO_PROVIDER.apiKey;
79
+ const mailerSendApiKey = getEnvVar('MAILERSEND_API_KEY');
80
+ const senderName = getEnvVar('BREVO_SENDER_NAME') || HARDCODED_BREVO_PROVIDER.senderName;
81
+ const senderEmail = getEnvVar('BREVO_SENDER_EMAIL') || HARDCODED_BREVO_PROVIDER.senderEmail;
82
+ const mailerSendSenderName = getEnvVar('MAILERSEND_SENDER_NAME') || senderName;
83
+ const mailerSendSenderEmail = getEnvVar('MAILERSEND_SENDER_EMAIL') || senderEmail;
84
+ const forcedEnabled = parseBooleanEnv('BREVO_ENABLED');
85
+ const enabled = forcedEnabled ?? Boolean(apiKey || mailerSendApiKey);
86
+
87
+ if (!apiKey && !mailerSendApiKey) {
88
+ console.warn(
89
+ `[Email] BREVO_API_KEY and MAILERSEND_API_KEY are missing for service "${service}". Running in DRY RUN mode (emails not sent).`,
90
+ );
91
+ }
92
+
59
93
  return new BrevoEmailClient({
60
- apiKey: HARDCODED_BREVO_PROVIDER.apiKey,
61
- senderName: HARDCODED_BREVO_PROVIDER.senderName,
62
- senderEmail: HARDCODED_BREVO_PROVIDER.senderEmail,
94
+ apiKey,
95
+ mailerSendApiKey,
96
+ senderName,
97
+ senderEmail,
98
+ mailerSendSenderName,
99
+ mailerSendSenderEmail,
63
100
  dailyLimit: ORGANIFY_EMAIL_DAILY_LIMITS[service],
64
- enabled: HARDCODED_BREVO_PROVIDER.enabled,
101
+ enabled,
65
102
  });
66
103
  }
67
104
 
@@ -112,9 +149,12 @@ export interface DailyStats {
112
149
  // ─── Client ─────────────────────────────────
113
150
 
114
151
  export class BrevoEmailClient {
115
- private readonly apiKey: string;
116
- private readonly senderName: string;
117
- private readonly senderEmail: string;
152
+ private readonly brevoApiKey: string;
153
+ private readonly mailerSendApiKey: string;
154
+ private readonly brevoSenderName: string;
155
+ private readonly brevoSenderEmail: string;
156
+ private readonly mailerSendSenderName: string;
157
+ private readonly mailerSendSenderEmail: string;
118
158
  private readonly dailyLimit: number;
119
159
  private readonly enabled: boolean;
120
160
 
@@ -124,11 +164,15 @@ export class BrevoEmailClient {
124
164
  private dailyByPriority = { critical: 0, normal: 0, low: 0 };
125
165
 
126
166
  private static readonly API_URL = 'https://api.brevo.com/v3/smtp/email';
167
+ private static readonly MAILERSEND_API_URL = 'https://api.mailersend.com/v1/email';
127
168
 
128
169
  constructor(config: BrevoEmailConfig) {
129
- this.apiKey = config.apiKey;
130
- this.senderName = config.senderName || 'Organify Team';
131
- this.senderEmail = config.senderEmail || 'noreply@organify.studio';
170
+ this.brevoApiKey = config.apiKey;
171
+ this.mailerSendApiKey = config.mailerSendApiKey || '';
172
+ this.brevoSenderName = config.senderName || 'Organify Team';
173
+ this.brevoSenderEmail = config.senderEmail || 'noreply@organify.studio';
174
+ this.mailerSendSenderName = config.mailerSendSenderName || this.brevoSenderName;
175
+ this.mailerSendSenderEmail = config.mailerSendSenderEmail || this.brevoSenderEmail;
132
176
  this.dailyLimit = config.dailyLimit || 300;
133
177
  this.enabled = config.enabled !== false;
134
178
  }
@@ -183,17 +227,71 @@ export class BrevoEmailClient {
183
227
  return { success: true, messageId: `dry-run-${Date.now()}`, skipped: false };
184
228
  }
185
229
 
186
- // Build Brevo payload
230
+ // Build Brevo/MailerSend payload basis
187
231
  const recipients = Array.isArray(options.to) ? options.to : [options.to];
188
- const payload: Record<string, any> = {
189
- sender: { name: this.senderName, email: this.senderEmail },
190
- to: recipients.map((r) => ({ email: r.email, name: r.name })),
232
+ const recipientPayload = recipients.map((r) => ({ email: r.email, name: r.name }));
233
+
234
+ if (!this.brevoApiKey && !this.mailerSendApiKey) {
235
+ return { success: false, error: 'No email provider key configured (BREVO_API_KEY or MAILERSEND_API_KEY)' };
236
+ }
237
+
238
+ if (this.brevoApiKey) {
239
+ const brevoResult = await this.sendViaBrevo({
240
+ recipients: recipientPayload,
241
+ subject: options.subject,
242
+ htmlContent,
243
+ textContent: options.textContent,
244
+ params: options.params,
245
+ tags: options.tags,
246
+ cc: options.cc,
247
+ bcc: options.bcc,
248
+ replyTo: options.replyTo,
249
+ });
250
+ if (brevoResult.success) {
251
+ this.incrementCounter(priority);
252
+ return brevoResult;
253
+ }
254
+ console.warn(`[Email] Brevo send failed; trying MailerSend fallback: ${brevoResult.error || 'unknown error'}`);
255
+ }
256
+
257
+ if (this.mailerSendApiKey) {
258
+ const mailerSendResult = await this.sendViaMailerSend({
259
+ recipients: recipientPayload,
260
+ subject: options.subject,
261
+ htmlContent,
262
+ textContent: options.textContent,
263
+ cc: options.cc,
264
+ bcc: options.bcc,
265
+ replyTo: options.replyTo,
266
+ });
267
+ if (mailerSendResult.success) {
268
+ this.incrementCounter(priority);
269
+ }
270
+ return mailerSendResult;
271
+ }
272
+
273
+ return { success: false, error: 'Brevo failed and MAILERSEND_API_KEY is not configured for fallback' };
274
+ }
275
+
276
+ private async sendViaBrevo(options: {
277
+ recipients: Array<{ email: string; name?: string }>;
278
+ subject: string;
279
+ htmlContent?: string;
280
+ textContent?: string;
281
+ params?: Record<string, string | number | boolean>;
282
+ tags?: string[];
283
+ cc?: EmailRecipient[];
284
+ bcc?: EmailRecipient[];
285
+ replyTo?: EmailRecipient;
286
+ }): Promise<SendResult> {
287
+ const payload: Record<string, unknown> = {
288
+ sender: { name: this.brevoSenderName, email: this.brevoSenderEmail },
289
+ to: options.recipients,
191
290
  subject: options.subject,
192
291
  };
193
292
 
194
- if (htmlContent) payload.htmlContent = htmlContent;
293
+ if (options.htmlContent) payload.htmlContent = options.htmlContent;
195
294
  else if (options.textContent) payload.textContent = options.textContent;
196
-
197
295
  if (options.params) payload.params = options.params;
198
296
  if (options.tags) payload.tags = options.tags;
199
297
  if (options.cc) payload.cc = options.cc;
@@ -204,8 +302,8 @@ export class BrevoEmailClient {
204
302
  const response = await fetch(BrevoEmailClient.API_URL, {
205
303
  method: 'POST',
206
304
  headers: {
207
- 'accept': 'application/json',
208
- 'api-key': this.apiKey,
305
+ accept: 'application/json',
306
+ 'api-key': this.brevoApiKey,
209
307
  'content-type': 'application/json',
210
308
  },
211
309
  body: JSON.stringify(payload),
@@ -214,16 +312,77 @@ export class BrevoEmailClient {
214
312
  if (!response.ok) {
215
313
  const body = await response.text();
216
314
  console.error(`[BrevoEmail] API error ${response.status}: ${body}`);
315
+ if (response.status === 401) {
316
+ console.error('[BrevoEmail] Check BREVO_API_KEY in env and ensure it is enabled for Transactional API/SMTP.');
317
+ }
217
318
  return { success: false, error: `Brevo API error: ${response.status} — ${body}` };
218
319
  }
219
320
 
220
321
  const data = await response.json() as { messageId?: string };
221
- this.incrementCounter(priority);
222
-
223
322
  return { success: true, messageId: data.messageId };
224
- } catch (err: any) {
225
- console.error(`[BrevoEmail] Network error: ${err.message}`);
226
- return { success: false, error: `Network error: ${err.message}` };
323
+ } catch (err: unknown) {
324
+ const message = err instanceof Error ? err.message : String(err);
325
+ console.error(`[BrevoEmail] Network error: ${message}`);
326
+ return { success: false, error: `Brevo network error: ${message}` };
327
+ }
328
+ }
329
+
330
+ private async sendViaMailerSend(options: {
331
+ recipients: Array<{ email: string; name?: string }>;
332
+ subject: string;
333
+ htmlContent?: string;
334
+ textContent?: string;
335
+ cc?: EmailRecipient[];
336
+ bcc?: EmailRecipient[];
337
+ replyTo?: EmailRecipient;
338
+ }): Promise<SendResult> {
339
+ const payload: Record<string, unknown> = {
340
+ from: { email: this.mailerSendSenderEmail, name: this.mailerSendSenderName },
341
+ to: options.recipients,
342
+ subject: options.subject,
343
+ };
344
+
345
+ if (options.htmlContent) payload.html = options.htmlContent;
346
+ if (options.textContent) payload.text = options.textContent;
347
+ if (!options.textContent && options.htmlContent) {
348
+ payload.text = 'Mensagem enviada pelo Organify.';
349
+ }
350
+ if (options.cc) payload.cc = options.cc;
351
+ if (options.bcc) payload.bcc = options.bcc;
352
+ if (options.replyTo) {
353
+ payload.reply_to = {
354
+ email: options.replyTo.email,
355
+ name: options.replyTo.name,
356
+ };
357
+ } else {
358
+ payload.reply_to = {
359
+ email: this.mailerSendSenderEmail,
360
+ name: this.mailerSendSenderName,
361
+ };
362
+ }
363
+
364
+ try {
365
+ const response = await fetch(BrevoEmailClient.MAILERSEND_API_URL, {
366
+ method: 'POST',
367
+ headers: {
368
+ Authorization: `Bearer ${this.mailerSendApiKey}`,
369
+ 'Content-Type': 'application/json',
370
+ },
371
+ body: JSON.stringify(payload),
372
+ });
373
+
374
+ if (!response.ok) {
375
+ const body = await response.text();
376
+ console.error(`[MailerSendEmail] API error ${response.status}: ${body}`);
377
+ return { success: false, error: `MailerSend API error: ${response.status} — ${body}` };
378
+ }
379
+
380
+ const messageId = response.headers.get('x-message-id') || undefined;
381
+ return { success: true, messageId };
382
+ } catch (err: unknown) {
383
+ const message = err instanceof Error ? err.message : String(err);
384
+ console.error(`[MailerSendEmail] Network error: ${message}`);
385
+ return { success: false, error: `MailerSend network error: ${message}` };
227
386
  }
228
387
  }
229
388
 
package/src/templates.ts CHANGED
@@ -17,7 +17,7 @@
17
17
  //
18
18
  // Design Rules:
19
19
  // - Dark mode only
20
- // - Organify logo (text-based, no external images)
20
+ // - Organify logo (frontend geometric mark, no external images)
21
21
  // - No emojis
22
22
  // - Professional, clean, Space Grotesk feel
23
23
  // - Glass-morphism borders (rgba white)
@@ -82,8 +82,11 @@ function baseLayout(content: string, preheader?: string): string {
82
82
  <td align="center" style="padding-bottom:32px;">
83
83
  <table role="presentation" cellpadding="0" cellspacing="0">
84
84
  <tr>
85
- <td style="padding-right:10px;vertical-align:middle;">
86
- <div style="width:36px;height:36px;border-radius:10px;background:linear-gradient(135deg,#7C3AED,#8B5CF6);display:inline-block;text-align:center;line-height:36px;color:#fff;font-weight:700;font-size:16px;">O</div>
85
+ <td style="padding-right:12px;vertical-align:middle;">
86
+ <div style="position:relative;width:40px;height:40px;border-radius:12px;border:2px solid rgba(124,58,237,0.35);background:linear-gradient(135deg,rgba(124,58,237,0.16),rgba(124,58,237,0.02));box-shadow:0 0 20px rgba(124,58,237,0.2);">
87
+ <div style="position:absolute;top:50%;left:50%;width:16px;height:16px;transform:translate(-50%,-50%) rotate(45deg);border-radius:6px;background:linear-gradient(135deg,#7C3AED,#A78BFA);box-shadow:0 0 12px rgba(124,58,237,0.55);"></div>
88
+ <div style="position:absolute;right:-2px;top:-2px;width:10px;height:10px;border-right:2px solid rgba(124,58,237,0.45);border-top:2px solid rgba(124,58,237,0.45);border-top-right-radius:6px;"></div>
89
+ </div>
87
90
  </td>
88
91
  <td style="vertical-align:middle;">
89
92
  <span style="font-size:22px;font-weight:700;color:#FFFFFF;letter-spacing:-0.5px;">Organify</span>