@aevr/mailer 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/CHANGELOG.md +14 -0
- package/LICENSE +21 -0
- package/README.md +80 -0
- package/dist/.tsbuildinfo +1 -0
- package/dist/adapters/nodemailer.d.ts +3 -0
- package/dist/adapters/nodemailer.d.ts.map +1 -0
- package/dist/adapters/nodemailer.js +31 -0
- package/dist/adapters/nodemailer.js.map +1 -0
- package/dist/adapters/resend.d.ts +3 -0
- package/dist/adapters/resend.d.ts.map +1 -0
- package/dist/adapters/resend.js +27 -0
- package/dist/adapters/resend.js.map +1 -0
- package/dist/adapters/zeptomail.d.ts +3 -0
- package/dist/adapters/zeptomail.d.ts.map +1 -0
- package/dist/adapters/zeptomail.js +29 -0
- package/dist/adapters/zeptomail.js.map +1 -0
- package/dist/index.d.ts +21 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +69 -0
- package/dist/index.js.map +1 -0
- package/dist/templates/_layout.d.ts +26 -0
- package/dist/templates/_layout.d.ts.map +1 -0
- package/dist/templates/_layout.js +83 -0
- package/dist/templates/_layout.js.map +1 -0
- package/dist/templates/adminAlert.d.ts +23 -0
- package/dist/templates/adminAlert.d.ts.map +1 -0
- package/dist/templates/adminAlert.js +61 -0
- package/dist/templates/adminAlert.js.map +1 -0
- package/dist/templates/deploymentBuildFailed.d.ts +13 -0
- package/dist/templates/deploymentBuildFailed.d.ts.map +1 -0
- package/dist/templates/deploymentBuildFailed.js +38 -0
- package/dist/templates/deploymentBuildFailed.js.map +1 -0
- package/dist/templates/deploymentFailed.d.ts +13 -0
- package/dist/templates/deploymentFailed.d.ts.map +1 -0
- package/dist/templates/deploymentFailed.js +38 -0
- package/dist/templates/deploymentFailed.js.map +1 -0
- package/dist/templates/deploymentRunning.d.ts +13 -0
- package/dist/templates/deploymentRunning.d.ts.map +1 -0
- package/dist/templates/deploymentRunning.js +38 -0
- package/dist/templates/deploymentRunning.js.map +1 -0
- package/dist/templates/emailVerification.d.ts +12 -0
- package/dist/templates/emailVerification.d.ts.map +1 -0
- package/dist/templates/emailVerification.js +34 -0
- package/dist/templates/emailVerification.js.map +1 -0
- package/dist/templates/index.d.ts +21 -0
- package/dist/templates/index.d.ts.map +1 -0
- package/dist/templates/index.js +13 -0
- package/dist/templates/index.js.map +1 -0
- package/dist/templates/instance.d.ts +65 -0
- package/dist/templates/instance.d.ts.map +1 -0
- package/dist/templates/instance.js +196 -0
- package/dist/templates/instance.js.map +1 -0
- package/dist/templates/passwordReset.d.ts +12 -0
- package/dist/templates/passwordReset.d.ts.map +1 -0
- package/dist/templates/passwordReset.js +37 -0
- package/dist/templates/passwordReset.js.map +1 -0
- package/dist/templates/sslFailed.d.ts +15 -0
- package/dist/templates/sslFailed.d.ts.map +1 -0
- package/dist/templates/sslFailed.js +47 -0
- package/dist/templates/sslFailed.js.map +1 -0
- package/dist/templates/teamInvite.d.ts +18 -0
- package/dist/templates/teamInvite.d.ts.map +1 -0
- package/dist/templates/teamInvite.js +51 -0
- package/dist/templates/teamInvite.js.map +1 -0
- package/dist/types.d.ts +35 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/package.json +49 -0
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
// ─── Design tokens (mirrors panacea _layout.tsx) ─────────────────────────────
|
|
2
|
+
export const t = {
|
|
3
|
+
bg: "#f0f9ff",
|
|
4
|
+
card: "#ffffff",
|
|
5
|
+
headingColor: "#0c4a6e",
|
|
6
|
+
bodyColor: "#334155",
|
|
7
|
+
mutedColor: "#94a3b8",
|
|
8
|
+
borderColor: "#e0f2fe",
|
|
9
|
+
btnBg: "#0091cf",
|
|
10
|
+
btnText: "#c1e8ff",
|
|
11
|
+
codeBg: "#f0f9ff",
|
|
12
|
+
codeColor: "#0091cf",
|
|
13
|
+
font: "-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif",
|
|
14
|
+
};
|
|
15
|
+
// ─── Shared helpers ───────────────────────────────────────────────────────────
|
|
16
|
+
export function emailButton(text, href) {
|
|
17
|
+
return `
|
|
18
|
+
<div style="margin:28px 0 8px">
|
|
19
|
+
<a href="${href}"
|
|
20
|
+
style="display:inline-block;padding:14px 32px;background-color:${t.btnBg};color:${t.btnText};
|
|
21
|
+
border-radius:100px;font-weight:500;font-size:15px;text-decoration:none;
|
|
22
|
+
letter-spacing:0.01em;font-family:${t.font}">
|
|
23
|
+
${text}
|
|
24
|
+
</a>
|
|
25
|
+
</div>`;
|
|
26
|
+
}
|
|
27
|
+
export function otpCode(code) {
|
|
28
|
+
return `
|
|
29
|
+
<div style="margin:28px 0;padding:20px 24px;background-color:${t.codeBg};border-radius:16px;text-align:center">
|
|
30
|
+
<span style="display:block;font-size:44px;font-weight:700;letter-spacing:12px;
|
|
31
|
+
color:${t.codeColor};font-family:'Courier New',Courier,'Lucida Console',monospace">
|
|
32
|
+
${code}
|
|
33
|
+
</span>
|
|
34
|
+
</div>`;
|
|
35
|
+
}
|
|
36
|
+
export function emailLayout({ preview, title, body, appName = process.env["APP_NAME"] ?? "Platform", logoUrl = process.env["MAIL_LOGO"] ?? "", supportEmail = process.env["APP_SUPPORT_MAIL"] ?? process.env["MAIL_FROM_EMAIL"] ?? "", year = new Date().getFullYear(), }) {
|
|
37
|
+
const logoHtml = logoUrl
|
|
38
|
+
? `<img src="${logoUrl}" height="32" alt="" style="display:block">`
|
|
39
|
+
: `<span style="font-size:20px;font-weight:700;color:${t.headingColor};letter-spacing:-0.01em">${appName}</span>`;
|
|
40
|
+
const footerSupport = supportEmail
|
|
41
|
+
? ` · <a href="mailto:${supportEmail}" style="color:${t.mutedColor};text-decoration:none">${supportEmail}</a>`
|
|
42
|
+
: "";
|
|
43
|
+
return `<!DOCTYPE html>
|
|
44
|
+
<html lang="en">
|
|
45
|
+
<head>
|
|
46
|
+
<meta charset="UTF-8">
|
|
47
|
+
<meta name="viewport" content="width=device-width,initial-scale=1">
|
|
48
|
+
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
|
49
|
+
<title>${preview}</title>
|
|
50
|
+
</head>
|
|
51
|
+
<body style="margin:0;padding:0;background-color:${t.bg};font-family:${t.font};-webkit-font-smoothing:antialiased">
|
|
52
|
+
<!-- Outer wrapper -->
|
|
53
|
+
<div style="max-width:600px;margin:0 auto;padding:40px 20px">
|
|
54
|
+
|
|
55
|
+
<!-- Card -->
|
|
56
|
+
<div style="background-color:${t.card};border-radius:16px;padding:40px 40px 32px;border:1px solid ${t.borderColor}">
|
|
57
|
+
|
|
58
|
+
<!-- Logo / brand -->
|
|
59
|
+
<div style="margin-bottom:28px">${logoHtml}</div>
|
|
60
|
+
|
|
61
|
+
<!-- Title -->
|
|
62
|
+
<p style="margin:0 0 20px;font-size:22px;font-weight:700;color:${t.headingColor};
|
|
63
|
+
line-height:1.3;letter-spacing:-0.01em">
|
|
64
|
+
${title}
|
|
65
|
+
</p>
|
|
66
|
+
|
|
67
|
+
<!-- Body -->
|
|
68
|
+
<div style="color:${t.bodyColor};font-size:16px;line-height:1.6">
|
|
69
|
+
${body}
|
|
70
|
+
</div>
|
|
71
|
+
</div>
|
|
72
|
+
|
|
73
|
+
<!-- Footer -->
|
|
74
|
+
<div style="padding:20px 8px 0;text-align:center">
|
|
75
|
+
<p style="margin:0;font-size:12px;color:${t.mutedColor};line-height:1.6">
|
|
76
|
+
© ${year} ${appName}${footerSupport}
|
|
77
|
+
</p>
|
|
78
|
+
</div>
|
|
79
|
+
</div>
|
|
80
|
+
</body>
|
|
81
|
+
</html>`;
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=_layout.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_layout.js","sourceRoot":"","sources":["../../src/templates/_layout.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,MAAM,CAAC,MAAM,CAAC,GAAG;IACf,EAAE,EAAE,SAAS;IACb,IAAI,EAAE,SAAS;IACf,YAAY,EAAE,SAAS;IACvB,SAAS,EAAE,SAAS;IACpB,UAAU,EAAE,SAAS;IACrB,WAAW,EAAE,SAAS;IACtB,KAAK,EAAE,SAAS;IAChB,OAAO,EAAE,SAAS;IAClB,MAAM,EAAE,SAAS;IACjB,SAAS,EAAE,SAAS;IACpB,IAAI,EAAE,qFAAqF;CAC5F,CAAC;AAEF,iFAAiF;AAEjF,MAAM,UAAU,WAAW,CAAC,IAAY,EAAE,IAAY;IACpD,OAAO;;aAEI,IAAI;sEACqD,CAAC,CAAC,KAAK,UAAU,CAAC,CAAC,OAAO;;gDAEhD,CAAC,CAAC,IAAI;MAChD,IAAI;;OAEH,CAAC;AACR,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,IAAY;IAClC,OAAO;+DACsD,CAAC,CAAC,MAAM;;uBAEhD,CAAC,CAAC,SAAS;MAC5B,IAAI;;OAEH,CAAC;AACR,CAAC;AAcD,MAAM,UAAU,WAAW,CAAC,EAC1B,OAAO,EACP,KAAK,EACL,IAAI,EACJ,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,UAAU,EAC/C,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE,EACxC,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,EAAE,EACtF,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,GACZ;IACnB,MAAM,QAAQ,GAAG,OAAO;QACtB,CAAC,CAAC,aAAa,OAAO,6CAA6C;QACnE,CAAC,CAAC,qDAAqD,CAAC,CAAC,YAAY,4BAA4B,OAAO,SAAS,CAAC;IAEpH,MAAM,aAAa,GAAG,YAAY;QAChC,CAAC,CAAC,6BAA6B,YAAY,kBAAkB,CAAC,CAAC,UAAU,0BAA0B,YAAY,MAAM;QACrH,CAAC,CAAC,EAAE,CAAC;IAEP,OAAO;;;;;;WAME,OAAO;;mDAEiC,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC,IAAI;;;;;mCAK1C,CAAC,CAAC,IAAI,+DAA+D,CAAC,CAAC,WAAW;;;wCAG7E,QAAQ;;;uEAGuB,CAAC,CAAC,YAAY;;UAE3E,KAAK;;;;0BAIW,CAAC,CAAC,SAAS;UAC3B,IAAI;;;;;;gDAMkC,CAAC,CAAC,UAAU;iBAC3C,IAAI,IAAI,OAAO,GAAG,aAAa;;;;;QAKxC,CAAC;AACT,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export type AdminAlertLevel = "info" | "warn" | "critical";
|
|
2
|
+
export interface AdminAlertEmailOptions {
|
|
3
|
+
subject: string;
|
|
4
|
+
headline: string;
|
|
5
|
+
body: string;
|
|
6
|
+
/** Structured key/value metrics shown in a table below the body text */
|
|
7
|
+
metrics?: {
|
|
8
|
+
label: string;
|
|
9
|
+
value: string;
|
|
10
|
+
highlight?: boolean;
|
|
11
|
+
}[];
|
|
12
|
+
/** Optional CTA link */
|
|
13
|
+
actionLabel?: string;
|
|
14
|
+
actionUrl?: string;
|
|
15
|
+
level?: AdminAlertLevel;
|
|
16
|
+
appName?: string;
|
|
17
|
+
}
|
|
18
|
+
export declare function renderAdminAlertEmail(opts: AdminAlertEmailOptions): {
|
|
19
|
+
subject: string;
|
|
20
|
+
html: string;
|
|
21
|
+
text: string;
|
|
22
|
+
};
|
|
23
|
+
//# sourceMappingURL=adminAlert.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adminAlert.d.ts","sourceRoot":"","sources":["../../src/templates/adminAlert.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,MAAM,GAAG,UAAU,CAAC;AAE3D,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,wEAAwE;IACxE,OAAO,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,EAAE,CAAC;IAClE,wBAAwB;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAQD,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,sBAAsB,GAAG;IACnE,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd,CA4DA"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { emailLayout, t } from "./_layout.js";
|
|
2
|
+
const levelStyles = {
|
|
3
|
+
info: { borderColor: "#0ea5e9", bg: "#f0f9ff", icon: "ℹ️" },
|
|
4
|
+
warn: { borderColor: "#f59e0b", bg: "#fffbeb", icon: "⚠️" },
|
|
5
|
+
critical: { borderColor: "#ef4444", bg: "#fef2f2", icon: "🚨" },
|
|
6
|
+
};
|
|
7
|
+
export function renderAdminAlertEmail(opts) {
|
|
8
|
+
const appName = opts.appName ?? process.env["APP_NAME"] ?? "Superrails Platform";
|
|
9
|
+
const level = opts.level ?? "warn";
|
|
10
|
+
const style = levelStyles[level];
|
|
11
|
+
const metricsHtml = opts.metrics?.length
|
|
12
|
+
? `
|
|
13
|
+
<table style="width:100%;border-collapse:collapse;margin:20px 0;font-size:14px">
|
|
14
|
+
${opts.metrics.map(m => `
|
|
15
|
+
<tr>
|
|
16
|
+
<td style="padding:8px 12px;color:${t.mutedColor};border-bottom:1px solid ${t.borderColor};white-space:nowrap;width:40%">${m.label}</td>
|
|
17
|
+
<td style="padding:8px 12px;font-weight:${m.highlight ? "700" : "400"};color:${m.highlight ? "#dc2626" : t.bodyColor};border-bottom:1px solid ${t.borderColor}">${m.value}</td>
|
|
18
|
+
</tr>`).join("")}
|
|
19
|
+
</table>`
|
|
20
|
+
: "";
|
|
21
|
+
const actionHtml = opts.actionLabel && opts.actionUrl
|
|
22
|
+
? `<div style="margin:24px 0 8px">
|
|
23
|
+
<a href="${opts.actionUrl}"
|
|
24
|
+
style="display:inline-block;padding:12px 28px;background-color:${t.btnBg};color:${t.btnText};
|
|
25
|
+
border-radius:100px;font-weight:500;font-size:14px;text-decoration:none;font-family:${t.font}">
|
|
26
|
+
${opts.actionLabel}
|
|
27
|
+
</a>
|
|
28
|
+
</div>`
|
|
29
|
+
: "";
|
|
30
|
+
const codeBlockHtml = `
|
|
31
|
+
<div style="margin:16px 0;padding:16px;background:${style.bg};border-left:4px solid ${style.borderColor};
|
|
32
|
+
border-radius:0 8px 8px 0;font-family:'Courier New',monospace;font-size:13px;
|
|
33
|
+
line-height:1.7;color:${t.bodyColor};white-space:pre-wrap;word-break:break-word">${opts.body}</div>`;
|
|
34
|
+
const emailBody = `
|
|
35
|
+
<h2 style="margin:0 0 8px;font-size:20px;font-weight:700;color:${t.headingColor}">
|
|
36
|
+
${style.icon} ${opts.headline}
|
|
37
|
+
</h2>
|
|
38
|
+
${codeBlockHtml}
|
|
39
|
+
${metricsHtml}
|
|
40
|
+
${actionHtml}
|
|
41
|
+
<p style="margin:20px 0 0;font-size:13px;color:${t.mutedColor}">
|
|
42
|
+
This is an automated alert from the ${appName} monitoring system.
|
|
43
|
+
</p>`;
|
|
44
|
+
const html = emailLayout({
|
|
45
|
+
preview: opts.headline,
|
|
46
|
+
title: opts.subject,
|
|
47
|
+
body: emailBody,
|
|
48
|
+
appName,
|
|
49
|
+
});
|
|
50
|
+
const textMetrics = opts.metrics?.map(m => ` ${m.label}: ${m.value}`).join("\n") ?? "";
|
|
51
|
+
const text = [
|
|
52
|
+
`[${level.toUpperCase()}] ${opts.headline}`,
|
|
53
|
+
"",
|
|
54
|
+
opts.body,
|
|
55
|
+
textMetrics ? `\n${textMetrics}` : "",
|
|
56
|
+
opts.actionUrl ? `\n→ ${opts.actionLabel}: ${opts.actionUrl}` : "",
|
|
57
|
+
`\n—\nThis is an automated alert from ${appName}.`,
|
|
58
|
+
].filter(Boolean).join("\n");
|
|
59
|
+
return { subject: opts.subject, html, text };
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=adminAlert.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adminAlert.js","sourceRoot":"","sources":["../../src/templates/adminAlert.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export interface DeploymentBuildFailedEmailOptions {
|
|
2
|
+
serviceName: string;
|
|
3
|
+
teamName: string;
|
|
4
|
+
errorMessage: string;
|
|
5
|
+
dashboardUrl: string;
|
|
6
|
+
appName?: string;
|
|
7
|
+
}
|
|
8
|
+
export declare function renderDeploymentBuildFailedEmail(opts: DeploymentBuildFailedEmailOptions): {
|
|
9
|
+
subject: string;
|
|
10
|
+
html: string;
|
|
11
|
+
text: string;
|
|
12
|
+
};
|
|
13
|
+
//# sourceMappingURL=deploymentBuildFailed.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deploymentBuildFailed.d.ts","sourceRoot":"","sources":["../../src/templates/deploymentBuildFailed.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,iCAAiC;IAChD,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,gCAAgC,CAAC,IAAI,EAAE,iCAAiC,GAAG;IACzF,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd,CAwCA"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { emailLayout, emailButton, t } from "./_layout.js";
|
|
2
|
+
export function renderDeploymentBuildFailedEmail(opts) {
|
|
3
|
+
const appName = opts.appName ?? process.env["APP_NAME"] ?? "Superrails";
|
|
4
|
+
const subject = `Build failed: ${opts.serviceName}`;
|
|
5
|
+
const body = `
|
|
6
|
+
<p style="margin:0 0 16px;color:${t.bodyColor}">
|
|
7
|
+
The build for <strong>${opts.serviceName}</strong> failed before deployment could start.
|
|
8
|
+
</p>
|
|
9
|
+
<div style="margin:0 0 20px;padding:16px;background:#fef2f2;border-left:4px solid #ef4444;
|
|
10
|
+
border-radius:0 8px 8px 0;font-family:'Courier New',monospace;font-size:13px;
|
|
11
|
+
line-height:1.6;color:#7f1d1d;white-space:pre-wrap;word-break:break-word">
|
|
12
|
+
${opts.errorMessage}
|
|
13
|
+
</div>
|
|
14
|
+
<p style="margin:0 0 20px;font-size:14px;color:#64748b">
|
|
15
|
+
Fix the build error and push a new commit or trigger a manual deploy.
|
|
16
|
+
</p>
|
|
17
|
+
${emailButton("View Build Log", opts.dashboardUrl)}
|
|
18
|
+
<p style="margin:20px 0 0;font-size:13px;color:#94a3b8">
|
|
19
|
+
Team: ${opts.teamName}
|
|
20
|
+
</p>`;
|
|
21
|
+
const html = emailLayout({
|
|
22
|
+
preview: `Build failed: ${opts.serviceName} — view build log for details`,
|
|
23
|
+
title: `Build failed`,
|
|
24
|
+
body,
|
|
25
|
+
appName,
|
|
26
|
+
});
|
|
27
|
+
const text = [
|
|
28
|
+
`Build failed: ${opts.serviceName}`,
|
|
29
|
+
``,
|
|
30
|
+
opts.errorMessage,
|
|
31
|
+
``,
|
|
32
|
+
`View build log: ${opts.dashboardUrl}`,
|
|
33
|
+
``,
|
|
34
|
+
`Team: ${opts.teamName}`,
|
|
35
|
+
].join("\n");
|
|
36
|
+
return { subject, html, text };
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=deploymentBuildFailed.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deploymentBuildFailed.js","sourceRoot":"","sources":["../../src/templates/deploymentBuildFailed.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC,EAAE,MAAM,cAAc,CAAC;AAU3D,MAAM,UAAU,gCAAgC,CAAC,IAAuC;IAKtF,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,YAAY,CAAC;IAExE,MAAM,OAAO,GAAG,iBAAiB,IAAI,CAAC,WAAW,EAAE,CAAC;IAEpD,MAAM,IAAI,GAAG;kCACmB,CAAC,CAAC,SAAS;0BACnB,IAAI,CAAC,WAAW;;;;;EAKxC,IAAI,CAAC,YAAY;;;;;EAKjB,WAAW,CAAC,gBAAgB,EAAE,IAAI,CAAC,YAAY,CAAC;;UAExC,IAAI,CAAC,QAAQ;KAClB,CAAC;IAEJ,MAAM,IAAI,GAAG,WAAW,CAAC;QACvB,OAAO,EAAE,iBAAiB,IAAI,CAAC,WAAW,+BAA+B;QACzE,KAAK,EAAE,cAAc;QACrB,IAAI;QACJ,OAAO;KACR,CAAC,CAAC;IAEH,MAAM,IAAI,GAAG;QACX,iBAAiB,IAAI,CAAC,WAAW,EAAE;QACnC,EAAE;QACF,IAAI,CAAC,YAAY;QACjB,EAAE;QACF,mBAAmB,IAAI,CAAC,YAAY,EAAE;QACtC,EAAE;QACF,SAAS,IAAI,CAAC,QAAQ,EAAE;KACzB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEb,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AACjC,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export interface DeploymentFailedEmailOptions {
|
|
2
|
+
serviceName: string;
|
|
3
|
+
teamName: string;
|
|
4
|
+
errorMessage: string;
|
|
5
|
+
dashboardUrl: string;
|
|
6
|
+
appName?: string;
|
|
7
|
+
}
|
|
8
|
+
export declare function renderDeploymentFailedEmail(opts: DeploymentFailedEmailOptions): {
|
|
9
|
+
subject: string;
|
|
10
|
+
html: string;
|
|
11
|
+
text: string;
|
|
12
|
+
};
|
|
13
|
+
//# sourceMappingURL=deploymentFailed.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deploymentFailed.d.ts","sourceRoot":"","sources":["../../src/templates/deploymentFailed.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,4BAA4B;IAC3C,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,4BAA4B,GAAG;IAC/E,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd,CAwCA"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { emailLayout, emailButton, t } from "./_layout.js";
|
|
2
|
+
export function renderDeploymentFailedEmail(opts) {
|
|
3
|
+
const appName = opts.appName ?? process.env["APP_NAME"] ?? "Superrails";
|
|
4
|
+
const subject = `Deploy failed: ${opts.serviceName}`;
|
|
5
|
+
const body = `
|
|
6
|
+
<p style="margin:0 0 16px;color:${t.bodyColor}">
|
|
7
|
+
Your deployment for <strong>${opts.serviceName}</strong> failed.
|
|
8
|
+
</p>
|
|
9
|
+
<div style="margin:0 0 20px;padding:16px;background:#fef2f2;border-left:4px solid #ef4444;
|
|
10
|
+
border-radius:0 8px 8px 0;font-family:'Courier New',monospace;font-size:13px;
|
|
11
|
+
line-height:1.6;color:#7f1d1d;white-space:pre-wrap;word-break:break-word">
|
|
12
|
+
${opts.errorMessage}
|
|
13
|
+
</div>
|
|
14
|
+
<p style="margin:0 0 20px;font-size:14px;color:#64748b">
|
|
15
|
+
Check the deployment logs for the full output, fix the issue, then redeploy.
|
|
16
|
+
</p>
|
|
17
|
+
${emailButton("View Deployment", opts.dashboardUrl)}
|
|
18
|
+
<p style="margin:20px 0 0;font-size:13px;color:#94a3b8">
|
|
19
|
+
Team: ${opts.teamName}
|
|
20
|
+
</p>`;
|
|
21
|
+
const html = emailLayout({
|
|
22
|
+
preview: `Deploy failed: ${opts.serviceName} — view logs to investigate`,
|
|
23
|
+
title: `Deploy failed`,
|
|
24
|
+
body,
|
|
25
|
+
appName,
|
|
26
|
+
});
|
|
27
|
+
const text = [
|
|
28
|
+
`Deploy failed: ${opts.serviceName}`,
|
|
29
|
+
``,
|
|
30
|
+
opts.errorMessage,
|
|
31
|
+
``,
|
|
32
|
+
`View deployment: ${opts.dashboardUrl}`,
|
|
33
|
+
``,
|
|
34
|
+
`Team: ${opts.teamName}`,
|
|
35
|
+
].join("\n");
|
|
36
|
+
return { subject, html, text };
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=deploymentFailed.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deploymentFailed.js","sourceRoot":"","sources":["../../src/templates/deploymentFailed.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC,EAAE,MAAM,cAAc,CAAC;AAU3D,MAAM,UAAU,2BAA2B,CAAC,IAAkC;IAK5E,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,YAAY,CAAC;IAExE,MAAM,OAAO,GAAG,kBAAkB,IAAI,CAAC,WAAW,EAAE,CAAC;IAErD,MAAM,IAAI,GAAG;kCACmB,CAAC,CAAC,SAAS;gCACb,IAAI,CAAC,WAAW;;;;;EAK9C,IAAI,CAAC,YAAY;;;;;EAKjB,WAAW,CAAC,iBAAiB,EAAE,IAAI,CAAC,YAAY,CAAC;;UAEzC,IAAI,CAAC,QAAQ;KAClB,CAAC;IAEJ,MAAM,IAAI,GAAG,WAAW,CAAC;QACvB,OAAO,EAAE,kBAAkB,IAAI,CAAC,WAAW,6BAA6B;QACxE,KAAK,EAAE,eAAe;QACtB,IAAI;QACJ,OAAO;KACR,CAAC,CAAC;IAEH,MAAM,IAAI,GAAG;QACX,kBAAkB,IAAI,CAAC,WAAW,EAAE;QACpC,EAAE;QACF,IAAI,CAAC,YAAY;QACjB,EAAE;QACF,oBAAoB,IAAI,CAAC,YAAY,EAAE;QACvC,EAAE;QACF,SAAS,IAAI,CAAC,QAAQ,EAAE;KACzB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEb,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AACjC,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export interface DeploymentRunningEmailOptions {
|
|
2
|
+
serviceName: string;
|
|
3
|
+
teamName: string;
|
|
4
|
+
serviceUrl: string;
|
|
5
|
+
dashboardUrl: string;
|
|
6
|
+
appName?: string;
|
|
7
|
+
}
|
|
8
|
+
export declare function renderDeploymentRunningEmail(opts: DeploymentRunningEmailOptions): {
|
|
9
|
+
subject: string;
|
|
10
|
+
html: string;
|
|
11
|
+
text: string;
|
|
12
|
+
};
|
|
13
|
+
//# sourceMappingURL=deploymentRunning.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deploymentRunning.d.ts","sourceRoot":"","sources":["../../src/templates/deploymentRunning.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,6BAA6B;IAC5C,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,6BAA6B,GAAG;IACjF,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd,CAwCA"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { emailLayout, emailButton, t } from "./_layout.js";
|
|
2
|
+
export function renderDeploymentRunningEmail(opts) {
|
|
3
|
+
const appName = opts.appName ?? process.env["APP_NAME"] ?? "Superrails";
|
|
4
|
+
const subject = `Deploy live: ${opts.serviceName}`;
|
|
5
|
+
const body = `
|
|
6
|
+
<p style="margin:0 0 16px;color:${t.bodyColor}">
|
|
7
|
+
<strong>${opts.serviceName}</strong> passed health checks and is now live.
|
|
8
|
+
</p>
|
|
9
|
+
<p style="margin:0 0 20px">
|
|
10
|
+
<a href="${opts.serviceUrl}"
|
|
11
|
+
style="font-size:15px;font-weight:500;color:#0891b2;text-decoration:none;
|
|
12
|
+
word-break:break-all">
|
|
13
|
+
${opts.serviceUrl}
|
|
14
|
+
</a>
|
|
15
|
+
</p>
|
|
16
|
+
${emailButton("View Deployment", opts.dashboardUrl)}
|
|
17
|
+
<p style="margin:20px 0 0;font-size:13px;color:#94a3b8">
|
|
18
|
+
Team: ${opts.teamName}
|
|
19
|
+
</p>`;
|
|
20
|
+
const html = emailLayout({
|
|
21
|
+
preview: `${opts.serviceName} is live at ${opts.serviceUrl}`,
|
|
22
|
+
title: `Deploy live ✓`,
|
|
23
|
+
body,
|
|
24
|
+
appName,
|
|
25
|
+
});
|
|
26
|
+
const text = [
|
|
27
|
+
`Deploy live: ${opts.serviceName}`,
|
|
28
|
+
``,
|
|
29
|
+
`Your service is now live at:`,
|
|
30
|
+
opts.serviceUrl,
|
|
31
|
+
``,
|
|
32
|
+
`View deployment: ${opts.dashboardUrl}`,
|
|
33
|
+
``,
|
|
34
|
+
`Team: ${opts.teamName}`,
|
|
35
|
+
].join("\n");
|
|
36
|
+
return { subject, html, text };
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=deploymentRunning.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deploymentRunning.js","sourceRoot":"","sources":["../../src/templates/deploymentRunning.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC,EAAE,MAAM,cAAc,CAAC;AAU3D,MAAM,UAAU,4BAA4B,CAAC,IAAmC;IAK9E,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,YAAY,CAAC;IAExE,MAAM,OAAO,GAAG,gBAAgB,IAAI,CAAC,WAAW,EAAE,CAAC;IAEnD,MAAM,IAAI,GAAG;kCACmB,CAAC,CAAC,SAAS;YACjC,IAAI,CAAC,WAAW;;;aAGf,IAAI,CAAC,UAAU;;;MAGtB,IAAI,CAAC,UAAU;;;EAGnB,WAAW,CAAC,iBAAiB,EAAE,IAAI,CAAC,YAAY,CAAC;;UAEzC,IAAI,CAAC,QAAQ;KAClB,CAAC;IAEJ,MAAM,IAAI,GAAG,WAAW,CAAC;QACvB,OAAO,EAAE,GAAG,IAAI,CAAC,WAAW,eAAe,IAAI,CAAC,UAAU,EAAE;QAC5D,KAAK,EAAE,eAAe;QACtB,IAAI;QACJ,OAAO;KACR,CAAC,CAAC;IAEH,MAAM,IAAI,GAAG;QACX,gBAAgB,IAAI,CAAC,WAAW,EAAE;QAClC,EAAE;QACF,8BAA8B;QAC9B,IAAI,CAAC,UAAU;QACf,EAAE;QACF,oBAAoB,IAAI,CAAC,YAAY,EAAE;QACvC,EAAE;QACF,SAAS,IAAI,CAAC,QAAQ,EAAE;KACzB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEb,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AACjC,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export interface EmailVerificationOptions {
|
|
2
|
+
userName?: string;
|
|
3
|
+
verificationUrl: string;
|
|
4
|
+
appName?: string;
|
|
5
|
+
expiresIn?: string;
|
|
6
|
+
}
|
|
7
|
+
export declare function emailVerificationTemplate(opts: EmailVerificationOptions): {
|
|
8
|
+
subject: string;
|
|
9
|
+
html: string;
|
|
10
|
+
text: string;
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=emailVerification.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"emailVerification.d.ts","sourceRoot":"","sources":["../../src/templates/emailVerification.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,wBAAwB,GAAG;IACzE,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd,CAiCA"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { emailLayout, emailButton } from "./_layout.js";
|
|
2
|
+
export function emailVerificationTemplate(opts) {
|
|
3
|
+
const appName = opts.appName ?? process.env["APP_NAME"] ?? "Platform";
|
|
4
|
+
const greeting = opts.userName ? `Hi ${opts.userName},` : "Hi there,";
|
|
5
|
+
const expiryNote = opts.expiresIn ? ` This link expires in ${opts.expiresIn}.` : "";
|
|
6
|
+
const body = `
|
|
7
|
+
<p style="margin:0 0 16px">${greeting}</p>
|
|
8
|
+
<p style="margin:0 0 16px">
|
|
9
|
+
Please verify your email address to finish setting up your account.${expiryNote}
|
|
10
|
+
</p>
|
|
11
|
+
${emailButton("Verify my email", opts.verificationUrl)}
|
|
12
|
+
<p style="margin:16px 0 0;font-size:14px;color:#64748b">
|
|
13
|
+
If you didn't create an account, you can safely ignore this email.
|
|
14
|
+
</p>`;
|
|
15
|
+
return {
|
|
16
|
+
subject: `Verify your email — ${appName}`,
|
|
17
|
+
html: emailLayout({
|
|
18
|
+
preview: `Verify your ${appName} email address`,
|
|
19
|
+
title: "Verify your email",
|
|
20
|
+
body,
|
|
21
|
+
appName,
|
|
22
|
+
}),
|
|
23
|
+
text: [
|
|
24
|
+
greeting,
|
|
25
|
+
"",
|
|
26
|
+
`Verify your email address:`,
|
|
27
|
+
opts.verificationUrl,
|
|
28
|
+
expiryNote,
|
|
29
|
+
"",
|
|
30
|
+
"If you didn't create an account, you can safely ignore this email.",
|
|
31
|
+
].join("\n"),
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=emailVerification.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"emailVerification.js","sourceRoot":"","sources":["../../src/templates/emailVerification.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AASxD,MAAM,UAAU,yBAAyB,CAAC,IAA8B;IAKtE,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC;IACtE,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC;IACtE,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,yBAAyB,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAEpF,MAAM,IAAI,GAAG;6BACc,QAAQ;;uEAEkC,UAAU;;EAE/E,WAAW,CAAC,iBAAiB,EAAE,IAAI,CAAC,eAAe,CAAC;;;KAGjD,CAAC;IAEJ,OAAO;QACL,OAAO,EAAE,uBAAuB,OAAO,EAAE;QACzC,IAAI,EAAE,WAAW,CAAC;YAChB,OAAO,EAAE,eAAe,OAAO,gBAAgB;YAC/C,KAAK,EAAE,mBAAmB;YAC1B,IAAI;YACJ,OAAO;SACR,CAAC;QACF,IAAI,EAAE;YACJ,QAAQ;YACR,EAAE;YACF,4BAA4B;YAC5B,IAAI,CAAC,eAAe;YACpB,UAAU;YACV,EAAE;YACF,oEAAoE;SACrE,CAAC,IAAI,CAAC,IAAI,CAAC;KACb,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export { emailLayout, emailButton, otpCode, t } from "./_layout.js";
|
|
2
|
+
export { emailVerificationTemplate } from "./emailVerification.js";
|
|
3
|
+
export { passwordResetTemplate } from "./passwordReset.js";
|
|
4
|
+
export { renderTeamInviteEmail, teamInviteTemplate } from "./teamInvite.js";
|
|
5
|
+
export type { TeamInviteOptions } from "./teamInvite.js";
|
|
6
|
+
export { instanceProvisionedTemplate, instanceErrorTemplate, instanceDeletedTemplate, instanceHighUsageTemplate, } from "./instance.js";
|
|
7
|
+
export type { EmailLayoutOptions } from "./_layout.js";
|
|
8
|
+
export type { EmailVerificationOptions } from "./emailVerification.js";
|
|
9
|
+
export type { PasswordResetOptions } from "./passwordReset.js";
|
|
10
|
+
export type { InstanceProvisionedOptions, InstanceErrorOptions, InstanceDeletedOptions, InstanceHighUsageOptions, } from "./instance.js";
|
|
11
|
+
export { renderDeploymentFailedEmail } from "./deploymentFailed.js";
|
|
12
|
+
export type { DeploymentFailedEmailOptions } from "./deploymentFailed.js";
|
|
13
|
+
export { renderAdminAlertEmail } from "./adminAlert.js";
|
|
14
|
+
export type { AdminAlertEmailOptions, AdminAlertLevel } from "./adminAlert.js";
|
|
15
|
+
export { renderDeploymentRunningEmail } from "./deploymentRunning.js";
|
|
16
|
+
export type { DeploymentRunningEmailOptions } from "./deploymentRunning.js";
|
|
17
|
+
export { renderDeploymentBuildFailedEmail } from "./deploymentBuildFailed.js";
|
|
18
|
+
export type { DeploymentBuildFailedEmailOptions } from "./deploymentBuildFailed.js";
|
|
19
|
+
export { renderSslFailedEmail } from "./sslFailed.js";
|
|
20
|
+
export type { SslFailedEmailOptions } from "./sslFailed.js";
|
|
21
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/templates/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,cAAc,CAAC;AACpE,OAAO,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAC5E,YAAY,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EACL,2BAA2B,EAC3B,qBAAqB,EACrB,uBAAuB,EACvB,yBAAyB,GAC1B,MAAM,eAAe,CAAC;AACvB,YAAY,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AACvD,YAAY,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AACvE,YAAY,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,YAAY,EACV,0BAA0B,EAC1B,oBAAoB,EACpB,sBAAsB,EACtB,wBAAwB,GACzB,MAAM,eAAe,CAAC;AAGvB,OAAO,EAAE,2BAA2B,EAAE,MAAM,uBAAuB,CAAC;AACpE,YAAY,EAAE,4BAA4B,EAAE,MAAM,uBAAuB,CAAC;AAC1E,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AACxD,YAAY,EAAE,sBAAsB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAC/E,OAAO,EAAE,4BAA4B,EAAE,MAAM,wBAAwB,CAAC;AACtE,YAAY,EAAE,6BAA6B,EAAE,MAAM,wBAAwB,CAAC;AAC5E,OAAO,EAAE,gCAAgC,EAAE,MAAM,4BAA4B,CAAC;AAC9E,YAAY,EAAE,iCAAiC,EAAE,MAAM,4BAA4B,CAAC;AACpF,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACtD,YAAY,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
// Convenience re-export of all email templates
|
|
2
|
+
export { emailLayout, emailButton, otpCode, t } from "./_layout.js";
|
|
3
|
+
export { emailVerificationTemplate } from "./emailVerification.js";
|
|
4
|
+
export { passwordResetTemplate } from "./passwordReset.js";
|
|
5
|
+
export { renderTeamInviteEmail, teamInviteTemplate } from "./teamInvite.js";
|
|
6
|
+
export { instanceProvisionedTemplate, instanceErrorTemplate, instanceDeletedTemplate, instanceHighUsageTemplate, } from "./instance.js";
|
|
7
|
+
// ── Notification event templates ──────────────────────────────────────────────
|
|
8
|
+
export { renderDeploymentFailedEmail } from "./deploymentFailed.js";
|
|
9
|
+
export { renderAdminAlertEmail } from "./adminAlert.js";
|
|
10
|
+
export { renderDeploymentRunningEmail } from "./deploymentRunning.js";
|
|
11
|
+
export { renderDeploymentBuildFailedEmail } from "./deploymentBuildFailed.js";
|
|
12
|
+
export { renderSslFailedEmail } from "./sslFailed.js";
|
|
13
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/templates/index.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAC/C,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,cAAc,CAAC;AACpE,OAAO,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAE5E,OAAO,EACL,2BAA2B,EAC3B,qBAAqB,EACrB,uBAAuB,EACvB,yBAAyB,GAC1B,MAAM,eAAe,CAAC;AAWvB,iFAAiF;AACjF,OAAO,EAAE,2BAA2B,EAAE,MAAM,uBAAuB,CAAC;AAEpE,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAExD,OAAO,EAAE,4BAA4B,EAAE,MAAM,wBAAwB,CAAC;AAEtE,OAAO,EAAE,gCAAgC,EAAE,MAAM,4BAA4B,CAAC;AAE9E,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
export interface InstanceProvisionedOptions {
|
|
2
|
+
userName?: string;
|
|
3
|
+
instanceName: string;
|
|
4
|
+
instanceId: string;
|
|
5
|
+
ipAddress?: string;
|
|
6
|
+
dashboardUrl?: string;
|
|
7
|
+
appName?: string;
|
|
8
|
+
}
|
|
9
|
+
export declare function instanceProvisionedTemplate(opts: InstanceProvisionedOptions): {
|
|
10
|
+
subject: string;
|
|
11
|
+
html: string;
|
|
12
|
+
text: string;
|
|
13
|
+
};
|
|
14
|
+
export interface InstanceErrorOptions {
|
|
15
|
+
userName?: string;
|
|
16
|
+
instanceName: string;
|
|
17
|
+
instanceId: string;
|
|
18
|
+
errorMessage?: string;
|
|
19
|
+
supportUrl?: string;
|
|
20
|
+
appName?: string;
|
|
21
|
+
}
|
|
22
|
+
export declare function instanceErrorTemplate(opts: InstanceErrorOptions): {
|
|
23
|
+
subject: string;
|
|
24
|
+
html: string;
|
|
25
|
+
text: string;
|
|
26
|
+
};
|
|
27
|
+
export interface InstanceDeletedOptions {
|
|
28
|
+
userName?: string;
|
|
29
|
+
instanceName: string;
|
|
30
|
+
instanceId: string;
|
|
31
|
+
appName?: string;
|
|
32
|
+
}
|
|
33
|
+
export declare function instanceDeletedTemplate(opts: InstanceDeletedOptions): {
|
|
34
|
+
subject: string;
|
|
35
|
+
html: string;
|
|
36
|
+
text: string;
|
|
37
|
+
};
|
|
38
|
+
export interface InstanceHighUsageOptions {
|
|
39
|
+
userName?: string;
|
|
40
|
+
instanceName: string;
|
|
41
|
+
instanceId: string;
|
|
42
|
+
cpu?: {
|
|
43
|
+
usedPercent: number;
|
|
44
|
+
cores: number;
|
|
45
|
+
};
|
|
46
|
+
memory?: {
|
|
47
|
+
usedPercent: number;
|
|
48
|
+
usedMb: number;
|
|
49
|
+
totalMb: number;
|
|
50
|
+
};
|
|
51
|
+
disk?: {
|
|
52
|
+
usedPercent: number;
|
|
53
|
+
usedGb: number;
|
|
54
|
+
totalGb: number;
|
|
55
|
+
};
|
|
56
|
+
upgradeUrl?: string;
|
|
57
|
+
dashboardUrl?: string;
|
|
58
|
+
appName?: string;
|
|
59
|
+
}
|
|
60
|
+
export declare function instanceHighUsageTemplate(opts: InstanceHighUsageOptions): {
|
|
61
|
+
subject: string;
|
|
62
|
+
html: string;
|
|
63
|
+
text: string;
|
|
64
|
+
};
|
|
65
|
+
//# sourceMappingURL=instance.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instance.d.ts","sourceRoot":"","sources":["../../src/templates/instance.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,0BAA0B,GAAG;IAC7E,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd,CAsDA;AAID,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,oBAAoB,GAAG;IACjE,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd,CA6CA;AAID,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,sBAAsB,GAAG;IACrE,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd,CA0BA;AAID,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7C,MAAM,CAAC,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAClE,IAAI,CAAC,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAChE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,wBAAwB,GAAG;IACzE,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd,CAqFA"}
|