@legenki/print2medusa 0.9.4 → 0.9.5

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.
@@ -1,13 +1,10 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
2
  Object.defineProperty(exports, "__esModule", { value: true });
6
3
  exports.POST = POST;
7
4
  const utils_1 = require("@medusajs/framework/utils");
8
5
  const printful_1 = require("../../../../modules/printful");
9
6
  const webhook_events_1 = require("../../../../utils/webhook-events");
10
- const apply_order_status_1 = __importDefault(require("../../../../workflows/apply-order-status"));
7
+ const utils_2 = require("@medusajs/framework/utils");
11
8
  /**
12
9
  * Public Printful webhook endpoint.
13
10
  *
@@ -65,16 +62,26 @@ async function POST(req, res) {
65
62
  res.status(200).json({ received: true, event_id: eventId, duplicate: true });
66
63
  return;
67
64
  }
68
- res.status(200).json({ received: true, event_id: eventId });
69
65
  if (handled) {
70
- // Fire-and-forget: the durable row plus the retry job (once it lands) are
71
- // the intended safety net, so losing this in-process attempt costs at most
72
- // one retry interval.
73
- void (0, apply_order_status_1.default)(req.scope)
74
- .run({ input: { event_row_id: event.id } })
75
- .catch((err) => {
76
- logger.error(`Printful: apply failed for event ${eventId}: ${err instanceof Error ? err.message : String(err)}`);
77
- });
66
+ // Emitted before the response, not after. Emitting afterwards means a
67
+ // failure here an unresolvable Event Bus, a broken transport throws
68
+ // with the 200 already sent: an unhandled rejection Printful reads as
69
+ // success, and the event waits for the retry job with nothing logged.
70
+ //
71
+ // Failing to emit is not failing the webhook, though. The durable row is
72
+ // already written and the retry job picks it up, so this logs and still
73
+ // answers 200 rather than asking Printful to redeliver an event we hold.
74
+ try {
75
+ const eventBus = req.scope.resolve(utils_2.Modules.EVENT_BUS);
76
+ await eventBus.emit({
77
+ name: webhook_events_1.PRINTFUL_WEBHOOK_RECEIVED,
78
+ data: { event_row_id: event.id },
79
+ });
80
+ }
81
+ catch (err) {
82
+ logger.error(`Printful: could not emit ${webhook_events_1.PRINTFUL_WEBHOOK_RECEIVED} for event ${eventId}: ${err instanceof Error ? err.message : String(err)}`);
83
+ }
78
84
  }
85
+ res.status(200).json({ received: true, event_id: eventId });
79
86
  }
80
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2hvb2tzL3ByaW50ZnVsL1t0b2tlbl0vcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFxQkEsb0JBOEVDO0FBbEdELHFEQUFxRTtBQUNyRSwyREFBOEQ7QUFFOUQscUVBT3lDO0FBQ3pDLGtHQUErRTtBQUUvRTs7Ozs7O0dBTUc7QUFDSSxLQUFLLFVBQVUsSUFBSSxDQUFDLEdBQWtCLEVBQUUsR0FBbUI7SUFDaEUsTUFBTSxRQUFRLEdBQTBCLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLDBCQUFlLENBQUMsQ0FBQTtJQUMxRSxNQUFNLE1BQU0sR0FBcUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQ2hFLGlDQUF5QixDQUFDLE1BQU0sQ0FDakMsQ0FBQTtJQUNELE1BQU0sT0FBTyxHQUFHLE1BQU0sUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFBO0lBRTNDLE1BQU0sUUFBUSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFBO0lBQ2pDLElBQUksQ0FBQyxJQUFBLG1DQUFrQixFQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQztRQUN6RCxzREFBc0Q7UUFDdEQsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQTtRQUM5QyxPQUFNO0lBQ1IsQ0FBQztJQUVELE1BQU0sT0FBTyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxFQUFFLENBQTJCLENBQUE7SUFDMUQsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksSUFBSSxTQUFTLENBQUE7SUFDdEMsTUFBTSxlQUFlLEdBQUcsSUFBQSwrQkFBYyxFQUFDLE9BQU8sQ0FBQyxDQUFBO0lBRS9DLElBQUksQ0FBQyxlQUFl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
87
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2hvb2tzL3ByaW50ZnVsL1t0b2tlbl0vcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUF1QkEsb0JBeUZDO0FBL0dELHFEQUFxRTtBQUNyRSwyREFBOEQ7QUFFOUQscUVBUXlDO0FBQ3pDLHFEQUFtRDtBQUduRDs7Ozs7O0dBTUc7QUFDSSxLQUFLLFVBQVUsSUFBSSxDQUFDLEdBQWtCLEVBQUUsR0FBbUI7SUFDaEUsTUFBTSxRQUFRLEdBQTBCLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLDBCQUFlLENBQUMsQ0FBQTtJQUMxRSxNQUFNLE1BQU0sR0FBcUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQ2hFLGlDQUF5QixDQUFDLE1BQU0sQ0FDakMsQ0FBQTtJQUNELE1BQU0sT0FBTyxHQUFHLE1BQU0sUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFBO0lBRTNDLE1BQU0sUUFBUSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFBO0lBQ2pDLElBQUksQ0FBQyxJQUFBLG1DQUFrQixFQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQztRQUN6RCxzREFBc0Q7UUFDdEQsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQTtRQUM5QyxPQUFNO0lBQ1IsQ0FBQztJQUVELE1BQU0sT0FBTyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxFQUFFLENBQTJCLENBQUE7SUFDMUQsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksSUFBSSxTQUFTLENBQUE7SUFDdEMsTUFBTSxlQUFlLEdBQUcsSUFBQSwrQkFBYyxFQUFDLE9BQU8sQ0FBQyxDQUFBO0lBRS9DLElBQUksQ0FBQyxlQUFlLEVB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
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.MAX_WEBHOOK_ATTEMPTS = exports.PENDING_PRINTFUL_ORDER_ID = void 0;
6
+ exports.MAX_WEBHOOK_ATTEMPTS = exports.MIN_WEBHOOK_SECRET_LENGTH = exports.PENDING_PRINTFUL_ORDER_ID = void 0;
7
7
  exports.nextRetryDelayMs = nextRetryDelayMs;
8
8
  exports.lockKeyFor = lockKeyFor;
9
9
  exports.isUniqueViolation = isUniqueViolation;
@@ -23,6 +23,13 @@ const printful_webhook_event_1 = __importDefault(require("./models/printful-webh
23
23
  * the concurrent-claim race; tests/order-link.test.ts guards the pairing.
24
24
  */
25
25
  exports.PENDING_PRINTFUL_ORDER_ID = "pending";
26
+ /**
27
+ * Shortest webhook secret the module will start with.
28
+ *
29
+ * The secret is the sole authentication for the public webhook endpoint, so
30
+ * its length is what stands between a stranger and forged shipment events.
31
+ */
32
+ exports.MIN_WEBHOOK_SECRET_LENGTH = 32;
26
33
  /** Attempts before an event is parked as permanently failed. */
27
34
  exports.MAX_WEBHOOK_ATTEMPTS = 20;
28
35
  /** Backoff: 5 minutes doubling per attempt, capped at 6 hours. */
@@ -32,19 +39,21 @@ function nextRetryDelayMs(attempts) {
32
39
  return Math.min(FIVE_MINUTES * Math.pow(2, attempts), SIX_HOURS);
33
40
  }
34
41
  /**
35
- * Stable 32-bit key for pg_advisory_xact_lock, derived from the order id.
42
+ * Stable 64-bit key for pg_advisory_xact_lock, derived from the order id.
36
43
  *
37
- * readInt32BE yields a signed 32-bit integer, which is exactly the width
38
- * pg_advisory_xact_lock's single-argument form takes. The order id itself never
39
- * reaches SQL only this number does, and it is passed as a bind parameter.
44
+ * Returned as two signed 32-bit halves because that is the shape the
45
+ * two-argument form takes `pg_advisory_xact_lock(int4, int4)` and
46
+ * readInt32BE yields exactly that width. The order id itself never reaches
47
+ * SQL; only these two numbers do, as bind parameters.
40
48
  *
41
- * 32 bits means distinct orders can collide (~2 per 200k ids). A collision
42
- * only serializes two unrelated orders against each other, which is slower
43
- * but never incorrect, so the simpler single-argument lock form is worth it.
49
+ * The single-argument form was 32 bits, where distinct orders collided at
50
+ * roughly 2 per 200k ids. A collision only serialized two unrelated orders,
51
+ * which is slower rather than wrong but 64 bits makes it not worth thinking
52
+ * about, for one extra bind parameter.
44
53
  */
45
54
  function lockKeyFor(printfulOrderId) {
46
55
  const digest = (0, crypto_1.createHash)("sha256").update(String(printfulOrderId)).digest();
47
- return digest.readInt32BE(0);
56
+ return [digest.readInt32BE(0), digest.readInt32BE(4)];
48
57
  }
49
58
  /**
50
59
  * Detect a Postgres unique-constraint violation (SQLSTATE 23505) regardless of
@@ -94,6 +103,21 @@ class PrintfulModuleService extends (0, utils_1.MedusaService)({
94
103
  super(...arguments);
95
104
  this.client_ = null;
96
105
  this.options_ = options ?? {};
106
+ // The secret is the whole authentication for the public webhook endpoint:
107
+ // it sits in the URL path and anyone who guesses it can post forged
108
+ // shipment events. Verification is already constant-time, so length is
109
+ // what remains — 32 characters puts brute force out of reach.
110
+ //
111
+ // Refused at construction rather than at the first request. A too-short
112
+ // secret is a misconfiguration, and failing at boot surfaces it while
113
+ // someone is watching, instead of leaving a weak endpoint live.
114
+ //
115
+ // Only checked when set: the option is optional, and a deployment that
116
+ // never registers a webhook is entitled to omit it.
117
+ const secret = this.options_.webhookSecret;
118
+ if (secret !== undefined && secret.length < exports.MIN_WEBHOOK_SECRET_LENGTH) {
119
+ throw new Error(`Printful webhookSecret must be at least ${exports.MIN_WEBHOOK_SECRET_LENGTH} characters (got ${secret.length}).`);
120
+ }
97
121
  }
98
122
  async getOptions() {
99
123
  return this.options_;
@@ -206,9 +230,9 @@ class PrintfulModuleService extends (0, utils_1.MedusaService)({
206
230
  * pg_advisory_xact_lock is released by Postgres on commit or rollback.
207
231
  */
208
232
  async withOrderLock(printfulOrderId, fn) {
209
- const key = lockKeyFor(printfulOrderId);
233
+ const keys = lockKeyFor(printfulOrderId);
210
234
  return this.baseRepository_.transaction(async (txManager) => {
211
- await txManager.execute("select pg_advisory_xact_lock(?)", [key]);
235
+ await txManager.execute("select pg_advisory_xact_lock(?, ?)", keys);
212
236
  return await fn();
213
237
  });
214
238
  }
@@ -347,4 +371,4 @@ class PrintfulModuleService extends (0, utils_1.MedusaService)({
347
371
  }
348
372
  }
349
373
  exports.default = PrintfulModuleService;
350
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9tb2R1bGVzL3ByaW50ZnVsL3NlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBZ0RBLDRDQUlDO0FBYUQsZ0NBR0M7QUFpQkQsOENBMkJDO0FBaEhELHFEQUF5RDtBQUN6RCxtQ0FBbUM7QUFDbkMsaUVBQTREO0FBRTVELHVGQUE0RDtBQUM1RCwyRkFBZ0U7QUFDaEUsbUZBQXdEO0FBQ3hELDJGQUFnRTtBQUNoRSw2RkFBa0U7QUEyQmxFOzs7Ozs7R0FNRztBQUNVLFFBQUEseUJBQXlCLEdBQUcsU0FBUyxDQUFBO0FBRWxELGdFQUFnRTtBQUNuRCxRQUFBLG9CQUFvQixHQUFHLEVBQUUsQ0FBQTtBQUV0QyxrRUFBa0U7QUFDbEUsU0FBZ0IsZ0JBQWdCLENBQUMsUUFBZ0I7SUFDL0MsTUFBTSxZQUFZLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUE7SUFDbEMsTUFBTSxTQUFTLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFBO0lBQ3BDLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUE7QUFDbEUsQ0FBQztBQUVEOzs7Ozs7Ozs7O0dBVUc7QUFDSCxTQUFnQixVQUFVLENBQUMsZUFBdUI7SUFDaEQsTUFBTSxNQUFNLEdBQUcsSUFBQSxtQkFBVSxFQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQTtJQUM1RSxPQUFPLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUE7QUFDOUIsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBQ0gsU0FBZ0IsaUJBQWlCLENBQUMsR0FB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
374
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9tb2R1bGVzL3ByaW50ZnVsL3NlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBd0RBLDRDQUlDO0FBZUQsZ0NBR0M7QUFpQkQsOENBMkJDO0FBMUhELHFEQUF5RDtBQUN6RCxtQ0FBbUM7QUFDbkMsaUVBQTREO0FBRTVELHVGQUE0RDtBQUM1RCwyRkFBZ0U7QUFDaEUsbUZBQXdEO0FBQ3hELDJGQUFnRTtBQUNoRSw2RkFBa0U7QUEyQmxFOzs7Ozs7R0FNRztBQUNVLFFBQUEseUJBQXlCLEdBQUcsU0FBUyxDQUFBO0FBRWxEOzs7OztHQUtHO0FBQ1UsUUFBQSx5QkFBeUIsR0FBRyxFQUFFLENBQUE7QUFFM0MsZ0VBQWdFO0FBQ25ELFFBQUEsb0JBQW9CLEdBQUcsRUFBRSxDQUFBO0FBRXRDLGtFQUFrRTtBQUNsRSxTQUFnQixnQkFBZ0IsQ0FBQyxRQUFnQjtJQUMvQyxNQUFNLFlBQVksR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQTtJQUNsQyxNQUFNLFNBQVMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUE7SUFDcEMsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQTtBQUNsRSxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsU0FBZ0IsVUFBVSxDQUFDLGVBQXVCO0lBQ2hELE1BQU0sTUFBTSxHQUFHLElBQUEsbUJBQVUsRUFBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUE7SUFDNUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxD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
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.config = void 0;
7
+ exports.default = printfulWebhookReceivedHandler;
8
+ const apply_order_status_1 = __importDefault(require("../workflows/apply-order-status"));
9
+ const webhook_events_1 = require("../utils/webhook-events");
10
+ async function printfulWebhookReceivedHandler({ event: { data }, container, }) {
11
+ const logger = container.resolve("logger");
12
+ try {
13
+ await (0, apply_order_status_1.default)(container).run({
14
+ input: { event_row_id: data.event_row_id },
15
+ });
16
+ }
17
+ catch (err) {
18
+ logger.error(`Printful: apply failed for event_row_id ${data.event_row_id}: ${err instanceof Error ? err.message : String(err)}`);
19
+ throw err;
20
+ }
21
+ }
22
+ exports.config = {
23
+ event: webhook_events_1.PRINTFUL_WEBHOOK_RECEIVED,
24
+ };
25
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJpbnRmdWwtd2ViaG9vay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9zdWJzY3JpYmVycy9wcmludGZ1bC13ZWJob29rLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUlBLGlEQWlCQztBQXBCRCx5RkFBc0U7QUFDdEUsNERBQW1FO0FBRXBELEtBQUssVUFBVSw4QkFBOEIsQ0FBQyxFQUMzRCxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFDZixTQUFTLEdBQ2dDO0lBQ3pDLE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUE7SUFDMUMsSUFBSSxDQUFDO1FBQ0gsTUFBTSxJQUFBLDRCQUF3QixFQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztZQUM1QyxLQUFLLEVBQUUsRUFBRSxZQUFZLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRTtTQUMzQyxDQUFDLENBQUE7SUFDSixDQUFDO0lBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUNiLE1BQU0sQ0FBQyxLQUFLLENBQ1YsMkNBQTJDLElBQUksQ0FBQyxZQUFZLEtBQzFELEdBQUcsWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQ2pELEVBQUUsQ0FDSCxDQUFBO1FBQ0QsTUFBTSxHQUFHLENBQUE7SUFDWCxDQUFDO0FBQ0gsQ0FBQztBQUVZLFFBQUEsTUFBTSxHQUFxQjtJQUN0QyxLQUFLLEVBQUUsMENBQXlCO0NBQ2pDLENBQUEifQ==
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.PRINTFUL_WEBHOOK_TYPES = void 0;
3
+ exports.PRINTFUL_WEBHOOK_TYPES = exports.PRINTFUL_WEBHOOK_RECEIVED = void 0;
4
4
  exports.verifyWebhookToken = verifyWebhookToken;
5
5
  exports.payloadFingerprint = payloadFingerprint;
6
6
  exports.extractOrderId = extractOrderId;
@@ -23,6 +23,13 @@ function verifyWebhookToken(configured, provided) {
23
23
  const b = (0, crypto_1.createHash)("sha256").update(provided).digest();
24
24
  return (0, crypto_1.timingSafeEqual)(a, b);
25
25
  }
26
+ /**
27
+ * The internal Medusa event the webhook route emits and the subscriber listens
28
+ * for. Shared so the two cannot drift apart — a typo on either side would be
29
+ * silent: the route would answer 200, the subscriber would never fire, and the
30
+ * event would only be applied by the retry job.
31
+ */
32
+ exports.PRINTFUL_WEBHOOK_RECEIVED = "printful.webhook.received";
26
33
  /** Event types we register with Printful. order_updated is noisy and opt-in. */
27
34
  exports.PRINTFUL_WEBHOOK_TYPES = [
28
35
  "package_shipped",
@@ -114,4 +121,4 @@ function deriveEventId(payload) {
114
121
  .update(`${type}|${orderId}|${discriminator}|${timeKey}`)
115
122
  .digest("hex");
116
123
  }
117
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2ViaG9vay1ldmVudHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdXRpbHMvd2ViaG9vay1ldmVudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBT0EsZ0RBYUM7QUFnREQsZ0RBRUM7QUFFRCx3Q0FHQztBQUVELDhDQVNDO0FBaUJELHNDQWlDQztBQXhJRCxtQ0FBb0Q7QUFFcEQ7Ozs7R0FJRztBQUNILFNBQWdCLGtCQUFrQixDQUNoQyxVQUFxQyxFQUNyQyxRQUFtQztJQUVuQyxJQUFJLE9BQU8sVUFBVSxLQUFLLFFBQVEsSUFBSSxPQUFPLFFBQVEsS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUNuRSxPQUFPLEtBQUssQ0FBQTtJQUNkLENBQUM7SUFDRCxJQUFJLENBQUMsVUFBVSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDN0IsT0FBTyxLQUFLLENBQUE7SUFDZCxDQUFDO0lBQ0QsTUFBTSxDQUFDLEdBQUcsSUFBQSxtQkFBVSxFQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQTtJQUMxRCxNQUFNLENBQUMsR0FBRyxJQUFBLG1CQUFVLEVBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFBO0lBQ3hELE9BQU8sSUFBQSx3QkFBZSxFQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQTtBQUM5QixDQUFDO0FBRUQsZ0ZBQWdGO0FBQ25FLFFBQUEsc0JBQXNCLEdBQUc7SUFDcEMsaUJBQWlCO0lBQ2pCLGNBQWM7SUFDZCxnQkFBZ0I7SUFDaEIsa0JBQWtCO0NBQ1YsQ0FBQTtBQVVWOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLHNCQUFzQixHQUFHLEdBQUcsQ0FBQTtBQUVsQyxnRkFBZ0Y7QUFDaEYsU0FBUyxZQUFZLENBQUMsS0FBYyxFQUFFLEtBQUssR0FBRyxDQUFDO0lBQzdDLElBQUksS0FBSyxH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
124
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2ViaG9vay1ldmVudHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdXRpbHMvd2ViaG9vay1ldmVudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBT0EsZ0RBYUM7QUF3REQsZ0RBRUM7QUFFRCx3Q0FHQztBQUVELDhDQVNDO0FBaUJELHNDQWlDQztBQWhKRCxtQ0FBb0Q7QUFFcEQ7Ozs7R0FJRztBQUNILFNBQWdCLGtCQUFrQixDQUNoQyxVQUFxQyxFQUNyQyxRQUFtQztJQUVuQyxJQUFJLE9BQU8sVUFBVSxLQUFLLFFBQVEsSUFBSSxPQUFPLFFBQVEsS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUNuRSxPQUFPLEtBQUssQ0FBQTtJQUNkLENBQUM7SUFDRCxJQUFJLENBQUMsVUFBVSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDN0IsT0FBTyxLQUFLLENBQUE7SUFDZCxDQUFDO0lBQ0QsTUFBTSxDQUFDLEdBQUcsSUFBQSxtQkFBVSxFQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQTtJQUMxRCxNQUFNLENBQUMsR0FBRyxJQUFBLG1CQUFVLEVBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFBO0lBQ3hELE9BQU8sSUFBQSx3QkFBZSxFQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQTtBQUM5QixDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDVSxRQUFBLHlCQUF5QixHQUFHLDJCQUEyQixDQUFBO0FBRXBFLGdGQUFnRjtBQUNuRSxRQUFBLHNCQUFzQixHQUFHO0lBQ3BDLGlCQUFpQjtJQUNqQixjQUFjO0lBQ2QsZ0JBQWdCO0lBQ2hCLGtCQUFrQjtDQUNWLENBQUE7QUFVVjs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxzQkFBc0IsR0FBRyxHQUFHLENBQUE7QUFFbEMsZ0ZBQWdGO0FBQ2hGLFNBQVMsWUFB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
@@ -13,22 +13,12 @@ const stock_1 = require("../utils/stock");
13
13
  const removed_1 = require("../utils/removed");
14
14
  const design_1 = require("../utils/design");
15
15
  const bundle_1 = require("../utils/bundle");
16
- const syncProductsStep = (0, workflows_sdk_1.createStep)({
17
- name: "printful-sync-products",
18
- // Runs past the HTTP response and completes on its own — no
19
- // setStepSuccess needed, which is what backgroundExecution adds to async.
16
+ const fetchPrintfulProductsStep = (0, workflows_sdk_1.createStep)({
17
+ name: "printful-fetch-products",
20
18
  async: true,
21
19
  backgroundExecution: true,
22
- // No timeout on purpose. Medusa schedules one only when the step sets it
23
- // (TransactionStep.hasTimeout() returns !!definition.timeout, and
24
- // transaction-orchestrator.js:637 guards on it), so omitting it is the
25
- // safe state. Any value we picked could be exceeded by a large enough
26
- // catalog, and the penalty is a SUCCESSFUL sync being reverted — deleting
27
- // the orphans it was about to link.
28
20
  }, async (input, { container }) => {
29
21
  const printful = container.resolve(printful_1.PRINTFUL_MODULE);
30
- const productModule = container.resolve(utils_1.Modules.PRODUCT);
31
- const logger = container.resolve(utils_1.ContainerRegistrationKeys.LOGGER);
32
22
  const client = await printful.getClient();
33
23
  const options = await printful.getOptions();
34
24
  const storeId = await printful.getStoreId();
@@ -36,49 +26,85 @@ const syncProductsStep = (0, workflows_sdk_1.createStep)({
36
26
  limit: 100,
37
27
  });
38
28
  const toProcess = input.limit != null ? summaries.slice(0, input.limit) : summaries;
39
- const counters = {
40
- created: 0,
41
- updated: 0,
42
- failed: 0,
43
- errors: [],
44
- };
45
- // Products created but not yet linked. A crash leaves exactly these
46
- // invisible to the next sync's findProductLink, so they are the only
47
- // thing the compensation may delete.
48
- const orphans = new orphans_1.OrphanTracker();
49
- // One cache for the whole run, not one per product, so a blank two
50
- // products share costs a single call across the catalogue. Inside a
51
- // product it is what keeps a 756-variant tee at 84 calls instead of 756.
52
- const catalogCache = new design_1.CatalogVariantCache((id) => client.getCatalogVariant(id));
53
- let processed = 0;
54
29
  await printful.heartbeatSyncLog(input.sync_log_id, {
55
30
  products_total: toProcess.length,
56
31
  });
32
+ const detailsMap = new Map();
33
+ let processed = 0;
34
+ const errors = [];
35
+ let failed = 0;
57
36
  for (const summary of toProcess) {
58
37
  if (summary.is_ignored) {
59
38
  continue;
60
39
  }
61
- // Scoped to this iteration so the catch below knows which product, if
62
- // any, this pass created. Set the moment the product exists in Medusa
63
- // and cleared once its link row is written.
64
- let pendingProductId;
65
40
  try {
66
41
  const detail = await client.getSyncProduct(summary.id);
67
42
  if (!detail.sync_variants?.length) {
68
- counters.failed += 1;
69
- counters.errors.push(`Product ${summary.id} has no variants`);
43
+ failed += 1;
44
+ errors.push(`Product ${summary.id} has no variants`);
70
45
  continue;
71
46
  }
72
- // Pass the options wholesale rather than picking fields. Hand-building
73
- // this object is how `onDiscontinued` was silently dropped: every field
74
- // is optional, so omitting one is legal TypeScript and typecheck stayed
75
- // green while the option did nothing. The mapper narrows internally.
76
- const mapped = (0, mappers_1.mapSyncProductToMedusa)(detail, options);
77
- // Design parameters, best-effort. Mutating `mapped.variants` in place
78
- // means both the create and the update path below pick them up from
79
- // the one object, so the two paths cannot drift apart. Every failure
80
- // mode inside — a null answer, a missing catalog id, a throw — returns
81
- // the variant untouched, so this can only ever add metadata.
47
+ detailsMap.set(String(summary.id), detail);
48
+ }
49
+ catch (err) {
50
+ failed += 1;
51
+ const message = err instanceof Error ? err.message : String(err);
52
+ errors.push(`Product ${summary.id}: ${message}`);
53
+ }
54
+ finally {
55
+ processed += 1;
56
+ await printful.heartbeatSyncLog(input.sync_log_id, {
57
+ products_processed: processed,
58
+ products_total: toProcess.length,
59
+ });
60
+ }
61
+ }
62
+ return new workflows_sdk_1.StepResponse({
63
+ toProcess,
64
+ details: Array.from(detailsMap.entries()),
65
+ options,
66
+ storeId,
67
+ initialCounters: {
68
+ created: 0,
69
+ updated: 0,
70
+ failed,
71
+ errors,
72
+ },
73
+ });
74
+ });
75
+ const mapToMedusaProductsStep = (0, workflows_sdk_1.createStep)({
76
+ name: "printful-map-products",
77
+ async: true,
78
+ backgroundExecution: true,
79
+ }, async (input, { container }) => {
80
+ const printful = container.resolve(printful_1.PRINTFUL_MODULE);
81
+ const productModule = container.resolve(utils_1.Modules.PRODUCT);
82
+ const logger = container.resolve(utils_1.ContainerRegistrationKeys.LOGGER);
83
+ const client = await printful.getClient();
84
+ const counters = {
85
+ created: input.initialCounters.created,
86
+ updated: input.initialCounters.updated,
87
+ failed: input.initialCounters.failed,
88
+ errors: [...input.initialCounters.errors],
89
+ };
90
+ const detailsMap = new Map(input.details);
91
+ const catalogCache = new design_1.CatalogVariantCache((id) => client.getCatalogVariant(id));
92
+ const productsToCreate = [];
93
+ const productsToUpdate = [];
94
+ const variantsToCreate = [];
95
+ const variantsToUpdate = [];
96
+ const linksToCreate = [];
97
+ const linksToUpdate = [];
98
+ const reconcileItems = [];
99
+ let processed = 0;
100
+ for (const summary of input.toProcess) {
101
+ if (summary.is_ignored)
102
+ continue;
103
+ const detail = detailsMap.get(String(summary.id));
104
+ if (!detail)
105
+ continue;
106
+ try {
107
+ const mapped = (0, mappers_1.mapSyncProductToMedusa)(detail, input.options);
82
108
  mapped.variants = await (0, design_1.enrichVariantsWithDesign)(mapped.variants, detail.sync_variants, {
83
109
  syncProductId: String(summary.id),
84
110
  getCatalogVariant: (id) => client.getCatalogVariant(id),
@@ -87,10 +113,6 @@ const syncProductsStep = (0, workflows_sdk_1.createStep)({
87
113
  const existingLink = await printful.findProductLink(String(summary.id));
88
114
  if (existingLink?.medusa_product_id) {
89
115
  const productId = existingLink.medusa_product_id;
90
- // Retrieved before the update so the current status and metadata are
91
- // the merchant's, not ours. `mapped.status` is derived from Printful
92
- // stock alone; writing it directly is what republished a product the
93
- // merchant had deliberately drafted.
94
116
  const product = await productModule.retrieveProduct(productId, {
95
117
  relations: ["variants"],
96
118
  });
@@ -100,76 +122,52 @@ const syncProductsStep = (0, workflows_sdk_1.createStep)({
100
122
  currentMetadata: (product.metadata ?? {}),
101
123
  mappedMetadata: mapped.metadata,
102
124
  });
103
- // Update core product fields.
104
- await productModule.updateProducts(productId, {
105
- title: mapped.title,
106
- thumbnail: mapped.thumbnail,
107
- metadata: publication.metadata,
108
- status: publication.status,
125
+ productsToUpdate.push({
126
+ productId,
127
+ data: {
128
+ title: mapped.title,
129
+ thumbnail: mapped.thumbnail,
130
+ metadata: publication.metadata,
131
+ status: publication.status,
132
+ },
109
133
  });
110
- // Upsert variants so price/assortment changes in Printful reach Medusa.
111
134
  const { toCreate, toUpdate } = (0, mappers_1.diffVariantsForUpsert)(mapped.variants, (product.variants ?? []).map((pv) => ({
112
135
  id: pv.id,
113
136
  metadata: pv.metadata,
114
137
  })));
115
- if (toUpdate.length) {
116
- await (0, core_flows_1.batchProductVariantsWorkflow)(container).run({
117
- input: {
118
- update: toUpdate.map((u) => ({
119
- id: u.id,
120
- title: u.title,
121
- prices: u.prices,
122
- metadata: u.metadata,
123
- })),
124
- },
138
+ for (const u of toUpdate) {
139
+ variantsToUpdate.push({
140
+ id: u.id,
141
+ title: u.title,
142
+ prices: u.prices,
143
+ metadata: u.metadata,
125
144
  });
126
145
  }
127
- if (toCreate.length) {
128
- await (0, core_flows_1.batchProductVariantsWorkflow)(container).run({
129
- input: {
130
- create: toCreate.map((c) => ({
131
- product_id: productId,
132
- title: c.title,
133
- sku: c.sku,
134
- options: c.options,
135
- prices: c.prices,
136
- metadata: c.metadata,
137
- manage_inventory: c.manage_inventory,
138
- allow_backorder: c.allow_backorder,
139
- })),
140
- },
146
+ for (const c of toCreate) {
147
+ variantsToCreate.push({
148
+ product_id: productId,
149
+ title: c.title,
150
+ sku: c.sku,
151
+ options: c.options,
152
+ prices: c.prices,
153
+ metadata: c.metadata,
154
+ manage_inventory: c.manage_inventory,
155
+ allow_backorder: c.allow_backorder,
141
156
  });
142
- // No link loop here: the reconcile below re-reads the product, so
143
- // these new variants are in its scope and get linked there.
144
157
  }
145
- // Refresh existing variant links AND create any that are missing.
146
- // Re-read the variants so freshly-created ones are in scope; the
147
- // copy fetched for the diff predates the batch create above.
148
- //
149
- // The refresh-only loop this replaces could never repair a link row
150
- // that failed to write, because `diffVariantsForUpsert` matches on
151
- // variant metadata rather than link rows — so the variant looked
152
- // already-synced and its row was never written again.
153
- const linked = await productModule.retrieveProduct(productId, {
154
- relations: ["variants"],
158
+ linksToUpdate.push({
159
+ linkId: existingLink.id,
160
+ syncProductId: String(summary.id),
161
+ medusaProductId: productId,
155
162
  });
156
- await (0, variant_links_1.reconcileVariantLinks)(printful, {
157
- storeId,
163
+ reconcileItems.push({
158
164
  syncProductId: String(summary.id),
165
+ medusaProductId: productId,
159
166
  syncVariantIds: detail.sync_variants.map((v) => v.id),
160
- medusaVariants: (linked.variants ?? []).map((pv) => ({
161
- id: pv.id,
162
- metadata: pv.metadata,
163
- })),
164
- });
165
- await printful.updatePrintfulProductLinks({
166
- id: existingLink.id,
167
- last_synced_at: new Date(),
167
+ isCreate: false,
168
168
  });
169
- counters.updated += 1;
170
169
  }
171
170
  else {
172
- // Ensure unique handle if collision
173
171
  let handle = mapped.handle;
174
172
  try {
175
173
  const existing = await productModule.listProducts({ handle: [handle] }, { take: 1 });
@@ -178,11 +176,8 @@ const syncProductsStep = (0, workflows_sdk_1.createStep)({
178
176
  }
179
177
  }
180
178
  catch {
181
- // ignore lookup errors
179
+ // ignore
182
180
  }
183
- // A product created already sold out is drafted by the mapper, but
184
- // the mapper writes no marker — so without this the restock path
185
- // would read it as a merchant's own draft and never republish it.
186
181
  const createStock = (0, stock_1.planStockActions)(detail.sync_variants);
187
182
  const createMetadata = {
188
183
  ...mapped.metadata,
@@ -190,152 +185,226 @@ const syncProductsStep = (0, workflows_sdk_1.createStep)({
190
185
  ? { [stock_1.STOCK_MARKER_KEY]: "unavailable" }
191
186
  : {}),
192
187
  };
193
- const { result } = await (0, core_flows_1.createProductsWorkflow)(container).run({
194
- input: {
195
- products: [
196
- {
197
- title: mapped.title,
198
- handle,
199
- status: mapped.status,
200
- thumbnail: mapped.thumbnail,
201
- images: mapped.images,
202
- options: mapped.options,
203
- variants: mapped.variants.map((v) => ({
204
- title: v.title,
205
- sku: v.sku,
206
- options: v.options,
207
- prices: v.prices,
208
- metadata: v.metadata,
209
- manage_inventory: v.manage_inventory,
210
- allow_backorder: v.allow_backorder,
211
- })),
212
- metadata: createMetadata,
213
- external_id: mapped.external_id,
214
- },
215
- ],
216
- },
217
- });
218
- const created = result[0];
219
- orphans.track(created.id);
220
- pendingProductId = created.id;
221
- await printful.createPrintfulProductLinks({
222
- printful_store_id: storeId,
223
- printful_sync_product_id: String(summary.id),
224
- medusa_product_id: created.id,
225
- last_synced_at: new Date(),
188
+ productsToCreate.push({
189
+ title: mapped.title,
190
+ handle,
191
+ status: mapped.status,
192
+ thumbnail: mapped.thumbnail,
193
+ images: mapped.images,
194
+ options: mapped.options,
195
+ variants: mapped.variants.map((v) => ({
196
+ title: v.title,
197
+ sku: v.sku,
198
+ options: v.options,
199
+ prices: v.prices,
200
+ metadata: v.metadata,
201
+ manage_inventory: v.manage_inventory,
202
+ allow_backorder: v.allow_backorder,
203
+ })),
204
+ metadata: createMetadata,
205
+ external_id: mapped.external_id,
226
206
  });
227
- // Linked no longer an orphan, and never to be deleted.
228
- orphans.release(created.id);
229
- pendingProductId = undefined;
230
- // Resumable rather than best-effort: a throw here used to abandon
231
- // every remaining variant, and because the product link row above
232
- // already exists, the next sync took the update path and never went
233
- // back for them. Now one unwritable row costs only that row, and the
234
- // next sync's reconcile picks it up.
235
- await (0, variant_links_1.reconcileVariantLinks)(printful, {
236
- storeId,
207
+ linksToCreate.push({ syncProductId: String(summary.id) });
208
+ reconcileItems.push({
237
209
  syncProductId: String(summary.id),
238
210
  syncVariantIds: detail.sync_variants.map((v) => v.id),
239
- medusaVariants: (created.variants ?? []).map((variant) => ({
240
- id: variant.id,
241
- metadata: variant.metadata,
242
- })),
211
+ isCreate: true,
243
212
  });
244
- counters.created += 1;
245
213
  }
246
214
  }
247
215
  catch (err) {
248
216
  counters.failed += 1;
249
217
  const message = err instanceof Error ? err.message : String(err);
250
218
  counters.errors.push(`Product ${summary.id}: ${message}`);
251
- // The product was created but its link write never landed. The loop
252
- // continues and the step still SUCCEEDS, so compensation — which runs
253
- // only on step failure — will never see this. Left alone it is a
254
- // product stranded in Medusa with no link row: invisible to the next
255
- // sync's findProductLink, which duplicates it.
256
- if (pendingProductId) {
257
- const orphanId = pendingProductId;
258
- try {
259
- await productModule.deleteProducts([orphanId]);
260
- // Released only after a delete that actually happened, so a
261
- // failure here still leaves it for the compensation to retry.
262
- orphans.release(orphanId);
263
- }
264
- catch (deleteErr) {
265
- // Must not mask the original error — that is what gets reported.
266
- logger.error(`Printful sync: could not delete orphaned product ${orphanId} after a failed link write: ${deleteErr instanceof Error
267
- ? deleteErr.message
268
- : String(deleteErr)}`);
269
- }
270
- }
271
219
  }
272
220
  finally {
273
- pendingProductId = undefined;
274
- // In `finally` so it runs however the product exited — success, an
275
- // early `continue`, or a throw. The heartbeat is what keeps the claim
276
- // from being reaped, so a catalog of failures must not starve it.
277
221
  processed += 1;
278
222
  await printful.heartbeatSyncLog(input.sync_log_id, {
279
223
  products_processed: processed,
280
- products_total: toProcess.length,
224
+ products_total: input.toProcess.length,
281
225
  });
282
226
  }
283
227
  }
284
- // Products that disappeared from Printful. Only a full catalogue pass may
285
- // do this — a `limit` would treat everything beyond the page as removed.
286
- // The decision lives in `shouldRunRemovalPass` so it is covered by a test:
287
- // this is the one condition whose failure unpublishes a live catalogue.
288
- {
289
- const removalPolicy = options.onRemovedFromPrintful ?? "unpublish";
290
- if ((0, removed_1.shouldRunRemovalPass)({ policy: removalPolicy, limit: input.limit })) {
228
+ logger.info(`Printful sync: ${catalogCache.calls} catalog variant call(s) for design parameters`);
229
+ return new workflows_sdk_1.StepResponse({
230
+ productsToCreate,
231
+ productsToUpdate,
232
+ variantsToCreate,
233
+ variantsToUpdate,
234
+ linksToCreate,
235
+ linksToUpdate,
236
+ reconcileItems,
237
+ counters,
238
+ catalogCacheCalls: catalogCache.calls,
239
+ });
240
+ });
241
+ const updateMedusaProductsStep = (0, workflows_sdk_1.createStep)("printful-update-medusa-products", async (productsToUpdate, { container }) => {
242
+ const productModule = container.resolve(utils_1.Modules.PRODUCT);
243
+ for (const update of productsToUpdate) {
244
+ await productModule.updateProducts(update.productId, update.data);
245
+ }
246
+ return new workflows_sdk_1.StepResponse(null);
247
+ });
248
+ const syncLinksStep = (0, workflows_sdk_1.createStep)("printful-sync-links", async (input, { container }) => {
249
+ const printful = container.resolve(printful_1.PRINTFUL_MODULE);
250
+ const productModule = container.resolve(utils_1.Modules.PRODUCT);
251
+ const logger = container.resolve(utils_1.ContainerRegistrationKeys.LOGGER);
252
+ const counters = {
253
+ created: input.counters.created,
254
+ updated: input.counters.updated,
255
+ failed: input.counters.failed,
256
+ errors: [...input.counters.errors],
257
+ };
258
+ const orphans = new orphans_1.OrphanTracker();
259
+ const createdBySyncId = new Map();
260
+ if (input.createdProducts && Array.isArray(input.createdProducts)) {
261
+ for (const cp of input.createdProducts) {
262
+ if (cp.external_id) {
263
+ createdBySyncId.set(cp.external_id, cp);
264
+ }
265
+ }
266
+ }
267
+ for (const lc of input.linksToCreate) {
268
+ const created = createdBySyncId.get(lc.syncProductId);
269
+ if (!created) {
270
+ counters.failed += 1;
271
+ counters.errors.push(`Product ${lc.syncProductId} created but not found in output`);
272
+ continue;
273
+ }
274
+ orphans.track(created.id);
275
+ try {
276
+ await printful.createPrintfulProductLinks({
277
+ printful_store_id: input.storeId,
278
+ printful_sync_product_id: lc.syncProductId,
279
+ medusa_product_id: created.id,
280
+ last_synced_at: new Date(),
281
+ });
282
+ orphans.release(created.id);
283
+ counters.created += 1;
284
+ }
285
+ catch (err) {
286
+ counters.failed += 1;
287
+ const message = err instanceof Error ? err.message : String(err);
288
+ counters.errors.push(`Product ${lc.syncProductId}: ${message}`);
291
289
  try {
292
- const seenIds = summaries.map((s) => String(s.id));
293
- // Include ignored Printful rows: they still exist in the store.
294
- const links = await printful.listPrintfulProductLinks({ printful_store_id: storeId }, { take: 100_000 });
295
- const missing = (0, removed_1.findMissingSyncProductLinks)(links, seenIds);
296
- for (const link of missing) {
297
- try {
298
- const product = await productModule.retrieveProduct(link.medusa_product_id);
299
- const plan = (0, removed_1.planRemovedProductWrite)({
300
- policy: removalPolicy,
301
- currentStatus: product.status === "published" ? "published" : "draft",
302
- currentMetadata: (product.metadata ?? {}),
290
+ await productModule.deleteProducts([created.id]);
291
+ orphans.release(created.id);
292
+ }
293
+ catch (deleteErr) {
294
+ logger.error(`Printful sync: could not delete orphaned product ${created.id} after a failed link write: ${deleteErr instanceof Error ? deleteErr.message : String(deleteErr)}`);
295
+ }
296
+ }
297
+ }
298
+ for (const lu of input.linksToUpdate) {
299
+ try {
300
+ await printful.updatePrintfulProductLinks({
301
+ id: lu.linkId,
302
+ last_synced_at: new Date(),
303
+ });
304
+ counters.updated += 1;
305
+ }
306
+ catch (err) {
307
+ counters.failed += 1;
308
+ const message = err instanceof Error ? err.message : String(err);
309
+ counters.errors.push(`Product update link ${lu.syncProductId}: ${message}`);
310
+ }
311
+ }
312
+ for (const item of input.reconcileItems) {
313
+ try {
314
+ const medusaProductId = item.isCreate
315
+ ? createdBySyncId.get(item.syncProductId)?.id
316
+ : item.medusaProductId;
317
+ if (!medusaProductId)
318
+ continue;
319
+ const linked = await productModule.retrieveProduct(medusaProductId, {
320
+ relations: ["variants"],
321
+ });
322
+ await (0, variant_links_1.reconcileVariantLinks)(printful, {
323
+ storeId: input.storeId,
324
+ syncProductId: item.syncProductId,
325
+ syncVariantIds: item.syncVariantIds,
326
+ medusaVariants: (linked.variants ?? []).map((pv) => ({
327
+ id: pv.id,
328
+ metadata: pv.metadata,
329
+ })),
330
+ });
331
+ }
332
+ catch (err) {
333
+ const message = err instanceof Error ? err.message : String(err);
334
+ logger.error(`Failed to reconcile variant links for ${item.syncProductId}: ${message}`);
335
+ }
336
+ }
337
+ return new workflows_sdk_1.StepResponse({ counters, orphanProductIds: orphans.toDelete() }, { orphanProductIds: orphans.toDelete() });
338
+ }, async (compensateInput, { container }) => {
339
+ if (!compensateInput?.orphanProductIds?.length) {
340
+ return;
341
+ }
342
+ const productModule = container.resolve(utils_1.Modules.PRODUCT);
343
+ const logger = container.resolve(utils_1.ContainerRegistrationKeys.LOGGER);
344
+ for (const id of compensateInput.orphanProductIds) {
345
+ try {
346
+ await productModule.deleteProducts([id]);
347
+ }
348
+ catch (err) {
349
+ logger.error(`Printful sync rollback: could not delete orphaned product ${id}: ${err instanceof Error ? err.message : String(err)}`);
350
+ }
351
+ }
352
+ logger.info(`Printful sync rolled back ${compensateInput.orphanProductIds.length} orphaned product(s)`);
353
+ });
354
+ const removalsAndBundlesStep = (0, workflows_sdk_1.createStep)({
355
+ name: "printful-removals-bundles",
356
+ async: true,
357
+ backgroundExecution: true,
358
+ }, async (input, { container }) => {
359
+ const printful = container.resolve(printful_1.PRINTFUL_MODULE);
360
+ const productModule = container.resolve(utils_1.Modules.PRODUCT);
361
+ const logger = container.resolve(utils_1.ContainerRegistrationKeys.LOGGER);
362
+ const counters = {
363
+ created: input.counters.created,
364
+ updated: input.counters.updated,
365
+ failed: input.counters.failed,
366
+ errors: [...input.counters.errors],
367
+ };
368
+ const removalPolicy = input.options.onRemovedFromPrintful ?? "unpublish";
369
+ if ((0, removed_1.shouldRunRemovalPass)({ policy: removalPolicy, limit: input.limit })) {
370
+ try {
371
+ const seenIds = input.summaries.map((s) => String(s.id));
372
+ const links = await printful.listPrintfulProductLinks({ printful_store_id: input.storeId }, { take: 100_000 });
373
+ const missing = (0, removed_1.findMissingSyncProductLinks)(links, seenIds);
374
+ for (const link of missing) {
375
+ try {
376
+ const product = await productModule.retrieveProduct(link.medusa_product_id);
377
+ const plan = (0, removed_1.planRemovedProductWrite)({
378
+ policy: removalPolicy,
379
+ currentStatus: product.status === "published" ? "published" : "draft",
380
+ currentMetadata: (product.metadata ?? {}),
381
+ });
382
+ if (plan.action === "unpublish") {
383
+ await productModule.updateProducts(link.medusa_product_id, {
384
+ status: plan.status,
385
+ metadata: plan.metadata,
303
386
  });
304
- if (plan.action === "unpublish") {
305
- await productModule.updateProducts(link.medusa_product_id, {
306
- status: plan.status,
307
- metadata: plan.metadata,
308
- });
309
- counters.updated += 1;
310
- }
311
- }
312
- catch (err) {
313
- counters.failed += 1;
314
- const message = err instanceof Error ? err.message : String(err);
315
- counters.errors.push(`Removed product ${link.printful_sync_product_id}: ${message}`);
387
+ counters.updated += 1;
316
388
  }
317
- await printful.heartbeatSyncLog(input.sync_log_id, {
318
- products_processed: processed,
319
- products_total: toProcess.length,
320
- });
321
389
  }
390
+ catch (err) {
391
+ counters.failed += 1;
392
+ const message = err instanceof Error ? err.message : String(err);
393
+ counters.errors.push(`Removed product ${link.printful_sync_product_id}: ${message}`);
394
+ }
395
+ await printful.heartbeatSyncLog(input.sync_log_id, {
396
+ products_processed: input.summaries.length,
397
+ products_total: input.summaries.length,
398
+ });
322
399
  }
323
- catch (err) {
324
- counters.failed += 1;
325
- const message = err instanceof Error ? err.message : String(err);
326
- counters.errors.push(`Removal pass failed: ${message}`);
327
- logger.error(`Printful sync removal pass failed: ${message}`);
328
- }
400
+ }
401
+ catch (err) {
402
+ counters.failed += 1;
403
+ const message = err instanceof Error ? err.message : String(err);
404
+ counters.errors.push(`Removal pass failed: ${message}`);
405
+ logger.error(`Printful sync removal pass failed: ${message}`);
329
406
  }
330
407
  }
331
- // Bundles. They have no Printful product of their own, so the loop above
332
- // never reaches them: nothing in `summaries` names a bundle. Without this
333
- // pass a bundle stays on sale after a member sells out, and every order
334
- // containing it fails at Printful.
335
- //
336
- // Only after a full pass, for the same reason the removal pass is gated: a
337
- // `limit` leaves most members unrefreshed, and deciding availability from
338
- // stale metadata would draft bundles on last week's stock.
339
408
  if (!input.limit) {
340
409
  try {
341
410
  const products = await productModule.listProducts({}, { take: 100_000, relations: ["variants"] });
@@ -367,63 +436,91 @@ const syncProductsStep = (0, workflows_sdk_1.createStep)({
367
436
  }
368
437
  }
369
438
  catch (err) {
370
- // Isolated like the removal pass: bundles are a small part of the
371
- // catalogue, and failing to reconcile them must not fail a sync that
372
- // otherwise imported every product correctly.
373
439
  counters.failed += 1;
374
440
  const message = err instanceof Error ? err.message : String(err);
375
441
  counters.errors.push(`Bundle pass failed: ${message}`);
376
442
  logger.error(`Printful sync bundle pass failed: ${message}`);
377
443
  }
378
444
  }
379
- // The number to watch. If this ever approaches the variant count rather
380
- // than the distinct product-and-colour count, the probe key has regressed.
381
- logger.info(`Printful sync: ${catalogCache.calls} catalog variant call(s) for design parameters`);
382
- return new workflows_sdk_1.StepResponse(counters, { orphanProductIds: orphans.toDelete() });
383
- }, async (compensateInput, { container }) => {
384
- if (!compensateInput?.orphanProductIds?.length) {
385
- return;
386
- }
387
- const productModule = container.resolve(utils_1.Modules.PRODUCT);
388
- const logger = container.resolve(utils_1.ContainerRegistrationKeys.LOGGER);
389
- // Delete through the product module so variants, prices, and images go
390
- // with the product rather than being orphaned a second time.
391
- for (const id of compensateInput.orphanProductIds) {
392
- try {
393
- await productModule.deleteProducts([id]);
394
- }
395
- catch (err) {
396
- logger.error(`Printful sync rollback: could not delete orphaned product ${id}: ${err instanceof Error ? err.message : String(err)}`);
397
- }
398
- }
399
- logger.info(`Printful sync rolled back ${compensateInput.orphanProductIds.length} orphaned product(s)`);
445
+ return new workflows_sdk_1.StepResponse(counters);
400
446
  });
401
447
  const finalizeSyncLogStep = (0, workflows_sdk_1.createStep)("printful-finalize-sync-log", async (input, { container }) => {
402
448
  const printful = container.resolve(printful_1.PRINTFUL_MODULE);
403
- const log = await printful.updatePrintfulSyncLogs({
404
- id: input.logId,
405
- status: (0, sync_status_1.planSyncLogStatus)(input.counters),
406
- finished_at: new Date(),
407
- products_created: input.counters.created,
408
- products_updated: input.counters.updated,
409
- products_failed: input.counters.failed,
410
- error_message: input.counters.errors.length > 0
411
- ? input.counters.errors.slice(0, 20).join("\n")
412
- : null,
413
- });
414
- return new workflows_sdk_1.StepResponse(log);
449
+ const logger = container.resolve(utils_1.ContainerRegistrationKeys.LOGGER);
450
+ try {
451
+ const status = (0, sync_status_1.planSyncLogStatus)(input.counters);
452
+ const log = await printful.updatePrintfulSyncLogs({
453
+ id: input.logId,
454
+ status,
455
+ finished_at: new Date(),
456
+ products_created: input.counters.created,
457
+ products_updated: input.counters.updated,
458
+ products_failed: input.counters.failed,
459
+ error_message: input.counters.errors.length > 0
460
+ ? input.counters.errors.slice(0, 20).join("\n")
461
+ : null,
462
+ });
463
+ logger.info(`Printful sync completed with status ${status}: ` +
464
+ `${input.counters.created} created, ` +
465
+ `${input.counters.updated} updated, ` +
466
+ `${input.counters.failed} failed`);
467
+ return new workflows_sdk_1.StepResponse(log);
468
+ }
469
+ catch (err) {
470
+ logger.error(`Printful sync could not finalize log ${input.logId}: ${err instanceof Error ? err.message : String(err)}`);
471
+ throw err;
472
+ }
415
473
  });
416
474
  exports.syncProductsWorkflow = (0, workflows_sdk_1.createWorkflow)("printful-sync-products", (input) => {
417
- const counters = syncProductsStep(input);
418
- const finalizeInput = (0, workflows_sdk_1.transform)({ input, counters }, (data) => ({
475
+ const fetchRes = fetchPrintfulProductsStep(input);
476
+ const mapRes = mapToMedusaProductsStep({
477
+ sync_log_id: input.sync_log_id,
478
+ toProcess: fetchRes.toProcess,
479
+ details: fetchRes.details,
480
+ options: fetchRes.options,
481
+ storeId: fetchRes.storeId,
482
+ initialCounters: fetchRes.initialCounters,
483
+ });
484
+ const createProductsInput = (0, workflows_sdk_1.transform)({ productsToCreate: mapRes.productsToCreate }, (data) => ({
485
+ input: { products: data.productsToCreate },
486
+ }));
487
+ const createdProducts = core_flows_1.createProductsWorkflow.runAsStep(createProductsInput);
488
+ updateMedusaProductsStep(mapRes.productsToUpdate);
489
+ const batchVariantsInput = (0, workflows_sdk_1.transform)({
490
+ variantsToCreate: mapRes.variantsToCreate,
491
+ variantsToUpdate: mapRes.variantsToUpdate,
492
+ }, (data) => ({
493
+ input: {
494
+ create: data.variantsToCreate,
495
+ update: data.variantsToUpdate,
496
+ },
497
+ }));
498
+ core_flows_1.batchProductVariantsWorkflow.runAsStep(batchVariantsInput);
499
+ const linkRes = syncLinksStep({
500
+ createdProducts,
501
+ linksToCreate: mapRes.linksToCreate,
502
+ linksToUpdate: mapRes.linksToUpdate,
503
+ reconcileItems: mapRes.reconcileItems,
504
+ storeId: fetchRes.storeId,
505
+ counters: mapRes.counters,
506
+ });
507
+ const finalCounters = removalsAndBundlesStep({
508
+ sync_log_id: input.sync_log_id,
509
+ limit: input.limit,
510
+ storeId: fetchRes.storeId,
511
+ options: fetchRes.options,
512
+ summaries: fetchRes.toProcess,
513
+ counters: linkRes.counters,
514
+ });
515
+ const finalizeInput = (0, workflows_sdk_1.transform)({ input, counters: finalCounters }, (data) => ({
419
516
  logId: data.input.sync_log_id,
420
517
  counters: data.counters,
421
518
  }));
422
519
  const finalLog = finalizeSyncLogStep(finalizeInput);
423
520
  return new workflows_sdk_1.WorkflowResponse({
424
521
  sync_log: finalLog,
425
- counters,
522
+ counters: finalCounters,
426
523
  });
427
524
  });
428
525
  exports.default = exports.syncProductsWorkflow;
429
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3luYy1wcm9kdWN0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy93b3JrZmxvd3Mvc3luYy1wcm9kdWN0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxxRUFNMEM7QUFDMUMsNERBR29DO0FBQ3BDLHFEQUE4RTtBQUM5RSxrREFBcUQ7QUFFckQsOENBQWdGO0FBQ2hGLDhDQUFnRDtBQUNoRCwwREFBOEQ7QUFDOUQsc0RBQXdEO0FBQ3hELDBDQUl1QjtBQUN2Qiw4Q0FLeUI7QUFDekIsNENBQStFO0FBQy9FLDRDQUEyRTtBQWdCM0UsTUFBTSxnQkFBZ0IsR0FBRyxJQUFBLDBCQUFVLEVBQ2pDO0lBQ0UsSUFBSSxFQUFFLHdCQUF3QjtJQUM5Qiw0REFBNEQ7SUFDNUQsMEVBQTBFO0lBQzFFLEtBQUssRUFBRSxJQUFJO0lBQ1gsbUJBQW1CLEVBQUUsSUFBSTtJQUN6Qix5RUFBeUU7SUFDekUsa0VBQWtFO0lBQ2xFLHVFQUF1RTtJQUN2RSxzRUFBc0U7SUFDdEUsMEVBQTBFO0lBQzFFLG9DQUFvQztDQUNyQyxFQUNELEtBQUssRUFBRSxLQUF3QixFQUFFLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRTtJQUNoRCxNQUFNLFFBQVEsR0FBMEIsU0FBUyxDQUFDLE9BQU8sQ0FBQywwQkFBZSxDQUFDLENBQUE7SUFDMUUsTUFBTSxhQUFhLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxlQUFPLENBQUMsT0FBTyxDQUFDLENBQUE7SUFDeEQsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxpQ0FBeUIsQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUNsRSxNQUFNLE1BQU0sR0FBRyxNQUFNLFFBQVEsQ0FBQyxTQUFTLEVBQUUsQ0FBQTtJQUN6QyxNQUFNLE9BQU8sR0FBRyxNQUFNLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQTtJQUMzQyxNQUFNLE9BQU8sR0FBRyxNQUFNLFFBQVEsQ0FBQyxVQUFVLEVBQUUs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
526
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3luYy1wcm9kdWN0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy93b3JrZmxvd3Mvc3luYy1wcm9kdWN0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxxRUFNMEM7QUFDMUMsNERBR29DO0FBQ3BDLHFEQUE4RTtBQUM5RSxrREFBcUQ7QUFFckQsOENBQWdGO0FBQ2hGLDhDQUFnRDtBQUNoRCwwREFBOEQ7QUFDOUQsc0RBQXdEO0FBQ3hELDBDQUl1QjtBQUN2Qiw4Q0FLeUI7QUFDekIsNENBQStFO0FBQy9FLDRDQUEyRTtBQWlDM0UsTUFBTSx5QkFBeUIsR0FBRyxJQUFBLDBCQUFVLEVBQzFDO0lBQ0UsSUFBSSxFQUFFLHlCQUF5QjtJQUMvQixLQUFLLEVBQUUsSUFBSTtJQUNYLG1CQUFtQixFQUFFLElBQUk7Q0FDMUIsRUFDRCxLQUFLLEVBQUUsS0FBd0IsRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUU7SUFDaEQsTUFBTSxRQUFRLEdBQTBCLFNBQVMsQ0FBQyxPQUFPLENBQUMsMEJBQWUsQ0FBQyxDQUFBO0lBQzFFLE1BQU0sTUFBTSxHQUFHLE1BQU0sUUFBUSxDQUFDLFNBQVMsRUFBRSxDQUFBO0lBQ3pDLE1BQU0sT0FBTyxHQUFHLE1BQU0sUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFBO0lBQzNDLE1BQU0sT0FBTyxHQUFHLE1BQU0sUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFBO0lBRTNDLE1BQU0sU0FBUyxHQUFHLE1BQU0sTUFBTSxDQUFDLG1CQUFtQixDQUFDO1FBQ2pELEtBQUssRUFBRSxHQUFHO0tBQ1gsQ0FBQyxDQUFBO0lBRUYsTUFBTSxTQUFTLEdBQ2IsS0FBSyxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFBO0lBRW5FLE1BQU0sUUFB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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@legenki/print2medusa",
3
- "version": "0.9.4",
3
+ "version": "0.9.5",
4
4
  "description": "Printful → Medusa v2 plugin: product sync, auto fulfillment, and admin tools",
5
5
  "author": "Andy Legenki",
6
6
  "license": "MIT",