@legenki/print2medusa 0.8.2 → 0.9.2

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.
@@ -0,0 +1,423 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PROMPT_STYLES = void 0;
4
+ exports.hexLightness = hexLightness;
5
+ exports.buildMockupPrompt = buildMockupPrompt;
6
+ exports.buildProductPrompts = buildProductPrompts;
7
+ exports.PROMPT_STYLES = [
8
+ {
9
+ id: "editorial",
10
+ label: "Editorial",
11
+ apparel: "editorial fashion photograph, natural window light, soft shadows, " +
12
+ "muted neutral backdrop, relaxed candid pose, shot on 50mm at f/2",
13
+ printMedia: "editorial interior photograph, natural window light, soft shadows, " +
14
+ "calm minimal room, shot on 35mm",
15
+ },
16
+ {
17
+ id: "studio",
18
+ label: "Studio",
19
+ apparel: "clean studio photograph, even softbox lighting, seamless light grey " +
20
+ "backdrop, straight-on framing, sharp product focus",
21
+ printMedia: "clean studio photograph, even softbox lighting, seamless light grey " +
22
+ "backdrop, straight-on framing",
23
+ },
24
+ {
25
+ id: "street",
26
+ label: "Street",
27
+ apparel: "street style photograph, overcast daylight, urban background slightly " +
28
+ "out of focus, walking mid-stride, shot on 35mm",
29
+ printMedia: "lifestyle photograph, daylight, lived-in interior, slight angle",
30
+ },
31
+ ];
32
+ /**
33
+ * Where a design sits, said the way a photographer would rather than the way
34
+ * an API does. `embroidery_front` is a field name; "the front panel" is an
35
+ * instruction.
36
+ */
37
+ const PLACEMENT_PHRASE = {
38
+ front: "on the chest",
39
+ back: "across the back",
40
+ embroidery_front: "on the front panel",
41
+ embroidery_back: "on the back panel",
42
+ front_dtf: "on the chest",
43
+ back_dtf: "across the back",
44
+ default: "",
45
+ };
46
+ /**
47
+ * Products where `front` does not mean a chest.
48
+ *
49
+ * One API placement name covers different physical places: `front` is the
50
+ * chest of a tee and the outward face of a tote. A bag has no chest, and the
51
+ * phrase sends the image somewhere the product is not.
52
+ */
53
+ const PLACEMENT_OVERRIDES = {
54
+ // Eco tote
55
+ "367": {
56
+ front: "on the front panel of the bag",
57
+ back: "on the back panel of the bag",
58
+ front_dtf: "on the front panel of the bag",
59
+ back_dtf: "on the back panel of the bag",
60
+ },
61
+ };
62
+ /**
63
+ * What the technique means for how the design looks.
64
+ *
65
+ * The distinction is load-bearing rather than decorative. A cap supporting
66
+ * only `EMBROIDERY` has no printed version — asking for a print produces an
67
+ * image of a product that cannot be ordered.
68
+ */
69
+ const TECHNIQUE_PHRASE = {
70
+ DTG: "the artwork printed directly into the fabric, matte and slightly absorbed by the weave",
71
+ DTFILM: "the artwork applied as a transfer, sitting just above the fabric with a clean edge",
72
+ EMBROIDERY: "the artwork stitched in thread, raised off the surface with visible stitch texture",
73
+ DIGITAL: "the artwork printed with crisp edges and full colour",
74
+ };
75
+ const WEAR = {
76
+ "71": {
77
+ noun: "unisex t-shirt",
78
+ verb: "wearing",
79
+ framing: "full garment visible",
80
+ },
81
+ "380": {
82
+ noun: "unisex pullover hoodie",
83
+ verb: "wearing",
84
+ framing: "full garment visible",
85
+ },
86
+ "206": {
87
+ noun: "structured dad cap",
88
+ verb: "wearing",
89
+ framing: "head and shoulders, cap front clearly readable",
90
+ },
91
+ "367": {
92
+ noun: "canvas tote bag",
93
+ verb: "carrying",
94
+ framing: "bag held at the side or over the shoulder, front panel visible",
95
+ },
96
+ };
97
+ const DEFAULT_WEAR = {
98
+ noun: "garment",
99
+ verb: "wearing",
100
+ framing: "full garment visible",
101
+ };
102
+ /** Print-media nouns, which are never worn. */
103
+ const PRINT_NOUN = {
104
+ "1": "matte paper poster",
105
+ "2": "framed matte poster",
106
+ "358": "die-cut vinyl sticker",
107
+ };
108
+ /**
109
+ * How light a hex colour is, `0` (black) to `1` (white), or nothing.
110
+ *
111
+ * Uses the Rec. 709 luma weights rather than a plain channel average, because
112
+ * the eye is not equally sensitive to the three channels: `#00ff00` and
113
+ * `#0000ff` average identically and look nothing alike. Aqua `#008db5` is a
114
+ * mid tone by luma and a dark one by naive average, and it is the tee's most
115
+ * common colour.
116
+ *
117
+ * Returns `undefined` on anything it cannot parse — never `0`. Absence has to
118
+ * stay distinguishable from black, exactly as it does in `normalizeHex`: a
119
+ * malformed value falling through to `0` would silently be styled as a dark
120
+ * garment.
121
+ */
122
+ function hexLightness(raw) {
123
+ const value = raw?.trim();
124
+ if (!value) {
125
+ return undefined;
126
+ }
127
+ const body = value.startsWith("#") ? value.slice(1) : value;
128
+ if (!/^[0-9a-fA-F]{3}$|^[0-9a-fA-F]{6}$/.test(body)) {
129
+ return undefined;
130
+ }
131
+ const full = body.length === 3
132
+ ? body
133
+ .split("")
134
+ .map((c) => c + c)
135
+ .join("")
136
+ : body;
137
+ const r = parseInt(full.slice(0, 2), 16);
138
+ const g = parseInt(full.slice(2, 4), 16);
139
+ const b = parseInt(full.slice(4, 6), 16);
140
+ return (0.2126 * r + 0.7152 * g + 0.0722 * b) / 255;
141
+ }
142
+ /**
143
+ * What else the model wears, keyed by how light the garment is.
144
+ *
145
+ * **A table, not colour theory.** A merchant can read this file and predict
146
+ * what a new colour will produce, which an inferred palette would not allow.
147
+ * Tuning it is editing four strings.
148
+ *
149
+ * The bands, and why they fall where they do:
150
+ *
151
+ * - **`< 0.22` dark** — black, navy, forest. The reference look (Bershka, H&M)
152
+ * puts these against light denim and off-white, so the garment stays the
153
+ * lightest-contrast object in frame and the artwork keeps its edge.
154
+ * - **`0.22 – 0.55` mid** — Aqua `#008db5` sits at 0.44, as do heather greys
155
+ * and most of the tee's saturated colours. A mid tone reads against either
156
+ * extreme, so it gets neutral denim, which is what an actual lookbook does.
157
+ * - **`> 0.55` light** — white, cream, Oyster `#edcea5` at 0.82. These need a
158
+ * darker layer or the model dissolves into the backdrop; every style preset
159
+ * here specifies a light or neutral background.
160
+ *
161
+ * Two thresholds rather than more: each extra band is another wording an
162
+ * admin has to hold in their head, and the returned image barely distinguishes
163
+ * them.
164
+ */
165
+ const PAIRING_BANDS = [
166
+ {
167
+ below: 0.22,
168
+ wears: "light washed denim and off-white sneakers",
169
+ },
170
+ {
171
+ below: 0.55,
172
+ wears: "neutral straight-leg denim and plain white sneakers",
173
+ },
174
+ {
175
+ below: Infinity,
176
+ wears: "dark charcoal trousers and a deep indigo overshirt",
177
+ },
178
+ ];
179
+ /**
180
+ * Products that get no styling clause, and why each one.
181
+ *
182
+ * - **Print media** never reaches this code — a poster is not styled with
183
+ * jeans, and its branch returns before pairing is considered.
184
+ * - **The cap (206)** is worn, so it is not excluded for being unwearable. It
185
+ * is excluded because the styling clause exists to dress the model *around*
186
+ * the garment carrying the design, and a hat is the accessory to an outfit
187
+ * rather than the outfit. Naming trousers next to a cap makes the trousers
188
+ * compete with the thing being photographed, and the cap's framing is
189
+ * already "head and shoulders" — the trousers are not even in shot.
190
+ * - **The tote (367)** is carried, not worn. Same reasoning: it is the
191
+ * accessory, and "A model carrying a tote, styled with denim" describes an
192
+ * outfit the prompt is not otherwise specifying.
193
+ */
194
+ const NO_PAIRING_PRODUCTS = new Set(["206", "367"]);
195
+ /**
196
+ * The styling clause, or nothing.
197
+ *
198
+ * Nothing is the answer whenever the base colour is unknown. Choosing a
199
+ * companion for a colour Printful did not report is the same class of mistake
200
+ * as guessing the material: it puts an unverified claim into a prompt where
201
+ * nothing marks it as invented.
202
+ */
203
+ function pairingClause(design) {
204
+ if (design.catalogProductId &&
205
+ NO_PAIRING_PRODUCTS.has(design.catalogProductId)) {
206
+ return undefined;
207
+ }
208
+ const lightness = hexLightness(design.colorHex);
209
+ if (lightness === undefined) {
210
+ return undefined;
211
+ }
212
+ const band = PAIRING_BANDS.find((b) => lightness < b.below);
213
+ return band ? `styled with ${band.wears}` : undefined;
214
+ }
215
+ /**
216
+ * "an Aqua", not "a Aqua". A prompt is read by a language model, and the
217
+ * mismatched article is the tell that a template assembled it.
218
+ */
219
+ const article = (word) => /^[aeiou]/i.test(word.trim()) ? "an" : "a";
220
+ /** Joins the parts that exist, so an absent fact leaves no trace. */
221
+ const sentence = (parts) => parts
222
+ .map((p) => p?.trim())
223
+ .filter((p) => Boolean(p))
224
+ .join(", ");
225
+ const styleSpec = (style) => exports.PROMPT_STYLES.find((s) => s.id === style) ?? exports.PROMPT_STYLES[0];
226
+ /**
227
+ * Build one prompt for one product, colour and placement.
228
+ *
229
+ * Every clause is dropped rather than defaulted when the parameter is absent.
230
+ * A prompt is a description of a real product; a placeholder in it is a claim
231
+ * Printful never made, and the resulting image would sell something that does
232
+ * not exist.
233
+ */
234
+ function buildMockupPrompt(input) {
235
+ const { design, placement, artwork } = input;
236
+ const spec = styleSpec(input.style);
237
+ const wear = (design.catalogProductId && WEAR[design.catalogProductId]) || DEFAULT_WEAR;
238
+ const noun = design.productClass === "print_media"
239
+ ? ((design.catalogProductId && PRINT_NOUN[design.catalogProductId]) ??
240
+ "print")
241
+ : wear.noun;
242
+ const technique = design.technique
243
+ ? TECHNIQUE_PHRASE[design.technique.toUpperCase()]
244
+ : undefined;
245
+ const overrides = design.catalogProductId
246
+ ? PLACEMENT_OVERRIDES[design.catalogProductId]
247
+ : undefined;
248
+ const where = overrides?.[placement] ?? PLACEMENT_PHRASE[placement] ?? "";
249
+ const artworkClause = artwork
250
+ ? `the artwork ${where ? `${where}: ` : "showing: "}${artwork}`
251
+ : where
252
+ ? `the design placed ${where}`
253
+ : undefined;
254
+ if (design.productClass === "print_media") {
255
+ // No model, no fabric, no base colour — a print's variables are its size
256
+ // and how it hangs. `size` is this variant's real dimensions; the
257
+ // product's `dimensions` table lists every size offered and would name one
258
+ // the customer is not buying.
259
+ return {
260
+ text: sentence([
261
+ `${article(noun).replace(/^a/, "A")} ${noun}${design.size ? ` measuring ${design.size}` : ""}`,
262
+ artworkClause,
263
+ technique,
264
+ "hanging on a plain wall in a bright interior",
265
+ spec.printMedia,
266
+ "photorealistic, high detail",
267
+ ]),
268
+ label: design.size ?? "print",
269
+ placement,
270
+ };
271
+ }
272
+ const colour = design.color
273
+ ? `${design.color}${design.colorHex ? ` (${design.colorHex})` : ""}`
274
+ : undefined;
275
+ // The article agrees with whatever word actually follows it — the colour
276
+ // when there is one, the noun otherwise.
277
+ const subject = `${colour ? `${colour} ` : ""}${noun}`;
278
+ return {
279
+ text: sentence([
280
+ `A model ${wear.verb} ${article(subject)} ${subject}`,
281
+ design.material ? `made of ${design.material}` : undefined,
282
+ artworkClause,
283
+ technique,
284
+ // After the technique and before the scene: the outfit is context for
285
+ // the garment, not a competing subject. Dropped entirely when the base
286
+ // colour is unknown.
287
+ pairingClause(design),
288
+ spec.apparel,
289
+ "photorealistic, high detail",
290
+ wear.framing,
291
+ ]),
292
+ label: design.color ?? noun,
293
+ placement,
294
+ };
295
+ }
296
+ /**
297
+ * How many mockups one product is worth.
298
+ *
299
+ * The store shoots 4–5 per product, so that is the ceiling. Not a knob: it is
300
+ * the number that makes the panel readable, and a route that answered with 84
301
+ * would be answering a question nobody asked.
302
+ */
303
+ const MAX_PROMPTS_PER_PRODUCT = 5;
304
+ /**
305
+ * Pick which colours to build prompts for.
306
+ *
307
+ * The tee carries 84 colours and the store sells three or four of them. The
308
+ * useful selection is not "the first five Printful listed" — that ordering is
309
+ * the catalog's, and its first five are frequently near-identical greys, which
310
+ * is the same mockup rendered five times.
311
+ *
312
+ * So the pick is **spread across the lightness range**: sort by luma, then take
313
+ * evenly spaced entries including both ends. The store is deciding which
314
+ * colourway to shoot, and what it needs to see is the extremes and the middle —
315
+ * the darkest, the lightest, and the tones between. It is also stable: the same
316
+ * catalog produces the same five prompts every time the page is opened, so a
317
+ * prompt an admin copied yesterday is still there today.
318
+ *
319
+ * Colours with no hex sort last rather than being dropped. They still make a
320
+ * valid prompt — one without a styling clause — and dropping them would hide a
321
+ * colourway the store actually sells.
322
+ */
323
+ function pickColors(colors, limit) {
324
+ if (colors.length <= limit) {
325
+ return colors;
326
+ }
327
+ const sorted = [...colors].sort((a, b) => {
328
+ const la = hexLightness(a.hex);
329
+ const lb = hexLightness(b.hex);
330
+ if (la === undefined && lb === undefined) {
331
+ return 0;
332
+ }
333
+ // Unknown lightness cannot be placed on the scale, so it goes to the end
334
+ // rather than being treated as black.
335
+ if (la === undefined) {
336
+ return 1;
337
+ }
338
+ if (lb === undefined) {
339
+ return -1;
340
+ }
341
+ return la - lb;
342
+ });
343
+ // Evenly spaced across the sorted range, both ends included.
344
+ const step = (sorted.length - 1) / (limit - 1);
345
+ const picked = [];
346
+ const seen = new Set();
347
+ for (let i = 0; i < limit; i++) {
348
+ const index = Math.round(i * step);
349
+ if (!seen.has(index)) {
350
+ seen.add(index);
351
+ picked.push(sorted[index]);
352
+ }
353
+ }
354
+ return picked;
355
+ }
356
+ /**
357
+ * Every prompt worth showing for one product.
358
+ *
359
+ * Built from the summary the design route already produces, so this costs no
360
+ * Printful call — the sync paid for the catalog lookups once.
361
+ *
362
+ * The axis that varies is whatever actually varies on the product: colour for
363
+ * apparel and embroidery, physical size for print media, which has no base
364
+ * colour by construction. Placement is the product's first core placement
365
+ * rather than every placement it offers — the tee exposes 17, and a page
366
+ * listing front, back, both sleeves and four DTF variants for each of five
367
+ * colours is 85 prompts nobody reads. The core placement is where the design
368
+ * goes; the rest are available, not intended.
369
+ *
370
+ * Returns an empty list when the product has no placement at all, which is the
371
+ * honest answer for a product whose design has nowhere to sit.
372
+ */
373
+ function buildProductPrompts(input) {
374
+ const { design, style, artwork } = input;
375
+ const limit = Math.max(1, input.limit ?? MAX_PROMPTS_PER_PRODUCT);
376
+ const placement = design.core_placements[0] ?? design.placements[0];
377
+ if (!placement) {
378
+ return [];
379
+ }
380
+ /** The product-level facts, identical on every variant. */
381
+ const base = {
382
+ productClass: design.product_class,
383
+ ...(design.technique ? { technique: design.technique } : {}),
384
+ techniques: design.techniques,
385
+ corePlacements: design.core_placements,
386
+ placements: design.placements,
387
+ ...(design.material ? { material: design.material } : {}),
388
+ ...(design.brand ? { brand: design.brand } : {}),
389
+ ...(design.model ? { model: design.model } : {}),
390
+ ...(design.dimensions ? { dimensions: design.dimensions } : {}),
391
+ // What lets the prompt name the product — "unisex t-shirt" rather than
392
+ // the "garment" fallback, and what selects its wear verb and framing.
393
+ ...(design.catalog_product_id
394
+ ? { catalogProductId: design.catalog_product_id }
395
+ : {}),
396
+ };
397
+ if (design.product_class === "print_media") {
398
+ // Size is the axis. The first few sizes rather than a spread: unlike
399
+ // colour, sizes arrive in a meaningful order and the small ones are what
400
+ // a store leads with.
401
+ const sizes = design.sizes.slice(0, limit);
402
+ const chosen = sizes.length > 0 ? sizes : [undefined];
403
+ return chosen.map((size) => buildMockupPrompt({
404
+ design: { ...base, ...(size ? { size } : {}) },
405
+ placement,
406
+ style,
407
+ artwork,
408
+ }));
409
+ }
410
+ const colors = pickColors(design.colors, limit);
411
+ const chosen = colors.length > 0 ? colors : [{ name: undefined, hex: undefined }];
412
+ return chosen.map((color) => buildMockupPrompt({
413
+ design: {
414
+ ...base,
415
+ ...(color.name ? { color: color.name } : {}),
416
+ ...(color.hex ? { colorHex: color.hex } : {}),
417
+ },
418
+ placement,
419
+ style,
420
+ artwork,
421
+ }));
422
+ }
423
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvbXB0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3V0aWxzL3Byb21wdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUErS0Esb0NBMEJDO0FBNEhELDhDQXNFQztBQStGRCxrREE2REM7QUF6Z0JZLFFBQUEsYUFBYSxHQUErQjtJQUN2RDtRQUNFLEVBQUUsRUFBRSxXQUFXO1FBQ2YsS0FBSyxFQUFFLFdBQVc7UUFDbEIsT0FBTyxFQUNMLG9FQUFvRTtZQUNwRSxrRUFBa0U7UUFDcEUsVUFBVSxFQUNSLHFFQUFxRTtZQUNyRSxpQ0FBaUM7S0FDcEM7SUFDRDtRQUNFLEVBQUUsRUFBRSxRQUFRO1FBQ1osS0FBSyxFQUFFLFFBQVE7UUFDZixPQUFPLEVBQ0wsc0VBQXNFO1lBQ3RFLG9EQUFvRDtRQUN0RCxVQUFVLEVBQ1Isc0VBQXNFO1lBQ3RFLCtCQUErQjtLQUNsQztJQUNEO1FBQ0UsRUFBRSxFQUFFLFFBQVE7UUFDWixLQUFLLEVBQUUsUUFBUTtRQUNmLE9BQU8sRUFDTCx3RUFBd0U7WUFDeEUsZ0RBQWdEO1FBQ2xELFVBQVUsRUFDUixpRUFBaUU7S0FDcEU7Q0FDTyxDQUFBO0FBRVY7Ozs7R0FJRztBQUNILE1BQU0sZ0JBQWdCLEdBQTJCO0lBQy9DLEtBQUssRUFBRSxjQUFjO0lBQ3JCLElBQUksRUFBRSxpQkFBaUI7SUFDdkIsZ0JBQWdCLEVBQUUsb0JBQW9CO0lBQ3RDLGVBQWUsRUFBRSxtQkFBbUI7SUFDcEMsU0FBUyxFQUFFLGNBQWM7SUFDekIsUUFBUSxFQUFFLGlCQUFpQjtJQUMzQixPQUFPLEVBQUUsRUFBRTtDQUNaLENBQUE7QUFFRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLG1CQUFtQixHQUEyQztJQUNsRSxXQUFXO0lBQ1gsS0FBSyxFQUFFO1FBQ0wsS0FBSyxFQUFFLCtCQUErQjtRQUN0QyxJQUFJLEVBQUUsOEJBQThCO1FBQ3BDLFNBQVMsRUFBRSwrQkFBK0I7UUFDMUMsUUFBUSxFQUFFLDhC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SyxDQUFDLENBQUE7SUFDL0MsTUFBTSxNQUFNLEdBQ1YsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUE7SUFFcEUsT0FBTyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FDMUIsaUJBQWlCLENBQUM7UUFDaEIsTUFBTSxFQUFFO1lBQ04sR0FBRyxJQUFJO1lBQ1AsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQzVDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztTQUM5QztRQUNELFNBQVM7UUFDVCxLQUFLO1FBQ0wsT0FBTztLQUNSLENBQUMsQ0FDSCxDQUFBO0FBQ0gsQ0FBQyJ9
@@ -7,6 +7,7 @@ const core_flows_1 = require("@medusajs/medusa/core-flows");
7
7
  const printful_1 = require("../modules/printful");
8
8
  const service_1 = require("../modules/printful/service");
9
9
  const order_state_1 = require("../utils/order-state");
10
+ const bundle_1 = require("../utils/bundle");
10
11
  /** Fulfillment metadata key that ties a Medusa fulfillment to a Printful parcel. */
11
12
  const SHIPMENT_ID_KEY = "printful_shipment_id";
12
13
  const applyStep = (0, workflows_sdk_1.createStep)("apply-printful-order-status", async (input, { container }) => {
@@ -104,10 +105,17 @@ const applyStep = (0, workflows_sdk_1.createStep)("apply-printful-order-status",
104
105
  // line item id. create-printful-order.ts stamps external_id with the
105
106
  // Medusa line item id on every item it sends, so this map joins a parcel's
106
107
  // contents back to Medusa line items.
108
+ //
109
+ // Bundle members carry a synthetic external_id instead, since several
110
+ // items descend from one Medusa line and Printful needs them distinct.
111
+ // `medusaLineIdFor` resolves those back to the bundle line the customer
112
+ // actually bought — the only line Medusa can fulfil. Taking the id
113
+ // verbatim would match no line, clamp every parcel to zero, and leave
114
+ // the order permanently unshipped.
107
115
  const printfulItemToMedusaItem = new Map();
108
116
  for (const pfItem of pfOrder.items ?? []) {
109
117
  if (pfItem.external_id) {
110
- printfulItemToMedusaItem.set(Number(pfItem.id), pfItem.external_id);
118
+ printfulItemToMedusaItem.set(Number(pfItem.id), (0, bundle_1.medusaLineIdFor)(pfItem.external_id));
111
119
  }
112
120
  }
113
121
  // Remaining unfulfilled quantity per Medusa line item. Decremented as we
@@ -140,16 +148,19 @@ const applyStep = (0, workflows_sdk_1.createStep)("apply-printful-order-status",
140
148
  ? [{ id: medusaId, quantity: Number(pi.quantity) }]
141
149
  : [];
142
150
  });
143
- const clamped = [];
151
+ // Merged by line id: several bundle members in one parcel all resolve
152
+ // to the same Medusa line, and two entries for one line in a single
153
+ // fulfillment is not something Medusa expects.
154
+ const clamped = new Map();
144
155
  for (const req of requested) {
145
156
  const open = remaining.get(req.id) ?? 0;
146
157
  const quantity = Math.min(req.quantity, open);
147
158
  if (quantity > 0) {
148
- clamped.push({ id: req.id, quantity });
159
+ clamped.set(req.id, (clamped.get(req.id) ?? 0) + quantity);
149
160
  remaining.set(req.id, open - quantity);
150
161
  }
151
162
  }
152
- return clamped;
163
+ return [...clamped].map(([id, quantity]) => ({ id, quantity }));
153
164
  };
154
165
  let created = 0;
155
166
  const skipped = [];
@@ -241,4 +252,4 @@ exports.applyOrderStatusWorkflow = (0, workflows_sdk_1.createWorkflow)("apply-pr
241
252
  return new workflows_sdk_1.WorkflowResponse(applyStep(input));
242
253
  });
243
254
  exports.default = exports.applyOrderStatusWorkflow;
244
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwbHktb3JkZXItc3RhdHVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3dvcmtmbG93cy9hcHBseS1vcmRlci1zdGF0dXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEscUVBSzBDO0FBQzFDLHFEQUE4RTtBQUM5RSw0REFHb0M7QUFDcEMsa0RBQXFEO0FBRXJELHlEQUdvQztBQUNwQyxzREFBNEQ7QUFhNUQsb0ZBQW9GO0FBQ3BGLE1BQU0sZUFBZSxHQUFHLHNCQUFzQixDQUFBO0FBRTlDLE1BQU0sU0FBUyxHQUFHLElBQUEsMEJBQVUsRUFDMUIsNkJBQTZCLEVBQzdCLEtBQUssRUFBRSxLQUE0QixFQUFFLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRTtJQUNwRCxNQUFNLFFBQVEsR0FBMEIsU0FBUyxDQUFDLE9BQU8sQ0FBQywwQkFBZSxDQUFDLENBQUE7SUFDMUUsTUFBTSxXQUFXLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxlQUFPLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDcEQsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxpQ0FBeUIsQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUVoRSxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxRQUFRLENBQUMseUJBQXlCLENBQUM7UUFDdkQsRUFBRSxFQUFFLEtBQUssQ0FBQyxZQUFZO0tBQ3ZCLENBQUMsQ0FBQTtJQUNGLElBQUksQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxXQUFXLEVBQUUsQ0FBQztRQUMzQyxPQUFPLElBQUksNEJBQVksQ0FBYztZQUNuQyxNQUFNLEVBQUUsV0FBVztZQUNuQixNQUFNLEVBQUUsbUJBQW1CO1lBQzNCLGlCQUFpQixFQUFFLENBQUM7U0FDckIsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVELHdFQUF3RTtJQUN4RSwrREFBK0Q7SUFDL0QsTUFBTSxRQUFRLEdBQUcsQ0FBQyxLQUFL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
255
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwbHktb3JkZXItc3RhdHVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3dvcmtmbG93cy9hcHBseS1vcmRlci1zdGF0dXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEscUVBSzBDO0FBQzFDLHFEQUE4RTtBQUM5RSw0REFHb0M7QUFDcEMsa0RBQXFEO0FBRXJELHlEQUdvQztBQUNwQyxzREFBNEQ7QUFDNUQsNENBQWlEO0FBYWpELG9GQUFvRjtBQUNwRixNQUFNLGVBQWUsR0FBRyxzQkFBc0IsQ0FBQTtBQUU5QyxNQUFNLFNBQVMsR0FBRyxJQUFBLDBCQUFVLEVBQzFCLDZCQUE2QixFQUM3QixLQUFLLEVBQUUsS0FBNEIsRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUU7SUFDcEQsTUFBTSxRQUFRLEdBQTBCLFNBQVMsQ0FBQyxPQUFPLENBQUMsMEJBQWUsQ0FBQyxDQUFBO0lBQzFFLE1BQU0sV0FBVyxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsZUFBTyxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQ3BELE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsaUNBQXlCLENBQUMsS0FBSyxDQUFDLENBQUE7SUFFaEUsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLE1BQU0sUUFBUSxDQUFDLHlCQUF5QixDQUFDO1FBQ3ZELEVBQUUsRUFBRSxLQUFLLENBQUMsWUFBWTtLQUN2QixDQUFDLENBQUE7SUFDRixJQUFJLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssV0FBVyxFQUFFLENBQUM7UUFDM0MsT0FBTyxJQUFJLDRCQUFZLENBQWM7WUFDbkMsTUFBTSxFQUFFLFdBQVc7WUFDbkIsTUFBTSxFQUFFLG1CQUFtQjtZQUMzQixpQkFBaUIsRUFBRSxDQUFDO1NBQ3JCLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRCx3RUFBd0U7SUFDeEUsK0RBQStEO0lBQy9ELE1BQU0sUUFBUSxH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
@@ -7,6 +7,7 @@ const printful_1 = require("../modules/printful");
7
7
  const mappers_1 = require("../utils/mappers");
8
8
  const costs_1 = require("../utils/costs");
9
9
  const shipping_rates_1 = require("../utils/shipping-rates");
10
+ const bundle_1 = require("../utils/bundle");
10
11
  const createPrintfulOrderStep = (0, workflows_sdk_1.createStep)("printful-create-order", async (input, { container }) => {
11
12
  const printful = container.resolve(printful_1.PRINTFUL_MODULE);
12
13
  const orderModule = container.resolve(utils_1.Modules.ORDER);
@@ -29,7 +30,23 @@ const createPrintfulOrderStep = (0, workflows_sdk_1.createStep)("printful-create
29
30
  });
30
31
  const items = [];
31
32
  const unresolved = [];
32
- for (const item of order.items ?? []) {
33
+ // A bundle is one Medusa line standing for several Printful products, and
34
+ // the loop below resolves one line to one item. Left unexpanded, a
35
+ // three-item bundle would ship a single thing — or, since a bundle variant
36
+ // has no Printful link of its own, be skipped as `no_printful_items` and
37
+ // ship nothing at all.
38
+ //
39
+ // Composition comes from each line's own metadata, written when the
40
+ // customer bought. A merchant editing the bundle afterwards must not
41
+ // change what an already-placed order ships.
42
+ const lines = (0, bundle_1.expandOrderLines)((order.items ?? []).map((item) => ({
43
+ id: item.id,
44
+ variant_id: item.variant_id,
45
+ title: item.title,
46
+ quantity: Number(item.quantity),
47
+ metadata: (item.metadata ?? {}),
48
+ })));
49
+ for (const item of lines) {
33
50
  const variantId = item.variant_id;
34
51
  if (!variantId) {
35
52
  unresolved.push(item.id);
@@ -53,7 +70,7 @@ const createPrintfulOrderStep = (0, workflows_sdk_1.createStep)("printful-create
53
70
  items.push({
54
71
  sync_variant_id: Number(syncVariantId),
55
72
  quantity: Number(item.quantity),
56
- name: item.title,
73
+ name: item.title ?? undefined,
57
74
  external_id: item.id,
58
75
  });
59
76
  }
@@ -164,4 +181,4 @@ exports.createPrintfulOrderWorkflow = (0, workflows_sdk_1.createWorkflow)("print
164
181
  return new workflows_sdk_1.WorkflowResponse(result);
165
182
  });
166
183
  exports.default = exports.createPrintfulOrderWorkflow;
167
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLXByaW50ZnVsLW9yZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3dvcmtmbG93cy9jcmVhdGUtcHJpbnRmdWwtb3JkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEscUVBSzBDO0FBQzFDLHFEQUE4RTtBQUM5RSxrREFBcUQ7QUFPckQsOENBQW1EO0FBQ25ELDBDQUF5RDtBQUN6RCw0REFBNkQ7QUFrQjdELE1BQU0sdUJBQXVCLEdBQUcsSUFBQSwwQkFBVSxFQUN4Qyx1QkFBdUIsRUFDdkIsS0FBSyxFQUFFLEtBQStCLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFO0lBQ3ZELE1BQU0sUUFBUSxHQUEwQixTQUFTLENBQUMsT0FBTyxDQUFDLDBCQUFlLENBQUMsQ0FBQTtJQUMxRSxNQUFNLFdBQVcsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLGVBQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUNwRCxNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLGlDQUF5QixDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQ2xFLE1BQU0sT0FBTyxHQUFHLE1BQU0sUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFBO0lBQzNDLE1BQU0sTUFBTSxHQUFHLE1BQU0sUUFBUSxDQUFDLFNBQVMsRUFBRSxDQUFBO0lBRXpDLE1BQU0sUUFBUSxHQUFHLE1BQU0sUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUE7SUFDN0QsSUFBSSxRQUFRLEVBQUUsQ0FBQztRQUNiLE9BQU8sSUFBSSw0QkFBWSxDQUFlO1lBQ3BDLE9BQU8sRUFBRSxJQUFJO1lBQ2IsTUFBTSxFQUFFLGdCQUFnQjtZQUN4QixpQkFBaUIsRUFBRSxRQUFRLENBQUMsaUJBQWlCO1NBQzlDLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRCxNQUFNLEtBQUssR0FBRyxNQUFNLFdBQVcsQ0FBQyxhQUFhLENBQUMsS0FB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
184
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLXByaW50ZnVsLW9yZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3dvcmtmbG93cy9jcmVhdGUtcHJpbnRmdWwtb3JkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEscUVBSzBDO0FBQzFDLHFEQUE4RTtBQUM5RSxrREFBcUQ7QUFPckQsOENBQW1EO0FBQ25ELDBDQUF5RDtBQUN6RCw0REFBNkQ7QUFDN0QsNENBQWtEO0FBa0JsRCxNQUFNLHVCQUF1QixHQUFHLElBQUEsMEJBQVUsRUFDeEMsdUJBQXVCLEVBQ3ZCLEtBQUssRUFBRSxLQUErQixFQUFFLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRTtJQUN2RCxNQUFNLFFBQVEsR0FBMEIsU0FBUyxDQUFDLE9BQU8sQ0FBQywwQkFBZSxDQUFDLENBQUE7SUFDMUUsTUFBTSxXQUFXLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxlQUFPLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDcEQsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxpQ0FBeUIsQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUNsRSxNQUFNLE9BQU8sR0FBRyxNQUFNLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQTtJQUMzQyxNQUFNLE1BQU0sR0FBRyxNQUFNLFFBQVEsQ0FBQyxTQUFTLEVBQUUsQ0FBQTtJQUV6QyxNQUFNLFFBQVEsR0FBRyxNQUFNLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFBO0lBQzdELElBQUksUUFBUSxFQUFFLENBQUM7UUFDYixPQUFPLElBQUksNEJBQVksQ0FBZTtZQUNwQyxPQUFPLEVBQUUsSUFBSTtZQUNiLE1BQU0sRUFBRSxnQkFBZ0I7WUFDeEIsaUJBQWlCLEVBQUUsUUFBUSxDQUFDLGlCQUFpQjtTQUM5QyxDQUFDLENBQUE7SUFDSixDQUFDO0lBRUQsTUFBTSxLQUFLLEdBQUcsTUFBTSxXQUFXLENBQUMs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