@infuro/cms-core 1.0.63 → 1.0.65

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 (50) hide show
  1. package/dist/admin.cjs +183 -65
  2. package/dist/admin.js +183 -65
  3. package/dist/api.cjs +40 -40
  4. package/dist/api.d.cts +2 -0
  5. package/dist/api.d.ts +2 -0
  6. package/dist/api.js +8 -8
  7. package/dist/{chunk-KAOHOHCA.js → chunk-6YOQ7G5O.js} +92 -51
  8. package/dist/{chunk-BWOITUNI.js → chunk-ACBN6UWZ.js} +320 -81
  9. package/dist/chunk-BXAKL2TF.cjs +84 -0
  10. package/dist/{chunk-7L556RGL.cjs → chunk-GLD263KW.cjs} +3 -3
  11. package/dist/{chunk-EWXG4E74.cjs → chunk-NIRYYJIJ.cjs} +330 -91
  12. package/dist/{chunk-MWEK7N3F.js → chunk-OPJEV44S.js} +2 -2
  13. package/dist/{chunk-DTUL3Q5L.js → chunk-RDEVZMO5.js} +36 -20
  14. package/dist/{chunk-77YWLP4X.js → chunk-SANKKGB3.js} +68 -32
  15. package/dist/chunk-THL5JDWJ.cjs +101 -0
  16. package/dist/{chunk-RXTUSF3R.js → chunk-TU23GJPJ.js} +2 -2
  17. package/dist/{chunk-JLDHK2QE.cjs → chunk-TZEMLHSP.cjs} +20 -14
  18. package/dist/{chunk-RHYVNRYG.cjs → chunk-V6EYAC7X.cjs} +38 -22
  19. package/dist/{chunk-YVP4NQII.cjs → chunk-VM6OVUUM.cjs} +93 -52
  20. package/dist/{chunk-MXABMVF7.cjs → chunk-XFDIIVZB.cjs} +4 -4
  21. package/dist/chunk-XJNNOSJR.js +98 -0
  22. package/dist/chunk-YEAXE4U2.js +77 -0
  23. package/dist/{chunk-CJEOH6QC.cjs → chunk-YHEITFHR.cjs} +112 -76
  24. package/dist/{chunk-3VZAAQUV.js → chunk-YRCKEGL2.js} +20 -14
  25. package/dist/{email-queue-VTYL2KFA.cjs → email-queue-4OY45JIU.cjs} +7 -7
  26. package/dist/{email-queue-YPRSVG56.js → email-queue-HGXB2FIS.js} +3 -3
  27. package/dist/{email-service-ATCPJFWG.cjs → email-service-5O24BSFR.cjs} +7 -7
  28. package/dist/{email-service-DPKVQOKP.js → email-service-ADDF52PJ.js} +2 -2
  29. package/dist/{emit-order-notification-trigger-WI4HGMKH.cjs → emit-order-notification-trigger-DR74TQXN.cjs} +4 -4
  30. package/dist/{emit-order-notification-trigger-XVG2B5ZF.js → emit-order-notification-trigger-UCKJHDQK.js} +2 -2
  31. package/dist/{erp-order-invoice-3UGWLICU.js → erp-order-invoice-H6HCJ7YS.js} +2 -2
  32. package/dist/{erp-order-invoice-KJYJNWMG.cjs → erp-order-invoice-YUSPZ7CE.cjs} +6 -6
  33. package/dist/index.cjs +279 -265
  34. package/dist/index.d.cts +46 -22
  35. package/dist/index.d.ts +46 -22
  36. package/dist/index.js +43 -29
  37. package/dist/migrations/1783000000000-AddOrderPendingProcessingCompletedTriggers.ts +15 -39
  38. package/dist/migrations/1783300000000-SeedOrderNotificationTriggersAndTemplates.ts +155 -0
  39. package/dist/{order-completion-otp-handlers-WGM7HWG4.js → order-completion-otp-handlers-CH22ZRAI.js} +5 -5
  40. package/dist/{order-completion-otp-handlers-IMMQGHDR.cjs → order-completion-otp-handlers-RW5RSXH3.cjs} +7 -7
  41. package/dist/{order-notification-dispatcher-JKFQJYGG.js → order-notification-dispatcher-3TXUAJ7L.js} +6 -6
  42. package/dist/{order-notification-dispatcher-5TUFCDU7.cjs → order-notification-dispatcher-Y7NZAALH.cjs} +11 -11
  43. package/dist/{pg-boss-service-L6MTF4EQ.cjs → pg-boss-service-BDGOKM2T.cjs} +3 -3
  44. package/dist/pg-boss-service-WCBJD4JB.js +2 -0
  45. package/package.json +1 -1
  46. package/dist/chunk-AYWDQFJZ.js +0 -27
  47. package/dist/chunk-GO7PPYNU.js +0 -76
  48. package/dist/chunk-UEE4PTTB.cjs +0 -30
  49. package/dist/chunk-XQ3QUHWR.cjs +0 -83
  50. package/dist/pg-boss-service-4XF2TQ2E.js +0 -2
@@ -10,41 +10,65 @@ function escapeHtml(s) {
10
10
  __name(escapeHtml, "escapeHtml");
11
11
  function socialLinkInnerHtml(s) {
12
12
  if (s.iconUrl?.trim()) {
13
- return `<img src="${escapeHtml(s.iconUrl.trim())}" alt="" width="20" height="20" style="display:inline-block;vertical-align:middle;border:0;" />`;
13
+ return `<img src="${escapeHtml(s.iconUrl.trim())}" alt="" width="22" height="22" style="display:block;border:0;border-radius:4px;" />`;
14
14
  }
15
- const label = s.icon && s.icon.trim() || "\u{1F517}";
16
- return escapeHtml(label);
15
+ const label = s.icon && s.icon.trim() || "\u2022";
16
+ return `<span style="display:inline-block;width:28px;height:28px;line-height:28px;text-align:center;border-radius:999px;background:#ffffff;color:#1e293b;font-size:14px;">${escapeHtml(label)}</span>`;
17
17
  }
18
18
  __name(socialLinkInnerHtml, "socialLinkInnerHtml");
19
- function supportLinesHtml(supportEmail, supportPhone) {
20
- const parts = [];
21
- if (supportEmail) {
22
- parts.push(`<a href="mailto:${escapeHtml(supportEmail)}" style="color:#6b7280;text-decoration:none;font-size:13px;">${escapeHtml(supportEmail)}</a>`);
23
- }
24
- if (supportPhone) {
25
- parts.push(`<span style="color:#6b7280;font-size:13px;">${escapeHtml(supportPhone)}</span>`);
26
- }
27
- return parts.join('<span style="color:#d1d5db;padding:0 8px;">\xB7</span>');
28
- }
29
- __name(supportLinesHtml, "supportLinesHtml");
30
19
  function renderLayout(options) {
31
20
  const { bodyHtml, companyDetails } = options;
32
- const { logoUrl, companyName, supportEmail, supportPhone, socialLinks, footerDisclaimer, followUsTitle = "Follow Us" } = companyDetails;
21
+ const { logoUrl, companyName, supportEmail, supportPhone, companyAddress, socialLinks, footerDisclaimer, followUsTitle = "Follow Us" } = companyDetails;
33
22
  const brand = (companyName || "Store").trim();
23
+ const year = (/* @__PURE__ */ new Date()).getFullYear();
24
+ const slate = "#0f172a";
25
+ const slateSoft = "#1e293b";
34
26
  const accent = "#ea580c";
35
- const logoHtml = logoUrl ? `<img src="${escapeHtml(logoUrl)}" alt="${escapeHtml(brand)}" width="160" style="max-height:56px;max-width:180px;height:auto;width:auto;display:block;border:0;margin:0 auto;" />` : `<div style="font-size:22px;font-weight:700;letter-spacing:-0.02em;color:#111827;">${escapeHtml(brand)}</div>`;
27
+ const accentSoft = "#ffedd5";
28
+ const pageBg = "#eef2f7";
29
+ const muted = "#64748b";
30
+ const border = "#e2e8f0";
31
+ const logoBlock = logoUrl ? `<table role="presentation" cellpadding="0" cellspacing="0" style="margin:0 auto;border-collapse:collapse;">
32
+ <tr>
33
+ <td align="center" style="background:#ffffff;border-radius:14px;padding:14px 22px;box-shadow:0 8px 24px rgba(15,23,42,0.18);">
34
+ <img src="${escapeHtml(logoUrl)}" alt="${escapeHtml(brand)}" width="148" style="max-height:52px;max-width:148px;height:auto;width:auto;display:block;border:0;margin:0 auto;" />
35
+ </td>
36
+ </tr>
37
+ </table>` : `<div style="font-family:Georgia,'Times New Roman',serif;font-size:26px;font-weight:700;letter-spacing:-0.02em;color:#ffffff;">${escapeHtml(brand)}</div>`;
36
38
  const hasSocial = Boolean(socialLinks?.length);
37
- const socialRowHtml = hasSocial && socialLinks ? `<div style="margin-top:12px;text-align:center;font-size:0;line-height:0;">${socialLinks.map((s) => `<a href="${escapeHtml(s.url)}" style="display:inline-block;margin:0 8px;text-decoration:none;color:#374151;font-size:18px;line-height:1;vertical-align:middle;">${socialLinkInnerHtml(s)}</a>`).join("")}</div>` : "";
38
- const followTitleHtml = hasSocial && followUsTitle ? `<div style="font-size:12px;font-weight:600;color:#9ca3af;text-transform:uppercase;letter-spacing:0.06em;margin:0 0 4px 0;">${escapeHtml(followUsTitle)}</div>` : "";
39
- const supportHtml = supportLinesHtml(supportEmail, supportPhone);
40
- const disclaimerBlock = footerDisclaimer ? `<div style="margin-top:16px;font-size:11px;line-height:1.5;color:#9ca3af;">${escapeHtml(footerDisclaimer).replace(/\n/g, "<br/>")}</div>` : "";
39
+ const socialRowHtml = hasSocial && socialLinks ? `<table role="presentation" cellpadding="0" cellspacing="0" style="margin:14px auto 0 auto;border-collapse:collapse;">
40
+ <tr>
41
+ ${socialLinks.map((s) => `<td style="padding:0 6px;">
42
+ <a href="${escapeHtml(s.url)}" style="display:inline-block;text-decoration:none;border:1px solid ${border};border-radius:999px;padding:6px;background:#ffffff;">
43
+ ${socialLinkInnerHtml(s)}
44
+ </a>
45
+ </td>`).join("")}
46
+ </tr>
47
+ </table>` : "";
48
+ const followTitleHtml = hasSocial && followUsTitle ? `<div style="font-size:11px;font-weight:700;color:${muted};text-transform:uppercase;letter-spacing:0.08em;margin:0;">${escapeHtml(followUsTitle)}</div>` : "";
49
+ const contactRows = [];
50
+ if (supportEmail) {
51
+ contactRows.push(`<a href="mailto:${escapeHtml(supportEmail)}" style="color:${slateSoft};text-decoration:none;font-size:13px;font-weight:500;">${escapeHtml(supportEmail)}</a>`);
52
+ }
53
+ if (supportPhone) {
54
+ contactRows.push(`<span style="color:${muted};font-size:13px;">${escapeHtml(supportPhone)}</span>`);
55
+ }
56
+ if (companyAddress?.trim()) {
57
+ contactRows.push(`<span style="color:${muted};font-size:12px;line-height:1.5;display:inline-block;max-width:360px;">${escapeHtml(companyAddress.trim()).replace(/\n/g, "<br/>")}</span>`);
58
+ }
59
+ const contactHtml = contactRows.length ? `<div style="margin-top:12px;line-height:1.7;">${contactRows.join("<br/>")}</div>` : "";
60
+ const disclaimerBlock = footerDisclaimer ? `<div style="margin-top:14px;font-size:11px;line-height:1.55;color:#94a3b8;max-width:420px;margin-left:auto;margin-right:auto;">${escapeHtml(footerDisclaimer).replace(/\n/g, "<br/>")}</div>` : "";
41
61
  const responsiveCss = `
42
62
  @media only screen and (max-width: 620px) {
43
- .email-shell { padding: 16px 10px !important; }
44
- .email-card { border-radius: 12px !important; }
45
- .email-body { padding: 24px 18px !important; }
46
- .email-header { padding: 20px 18px !important; }
47
- }
63
+ .email-shell { padding: 12px 8px !important; }
64
+ .email-header { padding: 28px 18px 24px 18px !important; }
65
+ .email-body { padding: 26px 18px 8px 18px !important; }
66
+ .email-footer { padding: 22px 18px 28px 18px !important; }
67
+ .email-accent-label { display: none !important; }
68
+ }
69
+ .email-body p { margin: 0 0 14px 0 !important; }
70
+ .email-body h1, .email-body h2, .email-body h3 { margin: 0 0 12px 0 !important; color: ${slate} !important; }
71
+ .email-body a { color: ${accent} !important; }
48
72
  `;
49
73
  return `<!DOCTYPE html>
50
74
  <html lang="en">
@@ -53,39 +77,56 @@ function renderLayout(options) {
53
77
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
54
78
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
55
79
  <title>${escapeHtml(brand)}</title>
80
+ <!--[if mso]>
81
+ <style type="text/css">
82
+ body, table, td { font-family: Arial, Helvetica, sans-serif !important; }
83
+ </style>
84
+ <![endif]-->
56
85
  <style type="text/css">${responsiveCss}</style>
57
86
  </head>
58
- <body style="margin:0;padding:0;background:#f3f4f6;-webkit-font-smoothing:antialiased;">
59
- <table role="presentation" width="100%" cellpadding="0" cellspacing="0" style="background:#f3f4f6;border-collapse:collapse;">
87
+ <body style="margin:0;padding:0;background:${pageBg};-webkit-font-smoothing:antialiased;">
88
+ <div style="display:none;max-height:0;overflow:hidden;opacity:0;color:transparent;mso-hide:all;">
89
+ Update from ${escapeHtml(brand)}
90
+ </div>
91
+ <table role="presentation" width="100%" cellpadding="0" cellspacing="0" style="background:${pageBg};border-collapse:collapse;">
60
92
  <tr>
61
- <td class="email-shell" align="center" style="padding:32px 16px;">
62
- <table role="presentation" class="email-card" width="100%" cellpadding="0" cellspacing="0" style="max-width:600px;background:#ffffff;border-radius:16px;overflow:hidden;border:1px solid #e5e7eb;border-collapse:collapse;">
63
- <tr>
64
- <td class="email-header" align="center" style="padding:28px 32px 20px 32px;background:#ffffff;">
65
- ${logoHtml}
66
- ${logoUrl && companyName ? `<div style="margin-top:10px;font-size:13px;color:#6b7280;">${escapeHtml(companyName)}</div>` : ""}
67
- </td>
68
- </tr>
69
- <tr>
70
- <td style="height:4px;line-height:4px;font-size:0;background:${accent};">&nbsp;</td>
71
- </tr>
72
- <tr>
73
- <td class="email-body" style="padding:28px 32px;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Helvetica,Arial,sans-serif;font-size:15px;line-height:1.65;color:#1f2937;">
74
- ${bodyHtml}
75
- </td>
76
- </tr>
93
+ <td class="email-shell" align="center" style="padding:40px 16px;">
94
+ <table role="presentation" width="100%" cellpadding="0" cellspacing="0" style="max-width:600px;border-collapse:collapse;">
77
95
  <tr>
78
- <td style="padding:0 32px;">
79
- <div style="border-top:1px solid #e5e7eb;line-height:0;font-size:0;">&nbsp;</div>
96
+ <td style="background:#ffffff;border-radius:18px;overflow:hidden;border:1px solid ${border};box-shadow:0 12px 40px rgba(15,23,42,0.08);">
97
+ <table role="presentation" width="100%" cellpadding="0" cellspacing="0" style="border-collapse:collapse;">
98
+ <tr>
99
+ <td class="email-header" align="center" style="padding:36px 32px 30px 32px;background:linear-gradient(165deg, ${slate} 0%, ${slateSoft} 100%);background-color:${slate};">
100
+ <div class="email-accent-label" style="display:inline-block;margin:0 0 18px 0;padding:5px 12px;border-radius:999px;background:rgba(234,88,12,0.18);border:1px solid rgba(251,146,60,0.35);font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Helvetica,Arial,sans-serif;font-size:11px;font-weight:600;letter-spacing:0.06em;text-transform:uppercase;color:${accentSoft};">
101
+ ${escapeHtml(brand)}
102
+ </div>
103
+ ${logoBlock}
104
+ ${logoUrl ? `<div style="margin-top:16px;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Helvetica,Arial,sans-serif;font-size:13px;color:#94a3b8;">${escapeHtml(brand)}</div>` : ""}
105
+ </td>
106
+ </tr>
107
+ <tr>
108
+ <td style="height:5px;line-height:5px;font-size:0;background:linear-gradient(90deg, ${accent} 0%, #f59e0b 55%, #fb923c 100%);background-color:${accent};">&nbsp;</td>
109
+ </tr>
110
+ <tr>
111
+ <td class="email-body" style="padding:32px 36px 12px 36px;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Helvetica,Arial,sans-serif;font-size:15px;line-height:1.7;color:#334155;background:#ffffff;">
112
+ ${bodyHtml}
113
+ </td>
114
+ </tr>
115
+ <tr>
116
+ <td class="email-footer" align="center" style="padding:24px 32px 32px 32px;background:#f8fafc;border-top:1px solid ${border};font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Helvetica,Arial,sans-serif;">
117
+ ${followTitleHtml}
118
+ ${socialRowHtml}
119
+ ${contactHtml}
120
+ <div style="margin-top:18px;font-size:12px;color:#94a3b8;">\xA9 ${year} ${escapeHtml(brand)}. All rights reserved.</div>
121
+ ${disclaimerBlock}
122
+ </td>
123
+ </tr>
124
+ </table>
80
125
  </td>
81
126
  </tr>
82
127
  <tr>
83
- <td align="center" style="padding:20px 32px 28px 32px;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Helvetica,Arial,sans-serif;">
84
- ${followTitleHtml}
85
- ${socialRowHtml}
86
- ${supportHtml ? `<div style="margin-top:14px;">${supportHtml}</div>` : ""}
87
- <div style="margin-top:12px;font-size:12px;color:#9ca3af;">\xA9 ${(/* @__PURE__ */ new Date()).getFullYear()} ${escapeHtml(brand)}</div>
88
- ${disclaimerBlock}
128
+ <td align="center" style="padding:18px 8px 0 8px;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Helvetica,Arial,sans-serif;font-size:11px;line-height:1.5;color:#94a3b8;">
129
+ You\u2019re receiving this because of activity on your ${escapeHtml(brand)} account.
89
130
  </td>
90
131
  </tr>
91
132
  </table>