@legenki/print2medusa 0.6.0 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.medusa/server/examples/basic-store/medusa-config.snippet.js +9 -1
- package/.medusa/server/src/providers/printful-fulfillment/service.js +132 -44
- package/.medusa/server/src/utils/index.js +3 -1
- package/.medusa/server/src/utils/printful-client.js +7 -1
- package/.medusa/server/src/utils/removed.js +78 -0
- package/.medusa/server/src/utils/shipping-rates.js +174 -1
- package/.medusa/server/src/utils/stock.js +6 -2
- package/.medusa/server/src/workflows/create-printful-order.js +11 -2
- package/.medusa/server/src/workflows/sync-products.js +49 -1
- package/README.md +49 -22
- package/package.json +10 -9
|
@@ -27,12 +27,18 @@ module.exports = (0, utils_1.defineConfig)({
|
|
|
27
27
|
// allowPartialOrders: false,
|
|
28
28
|
// markupPercent: 30,
|
|
29
29
|
// defaultCurrency: "USD",
|
|
30
|
+
// onDiscontinued: "flag",
|
|
31
|
+
// onRemovedFromPrintful: "unpublish", // or "ignore"
|
|
32
|
+
// liveShippingRates: true,
|
|
33
|
+
// fallbackShippingRates: { STANDARD: 500 },
|
|
30
34
|
},
|
|
31
35
|
},
|
|
32
36
|
],
|
|
33
37
|
modules: [
|
|
34
38
|
{
|
|
35
39
|
resolve: "@medusajs/medusa/fulfillment",
|
|
40
|
+
// Required for live rates + shipping method confirmation.
|
|
41
|
+
dependencies: ["query"],
|
|
36
42
|
options: {
|
|
37
43
|
providers: [
|
|
38
44
|
{
|
|
@@ -45,6 +51,8 @@ module.exports = (0, utils_1.defineConfig)({
|
|
|
45
51
|
options: {
|
|
46
52
|
apiToken: process.env.PRINTFUL_API_TOKEN,
|
|
47
53
|
storeId: process.env.PRINTFUL_STORE_ID,
|
|
54
|
+
// liveShippingRates: true,
|
|
55
|
+
// fallbackShippingRates: { STANDARD: 500 },
|
|
48
56
|
},
|
|
49
57
|
},
|
|
50
58
|
],
|
|
@@ -54,4 +62,4 @@ module.exports = (0, utils_1.defineConfig)({
|
|
|
54
62
|
});
|
|
55
63
|
// silence unused import when copying
|
|
56
64
|
void utils_1.Modules;
|
|
57
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
65
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVkdXNhLWNvbmZpZy5zbmlwcGV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vZXhhbXBsZXMvYmFzaWMtc3RvcmUvbWVkdXNhLWNvbmZpZy5zbmlwcGV0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUE7O0dBRUc7QUFDSCxxREFBMEU7QUFFMUUsSUFBQSxlQUFPLEVBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLElBQUksYUFBYSxFQUFFLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFBO0FBRTdELE1BQU0sQ0FBQyxPQUFPLEdBQUcsSUFBQSxvQkFBWSxFQUFDO0lBQzVCLGFBQWEsRUFBRTtRQUNiLFdBQVcsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLFlBQVk7UUFDckMsSUFBSSxFQUFFO1lBQ0osU0FBUyxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVztZQUNsQyxTQUFTLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFXO1lBQ2xDLFFBQVEsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVU7WUFDaEMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxJQUFJLGFBQWE7WUFDbEQsWUFBWSxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsYUFBYSxJQUFJLGFBQWE7U0FDekQ7S0FDRjtJQUNELE9BQU8sRUFBRTtRQUNQO1lBQ0UsT0FBTyxFQUFFLHVCQUF1QjtZQUNoQyxPQUFPLEVBQUU7Z0JBQ1AsUUFBUSxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsa0JBQWtCO2dCQUN4QyxPQUFPLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUI7Z0JBQ3RDLDBCQUEwQjtnQkFDMUIsOEJBQThCO2dCQUM5Qiw2QkFBNkI7Z0JBQzdCLHFCQUFxQjtnQkFDckIsMEJBQTBCO2dCQUMxQiwwQkFBMEI7Z0JBQzFCLHFEQUFxRDtnQkFDckQsMkJBQTJCO2dCQUMzQiw0Q0FBNEM7YUFDN0M7U0FDRjtLQUNGO0lBQ0QsT0FBTyxFQUFFO1FBQ1A7WUFDRSxPQUFPLEVBQUUsOEJBQThCO1lBQ3ZDLDBEQUEwRDtZQUMxRCxZQUFZLEVBQUUsQ0FBQyxPQUFPLENBQUM7WUFDdkIsT0FBTyxFQUFFO2dCQUNQLFNBQVMsRUFBRTtvQkFDVDt3QkFDRSxPQUFPLEVBQUUscUNBQXFDO3dCQUM5QyxFQUFFLEVBQUUsUUFBUTtxQkFDYjtvQkFDRDt3QkFDRSxPQUFPLEVBQUUsc0RBQXNEO3dCQUMvRCxFQUFFLEVBQUUsVUFBVTt3QkFDZCxPQUFPLEVBQUU7NEJBQ1AsUUFBUSxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsa0JBQWtCOzRCQUN4QyxPQUFPLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUI7NEJBQ3RDLDJCQUEyQjs0QkFDM0IsNENBQTRDO3lCQUM3QztxQkFDRjtpQkFDRjthQUNGO1NBQ0Y7S0FDRjtDQUNGLENBQUMsQ0FBQTtBQUVGLHFDQUFxQztBQUNyQyxLQUFLLGVBQU8sQ0FBQSJ9
|
|
@@ -64,7 +64,21 @@ class PrintfulFulfillmentProviderService extends utils_1.AbstractFulfillmentProv
|
|
|
64
64
|
(shipping_rates_1.PRINTFUL_SHIPPING_METHODS.includes(id) ||
|
|
65
65
|
id === shipping_rates_1.PRINTFUL_RETURN_OPTION_ID));
|
|
66
66
|
}
|
|
67
|
-
|
|
67
|
+
/**
|
|
68
|
+
* Validate the selected method and record whether Printful confirmed it.
|
|
69
|
+
*
|
|
70
|
+
* Medusa persists this return value verbatim as `shipping_method.data`
|
|
71
|
+
* (`add-shipping-method-to-cart.js:116`), and `complete-cart.js:405` copies
|
|
72
|
+
* it onto the order — which is what makes this the right place to record the
|
|
73
|
+
* confirmation. 0.3.0 stamped these fields onto `calculatePrice`'s return
|
|
74
|
+
* value instead, which Medusa discards, so the feature was dead code.
|
|
75
|
+
*
|
|
76
|
+
* Everything except the unrecognized-id throw fails soft. This runs once, at
|
|
77
|
+
* selection, so an API call is affordable here in a way it is not on the
|
|
78
|
+
* pricing path — but a confirmation failure must never block a sale, and an
|
|
79
|
+
* unconfirmed method simply lets Printful choose, exactly as it does today.
|
|
80
|
+
*/
|
|
81
|
+
async validateFulfillmentData(optionData, data, context) {
|
|
68
82
|
// Runs when the method is added to the cart, not on every price refresh, so
|
|
69
83
|
// throwing here does not violate calculatePrice's never-throw constraint.
|
|
70
84
|
// Inventing a default would record one method on the order while the
|
|
@@ -82,7 +96,85 @@ class PrintfulFulfillmentProviderService extends utils_1.AbstractFulfillmentProv
|
|
|
82
96
|
`(${JSON.stringify(id)}). Recreate it against one of: ` +
|
|
83
97
|
`${[...shipping_rates_1.PRINTFUL_SHIPPING_METHODS, shipping_rates_1.PRINTFUL_RETURN_OPTION_ID].join(", ")}.`);
|
|
84
98
|
}
|
|
85
|
-
|
|
99
|
+
const validated = { ...data, printful_option_id: id };
|
|
100
|
+
// Printful quotes outbound shipping only, so a return has nothing to
|
|
101
|
+
// confirm against — `canCalculate` already excludes it from live rates for
|
|
102
|
+
// the same reason. It carries no rate_source at all.
|
|
103
|
+
if (id === shipping_rates_1.PRINTFUL_RETURN_OPTION_ID) {
|
|
104
|
+
return validated;
|
|
105
|
+
}
|
|
106
|
+
let confirmation;
|
|
107
|
+
try {
|
|
108
|
+
confirmation = await this.confirmSelectedMethod(id, context);
|
|
109
|
+
}
|
|
110
|
+
catch (err) {
|
|
111
|
+
// A bug in our own code must not block a sale any more than a Printful
|
|
112
|
+
// outage does.
|
|
113
|
+
this.logger_.error(`Printful method confirmation failed unexpectedly: ${err instanceof Error ? err.message : String(err)}`);
|
|
114
|
+
confirmation = "printful_unreachable";
|
|
115
|
+
}
|
|
116
|
+
if (confirmation !== "live") {
|
|
117
|
+
// No `printful_shipping`: the order path sends an override only for a
|
|
118
|
+
// method Printful confirmed, so omitting it lets Printful pick — the
|
|
119
|
+
// behaviour every order had before this release.
|
|
120
|
+
this.logger_.debug?.(`Printful method ${id} not confirmed (${confirmation}); ` +
|
|
121
|
+
"the order will let Printful choose the shipping method.");
|
|
122
|
+
return { ...validated, rate_source: confirmation };
|
|
123
|
+
}
|
|
124
|
+
return {
|
|
125
|
+
...validated,
|
|
126
|
+
printful_shipping: id,
|
|
127
|
+
rate_source: "live",
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Ask whether Printful offers this method for this cart.
|
|
132
|
+
*
|
|
133
|
+
* Goes through `planRateRequest`, the same seam `calculatePrice` uses, so the
|
|
134
|
+
* two compute the same cache key and this usually reads the entry pricing
|
|
135
|
+
* wrote seconds earlier rather than hitting the API.
|
|
136
|
+
*
|
|
137
|
+
* A stale entry never confirms, and a failed re-fetch does not fall back to
|
|
138
|
+
* one the way `staleOrFlat` does — `confirmMethod` encodes that rule and this
|
|
139
|
+
* does not work around it.
|
|
140
|
+
*/
|
|
141
|
+
async confirmSelectedMethod(methodId, ctx) {
|
|
142
|
+
const plan = await this.planRateRequest(ctx);
|
|
143
|
+
if (!plan.ok) {
|
|
144
|
+
// `incomplete_address` cannot reach a shipping-method selection in
|
|
145
|
+
// practice, but it is not a FallbackReason we want to invent a meaning
|
|
146
|
+
// for either; reporting it as unreachable would misdirect an operator to
|
|
147
|
+
// Printful's status page, so it is recorded as-is.
|
|
148
|
+
return plan.reason;
|
|
149
|
+
}
|
|
150
|
+
const { recipient, items, currency, cacheKey } = plan;
|
|
151
|
+
const cached = await this.readCache(cacheKey);
|
|
152
|
+
const fromCache = (0, shipping_rates_1.confirmMethod)({
|
|
153
|
+
cached,
|
|
154
|
+
freshnessMs: this.freshnessMs_,
|
|
155
|
+
methodId,
|
|
156
|
+
currency,
|
|
157
|
+
});
|
|
158
|
+
if (fromCache.confirmation === "live") {
|
|
159
|
+
return "live";
|
|
160
|
+
}
|
|
161
|
+
let rates;
|
|
162
|
+
try {
|
|
163
|
+
rates = await this.client_.getShippingRates({
|
|
164
|
+
recipient,
|
|
165
|
+
items,
|
|
166
|
+
...(currency ? { currency } : {}),
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
catch (err) {
|
|
170
|
+
this.logger_.warn(`Printful method confirmation could not reach Printful: ${err instanceof Error ? err.message : String(err)}`);
|
|
171
|
+
return "printful_unreachable";
|
|
172
|
+
}
|
|
173
|
+
// Written back under the shared key so a subsequent price refresh reuses
|
|
174
|
+
// this response instead of paying for another call.
|
|
175
|
+
await this.writeCache(cacheKey, { rates, currency, cached_at: Date.now() }, this.staleSeconds_);
|
|
176
|
+
const selected = (0, shipping_rates_1.selectRate)(rates, methodId, currency);
|
|
177
|
+
return selected.ok ? "live" : selected.reason;
|
|
86
178
|
}
|
|
87
179
|
async canCalculate(data) {
|
|
88
180
|
const optionId = data?.data?.id;
|
|
@@ -114,48 +206,11 @@ class PrintfulFulfillmentProviderService extends utils_1.AbstractFulfillmentProv
|
|
|
114
206
|
}
|
|
115
207
|
async quote(methodId, context) {
|
|
116
208
|
const ctx = context;
|
|
117
|
-
|
|
118
|
-
|
|
209
|
+
const plan = await this.planRateRequest(ctx);
|
|
210
|
+
if (!plan.ok) {
|
|
211
|
+
return this.fallback(methodId, plan.reason);
|
|
119
212
|
}
|
|
120
|
-
const
|
|
121
|
-
const countryCode = (addr.country_code ?? "").toUpperCase();
|
|
122
|
-
const stateCode = (0, mappers_1.resolveStateCode)(addr.province, countryCode);
|
|
123
|
-
if (!(0, shipping_rates_1.isAddressQuotable)({ country_code: countryCode, state_code: stateCode })) {
|
|
124
|
-
return this.fallback(methodId, "incomplete_address");
|
|
125
|
-
}
|
|
126
|
-
const lines = (ctx.items ?? [])
|
|
127
|
-
.filter((i) => i.variant?.id)
|
|
128
|
-
.map((i) => ({
|
|
129
|
-
variant_id: i.variant.id,
|
|
130
|
-
quantity: Number(i.quantity ?? 1),
|
|
131
|
-
unit_price: i.unit_price,
|
|
132
|
-
}));
|
|
133
|
-
let catalogIds;
|
|
134
|
-
try {
|
|
135
|
-
catalogIds = await this.catalogIdsFor(lines.map((l) => l.variant_id));
|
|
136
|
-
}
|
|
137
|
-
catch (err) {
|
|
138
|
-
// Our own database, not Printful. Misreporting this sends the operator
|
|
139
|
-
// to Printful's status page during their own incident.
|
|
140
|
-
this.logger_.error(`Printful rate lookup: variant query failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
141
|
-
return this.fallback(methodId, "query_unavailable");
|
|
142
|
-
}
|
|
143
|
-
// Resolved before the items are built: each line's `value` is denominated
|
|
144
|
-
// in the cart's currency, so it decides how the minor units convert out.
|
|
145
|
-
const currency = (ctx.currency_code ?? "").toUpperCase();
|
|
146
|
-
const items = (0, shipping_rates_1.buildRateItems)(lines, catalogIds, currency);
|
|
147
|
-
if (!items.length) {
|
|
148
|
-
return this.fallback(methodId, "no_printful_items");
|
|
149
|
-
}
|
|
150
|
-
const recipient = {
|
|
151
|
-
country_code: countryCode,
|
|
152
|
-
...(stateCode ? { state_code: stateCode } : {}),
|
|
153
|
-
...(addr.city ? { city: addr.city } : {}),
|
|
154
|
-
...(addr.postal_code ? { zip: addr.postal_code } : {}),
|
|
155
|
-
...(addr.address_1 ? { address1: addr.address_1 } : {}),
|
|
156
|
-
...(addr.address_2 ? { address2: addr.address_2 } : {}),
|
|
157
|
-
};
|
|
158
|
-
const cacheKey = (0, shipping_rates_1.buildRateCacheKey)({ address: recipient, items, currency });
|
|
213
|
+
const { recipient, items, currency, cacheKey } = plan;
|
|
159
214
|
const cached = await this.readCache(cacheKey);
|
|
160
215
|
// A negative age means the entry is dated in the future — clock skew on the
|
|
161
216
|
// cache node — which would otherwise read as fresh until that date passes.
|
|
@@ -186,6 +241,39 @@ class PrintfulFulfillmentProviderService extends utils_1.AbstractFulfillmentProv
|
|
|
186
241
|
}
|
|
187
242
|
return this.priced(selected.amount, methodId, "live");
|
|
188
243
|
}
|
|
244
|
+
/**
|
|
245
|
+
* Build the Printful rate request and cache key for a cart context.
|
|
246
|
+
*
|
|
247
|
+
* The single seam `calculatePrice` and the confirm path both go through, so
|
|
248
|
+
* the two can never compute different cache keys for the same cart. It owns
|
|
249
|
+
* the parts that need the container — the `query` guard and the catalog-id
|
|
250
|
+
* lookup — and delegates the rest to the pure `buildRateRequest`.
|
|
251
|
+
*/
|
|
252
|
+
async planRateRequest(ctx) {
|
|
253
|
+
if (!this.query_) {
|
|
254
|
+
return { ok: false, reason: "query_unavailable" };
|
|
255
|
+
}
|
|
256
|
+
const addr = ctx.shipping_address ?? {};
|
|
257
|
+
const countryCode = (addr.country_code ?? "").toUpperCase();
|
|
258
|
+
const stateCode = (0, mappers_1.resolveStateCode)(addr.province, countryCode);
|
|
259
|
+
// The address guard runs before the query, so an unquotable address never
|
|
260
|
+
// costs a database round trip on every storefront cart refresh.
|
|
261
|
+
if (!(0, shipping_rates_1.isAddressQuotable)({ country_code: countryCode, state_code: stateCode })) {
|
|
262
|
+
return { ok: false, reason: "incomplete_address" };
|
|
263
|
+
}
|
|
264
|
+
const lines = (0, shipping_rates_1.rateLinesFrom)(ctx);
|
|
265
|
+
let catalogIds;
|
|
266
|
+
try {
|
|
267
|
+
catalogIds = await this.catalogIdsFor(lines.map((l) => l.variant_id));
|
|
268
|
+
}
|
|
269
|
+
catch (err) {
|
|
270
|
+
// Our own database, not Printful. Misreporting this sends the operator
|
|
271
|
+
// to Printful's status page during their own incident.
|
|
272
|
+
this.logger_.error(`Printful rate lookup: variant query failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
273
|
+
return { ok: false, reason: "query_unavailable" };
|
|
274
|
+
}
|
|
275
|
+
return (0, shipping_rates_1.buildRateRequest)(ctx, lines, catalogIds, stateCode);
|
|
276
|
+
}
|
|
189
277
|
/** Look up Printful catalog variant ids for a set of Medusa variant ids. */
|
|
190
278
|
async catalogIdsFor(variantIds) {
|
|
191
279
|
const map = new Map();
|
|
@@ -359,4 +447,4 @@ class PrintfulFulfillmentProviderService extends utils_1.AbstractFulfillmentProv
|
|
|
359
447
|
}
|
|
360
448
|
PrintfulFulfillmentProviderService.identifier = "printful";
|
|
361
449
|
exports.default = PrintfulFulfillmentProviderService;
|
|
362
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9wcm92aWRlcnMvcHJpbnRmdWwtZnVsZmlsbG1lbnQvc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHFEQUdrQztBQVlsQyxpRUFBNEQ7QUFDNUQsaURBQXNEO0FBQ3RELCtEQVFtQztBQXVDbkMsTUFBTSxrQ0FBbUMsU0FBUSwwQ0FBa0M7SUFhakYsWUFBWSxTQUErQixFQUFFLE9BQThCO1FBQ3pFLEtBQUssRUFBRSxDQUFBO1FBQ1AsSUFBSSxDQUFDLE9BQU8sR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFBO1FBQy9CLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxJQUFLLEVBQTRCLENBQUE7UUFFeEQsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDNUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQ2YsaUVBQWlFLENBQ2xFLENBQUE7UUFDSCxDQUFDO1FBRUQsSUFBSSxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFBO1FBQzdCLElBQUksQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQTtRQUUvQixJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDcEQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQ2hCLHFFQUFxRTtnQkFDbkUscUVBQXFFO2dCQUNyRSxvRUFBb0UsQ0FDdkUsQ0FBQTtRQUNILENBQUM7UUFFRCxJQUNFLElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCO1lBQy9CLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxxQkFBcUIsRUFDcEMsQ0FBQztZQUNELElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUNoQiwwRUFBMEU7Z0JBQ3hFLGdEQUFnRCxDQUNuRCxDQUFBO1FB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
|
|
450
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9wcm92aWRlcnMvcHJpbnRmdWwtZnVsZmlsbG1lbnQvc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHFEQUdrQztBQVlsQyxpRUFBNEQ7QUFDNUQsaURBQXNEO0FBQ3RELCtEQVNtQztBQTRDbkMsTUFBTSxrQ0FBbUMsU0FBUSwwQ0FBa0M7SUFhakYsWUFBWSxTQUErQixFQUFFLE9BQThCO1FBQ3pFLEtBQUssRUFBRSxDQUFBO1FBQ1AsSUFBSSxDQUFDLE9BQU8sR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFBO1FBQy9CLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxJQUFLLEVBQTRCLENBQUE7UUFFeEQsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDNUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQ2YsaUVBQWlFLENBQ2xFLENBQUE7UUFDSCxDQUFDO1FBRUQsSUFBSSxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFBO1FBQzdCLElBQUksQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQTtRQUUvQixJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDcEQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQ2hCLHFFQUFxRTtnQkFDbkUscUVBQXFFO2dCQUNyRSxvRUFBb0UsQ0FDdkUsQ0FBQTtRQUNILENBQUM7UUFFRCxJQUNFLElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCO1lBQy9CLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxxQkFBcUIsRUFDcEMsQ0FBQztZQUNELElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUNoQiwwRUFBMEU7Z0JBQ3hFLGdEQUFnRCxDQUNuRCxDQUFBO1FB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
|
|
@@ -17,5 +17,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
17
17
|
__exportStar(require("./errors"), exports);
|
|
18
18
|
__exportStar(require("./mappers"), exports);
|
|
19
19
|
__exportStar(require("./printful-client"), exports);
|
|
20
|
+
__exportStar(require("./removed"), exports);
|
|
21
|
+
__exportStar(require("./stock"), exports);
|
|
20
22
|
__exportStar(require("./types"), exports);
|
|
21
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdXRpbHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDJDQUF3QjtBQUN4Qiw0Q0FBeUI7QUFDekIsb0RBQWlDO0FBQ2pDLDRDQUF5QjtBQUN6QiwwQ0FBdUI7QUFDdkIsMENBQXVCIn0=
|
|
@@ -14,6 +14,8 @@ class PrintfulClient {
|
|
|
14
14
|
this.fetchImpl = options.fetchImpl ?? fetch;
|
|
15
15
|
this.maxRetries = options.maxRetries ?? 3;
|
|
16
16
|
this.retryBaseMs = options.retryBaseMs ?? 500;
|
|
17
|
+
this.timeoutMs =
|
|
18
|
+
Number(options.timeoutMs) > 0 ? Number(options.timeoutMs) : 15000;
|
|
17
19
|
}
|
|
18
20
|
async listSyncProducts(params = {}) {
|
|
19
21
|
const search = new URLSearchParams();
|
|
@@ -133,7 +135,11 @@ class PrintfulClient {
|
|
|
133
135
|
let lastError;
|
|
134
136
|
for (let attempt = 0; attempt <= this.maxRetries; attempt++) {
|
|
135
137
|
try {
|
|
138
|
+
// A fresh signal per attempt. Sharing one would abort every retry the
|
|
139
|
+
// moment the first attempt's deadline passed, turning a transient 500
|
|
140
|
+
// into a permanent failure. A caller-supplied signal still wins.
|
|
136
141
|
const response = await this.fetchImpl(url, {
|
|
142
|
+
signal: AbortSignal.timeout(this.timeoutMs),
|
|
137
143
|
...init,
|
|
138
144
|
headers,
|
|
139
145
|
});
|
|
@@ -202,4 +208,4 @@ class PrintfulClient {
|
|
|
202
208
|
}
|
|
203
209
|
}
|
|
204
210
|
exports.PrintfulClient = PrintfulClient;
|
|
205
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
211
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJpbnRmdWwtY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3V0aWxzL3ByaW50ZnVsLWNsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxxQ0FBZ0U7QUFrQ2hFLE1BQU0sZ0JBQWdCLEdBQUcsMEJBQTBCLENBQUE7QUFFbkQsTUFBYSxjQUFjO0lBU3pCLFlBQVksT0FBOEI7UUFDeEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN0QixNQUFNLElBQUksNEJBQW1CLENBQUMsK0JBQStCLENBQUMsQ0FBQTtRQUNoRSxDQUFDO1FBRUQsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFBO1FBQ2hDLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQTtRQUM5QixJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsT0FBTyxDQUFDLE9BQU8sSUFBSSxnQkFBZ0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUE7UUFDdkUsSUFBSSxDQUFDLFNBQVMsR0FBRyxPQUFPLENBQUMsU0FBUyxJQUFJLEtBQUssQ0FBQTtRQUMzQyxJQUFJLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxVQUFVLElBQUksQ0FBQyxDQUFBO1FBQ3pDLElBQUksQ0FBQyxXQUFXLEdBQUcsT0FBTyxDQUFDLFdBQVcsSUFBSSxHQUFHLENBQUE7UUFDN0MsSUFBSSxDQUFDLFNBQVM7WUFDWixNQUFNLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFBO0lBQ3JFLENBQUM7SUFFRCxLQUFLLENBQUMsZ0JBQWdCLENBQUMsU0FBaUMsRUFBRTtRQUl4RCxNQUFNLE1BQU0sR0FBRyxJQUFJLGVBQWUsRUFBRSxD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
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.REMOVED_MARKER_KEY = void 0;
|
|
4
|
+
exports.planRemovedProductWrite = planRemovedProductWrite;
|
|
5
|
+
exports.shouldRunRemovalPass = shouldRunRemovalPass;
|
|
6
|
+
exports.findMissingSyncProductLinks = findMissingSyncProductLinks;
|
|
7
|
+
exports.clearRemovedMarker = clearRemovedMarker;
|
|
8
|
+
const stock_1 = require("./stock");
|
|
9
|
+
/** Set when the plugin unpublished a product because it vanished from Printful. */
|
|
10
|
+
exports.REMOVED_MARKER_KEY = "printful_removed";
|
|
11
|
+
/**
|
|
12
|
+
* Decide what to write for a linked product that no longer appears in Printful.
|
|
13
|
+
*
|
|
14
|
+
* Pure: the caller applies the result. Same ownership rules as stock —
|
|
15
|
+
* we only claim an unpublish we perform. A product the merchant already
|
|
16
|
+
* drafted without our marker is left alone.
|
|
17
|
+
*/
|
|
18
|
+
function planRemovedProductWrite(input) {
|
|
19
|
+
const { policy, currentStatus, currentMetadata } = input;
|
|
20
|
+
const metadata = { ...currentMetadata };
|
|
21
|
+
if (policy === "ignore") {
|
|
22
|
+
return { action: "none", status: currentStatus, metadata };
|
|
23
|
+
}
|
|
24
|
+
// Already draft without a plugin marker — merchant owns it.
|
|
25
|
+
if (currentStatus === "draft") {
|
|
26
|
+
const alreadyOurs = metadata[stock_1.STOCK_MARKER_KEY] === "unavailable" ||
|
|
27
|
+
metadata[exports.REMOVED_MARKER_KEY] === true;
|
|
28
|
+
if (!alreadyOurs) {
|
|
29
|
+
return { action: "none", status: "draft", metadata };
|
|
30
|
+
}
|
|
31
|
+
// Keep markers consistent if we already unpublished for stock/removal.
|
|
32
|
+
metadata[stock_1.STOCK_MARKER_KEY] = "unavailable";
|
|
33
|
+
metadata[exports.REMOVED_MARKER_KEY] = true;
|
|
34
|
+
return { action: "none", status: "draft", metadata };
|
|
35
|
+
}
|
|
36
|
+
metadata[stock_1.STOCK_MARKER_KEY] = "unavailable";
|
|
37
|
+
metadata[exports.REMOVED_MARKER_KEY] = true;
|
|
38
|
+
return { action: "unpublish", status: "draft", metadata };
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Whether this sync run may take products down.
|
|
42
|
+
*
|
|
43
|
+
* A partial run — `limit` set, for a smoke test or a manual spot-check — sees
|
|
44
|
+
* only the first N products, so every product past the limit looks removed.
|
|
45
|
+
* Acting on that would unpublish most of the catalogue from a run the merchant
|
|
46
|
+
* expected to touch a handful of items.
|
|
47
|
+
*
|
|
48
|
+
* `"ignore"` turns the pass off entirely for merchants who curate publication
|
|
49
|
+
* by hand.
|
|
50
|
+
*/
|
|
51
|
+
function shouldRunRemovalPass(input) {
|
|
52
|
+
return input.limit == null && input.policy !== "ignore";
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Which linked products are missing from a full Printful listing.
|
|
56
|
+
*
|
|
57
|
+
* `seenSyncProductIds` is the set of Printful sync product ids returned by
|
|
58
|
+
* the full list endpoint (including ignored ones — ignored still "exists").
|
|
59
|
+
* Only a full catalogue pass may call this: a partial sync (`limit`) would
|
|
60
|
+
* otherwise treat every product beyond the limit as removed.
|
|
61
|
+
*/
|
|
62
|
+
function findMissingSyncProductLinks(links, seenSyncProductIds) {
|
|
63
|
+
const seen = new Set([...seenSyncProductIds].map((id) => String(id).trim()).filter(Boolean));
|
|
64
|
+
return links.filter((link) => !seen.has(String(link.printful_sync_product_id).trim()));
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Clear removal markers when a product is seen again on a later sync.
|
|
68
|
+
* Stock publication may still keep the product draft if variants are OOS.
|
|
69
|
+
*/
|
|
70
|
+
function clearRemovedMarker(metadata) {
|
|
71
|
+
if (metadata[exports.REMOVED_MARKER_KEY] === undefined) {
|
|
72
|
+
return metadata;
|
|
73
|
+
}
|
|
74
|
+
const next = { ...metadata };
|
|
75
|
+
delete next[exports.REMOVED_MARKER_KEY];
|
|
76
|
+
return next;
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVtb3ZlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy91dGlscy9yZW1vdmVkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQStCQSwwREE2QkM7QUFhRCxvREFLQztBQVVELGtFQVNDO0FBTUQsZ0RBU0M7QUFoSEQsbUNBQTBDO0FBZTFDLG1GQUFtRjtBQUN0RSxRQUFBLGtCQUFrQixHQUFHLGtCQUFrQixDQUFBO0FBUXBEOzs7Ozs7R0FNRztBQUNILFNBQWdCLHVCQUF1QixDQUFDLEtBSXZDO0lBQ0MsTUFBTSxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLEdBQUcsS0FBSyxDQUFBO0lBQ3hELE1BQU0sUUFBUSxHQUFHLEVBQUUsR0FBRyxlQUFlLEVBQUUsQ0FBQTtJQUV2QyxJQUFJLE1BQU0sS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUN4QixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSxDQUFBO0lBQzVELENBQUM7SUFFRCw0REFBNEQ7SUFDNUQsSUFBSSxhQUFhLEtBQUssT0FBTyxFQUFFLENBQUM7UUFDOUIsTUFBTSxXQUFXLEdBQ2YsUUFBUSxDQUFDLHdCQUFnQixDQUFDLEtBQUssYUFBYTtZQUM1QyxRQUFRLENBQUMsMEJBQWtCLENBQUMsS0FBSyxJQUFJLENBQUE7UUFDdkMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ2pCLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLENBQUE7UUFDdEQsQ0FBQztRQUNELHVFQUF1RTtRQUN2RSxRQUFRLENBQUMsd0JBQWdCLENBQUMsR0FBRyxhQUFhLENBQUE7UUFDMUMsUUFBUSxDQUFDLDBCQUFrQixDQUFDLEdBQUcsSUFBSSxDQUFBO1FBQ25DLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLENBQUE7SUFDdEQsQ0FBQztJQUVELFFBQVEsQ0FBQyx3QkFBZ0IsQ0FBQyxHQUFHLGFBQWEsQ0FBQTtJQUMxQyxRQUFRLENBQUMsMEJBQWtCLENBQUMsR0FBRyxJQUFJLENBQUE7SUFDbkMsT0FBTyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsQ0FBQTtBQUMzRCxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7R0FVRztBQUNILFNBQWdCLG9CQUFvQixDQUFDLEtBR3BDO0lBQ0MsT0FBTyxLQUFLLENBQUMsS0FBSyxJQUFJLElBQUksSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLFFBQVEsQ0FBQTtBQUN6RCxDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILFNBQWdCLDJCQUEyQixDQUV6QyxLQUFVLEVBQUUsa0JBQW9DO0lBQ2hELE1BQU0sSUFBSSxHQUFHLElBQUksR0FBRyxDQUNsQixDQUFDLEdBQUcsa0JBQWtCLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FDdkUsQ0FBQTtJQUNELE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FDakIsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FDbEUsQ0FBQTtBQUNILENBQUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFnQixrQkFBa0IsQ0FDaEMsUUFBaUM7SUFFakMsSUFBSSxRQUFRLENBQUMsMEJBQWtCLENBQUMsS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUMvQyxPQUFPLFFBQVEsQ0FBQTtJQUNqQixDQUFDO0lBQ0QsTUFBTSxJQUFJLEdBQUcsRUFBRSxHQUFHLFFBQVEsRUFBRSxDQUFBO0lBQzVCLE9BQU8sSUFBSSxDQUFDLDBCQUFrQixDQUFDLENBQUE7SUFDL0IsT0FBTyxJQUFJLENBQUE7QUFDYixDQUFDIn0=
|
|
@@ -3,7 +3,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.LEGACY_OPTION_IDS = exports.PRINTFUL_RETURN_OPTION_ID = exports.PRINTFUL_SHIPPING_METHODS = void 0;
|
|
4
4
|
exports.buildRateCacheKey = buildRateCacheKey;
|
|
5
5
|
exports.selectRate = selectRate;
|
|
6
|
+
exports.confirmMethod = confirmMethod;
|
|
7
|
+
exports.shippingOverrideFor = shippingOverrideFor;
|
|
6
8
|
exports.isAddressQuotable = isAddressQuotable;
|
|
9
|
+
exports.rateLinesFrom = rateLinesFrom;
|
|
10
|
+
exports.buildRateRequest = buildRateRequest;
|
|
7
11
|
exports.buildRateItems = buildRateItems;
|
|
8
12
|
const crypto_1 = require("crypto");
|
|
9
13
|
const currency_1 = require("./currency");
|
|
@@ -98,6 +102,97 @@ function selectRate(rates, methodId, cartCurrency) {
|
|
|
98
102
|
// used because it is the currency the rate string is actually denominated in.
|
|
99
103
|
return { ok: true, amount: (0, mappers_1.parsePriceToMinorUnits)(match.rate, quoteCurrency) };
|
|
100
104
|
}
|
|
105
|
+
/**
|
|
106
|
+
* Decide whether a cached quote confirms the method the customer selected.
|
|
107
|
+
*
|
|
108
|
+
* Pure: the caller re-fetches and calls again when this does not confirm, so
|
|
109
|
+
* the decision itself never reaches the network.
|
|
110
|
+
*
|
|
111
|
+
* A stale entry never confirms, which is deliberately unlike `calculatePrice`'s
|
|
112
|
+
* `staleOrFlat`. Serving a stale *price* is defensible — the customer sees a
|
|
113
|
+
* number that was true recently. Serving a stale *method confirmation* is not:
|
|
114
|
+
* the method may have stopped being offered, and stamping "live" on it would
|
|
115
|
+
* record an agreement Printful never made. Only a fresh entry, or a re-fetch
|
|
116
|
+
* the caller performs after this returns, can confirm.
|
|
117
|
+
*
|
|
118
|
+
* `misconfigured_zero` is reachable in `FallbackReason` but not here: it
|
|
119
|
+
* describes a missing flat rate, and confirmation never consults
|
|
120
|
+
* `fallbackShippingRates`.
|
|
121
|
+
*/
|
|
122
|
+
function confirmMethod(input) {
|
|
123
|
+
const { cached, freshnessMs, methodId, currency } = input;
|
|
124
|
+
if (!cached) {
|
|
125
|
+
return { confirmation: "printful_unreachable" };
|
|
126
|
+
}
|
|
127
|
+
// A negative age means the entry is dated in the future — clock skew on the
|
|
128
|
+
// cache node — which would otherwise read as fresh until that date passes.
|
|
129
|
+
// Same guard `calculatePrice` applies before trusting a fresh hit.
|
|
130
|
+
const age = Date.now() - cached.cached_at;
|
|
131
|
+
if (age < 0 || age >= freshnessMs) {
|
|
132
|
+
return { confirmation: "printful_unreachable" };
|
|
133
|
+
}
|
|
134
|
+
// `selectRate` already answers "does this list offer this method in a usable
|
|
135
|
+
// currency", including the currency-mismatch and malformed-rate cases, so
|
|
136
|
+
// the check is not reimplemented here.
|
|
137
|
+
const hit = selectRate(cached.rates, methodId, currency);
|
|
138
|
+
if (!hit.ok) {
|
|
139
|
+
return { confirmation: hit.reason };
|
|
140
|
+
}
|
|
141
|
+
return { confirmation: "live", methodId };
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Decide the `shipping` override to send Printful for an order, if any.
|
|
145
|
+
*
|
|
146
|
+
* Pure, and a read of what `validateFulfillmentData` already recorded — the
|
|
147
|
+
* order path never calls Printful to re-confirm. All three conditions must
|
|
148
|
+
* hold: an id is present, `rate_source` marks it live, and the id is one we
|
|
149
|
+
* actually offer.
|
|
150
|
+
*
|
|
151
|
+
* Each condition guards a distinct way a bad override reaches an order.
|
|
152
|
+
* `"live"` without an id proves only that some quote succeeded, not which
|
|
153
|
+
* method it was for. An id without `"live"` is what 0.3.0 through 0.6.0 wrote —
|
|
154
|
+
* those methods carry no `rate_source` at all, so trusting a bare id would turn
|
|
155
|
+
* that release's dead code into a live promise on the first upgraded order. And
|
|
156
|
+
* an id outside the allowlist is one this plugin never offered.
|
|
157
|
+
*
|
|
158
|
+
* Omitting the override is always safe: Printful then picks the method itself,
|
|
159
|
+
* which is exactly today's behaviour. Sending an unconfirmed one is not — it
|
|
160
|
+
* insists on a method Printful may not offer for that destination, risking a
|
|
161
|
+
* rejected order. So every uncertain case resolves to `undefined`.
|
|
162
|
+
*/
|
|
163
|
+
function shippingOverrideFor(methods) {
|
|
164
|
+
const confirmed = new Set();
|
|
165
|
+
for (const method of methods ?? []) {
|
|
166
|
+
const data = method?.data;
|
|
167
|
+
if (!data) {
|
|
168
|
+
continue;
|
|
169
|
+
}
|
|
170
|
+
// Read as own properties: a crafted `data` blob deserialized from JSON
|
|
171
|
+
// cannot reach up the prototype chain, but a method id like "constructor"
|
|
172
|
+
// resolving to a function would otherwise pass the allowlist check below.
|
|
173
|
+
const id = Object.prototype.hasOwnProperty.call(data, "printful_shipping")
|
|
174
|
+
? data.printful_shipping
|
|
175
|
+
: undefined;
|
|
176
|
+
const source = Object.prototype.hasOwnProperty.call(data, "rate_source")
|
|
177
|
+
? data.rate_source
|
|
178
|
+
: undefined;
|
|
179
|
+
if (typeof id !== "string" || source !== "live") {
|
|
180
|
+
continue;
|
|
181
|
+
}
|
|
182
|
+
if (!exports.PRINTFUL_SHIPPING_METHODS.includes(id)) {
|
|
183
|
+
continue;
|
|
184
|
+
}
|
|
185
|
+
confirmed.add(id);
|
|
186
|
+
}
|
|
187
|
+
// Printful's `shipping` takes one value. One confirmed method — or several
|
|
188
|
+
// naming the same one, which a multi-profile cart shipping everything the
|
|
189
|
+
// same way produces — is unambiguous. Two genuinely different confirmed
|
|
190
|
+
// methods are not: picking either would override a method the customer paid
|
|
191
|
+
// for on the other profile, so we let Printful choose instead. Unconfirmed
|
|
192
|
+
// methods never enter this set, so a return method riding along on the order
|
|
193
|
+
// cannot veto the outbound method the customer selected.
|
|
194
|
+
return confirmed.size === 1 ? [...confirmed][0] : undefined;
|
|
195
|
+
}
|
|
101
196
|
/** Countries where Printful requires a state code alongside the country. */
|
|
102
197
|
const STATE_REQUIRED_COUNTRIES = new Set(["US", "AU", "CA"]);
|
|
103
198
|
/**
|
|
@@ -117,6 +212,84 @@ function isAddressQuotable(address) {
|
|
|
117
212
|
}
|
|
118
213
|
return true;
|
|
119
214
|
}
|
|
215
|
+
/**
|
|
216
|
+
* Read the cart lines a rate request would be built from.
|
|
217
|
+
*
|
|
218
|
+
* Split out from `buildRateRequest` because the caller must resolve catalog ids
|
|
219
|
+
* for these variants — a container-bound `query` lookup — before the request can
|
|
220
|
+
* be built. Keeping the lookup outside lets the builder stay pure.
|
|
221
|
+
*
|
|
222
|
+
* `shippingProfileId` narrows to the lines that ship under one profile. Medusa
|
|
223
|
+
* hands the two paths different item lists for the same cart: the pricing
|
|
224
|
+
* workflow filters by the option's profile
|
|
225
|
+
* (`list-shipping-options-for-cart-with-pricing.js:266`), while the
|
|
226
|
+
* add-method workflow passes the cart whole (`add-shipping-method-to-cart.js:90`).
|
|
227
|
+
* Inheriting that difference would give the two paths different cache keys, so
|
|
228
|
+
* a confirmation would miss the entry pricing wrote seconds earlier — silently,
|
|
229
|
+
* and only on mixed-profile carts.
|
|
230
|
+
*
|
|
231
|
+
* Unlike Medusa's own `filterCartItemsByShippingProfile`, this **fails open**:
|
|
232
|
+
* a line whose profile is absent is kept rather than dropped. Medusa filters a
|
|
233
|
+
* list it populated itself and can fail closed safely; this runs on a context
|
|
234
|
+
* that may legitimately omit the field, where dropping would report a cart as
|
|
235
|
+
* having no Printful items at all.
|
|
236
|
+
*/
|
|
237
|
+
function rateLinesFrom(context, shippingProfileId) {
|
|
238
|
+
return (context.items ?? [])
|
|
239
|
+
.filter((i) => i.variant?.id)
|
|
240
|
+
.filter((i) => {
|
|
241
|
+
if (!shippingProfileId) {
|
|
242
|
+
return true;
|
|
243
|
+
}
|
|
244
|
+
const profile = i.variant?.product?.shipping_profile?.id;
|
|
245
|
+
return profile === undefined || profile === shippingProfileId;
|
|
246
|
+
})
|
|
247
|
+
.map((i) => ({
|
|
248
|
+
variant_id: i.variant.id,
|
|
249
|
+
quantity: Number(i.quantity ?? 1),
|
|
250
|
+
unit_price: i.unit_price,
|
|
251
|
+
}));
|
|
252
|
+
}
|
|
253
|
+
/**
|
|
254
|
+
* Build the Printful rate request and its cache key from a cart context.
|
|
255
|
+
*
|
|
256
|
+
* `calculatePrice` and `validateFulfillmentData` must agree on the cache key
|
|
257
|
+
* exactly: the confirm path is only cheap because it reads the entry the pricing
|
|
258
|
+
* path wrote moments earlier under the same key. Two call sites computing that
|
|
259
|
+
* key independently would drift silently — a confirmation would miss a live
|
|
260
|
+
* entry and re-hit the API, or confirm against a differently-shaped cart. One
|
|
261
|
+
* function, called by both, is what makes the drift impossible.
|
|
262
|
+
*/
|
|
263
|
+
function buildRateRequest(context, lines, catalogIdByVariantId, stateCode) {
|
|
264
|
+
const addr = context.shipping_address ?? {};
|
|
265
|
+
const countryCode = (addr.country_code ?? "").toUpperCase();
|
|
266
|
+
if (!isAddressQuotable({ country_code: countryCode, state_code: stateCode })) {
|
|
267
|
+
return { ok: false, reason: "incomplete_address" };
|
|
268
|
+
}
|
|
269
|
+
// Resolved before the items are built: each line's `value` is denominated in
|
|
270
|
+
// the cart's currency, so it decides how the minor units convert out.
|
|
271
|
+
const currency = (context.currency_code ?? "").toUpperCase();
|
|
272
|
+
const items = buildRateItems(lines, catalogIdByVariantId, currency);
|
|
273
|
+
if (!items.length) {
|
|
274
|
+
return { ok: false, reason: "no_printful_items" };
|
|
275
|
+
}
|
|
276
|
+
const recipient = {
|
|
277
|
+
country_code: countryCode,
|
|
278
|
+
...(stateCode ? { state_code: stateCode } : {}),
|
|
279
|
+
...(addr.city ? { city: addr.city } : {}),
|
|
280
|
+
...(addr.postal_code ? { zip: addr.postal_code } : {}),
|
|
281
|
+
...(addr.address_1 ? { address1: addr.address_1 } : {}),
|
|
282
|
+
...(addr.address_2 ? { address2: addr.address_2 } : {}),
|
|
283
|
+
};
|
|
284
|
+
return {
|
|
285
|
+
ok: true,
|
|
286
|
+
recipient,
|
|
287
|
+
items,
|
|
288
|
+
currency,
|
|
289
|
+
cacheKey: buildRateCacheKey({ address: recipient, items, currency }),
|
|
290
|
+
variantIds: lines.map((l) => l.variant_id),
|
|
291
|
+
};
|
|
292
|
+
}
|
|
120
293
|
/**
|
|
121
294
|
* Turn cart lines into Printful rate items.
|
|
122
295
|
*
|
|
@@ -166,4 +339,4 @@ function buildRateItems(lines, catalogIdByVariantId, cartCurrency) {
|
|
|
166
339
|
}
|
|
167
340
|
return items;
|
|
168
341
|
}
|
|
169
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hpcHBpbmctcmF0ZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdXRpbHMvc2hpcHBpbmctcmF0ZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBMkRBLDhDQXFCQztBQWNELGdDQTJCQztBQVlELDhDQVlDO0FBc0JELHdDQTJDQztBQWxORCxtQ0FBbUM7QUFDbkMseUNBQTRDO0FBQzVDLHVDQUFrRDtBQVFsRDs7Ozs7Ozs7O0dBU0c7QUFDVSxRQUFBLHlCQUF5QixHQUFHLENBQUMsVUFBVSxDQUFVLENBQUE7QUFFOUQ7Ozs7O0dBS0c7QUFDVSxRQUFBLHlCQUF5QixHQUFHLGlCQUFpQixDQUFBO0FBRTFEOzs7R0FHRztBQUNVLFFBQUEsaUJBQWlCLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDdkMsbUJBQW1CO0lBQ25CLGlCQUFpQjtDQUNsQixDQUFDLENBQUE7QUFRRixTQUFTLFNBQVMsQ0FBQyxLQUF5QjtJQUMxQyxPQUFPLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFBO0FBQzNDLENBQUM7QUFFRDs7Ozs7Ozs7O0dBU0c7QUFDSCxTQUFnQixpQkFBaUIsQ0FBQyxLQUF3QjtJQUN4RCx1RUFBdUU7SUFDdkUsb0VBQW9FO0lBQ3BFLCtCQUErQjtJQUMvQixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1FBQy9CLFNBQVMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQztRQUNyQyxTQUFTLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUM7UUFDbkMsU0FBUyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO1FBQzdCLFNBQVMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQztRQUM1QixTQUFTLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUM7UUFDakMsU0FBUyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDO1FBQ2pDLHFFQUFxRTtRQUNyRSx5RUFBeUU7UUFDekUsdUVBQXVFO1FBQ3ZFLENBQUMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDO2FBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxVQUFVLElBQUksQ0FBQyxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUMsS0FBSyxJQUFJLEVBQUUsRUFBRSxDQUFDO2FBQzVELElBQUksRUFBRTtRQUNULFNBQVMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDO0tBQzFCLENBQUMsQ0FBQTtJQUVGLE9BQU8sSUFBQSxtQkFBVSxFQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUE7QUFDN0QsQ0FBQztBQUtEOzs7Ozs7OztHQVFHO0FBQ0gsU0FBZ0IsVUFBVSxDQUN4QixLQUFxQixFQUNyQixRQUFnQixFQUNoQixZQUFvQjtJQUVwQixNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLFFBQVEsQ0FBQyxDQUFBO0lBQ2xELElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNYLE9BQU8sRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxvQkFBb0IsRUFBRSxDQUFBO0lBQ3BELENBQUM7SUFFRCxNQUFNLGFBQWEsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFBO0lBQ3pELE1BQU0sWUFBWSxHQUFHLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQTtJQUN0RCxJQUFJLENBQUMsYUFBYSxJQUFJLENBQUMsWUFBWSxJQUFJLGFBQWEsS0FBSyxZQUFZLEVBQUUsQ0FBQztRQUN0RSxPQUFPLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsbUJBQW1CLEVBQUUsQ0FBQTtJQUNuRCxDQUFDO0lBRUQsNEVBQTRFO0lBQzVFLDRFQUE0RTtJQUM1RSwwRUFBMEU7SUFDMUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFDN0MsT0FBTyxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLG9CQUFvQixFQUFFLENBQUE7SUFDcEQsQ0FBQztJQUVELHVFQUF1RTtJQUN2RSx5RUFBeUU7SUFDekUsOEVBQThFO0lBQzlFLE9BQU8sRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFBLGdDQUFzQixFQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsYUFBYSxDQUFDLEVBQUUsQ0FBQTtBQUNoRixDQUFDO0FBRUQsNEVBQTRFO0FBQzVFLE1BQU0sd0JBQXdCLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUE7QUFFNUQ7Ozs7OztHQU1HO0FBQ0gsU0FBZ0IsaUJBQWlCLENBQUMsT0FHakM7SUFDQyxNQUFNLE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQyxZQUFZLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUE7SUFDakUsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2IsT0FBTyxLQUFLLENBQUE7SUFDZCxDQUFDO0lBQ0QsSUFBSSx3QkFBd0IsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUMxQyxPQUFPLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQTtJQUNuRCxDQUFDO0lBQ0QsT0FBTyxJQUFJLENBQUE7QUFDYixDQUFDO0FBU0Q7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsU0FBZ0IsY0FBYyxDQUM1QixLQUF5QixFQUN6QixvQkFBeUMsRUFDekMsWUFBcUI7SUFFckIsTUFBTSxLQUFLLEdBQXVCLEVBQUUsQ0FBQTtJQUNwQyxNQUFNLE1BQU0sR0FBRyxJQUFBLDBCQUFlLEVBQUMsWUFBWSxDQUFDLENBQUE7SUFDNUMsNkVBQTZFO0lBQzdFLDBEQUEwRDtJQUMxRCxNQUFNLFFBQVEsR0FBRyxNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUVyQyxLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssRUFBRSxDQUFDO1FBQ3pCLE1BQU0sU0FBUyxHQUFHLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUE7UUFDM0QsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2YsU0FBUTtRQUNWLENBQUM7UUFDRCwyRUFBMkU7UUFDM0UseUVBQXlFO1FBQ3pFLG9CQUFvQjtRQUNwQixNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUE7UUFDaEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUMzQixTQUFRO1FBQ1YsQ0FBQztRQUNELE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFBO1FBQzNDLElBQUksTUFBTSxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ2hCLFNBQVE7UUFDVixDQUFDO1FBRUQsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUN0QyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxRQUFRLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDakQsU0FBUTtRQUNWLENBQUM7UUFFRCxLQUFLLENBQUMsSUFBSSxDQUFDO1lBQ1QsVUFBVSxFQUFFLE1BQU07WUFDbEIsUUFBUTtZQUNSLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUk7Z0JBQ3pCLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFO2dCQUN6RCxDQUFDLENBQUMsRUFBRSxDQUFDO1NBQ1IsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVELE9BQU8sS0FBSyxDQUFBO0FBQ2QsQ0FBQyJ9
|
|
342
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hpcHBpbmctcmF0ZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdXRpbHMvc2hpcHBpbmctcmF0ZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBNERBLDhDQXFCQztBQWNELGdDQTJCQztBQW1DRCxzQ0F3QkM7QUEyQkQsa0RBdUNDO0FBWUQsOENBWUM7QUFnRkQsc0NBa0JDO0FBWUQsNENBMENDO0FBZUQsd0NBMkNDO0FBamVELG1DQUFtQztBQUNuQyx5Q0FBNEM7QUFDNUMsdUNBQWtEO0FBU2xEOzs7Ozs7Ozs7R0FTRztBQUNVLFFBQUEseUJBQXlCLEdBQUcsQ0FBQyxVQUFVLENBQVUsQ0FBQTtBQUU5RDs7Ozs7R0FLRztBQUNVLFFBQUEseUJBQXlCLEdBQUcsaUJBQWlCLENBQUE7QUFFMUQ7OztHQUdHO0FBQ1UsUUFBQSxpQkFBaUIsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUN2QyxtQkFBbUI7SUFDbkIsaUJBQWlCO0NBQ2xCLENBQUMsQ0FBQTtBQVFGLFNBQVMsU0FBUyxDQUFDLEtBQXlCO0lBQzFDLE9BQU8sQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUE7QUFDM0MsQ0FBQztBQUVEOzs7Ozs7Ozs7R0FTRztBQUNILFNBQWdCLGlCQUFpQixDQUFDLEtBQXdCO0lBQ3hELHVFQUF1RTtJQUN2RSxvRUFBb0U7SUFDcEUsK0JBQStCO0lBQy9CLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDL0IsU0FBUyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDO1FBQ3JDLFNBQVMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQztRQUNuQyxTQUFTLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7UUFDN0IsU0FBUyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDO1FBQzVC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
|
|
@@ -4,6 +4,7 @@ exports.DISCONTINUED_MARKER_KEY = exports.STOCK_MARKER_KEY = void 0;
|
|
|
4
4
|
exports.planStockActions = planStockActions;
|
|
5
5
|
exports.resolvePublication = resolvePublication;
|
|
6
6
|
exports.resolveExistingProductWrite = resolveExistingProductWrite;
|
|
7
|
+
const removed_1 = require("./removed");
|
|
7
8
|
/** Statuses that mean a variant cannot currently be ordered. */
|
|
8
9
|
const UNAVAILABLE = new Set([
|
|
9
10
|
"out_of_stock",
|
|
@@ -102,7 +103,7 @@ function resolveExistingProductWrite(input) {
|
|
|
102
103
|
// Printful-derived keys win over the stored copies of themselves, but the
|
|
103
104
|
// marker decision is made against the *current* metadata and must survive
|
|
104
105
|
// the merge — the mapper never writes STOCK_MARKER_KEY.
|
|
105
|
-
|
|
106
|
+
let metadata = {
|
|
106
107
|
...publication.metadata,
|
|
107
108
|
...mappedMetadata,
|
|
108
109
|
};
|
|
@@ -112,6 +113,9 @@ function resolveExistingProductWrite(input) {
|
|
|
112
113
|
else {
|
|
113
114
|
metadata[exports.STOCK_MARKER_KEY] = publication.metadata[exports.STOCK_MARKER_KEY];
|
|
114
115
|
}
|
|
116
|
+
// Seen again on Printful — drop the removal flag even if stock still keeps
|
|
117
|
+
// the product draft (all variants out of stock).
|
|
118
|
+
metadata = (0, removed_1.clearRemovedMarker)(metadata);
|
|
115
119
|
return { status: publication.status, metadata };
|
|
116
120
|
}
|
|
117
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
121
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvY2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdXRpbHMvc3RvY2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBb0JBLDRDQTRCQztBQTZCRCxnREErQkM7QUFnQkQsa0VBaUNDO0FBN0pELHVDQUE4QztBQUc5QyxnRUFBZ0U7QUFDaEUsTUFBTSxXQUFXLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDMUIsY0FBYztJQUNkLHdCQUF3QjtJQUN4QixjQUFjO0NBQ2YsQ0FBQyxDQUFBO0FBRUY7Ozs7Ozs7OztHQVNHO0FBQ0gsU0FBZ0IsZ0JBQWdCLENBQzlCLFFBQXdFO0lBRXhFLE1BQU0sbUJBQW1CLEdBQTJCLEVBQUUsQ0FBQTtJQUN0RCxJQUFJLFlBQVksR0FBRyxLQUFLLENBQUE7SUFDeEIsSUFBSSxlQUFlLEdBQUcsS0FBSyxDQUFBO0lBRTNCLEtBQUssTUFBTSxDQUFDLElBQUksUUFBUSxFQUFFLENBQUM7UUFDekIsTUFBTSxNQUFNLEdBQUcsQ0FBQyxDQUFDLG1CQUFtQixJQUFJLFFBQVEsQ0FBQTtRQUNoRCxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFBO1FBRTFDLElBQUksTUFBTSxLQUFLLGNBQWMsRUFBRSxDQUFDO1lBQzlCLGVBQWUsR0FBRyxJQUFJLENBQUE7UUFDeEIsQ0FBQztRQUNELElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDN0IsWUFBWSxHQUFHLElBQUksQ0FBQTtRQUNyQixDQUFDO0lBQ0gsQ0FBQztJQUVELGtFQUFrRTtJQUNsRSxNQUFNLGNBQWMsR0FBRyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQTtJQUUzRCxPQUFPO1FBQ0wsTUFBTSxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxXQUFXO1FB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
|
|
@@ -6,6 +6,7 @@ const utils_1 = require("@medusajs/framework/utils");
|
|
|
6
6
|
const printful_1 = require("../modules/printful");
|
|
7
7
|
const mappers_1 = require("../utils/mappers");
|
|
8
8
|
const costs_1 = require("../utils/costs");
|
|
9
|
+
const shipping_rates_1 = require("../utils/shipping-rates");
|
|
9
10
|
const createPrintfulOrderStep = (0, workflows_sdk_1.createStep)("printful-create-order", async (input, { container }) => {
|
|
10
11
|
const printful = container.resolve(printful_1.PRINTFUL_MODULE);
|
|
11
12
|
const orderModule = container.resolve(utils_1.Modules.ORDER);
|
|
@@ -21,7 +22,10 @@ const createPrintfulOrderStep = (0, workflows_sdk_1.createStep)("printful-create
|
|
|
21
22
|
});
|
|
22
23
|
}
|
|
23
24
|
const order = await orderModule.retrieveOrder(input.order_id, {
|
|
24
|
-
|
|
25
|
+
// `shipping_methods` carries the `data` blob `validateFulfillmentData`
|
|
26
|
+
// recorded at selection, which is the only evidence on the order that
|
|
27
|
+
// Printful confirmed the method the customer paid for.
|
|
28
|
+
relations: ["items", "shipping_address", "shipping_methods"],
|
|
25
29
|
});
|
|
26
30
|
const items = [];
|
|
27
31
|
const unresolved = [];
|
|
@@ -90,9 +94,14 @@ const createPrintfulOrderStep = (0, workflows_sdk_1.createStep)("printful-create
|
|
|
90
94
|
reason: "already_linked",
|
|
91
95
|
});
|
|
92
96
|
}
|
|
97
|
+
// A pure read of what was recorded at selection — no Printful call on the
|
|
98
|
+
// order path. Omitted unless Printful itself confirmed the method for this
|
|
99
|
+
// cart, in which case Printful picks the method as it does today.
|
|
100
|
+
const shipping = (0, shipping_rates_1.shippingOverrideFor)(order.shipping_methods);
|
|
93
101
|
const payload = {
|
|
94
102
|
external_id: order.id,
|
|
95
103
|
recipient,
|
|
104
|
+
...(shipping ? { shipping } : {}),
|
|
96
105
|
items,
|
|
97
106
|
confirm: options.autoSubmitOrders !== false,
|
|
98
107
|
};
|
|
@@ -155,4 +164,4 @@ exports.createPrintfulOrderWorkflow = (0, workflows_sdk_1.createWorkflow)("print
|
|
|
155
164
|
return new workflows_sdk_1.WorkflowResponse(result);
|
|
156
165
|
});
|
|
157
166
|
exports.default = exports.createPrintfulOrderWorkflow;
|
|
158
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
167
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLXByaW50ZnVsLW9yZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3dvcmtmbG93cy9jcmVhdGUtcHJpbnRmdWwtb3JkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEscUVBSzBDO0FBQzFDLHFEQUE4RTtBQUM5RSxrREFBcUQ7QUFPckQsOENBQW1EO0FBQ25ELDBDQUF5RDtBQUN6RCw0REFBNkQ7QUFrQjdELE1BQU0sdUJBQXVCLEdBQUcsSUFBQSwwQkFBVSxFQUN4Qyx1QkFBdUIsRUFDdkIsS0FBSyxFQUFFLEtBQStCLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFO0lBQ3ZELE1BQU0sUUFBUSxHQUEwQixTQUFTLENBQUMsT0FBTyxDQUFDLDBCQUFlLENBQUMsQ0FBQTtJQUMxRSxNQUFNLFdBQVcsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLGVBQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUNwRCxNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLGlDQUF5QixDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQ2xFLE1BQU0sT0FBTyxHQUFHLE1BQU0sUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFBO0lBQzNDLE1BQU0sTUFBTSxHQUFHLE1BQU0sUUFBUSxDQUFDLFNBQVMsRUFBRSxDQUFBO0lBRXpDLE1BQU0sUUFBUSxHQUFHLE1BQU0sUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUE7SUFDN0QsSUFBSSxRQUFRLEVBQUUsQ0FBQztRQUNiLE9BQU8sSUFBSSw0QkFBWSxDQUFlO1lBQ3BDLE9BQU8sRUFBRSxJQUFJO1lBQ2IsTUFBTSxFQUFFLGdCQUFnQjtZQUN4QixpQkFBaUIsRUFBRSxRQUFRLENBQUMsaUJBQWlCO1NBQzlDLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRCxNQUFNLEtBQUssR0FBRyxNQUFNLFdBQVcsQ0FBQyxhQUFhLENBQUMsS0FB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
|
|
@@ -10,6 +10,7 @@ const orphans_1 = require("../utils/orphans");
|
|
|
10
10
|
const variant_links_1 = require("../utils/variant-links");
|
|
11
11
|
const sync_status_1 = require("../utils/sync-status");
|
|
12
12
|
const stock_1 = require("../utils/stock");
|
|
13
|
+
const removed_1 = require("../utils/removed");
|
|
13
14
|
const syncProductsStep = (0, workflows_sdk_1.createStep)({
|
|
14
15
|
name: "printful-sync-products",
|
|
15
16
|
// Runs past the HTTP response and completes on its own — no
|
|
@@ -264,6 +265,53 @@ const syncProductsStep = (0, workflows_sdk_1.createStep)({
|
|
|
264
265
|
});
|
|
265
266
|
}
|
|
266
267
|
}
|
|
268
|
+
// Products that disappeared from Printful. Only a full catalogue pass may
|
|
269
|
+
// do this — a `limit` would treat everything beyond the page as removed.
|
|
270
|
+
// The decision lives in `shouldRunRemovalPass` so it is covered by a test:
|
|
271
|
+
// this is the one condition whose failure unpublishes a live catalogue.
|
|
272
|
+
{
|
|
273
|
+
const removalPolicy = options.onRemovedFromPrintful ?? "unpublish";
|
|
274
|
+
if ((0, removed_1.shouldRunRemovalPass)({ policy: removalPolicy, limit: input.limit })) {
|
|
275
|
+
try {
|
|
276
|
+
const seenIds = summaries.map((s) => String(s.id));
|
|
277
|
+
// Include ignored Printful rows: they still exist in the store.
|
|
278
|
+
const links = await printful.listPrintfulProductLinks({ printful_store_id: storeId }, { take: 100_000 });
|
|
279
|
+
const missing = (0, removed_1.findMissingSyncProductLinks)(links, seenIds);
|
|
280
|
+
for (const link of missing) {
|
|
281
|
+
try {
|
|
282
|
+
const product = await productModule.retrieveProduct(link.medusa_product_id);
|
|
283
|
+
const plan = (0, removed_1.planRemovedProductWrite)({
|
|
284
|
+
policy: removalPolicy,
|
|
285
|
+
currentStatus: product.status === "published" ? "published" : "draft",
|
|
286
|
+
currentMetadata: (product.metadata ?? {}),
|
|
287
|
+
});
|
|
288
|
+
if (plan.action === "unpublish") {
|
|
289
|
+
await productModule.updateProducts(link.medusa_product_id, {
|
|
290
|
+
status: plan.status,
|
|
291
|
+
metadata: plan.metadata,
|
|
292
|
+
});
|
|
293
|
+
counters.updated += 1;
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
catch (err) {
|
|
297
|
+
counters.failed += 1;
|
|
298
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
299
|
+
counters.errors.push(`Removed product ${link.printful_sync_product_id}: ${message}`);
|
|
300
|
+
}
|
|
301
|
+
await printful.heartbeatSyncLog(input.sync_log_id, {
|
|
302
|
+
products_processed: processed,
|
|
303
|
+
products_total: toProcess.length,
|
|
304
|
+
});
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
catch (err) {
|
|
308
|
+
counters.failed += 1;
|
|
309
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
310
|
+
counters.errors.push(`Removal pass failed: ${message}`);
|
|
311
|
+
logger.error(`Printful sync removal pass failed: ${message}`);
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
}
|
|
267
315
|
return new workflows_sdk_1.StepResponse(counters, { orphanProductIds: orphans.toDelete() });
|
|
268
316
|
}, async (compensateInput, { container }) => {
|
|
269
317
|
if (!compensateInput?.orphanProductIds?.length) {
|
|
@@ -311,4 +359,4 @@ exports.syncProductsWorkflow = (0, workflows_sdk_1.createWorkflow)("printful-syn
|
|
|
311
359
|
});
|
|
312
360
|
});
|
|
313
361
|
exports.default = exports.syncProductsWorkflow;
|
|
314
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3luYy1wcm9kdWN0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy93b3JrZmxvd3Mvc3luYy1wcm9kdWN0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxxRUFNMEM7QUFDMUMsNERBR29DO0FBQ3BDLHFEQUE4RTtBQUM5RSxrREFBcUQ7QUFFckQsOENBQWdGO0FBQ2hGLDhDQUFnRDtBQUNoRCwwREFBOEQ7QUFDOUQsc0RBQXdEO0FBQ3hELDBDQUl1QjtBQWdCdkIsTUFBTSxnQkFBZ0IsR0FBRyxJQUFBLDBCQUFVLEVBQ2pDO0lBQ0UsSUFBSSxFQUFFLHdCQUF3QjtJQUM5Qiw0REFBNEQ7SUFDNUQsMEVBQTBFO0lBQzFFLEtBQUssRUFBRSxJQUFJO0lBQ1gsbUJBQW1CLEVBQUUsSUFBSTtJQUN6Qix5RUFBeUU7SUFDekUsa0VBQWtFO0lBQ2xFLHVFQUF1RTtJQUN2RSxzRUFBc0U7SUFDdEUsMEVBQTBFO0lBQzFFLG9DQUFvQztDQUNyQyxFQUNELEtBQUssRUFBRSxLQUF3QixFQUFFLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRTtJQUNoRCxNQUFNLFFBQVEsR0FBMEIsU0FBUyxDQUFDLE9BQU8sQ0FBQywwQkFBZSxDQUFDLENBQUE7SUFDMUUsTUFBTSxhQUFhLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxlQUFPLENBQUMsT0FBTyxDQUFDLENBQUE7SUFDeEQsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxpQ0FBeUIsQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUNsRSxNQUFNLE1BQU0sR0FBRyxNQUFNLFFBQVEsQ0FBQyxTQUFTLEVBQUUsQ0FBQTtJQUN6QyxNQUFNLE9BQU8sR0FBRyxNQUFNLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQTtJQUMzQyxNQUFNLE9BQU8sR0FBRyxNQUFNLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQTtJQUUzQyxNQUFNLFNBQVMsR0FBRyxNQUFNLE1BQU0sQ0FB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
|
|
362
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3luYy1wcm9kdWN0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy93b3JrZmxvd3Mvc3luYy1wcm9kdWN0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxxRUFNMEM7QUFDMUMsNERBR29DO0FBQ3BDLHFEQUE4RTtBQUM5RSxrREFBcUQ7QUFFckQsOENBQWdGO0FBQ2hGLDhDQUFnRDtBQUNoRCwwREFBOEQ7QUFDOUQsc0RBQXdEO0FBQ3hELDBDQUl1QjtBQUN2Qiw4Q0FLeUI7QUFnQnpCLE1BQU0sZ0JBQWdCLEdBQUcsSUFBQSwwQkFBVSxFQUNqQztJQUNFLElBQUksRUFBRSx3QkFBd0I7SUFDOUIsNERBQTREO0lBQzVELDBFQUEwRTtJQUMxRSxLQUFLLEVBQUUsSUFBSTtJQUNYLG1CQUFtQixFQUFFLElBQUk7SUFDekIseUVBQXlFO0lBQ3pFLGtFQUFrRTtJQUNsRSx1RUFBdUU7SUFDdkUsc0VBQXNFO0lBQ3RFLDBFQUEwRTtJQUMxRSxvQ0FBb0M7Q0FDckMsRUFDRCxLQUFLLEVBQUUsS0FBd0IsRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUU7SUFDaEQsTUFBTSxRQUFRLEdBQTBCLFNBQVMsQ0FBQyxPQUFPLENBQUMsMEJBQWUsQ0FBQyxDQUFBO0lBQzFFLE1BQU0sYUFBYSxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsZUFBTyxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQ3hELE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsaUNBQXlCLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDbEUsTUFBTSxNQUFNLEdBQUcsTUFBTSxRQUFRLENBQUMsU0FBUyxFQUFFLENBQUE7SUFDekMsTUFBTSxPQUFPLEdBQUcsTUFBTSxRQUFRLENBQUMsVUFBVSxFQUFFLENBQUE7SUFDM0MsTUFBTSxPQUFPLEdBQUcsTUFBTSxRQUFRLENBQUMsVUFBVSxFQUFFLENBQUE7SUFFM0MsTUFBTSxTQUFTLEdBQUcs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
|
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
[](https://www.npmjs.com/package/@legenki/print2medusa)
|
|
4
4
|
[](https://www.npmjs.com/package/@legenki/print2medusa)
|
|
5
|
-
[](
|
|
5
|
+
[](https://github.com/legenki/print2medusa/blob/main/LICENSE)
|
|
6
6
|
|
|
7
7
|
Printful → Medusa v2 plugin: **sync Store Products**, **auto-create Printful orders** on payment capture, and a **Fulfillment Provider** for admin shipping options.
|
|
8
8
|
|
|
@@ -11,7 +11,7 @@ Published on npm as [`@legenki/print2medusa`](https://www.npmjs.com/package/@leg
|
|
|
11
11
|
## Requirements
|
|
12
12
|
|
|
13
13
|
- Node.js ≥ 20
|
|
14
|
-
- Medusa
|
|
14
|
+
- Medusa **≥ 2.18.0** (peer dependency `^2.18.0`)
|
|
15
15
|
- Printful store on the **Manual order / API** platform with a private token (`orders`, `sync_products` scopes)
|
|
16
16
|
|
|
17
17
|
## Install
|
|
@@ -89,6 +89,9 @@ See `examples/basic-store/` for a fuller snippet.
|
|
|
89
89
|
| -------------------- | ----------------------------------------------------------------------------------------- |
|
|
90
90
|
| Product sync | Admin **Sync Now** or `POST /admin/printful/sync` → runs in the background, one at a time |
|
|
91
91
|
| Stock awareness | Variants Printful reports as unavailable unpublish the product; restock republishes it |
|
|
92
|
+
| Removal handling | A full sync drafts products that vanished from Printful; a re-add republishes them |
|
|
93
|
+
| Shipping fidelity | The method the customer paid for is confirmed with Printful and sent on the order |
|
|
94
|
+
| Order economics | Printful's cost and your margin on the Admin order page |
|
|
92
95
|
| Links | `printful_product_link` / `printful_variant_link` (+ metadata IDs) |
|
|
93
96
|
| Orders | On `payment.captured` → creates Printful order with **`sync_variant_id`** |
|
|
94
97
|
| Fulfillment provider | Select Printful shipping option in Admin locations |
|
|
@@ -246,11 +249,9 @@ cart — the whole response is cached, and each option is picked from it locally
|
|
|
246
249
|
|
|
247
250
|
### Limits worth knowing
|
|
248
251
|
|
|
249
|
-
- **
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
calculation onto the shipping method, and the mechanism that would fix this
|
|
253
|
-
needs its own release.
|
|
252
|
+
- **A method override is sent only when Printful confirmed it live** at selection
|
|
253
|
+
(`rate_source: "live"`). Fallback pricing still lets checkout complete; the
|
|
254
|
+
order then lets Printful pick the method. See the 0.7.0 changelog.
|
|
254
255
|
- **Return options are never priced live.** Printful quotes outbound shipping
|
|
255
256
|
only, so a return shipping option must be given a flat admin price.
|
|
256
257
|
- **Rates are quoted in the cart's currency** by asking Printful to convert. If
|
|
@@ -282,6 +283,18 @@ unpublished itself — a product you set to draft by hand stays draft. Variants
|
|
|
282
283
|
carry `printful_availability_status` in metadata, and discontinued products get
|
|
283
284
|
`printful_discontinued` unless `onDiscontinued: "ignore"`.
|
|
284
285
|
|
|
286
|
+
**Sold-out sizes are still orderable in Medusa cart APIs** (`manage_inventory`
|
|
287
|
+
is false for POD). Hide or disable them in your storefront by reading
|
|
288
|
+
`printful_availability_status` — see
|
|
289
|
+
[the storefront availability guide](https://github.com/legenki/print2medusa/blob/main/docs/storefront-availability.md).
|
|
290
|
+
|
|
291
|
+
### Products removed from Printful
|
|
292
|
+
|
|
293
|
+
After a **full** sync, linked products that no longer appear in the Printful
|
|
294
|
+
store list are unpublished by default (`onRemovedFromPrintful: "unpublish"`).
|
|
295
|
+
Use `"ignore"` to leave publication alone. The plugin never deletes products.
|
|
296
|
+
Partial syncs with `limit` skip this pass.
|
|
297
|
+
|
|
285
298
|
## Order economics
|
|
286
299
|
|
|
287
300
|
Printful returns what it charged along with the created order, so the plugin
|
|
@@ -320,10 +333,23 @@ breakdown need not sum to the total.
|
|
|
320
333
|
npm install
|
|
321
334
|
npm run build
|
|
322
335
|
npm run dev # watch + yalc publish
|
|
323
|
-
npm test
|
|
336
|
+
npm test # unit only — no database needed
|
|
324
337
|
npm run typecheck
|
|
325
338
|
```
|
|
326
339
|
|
|
340
|
+
The integration suite runs against a real Postgres, so it is a separate
|
|
341
|
+
command rather than part of `npm test`:
|
|
342
|
+
|
|
343
|
+
```bash
|
|
344
|
+
createdb print2medusa_test
|
|
345
|
+
DATABASE_URL=postgres://localhost:5432/print2medusa_test npm run test:integration
|
|
346
|
+
```
|
|
347
|
+
|
|
348
|
+
`npm run test:all` runs both. The integration tests cover what unit tests
|
|
349
|
+
cannot: that the sync claim is atomic under concurrent inserts, and that a
|
|
350
|
+
redelivered webhook produces one row rather than two — both of which depend on
|
|
351
|
+
real unique-index behaviour.
|
|
352
|
+
|
|
327
353
|
In a host Medusa app:
|
|
328
354
|
|
|
329
355
|
```bash
|
|
@@ -332,7 +358,7 @@ npx medusa plugin:add @legenki/print2medusa
|
|
|
332
358
|
|
|
333
359
|
## Roadmap
|
|
334
360
|
|
|
335
|
-
See [ROADMAP.md](
|
|
361
|
+
See [ROADMAP.md](https://github.com/legenki/print2medusa/blob/main/ROADMAP.md) for the planned path from `0.2.0` (webhooks and
|
|
336
362
|
order status) through `1.0.0` (stable API and Printful v2 migration), including
|
|
337
363
|
the testing strategy for each release.
|
|
338
364
|
|
|
@@ -343,22 +369,23 @@ the testing strategy for each release.
|
|
|
343
369
|
- Long-running sync runs as a Medusa **workflow** (not a blocking HTTP body only—route awaits the workflow today; can be queued later).
|
|
344
370
|
- Webhooks carry their secret in the URL path because Printful v1 supports no
|
|
345
371
|
custom headers — see [Webhooks](#webhooks).
|
|
346
|
-
- Multi-store
|
|
372
|
+
- Multi-store polish and Printful API v2: see [ROADMAP.md](https://github.com/legenki/print2medusa/blob/main/ROADMAP.md).
|
|
347
373
|
|
|
348
374
|
## Options
|
|
349
375
|
|
|
350
|
-
| Option
|
|
351
|
-
|
|
|
352
|
-
| `apiToken`
|
|
353
|
-
| `storeId`
|
|
354
|
-
| `autoSubmitOrders`
|
|
355
|
-
| `createOnOrderPlaced`
|
|
356
|
-
| `allowPartialOrders`
|
|
357
|
-
| `markupPercent`
|
|
358
|
-
| `defaultCurrency`
|
|
359
|
-
| `webhookSecret`
|
|
360
|
-
| `syncStaleMinutes`
|
|
361
|
-
| `onDiscontinued`
|
|
376
|
+
| Option | Description |
|
|
377
|
+
| ----------------------- | ---------------------------------------------------------------------------------- |
|
|
378
|
+
| `apiToken` | Printful private token (required) |
|
|
379
|
+
| `storeId` | `X-PF-Store-Id` for account-level tokens |
|
|
380
|
+
| `autoSubmitOrders` | Confirm orders for fulfillment (default true) |
|
|
381
|
+
| `createOnOrderPlaced` | Also create Printful order on `order.placed` |
|
|
382
|
+
| `allowPartialOrders` | Allow orders that mix Printful + non-Printful items |
|
|
383
|
+
| `markupPercent` | Markup on retail prices during sync |
|
|
384
|
+
| `defaultCurrency` | Fallback currency code |
|
|
385
|
+
| `webhookSecret` | Shared secret for the Printful webhook path (see [Webhooks](#webhooks)) |
|
|
386
|
+
| `syncStaleMinutes` | Minutes before a running sync is presumed dead and reclaimed (default 60) |
|
|
387
|
+
| `onDiscontinued` | `"flag"` (default) marks discontinued products, `"ignore"` omits the marker |
|
|
388
|
+
| `onRemovedFromPrintful` | `"unpublish"` (default) drafts products gone from Printful, `"ignore"` leaves them |
|
|
362
389
|
|
|
363
390
|
## License
|
|
364
391
|
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@legenki/print2medusa",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "Printful
|
|
3
|
+
"version": "0.8.0",
|
|
4
|
+
"description": "Printful \u2192 Medusa v2 plugin: product sync, auto fulfillment, and admin tools",
|
|
5
5
|
"author": "Andy Legenki",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"repository": {
|
|
@@ -48,6 +48,7 @@
|
|
|
48
48
|
"typecheck:tests": "tsc --noEmit -p tsconfig.tests.json",
|
|
49
49
|
"test": "vitest run",
|
|
50
50
|
"test:integration": "vitest run --config vitest.integration.config.ts",
|
|
51
|
+
"test:all": "npm run test && npm run test:integration",
|
|
51
52
|
"test:watch": "vitest",
|
|
52
53
|
"prepublishOnly": "medusa plugin:build"
|
|
53
54
|
},
|
|
@@ -77,13 +78,13 @@
|
|
|
77
78
|
"yalc": "^1.0.0-pre.53"
|
|
78
79
|
},
|
|
79
80
|
"peerDependencies": {
|
|
80
|
-
"@medusajs/admin-sdk": "2.18.0",
|
|
81
|
-
"@medusajs/cli": "2.18.0",
|
|
82
|
-
"@medusajs/framework": "2.18.0",
|
|
83
|
-
"@medusajs/icons": "2.18.0",
|
|
84
|
-
"@medusajs/medusa": "2.18.0",
|
|
85
|
-
"@medusajs/test-utils": "2.18.0",
|
|
86
|
-
"@medusajs/ui": "4.2.0"
|
|
81
|
+
"@medusajs/admin-sdk": "^2.18.0",
|
|
82
|
+
"@medusajs/cli": "^2.18.0",
|
|
83
|
+
"@medusajs/framework": "^2.18.0",
|
|
84
|
+
"@medusajs/icons": "^2.18.0",
|
|
85
|
+
"@medusajs/medusa": "^2.18.0",
|
|
86
|
+
"@medusajs/test-utils": "^2.18.0",
|
|
87
|
+
"@medusajs/ui": "^4.2.0"
|
|
87
88
|
},
|
|
88
89
|
"engines": {
|
|
89
90
|
"node": ">=20"
|