@hartl-services/medusa-base 2.3.0 → 2.5.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.
@@ -1,14 +1,14 @@
1
1
  "use strict";
2
2
  const jsxRuntime = require("react/jsx-runtime");
3
- const react = require("react");
4
3
  const adminSdk = require("@medusajs/admin-sdk");
5
4
  const ui = require("@medusajs/ui");
6
5
  const reactQuery = require("@tanstack/react-query");
7
- const documents = require("@hartl-services/medusa-food-supplements-contracts/paths/documents");
6
+ const email = require("@hartl-services/medusa-food-supplements-contracts/paths/email");
8
7
  const Medusa = require("@medusajs/js-sdk");
9
8
  const reactRouterDom = require("react-router-dom");
10
9
  const pluginFeatures = require("@hartl-services/medusa-food-supplements-contracts/paths/plugin-features");
11
- const email = require("@hartl-services/medusa-food-supplements-contracts/paths/email");
10
+ const react = require("react");
11
+ const documents = require("@hartl-services/medusa-food-supplements-contracts/paths/documents");
12
12
  const email$1 = require("@hartl-services/medusa-food-supplements-contracts/schemas/email");
13
13
  const _interopDefault = (e) => e && e.__esModule ? e : { default: e };
14
14
  const Medusa__default = /* @__PURE__ */ _interopDefault(Medusa);
@@ -1026,6 +1026,103 @@ const PluginFeatureDisabledNotice = ({
1026
1026
  ]
1027
1027
  }
1028
1028
  );
1029
+ const withPagination = (params) => new URLSearchParams({
1030
+ limit: String(params.limit),
1031
+ offset: String(params.offset)
1032
+ });
1033
+ const withMessageQuery = (path, params) => {
1034
+ const query = withPagination(params);
1035
+ if (params.kind) {
1036
+ query.set("kind", params.kind);
1037
+ }
1038
+ if (params.status) {
1039
+ query.set("status", params.status);
1040
+ }
1041
+ if (params.resource_id) {
1042
+ query.set("resource_id", params.resource_id);
1043
+ }
1044
+ return `${path}?${query.toString()}`;
1045
+ };
1046
+ const listEmailMessages = (params) => sdk.client.fetch(
1047
+ withMessageQuery(email.emailAdminPaths.get.list, params)
1048
+ );
1049
+ const retrieveEmailMessage = (messageId) => sdk.client.fetch(
1050
+ email.emailAdminPaths.get.detail(messageId)
1051
+ );
1052
+ const resendEmailMessage = (messageId, body) => sdk.client.fetch(
1053
+ email.emailAdminPaths.post.resend(messageId),
1054
+ { method: "POST", body }
1055
+ );
1056
+ const listEmailTermsVersions = (params) => {
1057
+ const query = withPagination(params);
1058
+ return sdk.client.fetch(
1059
+ `${email.emailAdminPaths.get.termsVersions}?${query.toString()}`
1060
+ );
1061
+ };
1062
+ const createEmailTermsVersion = (body) => sdk.client.fetch(
1063
+ email.emailAdminPaths.post.createTermsVersion,
1064
+ { method: "POST", body }
1065
+ );
1066
+ const downloadEmailTermsVersion = async (termsVersionId) => {
1067
+ const response = await sdk.client.fetch(
1068
+ email.emailAdminPaths.get.downloadTermsVersion(termsVersionId),
1069
+ { headers: { accept: "application/pdf" } }
1070
+ );
1071
+ return response.blob();
1072
+ };
1073
+ const retrieveDraftOrderConfirmation = (draftOrderId) => sdk.client.fetch(
1074
+ email.emailAdminPaths.get.draftOrderConfirmation(draftOrderId)
1075
+ );
1076
+ const updateDraftOrderConfirmation = (draftOrderId, body) => sdk.client.fetch(
1077
+ email.emailAdminPaths.post.updateDraftOrderConfirmation(draftOrderId),
1078
+ { method: "POST", body }
1079
+ );
1080
+ const DraftOrderConfirmationWidgetContent = ({
1081
+ data
1082
+ }) => {
1083
+ const queryClient = reactQuery.useQueryClient();
1084
+ const queryKey = ["email", "draft-order-confirmation", data.id];
1085
+ const confirmationQuery = reactQuery.useQuery({
1086
+ queryKey,
1087
+ queryFn: () => retrieveDraftOrderConfirmation(data.id)
1088
+ });
1089
+ const update = reactQuery.useMutation({
1090
+ mutationFn: (send2) => updateDraftOrderConfirmation(data.id, { send_order_confirmation: send2 }),
1091
+ onSuccess: (confirmation) => {
1092
+ queryClient.setQueryData(queryKey, confirmation);
1093
+ },
1094
+ onError: (error) => {
1095
+ ui.toast.error("Die Einstellung konnte nicht gespeichert werden.", {
1096
+ description: getErrorMessage(error)
1097
+ });
1098
+ }
1099
+ });
1100
+ const switchId = `draft-order-confirmation-${data.id}`;
1101
+ const send = confirmationQuery.data?.send_order_confirmation;
1102
+ return /* @__PURE__ */ jsxRuntime.jsxs(ui.Container, { className: "divide-y p-0", children: [
1103
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "px-6 py-4", children: /* @__PURE__ */ jsxRuntime.jsx(ui.Heading, { level: "h2", children: "Bestellbestätigung" }) }),
1104
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-start justify-between gap-4 px-6 py-4", children: [
1105
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "min-w-0", children: [
1106
+ /* @__PURE__ */ jsxRuntime.jsx(ui.Label, { htmlFor: switchId, weight: "plus", children: "An Kunden senden" }),
1107
+ /* @__PURE__ */ jsxRuntime.jsx(ui.Text, { size: "small", className: "text-ui-fg-subtle", children: confirmationQuery.isError ? "Die Einstellung konnte nicht geladen werden." : send ? "Beim Umwandeln in eine Bestellung erhält der Kunde die Bestellbestätigung." : "Beim Umwandeln in eine Bestellung wird keine Bestellbestätigung an den Kunden gesendet." })
1108
+ ] }),
1109
+ /* @__PURE__ */ jsxRuntime.jsx(
1110
+ ui.Switch,
1111
+ {
1112
+ id: switchId,
1113
+ className: "shrink-0",
1114
+ checked: send === true,
1115
+ disabled: send === void 0 || update.isPending,
1116
+ onCheckedChange: (checked) => update.mutate(checked === true)
1117
+ }
1118
+ )
1119
+ ] })
1120
+ ] });
1121
+ };
1122
+ const DraftOrderConfirmationWidget = (props) => /* @__PURE__ */ jsxRuntime.jsx(PluginFeatureGate, { pluginKey: "email", featureKeys: ["order_mails"], children: /* @__PURE__ */ jsxRuntime.jsx(DraftOrderConfirmationWidgetContent, { ...props }) });
1123
+ adminSdk.defineWidgetConfig({
1124
+ zone: "draft_order.details.side.after"
1125
+ });
1029
1126
  const listOrderDocuments = (orderId) => sdk.client.fetch(
1030
1127
  documents.documentsPaths.admin.get.listForOrder(orderId)
1031
1128
  );
@@ -1613,50 +1710,6 @@ const PluginFeaturesSettingsPage = () => {
1613
1710
  const config = adminSdk.defineRouteConfig({
1614
1711
  label: texts.menu.label
1615
1712
  });
1616
- const withPagination = (params) => new URLSearchParams({
1617
- limit: String(params.limit),
1618
- offset: String(params.offset)
1619
- });
1620
- const withMessageQuery = (path, params) => {
1621
- const query = withPagination(params);
1622
- if (params.kind) {
1623
- query.set("kind", params.kind);
1624
- }
1625
- if (params.status) {
1626
- query.set("status", params.status);
1627
- }
1628
- if (params.resource_id) {
1629
- query.set("resource_id", params.resource_id);
1630
- }
1631
- return `${path}?${query.toString()}`;
1632
- };
1633
- const listEmailMessages = (params) => sdk.client.fetch(
1634
- withMessageQuery(email.emailAdminPaths.get.list, params)
1635
- );
1636
- const retrieveEmailMessage = (messageId) => sdk.client.fetch(
1637
- email.emailAdminPaths.get.detail(messageId)
1638
- );
1639
- const resendEmailMessage = (messageId, body) => sdk.client.fetch(
1640
- email.emailAdminPaths.post.resend(messageId),
1641
- { method: "POST", body }
1642
- );
1643
- const listEmailTermsVersions = (params) => {
1644
- const query = withPagination(params);
1645
- return sdk.client.fetch(
1646
- `${email.emailAdminPaths.get.termsVersions}?${query.toString()}`
1647
- );
1648
- };
1649
- const createEmailTermsVersion = (body) => sdk.client.fetch(
1650
- email.emailAdminPaths.post.createTermsVersion,
1651
- { method: "POST", body }
1652
- );
1653
- const downloadEmailTermsVersion = async (termsVersionId) => {
1654
- const response = await sdk.client.fetch(
1655
- email.emailAdminPaths.get.downloadTermsVersion(termsVersionId),
1656
- { headers: { accept: "application/pdf" } }
1657
- );
1658
- return response.blob();
1659
- };
1660
1713
  const PAGE_SIZE$1 = 20;
1661
1714
  const MAX_PAGE_OFFSET$1 = 1e4;
1662
1715
  const MAX_RESOURCE_ID_LENGTH = 255;
@@ -2485,6 +2538,11 @@ const PluginDetailPage = () => {
2485
2538
  return /* @__PURE__ */ jsxRuntime.jsx(PluginPageShell, { pluginKey, children: /* @__PURE__ */ jsxRuntime.jsx(PluginFeatureSections, { pluginKey }) });
2486
2539
  };
2487
2540
  const widgetModule = { widgets: [
2541
+ {
2542
+ Component: DraftOrderConfirmationWidget,
2543
+ zone: ["draft_order.details.side.after"],
2544
+ widgetId: "Widget-24ee"
2545
+ },
2488
2546
  {
2489
2547
  Component: OrderDocumentsWidget,
2490
2548
  zone: ["order.details.side.after"],
@@ -1,13 +1,13 @@
1
1
  import { jsxs, jsx, Fragment } from "react/jsx-runtime";
2
- import { useState, useEffect, useMemo, useRef } from "react";
3
2
  import { defineWidgetConfig, defineRouteConfig } from "@medusajs/admin-sdk";
4
3
  import { toast, Button, Text, Hint, Container, Heading, Alert, Label, Switch, Input, Select, StatusBadge, usePrompt, FocusModal, Prompt } from "@medusajs/ui";
5
4
  import { useQuery, useQueryClient, useMutation } from "@tanstack/react-query";
6
- import { documentsPaths, packingListsPaths } from "@hartl-services/medusa-food-supplements-contracts/paths/documents";
5
+ import { emailAdminPaths } from "@hartl-services/medusa-food-supplements-contracts/paths/email";
7
6
  import Medusa from "@medusajs/js-sdk";
8
7
  import { Link, useParams } from "react-router-dom";
9
8
  import { pluginFeaturesAdminPaths } from "@hartl-services/medusa-food-supplements-contracts/paths/plugin-features";
10
- import { emailAdminPaths } from "@hartl-services/medusa-food-supplements-contracts/paths/email";
9
+ import { useState, useEffect, useMemo, useRef } from "react";
10
+ import { documentsPaths, packingListsPaths } from "@hartl-services/medusa-food-supplements-contracts/paths/documents";
11
11
  import { EMAIL_TERMS_MAX_PDF_BYTES } from "@hartl-services/medusa-food-supplements-contracts/schemas/email";
12
12
  const texts = {
13
13
  menu: {
@@ -1023,6 +1023,103 @@ const PluginFeatureDisabledNotice = ({
1023
1023
  ]
1024
1024
  }
1025
1025
  );
1026
+ const withPagination = (params) => new URLSearchParams({
1027
+ limit: String(params.limit),
1028
+ offset: String(params.offset)
1029
+ });
1030
+ const withMessageQuery = (path, params) => {
1031
+ const query = withPagination(params);
1032
+ if (params.kind) {
1033
+ query.set("kind", params.kind);
1034
+ }
1035
+ if (params.status) {
1036
+ query.set("status", params.status);
1037
+ }
1038
+ if (params.resource_id) {
1039
+ query.set("resource_id", params.resource_id);
1040
+ }
1041
+ return `${path}?${query.toString()}`;
1042
+ };
1043
+ const listEmailMessages = (params) => sdk.client.fetch(
1044
+ withMessageQuery(emailAdminPaths.get.list, params)
1045
+ );
1046
+ const retrieveEmailMessage = (messageId) => sdk.client.fetch(
1047
+ emailAdminPaths.get.detail(messageId)
1048
+ );
1049
+ const resendEmailMessage = (messageId, body) => sdk.client.fetch(
1050
+ emailAdminPaths.post.resend(messageId),
1051
+ { method: "POST", body }
1052
+ );
1053
+ const listEmailTermsVersions = (params) => {
1054
+ const query = withPagination(params);
1055
+ return sdk.client.fetch(
1056
+ `${emailAdminPaths.get.termsVersions}?${query.toString()}`
1057
+ );
1058
+ };
1059
+ const createEmailTermsVersion = (body) => sdk.client.fetch(
1060
+ emailAdminPaths.post.createTermsVersion,
1061
+ { method: "POST", body }
1062
+ );
1063
+ const downloadEmailTermsVersion = async (termsVersionId) => {
1064
+ const response = await sdk.client.fetch(
1065
+ emailAdminPaths.get.downloadTermsVersion(termsVersionId),
1066
+ { headers: { accept: "application/pdf" } }
1067
+ );
1068
+ return response.blob();
1069
+ };
1070
+ const retrieveDraftOrderConfirmation = (draftOrderId) => sdk.client.fetch(
1071
+ emailAdminPaths.get.draftOrderConfirmation(draftOrderId)
1072
+ );
1073
+ const updateDraftOrderConfirmation = (draftOrderId, body) => sdk.client.fetch(
1074
+ emailAdminPaths.post.updateDraftOrderConfirmation(draftOrderId),
1075
+ { method: "POST", body }
1076
+ );
1077
+ const DraftOrderConfirmationWidgetContent = ({
1078
+ data
1079
+ }) => {
1080
+ const queryClient = useQueryClient();
1081
+ const queryKey = ["email", "draft-order-confirmation", data.id];
1082
+ const confirmationQuery = useQuery({
1083
+ queryKey,
1084
+ queryFn: () => retrieveDraftOrderConfirmation(data.id)
1085
+ });
1086
+ const update = useMutation({
1087
+ mutationFn: (send2) => updateDraftOrderConfirmation(data.id, { send_order_confirmation: send2 }),
1088
+ onSuccess: (confirmation) => {
1089
+ queryClient.setQueryData(queryKey, confirmation);
1090
+ },
1091
+ onError: (error) => {
1092
+ toast.error("Die Einstellung konnte nicht gespeichert werden.", {
1093
+ description: getErrorMessage(error)
1094
+ });
1095
+ }
1096
+ });
1097
+ const switchId = `draft-order-confirmation-${data.id}`;
1098
+ const send = confirmationQuery.data?.send_order_confirmation;
1099
+ return /* @__PURE__ */ jsxs(Container, { className: "divide-y p-0", children: [
1100
+ /* @__PURE__ */ jsx("div", { className: "px-6 py-4", children: /* @__PURE__ */ jsx(Heading, { level: "h2", children: "Bestellbestätigung" }) }),
1101
+ /* @__PURE__ */ jsxs("div", { className: "flex items-start justify-between gap-4 px-6 py-4", children: [
1102
+ /* @__PURE__ */ jsxs("div", { className: "min-w-0", children: [
1103
+ /* @__PURE__ */ jsx(Label, { htmlFor: switchId, weight: "plus", children: "An Kunden senden" }),
1104
+ /* @__PURE__ */ jsx(Text, { size: "small", className: "text-ui-fg-subtle", children: confirmationQuery.isError ? "Die Einstellung konnte nicht geladen werden." : send ? "Beim Umwandeln in eine Bestellung erhält der Kunde die Bestellbestätigung." : "Beim Umwandeln in eine Bestellung wird keine Bestellbestätigung an den Kunden gesendet." })
1105
+ ] }),
1106
+ /* @__PURE__ */ jsx(
1107
+ Switch,
1108
+ {
1109
+ id: switchId,
1110
+ className: "shrink-0",
1111
+ checked: send === true,
1112
+ disabled: send === void 0 || update.isPending,
1113
+ onCheckedChange: (checked) => update.mutate(checked === true)
1114
+ }
1115
+ )
1116
+ ] })
1117
+ ] });
1118
+ };
1119
+ const DraftOrderConfirmationWidget = (props) => /* @__PURE__ */ jsx(PluginFeatureGate, { pluginKey: "email", featureKeys: ["order_mails"], children: /* @__PURE__ */ jsx(DraftOrderConfirmationWidgetContent, { ...props }) });
1120
+ defineWidgetConfig({
1121
+ zone: "draft_order.details.side.after"
1122
+ });
1026
1123
  const listOrderDocuments = (orderId) => sdk.client.fetch(
1027
1124
  documentsPaths.admin.get.listForOrder(orderId)
1028
1125
  );
@@ -1610,50 +1707,6 @@ const PluginFeaturesSettingsPage = () => {
1610
1707
  const config = defineRouteConfig({
1611
1708
  label: texts.menu.label
1612
1709
  });
1613
- const withPagination = (params) => new URLSearchParams({
1614
- limit: String(params.limit),
1615
- offset: String(params.offset)
1616
- });
1617
- const withMessageQuery = (path, params) => {
1618
- const query = withPagination(params);
1619
- if (params.kind) {
1620
- query.set("kind", params.kind);
1621
- }
1622
- if (params.status) {
1623
- query.set("status", params.status);
1624
- }
1625
- if (params.resource_id) {
1626
- query.set("resource_id", params.resource_id);
1627
- }
1628
- return `${path}?${query.toString()}`;
1629
- };
1630
- const listEmailMessages = (params) => sdk.client.fetch(
1631
- withMessageQuery(emailAdminPaths.get.list, params)
1632
- );
1633
- const retrieveEmailMessage = (messageId) => sdk.client.fetch(
1634
- emailAdminPaths.get.detail(messageId)
1635
- );
1636
- const resendEmailMessage = (messageId, body) => sdk.client.fetch(
1637
- emailAdminPaths.post.resend(messageId),
1638
- { method: "POST", body }
1639
- );
1640
- const listEmailTermsVersions = (params) => {
1641
- const query = withPagination(params);
1642
- return sdk.client.fetch(
1643
- `${emailAdminPaths.get.termsVersions}?${query.toString()}`
1644
- );
1645
- };
1646
- const createEmailTermsVersion = (body) => sdk.client.fetch(
1647
- emailAdminPaths.post.createTermsVersion,
1648
- { method: "POST", body }
1649
- );
1650
- const downloadEmailTermsVersion = async (termsVersionId) => {
1651
- const response = await sdk.client.fetch(
1652
- emailAdminPaths.get.downloadTermsVersion(termsVersionId),
1653
- { headers: { accept: "application/pdf" } }
1654
- );
1655
- return response.blob();
1656
- };
1657
1710
  const PAGE_SIZE$1 = 20;
1658
1711
  const MAX_PAGE_OFFSET$1 = 1e4;
1659
1712
  const MAX_RESOURCE_ID_LENGTH = 255;
@@ -2482,6 +2535,11 @@ const PluginDetailPage = () => {
2482
2535
  return /* @__PURE__ */ jsx(PluginPageShell, { pluginKey, children: /* @__PURE__ */ jsx(PluginFeatureSections, { pluginKey }) });
2483
2536
  };
2484
2537
  const widgetModule = { widgets: [
2538
+ {
2539
+ Component: DraftOrderConfirmationWidget,
2540
+ zone: ["draft_order.details.side.after"],
2541
+ widgetId: "Widget-24ee"
2542
+ },
2485
2543
  {
2486
2544
  Component: OrderDocumentsWidget,
2487
2545
  zone: ["order.details.side.after"],
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.POST = exports.GET = void 0;
4
+ const email_1 = require("@hartl-services/medusa-food-supplements-contracts/schemas/email");
5
+ const update_draft_order_confirmation_1 = require("../../../../../workflows/email/update-draft-order-confirmation");
6
+ /** Every authenticated Admin user can read a draft's confirmation choice. */
7
+ const GET = async (req, res) => {
8
+ const confirmation = await (0, update_draft_order_confirmation_1.getDraftOrderConfirmation)(req.scope, req.params.id);
9
+ res.json(email_1.AdminDraftOrderConfirmationResponseSchema.parse(confirmation));
10
+ };
11
+ exports.GET = GET;
12
+ /** Every authenticated Admin user can switch it while the order is a draft. */
13
+ const POST = async (req, res) => {
14
+ const { result } = await (0, update_draft_order_confirmation_1.updateDraftOrderConfirmationWorkflow)(req.scope).run({
15
+ input: {
16
+ draft_order_id: req.params.id,
17
+ send_order_confirmation: req.validatedBody.send_order_confirmation,
18
+ },
19
+ });
20
+ res.json(email_1.AdminDraftOrderConfirmationResponseSchema.parse(result));
21
+ };
22
+ exports.POST = POST;
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL2RyYWZ0LW9yZGVycy9baWRdL29yZGVyLWNvbmZpcm1hdGlvbi9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFJQSwyRkFBNEg7QUFNNUgsb0hBR3dFO0FBRXhFLDZFQUE2RTtBQUN0RSxNQUFNLEdBQUcsR0FBRyxLQUFLLEVBQ3RCLEdBQStCLEVBQy9CLEdBQXdELEVBQ3pDLEVBQUU7SUFDakIsTUFBTSxZQUFZLEdBQUcsTUFBTSxJQUFBLDJEQUF5QixFQUNsRCxHQUFHLENBQUMsS0FBSyxFQUNULEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUNkLENBQUM7SUFDRixHQUFHLENBQUMsSUFBSSxDQUFDLGlEQUF5QyxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO0FBQzFFLENBQUMsQ0FBQztBQVRXLFFBQUEsR0FBRyxPQVNkO0FBRUYsK0VBQStFO0FBQ3hFLE1BQU0sSUFBSSxHQUFHLEtBQUssRUFDdkIsR0FBa0UsRUFDbEUsR0FBd0QsRUFDekMsRUFBRTtJQUNqQixNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsTUFBTSxJQUFBLHNFQUFvQyxFQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUM7UUFDM0UsS0FBSyxFQUFFO1lBQ0wsY0FBYyxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUM3Qix1QkFBdUIsRUFBRSxHQUFHLENBQUMsYUFBYSxDQUFDLHVCQUF1QjtTQUNuRTtLQUNGLENBQUMsQ0FBQztJQUNILEdBQUcsQ0FBQyxJQUFJLENBQUMsaURBQXlDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDcEUsQ0FBQyxDQUFDO0FBWFcsUUFBQSxJQUFJLFFBV2YifQ==
@@ -59,7 +59,8 @@ exports.default = (0, http_1.defineMiddlewares)({
59
59
  // registers it with `app.use`, a prefix match that runs before every
60
60
  // method-specific entry below, so a switched-off plugin answers 404 for
61
61
  // the whole Admin mail log and the terms versions.
62
- // The mail features gate subscribers only; no route belongs to them.
62
+ // The mail features gate subscribers only, except the draft-order
63
+ // confirmation switch below, which belongs to `order_mails`.
63
64
  {
64
65
  matcher: "/admin/email",
65
66
  middlewares: [(0, public_1.requirePluginFeature)(plugin_features_3.emailPluginFeatures)],
@@ -111,6 +112,19 @@ exports.default = (0, http_1.defineMiddlewares)({
111
112
  methods: ["GET"],
112
113
  middlewares: [(0, http_1.authenticate)("user", ["session", "bearer"])],
113
114
  },
115
+ // Customer order confirmation of an Admin draft order (off by default,
116
+ // see workflows/hooks/draft-order-confirmation-default.ts).
117
+ {
118
+ matcher: "/admin/draft-orders/:id/order-confirmation",
119
+ middlewares: [(0, public_1.requirePluginFeature)(plugin_features_3.emailPluginFeatures, "order_mails")],
120
+ },
121
+ {
122
+ matcher: "/admin/draft-orders/:id/order-confirmation",
123
+ methods: ["POST"],
124
+ middlewares: [
125
+ (0, http_1.validateAndTransformBody)(email_1.UpdateAdminDraftOrderConfirmationSchema),
126
+ ],
127
+ },
114
128
  // Account confirmation: the resend route answers 404 while the
115
129
  // `customer_verification` feature (or Konto-Mails, its parent) is off.
116
130
  // Public by design (the customer cannot log in yet); the 60 s limit per
@@ -248,4 +262,4 @@ exports.default = (0, http_1.defineMiddlewares)({
248
262
  },
249
263
  ],
250
264
  });
251
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlkZGxld2FyZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXBpL21pZGRsZXdhcmVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsbURBS2lDO0FBQ2pDLCtHQUtrRjtBQUNsRixtR0FHNEU7QUFDNUUsMkZBS3dFO0FBQ3hFLDJIQUFrSTtBQUNsSSwyRkFBdUg7QUFFdkgsa0VBR3FDO0FBQ3JDLDhEQUE4RDtBQUM5RCxxR0FBOEY7QUFDOUYsdURBQXlEO0FBQ3pELHNDQUFnRDtBQUVoRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLGFBQWEsR0FBRyxDQUFDLE9BQWUsRUFBRSxHQUFHLElBQTJCLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDMUUsT0FBTztJQUNQLFdBQVcsRUFBRSxDQUFDLElBQUEsNkJBQW9CLEVBQUMseUNBQXVCLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztDQUN0RSxDQUFDLENBQUE7QUFFRix5RUFBeUU7QUFDekUsbUVBQW1FO0FBQ25FLHVFQUF1RTtBQUN2RSwyRUFBMkU7QUFDM0UsMEVBQTBFO0FBQzFFLHVDQUF1QztBQUN2QyxrQkFBZSxJQUFBLHdCQUFpQixFQUFDO0lBQy9CLE1BQU0sRUFBRTtRQUNOO1lBQ0UsT0FBTyxFQUFFLHdCQUF3QjtZQUNqQyxPQUFPLEVBQUUsQ0FBQyxNQUFNLENBQUM7WUFDakIsV0FBVyxFQUFFLENBQUMsSUFBQSwrQkFBd0IsRUFBQyw0Q0FBMEIsQ0FBQyxDQUFDO1NBQ3BFO1FBQ0Q7WUFDRSxPQUFPLEVBQUUsNkNBQTZDO1lBQ3RELE9BQU8sRUFBRSxDQUFDLE1BQU0sQ0FBQztZQUNqQixXQUFXLEVBQUUsQ0FBQyxJQUFBLCtCQUF3QixFQUFDLDRDQUEwQixDQUFDLENBQUM7U0FDcEU7UUFDRDtZQUNFLE9BQU8sRUFBRSx3REFBd0Q7WUFDakUsT0FBTyxFQUFFLENBQUMsTUFBTSxDQUFDO1lBQ2pCLFdBQVcsRUFBRSxDQUFDLElBQUEsK0JBQXdCLEVB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
265
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlkZGxld2FyZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXBpL21pZGRsZXdhcmVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsbURBS2lDO0FBQ2pDLCtHQUtrRjtBQUNsRixtR0FHNEU7QUFDNUUsMkZBTXdFO0FBQ3hFLDJIQUFrSTtBQUNsSSwyRkFBdUg7QUFFdkgsa0VBR3FDO0FBQ3JDLDhEQUE4RDtBQUM5RCxxR0FBOEY7QUFDOUYsdURBQXlEO0FBQ3pELHNDQUFnRDtBQUVoRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLGFBQWEsR0FBRyxDQUFDLE9BQWUsRUFBRSxHQUFHLElBQTJCLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDMUUsT0FBTztJQUNQLFdBQVcsRUFBRSxDQUFDLElBQUEsNkJBQW9CLEVBQUMseUNBQXVCLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztDQUN0RSxDQUFDLENBQUE7QUFFRix5RUFBeUU7QUFDekUsbUVBQW1FO0FBQ25FLHVFQUF1RTtBQUN2RSwyRUFBMkU7QUFDM0UsMEVBQTBFO0FBQzFFLHVDQUF1QztBQUN2QyxrQkFBZSxJQUFBLHdCQUFpQixFQUFDO0lBQy9CLE1BQU0sRUFBRTtRQUNOO1lBQ0UsT0FBTyxFQUFFLHdCQUF3QjtZQUNqQyxPQUFPLEVBQUUsQ0FBQyxNQUFNLENBQUM7WUFDakIsV0FBVyxFQUFFLENBQUMsSUFBQSwrQkFBd0IsRUFBQyw0Q0FBMEIsQ0FBQyxDQUFDO1NBQ3BFO1FBQ0Q7WUFDRSxPQUFPLEVBQUUsNkNBQTZDO1lBQ3RELE9BQU8sRUFBRSxDQUFDLE1BQU0sQ0FBQztZQUNqQixXQUFXLEVBQUUsQ0FBQyxJQUFBLCtCQUF3QixFQUFDLDRDQUEwQixDQUFDLENBQUM7U0FDcEU7UUFDRDtZQUNFLE9BQU8sRUFBRSx3REFBd0Q7WUFDakUsT0FBTyxFQUFFLENBQUMsTUFBTSxDQUFDO1lBQ2pCLFdBQVcsRUFBRSxDQUFDLElBQUEsK0JBQXdCLEVB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
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.POST = void 0;
4
+ const checkout_1 = require("@hartl-services/medusa-food-supplements-contracts/schemas/checkout");
5
+ const check_cart_completion_1 = require("../../../../../workflows/hooks/check-cart-completion");
6
+ const wire_response_1 = require("../../../../wire-response");
7
+ const POST = async (req, res) => {
8
+ await (0, check_cart_completion_1.checkCartCompletion)(req.scope, req.params.id);
9
+ res.json((0, wire_response_1.toWireResponse)(checkout_1.StoreCartCompletionCheckResponseSchema, {
10
+ cart_id: req.params.id,
11
+ ready: true,
12
+ }));
13
+ };
14
+ exports.POST = POST;
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL2NhcnRzL1tpZF0vY29tcGxldGlvbi1jaGVjay9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSxpR0FBMkg7QUFHM0gsZ0dBQTBGO0FBQzFGLDZEQUEwRDtBQUVuRCxNQUFNLElBQUksR0FBRyxLQUFLLEVBQ3ZCLEdBQWtCLEVBQ2xCLEdBQXFELEVBQ3JELEVBQUU7SUFDRixNQUFNLElBQUEsMkNBQW1CLEVBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFBO0lBQ25ELEdBQUcsQ0FBQyxJQUFJLENBQ04sSUFBQSw4QkFBYyxFQUFDLGlEQUFzQyxFQUFFO1FBQ3JELE9BQU8sRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUU7UUFDdEIsS0FBSyxFQUFFLElBQUk7S0FDWixDQUFDLENBQ0gsQ0FBQTtBQUNILENBQUMsQ0FBQTtBQVhZLFFBQUEsSUFBSSxRQVdoQiJ9
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.config = void 0;
4
+ exports.default = orderZeroTotalPaidSubscriber;
5
+ const utils_1 = require("@medusajs/framework/utils");
6
+ const zod_1 = require("@medusajs/framework/zod");
7
+ const mark_zero_total_order_paid_1 = require("../workflows/order/mark-zero-total-order-paid");
8
+ const OrderPlacedEventSchema = zod_1.z.object({ id: zod_1.z.string().min(1) });
9
+ /** Marks a placed 0 € order without payment as paid (see the workflow). */
10
+ async function orderZeroTotalPaidSubscriber({ event, container, }) {
11
+ const payload = OrderPlacedEventSchema.parse(event.data);
12
+ await (0, mark_zero_total_order_paid_1.markZeroTotalOrderPaidWorkflow)(container).run({
13
+ input: { order_id: payload.id },
14
+ });
15
+ }
16
+ exports.config = {
17
+ event: utils_1.OrderWorkflowEvents.PLACED,
18
+ };
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JkZXItemVyby10b3RhbC1wYWlkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3N1YnNjcmliZXJzL29yZGVyLXplcm8tdG90YWwtcGFpZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFZQSwrQ0FRQztBQWhCRCxxREFBZ0U7QUFDaEUsaURBQTRDO0FBRTVDLDhGQUErRjtBQUUvRixNQUFNLHNCQUFzQixHQUFHLE9BQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFFbkUsMkVBQTJFO0FBQzVELEtBQUssVUFBVSw0QkFBNEIsQ0FBQyxFQUN6RCxLQUFLLEVBQ0wsU0FBUyxHQUNlO0lBQ3hCLE1BQU0sT0FBTyxHQUFHLHNCQUFzQixDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDekQsTUFBTSxJQUFBLDJEQUE4QixFQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztRQUNsRCxLQUFLLEVBQUUsRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLEVBQUUsRUFBRTtLQUNoQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRVksUUFBQSxNQUFNLEdBQXFCO0lBQ3RDLEtBQUssRUFBRSwyQkFBbUIsQ0FBQyxNQUFNO0NBQ2xDLENBQUMifQ==
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.updateDraftOrderConfirmationWorkflow = exports.getDraftOrderConfirmation = void 0;
4
+ const utils_1 = require("@medusajs/framework/utils");
5
+ const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
6
+ /**
7
+ * Reads the customer-confirmation choice of a draft order. Anything that is
8
+ * not (or no longer) a draft answers 404, so the switch never touches a
9
+ * placed order.
10
+ */
11
+ const getDraftOrderConfirmation = async (container, draftOrderId) => {
12
+ const { data } = await container
13
+ .resolve(utils_1.ContainerRegistrationKeys.QUERY)
14
+ .graph({
15
+ entity: "order",
16
+ fields: ["id", "no_notification"],
17
+ filters: { id: draftOrderId, is_draft_order: true },
18
+ });
19
+ const order = data[0];
20
+ if (!order) {
21
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.NOT_FOUND, `Draft order with id: ${draftOrderId} was not found`);
22
+ }
23
+ return {
24
+ draft_order_id: order.id,
25
+ send_order_confirmation: order.no_notification !== true,
26
+ };
27
+ };
28
+ exports.getDraftOrderConfirmation = getDraftOrderConfirmation;
29
+ const updateDraftOrderConfirmationStep = (0, workflows_sdk_1.createStep)("email-update-draft-order-confirmation", async (input, { container }) => {
30
+ const current = await (0, exports.getDraftOrderConfirmation)(container, input.draft_order_id);
31
+ await container
32
+ .resolve(utils_1.Modules.ORDER)
33
+ .updateOrders(input.draft_order_id, {
34
+ no_notification: !input.send_order_confirmation,
35
+ });
36
+ return new workflows_sdk_1.StepResponse(input, {
37
+ id: input.draft_order_id,
38
+ no_notification: !current.send_order_confirmation,
39
+ });
40
+ }, async (previous, { container }) => {
41
+ if (!previous)
42
+ return;
43
+ await container
44
+ .resolve(utils_1.Modules.ORDER)
45
+ .updateOrders(previous.id, { no_notification: previous.no_notification });
46
+ });
47
+ /** Switches whether the converted draft confirms the order to the customer. */
48
+ exports.updateDraftOrderConfirmationWorkflow = (0, workflows_sdk_1.createWorkflow)("email-update-draft-order-confirmation", (input) => new workflows_sdk_1.WorkflowResponse(updateDraftOrderConfirmationStep(input)));
49
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBkYXRlLWRyYWZ0LW9yZGVyLWNvbmZpcm1hdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy93b3JrZmxvd3MvZW1haWwvdXBkYXRlLWRyYWZ0LW9yZGVyLWNvbmZpcm1hdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFJQSxxREFJbUM7QUFDbkMscUVBSzJDO0FBaUIzQzs7OztHQUlHO0FBQ0ksTUFBTSx5QkFBeUIsR0FBRyxLQUFLLEVBQzVDLFNBQTBCLEVBQzFCLFlBQW9CLEVBQ2EsRUFBRTtJQUNuQyxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsTUFBTSxTQUFTO1NBQzdCLE9BQU8sQ0FBQyxpQ0FBeUIsQ0FBQyxLQUFLLENBQUM7U0FDeEMsS0FBSyxDQUFDO1FBQ0wsTUFBTSxFQUFFLE9BQU87UUFDZixNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsaUJBQWlCLENBQUM7UUFDakMsT0FBTyxFQUFFLEVBQUUsRUFBRSxFQUFFLFlBQVksRUFBRSxjQUFjLEVBQUUsSUFBSSxFQUFFO0tBQ3BELENBQUMsQ0FBQztJQUNMLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQThCLENBQUM7SUFDbkQsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ1gsTUFBTSxJQUFJLG1CQUFXLENBQ25CLG1CQUFXLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFDM0Isd0JBQXdCLFlBQVksZ0JBQWdCLENBQ3JELENBQUM7SUFDSixDQUFDO0lBQ0QsT0FBTztRQUNMLGNBQWMsRUFBRSxLQUFLLENBQUMsRUFBRTtRQUN4Qix1QkFBdUIsRUFBRSxLQUFLLENBQUMsZUFBZSxLQUFLLElBQUk7S0FDeEQsQ0FBQztBQUNKLENBQUMsQ0FBQztBQXRCVyxRQUFBLHlCQUF5Qiw2QkFzQnBDO0FBRUYsTUFBTSxnQ0FBZ0MsR0FBRyxJQUFBLDBCQUFVLEVBQ2pELHVDQUF1QyxFQUN2QyxLQUFLLEVBQUUsS0FBNkIsRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUU7SUFDckQsTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFBLGlDQUF5QixFQUM3QyxTQUFTLEVBQ1QsS0FBSyxDQUFDLGNBQWMsQ0FDckIsQ0FBQztJQUNGLE1BQU0sU0FBUztTQUNaLE9BQU8sQ0FBc0IsZUFBTyxDQUFDLEtBQUssQ0FBQztTQUMzQyxZQUFZLENBQUMsS0FBSyxDQUFDLGNBQWMsRUFBRTtRQUNsQyxlQUFlLEVBQUUsQ0FBQyxLQUFLLENBQUMsdUJBQXVCO0tBQ2hELENBQUMsQ0FBQztJQUNMLE9BQU8sSUFBSSw0QkFBWSxDQUNyQixLQUFLLEVBQ0w7UUFDRSxFQUFFLEVBQUUsS0FBSyxDQUFDLGNBQWM7UUFDeEIsZUFBZSxFQUFFLENBQUMsT0FBTyxDQUFDLHVCQUF1QjtLQUNsRCxDQUNGLENBQUM7QUFDSixDQUFDLEVBQ0QsS0FBSyxFQUFFLFFBQTBDLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFO0lBQ2xFLElBQUksQ0FBQyxRQUFRO1FBQUUsT0FBTztJQUN0QixNQUFNLFNBQVM7U0FDWixPQUFPLENBQXNCLGVBQU8sQ0FBQyxLQUFLLENBQUM7U0FDM0MsWUFBWSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxlQUFlLEVBQUUsUUFBUSxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUM7QUFDOUUsQ0FBQyxDQUNGLENBQUM7QUFFRiwrRUFBK0U7QUFDbEUsUUFBQSxvQ0FBb0MsR0FBRyxJQUFBLDhCQUFjLEVBQ2hFLHVDQUF1QyxFQUN2QyxDQUFDLEtBQTZCLEVBQUUsRUFBRSxDQUNoQyxJQUFJLGdDQUFnQixDQUFDLGdDQUFnQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQ2hFLENBQUMifQ==
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.checkCartCompletion = void 0;
4
+ const utils_1 = require("@medusajs/framework/utils");
5
+ const complete_cart_fields_1 = require("./complete-cart-fields");
6
+ const complete_cart_participants_1 = require("./complete-cart-participants");
7
+ const refunded_cart_payment_1 = require("./refunded-cart-payment");
8
+ /**
9
+ * Runs the checks complete-cart's `validate` hook runs (refunded payment,
10
+ * every plugin's validate participant) without completing the cart. Stripe
11
+ * captures on confirmation, so a Storefront asks this right before it
12
+ * confirms a payment instead of learning about a refusal after the money was
13
+ * taken (which Medusa then refunds). Throws the same errors; writes nothing.
14
+ */
15
+ const checkCartCompletion = async (container, cartId) => {
16
+ const query = container.resolve(utils_1.ContainerRegistrationKeys.QUERY);
17
+ const { data: [cart], } = await query.graph({
18
+ entity: "cart",
19
+ fields: (0, complete_cart_fields_1.loadCompleteCartFields)(),
20
+ filters: { id: cartId },
21
+ });
22
+ if (!cart) {
23
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.NOT_FOUND, `Cart with id: ${cartId} was not found`);
24
+ }
25
+ if (cart.completed_at) {
26
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.NOT_ALLOWED, "Dieser Warenkorb wurde bereits abgeschlossen.");
27
+ }
28
+ (0, refunded_cart_payment_1.assertCartPaymentNotRefunded)(cart);
29
+ await (0, complete_cart_participants_1.runCompleteCartValidateParticipants)({ input: { id: cartId }, cart }, { container, context: {}, eventGroupId: undefined });
30
+ };
31
+ exports.checkCartCompletion = checkCartCompletion;
32
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2stY2FydC1jb21wbGV0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL3dvcmtmbG93cy9ob29rcy9jaGVjay1jYXJ0LWNvbXBsZXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EscURBR2tDO0FBRWxDLGlFQUErRDtBQUMvRCw2RUFBa0Y7QUFDbEYsbUVBQXNFO0FBRXRFOzs7Ozs7R0FNRztBQUNJLE1BQU0sbUJBQW1CLEdBQUcsS0FBSyxFQUN0QyxTQUEwQixFQUMxQixNQUFjLEVBQ0MsRUFBRTtJQUNqQixNQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLGlDQUF5QixDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQ2hFLE1BQU0sRUFDSixJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FDYixHQUFHLE1BQU0sS0FBSyxDQUFDLEtBQUssQ0FBQztRQUNwQixNQUFNLEVBQUUsTUFBTTtRQUNkLE1BQU0sRUFBRSxJQUFBLDZDQUFzQixHQUFFO1FBQ2hDLE9BQU8sRUFBRSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUU7S0FDeEIsQ0FBQyxDQUFBO0lBRUYsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ1YsTUFBTSxJQUFJLG1CQUFXLENBQ25CLG1CQUFXLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFDM0IsaUJBQWlCLE1BQU0sZ0JBQWdCLENBQ3hDLENBQUE7SUFDSCxDQUFDO0lBRUQsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDdEIsTUFBTSxJQUFJLG1CQUFXLENBQ25CLG1CQUFXLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFDN0IsK0NBQStDLENBQ2hELENBQUE7SUFDSCxDQUFDO0lBRUQsSUFBQSxvREFBNEIsRUFBQyxJQUFJLENBQUMsQ0FBQTtJQUNsQyxNQUFNLElBQUEsZ0VBQW1DLEVBQ3ZDLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLElBQUksRUFFekIsRUFDSixFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsQ0FDcEQsQ0FBQTtBQUNILENBQUMsQ0FBQTtBQWxDWSxRQUFBLG1CQUFtQix1QkFrQy9CIn0=
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.loadCompleteCartFields = void 0;
4
+ const node_module_1 = require("node:module");
5
+ const node_path_1 = require("node:path");
6
+ const utils_1 = require("@medusajs/framework/utils");
7
+ let cachedFields;
8
+ /**
9
+ * The fields complete-cart loads its cart with (Medusa 2.19.0
10
+ * `completeCartFields`, core-flows dist/cart/utils/fields.js), so the
11
+ * completion check hands the validate participants exactly the cart shape
12
+ * the completion does. core-flows does not export it, so it is read from the
13
+ * core-flows copy `@medusajs/medusa` itself uses. A Medusa upgrade that moves
14
+ * the file fails here loudly instead of checking a different cart shape.
15
+ */
16
+ const loadCompleteCartFields = () => {
17
+ if (cachedFields) {
18
+ return cachedFields;
19
+ }
20
+ const coreFlowsEntry = (0, node_module_1.createRequire)(require.resolve("@medusajs/medusa/core-flows")).resolve("@medusajs/core-flows");
21
+ const { completeCartFields } = require((0, node_path_1.join)((0, node_path_1.dirname)(coreFlowsEntry), "cart", "utils", "fields.js"));
22
+ if (!Array.isArray(completeCartFields) ||
23
+ !completeCartFields.every((field) => typeof field === "string")) {
24
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.UNEXPECTED_STATE, "Medusa's complete-cart field list could not be read.");
25
+ }
26
+ cachedFields = completeCartFields;
27
+ return cachedFields;
28
+ };
29
+ exports.loadCompleteCartFields = loadCompleteCartFields;
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcGxldGUtY2FydC1maWVsZHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvd29ya2Zsb3dzL2hvb2tzL2NvbXBsZXRlLWNhcnQtZmllbGRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZDQUEyQztBQUMzQyx5Q0FBeUM7QUFFekMscURBQXVEO0FBRXZELElBQUksWUFBa0MsQ0FBQTtBQUV0Qzs7Ozs7OztHQU9HO0FBQ0ksTUFBTSxzQkFBc0IsR0FBRyxHQUFhLEVBQUU7SUFDbkQsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNqQixPQUFPLFlBQVksQ0FBQTtJQUNyQixDQUFDO0lBRUQsTUFBTSxjQUFjLEdBQUcsSUFBQSwyQkFBYSxFQUNsQyxPQUFPLENBQUMsT0FBTyxDQUFDLDZCQUE2QixDQUFDLENBQy9DLENBQUMsT0FBTyxDQUFDLHNCQUFzQixDQUFDLENBQUE7SUFDakMsTUFBTSxFQUFFLGtCQUFrQixFQUFFLEdBQUcsT0FBTyxDQUNwQyxJQUFBLGdCQUFJLEVBQUMsSUFBQSxtQkFBTyxFQUFDLGNBQWMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsV0FBVyxDQUFDLENBQ3hCLENBQUE7SUFFckMsSUFDRSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUM7UUFDbEMsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLE9BQU8sS0FBSyxLQUFLLFFBQVEsQ0FBQyxFQUMvRCxDQUFDO1FBQ0QsTUFBTSxJQUFJLG1CQUFXLENBQ25CLG1CQUFXLENBQUMsS0FBSyxDQUFDLGdCQUFnQixFQUNsQyxzREFBc0QsQ0FDdkQsQ0FBQTtJQUNILENBQUM7SUFFRCxZQUFZLEdBQUcsa0JBQThCLENBQUE7SUFDN0MsT0FBTyxZQUFZLENBQUE7QUFDckIsQ0FBQyxDQUFBO0FBeEJZLFFBQUEsc0JBQXNCLDBCQXdCbEMifQ==
@@ -172,4 +172,4 @@ const compensateCompleteCartOrderCreatedParticipants = async (compensation, cont
172
172
  }
173
173
  };
174
174
  exports.compensateCompleteCartOrderCreatedParticipants = compensateCompleteCartOrderCreatedParticipants;
175
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcGxldGUtY2FydC1wYXJ0aWNpcGFudHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvd29ya2Zsb3dzL2hvb2tzL2NvbXBsZXRlLWNhcnQtcGFydGljaXBhbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUlBLHFEQUtrQztBQUNsQyxxRUFBZ0Y7QUFRaEYseUdBSXdEO0FBbUJ4RCxNQUFNLGVBQWUsR0FBRyxDQUN0QixJQUEwQixFQUMxQixTQUEwQixFQUMxQixPQUFnRCxFQUNoQixFQUFFLENBQ2xDLE9BQU87SUFDTCxDQUFDLENBQUMsSUFBQSxvRUFBOEIsRUFBQyxPQUFPLEVBQUUsSUFBSSxDQUFDO0lBQy9DLENBQUMsQ0FBQyxJQUFBLGtFQUE0QixFQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQTtBQUVuRCxNQUFNLFFBQVEsR0FBRyxDQUFDLFNBQTBCLEVBQUUsT0FBZSxFQUFRLEVBQUU7SUFDckUsSUFBSSxDQUFDO1FBQ0gsU0FBUzthQUNOLE9BQU8sQ0FDTixpQ0FBeUIsQ0FBQyxNQUFNLENBQ2pDO2FBQ0EsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQ25CLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCwwREFBMEQ7SUFDNUQsQ0FBQztBQUNILENBQUMsQ0FBQTtBQWdCRDs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxpQkFBaUIsR0FBRyxLQUFLLEVBQzdCLFVBQWtCLEVBQ2xCLGFBQXFCLEVBQ3JCLFNBQTBCLEVBQzFCLE9BQWdDLEVBQ2pCLEVBQUU7SUFDakIsTUFBTSxRQUFRLEdBQ1osOEJBR0QsQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUE7SUFDekIsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2QsTUFBTSxJQUFJLG1CQUFXLENBQ25CLG1CQUFXLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFDM0IsYUFBYSxVQUFVLHNCQUFzQixDQUM5QyxDQUFBO0lBQ0gsQ0FBQztJ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
175
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcGxldGUtY2FydC1wYXJ0aWNpcGFudHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvd29ya2Zsb3dzL2hvb2tzL2NvbXBsZXRlLWNhcnQtcGFydGljaXBhbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUlBLHFEQUtrQztBQUNsQyxxRUFBZ0Y7QUFRaEYseUdBSXdEO0FBNEJ4RCxNQUFNLGVBQWUsR0FBRyxDQUN0QixJQUEwQixFQUMxQixTQUEwQixFQUMxQixPQUFnRCxFQUNoQixFQUFFLENBQ2xDLE9BQU87SUFDTCxDQUFDLENBQUMsSUFBQSxvRUFBOEIsRUFBQyxPQUFPLEVBQUUsSUFBSSxDQUFDO0lBQy9DLENBQUMsQ0FBQyxJQUFBLGtFQUE0QixFQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQTtBQUVuRCxNQUFNLFFBQVEsR0FBRyxDQUFDLFNBQTBCLEVBQUUsT0FBZSxFQUFRLEVBQUU7SUFDckUsSUFBSSxDQUFDO1FBQ0gsU0FBUzthQUNOLE9BQU8sQ0FDTixpQ0FBeUIsQ0FBQyxNQUFNLENBQ2pDO2FBQ0EsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQ25CLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCwwREFBMEQ7SUFDNUQsQ0FBQztBQUNILENBQUMsQ0FBQTtBQWdCRDs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxpQkFBaUIsR0FBRyxLQUFLLEVBQzdCLFVBQWtCLEVBQ2xCLGFBQXFCLEVBQ3JCLFNBQTBCLEVBQzFCLE9BQWdDLEVBQ2pCLEVBQUU7SUFDakIsTUFBTSxRQUFRLEdBQ1osOEJBR0QsQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUE7SUFDekIsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2QsTUFBTSxJQUFJLG1CQUFXLENBQ25CLG1CQUFXLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFDM0IsYUFBYSxVQUFVLHNCQUFzQixDQUM5QyxDQUFBO0lBQ0gsQ0FBQztJ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
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const core_flows_1 = require("@medusajs/medusa/core-flows");
4
4
  const complete_cart_participants_1 = require("./complete-cart-participants");
5
+ const refunded_cart_payment_1 = require("./refunded-cart-payment");
5
6
  /**
6
7
  * The ONLY registrations of these two hooks in the whole shop. Medusa 2.19.0
7
8
  * throws "Cannot define multiple hook handlers" for a second handler
@@ -9,9 +10,12 @@ const complete_cart_participants_1 = require("./complete-cart-participants");
9
10
  * `completeCartHooks()` on their module service instead and the base runs
10
11
  * their workflows. The cart path never reads feature toggles.
11
12
  */
12
- core_flows_1.completeCartWorkflow.hooks.validate((input, context) => (0, complete_cart_participants_1.runCompleteCartValidateParticipants)(input, context));
13
+ core_flows_1.completeCartWorkflow.hooks.validate(async (input, context) => {
14
+ (0, refunded_cart_payment_1.assertCartPaymentNotRefunded)(input.cart);
15
+ return await (0, complete_cart_participants_1.runCompleteCartValidateParticipants)(input, context);
16
+ });
13
17
  // Medusa 2.19.0 creates this hook internally but omits it from complete cart's
14
18
  // public declaration. Keep the cast isolated to this version-specific edge.
15
19
  const { orderCreated } = core_flows_1.completeCartWorkflow.hooks;
16
20
  orderCreated((input, context) => (0, complete_cart_participants_1.runCompleteCartOrderCreatedParticipants)(input, context), complete_cart_participants_1.compensateCompleteCartOrderCreatedParticipants);
17
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcGxldGUtY2FydC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy93b3JrZmxvd3MvaG9va3MvY29tcGxldGUtY2FydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUNBLDREQUFrRTtBQUdsRSw2RUFNcUM7QUFFckM7Ozs7OztHQU1HO0FBRUgsaUNBQW9CLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUNyRCxJQUFBLGdFQUFtQyxFQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FDcEQsQ0FBQTtBQWFELCtFQUErRTtBQUMvRSw0RUFBNEU7QUFDNUUsTUFBTSxFQUFFLFlBQVksRUFBRSxHQUFHLGlDQUFvQixDQUFDLEtBRTdDLENBQUE7QUFFRCxZQUFZLENBQ1YsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxJQUFBLG9FQUF1QyxFQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsRUFDM0UsMkVBQThDLENBQy9DLENBQUEifQ==
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcGxldGUtY2FydC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy93b3JrZmxvd3MvaG9va3MvY29tcGxldGUtY2FydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUNBLDREQUFrRTtBQUdsRSw2RUFNcUM7QUFDckMsbUVBQXNFO0FBRXRFOzs7Ozs7R0FNRztBQUVILGlDQUFvQixDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRTtJQUMzRCxJQUFBLG9EQUE0QixFQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUN4QyxPQUFPLE1BQU0sSUFBQSxnRUFBbUMsRUFBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUE7QUFDbEUsQ0FBQyxDQUFDLENBQUE7QUFhRiwrRUFBK0U7QUFDL0UsNEVBQTRFO0FBQzVFLE1BQU0sRUFBRSxZQUFZLEVBQUUsR0FBRyxpQ0FBb0IsQ0FBQyxLQUU3QyxDQUFBO0FBRUQsWUFBWSxDQUNWLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsSUFBQSxvRUFBdUMsRUFBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLEVBQzNFLDJFQUE4QyxDQUMvQyxDQUFBIn0=
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const utils_1 = require("@medusajs/framework/utils");
4
+ const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
5
+ const core_flows_1 = require("@medusajs/medusa/core-flows");
6
+ /**
7
+ * A draft order starts without a customer order confirmation: drafts are
8
+ * Admin tasks (sample shipments, manual orders), and the Admin opts in per
9
+ * draft through the "Bestellbestätigung" widget. `createOrderWorkflow` is the
10
+ * workflow behind `POST /admin/draft-orders`; its `no_notification_order`
11
+ * flag is overridden here because the Admin dashboard never sends it.
12
+ */
13
+ core_flows_1.createOrderWorkflow.hooks.orderCreated(async ({ order }, { container }) => {
14
+ const { data } = await container
15
+ .resolve(utils_1.ContainerRegistrationKeys.QUERY)
16
+ .graph({
17
+ entity: "order",
18
+ fields: ["id", "is_draft_order", "no_notification"],
19
+ filters: { id: order.id },
20
+ });
21
+ const created = data[0];
22
+ if (!created?.is_draft_order || created.no_notification === true) {
23
+ return;
24
+ }
25
+ await container
26
+ .resolve(utils_1.Modules.ORDER)
27
+ .updateOrders(created.id, { no_notification: true });
28
+ return new workflows_sdk_1.StepResponse(undefined, {
29
+ id: created.id,
30
+ no_notification: created.no_notification ?? false,
31
+ });
32
+ }, async (previous, { container }) => {
33
+ if (!previous)
34
+ return;
35
+ await container
36
+ .resolve(utils_1.Modules.ORDER)
37
+ .updateOrders(previous.id, { no_notification: previous.no_notification });
38
+ });
39
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhZnQtb3JkZXItY29uZmlybWF0aW9uLWRlZmF1bHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvd29ya2Zsb3dzL2hvb2tzL2RyYWZ0LW9yZGVyLWNvbmZpcm1hdGlvbi1kZWZhdWx0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQ0EscURBR2tDO0FBQ2xDLHFFQUFnRTtBQUNoRSw0REFBaUU7QUFhakU7Ozs7OztHQU1HO0FBQ0gsZ0NBQW1CLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FDcEMsS0FBSyxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFO0lBQ2pDLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxNQUFNLFNBQVM7U0FDN0IsT0FBTyxDQUFDLGlDQUF5QixDQUFDLEtBQUssQ0FBQztTQUN4QyxLQUFLLENBQUM7UUFDTCxNQUFNLEVBQUUsT0FBTztRQUNmLE1BQU0sRUFBRSxDQUFDLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxpQkFBaUIsQ0FBQztRQUNuRCxPQUFPLEVBQUUsRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRTtLQUMxQixDQUFDLENBQUE7SUFDSixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUE2QixDQUFBO0lBQ25ELElBQUksQ0FBQyxPQUFPLEVBQUUsY0FBYyxJQUFJLE9BQU8sQ0FBQyxlQUFlLEtBQUssSUFBSSxFQUFFLENBQUM7UUFDakUsT0FBTTtJQUNSLENBQUM7SUFFRCxNQUFNLFNBQVM7U0FDWixPQUFPLENBQXNCLGVBQU8sQ0FBQyxLQUFLLENBQUM7U0FDM0MsWUFBWSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsRUFBRSxlQUFlLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQTtJQUN0RCxPQUFPLElBQUksNEJBQVksQ0FBa0MsU0FBUyxFQUFFO1FBQ2xFLEVBQUUsRUFBRSxPQUFPLENBQUMsRUFBRTtRQUNkLGVBQWUsRUFBRSxPQUFPLENBQUMsZUFBZSxJQUFJLEtBQUs7S0FDbEQsQ0FBQyxDQUFBO0FBQ0osQ0FBQyxFQUNELEtBQUssRUFBRSxRQUEwQyxFQUFFLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRTtJQUNsRSxJQUFJLENBQUMsUUFBUTtRQUFFLE9BQU07SUFDckIsTUFBTSxTQUFTO1NBQ1osT0FBTyxDQUFzQixlQUFPLENBQUMsS0FBSyxDQUFDO1NBQzNDLFlBQVksQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLEVBQUUsZUFBZSxFQUFFLFFBQVEsQ0FBQyxlQUFlLEVBQUUsQ0FBQyxDQUFBO0FBQzdFLENBQUMsQ0FDRixDQUFBIn0=
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.assertCartPaymentNotRefunded = exports.REFUNDED_CART_PAYMENT_MESSAGE = void 0;
4
+ const utils_1 = require("@medusajs/framework/utils");
5
+ exports.REFUNDED_CART_PAYMENT_MESSAGE = "Die Zahlung für diesen Warenkorb wurde bereits erstattet. Bitte bestelle erneut.";
6
+ /**
7
+ * Refuses to complete a cart whose payment was already refunded. A completion
8
+ * that fails after the provider captured (Stripe with `capture: true` captures
9
+ * on confirmation) makes Medusa 2.19.0 refund the payment
10
+ * (`compensate-payment-if-needed`) and then fail to recreate the session,
11
+ * because a succeeded PaymentIntent cannot be cancelled. The cart stays open
12
+ * with the captured session, and a later completion would authorize that
13
+ * refunded payment again and place an order nobody paid for. Storefronts
14
+ * replace such a cart; this check is the backstop for every caller.
15
+ */
16
+ const assertCartPaymentNotRefunded = (cart) => {
17
+ const refundedAmount = cart.payment_collection?.refunded_amount;
18
+ if (refundedAmount != null && utils_1.MathBN.gt(refundedAmount, 0)) {
19
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.NOT_ALLOWED, exports.REFUNDED_CART_PAYMENT_MESSAGE);
20
+ }
21
+ };
22
+ exports.assertCartPaymentNotRefunded = assertCartPaymentNotRefunded;
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVmdW5kZWQtY2FydC1wYXltZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL3dvcmtmbG93cy9ob29rcy9yZWZ1bmRlZC1jYXJ0LXBheW1lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EscURBQStEO0FBRWxELFFBQUEsNkJBQTZCLEdBQ3hDLGtGQUFrRixDQUFBO0FBUXBGOzs7Ozs7Ozs7R0FTRztBQUNJLE1BQU0sNEJBQTRCLEdBQUcsQ0FBQyxJQUFxQixFQUFRLEVBQUU7SUFDMUUsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixFQUFFLGVBQWUsQ0FBQTtJQUUvRCxJQUFJLGNBQWMsSUFBSSxJQUFJLElBQUksY0FBTSxDQUFDLEVBQUUsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUMzRCxNQUFNLElBQUksbUJBQVcsQ0FDbkIsbUJBQVcsQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUM3QixxQ0FBNkIsQ0FDOUIsQ0FBQTtJQUNILENBQUM7QUFDSCxDQUFDLENBQUE7QUFUWSxRQUFBLDRCQUE0QixnQ0FTeEMifQ==
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.markZeroTotalOrderPaidWorkflow = void 0;
4
+ const utils_1 = require("@medusajs/framework/utils");
5
+ const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
6
+ const core_flows_1 = require("@medusajs/medusa/core-flows");
7
+ /**
8
+ * An order that costs nothing and has no payment collection (an Admin draft,
9
+ * e.g. a free sample shipment) would stay "Nicht bezahlt" forever: Medusa
10
+ * derives the payment status from payment collections only. A completed
11
+ * 0 € collection makes it "Bezahlt" in the Admin and in database queries,
12
+ * without a payment provider. Orders that already carry a collection (every
13
+ * checkout order) are left alone, so the workflow is safe to run twice.
14
+ */
15
+ exports.markZeroTotalOrderPaidWorkflow = (0, workflows_sdk_1.createWorkflow)("order-mark-zero-total-paid", (input) => {
16
+ const lockKey = (0, workflows_sdk_1.transform)(input, ({ order_id }) => `order-zero-total-paid:${order_id}`);
17
+ (0, core_flows_1.acquireLockStep)({ key: lockKey, timeout: 10, ttl: 60 });
18
+ const { data: orders } = (0, core_flows_1.useQueryGraphStep)({
19
+ entity: "order",
20
+ fields: ["id", "total", "payment_collections.id"],
21
+ filters: { id: input.order_id },
22
+ });
23
+ const needsPayment = (0, workflows_sdk_1.transform)(orders, (rows) => {
24
+ const order = rows[0];
25
+ return (!!order &&
26
+ utils_1.MathBN.eq(utils_1.MathBN.convert(order.total), 0) &&
27
+ !(order.payment_collections ?? []).some(Boolean));
28
+ });
29
+ const created = (0, workflows_sdk_1.when)("order-zero-total-needs-payment", needsPayment, (needed) => needed).then(() => {
30
+ const collections = core_flows_1.createOrderPaymentCollectionWorkflow.runAsStep({
31
+ input: { order_id: input.order_id, amount: 0 },
32
+ });
33
+ const completion = (0, workflows_sdk_1.transform)(collections, (rows) => ({
34
+ selector: { id: rows[0].id },
35
+ update: { status: utils_1.PaymentCollectionStatus.COMPLETED },
36
+ }));
37
+ (0, core_flows_1.updatePaymentCollectionStep)(completion);
38
+ return collections;
39
+ });
40
+ (0, core_flows_1.releaseLockStep)({ key: lockKey });
41
+ return new workflows_sdk_1.WorkflowResponse((0, workflows_sdk_1.transform)({ created }, ({ created }) => ({
42
+ marked_paid: !!created?.length,
43
+ })));
44
+ });
45
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFyay16ZXJvLXRvdGFsLW9yZGVyLXBhaWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvd29ya2Zsb3dzL29yZGVyL21hcmstemVyby10b3RhbC1vcmRlci1wYWlkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHFEQUdrQztBQUNsQyxxRUFLMEM7QUFDMUMsNERBTW9DO0FBV3BDOzs7Ozs7O0dBT0c7QUFDVSxRQUFBLDhCQUE4QixHQUFHLElBQUEsOEJBQWMsRUFDMUQsNEJBQTRCLEVBQzVCLENBQUMsS0FBa0MsRUFBRSxFQUFFO0lBQ3JDLE1BQU0sT0FBTyxHQUFHLElBQUEseUJBQVMsRUFDdkIsS0FBSyxFQUNMLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLENBQUMseUJBQXlCLFFBQVEsRUFBRSxDQUN0RCxDQUFBO0lBQ0QsSUFBQSw0QkFBZSxFQUFDLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFBO0lBRXZELE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEdBQUcsSUFBQSw4QkFBaUIsRUFBQztRQUN6QyxNQUFNLEVBQUUsT0FBTztRQUNmLE1BQU0sRUFBRSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsd0JBQXdCLENBQUM7UUFDakQsT0FBTyxFQUFFLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxRQUFRLEVBQUU7S0FDaEMsQ0FBQyxDQUFBO0lBQ0YsTUFBTSxZQUFZLEdBQUcsSUFBQSx5QkFBUyxFQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksRUFBVyxFQUFFO1FBQ3ZELE1BQU0sS0FBSyxHQUFJLElBQTRCLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDOUMsT0FBTyxDQUNMLENBQUMsQ0FBQyxLQUFLO1lBQ1AsY0FBTSxDQUFDLEVBQUUsQ0FBQyxjQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUF3QixDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzVELENBQUMsQ0FBQyxLQUFLLENBQUMsbUJBQW1CLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUNqRCxDQUFBO0lBQ0gsQ0FBQyxDQUFDLENBQUE7SUFFRixNQUFNLE9BQU8sR0FBRyxJQUFBLG9CQUFJLEVBQ2xCLGdDQUFnQyxFQUNoQyxZQUFZLEVBQ1osQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FDbkIsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO1FBQ1YsTUFBTSxXQUFXLEdBQUcsaURBQW9DLENBQUMsU0FBUyxDQUFDO1lBQ2pFLEtBQUssRUFBRSxFQUFFLFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUU7U0FDL0MsQ0FBQyxDQUFBO1FBQ0YsTUFBTSxVQUFVLEdBQUcsSUFBQSx5QkFBUyxFQUFDLFdBQVcsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNuRCxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUM1QixNQUFNLEVBQUUsRUFBRSxNQUFNLEVBQUUsK0JBQXVCLENBQUMsU0FBUyxFQUFFO1NBQ3RELENBQUMsQ0FBQyxDQUFBO1FBQ0gsSUFBQSx3Q0FBMkIsRUFBQyxVQUFVLENBQUMsQ0FBQTtRQUN2QyxPQUFPLFdBQVcsQ0FBQTtJQUNwQixDQUFDLENBQUMsQ0FBQTtJQUVGLElBQUEsNEJBQWUsRUFBQyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFBO0lBQ2pDLE9BQU8sSUFBSSxnQ0FBZ0IsQ0FDekIsSUFBQSx5QkFBUyxFQUNQLEVBQUUsT0FBTyxFQUFFLEVBQ1gsQ0FBQyxFQUFFLE9BQU8sRUFBRSxFQUFnQyxFQUFFLENBQUMsQ0FBQztRQUM5QyxXQUFXLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNO0tBQy9CLENBQUMsQ0FDSCxDQUNGLENBQUE7QUFDSCxDQUFDLENBQ0YsQ0FBQSJ9
package/README.md CHANGED
@@ -41,6 +41,9 @@ packing lists) and S3 file storage, and the turnkey `medusa-config.ts` preset
41
41
  repair").
42
42
  - Requires passwords of at least 15 characters for customers and Admin users
43
43
  (see "Password policy").
44
+ - Starts Admin draft orders without a customer order confirmation and marks
45
+ placed 0 € orders without payment as paid (see "Draft orders and 0 €
46
+ orders").
44
47
  - Exports the shop's `medusa-config.ts` helpers from
45
48
  `@hartl-services/medusa-base/config` and Sentry's `register()` from
46
49
  `@hartl-services/medusa-base/instrumentation` (see "Config helpers" and
@@ -662,6 +665,25 @@ Affiliate 100 (`affiliate-validate-complete-cart`,
662
665
  instead of silently leaving partial state.
663
666
  - The base never swallows a participant error and never reads toggles here.
664
667
 
668
+ **Refunded payment.** Before any `validate` participant, the base refuses a
669
+ cart whose payment collection already has a refund (`NOT_ALLOWED`, "Die
670
+ Zahlung für diesen Warenkorb wurde bereits erstattet. Bitte bestelle
671
+ erneut."). With Stripe's `capture: true` a completion failing after the
672
+ confirmation makes Medusa 2.19.0 refund the payment and keep the cart open
673
+ with the captured session (the succeeded PaymentIntent cannot be cancelled);
674
+ completing that cart later would place an order on the refunded payment. A
675
+ storefront replaces such a cart with a fresh one.
676
+
677
+ **Completion check.** `POST /store/carts/:id/completion-check` (contracts
678
+ `paths/checkout`, `types/checkout-store`) runs the same checks without
679
+ completing: it loads the cart with Medusa's own complete-cart field list,
680
+ refuses a completed or refunded cart and runs every `validate` participant.
681
+ It answers `{ cart_id, ready: true }` or the error the completion would
682
+ answer with, and writes nothing. Stripe captures on confirmation, so a
683
+ Storefront calls it right before confirming a payment. Plugins that guard
684
+ `/store/carts/:id/complete` with a middleware register it for this route too
685
+ (the affiliate plugin's registered-email gate does).
686
+
665
687
 
666
688
  ## Sentry logger wrapper
667
689
 
@@ -739,6 +761,36 @@ links itself:
739
761
  Nothing to configure; `medusa db:migrate` after installing or upgrading to
740
762
  0.4.1 is enough.
741
763
 
764
+ ## Draft orders and 0 € orders
765
+
766
+ Draft orders (Medusa's `@medusajs/draft-order` plugin, loaded by default) are
767
+ the shop's way to enter an order in the Admin: sample shipments, orders taken
768
+ by phone, replacements. Item prices and the shipping amount are set directly
769
+ in the draft; converting it never involves a payment provider.
770
+
771
+ - **Customer order confirmation off by default.** The
772
+ `createOrderWorkflow.hooks.orderCreated` hook
773
+ (`workflows/hooks/draft-order-confirmation-default`) sets Medusa's
774
+ `no_notification` on every new draft, also when an API caller sent
775
+ `no_notification_order: false`. The Admin switches it per draft in the
776
+ **Bestellbestätigung** widget on the draft's detail page
777
+ (`GET`/`POST /admin/draft-orders/:id/order-confirmation`, see the E-Mail
778
+ "Admin API"). On conversion the `order-placed` subscriber records the
779
+ customer confirmation as `suppressed` (`notifications_disabled`); the copy
780
+ to the shop's order address is still sent. The shipment mail follows the
781
+ Admin's "notify customer" choice per shipment, not this switch.
782
+ - **0 € orders count as paid.** Medusa derives an order's payment status from
783
+ its payment collections only, so a converted 0 € draft would stay
784
+ "Nicht bezahlt". The subscriber `order-zero-total-paid` runs
785
+ `order-mark-zero-total-paid` on `order.placed`: an order with a total of 0
786
+ and no payment collection gets a completed 0 € payment collection and reads
787
+ "Bezahlt" (`payment_status: captured`). Orders that already carry a
788
+ collection, i.e. every checkout order, are left alone. In SQL, a paid
789
+ order is one whose linked `payment_collection` (via
790
+ `order_payment_collection`) has `status = 'completed'`.
791
+
792
+ Orders placed before installing this version keep their state.
793
+
742
794
  ## Config helpers
743
795
 
744
796
  `@hartl-services/medusa-base/config` holds the generic environment helpers a
@@ -917,7 +969,7 @@ feature is switched on again.
917
969
  | Key | Label | Default | Gates | Keeps running when off |
918
970
  | --------------------- | ---------------------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------- |
919
971
  | (plugin switch) | E-Mail | on | every route under `/admin/email/*` (mail log, resends, terms versions; 404); jobs `email-reconcile-attempts`, `email-reconcile-pending-messages`, `email-retry-messages`; every feature below | checkout and orders; already queued messages stay stored |
920
- | `order_mails` | Bestell-Mails | on | subscribers `order-placed`, `email-shipment-created`, `email-order-canceled`, `return-requested`, `return-received`, `documents-shipment-invoice-assignment-decided`, `documents-order-cancellation-ready`, `documents-refund-ready` | jobs, Admin routes, already created messages |
972
+ | `order_mails` | Bestell-Mails | on | subscribers `order-placed`, `email-shipment-created`, `email-order-canceled`, `return-requested`, `return-received`, `documents-shipment-invoice-assignment-decided`, `documents-order-cancellation-ready`, `documents-refund-ready`; route `/admin/draft-orders/:id/order-confirmation` (404) and its draft-order widget | jobs, Admin routes, already created messages |
921
973
  | `account_mails` | Konto-Mails | on | subscribers `password-reset`, `user-invite`, `customer-verification` (the last one only with `customer_verification` on as well) | jobs, Admin routes, already created messages |
922
974
  | `customer_verification` | Kontobestätigung per E-Mail | off | Medusa's e-mail verification of customer logins (see "Kontobestätigung per E-Mail"), route `POST /store/customer-verification/resend` (404 while off), subscriber `customer-verification`; child of `account_mails` | checkout and orders; confirmed accounts stay confirmed, already created messages |
923
975
  | `affiliate_reminders` | Affiliate-Mails | on | subscribers `affiliate-consignment-reminder-due` (reminders to affiliates) and `affiliate-application-submitted` (notification to the shop about a new partner application) | jobs, Admin routes, already created messages |
@@ -1469,6 +1521,11 @@ Email exposes authenticated Admin operations at:
1469
1521
  most 5 MiB with its `effective_at` timestamp.
1470
1522
  - `GET /admin/email/terms-versions/:id/download` streams one authenticated,
1471
1523
  non-cacheable PDF download.
1524
+ - `GET /admin/draft-orders/:id/order-confirmation` returns
1525
+ `AdminDraftOrderConfirmationResponse` (`{ draft_order_id,
1526
+ send_order_confirmation }`); `POST` with
1527
+ `{ send_order_confirmation: boolean }` switches it. Both answer 404 for an
1528
+ order that is not (or no longer) a draft and while `order_mails` is off.
1472
1529
 
1473
1530
  List and detail responses expose only safe identifiers and linkage metadata,
1474
1531
  kind/status and safe status codes, resource references, trigger, attempt
@@ -1501,6 +1558,12 @@ elsewhere), safe message and attempt status, and an explicitly confirmed
1501
1558
  resend action.
1502
1559
  Recipient, template, and payload data are intentionally absent from the page.
1503
1560
 
1561
+ The draft-order detail page carries the **Bestellbestätigung** widget (zone
1562
+ `draft_order.details.side.after`, hidden while `order_mails` is off). Its
1563
+ switch "An Kunden senden" starts off and decides whether the customer receives
1564
+ the order confirmation when the draft is converted (see "Draft orders and
1565
+ 0 € orders").
1566
+
1504
1567
  The `AGB/PDF-Versionen` section manages the global Terms PDFs. Admins can
1505
1568
  upload a PDF of at most 5 MiB with its effective date, review versions newest
1506
1569
  first, and download a selected version. Uploads receive a fresh request UUID;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hartl-services/medusa-base",
3
- "version": "2.3.0",
3
+ "version": "2.5.0",
4
4
  "description": "Base plugin for Hartl Services Medusa shops: per-plugin feature toggles with a generic Admin settings page, a Store endpoint for storefronts, enforcement helpers, the complete-cart hook composition, the root redirect, cart-promotion link repair, the built-in E-Mail, Documents and S3 file storage modules, config helpers with the turnkey food-shop preset, and the Sentry logger wrapper and instrumentation.",
5
5
  "license": "MIT",
6
6
  "files": [
@@ -88,7 +88,7 @@
88
88
  "mime-types": "3.0.1",
89
89
  "nodemailer": "6.10.1",
90
90
  "ulid": "^2.4.0",
91
- "@hartl-services/medusa-food-supplements-contracts": "^0.21.0"
91
+ "@hartl-services/medusa-food-supplements-contracts": "^0.25.0"
92
92
  },
93
93
  "devDependencies": {
94
94
  "@medusajs/admin-sdk": "2.19.0",