@hszrdm/core 1.4.0 → 1.5.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.
Files changed (141) hide show
  1. package/.medusa/server/src/admin/index.js +5582 -3769
  2. package/.medusa/server/src/admin/index.mjs +5582 -3769
  3. package/.medusa/server/src/api/admin/back-in-stock/route.d.ts +2 -0
  4. package/.medusa/server/src/api/admin/back-in-stock/route.js +70 -0
  5. package/.medusa/server/src/api/admin/customer-activation/route.d.ts +2 -0
  6. package/.medusa/server/src/api/admin/customer-activation/route.js +97 -0
  7. package/.medusa/server/src/api/admin/customer-import/route.d.ts +2 -0
  8. package/.medusa/server/src/api/admin/customer-import/route.js +166 -0
  9. package/.medusa/server/src/api/admin/order-export/route.d.ts +2 -0
  10. package/.medusa/server/src/api/admin/order-export/route.js +88 -0
  11. package/.medusa/server/src/api/admin/product-migration/inventory/route.d.ts +3 -0
  12. package/.medusa/server/src/api/admin/product-migration/inventory/route.js +164 -0
  13. package/.medusa/server/src/api/admin/product-migration/price-list-prices/route.d.ts +3 -0
  14. package/.medusa/server/src/api/admin/product-migration/price-list-prices/route.js +204 -0
  15. package/.medusa/server/src/api/admin/product-migration/products/route.d.ts +2 -0
  16. package/.medusa/server/src/api/admin/product-migration/products/route.js +24 -0
  17. package/.medusa/server/src/api/admin/product-reviews/[id]/route.js +36 -4
  18. package/.medusa/server/src/api/admin/product-reviews/settings/route.d.ts +3 -0
  19. package/.medusa/server/src/api/admin/product-reviews/settings/route.js +63 -0
  20. package/.medusa/server/src/api/admin/system-runtime/route.d.ts +2 -0
  21. package/.medusa/server/src/api/admin/system-runtime/route.js +18 -0
  22. package/.medusa/server/src/api/hooks/packeta/status/route.d.ts +2 -0
  23. package/.medusa/server/src/api/hooks/packeta/status/route.js +55 -0
  24. package/.medusa/server/src/api/middlewares.js +16 -1
  25. package/.medusa/server/src/api/store/abandoned-cart/recover/route.d.ts +2 -0
  26. package/.medusa/server/src/api/store/abandoned-cart/recover/route.js +37 -0
  27. package/.medusa/server/src/api/store/back-in-stock/route.d.ts +8 -0
  28. package/.medusa/server/src/api/store/back-in-stock/route.js +124 -0
  29. package/.medusa/server/src/api/store/customer-activation/complete/route.d.ts +2 -0
  30. package/.medusa/server/src/api/store/customer-activation/complete/route.js +96 -0
  31. package/.medusa/server/src/api/store/customer-activation/route.d.ts +2 -0
  32. package/.medusa/server/src/api/store/customer-activation/route.js +34 -0
  33. package/.medusa/server/src/api/store/products/[id]/reviews/route.d.ts +1 -0
  34. package/.medusa/server/src/api/store/products/[id]/reviews/route.js +76 -34
  35. package/.medusa/server/src/api/store/review-request/route.d.ts +2 -0
  36. package/.medusa/server/src/api/store/review-request/route.js +60 -0
  37. package/.medusa/server/src/core/abandoned-cart.d.ts +64 -0
  38. package/.medusa/server/src/core/abandoned-cart.js +197 -0
  39. package/.medusa/server/src/core/back-in-stock.d.ts +51 -0
  40. package/.medusa/server/src/core/back-in-stock.js +107 -0
  41. package/.medusa/server/src/core/checkout-contract.d.ts +1 -0
  42. package/.medusa/server/src/core/checkout-contract.js +2 -1
  43. package/.medusa/server/src/core/customer-account-contract.d.ts +3 -0
  44. package/.medusa/server/src/core/customer-account-contract.js +4 -1
  45. package/.medusa/server/src/core/customer-activation.d.ts +120 -0
  46. package/.medusa/server/src/core/customer-activation.js +169 -0
  47. package/.medusa/server/src/core/customer-email.d.ts +1 -1
  48. package/.medusa/server/src/core/customer-email.js +4 -1
  49. package/.medusa/server/src/core/native-migration-export.d.ts +6 -0
  50. package/.medusa/server/src/core/native-migration-export.js +105 -0
  51. package/.medusa/server/src/core/order-export.d.ts +11 -0
  52. package/.medusa/server/src/core/order-export.js +297 -0
  53. package/.medusa/server/src/core/review-request.d.ts +61 -0
  54. package/.medusa/server/src/core/review-request.js +105 -0
  55. package/.medusa/server/src/core/review-reward.d.ts +94 -0
  56. package/.medusa/server/src/core/review-reward.js +124 -0
  57. package/.medusa/server/src/core/runtime-health.d.ts +39 -0
  58. package/.medusa/server/src/core/runtime-health.js +250 -0
  59. package/.medusa/server/src/core/storefront-core-config.d.ts +10 -0
  60. package/.medusa/server/src/core/storefront-core-config.js +26 -1
  61. package/.medusa/server/src/core/version.d.ts +2 -2
  62. package/.medusa/server/src/core/version.js +2 -2
  63. package/.medusa/server/src/jobs/abandoned-cart-recovery.d.ts +23 -0
  64. package/.medusa/server/src/jobs/abandoned-cart-recovery.js +138 -0
  65. package/.medusa/server/src/jobs/back-in-stock-reconciliation.d.ts +15 -0
  66. package/.medusa/server/src/jobs/back-in-stock-reconciliation.js +90 -0
  67. package/.medusa/server/src/jobs/dpd-statusdata-sync.d.ts +17 -0
  68. package/.medusa/server/src/jobs/dpd-statusdata-sync.js +107 -0
  69. package/.medusa/server/src/jobs/mpl-push-tracking.d.ts +19 -0
  70. package/.medusa/server/src/jobs/mpl-push-tracking.js +183 -0
  71. package/.medusa/server/src/jobs/mpl-status-sync.d.ts +8 -2
  72. package/.medusa/server/src/jobs/mpl-status-sync.js +12 -7
  73. package/.medusa/server/src/jobs/product-review-request-dispatch.d.ts +28 -0
  74. package/.medusa/server/src/jobs/product-review-request-dispatch.js +84 -0
  75. package/.medusa/server/src/jobs/runtime-heartbeat.d.ts +12 -0
  76. package/.medusa/server/src/jobs/runtime-heartbeat.js +13 -0
  77. package/.medusa/server/src/jobs/shipping-status-sync.d.ts +8 -2
  78. package/.medusa/server/src/jobs/shipping-status-sync.js +11 -14
  79. package/.medusa/server/src/lib/modules/shipping/idempotency.js +3 -3
  80. package/.medusa/server/src/lib/modules/shipping/index.d.ts +1 -0
  81. package/.medusa/server/src/lib/modules/shipping/index.js +2 -1
  82. package/.medusa/server/src/lib/modules/shipping/tracking.d.ts +48 -0
  83. package/.medusa/server/src/lib/modules/shipping/tracking.js +368 -0
  84. package/.medusa/server/src/lib/modules/shipping/webhooks.d.ts +6 -9
  85. package/.medusa/server/src/lib/modules/shipping/webhooks.js +24 -137
  86. package/.medusa/server/src/modules/back-in-stock/index.d.ts +23 -0
  87. package/.medusa/server/src/modules/back-in-stock/index.js +16 -0
  88. package/.medusa/server/src/modules/back-in-stock/migrations/Migration20261101202000.d.ts +5 -0
  89. package/.medusa/server/src/modules/back-in-stock/migrations/Migration20261101202000.js +18 -0
  90. package/.medusa/server/src/modules/back-in-stock/models/back-in-stock-subscription.d.ts +13 -0
  91. package/.medusa/server/src/modules/back-in-stock/models/back-in-stock-subscription.js +23 -0
  92. package/.medusa/server/src/modules/back-in-stock/service.d.ts +22 -0
  93. package/.medusa/server/src/modules/back-in-stock/service.js +12 -0
  94. package/.medusa/server/src/modules/email-center/abandoned-cart-registration.d.ts +1 -0
  95. package/.medusa/server/src/modules/email-center/abandoned-cart-registration.js +27 -0
  96. package/.medusa/server/src/modules/email-center/back-in-stock-registration.d.ts +1 -0
  97. package/.medusa/server/src/modules/email-center/back-in-stock-registration.js +27 -0
  98. package/.medusa/server/src/modules/email-center/defaults.js +7 -1
  99. package/.medusa/server/src/modules/email-center/index.d.ts +2 -0
  100. package/.medusa/server/src/modules/email-center/index.js +3 -1
  101. package/.medusa/server/src/modules/integration-settings/abandoned-cart-registration.d.ts +1 -0
  102. package/.medusa/server/src/modules/integration-settings/abandoned-cart-registration.js +30 -0
  103. package/.medusa/server/src/modules/integration-settings/index.d.ts +1 -0
  104. package/.medusa/server/src/modules/integration-settings/index.js +2 -1
  105. package/.medusa/server/src/modules/integration-settings/storefront-public-registration.js +15 -1
  106. package/.medusa/server/src/modules/product-review/index.d.ts +14 -0
  107. package/.medusa/server/src/modules/product-review/migrations/Migration20261101113000.d.ts +5 -0
  108. package/.medusa/server/src/modules/product-review/migrations/Migration20261101113000.js +28 -0
  109. package/.medusa/server/src/modules/product-review/migrations/Migration20261101114500.d.ts +5 -0
  110. package/.medusa/server/src/modules/product-review/migrations/Migration20261101114500.js +20 -0
  111. package/.medusa/server/src/modules/product-review/migrations/Migration20261101121500.d.ts +5 -0
  112. package/.medusa/server/src/modules/product-review/migrations/Migration20261101121500.js +18 -0
  113. package/.medusa/server/src/modules/product-review/models/product-review-settings.d.ts +15 -0
  114. package/.medusa/server/src/modules/product-review/models/product-review-settings.js +19 -0
  115. package/.medusa/server/src/modules/product-review/models/product-review.d.ts +6 -2
  116. package/.medusa/server/src/modules/product-review/models/product-review.js +7 -3
  117. package/.medusa/server/src/modules/product-review/service.d.ts +22 -1
  118. package/.medusa/server/src/modules/product-review/service.js +3 -2
  119. package/.medusa/server/src/providers/dpd/index.d.ts +2 -0
  120. package/.medusa/server/src/providers/dpd/index.js +3 -1
  121. package/.medusa/server/src/providers/dpd/statusdata-ftp.d.ts +16 -0
  122. package/.medusa/server/src/providers/dpd/statusdata-ftp.js +268 -0
  123. package/.medusa/server/src/providers/dpd/statusdata.d.ts +14 -0
  124. package/.medusa/server/src/providers/dpd/statusdata.js +161 -0
  125. package/.medusa/server/src/providers/mpl/client.d.ts +3 -1
  126. package/.medusa/server/src/providers/mpl/client.js +154 -2
  127. package/.medusa/server/src/providers/mpl/service.js +31 -20
  128. package/.medusa/server/src/providers/mpl/types.d.ts +25 -0
  129. package/.medusa/server/src/providers/mpl/types.js +1 -1
  130. package/.medusa/server/src/providers/packeta/index.d.ts +1 -0
  131. package/.medusa/server/src/providers/packeta/index.js +2 -1
  132. package/.medusa/server/src/providers/packeta/push-tracking.d.ts +8 -0
  133. package/.medusa/server/src/providers/packeta/push-tracking.js +96 -0
  134. package/.medusa/server/src/providers/packeta/service.js +22 -2
  135. package/.medusa/server/src/scripts/core-init.d.ts +1 -1
  136. package/.medusa/server/src/scripts/core-init.js +3 -2
  137. package/.medusa/server/src/subscribers/back-in-stock-inventory-changed.d.ts +7 -0
  138. package/.medusa/server/src/subscribers/back-in-stock-inventory-changed.js +65 -0
  139. package/.medusa/server/src/workflows/link-migrated-customer.d.ts +8 -0
  140. package/.medusa/server/src/workflows/link-migrated-customer.js +17 -0
  141. package/package.json +2 -1
@@ -0,0 +1,368 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isTerminalShippingStatus = isTerminalShippingStatus;
4
+ exports.mapPacketaStatus = mapPacketaStatus;
5
+ exports.mapMplPullStatus = mapMplPullStatus;
6
+ exports.mapMplPushStatus = mapMplPushStatus;
7
+ exports.mapDpdStatusdataScanCode = mapDpdStatusdataScanCode;
8
+ exports.applyNormalizedTrackingEvent = applyNormalizedTrackingEvent;
9
+ exports.findOrderByShipmentIdentifiers = findOrderByShipmentIdentifiers;
10
+ exports.shipmentMatches = shipmentMatches;
11
+ const node_crypto_1 = require("node:crypto");
12
+ const operations_1 = require("./operations");
13
+ const state_1 = require("../../../modules/integration-operation/state");
14
+ const TERMINAL = new Set([
15
+ "DELIVERED",
16
+ "RETURNED",
17
+ "CANCELLED",
18
+ ]);
19
+ function isTerminalShippingStatus(value) {
20
+ return TERMINAL.has(String(value || "").toUpperCase());
21
+ }
22
+ function mapPacketaStatus(input) {
23
+ const id = Number(input.statusId);
24
+ const code = String(input.statusCode || "").trim().toLowerCase();
25
+ const returning = input.isReturning === true || input.isReturning === 1 || input.isReturning === "1";
26
+ if (returning && (id === 7 || code.includes("delivered") || code.includes("returned"))) {
27
+ return "RETURNED";
28
+ }
29
+ if (returning)
30
+ return "RETURNING";
31
+ if (code.includes("cancel"))
32
+ return "CANCELLED";
33
+ if (code.includes("returned"))
34
+ return "RETURNED";
35
+ if (code.includes("return"))
36
+ return "RETURNING";
37
+ if (code.includes("delivered"))
38
+ return "DELIVERED";
39
+ if (code.includes("ready for pickup") || code.includes("ready for pick-up"))
40
+ return "AT_PICKUP_POINT";
41
+ if (code.includes("out for delivery"))
42
+ return "OUT_FOR_DELIVERY";
43
+ if (code.includes("received data"))
44
+ return "CREATED";
45
+ if (code.includes("arrived") || code.includes("departed") || code.includes("handed to carrier") || code.includes("prepared for departure")) {
46
+ return "IN_TRANSIT";
47
+ }
48
+ if (id === 1)
49
+ return "CREATED";
50
+ if ([2, 3, 4, 6].includes(id))
51
+ return "IN_TRANSIT";
52
+ if (id === 5)
53
+ return "AT_PICKUP_POINT";
54
+ if (id === 7)
55
+ return "DELIVERED";
56
+ if (id === 25)
57
+ return "IN_TRANSIT";
58
+ return null;
59
+ }
60
+ function mapMplPullStatus(input) {
61
+ const categoryCode = Number(input.categoryCode);
62
+ const category = normalizeText(input.category);
63
+ const description = normalizeText(input.description);
64
+ if (containsAny(description, [
65
+ "feladónak visszakézbesítve",
66
+ "returned to sender",
67
+ "returned to the sender",
68
+ ]))
69
+ return "RETURNED";
70
+ if (containsAny(description, [
71
+ "visszaküldés alatt",
72
+ "return to sender",
73
+ "returning to sender",
74
+ ]))
75
+ return "RETURNING";
76
+ if (containsAny(description, [
77
+ "sikeresen kézbesítve",
78
+ "sikeres kézbesítés",
79
+ "successfully delivered",
80
+ ]))
81
+ return "DELIVERED";
82
+ if (categoryCode === 5 || category.includes("kézbesített") || category.includes("delivered")) {
83
+ // MPL category 5 also contains non-delivery accounting events and
84
+ // return-to-sender events, so never infer DELIVERED from the category alone.
85
+ return null;
86
+ }
87
+ if (categoryCode === 4 || category.includes("kézbesítés") || category.includes("delivery")) {
88
+ if (containsAny(description, [
89
+ "postán átvehető",
90
+ "postaponton",
91
+ "csomagautomatából átvehető",
92
+ "ready for pickup",
93
+ "ready for pick-up",
94
+ ]))
95
+ return "AT_PICKUP_POINT";
96
+ if (containsAny(description, [
97
+ "kézbesítőnél van",
98
+ "handed over to delivery man",
99
+ "out for delivery",
100
+ ]))
101
+ return "OUT_FOR_DELIVERY";
102
+ return "IN_TRANSIT";
103
+ }
104
+ if (categoryCode === 3 || category.includes("szállítás") || category.includes("transport")) {
105
+ if (containsAny(description, ["nem kézbesíthető", "undeliverable"]))
106
+ return "RETURNING";
107
+ return "IN_TRANSIT";
108
+ }
109
+ if (categoryCode === 2 || category.includes("feldolgozás") || category.includes("processing"))
110
+ return "PROCESSING";
111
+ if (categoryCode === 1 || category.includes("felvétel") || category.includes("acceptance"))
112
+ return "ACCEPTED";
113
+ return null;
114
+ }
115
+ function mapMplPushStatus(status, statusText) {
116
+ const value = normalizeText(status);
117
+ const text = normalizeText(statusText);
118
+ if (containsAny(text, ["returned to sender", "feladónak visszakézbesítve"]))
119
+ return "RETURNED";
120
+ if (containsAny(value, ["returned", "return delivered"]))
121
+ return "RETURNED";
122
+ if (containsAny(value, ["return", "returning"]))
123
+ return "RETURNING";
124
+ if (containsAny(value, ["delivered"]))
125
+ return "DELIVERED";
126
+ if (containsAny(value, ["delivery"])) {
127
+ if (containsAny(text, ["ready for pickup", "ready for pick-up", "átvehető"]))
128
+ return "AT_PICKUP_POINT";
129
+ return "OUT_FOR_DELIVERY";
130
+ }
131
+ if (containsAny(value, ["transport", "transit"]))
132
+ return "IN_TRANSIT";
133
+ if (containsAny(value, ["processing"]))
134
+ return "PROCESSING";
135
+ if (containsAny(value, ["acceptance", "accepted"]))
136
+ return "ACCEPTED";
137
+ return null;
138
+ }
139
+ function mapDpdStatusdataScanCode(scanCode, serviceCode) {
140
+ const code = String(scanCode ?? "").trim().padStart(2, "0");
141
+ const service = String(serviceCode ?? "").trim();
142
+ if (code === "13") {
143
+ return ["298", "299", "300", "301"].includes(service)
144
+ ? "RETURNED"
145
+ : "DELIVERED";
146
+ }
147
+ if (code === "23")
148
+ return "AT_PICKUP_POINT";
149
+ if (code === "03")
150
+ return "OUT_FOR_DELIVERY";
151
+ if (code === "14")
152
+ return "ERROR";
153
+ if (code === "05" || code === "15")
154
+ return "ACCEPTED";
155
+ if (["02", "04", "06", "08", "09", "10", "20"].includes(code)) {
156
+ return "IN_TRANSIT";
157
+ }
158
+ // DPD 18 is explicitly an information scan that can represent different
159
+ // states, including calculated delivery/release, so it must not be guessed.
160
+ return null;
161
+ }
162
+ async function applyNormalizedTrackingEvent(input) {
163
+ const identifiers = uniqueStrings(input.event.shipmentIdentifiers);
164
+ if (!identifiers.length)
165
+ throw new Error("Hiányzó tracking/csomagazonosító.");
166
+ const fingerprint = input.event.eventId || (0, node_crypto_1.createHash)("sha256")
167
+ .update([
168
+ input.event.carrier,
169
+ input.event.source,
170
+ identifiers.join(","),
171
+ input.event.rawStatus || input.event.status || "",
172
+ input.event.occurredAt || "",
173
+ ].join("|"))
174
+ .digest("hex");
175
+ const acquired = input.operationStore
176
+ ? await (0, state_1.acquireOperation)(input.operationStore, {
177
+ provider: input.event.carrier,
178
+ operation_type: `status.${input.event.source}`,
179
+ entity_type: "shipment",
180
+ entity_id: identifiers[0],
181
+ external_id: identifiers[0],
182
+ idempotency_key: `${input.event.carrier}:status:${input.event.source}:${fingerprint}`,
183
+ reference_data: {
184
+ replay_safe: true,
185
+ identifiers,
186
+ status: input.event.status ?? null,
187
+ raw_status: input.event.rawStatus ?? null,
188
+ occurred_at: input.event.occurredAt ?? null,
189
+ },
190
+ })
191
+ : null;
192
+ if (acquired && !acquired.acquired) {
193
+ if (acquired.operation.status !== "succeeded") {
194
+ // A concurrent/stale worker may still own this event. Returning null keeps
195
+ // stream cursors and Statusdata files retryable until the operation either
196
+ // succeeds or the existing reconciliation logic moves it to failed.
197
+ return null;
198
+ }
199
+ return {
200
+ duplicate: true,
201
+ orderId: acquired.operation.reference_data?.order_id ?? null,
202
+ status: acquired.operation.reference_data?.status ?? input.event.status ?? null,
203
+ };
204
+ }
205
+ try {
206
+ const order = await findOrderByShipmentIdentifiers(input.orderService, input.event.carrier, identifiers, input.operationStore);
207
+ if (!order) {
208
+ if (acquired && input.operationStore) {
209
+ await (0, state_1.operationFailed)(input.operationStore, acquired.operation, new Error("Tracking eseményhez nem található rendelés."), false, identifiers[0], {
210
+ ...(acquired.operation.reference_data ?? {}),
211
+ replay_safe: true,
212
+ identifiers,
213
+ retry_reason: "order_not_found",
214
+ });
215
+ }
216
+ return null;
217
+ }
218
+ const rawCurrent = order.metadata?.[input.event.carrier];
219
+ const current = rawCurrent && typeof rawCurrent === "object"
220
+ ? rawCurrent
221
+ : {};
222
+ const hasCanonicalStatus = Boolean(input.event.status);
223
+ const incomingTime = hasCanonicalStatus ? parseTime(input.event.occurredAt) : null;
224
+ const currentTime = parseTime(current.statusUpdatedAt ?? current.status_updated_at);
225
+ const currentStatus = String(current.status || "").toUpperCase();
226
+ const nextStatus = input.event.status || currentStatus || "UNKNOWN";
227
+ const stale = hasCanonicalStatus && incomingTime != null && currentTime != null && incomingTime < currentTime;
228
+ const terminalRegression = hasCanonicalStatus && isTerminalShippingStatus(currentStatus) && !isTerminalShippingStatus(nextStatus);
229
+ if (stale || terminalRegression) {
230
+ if (acquired && input.operationStore) {
231
+ await (0, state_1.operationSucceeded)(input.operationStore, acquired.operation, identifiers[0], {
232
+ ...(acquired.operation.reference_data ?? {}),
233
+ replay_safe: true,
234
+ order_id: order.id,
235
+ status: current.status ?? null,
236
+ stale,
237
+ terminal_regression: terminalRegression,
238
+ });
239
+ }
240
+ return {
241
+ orderId: order.id,
242
+ status: current.status ?? null,
243
+ stale,
244
+ terminalRegression,
245
+ };
246
+ }
247
+ const eventAt = input.event.occurredAt || new Date().toISOString();
248
+ const statusUpdatedAt = hasCanonicalStatus
249
+ ? eventAt
250
+ : String(current.statusUpdatedAt ?? current.status_updated_at ?? "") || undefined;
251
+ const shipment = {
252
+ ...current,
253
+ ...(input.event.extra ?? {}),
254
+ status: nextStatus,
255
+ ...(statusUpdatedAt ? { statusUpdatedAt } : {}),
256
+ trackingSource: input.event.source,
257
+ trackingEventId: input.event.eventId || fingerprint,
258
+ lastTrackingEventAt: eventAt,
259
+ ...(hasCanonicalStatus && input.event.rawStatus != null ? { rawStatus: input.event.rawStatus } : {}),
260
+ ...(hasCanonicalStatus && input.event.statusText != null ? { statusDescription: input.event.statusText } : {}),
261
+ ...(input.event.trackingNumber ? { trackingNumber: input.event.trackingNumber } : {}),
262
+ ...(input.event.trackingUrl ? { trackingUrl: input.event.trackingUrl } : {}),
263
+ ...(hasCanonicalStatus && nextStatus === "DELIVERED" ? { deliveredAt: eventAt } : {}),
264
+ ...(hasCanonicalStatus && nextStatus === "RETURNED" ? { returnedAt: eventAt } : {}),
265
+ };
266
+ const next = (0, operations_1.appendShippingOperation)({ ...(order.metadata ?? {}), [input.event.carrier]: shipment }, {
267
+ carrier: input.event.carrier,
268
+ action: "status",
269
+ status: "success",
270
+ actorId: `${input.event.carrier}-${input.event.source}`,
271
+ durationMs: 0,
272
+ message: `${carrierName(input.event.carrier)}: tracking státusz frissítve (${input.event.source}).`,
273
+ response: {
274
+ status: nextStatus,
275
+ rawStatus: input.event.rawStatus ?? null,
276
+ source: input.event.source,
277
+ identifiers,
278
+ },
279
+ });
280
+ await input.orderService.updateOrders([{ id: order.id, metadata: next.metadata }]);
281
+ if (acquired && input.operationStore) {
282
+ await (0, state_1.operationSucceeded)(input.operationStore, acquired.operation, identifiers[0], {
283
+ ...(acquired.operation.reference_data ?? {}),
284
+ replay_safe: true,
285
+ order_id: order.id,
286
+ status: nextStatus,
287
+ identifiers,
288
+ });
289
+ }
290
+ return { orderId: order.id, status: nextStatus, duplicate: false };
291
+ }
292
+ catch (error) {
293
+ if (acquired && input.operationStore) {
294
+ await (0, state_1.operationFailed)(input.operationStore, acquired.operation, error, false, identifiers[0], acquired.operation.reference_data ?? undefined);
295
+ }
296
+ throw error;
297
+ }
298
+ }
299
+ async function findOrderByShipmentIdentifiers(orderService, carrier, identifiers, operationStore) {
300
+ const ids = new Set(uniqueStrings(identifiers));
301
+ if (operationStore) {
302
+ for (const identifier of ids) {
303
+ const operations = await operationStore.listIntegrationOperations({
304
+ provider: carrier,
305
+ operation_type: "shipment.create",
306
+ entity_type: "order",
307
+ status: "succeeded",
308
+ external_id: identifier,
309
+ }, { take: 5, order: { updated_at: "DESC" } });
310
+ const entityId = operations.find((item) => item.entity_id)?.entity_id;
311
+ if (entityId)
312
+ return orderService.retrieveOrder(entityId);
313
+ }
314
+ }
315
+ const pageSize = 200;
316
+ for (let skip = 0;; skip += pageSize) {
317
+ const orders = await orderService.listOrders({}, { take: pageSize, skip, order: { created_at: "DESC" } });
318
+ const match = orders.find((order) => shipmentMatches(order, carrier, ids));
319
+ if (match)
320
+ return match;
321
+ if (orders.length < pageSize)
322
+ break;
323
+ }
324
+ return undefined;
325
+ }
326
+ function shipmentMatches(order, carrier, identifiers) {
327
+ const raw = order.metadata?.[carrier];
328
+ if (!raw || typeof raw !== "object")
329
+ return false;
330
+ const shipment = raw;
331
+ const candidates = carrier === "foxpost"
332
+ ? [shipment.packageId, shipment.trackingNumber]
333
+ : carrier === "gls"
334
+ ? [shipment.parcelNumber, shipment.parcelId, shipment.trackingNumber]
335
+ : carrier === "packeta"
336
+ ? [shipment.packetId, shipment.barcode, shipment.trackingNumber, shipment.courierNumber]
337
+ : carrier === "dpd"
338
+ ? [shipment.parcelNumber, shipment.trackingNumber, shipment.shipmentId]
339
+ : [shipment.trackingNumber, ...(Array.isArray(shipment.packageTrackingNumbers) ? shipment.packageTrackingNumbers : [])];
340
+ return candidates.some((candidate) => identifiers.has(String(candidate ?? "").trim()));
341
+ }
342
+ function carrierName(carrier) {
343
+ if (carrier === "foxpost")
344
+ return "FOXPOST";
345
+ if (carrier === "gls")
346
+ return "GLS";
347
+ if (carrier === "packeta")
348
+ return "Packeta";
349
+ if (carrier === "dpd")
350
+ return "DPD";
351
+ return "MPL";
352
+ }
353
+ function uniqueStrings(values) {
354
+ return [...new Set(values.map((value) => String(value ?? "").trim()).filter(Boolean))];
355
+ }
356
+ function parseTime(value) {
357
+ if (!value)
358
+ return null;
359
+ const time = Date.parse(String(value));
360
+ return Number.isFinite(time) ? time : null;
361
+ }
362
+ function normalizeText(value) {
363
+ return String(value ?? "").trim().toLowerCase();
364
+ }
365
+ function containsAny(value, needles) {
366
+ return needles.some((needle) => value.includes(needle));
367
+ }
368
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhY2tpbmcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL21vZHVsZXMvc2hpcHBpbmcvdHJhY2tpbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFpREEsNERBRUM7QUFFRCw0Q0ErQkM7QUFFRCw0Q0F3REM7QUFFRCw0Q0FnQkM7QUFFRCw0REF1QkM7QUFFRCxvRUF3TEM7QUFFRCx3RUFxQ0M7QUFFRCwwQ0FlQztBQTNhRCw2Q0FBd0M7QUFDeEMsNkNBQXNEO0FBTXRELHdFQUlxRDtBQWdDckQsTUFBTSxRQUFRLEdBQUcsSUFBSSxHQUFHLENBQTBCO0lBQ2hELFdBQVc7SUFDWCxVQUFVO0lBQ1YsV0FBVztDQUNaLENBQUMsQ0FBQTtBQUVGLFNBQWdCLHdCQUF3QixDQUFDLEtBQWM7SUFDckQsT0FBTyxRQUFRLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLENBQUMsV0FBVyxFQUE2QixDQUFDLENBQUE7QUFDbkYsQ0FBQztBQUVELFNBQWdCLGdCQUFnQixDQUFDLEtBSWhDO0lBQ0MsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQTtJQUNqQyxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQTtJQUNoRSxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsV0FBVyxLQUFLLElBQUksSUFBSSxLQUFLLENBQUMsV0FBVyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsV0FBVyxLQUFLLEdBQUcsQ0FBQTtJQUVwRyxJQUFJLFNBQVMsSUFBSSxDQUFDLEVBQUUsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUs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
@@ -1,21 +1,18 @@
1
- import type { ShippingOrderService } from "./types";
2
1
  import type { IntegrationOperationStore } from "../../../modules/integration-operation/types";
2
+ import type { ShippingOrderService } from "./types";
3
3
  type ShippingWebhookCarrier = "foxpost" | "gls";
4
4
  export declare function verifyShippingWebhook(provided: unknown): boolean;
5
5
  export declare function applyCarrierWebhook(orderService: ShippingOrderService, carrier: ShippingWebhookCarrier, body: unknown, operationStore?: IntegrationOperationStore): Promise<{
6
6
  duplicate: boolean;
7
- status: {};
8
- orderId?: undefined;
7
+ orderId: {} | null;
8
+ status: {} | null;
9
9
  stale?: undefined;
10
+ terminalRegression?: undefined;
10
11
  } | {
11
12
  orderId: string;
12
- status: unknown;
13
+ status: {} | null;
13
14
  stale: boolean;
15
+ terminalRegression: boolean;
14
16
  duplicate?: undefined;
15
- } | {
16
- orderId: string;
17
- status: "CANCELLED" | "CREATED" | "LABEL_CREATED" | "HANDED_OVER" | "IN_TRANSIT" | "AT_LOCKER" | "OUT_FOR_DELIVERY" | "DELIVERED" | "RETURNING" | "RETURNED" | "ERROR" | "UNKNOWN";
18
- duplicate?: undefined;
19
- stale?: undefined;
20
17
  } | null>;
21
18
  export {};
@@ -5,8 +5,7 @@ exports.applyCarrierWebhook = applyCarrierWebhook;
5
5
  const node_crypto_1 = require("node:crypto");
6
6
  const foxpost_1 = require("../../../providers/foxpost");
7
7
  const gls_1 = require("../../../providers/gls");
8
- const operations_1 = require("./operations");
9
- const state_1 = require("../../../modules/integration-operation/state");
8
+ const tracking_1 = require("./tracking");
10
9
  function verifyShippingWebhook(provided) {
11
10
  const expected = process.env.SHIPPING_WEBHOOK_SECRET;
12
11
  if (!expected)
@@ -40,143 +39,31 @@ async function applyCarrierWebhook(orderService, carrier, body, operationStore)
40
39
  payload.StatusDate ??
41
40
  nested(payload, "event", "timestamp"));
42
41
  const eventId = text(payload.eventId ?? payload.event_id ?? payload.EventId);
43
- const fingerprint = eventId || (0, node_crypto_1.createHash)("sha256")
44
- .update([carrier, parcelId, rawStatus, eventTime].join("|"))
45
- .digest("hex");
46
- const acquired = operationStore
47
- ? await (0, state_1.acquireOperation)(operationStore, {
48
- provider: carrier,
49
- operation_type: "status.webhook",
50
- entity_type: "shipment",
51
- entity_id: parcelId,
52
- idempotency_key: `${carrier}:webhook:${fingerprint}`,
53
- reference_data: {
54
- replay_safe: true,
55
- parcelId,
56
- rawStatus,
57
- eventTime: eventTime || null,
58
- },
59
- })
60
- : null;
61
- if (acquired && !acquired.acquired) {
62
- return {
63
- duplicate: true,
64
- status: acquired.operation.reference_data?.status ?? rawStatus,
65
- };
66
- }
67
- let order;
68
- if (operationStore) {
69
- const [shipmentOperation] = await operationStore.listIntegrationOperations({
70
- provider: carrier,
71
- external_id: parcelId,
72
- entity_type: "order",
73
- status: "succeeded",
74
- }, { take: 1, order: { updated_at: "DESC" } });
75
- if (shipmentOperation?.entity_id) {
76
- order = await orderService.retrieveOrder(shipmentOperation.entity_id);
77
- }
78
- }
79
- // Compatibility fallback for parcels created before durable operation records existed.
80
- for (let skip = 0; !order && skip < 1000; skip += 200) {
81
- const orders = await orderService.listOrders({}, { take: 200, skip, order: { created_at: "DESC" } });
82
- order = orders.find((candidate) => matches(candidate, carrier, parcelId));
83
- if (orders.length < 200)
84
- break;
85
- }
86
- if (!order) {
87
- if (acquired && operationStore) {
88
- await (0, state_1.operationFailed)(operationStore, acquired.operation, new Error("Carrier webhook order is not available yet"), false, parcelId, {
89
- replay_safe: true,
90
- parcelId,
91
- rawStatus,
92
- eventTime: eventTime || null,
93
- retry_reason: "order_not_found",
94
- });
95
- }
96
- return null;
97
- }
98
- const currentValue = order.metadata?.[carrier];
99
- const current = currentValue && typeof currentValue === "object"
100
- ? currentValue
101
- : {};
102
- const currentTime = Date.parse(text(current.statusUpdatedAt));
103
- const incomingTime = Date.parse(eventTime);
104
- if (Number.isFinite(currentTime) &&
105
- Number.isFinite(incomingTime) &&
106
- incomingTime < currentTime) {
107
- if (acquired && operationStore) {
108
- await (0, state_1.operationSucceeded)(operationStore, acquired.operation, parcelId, {
109
- replay_safe: true,
110
- parcelId,
111
- rawStatus,
112
- eventTime,
113
- status: current.status,
114
- orderId: order.id,
115
- stale: true,
116
- });
117
- }
118
- return { orderId: order.id, status: current.status, stale: true };
119
- }
120
- const shipment = carrier === "foxpost"
121
- ? {
122
- ...current,
123
- status: (0, foxpost_1.mapFoxpostStatus)(rawStatus),
124
- statusUpdatedAt: eventTime || new Date().toISOString(),
125
- }
126
- : {
127
- ...current,
128
- status: (0, gls_1.mapGlsStatus)(rawStatus),
129
- rawStatus,
130
- statusDescription: text(payload.statusDescription ?? payload.StatusDescription) ||
131
- current.statusDescription,
132
- statusUpdatedAt: eventTime || new Date().toISOString(),
133
- };
134
- const response = carrier === "foxpost"
135
- ? { packageId: parcelId, status: shipment.status }
136
- : { parcelNumber: parcelId, status: shipment.status, rawStatus };
137
- const next = (0, operations_1.appendShippingOperation)({ ...(order.metadata ?? {}), [carrier]: shipment }, {
42
+ const statusText = text(payload.statusDescription ?? payload.StatusDescription);
43
+ const event = {
138
44
  carrier,
139
- action: "status",
140
- status: "success",
141
- actorId: `${carrier}-webhook`,
142
- durationMs: 0,
143
- message: `${carrier === "foxpost" ? "FOXPOST" : "GLS"}: automatikus státuszfrissítés fogadva.`,
144
- response,
45
+ shipmentIdentifiers: [parcelId],
46
+ status: carrier === "foxpost"
47
+ ? canonicalFoxpostStatus((0, foxpost_1.mapFoxpostStatus)(rawStatus))
48
+ : (0, gls_1.mapGlsStatus)(rawStatus),
49
+ rawStatus,
50
+ statusText: statusText || null,
51
+ occurredAt: eventTime || null,
52
+ eventId: eventId || null,
53
+ source: "webhook",
54
+ };
55
+ return (0, tracking_1.applyNormalizedTrackingEvent)({
56
+ orderService,
57
+ event,
58
+ operationStore,
145
59
  });
146
- try {
147
- await orderService.updateOrders([{ id: order.id, metadata: next.metadata }]);
148
- if (acquired && operationStore) {
149
- await (0, state_1.operationSucceeded)(operationStore, acquired.operation, parcelId, {
150
- replay_safe: true,
151
- parcelId,
152
- rawStatus,
153
- status: shipment.status,
154
- orderId: order.id,
155
- });
156
- }
157
- }
158
- catch (error) {
159
- if (acquired && operationStore) {
160
- await (0, state_1.operationFailed)(operationStore, acquired.operation, error, false, parcelId, {
161
- replay_safe: true,
162
- parcelId,
163
- rawStatus,
164
- status: shipment.status,
165
- orderId: order.id,
166
- });
167
- }
168
- throw error;
169
- }
170
- return { orderId: order.id, status: shipment.status };
171
60
  }
172
- function matches(order, carrier, parcelId) {
173
- const shipment = order.metadata?.[carrier];
174
- if (!shipment || typeof shipment !== "object")
175
- return false;
176
- const value = shipment;
177
- return carrier === "foxpost"
178
- ? [value.packageId, value.trackingNumber].some((candidate) => text(candidate) === parcelId)
179
- : [value.parcelNumber, value.parcelId].some((candidate) => text(candidate) === parcelId);
61
+ function canonicalFoxpostStatus(status) {
62
+ if (status === "HANDED_OVER")
63
+ return "ACCEPTED";
64
+ if (status === "AT_LOCKER")
65
+ return "AT_PICKUP_POINT";
66
+ return status;
180
67
  }
181
68
  function nested(value, key, nestedKey) {
182
69
  const child = value[key];
@@ -187,4 +74,4 @@ function nested(value, key, nestedKey) {
187
74
  function text(value) {
188
75
  return value == null ? "" : String(value).trim();
189
76
  }
190
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2ViaG9va3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL21vZHVsZXMvc2hpcHBpbmcvd2ViaG9va3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFjQSxzREFPQztBQUVELGtEQW9OQztBQTNPRCw2Q0FBeUQ7QUFDekQsd0RBQTZEO0FBQzdELGdEQUFxRDtBQUNyRCw2Q0FBc0Q7QUFFdEQsd0VBSXFEO0FBS3JELFNBQWdCLHFCQUFxQixDQUFDLFFBQWlCO0lBQ3JELE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsdUJBQXVCLENBQUE7SUFDcEQsSUFBSSxDQUFDLFFBQVE7UUFBRSxPQUFPLEtBQUssQ0FBQTtJQUMzQixNQUFNLE1BQU0sR0FBRyxPQUFPLFFBQVEsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFBO0lBQzNELE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDN0IsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQTtJQUMvQixPQUFPLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLE1BQU0sSUFBSSxJQUFBLDZCQUFlLEVBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFBO0FBQ3ZELENBQUM7QUFFTSxLQUFLLFVBQVUsbUJBQW1CLENBQ3ZDLFlBQWtDLEVBQ2xDLE9BQStCLEVBQy9CLElBQWEsRUFDYixjQUEwQztJQUUxQyxNQUFNLE9BQU8sR0FBRyxJQUFJLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUTtRQUM5QyxDQUFDLENBQUMsSUFBK0I7UUFDakMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtJQUNOLE1BQU0sUUFBUSxHQUFHLE9BQU8sS0FBSyxTQUFTO1FBQ3BDLENBQUMsQ0FBQyxJQUFJLENBQ0YsT0FBTyxDQUFDLE9BQU87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
77
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2ViaG9va3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL21vZHVsZXMvc2hpcHBpbmcvd2ViaG9va3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFhQSxzREFPQztBQUVELGtEQTZEQztBQW5GRCw2Q0FBNkM7QUFDN0Msd0RBQTZEO0FBQzdELGdEQUFxRDtBQUVyRCx5Q0FJbUI7QUFLbkIsU0FBZ0IscUJBQXFCLENBQUMsUUFBaUI7SUFDckQsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyx1QkFBdUIsQ0FBQTtJQUNwRCxJQUFJLENBQUMsUUFBUTtRQUFFLE9BQU8sS0FBSyxDQUFBO0lBQzNCLE1BQU0sTUFBTSxHQUFHLE9BQU8sUUFBUSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUE7SUFDM0QsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUM3QixNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFBO0lBQy9CLE9BQU8sQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsTUFBTSxJQUFJLElBQUEsNkJBQWUsRUFBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUE7QUFDdkQsQ0FBQztBQUVNLEtBQUssVUFBVSxtQkFBbUIsQ0FDdkMsWUFBa0MsRUFDbEMsT0FBK0IsRUFDL0IsSUFBYSxFQUNiLGNBQTBDO0lBRTFDLE1BQU0sT0FBTyxHQUFHLElBQUksSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRO1FBQzlDLENBQUMsQ0FBQyxJQUErQjtRQUNqQyxDQUFDLENBQUMsRUFBRSxDQUFBO0lBRU4sTUFBTSxRQUFRLEdBQUcsT0FBTyxLQUFLLFNBQVM7UUFDcEMsQ0FBQyxDQUFDLElBQUksQ0FDRixPQUFPLENBQUMsT0FBTztZQUNiLE9BQU8sQ0FB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
@@ -0,0 +1,23 @@
1
+ import BackInStockService from "./service";
2
+ export declare const BACK_IN_STOCK_MODULE = "backInStock";
3
+ declare const _default: import("@medusajs/types").ModuleExports<typeof BackInStockService> & {
4
+ linkable: {
5
+ readonly backInStockSubscription: {
6
+ id: {
7
+ serviceName: "backInStock";
8
+ field: "backInStockSubscription";
9
+ linkable: "back_in_stock_subscription_id";
10
+ primaryKey: "id";
11
+ };
12
+ toJSON: () => {
13
+ serviceName: "backInStock";
14
+ field: "backInStockSubscription";
15
+ linkable: "back_in_stock_subscription_id";
16
+ primaryKey: "id";
17
+ };
18
+ };
19
+ };
20
+ };
21
+ export default _default;
22
+ export { BackInStockService };
23
+ export { BACK_IN_STOCK_STATUSES } from "./models/back-in-stock-subscription";