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.
@@ -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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"}
@@ -0,0 +1,3 @@
1
+ export { BrevoEmailClient, type BrevoEmailConfig, type EmailRecipient, type SendEmailOptions, type SendResult, type DailyStats, } from './brevo-client';
2
+ export { emailTemplates, type EmailTemplateName, } from './templates';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -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"}