order-management 0.0.65 → 0.0.66

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.
@@ -491,7 +491,7 @@ function getOrderIdFromPath() {
491
491
  return m ? m[1] : void 0;
492
492
  }
493
493
  const OrderRefundContextWidget = (props) => {
494
- var _a, _b, _c, _d, _e;
494
+ var _a, _b, _c, _d, _e, _f, _g, _h, _i;
495
495
  const orderId = ((_a = props.order) == null ? void 0 : _a.id) ?? ((_c = (_b = props.data) == null ? void 0 : _b.order) == null ? void 0 : _c.id) ?? getOrderIdFromPath();
496
496
  const [context, setContext] = react.useState(null);
497
497
  const [loading, setLoading] = react.useState(!!orderId);
@@ -636,6 +636,7 @@ const OrderRefundContextWidget = (props) => {
636
636
  }
637
637
  };
638
638
  if (!orderId) return null;
639
+ if (!loading && !error && context && !context.refund_mapping) return null;
639
640
  if (loading) {
640
641
  return /* @__PURE__ */ jsxRuntime.jsx(ui.Container, { className: "mt-6 divide-y p-0", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "py-4", children: /* @__PURE__ */ jsxRuntime.jsx(ui.Text, { className: "text-ui-fg-subtle", children: "Loading refund context..." }) }) });
641
642
  }
@@ -658,22 +659,25 @@ const OrderRefundContextWidget = (props) => {
658
659
  /* @__PURE__ */ jsxRuntime.jsx(ui.Text, { size: "small", children: context.return_id }),
659
660
  ((_d = context.refund_mapping) == null ? void 0 : _d.is_refunded) ? /* @__PURE__ */ jsxRuntime.jsx(ui.Badge, { color: "green", children: "Refunded" }) : /* @__PURE__ */ jsxRuntime.jsx(ui.Badge, { color: "orange", children: "Not refunded" })
660
661
  ] }),
661
- paymentDetail && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mt-3 space-y-2 border-t border-ui-border-base pt-3", children: [
662
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mt-3 space-y-2 border-t border-ui-border-base pt-3", children: [
662
663
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between gap-2", children: [
663
664
  /* @__PURE__ */ jsxRuntime.jsx(ui.Text, { size: "small", weight: "plus", className: "text-ui-fg-subtle", children: "Payment method (refund destination)" }),
664
- paymentDetail.source === "specified" ? /* @__PURE__ */ jsxRuntime.jsx(ui.Badge, { color: "green", children: "Customer specified" }) : /* @__PURE__ */ jsxRuntime.jsx(ui.Badge, { color: "orange", children: "Customer default" })
665
+ ((_e = context.refund_mapping) == null ? void 0 : _e.payment_id) ? /* @__PURE__ */ jsxRuntime.jsx(ui.Badge, { color: "green", children: "Customer specified" }) : paymentDetail ? /* @__PURE__ */ jsxRuntime.jsx(ui.Badge, { color: "orange", children: "Customer default" }) : null
665
666
  ] }),
666
- paymentDetail.source === "default" && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "rounded-md border border-ui-border-base bg-ui-bg-subtle px-3 py-2", children: /* @__PURE__ */ jsxRuntime.jsx(ui.Text, { size: "xsmall", className: "text-ui-fg-muted", children: "The customer did not specify a payment method for this return. Showing their default payment method." }) }),
667
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-wrap gap-2", children: [
668
- /* @__PURE__ */ jsxRuntime.jsx(ui.Badge, { children: paymentDetail.type.toUpperCase() }),
669
- paymentDetail.is_default && /* @__PURE__ */ jsxRuntime.jsx(ui.Badge, { color: "blue", children: "Default" })
670
- ] }),
671
- Object.keys(paymentDetail.detail_json).length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-2 grid grid-cols-2 gap-x-6 gap-y-2", children: Object.entries(paymentDetail.detail_json).map(([k, v]) => /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
672
- /* @__PURE__ */ jsxRuntime.jsx(ui.Text, { size: "xsmall", weight: "plus", className: "text-ui-fg-muted", children: FIELD_LABELS[k] ?? k }),
673
- /* @__PURE__ */ jsxRuntime.jsx(ui.Text, { size: "small", className: "block", children: String(v) })
674
- ] }, k)) })
667
+ ((_f = context.refund_mapping) == null ? void 0 : _f.payment_id) && !paymentDetail && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "rounded-md border border-orange-200 bg-orange-50 px-3 py-2", children: /* @__PURE__ */ jsxRuntime.jsx(ui.Text, { size: "xsmall", className: "text-ui-fg-muted", children: "The customer specified a payment method for this return, but that payment method has since been removed from their account. Ask the customer to update their refund payment method." }) }),
668
+ !((_g = context.refund_mapping) == null ? void 0 : _g.payment_id) && (paymentDetail == null ? void 0 : paymentDetail.source) === "default" && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "rounded-md border border-ui-border-base bg-ui-bg-subtle px-3 py-2", children: /* @__PURE__ */ jsxRuntime.jsx(ui.Text, { size: "xsmall", className: "text-ui-fg-muted", children: "The customer did not specify a payment method for this return. Showing their default payment method." }) }),
669
+ !((_h = context.refund_mapping) == null ? void 0 : _h.payment_id) && !paymentDetail && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "rounded-md border border-ui-border-base bg-ui-bg-subtle px-3 py-2", children: /* @__PURE__ */ jsxRuntime.jsx(ui.Text, { size: "xsmall", className: "text-ui-fg-muted", children: "No payment method found for this customer." }) }),
670
+ paymentDetail && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
671
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-wrap gap-2", children: [
672
+ /* @__PURE__ */ jsxRuntime.jsx(ui.Badge, { children: paymentDetail.type.toUpperCase() }),
673
+ paymentDetail.is_default && /* @__PURE__ */ jsxRuntime.jsx(ui.Badge, { color: "blue", children: "Default" })
674
+ ] }),
675
+ Object.keys(paymentDetail.detail_json).length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-2 grid grid-cols-2 gap-x-6 gap-y-2", children: Object.entries(paymentDetail.detail_json).map(([k, v]) => /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
676
+ /* @__PURE__ */ jsxRuntime.jsx(ui.Text, { size: "xsmall", weight: "plus", className: "text-ui-fg-muted", children: FIELD_LABELS[k] ?? k }),
677
+ /* @__PURE__ */ jsxRuntime.jsx(ui.Text, { size: "small", className: "block", children: String(v) })
678
+ ] }, k)) })
679
+ ] })
675
680
  ] }),
676
- !paymentDetail && context.return_id && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-3 rounded-md border border-ui-border-base bg-ui-bg-subtle px-3 py-2", children: /* @__PURE__ */ jsxRuntime.jsx(ui.Text, { size: "xsmall", className: "text-ui-fg-muted", children: "No payment method found for this customer." }) }),
677
681
  (context == null ? void 0 : context.refund_mapping) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mt-3 space-y-3 border-t border-ui-border-base pt-3", children: [
678
682
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between gap-2", children: [
679
683
  /* @__PURE__ */ jsxRuntime.jsx(ui.Text, { size: "small", weight: "plus", className: "text-ui-fg-subtle", children: "Refund mode, details & images" }),
@@ -816,7 +820,7 @@ const OrderRefundContextWidget = (props) => {
816
820
  ] }),
817
821
  /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
818
822
  /* @__PURE__ */ jsxRuntime.jsx(ui.Text, { size: "xsmall", weight: "plus", className: "text-ui-fg-muted", children: "Images" }),
819
- ((_e = context.refund_mapping.images) == null ? void 0 : _e.length) ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-1 flex flex-wrap gap-2", children: context.refund_mapping.images.map((url, i) => /* @__PURE__ */ jsxRuntime.jsxs(
823
+ ((_i = context.refund_mapping.images) == null ? void 0 : _i.length) ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-1 flex flex-wrap gap-2", children: context.refund_mapping.images.map((url, i) => /* @__PURE__ */ jsxRuntime.jsxs(
820
824
  "a",
821
825
  {
822
826
  href: url,
@@ -2727,6 +2731,12 @@ const routeModule = {
2727
2731
  };
2728
2732
  const menuItemModule = {
2729
2733
  menuItems: [
2734
+ {
2735
+ label: config$7.label,
2736
+ icon: config$7.icon,
2737
+ path: "/payments",
2738
+ nested: void 0
2739
+ },
2730
2740
  {
2731
2741
  label: config$6.label,
2732
2742
  icon: config$6.icon,
@@ -2746,9 +2756,9 @@ const menuItemModule = {
2746
2756
  nested: void 0
2747
2757
  },
2748
2758
  {
2749
- label: config$7.label,
2750
- icon: config$7.icon,
2751
- path: "/payments",
2759
+ label: config$3.label,
2760
+ icon: config$3.icon,
2761
+ path: "/payments/:id",
2752
2762
  nested: void 0
2753
2763
  },
2754
2764
  {
@@ -2768,12 +2778,6 @@ const menuItemModule = {
2768
2778
  icon: config.icon,
2769
2779
  path: "/swaps/:id",
2770
2780
  nested: void 0
2771
- },
2772
- {
2773
- label: config$3.label,
2774
- icon: config$3.icon,
2775
- path: "/payments/:id",
2776
- nested: void 0
2777
2781
  }
2778
2782
  ]
2779
2783
  };
@@ -490,7 +490,7 @@ function getOrderIdFromPath() {
490
490
  return m ? m[1] : void 0;
491
491
  }
492
492
  const OrderRefundContextWidget = (props) => {
493
- var _a, _b, _c, _d, _e;
493
+ var _a, _b, _c, _d, _e, _f, _g, _h, _i;
494
494
  const orderId = ((_a = props.order) == null ? void 0 : _a.id) ?? ((_c = (_b = props.data) == null ? void 0 : _b.order) == null ? void 0 : _c.id) ?? getOrderIdFromPath();
495
495
  const [context, setContext] = useState(null);
496
496
  const [loading, setLoading] = useState(!!orderId);
@@ -635,6 +635,7 @@ const OrderRefundContextWidget = (props) => {
635
635
  }
636
636
  };
637
637
  if (!orderId) return null;
638
+ if (!loading && !error && context && !context.refund_mapping) return null;
638
639
  if (loading) {
639
640
  return /* @__PURE__ */ jsx(Container, { className: "mt-6 divide-y p-0", children: /* @__PURE__ */ jsx("div", { className: "py-4", children: /* @__PURE__ */ jsx(Text, { className: "text-ui-fg-subtle", children: "Loading refund context..." }) }) });
640
641
  }
@@ -657,22 +658,25 @@ const OrderRefundContextWidget = (props) => {
657
658
  /* @__PURE__ */ jsx(Text, { size: "small", children: context.return_id }),
658
659
  ((_d = context.refund_mapping) == null ? void 0 : _d.is_refunded) ? /* @__PURE__ */ jsx(Badge, { color: "green", children: "Refunded" }) : /* @__PURE__ */ jsx(Badge, { color: "orange", children: "Not refunded" })
659
660
  ] }),
660
- paymentDetail && /* @__PURE__ */ jsxs("div", { className: "mt-3 space-y-2 border-t border-ui-border-base pt-3", children: [
661
+ /* @__PURE__ */ jsxs("div", { className: "mt-3 space-y-2 border-t border-ui-border-base pt-3", children: [
661
662
  /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between gap-2", children: [
662
663
  /* @__PURE__ */ jsx(Text, { size: "small", weight: "plus", className: "text-ui-fg-subtle", children: "Payment method (refund destination)" }),
663
- paymentDetail.source === "specified" ? /* @__PURE__ */ jsx(Badge, { color: "green", children: "Customer specified" }) : /* @__PURE__ */ jsx(Badge, { color: "orange", children: "Customer default" })
664
+ ((_e = context.refund_mapping) == null ? void 0 : _e.payment_id) ? /* @__PURE__ */ jsx(Badge, { color: "green", children: "Customer specified" }) : paymentDetail ? /* @__PURE__ */ jsx(Badge, { color: "orange", children: "Customer default" }) : null
664
665
  ] }),
665
- paymentDetail.source === "default" && /* @__PURE__ */ jsx("div", { className: "rounded-md border border-ui-border-base bg-ui-bg-subtle px-3 py-2", children: /* @__PURE__ */ jsx(Text, { size: "xsmall", className: "text-ui-fg-muted", children: "The customer did not specify a payment method for this return. Showing their default payment method." }) }),
666
- /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap gap-2", children: [
667
- /* @__PURE__ */ jsx(Badge, { children: paymentDetail.type.toUpperCase() }),
668
- paymentDetail.is_default && /* @__PURE__ */ jsx(Badge, { color: "blue", children: "Default" })
669
- ] }),
670
- Object.keys(paymentDetail.detail_json).length > 0 && /* @__PURE__ */ jsx("div", { className: "mt-2 grid grid-cols-2 gap-x-6 gap-y-2", children: Object.entries(paymentDetail.detail_json).map(([k, v]) => /* @__PURE__ */ jsxs("div", { children: [
671
- /* @__PURE__ */ jsx(Text, { size: "xsmall", weight: "plus", className: "text-ui-fg-muted", children: FIELD_LABELS[k] ?? k }),
672
- /* @__PURE__ */ jsx(Text, { size: "small", className: "block", children: String(v) })
673
- ] }, k)) })
666
+ ((_f = context.refund_mapping) == null ? void 0 : _f.payment_id) && !paymentDetail && /* @__PURE__ */ jsx("div", { className: "rounded-md border border-orange-200 bg-orange-50 px-3 py-2", children: /* @__PURE__ */ jsx(Text, { size: "xsmall", className: "text-ui-fg-muted", children: "The customer specified a payment method for this return, but that payment method has since been removed from their account. Ask the customer to update their refund payment method." }) }),
667
+ !((_g = context.refund_mapping) == null ? void 0 : _g.payment_id) && (paymentDetail == null ? void 0 : paymentDetail.source) === "default" && /* @__PURE__ */ jsx("div", { className: "rounded-md border border-ui-border-base bg-ui-bg-subtle px-3 py-2", children: /* @__PURE__ */ jsx(Text, { size: "xsmall", className: "text-ui-fg-muted", children: "The customer did not specify a payment method for this return. Showing their default payment method." }) }),
668
+ !((_h = context.refund_mapping) == null ? void 0 : _h.payment_id) && !paymentDetail && /* @__PURE__ */ jsx("div", { className: "rounded-md border border-ui-border-base bg-ui-bg-subtle px-3 py-2", children: /* @__PURE__ */ jsx(Text, { size: "xsmall", className: "text-ui-fg-muted", children: "No payment method found for this customer." }) }),
669
+ paymentDetail && /* @__PURE__ */ jsxs(Fragment, { children: [
670
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap gap-2", children: [
671
+ /* @__PURE__ */ jsx(Badge, { children: paymentDetail.type.toUpperCase() }),
672
+ paymentDetail.is_default && /* @__PURE__ */ jsx(Badge, { color: "blue", children: "Default" })
673
+ ] }),
674
+ Object.keys(paymentDetail.detail_json).length > 0 && /* @__PURE__ */ jsx("div", { className: "mt-2 grid grid-cols-2 gap-x-6 gap-y-2", children: Object.entries(paymentDetail.detail_json).map(([k, v]) => /* @__PURE__ */ jsxs("div", { children: [
675
+ /* @__PURE__ */ jsx(Text, { size: "xsmall", weight: "plus", className: "text-ui-fg-muted", children: FIELD_LABELS[k] ?? k }),
676
+ /* @__PURE__ */ jsx(Text, { size: "small", className: "block", children: String(v) })
677
+ ] }, k)) })
678
+ ] })
674
679
  ] }),
675
- !paymentDetail && context.return_id && /* @__PURE__ */ jsx("div", { className: "mt-3 rounded-md border border-ui-border-base bg-ui-bg-subtle px-3 py-2", children: /* @__PURE__ */ jsx(Text, { size: "xsmall", className: "text-ui-fg-muted", children: "No payment method found for this customer." }) }),
676
680
  (context == null ? void 0 : context.refund_mapping) && /* @__PURE__ */ jsxs("div", { className: "mt-3 space-y-3 border-t border-ui-border-base pt-3", children: [
677
681
  /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between gap-2", children: [
678
682
  /* @__PURE__ */ jsx(Text, { size: "small", weight: "plus", className: "text-ui-fg-subtle", children: "Refund mode, details & images" }),
@@ -815,7 +819,7 @@ const OrderRefundContextWidget = (props) => {
815
819
  ] }),
816
820
  /* @__PURE__ */ jsxs("div", { children: [
817
821
  /* @__PURE__ */ jsx(Text, { size: "xsmall", weight: "plus", className: "text-ui-fg-muted", children: "Images" }),
818
- ((_e = context.refund_mapping.images) == null ? void 0 : _e.length) ? /* @__PURE__ */ jsx("div", { className: "mt-1 flex flex-wrap gap-2", children: context.refund_mapping.images.map((url, i) => /* @__PURE__ */ jsxs(
822
+ ((_i = context.refund_mapping.images) == null ? void 0 : _i.length) ? /* @__PURE__ */ jsx("div", { className: "mt-1 flex flex-wrap gap-2", children: context.refund_mapping.images.map((url, i) => /* @__PURE__ */ jsxs(
819
823
  "a",
820
824
  {
821
825
  href: url,
@@ -2726,6 +2730,12 @@ const routeModule = {
2726
2730
  };
2727
2731
  const menuItemModule = {
2728
2732
  menuItems: [
2733
+ {
2734
+ label: config$7.label,
2735
+ icon: config$7.icon,
2736
+ path: "/payments",
2737
+ nested: void 0
2738
+ },
2729
2739
  {
2730
2740
  label: config$6.label,
2731
2741
  icon: config$6.icon,
@@ -2745,9 +2755,9 @@ const menuItemModule = {
2745
2755
  nested: void 0
2746
2756
  },
2747
2757
  {
2748
- label: config$7.label,
2749
- icon: config$7.icon,
2750
- path: "/payments",
2758
+ label: config$3.label,
2759
+ icon: config$3.icon,
2760
+ path: "/payments/:id",
2751
2761
  nested: void 0
2752
2762
  },
2753
2763
  {
@@ -2767,12 +2777,6 @@ const menuItemModule = {
2767
2777
  icon: config.icon,
2768
2778
  path: "/swaps/:id",
2769
2779
  nested: void 0
2770
- },
2771
- {
2772
- label: config$3.label,
2773
- icon: config$3.icon,
2774
- path: "/payments/:id",
2775
- nested: void 0
2776
2780
  }
2777
2781
  ]
2778
2782
  };
@@ -4,14 +4,14 @@ exports.GET = GET;
4
4
  const utils_1 = require("@medusajs/framework/utils");
5
5
  const refund_payment_mapping_1 = require("../../../../../modules/refund-payment-mapping");
6
6
  const payment_detail_1 = require("../../../../../modules/payment-detail");
7
- const return_payment_detail_mapping_1 = require("../../../../../modules/return-payment-detail-mapping");
7
+ const detect_cod_1 = require("../../../../../helpers/detect-cod");
8
8
  /**
9
9
  * GET /admin/orders/:order_id/refund-context
10
10
  *
11
11
  * Aggregated read: return (for order) + refund_payment_mapping + payment_detail.
12
12
  *
13
13
  * Payment detail resolution priority:
14
- * 1. return_payment_detail_mapping.payment_detail_id (customer-specified for this return) → source = "specified"
14
+ * 1. refund_mapping.payment_id (explicitly set on the mapping) → source = "specified"
15
15
  * 2. Customer's default payment detail (fallback) → source = "default"
16
16
  */
17
17
  async function GET(req, res) {
@@ -24,7 +24,12 @@ async function GET(req, res) {
24
24
  return;
25
25
  }
26
26
  try {
27
- const orderModuleService = req.scope.resolve(utils_1.Modules.ORDER);
27
+ const query = req.scope.resolve(utils_1.ContainerRegistrationKeys.QUERY);
28
+ const [isCod, orderModuleServiceResolved] = await Promise.all([
29
+ (0, detect_cod_1.detectCodOrder)(orderId, query),
30
+ Promise.resolve(req.scope.resolve(utils_1.Modules.ORDER)),
31
+ ]);
32
+ const orderModuleService = orderModuleServiceResolved;
28
33
  const order = await orderModuleService.retrieveOrder(orderId).catch(() => null);
29
34
  if (!order) {
30
35
  res.status(404).json({
@@ -38,6 +43,7 @@ async function GET(req, res) {
38
43
  const firstReturn = returns[0];
39
44
  if (!firstReturn) {
40
45
  const empty = {
46
+ is_cod: isCod,
41
47
  return_id: null,
42
48
  refund_mapping: null,
43
49
  payment_detail: null,
@@ -49,14 +55,13 @@ async function GET(req, res) {
49
55
  const orderCustomerId = order.customer_id;
50
56
  let refundMappingService;
51
57
  let paymentDetailService;
52
- let returnPaymentDetailMappingService;
53
58
  try {
54
59
  refundMappingService = req.scope.resolve(refund_payment_mapping_1.REFUND_PAYMENT_MAPPING_MODULE);
55
60
  paymentDetailService = req.scope.resolve(payment_detail_1.PAYMENT_DETAIL_MODULE);
56
- returnPaymentDetailMappingService = req.scope.resolve(return_payment_detail_mapping_1.RETURN_PAYMENT_DETAIL_MAPPING_MODULE);
57
61
  }
58
62
  catch {
59
63
  const partial = {
64
+ is_cod: isCod,
60
65
  return_id: returnId,
61
66
  refund_mapping: null,
62
67
  payment_detail: null,
@@ -76,16 +81,16 @@ async function GET(req, res) {
76
81
  details: refundMapping.details,
77
82
  }
78
83
  : null;
79
- // Resolve payment detail: customer-specified mapping first, then default fallback
84
+ // Resolve payment detail
80
85
  let paymentDetailBlock = null;
86
+ // True when the customer explicitly chose a payment method (even if that detail was later deleted)
87
+ const customerSpecified = !!(refundMapping?.payment_id);
81
88
  if (orderCustomerId) {
82
- // Priority 1: check return_payment_detail_mapping for a customer-specified detail
83
- const returnPaymentDetailMapping = await returnPaymentDetailMappingService
84
- .getByReturnId(returnId)
85
- .catch(() => null);
86
- if (returnPaymentDetailMapping?.payment_detail_id) {
89
+ if (customerSpecified) {
90
+ // Customer picked a specific payment detail — resolve it; if deleted/missing keep null
91
+ // so the widget shows a "payment method removed" warning instead of falling back to default
87
92
  try {
88
- const detail = await paymentDetailService.getPaymentDetail(returnPaymentDetailMapping.payment_detail_id, orderCustomerId);
93
+ const detail = await paymentDetailService.getPaymentDetail(refundMapping.payment_id, orderCustomerId);
89
94
  paymentDetailBlock = {
90
95
  id: detail.id,
91
96
  type: detail.type,
@@ -95,24 +100,20 @@ async function GET(req, res) {
95
100
  };
96
101
  }
97
102
  catch {
98
- // specified detail inaccessible — fall through to default
103
+ // payment detail was deleted or is inaccessible — paymentDetailBlock stays null
99
104
  }
100
105
  }
101
- // Priority 2: fallback to customer's default payment detail
102
- if (!paymentDetailBlock) {
106
+ else {
107
+ // No explicit choice — fall back to customer's default payment detail
103
108
  try {
104
- const [defaultList] = await paymentDetailService.listAndCountPaymentDetails({ customer_id: orderCustomerId, is_default: true }, { take: 1 });
105
- const defaultDetails = Array.isArray(defaultList) ? defaultList : [];
106
- const defaultDetail = defaultDetails[0];
109
+ const [defaultDetails] = await paymentDetailService.listPaymentDetailsByCustomer(orderCustomerId, { take: 1 });
110
+ const defaultDetail = defaultDetails.find((d) => d.is_default) ?? defaultDetails[0];
107
111
  if (defaultDetail) {
108
- const normalized = paymentDetailService["normalizePaymentDetail"]
109
- ? paymentDetailService.normalizePaymentDetail(defaultDetail)
110
- : defaultDetail;
111
112
  paymentDetailBlock = {
112
- id: normalized.id,
113
- type: normalized.type,
114
- detail_json: (normalized.detail_json ?? {}),
115
- is_default: normalized.is_default,
113
+ id: defaultDetail.id,
114
+ type: defaultDetail.type,
115
+ detail_json: (defaultDetail.detail_json ?? {}),
116
+ is_default: defaultDetail.is_default,
116
117
  source: "default",
117
118
  };
118
119
  }
@@ -123,6 +124,7 @@ async function GET(req, res) {
123
124
  }
124
125
  }
125
126
  const payload = {
127
+ is_cod: isCod,
126
128
  return_id: returnId,
127
129
  refund_mapping: refundMappingBlock,
128
130
  payment_detail: paymentDetailBlock,
@@ -139,4 +141,4 @@ async function GET(req, res) {
139
141
  });
140
142
  }
141
143
  }
142
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL29yZGVycy9bb3JkZXJfaWRdL3JlZnVuZC1jb250ZXh0L3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBc0NBLGtCQW1KQztBQXhMRCxxREFBbUQ7QUFFbkQsMEZBQTZGO0FBRTdGLDBFQUE2RTtBQUU3RSx3R0FBMkc7QUFzQjNHOzs7Ozs7OztHQVFHO0FBQ0ksS0FBSyxVQUFVLEdBQUcsQ0FDdkIsR0FBa0IsRUFDbEIsR0FBbUI7SUFFbkIsTUFBTSxPQUFPLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxRQUFrQixDQUFBO0lBRTdDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNiLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ25CLE9BQU8sRUFBRSxzQkFBc0I7WUFDL0IsSUFBSSxFQUFFLGNBQWM7U0FDckIsQ0FBQyxDQUFBO1FBQ0YsT0FBTTtJQUNSLENBQUM7SUFFRCxJQUFJLENBQUM7UUFDSCxNQUFNLGtCQUFrQixHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFzQixlQUFPLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDaEYsTUFBTSxLQUFLLEdBQUcsTUFBTSxrQkFBa0IsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQy9FLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNYLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO2dCQUNuQixPQUFPLEVBQUUsaUJBQWlCO2dCQUMxQixJQUFJLEVBQUUsV0FBVzthQUNsQixDQUFDLENBQUE7WUFDRixPQUFNO1FBQ1IsQ0FBQztRQUVELE1BQU0sQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFN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
144
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL29yZGVycy9bb3JkZXJfaWRdL3JlZnVuZC1jb250ZXh0L3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBOENBLGtCQThJQztBQTNMRCxxREFBOEU7QUFFOUUsMEZBQTZGO0FBRTdGLDBFQUE2RTtBQUU3RSxrRUFBa0U7QUE4QmxFOzs7Ozs7OztHQVFHO0FBQ0ksS0FBSyxVQUFVLEdBQUcsQ0FDdkIsR0FBa0IsRUFDbEIsR0FBbUI7SUFFbkIsTUFBTSxPQUFPLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxRQUFrQixDQUFBO0lBRTdDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNiLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ25CLE9BQU8sRUFBRSxzQkFBc0I7WUFDL0IsSUFBSSxFQUFFLGNBQWM7U0FDckIsQ0FBQyxDQUFBO1FBQ0YsT0FBTTtJQUNSLENBQUM7SUFFRCxJQUFJLENBQUM7UUFDSCxNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBYSxpQ0FBeUIsQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUM1RSxNQUFNLENBQUMsS0FBSyxFQUFFLDBCQUEwQixDQUFDLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDO1lBQzVELElBQUEsMkJBQWMsRUFBQyxPQUFPLEVBQUUsS0FBSyxDQUFDO1lBQzlCLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQXNCLGVBQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUN2RSxDQUFDLENBQUE7UUFDRixNQUFNLGtCQUFrQixHQUFHLDBCQUEwQixDQUFBO1FBRXJELE1BQU0sS0FBSyxHQUFHLE1BQU0sa0JBQWtCLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUMvRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDWCxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQztnQkFDbkIsT0FBTyxFQUFFLGlCQUFpQjtnQkFDMUIsSUFBSSxFQUFFLFdBQVc7YUFDbEIsQ0FBQyxDQUFBO1lBQ0YsT0FBTTtRQUNSLENBQUM7UUFFRCxNQUFNLENBQUMsV0FBVyxDQUFDLEdBQUcsTUFBTSxrQkFBa0IsQ0FBQyxtQkFBbUIsQ0FDaEUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBK0QsRUFDcEYsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUMzQyxDQUFBO1FBQ0QsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUE7UUFDN0QsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBK0IsQ0FBQTtRQUU1RCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDakIsTUFBTSxLQUFLLEdBQTBCO2dCQUNuQyxNQUFNLEVBQUUsS0FBSztnQkFDYixTQUFTLEVBQUUsSUFBSTtnQkFDZixjQUFjLEVBQUUsSUFBSTtnQkFDcEIsY0FBYyxFQUFFLElBQUk7YUFDckIsQ0FBQTtZQUNELEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUE7WUFDZixPQUFNO1FBQ1IsQ0FBQztRQUVELE1BQU0sUUFBUSxHQUFHLFdBQVcsQ0FBQyxFQUFFLENBQUE7UUFDL0IsTUFBTSxlQUFlLEdBQUksS0FBa0MsQ0FBQyxXQUFXLENBQUE7UUFFdkUsSUFBSSxvQkFBdUQsQ0FBQTtRQUMzRCxJQUFJLG9CQUFnRCxDQUFBO1FBRXBELElBQUksQ0FBQztZQUNILG9CQUFvQixHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFvQyxzREFBNkIsQ0FBQyxDQUFBO1lBQzFHLG9CQUFvQixHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUE2QixzQ0FBcUIsQ0FBQyxDQUFBO1FBQzdGLENBQUM7UUFBQyxNQUFNLENBQUM7WUFDUCxNQUFNLE9BQU8sR0FBMEI7Z0JBQ3JDLE1BQU0sRUFBRSxLQUFLO2dCQUNiLFNBQVMsRUFBRSxRQUFRO2dCQUNuQixjQUFjLEVBQUUsSUFBSTtnQkFDcEIsY0FBYyxFQUFFLElBQUk7YUFDckIsQ0FBQTtZQUNELEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUE7WUFDakIsT0FBTTtRQUNSLENBQUM7UUFFRCxnRkFBZ0Y7UUFDaEYsTUFBTSxhQUFhLEdBQUcsTUFBTSxvQkFBb0IsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUE7UUFDeEUsTUFBTSxrQkFBa0IsR0FBNEMsYUFBYTtZQUMvRSxDQUFDLENBQUM7Z0JBQ0UsRUFBRSxFQUFFLGFBQWEsQ0FBQyxFQUFFO2dCQUNwQixVQUFVLEVBQUUsYUFBYSxDQUFDLFVBQVU7Z0JBQ3BDLFdBQVcsRUFBRSxhQUFhLENBQUMsV0FBVztnQkFDdEMsV0FBVyxFQUFFLGFBQWEsQ0FBQyxXQUFXO2dCQUN0QyxNQUFNLEVBQUUsYUFBYSxDQUFDLE1BQU07Z0JBQzVCLE9BQU8sRUFBRSxhQUFhLENBQUMsT0FBTzthQUMvQjtZQUNILENBQUMsQ0FBQyxJQUFJLENBQUE7UUFFUix5QkFBeUI7UUFDekIsSUFBSSxrQkFBa0IsR0FBNEMsSUFBSSxDQUFBO1FBQ3RFLG1HQUFtRztRQUNuRyxNQUFNLGlCQUFpQixHQUFHLENBQUMsQ0FBQyxDQUFDLGFBQWEsRUFBRSxVQUFVLENBQUMsQ0FBQTtRQUV2RCxJQUFJLGVBQWUsRUFBRSxDQUFDO1lBQ3BCLElBQUksaUJBQWlCLEVBQUUsQ0FBQztnQkFDdEIsdUZBQXVGO2dCQUN2Riw0RkFBNEY7Z0JBQzVGLElBQUksQ0FBQztvQkFDSCxNQUFNLE1BQU0sR0FBRyxNQUFNLG9CQUFvQixDQUFDLGdCQUFnQixDQUFDLGFBQWMsQ0FBQyxVQUFXLEVBQUUsZUFBZSxDQUFDLENBQUE7b0JBQ3ZHLGtCQUFrQixHQUFHO3dCQUNuQixFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUU7d0JBQ2IsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJO3dCQUNqQixXQUFXLEVBQUUsQ0FBQyxNQUFNLENBQUMsV0FBVyxJQUFJLEVBQUUsQ0FBNEI7d0JBQ2xFLFVBQVUsRUFBRSxNQUFNLENBQUMsVUFBVTt3QkFDN0IsTUFBTSxFQUFFLFdBQVc7cUJBQ3BCLENBQUE7Z0JBQ0gsQ0FBQztnQkFBQyxNQUFNLENBQUM7b0JBQ1AsZ0ZBQWdGO2dCQUNsRixDQUFDO1lBQ0gsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLHNFQUFzRTtnQkFDdEUsSUFBSSxDQUFDO29CQUNILE1BQU0sQ0FBQyxjQUFjLENBQUMsR0FBRyxNQUFNLG9CQUFvQixDQUFDLDRCQUE0QixDQUM5RSxlQUFlLEVBQ2YsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQ1osQ0FBQTtvQkFDRCxNQUFNLGFBQWEsR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLElBQUksY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFBO29CQUNuRixJQUFJLGFBQWEsRUFBRSxDQUFDO3dCQUNsQixrQkFBa0IsR0FBRzs0QkFDbkIsRUFBRSxFQUFFLGFBQWEsQ0FBQyxFQUFFOzRCQUNwQixJQUFJLEVBQUUsYUFBYSxDQUFDLElBQUk7NEJBQ3hCLFdBQVcsRUFBRSxDQUFDLGFBQWEsQ0FBQyxXQUFXLElBQUksRUFBRSxDQUE0Qjs0QkFDekUsVUFBVSxFQUFFLGFBQWEsQ0FBQyxVQUFVOzRCQUNwQyxNQUFNLEVBQUUsU0FBUzt5QkFDbEIsQ0FBQTtvQkFDSCxDQUFDO2dCQUNILENBQUM7Z0JBQUMsTUFBTSxDQUFDO29CQUNQLGtDQUFrQztnQkFDcEMsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBRUQsTUFBTSxPQUFPLEdBQTBCO1lBQ3JDLE1BQU0sRUFBRSxLQUFLO1lBQ2IsU0FBUyxFQUFFLFFBQVE7WUFDbkIsY0FBYyxFQUFFLGtCQUFrQjtZQUNsQyxjQUFjLEVBQUUsa0JBQWtCO1NBQ25DLENBQUE7UUFDRCxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQ25CLENBQUM7SUFBQyxPQUFPLEdBQVksRUFBRSxDQUFDO1FBQ3RCLE1BQU0sT0FBTyxHQUFHLEdBQUcsWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQTtRQUNwRSxPQUFPLENBQUMsS0FBSyxDQUFDLHVCQUF1QixFQUFFLEdBQUcsQ0FBQyxDQUFBO1FBQzNDLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ25CLE9BQU8sRUFBRSwrQkFBK0I7WUFDeEMsS0FBSyxFQUFFLE9BQU87WUFDZCxJQUFJLEVBQUUsZ0JBQWdCO1NBQ3ZCLENBQUMsQ0FBQTtJQUNKLENBQUM7QUFDSCxDQUFDIn0=
@@ -15,6 +15,7 @@ const get_guest_token_1 = require("../../get-guest-token");
15
15
  const validators_1 = require("../../../returns/validators");
16
16
  const refund_payment_mapping_1 = require("../../../../../modules/refund-payment-mapping");
17
17
  const returns_1 = require("../../../../../helpers/returns");
18
+ const detect_cod_1 = require("../../../../../helpers/detect-cod");
18
19
  async function POST(req, res) {
19
20
  const token = (0, get_guest_token_1.getGuestToken)(req);
20
21
  const { id: order_id } = req.params;
@@ -64,6 +65,7 @@ async function POST(req, res) {
64
65
  res.status(404).json({ message: "Order not found or access denied" });
65
66
  return;
66
67
  }
68
+ const isCodOrder = await (0, detect_cod_1.detectCodOrder)(order_id, query);
67
69
  // Early duplicate guard — fail fast before running any workflow step
68
70
  const { data: activeChanges } = await query.graph({
69
71
  entity: "order_change",
@@ -122,9 +124,10 @@ async function POST(req, res) {
122
124
  returnPayload = updated;
123
125
  try {
124
126
  const mappingService = req.scope.resolve(refund_payment_mapping_1.REFUND_PAYMENT_MAPPING_MODULE);
127
+ // COD orders have no payment detail — store null so admin knows no bank/UPI refund is needed
125
128
  await mappingService.createMapping({
126
129
  return_id: returnId,
127
- payment_id: body.refund_payment_id ?? undefined,
130
+ payment_id: isCodOrder ? null : (body.refund_payment_id ?? undefined),
128
131
  });
129
132
  }
130
133
  catch (e) {
@@ -165,4 +168,4 @@ async function POST(req, res) {
165
168
  });
166
169
  }
167
170
  }
168
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL2d1ZXN0LW9yZGVycy9baWRdL3JldHVybnMvcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFtQkEsb0JBNktDO0FBL0xELHFEQUEyRTtBQUMzRSxxREFBbUQ7QUFFbkQscURBQXVEO0FBQ3ZELHFEQUFxRTtBQUNyRSxnRUFBOEM7QUFDOUMsNkJBQXVCO0FBQ3ZCLGtEQUFxRTtBQUVyRSwyREFBcUQ7QUFDckQsNERBR29DO0FBQ3BDLDBGQUE2RjtBQUU3Riw0REFBMEU7QUFFbkUsS0FBSyxVQUFVLElBQUksQ0FDeEIsR0FBa0IsRUFDbEIsR0FBbUI7SUFFbkIsTUFBTSxLQUFLLEdBQUcsSUFBQSwrQkFBYSxFQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQ2hDLE1BQU0sRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQTtJQUVuQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDWCxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUNuQixPQUFPLEVBQUUsMkRBQTJEO1NBQ3JFLENBQUMsQ0FBQTtRQUNGLE9BQU07SUFDUixDQUFDO0lBRUQsSUFBSSxNQUF3RCxDQUFBO0lBQzVELElBQUksQ0FBQztRQUNILE1BQU0sWUFBWSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUNwQyxpQ0FBeUIsQ0FBQyxhQUFhLENBQ3hDLENBQUE7UUFDRCxNQUFNLEdBQUcsSUFBQSxzQ0FBNkIsRUFBQyxZQUFZLENBQUMsQ0FBQTtJQUN0RCxDQUFDO0lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztRQUNmLE1BQU0sWUFBWSxHQUFHLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLGVBQWUs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
171
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL2d1ZXN0LW9yZGVycy9baWRdL3JldHVybnMvcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUE0QkEsb0JBZ0xDO0FBM01ELHFEQUEyRTtBQUMzRSxxREFBbUQ7QUFFbkQscURBQXVEO0FBQ3ZELHFEQUFxRTtBQUNyRSxnRUFBOEM7QUFDOUMsNkJBQXVCO0FBQ3ZCLGtEQUFxRTtBQUVyRSwyREFBcUQ7QUFDckQsNERBR29DO0FBQ3BDLDBGQUE2RjtBQUU3Riw0REFBMEU7QUFDMUUsa0VBQWtFO0FBVTNELEtBQUssVUFBVSxJQUFJLENBQ3hCLEdBQWtCLEVBQ2xCLEdBQW1CO0lBRW5CLE1BQU0sS0FBSyxHQUFHLElBQUEsK0JBQWEsRUFBQyxHQUFHLENBQUMsQ0FBQTtJQUNoQyxNQUFNLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUE7SUFFbkMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ1gsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDbkIsT0FBTyxFQUFFLDJEQUEyRDtTQUNyRSxDQUFDLENBQUE7UUFDRixPQUFNO0lBQ1IsQ0FBQztJQUVELElBQUksTUFBd0QsQ0FBQTtJQUM1RCxJQUFJLENBQUM7UUFDSCxNQUFNLFlBQVksR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FDcEMsaUNBQXlCLENBQUMsYUFBYSxDQUN4QyxDQUFBO1FBQ0QsTUFBTSxHQUFHLElBQUEsc0NBQTZCLEVBQUMsWUFBWSxDQUFDLENBQUE7SUFDdEQsQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDZixNQUFNLFlBQVksR0FBRyxLQUFLLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENB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
@@ -5,10 +5,10 @@ exports.GET = GET;
5
5
  const core_flows_1 = require("@medusajs/core-flows");
6
6
  const utils_1 = require("@medusajs/framework/utils");
7
7
  const validators_1 = require("./validators");
8
- const payment_detail_1 = require("../../../modules/payment-detail");
9
8
  const refund_payment_mapping_1 = require("../../../modules/refund-payment-mapping");
10
9
  const config_1 = require("../../../config");
11
10
  const returns_1 = require("../../../helpers/returns");
11
+ const detect_cod_1 = require("../../../helpers/detect-cod");
12
12
  async function POST(req, res) {
13
13
  const authContext = req.auth_context;
14
14
  const actorId = authContext?.actor_id;
@@ -20,29 +20,7 @@ async function POST(req, res) {
20
20
  });
21
21
  return;
22
22
  }
23
- try {
24
- const paymentDetailService = req.scope.resolve(payment_detail_1.PAYMENT_DETAIL_MODULE);
25
- const hasDefault = await paymentDetailService.hasDefaultPayment(actorId);
26
- if (!hasDefault) {
27
- res.status(400).json({
28
- message: "You must add and set a default payment method before creating a return.",
29
- type: "NO_DEFAULT_PAYMENT",
30
- code: "NO_DEFAULT_PAYMENT",
31
- });
32
- return;
33
- }
34
- }
35
- catch (e) {
36
- const msg = e instanceof Error ? e.message : "Unknown error";
37
- if (msg.includes("could not be resolved") || msg.includes("not found")) {
38
- res.status(503).json({
39
- message: "Payment details module is not available. Cannot create return.",
40
- type: "SERVICE_UNAVAILABLE",
41
- });
42
- return;
43
- }
44
- throw e;
45
- }
23
+ // Parse body early — we need order_id before the payment guard
46
24
  const parseResult = validators_1.StoreCreateReturnSchema.safeParse(req.body);
47
25
  if (!parseResult.success) {
48
26
  res.status(400).json({
@@ -53,9 +31,10 @@ async function POST(req, res) {
53
31
  return;
54
32
  }
55
33
  const data = parseResult.data;
34
+ const query = req.scope.resolve(utils_1.ContainerRegistrationKeys.QUERY);
35
+ const isCodOrder = await (0, detect_cod_1.detectCodOrder)(data.order_id, query);
56
36
  // Early duplicate guard — fail fast before running any workflow step
57
37
  try {
58
- const query = req.scope.resolve(utils_1.ContainerRegistrationKeys.QUERY);
59
38
  const { data: activeChanges } = await query.graph({
60
39
  entity: "order_change",
61
40
  fields: ["id", "status"],
@@ -120,9 +99,10 @@ async function POST(req, res) {
120
99
  returnPayload = updated;
121
100
  try {
122
101
  const mappingService = req.scope.resolve(refund_payment_mapping_1.REFUND_PAYMENT_MAPPING_MODULE);
102
+ // COD orders have no payment detail — store null so admin knows no bank/UPI refund is needed
123
103
  await mappingService.createMapping({
124
104
  return_id: returnId,
125
- payment_id: data.refund_payment_id ?? undefined,
105
+ payment_id: isCodOrder ? null : (data.refund_payment_id ?? undefined),
126
106
  });
127
107
  }
128
108
  catch (e) {
@@ -190,4 +170,4 @@ async function GET(req, res) {
190
170
  });
191
171
  }
192
172
  }
193
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL3JldHVybnMvcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFhQSxvQkE0SUM7QUFFRCxrQkFxREM7QUEvTUQscURBQTJFO0FBQzNFLHFEQUE4RTtBQUU5RSw2Q0FBc0Q7QUFDdEQsb0VBQXVFO0FBRXZFLG9GQUF1RjtBQUV2Riw0Q0FBK0Q7QUFFL0Qsc0RBQW9FO0FBRTdELEtBQUssVUFBVSxJQUFJLENBQUMsR0FBa0IsRUFBRSxHQUFtQjtJQUNoRSxNQUFNLFdBQVcsR0FBSSxHQUFxRSxDQUFDLFlBQVksQ0FBQTtJQUN2RyxNQUFNLE9BQU8sR0FBRyxXQUFXLEVBQUUsUUFBUSxDQUFBO0lBQ3JDLE1BQU0sU0FBUyxHQUFHLFdBQVcsRUFBRSxVQUFVLENBQUE7SUFDekMsSUFBSSxDQUFDLE9BQU8sSUFBSSxTQUFTLEtBQUssVUFBVSxFQUFFLENBQUM7UUFDekMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDbkIsT0FBTyxFQUFFLG1EQUFtRDtZQUM1RCxJQUFJLEVBQUUsY0FBYztTQUNyQixDQUFDLENBQUE7UUFDRixPQUFNO0lBQ1IsQ0FBQztJQUVELElBQUksQ0FBQztRQUNILE1BQU0sb0JBQW9CLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQTZCLHNDQUFxQixDQUFDLENBQUE7UUFDakcsTUFBTSxVQUFVLEdBQUcsTUFBTSxvQkFBb0IsQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUN4RSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDaEIsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7Z0JBQ25CLE9BQU8sRUFBRSx5RUFBeUU7Z0JBQ2xGLElBQUksRUFBRSxvQkFBb0I7Z0JBQzFCLElBQUksRUFBRSxvQkFB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
173
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL3JldHVybnMvcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFvQkEsb0JBeUhDO0FBRUQsa0JBcURDO0FBbk1ELHFEQUEyRTtBQUMzRSxxREFBOEU7QUFFOUUsNkNBQXNEO0FBQ3RELG9GQUF1RjtBQUV2Riw0Q0FBK0Q7QUFFL0Qsc0RBQW9FO0FBQ3BFLDREQUE0RDtBQVVyRCxLQUFLLFVBQVUsSUFBSSxDQUFDLEdBQWtCLEVBQUUsR0FBbUI7SUFDaEUsTUFBTSxXQUFXLEdBQUksR0FBcUUsQ0FBQyxZQUFZLENBQUE7SUFDdkcsTUFBTSxPQUFPLEdBQUcsV0FBVyxFQUFFLFFBQVEsQ0FBQTtJQUNyQyxNQUFNLFNBQVMsR0FBRyxXQUFXLEVBQUUsVUFBVSxDQUFBO0lBQ3pDLElBQUksQ0FBQyxPQUFPLElBQUksU0FBUyxLQUFLLFVBQVUsRUFBRSxDQUFDO1FBQ3pDLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ25CLE9BQU8sRUFBRSxtREFBbUQ7WUFDNUQsSUFBSSxFQUFFLGNBQWM7U0FDckIsQ0FBQyxDQUFBO1FBQ0YsT0FBTTtJQUNSLENBQUM7SUFFRCwrREFBK0Q7SUFDL0QsTUFBTSxXQUFXLEdBQUcsb0NBQXVCLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUMvRCxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3pCLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ25CLE9BQU8sRUFBRSxzQkFBc0I7WUFDL0IsTUFBTSxFQUFFLFdBQVcsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFO1lBQ25DLElBQUksRUFBRSxjQUFjO1NBQ3JCLENBQUMsQ0FBQTtRQUNGLE9BQU07SUFDUixDQUFDO0lB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
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.detectCodOrder = detectCodOrder;
4
+ /**
5
+ * Returns true if the order was placed using a cash-on-delivery payment provider.
6
+ *
7
+ * provider_id lives on the `payment` table. We first fetch the order's
8
+ * payment_collection IDs, then query the payment entity directly.
9
+ */
10
+ async function detectCodOrder(orderId, query) {
11
+ try {
12
+ const { data: orderData } = await query.graph({
13
+ entity: "order",
14
+ fields: ["id", "payment_collections.id"],
15
+ filters: { id: orderId },
16
+ });
17
+ const collections = (orderData?.[0]?.payment_collections ?? []);
18
+ const collectionIds = collections.map((pc) => pc.id).filter(Boolean);
19
+ if (!collectionIds.length)
20
+ return false;
21
+ const { data: payments } = await query.graph({
22
+ entity: "payment",
23
+ fields: ["id", "provider_id"],
24
+ filters: { payment_collection_id: collectionIds },
25
+ });
26
+ return payments.some((p) => {
27
+ const id = (p.provider_id ?? "").toLowerCase();
28
+ return id === "pp_system_default" || id.includes("cod") || id.includes("cash");
29
+ });
30
+ }
31
+ catch {
32
+ return false;
33
+ }
34
+ }
35
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV0ZWN0LWNvZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9oZWxwZXJzL2RldGVjdC1jb2QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFjQSx3Q0F5QkM7QUEvQkQ7Ozs7O0dBS0c7QUFDSSxLQUFLLFVBQVUsY0FBYyxDQUFDLE9BQWUsRUFBRSxLQUFpQjtJQUNyRSxJQUFJLENBQUM7UUFDSCxNQUFNLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxHQUFHLE1BQU0sS0FBSyxDQUFDLEtBQUssQ0FBQztZQUM1QyxNQUFNLEVBQUUsT0FBTztZQUNmLE1BQU0sRUFBRSxDQUFDLElBQUksRUFBRSx3QkFBd0IsQ0FBQztZQUN4QyxPQUFPLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFO1NBQ3pCLENBQUMsQ0FBQTtRQUVGLE1BQU0sV0FBVyxHQUFHLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsbUJBQW1CLElBQUksRUFBRSxDQUEwQixDQUFBO1FBQ3hGLE1BQU0sYUFBYSxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUE7UUFDcEUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNO1lBQUUsT0FBTyxLQUFLLENBQUE7UUFFdkMsTUFBTSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsR0FBRyxNQUFNLEtBQUssQ0FBQyxLQUFLLENBQUM7WUFDM0MsTUFBTSxFQUFFLFNBQVM7WUFDakIsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLGFBQWEsQ0FBQztZQUM3QixPQUFPLEVBQUUsRUFBRSxxQkFBcUIsRUFBRSxhQUFhLEVBQUU7U0FDbEQsQ0FBQyxDQUFBO1FBRUYsT0FBUSxRQUE0QyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQzlELE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLFdBQVcsSUFBSSxFQUFFLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQTtZQUM5QyxPQUFPLEVBQUUsS0FBSyxtQkFBbUIsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUE7UUFDaEYsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsT0FBTyxLQUFLLENBQUE7SUFDZCxDQUFDO0FBQ0gsQ0FBQyJ9
package/README.md CHANGED
@@ -50,16 +50,15 @@ This plugin is compatible with Medusa v2 (e.g. `@medusajs/framework` and `@medus
50
50
  - **Medusa workflows**: Customer returns use `createAndCompleteReturnOrderWorkflow`; customer exchanges use `beginExchangeOrderWorkflow`, `orderExchangeRequestItemReturnWorkflow`, `orderExchangeAddNewItemWorkflow`, `confirmExchangeRequestWorkflow`, and `cancelBeginOrderExchangeWorkflow`. Admin actions use `confirmReturnReceiveWorkflow`, `cancelReturnWorkflow`, and `cancelBeginOrderExchangeWorkflow`.
51
51
  - **Payment details**: Custom module `payment_detail` for customer payment methods (UPI, bank, card). Store CRUD at `/store/payment-details`. Type-driven validation — UPI requires `upi_id`; bank requires `account_holder_name`, `bank_name`, `account_number`, `ifsc` (optional `branch_name`); card requires `card_holder_name`, `card_number`, `expiry_date`, `cvv`. One default per customer; return creation requires at least one default payment method.
52
52
  - **Refund payment mapping**: Table `refund_payment_mapping` (one row per return: `return_id`, `payment_id`, `is_refunded`, `refund_mode`, `images`, `details`). A mapping is created automatically when a return is created. Customer can GET mapping (read-only for all fields) and PUT `payment_id` only while `is_refunded = false`; customer can also GET all mappings for an order to see if all refunds are successful. Only admin can set `is_refunded`, `refund_mode` (offline/online), `images`, and `details`.
53
- - **Return payment detail mapping**: Module `return_payment_detail_mapping` — table linking `return_id` (unique) to `payment_detail_id`. Customer can upsert and read their mapping per return. Admin can read mapping by return ID. The admin refund-context endpoint resolves the refund payment method from this mapping first; if absent it falls back to the customer's default payment detail, with the source clearly labelled in the admin widget ("Customer specified" vs "Customer default").
54
53
 
55
54
  ### Plugin structure (high level)
56
55
 
57
56
  | Area | What the plugin provides |
58
57
  |------|---------------------------|
59
- | **Store (authenticated)** | `/store/orders/cancel|reorder/:id`, `/store/returns`, `/store/swaps`, `/store/payment-details`, `/store/refund-payment-mapping/:return_id`, `/store/return-payment-detail-mapping/:return_id`, `/store/orders/:order_id/refund-payment-mappings` |
58
+ | **Store (authenticated)** | `/store/orders/cancel|reorder/:id`, `/store/returns`, `/store/swaps`, `/store/payment-details`, `/store/refund-payment-mapping/:return_id`, `/store/orders/:order_id/refund-payment-mappings` |
60
59
  | **Store (guest)** | `/store/otp/request|verify`, `/store/guest-orders`, `/store/guest-orders/:id/returns|cancel|reorder|swaps` |
61
- | **Admin** | `/admin/returns`, `/admin/swaps`, `/admin/refund-payment-mapping/:return_id`, `/admin/refund-payment-mapping/:return_id/mark-refunded`, `/admin/return-payment-detail-mapping/:return_id`, `/admin/orders/:order_id/refund-context` |
62
- | **Modules** | `payment_detail`, `refund_payment_mapping`, `return_payment_detail_mapping`; returns/exchanges use Medusa ORDER module |
60
+ | **Admin** | `/admin/returns`, `/admin/swaps`, `/admin/refund-payment-mapping/:return_id`, `/admin/refund-payment-mapping/:return_id/mark-refunded`, `/admin/orders/:order_id/refund-context` |
61
+ | **Modules** | `payment_detail`, `refund_payment_mapping`; returns/exchanges use Medusa ORDER module |
63
62
  | **Subscribers** | Order confirmation email, status notifications, return/swap event sync |
64
63
 
65
64
  ### Important APIs (quick reference)
@@ -84,8 +83,6 @@ This plugin is compatible with Medusa v2 (e.g. `@medusajs/framework` and `@medus
84
83
  | POST | `/store/payment-details/:id/make-default` | Customer | Set default payment |
85
84
  | GET | `/store/refund-payment-mapping/:return_id` | Customer | Get mapping (own return) |
86
85
  | PUT | `/store/refund-payment-mapping/:return_id` | Customer | Update `payment_id` only |
87
- || GET | `/store/return-payment-detail-mapping/:return_id` | Customer | Get return→payment detail mapping |
88
- || PUT | `/store/return-payment-detail-mapping/:return_id` | Customer | Upsert return→payment detail mapping |
89
86
  | GET | `/store/orders/:order_id/refund-payment-mappings` | Customer | List mappings for order |
90
87
  | **Store (guest)** | | | |
91
88
  | POST | `/store/otp/request` | — | Request OTP |
@@ -107,7 +104,6 @@ This plugin is compatible with Medusa v2 (e.g. `@medusajs/framework` and `@medus
107
104
  | GET | `/admin/orders/:order_id/refund-context` | Admin | Refund context (return + mapping + payment_detail) |
108
105
  | PUT | `/admin/refund-payment-mapping/:return_id` | Admin | Update refund_mode, images, details |
109
106
  | POST | `/admin/refund-payment-mapping/:return_id/mark-refunded` | Admin | Mark mapping as refunded |
110
- || GET | `/admin/return-payment-detail-mapping/:return_id` | Admin | Get return→payment detail mapping |
111
107
  | POST | `/admin/uploads` | Admin | Upload file (Medusa core; used by widget for refund images) |
112
108
 
113
109
  ## Configuration
@@ -302,26 +298,10 @@ The plugin includes a `refund_payment_mapping` module: one row per return linkin
302
298
  - **Admin API**:
303
299
  - `PUT /admin/refund-payment-mapping/:return_id` — update admin-only fields. Body: `{ refund_mode?: "offline" | "online" | null, images?: string[], details?: string | null }` (partial; only provided keys are updated).
304
300
  - `POST /admin/refund-payment-mapping/:return_id/mark-refunded` — set `is_refunded = true` (idempotent).
305
- - **Order detail integration**: `GET /admin/orders/:order_id/refund-context` — aggregated read returning `return_id`, `refund_mapping` (id, payment_id, is_refunded, refund_mode, images, details), and `payment_detail` (id, type, detail_json, is_default). Returns null blocks when no return or mapping exists. An admin widget at `order.details.after` shows refund payment method, **Refund mode** (Offline/Online), **Details**, **Images** (with upload via Medusa `POST /admin/uploads`), and **Mark refunded** (when `is_refunded = false`). Only admin can change refund_mode, images, and details.
301
+ - **Order detail integration**: `GET /admin/orders/:order_id/refund-context` — aggregated read returning `return_id`, `refund_mapping` (id, payment_id, is_refunded, refund_mode, images, details), and `payment_detail` (id, type, detail_json, is_default) resolved from the customer's default payment detail. Returns null blocks when no return or mapping exists. An admin widget at `order.details.after` shows refund payment method, **Refund mode** (Offline/Online), **Details**, **Images** (with upload via Medusa `POST /admin/uploads`), and **Mark refunded** (when `is_refunded = false`). Only admin can change refund_mode, images, and details.
306
302
  - **Registration**: Add the module in `medusa-config.js` (e.g. `orderManagement.modules["refund-payment-mapping"]`) and run migrations.
307
303
 
308
304
 
309
- ### Return payment detail mapping module
310
-
311
- The plugin includes a `return_payment_detail_mapping` module: a simple table that links a return to a specific customer payment detail chosen as the refund destination.
312
-
313
- - **Table**: `return_payment_detail_mapping` — `id`, `return_id` (unique), `payment_detail_id`, timestamps.
314
- - **Store API** (authenticated customers only):
315
- - `GET /store/return-payment-detail-mapping/:return_id` — read the mapping for one return (customer must own the return). Returns `404` if no mapping has been set.
316
- - `PUT /store/return-payment-detail-mapping/:return_id` — body `{ payment_detail_id: string }`. Creates the mapping if none exists; updates `payment_detail_id` if it already exists (upsert). Customer must own the return.
317
- - **Admin API**:
318
- - `GET /admin/return-payment-detail-mapping/:return_id` — read mapping for any return by `return_id`.
319
- - **Admin refund-context integration**: `GET /admin/orders/:order_id/refund-context` resolves payment detail in this priority order:
320
- 1. Looks up `return_payment_detail_mapping` for the return — if found, fetches the linked `payment_detail` → `source: "specified"`.
321
- 2. Falls back to the customer's `is_default = true` payment detail → `source: "default"`.
322
- The admin widget displays a **green "Customer specified"** badge when the customer explicitly chose a payment method, or an **orange "Customer default"** badge with an info note when falling back to the default.
323
- - **Registration**: Add `orderManagement.modules["return-payment-detail-mapping"]` in `medusa-config.js` and run migrations.
324
-
325
305
  ## Return Orders Admin Panel
326
306
 
327
307
  The plugin includes a dedicated section in the Medusa Admin Panel for managing customer return orders. This feature provides administrators with comprehensive tools to view, search, filter, and manage all return orders.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "order-management",
3
- "version": "0.0.65",
3
+ "version": "0.0.66",
4
4
  "description": "A starter for Medusa plugins.",
5
5
  "author": "Medusa (https://medusajs.com)",
6
6
  "license": "MIT",
@@ -1,33 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.GET = GET;
4
- const return_payment_detail_mapping_1 = require("../../../../modules/return-payment-detail-mapping");
5
- /**
6
- * GET /admin/return-payment-detail-mapping/:return_id
7
- * Admin reads the payment detail mapping for any return.
8
- */
9
- async function GET(req, res) {
10
- const returnId = req.params.return_id;
11
- try {
12
- const mappingService = req.scope.resolve(return_payment_detail_mapping_1.RETURN_PAYMENT_DETAIL_MAPPING_MODULE);
13
- const mapping = await mappingService.getByReturnId(returnId);
14
- if (!mapping) {
15
- res.status(404).json({
16
- message: `Return payment detail mapping not found for return_id: ${returnId}`,
17
- type: "NOT_FOUND",
18
- });
19
- return;
20
- }
21
- res.json({ return_payment_detail_mapping: mapping });
22
- }
23
- catch (err) {
24
- const message = err instanceof Error ? err.message : "Unknown error";
25
- console.error("GET /admin/return-payment-detail-mapping error:", err);
26
- res.status(500).json({
27
- message: "Failed to get return payment detail mapping",
28
- error: message,
29
- type: "INTERNAL_ERROR",
30
- });
31
- }
32
- }
33
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL3JldHVybi1wYXltZW50LWRldGFpbC1tYXBwaW5nL1tyZXR1cm5faWRdL3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBUUEsa0JBd0JDO0FBL0JELHFHQUF3RztBQUd4Rzs7O0dBR0c7QUFDSSxLQUFLLFVBQVUsR0FBRyxDQUFDLEdBQWtCLEVBQUUsR0FBbUI7SUFDL0QsTUFBTSxRQUFRLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxTQUFtQixDQUFBO0lBRS9DLElBQUksQ0FBQztRQUNILE1BQU0sY0FBYyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFvQyxvRUFBb0MsQ0FBQyxDQUFBO1FBQ2pILE1BQU0sT0FBTyxHQUFHLE1BQU0sY0FBYyxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUM1RCxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDYixHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQztnQkFDbkIsT0FBTyxFQUFFLDBEQUEwRCxRQUFRLEVBQUU7Z0JBQzdFLElBQUksRUFBRSxXQUFXO2FBQ2xCLENBQUMsQ0FBQTtZQUNGLE9BQU07UUFDUixDQUFDO1FBRUQsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLDZCQUE2QixFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUE7SUFDdEQsQ0FBQztJQUFDLE9BQU8sR0FBWSxFQUFFLENBQUM7UUFDdEIsTUFBTSxPQUFPLEdBQUcsR0FBRyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFBO1FBQ3BFLE9BQU8sQ0FBQyxLQUFLLENBQUMsaURBQWlELEVBQUUsR0FBRyxDQUFDLENBQUE7UUFDckUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDbkIsT0FBTyxFQUFFLDZDQUE2QztZQUN0RCxLQUFLLEVBQUUsT0FBTztZQUNkLElBQUksRUFBRSxnQkFBZ0I7U0FDdkIsQ0FBQyxDQUFBO0lBQ0osQ0FBQztBQUNILENBQUMifQ==
@@ -1,116 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.GET = GET;
4
- exports.PUT = PUT;
5
- const utils_1 = require("@medusajs/framework/utils");
6
- const return_payment_detail_mapping_1 = require("../../../../modules/return-payment-detail-mapping");
7
- async function ensureReturnOwnership(returnId, customerId, orderModuleService) {
8
- const returnData = await orderModuleService.retrieveReturn(returnId).catch(() => null);
9
- if (!returnData)
10
- return false;
11
- const orderId = returnData.order_id;
12
- if (!orderId)
13
- return false;
14
- const order = await orderModuleService.retrieveOrder(orderId).catch(() => null);
15
- if (!order)
16
- return false;
17
- return order.customer_id === customerId;
18
- }
19
- /**
20
- * GET /store/return-payment-detail-mapping/:return_id
21
- * Customer reads their return → payment detail mapping.
22
- */
23
- async function GET(req, res) {
24
- const authContext = req.auth_context;
25
- const customerId = authContext?.actor_id;
26
- const actorType = authContext?.actor_type;
27
- const returnId = req.params.return_id;
28
- if (!customerId || actorType !== "customer") {
29
- res.status(401).json({
30
- message: "Unauthorized: Customer authentication is required",
31
- type: "UNAUTHORIZED",
32
- });
33
- return;
34
- }
35
- try {
36
- const orderModuleService = req.scope.resolve(utils_1.Modules.ORDER);
37
- const owned = await ensureReturnOwnership(returnId, customerId, orderModuleService);
38
- if (!owned) {
39
- res.status(404).json({
40
- message: "Return not found or access denied",
41
- type: "NOT_FOUND",
42
- });
43
- return;
44
- }
45
- const mappingService = req.scope.resolve(return_payment_detail_mapping_1.RETURN_PAYMENT_DETAIL_MAPPING_MODULE);
46
- const mapping = await mappingService.getByReturnId(returnId);
47
- if (!mapping) {
48
- res.status(404).json({
49
- message: "Return payment detail mapping not found",
50
- type: "NOT_FOUND",
51
- });
52
- return;
53
- }
54
- res.json({ return_payment_detail_mapping: mapping });
55
- }
56
- catch (err) {
57
- const message = err instanceof Error ? err.message : "Unknown error";
58
- console.error("GET /store/return-payment-detail-mapping error:", err);
59
- res.status(500).json({
60
- message: "Failed to get return payment detail mapping",
61
- error: message,
62
- type: "INTERNAL_ERROR",
63
- });
64
- }
65
- }
66
- /**
67
- * PUT /store/return-payment-detail-mapping/:return_id
68
- * Customer upserts (creates or updates) their payment detail mapping for a return.
69
- * Request body: { payment_detail_id: string }
70
- */
71
- async function PUT(req, res) {
72
- const authContext = req.auth_context;
73
- const customerId = authContext?.actor_id;
74
- const actorType = authContext?.actor_type;
75
- const returnId = req.params.return_id;
76
- if (!customerId || actorType !== "customer") {
77
- res.status(401).json({
78
- message: "Unauthorized: Customer authentication is required",
79
- type: "UNAUTHORIZED",
80
- });
81
- return;
82
- }
83
- const body = req.body;
84
- const paymentDetailId = typeof body?.payment_detail_id === "string" ? body.payment_detail_id.trim() : undefined;
85
- if (!paymentDetailId) {
86
- res.status(400).json({
87
- message: "payment_detail_id is required and must be a non-empty string",
88
- type: "INVALID_DATA",
89
- });
90
- return;
91
- }
92
- try {
93
- const orderModuleService = req.scope.resolve(utils_1.Modules.ORDER);
94
- const owned = await ensureReturnOwnership(returnId, customerId, orderModuleService);
95
- if (!owned) {
96
- res.status(404).json({
97
- message: "Return not found or access denied",
98
- type: "NOT_FOUND",
99
- });
100
- return;
101
- }
102
- const mappingService = req.scope.resolve(return_payment_detail_mapping_1.RETURN_PAYMENT_DETAIL_MAPPING_MODULE);
103
- const mapping = await mappingService.upsert({ return_id: returnId, payment_detail_id: paymentDetailId });
104
- res.json({ return_payment_detail_mapping: mapping });
105
- }
106
- catch (err) {
107
- const message = err instanceof Error ? err.message : "Unknown error";
108
- console.error("PUT /store/return-payment-detail-mapping error:", err);
109
- res.status(500).json({
110
- message: "Failed to upsert return payment detail mapping",
111
- error: message,
112
- type: "INTERNAL_ERROR",
113
- });
114
- }
115
- }
116
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL3JldHVybi1wYXltZW50LWRldGFpbC1tYXBwaW5nL1tyZXR1cm5faWRdL3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBd0JBLGtCQTZDQztBQU9ELGtCQWdEQztBQTNIRCxxREFBbUQ7QUFFbkQscUdBQXdHO0FBR3hHLEtBQUssVUFBVSxxQkFBcUIsQ0FDbEMsUUFBZ0IsRUFDaEIsVUFBa0IsRUFDbEIsa0JBQXVDO0lBRXZDLE1BQU0sVUFBVSxHQUFHLE1BQU0sa0JBQWtCLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUN0RixJQUFJLENBQUMsVUFBVTtRQUFFLE9BQU8sS0FBSyxDQUFBO0lBQzdCLE1BQU0sT0FBTyxHQUFJLFVBQW9DLENBQUMsUUFBUSxDQUFBO0lBQzlELElBQUksQ0FBQyxPQUFPO1FBQUUsT0FBTyxLQUFLLENBQUE7SUFDMUIsTUFBTSxLQUFLLEdBQUcsTUFBTSxrQkFBa0IsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFBO0lBQy9FLElBQUksQ0FBQyxLQUFLO1FBQUUsT0FBTyxLQUFLLENBQUE7SUFDeEIsT0FBUSxLQUFrQyxDQUFDLFdBQVcsS0FBSyxVQUFVLENBQUE7QUFDdkUsQ0FBQztBQUVEOzs7R0FHRztBQUNJLEtBQUssVUFBVSxHQUFHLENBQUMsR0FBa0IsRUFBRSxHQUFtQjtJQUMvRCxNQUFNLFdBQVcsR0FBSSxHQUFxRSxDQUFDLFlBQVksQ0FBQTtJQUN2RyxNQUFNLFVBQVUsR0FBRyxXQUFXLEVBQUUsUUFBUSxDQUFBO0lBQ3hDLE1BQU0sU0FBUyxHQUFHLFdBQVcsRUFBRSxVQUFVLENBQUE7SUFDekMsTUFBTSxRQUFR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
@@ -1,14 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.ReturnPaymentDetailMappingService = exports.RETURN_PAYMENT_DETAIL_MAPPING_MODULE = void 0;
7
- const utils_1 = require("@medusajs/framework/utils");
8
- const service_1 = __importDefault(require("./service"));
9
- exports.ReturnPaymentDetailMappingService = service_1.default;
10
- exports.RETURN_PAYMENT_DETAIL_MAPPING_MODULE = "return_payment_detail_mapping";
11
- exports.default = (0, utils_1.Module)(exports.RETURN_PAYMENT_DETAIL_MAPPING_MODULE, {
12
- service: service_1.default,
13
- });
14
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9yZXR1cm4tcGF5bWVudC1kZXRhaWwtbWFwcGluZy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxxREFBa0Q7QUFDbEQsd0RBQXlEO0FBUWhELDRDQVJGLGlCQUFpQyxDQVFFO0FBTjdCLFFBQUEsb0NBQW9DLEdBQUcsK0JBQStCLENBQUE7QUFFbkYsa0JBQWUsSUFBQSxjQUFNLEVBQUMsNENBQW9DLEVBQUU7SUFDMUQsT0FBTyxFQUFFLGlCQUFpQztDQUMzQyxDQUFDLENBQUEifQ==
@@ -1,33 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Migration20260309000000 = void 0;
4
- const migrations_1 = require("@medusajs/framework/mikro-orm/migrations");
5
- class Migration20260309000000 extends migrations_1.Migration {
6
- async up() {
7
- this.addSql(`
8
- CREATE TABLE IF NOT EXISTS "return_payment_detail_mapping" (
9
- "id" text NOT NULL PRIMARY KEY,
10
- "return_id" text NOT NULL,
11
- "payment_detail_id" text NOT NULL,
12
- "created_at" TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(),
13
- "updated_at" TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(),
14
- "deleted_at" TIMESTAMP WITH TIME ZONE NULL
15
- );
16
- `);
17
- this.addSql(`
18
- CREATE UNIQUE INDEX IF NOT EXISTS "IDX_return_payment_detail_mapping_return_id"
19
- ON "return_payment_detail_mapping" ("return_id") WHERE "deleted_at" IS NULL;
20
- `);
21
- this.addSql(`
22
- CREATE INDEX IF NOT EXISTS "IDX_return_payment_detail_mapping_payment_detail_id"
23
- ON "return_payment_detail_mapping" ("payment_detail_id") WHERE "deleted_at" IS NULL;
24
- `);
25
- }
26
- async down() {
27
- this.addSql(`DROP INDEX IF EXISTS "IDX_return_payment_detail_mapping_payment_detail_id";`);
28
- this.addSql(`DROP INDEX IF EXISTS "IDX_return_payment_detail_mapping_return_id";`);
29
- this.addSql(`DROP TABLE IF EXISTS "return_payment_detail_mapping";`);
30
- }
31
- }
32
- exports.Migration20260309000000 = Migration20260309000000;
33
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWlncmF0aW9uMjAyNjAzMDkwMDAwMDAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9yZXR1cm4tcGF5bWVudC1kZXRhaWwtbWFwcGluZy9taWdyYXRpb25zL01pZ3JhdGlvbjIwMjYwMzA5MDAwMDAwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHlFQUFvRTtBQUVwRSxNQUFhLHVCQUF3QixTQUFRLHNCQUFTO0lBQ3BELEtBQUssQ0FBQyxFQUFFO1FBQ04sSUFBSSxDQUFDLE1BQU0sQ0FBQzs7Ozs7Ozs7O0tBU1gsQ0FBQyxDQUFBO1FBRUYsSUFBSSxDQUFDLE1BQU0sQ0FBQzs7O0tBR1gsQ0FBQyxDQUFBO1FBRUYsSUFBSSxDQUFDLE1BQU0sQ0FBQzs7O0tBR1gsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVELEtBQUssQ0FBQyxJQUFJO1FBQ1IsSUFBSSxDQUFDLE1BQU0sQ0FBQyw2RUFBNkUsQ0FBQyxDQUFBO1FBQzFGLElBQUksQ0FBQyxNQUFNLENBQUMscUVBQXFFLENBQUMsQ0FBQTtRQUNsRixJQUFJLENBQUMsTUFBTSxDQUFDLHVEQUF1RCxDQUFDLENBQUE7SUFDdEUsQ0FBQztDQUNGO0FBN0JELDBEQTZCQyJ9
@@ -1,10 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const utils_1 = require("@medusajs/framework/utils");
4
- const ReturnPaymentDetailMapping = utils_1.model.define("return_payment_detail_mapping", {
5
- id: utils_1.model.id().primaryKey(),
6
- return_id: utils_1.model.text().unique().searchable(),
7
- payment_detail_id: utils_1.model.text().searchable(),
8
- });
9
- exports.default = ReturnPaymentDetailMapping;
10
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmV0dXJuLXBheW1lbnQtZGV0YWlsLW1hcHBpbmcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9yZXR1cm4tcGF5bWVudC1kZXRhaWwtbWFwcGluZy9tb2RlbHMvcmV0dXJuLXBheW1lbnQtZGV0YWlsLW1hcHBpbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxxREFBaUQ7QUFFakQsTUFBTSwwQkFBMEIsR0FBRyxhQUFLLENBQUMsTUFBTSxDQUFDLCtCQUErQixFQUFFO0lBQy9FLEVBQUUsRUFBRSxhQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsVUFBVSxFQUFFO0lBQzNCLFNBQVMsRUFBRSxhQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsVUFBVSxFQUFFO0lBQzdDLGlCQUFpQixFQUFFLGFBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxVQUFVLEVBQUU7Q0FDN0MsQ0FBQyxDQUFBO0FBRUYsa0JBQWUsMEJBQTBCLENBQUEifQ==
@@ -1,68 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const utils_1 = require("@medusajs/framework/utils");
7
- const index_1 = require("./index");
8
- const return_payment_detail_mapping_1 = __importDefault(require("./models/return-payment-detail-mapping"));
9
- class ReturnPaymentDetailMappingService extends (0, utils_1.MedusaService)({
10
- ReturnPaymentDetailMapping: return_payment_detail_mapping_1.default,
11
- }) {
12
- get moduleKey() {
13
- return index_1.RETURN_PAYMENT_DETAIL_MAPPING_MODULE;
14
- }
15
- normalize(raw) {
16
- if (!raw ||
17
- typeof raw !== "object" ||
18
- !("id" in raw) ||
19
- !("return_id" in raw) ||
20
- !("payment_detail_id" in raw)) {
21
- throw new Error("Invalid return payment detail mapping data");
22
- }
23
- const row = raw;
24
- return {
25
- id: row.id,
26
- return_id: row.return_id,
27
- payment_detail_id: row.payment_detail_id,
28
- created_at: new Date(row.created_at ?? new Date()),
29
- updated_at: new Date(row.updated_at ?? new Date()),
30
- deleted_at: row.deleted_at ? new Date(row.deleted_at) : null,
31
- };
32
- }
33
- async getByReturnId(returnId) {
34
- const [list] = await this.listAndCountReturnPaymentDetailMappings({ return_id: returnId }, { take: 1 });
35
- const arr = Array.isArray(list) ? list : [];
36
- const first = arr[0];
37
- return first ? this.normalize(first) : null;
38
- }
39
- /**
40
- * Creates a new mapping if none exists for return_id, otherwise updates payment_detail_id.
41
- */
42
- async upsert(input) {
43
- const existing = await this.getByReturnId(input.return_id);
44
- if (existing) {
45
- await this.updateReturnPaymentDetailMappings({
46
- selector: { id: existing.id },
47
- data: { payment_detail_id: input.payment_detail_id },
48
- });
49
- const updated = await this.getByReturnId(input.return_id);
50
- if (!updated) {
51
- throw new utils_1.MedusaError(utils_1.MedusaError.Types.UNEXPECTED_STATE, "Mapping not found after update");
52
- }
53
- return updated;
54
- }
55
- const created = await this.createReturnPaymentDetailMappings({
56
- return_id: input.return_id,
57
- payment_detail_id: input.payment_detail_id,
58
- });
59
- const arr = Array.isArray(created) ? created : [created];
60
- const first = arr[0];
61
- if (!first) {
62
- throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "Failed to create return payment detail mapping");
63
- }
64
- return this.normalize(first);
65
- }
66
- }
67
- exports.default = ReturnPaymentDetailMappingService;
68
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9tb2R1bGVzL3JldHVybi1wYXltZW50LWRldGFpbC1tYXBwaW5nL3NlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxxREFBc0U7QUFDdEUsbUNBQThEO0FBQzlELDJHQUErRTtBQU0vRSxNQUFxQixpQ0FBa0MsU0FBUSxJQUFBLHFCQUFhLEVBQUM7SUFDM0UsMEJBQTBCLEVBQTFCLHVDQUEwQjtDQUMzQixDQUFDO0lBQ0EsSUFBSSxTQUFTO1FBQ1gsT0FBTyw0Q0FBb0MsQ0FBQTtJQUM3QyxDQUFDO0lBRVMsU0FBUyxDQUFDLEdBQVk7UUFDOUIsSUFDRSxDQUFDLEdBQUc7WUFDSixPQUFPLEdBQUcsS0FBSyxRQUFRO1lBQ3ZCLENBQUMsQ0FBQyxJQUFJLElBQUksR0FBRyxDQUFDO1lBQ2QsQ0FBQyxDQUFDLFdBQVcsSUFBSSxHQUFHLENBQUM7WUFDckIsQ0FBQyxDQUFDLG1CQUFtQixJQUFJLEdBQUcsQ0FBQyxFQUM3QixDQUFDO1lBQ0QsTUFBTSxJQUFJLEtBQUssQ0FBQyw0Q0FBNEMsQ0FBQyxDQUFBO1FBQy9ELENBQUM7UUFDRCxNQUFNLEdBQUcsR0FBRyxHQU9YLENBQUE7UUFDRCxPQUFPO1lBQ0wsRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFO1lBQ1YsU0FBUyxFQUFFLEdBQUcsQ0FBQyxTQUFTO1lBQ3hCLGlCQUFpQixFQUFFLEdBQUcsQ0FBQyxpQkFBaUI7WUFDeEMsVUFBVSxFQUFFLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLElBQUksSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNsRCxVQUFVLEVBQUUsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsSUFBSSxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ2xELFVBQVUsRUFBRSxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUk7U0FDN0QsQ0FBQTtJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsYUFBYSxDQUFDLFFBQWdCO1FBQ2xDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLElBQUksQ0FBQyx1Q0FBdUMsQ0FDL0QsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLEVBQ3ZCLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUNaLENBQUE7UUFDRCxNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtRQUMzQyxNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDcEIsT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQTtJQUM3QyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQTRDO1FBQ3ZELE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUE7UUFFMUQsSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUNiLE1BQU0sSUFBSSxDQUFDLGlDQUFpQyxDQUFDO2dCQUMzQyxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsUUFBUSxDQUFDLEVBQUUsRUFBRTtnQkFDN0IsSUFBSSxFQUFFLEVBQUUsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLGlCQUFpQixFQUFFO2FBQ3JELENBQUMsQ0FBQTtZQUNGLE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUE7WUFDekQsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNiLE1BQU0sSUFBSSxtQkFBVyxDQUFDLG1CQUFXLENBQUMsS0FBSyxDQUFDLGdCQUFnQixFQUFFLGdDQUFnQyxDQUFDLENBQUE7WUFDN0YsQ0FBQztZQUNELE9BQU8sT0FBTyxDQUFBO1FBQ2hCLENBQUM7UUFFRCxNQUFNLE9BQU8sR0FBRyxNQUFNLElBQUksQ0FBQyxpQ0FBaUMsQ0FBQztZQUMzRCxTQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVM7WUFDMUIsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLGlCQUFpQjtTQUMzQyxDQUFDLENBQUE7UUFDRixNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUE7UUFDeEQsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ3BCLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNYLE1BQU0sSUFBSSxtQkFBVyxDQUFDLG1CQUFXLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBRSxnREFBZ0QsQ0FBQyxDQUFBO1FBQ3pHLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDOUIsQ0FBQztDQUNGO0FBMUVELG9EQTBFQyJ9
@@ -1,3 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9yZXR1cm4tcGF5bWVudC1kZXRhaWwtbWFwcGluZy90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIn0=