@hartl-services/medusa-base 2.8.0 → 2.10.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 (50) hide show
  1. package/.medusa/server/src/admin/admin-components/features/plugin-features/components/PluginSettingsForm.js +4 -5
  2. package/.medusa/server/src/admin/admin-components/features/plugin-features/lib/plugin-view.d.ts +0 -5
  3. package/.medusa/server/src/admin/admin-components/features/plugin-features/lib/plugin-view.js +0 -5
  4. package/.medusa/server/src/admin/admin-components/i18n/texts.d.ts +1 -2
  5. package/.medusa/server/src/admin/admin-components/i18n/texts.js +1 -2
  6. package/.medusa/server/src/admin/index.js +106 -69
  7. package/.medusa/server/src/admin/index.mjs +107 -70
  8. package/.medusa/server/src/api/admin/email/templates/[kind]/send-test/route.js +7 -1
  9. package/.medusa/server/src/documents/templates/financial-document.js +23 -4
  10. package/.medusa/server/src/email/application/warn-credential-expiry.js +77 -0
  11. package/.medusa/server/src/email/config/index.js +8 -2
  12. package/.medusa/server/src/email/config/notification-module.js +28 -2
  13. package/.medusa/server/src/email/domain/business-keys.js +5 -2
  14. package/.medusa/server/src/email/domain/failure-classification.js +9 -1
  15. package/.medusa/server/src/email/plugin-features.js +123 -1
  16. package/.medusa/server/src/email/rendering/default-templates.js +16 -1
  17. package/.medusa/server/src/email/rendering/render-email.js +2 -1
  18. package/.medusa/server/src/email/types/email-kinds.js +2 -1
  19. package/.medusa/server/src/email/types/template-data.js +8 -1
  20. package/.medusa/server/src/jobs/email-credential-expiry.js +27 -0
  21. package/.medusa/server/src/modules/documents/domain/cancellation-snapshot.js +4 -1
  22. package/.medusa/server/src/modules/documents/domain/tax-breakdown.js +103 -29
  23. package/.medusa/server/src/modules/email/domain/message-state.js +3 -1
  24. package/.medusa/server/src/modules/email/migrations/Migration20261011120000.js +20 -0
  25. package/.medusa/server/src/providers/smtp/delivery-settings.js +75 -0
  26. package/.medusa/server/src/providers/smtp/graph-transport.js +150 -0
  27. package/.medusa/server/src/providers/smtp/service.js +105 -37
  28. package/.medusa/server/src/providers/smtp/types.js +7 -1
  29. package/.medusa/server/src/shared/lib/index.js +2 -1
  30. package/.medusa/server/src/shared/lib/shipping-tax.js +12 -0
  31. package/.medusa/server/src/shop-config/build-food-shop-config.js +3 -5
  32. package/.medusa/server/src/workflows/documents/issue-invoice-after-shipment.js +44 -33
  33. package/README.md +118 -69
  34. package/dist/documents/templates/financial-document.js +22 -3
  35. package/dist/documents/types/documents.d.ts +13 -0
  36. package/dist/email/config/index.d.ts +6 -1
  37. package/dist/email/config/index.js +7 -1
  38. package/dist/email/config/notification-module.d.ts +25 -0
  39. package/dist/email/config/notification-module.js +27 -1
  40. package/dist/email/types/email-kinds.d.ts +2 -1
  41. package/dist/email/types/email-kinds.js +1 -0
  42. package/dist/email/types/template-data.d.ts +10 -0
  43. package/dist/email/types/template-data.js +7 -0
  44. package/dist/shared/lib/index.d.ts +1 -0
  45. package/dist/shared/lib/index.js +1 -0
  46. package/dist/shared/lib/shipping-tax.d.ts +8 -0
  47. package/dist/shared/lib/shipping-tax.js +11 -0
  48. package/dist/shop-config/build-food-shop-config.d.ts +1 -1
  49. package/dist/shop-config/build-food-shop-config.js +2 -4
  50. package/package.json +2 -2
@@ -4,7 +4,7 @@ import { Container, IconBadge, Heading, Text, Tooltip, IconButton, toast, Status
4
4
  import { useQuery, useQueryClient, useMutation, keepPreviousData, skipToken } from "@tanstack/react-query";
5
5
  import { emailAdminPaths } from "@hartl-services/medusa-food-supplements-contracts/paths/email";
6
6
  import Medusa from "@medusajs/js-sdk";
7
- import { ArrowLongLeft, InformationCircle, Users, TruckFast, Tag, SquaresPlus, ShoppingCart, ShieldCheck, ReceiptPercent, Envelope, DocumentText, CreditCard, CogSixTooth, ClockSolid, Buildings, BuildingStorefront, ArrowPath, ArchiveBox, ArrowUpTray, TriangleRightMini, ChevronDownMini, PaperClip, User, ArrowDownTray } from "@medusajs/icons";
7
+ import { ArrowLongLeft, InformationCircle, Users, TruckFast, Tag, SquaresPlus, ShoppingCart, ShieldCheck, ReceiptPercent, Envelope, DocumentText, CreditCard, CogSixTooth, ClockSolid, Buildings, BuildingStorefront, ArrowPath, ArchiveBox, ArrowUpTray, TriangleRightMini, ChevronDownMini, PaperPlane, PaperClip, User, ArrowDownTray } from "@medusajs/icons";
8
8
  import { Link, useLocation, useSearchParams, useParams } from "react-router-dom";
9
9
  import { pluginFeaturesAdminPaths } from "@hartl-services/medusa-food-supplements-contracts/paths/plugin-features";
10
10
  import { useRef, useEffect, useState, useMemo, Fragment as Fragment$1, useCallback, useLayoutEffect, useId, forwardRef, useImperativeHandle } from "react";
@@ -22,7 +22,8 @@ const texts = {
22
22
  },
23
23
  breadcrumbs: {
24
24
  hub: "Plugins",
25
- emailAttachments: "Anhänge"
25
+ emailAttachments: "Anhänge",
26
+ emailDelivery: "Versand"
26
27
  },
27
28
  page: {
28
29
  title: "Hartl Services Plugins",
@@ -88,8 +89,6 @@ const texts = {
88
89
  secretClearUndoLabel: (label) => `${label} nicht löschen`,
89
90
  /** Shown on a secret: the settings whose change deletes it ("A", "A oder B"). */
90
91
  invalidatedBy: (labels) => `Wird gelöscht, wenn ${labels.length > 1 ? `${labels.slice(0, -1).join(", ")} oder ${labels[labels.length - 1]}` : labels.join("")} sich ändert.`,
91
- /** Shown on the changing setting: the secrets its change deletes. */
92
- invalidates: (labels) => `Beim Ändern muss ${labels} neu eingegeben werden.`,
93
92
  invalidNumber: "Bitte eine gültige Zahl eingeben.",
94
93
  invalidColor: "Bitte eine Hex-Farbe wie #1a2b3c eingeben.",
95
94
  colorPlaceholder: "Standard",
@@ -390,9 +389,6 @@ const disabledParent = (features, feature) => {
390
389
  };
391
390
  const invalidatedByLabels = (settings, secretKey) => settings.filter((setting) => setting.invalidates.includes(secretKey)).map((setting) => setting.label);
392
391
  const isGroupDimmed = (features, requiresFeature) => requiresFeature !== null && features.find((feature) => feature.key === requiresFeature)?.effective_enabled === false;
393
- const invalidatesLabels = (settings, setting) => setting.invalidates.map(
394
- (key) => settings.find((candidate) => candidate.key === key)?.label ?? key
395
- );
396
392
  const settingInfoText = (setting) => setting.hint !== null && setting.description !== null && setting.description !== setting.hint ? setting.description : null;
397
393
  const headerInfoText = (plugin2) => plugin2.summary !== null && plugin2.description !== null && plugin2.description !== plugin2.summary ? plugin2.description : null;
398
394
  const showsSourceHint = (source) => source !== "default";
@@ -1337,7 +1333,6 @@ const SettingField = ({
1337
1333
  pluginKey,
1338
1334
  setting,
1339
1335
  invalidatedBy,
1340
- invalidates,
1341
1336
  value,
1342
1337
  invalid,
1343
1338
  disabled,
@@ -1352,7 +1347,7 @@ const SettingField = ({
1352
1347
  const info = settingInfoText(setting);
1353
1348
  const showBounds = Boolean(bounds) && showsBoundsLine(setting);
1354
1349
  const required = setting.required;
1355
- const hasHints = Boolean(hint) || clearPending || invalidatedBy.length > 0 || invalidates.length > 0 || showBounds || invalid;
1350
+ const hasHints = Boolean(hint) || clearPending || invalidatedBy.length > 0 || showBounds || invalid;
1356
1351
  const describedBy = hasHints ? hintId : void 0;
1357
1352
  const placeholder = setting.placeholder ?? void 0;
1358
1353
  return /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-y-2", children: [
@@ -1476,7 +1471,6 @@ const SettingField = ({
1476
1471
  hint && /* @__PURE__ */ jsx(Text, { size: "small", className: "text-ui-fg-subtle", children: hint }),
1477
1472
  clearPending && /* @__PURE__ */ jsx(Hint, { variant: "info", children: texts.settings.secretClearPending }),
1478
1473
  invalidatedBy.length > 0 && /* @__PURE__ */ jsx(Text, { size: "small", className: "text-ui-fg-subtle", children: texts.settings.invalidatedBy(invalidatedBy) }),
1479
- invalidates.length > 0 && /* @__PURE__ */ jsx(Text, { size: "small", className: "text-ui-fg-subtle", children: texts.settings.invalidates(invalidates.join(", ")) }),
1480
1474
  showBounds && !invalid && /* @__PURE__ */ jsx(Text, { size: "small", className: "text-ui-fg-muted", children: bounds }),
1481
1475
  invalid && /* @__PURE__ */ jsx(Hint, { variant: "error", children: setting.type === "color" ? texts.settings.invalidColor : bounds ?? texts.settings.invalidNumber })
1482
1476
  ] })
@@ -1499,7 +1493,6 @@ const PluginSettingsForm = ({ plugin: plugin2 }) => {
1499
1493
  pluginKey: plugin2.plugin_key,
1500
1494
  setting,
1501
1495
  invalidatedBy: setting.type === "secret" ? invalidatedByLabels(plugin2.settings, setting.key) : [],
1502
- invalidates: invalidatesLabels(plugin2.settings, setting),
1503
1496
  value: form.draft[setting.key],
1504
1497
  invalid: form.invalid.includes(setting.key),
1505
1498
  disabled: pending,
@@ -3522,7 +3515,7 @@ const PluginFeaturesSettingsPage = () => {
3522
3515
  const config = defineRouteConfig({
3523
3516
  label: texts.menu.label
3524
3517
  });
3525
- const handle$a = {
3518
+ const handle$b = {
3526
3519
  breadcrumb: () => texts.breadcrumbs.hub
3527
3520
  };
3528
3521
  const KINDS = [
@@ -3538,7 +3531,8 @@ const KINDS = [
3538
3531
  "auth.login_code",
3539
3532
  "affiliate.consignment_report_due",
3540
3533
  "affiliate.application_submitted.admin",
3541
- "user.invite"
3534
+ "user.invite",
3535
+ "system.credential_expiry.admin"
3542
3536
  ];
3543
3537
  const KIND_LABELS = {
3544
3538
  "order.received": "Bestellbestätigung (Kunde)",
@@ -3553,10 +3547,12 @@ const KIND_LABELS = {
3553
3547
  "auth.login_code": "Anmeldecode",
3554
3548
  "affiliate.consignment_report_due": "Affiliate-Meldung",
3555
3549
  "affiliate.application_submitted.admin": "Neue Partner-Bewerbung (Shop)",
3556
- "user.invite": "Admin-Einladung"
3550
+ "user.invite": "Admin-Einladung",
3551
+ "system.credential_expiry.admin": "Secret läuft ab (Shop)"
3557
3552
  };
3558
3553
  const EMAIL_PAGE_PATH = `${PLUGIN_HUB_PATH}/email`;
3559
3554
  const EMAIL_ATTACHMENTS_PAGE_PATH = `${EMAIL_PAGE_PATH}/attachments`;
3555
+ const EMAIL_DELIVERY_PAGE_PATH = `${EMAIL_PAGE_PATH}/delivery`;
3560
3556
  const emailAttachmentPagePath = (attachmentId) => `${EMAIL_ATTACHMENTS_PAGE_PATH}/${encodeURIComponent(attachmentId)}`;
3561
3557
  const NO_MAIL_ASSIGNED_LABEL = "keiner Mail zugeordnet";
3562
3558
  const MAIL_KIND_OPTIONS = EMAIL_ATTACHABLE_KINDS.map((kind) => ({
@@ -3814,52 +3810,61 @@ const LinkRow = ({
3814
3810
  description,
3815
3811
  to,
3816
3812
  disabled
3817
- }) => /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-4 px-6 py-3", children: [
3818
- /* @__PURE__ */ jsx(IconBadge, { children: icon }),
3819
- /* @__PURE__ */ jsxs("div", { className: "flex min-w-0 flex-1 flex-col gap-y-0.5", children: [
3820
- /* @__PURE__ */ jsx(Text, { size: "small", leading: "compact", weight: "plus", children: title }),
3821
- /* @__PURE__ */ jsx(Text, { size: "small", leading: "compact", className: "text-ui-fg-subtle", children: description })
3822
- ] }),
3823
- disabled ? /* @__PURE__ */ jsx(
3824
- Button,
3825
- {
3826
- "aria-label": texts.plugin.openLabel(title),
3827
- disabled: true,
3828
- size: "small",
3829
- variant: "secondary",
3830
- children: texts.plugin.open
3831
- }
3832
- ) : /* @__PURE__ */ jsx(Button, { asChild: true, size: "small", variant: "secondary", children: /* @__PURE__ */ jsx(Link, { "aria-label": texts.plugin.openLabel(title), to, children: texts.plugin.open }) })
3833
- ] });
3834
- const EmailManagementSection = ({ disabled }) => /* @__PURE__ */ jsxs(
3835
- AdminSection,
3813
+ }) => /* @__PURE__ */ jsxs(
3814
+ "div",
3836
3815
  {
3837
- className: `transition-opacity ${disabled ? "opacity-50" : ""}`,
3838
- title: "Verwaltung",
3816
+ className: `flex items-center gap-4 px-6 py-3 transition-opacity ${disabled ? "opacity-50" : ""}`,
3839
3817
  children: [
3840
- /* @__PURE__ */ jsx(
3841
- LinkRow,
3842
- {
3843
- description: "PDFs an Kunden-Mails, z. B. AGB.",
3844
- disabled,
3845
- icon: /* @__PURE__ */ jsx(PaperClip, {}),
3846
- title: "Anhänge",
3847
- to: EMAIL_ATTACHMENTS_PAGE_PATH
3848
- }
3849
- ),
3850
- /* @__PURE__ */ jsx(
3851
- LinkRow,
3818
+ /* @__PURE__ */ jsx(IconBadge, { children: icon }),
3819
+ /* @__PURE__ */ jsxs("div", { className: "flex min-w-0 flex-1 flex-col gap-y-0.5", children: [
3820
+ /* @__PURE__ */ jsx(Text, { size: "small", leading: "compact", weight: "plus", children: title }),
3821
+ /* @__PURE__ */ jsx(Text, { size: "small", leading: "compact", className: "text-ui-fg-subtle", children: description })
3822
+ ] }),
3823
+ disabled ? /* @__PURE__ */ jsx(
3824
+ Button,
3852
3825
  {
3853
- description: "Status und Zustellversuche.",
3854
- disabled,
3855
- icon: /* @__PURE__ */ jsx(ClockSolid, {}),
3856
- title: "E-Mail-Protokoll",
3857
- to: EMAIL_LOG_PAGE_PATH
3826
+ "aria-label": texts.plugin.openLabel(title),
3827
+ disabled: true,
3828
+ size: "small",
3829
+ variant: "secondary",
3830
+ children: texts.plugin.open
3858
3831
  }
3859
- )
3832
+ ) : /* @__PURE__ */ jsx(Button, { asChild: true, size: "small", variant: "secondary", children: /* @__PURE__ */ jsx(Link, { "aria-label": texts.plugin.openLabel(title), to, children: texts.plugin.open }) })
3860
3833
  ]
3861
3834
  }
3862
3835
  );
3836
+ const EmailManagementSection = ({ disabled }) => /* @__PURE__ */ jsxs(AdminSection, { title: "Verwaltung", children: [
3837
+ /* @__PURE__ */ jsx(
3838
+ LinkRow,
3839
+ {
3840
+ description: "SMTP oder Microsoft 365.",
3841
+ disabled: false,
3842
+ icon: /* @__PURE__ */ jsx(PaperPlane, {}),
3843
+ title: texts.breadcrumbs.emailDelivery,
3844
+ to: EMAIL_DELIVERY_PAGE_PATH
3845
+ }
3846
+ ),
3847
+ /* @__PURE__ */ jsx(
3848
+ LinkRow,
3849
+ {
3850
+ description: "PDFs an Kunden-Mails, z. B. AGB.",
3851
+ disabled,
3852
+ icon: /* @__PURE__ */ jsx(PaperClip, {}),
3853
+ title: "Anhänge",
3854
+ to: EMAIL_ATTACHMENTS_PAGE_PATH
3855
+ }
3856
+ ),
3857
+ /* @__PURE__ */ jsx(
3858
+ LinkRow,
3859
+ {
3860
+ description: "Status und Zustellversuche.",
3861
+ disabled,
3862
+ icon: /* @__PURE__ */ jsx(ClockSolid, {}),
3863
+ title: "E-Mail-Protokoll",
3864
+ to: EMAIL_LOG_PAGE_PATH
3865
+ }
3866
+ )
3867
+ ] });
3863
3868
  const EmailOverviewSections = () => {
3864
3869
  const plugin2 = usePluginFeature("email").data?.plugin;
3865
3870
  if (!plugin2) {
@@ -3871,7 +3876,7 @@ const EmailOverviewSections = () => {
3871
3876
  ] });
3872
3877
  };
3873
3878
  const EmailOverviewPage = () => /* @__PURE__ */ jsx(PluginPageShell, { pluginKey: "email", variant: "header", children: /* @__PURE__ */ jsx(EmailOverviewSections, {}) });
3874
- const handle$9 = {
3879
+ const handle$a = {
3875
3880
  breadcrumb: (_match) => /* @__PURE__ */ jsx(PluginLabelCrumb, { pluginKey: "email" })
3876
3881
  };
3877
3882
  const EMAIL_TEMPLATES_PATH = `${EMAIL_PAGE_PATH}/templates`;
@@ -3991,11 +3996,11 @@ const EmailTemplateGroupPage = ({
3991
3996
  ) })
3992
3997
  ] });
3993
3998
  };
3994
- const handle$8 = {
3999
+ const handle$9 = {
3995
4000
  breadcrumb: () => EMAIL_TEMPLATE_GROUPS.account.label
3996
4001
  };
3997
4002
  const EmailAccountMailsRoute = () => /* @__PURE__ */ jsx(PluginFeatureRoute, { pluginKey: "email", children: /* @__PURE__ */ jsx(EmailTemplateGroupPage, { group: "account" }) });
3998
- const handle$7 = {
4003
+ const handle$8 = {
3999
4004
  breadcrumb: () => EMAIL_TEMPLATE_GROUPS.affiliate.label
4000
4005
  };
4001
4006
  const EmailAffiliateMailsRoute = () => /* @__PURE__ */ jsx(PluginFeatureRoute, { pluginKey: "email", children: /* @__PURE__ */ jsx(EmailTemplateGroupPage, { group: "affiliate" }) });
@@ -4396,10 +4401,37 @@ const EmailAttachmentsPage = () => {
4396
4401
  /* @__PURE__ */ jsx(NewAttachmentModal, { onOpenChange: setNewOpen, open: newOpen })
4397
4402
  ] });
4398
4403
  };
4399
- const handle$6 = {
4404
+ const handle$7 = {
4400
4405
  breadcrumb: () => texts.breadcrumbs.emailAttachments
4401
4406
  };
4402
4407
  const EmailAttachmentsRoute = () => /* @__PURE__ */ jsx(PluginFeatureRoute, { pluginKey: "email", children: /* @__PURE__ */ jsx(EmailAttachmentsPage, {}) });
4408
+ const EmailDeliveryPage = () => {
4409
+ const query = usePluginFeature("email");
4410
+ const plugin2 = query.data?.plugin;
4411
+ return /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-y-3", children: [
4412
+ /* @__PURE__ */ jsx(
4413
+ AdminPageHeader,
4414
+ {
4415
+ badges: plugin2 && /* @__PURE__ */ jsx(StatusBadge, { color: plugin2.configured ? "green" : "orange", children: plugin2.configured ? texts.chips.configured : texts.chips.notConfigured }),
4416
+ description: "SMTP oder Microsoft 365.",
4417
+ icon: /* @__PURE__ */ jsx(PaperPlane, {}),
4418
+ title: texts.breadcrumbs.emailDelivery
4419
+ }
4420
+ ),
4421
+ plugin2 ? /* @__PURE__ */ jsx(PluginSettingsForm, { plugin: plugin2 }) : /* @__PURE__ */ jsx(Container, { className: "p-0", children: /* @__PURE__ */ jsx(
4422
+ QueryState,
4423
+ {
4424
+ error: query.error,
4425
+ errorText: texts.states.error,
4426
+ isLoading: query.isPending,
4427
+ loadingText: texts.states.loading
4428
+ }
4429
+ ) })
4430
+ ] });
4431
+ };
4432
+ const handle$6 = {
4433
+ breadcrumb: () => texts.breadcrumbs.emailDelivery
4434
+ };
4403
4435
  const LOG_PAGE_SIZE = 20;
4404
4436
  const LOG_MAX_OFFSET = 1e4;
4405
4437
  const LOG_MAX_RESOURCE_ID_LENGTH = 255;
@@ -4631,17 +4663,17 @@ const handle$5 = {
4631
4663
  breadcrumb: () => "Protokoll"
4632
4664
  };
4633
4665
  const EmailLogRoute = () => /* @__PURE__ */ jsx(PluginFeatureRoute, { pluginKey: "email", children: /* @__PURE__ */ jsx(EmailLogPage, {}) });
4666
+ const handle$4 = {
4667
+ breadcrumb: () => EMAIL_TEMPLATE_GROUPS.order.label
4668
+ };
4669
+ const EmailOrderMailsRoute = () => /* @__PURE__ */ jsx(PluginFeatureRoute, { pluginKey: "email", children: /* @__PURE__ */ jsx(EmailTemplateGroupPage, { group: "order" }) });
4634
4670
  const PluginDetailPage = () => {
4635
4671
  const { plugin_key: pluginKey = "" } = useParams();
4636
4672
  return /* @__PURE__ */ jsx(PluginPageShell, { pluginKey, variant: "header", children: /* @__PURE__ */ jsx(PluginFeatureSections, { pluginKey }) });
4637
4673
  };
4638
- const handle$4 = {
4639
- breadcrumb: (match) => /* @__PURE__ */ jsx(PluginLabelCrumb, { pluginKey: match.params.plugin_key ?? "" })
4640
- };
4641
4674
  const handle$3 = {
4642
- breadcrumb: () => EMAIL_TEMPLATE_GROUPS.order.label
4675
+ breadcrumb: (match) => /* @__PURE__ */ jsx(PluginLabelCrumb, { pluginKey: match.params.plugin_key ?? "" })
4643
4676
  };
4644
- const EmailOrderMailsRoute = () => /* @__PURE__ */ jsx(PluginFeatureRoute, { pluginKey: "email", children: /* @__PURE__ */ jsx(EmailTemplateGroupPage, { group: "order" }) });
4645
4677
  const STATUS_BADGES = {
4646
4678
  current: { label: "aktuell", color: "green" },
4647
4679
  planned: { label: "geplant", color: "blue" },
@@ -6699,26 +6731,31 @@ const routeModule = {
6699
6731
  {
6700
6732
  Component: PluginFeaturesSettingsPage,
6701
6733
  path: "/settings/hartl-services",
6702
- handle: { label: config.label, translationNs: config.translationNs, ...handle$a }
6734
+ handle: { label: config.label, translationNs: config.translationNs, ...handle$b }
6703
6735
  },
6704
6736
  {
6705
6737
  Component: EmailOverviewPage,
6706
6738
  path: "/settings/hartl-services/email",
6707
- handle: handle$9
6739
+ handle: handle$a
6708
6740
  },
6709
6741
  {
6710
6742
  Component: EmailAccountMailsRoute,
6711
6743
  path: "/settings/hartl-services/email/account",
6712
- handle: handle$8
6744
+ handle: handle$9
6713
6745
  },
6714
6746
  {
6715
6747
  Component: EmailAffiliateMailsRoute,
6716
6748
  path: "/settings/hartl-services/email/affiliate",
6717
- handle: handle$7
6749
+ handle: handle$8
6718
6750
  },
6719
6751
  {
6720
6752
  Component: EmailAttachmentsRoute,
6721
6753
  path: "/settings/hartl-services/email/attachments",
6754
+ handle: handle$7
6755
+ },
6756
+ {
6757
+ Component: EmailDeliveryPage,
6758
+ path: "/settings/hartl-services/email/delivery",
6722
6759
  handle: handle$6
6723
6760
  },
6724
6761
  {
@@ -6727,13 +6764,13 @@ const routeModule = {
6727
6764
  handle: handle$5
6728
6765
  },
6729
6766
  {
6730
- Component: PluginDetailPage,
6731
- path: "/settings/hartl-services/plugin/:plugin_key",
6767
+ Component: EmailOrderMailsRoute,
6768
+ path: "/settings/hartl-services/email/order",
6732
6769
  handle: handle$4
6733
6770
  },
6734
6771
  {
6735
- Component: EmailOrderMailsRoute,
6736
- path: "/settings/hartl-services/email/order",
6772
+ Component: PluginDetailPage,
6773
+ path: "/settings/hartl-services/plugin/:plugin_key",
6737
6774
  handle: handle$3
6738
6775
  },
6739
6776
  {
@@ -16,6 +16,12 @@ const TEST_SUBJECT_PREFIX = "[Test] ";
16
16
  /** A German Admin message for a failed test send; the provider's own text never reaches the Admin. */
17
17
  const testSendFailure = (error) => {
18
18
  const { code } = (0, failure_classification_1.classifyNotificationFailure)(error);
19
+ if (code === "not_configured") {
20
+ return new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "Der Versand ist nicht eingerichtet (E-Mail › Versand).");
21
+ }
22
+ if (code === "auth_failed") {
23
+ return new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "Die Anmeldung beim Mailanbieter ist fehlgeschlagen. Zugangsdaten unter E-Mail › Versand prüfen.");
24
+ }
19
25
  if (code === "permanent_rejection") {
20
26
  return new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "Der Mailserver hat die Adresse abgelehnt.");
21
27
  }
@@ -176,4 +182,4 @@ const POST = async (req, res) => {
176
182
  }));
177
183
  };
178
184
  exports.POST = POST;
179
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL2VtYWlsL3RlbXBsYXRlcy9ba2luZF0vc2VuZC10ZXN0L3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUlBLHFEQUFpRTtBQUtqRSwyRkFHeUU7QUFRekUsMkdBS3NFO0FBQ3RFLDJHQUlzRTtBQUN0RSxnRkFJc0Q7QUFDdEQsa0dBQW9HO0FBQ3BHLHVHQUFpRztBQUNqRyxpRUFBMEU7QUFFMUUsMkRBQStEO0FBQy9ELGtGQUkyRDtBQUUzRCxvRkFBMkU7QUFFM0UsTUFBTSxtQkFBbUIsR0FBRyxTQUFTLENBQUM7QUFFdEMsc0dBQXNHO0FBQ3RHLE1BQU0sZUFBZSxHQUFHLENBQUMsS0FBYyxFQUFlLEVBQUU7SUFDdEQsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLElBQUEsb0RBQTJCLEVBQUMsS0FBSyxDQUFDLENBQUM7SUFDcEQsSUFBSSxJQUFJLEtBQUsscUJBQXFCLEVBQUUsQ0FBQztRQUNuQyxPQUFPLElBQUksbUJBQVcsQ0FDcEIsbUJBQVcsQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUM5QiwyQ0FBMkMsQ0FDNUMsQ0FBQztJQUNKLENBQUM7SUFDRCxJQUNFLElBQUksS0FBSyxtQkFBbUI7UUFDNUIsSUFBSSxLQUFLLHFCQUFxQjtRQUM5QixJQUFJLEtBQUssc0JBQXNCLEVBQy9CLENBQUM7UUFDRCxPQUFPLElBQUksbUJBQVcsQ0FDcEIsbUJBQVcsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLEVBQ2xDLDRFQUE0RSxDQUM3RSxDQUFDO0lBQ0osQ0FBQztJQUNELE9BQU8sSUFBSSxtQkFBVyxDQUNwQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsRUFDbEMsNkNBQTZDLENBQzlDLENBQUM7QUFDSixDQUFDLENBQUM7QUFFRixNQUFNLGdCQUFnQixHQUFHLENBQUMsSUFBWSxFQUErQixFQUFFLENB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
185
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL2VtYWlsL3RlbXBsYXRlcy9ba2luZF0vc2VuZC10ZXN0L3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUlBLHFEQUFpRTtBQUtqRSwyRkFHeUU7QUFRekUsMkdBS3NFO0FBQ3RFLDJHQUlzRTtBQUN0RSxnRkFJc0Q7QUFDdEQsa0dBQW9HO0FBQ3BHLHVHQUFpRztBQUNqRyxpRUFBMEU7QUFFMUUsMkRBQStEO0FBQy9ELGtGQUkyRDtBQUUzRCxvRkFBMkU7QUFFM0UsTUFBTSxtQkFBbUIsR0FBRyxTQUFTLENBQUM7QUFFdEMsc0dBQXNHO0FBQ3RHLE1BQU0sZUFBZSxHQUFHLENBQUMsS0FBYyxFQUFlLEVBQUU7SUFDdEQsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLElBQUEsb0RBQTJCLEVBQUMsS0FBSyxDQUFDLENBQUM7SUFDcEQsSUFBSSxJQUFJLEtBQUssZ0JBQWdCLEVBQUUsQ0FBQztRQUM5QixPQUFPLElBQUksbUJBQVcsQ0FDcEIsbUJBQVcsQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUM5Qix3REFBd0QsQ0FDekQsQ0FBQztJQUNKLENBQUM7SUFDRCxJQUFJLElBQUksS0FBSyxhQUFhLEVBQUUsQ0FBQztRQUMzQixPQUFPLElBQUksbUJBQVcsQ0FDcEIsbUJBQVcsQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUM5QixpR0FBaUcsQ0FDbEcsQ0FBQztJQUNKLENBQUM7SUFDRCxJQUFJLElBQUksS0FBSyxxQkFBcUIsRUFBRSxDQUFDO1FBQ25DLE9BQU8sSUFBSSxtQkFBVyxDQUNwQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQzlCLDJDQUEyQyxDQUM1QyxDQUFDO0lBQ0osQ0FBQztJQUNELElBQ0UsSUFBSSxLQUFLLG1CQUFtQjtRQUM1QixJQUFJLEtBQUsscUJBQXFCO1FBQzlCLElBQUksS0FB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
@@ -63,7 +63,7 @@ const renderLines = (input, timeZone) => input.lines
63
63
  </td>
64
64
  <td class="number quantity">${(0, lib_1.escapeHtml)(line.quantity)}</td>
65
65
  <td class="number">${(0, html_utils_1.renderMoney)(line.unit_price)}</td>
66
- <td class="number">${(0, html_utils_1.renderMoney)(line.total)}</td>
66
+ <td class="number">${(0, html_utils_1.renderMoney)(line.subtotal)}</td>
67
67
  </tr>`)
68
68
  .join("");
69
69
  const isExemptIntraCommunitySupply = (input) => input.order.tax_compliance?.exemption_wording ===
@@ -93,11 +93,30 @@ const formatTaxRate = (rate) => new Intl.NumberFormat(format_1.DEFAULT_FORMAT_LO
93
93
  }).format(rate / 100);
94
94
  /** One totals row below the Menge/Einzelpreis columns; the amount sits under "Summe". */
95
95
  const renderTotalRow = (label, value, className) => `<tr${className ? ` class="${className}"` : ""}><td class="spacer"></td><td class="label" colspan="2">${(0, lib_1.escapeHtml)(label)}</td><td class="number">${value}</td></tr>`;
96
+ /** No discount, no row. */
97
+ const renderDiscountRow = (input) => Number(input.totals.discount_total.amount) === 0
98
+ ? ""
99
+ : renderTotalRow("Rabatt", renderDiscountTotal(input));
100
+ /**
101
+ * One row per tax rate. With several rates each row also names its net
102
+ * amount, since an invoice states the amount taxed at every rate.
103
+ */
96
104
  const renderTaxRows = (input) => {
97
105
  const { tax_breakdown: breakdown, tax_total: taxTotal } = input.totals;
106
+ const withNetAmount = breakdown.length > 1;
98
107
  const rows = breakdown.length > 0
99
108
  ? breakdown.map((entry) => ({
100
- label: `${entry.name} ${formatTaxRate(entry.rate)}`,
109
+ label: [
110
+ `${entry.name} ${formatTaxRate(entry.rate)}`,
111
+ withNetAmount && entry.taxable_amount
112
+ ? `auf ${(0, format_1.formatMoney)({
113
+ amount: entry.taxable_amount.amount,
114
+ currencyCode: entry.taxable_amount.currency_code,
115
+ })}`
116
+ : null,
117
+ ]
118
+ .filter((part) => Boolean(part))
119
+ .join(" "),
101
120
  money: entry.tax_total,
102
121
  }))
103
122
  : [{ label: "Umsatzsteuer", money: taxTotal }];
@@ -141,7 +160,7 @@ const renderFinancialDocument = (input, layout, timeZone) => {
141
160
  <tbody class="totals">
142
161
  ${renderTotalRow("Zwischensumme", (0, html_utils_1.renderMoney)(totals.subtotal))}
143
162
  ${renderTotalRow("Versand", (0, html_utils_1.renderMoney)(totals.shipping_total))}
144
- ${renderTotalRow("Rabatt", renderDiscountTotal(input))}
163
+ ${renderDiscountRow(input)}
145
164
  ${renderTaxRows(input)}
146
165
  ${renderTotalRow("Gesamt", (0, html_utils_1.renderMoney)(totals.total), "grand-total")}
147
166
  </tbody>
@@ -158,4 +177,4 @@ const renderFinancialDocument = (input, layout, timeZone) => {
158
177
  });
159
178
  };
160
179
  exports.renderFinancialDocument = renderFinancialDocument;
161
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmluYW5jaWFsLWRvY3VtZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2RvY3VtZW50cy90ZW1wbGF0ZXMvZmluYW5jaWFsLWRvY3VtZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQU1BLHFDQUFvRTtBQUNwRSwwQ0FBNkM7QUFDN0MsNkNBQWdFO0FBQ2hFLHFDQUFpRTtBQU9qRSxNQUFNLFlBQVksR0FBRztJQUNuQixZQUFZLEVBQUU7UUFDWixNQUFNLEVBQUUsY0FBYztRQUN0QixLQUFLLEVBQUUsZ0JBQWdCO0tBQ3hCO0lBQ0QsV0FBVyxFQUFFO1FBQ1gsTUFBTSxFQUFFLGtCQUFrQjtRQUMxQixLQUFLLEVBQUUsWUFBWTtLQUNwQjtJQUNELE9BQU8sRUFBRTtRQUNQLE1BQU0sRUFBRSxpQkFBaUI7UUFDekIsS0FBSyxFQUFFLFVBQVU7S0FDbEI7Q0FJRixDQUFBO0FBRUQsTUFBTSxhQUFhLEdBQUcsQ0FBQyxLQUE0QixFQUFVLEVBQUU7SUFDN0QsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUE7SUFDM0MsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2IsT0FBTyxJQUFBLGdCQUFVLEVBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUN0QyxDQUFDO0lBRUQsT0FBTztRQUNMLE9BQU8sQ0FBQyxPQUFPO1FBQ2YsQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxTQUFTLENBQUM7YUFDcEMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFrQixFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQy9DLElBQUksQ0FBQyxHQUFHLENBQUM7UUFDWixPQUFPLENBQUMsU0FBUztRQUNqQixPQUFPLENBQUMsU0FBUztRQUNqQixDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQzthQUNo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
180
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmluYW5jaWFsLWRvY3VtZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2RvY3VtZW50cy90ZW1wbGF0ZXMvZmluYW5jaWFsLWRvY3VtZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQU1BLHFDQUlpQjtBQUNqQiwwQ0FBNkM7QUFDN0MsNkNBQWdFO0FBQ2hFLHFDQUFpRTtBQU9qRSxNQUFNLFlBQVksR0FBRztJQUNuQixZQUFZLEVBQUU7UUFDWixNQUFNLEVBQUUsY0FBYztRQUN0QixLQUFLLEVBQUUsZ0JBQWdCO0tBQ3hCO0lBQ0QsV0FBVyxFQUFFO1FBQ1gsTUFBTSxFQUFFLGtCQUFrQjtRQUMxQixLQUFLLEVBQUUsWUFBWTtLQUNwQjtJQUNELE9BQU8sRUFBRTtRQUNQLE1BQU0sRUFBRSxpQkFBaUI7UUFDekIsS0FBSyxFQUFFLFVBQVU7S0FDbEI7Q0FJRixDQUFBO0FBRUQsTUFBTSxhQUFhLEdBQUcsQ0FBQyxLQUE0QixFQUFVLEVBQUU7SUFDN0QsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUE7SUFDM0MsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2IsT0FBTyxJQUFBLGdCQUFVLEVBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUN0QyxDQUFDO0lBRUQsT0FBTztRQUNMLE9BQU8sQ0FBQyxPQUFPO1FBQ2YsQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxTQUFTLENBQUM7YUFDcEMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFrQixFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQy9DLElBQUksQ0FBQyxHQUFHLENBQUM7UUFDWixPQUFPLENBQUMsU0FBUztRQUNqQixPQUFPLENBQUMsU0FBUztRQUNqQixDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQzthQUNo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
@@ -0,0 +1,77 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.warnCredentialExpiry = exports.isCredentialExpiryDue = exports.calendarDateIn = exports.CREDENTIAL_EXPIRY_WARNING_DAYS = void 0;
4
+ const utils_1 = require("@medusajs/framework/utils");
5
+ const settings_1 = require("../../public/settings");
6
+ const shop_master_data_1 = require("../../public/shop-master-data");
7
+ const lib_1 = require("../../shared/lib");
8
+ const email_1 = require("../../modules/email");
9
+ const dispatch_email_message_1 = require("../../workflows/email/dispatch-email-message");
10
+ const business_keys_1 = require("../domain/business-keys");
11
+ const plugin_features_1 = require("../plugin-features");
12
+ /** The warning goes out this many days before the secret expires. */
13
+ exports.CREDENTIAL_EXPIRY_WARNING_DAYS = 7;
14
+ const DAY_MS = 86_400_000;
15
+ /** `YYYY-MM-DD` of `now` in `timeZone`. */
16
+ const calendarDateIn = (now, timeZone) => new Intl.DateTimeFormat("en-CA", {
17
+ day: "2-digit",
18
+ month: "2-digit",
19
+ timeZone,
20
+ year: "numeric",
21
+ }).format(now);
22
+ exports.calendarDateIn = calendarDateIn;
23
+ /** From seven days before the expiry up to the expiry day itself. */
24
+ const isCredentialExpiryDue = (expiresOn, today) => {
25
+ const days = (Date.parse(`${expiresOn}T00:00:00Z`) - Date.parse(`${today}T00:00:00Z`)) /
26
+ DAY_MS;
27
+ return days >= 0 && days <= exports.CREDENTIAL_EXPIRY_WARNING_DAYS;
28
+ };
29
+ exports.isCredentialExpiryDue = isCredentialExpiryDue;
30
+ /**
31
+ * Warns the shop (e-mail of the Shop-Stammdaten) that the Microsoft 365
32
+ * client secret expires soon. The business key holds client id and expiry
33
+ * date, so each secret is warned about once; a new date warns again.
34
+ */
35
+ const warnCredentialExpiry = async (container, now = new Date()) => {
36
+ const { values } = await (0, settings_1.getPluginSettings)(container, plugin_features_1.emailPluginFeatures);
37
+ const expiresOn = values.microsoft_client_secret_expires_on;
38
+ const clientId = values.microsoft_client_id;
39
+ if (values.provider !== "microsoft365" ||
40
+ !(0, lib_1.isCalendarDate)(expiresOn) ||
41
+ typeof clientId !== "string") {
42
+ return "not_due";
43
+ }
44
+ const email = container.resolve(email_1.EMAIL_MODULE);
45
+ const timeZone = email.getDispatchConfiguration().timeZone ?? "Europe/Vienna";
46
+ if (!(0, exports.isCredentialExpiryDue)(expiresOn, (0, exports.calendarDateIn)(now, timeZone))) {
47
+ return "not_due";
48
+ }
49
+ const recipient = (await (0, shop_master_data_1.getShopMasterData)(container)).values.email;
50
+ if (!recipient) {
51
+ container
52
+ .resolve(utils_1.ContainerRegistrationKeys.LOGGER)
53
+ .warn("email: the client secret expires soon, but the Shop-Stammdaten have no e-mail to warn");
54
+ return "no_recipient";
55
+ }
56
+ const message = await email.upsertMessageFact({
57
+ kind: "system.credential_expiry.admin",
58
+ business_key: (0, business_keys_1.credentialExpiryBusinessKey)(clientId, expiresOn),
59
+ resource_type: "email_provider",
60
+ resource_id: clientId,
61
+ recipient,
62
+ required_facts: ["due"],
63
+ fact: "due",
64
+ template_data: {
65
+ provider: "microsoft365",
66
+ client_id: clientId,
67
+ expires_on: expiresOn,
68
+ },
69
+ suppression_code: null,
70
+ });
71
+ await (0, dispatch_email_message_1.dispatchEmailMessageWorkflow)(container).run({
72
+ input: { message_id: message.id },
73
+ });
74
+ return "dispatched";
75
+ };
76
+ exports.warnCredentialExpiry = warnCredentialExpiry;
77
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2Fybi1jcmVkZW50aWFsLWV4cGlyeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9lbWFpbC9hcHBsaWNhdGlvbi93YXJuLWNyZWRlbnRpYWwtZXhwaXJ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLHFEQUFzRTtBQUV0RSxvREFBMEQ7QUFDMUQsb0VBQWtFO0FBQ2xFLDBDQUFrRDtBQUNsRCwrQ0FBbUQ7QUFFbkQseUZBQTRGO0FBQzVGLDJEQUFzRTtBQUN0RSx3REFBeUQ7QUFFekQscUVBQXFFO0FBQ3hELFFBQUEsOEJBQThCLEdBQUcsQ0FBQyxDQUFDO0FBRWhELE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQztBQUUxQiwyQ0FBMkM7QUFDcEMsTUFBTSxjQUFjLEdBQUcsQ0FBQyxHQUFTLEVBQUUsUUFBZ0IsRUFBVSxFQUFFLENBQ3BFLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUU7SUFDL0IsR0FBRyxFQUFFLFNBQVM7SUFDZCxLQUFLLEVBQUUsU0FBUztJQUNoQixRQUFRO0lBQ1IsSUFBSSxFQUFFLFNBQVM7Q0FDaEIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztBQU5KLFFBQUEsY0FBYyxrQkFNVjtBQUVqQixxRUFBcUU7QUFDOUQsTUFBTSxxQkFBcUIsR0FBRyxDQUNuQyxTQUFpQixFQUNqQixLQUFhLEVBQ0osRUFBRTtJQUNYLE1BQU0sSUFBSSxHQUNSLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLFNBQVMsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEtBQUssWUFBWSxDQUFDLENBQUM7UUFDekUsTUFBTSxDQUFDO0lBQ1QsT0FBTyxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxzQ0FBOEIsQ0FBQztBQUM3RCxDQUFDLENBQUM7QUFSVyxRQUFBLHFCQUFxQix5QkFRaEM7QUFPRjs7OztHQUlHO0FBQ0ksTUFBTSxvQkFBb0IsR0FBRyxLQUFLLEVBQ3ZDLFNBQTBCLEVBQzFCLE1BQVksSUFBSSxJQUFJLEVBQUUsRUFDa0IsRUFBRTtJQUMxQyxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsTUFBTSxJQUFBLDRCQUFpQixFQUFDLFNBQVMsRUFBRSxxQ0FBbUIsQ0FBQyxDQUFDO0lBQzNFLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxrQ0FBa0MsQ0FBQztJQUM1RCxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsbUJBQW1CLENBQUM7SUFDNUMsSUFDRSxNQUFNLENBQUMsUUFBUSxLQUFLLGNBQWM7UUFDbEMsQ0FBQyxJQUFBLG9CQUFjLEVBQUMsU0FBUyxDQUFDO1FBQzFCLE9BQU8sUUFBUSxLQUFLLFFBQVEsRUFDNUIsQ0FBQztRQUNELE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFRCxNQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFxQixvQkFBWSxDQUFDLENBQUM7SUFDbEUsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLHdCQUF3QixFQUFFLENBQUMsUUFBUSxJQUFJLGVBQWUsQ0FBQztJQUM5RSxJQUFJLENBQUMsSUFBQSw2QkFBcUIsRUFBQyxTQUFTLEVBQUUsSUFBQSxzQkFBYyxFQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDckUsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVELE1BQU0sU0FBUyxHQUFHLENBQUMsTUFBTSxJQUFBLG9DQUFpQixFQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztJQUNwRSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDZixTQUFTO2FBQ04sT0FBTyxDQUFTLGlDQUF5QixDQUFDLE1BQU0sQ0FBQzthQUNqRCxJQUFJLENBQ0gsdUZBQXVGLENBQ3hGLENBQUM7UUFDSixPQUFPLGNBQWMsQ0FBQztJQUN4QixDQUFDO0lBRUQsTUFBTSxPQUFPLEdBQUcsTUFBTSxLQUFLLENBQUMsaUJBQWlCLENBQUM7UUFDNUMsSUFBSSxFQUFFLGdDQUFnQztRQUN0QyxZQUFZLEVBQUUsSUFBQSwyQ0FBMkIsRUFBQyxRQUFRLEVBQUUsU0FBUyxDQUFDO1FBQzlELGFBQWEsRUFBRSxnQkFBZ0I7UUFDL0IsV0FBVyxFQUFFLFFBQVE7UUFDckIsU0FBUztRQUNULGNBQWMsRUFBRSxDQUFDLEtBQUssQ0FBQztRQUN2QixJQUFJLEVBQUUsS0FBSztRQUNYLGFBQWEsRUFBRTtZQUNiLFFBQVEsRUFBRSxjQUFjO1lBQ3hCLFNBQVMsRUFBRSxRQUFRO1lBQ25CLFVBQVUsRUFBRSxTQUFTO1NBQ3RCO1FBQ0QsZ0JBQWdCLEVBQUUsSUFBSTtLQUN2QixDQUFDLENBQUM7SUFDSCxNQUFNLElBQUEscURBQTRCLEVBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxDQUFDO1FBQ2hELEtBQUssRUFBRSxFQUFFLFVBQVUsRUFBRSxPQUFPLENBQUMsRUFBRSxFQUFFO0tBQ2xDLENBQUMsQ0FBQztJQUNILE9BQU8sWUFBWSxDQUFDO0FBQ3RCLENBQUMsQ0FBQztBQWxEVyxRQUFBLG9CQUFvQix3QkFrRC9CIn0=
@@ -1,12 +1,14 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.resolveSmtp = exports.SMTP_BUILD_PLACEHOLDERS = exports.SMTP_ENVIRONMENT_VARIABLES = exports.defineShopEmailConfiguration = exports.createSmtpNotificationModuleConfig = void 0;
3
+ exports.resolveSmtp = exports.SMTP_BUILD_PLACEHOLDERS = exports.SMTP_ENVIRONMENT_VARIABLES = exports.defineShopEmailConfiguration = exports.createSmtpNotificationModuleConfig = exports.createEmailNotificationModuleConfig = void 0;
4
4
  const config_1 = require("../../public/config");
5
5
  const sender_1 = require("../domain/sender");
6
6
  var notification_module_1 = require("./notification-module");
7
+ Object.defineProperty(exports, "createEmailNotificationModuleConfig", { enumerable: true, get: function () { return notification_module_1.createEmailNotificationModuleConfig; } });
7
8
  Object.defineProperty(exports, "createSmtpNotificationModuleConfig", { enumerable: true, get: function () { return notification_module_1.createSmtpNotificationModuleConfig; } });
8
9
  const defineShopEmailConfiguration = (configuration) => configuration;
9
10
  exports.defineShopEmailConfiguration = defineShopEmailConfiguration;
11
+ /** @deprecated The provider is set in the Admin (E-Mail > Versand). */
10
12
  exports.SMTP_ENVIRONMENT_VARIABLES = [
11
13
  "SMTP_HOST",
12
14
  "SMTP_PORT",
@@ -17,6 +19,8 @@ exports.SMTP_ENVIRONMENT_VARIABLES = [
17
19
  "SMTP_REQUIRE_TLS",
18
20
  ];
19
21
  /**
22
+ * @deprecated The provider is set in the Admin (E-Mail > Versand).
23
+ *
20
24
  * `medusa build` loads the configuration without deployment secrets. These
21
25
  * placeholders only satisfy the required-variable checks of a build; they
22
26
  * never reach a running server.
@@ -31,6 +35,8 @@ exports.SMTP_BUILD_PLACEHOLDERS = {
31
35
  SMTP_USER: "build-user",
32
36
  };
33
37
  /**
38
+ * @deprecated The provider is set in the Admin (E-Mail > Versand).
39
+ *
34
40
  * Validates the SMTP environment values and returns the transport
35
41
  * configuration. `allowInsecure` permits plain SMTP for development, tests
36
42
  * and builds; otherwise `SMTP_SECURE` or `SMTP_REQUIRE_TLS` must be `true`.
@@ -60,4 +66,4 @@ const resolveSmtp = (values, allowInsecure) => {
60
66
  return smtp;
61
67
  };
62
68
  exports.resolveSmtp = resolveSmtp;
63
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvZW1haWwvY29uZmlnL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLGdEQUE2RTtBQUM3RSw2Q0FBdUU7QUFNdkUsNkRBQTJFO0FBQWxFLHlJQUFBLGtDQUFrQyxPQUFBO0FBRXBDLE1BQU0sNEJBQTRCLEdBQUcsQ0FHMUMsYUFBNEIsRUFDYixFQUFFLENBQUMsYUFBYSxDQUFDO0FBSnJCLFFBQUEsNEJBQTRCLGdDQUlQO0FBT3JCLFFBQUEsMEJBQTBCLEdBQUc7SUFDeEMsV0FBVztJQUNYLFdBQVc7SUFDWCxhQUFhO0lBQ2IsV0FBVztJQUNYLGVBQWU7SUFDZixXQUFXO0lBQ1gsa0JBQWtCO0NBQ1YsQ0FBQztBQUVYOzs7O0dBSUc7QUFDVSxRQUFBLHVCQUF1QixHQUFxQztJQUN2RSxTQUFTLEVBQUUsNkJBQTZCO0lBQ3hDLFNBQVMsRUFBRSxvQkFBb0I7SUFDL0IsYUFBYSxFQUFFLGdCQUFnQjtJQUMvQixTQUFTLEVBQUUsTUFBTTtJQUNqQixnQkFBZ0IsRUFBRSxPQUFPO0lBQ3pCLFdBQVcsRUFBRSxPQUFPO0lBQ3BCLFNBQVMsRUFBRSxZQUFZO0NBQ3hCLENBQUM7QUFFRjs7OztHQUlHO0FBQ0ksTUFBTSxXQUFXLEdBQUcsQ0FDekIsTUFBNkUsRUFDN0UsYUFBc0IsRUFDSyxFQUFFO0lBQzdCLE1BQU0sSUFBSSxHQUFHLElBQUEsMkJBQWtCLEVBQUMsTUFBTSxFQUFFLFdBQVcsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDL0QsSUFBSSxJQUFJLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDdkIsTUFBTSxJQUFJLFNBQVMsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFDRCxnRUFBZ0U7SUFDaEUsTUFBTSxNQUFNLEdBQUcsSUFBQSx5QkFBZ0IsRUFBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDbEQsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ1osTUFBTSxJQUFJLFNBQVMsQ0FDakIscUVBQXFFLENBQ3RFLENBQUM7SUFDSixDQUFDO0lBRUQsTUFBTSxJQUFJLEdBQUc7UUFDWCxJQUFJLEVBQUUsSUFBQSwwQkFBaUIsRUFBQyxNQUFNLENBQUM7UUFDL0IsSUFBSSxFQUFFLE1BQU0sQ0FBQyxTQUFTO1FBQ3RCLFFBQVEsRUFBRSxNQUFNLENBQUMsYUFBYTtRQUM5QixJQUFJO1FBQ0osVUFBVSxFQUFFLElBQUEsMkJBQWtCLEVBQUMsTUFBTSxFQUFFLGtCQUFrQixFQUFFLEtBQUssQ0FBQztRQUNqRSxNQUFNLEVBQUUsSUFBQSwyQkFBa0IsRUFBQyxNQUFNLEVBQUUsYUFBYSxFQUFFLEtBQUssQ0FBQztRQUN4RCxJQUFJLEVBQUUsTUFBTSxDQUFDLFNBQVM7S0FDdkIsQ0FBQztJQUNGLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3ZELE1BQU0sSUFBSSxTQUFTLENBQ2pCLHVGQUF1RixDQUN4RixDQUFDO0lBQ0osQ0FBQztJQUNELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQyxDQUFDO0FBL0JXLFFBQUEsV0FBVyxlQStCdEIifQ==
69
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvZW1haWwvY29uZmlnL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLGdEQUE2RTtBQUM3RSw2Q0FBdUU7QUFNdkUsNkRBRytCO0FBRjdCLDBJQUFBLG1DQUFtQyxPQUFBO0FBQ25DLHlJQUFBLGtDQUFrQyxPQUFBO0FBRzdCLE1BQU0sNEJBQTRCLEdBQUcsQ0FHMUMsYUFBNEIsRUFDYixFQUFFLENBQUMsYUFBYSxDQUFDO0FBSnJCLFFBQUEsNEJBQTRCLGdDQUlQO0FBT2xDLHVFQUF1RTtBQUMxRCxRQUFBLDBCQUEwQixHQUFHO0lBQ3hDLFdBQVc7SUFDWCxXQUFXO0lBQ1gsYUFBYTtJQUNiLFdBQVc7SUFDWCxlQUFlO0lBQ2YsV0FBVztJQUNYLGtCQUFrQjtDQUNWLENBQUM7QUFFWDs7Ozs7O0dBTUc7QUFDVSxRQUFBLHVCQUF1QixHQUFxQztJQUN2RSxTQUFTLEVBQUUsNkJBQTZCO0lBQ3hDLFNBQVMsRUFBRSxvQkFBb0I7SUFDL0IsYUFBYSxFQUFFLGdCQUFnQjtJQUMvQixTQUFTLEVBQUUsTUFBTTtJQUNqQixnQkFBZ0IsRUFBRSxPQUFPO0lBQ3pCLFdBQVcsRUFBRSxPQUFPO0lBQ3BCLFNBQVMsRUFBRSxZQUFZO0NBQ3hCLENBQUM7QUFFRjs7Ozs7O0dBTUc7QUFDSSxNQUFNLFdBQVcsR0FBRyxDQUN6QixNQUE2RSxFQUM3RSxhQUFzQixFQUNLLEVBQUU7SUFDN0IsTUFBTSxJQUFJLEdBQUcsSUFBQSwyQkFBa0IsRUFBQyxNQUFNLEVBQUUsV0FBVyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUMvRCxJQUFJLElBQUksS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUN2QixNQUFNLElBQUksU0FBUyxDQUFDLHdCQUF3QixDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUNELGdFQUFnRTtJQUNoRSxNQUFNLE1BQU0sR0FBRyxJQUFBLHlCQUFnQixFQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNsRCxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDWixNQUFNLElBQUksU0FBUyxDQUNqQixxRUFBcUUsQ0FDdEUsQ0FBQztJQUNKLENBQUM7SUFFRCxNQUFNLElBQUksR0FBRztRQUNYLElBQUksRUFBRSxJQUFBLDBCQUFpQixFQUFDLE1BQU0sQ0FBQztRQUMvQixJQUFJLEVBQUUsTUFBTSxDQUFDLFNBQVM7UUFDdEIsUUFBUSxFQUFFLE1BQU0sQ0FBQyxhQUFhO1FBQzlCLElBQUk7UUFDSixVQUFVLEVBQUUsSUFBQSwyQkFBa0IsRUFBQyxNQUFNLEVBQUUsa0JBQWtCLEVBQUUsS0FBSyxDQUFDO1FBQ2pFLE1BQU0sRUFBRSxJQUFBLDJCQUFrQixFQUFDLE1BQU0sRUFBRSxhQUFhLEVBQUUsS0FBSyxDQUFDO1FBQ3hELElBQUksRUFBRSxNQUFNLENBQUMsU0FBUztLQUN2QixDQUFDO0lBQ0YsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDdkQsTUFBTSxJQUFJLFNBQVMsQ0FDakIsdUZBQXVGLENBQ3hGLENBQUM7SUFDSixDQUFDO0lBQ0QsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDLENBQUM7QUEvQlcsUUFBQSxXQUFXLGVBK0J0QiJ9