@legenki/print2medusa 0.4.0 → 0.5.1
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 +37 -1
- package/.medusa/server/src/admin/index.mjs +37 -1
- package/.medusa/server/src/providers/printful-fulfillment/service.js +9 -3
- package/.medusa/server/src/utils/costs.js +109 -0
- package/.medusa/server/src/utils/order-state.js +5 -1
- package/.medusa/server/src/utils/stock.js +33 -1
- package/.medusa/server/src/workflows/create-printful-order.js +23 -1
- package/.medusa/server/src/workflows/sync-products.js +56 -7
- package/README.md +31 -0
- package/package.json +1 -1
|
@@ -4,6 +4,13 @@ const adminSdk = require("@medusajs/admin-sdk");
|
|
|
4
4
|
const ui = require("@medusajs/ui");
|
|
5
5
|
const react = require("react");
|
|
6
6
|
const ATTENTION_STATES = /* @__PURE__ */ new Set(["failed", "canceled", "onhold"]);
|
|
7
|
+
const formatMinor = (amount, currency) => {
|
|
8
|
+
if (typeof amount !== "number" || !Number.isFinite(amount)) {
|
|
9
|
+
return null;
|
|
10
|
+
}
|
|
11
|
+
const code = typeof currency === "string" ? currency.toUpperCase() : "";
|
|
12
|
+
return `${(amount / 100).toFixed(2)}${code ? ` ${code}` : ""}`;
|
|
13
|
+
};
|
|
7
14
|
const PrintfulOrderWidget = ({ data }) => {
|
|
8
15
|
const metadata = data.metadata ?? {};
|
|
9
16
|
const printfulOrderId = metadata.printful_order_id;
|
|
@@ -14,6 +21,19 @@ const PrintfulOrderWidget = ({ data }) => {
|
|
|
14
21
|
const statusUpdatedAt = metadata.printful_status_updated_at;
|
|
15
22
|
const shipments = metadata.printful_shipments ?? [];
|
|
16
23
|
const isAttention = status ? ATTENTION_STATES.has(status) : false;
|
|
24
|
+
const costTotal = formatMinor(
|
|
25
|
+
metadata.printful_cost_total,
|
|
26
|
+
metadata.printful_cost_currency
|
|
27
|
+
);
|
|
28
|
+
const retailTotal = formatMinor(
|
|
29
|
+
metadata.printful_retail_total,
|
|
30
|
+
metadata.printful_retail_currency
|
|
31
|
+
);
|
|
32
|
+
const margin = formatMinor(
|
|
33
|
+
metadata.printful_margin,
|
|
34
|
+
metadata.printful_cost_currency
|
|
35
|
+
);
|
|
36
|
+
const currencyMismatch = costTotal !== null && retailTotal !== null && margin === null;
|
|
17
37
|
return /* @__PURE__ */ jsxRuntime.jsxs(ui.Container, { className: "divide-y p-0", children: [
|
|
18
38
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between px-6 py-4", children: [
|
|
19
39
|
/* @__PURE__ */ jsxRuntime.jsx(ui.Heading, { level: "h2", children: "Printful" }),
|
|
@@ -49,7 +69,23 @@ const PrintfulOrderWidget = ({ data }) => {
|
|
|
49
69
|
"Last synced: ",
|
|
50
70
|
new Date(statusUpdatedAt).toLocaleString()
|
|
51
71
|
] }) : null
|
|
52
|
-
] })
|
|
72
|
+
] }),
|
|
73
|
+
costTotal ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "px-6 py-4 flex flex-col gap-2", children: [
|
|
74
|
+
/* @__PURE__ */ jsxRuntime.jsx(ui.Text, { size: "small", weight: "plus", children: "Economics" }),
|
|
75
|
+
/* @__PURE__ */ jsxRuntime.jsxs(ui.Text, { size: "small", className: "text-ui-fg-subtle", children: [
|
|
76
|
+
"Printful cost: ",
|
|
77
|
+
costTotal
|
|
78
|
+
] }),
|
|
79
|
+
retailTotal ? /* @__PURE__ */ jsxRuntime.jsxs(ui.Text, { size: "small", className: "text-ui-fg-subtle", children: [
|
|
80
|
+
"Retail: ",
|
|
81
|
+
retailTotal
|
|
82
|
+
] }) : null,
|
|
83
|
+
margin ? /* @__PURE__ */ jsxRuntime.jsxs(ui.Text, { size: "small", children: [
|
|
84
|
+
"Margin: ",
|
|
85
|
+
margin
|
|
86
|
+
] }) : null,
|
|
87
|
+
currencyMismatch ? /* @__PURE__ */ jsxRuntime.jsx(ui.Text, { size: "small", className: "text-ui-fg-subtle", children: "Margin unavailable — Printful billed in a different currency than the order." }) : null
|
|
88
|
+
] }) : null
|
|
53
89
|
] });
|
|
54
90
|
};
|
|
55
91
|
adminSdk.defineWidgetConfig({
|
|
@@ -3,6 +3,13 @@ import { defineWidgetConfig } from "@medusajs/admin-sdk";
|
|
|
3
3
|
import { Container, Heading, Badge, Text, Button, toast } from "@medusajs/ui";
|
|
4
4
|
import { useState, useEffect } from "react";
|
|
5
5
|
const ATTENTION_STATES = /* @__PURE__ */ new Set(["failed", "canceled", "onhold"]);
|
|
6
|
+
const formatMinor = (amount, currency) => {
|
|
7
|
+
if (typeof amount !== "number" || !Number.isFinite(amount)) {
|
|
8
|
+
return null;
|
|
9
|
+
}
|
|
10
|
+
const code = typeof currency === "string" ? currency.toUpperCase() : "";
|
|
11
|
+
return `${(amount / 100).toFixed(2)}${code ? ` ${code}` : ""}`;
|
|
12
|
+
};
|
|
6
13
|
const PrintfulOrderWidget = ({ data }) => {
|
|
7
14
|
const metadata = data.metadata ?? {};
|
|
8
15
|
const printfulOrderId = metadata.printful_order_id;
|
|
@@ -13,6 +20,19 @@ const PrintfulOrderWidget = ({ data }) => {
|
|
|
13
20
|
const statusUpdatedAt = metadata.printful_status_updated_at;
|
|
14
21
|
const shipments = metadata.printful_shipments ?? [];
|
|
15
22
|
const isAttention = status ? ATTENTION_STATES.has(status) : false;
|
|
23
|
+
const costTotal = formatMinor(
|
|
24
|
+
metadata.printful_cost_total,
|
|
25
|
+
metadata.printful_cost_currency
|
|
26
|
+
);
|
|
27
|
+
const retailTotal = formatMinor(
|
|
28
|
+
metadata.printful_retail_total,
|
|
29
|
+
metadata.printful_retail_currency
|
|
30
|
+
);
|
|
31
|
+
const margin = formatMinor(
|
|
32
|
+
metadata.printful_margin,
|
|
33
|
+
metadata.printful_cost_currency
|
|
34
|
+
);
|
|
35
|
+
const currencyMismatch = costTotal !== null && retailTotal !== null && margin === null;
|
|
16
36
|
return /* @__PURE__ */ jsxs(Container, { className: "divide-y p-0", children: [
|
|
17
37
|
/* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between px-6 py-4", children: [
|
|
18
38
|
/* @__PURE__ */ jsx(Heading, { level: "h2", children: "Printful" }),
|
|
@@ -48,7 +68,23 @@ const PrintfulOrderWidget = ({ data }) => {
|
|
|
48
68
|
"Last synced: ",
|
|
49
69
|
new Date(statusUpdatedAt).toLocaleString()
|
|
50
70
|
] }) : null
|
|
51
|
-
] })
|
|
71
|
+
] }),
|
|
72
|
+
costTotal ? /* @__PURE__ */ jsxs("div", { className: "px-6 py-4 flex flex-col gap-2", children: [
|
|
73
|
+
/* @__PURE__ */ jsx(Text, { size: "small", weight: "plus", children: "Economics" }),
|
|
74
|
+
/* @__PURE__ */ jsxs(Text, { size: "small", className: "text-ui-fg-subtle", children: [
|
|
75
|
+
"Printful cost: ",
|
|
76
|
+
costTotal
|
|
77
|
+
] }),
|
|
78
|
+
retailTotal ? /* @__PURE__ */ jsxs(Text, { size: "small", className: "text-ui-fg-subtle", children: [
|
|
79
|
+
"Retail: ",
|
|
80
|
+
retailTotal
|
|
81
|
+
] }) : null,
|
|
82
|
+
margin ? /* @__PURE__ */ jsxs(Text, { size: "small", children: [
|
|
83
|
+
"Margin: ",
|
|
84
|
+
margin
|
|
85
|
+
] }) : null,
|
|
86
|
+
currencyMismatch ? /* @__PURE__ */ jsx(Text, { size: "small", className: "text-ui-fg-subtle", children: "Margin unavailable — Printful billed in a different currency than the order." }) : null
|
|
87
|
+
] }) : null
|
|
52
88
|
] });
|
|
53
89
|
};
|
|
54
90
|
defineWidgetConfig({
|
|
@@ -70,11 +70,17 @@ class PrintfulFulfillmentProviderService extends utils_1.AbstractFulfillmentProv
|
|
|
70
70
|
// Inventing a default would record one method on the order while the
|
|
71
71
|
// customer was priced for another.
|
|
72
72
|
const id = optionData?.id;
|
|
73
|
+
// The return option is accepted here for the same reason `validateOption`
|
|
74
|
+
// accepts it: it is a real option this provider offers. It is excluded from
|
|
75
|
+
// live rates in `canCalculate` — Printful quotes outbound shipping only —
|
|
76
|
+
// not from being usable. Rejecting it here made an option the merchant
|
|
77
|
+
// could create and price but never add to a cart.
|
|
73
78
|
if (typeof id !== "string" ||
|
|
74
|
-
!shipping_rates_1.PRINTFUL_SHIPPING_METHODS.includes(id)
|
|
79
|
+
!(shipping_rates_1.PRINTFUL_SHIPPING_METHODS.includes(id) ||
|
|
80
|
+
id === shipping_rates_1.PRINTFUL_RETURN_OPTION_ID)) {
|
|
75
81
|
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, `Printful shipping option has an unrecognized method id ` +
|
|
76
82
|
`(${JSON.stringify(id)}). Recreate it against one of: ` +
|
|
77
|
-
`${shipping_rates_1.PRINTFUL_SHIPPING_METHODS.join(", ")}.`);
|
|
83
|
+
`${[...shipping_rates_1.PRINTFUL_SHIPPING_METHODS, shipping_rates_1.PRINTFUL_RETURN_OPTION_ID].join(", ")}.`);
|
|
78
84
|
}
|
|
79
85
|
return { ...data, printful_option_id: id };
|
|
80
86
|
}
|
|
@@ -351,4 +357,4 @@ class PrintfulFulfillmentProviderService extends utils_1.AbstractFulfillmentProv
|
|
|
351
357
|
}
|
|
352
358
|
PrintfulFulfillmentProviderService.identifier = "printful";
|
|
353
359
|
exports.default = PrintfulFulfillmentProviderService;
|
|
354
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9wcm92aWRlcnMvcHJpbnRmdWwtZnVsZmlsbG1lbnQvc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHFEQUdrQztBQVlsQyxpRUFBNEQ7QUFDNUQsaURBQXNEO0FBQ3RELCtEQVFtQztBQXVDbkMsTUFBTSxrQ0FBbUMsU0FBUSwwQ0FBa0M7SUFhakYsWUFBWSxTQUErQixFQUFFLE9BQThCO1FBQ3pFLEtBQUssRUFBRSxDQUFBO1FBQ1AsSUFBSSxDQUFDLE9BQU8sR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFBO1FBQy9CLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxJQUFLLEVBQTRCLENBQUE7UUFFeEQsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDNUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQ2YsaUVBQWlFLENBQ2xFLENBQUE7UUFDSCxDQUFDO1FBRUQsSUFBSSxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFBO1FBQzdCLElBQUksQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQTtRQUUvQixJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDcEQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQ2hCLHFFQUFxRTtnQkFDbkUscUVBQXFFO2dCQUNyRSxvRUFBb0UsQ0FDdkUsQ0FBQTtRQUNILENBQUM7UUFFRCxJQUNFLElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCO1lBQy9CLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxxQkFBcUIsRUFDcEMsQ0FBQztZQUNELElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUNoQiwwRUFBMEU7Z0JBQ3hFLGdEQUFnRCxDQUNuRCxDQUFBO1FB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
|
|
360
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9wcm92aWRlcnMvcHJpbnRmdWwtZnVsZmlsbG1lbnQvc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHFEQUdrQztBQVlsQyxpRUFBNEQ7QUFDNUQsaURBQXNEO0FBQ3RELCtEQVFtQztBQXVDbkMsTUFBTSxrQ0FBbUMsU0FBUSwwQ0FBa0M7SUFhakYsWUFBWSxTQUErQixFQUFFLE9BQThCO1FBQ3pFLEtBQUssRUFBRSxDQUFBO1FBQ1AsSUFBSSxDQUFDLE9BQU8sR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFBO1FBQy9CLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxJQUFLLEVBQTRCLENBQUE7UUFFeEQsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDNUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQ2YsaUVBQWlFLENBQ2xFLENBQUE7UUFDSCxDQUFDO1FBRUQsSUFBSSxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFBO1FBQzdCLElBQUksQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQTtRQUUvQixJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDcEQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQ2hCLHFFQUFxRTtnQkFDbkUscUVBQXFFO2dCQUNyRSxvRUFBb0UsQ0FDdkUsQ0FBQTtRQUNILENBQUM7UUFFRCxJQUNFLElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCO1lBQy9CLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxxQkFBcUIsRUFDcEMsQ0FBQztZQUNELElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUNoQiwwRUFBMEU7Z0JBQ3hFLGdEQUFnRCxDQUNuRCxDQUFBO1FB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
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MARGIN_KEY = exports.RETAIL_TOTAL_KEY = exports.RETAIL_CURRENCY_KEY = exports.COST_TOTAL_KEY = exports.COST_CURRENCY_KEY = void 0;
|
|
4
|
+
exports.toMinorUnits = toMinorUnits;
|
|
5
|
+
exports.planCostMetadata = planCostMetadata;
|
|
6
|
+
/**
|
|
7
|
+
* Printful reports money as JSON numbers in major units (12.34), and Medusa
|
|
8
|
+
* stores integer minor units (1234). Everything crossing that boundary goes
|
|
9
|
+
* through here.
|
|
10
|
+
*
|
|
11
|
+
* `undefined` means "we could not trust this value" and is deliberately
|
|
12
|
+
* distinct from `0`. Reporting an unparseable cost as zero would show the
|
|
13
|
+
* owner a 100% margin on an order that in fact cost them money.
|
|
14
|
+
*/
|
|
15
|
+
function toMinorUnits(value) {
|
|
16
|
+
if (value === null || value === undefined || value === "") {
|
|
17
|
+
return 0;
|
|
18
|
+
}
|
|
19
|
+
let n;
|
|
20
|
+
if (typeof value === "number") {
|
|
21
|
+
n = value;
|
|
22
|
+
}
|
|
23
|
+
else if (typeof value === "string") {
|
|
24
|
+
// Number() rejects trailing garbage that parseFloat would silently accept:
|
|
25
|
+
// Number("4.99abc") is NaN, parseFloat("4.99abc") is 4.99.
|
|
26
|
+
n = Number(value);
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
return undefined;
|
|
30
|
+
}
|
|
31
|
+
if (!Number.isFinite(n)) {
|
|
32
|
+
return undefined;
|
|
33
|
+
}
|
|
34
|
+
return Math.round(n * 100);
|
|
35
|
+
}
|
|
36
|
+
exports.COST_CURRENCY_KEY = "printful_cost_currency";
|
|
37
|
+
exports.COST_TOTAL_KEY = "printful_cost_total";
|
|
38
|
+
exports.RETAIL_CURRENCY_KEY = "printful_retail_currency";
|
|
39
|
+
exports.RETAIL_TOTAL_KEY = "printful_retail_total";
|
|
40
|
+
exports.MARGIN_KEY = "printful_margin";
|
|
41
|
+
/** Cost fields copied verbatim, minus `currency` and `total` which are special. */
|
|
42
|
+
const COST_FIELDS = [
|
|
43
|
+
"subtotal",
|
|
44
|
+
"discount",
|
|
45
|
+
"shipping",
|
|
46
|
+
"digitization",
|
|
47
|
+
"additional_fee",
|
|
48
|
+
"fulfillment_fee",
|
|
49
|
+
"retail_delivery_fee",
|
|
50
|
+
"tax",
|
|
51
|
+
"vat",
|
|
52
|
+
];
|
|
53
|
+
/**
|
|
54
|
+
* Build the order-metadata patch describing what an order cost and what it
|
|
55
|
+
* earned. Shaped like `planOrderStateActions` so the webhook workflow can
|
|
56
|
+
* merge it the same way.
|
|
57
|
+
*
|
|
58
|
+
* Every amount is in minor units. A field that could not be parsed is omitted
|
|
59
|
+
* rather than defaulted, so a partial Printful response never turns into a
|
|
60
|
+
* confidently wrong margin.
|
|
61
|
+
*/
|
|
62
|
+
function planCostMetadata(order) {
|
|
63
|
+
const metadata = {};
|
|
64
|
+
const costs = order.costs;
|
|
65
|
+
const retail = order.retail_costs;
|
|
66
|
+
if (!costs && !retail) {
|
|
67
|
+
return metadata;
|
|
68
|
+
}
|
|
69
|
+
const costCurrency = costs?.currency?.toLowerCase();
|
|
70
|
+
const retailCurrency = retail?.currency?.toLowerCase();
|
|
71
|
+
if (costs) {
|
|
72
|
+
if (costCurrency) {
|
|
73
|
+
metadata[exports.COST_CURRENCY_KEY] = costCurrency;
|
|
74
|
+
}
|
|
75
|
+
const total = toMinorUnits(costs.total);
|
|
76
|
+
if (total !== undefined) {
|
|
77
|
+
metadata[exports.COST_TOTAL_KEY] = total;
|
|
78
|
+
}
|
|
79
|
+
for (const field of COST_FIELDS) {
|
|
80
|
+
const value = toMinorUnits(costs[field]);
|
|
81
|
+
if (value !== undefined && value !== 0) {
|
|
82
|
+
metadata[`printful_cost_${field}`] = value;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
if (retail) {
|
|
87
|
+
if (retailCurrency) {
|
|
88
|
+
metadata[exports.RETAIL_CURRENCY_KEY] = retailCurrency;
|
|
89
|
+
}
|
|
90
|
+
const total = toMinorUnits(retail.total);
|
|
91
|
+
if (total !== undefined) {
|
|
92
|
+
metadata[exports.RETAIL_TOTAL_KEY] = total;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
// Margin only where the subtraction is meaningful. Converting between
|
|
96
|
+
// currencies would need an exchange rate this plugin does not have, and a
|
|
97
|
+
// margin built on a guessed rate is worse than no margin at all.
|
|
98
|
+
const costTotal = metadata[exports.COST_TOTAL_KEY];
|
|
99
|
+
const retailTotal = metadata[exports.RETAIL_TOTAL_KEY];
|
|
100
|
+
if (typeof costTotal === "number" &&
|
|
101
|
+
typeof retailTotal === "number" &&
|
|
102
|
+
costCurrency &&
|
|
103
|
+
retailCurrency &&
|
|
104
|
+
costCurrency === retailCurrency) {
|
|
105
|
+
metadata[exports.MARGIN_KEY] = retailTotal - costTotal;
|
|
106
|
+
}
|
|
107
|
+
return metadata;
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29zdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdXRpbHMvY29zdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBV0Esb0NBdUJDO0FBOEJELDRDQXdEQztBQXRIRDs7Ozs7Ozs7R0FRRztBQUNILFNBQWdCLFlBQVksQ0FDMUIsS0FBeUM7SUFFekMsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLEtBQUssS0FBSyxTQUFTLElBQUksS0FBSyxLQUFLLEVBQUUsRUFBRSxDQUFDO1FBQzFELE9BQU8sQ0FBQyxDQUFBO0lBQ1YsQ0FBQztJQUVELElBQUksQ0FBUyxDQUFBO0lBQ2IsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUM5QixDQUFDLEdBQUcsS0FBSyxDQUFBO0lBQ1gsQ0FBQztTQUFNLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDckMsMkVBQTJFO1FBQzNFLDJEQUEyRDtRQUMzRCxDQUFDLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQ25CLENBQUM7U0FBTSxDQUFDO1FBQ04sT0FBTyxTQUFTLENBQUE7SUFDbEIsQ0FBQztJQUVELElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDeEIsT0FBTyxTQUFTLENBQUE7SUFDbEIsQ0FBQztJQUVELE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUE7QUFDNUIsQ0FBQztBQUVZLFFBQUEsaUJBQWlCLEdBQUcsd0JBQXdCLENBQUE7QUFDNUMsUUFBQSxjQUFjLEdBQUcscUJBQXFCLENBQUE7QUFDdEMsUUFBQSxtQkFBbUIsR0FBRywwQkFBMEIsQ0FBQTtBQUNoRCxRQUFBLGdCQUFnQixHQUFHLHVCQUF1QixDQUFBO0FBQzFDLFFBQUEsVUFBVSxHQUFHLGlCQUFpQixDQUFBO0FBRTNDLG1GQUFtRjtBQUNuRixNQUFNLFdB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
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.planOrderStateActions = planOrderStateActions;
|
|
4
|
+
const costs_1 = require("./costs");
|
|
4
5
|
/** Printful states that mean a human should look at the order. */
|
|
5
6
|
const ATTENTION_STATES = new Set(["failed", "canceled", "onhold"]);
|
|
6
7
|
/**
|
|
@@ -35,6 +36,9 @@ function planOrderStateActions(order, recordedShipmentIds) {
|
|
|
35
36
|
return {
|
|
36
37
|
shipments: allShipments.filter((s) => !recorded.has(s.printful_shipment_id)),
|
|
37
38
|
metadata: {
|
|
39
|
+
// Spread first so a status key always wins a name collision rather than
|
|
40
|
+
// being silently overwritten by a cost key.
|
|
41
|
+
...(0, costs_1.planCostMetadata)(order),
|
|
38
42
|
printful_order_id: String(order.id),
|
|
39
43
|
printful_status: order.status,
|
|
40
44
|
printful_status_updated_at: new Date().toISOString(),
|
|
@@ -55,4 +59,4 @@ function planOrderStateActions(order, recordedShipmentIds) {
|
|
|
55
59
|
needsAttention: ATTENTION_STATES.has(order.status),
|
|
56
60
|
};
|
|
57
61
|
}
|
|
58
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
62
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JkZXItc3RhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdXRpbHMvb3JkZXItc3RhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUE4Q0Esc0RBaURDO0FBOUZELG1DQUEwQztBQThCMUMsa0VBQWtFO0FBQ2xFLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUE7QUFFbEU7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxTQUFnQixxQkFBcUIsQ0FDbkMsS0FBb0IsRUFDcEIsbUJBQTZCO0lBRTdCLE1BQU0sUUFBUSxHQUFHLElBQUksR0FBRyxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFBO0lBRXpELE1BQU0sWUFBWSxHQUFzQixDQUFDLEtBQUssQ0FBQyxTQUFTLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzFFLG9CQUFvQixFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ2xDLE9BQU8sRUFBRSxDQUFDLENBQUMsT0FBTztRQUNsQixPQUFPLEVBQUUsQ0FBQyxDQUFDLE9BQU87UUFDbEIsZUFBZSxFQUFFLENBQUMsQ0FBQyxlQUFlO1FBQ2xDLFlBQVksRUFBRSxDQUFDLENBQUMsWUFBWTtRQUM1QixTQUFTLEVBQUUsQ0FBQyxDQUFDLFNBQVM7UUFDdEIsVUFBVSxFQUFFLENBQUMsQ0FBQyxVQUFVO1FBQ3hCLDBFQUEwRTtRQUMxRSwyREFBMkQ7UUFDM0QsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQzFCLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztZQUMxQixRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7U0FDN0IsQ0FBQyxDQUFDO0tBQ0osQ0FBQyxDQUFDLENBQUE7SUFFSCxPQUFPO1FBQ0wsU0FBUyxFQUFFLFlBQVksQ0FBQyxNQUFNLENBQzVCLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLENBQzdDO1FBQ0QsUUFBUSxFQUFFO1lBQ1Isd0VBQXdFO1lBQ3hFLDRDQUE0QztZQUM1QyxHQUFHLElBQUEsd0JBQWdCLEVBQUMsS0FBSyxDQUFDO1lBQzFCLGlCQUFpQixFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ25DLGVBQWUsRUFBRSxLQUFLLENBQUMsTUFBTTtZQUM3QiwwQkFBMEIsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRTtZQUNwRCxrQkFBa0IsRUFBRSxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUMzQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLG9CQUFvQjtnQkFDMUIsT0FBTyxFQUFFLENBQUMsQ0FBQyxPQUFPO2dCQUNsQixPQUFPLEVBQUUsQ0FBQyxDQUFDLE9BQU87Z0JBQ2xCLGVBQWUsRUFBRSxDQUFDLENBQUMsZUFBZTtnQkFDbEMsWUFBWSxFQUFFLENBQUMsQ0FBQyxZQUFZO2dCQUM1QixTQUFTLEVBQUUsQ0FBQyxDQUFDLFNBQVM7Z0JBQ3RCLHdFQUF3RTtnQkFDeEUsc0VBQXNFO2dCQUN0RSxvRUFBb0U7Z0JBQ3BFLGdFQUFnRTtnQkFDaEUsVUFBVSxFQUFFLENBQUMsQ0FBQyxVQUFVLElBQUksS0FBSzthQUNsQyxDQUFDLENBQUM7U0FDSjtRQUNELGNBQWMsRUFBRSxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztLQUNuRCxDQUFBO0FBQ0gsQ0FBQyJ9
|
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.DISCONTINUED_MARKER_KEY = exports.STOCK_MARKER_KEY = void 0;
|
|
4
4
|
exports.planStockActions = planStockActions;
|
|
5
5
|
exports.resolvePublication = resolvePublication;
|
|
6
|
+
exports.resolveExistingProductWrite = resolveExistingProductWrite;
|
|
6
7
|
/** Statuses that mean a variant cannot currently be ordered. */
|
|
7
8
|
const UNAVAILABLE = new Set([
|
|
8
9
|
"out_of_stock",
|
|
@@ -82,4 +83,35 @@ function resolvePublication(input) {
|
|
|
82
83
|
}
|
|
83
84
|
return { status: "published", metadata, changed: false };
|
|
84
85
|
}
|
|
85
|
-
|
|
86
|
+
/**
|
|
87
|
+
* Decide the status and metadata to write for a product that already exists in
|
|
88
|
+
* Medusa. The mapper's `status` is what Printful stock alone would imply; this
|
|
89
|
+
* reconciles it with what the merchant has since done to the product.
|
|
90
|
+
*
|
|
91
|
+
* The mapper's raw status is deliberately never returned. Writing it directly
|
|
92
|
+
* is what republished merchant drafts on every sync: it is derived from stock
|
|
93
|
+
* with no knowledge of who drafted the product or why.
|
|
94
|
+
*/
|
|
95
|
+
function resolveExistingProductWrite(input) {
|
|
96
|
+
const { plan, currentStatus, currentMetadata, mappedMetadata } = input;
|
|
97
|
+
const publication = resolvePublication({
|
|
98
|
+
plan,
|
|
99
|
+
currentStatus,
|
|
100
|
+
currentMetadata,
|
|
101
|
+
});
|
|
102
|
+
// Printful-derived keys win over the stored copies of themselves, but the
|
|
103
|
+
// marker decision is made against the *current* metadata and must survive
|
|
104
|
+
// the merge — the mapper never writes STOCK_MARKER_KEY.
|
|
105
|
+
const metadata = {
|
|
106
|
+
...publication.metadata,
|
|
107
|
+
...mappedMetadata,
|
|
108
|
+
};
|
|
109
|
+
if (publication.metadata[exports.STOCK_MARKER_KEY] === undefined) {
|
|
110
|
+
delete metadata[exports.STOCK_MARKER_KEY];
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
metadata[exports.STOCK_MARKER_KEY] = publication.metadata[exports.STOCK_MARKER_KEY];
|
|
114
|
+
}
|
|
115
|
+
return { status: publication.status, metadata };
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvY2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdXRpbHMvc3RvY2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBbUJBLDRDQTRCQztBQTZCRCxnREErQkM7QUFnQkQsa0VBNkJDO0FBdEpELGdFQUFnRTtBQUNoRSxNQUFNLFdBQVcsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUMxQixjQUFjO0lBQ2Qsd0JBQXdCO0lBQ3hCLGNBQWM7Q0FDZixDQUFDLENBQUE7QUFFRjs7Ozs7Ozs7O0dBU0c7QUFDSCxTQUFnQixnQkFBZ0IsQ0FDOUIsUUFBd0U7SUFFeEUsTUFBTSxtQkFBbUIsR0FBMkIsRUFBRSxDQUFBO0lBQ3RELElBQUksWUFBWSxHQUFHLEtBQUssQ0FBQTtJQUN4QixJQUFJLGVBQWUsR0FBRyxLQUFLLENBQUE7SUFFM0IsS0FBSyxNQUFNLENBQUMsSUFBSSxRQUFRLEVBQUUsQ0FBQztRQUN6QixNQUFNLE1BQU0sR0FBRyxDQUFDLENBQUMsbUJBQW1CLElBQUksUUFBUSxDQUFBO1FBQ2hELG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUE7UUFFMUMsSUFBSSxNQUFNLEtBQUssY0FBYyxFQUFFLENBQUM7WUFDOUIsZUFBZSxHQUFHLElBQUksQ0FBQTtRQUN4QixDQUFDO1FBQ0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUM3QixZQUFZLEdBQUcsSUFBSSxDQUFBO1FBQ3JCLENBQUM7SUFDSCxDQUFDO0lBRUQsa0VBQWtFO0lBQ2xFLE1BQU0sY0FBYyxHQUFHLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFBO0lBRTNELE9BQU87UUFDTCxNQUFNLEVBQUUsY0FBYyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFdBQVc7UUFDOUMsY0FBYztRQUNk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
|
|
@@ -5,9 +5,11 @@ const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
|
|
|
5
5
|
const utils_1 = require("@medusajs/framework/utils");
|
|
6
6
|
const printful_1 = require("../modules/printful");
|
|
7
7
|
const mappers_1 = require("../utils/mappers");
|
|
8
|
+
const costs_1 = require("../utils/costs");
|
|
8
9
|
const createPrintfulOrderStep = (0, workflows_sdk_1.createStep)("printful-create-order", async (input, { container }) => {
|
|
9
10
|
const printful = container.resolve(printful_1.PRINTFUL_MODULE);
|
|
10
11
|
const orderModule = container.resolve(utils_1.Modules.ORDER);
|
|
12
|
+
const logger = container.resolve(utils_1.ContainerRegistrationKeys.LOGGER);
|
|
11
13
|
const options = await printful.getOptions();
|
|
12
14
|
const client = await printful.getClient();
|
|
13
15
|
const existing = await printful.findOrderLink(input.order_id);
|
|
@@ -110,6 +112,26 @@ const createPrintfulOrderStep = (0, workflows_sdk_1.createStep)("printful-create
|
|
|
110
112
|
printful_order_id: String(pfOrder.id),
|
|
111
113
|
status: pfOrder.status || "created",
|
|
112
114
|
});
|
|
115
|
+
// Printful returns the real costs with the created order, so no separate
|
|
116
|
+
// estimate call is needed. Written best-effort: the order exists in
|
|
117
|
+
// Printful either way, and losing the margin figure must never fail the
|
|
118
|
+
// workflow and roll back a real order.
|
|
119
|
+
const costMetadata = (0, costs_1.planCostMetadata)(pfOrder);
|
|
120
|
+
if (Object.keys(costMetadata).length > 0) {
|
|
121
|
+
try {
|
|
122
|
+
// `orderRow` rather than `existing` — that name is taken by the
|
|
123
|
+
// order-link lookup earlier in this step.
|
|
124
|
+
const orderRow = await orderModule.retrieveOrder(input.order_id, {
|
|
125
|
+
select: ["id", "metadata"],
|
|
126
|
+
});
|
|
127
|
+
await orderModule.updateOrders(input.order_id, {
|
|
128
|
+
metadata: { ...(orderRow.metadata ?? {}), ...costMetadata },
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
catch (err) {
|
|
132
|
+
logger.error(`Printful order ${pfOrder.id}: could not store costs: ${err instanceof Error ? err.message : String(err)}`);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
113
135
|
return new workflows_sdk_1.StepResponse({
|
|
114
136
|
skipped: false,
|
|
115
137
|
printful_order_id: String(pfOrder.id),
|
|
@@ -121,4 +143,4 @@ exports.createPrintfulOrderWorkflow = (0, workflows_sdk_1.createWorkflow)("print
|
|
|
121
143
|
return new workflows_sdk_1.WorkflowResponse(result);
|
|
122
144
|
});
|
|
123
145
|
exports.default = exports.createPrintfulOrderWorkflow;
|
|
124
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
146
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLXByaW50ZnVsLW9yZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3dvcmtmbG93cy9jcmVhdGUtcHJpbnRmdWwtb3JkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEscUVBSzBDO0FBQzFDLHFEQUE4RTtBQUM5RSxrREFBcUQ7QUFPckQsOENBQW1EO0FBQ25ELDBDQUFpRDtBQWtCakQsTUFBTSx1QkFBdUIsR0FBRyxJQUFBLDBCQUFVLEVBQ3hDLHVCQUF1QixFQUN2QixLQUFLLEVBQUUsS0FBK0IsRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUU7SUFDdkQsTUFBTSxRQUFRLEdBQTBCLFNBQVMsQ0FBQyxPQUFPLENBQUMsMEJBQWUsQ0FBQyxDQUFBO0lBQzFFLE1BQU0sV0FBVyxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsZUFBTyxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQ3BELE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsaUNBQXlCLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDbEUsTUFBTSxPQUFPLEdBQUcsTUFBTSxRQUFRLENBQUMsVUFBVSxFQUFFLENBQUE7SUFDM0MsTUFBTSxNQUFNLEdBQUcsTUFBTSxRQUFRLENBQUMsU0FBUyxFQUFFLENBQUE7SUFFekMsTUFBTSxRQUFRLEdBQUcsTUFBTSxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQTtJQUM3RCxJQUFJLFFBQVEsRUFBRSxDQUFDO1FBQ2IsT0FBTyxJQUFJLDRCQUFZLENBQWU7WUFDcEMsT0FBTyxFQUFFLElBQUk7WUFDYixNQUFNLEVBQUUsZ0JBQWdCO1lBQ3hCLGlCQUFpQixFQUFFLFFBQVEsQ0FBQyxpQkFBaUI7U0FDOUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVELE1BQU0sS0FBSyxHQUFHLE1BQU0sV0FBVyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsUUFBUSxF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
|
|
@@ -7,6 +7,7 @@ const utils_1 = require("@medusajs/framework/utils");
|
|
|
7
7
|
const printful_1 = require("../modules/printful");
|
|
8
8
|
const mappers_1 = require("../utils/mappers");
|
|
9
9
|
const orphans_1 = require("../utils/orphans");
|
|
10
|
+
const stock_1 = require("../utils/stock");
|
|
10
11
|
const syncProductsStep = (0, workflows_sdk_1.createStep)({
|
|
11
12
|
name: "printful-sync-products",
|
|
12
13
|
// Runs past the HTTP response and completes on its own — no
|
|
@@ -22,6 +23,7 @@ const syncProductsStep = (0, workflows_sdk_1.createStep)({
|
|
|
22
23
|
}, async (input, { container }) => {
|
|
23
24
|
const printful = container.resolve(printful_1.PRINTFUL_MODULE);
|
|
24
25
|
const productModule = container.resolve(utils_1.Modules.PRODUCT);
|
|
26
|
+
const logger = container.resolve(utils_1.ContainerRegistrationKeys.LOGGER);
|
|
25
27
|
const client = await printful.getClient();
|
|
26
28
|
const options = await printful.getOptions();
|
|
27
29
|
const storeId = await printful.getStoreId();
|
|
@@ -47,6 +49,10 @@ const syncProductsStep = (0, workflows_sdk_1.createStep)({
|
|
|
47
49
|
if (summary.is_ignored) {
|
|
48
50
|
continue;
|
|
49
51
|
}
|
|
52
|
+
// Scoped to this iteration so the catch below knows which product, if
|
|
53
|
+
// any, this pass created. Set the moment the product exists in Medusa
|
|
54
|
+
// and cleared once its link row is written.
|
|
55
|
+
let pendingProductId;
|
|
50
56
|
try {
|
|
51
57
|
const detail = await client.getSyncProduct(summary.id);
|
|
52
58
|
if (!detail.sync_variants?.length) {
|
|
@@ -62,17 +68,27 @@ const syncProductsStep = (0, workflows_sdk_1.createStep)({
|
|
|
62
68
|
const existingLink = await printful.findProductLink(String(summary.id));
|
|
63
69
|
if (existingLink?.medusa_product_id) {
|
|
64
70
|
const productId = existingLink.medusa_product_id;
|
|
71
|
+
// Retrieved before the update so the current status and metadata are
|
|
72
|
+
// the merchant's, not ours. `mapped.status` is derived from Printful
|
|
73
|
+
// stock alone; writing it directly is what republished a product the
|
|
74
|
+
// merchant had deliberately drafted.
|
|
75
|
+
const product = await productModule.retrieveProduct(productId, {
|
|
76
|
+
relations: ["variants"],
|
|
77
|
+
});
|
|
78
|
+
const publication = (0, stock_1.resolveExistingProductWrite)({
|
|
79
|
+
plan: (0, stock_1.planStockActions)(detail.sync_variants),
|
|
80
|
+
currentStatus: product.status === "published" ? "published" : "draft",
|
|
81
|
+
currentMetadata: (product.metadata ?? {}),
|
|
82
|
+
mappedMetadata: mapped.metadata,
|
|
83
|
+
});
|
|
65
84
|
// Update core product fields.
|
|
66
85
|
await productModule.updateProducts(productId, {
|
|
67
86
|
title: mapped.title,
|
|
68
87
|
thumbnail: mapped.thumbnail,
|
|
69
|
-
metadata:
|
|
70
|
-
status:
|
|
88
|
+
metadata: publication.metadata,
|
|
89
|
+
status: publication.status,
|
|
71
90
|
});
|
|
72
91
|
// Upsert variants so price/assortment changes in Printful reach Medusa.
|
|
73
|
-
const product = await productModule.retrieveProduct(productId, {
|
|
74
|
-
relations: ["variants"],
|
|
75
|
-
});
|
|
76
92
|
const { toCreate, toUpdate } = (0, mappers_1.diffVariantsForUpsert)(mapped.variants, (product.variants ?? []).map((pv) => ({
|
|
77
93
|
id: pv.id,
|
|
78
94
|
metadata: pv.metadata,
|
|
@@ -146,6 +162,16 @@ const syncProductsStep = (0, workflows_sdk_1.createStep)({
|
|
|
146
162
|
catch {
|
|
147
163
|
// ignore lookup errors
|
|
148
164
|
}
|
|
165
|
+
// A product created already sold out is drafted by the mapper, but
|
|
166
|
+
// the mapper writes no marker — so without this the restock path
|
|
167
|
+
// would read it as a merchant's own draft and never republish it.
|
|
168
|
+
const createStock = (0, stock_1.planStockActions)(detail.sync_variants);
|
|
169
|
+
const createMetadata = {
|
|
170
|
+
...mapped.metadata,
|
|
171
|
+
...(createStock.allUnavailable
|
|
172
|
+
? { [stock_1.STOCK_MARKER_KEY]: "unavailable" }
|
|
173
|
+
: {}),
|
|
174
|
+
};
|
|
149
175
|
const { result } = await (0, core_flows_1.createProductsWorkflow)(container).run({
|
|
150
176
|
input: {
|
|
151
177
|
products: [
|
|
@@ -165,7 +191,7 @@ const syncProductsStep = (0, workflows_sdk_1.createStep)({
|
|
|
165
191
|
manage_inventory: v.manage_inventory,
|
|
166
192
|
allow_backorder: v.allow_backorder,
|
|
167
193
|
})),
|
|
168
|
-
metadata:
|
|
194
|
+
metadata: createMetadata,
|
|
169
195
|
external_id: mapped.external_id,
|
|
170
196
|
},
|
|
171
197
|
],
|
|
@@ -173,6 +199,7 @@ const syncProductsStep = (0, workflows_sdk_1.createStep)({
|
|
|
173
199
|
});
|
|
174
200
|
const created = result[0];
|
|
175
201
|
orphans.track(created.id);
|
|
202
|
+
pendingProductId = created.id;
|
|
176
203
|
await printful.createPrintfulProductLinks({
|
|
177
204
|
printful_store_id: storeId,
|
|
178
205
|
printful_sync_product_id: String(summary.id),
|
|
@@ -181,6 +208,7 @@ const syncProductsStep = (0, workflows_sdk_1.createStep)({
|
|
|
181
208
|
});
|
|
182
209
|
// Linked — no longer an orphan, and never to be deleted.
|
|
183
210
|
orphans.release(created.id);
|
|
211
|
+
pendingProductId = undefined;
|
|
184
212
|
for (const variant of created.variants ?? []) {
|
|
185
213
|
const syncVariantId = variant.metadata?.printful_sync_variant_id;
|
|
186
214
|
if (!syncVariantId) {
|
|
@@ -201,8 +229,29 @@ const syncProductsStep = (0, workflows_sdk_1.createStep)({
|
|
|
201
229
|
counters.failed += 1;
|
|
202
230
|
const message = err instanceof Error ? err.message : String(err);
|
|
203
231
|
counters.errors.push(`Product ${summary.id}: ${message}`);
|
|
232
|
+
// The product was created but its link write never landed. The loop
|
|
233
|
+
// continues and the step still SUCCEEDS, so compensation — which runs
|
|
234
|
+
// only on step failure — will never see this. Left alone it is a
|
|
235
|
+
// product stranded in Medusa with no link row: invisible to the next
|
|
236
|
+
// sync's findProductLink, which duplicates it.
|
|
237
|
+
if (pendingProductId) {
|
|
238
|
+
const orphanId = pendingProductId;
|
|
239
|
+
try {
|
|
240
|
+
await productModule.deleteProducts([orphanId]);
|
|
241
|
+
// Released only after a delete that actually happened, so a
|
|
242
|
+
// failure here still leaves it for the compensation to retry.
|
|
243
|
+
orphans.release(orphanId);
|
|
244
|
+
}
|
|
245
|
+
catch (deleteErr) {
|
|
246
|
+
// Must not mask the original error — that is what gets reported.
|
|
247
|
+
logger.error(`Printful sync: could not delete orphaned product ${orphanId} after a failed link write: ${deleteErr instanceof Error
|
|
248
|
+
? deleteErr.message
|
|
249
|
+
: String(deleteErr)}`);
|
|
250
|
+
}
|
|
251
|
+
}
|
|
204
252
|
}
|
|
205
253
|
finally {
|
|
254
|
+
pendingProductId = undefined;
|
|
206
255
|
// In `finally` so it runs however the product exited — success, an
|
|
207
256
|
// early `continue`, or a throw. The heartbeat is what keeps the claim
|
|
208
257
|
// from being reaped, so a catalog of failures must not starve it.
|
|
@@ -263,4 +312,4 @@ exports.syncProductsWorkflow = (0, workflows_sdk_1.createWorkflow)("printful-syn
|
|
|
263
312
|
});
|
|
264
313
|
});
|
|
265
314
|
exports.default = exports.syncProductsWorkflow;
|
|
266
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3luYy1wcm9kdWN0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy93b3JrZmxvd3Mvc3luYy1wcm9kdWN0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxxRUFNMEM7QUFDMUMsNERBR29DO0FBQ3BDLHFEQUE4RTtBQUM5RSxrREFBcUQ7QUFFckQsOENBQWdGO0FBQ2hGLDhDQUFnRDtBQWdCaEQsTUFBTSxnQkFBZ0IsR0FBRyxJQUFBLDBCQUFVLEVBQ2pDO0lBQ0UsSUFBSSxFQUFFLHdCQUF3QjtJQUM5Qiw0REFBNEQ7SUFDNUQsMEVBQTBFO0lBQzFFLEtBQUssRUFBRSxJQUFJO0lBQ1gsbUJBQW1CLEVBQUUsSUFBSTtJQUN6Qix5RUFBeUU7SUFDekUsa0VBQWtFO0lBQ2xFLHVFQUF1RTtJQUN2RSxzRUFBc0U7SUFDdEUsMEVBQTBFO0lBQzFFLG9DQUFvQztDQUNyQyxFQUNELEtBQUssRUFBRSxLQUF3QixFQUFFLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRTtJQUNoRCxNQUFNLFFBQVEsR0FBMEIsU0FBUyxDQUFDLE9BQU8sQ0FBQywwQkFBZSxDQUFDLENBQUE7SUFDMUUsTUFBTSxhQUFhLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxlQUFPLENBQUMsT0FBTyxDQUFDLENBQUE7SUFDeEQsTUFBTSxNQUFNLEdBQUcsTUFBTSxRQUFRLENBQUMsU0FBUyxFQUFFLENBQUE7SUFDekMsTUFBTSxPQUFPLEdBQUcsTUFBTSxRQUFRLENBQUMsVUFBVSxFQUFFLENBQUE7SUFDM0MsTUFBTSxPQUFPLEdBQUcsTUFBTSxRQUFRLENBQUMsVUFBVSxFQUFFLENBQUE7SUFFM0MsTUFBTSxTQUFTLEdBQUcsTUFBTSxNQUFNLENBQUMsbUJBQW1CLENBQUM7UUFDakQsS0FBSyxFQUFFLEdBQUc7S0FDWCxDQUFDLENBQUE7SUFFRixNQUFNLFNBQVMsR0FDYixLQUFLLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxDQUFDLENB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
|
|
315
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3luYy1wcm9kdWN0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy93b3JrZmxvd3Mvc3luYy1wcm9kdWN0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxxRUFNMEM7QUFDMUMsNERBR29DO0FBQ3BDLHFEQUE4RTtBQUM5RSxrREFBcUQ7QUFFckQsOENBQWdGO0FBQ2hGLDhDQUFnRDtBQUNoRCwwQ0FJdUI7QUFnQnZCLE1BQU0sZ0JBQWdCLEdBQUcsSUFBQSwwQkFBVSxFQUNqQztJQUNFLElBQUksRUFBRSx3QkFBd0I7SUFDOUIsNERBQTREO0lBQzVELDBFQUEwRTtJQUMxRSxLQUFLLEVBQUUsSUFBSTtJQUNYLG1CQUFtQixFQUFFLElBQUk7SUFDekIseUVBQXlFO0lBQ3pFLGtFQUFrRTtJQUNsRSx1RUFBdUU7SUFDdkUsc0VBQXNFO0lBQ3RFLDBFQUEwRTtJQUMxRSxvQ0FBb0M7Q0FDckMsRUFDRCxLQUFLLEVBQUUsS0FBd0IsRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUU7SUFDaEQsTUFBTSxRQUFRLEdBQTBCLFNBQVMsQ0FBQyxPQUFPLENBQUMsMEJBQWUsQ0FBQyxDQUFBO0lBQzFFLE1BQU0sYUFBYSxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsZUFBTyxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQ3hELE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsaUNBQXlCLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDbEUsTUFBTSxNQUFNLEdBQUcsTUFBTSxRQUFRLENBQUMsU0FBUyxFQUFFLENBQUE7SUFDekMsTUFBTSxPQUFPLEdBQUcsTUFBTSxRQUFRLENBQUMsVUFBVSxFQUFFLENBQUE7SUFDM0MsTUFBTSxPQUFPLEdBQUcsTUFBTSxRQUFRLENBQUMsVUFBVSxFQUFFLENBQUE7SUFFM0MsTUFBTSxTQUFTLEdBQUcsTUFBTSxNQUFNLENBQUMsbUJBQW1CLENBQUM7UUFDakQsS0FBSyxF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
|
package/README.md
CHANGED
|
@@ -40,12 +40,21 @@ plugins: [
|
|
|
40
40
|
// allowPartialOrders: false,
|
|
41
41
|
// markupPercent: 30,
|
|
42
42
|
// defaultCurrency: "USD",
|
|
43
|
+
|
|
44
|
+
// Live shipping rates. `fallbackShippingRates` is required when this is
|
|
45
|
+
// on — it is what a cart prices at if Printful is unreachable.
|
|
46
|
+
liveShippingRates: true,
|
|
47
|
+
fallbackShippingRates: { STANDARD: 700, PRINTFUL_RETURN: 700 },
|
|
43
48
|
},
|
|
44
49
|
},
|
|
45
50
|
],
|
|
46
51
|
modules: [
|
|
47
52
|
{
|
|
48
53
|
resolve: "@medusajs/medusa/fulfillment",
|
|
54
|
+
// Required for live rates: the provider resolves each cart line to its
|
|
55
|
+
// Printful catalog variant through `query`. Without this every quote
|
|
56
|
+
// silently falls back to the flat rate above.
|
|
57
|
+
dependencies: ["query"],
|
|
49
58
|
options: {
|
|
50
59
|
providers: [
|
|
51
60
|
{
|
|
@@ -273,6 +282,28 @@ unpublished itself — a product you set to draft by hand stays draft. Variants
|
|
|
273
282
|
carry `printful_availability_status` in metadata, and discontinued products get
|
|
274
283
|
`printful_discontinued` unless `onDiscontinued: "ignore"`.
|
|
275
284
|
|
|
285
|
+
## Order economics
|
|
286
|
+
|
|
287
|
+
Printful returns what it charged along with the created order, so the plugin
|
|
288
|
+
stores it on the Medusa order rather than making a second API call. The order
|
|
289
|
+
page shows the Printful cost, the retail total, and the margin between them.
|
|
290
|
+
The figures are refreshed whenever a webhook re-reads the order, because
|
|
291
|
+
Printful finalizes shipping and fees at fulfillment.
|
|
292
|
+
|
|
293
|
+
Amounts are stored in minor units under `printful_cost_*`, `printful_retail_*`
|
|
294
|
+
and `printful_margin` in order metadata.
|
|
295
|
+
|
|
296
|
+
**Margin is only shown when both figures are in the same currency.** If
|
|
297
|
+
Printful bills in USD while the order is in EUR, both totals are stored and the
|
|
298
|
+
margin is withheld — converting would need an exchange rate this plugin does
|
|
299
|
+
not have, and a margin built on a guessed rate is worse than none.
|
|
300
|
+
|
|
301
|
+
The order page deliberately shows only the two totals and the margin, not the
|
|
302
|
+
per-fee breakdown. Those three are always written together from one response,
|
|
303
|
+
so they cannot disagree; the individual `printful_cost_*` fee keys are refreshed
|
|
304
|
+
per-key and a fee absent from a later response keeps its previous value, so a
|
|
305
|
+
breakdown need not sum to the total.
|
|
306
|
+
|
|
276
307
|
## Admin usage
|
|
277
308
|
|
|
278
309
|
1. Create products in Printful (Store Products).
|