@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
@@ -1,6 +1,12 @@
1
1
  import type { MedusaContainer } from "@medusajs/framework/types";
2
- export default function mplStatusSync(container: MedusaContainer): Promise<void>;
3
- export declare function runBatch(container: MedusaContainer): Promise<void>;
2
+ export default function mplStatusSync(container: MedusaContainer): Promise<{
3
+ scanned: number;
4
+ refreshed: number;
5
+ } | undefined>;
6
+ export declare function runBatch(container: MedusaContainer): Promise<{
7
+ scanned: number;
8
+ refreshed: number;
9
+ }>;
4
10
  export declare const config: {
5
11
  name: string;
6
12
  schedule: string;
@@ -7,14 +7,13 @@ const utils_1 = require("@medusajs/framework/utils");
7
7
  const shipping_1 = require("../lib/modules/shipping");
8
8
  const TERMINAL = new Set(["DELIVERED", "RETURNED", "CANCELLED"]);
9
9
  const PAGE_SIZE = 200;
10
- const MAX_ORDERS_SCANNED = 2000;
11
10
  async function mplStatusSync(container) {
12
11
  if (process.env.MPL_ENABLED !== "true" || process.env.MPL_TRACKING_ENABLED !== "true") {
13
12
  return;
14
13
  }
15
14
  const locking = container.resolve("locking");
16
15
  try {
17
- return await locking.execute("job:mpl-status-sync", () => runBatch(container), { timeout: 1, expire: 3 * 60 * 60 + 50 * 60 });
16
+ return await locking.execute("job:mpl-status-sync", () => runBatch(container), { timeout: 1, expire: 55 * 60 });
18
17
  }
19
18
  catch (error) {
20
19
  const logger = container.resolve(utils_1.ContainerRegistrationKeys.LOGGER);
@@ -27,9 +26,12 @@ async function mplStatusSync(container) {
27
26
  }
28
27
  async function runBatch(container) {
29
28
  const orderService = container.resolve("order");
30
- for (let skip = 0; skip < MAX_ORDERS_SCANNED; skip += PAGE_SIZE) {
29
+ let scanned = 0;
30
+ let refreshed = 0;
31
+ for (let skip = 0;; skip += PAGE_SIZE) {
31
32
  const orders = await orderService.listOrders({}, { take: PAGE_SIZE, skip, order: { created_at: "DESC" } });
32
33
  for (const order of orders) {
34
+ scanned += 1;
33
35
  if ((0, shipping_1.carrierForOrder)(order) !== "mpl")
34
36
  continue;
35
37
  const shipment = order.metadata?.mpl;
@@ -42,8 +44,9 @@ async function runBatch(container) {
42
44
  orderService,
43
45
  orderId: order.id,
44
46
  action: "status",
45
- actorId: "mpl-four-hour-status-sync",
47
+ actorId: "mpl-hourly-status-sync",
46
48
  });
49
+ refreshed += 1;
47
50
  }
48
51
  catch (error) {
49
52
  console.error(`[mpl-status-sync] ${order.id}:`, error instanceof Error ? error.message : error);
@@ -52,7 +55,9 @@ async function runBatch(container) {
52
55
  if (orders.length < PAGE_SIZE)
53
56
  break;
54
57
  }
58
+ return { scanned, refreshed };
55
59
  }
56
- // Magyar Posta tracking guidance discourages frequent repeated queries for the same item.
57
- exports.config = { name: "mpl-status-sync", schedule: "15 */4 * * *" };
58
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXBsLXN0YXR1cy1zeW5jLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2pvYnMvbXBsLXN0YXR1cy1zeW5jLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQVlBLGdDQTZCQztBQUVELDRCQXFDQztBQS9FRCxxREFBcUU7QUFDckUsc0RBSWdDO0FBRWhDLE1BQU0sUUFBUSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsV0FBVyxFQUFFLFVBQVUsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFBO0FBQ2hFLE1BQU0sU0FBUyxHQUFHLEdBQUcsQ0FBQTtBQUNyQixNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQTtBQUVoQixLQUFLLFVBQVUsYUFBYSxDQUFDLFNBQTBCO0lBQ3BFLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxXQUFXLEtBQUssTUFBTSxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsb0JBQW9CLEtBQUssTUFBTSxFQUFFLENBQUM7UUFDdEYsT0FBTTtJQUNSLENBQUM7SUFFRCxNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FNMUMsQ0FBQTtJQUVELElBQUksQ0FBQztRQUNILE9BQU8sTUFBTSxPQUFPLENBQUMsT0FBTyxDQUMxQixxQkFBcUIsRUFDckIsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxFQUN6QixFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FDOUMsQ0FBQTtJQUNILENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxpQ0FBeUIsQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUNsRSxNQUFNLENBQUMsSUFBSSxDQUNULElBQUksQ0FBQyxTQUFTLENBQUM7WUFDYixLQUFLLEVBQUUsOEJBQThCO1lBQ3JDLEdBQUcsRUFBRSxpQkFBaUI7WUFDdEIsT0FBTyxFQUFFLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7U0FDaEUsQ0FBQyxDQUNILENBQUE7SUFDSCxDQUFDO0FBQ0gsQ0FBQztBQUVNLEtBQUssVUFBVSxRQUFRLENBQUMsU0FBMEI7SUFDdkQsTUFBTSxZQUFZLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQW9DLENBQUE7SUFFbEYsS0FBSyxJQUFJLElBQUksR0FBRyxDQUFDLEVBQUUsSUFBSSxHQUFHLGtCQUFrQixFQUFFLElBQUksSUFBSSxTQUFTLEVBQUUsQ0FBQztRQUNoRSxNQUFNLE1BQU0sR0FBRyxNQUFNLFlBQVksQ0FBQyxVQUFVLENBQzFDLEVBQUUsRUFDRixFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUN6RCxDQUFBO1FBRUQsS0FBSyxNQUFNLEtBQUssSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUMzQixJQUFJLElBQUEsMEJBQWUsRUFBQyxLQUFLLENBQUMsS0FBSyxLQUFLO2dCQUFFLFNBQVE7WUFFOUMsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBRSxHQUEwQyxDQUFBO1lBQzNFLElBQ0UsQ0FBQyxRQUFRLEVBQUUsY0FBYztnQkFDekIsUUFBUSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxFQUN6RCxDQUFDO2dCQUNELFNBQVE7WUFDVixDQUFDO1lBRUQsSUFBSSxDQUFDO2dCQUNILE1BQU0sSUFBQSxnQ0FBcUIsRUFBQztvQkFDMUIsWUFBWTtvQkFDWixPQUFPLEVBQUUsS0FBSyxDQUFDLEVBQUU7b0JBQ2pCLE1BQU0sRUFBRSxRQUFRO29CQUNoQixPQUFPLEVBQUUsMkJBQTJCO2lCQUNyQyxDQUFDLENBQUE7WUFDSixDQUFDO1lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztnQkFDZixPQUFPLENBQUMsS0FBSyxDQUNYLHFCQUFxQixLQUFLLENBQUMsRUFBRSxHQUFHLEVBQ2hDLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FDL0MsQ0FBQTtZQUNILENBQUM7UUFDSCxDQUFDO1FBRUQsSUFBSSxNQUFNLENBQUMsTUFBTSxHQUFHLFNBQVM7WUFBRSxNQUFLO0lBQ3RDLENBQUM7QUFDSCxDQUFDO0FBRUQsMEZBQTBGO0FBQzdFLFFBQUEsTUFBTSxHQUFHLEVBQUUsSUFBSSxFQUFFLGlCQUFpQixFQUFFLFFBQVEsRUFBRSxjQUFjLEVBQUUsQ0FBQSJ9
60
+ // Magyar Posta PULL guidance says the same tracking ID must not be queried more
61
+ // often than once per hour. PUSH is the primary path; this hourly job is fallback.
62
+ exports.config = { name: "mpl-status-sync", schedule: "15 * * * *" };
63
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXBsLXN0YXR1cy1zeW5jLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2pvYnMvbXBsLXN0YXR1cy1zeW5jLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQVdBLGdDQTZCQztBQUVELDRCQTJDQztBQXBGRCxxREFBcUU7QUFDckUsc0RBSWdDO0FBRWhDLE1BQU0sUUFBUSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsV0FBVyxFQUFFLFVBQVUsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFBO0FBQ2hFLE1BQU0sU0FBUyxHQUFHLEdBQUcsQ0FBQTtBQUVOLEtBQUssVUFBVSxhQUFhLENBQUMsU0FBMEI7SUFDcEUsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLFdBQVcsS0FBSyxNQUFNLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsS0FBSyxNQUFNLEVBQUUsQ0FBQztRQUN0RixPQUFNO0lBQ1IsQ0FBQztJQUVELE1BQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQU0xQyxDQUFBO0lBRUQsSUFBSSxDQUFDO1FBQ0gsT0FBTyxNQUFNLE9BQU8sQ0FBQyxPQUFPLENBQzFCLHFCQUFxQixFQUNyQixHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEVBQ3pCLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUNoQyxDQUFBO0lBQ0gsQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDZixNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLGlDQUF5QixDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBQ2xFLE1BQU0sQ0FBQyxJQUFJLENBQ1QsSUFBSSxDQUFDLFNBQVMsQ0FBQztZQUNiLEtBQUssRUFBRSw4QkFBOEI7WUFDckMsR0FBRyxFQUFFLGlCQUFpQjtZQUN0QixPQUFPLEVBQUUsS0FBSyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztTQUNoRSxDQUFDLENBQ0gsQ0FBQTtJQUNILENBQUM7QUFDSCxDQUFDO0FBRU0sS0FBSyxVQUFVLFFBQVEsQ0FBQyxTQUEwQjtJQUN2RCxNQUFNLFlBQVksR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBb0MsQ0FBQTtJQUNsRixJQUFJLE9BQU8sR0FBRyxDQUFDLENBQUE7SUFDZixJQUFJLFNBQVMsR0FBRyxDQUFDLENBQUE7SUFFakIsS0FBSyxJQUFJLElBQUksR0FBRyxDQUFDLEdBQUksSUFBSSxJQUFJLFNBQVMsRUFBRSxDQUFDO1FBQ3ZDLE1BQU0sTUFBTSxHQUFHLE1BQU0sWUFBWSxDQUFDLFVBQVUsQ0FDMUMsRUFBRSxFQUNGLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQ3pELENBQUE7UUFFRCxLQUFLLE1BQU0sS0FBSyxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQzNCLE9BQU8sSUFBSSxDQUFDLENBQUE7WUFDWixJQUFJLElBQUEsMEJBQWUsRUFBQyxLQUFLLENBQUMsS0FBSyxLQUFLO2dCQUFFLFNBQVE7WUFFOUMsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBRSxHQUEwQyxDQUFBO1lBQzNFLElBQ0UsQ0FBQyxRQUFRLEVBQUUsY0FBYztnQkFDekIsUUFBUSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxFQUN6RCxDQUFDO2dCQUNELFNBQVE7WUFDVixDQUFDO1lBRUQsSUFBSSxDQUFDO2dCQUNILE1BQU0sSUFBQSxnQ0FBcUIsRUFBQztvQkFDMUIsWUFBWTtvQkFDWixPQUFPLEVBQUUsS0FBSyxDQUFDLEVBQUU7b0JBQ2pCLE1BQU0sRUFBRSxRQUFRO29CQUNoQixPQUFPLEVBQUUsd0JBQXdCO2lCQUNsQyxDQUFDLENBQUE7Z0JBQ0YsU0FBUyxJQUFJLENBQUMsQ0FBQTtZQUNoQixDQUFDO1lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztnQkFDZixPQUFPLENBQUMsS0FBSyxDQUNYLHFCQUFxQixLQUFLLENBQUMsRUFBRSxHQUFHLEVBQ2hDLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FDL0MsQ0FBQTtZQUNILENBQUM7UUFDSCxDQUFDO1FBRUQsSUFBSSxNQUFNLENBQUMsTUFBTSxHQUFHLFNBQVM7WUFBRSxNQUFLO0lBQ3RDLENBQUM7SUFFRCxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxDQUFBO0FBQy9CLENBQUM7QUFFRCxnRkFBZ0Y7QUFDaEYsbUZBQW1GO0FBQ3RFLFFBQUEsTUFBTSxHQUFHLEVBQUUsSUFBSSxFQUFFLGlCQUFpQixFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsQ0FBQSJ9
@@ -0,0 +1,28 @@
1
+ import type { MedusaContainer } from "@medusajs/framework/types";
2
+ import { type ReviewRequestTrigger } from "../core/review-request";
3
+ export default function productReviewRequestDispatch(container: MedusaContainer): Promise<{
4
+ scanned: number;
5
+ sent: number;
6
+ trigger?: undefined;
7
+ delayDays?: undefined;
8
+ } | {
9
+ scanned: number;
10
+ sent: number;
11
+ trigger: ReviewRequestTrigger;
12
+ delayDays: number;
13
+ } | undefined>;
14
+ export declare function runBatch(container: MedusaContainer): Promise<{
15
+ scanned: number;
16
+ sent: number;
17
+ trigger?: undefined;
18
+ delayDays?: undefined;
19
+ } | {
20
+ scanned: number;
21
+ sent: number;
22
+ trigger: ReviewRequestTrigger;
23
+ delayDays: number;
24
+ }>;
25
+ export declare const config: {
26
+ name: string;
27
+ schedule: string;
28
+ };
@@ -0,0 +1,84 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.config = void 0;
4
+ exports.default = productReviewRequestDispatch;
5
+ exports.runBatch = runBatch;
6
+ const utils_1 = require("@medusajs/framework/utils");
7
+ const product_review_1 = require("../modules/product-review");
8
+ const review_request_1 = require("../core/review-request");
9
+ const PAGE_SIZE = 100;
10
+ const MAX_ORDERS_SCANNED = 2000;
11
+ async function productReviewRequestDispatch(container) {
12
+ const locking = container.resolve("locking");
13
+ try {
14
+ return await locking.execute("job:product-review-request-dispatch", () => runBatch(container), { timeout: 1, expire: 3300 });
15
+ }
16
+ catch (error) {
17
+ const logger = container.resolve(utils_1.ContainerRegistrationKeys.LOGGER);
18
+ logger.info(JSON.stringify({
19
+ event: "scheduled_job_skipped_locked",
20
+ job: "product-review-request-dispatch",
21
+ message: error instanceof Error ? error.message : String(error),
22
+ }));
23
+ }
24
+ }
25
+ async function runBatch(container) {
26
+ const reviewService = container.resolve(product_review_1.PRODUCT_REVIEW_MODULE);
27
+ const [settings] = await reviewService.listProductReviewSettings({}, { take: 1 });
28
+ if (!settings?.request_email_enabled)
29
+ return { scanned: 0, sent: 0 };
30
+ const trigger = normalizeTrigger(settings.request_trigger);
31
+ const delayDays = Math.max(0, Math.min(90, Math.trunc(Number(settings.request_delay_days) || 0)));
32
+ const orderService = container.resolve("order");
33
+ let scanned = 0;
34
+ let sent = 0;
35
+ for (let skip = 0; skip < MAX_ORDERS_SCANNED; skip += PAGE_SIZE) {
36
+ const orders = await orderService.listOrders({}, {
37
+ take: PAGE_SIZE,
38
+ skip,
39
+ order: { created_at: "DESC" },
40
+ relations: ["items", "customer", "fulfillments"],
41
+ });
42
+ for (const order of orders) {
43
+ scanned += 1;
44
+ if (!order.customer_id || !order.email)
45
+ continue;
46
+ if (order.canceled_at || String(order.status || "").toLowerCase() === "canceled")
47
+ continue;
48
+ if (order.metadata?.review_request_email_sent_at)
49
+ continue;
50
+ if (!Array.isArray(order.items) || !order.items.some((item) => item?.product_id))
51
+ continue;
52
+ const dueAt = (0, review_request_1.reviewRequestDueAt)(order, trigger, delayDays);
53
+ if (!dueAt || dueAt.getTime() > Date.now())
54
+ continue;
55
+ try {
56
+ const result = await (0, review_request_1.sendReviewRequestEmail)({ container: container, order: order });
57
+ if (result?.skipped)
58
+ continue;
59
+ await orderService.updateOrders([{
60
+ id: order.id,
61
+ metadata: {
62
+ ...(order.metadata || {}),
63
+ review_request_email_sent_at: new Date().toISOString(),
64
+ review_request_trigger: trigger,
65
+ review_request_delay_days: delayDays,
66
+ },
67
+ }]);
68
+ sent += 1;
69
+ }
70
+ catch (error) {
71
+ const logger = container.resolve(utils_1.ContainerRegistrationKeys.LOGGER);
72
+ logger.warn(`[product-review-request-dispatch] ${order.id}: ${error instanceof Error ? error.message : String(error)}`);
73
+ }
74
+ }
75
+ if (orders.length < PAGE_SIZE)
76
+ break;
77
+ }
78
+ return { scanned, sent, trigger, delayDays };
79
+ }
80
+ function normalizeTrigger(value) {
81
+ return value === "order" || value === "fulfillment" || value === "delivery" ? value : "delivery";
82
+ }
83
+ exports.config = { name: "product-review-request-dispatch", schedule: "15 * * * *" };
84
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC1yZXZpZXctcmVxdWVzdC1kaXNwYXRjaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9qb2JzL3Byb2R1Y3QtcmV2aWV3LXJlcXVlc3QtZGlzcGF0Y2gudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBaUJBLCtDQWtCQztBQUVELDRCQXVEQztBQTNGRCxxREFBcUU7QUFDckUsOERBQTRGO0FBQzVGLDJEQUE4RztBQUU5RyxNQUFNLFNBQVMsR0FBRyxHQUFHLENBQUE7QUFDckIsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUE7QUFXaEIsS0FBSyxVQUFVLDRCQUE0QixDQUFDLFNBQTBCO0lBQ25GLE1BQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUUxQyxDQUFBO0lBQ0QsSUFBSSxDQUFDO1FBQ0gsT0FBTyxNQUFNLE9BQU8sQ0FBQyxPQUFPLENBQzFCLHFDQUFxQyxFQUNyQyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEVBQ3pCLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQzdCLENBQUE7SUFDSCxDQUFDO0lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztRQUNmLE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsaUNBQXlCLENBQUMsTUFBTSxDQUFDLENBQUE7UUFDbEUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO1lBQ3pCLEtBQUssRUFBRSw4QkFBOEI7WUFDckMsR0FBRyxFQUFFLGlDQUFpQztZQUN0QyxPQUFPLEVBQUUsS0FBSyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztTQUNoRSxDQUFDLENBQUMsQ0FBQTtJQUNMLENBQUM7QUFDSCxDQUFDO0FBRU0sS0FBSyxVQUFVLFFBQVEsQ0FBQyxTQUEwQjtJQUN2RCxNQUFNLGFBQWEsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLHNDQUFxQixDQUF5QixDQUFBO0lBQ3RGLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxNQUFNLGFBQWEsQ0FBQyx5QkFBeUIsQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFXLENBQTBDLENBQUE7SUFDbkksSUFBSSxDQUFDLFFBQVEsRUFBRSxxQkFBcUI7UUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUE7SUFFcEUsTUFBTSxPQUFPLEdBQUcsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxDQUFBO0lBQzFELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUNqRyxNQUFNLFlBQVksR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBUSxDQUFBO0lBQ3RELElBQUksT0FBTyxHQUFHLENBQUMsQ0FBQTtJQUNmLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQTtJQUVaLEtBQUssSUFBSSxJQUFJLEdBQUcsQ0FBQyxFQUFFLElBQUksR0FBRyxrQkFBa0IsRUFBRSxJQUFJLElBQUksU0FBUyxFQUFFLENBQUM7UUFDaEUsTUFBTSxNQUFNLEdBQUcsTUFBTSxZQUFZLENBQUMsVUFBVSxDQUMxQyxFQUFFLEVBQ0Y7WUFDRSxJQUFJLEVBQUUsU0FBUztZQUNmLElBQUk7WUFDSixLQUFLLEVBQUUsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFO1lBQzdCLFNBQVMsRUFBRSxDQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsY0FBYyxDQUFDO1NBQzFDLENBQ2UsQ0FBQTtRQUV6QixLQUFLLE1BQU0sS0FBSyxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQzNCLE9BQU8sSUFBSSxDQUFDLENBQUE7WUFDWixJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLO2dCQUFFLFNBQVE7WUFDaEQsSUFBSSxLQUFLLENBQUMsV0FBVyxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQyxDQUFDLFdBQVcsRUFBRSxLQUFLLFVBQVU7Z0JBQUUsU0FBUTtZQUMxRixJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUUsNEJBQTRCO2dCQUFFLFNBQVE7WUFDMUQsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxVQUFVLENBQUM7Z0JBQUUsU0FBUTtZQUUxRixNQUFNLEtBQUssR0FBRyxJQUFBLG1DQUFrQixFQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUE7WUFDM0QsSUFBSSxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRTtnQkFBRSxTQUFRO1lBRXBELElBQUksQ0FBQztnQkFDSCxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUEsdUNBQXNCLEVBQUMsRUFBRSxTQUFTLEVBQUUsU0FBZ0IsRUFBRSxLQUFLLEVBQUUsS0FBWSxFQUFFLENBQUMsQ0FBQTtnQkFDakcsSUFBSSxNQUFNLEVBQUUsT0FBTztvQkFBRSxTQUFRO2dCQUM3QixNQUFNLFlBQVksQ0FBQyxZQUFZLENBQUMsQ0FBQzt3QkFDL0IsRUFBRSxFQUFFLEtBQUssQ0FBQyxFQUFFO3dCQUNaLFFBQVEsRUFBRTs0QkFDUixHQUFHLENBQUMsS0FBSyxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUM7NEJBQ3pCLDRCQUE0QixFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFOzRCQUN0RCxzQkFBc0IsRUFBRSxPQUFPOzRCQUMvQix5QkFBeUIsRUFBRSxTQUFTO3lCQUNyQztxQkFDRixDQUFDLENBQUMsQ0FBQTtnQkFDSCxJQUFJLElBQUksQ0FBQyxDQUFBO1lBQ1gsQ0FBQztZQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7Z0JBQ2YsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxpQ0FBeUIsQ0FBQyxNQUFNLENBQUMsQ0FBQTtnQkFDbEUsTUFBTSxDQUFDLElBQUksQ0FBQyxxQ0FBcUMsS0FBSyxDQUFDLEVBQUUsS0FBSyxLQUFLLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFBO1lBQ3pILENBQUM7UUFDSCxDQUFDO1FBRUQsSUFBSSxNQUFNLENBQUMsTUFBTSxHQUFHLFNBQVM7WUFBRSxNQUFLO0lBQ3RDLENBQUM7SUFFRCxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLENBQUE7QUFDOUMsQ0FBQztBQUVELFNBQVMsZ0JBQWdCLENBQUMsS0FBYztJQUN0QyxPQUFPLEtBQUssS0FBSyxPQUFPLElBQUksS0FBSyxLQUFLLGFBQWEsSUFBSSxLQUFLLEtBQUssVUFBVSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQTtBQUNsRyxDQUFDO0FBRVksUUFBQSxNQUFNLEdBQUcsRUFBRSxJQUFJLEVBQUUsaUNBQWlDLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxDQUFBIn0=
@@ -0,0 +1,12 @@
1
+ import type { MedusaContainer } from "@medusajs/framework/types";
2
+ export default function runtimeHeartbeat(_container: MedusaContainer): Promise<{
3
+ schema_version?: number;
4
+ job?: string;
5
+ schedule?: string;
6
+ last_seen_at?: string;
7
+ pid?: number;
8
+ }>;
9
+ export declare const config: {
10
+ name: string;
11
+ schedule: string;
12
+ };
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.config = void 0;
4
+ exports.default = runtimeHeartbeat;
5
+ const runtime_health_1 = require("../core/runtime-health");
6
+ async function runtimeHeartbeat(_container) {
7
+ return (0, runtime_health_1.writeRuntimeHeartbeat)();
8
+ }
9
+ exports.config = {
10
+ name: "runtime-heartbeat",
11
+ schedule: "*/5 * * * *",
12
+ };
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVudGltZS1oZWFydGJlYXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvam9icy9ydW50aW1lLWhlYXJ0YmVhdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFJQSxtQ0FFQztBQUpELDJEQUE4RDtBQUUvQyxLQUFLLFVBQVUsZ0JBQWdCLENBQUMsVUFBMkI7SUFDeEUsT0FBTyxJQUFBLHNDQUFxQixHQUFFLENBQUE7QUFDaEMsQ0FBQztBQUVZLFFBQUEsTUFBTSxHQUFHO0lBQ3BCLElBQUksRUFBRSxtQkFBbUI7SUFDekIsUUFBUSxFQUFFLGFBQWE7Q0FDeEIsQ0FBQSJ9
@@ -1,6 +1,12 @@
1
1
  import type { MedusaContainer } from "@medusajs/framework/types";
2
- export default function shippingStatusSync(container: MedusaContainer): Promise<void>;
3
- export declare function runBatch(container: MedusaContainer): Promise<void>;
2
+ export default function shippingStatusSync(container: MedusaContainer): Promise<{
3
+ scanned: number;
4
+ refreshed: number;
5
+ } | undefined>;
6
+ export declare function runBatch(container: MedusaContainer): Promise<{
7
+ scanned: number;
8
+ refreshed: number;
9
+ }>;
4
10
  export declare const config: {
5
11
  name: string;
6
12
  schedule: string;
@@ -7,7 +7,6 @@ const utils_1 = require("@medusajs/framework/utils");
7
7
  const shipping_1 = require("../lib/modules/shipping");
8
8
  const TERMINAL = new Set(["DELIVERED", "RETURNED", "CANCELLED"]);
9
9
  const PAGE_SIZE = 200;
10
- const MAX_ORDERS_SCANNED = 2000;
11
10
  async function shippingStatusSync(container) {
12
11
  const locking = container.resolve("locking");
13
12
  try {
@@ -24,31 +23,27 @@ async function shippingStatusSync(container) {
24
23
  }
25
24
  async function runBatch(container) {
26
25
  const orderService = container.resolve("order");
27
- for (let skip = 0; skip < MAX_ORDERS_SCANNED; skip += PAGE_SIZE) {
26
+ let scanned = 0;
27
+ let refreshed = 0;
28
+ for (let skip = 0;; skip += PAGE_SIZE) {
28
29
  const orders = await orderService.listOrders({}, { take: PAGE_SIZE, skip, order: { created_at: "DESC" } });
29
30
  for (const order of orders) {
31
+ scanned += 1;
30
32
  const carrier = (0, shipping_1.carrierForOrder)(order);
31
33
  if (!carrier)
32
34
  continue;
33
- // MPL has a dedicated slower tracking job. Magyar Posta asks clients not to
34
- // repeatedly query the same tracking ID at short intervals.
35
- if (carrier === "mpl")
35
+ // MPL uses the official PUSH stream with an hourly PULL fallback.
36
+ // DPD physical transit is supplied by Statusdata, not the Shipping API.
37
+ if (carrier === "mpl" || carrier === "dpd")
36
38
  continue;
37
39
  const shipment = order.metadata?.[carrier];
38
40
  const hasParcel = carrier === "foxpost"
39
41
  ? Boolean(shipment?.packageId)
40
42
  : carrier === "packeta"
41
43
  ? Boolean(shipment?.packetId)
42
- : carrier === "dpd"
43
- ? Boolean(shipment?.shipmentId)
44
- : Boolean(shipment?.parcelNumber);
44
+ : Boolean(shipment?.parcelNumber);
45
45
  if (!hasParcel || TERMINAL.has(String(shipment?.status ?? "").toUpperCase()))
46
46
  continue;
47
- // DPD Shipping's shipment status is the shipping-order state, not parcel transit tracking.
48
- // Once a label is printed, repeated polling cannot produce DELIVERED/RETURNED states;
49
- // those require DPD Statusdata, which is a separate optional integration.
50
- if (carrier === "dpd" && String(shipment?.status ?? "").toUpperCase() === "PRINTED")
51
- continue;
52
47
  try {
53
48
  await (0, shipping_1.executeShippingAction)({
54
49
  orderService,
@@ -56,6 +51,7 @@ async function runBatch(container) {
56
51
  action: "status",
57
52
  actorId: "scheduled-status-sync",
58
53
  });
54
+ refreshed += 1;
59
55
  }
60
56
  catch (error) {
61
57
  console.error(`[shipping-status-sync] ${carrier} ${order.id}:`, error instanceof Error ? error.message : error);
@@ -64,6 +60,7 @@ async function runBatch(container) {
64
60
  if (orders.length < PAGE_SIZE)
65
61
  break;
66
62
  }
63
+ return { scanned, refreshed };
67
64
  }
68
65
  exports.config = { name: "shipping-status-sync", schedule: "*/15 * * * *" };
69
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hpcHBpbmctc3RhdHVzLXN5bmMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvam9icy9zaGlwcGluZy1zdGF0dXMtc3luYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFZQSxxQ0F5QkM7QUFFRCw0QkFrREM7QUF4RkQscURBQXFFO0FBQ3JFLHNEQUlnQztBQUVoQyxNQUFNLFFBQVEsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLFdBQVcsRUFBRSxVQUFVLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQTtBQUNoRSxNQUFNLFNBQVMsR0FBRyxHQUFHLENBQUE7QUFDckIsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUE7QUFFaEIsS0FBSyxVQUFVLGtCQUFrQixDQUFDLFNBQTBCO0lBQ3pFLE1BQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQU0xQyxDQUFBO0lBRUQsSUFBSSxDQUFDO1FBQ0gsT0FBTyxNQUFNLE9BQU8sQ0FBQyxPQUFPLENBQzFCLDBCQUEwQixFQUMxQixHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEVBQ3pCLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQzVCLENBQUE7SUFDSCxDQUFDO0lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztRQUNmLE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsaUNBQXlCLENBQUMsTUFBTSxDQUFDLENBQUE7UUFDbEUsTUFBTSxDQUFDLElBQUksQ0FDVCxJQUFJLENBQUMsU0FBUyxDQUFDO1lBQ2IsS0FBSyxFQUFFLDhCQUE4QjtZQUNyQyxHQUFHLEVBQUUsc0JBQXNCO1lBQzNCLE9BQU8sRUFBRSxLQUFLLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO1NBQ2hFLENBQUMsQ0FDSCxD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
66
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hpcHBpbmctc3RhdHVzLXN5bmMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvam9icy9zaGlwcGluZy1zdGF0dXMtc3luYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFXQSxxQ0F5QkM7QUFFRCw0QkFpREM7QUF0RkQscURBQXFFO0FBQ3JFLHNEQUlnQztBQUVoQyxNQUFNLFFBQVEsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLFdBQVcsRUFBRSxVQUFVLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQTtBQUNoRSxNQUFNLFNBQVMsR0FBRyxHQUFHLENBQUE7QUFFTixLQUFLLFVBQVUsa0JBQWtCLENBQUMsU0FBMEI7SUFDekUsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBTTFDLENBQUE7SUFFRCxJQUFJLENBQUM7UUFDSCxPQUFPLE1BQU0sT0FBTyxDQUFDLE9BQU8sQ0FDMUIsMEJBQTBCLEVBQzFCLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsRUFDekIsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FDNUIsQ0FBQTtJQUNILENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxpQ0FBeUIsQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUNsRSxNQUFNLENBQUMsSUFBSSxDQUNULElBQUksQ0FBQyxTQUFTLENBQUM7WUFDYixLQUFLLEVBQUUsOEJBQThCO1lBQ3JDLEdBQUcsRUFBRSxzQkFBc0I7WUFDM0IsT0FBTyxFQUFFLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7U0FDaEUsQ0FBQyxDQUNILENBQUE7SUFDSCxDQUFDO0FBQ0gsQ0FBQztBQUVNLEtBQUss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
@@ -7,11 +7,11 @@ function shipmentExternalId(carrier, shipment) {
7
7
  const value = carrier === "foxpost"
8
8
  ? shipment.packageId ?? shipment.trackingNumber
9
9
  : carrier === "gls"
10
- ? shipment.parcelId ?? shipment.parcelNumber
10
+ ? shipment.parcelNumber ?? shipment.parcelId
11
11
  : carrier === "packeta"
12
12
  ? shipment.packetId ?? shipment.trackingNumber
13
13
  : carrier === "dpd"
14
- ? shipment.shipmentId ?? shipment.parcelNumber
14
+ ? shipment.parcelNumber ?? shipment.shipmentId
15
15
  : shipment.trackingNumber;
16
16
  return value == null ? null : String(value);
17
17
  }
@@ -25,4 +25,4 @@ function shipmentCreateIdempotencyKey(carrier, orderId, cancelledExternalId) {
25
25
  const base = `${carrier}:shipment:create:${orderId}`;
26
26
  return cancelledExternalId ? `${base}:after:${cancelledExternalId}` : base;
27
27
  }
28
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWRlbXBvdGVuY3kuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL21vZHVsZXMvc2hpcHBpbmcvaWRlbXBvdGVuY3kudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFFQSxnREFlQztBQUVELGtFQVFDO0FBRUQsb0VBT0M7QUFsQ0QsU0FBZ0Isa0JBQWtCLENBQ2hDLE9BQXdCLEVBQ3hCLFFBQWlDO0lBRWpDLE1BQU0sS0FBSyxHQUFHLE9BQU8sS0FBSyxTQUFTO1FBQ2pDLENBQUMsQ0FBQyxRQUFRLENBQUMsU0FBUyxJQUFJLFFBQVEsQ0FBQyxjQUFjO1FBQy9DLENBQUMsQ0FBQyxPQUFPLEtBQUssS0FBSztZQUNqQixDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsSUFBSSxRQUFRLENBQUMsWUFBWTtZQUM1QyxDQUFDLENBQUMsT0FBTyxLQUFLLFNBQVM7Z0JBQ3JCLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxJQUFJLFFBQVEsQ0FBQyxjQUFjO2dCQUM5QyxDQUFDLENBQUMsT0FBTyxLQUFLLEtBQUs7b0JBQ2pCLENBQUMsQ0FBQyxRQUFRLENBQUMsVUFBVSxJQUFJLFFBQVEsQ0FBQyxZQUFZO29CQUM5QyxDQUFDLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQTtJQUVqQyxPQUFPLEtBQUssSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFBO0FBQzdDLENBQUM7QUFFRCxTQUFnQiwyQkFBMkIsQ0FDekMsT0FBd0IsRUFDeEIsUUFBb0Q7SUFFcEQsSUFBSSxDQUFDLFFBQVEsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUMsQ0FBQyxXQUFXLEVBQUUsS0FBSyxXQUFXLEVBQUUsQ0FBQztRQUM3RSxPQUFPLFNBQVMsQ0FBQTtJQUNsQixDQUFDO0lBQ0QsT0FBTyxrQkFBa0IsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLElBQUksU0FBUyxDQUFBO0FBQzNELENBQUM7QUFFRCxTQUFnQiw0QkFBNEIsQ0FDMUMsT0FBd0IsRUFDeEIsT0FBZSxFQUNmLG1CQUFtQztJQUVuQyxNQUFNLElBQUksR0FBRyxHQUFHLE9BQU8sb0JBQW9CLE9BQU8sRUFBRSxDQUFBO0lBQ3BELE9BQU8sbUJBQW1CLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxVQUFVLG1CQUFtQixFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQTtBQUM1RSxDQUFDIn0=
28
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWRlbXBvdGVuY3kuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL21vZHVsZXMvc2hpcHBpbmcvaWRlbXBvdGVuY3kudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFFQSxnREFlQztBQUVELGtFQVFDO0FBRUQsb0VBT0M7QUFsQ0QsU0FBZ0Isa0JBQWtCLENBQ2hDLE9BQXdCLEVBQ3hCLFFBQWlDO0lBRWpDLE1BQU0sS0FBSyxHQUFHLE9BQU8sS0FBSyxTQUFTO1FBQ2pDLENBQUMsQ0FBQyxRQUFRLENBQUMsU0FBUyxJQUFJLFFBQVEsQ0FBQyxjQUFjO1FBQy9DLENBQUMsQ0FBQyxPQUFPLEtBQUssS0FBSztZQUNqQixDQUFDLENBQUMsUUFBUSxDQUFDLFlBQVksSUFBSSxRQUFRLENBQUMsUUFBUTtZQUM1QyxDQUFDLENBQUMsT0FBTyxLQUFLLFNBQVM7Z0JBQ3JCLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxJQUFJLFFBQVEsQ0FBQyxjQUFjO2dCQUM5QyxDQUFDLENBQUMsT0FBTyxLQUFLLEtBQUs7b0JBQ2pCLENBQUMsQ0FBQyxRQUFRLENBQUMsWUFBWSxJQUFJLFFBQVEsQ0FBQyxVQUFVO29CQUM5QyxDQUFDLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQTtJQUVqQyxPQUFPLEtBQUssSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFBO0FBQzdDLENBQUM7QUFFRCxTQUFnQiwyQkFBMkIsQ0FDekMsT0FBd0IsRUFDeEIsUUFBb0Q7SUFFcEQsSUFBSSxDQUFDLFFBQVEsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUMsQ0FBQyxXQUFXLEVBQUUsS0FBSyxXQUFXLEVBQUUsQ0FBQztRQUM3RSxPQUFPLFNBQVMsQ0FBQTtJQUNsQixDQUFDO0lBQ0QsT0FBTyxrQkFBa0IsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLElBQUksU0FBUyxDQUFBO0FBQzNELENBQUM7QUFFRCxTQUFnQiw0QkFBNEIsQ0FDMUMsT0FBd0IsRUFDeEIsT0FBZSxFQUNmLG1CQUFtQztJQUVuQyxNQUFNLElBQUksR0FBRyxHQUFHLE9BQU8sb0JBQW9CLE9BQU8sRUFBRSxDQUFBO0lBQ3BELE9BQU8sbUJBQW1CLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxVQUFVLG1CQUFtQixFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQTtBQUM1RSxDQUFDIn0=
@@ -5,3 +5,4 @@ export * from "./idempotency";
5
5
  export * from "./durable-create";
6
6
  export * from "./actions";
7
7
  export * from "./webhooks";
8
+ export * from "./tracking";
@@ -21,4 +21,5 @@ __exportStar(require("./idempotency"), exports);
21
21
  __exportStar(require("./durable-create"), exports);
22
22
  __exportStar(require("./actions"), exports);
23
23
  __exportStar(require("./webhooks"), exports);
24
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL21vZHVsZXMvc2hpcHBpbmcvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDBDQUF1QjtBQUN2QiwrQ0FBNEI7QUFDNUIsd0NBQXFCO0FBQ3JCLGdEQUE2QjtBQUM3QixtREFBZ0M7QUFDaEMsNENBQXlCO0FBQ3pCLDZDQUEwQiJ9
24
+ __exportStar(require("./tracking"), exports);
25
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL21vZHVsZXMvc2hpcHBpbmcvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDBDQUF1QjtBQUN2QiwrQ0FBNEI7QUFDNUIsd0NBQXFCO0FBQ3JCLGdEQUE2QjtBQUM3QixtREFBZ0M7QUFDaEMsNENBQXlCO0FBQ3pCLDZDQUEwQjtBQUMxQiw2Q0FBMEIifQ==
@@ -0,0 +1,48 @@
1
+ import type { ShippingCarrier, ShippingOrder, ShippingOrderService } from "./types";
2
+ import type { IntegrationOperationStore } from "../../../modules/integration-operation/types";
3
+ export type CanonicalShippingStatus = "CREATED" | "LABEL_CREATED" | "ACCEPTED" | "PROCESSING" | "IN_TRANSIT" | "AT_PICKUP_POINT" | "OUT_FOR_DELIVERY" | "DELIVERED" | "RETURNING" | "RETURNED" | "CANCELLED" | "ERROR" | "UNKNOWN";
4
+ export type NormalizedTrackingEvent = {
5
+ carrier: ShippingCarrier;
6
+ shipmentIdentifiers: string[];
7
+ status?: CanonicalShippingStatus | null;
8
+ rawStatus?: string | null;
9
+ statusText?: string | null;
10
+ occurredAt?: string | null;
11
+ eventId?: string | null;
12
+ source: string;
13
+ trackingNumber?: string | null;
14
+ trackingUrl?: string | null;
15
+ extra?: Record<string, unknown>;
16
+ };
17
+ export declare function isTerminalShippingStatus(value: unknown): boolean;
18
+ export declare function mapPacketaStatus(input: {
19
+ statusId?: unknown;
20
+ statusCode?: unknown;
21
+ isReturning?: unknown;
22
+ }): CanonicalShippingStatus | null;
23
+ export declare function mapMplPullStatus(input: {
24
+ categoryCode?: unknown;
25
+ category?: unknown;
26
+ description?: unknown;
27
+ }): CanonicalShippingStatus | null;
28
+ export declare function mapMplPushStatus(status: unknown, statusText?: unknown): CanonicalShippingStatus | null;
29
+ export declare function mapDpdStatusdataScanCode(scanCode: unknown, serviceCode?: unknown): CanonicalShippingStatus | null;
30
+ export declare function applyNormalizedTrackingEvent(input: {
31
+ orderService: ShippingOrderService;
32
+ event: NormalizedTrackingEvent;
33
+ operationStore?: IntegrationOperationStore;
34
+ }): Promise<{
35
+ duplicate: boolean;
36
+ orderId: {} | null;
37
+ status: {} | null;
38
+ stale?: undefined;
39
+ terminalRegression?: undefined;
40
+ } | {
41
+ orderId: string;
42
+ status: {} | null;
43
+ stale: boolean;
44
+ terminalRegression: boolean;
45
+ duplicate?: undefined;
46
+ } | null>;
47
+ export declare function findOrderByShipmentIdentifiers(orderService: ShippingOrderService, carrier: ShippingCarrier, identifiers: string[], operationStore?: IntegrationOperationStore): Promise<ShippingOrder | undefined>;
48
+ export declare function shipmentMatches(order: ShippingOrder, carrier: ShippingCarrier, identifiers: Set<string>): boolean;