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,426 @@
1
+ "use strict";
2
+ // ─────────────────────────────────────────────
3
+ // Email Templates — Dark Mode, Organify Brand
4
+ // ─────────────────────────────────────────────
5
+ // Professional dark-theme HTML emails matching
6
+ // the Organify frontend design system.
7
+ //
8
+ // Brand Colors:
9
+ // Primary: #7C3AED (Vibrant Violet)
10
+ // Glow: #8B5CF6
11
+ // Light: #A78BFA
12
+ // Surface: #110E22
13
+ // Void: #0D0A1A
14
+ // Elevated: #1A1530
15
+ // Success: #10B981
16
+ // Warning: #F59E0B
17
+ // Error: #EF4444
18
+ //
19
+ // Design Rules:
20
+ // - Dark mode only
21
+ // - Organify logo (text-based, no external images)
22
+ // - No emojis
23
+ // - Professional, clean, Space Grotesk feel
24
+ // - Glass-morphism borders (rgba white)
25
+ // ─────────────────────────────────────────────
26
+ Object.defineProperty(exports, "__esModule", { value: true });
27
+ exports.emailTemplates = void 0;
28
+ // ─── Shared Layout ──────────────────────────
29
+ function baseLayout(content, preheader) {
30
+ return `<!DOCTYPE html>
31
+ <html lang="pt" xmlns="http://www.w3.org/1999/xhtml" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office">
32
+ <head>
33
+ <meta charset="utf-8" />
34
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
35
+ <meta http-equiv="X-UA-Compatible" content="IE=edge" />
36
+ <meta name="color-scheme" content="dark" />
37
+ <meta name="supported-color-schemes" content="dark" />
38
+ <title>Organify</title>
39
+ <!--[if mso]>
40
+ <noscript><xml><o:OfficeDocumentSettings><o:PixelsPerInch>96</o:PixelsPerInch></o:OfficeDocumentSettings></xml></noscript>
41
+ <![endif]-->
42
+ <style>
43
+ @import url('https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@400;500;600;700&display=swap');
44
+
45
+ * { margin: 0; padding: 0; box-sizing: border-box; }
46
+ body, table, td { font-family: 'Space Grotesk', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; }
47
+ body { background-color: #0D0A1A; color: #E8E5F0; -webkit-text-size-adjust: 100%; -ms-text-size-adjust: 100%; }
48
+ img { border: 0; outline: none; text-decoration: none; display: block; }
49
+ a { color: #A78BFA; text-decoration: none; }
50
+ a:hover { color: #C4B5FD; }
51
+
52
+ @media only screen and (max-width: 620px) {
53
+ .container { width: 100% !important; padding: 16px !important; }
54
+ .content-cell { padding: 24px 20px !important; }
55
+ .btn { width: 100% !important; display: block !important; }
56
+ }
57
+ </style>
58
+ </head>
59
+ <body style="margin:0;padding:0;background-color:#0D0A1A;">
60
+ ${preheader ? `<div style="display:none;font-size:1px;color:#0D0A1A;line-height:1px;max-height:0;max-width:0;opacity:0;overflow:hidden;">${preheader}</div>` : ''}
61
+
62
+ <!-- Wrapper -->
63
+ <table role="presentation" cellpadding="0" cellspacing="0" width="100%" style="background-color:#0D0A1A;">
64
+ <tr>
65
+ <td align="center" style="padding:40px 16px;">
66
+ <table role="presentation" cellpadding="0" cellspacing="0" width="580" class="container" style="max-width:580px;width:100%;">
67
+
68
+ <!-- Logo Header -->
69
+ <tr>
70
+ <td align="center" style="padding-bottom:32px;">
71
+ <table role="presentation" cellpadding="0" cellspacing="0">
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>
75
+ </td>
76
+ <td style="vertical-align:middle;">
77
+ <span style="font-size:22px;font-weight:700;color:#FFFFFF;letter-spacing:-0.5px;">Organify</span>
78
+ </td>
79
+ </tr>
80
+ </table>
81
+ </td>
82
+ </tr>
83
+
84
+ <!-- Main Card -->
85
+ <tr>
86
+ <td>
87
+ <table role="presentation" cellpadding="0" cellspacing="0" width="100%" style="background-color:#110E22;border-radius:16px;border:1px solid rgba(255,255,255,0.08);overflow:hidden;">
88
+ <tr>
89
+ <td class="content-cell" style="padding:36px 32px;">
90
+ ${content}
91
+ </td>
92
+ </tr>
93
+ </table>
94
+ </td>
95
+ </tr>
96
+
97
+ <!-- Footer -->
98
+ <tr>
99
+ <td style="padding-top:32px;text-align:center;">
100
+ <p style="font-size:12px;color:rgba(232,229,240,0.4);line-height:1.6;margin:0;">
101
+ Organify &mdash; Project Management Intelligence
102
+ </p>
103
+ <p style="font-size:11px;color:rgba(232,229,240,0.25);line-height:1.5;margin-top:8px;">
104
+ Este email foi enviado automaticamente. Por favor nao responda directamente.
105
+ </p>
106
+ </td>
107
+ </tr>
108
+
109
+ </table>
110
+ </td>
111
+ </tr>
112
+ </table>
113
+ </body>
114
+ </html>`;
115
+ }
116
+ // ─── Reusable Components ────────────────────
117
+ function primaryButton(text, url) {
118
+ return `<table role="presentation" cellpadding="0" cellspacing="0" style="margin:24px 0 8px;">
119
+ <tr>
120
+ <td style="border-radius:10px;background:linear-gradient(135deg,#7C3AED,#8B5CF6);padding:1px;">
121
+ <a href="${url}" target="_blank" class="btn" style="display:inline-block;padding:12px 32px;border-radius:9px;background-color:#1A1530;color:#A78BFA;font-size:14px;font-weight:600;text-decoration:none;letter-spacing:0.3px;">
122
+ ${text}
123
+ </a>
124
+ </td>
125
+ </tr>
126
+ </table>`;
127
+ }
128
+ function metricCard(label, value, color) {
129
+ const c = color || '#A78BFA';
130
+ return `<td style="padding:8px;">
131
+ <table role="presentation" cellpadding="0" cellspacing="0" width="100%" style="background-color:rgba(255,255,255,0.04);border-radius:10px;border:1px solid rgba(255,255,255,0.06);">
132
+ <tr>
133
+ <td style="padding:16px;text-align:center;">
134
+ <p style="font-size:24px;font-weight:700;color:${c};margin:0;line-height:1.2;">${value}</p>
135
+ <p style="font-size:11px;color:rgba(232,229,240,0.5);margin-top:6px;text-transform:uppercase;letter-spacing:0.8px;">${label}</p>
136
+ </td>
137
+ </tr>
138
+ </table>
139
+ </td>`;
140
+ }
141
+ function divider() {
142
+ return `<table role="presentation" cellpadding="0" cellspacing="0" width="100%" style="margin:24px 0;">
143
+ <tr><td style="border-top:1px solid rgba(255,255,255,0.06);"></td></tr>
144
+ </table>`;
145
+ }
146
+ function heading(text) {
147
+ return `<h1 style="font-size:22px;font-weight:700;color:#FFFFFF;margin:0 0 8px;line-height:1.3;">${text}</h1>`;
148
+ }
149
+ function subtext(text) {
150
+ return `<p style="font-size:14px;color:rgba(232,229,240,0.6);line-height:1.6;margin:0;">${text}</p>`;
151
+ }
152
+ function badge(text, bgColor, textColor) {
153
+ return `<span style="display:inline-block;padding:4px 12px;border-radius:6px;background-color:${bgColor};color:${textColor};font-size:12px;font-weight:600;letter-spacing:0.3px;">${text}</span>`;
154
+ }
155
+ // ─── Templates ──────────────────────────────
156
+ const reportReady = (params) => {
157
+ const { userName = 'Utilizador', reportTitle = 'Relatorio', reportType = 'SPRINT', projectName = '', downloadUrl = '#', completionTime = '', fileSize = '', } = params;
158
+ return baseLayout(`
159
+ ${heading('Relatorio Pronto')}
160
+ ${subtext(`Ola ${userName}, o seu relatorio foi gerado com sucesso.`)}
161
+
162
+ ${divider()}
163
+
164
+ <!-- Report Info -->
165
+ <table role="presentation" cellpadding="0" cellspacing="0" width="100%" style="background-color:rgba(124,58,237,0.08);border-radius:12px;border:1px solid rgba(124,58,237,0.15);">
166
+ <tr>
167
+ <td style="padding:20px 24px;">
168
+ <table role="presentation" cellpadding="0" cellspacing="0" width="100%">
169
+ <tr>
170
+ <td>
171
+ <p style="font-size:11px;color:rgba(232,229,240,0.4);text-transform:uppercase;letter-spacing:0.8px;margin:0 0 6px;">Relatorio</p>
172
+ <p style="font-size:16px;font-weight:600;color:#FFFFFF;margin:0;">${reportTitle}</p>
173
+ </td>
174
+ <td align="right" style="vertical-align:top;">
175
+ ${badge(reportType, 'rgba(139,92,246,0.15)', '#A78BFA')}
176
+ </td>
177
+ </tr>
178
+ ${projectName ? `<tr><td colspan="2" style="padding-top:12px;">
179
+ <p style="font-size:12px;color:rgba(232,229,240,0.5);margin:0;">Projecto: <span style="color:#E8E5F0;">${projectName}</span></p>
180
+ </td></tr>` : ''}
181
+ </table>
182
+ </td>
183
+ </tr>
184
+ </table>
185
+
186
+ <!-- Metrics Row -->
187
+ ${completionTime || fileSize ? `
188
+ <table role="presentation" cellpadding="0" cellspacing="0" width="100%" style="margin-top:16px;">
189
+ <tr>
190
+ ${completionTime ? metricCard('Tempo de geracao', completionTime, '#10B981') : ''}
191
+ ${fileSize ? metricCard('Tamanho', fileSize, '#A78BFA') : ''}
192
+ </tr>
193
+ </table>` : ''}
194
+
195
+ ${primaryButton('Ver Relatorio', downloadUrl)}
196
+
197
+ <p style="font-size:12px;color:rgba(232,229,240,0.35);margin-top:16px;line-height:1.5;">
198
+ O relatorio esta disponivel durante 7 dias. Faca download antes da expiracao.
199
+ </p>
200
+ `, `O seu relatorio "${reportTitle}" esta pronto para download.`);
201
+ };
202
+ const welcome = (params) => {
203
+ const { userName = 'Utilizador', workspaceName = '', loginUrl = '#', } = params;
204
+ return baseLayout(`
205
+ ${heading('Bem-vindo ao Organify')}
206
+ ${subtext(`Ola ${userName}, a sua conta foi criada com sucesso.`)}
207
+
208
+ ${divider()}
209
+
210
+ <p style="font-size:14px;color:rgba(232,229,240,0.7);line-height:1.7;margin:0;">
211
+ O Organify e a plataforma de gestao de projectos com inteligencia integrada.
212
+ Comece por explorar o seu workspace${workspaceName ? ` <strong style="color:#FFFFFF;">${workspaceName}</strong>` : ''} e criar o primeiro projecto.
213
+ </p>
214
+
215
+ <!-- Features -->
216
+ <table role="presentation" cellpadding="0" cellspacing="0" width="100%" style="margin-top:20px;">
217
+ <tr>
218
+ ${metricCard('Boards', 'Kanban & Scrum', '#8B5CF6')}
219
+ ${metricCard('Reports', 'Analytics', '#10B981')}
220
+ ${metricCard('AI', 'Assistente', '#F59E0B')}
221
+ </tr>
222
+ </table>
223
+
224
+ ${primaryButton('Aceder ao Organify', loginUrl)}
225
+ `, `Bem-vindo ao Organify, ${userName}! A sua conta esta pronta.`);
226
+ };
227
+ const passwordReset = (params) => {
228
+ const { userName = 'Utilizador', resetUrl = '#', expiresIn = '1 hora', } = params;
229
+ return baseLayout(`
230
+ ${heading('Recuperacao de Palavra-passe')}
231
+ ${subtext(`Ola ${userName}, recebemos um pedido para redefinir a sua palavra-passe.`)}
232
+
233
+ ${divider()}
234
+
235
+ <p style="font-size:14px;color:rgba(232,229,240,0.7);line-height:1.7;margin:0;">
236
+ Clique no botao abaixo para criar uma nova palavra-passe.
237
+ Este link expira em <strong style="color:#F59E0B;">${expiresIn}</strong>.
238
+ </p>
239
+
240
+ ${primaryButton('Redefinir Palavra-passe', resetUrl)}
241
+
242
+ <p style="font-size:12px;color:rgba(232,229,240,0.35);margin-top:20px;line-height:1.5;">
243
+ Se nao solicitou esta alteracao, ignore este email. A sua palavra-passe permanece inalterada.
244
+ </p>
245
+ `, 'Pedido de recuperacao de palavra-passe no Organify.');
246
+ };
247
+ const workspaceInvite = (params) => {
248
+ const { inviterName = 'Alguem', workspaceName = 'Workspace', role = 'membro', inviteUrl = '#', } = params;
249
+ return baseLayout(`
250
+ ${heading('Convite de Workspace')}
251
+ ${subtext(`${inviterName} convidou-o para o workspace <strong style="color:#FFFFFF;">${workspaceName}</strong>.`)}
252
+
253
+ ${divider()}
254
+
255
+ <table role="presentation" cellpadding="0" cellspacing="0" width="100%" style="background-color:rgba(124,58,237,0.08);border-radius:12px;border:1px solid rgba(124,58,237,0.15);">
256
+ <tr>
257
+ <td style="padding:20px 24px;">
258
+ <table role="presentation" cellpadding="0" cellspacing="0" width="100%">
259
+ <tr>
260
+ <td>
261
+ <p style="font-size:11px;color:rgba(232,229,240,0.4);text-transform:uppercase;letter-spacing:0.8px;margin:0 0 6px;">Workspace</p>
262
+ <p style="font-size:16px;font-weight:600;color:#FFFFFF;margin:0;">${workspaceName}</p>
263
+ </td>
264
+ <td align="right" style="vertical-align:top;">
265
+ ${badge(role.toUpperCase(), 'rgba(16,185,129,0.15)', '#10B981')}
266
+ </td>
267
+ </tr>
268
+ <tr>
269
+ <td colspan="2" style="padding-top:8px;">
270
+ <p style="font-size:12px;color:rgba(232,229,240,0.5);margin:0;">Convidado por: <span style="color:#E8E5F0;">${inviterName}</span></p>
271
+ </td>
272
+ </tr>
273
+ </table>
274
+ </td>
275
+ </tr>
276
+ </table>
277
+
278
+ ${primaryButton('Aceitar Convite', inviteUrl)}
279
+ `, `${inviterName} convidou-o para o workspace ${workspaceName} no Organify.`);
280
+ };
281
+ const sprintDigest = (params) => {
282
+ const { sprintName = 'Sprint', projectName = 'Projecto', completionRate = '0%', tasksCompleted = '0', totalTasks = '0', velocity = '0', daysRemaining = '0', dashboardUrl = '#', } = params;
283
+ const completionNum = parseInt(String(completionRate));
284
+ const statusColor = completionNum >= 75 ? '#10B981' : completionNum >= 40 ? '#F59E0B' : '#EF4444';
285
+ return baseLayout(`
286
+ ${heading('Resumo da Sprint')}
287
+ ${subtext(`${sprintName} &mdash; ${projectName}`)}
288
+
289
+ ${divider()}
290
+
291
+ <!-- Progress Bar -->
292
+ <table role="presentation" cellpadding="0" cellspacing="0" width="100%" style="margin-bottom:16px;">
293
+ <tr>
294
+ <td>
295
+ <p style="font-size:12px;color:rgba(232,229,240,0.5);margin:0 0 8px;">Progresso</p>
296
+ <table role="presentation" cellpadding="0" cellspacing="0" width="100%" style="background-color:rgba(255,255,255,0.06);border-radius:6px;overflow:hidden;">
297
+ <tr>
298
+ <td style="width:${completionRate};background:linear-gradient(90deg,#7C3AED,#8B5CF6);height:8px;border-radius:6px;"></td>
299
+ <td style="height:8px;"></td>
300
+ </tr>
301
+ </table>
302
+ <p style="font-size:13px;font-weight:600;color:${statusColor};margin-top:6px;">${completionRate} concluido</p>
303
+ </td>
304
+ </tr>
305
+ </table>
306
+
307
+ <!-- Metrics -->
308
+ <table role="presentation" cellpadding="0" cellspacing="0" width="100%">
309
+ <tr>
310
+ ${metricCard('Concluidas', `${tasksCompleted}/${totalTasks}`, '#10B981')}
311
+ ${metricCard('Velocity', `${velocity} SP`, '#A78BFA')}
312
+ ${metricCard('Dias Restantes', daysRemaining, completionNum >= 75 ? '#10B981' : '#F59E0B')}
313
+ </tr>
314
+ </table>
315
+
316
+ ${primaryButton('Ver Dashboard', dashboardUrl)}
317
+ `, `${sprintName}: ${completionRate} concluida.`);
318
+ };
319
+ const taskAssigned = (params) => {
320
+ const { userName = 'Utilizador', taskTitle = 'Tarefa', projectName = '', assignerName = '', priority = '', taskUrl = '#', } = params;
321
+ const priorityColors = {
322
+ critical: ['rgba(239,68,68,0.15)', '#EF4444'],
323
+ high: ['rgba(245,158,11,0.15)', '#F59E0B'],
324
+ medium: ['rgba(167,139,250,0.15)', '#A78BFA'],
325
+ low: ['rgba(16,185,129,0.15)', '#10B981'],
326
+ };
327
+ const [bg, tc] = priorityColors[priority] || ['rgba(167,139,250,0.15)', '#A78BFA'];
328
+ return baseLayout(`
329
+ ${heading('Nova Tarefa Atribuida')}
330
+ ${subtext(`Ola ${userName}, foi-lhe atribuida uma nova tarefa.`)}
331
+
332
+ ${divider()}
333
+
334
+ <table role="presentation" cellpadding="0" cellspacing="0" width="100%" style="background-color:rgba(255,255,255,0.03);border-radius:12px;border:1px solid rgba(255,255,255,0.06);">
335
+ <tr>
336
+ <td style="padding:20px 24px;">
337
+ <p style="font-size:16px;font-weight:600;color:#FFFFFF;margin:0 0 8px;">${taskTitle}</p>
338
+ ${projectName ? `<p style="font-size:12px;color:rgba(232,229,240,0.5);margin:0 0 8px;">Projecto: <span style="color:#E8E5F0;">${projectName}</span></p>` : ''}
339
+ ${assignerName ? `<p style="font-size:12px;color:rgba(232,229,240,0.5);margin:0 0 8px;">Atribuida por: <span style="color:#E8E5F0;">${assignerName}</span></p>` : ''}
340
+ ${priority ? `<p style="margin:8px 0 0;">${badge(priority.toUpperCase(), bg, tc)}</p>` : ''}
341
+ </td>
342
+ </tr>
343
+ </table>
344
+
345
+ ${primaryButton('Ver Tarefa', taskUrl)}
346
+ `, `Nova tarefa atribuida: ${taskTitle}`);
347
+ };
348
+ const taskMentioned = (params) => {
349
+ const { userName = 'Utilizador', mentionerName = 'Alguem', taskTitle = 'Tarefa', commentPreview = '', taskUrl = '#', } = params;
350
+ return baseLayout(`
351
+ ${heading('Mencionado num Comentario')}
352
+ ${subtext(`Ola ${userName}, ${mentionerName} mencionou-o numa tarefa.`)}
353
+
354
+ ${divider()}
355
+
356
+ <table role="presentation" cellpadding="0" cellspacing="0" width="100%" style="background-color:rgba(255,255,255,0.03);border-radius:12px;border:1px solid rgba(255,255,255,0.06);">
357
+ <tr>
358
+ <td style="padding:20px 24px;">
359
+ <p style="font-size:14px;font-weight:600;color:#FFFFFF;margin:0 0 8px;">${taskTitle}</p>
360
+ ${commentPreview ? `
361
+ <table role="presentation" cellpadding="0" cellspacing="0" width="100%" style="margin-top:8px;">
362
+ <tr>
363
+ <td style="border-left:3px solid #7C3AED;padding-left:12px;">
364
+ <p style="font-size:13px;color:rgba(232,229,240,0.6);line-height:1.5;margin:0;font-style:italic;">"${commentPreview}"</p>
365
+ </td>
366
+ </tr>
367
+ </table>` : ''}
368
+ </td>
369
+ </tr>
370
+ </table>
371
+
372
+ ${primaryButton('Ver Comentario', taskUrl)}
373
+ `, `${mentionerName} mencionou-o na tarefa "${taskTitle}"`);
374
+ };
375
+ const projectUpdate = (params) => {
376
+ const { userName = 'Utilizador', projectName = 'Projecto', updateType = 'actualizacao', summary = '', projectUrl = '#', } = params;
377
+ return baseLayout(`
378
+ ${heading('Actualizacao de Projecto')}
379
+ ${subtext(`Ola ${userName}, ha uma ${updateType} no projecto <strong style="color:#FFFFFF;">${projectName}</strong>.`)}
380
+
381
+ ${divider()}
382
+
383
+ ${summary ? `<p style="font-size:14px;color:rgba(232,229,240,0.7);line-height:1.7;margin:0;">${summary}</p>` : ''}
384
+
385
+ ${primaryButton('Ver Projecto', projectUrl)}
386
+ `, `Actualizacao no projecto ${projectName}`);
387
+ };
388
+ const weeklyDigest = (params) => {
389
+ const { userName = 'Utilizador', weekLabel = 'Esta semana', tasksCompleted = '0', tasksCreated = '0', activeProjects = '0', topProject = '', dashboardUrl = '#', } = params;
390
+ return baseLayout(`
391
+ ${heading('Resumo Semanal')}
392
+ ${subtext(`Ola ${userName}, aqui esta o seu resumo da semana.`)}
393
+
394
+ ${divider()}
395
+
396
+ <p style="font-size:12px;color:rgba(232,229,240,0.4);text-transform:uppercase;letter-spacing:0.8px;margin:0 0 12px;">${weekLabel}</p>
397
+
398
+ <table role="presentation" cellpadding="0" cellspacing="0" width="100%">
399
+ <tr>
400
+ ${metricCard('Concluidas', tasksCompleted, '#10B981')}
401
+ ${metricCard('Criadas', tasksCreated, '#A78BFA')}
402
+ ${metricCard('Projectos', activeProjects, '#F59E0B')}
403
+ </tr>
404
+ </table>
405
+
406
+ ${topProject ? `
407
+ ${divider()}
408
+ <p style="font-size:12px;color:rgba(232,229,240,0.5);margin:0;">Projecto mais activo: <strong style="color:#FFFFFF;">${topProject}</strong></p>
409
+ ` : ''}
410
+
411
+ ${primaryButton('Ver Dashboard', dashboardUrl)}
412
+ `, `Resumo semanal: ${tasksCompleted} tarefas concluidas.`);
413
+ };
414
+ // ─── Template Registry ──────────────────────
415
+ exports.emailTemplates = {
416
+ 'report-ready': reportReady,
417
+ 'welcome': welcome,
418
+ 'password-reset': passwordReset,
419
+ 'workspace-invite': workspaceInvite,
420
+ 'sprint-digest': sprintDigest,
421
+ 'task-assigned': taskAssigned,
422
+ 'task-mentioned': taskMentioned,
423
+ 'project-update': projectUpdate,
424
+ 'weekly-digest': weeklyDigest,
425
+ };
426
+ //# sourceMappingURL=templates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"templates.js","sourceRoot":"","sources":["../src/templates.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,15 @@
1
+ {
2
+ "name": "organify-email",
3
+ "version": "1.0.0",
4
+ "description": "Shared email service for Organify — Brevo transactional API",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "scripts": {
8
+ "build": "tsc",
9
+ "dev": "tsc --watch"
10
+ },
11
+ "dependencies": {},
12
+ "devDependencies": {
13
+ "typescript": "^5.4.0"
14
+ }
15
+ }