@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.
Files changed (69) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/LICENSE +21 -0
  3. package/README.md +80 -0
  4. package/dist/.tsbuildinfo +1 -0
  5. package/dist/adapters/nodemailer.d.ts +3 -0
  6. package/dist/adapters/nodemailer.d.ts.map +1 -0
  7. package/dist/adapters/nodemailer.js +31 -0
  8. package/dist/adapters/nodemailer.js.map +1 -0
  9. package/dist/adapters/resend.d.ts +3 -0
  10. package/dist/adapters/resend.d.ts.map +1 -0
  11. package/dist/adapters/resend.js +27 -0
  12. package/dist/adapters/resend.js.map +1 -0
  13. package/dist/adapters/zeptomail.d.ts +3 -0
  14. package/dist/adapters/zeptomail.d.ts.map +1 -0
  15. package/dist/adapters/zeptomail.js +29 -0
  16. package/dist/adapters/zeptomail.js.map +1 -0
  17. package/dist/index.d.ts +21 -0
  18. package/dist/index.d.ts.map +1 -0
  19. package/dist/index.js +69 -0
  20. package/dist/index.js.map +1 -0
  21. package/dist/templates/_layout.d.ts +26 -0
  22. package/dist/templates/_layout.d.ts.map +1 -0
  23. package/dist/templates/_layout.js +83 -0
  24. package/dist/templates/_layout.js.map +1 -0
  25. package/dist/templates/adminAlert.d.ts +23 -0
  26. package/dist/templates/adminAlert.d.ts.map +1 -0
  27. package/dist/templates/adminAlert.js +61 -0
  28. package/dist/templates/adminAlert.js.map +1 -0
  29. package/dist/templates/deploymentBuildFailed.d.ts +13 -0
  30. package/dist/templates/deploymentBuildFailed.d.ts.map +1 -0
  31. package/dist/templates/deploymentBuildFailed.js +38 -0
  32. package/dist/templates/deploymentBuildFailed.js.map +1 -0
  33. package/dist/templates/deploymentFailed.d.ts +13 -0
  34. package/dist/templates/deploymentFailed.d.ts.map +1 -0
  35. package/dist/templates/deploymentFailed.js +38 -0
  36. package/dist/templates/deploymentFailed.js.map +1 -0
  37. package/dist/templates/deploymentRunning.d.ts +13 -0
  38. package/dist/templates/deploymentRunning.d.ts.map +1 -0
  39. package/dist/templates/deploymentRunning.js +38 -0
  40. package/dist/templates/deploymentRunning.js.map +1 -0
  41. package/dist/templates/emailVerification.d.ts +12 -0
  42. package/dist/templates/emailVerification.d.ts.map +1 -0
  43. package/dist/templates/emailVerification.js +34 -0
  44. package/dist/templates/emailVerification.js.map +1 -0
  45. package/dist/templates/index.d.ts +21 -0
  46. package/dist/templates/index.d.ts.map +1 -0
  47. package/dist/templates/index.js +13 -0
  48. package/dist/templates/index.js.map +1 -0
  49. package/dist/templates/instance.d.ts +65 -0
  50. package/dist/templates/instance.d.ts.map +1 -0
  51. package/dist/templates/instance.js +196 -0
  52. package/dist/templates/instance.js.map +1 -0
  53. package/dist/templates/passwordReset.d.ts +12 -0
  54. package/dist/templates/passwordReset.d.ts.map +1 -0
  55. package/dist/templates/passwordReset.js +37 -0
  56. package/dist/templates/passwordReset.js.map +1 -0
  57. package/dist/templates/sslFailed.d.ts +15 -0
  58. package/dist/templates/sslFailed.d.ts.map +1 -0
  59. package/dist/templates/sslFailed.js +47 -0
  60. package/dist/templates/sslFailed.js.map +1 -0
  61. package/dist/templates/teamInvite.d.ts +18 -0
  62. package/dist/templates/teamInvite.d.ts.map +1 -0
  63. package/dist/templates/teamInvite.js +51 -0
  64. package/dist/templates/teamInvite.js.map +1 -0
  65. package/dist/types.d.ts +35 -0
  66. package/dist/types.d.ts.map +1 -0
  67. package/dist/types.js +3 -0
  68. package/dist/types.js.map +1 -0
  69. 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
+ ? ` &middot; <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
+ &copy; ${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"}