@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.
- package/.medusa/server/src/admin/index.js +105 -47
- package/.medusa/server/src/admin/index.mjs +105 -47
- package/.medusa/server/src/api/admin/draft-orders/[id]/order-confirmation/route.js +23 -0
- package/.medusa/server/src/api/middlewares.js +16 -2
- package/.medusa/server/src/api/store/carts/[id]/completion-check/route.js +15 -0
- package/.medusa/server/src/subscribers/order-zero-total-paid.js +19 -0
- package/.medusa/server/src/workflows/email/update-draft-order-confirmation.js +49 -0
- package/.medusa/server/src/workflows/hooks/check-cart-completion.js +32 -0
- package/.medusa/server/src/workflows/hooks/complete-cart-fields.js +30 -0
- package/.medusa/server/src/workflows/hooks/complete-cart-participants.js +1 -1
- package/.medusa/server/src/workflows/hooks/complete-cart.js +6 -2
- package/.medusa/server/src/workflows/hooks/draft-order-confirmation-default.js +39 -0
- package/.medusa/server/src/workflows/hooks/refunded-cart-payment.js +23 -0
- package/.medusa/server/src/workflows/order/mark-zero-total-order-paid.js +45 -0
- package/README.md +64 -1
- package/package.json +2 -2
|
@@ -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
|
|
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
|
|
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 {
|
|
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 {
|
|
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
|
|
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,
|
|
265
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlkZGxld2FyZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXBpL21pZGRsZXdhcmVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsbURBS2lDO0FBQ2pDLCtHQUtrRjtBQUNsRixtR0FHNEU7QUFDNUUsMkZBTXdFO0FBQ3hFLDJIQUFrSTtBQUNsSSwyRkFBdUg7QUFFdkgsa0VBR3FDO0FBQ3JDLDhEQUE4RDtBQUM5RCxxR0FBOEY7QUFDOUYsdURBQXlEO0FBQ3pELHNDQUFnRDtBQUVoRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLGFBQWEsR0FBRyxDQUFDLE9BQWUsRUFBRSxHQUFHLElBQTJCLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDMUUsT0FBTztJQUNQLFdBQVcsRUFBRSxDQUFDLElBQUEsNkJBQW9CLEVBQUMseUNBQXVCLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztDQUN0RSxDQUFDLENBQUE7QUFFRix5RUFBeUU7QUFDekUsbUVBQW1FO0FBQ25FLHVFQUF1RTtBQUN2RSwyRUFBMkU7QUFDM0UsMEVBQTBFO0FBQzFFLHVDQUF1QztBQUN2QyxrQkFBZSxJQUFBLHdCQUFpQixFQUFDO0lBQy9CLE1BQU0sRUFBRTtRQUNOO1lBQ0UsT0FBTyxFQUFFLHdCQUF3QjtZQUNqQyxPQUFPLEVBQUUsQ0FBQyxNQUFNLENBQUM7WUFDakIsV0FBVyxFQUFFLENBQUMsSUFBQSwrQkFBd0IsRUFBQyw0Q0FBMEIsQ0FBQyxDQUFDO1NBQ3BFO1FBQ0Q7WUFDRSxPQUFPLEVBQUUsNkNBQTZDO1lBQ3RELE9BQU8sRUFBRSxDQUFDLE1BQU0sQ0FBQztZQUNqQixXQUFXLEVBQUUsQ0FBQyxJQUFBLCtCQUF3QixFQUFDLDRDQUEwQixDQUFDLENBQUM7U0FDcEU7UUFDRDtZQUNFLE9BQU8sRUFBRSx3REFBd0Q7WUFDakUsT0FBTyxFQUFFLENBQUMsTUFBTSxDQUFDO1lBQ2pCLFdBQVcsRUFBRSxDQUFDLElBQUEsK0JBQXdCLEVBQUMsdUNBQXFCLENBQUMsQ0FBQztTQUMvRDtRQUNEO1lBQ0UsT0FBTyxFQUFFLDZEQUE2RDtZQUN0RSxPQUFPLEVBQUUsQ0FBQyxLQUFLLENBQUM7WUFDaEIsV0FBVyxFQUFFO2dCQUNYLElBQUEsZ0NBQXlCLEVBQUMsaURBQStCLEVBQUU7b0JBQ3pELE1BQU0sRUFBRSxLQUFLO2lCQUNkLENBQUM7YUFDSDtTQUNGO1FBQ0QsdUVBQXVFO1FBQ3ZFLHlFQUF5RTtRQUN6RSxxRUFBcUU7UUFDckUsd0VBQXdFO1FBQ3hFLG1EQUFtRDtRQUNuRCxrRUFBa0U7UUFDbEUsNkRBQTZEO1FBQzdEO1lBQ0UsT0FBTyxFQUFFLGNBQWM7WUFDdkIsV0FBVyxFQUFFLENBQUMsSUFBQSw2QkFBb0IsRUFBQyxxQ0FBbUIsQ0FBQyxDQUFDO1NBQ3pEO1FBQ0Q7WUFDRSxPQUFPLEVBQUUsdUJBQXVCO1lBQ2hDLE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQztZQUNoQixXQUFXLEVBQUU7Z0JBQ1gsSUFBQSxtQkFBWSxFQUFDLE1BQU0sRUFBRSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQztnQkFDM0MsSUFBQSxnQ0FBeUIsRUFBQyx5Q0FBaUMsRUFBRTtvQkFDM0QsTUFBTSxFQUFFLElBQUk7aUJBQ2IsQ0FBQzthQUNIO1NBQ0Y7UUFDRDtZQUNFLE9BQU8sRUFBRSwyQkFBMkI7WUFDcEMsT0FBTyxFQUFFLENBQUMsS0FBSyxDQUFDO1lBQ2hCLFdBQVcsRUFBRSxDQUFDLElBQUEsbUJBQVksRUFBQyxNQUFNLEVBQUUsQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztTQUMzRDtRQUNEO1lBQ0UsT0FBTyxFQUFFLG1DQUFtQztZQUM1QyxPQUFPLEVBQUUsQ0FBQyxNQUFNLENBQUM7WUFDakIsV0FBVyxFQUFFO2dCQUNYLElBQUEsbUJBQVksRUFBQyxNQUFNLEVBQUUsQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUM7Z0JBQzNDLElBQUEsK0JBQXdCLEVBQUMscUNBQTZCLENBQUM7YUFDeEQ7U0FDRjtRQUNEO1lBQ0UsT0FBTyxFQUFFLDZCQUE2QjtZQUN0QyxPQUFPLEVBQUUsQ0FBQyxLQUFLLENBQUM7WUFDaEIsV0FBVyxFQUFFO2dCQUNYLElBQUEsbUJBQVksRUFBQyxNQUFNLEVBQUUsQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUM7Z0JBQzNDLElBQUEsZ0NBQXlCLEVBQUMsOENBQXNDLEVBQUU7b0JBQ2hFLE1BQU0sRUFBRSxJQUFJO2lCQUNiLENBQUM7YUFDSDtTQUNGO1FBQ0Q7WUFDRSxVQUFVLEVBQUUsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFO1lBQ2hDLE9BQU8sRUFBRSw2QkFBNkI7WUFDdEMsT0FBTyxFQUFFLENBQUMsTUFBTSxDQUFDO1lBQ2pCLFdBQVcsRUFBRTtnQkFDWCxJQUFBLG1CQUFZLEVBQUMsTUFBTSxFQUFFLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDO2dCQUMzQyxJQUFBLCtCQUF3QixFQUFDLDBDQUFrQyxDQUFDO2FBQzdEO1NBQ0Y7UUFDRDtZQUNFLE9BQU8sRUFBRSwwQ0FBMEM7WUFDbkQsT0FBTyxFQUFFLENBQUMsS0FBSyxDQUFDO1lBQ2hCLFdBQVcsRUFBRSxDQUFDLElBQUEsbUJBQVksRUFBQyxNQUFNLEVBQUUsQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztTQUMzRDtRQUNELHVFQUF1RTtRQUN2RSw0REFBNEQ7UUFDNUQ7WUFDRSxPQUFPLEVBQUUsNENBQTRDO1lBQ3JELFdBQVcsRUFBRSxDQUFDLElBQUEsNkJBQW9CLEVBQUMscUNBQW1CLEVBQUUsYUFBYSxDQUFDLENBQUM7U0FDeEU7UUFDRDtZQUNFLE9BQU8sRUFBRSw0Q0FBNEM7WUFDckQsT0FBTyxFQUFFLENBQUMsTUFBTSxDQUFDO1lBQ2pCLFdBQVcsRUFBRTtnQkFDWCxJQUFBLCtCQUF3QixFQUFDLCtDQUF1QyxDQUFDO2FBQ2xFO1NBQ0Y7UUFDRCwrREFBK0Q7UUFDL0QsdUVBQXVFO1FBQ3ZFLHdFQUF3RTtRQUN4RSwyREFBMkQ7UUFDM0Q7WUFDRSxPQUFPLEVBQUUsOEJBQThCO1lBQ3ZDLFdBQVcsRUFBRTtnQkFDWCxJQUFBLDZCQUFvQixFQUNsQixxQ0FBbUIsRUFDbkIsZUFBZSxFQUNmLHVCQUF1QixDQUN4QjthQUNGO1NBQ0Y7UUFDRDtZQUNFLE9BQU8sRUFBRSxxQ0FBcUM7WUFDOUMsT0FBTyxFQUFFLENBQUMsTUFBTSxDQUFDO1lBQ2pCLFdBQVcsRUFBRSxDQUFDLElBQUEsK0JBQXdCLEVBQUMsd0RBQWdDLENBQUMsQ0FBQztTQUMxRTtRQUNELHNFQUFzRTtRQUN0RSxvRUFBb0U7UUFDcEUsd0VBQXdFO1FBQ3hFLHdFQUF3RTtRQUN4RSxpREFBaUQ7UUFDakQ7WUFDRSxPQUFPLEVBQUUsNEJBQTRCO1lBQ3JDLE9BQU8sRUFBRSxDQUFDLE1BQU0sQ0FBQztZQUNqQixXQUFXLEVBQUU7Z0JBQ1gsSUFBQSxtQkFBWSxFQUFDLEdBQUcsRUFBRSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsRUFBRSxFQUFFLGlCQUFpQixFQUFFLElBQUksRUFBRSxDQUFDO2dCQUNyRSw0RUFBbUM7YUFDcEM7U0FDRjtRQUNELHVFQUF1RTtRQUN2RSx3RUFBd0U7UUFDeEUseUVBQXlFO1FBQ3pFLHNFQUFzRTtRQUN0RSx3RUFBd0U7UUFDeEUsNkJBQTZCO1FBQzdCO1lBQ0UsT0FBTyxFQUFFLHNDQUFzQztZQUMvQyxXQUFXLEVBQUUsQ0FBQyx1Q0FBcUIsQ0FBQztTQUNyQztRQUNEO1lBQ0UsT0FBTyxFQUFFLG9DQUFvQztZQUM3QyxXQUFXLEVBQUUsQ0FBQyx1Q0FBcUIsQ0FBQztTQUNyQztRQUNELHVFQUF1RTtRQUN2RSxrRUFBa0U7UUFDbEUsbUVBQW1FO1FBQ25FLHFFQUFxRTtRQUNyRSxFQUFFO1FBQ0YsZ0JBQWdCO1FBQ2hCLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQztRQUNqQyxhQUFhLENBQUMsNkJBQTZCLENBQUM7UUFDNUMsYUFBYSxDQUFDLGlDQUFpQyxDQUFDO1FBQ2hELHVCQUF1QjtRQUN2QixhQUFhLENBQUMsa0JBQWtCLEVBQUUsVUFBVSxDQUFDO1FBQzdDLGFBQWEsQ0FBQyw2QkFBNkIsRUFBRSxVQUFVLENBQUM7UUFDeEQsYUFBYTtRQUNiLGFBQWEsQ0FBQyxpQ0FBaUMsRUFBRSxlQUFlLENBQUM7UUFDakU7WUFDRSxPQUFPLEVBQUUsa0JBQWtCO1lBQzNCLE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQztZQUNoQixXQUFXLEVBQUUsQ0FBQyxJQUFBLG1CQUFZLEVBQUMsVUFBVSxFQUFFLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7U0FDL0Q7UUFDRDtZQUNFLE9BQU8sRUFBRSxzQkFBc0I7WUFDL0IsT0FBTyxFQUFFLENBQUMsS0FBSyxDQUFDO1lBQ2hCLFdBQVcsRUFBRSxDQUFDLElBQUEsbUJBQVksRUFBQyxVQUFVLEVBQUUsQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztTQUMvRDtRQUNEO1lBQ0UsT0FBTyxFQUFFLCtCQUErQjtZQUN4QyxPQUFPLEVBQUUsQ0FBQyxLQUFLLENBQUM7WUFDaEIsV0FBVyxFQUFFLENBQUMsSUFBQSxtQkFBWSxFQUFDLFVBQVUsRUFBRSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO1NBQy9EO1FBQ0Q7WUFDRSxPQUFPLEVBQUUsNkJBQTZCO1lBQ3RDLE9BQU8sRUFBRSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUM7WUFDeEIsV0FBVyxFQUFFLENBQUMsSUFBQSxtQkFBWSxFQUFDLE1BQU0sRUFBRSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO1NBQzNEO1FBQ0Q7WUFDRSxPQUFPLEVBQUUsbURBQW1EO1lBQzVELE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQztZQUNoQixXQUFXLEVBQUUsQ0FBQyxJQUFBLG1CQUFZLEVBQUMsTUFBTSxFQUFFLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7U0FDM0Q7UUFDRDtZQUNFLE9BQU8sRUFBRSx3Q0FBd0M7WUFDakQsT0FBTyxFQUFFLENBQUMsTUFBTSxDQUFDO1lBQ2pCLFdBQVcsRUFBRTtnQkFDWCxJQUFBLG1CQUFZLEVBQUMsTUFBTSxFQUFFLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDO2dCQUMzQyxJQUFBLCtCQUF3QixFQUFDLGtEQUFzQyxDQUFDO2FBQ2pFO1NBQ0Y7UUFDRDtZQUNFLE9BQU8sRUFBRSxxREFBcUQ7WUFDOUQsT0FBTyxFQUFFLENBQUMsTUFBTSxDQUFDO1lBQ2pCLFdBQVcsRUFBRTtnQkFDWCxJQUFBLG1CQUFZLEVBQUMsTUFBTSxFQUFFLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDO2dCQUMzQyxJQUFBLCtCQUF3QixFQUFDLGtEQUFzQyxDQUFDO2FBQ2pFO1NBQ0Y7UUFDRDtZQUNFLE9BQU8sRUFBRSxpQ0FBaUM7WUFDMUMsT0FBTyxFQUFFLENBQUMsS0FBSyxDQUFDO1lBQ2hCLFdBQVcsRUFBRSxDQUFDLElBQUEsbUJBQVksRUFBQyxNQUFNLEVBQUUsQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztTQUMzRDtRQUNEO1lBQ0UsT0FBTyxFQUFFLDBEQUEwRDtZQUNuRSxPQUFPLEVBQUUsQ0FBQyxLQUFLLENBQUM7WUFDaEIsV0FBVyxFQUFFLENBQUMsSUFBQSxtQkFBWSxFQUFDLE1BQU0sRUFBRSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO1NBQzNEO1FBQ0Q7WUFDRSxPQUFPLEVBQUUsdURBQXVEO1lBQ2hFLE9BQU8sRUFBRSxDQUFDLE1BQU0sQ0FBQztZQUNqQixXQUFXLEVBQUU7Z0JBQ1gsSUFBQSxtQkFBWSxFQUFDLE1BQU0sRUFBRSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQztnQkFDM0MsSUFBQSwrQkFBd0IsRUFBQyxnREFBb0MsQ0FBQzthQUMvRDtTQUNGO1FBQ0QsdUVBQXVFO1FBQ3ZFO1lBQ0UsT0FBTyxFQUFFLHVCQUF1QjtZQUNoQyxPQUFPLEVBQUUsQ0FBQyxLQUFLLENBQUM7WUFDaEIsV0FBVyxFQUFFO2dCQUNYLElBQUEsZ0NBQXlCLEVBQUMsNkNBQXFDLEVBQUU7b0JBQy9ELE1BQU0sRUFBRSxLQUFLO2lCQUNkLENBQUM7YUFDSDtTQUNGO1FBQ0Q7WUFDRSxVQUFVLEVBQUUsS0FBSztZQUNqQixPQUFPLEVBQUUsc0JBQXNCO1lBQy9CLE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQztZQUNoQixXQUFXLEVBQUU7Z0JBQ1gsSUFBQSxnQ0FBeUIsRUFBQyw2Q0FBcUMsRUFBRTtvQkFDL0QsTUFBTSxFQUFFLEtBQUs7aUJBQ2QsQ0FBQzthQUNIO1NBQ0Y7S0FDRjtDQUNGLENBQUMsQ0FBQSJ9
|
|
@@ -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,
|
|
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) =>
|
|
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,
|
|
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
|
+
"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.
|
|
91
|
+
"@hartl-services/medusa-food-supplements-contracts": "^0.25.0"
|
|
92
92
|
},
|
|
93
93
|
"devDependencies": {
|
|
94
94
|
"@medusajs/admin-sdk": "2.19.0",
|