@hszrdm/core 1.4.0 → 1.6.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.
- package/.medusa/server/src/admin/index.js +6361 -3789
- package/.medusa/server/src/admin/index.mjs +6361 -3789
- package/.medusa/server/src/api/admin/back-in-stock/route.d.ts +2 -0
- package/.medusa/server/src/api/admin/back-in-stock/route.js +70 -0
- package/.medusa/server/src/api/admin/core-carts/[id]/items/[itemId]/route.d.ts +3 -0
- package/.medusa/server/src/api/admin/core-carts/[id]/items/[itemId]/route.js +64 -0
- package/.medusa/server/src/api/admin/core-carts/[id]/items/route.d.ts +2 -0
- package/.medusa/server/src/api/admin/core-carts/[id]/items/route.js +40 -0
- package/.medusa/server/src/api/admin/core-carts/[id]/promotions/[code]/route.d.ts +2 -0
- package/.medusa/server/src/api/admin/core-carts/[id]/promotions/[code]/route.js +40 -0
- package/.medusa/server/src/api/admin/core-carts/[id]/promotions/route.d.ts +2 -0
- package/.medusa/server/src/api/admin/core-carts/[id]/promotions/route.js +41 -0
- package/.medusa/server/src/api/admin/core-carts/[id]/route.d.ts +2 -0
- package/.medusa/server/src/api/admin/core-carts/[id]/route.js +28 -0
- package/.medusa/server/src/api/admin/core-carts/customer/[id]/route.d.ts +2 -0
- package/.medusa/server/src/api/admin/core-carts/customer/[id]/route.js +34 -0
- package/.medusa/server/src/api/admin/core-carts/route.d.ts +3 -0
- package/.medusa/server/src/api/admin/core-carts/route.js +69 -0
- package/.medusa/server/src/api/admin/customer-activation/route.d.ts +2 -0
- package/.medusa/server/src/api/admin/customer-activation/route.js +97 -0
- package/.medusa/server/src/api/admin/customer-import/route.d.ts +2 -0
- package/.medusa/server/src/api/admin/customer-import/route.js +166 -0
- package/.medusa/server/src/api/admin/order-export/route.d.ts +2 -0
- package/.medusa/server/src/api/admin/order-export/route.js +88 -0
- package/.medusa/server/src/api/admin/product-migration/inventory/route.d.ts +3 -0
- package/.medusa/server/src/api/admin/product-migration/inventory/route.js +164 -0
- package/.medusa/server/src/api/admin/product-migration/price-list-prices/route.d.ts +3 -0
- package/.medusa/server/src/api/admin/product-migration/price-list-prices/route.js +204 -0
- package/.medusa/server/src/api/admin/product-migration/products/route.d.ts +2 -0
- package/.medusa/server/src/api/admin/product-migration/products/route.js +24 -0
- package/.medusa/server/src/api/admin/product-reviews/[id]/route.js +36 -4
- package/.medusa/server/src/api/admin/product-reviews/settings/route.d.ts +3 -0
- package/.medusa/server/src/api/admin/product-reviews/settings/route.js +63 -0
- package/.medusa/server/src/api/admin/shared-cart/settings/route.d.ts +5 -0
- package/.medusa/server/src/api/admin/shared-cart/settings/route.js +31 -0
- package/.medusa/server/src/api/admin/system-runtime/route.d.ts +2 -0
- package/.medusa/server/src/api/admin/system-runtime/route.js +18 -0
- package/.medusa/server/src/api/hooks/packeta/status/route.d.ts +2 -0
- package/.medusa/server/src/api/hooks/packeta/status/route.js +55 -0
- package/.medusa/server/src/api/middlewares.js +24 -1
- package/.medusa/server/src/api/store/abandoned-cart/recover/route.d.ts +2 -0
- package/.medusa/server/src/api/store/abandoned-cart/recover/route.js +37 -0
- package/.medusa/server/src/api/store/back-in-stock/route.d.ts +8 -0
- package/.medusa/server/src/api/store/back-in-stock/route.js +124 -0
- package/.medusa/server/src/api/store/core-carts/me/active/route.d.ts +2 -0
- package/.medusa/server/src/api/store/core-carts/me/active/route.js +54 -0
- package/.medusa/server/src/api/store/customer-activation/complete/route.d.ts +2 -0
- package/.medusa/server/src/api/store/customer-activation/complete/route.js +96 -0
- package/.medusa/server/src/api/store/customer-activation/route.d.ts +2 -0
- package/.medusa/server/src/api/store/customer-activation/route.js +34 -0
- package/.medusa/server/src/api/store/products/[id]/reviews/route.d.ts +1 -0
- package/.medusa/server/src/api/store/products/[id]/reviews/route.js +76 -34
- package/.medusa/server/src/api/store/review-request/route.d.ts +2 -0
- package/.medusa/server/src/api/store/review-request/route.js +60 -0
- package/.medusa/server/src/api/store/shared-carts/[token]/route.d.ts +2 -0
- package/.medusa/server/src/api/store/shared-carts/[token]/route.js +52 -0
- package/.medusa/server/src/api/store/shared-carts/route.d.ts +13 -0
- package/.medusa/server/src/api/store/shared-carts/route.js +78 -0
- package/.medusa/server/src/core/abandoned-cart.d.ts +64 -0
- package/.medusa/server/src/core/abandoned-cart.js +197 -0
- package/.medusa/server/src/core/admin-cart-management.d.ts +18 -0
- package/.medusa/server/src/core/admin-cart-management.js +102 -0
- package/.medusa/server/src/core/admin-cart-visibility.d.ts +94 -0
- package/.medusa/server/src/core/admin-cart-visibility.js +192 -0
- package/.medusa/server/src/core/back-in-stock.d.ts +51 -0
- package/.medusa/server/src/core/back-in-stock.js +107 -0
- package/.medusa/server/src/core/cart-observability.d.ts +23 -0
- package/.medusa/server/src/core/cart-observability.js +54 -0
- package/.medusa/server/src/core/checkout-contract.d.ts +1 -0
- package/.medusa/server/src/core/checkout-contract.js +2 -1
- package/.medusa/server/src/core/customer-account-contract.d.ts +3 -0
- package/.medusa/server/src/core/customer-account-contract.js +4 -1
- package/.medusa/server/src/core/customer-activation.d.ts +120 -0
- package/.medusa/server/src/core/customer-activation.js +169 -0
- package/.medusa/server/src/core/customer-cart-resume.d.ts +21 -0
- package/.medusa/server/src/core/customer-cart-resume.js +72 -0
- package/.medusa/server/src/core/customer-email.d.ts +1 -1
- package/.medusa/server/src/core/customer-email.js +4 -1
- package/.medusa/server/src/core/native-migration-export.d.ts +6 -0
- package/.medusa/server/src/core/native-migration-export.js +105 -0
- package/.medusa/server/src/core/order-export.d.ts +11 -0
- package/.medusa/server/src/core/order-export.js +297 -0
- package/.medusa/server/src/core/review-request.d.ts +61 -0
- package/.medusa/server/src/core/review-request.js +105 -0
- package/.medusa/server/src/core/review-reward.d.ts +94 -0
- package/.medusa/server/src/core/review-reward.js +124 -0
- package/.medusa/server/src/core/runtime-health.d.ts +39 -0
- package/.medusa/server/src/core/runtime-health.js +250 -0
- package/.medusa/server/src/core/storefront-core-config.d.ts +10 -0
- package/.medusa/server/src/core/storefront-core-config.js +26 -1
- package/.medusa/server/src/core/version.d.ts +2 -2
- package/.medusa/server/src/core/version.js +2 -2
- package/.medusa/server/src/jobs/abandoned-cart-recovery.d.ts +23 -0
- package/.medusa/server/src/jobs/abandoned-cart-recovery.js +137 -0
- package/.medusa/server/src/jobs/back-in-stock-reconciliation.d.ts +15 -0
- package/.medusa/server/src/jobs/back-in-stock-reconciliation.js +90 -0
- package/.medusa/server/src/jobs/dpd-statusdata-sync.d.ts +17 -0
- package/.medusa/server/src/jobs/dpd-statusdata-sync.js +107 -0
- package/.medusa/server/src/jobs/mpl-push-tracking.d.ts +19 -0
- package/.medusa/server/src/jobs/mpl-push-tracking.js +183 -0
- package/.medusa/server/src/jobs/mpl-status-sync.d.ts +8 -2
- package/.medusa/server/src/jobs/mpl-status-sync.js +12 -7
- package/.medusa/server/src/jobs/product-review-request-dispatch.d.ts +28 -0
- package/.medusa/server/src/jobs/product-review-request-dispatch.js +84 -0
- package/.medusa/server/src/jobs/runtime-heartbeat.d.ts +12 -0
- package/.medusa/server/src/jobs/runtime-heartbeat.js +13 -0
- package/.medusa/server/src/jobs/shipping-status-sync.d.ts +8 -2
- package/.medusa/server/src/jobs/shipping-status-sync.js +11 -14
- package/.medusa/server/src/lib/modules/shipping/idempotency.js +3 -3
- package/.medusa/server/src/lib/modules/shipping/index.d.ts +1 -0
- package/.medusa/server/src/lib/modules/shipping/index.js +2 -1
- package/.medusa/server/src/lib/modules/shipping/tracking.d.ts +48 -0
- package/.medusa/server/src/lib/modules/shipping/tracking.js +368 -0
- package/.medusa/server/src/lib/modules/shipping/webhooks.d.ts +6 -9
- package/.medusa/server/src/lib/modules/shipping/webhooks.js +24 -137
- package/.medusa/server/src/modules/back-in-stock/index.d.ts +23 -0
- package/.medusa/server/src/modules/back-in-stock/index.js +16 -0
- package/.medusa/server/src/modules/back-in-stock/migrations/Migration20261101202000.d.ts +5 -0
- package/.medusa/server/src/modules/back-in-stock/migrations/Migration20261101202000.js +18 -0
- package/.medusa/server/src/modules/back-in-stock/models/back-in-stock-subscription.d.ts +13 -0
- package/.medusa/server/src/modules/back-in-stock/models/back-in-stock-subscription.js +23 -0
- package/.medusa/server/src/modules/back-in-stock/service.d.ts +22 -0
- package/.medusa/server/src/modules/back-in-stock/service.js +12 -0
- package/.medusa/server/src/modules/email-center/abandoned-cart-registration.d.ts +1 -0
- package/.medusa/server/src/modules/email-center/abandoned-cart-registration.js +27 -0
- package/.medusa/server/src/modules/email-center/back-in-stock-registration.d.ts +1 -0
- package/.medusa/server/src/modules/email-center/back-in-stock-registration.js +27 -0
- package/.medusa/server/src/modules/email-center/defaults.js +7 -1
- package/.medusa/server/src/modules/email-center/index.d.ts +2 -0
- package/.medusa/server/src/modules/email-center/index.js +3 -1
- package/.medusa/server/src/modules/integration-settings/abandoned-cart-registration.d.ts +1 -0
- package/.medusa/server/src/modules/integration-settings/abandoned-cart-registration.js +30 -0
- package/.medusa/server/src/modules/integration-settings/index.d.ts +1 -0
- package/.medusa/server/src/modules/integration-settings/index.js +2 -1
- package/.medusa/server/src/modules/integration-settings/storefront-public-registration.js +15 -1
- package/.medusa/server/src/modules/product-review/index.d.ts +14 -0
- package/.medusa/server/src/modules/product-review/migrations/Migration20261101113000.d.ts +5 -0
- package/.medusa/server/src/modules/product-review/migrations/Migration20261101113000.js +28 -0
- package/.medusa/server/src/modules/product-review/migrations/Migration20261101114500.d.ts +5 -0
- package/.medusa/server/src/modules/product-review/migrations/Migration20261101114500.js +20 -0
- package/.medusa/server/src/modules/product-review/migrations/Migration20261101121500.d.ts +5 -0
- package/.medusa/server/src/modules/product-review/migrations/Migration20261101121500.js +18 -0
- package/.medusa/server/src/modules/product-review/models/product-review-settings.d.ts +15 -0
- package/.medusa/server/src/modules/product-review/models/product-review-settings.js +19 -0
- package/.medusa/server/src/modules/product-review/models/product-review.d.ts +6 -2
- package/.medusa/server/src/modules/product-review/models/product-review.js +7 -3
- package/.medusa/server/src/modules/product-review/service.d.ts +22 -1
- package/.medusa/server/src/modules/product-review/service.js +3 -2
- package/.medusa/server/src/modules/shared-cart/index.d.ts +21 -0
- package/.medusa/server/src/modules/shared-cart/index.js +13 -0
- package/.medusa/server/src/modules/shared-cart/migrations/Migration20261102010000.d.ts +5 -0
- package/.medusa/server/src/modules/shared-cart/migrations/Migration20261102010000.js +16 -0
- package/.medusa/server/src/modules/shared-cart/models/shared-cart.d.ts +10 -0
- package/.medusa/server/src/modules/shared-cart/models/shared-cart.js +17 -0
- package/.medusa/server/src/modules/shared-cart/service.d.ts +14 -0
- package/.medusa/server/src/modules/shared-cart/service.js +11 -0
- package/.medusa/server/src/modules/shared-cart/settings.d.ts +7 -0
- package/.medusa/server/src/modules/shared-cart/settings.js +64 -0
- package/.medusa/server/src/providers/dpd/index.d.ts +2 -0
- package/.medusa/server/src/providers/dpd/index.js +3 -1
- package/.medusa/server/src/providers/dpd/statusdata-ftp.d.ts +16 -0
- package/.medusa/server/src/providers/dpd/statusdata-ftp.js +268 -0
- package/.medusa/server/src/providers/dpd/statusdata.d.ts +14 -0
- package/.medusa/server/src/providers/dpd/statusdata.js +161 -0
- package/.medusa/server/src/providers/mpl/client.d.ts +3 -1
- package/.medusa/server/src/providers/mpl/client.js +154 -2
- package/.medusa/server/src/providers/mpl/service.js +31 -20
- package/.medusa/server/src/providers/mpl/types.d.ts +25 -0
- package/.medusa/server/src/providers/mpl/types.js +1 -1
- package/.medusa/server/src/providers/packeta/index.d.ts +1 -0
- package/.medusa/server/src/providers/packeta/index.js +2 -1
- package/.medusa/server/src/providers/packeta/push-tracking.d.ts +8 -0
- package/.medusa/server/src/providers/packeta/push-tracking.js +96 -0
- package/.medusa/server/src/providers/packeta/service.js +22 -2
- package/.medusa/server/src/scripts/core-init.d.ts +1 -1
- package/.medusa/server/src/scripts/core-init.js +3 -2
- package/.medusa/server/src/subscribers/back-in-stock-inventory-changed.d.ts +7 -0
- package/.medusa/server/src/subscribers/back-in-stock-inventory-changed.js +65 -0
- package/.medusa/server/src/workflows/link-migrated-customer.d.ts +8 -0
- package/.medusa/server/src/workflows/link-migrated-customer.js +17 -0
- package/README.md +1 -1
- package/package.json +30 -8
|
@@ -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<
|
|
3
|
-
|
|
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
|
-
|
|
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
|
|
34
|
-
//
|
|
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
|
-
:
|
|
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,
|
|
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.
|
|
10
|
+
? shipment.parcelNumber ?? shipment.parcelId
|
|
11
11
|
: carrier === "packeta"
|
|
12
12
|
? shipment.packetId ?? shipment.trackingNumber
|
|
13
13
|
: carrier === "dpd"
|
|
14
|
-
? shipment.
|
|
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,
|
|
28
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWRlbXBvdGVuY3kuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL21vZHVsZXMvc2hpcHBpbmcvaWRlbXBvdGVuY3kudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFFQSxnREFlQztBQUVELGtFQVFDO0FBRUQsb0VBT0M7QUFsQ0QsU0FBZ0Isa0JBQWtCLENBQ2hDLE9BQXdCLEVBQ3hCLFFBQWlDO0lBRWpDLE1BQU0sS0FBSyxHQUFHLE9BQU8sS0FBSyxTQUFTO1FBQ2pDLENBQUMsQ0FBQyxRQUFRLENBQUMsU0FBUyxJQUFJLFFBQVEsQ0FBQyxjQUFjO1FBQy9DLENBQUMsQ0FBQyxPQUFPLEtBQUssS0FBSztZQUNqQixDQUFDLENBQUMsUUFBUSxDQUFDLFlBQVksSUFBSSxRQUFRLENBQUMsUUFBUTtZQUM1QyxDQUFDLENBQUMsT0FBTyxLQUFLLFNBQVM7Z0JBQ3JCLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxJQUFJLFFBQVEsQ0FBQyxjQUFjO2dCQUM5QyxDQUFDLENBQUMsT0FBTyxLQUFLLEtBQUs7b0JBQ2pCLENBQUMsQ0FBQyxRQUFRLENBQUMsWUFBWSxJQUFJLFFBQVEsQ0FBQyxVQUFVO29CQUM5QyxDQUFDLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQTtJQUVqQyxPQUFPLEtBQUssSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFBO0FBQzdDLENBQUM7QUFFRCxTQUFnQiwyQkFBMkIsQ0FDekMsT0FBd0IsRUFDeEIsUUFBb0Q7SUFFcEQsSUFBSSxDQUFDLFFBQVEsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUMsQ0FBQyxXQUFXLEVBQUUsS0FBSyxXQUFXLEVBQUUsQ0FBQztRQUM3RSxPQUFPLFNBQVMsQ0FBQTtJQUNsQixDQUFDO0lBQ0QsT0FBTyxrQkFBa0IsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLElBQUksU0FBUyxDQUFBO0FBQzNELENBQUM7QUFFRCxTQUFnQiw0QkFBNEIsQ0FDMUMsT0FBd0IsRUFDeEIsT0FBZSxFQUNmLG1CQUFtQztJQUVuQyxNQUFNLElBQUksR0FBRyxHQUFHLE9BQU8sb0JBQW9CLE9BQU8sRUFBRSxDQUFBO0lBQ3BELE9BQU8sbUJBQW1CLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxVQUFVLG1CQUFtQixFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQTtBQUM1RSxDQUFDIn0=
|
|
@@ -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
|
-
|
|
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;
|
|
@@ -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
|
-
|
|
8
|
-
|
|
7
|
+
orderId: {} | null;
|
|
8
|
+
status: {} | null;
|
|
9
9
|
stale?: undefined;
|
|
10
|
+
terminalRegression?: undefined;
|
|
10
11
|
} | {
|
|
11
12
|
orderId: string;
|
|
12
|
-
status:
|
|
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 {};
|