@hartl-services/medusa-base 2.8.0 → 2.9.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 (38) 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/email/application/warn-credential-expiry.js +77 -0
  10. package/.medusa/server/src/email/config/index.js +8 -2
  11. package/.medusa/server/src/email/config/notification-module.js +28 -2
  12. package/.medusa/server/src/email/domain/business-keys.js +5 -2
  13. package/.medusa/server/src/email/domain/failure-classification.js +9 -1
  14. package/.medusa/server/src/email/plugin-features.js +123 -1
  15. package/.medusa/server/src/email/rendering/default-templates.js +16 -1
  16. package/.medusa/server/src/email/rendering/render-email.js +2 -1
  17. package/.medusa/server/src/email/types/email-kinds.js +2 -1
  18. package/.medusa/server/src/email/types/template-data.js +8 -1
  19. package/.medusa/server/src/jobs/email-credential-expiry.js +27 -0
  20. package/.medusa/server/src/modules/email/domain/message-state.js +3 -1
  21. package/.medusa/server/src/modules/email/migrations/Migration20261011120000.js +20 -0
  22. package/.medusa/server/src/providers/smtp/delivery-settings.js +75 -0
  23. package/.medusa/server/src/providers/smtp/graph-transport.js +150 -0
  24. package/.medusa/server/src/providers/smtp/service.js +105 -37
  25. package/.medusa/server/src/providers/smtp/types.js +7 -1
  26. package/.medusa/server/src/shop-config/build-food-shop-config.js +3 -5
  27. package/README.md +100 -65
  28. package/dist/email/config/index.d.ts +6 -1
  29. package/dist/email/config/index.js +7 -1
  30. package/dist/email/config/notification-module.d.ts +25 -0
  31. package/dist/email/config/notification-module.js +27 -1
  32. package/dist/email/types/email-kinds.d.ts +2 -1
  33. package/dist/email/types/email-kinds.js +1 -0
  34. package/dist/email/types/template-data.d.ts +10 -0
  35. package/dist/email/types/template-data.js +7 -0
  36. package/dist/shop-config/build-food-shop-config.d.ts +1 -1
  37. package/dist/shop-config/build-food-shop-config.js +2 -4
  38. 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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
@@ -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
@@ -1,6 +1,32 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createSmtpNotificationModuleConfig = void 0;
3
+ exports.createSmtpNotificationModuleConfig = exports.createEmailNotificationModuleConfig = void 0;
4
+ /**
5
+ * The Notification Module with the shop's mail provider. Provider and
6
+ * credentials are set in the Admin (E-Mail > Versand); `allowInsecure`
7
+ * (development and tests only) permits SMTP without encryption there.
8
+ */
9
+ const createEmailNotificationModuleConfig = (options = {}) => ({
10
+ resolve: "@medusajs/medusa/notification",
11
+ options: {
12
+ providers: [
13
+ {
14
+ id: "smtp",
15
+ options: {
16
+ allowInsecure: options.allowInsecure === true,
17
+ channels: ["email"],
18
+ },
19
+ resolve: "@hartl-services/medusa-base/providers/smtp",
20
+ },
21
+ ],
22
+ },
23
+ });
24
+ exports.createEmailNotificationModuleConfig = createEmailNotificationModuleConfig;
25
+ /**
26
+ * @deprecated Use `createEmailNotificationModuleConfig` and set the provider
27
+ * in the Admin (E-Mail > Versand). The SMTP values given here only fill the
28
+ * SMTP settings that are not stored in the Admin.
29
+ */
4
30
  const createSmtpNotificationModuleConfig = (smtp) => ({
5
31
  resolve: "@medusajs/medusa/notification",
6
32
  options: {
@@ -17,4 +43,4 @@ const createSmtpNotificationModuleConfig = (smtp) => ({
17
43
  },
18
44
  });
19
45
  exports.createSmtpNotificationModuleConfig = createSmtpNotificationModuleConfig;
20
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9uLW1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9lbWFpbC9jb25maWcvbm90aWZpY2F0aW9uLW1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFFTyxNQUFNLGtDQUFrQyxHQUFHLENBQ2hELElBQStCLEVBQy9CLEVBQUUsQ0FBQyxDQUFDO0lBQ0osT0FBTyxFQUFFLCtCQUErQjtJQUN4QyxPQUFPLEVBQUU7UUFDUCxTQUFTLEVBQUU7WUFDVDtnQkFDRSxFQUFFLEVBQUUsTUFBTTtnQkFDVixPQUFPLEVBQUU7b0JBQ1AsUUFBUSxFQUFFLENBQUMsT0FBTyxDQUFDO29CQUNuQixJQUFJO2lCQUNMO2dCQUNELE9BQU8sRUFBRSw0Q0FBNEM7YUFDdEQ7U0FDRjtLQUNGO0NBQ0YsQ0FBQyxDQUFDO0FBaEJVLFFBQUEsa0NBQWtDLHNDQWdCNUMifQ==
46
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9uLW1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9lbWFpbC9jb25maWcvbm90aWZpY2F0aW9uLW1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFFQTs7OztHQUlHO0FBQ0ksTUFBTSxtQ0FBbUMsR0FBRyxDQUNqRCxVQUFpRCxFQUFFLEVBQ25ELEVBQUUsQ0FBQyxDQUFDO0lBQ0osT0FBTyxFQUFFLCtCQUErQjtJQUN4QyxPQUFPLEVBQUU7UUFDUCxTQUFTLEVBQUU7WUFDVDtnQkFDRSxFQUFFLEVBQUUsTUFBTTtnQkFDVixPQUFPLEVBQUU7b0JBQ1AsYUFBYSxFQUFFLE9BQU8sQ0FBQyxhQUFhLEtBQUssSUFBSTtvQkFDN0MsUUFBUSxFQUFFLENBQUMsT0FBTyxDQUFDO2lCQUNwQjtnQkFDRCxPQUFPLEVBQUUsNENBQTRDO2FBQ3REO1NBQ0Y7S0FDRjtDQUNGLENBQUMsQ0FBQztBQWhCVSxRQUFBLG1DQUFtQyx1Q0FnQjdDO0FBRUg7Ozs7R0FJRztBQUNJLE1BQU0sa0NBQWtDLEdBQUcsQ0FDaEQsSUFBK0IsRUFDL0IsRUFBRSxDQUFDLENBQUM7SUFDSixPQUFPLEVBQUUsK0JBQStCO0lBQ3hDLE9BQU8sRUFBRTtRQUNQLFNBQVMsRUFBRTtZQUNUO2dCQUNFLEVBQUUsRUFBRSxNQUFNO2dCQUNWLE9BQU8sRUFBRTtvQkFDUCxRQUFRLEVBQUUsQ0FBQyxPQUFPLENBQUM7b0JBQ25CLElBQUk7aUJBQ0w7Z0JBQ0QsT0FBTyxFQUFFLDRDQUE0QzthQUN0RDtTQUNGO0tBQ0Y7Q0FDRixDQUFDLENBQUM7QUFoQlUsUUFBQSxrQ0FBa0Msc0NBZ0I1QyJ9
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.loginCodeBusinessKey = exports.adminResendBusinessKey = exports.affiliateApplicationSubmittedAdminBusinessKey = exports.affiliateConsignmentBusinessKey = exports.userInviteBusinessKey = exports.customerVerificationBusinessKey = exports.passwordResetBusinessKey = exports.orderRefundedBusinessKey = exports.returnReceivedBusinessKey = exports.returnRequestedBusinessKey = exports.orderCanceledBusinessKey = exports.orderShippedBusinessKey = exports.orderReceivedAdminBusinessKey = exports.orderReceivedBusinessKey = void 0;
3
+ exports.credentialExpiryBusinessKey = exports.loginCodeBusinessKey = exports.adminResendBusinessKey = exports.affiliateApplicationSubmittedAdminBusinessKey = exports.affiliateConsignmentBusinessKey = exports.userInviteBusinessKey = exports.customerVerificationBusinessKey = exports.passwordResetBusinessKey = exports.orderRefundedBusinessKey = exports.returnReceivedBusinessKey = exports.returnRequestedBusinessKey = exports.orderCanceledBusinessKey = exports.orderShippedBusinessKey = exports.orderReceivedAdminBusinessKey = exports.orderReceivedBusinessKey = void 0;
4
4
  const lib_1 = require("../../shared/lib");
5
5
  const affiliate_1 = require("@hartl-services/medusa-food-supplements-contracts/events/affiliate");
6
6
  const normalizedIdentifier = (value, name) => {
@@ -72,4 +72,7 @@ const loginCodeBusinessKey = (issueId) => {
72
72
  return `login-code:${normalized}`;
73
73
  };
74
74
  exports.loginCodeBusinessKey = loginCodeBusinessKey;
75
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVzaW5lc3Mta2V5cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9lbWFpbC9kb21haW4vYnVzaW5lc3Mta2V5cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwwQ0FBNkM7QUFDN0Msa0dBQTJIO0FBRTNILE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxLQUFhLEVBQUUsSUFBWSxFQUFVLEVBQUU7SUFDbkUsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2hDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNoQixNQUFNLElBQUksS0FBSyxDQUFDLEdBQUcsSUFBSSxxQkFBcUIsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFDRCxPQUFPLFVBQVUsQ0FBQztBQUNwQixDQUFDLENBQUM7QUFFSyxNQUFNLHdCQUF3QixHQUFHLENBQUMsT0FBZSxFQUFVLEVBQUUsQ0FDbEUsa0JBQWtCLG9CQUFvQixDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsRUFBRSxDQUFDO0FBRGxELFFBQUEsd0JBQXdCLDRCQUMwQjtBQUV4RCxNQUFNLDZCQUE2QixHQUFHLENBQUMsT0FBZSxFQUFVLEVBQUUsQ0FDdkUsd0JBQXdCLG9CQUFvQixDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsRUFBRSxDQUFDO0FBRHhELFFBQUEsNkJBQTZCLGlDQUMyQjtBQUU5RCxNQUFNLHVCQUF1QixHQUFHLENBQUMsYUFBcUIsRUFBVSxFQUFFLENBQ3ZFLGlCQUFpQixvQkFBb0IsQ0FBQyxhQUFhLEVBQUUsZUFBZSxDQUFDLEVBQUUsQ0FBQztBQUQ3RCxRQUFBLHVCQUF1QiwyQkFDc0M7QUFFbkUsTUFBTSx3QkFBd0IsR0FBRyxDQUFDLE9BQWUsRUFBVSxFQUFFLENBQ2xFLGtCQUFrQixvQkFBb0IsQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLEVBQUUsQ0FBQztBQURsRCxRQUFBLHdCQUF3Qiw0QkFDMEI7QUFFeEQsTUFB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
75
+ /** One warning per app registration and expiry date. */
76
+ const credentialExpiryBusinessKey = (clientId, expiresOn) => `credential-expiry:${normalizedIdentifier(clientId, "clientId")}:${normalizedIdentifier(expiresOn, "expiresOn")}`;
77
+ exports.credentialExpiryBusinessKey = credentialExpiryBusinessKey;
78
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVzaW5lc3Mta2V5cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9lbWFpbC9kb21haW4vYnVzaW5lc3Mta2V5cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwwQ0FBNkM7QUFDN0Msa0dBQTJIO0FBRTNILE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxLQUFhLEVBQUUsSUFBWSxFQUFVLEVBQUU7SUFDbkUsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2hDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNoQixNQUFNLElBQUksS0FBSyxDQUFDLEdBQUcsSUFBSSxxQkFBcUIsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFDRCxPQUFPLFVBQVUsQ0FBQztBQUNwQixDQUFDLENBQUM7QUFFSyxNQUFNLHdCQUF3QixHQUFHLENBQUMsT0FBZSxFQUFVLEVBQUUsQ0FDbEUsa0JBQWtCLG9CQUFvQixDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsRUFBRSxDQUFDO0FBRGxELFFBQUEsd0JBQXdCLDRCQUMwQjtBQUV4RCxNQUFNLDZCQUE2QixHQUFHLENBQUMsT0FBZSxFQUFVLEVBQUUsQ0FDdkUsd0JBQXdCLG9CQUFvQixDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsRUFBRSxDQUFDO0FBRHhELFFBQUEsNkJBQTZCLGlDQUMyQjtBQUU5RCxNQUFNLHVCQUF1QixHQUFHLENBQUMsYUFBcUIsRUFBVSxFQUFFLENBQ3ZFLGlCQUFpQixvQkFBb0IsQ0FBQyxhQUFhLEVBQUUsZUFBZSxDQUFDLEVBQUUsQ0FBQztBQUQ3RCxRQUFBLHVCQUF1QiwyQkFDc0M7QUFFbkUsTUFBTSx3QkFBd0IsR0FBRyxDQUFDLE9BQWUsRUFBVSxFQUFFLENBQ2xFLGtCQUFrQixvQkFBb0IsQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLEVBQUUsQ0FBQztBQURsRCxRQUFBLHdCQUF3Qiw0QkFDMEI7QUFFeEQsTUFB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
@@ -5,6 +5,14 @@ const types_1 = require("../../providers/smtp/types");
5
5
  exports.MAX_AUTOMATIC_EMAIL_ATTEMPTS = 3;
6
6
  const RETRY_DELAYS_MS = [60_000, 5 * 60_000];
7
7
  const bySentinel = new Map([
8
+ [
9
+ types_1.SMTP_FAILURE_SENTINELS.authFailed,
10
+ { code: "auth_failed", outcome: "failed" },
11
+ ],
12
+ [
13
+ types_1.SMTP_FAILURE_SENTINELS.notConfigured,
14
+ { code: "not_configured", outcome: "retryable" },
15
+ ],
8
16
  [
9
17
  types_1.SMTP_FAILURE_SENTINELS.connectionFailed,
10
18
  { code: "connection_failed", outcome: "retryable" },
@@ -50,4 +58,4 @@ const nextAutomaticRetryAt = (now, attemptNumber) => {
50
58
  exports.nextAutomaticRetryAt = nextAutomaticRetryAt;
51
59
  const emailAttemptNotificationKey = (attemptId) => `email-attempt:${attemptId}`;
52
60
  exports.emailAttemptNotificationKey = emailAttemptNotificationKey;
53
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFpbHVyZS1jbGFzc2lmaWNhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9lbWFpbC9kb21haW4vZmFpbHVyZS1jbGFzc2lmaWNhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxzREFBb0U7QUFFdkQsUUFBQSw0QkFBNEIsR0FBRyxDQUFDLENBQUM7QUFFOUMsTUFBTSxlQUFlLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBVSxDQUFDO0FBYXRELE1BQU0sVUFBVSxHQUFHLElBQUksR0FBRyxDQUErQjtJQUN2RDtRQUNFLDhCQUFzQixDQUFDLGdCQUFnQjtRQUN2QyxFQUFFLElBQUksRUFBRSxtQkFBbUIsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFO0tBQ3BEO0lBQ0Q7UUFDRSw4QkFBc0IsQ0FBQyxjQUFjO1FBQ3JDLEVBQUUsSUFBSSxFQUFFLGlCQUFpQixFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUU7S0FDL0M7SUFDRDtRQUNFLDhCQUFzQixDQUFDLGNBQWM7UUFDckMsRUFBRSxJQUFJLEVBQUUsaUJBQWlCLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRTtLQUNoRDtJQUNEO1FBQ0UsOEJBQXNCLENBQUMsa0JBQWtCO1FBQ3pDLEVBQUUsSUFBSSxFQUFFLHFCQUFxQixFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUU7S0FDbkQ7SUFDRDtRQUNFLDhCQUFzQixDQUFDLGtCQUFrQjtRQUN6QyxFQUFFLElBQUksRUFBRSxxQkFBcUIsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFO0tBQ3REO0NBQ0YsQ0FBQyxDQUFDO0FBRUksTUFBTSwyQkFBMkIsR0FBRyxDQUN6QyxLQUFjLEVBQ1EsRUFBRTtJQUN4QixJQUFJLENBQUMsQ0FBQyxLQUFLLFlBQVksS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUM5QixPQUFPLEVBQUUsSUFBSSxFQUFFLGlCQUFpQixFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsQ0FBQztJQUN6RCxDQUFDO0lBQ0QsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQy9CLHNFQUFzRSxDQUN2RSxDQUFDO0lBQ0YsT0FBTyxDQUNMLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJO1FBQ3JELElBQUksRUFBRSxpQkFBaUI7UUFDdkIsT0FBTyxFQUFFLFNBQVM7S0FDbkIsQ0FDRixDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBZlcsUUFBQSwyQkFBMkIsK0JBZXRDO0FBRUssTUFBTSxxQkFBcUIsR0FBRyxDQUFDLGFBQXFCLEVBQVcsRUFBRSxDQUN0RSxNQUFNLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQztJQUMvQixhQUFhLEdBQUcsQ0FBQztJQUNqQixhQUFhLEdBQUcsb0NBQTRCLENBQUM7QUFIbEMsUUFBQSxxQkFBcUIseUJBR2E7QUFFeEMsTUFBTSxvQkFBb0IsR0FBRyxDQUNsQyxHQUFTLEVBQ1QsYUFBcUIsRUFDZixFQUFFO0lBQ1IsSUFBSSxDQUFDLElBQUEsNkJBQXFCLEVBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQztRQUMxQyxNQUFNLElBQUksU0FBUyxDQUFDLHFEQUFxRCxDQUFDLENBQUM7SUFDN0UsQ0FBQztJQUNELE9BQU8sSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxHQUFHLGVBQWUsQ0FBQyxhQUFhLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0RSxDQUFDLENBQUM7QUFSVyxRQUFBLG9CQUFvQix3QkFRL0I7QUFFSyxNQUFNLDJCQUEyQixHQUFHLENBQUMsU0FBaUIsRUFBVSxFQUFFLENBQ3ZFLGlCQUFpQixTQUFTLEVBQUUsQ0FBQztBQURsQixRQUFBLDJCQUEyQiwrQkFDVCJ9
61
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFpbHVyZS1jbGFzc2lmaWNhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9lbWFpbC9kb21haW4vZmFpbHVyZS1jbGFzc2lmaWNhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxzREFBb0U7QUFFdkQsUUFBQSw0QkFBNEIsR0FBRyxDQUFDLENBQUM7QUFFOUMsTUFBTSxlQUFlLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBVSxDQUFDO0FBZXRELE1BQU0sVUFBVSxHQUFHLElBQUksR0FBRyxDQUErQjtJQUN2RDtRQUNFLDhCQUFzQixDQUFDLFVBQVU7UUFDakMsRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUU7S0FDM0M7SUFDRDtRQUNFLDhCQUFzQixDQUFDLGFBQWE7UUFDcEMsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRTtLQUNqRDtJQUNEO1FBQ0UsOEJBQXNCLENBQUMsZ0JBQWdCO1FBQ3ZDLEVBQUUsSUFBSSxFQUFFLG1CQUFtQixFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUU7S0FDcEQ7SUFDRDtRQUNFLDhCQUFzQixDQUFDLGNBQWM7UUFDckMsRUFBRSxJQUFJLEVBQUUsaUJBQWlCLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRTtLQUMvQztJQUNEO1FBQ0UsOEJBQXNCLENBQUMsY0FBYztRQUNyQyxFQUFFLElBQUksRUFBRSxpQkFBaUIsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFO0tBQ2hEO0lBQ0Q7UUFDRSw4QkFBc0IsQ0FBQyxrQkFBa0I7UUFDekMsRUFBRSxJQUFJLEVBQUUscUJBQXFCLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRTtLQUNuRDtJQUNEO1FBQ0UsOEJBQXNCLENBQUMsa0JBQWtCO1FBQ3pDLEVBQUUsSUFBSSxFQUFFLHFCQUFxQixFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUU7S0FDdEQ7Q0FDRixDQUFDLENBQUM7QUFFSSxNQUFNLDJCQUEyQixHQUFHLENBQ3pDLEtBQWMsRUFDUSxFQUFFO0lBQ3hCLElBQUksQ0FBQyxDQUFDLEtBQUssWUFBWSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQzlCLE9BQU8sRUFBRSxJQUFJLEVBQUUsaUJBQWlCLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxDQUFDO0lBQ3pELENBQUM7SUFDRCxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FDL0Isc0VBQXNFLENBQ3ZFLENBQUM7SUFDRixPQUFPLENBQ0wsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUk7UUFDckQsSUFBSSxFQUFFLGlCQUFpQjtRQUN2QixPQUFPLEVBQUUsU0FBUztLQUNuQixDQUNGLENBQUM7QUFDSixDQUFDLENBQUM7QUFmVyxRQUFBLDJCQUEyQiwrQkFldEM7QUFFSyxNQUFNLHFCQUFxQixHQUFHLENBQUMsYUFBcUIsRUFBVyxFQUFFLENBQ3RFLE1BQU0sQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDO0lBQy9CLGFBQWEsR0FBRyxDQUFDO0lBQ2pCLGFBQWEsR0FBRyxvQ0FBNEIsQ0FBQztBQUhsQyxRQUFBLHFCQUFxQix5QkFHYTtBQUV4QyxNQUFNLG9CQUFvQixHQUFHLENBQ2xDLEdBQVMsRUFDVCxhQUFxQixFQUNmLEVBQUU7SUFDUixJQUFJLENBQUMsSUFBQSw2QkFBcUIsRUFBQyxhQUFhLENBQUMsRUFBRSxDQUFDO1FBQzFDLE1BQU0sSUFBSSxTQUFTLENBQUMscURBQXFELENBQUMsQ0FBQztJQUM3RSxDQUFDO0lBQ0QsT0FBTyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLEdBQUcsZUFBZSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RFLENBQUMsQ0FBQztBQVJXLFFBQUEsb0JBQW9CLHdCQVEvQjtBQUVLLE1BQU0sMkJBQTJCLEdBQUcsQ0FBQyxTQUFpQixFQUFVLEVBQUUsQ0FDdkUsaUJBQWlCLFNBQVMsRUFBRSxDQUFDO0FBRGxCLFFBQUEsMkJBQTJCLCtCQUNUIn0=