organify-email 1.0.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/brevo-client.d.ts +72 -0
- package/dist/brevo-client.d.ts.map +1 -0
- package/dist/brevo-client.js +167 -0
- package/dist/brevo-client.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +11 -0
- package/dist/index.js.map +1 -0
- package/dist/templates.d.ts +5 -0
- package/dist/templates.d.ts.map +1 -0
- package/dist/templates.js +426 -0
- package/dist/templates.js.map +1 -0
- package/package.json +15 -0
- package/src/brevo-client.ts +242 -0
- package/src/index.ts +17 -0
- package/src/templates.ts +524 -0
- package/tsconfig.json +19 -0
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { type EmailTemplateName } from './templates';
|
|
2
|
+
export interface BrevoEmailConfig {
|
|
3
|
+
apiKey: string;
|
|
4
|
+
senderName?: string;
|
|
5
|
+
senderEmail?: string;
|
|
6
|
+
/** Daily send limit (default: 300) */
|
|
7
|
+
dailyLimit?: number;
|
|
8
|
+
/** Enable sending (set false for dev/test to just log) */
|
|
9
|
+
enabled?: boolean;
|
|
10
|
+
}
|
|
11
|
+
export interface EmailRecipient {
|
|
12
|
+
email: string;
|
|
13
|
+
name?: string;
|
|
14
|
+
}
|
|
15
|
+
export interface SendEmailOptions {
|
|
16
|
+
to: EmailRecipient | EmailRecipient[];
|
|
17
|
+
subject: string;
|
|
18
|
+
/** Use a named template with dynamic params */
|
|
19
|
+
template?: EmailTemplateName;
|
|
20
|
+
/** Template parameters (dynamic variables) */
|
|
21
|
+
params?: Record<string, string | number | boolean>;
|
|
22
|
+
/** Raw HTML content (overrides template) */
|
|
23
|
+
htmlContent?: string;
|
|
24
|
+
/** Plain text fallback */
|
|
25
|
+
textContent?: string;
|
|
26
|
+
/** Priority: 'critical' always sends, 'normal' respects rate limits, 'low' may be skipped */
|
|
27
|
+
priority?: 'critical' | 'normal' | 'low';
|
|
28
|
+
/** Tags for tracking */
|
|
29
|
+
tags?: string[];
|
|
30
|
+
/** CC recipients */
|
|
31
|
+
cc?: EmailRecipient[];
|
|
32
|
+
/** BCC recipients */
|
|
33
|
+
bcc?: EmailRecipient[];
|
|
34
|
+
/** Reply-to address */
|
|
35
|
+
replyTo?: EmailRecipient;
|
|
36
|
+
}
|
|
37
|
+
export interface SendResult {
|
|
38
|
+
success: boolean;
|
|
39
|
+
messageId?: string;
|
|
40
|
+
error?: string;
|
|
41
|
+
skipped?: boolean;
|
|
42
|
+
reason?: string;
|
|
43
|
+
}
|
|
44
|
+
export interface DailyStats {
|
|
45
|
+
sent: number;
|
|
46
|
+
limit: number;
|
|
47
|
+
remaining: number;
|
|
48
|
+
date: string;
|
|
49
|
+
byPriority: {
|
|
50
|
+
critical: number;
|
|
51
|
+
normal: number;
|
|
52
|
+
low: number;
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
export declare class BrevoEmailClient {
|
|
56
|
+
private readonly apiKey;
|
|
57
|
+
private readonly senderName;
|
|
58
|
+
private readonly senderEmail;
|
|
59
|
+
private readonly dailyLimit;
|
|
60
|
+
private readonly enabled;
|
|
61
|
+
private dailySent;
|
|
62
|
+
private dailyDate;
|
|
63
|
+
private dailyByPriority;
|
|
64
|
+
private static readonly API_URL;
|
|
65
|
+
constructor(config: BrevoEmailConfig);
|
|
66
|
+
send(options: SendEmailOptions): Promise<SendResult>;
|
|
67
|
+
sendBatch(recipients: EmailRecipient[], options: Omit<SendEmailOptions, 'to'>): Promise<SendResult[]>;
|
|
68
|
+
getStats(): DailyStats;
|
|
69
|
+
private checkDayReset;
|
|
70
|
+
private incrementCounter;
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=brevo-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"brevo-client.d.ts","sourceRoot":"","sources":["../src/brevo-client.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAkB,KAAK,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAIrE,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,sCAAsC;IACtC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,0DAA0D;IAC1D,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,cAAc,GAAG,cAAc,EAAE,CAAC;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,+CAA+C;IAC/C,QAAQ,CAAC,EAAE,iBAAiB,CAAC;IAC7B,8CAA8C;IAC9C,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;IACnD,4CAA4C;IAC5C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0BAA0B;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,6FAA6F;IAC7F,QAAQ,CAAC,EAAE,UAAU,GAAG,QAAQ,GAAG,KAAK,CAAC;IACzC,wBAAwB;IACxB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,oBAAoB;IACpB,EAAE,CAAC,EAAE,cAAc,EAAE,CAAC;IACtB,qBAAqB;IACrB,GAAG,CAAC,EAAE,cAAc,EAAE,CAAC;IACvB,uBAAuB;IACvB,OAAO,CAAC,EAAE,cAAc,CAAC;CAC1B;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;CAC/D;AAID,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAU;IAGlC,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,SAAS,CAAM;IACvB,OAAO,CAAC,eAAe,CAAsC;IAE7D,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAyC;gBAE5D,MAAM,EAAE,gBAAgB;IAU9B,IAAI,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,UAAU,CAAC;IA8FpD,SAAS,CACb,UAAU,EAAE,cAAc,EAAE,EAC5B,OAAO,EAAE,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,GACpC,OAAO,CAAC,UAAU,EAAE,CAAC;IAkBxB,QAAQ,IAAI,UAAU;IAatB,OAAO,CAAC,aAAa;IASrB,OAAO,CAAC,gBAAgB;CAIzB"}
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// ─────────────────────────────────────────────
|
|
3
|
+
// Brevo Email Client — Transactional API
|
|
4
|
+
// ─────────────────────────────────────────────
|
|
5
|
+
// Shared email service using Brevo API for all
|
|
6
|
+
// Organify microservices.
|
|
7
|
+
//
|
|
8
|
+
// Limits:
|
|
9
|
+
// - 300 emails/day (Brevo free tier)
|
|
10
|
+
// - ~30 estimated for beta
|
|
11
|
+
// - Built-in daily counter + priority system
|
|
12
|
+
//
|
|
13
|
+
// Usage:
|
|
14
|
+
// const client = new BrevoEmailClient({ apiKey, senderName, senderEmail });
|
|
15
|
+
// await client.send({ to, subject, template: 'report-ready', params });
|
|
16
|
+
// ─────────────────────────────────────────────
|
|
17
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
+
exports.BrevoEmailClient = void 0;
|
|
19
|
+
const templates_1 = require("./templates");
|
|
20
|
+
// ─── Client ─────────────────────────────────
|
|
21
|
+
class BrevoEmailClient {
|
|
22
|
+
apiKey;
|
|
23
|
+
senderName;
|
|
24
|
+
senderEmail;
|
|
25
|
+
dailyLimit;
|
|
26
|
+
enabled;
|
|
27
|
+
// Daily counter (in-memory, resets on restart)
|
|
28
|
+
dailySent = 0;
|
|
29
|
+
dailyDate = '';
|
|
30
|
+
dailyByPriority = { critical: 0, normal: 0, low: 0 };
|
|
31
|
+
static API_URL = 'https://api.brevo.com/v3/smtp/email';
|
|
32
|
+
constructor(config) {
|
|
33
|
+
this.apiKey = config.apiKey;
|
|
34
|
+
this.senderName = config.senderName || 'Organify Team';
|
|
35
|
+
this.senderEmail = config.senderEmail || 'noreply@organify.studio';
|
|
36
|
+
this.dailyLimit = config.dailyLimit || 300;
|
|
37
|
+
this.enabled = config.enabled !== false;
|
|
38
|
+
}
|
|
39
|
+
// ─── Main Send ────────────────────────────
|
|
40
|
+
async send(options) {
|
|
41
|
+
const priority = options.priority || 'normal';
|
|
42
|
+
// Reset counter if new day
|
|
43
|
+
this.checkDayReset();
|
|
44
|
+
// Rate limit check (critical bypasses)
|
|
45
|
+
if (priority !== 'critical') {
|
|
46
|
+
if (this.dailySent >= this.dailyLimit) {
|
|
47
|
+
return {
|
|
48
|
+
success: false,
|
|
49
|
+
skipped: true,
|
|
50
|
+
reason: `Daily limit reached (${this.dailyLimit}/day). Email queued for tomorrow.`,
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
// Reserve 10% for critical emails
|
|
54
|
+
const criticalReserve = Math.floor(this.dailyLimit * 0.1);
|
|
55
|
+
if (priority === 'low' && this.dailySent >= this.dailyLimit - criticalReserve) {
|
|
56
|
+
return {
|
|
57
|
+
success: false,
|
|
58
|
+
skipped: true,
|
|
59
|
+
reason: `Low-priority email skipped (remaining quota reserved for critical/normal).`,
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
// Build HTML content
|
|
64
|
+
let htmlContent = options.htmlContent;
|
|
65
|
+
if (!htmlContent && options.template) {
|
|
66
|
+
const templateFn = templates_1.emailTemplates[options.template];
|
|
67
|
+
if (templateFn) {
|
|
68
|
+
htmlContent = templateFn(options.params || {});
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
if (!htmlContent && !options.textContent) {
|
|
72
|
+
return { success: false, error: 'No content provided (template, htmlContent, or textContent required)' };
|
|
73
|
+
}
|
|
74
|
+
// Disabled mode (dev/test)
|
|
75
|
+
if (!this.enabled) {
|
|
76
|
+
const recipients = Array.isArray(options.to) ? options.to : [options.to];
|
|
77
|
+
console.log(`[BrevoEmail] DRY RUN → ${recipients.map((r) => r.email).join(', ')} | Subject: ${options.subject}`);
|
|
78
|
+
this.incrementCounter(priority);
|
|
79
|
+
return { success: true, messageId: `dry-run-${Date.now()}`, skipped: false };
|
|
80
|
+
}
|
|
81
|
+
// Build Brevo payload
|
|
82
|
+
const recipients = Array.isArray(options.to) ? options.to : [options.to];
|
|
83
|
+
const payload = {
|
|
84
|
+
sender: { name: this.senderName, email: this.senderEmail },
|
|
85
|
+
to: recipients.map((r) => ({ email: r.email, name: r.name })),
|
|
86
|
+
subject: options.subject,
|
|
87
|
+
};
|
|
88
|
+
if (htmlContent)
|
|
89
|
+
payload.htmlContent = htmlContent;
|
|
90
|
+
else if (options.textContent)
|
|
91
|
+
payload.textContent = options.textContent;
|
|
92
|
+
if (options.params)
|
|
93
|
+
payload.params = options.params;
|
|
94
|
+
if (options.tags)
|
|
95
|
+
payload.tags = options.tags;
|
|
96
|
+
if (options.cc)
|
|
97
|
+
payload.cc = options.cc;
|
|
98
|
+
if (options.bcc)
|
|
99
|
+
payload.bcc = options.bcc;
|
|
100
|
+
if (options.replyTo)
|
|
101
|
+
payload.replyTo = options.replyTo;
|
|
102
|
+
try {
|
|
103
|
+
const response = await fetch(BrevoEmailClient.API_URL, {
|
|
104
|
+
method: 'POST',
|
|
105
|
+
headers: {
|
|
106
|
+
'accept': 'application/json',
|
|
107
|
+
'api-key': this.apiKey,
|
|
108
|
+
'content-type': 'application/json',
|
|
109
|
+
},
|
|
110
|
+
body: JSON.stringify(payload),
|
|
111
|
+
});
|
|
112
|
+
if (!response.ok) {
|
|
113
|
+
const body = await response.text();
|
|
114
|
+
console.error(`[BrevoEmail] API error ${response.status}: ${body}`);
|
|
115
|
+
return { success: false, error: `Brevo API error: ${response.status} — ${body}` };
|
|
116
|
+
}
|
|
117
|
+
const data = await response.json();
|
|
118
|
+
this.incrementCounter(priority);
|
|
119
|
+
return { success: true, messageId: data.messageId };
|
|
120
|
+
}
|
|
121
|
+
catch (err) {
|
|
122
|
+
console.error(`[BrevoEmail] Network error: ${err.message}`);
|
|
123
|
+
return { success: false, error: `Network error: ${err.message}` };
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
// ─── Batch Send (same template, multiple recipients) ──
|
|
127
|
+
async sendBatch(recipients, options) {
|
|
128
|
+
// Brevo supports multiple "to" in a single request
|
|
129
|
+
// But for individual params, send separately
|
|
130
|
+
if (options.params) {
|
|
131
|
+
// Each recipient gets their own email
|
|
132
|
+
const results = [];
|
|
133
|
+
for (const recipient of recipients) {
|
|
134
|
+
results.push(await this.send({ ...options, to: recipient }));
|
|
135
|
+
}
|
|
136
|
+
return results;
|
|
137
|
+
}
|
|
138
|
+
// Single request with multiple recipients
|
|
139
|
+
return [await this.send({ ...options, to: recipients })];
|
|
140
|
+
}
|
|
141
|
+
// ─── Stats ────────────────────────────────
|
|
142
|
+
getStats() {
|
|
143
|
+
this.checkDayReset();
|
|
144
|
+
return {
|
|
145
|
+
sent: this.dailySent,
|
|
146
|
+
limit: this.dailyLimit,
|
|
147
|
+
remaining: Math.max(0, this.dailyLimit - this.dailySent),
|
|
148
|
+
date: this.dailyDate,
|
|
149
|
+
byPriority: { ...this.dailyByPriority },
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
// ─── Internal ─────────────────────────────
|
|
153
|
+
checkDayReset() {
|
|
154
|
+
const today = new Date().toISOString().slice(0, 10);
|
|
155
|
+
if (this.dailyDate !== today) {
|
|
156
|
+
this.dailySent = 0;
|
|
157
|
+
this.dailyDate = today;
|
|
158
|
+
this.dailyByPriority = { critical: 0, normal: 0, low: 0 };
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
incrementCounter(priority) {
|
|
162
|
+
this.dailySent++;
|
|
163
|
+
this.dailyByPriority[priority]++;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
exports.BrevoEmailClient = BrevoEmailClient;
|
|
167
|
+
//# sourceMappingURL=brevo-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"brevo-client.js","sourceRoot":"","sources":["../src/brevo-client.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,gBAAgB,EAChB,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,KAAK,UAAU,EACf,KAAK,UAAU,GAChB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,cAAc,EACd,KAAK,iBAAiB,GACvB,MAAM,aAAa,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// ─────────────────────────────────────────────
|
|
3
|
+
// organify-email — Public API
|
|
4
|
+
// ─────────────────────────────────────────────
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.emailTemplates = exports.BrevoEmailClient = void 0;
|
|
7
|
+
var brevo_client_1 = require("./brevo-client");
|
|
8
|
+
Object.defineProperty(exports, "BrevoEmailClient", { enumerable: true, get: function () { return brevo_client_1.BrevoEmailClient; } });
|
|
9
|
+
var templates_1 = require("./templates");
|
|
10
|
+
Object.defineProperty(exports, "emailTemplates", { enumerable: true, get: function () { return templates_1.emailTemplates; } });
|
|
11
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA,gDAAgD;AAChD,8BAA8B;AAC9B,gDAAgD;;;AAEhD,+CAOwB;AANtB,gHAAA,gBAAgB,OAAA;AAQlB,yCAGqB;AAFnB,2GAAA,cAAc,OAAA"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export type EmailTemplateName = 'report-ready' | 'welcome' | 'password-reset' | 'workspace-invite' | 'sprint-digest' | 'task-assigned' | 'task-mentioned' | 'project-update' | 'weekly-digest';
|
|
2
|
+
type TemplateFunction = (params: Record<string, any>) => string;
|
|
3
|
+
export declare const emailTemplates: Record<EmailTemplateName, TemplateFunction>;
|
|
4
|
+
export {};
|
|
5
|
+
//# sourceMappingURL=templates.d.ts.map
|
|
@@ -0,0 +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"}
|