@rovela-ai/sdk 0.21.0 → 0.23.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 (124) hide show
  1. package/dist/admin/api/email-sending.d.ts +24 -0
  2. package/dist/admin/api/email-sending.d.ts.map +1 -0
  3. package/dist/admin/api/email-sending.js +155 -0
  4. package/dist/admin/api/email-sending.js.map +1 -0
  5. package/dist/admin/api/index.d.ts +2 -0
  6. package/dist/admin/api/index.d.ts.map +1 -1
  7. package/dist/admin/api/index.js +4 -0
  8. package/dist/admin/api/index.js.map +1 -1
  9. package/dist/admin/api/integrations-brevo.d.ts +24 -0
  10. package/dist/admin/api/integrations-brevo.d.ts.map +1 -0
  11. package/dist/admin/api/integrations-brevo.js +286 -0
  12. package/dist/admin/api/integrations-brevo.js.map +1 -0
  13. package/dist/admin/api/integrations.d.ts +2 -0
  14. package/dist/admin/api/integrations.d.ts.map +1 -1
  15. package/dist/admin/api/integrations.js +1 -0
  16. package/dist/admin/api/integrations.js.map +1 -1
  17. package/dist/admin/api/products.d.ts.map +1 -1
  18. package/dist/admin/api/products.js +4 -0
  19. package/dist/admin/api/products.js.map +1 -1
  20. package/dist/admin/api/settings.d.ts.map +1 -1
  21. package/dist/admin/api/settings.js +4 -1
  22. package/dist/admin/api/settings.js.map +1 -1
  23. package/dist/admin/api/tax-zones.d.ts.map +1 -1
  24. package/dist/admin/api/tax-zones.js +7 -0
  25. package/dist/admin/api/tax-zones.js.map +1 -1
  26. package/dist/admin/components/EmailsManager.d.ts.map +1 -1
  27. package/dist/admin/components/EmailsManager.js +2 -1
  28. package/dist/admin/components/EmailsManager.js.map +1 -1
  29. package/dist/admin/components/IntegrationsManager.d.ts.map +1 -1
  30. package/dist/admin/components/IntegrationsManager.js +98 -2
  31. package/dist/admin/components/IntegrationsManager.js.map +1 -1
  32. package/dist/admin/components/OrderDetails.d.ts.map +1 -1
  33. package/dist/admin/components/OrderDetails.js +5 -1
  34. package/dist/admin/components/OrderDetails.js.map +1 -1
  35. package/dist/admin/components/ProductForm.d.ts.map +1 -1
  36. package/dist/admin/components/ProductForm.js +36 -1
  37. package/dist/admin/components/ProductForm.js.map +1 -1
  38. package/dist/admin/components/TaxSettings.d.ts.map +1 -1
  39. package/dist/admin/components/TaxSettings.js +16 -4
  40. package/dist/admin/components/TaxSettings.js.map +1 -1
  41. package/dist/admin/components/emails/EmailSendingPanel.d.ts +2 -0
  42. package/dist/admin/components/emails/EmailSendingPanel.d.ts.map +1 -0
  43. package/dist/admin/components/emails/EmailSendingPanel.js +131 -0
  44. package/dist/admin/components/emails/EmailSendingPanel.js.map +1 -0
  45. package/dist/admin/integrations/registry.d.ts +2 -0
  46. package/dist/admin/integrations/registry.d.ts.map +1 -1
  47. package/dist/admin/integrations/registry.js +41 -0
  48. package/dist/admin/integrations/registry.js.map +1 -1
  49. package/dist/admin/types.d.ts +15 -0
  50. package/dist/admin/types.d.ts.map +1 -1
  51. package/dist/checkout/api/manual.d.ts.map +1 -1
  52. package/dist/checkout/api/manual.js +7 -0
  53. package/dist/checkout/api/manual.js.map +1 -1
  54. package/dist/checkout/api/shipping.d.ts +0 -18
  55. package/dist/checkout/api/shipping.d.ts.map +1 -1
  56. package/dist/checkout/api/shipping.js +33 -3
  57. package/dist/checkout/api/shipping.js.map +1 -1
  58. package/dist/checkout/components/CheckoutFlow.d.ts.map +1 -1
  59. package/dist/checkout/components/CheckoutFlow.js +30 -13
  60. package/dist/checkout/components/CheckoutFlow.js.map +1 -1
  61. package/dist/checkout/components/OrderSummary.d.ts +1 -1
  62. package/dist/checkout/components/OrderSummary.d.ts.map +1 -1
  63. package/dist/checkout/components/OrderSummary.js +5 -2
  64. package/dist/checkout/components/OrderSummary.js.map +1 -1
  65. package/dist/checkout/server/create-checkout-session.d.ts.map +1 -1
  66. package/dist/checkout/server/create-checkout-session.js +38 -9
  67. package/dist/checkout/server/create-checkout-session.js.map +1 -1
  68. package/dist/checkout/server/handle-webhook.js +6 -0
  69. package/dist/checkout/server/handle-webhook.js.map +1 -1
  70. package/dist/checkout/server/order-service.d.ts.map +1 -1
  71. package/dist/checkout/server/order-service.js +21 -0
  72. package/dist/checkout/server/order-service.js.map +1 -1
  73. package/dist/checkout/server/pricing.d.ts +28 -1
  74. package/dist/checkout/server/pricing.d.ts.map +1 -1
  75. package/dist/checkout/server/pricing.js +84 -6
  76. package/dist/checkout/server/pricing.js.map +1 -1
  77. package/dist/checkout/types.d.ts +32 -0
  78. package/dist/checkout/types.d.ts.map +1 -1
  79. package/dist/core/db/queries.d.ts +114 -25
  80. package/dist/core/db/queries.d.ts.map +1 -1
  81. package/dist/core/db/queries.js +124 -2
  82. package/dist/core/db/queries.js.map +1 -1
  83. package/dist/core/db/schema.d.ts +213 -0
  84. package/dist/core/db/schema.d.ts.map +1 -1
  85. package/dist/core/db/schema.js +42 -0
  86. package/dist/core/db/schema.js.map +1 -1
  87. package/dist/emails/index.d.ts +2 -0
  88. package/dist/emails/index.d.ts.map +1 -1
  89. package/dist/emails/index.js +1 -0
  90. package/dist/emails/index.js.map +1 -1
  91. package/dist/emails/send/orders.d.ts +4 -0
  92. package/dist/emails/send/orders.d.ts.map +1 -1
  93. package/dist/emails/send/orders.js +1 -0
  94. package/dist/emails/send/orders.js.map +1 -1
  95. package/dist/emails/sender.d.ts.map +1 -1
  96. package/dist/emails/sender.js +30 -5
  97. package/dist/emails/sender.js.map +1 -1
  98. package/dist/emails/templates/order-confirmation.d.ts +9 -0
  99. package/dist/emails/templates/order-confirmation.d.ts.map +1 -1
  100. package/dist/emails/templates/order-confirmation.js +19 -8
  101. package/dist/emails/templates/order-confirmation.js.map +1 -1
  102. package/dist/emails/transport-smtp.d.ts +58 -0
  103. package/dist/emails/transport-smtp.d.ts.map +1 -0
  104. package/dist/emails/transport-smtp.js +97 -0
  105. package/dist/emails/transport-smtp.js.map +1 -0
  106. package/dist/emails/transport.d.ts +77 -0
  107. package/dist/emails/transport.d.ts.map +1 -0
  108. package/dist/emails/transport.js +154 -0
  109. package/dist/emails/transport.js.map +1 -0
  110. package/dist/emails/types.d.ts +5 -0
  111. package/dist/emails/types.d.ts.map +1 -1
  112. package/dist/products/api/products.d.ts.map +1 -1
  113. package/dist/products/api/products.js +18 -3
  114. package/dist/products/api/products.js.map +1 -1
  115. package/docs/changelog/epoch-09-catalog-tax.md +91 -0
  116. package/docs/changelog/epoch-10-email-transport.md +97 -0
  117. package/package.json +2 -1
  118. package/templates/store-template/.claude/skills/manage-products/SKILL.md +1 -1
  119. package/templates/store-template/app/account/orders/[id]/invoice/page.tsx +19 -4
  120. package/templates/store-template/app/api/admin/emails/sending/route.ts +9 -0
  121. package/templates/store-template/app/api/admin/integrations/brevo/backfill/route.ts +9 -0
  122. package/templates/store-template/app/api/admin/integrations/brevo/route.ts +9 -0
  123. package/templates/store-template/next.config.js +4 -1
  124. package/templates/store-template/package.json +2 -1
@@ -1 +1 @@
1
- {"version":3,"file":"orders.js","sourceRoot":"","sources":["../../../src/emails/send/orders.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"orders.js","sourceRoot":"","sources":["../../../src/emails/send/orders.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"sender.d.ts","sourceRoot":"","sources":["../../src/emails/sender.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAOhE;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAsB,SAAS,CAC7B,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,eAAe,CAAC,CAsC1B;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI,CAI9D;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,gBAAgB,EAAE,GACzB,OAAO,CAAC,eAAe,EAAE,CAAC,CAE5B"}
1
+ {"version":3,"file":"sender.d.ts","sourceRoot":"","sources":["../../src/emails/sender.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAQhE;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAsB,SAAS,CAC7B,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,eAAe,CAAC,CAkE1B;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI,CAI9D;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,gBAAgB,EAAE,GACzB,OAAO,CAAC,eAAe,EAAE,CAAC,CAE5B"}
@@ -5,6 +5,7 @@
5
5
  */
6
6
  import { getResend, getFromEmail, getSupportEmail } from './config';
7
7
  import { localizeEmail } from './i18n';
8
+ import { resolveTransport } from './transport';
8
9
  // =============================================================================
9
10
  // Email Sender
10
11
  // =============================================================================
@@ -33,16 +34,40 @@ import { localizeEmail } from './i18n';
33
34
  */
34
35
  export async function sendEmail(options) {
35
36
  try {
36
- const resend = getResend();
37
- const [from, replyTo] = await Promise.all([
38
- getFromEmail(),
37
+ const [replyTo, transport] = await Promise.all([
39
38
  options.replyTo ? Promise.resolve(options.replyTo) : getSupportEmail(),
39
+ resolveTransport(),
40
40
  ]);
41
+ const subject = localizeEmail(options.subject, options.locale);
42
+ const html = localizeEmail(options.html, options.locale);
43
+ // Merchant-configured transport (brevo HTTP / own SMTP). FAIL-SAFE
44
+ // DELIVERY RULE: any failure here falls through to the platform path
45
+ // below — a transport misconfiguration must never eat an order
46
+ // confirmation. Misconfiguration surfaces at save time in the admin
47
+ // Sending panel; the fallback is the runtime belt.
48
+ if (transport.send) {
49
+ const result = await transport.send({
50
+ from: `${transport.fromName} <${transport.fromAddress ?? ''}>`,
51
+ fromAddress: transport.fromAddress ?? '',
52
+ fromName: transport.fromName,
53
+ to: options.to,
54
+ subject,
55
+ html,
56
+ replyTo,
57
+ });
58
+ if (result.success) {
59
+ console.log(`[Email] Sent via ${transport.kind}:`, result.messageId, 'to:', options.to);
60
+ return result;
61
+ }
62
+ console.error(`[Email] ${transport.kind} transport failed (${result.error}) — falling back to the platform sender`);
63
+ }
64
+ const resend = getResend();
65
+ const from = await getFromEmail();
41
66
  const { data, error } = await resend.emails.send({
42
67
  from,
43
68
  to: options.to,
44
- subject: localizeEmail(options.subject, options.locale),
45
- html: localizeEmail(options.html, options.locale),
69
+ subject,
70
+ html,
46
71
  replyTo,
47
72
  });
48
73
  if (error) {
@@ -1 +1 @@
1
- {"version":3,"file":"sender.js","sourceRoot":"","sources":["../../src/emails/sender.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAEnE,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAA;AAEtC,gFAAgF;AAChF,eAAe;AACf,gFAAgF;AAEhF;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,OAAyB;IAEzB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,SAAS,EAAE,CAAA;QAC1B,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YACxC,YAAY,EAAE;YACd,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,eAAe,EAAE;SACvE,CAAC,CAAA;QAEF,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;YAC/C,IAAI;YACJ,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,OAAO,EAAE,aAAa,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC;YACvD,IAAI,EAAE,aAAa,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC;YACjD,OAAO;SACR,CAAC,CAAA;QAEF,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,KAAK,CAAC,CAAA;YAC7C,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,KAAK,CAAC,OAAO,IAAI,sBAAsB;aAC/C,CAAA;QACH,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,4BAA4B,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,CAAC,CAAA;QACtE,OAAO;YACL,OAAO,EAAE,IAAI;YACb,SAAS,EAAE,IAAI,EAAE,EAAE;SACpB,CAAA;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,YAAY,GAChB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,6BAA6B,CAAA;QACpE,OAAO,CAAC,KAAK,CAAC,oBAAoB,EAAE,YAAY,CAAC,CAAA;QACjD,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,YAAY;SACpB,CAAA;IACH,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,UAAU,cAAc,CAAC,OAAyB;IACtD,SAAS,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;QAC/B,OAAO,CAAC,KAAK,CAAC,4BAA4B,EAAE,GAAG,CAAC,CAAA;IAClD,CAAC,CAAC,CAAA;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,MAA0B;IAE1B,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAA;AAC3C,CAAC"}
1
+ {"version":3,"file":"sender.js","sourceRoot":"","sources":["../../src/emails/sender.ts"],"names":[],"mappings":"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"}
@@ -12,6 +12,15 @@ export declare function renderOrderSummary(data: {
12
12
  discount?: string;
13
13
  discountCode?: string;
14
14
  tax: string;
15
+ /**
16
+ * Per-rate VAT ventilation (0.22.0): pre-formatted amounts per rate. When
17
+ * more than one rate is present, the Tax row becomes one row per rate
18
+ * ("Tax 5.5%" / "Tax 20%") — the French invoice ventilation.
19
+ */
20
+ taxBreakdown?: Array<{
21
+ rate: number;
22
+ amount: string;
23
+ }>;
15
24
  total: string;
16
25
  }): string;
17
26
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"order-confirmation.d.ts","sourceRoot":"","sources":["../../../src/emails/templates/order-confirmation.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,qBAAqB,EAAkB,MAAM,UAAU,CAAA;AA4CrE,gEAAgE;AAChE,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,IAAI,CAAC,qBAAqB,EAAE,OAAO,CAAC,GAAG,MAAM,CAO1F;AAMD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE;IACvC,QAAQ,EAAE,MAAM,CAAA;IAChB,YAAY,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;CACd,GAAG,MAAM,CAsDT;AAMD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,+DAA+D;AAC/D,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,IAAI,CAAC,qBAAqB,EAAE,aAAa,GAAG,WAAW,GAAG,eAAe,CAAC,GAC/E,MAAM,CAiBR;AAED,8EAA8E;AAC9E,wBAAgB,4BAA4B,CAC1C,IAAI,EAAE,IAAI,CAAC,qBAAqB,EAAE,qBAAqB,CAAC,GACvD,MAAM,CAUR;AAED,6EAA6E;AAC7E,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,IAAI,CAAC,qBAAqB,EAAE,QAAQ,GAAG,iBAAiB,CAAC,GAC9D,MAAM,CAER;AAED,qEAAqE;AACrE,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,IAAI,CAAC,qBAAqB,EAAE,YAAY,CAAC,GAAG,MAAM,CAE3F;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,qBAAqB,GAAG,MAAM,CA0C3E;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CACzC,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,GAClB,MAAM,CAER"}
1
+ {"version":3,"file":"order-confirmation.d.ts","sourceRoot":"","sources":["../../../src/emails/templates/order-confirmation.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,qBAAqB,EAAkB,MAAM,UAAU,CAAA;AA4CrE,gEAAgE;AAChE,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,IAAI,CAAC,qBAAqB,EAAE,OAAO,CAAC,GAAG,MAAM,CAO1F;AAMD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE;IACvC,QAAQ,EAAE,MAAM,CAAA;IAChB,YAAY,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,GAAG,EAAE,MAAM,CAAA;IACX;;;;OAIG;IACH,YAAY,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACtD,KAAK,EAAE,MAAM,CAAA;CACd,GAAG,MAAM,CAoET;AAMD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,+DAA+D;AAC/D,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,IAAI,CAAC,qBAAqB,EAAE,aAAa,GAAG,WAAW,GAAG,eAAe,CAAC,GAC/E,MAAM,CAiBR;AAED,8EAA8E;AAC9E,wBAAgB,4BAA4B,CAC1C,IAAI,EAAE,IAAI,CAAC,qBAAqB,EAAE,qBAAqB,CAAC,GACvD,MAAM,CAUR;AAED,6EAA6E;AAC7E,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,IAAI,CAAC,qBAAqB,EAAE,QAAQ,GAAG,iBAAiB,CAAC,GAC9D,MAAM,CAER;AAED,qEAAqE;AACrE,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,IAAI,CAAC,qBAAqB,EAAE,YAAY,CAAC,GAAG,MAAM,CAE3F;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,qBAAqB,GAAG,MAAM,CA2C3E;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CACzC,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,GAClB,MAAM,CAER"}
@@ -56,6 +56,23 @@ export function renderOrderSummary(data) {
56
56
  </tr>
57
57
  `
58
58
  : '';
59
+ // One Tax row per rate when a multi-rate ventilation is present; the
60
+ // familiar single row otherwise.
61
+ const taxEntries = data.taxBreakdown && data.taxBreakdown.length > 1
62
+ ? data.taxBreakdown.map((e) => ({ label: `Tax ${e.rate}%`, amount: e.amount }))
63
+ : [{ label: 'Tax', amount: data.tax }];
64
+ const taxRows = taxEntries
65
+ .map((e) => `
66
+ <tr>
67
+ <td style="padding-bottom: 8px;">
68
+ <p style="margin: 0; font-family: ${STYLES.fontFamily}; font-size: 14px; font-weight: 400; color: ${STYLES.textSecondary};">${escapeHtml(e.label)}</p>
69
+ </td>
70
+ <td align="right" style="padding-bottom: 8px;">
71
+ <p style="margin: 0; font-family: ${STYLES.fontFamily}; font-size: 14px; font-weight: 500; color: ${STYLES.textPrimary};">${escapeHtml(e.amount)}</p>
72
+ </td>
73
+ </tr>
74
+ `)
75
+ .join('');
59
76
  return `
60
77
  <div style="padding: 24px; background-color: ${STYLES.footerBackground}; border-radius: 16px; border: 1px solid ${STYLES.cardBorder}; margin-bottom: 32px;">
61
78
  <table width="100%" cellpadding="0" cellspacing="0">
@@ -76,14 +93,7 @@ export function renderOrderSummary(data) {
76
93
  <p style="margin: 0; font-family: ${STYLES.fontFamily}; font-size: 14px; font-weight: 500; color: ${STYLES.textPrimary};">${escapeHtml(data.shippingCost)}</p>
77
94
  </td>
78
95
  </tr>
79
- <tr>
80
- <td style="padding-bottom: 8px;">
81
- <p style="margin: 0; font-family: ${STYLES.fontFamily}; font-size: 14px; font-weight: 400; color: ${STYLES.textSecondary};">Tax</p>
82
- </td>
83
- <td align="right" style="padding-bottom: 8px;">
84
- <p style="margin: 0; font-family: ${STYLES.fontFamily}; font-size: 14px; font-weight: 500; color: ${STYLES.textPrimary};">${escapeHtml(data.tax)}</p>
85
- </td>
86
- </tr>
96
+ ${taxRows}
87
97
  <tr>
88
98
  <td style="padding-top: 16px; border-top: 1px solid ${STYLES.cardBorder};">
89
99
  <p style="margin: 0; font-family: ${STYLES.fontFamily}; font-size: 18px; font-weight: 700; color: ${STYLES.textPrimary};">Total</p>
@@ -184,6 +194,7 @@ export function renderOrderConfirmation(data) {
184
194
  discountCode: data.discountCode,
185
195
  shippingCost: data.shippingCost,
186
196
  tax: data.tax,
197
+ taxBreakdown: data.taxBreakdown,
187
198
  total: data.total,
188
199
  })}
189
200
 
@@ -1 +1 @@
1
- {"version":3,"file":"order-confirmation.js","sourceRoot":"","sources":["../../../src/emails/templates/order-confirmation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"order-confirmation.js","sourceRoot":"","sources":["../../../src/emails/templates/order-confirmation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * @rovela/sdk/emails/transport-smtp
3
+ *
4
+ * The nodemailer-touching half of the email transport (SDK 0.23.0),
5
+ * isolated in its own module. nodemailer pulls node builtins (net/tls/dns),
6
+ * and the emails graph is CLIENT-REACHABLE (the §62 invariant: auth barrel →
7
+ * send → sender → transport) — so it is loaded through a BUNDLER-IGNORED
8
+ * dynamic import:
9
+ *
10
+ * import(\/* webpackIgnore *\/ \/* turbopackIgnore *\/ 'nodemailer')
11
+ *
12
+ * Both bundlers skip the specifier entirely (no client-side resolution, no
13
+ * chunk), and at server runtime it is a NATIVE import with real Node
14
+ * resolution from the executing module's location — no path guessing, no
15
+ * eval tricks. Two consequences, both handled at the packaging layer:
16
+ *
17
+ * - nodemailer is a TEMPLATE dependency (store package.json), so it sits
18
+ * hoisted at the app root deterministically (an SDK-transitive-only
19
+ * install can nest it where a bundled chunk can't resolve it).
20
+ * - Vercel's file tracer can't see an ignored import — the template's
21
+ * next.config pins outputFileTracingIncludes: node_modules/nodemailer/**
22
+ * (the E4 blueprint.json precedent).
23
+ *
24
+ * A load failure logs LOUDLY (fail-safe rule: the send falls back to the
25
+ * platform path, but ops must see WHY smtp was unavailable) and the cached
26
+ * promise resets so a transient failure can retry.
27
+ */
28
+ export interface SmtpConfig {
29
+ host: string;
30
+ port: number;
31
+ secure: boolean;
32
+ user: string | null;
33
+ password: string | null;
34
+ }
35
+ export interface SmtpSendInput {
36
+ fromAddress: string;
37
+ fromName: string;
38
+ to: string;
39
+ subject: string;
40
+ html: string;
41
+ replyTo?: string;
42
+ }
43
+ export interface SmtpSendResult {
44
+ success: boolean;
45
+ messageId?: string;
46
+ error?: string;
47
+ }
48
+ export declare function sendViaSmtp(input: SmtpSendInput, cfg: SmtpConfig): Promise<SmtpSendResult>;
49
+ /**
50
+ * Save-time SMTP validation — a real handshake (connect + EHLO + auth), no
51
+ * email sent. Used by the admin Sending panel so misconfiguration surfaces
52
+ * at save time instead of silently pushing every send onto the fallback.
53
+ */
54
+ export declare function verifySmtp(cfg: SmtpConfig): Promise<{
55
+ ok: boolean;
56
+ error?: string;
57
+ }>;
58
+ //# sourceMappingURL=transport-smtp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport-smtp.d.ts","sourceRoot":"","sources":["../../src/emails/transport-smtp.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAWH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,OAAO,CAAA;IACf,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IACnB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;CACxB;AAED,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAA;IACnB,QAAQ,EAAE,MAAM,CAAA;IAChB,EAAE,EAAE,MAAM,CAAA;IACV,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAA;IAChB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AA2CD,wBAAsB,WAAW,CAAC,KAAK,EAAE,aAAa,EAAE,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,cAAc,CAAC,CAgBhG;AAED;;;;GAIG;AACH,wBAAsB,UAAU,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAS1F"}
@@ -0,0 +1,97 @@
1
+ /**
2
+ * @rovela/sdk/emails/transport-smtp
3
+ *
4
+ * The nodemailer-touching half of the email transport (SDK 0.23.0),
5
+ * isolated in its own module. nodemailer pulls node builtins (net/tls/dns),
6
+ * and the emails graph is CLIENT-REACHABLE (the §62 invariant: auth barrel →
7
+ * send → sender → transport) — so it is loaded through a BUNDLER-IGNORED
8
+ * dynamic import:
9
+ *
10
+ * import(\/* webpackIgnore *\/ \/* turbopackIgnore *\/ 'nodemailer')
11
+ *
12
+ * Both bundlers skip the specifier entirely (no client-side resolution, no
13
+ * chunk), and at server runtime it is a NATIVE import with real Node
14
+ * resolution from the executing module's location — no path guessing, no
15
+ * eval tricks. Two consequences, both handled at the packaging layer:
16
+ *
17
+ * - nodemailer is a TEMPLATE dependency (store package.json), so it sits
18
+ * hoisted at the app root deterministically (an SDK-transitive-only
19
+ * install can nest it where a bundled chunk can't resolve it).
20
+ * - Vercel's file tracer can't see an ignored import — the template's
21
+ * next.config pins outputFileTracingIncludes: node_modules/nodemailer/**
22
+ * (the E4 blueprint.json precedent).
23
+ *
24
+ * A load failure logs LOUDLY (fail-safe rule: the send falls back to the
25
+ * platform path, but ops must see WHY smtp was unavailable) and the cached
26
+ * promise resets so a transient failure can retry.
27
+ */
28
+ // =============================================================================
29
+ // Loader
30
+ // =============================================================================
31
+ let nodemailerPromise = null;
32
+ function loadNodemailer() {
33
+ if (!nodemailerPromise) {
34
+ nodemailerPromise = import(
35
+ /* webpackIgnore: true */ /* turbopackIgnore: true */ 'nodemailer')
36
+ .then((m) => (m.default ??
37
+ m))
38
+ .catch((err) => {
39
+ console.error('[Email] nodemailer not loadable:', err);
40
+ nodemailerPromise = null; // allow retry on transient failures
41
+ return null;
42
+ });
43
+ }
44
+ return nodemailerPromise;
45
+ }
46
+ function buildTransport(nm, cfg) {
47
+ return nm.createTransport({
48
+ host: cfg.host,
49
+ port: cfg.port,
50
+ secure: cfg.secure,
51
+ ...(cfg.user ? { auth: { user: cfg.user, pass: cfg.password ?? '' } } : {}),
52
+ connectionTimeout: 10000,
53
+ greetingTimeout: 10000,
54
+ socketTimeout: 15000,
55
+ });
56
+ }
57
+ // =============================================================================
58
+ // Send + verify
59
+ // =============================================================================
60
+ export async function sendViaSmtp(input, cfg) {
61
+ const nm = await loadNodemailer();
62
+ if (!nm)
63
+ return { success: false, error: 'SMTP transport unavailable (nodemailer not loadable)' };
64
+ if (!input.fromAddress)
65
+ return { success: false, error: 'No sender address configured' };
66
+ try {
67
+ const info = await buildTransport(nm, cfg).sendMail({
68
+ from: `${input.fromName} <${input.fromAddress}>`,
69
+ to: input.to,
70
+ subject: input.subject,
71
+ html: input.html,
72
+ ...(input.replyTo ? { replyTo: input.replyTo } : {}),
73
+ });
74
+ return { success: true, messageId: info?.messageId };
75
+ }
76
+ catch (err) {
77
+ return { success: false, error: err instanceof Error ? err.message : 'SMTP send failed' };
78
+ }
79
+ }
80
+ /**
81
+ * Save-time SMTP validation — a real handshake (connect + EHLO + auth), no
82
+ * email sent. Used by the admin Sending panel so misconfiguration surfaces
83
+ * at save time instead of silently pushing every send onto the fallback.
84
+ */
85
+ export async function verifySmtp(cfg) {
86
+ const nm = await loadNodemailer();
87
+ if (!nm)
88
+ return { ok: false, error: 'SMTP transport unavailable (nodemailer not loadable)' };
89
+ try {
90
+ await buildTransport(nm, cfg).verify();
91
+ return { ok: true };
92
+ }
93
+ catch (err) {
94
+ return { ok: false, error: err instanceof Error ? err.message : 'SMTP verification failed' };
95
+ }
96
+ }
97
+ //# sourceMappingURL=transport-smtp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport-smtp.js","sourceRoot":"","sources":["../../src/emails/transport-smtp.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,77 @@
1
+ /**
2
+ * @rovela/sdk/emails/transport
3
+ *
4
+ * Transactional-email transport resolution (SDK 0.23.0). Every send funnels
5
+ * through sendEmail() (sender.ts), which asks this module HOW to deliver:
6
+ *
7
+ * - 'platform' (default, also NULL) — the platform Resend sender. The
8
+ * entire pre-0.23 fleet stays byte-identical on this path.
9
+ * - 'brevo' — Brevo's transactional HTTP API (POST /v3/smtp/email)
10
+ * using the SAME store_settings.brevo_api_key the marketing integration
11
+ * stores. No SMTP key needed — this is what makes the integrations-page
12
+ * toggle seamless. Sender address must be a VERIFIED Brevo sender or
13
+ * Brevo rejects the send (surfaced at save time by the admin UI).
14
+ * - 'smtp' — the merchant's own SMTP server via nodemailer.
15
+ *
16
+ * FAIL-SAFE DELIVERY RULE (load-bearing): a non-platform transport failure
17
+ * falls back to the platform Resend path and logs loudly — a merchant's
18
+ * SMTP typo must never eat an order confirmation. Misconfiguration is
19
+ * caught at SAVE time by the admin Sending panel, not at send time.
20
+ *
21
+ * CLIENT-REACHABILITY (load-bearing, the §62 emails-graph invariant): this
22
+ * file is reachable from client bundles (auth barrel → send → sender →
23
+ * transport). All nodemailer-touching code lives in ./transport-smtp, which
24
+ * loads it via a BUNDLER-IGNORED dynamic import (webpackIgnore +
25
+ * turbopackIgnore) — native server-runtime resolution, nothing for the
26
+ * client bundler to resolve. Fails open to the platform path when the
27
+ * module can't load. See transport-smtp.ts for the packaging contract
28
+ * (template dependency + tracing include).
29
+ */
30
+ import { type StoreSettingsData } from '../core/db/queries';
31
+ import { type SmtpConfig as SmtpConfigType } from './transport-smtp';
32
+ export type EmailTransportKind = 'platform' | 'brevo' | 'smtp';
33
+ export interface TransportSendInput {
34
+ from: string;
35
+ fromAddress: string;
36
+ fromName: string;
37
+ to: string;
38
+ subject: string;
39
+ html: string;
40
+ replyTo?: string;
41
+ }
42
+ export interface TransportSendResult {
43
+ success: boolean;
44
+ messageId?: string;
45
+ error?: string;
46
+ }
47
+ /** The store's configured transport ('platform' when unset/unknown). */
48
+ export declare function resolveTransportKind(settings: Pick<StoreSettingsData, 'emailTransport'> | null): EmailTransportKind;
49
+ /**
50
+ * Sender identity for non-platform transports. The platform path keeps its
51
+ * existing RESEND_FROM_EMAIL resolution untouched; brevo/smtp REQUIRE a
52
+ * merchant-owned from-address (their domain, their reputation) and fall
53
+ * back to the store contact email when the dedicated field is empty.
54
+ */
55
+ export declare function resolveFromIdentity(settings: Pick<StoreSettingsData, 'emailFromAddress' | 'emailFromName' | 'storeEmail' | 'storeName'> | null): {
56
+ address: string | null;
57
+ name: string;
58
+ };
59
+ /** Server-only read of the marketing integration's key (card-added columns). */
60
+ export declare function getBrevoApiKey(): Promise<string | null>;
61
+ export { verifySmtp } from './transport-smtp';
62
+ export type { SmtpConfig } from './transport-smtp';
63
+ export declare function smtpConfigFromSettings(settings: Pick<StoreSettingsData, 'smtpHost' | 'smtpPort' | 'smtpSecure' | 'smtpUser' | 'smtpPassword'> | null): SmtpConfigType | null;
64
+ export interface TransportDispatch {
65
+ kind: EmailTransportKind;
66
+ /** null → caller proceeds with the platform Resend path. */
67
+ send: ((input: TransportSendInput) => Promise<TransportSendResult>) | null;
68
+ /** Merchant sender identity for non-platform transports. */
69
+ fromAddress: string | null;
70
+ fromName: string;
71
+ }
72
+ /**
73
+ * Resolve the store's transport once per send. Any resolution failure
74
+ * degrades to the platform path (fail-safe delivery rule).
75
+ */
76
+ export declare function resolveTransport(): Promise<TransportDispatch>;
77
+ //# sourceMappingURL=transport.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../../src/emails/transport.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,EAAgB,KAAK,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAEzE,OAAO,EAAe,KAAK,UAAU,IAAI,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAMjF,MAAM,MAAM,kBAAkB,GAAG,UAAU,GAAG,OAAO,GAAG,MAAM,CAAA;AAE9D,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,QAAQ,EAAE,MAAM,CAAA;IAChB,EAAE,EAAE,MAAM,CAAA;IACV,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,OAAO,CAAA;IAChB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAMD,wEAAwE;AACxE,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,IAAI,CAAC,iBAAiB,EAAE,gBAAgB,CAAC,GAAG,IAAI,GACzD,kBAAkB,CAGpB;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,IAAI,CAAC,iBAAiB,EAAE,kBAAkB,GAAG,eAAe,GAAG,YAAY,GAAG,WAAW,CAAC,GAAG,IAAI,GAC1G;IAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAI1C;AAMD,gFAAgF;AAChF,wBAAsB,cAAc,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAY7D;AAkCD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,YAAY,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAElD,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,IAAI,CAAC,iBAAiB,EAAE,UAAU,GAAG,UAAU,GAAG,YAAY,GAAG,UAAU,GAAG,cAAc,CAAC,GAAG,IAAI,GAC7G,cAAc,GAAG,IAAI,CAYvB;AAMD,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,kBAAkB,CAAA;IACxB,4DAA4D;IAC5D,IAAI,EAAE,CAAC,CAAC,KAAK,EAAE,kBAAkB,KAAK,OAAO,CAAC,mBAAmB,CAAC,CAAC,GAAG,IAAI,CAAA;IAC1E,4DAA4D;IAC5D,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,iBAAiB,CAAC,CAoCnE"}
@@ -0,0 +1,154 @@
1
+ /**
2
+ * @rovela/sdk/emails/transport
3
+ *
4
+ * Transactional-email transport resolution (SDK 0.23.0). Every send funnels
5
+ * through sendEmail() (sender.ts), which asks this module HOW to deliver:
6
+ *
7
+ * - 'platform' (default, also NULL) — the platform Resend sender. The
8
+ * entire pre-0.23 fleet stays byte-identical on this path.
9
+ * - 'brevo' — Brevo's transactional HTTP API (POST /v3/smtp/email)
10
+ * using the SAME store_settings.brevo_api_key the marketing integration
11
+ * stores. No SMTP key needed — this is what makes the integrations-page
12
+ * toggle seamless. Sender address must be a VERIFIED Brevo sender or
13
+ * Brevo rejects the send (surfaced at save time by the admin UI).
14
+ * - 'smtp' — the merchant's own SMTP server via nodemailer.
15
+ *
16
+ * FAIL-SAFE DELIVERY RULE (load-bearing): a non-platform transport failure
17
+ * falls back to the platform Resend path and logs loudly — a merchant's
18
+ * SMTP typo must never eat an order confirmation. Misconfiguration is
19
+ * caught at SAVE time by the admin Sending panel, not at send time.
20
+ *
21
+ * CLIENT-REACHABILITY (load-bearing, the §62 emails-graph invariant): this
22
+ * file is reachable from client bundles (auth barrel → send → sender →
23
+ * transport). All nodemailer-touching code lives in ./transport-smtp, which
24
+ * loads it via a BUNDLER-IGNORED dynamic import (webpackIgnore +
25
+ * turbopackIgnore) — native server-runtime resolution, nothing for the
26
+ * client bundler to resolve. Fails open to the platform path when the
27
+ * module can't load. See transport-smtp.ts for the packaging contract
28
+ * (template dependency + tracing include).
29
+ */
30
+ import { findSettings } from '../core/db/queries';
31
+ import { getSql } from '../core/db/client';
32
+ import { sendViaSmtp } from './transport-smtp';
33
+ // =============================================================================
34
+ // Resolution
35
+ // =============================================================================
36
+ /** The store's configured transport ('platform' when unset/unknown). */
37
+ export function resolveTransportKind(settings) {
38
+ const t = settings?.emailTransport;
39
+ return t === 'brevo' || t === 'smtp' ? t : 'platform';
40
+ }
41
+ /**
42
+ * Sender identity for non-platform transports. The platform path keeps its
43
+ * existing RESEND_FROM_EMAIL resolution untouched; brevo/smtp REQUIRE a
44
+ * merchant-owned from-address (their domain, their reputation) and fall
45
+ * back to the store contact email when the dedicated field is empty.
46
+ */
47
+ export function resolveFromIdentity(settings) {
48
+ const address = settings?.emailFromAddress?.trim() || settings?.storeEmail?.trim() || null;
49
+ const name = settings?.emailFromName?.trim() || settings?.storeName?.trim() || 'Our Store';
50
+ return { address, name };
51
+ }
52
+ // =============================================================================
53
+ // Brevo transport (HTTP API — no SMTP key needed)
54
+ // =============================================================================
55
+ /** Server-only read of the marketing integration's key (card-added columns). */
56
+ export async function getBrevoApiKey() {
57
+ try {
58
+ const sql = getSql();
59
+ const rows = (await sql `
60
+ SELECT brevo_api_key FROM store_settings LIMIT 1
61
+ `);
62
+ return rows[0]?.brevo_api_key || null;
63
+ }
64
+ catch {
65
+ // Column absent (integration never installed) or transient DB error —
66
+ // the caller falls back to the platform path.
67
+ return null;
68
+ }
69
+ }
70
+ async function sendViaBrevo(input) {
71
+ const apiKey = await getBrevoApiKey();
72
+ if (!apiKey)
73
+ return { success: false, error: 'Brevo API key is not configured' };
74
+ if (!input.fromAddress)
75
+ return { success: false, error: 'No sender address configured' };
76
+ try {
77
+ const res = await fetch('https://api.brevo.com/v3/smtp/email', {
78
+ method: 'POST',
79
+ headers: { 'api-key': apiKey, 'content-type': 'application/json', accept: 'application/json' },
80
+ body: JSON.stringify({
81
+ sender: { email: input.fromAddress, name: input.fromName },
82
+ to: [{ email: input.to }],
83
+ subject: input.subject,
84
+ htmlContent: input.html,
85
+ ...(input.replyTo ? { replyTo: { email: input.replyTo } } : {}),
86
+ }),
87
+ signal: AbortSignal.timeout(15000),
88
+ });
89
+ const body = (await res.json().catch(() => null));
90
+ if (!res.ok) {
91
+ return { success: false, error: body?.message || `Brevo HTTP ${res.status}` };
92
+ }
93
+ return { success: true, messageId: body?.messageId };
94
+ }
95
+ catch (err) {
96
+ return { success: false, error: err instanceof Error ? err.message : 'Brevo send failed' };
97
+ }
98
+ }
99
+ // =============================================================================
100
+ // SMTP transport — nodemailer isolated in ./transport-smtp
101
+ // =============================================================================
102
+ export { verifySmtp } from './transport-smtp';
103
+ export function smtpConfigFromSettings(settings) {
104
+ const host = settings?.smtpHost?.trim();
105
+ if (!host)
106
+ return null;
107
+ const port = settings?.smtpPort ?? 587;
108
+ return {
109
+ host,
110
+ port,
111
+ // Convention: explicit flag wins; otherwise 465 implies implicit TLS.
112
+ secure: settings?.smtpSecure ?? port === 465,
113
+ user: settings?.smtpUser?.trim() || null,
114
+ password: settings?.smtpPassword || null,
115
+ };
116
+ }
117
+ /**
118
+ * Resolve the store's transport once per send. Any resolution failure
119
+ * degrades to the platform path (fail-safe delivery rule).
120
+ */
121
+ export async function resolveTransport() {
122
+ let settings = null;
123
+ try {
124
+ settings = await findSettings();
125
+ }
126
+ catch {
127
+ settings = null;
128
+ }
129
+ const kind = resolveTransportKind(settings);
130
+ const identity = resolveFromIdentity(settings);
131
+ if (kind === 'brevo') {
132
+ return { kind, send: sendViaBrevo, fromAddress: identity.address, fromName: identity.name };
133
+ }
134
+ if (kind === 'smtp') {
135
+ const cfg = smtpConfigFromSettings(settings);
136
+ if (cfg) {
137
+ return {
138
+ kind,
139
+ send: (input) => sendViaSmtp({
140
+ fromAddress: input.fromAddress,
141
+ fromName: input.fromName,
142
+ to: input.to,
143
+ subject: input.subject,
144
+ html: input.html,
145
+ replyTo: input.replyTo,
146
+ }, cfg),
147
+ fromAddress: identity.address,
148
+ fromName: identity.name,
149
+ };
150
+ }
151
+ }
152
+ return { kind: 'platform', send: null, fromAddress: identity.address, fromName: identity.name };
153
+ }
154
+ //# sourceMappingURL=transport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport.js","sourceRoot":"","sources":["../../src/emails/transport.ts"],"names":[],"mappings":"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"}