@devx-commerce/plugin-gati 0.0.34-beta.75 → 0.0.34-beta.76

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.
@@ -17,7 +17,9 @@ exports.applyGoldRatePriceChange = applyGoldRatePriceChange;
17
17
  *
18
18
  * There is no Medusa guard blocking this on completed/fulfilled orders. It will
19
19
  * throw if the order already has an active (pending/requested) change, so call
20
- * sites should wrap this in try/catch and treat failures as non-fatal.
20
+ * sites should wrap this in try/catch and treat failures as non-fatal. On any
21
+ * failure mid-flight it declines the change it created, so a failed reprice
22
+ * never leaves a dangling active change that would block the order.
21
23
  *
22
24
  * `orderService` is the resolved Order Module service (Modules.ORDER).
23
25
  */
@@ -31,19 +33,40 @@ async function applyGoldRatePriceChange(orderService, input) {
31
33
  created_by: "system",
32
34
  metadata: input.history_metadata ?? {},
33
35
  });
34
- // One ITEM_UPDATE action per repriced item, all under the same order change.
35
- await orderService.addOrderAction(input.items.map((it) => ({
36
- order_change_id: orderChange.id,
37
- action: "item_update",
38
- details: {
39
- reference_id: it.item_id,
40
- quantity: it.quantity,
41
- unit_price: it.new_unit_price,
42
- },
43
- })));
44
- await orderService.confirmOrderChange({
45
- id: orderChange.id,
46
- confirmed_by: "system",
47
- });
36
+ // createOrderChange confirmOrderChange is NOT atomic: createOrderChange
37
+ // immediately persists a PENDING change (and bumps order.version). Medusa
38
+ // allows only ONE active (pending/requested) change per order, so if either
39
+ // step below throws, the dangling PENDING change permanently blocks EVERY
40
+ // future order change on this order — repricing AND fulfillment alike. The
41
+ // call sites here swallow the throw as non-fatal, which would otherwise brick
42
+ // the order silently. Decline the change on failure so it can never linger.
43
+ try {
44
+ // One ITEM_UPDATE action per repriced item, all under the same order change.
45
+ await orderService.addOrderAction(input.items.map((it) => ({
46
+ order_change_id: orderChange.id,
47
+ action: "item_update",
48
+ details: {
49
+ reference_id: it.item_id,
50
+ quantity: it.quantity,
51
+ unit_price: it.new_unit_price,
52
+ },
53
+ })));
54
+ await orderService.confirmOrderChange({
55
+ id: orderChange.id,
56
+ confirmed_by: "system",
57
+ });
58
+ }
59
+ catch (err) {
60
+ // Best-effort rollback: declining moves it out of the active
61
+ // (pending/requested) set so it stops blocking the order. Keep the original
62
+ // error as the thrown one even if cleanup also fails.
63
+ try {
64
+ await orderService.declineOrderChange(orderChange.id);
65
+ }
66
+ catch {
67
+ // swallow cleanup failure; rethrow the real error below
68
+ }
69
+ throw err;
70
+ }
48
71
  }
49
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwbHktZ29sZC1yYXRlLXByaWNlLWNoYW5nZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy93b3JrZmxvd3Mvb3JkZXJzL3V0aWxzL2FwcGx5LWdvbGQtcmF0ZS1wcmljZS1jaGFuZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUE4Q0EsNERBK0JDO0FBbkREOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUJHO0FBQ0ksS0FBSyxVQUFVLHdCQUF3QixDQUM1QyxZQUFpQixFQUNqQixLQUFvQztJQUVwQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxNQUFNO1FBQUUsT0FBTztJQUVqQyxNQUFNLFdBQVcsR0FBRyxNQUFNLFlBQVksQ0FBQyxpQkFBaUIsQ0FBQztRQUN2RCxRQUFRLEVBQUUsS0FBSyxDQUFDLFFBQVE7UUFDeEIsV0FBVyxFQUFFLGNBQWM7UUFDM0IsV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXLElBQUksa0JBQWtCO1FBQ3BELFVBQVUsRUFBRSxRQUFRO1FBQ3BCLFFBQVEsRUFBRSxLQUFLLENBQUMsZ0JBQWdCLElBQUksRUFBRTtLQUN2QyxDQUFDLENBQUM7SUFFSCw2RUFBNkU7SUFDN0UsTUFBTSxZQUFZLENBQUMsY0FBYyxDQUMvQixLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUN2QixlQUFlLEVBQUUsV0FBVyxDQUFDLEVBQUU7UUFDL0IsTUFBTSxFQUFFLGFBQWE7UUFDckIsT0FBTyxFQUFFO1lBQ1AsWUFBWSxFQUFFLEVBQUUsQ0FBQyxPQUFPO1lBQ3hCLFFBQVEsRUFBRSxFQUFFLENBQUMsUUFBUTtZQUNyQixVQUFVLEVBQUUsRUFBRSxDQUFDLGNBQWM7U0FDOUI7S0FDRixDQUFDLENBQUMsQ0FDSixDQUFDO0lBRUYsTUFBTSxZQUFZLENBQUMsa0JBQWtCLENBQUM7UUFDcEMsRUFBRSxFQUFFLFdBQVcsQ0FBQyxFQUFFO1FBQ2xCLFlBQVksRUFBRSxRQUFRO0tBQ3ZCLENBQUMsQ0FBQztBQUNMLENBQUMifQ==
72
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwbHktZ29sZC1yYXRlLXByaWNlLWNoYW5nZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy93b3JrZmxvd3Mvb3JkZXJzL3V0aWxzL2FwcGx5LWdvbGQtcmF0ZS1wcmljZS1jaGFuZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFnREEsNERBa0RDO0FBeEVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FxQkc7QUFDSSxLQUFLLFVBQVUsd0JBQXdCLENBQzVDLFlBQWlCLEVBQ2pCLEtBQW9DO0lBRXBDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLE1BQU07UUFBRSxPQUFPO0lBRWpDLE1BQU0sV0FBVyxHQUFHLE1BQU0sWUFBWSxDQUFDLGlCQUFpQixDQUFDO1FBQ3ZELFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUTtRQUN4QixXQUFXLEVBQUUsY0FBYztRQUMzQixXQUFXLEVBQUUsS0FBSyxDQUFDLFdBQVcsSUFBSSxrQkFBa0I7UUFDcEQsVUFBVSxFQUFFLFFBQVE7UUFDcEIsUUFBUSxFQUFFLEtBQUssQ0FBQyxnQkFBZ0IsSUFBSSxFQUFFO0tBQ3ZDLENBQUMsQ0FBQztJQUVILDBFQUEwRTtJQUMxRSwwRUFBMEU7SUFDMUUsNEVBQTRFO0lBQzVFLDBFQUEwRTtJQUMxRSwyRUFBMkU7SUFDM0UsOEVBQThFO0lBQzlFLDRFQUE0RTtJQUM1RSxJQUFJLENBQUM7UUFDSCw2RUFBNkU7UUFDN0UsTUFBTSxZQUFZLENBQUMsY0FBYyxDQUMvQixLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUN2QixlQUFlLEVBQUUsV0FBVyxDQUFDLEVBQUU7WUFDL0IsTUFBTSxFQUFFLGFBQWE7WUFDckIsT0FBTyxFQUFFO2dCQUNQLFlBQVksRUFBRSxFQUFFLENBQUMsT0FBTztnQkFDeEIsUUFBUSxFQUFFLEVBQUUsQ0FBQyxRQUFRO2dCQUNyQixVQUFVLEVBQUUsRUFBRSxDQUFDLGNBQWM7YUFDOUI7U0FDRixDQUFDLENBQUMsQ0FDSixDQUFDO1FBRUYsTUFBTSxZQUFZLENBQUMsa0JBQWtCLENBQUM7WUFDcEMsRUFBRSxFQUFFLFdBQVcsQ0FBQyxFQUFFO1lBQ2xCLFlBQVksRUFBRSxRQUFRO1NBQ3ZCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ2IsNkRBQTZEO1FBQzdELDRFQUE0RTtRQUM1RSxzREFBc0Q7UUFDdEQsSUFBSSxDQUFDO1lBQ0gsTUFBTSxZQUFZLENBQUMsa0JBQWtCLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3hELENBQUM7UUFBQyxNQUFNLENBQUM7WUFDUCx3REFBd0Q7UUFDMUQsQ0FBQztRQUNELE1BQU0sR0FBRyxDQUFDO0lBQ1osQ0FBQztBQUNILENBQUMifQ==
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@devx-commerce/plugin-gati",
3
- "version": "0.0.34-beta.75",
3
+ "version": "0.0.34-beta.76",
4
4
  "description": "Gati ERP integration for Medusa",
5
5
  "author": "devx commerce",
6
6
  "license": "MIT",