@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,268 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.DpdStatusdataFtpClient = void 0;
|
|
7
|
+
exports.dpdStatusdataFtpConfigFromEnv = dpdStatusdataFtpConfigFromEnv;
|
|
8
|
+
const node_net_1 = __importDefault(require("node:net"));
|
|
9
|
+
class DpdStatusdataFtpClient {
|
|
10
|
+
constructor(config) {
|
|
11
|
+
this.config = config;
|
|
12
|
+
}
|
|
13
|
+
async listFiles() {
|
|
14
|
+
return this.withSession(async (session) => {
|
|
15
|
+
const body = await session.dataCommand("NLST");
|
|
16
|
+
return body
|
|
17
|
+
.toString("utf8")
|
|
18
|
+
.split(/\r?\n/)
|
|
19
|
+
.map((item) => item.trim())
|
|
20
|
+
.filter((item) => item && !item.endsWith("/"));
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
async readFile(filename) {
|
|
24
|
+
const safe = safeRemoteFilename(filename);
|
|
25
|
+
return this.withSession(async (session) => {
|
|
26
|
+
const body = await session.dataCommand(`RETR ${safe}`);
|
|
27
|
+
return body.toString("utf8");
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
async withSession(work) {
|
|
31
|
+
const session = await FtpSession.connect(this.config);
|
|
32
|
+
try {
|
|
33
|
+
return await work(session);
|
|
34
|
+
}
|
|
35
|
+
finally {
|
|
36
|
+
await session.close();
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
exports.DpdStatusdataFtpClient = DpdStatusdataFtpClient;
|
|
41
|
+
class FtpSession {
|
|
42
|
+
constructor(control, config) {
|
|
43
|
+
this.control = control;
|
|
44
|
+
this.config = config;
|
|
45
|
+
}
|
|
46
|
+
static async connect(config) {
|
|
47
|
+
if (!config.host || !config.username || !config.password) {
|
|
48
|
+
throw new Error("A DPD Statusdata FTP host/felhasználó/jelszó nincs konfigurálva.");
|
|
49
|
+
}
|
|
50
|
+
const control = await FtpControl.connect(config.host, config.port, config.timeoutMs);
|
|
51
|
+
const greeting = await control.nextReply();
|
|
52
|
+
expectCode(greeting, [220], "DPD FTP kapcsolódás");
|
|
53
|
+
const user = await control.command(`USER ${config.username}`);
|
|
54
|
+
if (user.code === 331) {
|
|
55
|
+
const pass = await control.command(`PASS ${config.password}`);
|
|
56
|
+
expectCode(pass, [230], "DPD FTP belépés");
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
expectCode(user, [230], "DPD FTP belépés");
|
|
60
|
+
}
|
|
61
|
+
const type = await control.command("TYPE I");
|
|
62
|
+
expectCode(type, [200], "DPD FTP bináris mód");
|
|
63
|
+
if (config.directory?.trim()) {
|
|
64
|
+
const cwd = await control.command(`CWD ${safeRemoteDirectory(config.directory)}`);
|
|
65
|
+
expectCode(cwd, [250], "DPD FTP könyvtárváltás");
|
|
66
|
+
}
|
|
67
|
+
return new FtpSession(control, config);
|
|
68
|
+
}
|
|
69
|
+
async dataCommand(command) {
|
|
70
|
+
const passive = await this.control.command("PASV");
|
|
71
|
+
expectCode(passive, [227], "DPD FTP passzív mód");
|
|
72
|
+
const target = parsePassiveAddress(passive.message, this.config.host);
|
|
73
|
+
const dataSocket = await connectSocket(target.host, target.port, this.config.timeoutMs);
|
|
74
|
+
const chunks = [];
|
|
75
|
+
dataSocket.on("data", (chunk) => chunks.push(Buffer.from(chunk)));
|
|
76
|
+
// Observe completion before issuing NLST/RETR. Small transfers can finish
|
|
77
|
+
// before the preliminary 125/150 control reply is processed.
|
|
78
|
+
const dataCompleted = waitForSocketEnd(dataSocket, this.config.timeoutMs);
|
|
79
|
+
try {
|
|
80
|
+
const preliminary = await this.control.command(command);
|
|
81
|
+
expectCode(preliminary, [125, 150], `DPD FTP ${command.split(" ")[0]}`);
|
|
82
|
+
await dataCompleted;
|
|
83
|
+
}
|
|
84
|
+
catch (error) {
|
|
85
|
+
dataSocket.destroy();
|
|
86
|
+
await dataCompleted.catch(() => undefined);
|
|
87
|
+
throw error;
|
|
88
|
+
}
|
|
89
|
+
const completed = await this.control.nextReply();
|
|
90
|
+
expectCode(completed, [226, 250], `DPD FTP ${command.split(" ")[0]} lezárás`);
|
|
91
|
+
return Buffer.concat(chunks);
|
|
92
|
+
}
|
|
93
|
+
async close() {
|
|
94
|
+
try {
|
|
95
|
+
await this.control.command("QUIT");
|
|
96
|
+
}
|
|
97
|
+
catch {
|
|
98
|
+
// Connection may already be closed by the server.
|
|
99
|
+
}
|
|
100
|
+
finally {
|
|
101
|
+
this.control.destroy();
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
class FtpControl {
|
|
106
|
+
constructor(socket, timeoutMs) {
|
|
107
|
+
this.socket = socket;
|
|
108
|
+
this.timeoutMs = timeoutMs;
|
|
109
|
+
this.buffer = "";
|
|
110
|
+
this.replies = [];
|
|
111
|
+
this.waiters = [];
|
|
112
|
+
this.multilineCode = null;
|
|
113
|
+
this.multilineLines = [];
|
|
114
|
+
socket.setEncoding("utf8");
|
|
115
|
+
socket.on("data", (chunk) => this.consume(String(chunk)));
|
|
116
|
+
}
|
|
117
|
+
static async connect(host, port, timeoutMs) {
|
|
118
|
+
const socket = await connectSocket(host, port, timeoutMs);
|
|
119
|
+
return new FtpControl(socket, timeoutMs);
|
|
120
|
+
}
|
|
121
|
+
async command(command) {
|
|
122
|
+
if (/\r|\n/.test(command))
|
|
123
|
+
throw new Error("Érvénytelen FTP parancs.");
|
|
124
|
+
this.socket.write(`${command}\r\n`);
|
|
125
|
+
return this.nextReply();
|
|
126
|
+
}
|
|
127
|
+
nextReply() {
|
|
128
|
+
const ready = this.replies.shift();
|
|
129
|
+
if (ready)
|
|
130
|
+
return Promise.resolve(ready);
|
|
131
|
+
return new Promise((resolve, reject) => {
|
|
132
|
+
const timeout = setTimeout(() => {
|
|
133
|
+
const index = this.waiters.indexOf(onReply);
|
|
134
|
+
if (index >= 0)
|
|
135
|
+
this.waiters.splice(index, 1);
|
|
136
|
+
reject(new Error("A DPD FTP válasz időtúllépés miatt megszakadt."));
|
|
137
|
+
}, this.timeoutMs);
|
|
138
|
+
const onReply = (reply) => {
|
|
139
|
+
clearTimeout(timeout);
|
|
140
|
+
resolve(reply);
|
|
141
|
+
};
|
|
142
|
+
this.waiters.push(onReply);
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
destroy() {
|
|
146
|
+
this.socket.destroy();
|
|
147
|
+
}
|
|
148
|
+
consume(chunk) {
|
|
149
|
+
this.buffer += chunk;
|
|
150
|
+
while (true) {
|
|
151
|
+
const end = this.buffer.indexOf("\n");
|
|
152
|
+
if (end < 0)
|
|
153
|
+
break;
|
|
154
|
+
const line = this.buffer.slice(0, end + 1).replace(/\r?\n$/, "");
|
|
155
|
+
this.buffer = this.buffer.slice(end + 1);
|
|
156
|
+
this.consumeLine(line);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
consumeLine(line) {
|
|
160
|
+
if (this.multilineCode) {
|
|
161
|
+
this.multilineLines.push(line);
|
|
162
|
+
if (line.startsWith(`${this.multilineCode} `)) {
|
|
163
|
+
const reply = {
|
|
164
|
+
code: Number(this.multilineCode),
|
|
165
|
+
message: this.multilineLines.join("\n"),
|
|
166
|
+
};
|
|
167
|
+
this.multilineCode = null;
|
|
168
|
+
this.multilineLines = [];
|
|
169
|
+
this.pushReply(reply);
|
|
170
|
+
}
|
|
171
|
+
return;
|
|
172
|
+
}
|
|
173
|
+
const match = line.match(/^(\d{3})([- ])(.*)$/);
|
|
174
|
+
if (!match)
|
|
175
|
+
return;
|
|
176
|
+
if (match[2] === "-") {
|
|
177
|
+
this.multilineCode = match[1];
|
|
178
|
+
this.multilineLines = [line];
|
|
179
|
+
return;
|
|
180
|
+
}
|
|
181
|
+
this.pushReply({ code: Number(match[1]), message: line });
|
|
182
|
+
}
|
|
183
|
+
pushReply(reply) {
|
|
184
|
+
const waiter = this.waiters.shift();
|
|
185
|
+
if (waiter)
|
|
186
|
+
waiter(reply);
|
|
187
|
+
else
|
|
188
|
+
this.replies.push(reply);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
function parsePassiveAddress(message, fallbackHost) {
|
|
192
|
+
const match = message.match(/\((\d+),(\d+),(\d+),(\d+),(\d+),(\d+)\)/);
|
|
193
|
+
if (!match)
|
|
194
|
+
throw new Error("A DPD FTP szerver érvénytelen PASV választ adott.");
|
|
195
|
+
const advertisedHost = `${match[1]}.${match[2]}.${match[3]}.${match[4]}`;
|
|
196
|
+
const port = Number(match[5]) * 256 + Number(match[6]);
|
|
197
|
+
const host = advertisedHost === "0.0.0.0" ? fallbackHost : advertisedHost;
|
|
198
|
+
return { host, port };
|
|
199
|
+
}
|
|
200
|
+
function connectSocket(host, port, timeoutMs) {
|
|
201
|
+
return new Promise((resolve, reject) => {
|
|
202
|
+
const socket = node_net_1.default.createConnection({ host, port });
|
|
203
|
+
const timeout = setTimeout(() => {
|
|
204
|
+
socket.destroy();
|
|
205
|
+
reject(new Error("A DPD FTP kapcsolat időtúllépés miatt megszakadt."));
|
|
206
|
+
}, timeoutMs);
|
|
207
|
+
socket.once("connect", () => {
|
|
208
|
+
clearTimeout(timeout);
|
|
209
|
+
resolve(socket);
|
|
210
|
+
});
|
|
211
|
+
socket.once("error", (error) => {
|
|
212
|
+
clearTimeout(timeout);
|
|
213
|
+
reject(error);
|
|
214
|
+
});
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
function waitForSocketEnd(socket, timeoutMs) {
|
|
218
|
+
return new Promise((resolve, reject) => {
|
|
219
|
+
const timeout = setTimeout(() => {
|
|
220
|
+
socket.destroy();
|
|
221
|
+
reject(new Error("A DPD FTP adatkapcsolat időtúllépés miatt megszakadt."));
|
|
222
|
+
}, timeoutMs);
|
|
223
|
+
const done = () => {
|
|
224
|
+
clearTimeout(timeout);
|
|
225
|
+
resolve();
|
|
226
|
+
};
|
|
227
|
+
socket.once("end", done);
|
|
228
|
+
socket.once("close", done);
|
|
229
|
+
socket.once("error", (error) => {
|
|
230
|
+
clearTimeout(timeout);
|
|
231
|
+
reject(error);
|
|
232
|
+
});
|
|
233
|
+
});
|
|
234
|
+
}
|
|
235
|
+
function expectCode(reply, allowed, operation) {
|
|
236
|
+
if (allowed.includes(reply.code))
|
|
237
|
+
return;
|
|
238
|
+
throw new Error(`${operation} sikertelen (FTP ${reply.code}).`);
|
|
239
|
+
}
|
|
240
|
+
function safeRemoteFilename(value) {
|
|
241
|
+
const filename = value.trim();
|
|
242
|
+
if (!filename || filename.includes("..") || /[\\/\r\n]/.test(filename)) {
|
|
243
|
+
throw new Error("Érvénytelen DPD Statusdata fájlnév.");
|
|
244
|
+
}
|
|
245
|
+
return filename;
|
|
246
|
+
}
|
|
247
|
+
function safeRemoteDirectory(value) {
|
|
248
|
+
const directory = value.trim();
|
|
249
|
+
if (!directory || directory.includes("..") || /[\r\n]/.test(directory)) {
|
|
250
|
+
throw new Error("Érvénytelen DPD Statusdata FTP könyvtár.");
|
|
251
|
+
}
|
|
252
|
+
return directory;
|
|
253
|
+
}
|
|
254
|
+
function dpdStatusdataFtpConfigFromEnv(env = process.env) {
|
|
255
|
+
return {
|
|
256
|
+
host: env.DPD_STATUSDATA_FTP_HOST?.trim() || "",
|
|
257
|
+
port: positiveInteger(env.DPD_STATUSDATA_FTP_PORT, 21),
|
|
258
|
+
username: env.DPD_STATUSDATA_FTP_USERNAME?.trim() || "",
|
|
259
|
+
password: env.DPD_STATUSDATA_FTP_PASSWORD || "",
|
|
260
|
+
directory: env.DPD_STATUSDATA_FTP_DIR?.trim() || undefined,
|
|
261
|
+
timeoutMs: positiveInteger(env.DPD_STATUSDATA_FTP_TIMEOUT_MS, 15000),
|
|
262
|
+
};
|
|
263
|
+
}
|
|
264
|
+
function positiveInteger(value, fallback) {
|
|
265
|
+
const number = Number(value);
|
|
266
|
+
return Number.isInteger(number) && number > 0 ? number : fallback;
|
|
267
|
+
}
|
|
268
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdHVzZGF0YS1mdHAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvcHJvdmlkZXJzL2RwZC9zdGF0dXNkYXRhLWZ0cC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFxUkEsc0VBV0M7QUFoU0Qsd0RBQTBCO0FBZ0IxQixNQUFhLHNCQUFzQjtJQUNqQyxZQUFxQixNQUE4QjtRQUE5QixXQUFNLEdBQU4sTUFBTSxDQUF3QjtJQUFHLENBQUM7SUFFdkQsS0FBSyxDQUFDLFNBQVM7UUFDYixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFO1lBQ3hDLE1BQU0sSUFBSSxHQUFHLE1BQU0sT0FBTyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQTtZQUM5QyxPQUFPLElBQUk7aUJBQ1IsUUFBUSxDQUFDLE1BQU0sQ0FBQztpQkFDaEIsS0FBSyxDQUFDLE9BQU8sQ0FBQztpQkFDZCxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztpQkFDMUIsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUE7UUFDbEQsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDO0lBRUQsS0FBSyxDQUFDLFFBQVEsQ0FBQyxRQUFnQjtRQUM3QixNQUFNLElBQUksR0FBRyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUN6QyxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFO1lBQ3hDLE1BQU0sSUFBSSxHQUFHLE1BQU0sT0FBTyxDQUFDLFdBQVcsQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDLENBQUE7WUFDdEQsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFB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
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { type NormalizedTrackingEvent } from "../../lib/modules/shipping/tracking";
|
|
2
|
+
export type DpdStatusdataRecord = {
|
|
3
|
+
parcelNumber: string;
|
|
4
|
+
scanCode: string;
|
|
5
|
+
serviceCode?: string;
|
|
6
|
+
depotCode?: string;
|
|
7
|
+
depotName?: string;
|
|
8
|
+
occurredAt?: string;
|
|
9
|
+
raw: Record<string, string>;
|
|
10
|
+
};
|
|
11
|
+
export declare function parseDpdStatusdata(input: string): DpdStatusdataRecord[];
|
|
12
|
+
export declare function dpdStatusdataEvent(record: DpdStatusdataRecord): NormalizedTrackingEvent;
|
|
13
|
+
export declare function splitStatusdataLine(line: string): string[];
|
|
14
|
+
export declare function normalizeDpdEventTime(value?: string): string | undefined;
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseDpdStatusdata = parseDpdStatusdata;
|
|
4
|
+
exports.dpdStatusdataEvent = dpdStatusdataEvent;
|
|
5
|
+
exports.splitStatusdataLine = splitStatusdataLine;
|
|
6
|
+
exports.normalizeDpdEventTime = normalizeDpdEventTime;
|
|
7
|
+
const tracking_1 = require("../../lib/modules/shipping/tracking");
|
|
8
|
+
const PARCEL_HEADERS = ["PARCELNO", "PARCEL_NO", "PARCELNUMBER", "PARCEL_NUMBER"];
|
|
9
|
+
const SCAN_HEADERS = ["SCAN_CODE", "SCANCODE", "STATUS_CODE", "STATUSCODE"];
|
|
10
|
+
const DATE_HEADERS = [
|
|
11
|
+
"SCAN_DATE_TIME",
|
|
12
|
+
"SCANDATETIME",
|
|
13
|
+
"EVENT_DATE_TIME",
|
|
14
|
+
"EVENTDATETIME",
|
|
15
|
+
"EVENT_TIME",
|
|
16
|
+
"EVENTTIME",
|
|
17
|
+
];
|
|
18
|
+
const SERVICE_HEADERS = ["SERVICE", "SERVICE_CODE", "SERVICECODE"];
|
|
19
|
+
const DEPOT_CODE_HEADERS = ["DEPOT_CODE", "DEPOTCODE"];
|
|
20
|
+
const DEPOT_NAME_HEADERS = ["DEPOTNAME", "DEPOT_NAME"];
|
|
21
|
+
function parseDpdStatusdata(input) {
|
|
22
|
+
const lines = String(input || "")
|
|
23
|
+
.replace(/^\uFEFF/, "")
|
|
24
|
+
.split(/\r?\n/)
|
|
25
|
+
.map((line) => line.trim())
|
|
26
|
+
.filter(Boolean);
|
|
27
|
+
if (!lines.length)
|
|
28
|
+
return [];
|
|
29
|
+
const first = splitStatusdataLine(lines[0]);
|
|
30
|
+
const normalizedFirst = first.map(normalizeHeader);
|
|
31
|
+
const hasHeader = normalizedFirst.some((value) => PARCEL_HEADERS.includes(value)) &&
|
|
32
|
+
normalizedFirst.some((value) => SCAN_HEADERS.includes(value));
|
|
33
|
+
// Official SCANINFO files define the columns in their first line. The
|
|
34
|
+
// fallback mirrors the first standard tokens only for defensive compatibility.
|
|
35
|
+
const headers = hasHeader
|
|
36
|
+
? normalizedFirst
|
|
37
|
+
: ["PARCELNO", "SCAN_CODE", "DEPOT_CODE", "SCAN_DATE_TIME", "ROUTE", "TOUR", "SERVICE"];
|
|
38
|
+
const dataLines = hasHeader ? lines.slice(1) : lines;
|
|
39
|
+
const parcelIndex = findHeader(headers, PARCEL_HEADERS);
|
|
40
|
+
const scanIndex = findHeader(headers, SCAN_HEADERS);
|
|
41
|
+
const eventIndex = findHeader(headers, DATE_HEADERS);
|
|
42
|
+
const serviceIndex = findHeader(headers, SERVICE_HEADERS);
|
|
43
|
+
const depotCodeIndex = findHeader(headers, DEPOT_CODE_HEADERS);
|
|
44
|
+
const depotNameIndex = findHeader(headers, DEPOT_NAME_HEADERS);
|
|
45
|
+
if (parcelIndex < 0 || scanIndex < 0) {
|
|
46
|
+
throw new Error("A DPD Statusdata fájlból hiányzik a PARCELNO vagy SCAN_CODE oszlop.");
|
|
47
|
+
}
|
|
48
|
+
return dataLines.flatMap((line) => {
|
|
49
|
+
const values = splitStatusdataLine(line);
|
|
50
|
+
const parcelNumber = text(values[parcelIndex]);
|
|
51
|
+
const scanCode = text(values[scanIndex]).padStart(2, "0");
|
|
52
|
+
if (!parcelNumber || !scanCode)
|
|
53
|
+
return [];
|
|
54
|
+
const raw = Object.fromEntries(headers.map((header, index) => [header || `COLUMN_${index + 1}`, text(values[index])]));
|
|
55
|
+
return [{
|
|
56
|
+
parcelNumber,
|
|
57
|
+
scanCode,
|
|
58
|
+
serviceCode: valueAt(values, serviceIndex),
|
|
59
|
+
depotCode: valueAt(values, depotCodeIndex),
|
|
60
|
+
depotName: valueAt(values, depotNameIndex),
|
|
61
|
+
occurredAt: normalizeDpdEventTime(valueAt(values, eventIndex)),
|
|
62
|
+
raw,
|
|
63
|
+
}];
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
function dpdStatusdataEvent(record) {
|
|
67
|
+
const canonical = (0, tracking_1.mapDpdStatusdataScanCode)(record.scanCode, record.serviceCode);
|
|
68
|
+
return {
|
|
69
|
+
carrier: "dpd",
|
|
70
|
+
shipmentIdentifiers: [record.parcelNumber],
|
|
71
|
+
status: canonical,
|
|
72
|
+
rawStatus: record.scanCode,
|
|
73
|
+
statusText: record.depotName || null,
|
|
74
|
+
occurredAt: record.occurredAt || null,
|
|
75
|
+
eventId: [
|
|
76
|
+
record.parcelNumber,
|
|
77
|
+
record.scanCode,
|
|
78
|
+
record.serviceCode || "",
|
|
79
|
+
record.depotCode || "",
|
|
80
|
+
record.occurredAt || "",
|
|
81
|
+
].join(":"),
|
|
82
|
+
source: "statusdata",
|
|
83
|
+
trackingNumber: record.parcelNumber,
|
|
84
|
+
extra: {
|
|
85
|
+
statusdataScanCode: record.scanCode,
|
|
86
|
+
statusdataServiceCode: record.serviceCode,
|
|
87
|
+
statusdataDepotCode: record.depotCode,
|
|
88
|
+
statusdataDepotName: record.depotName,
|
|
89
|
+
},
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
function splitStatusdataLine(line) {
|
|
93
|
+
// DPD SCANINFO is semicolon-separated and officially forbids semicolons in
|
|
94
|
+
// field content. Quoted-field support is kept as harmless defensive tolerance.
|
|
95
|
+
const values = [];
|
|
96
|
+
let current = "";
|
|
97
|
+
let quoted = false;
|
|
98
|
+
for (let index = 0; index < line.length; index += 1) {
|
|
99
|
+
const char = line[index];
|
|
100
|
+
if (char === '"') {
|
|
101
|
+
if (quoted && line[index + 1] === '"') {
|
|
102
|
+
current += '"';
|
|
103
|
+
index += 1;
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
quoted = !quoted;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
else if (char === ";" && !quoted) {
|
|
110
|
+
values.push(current.trim());
|
|
111
|
+
current = "";
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
current += char;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
values.push(current.trim());
|
|
118
|
+
return values;
|
|
119
|
+
}
|
|
120
|
+
function normalizeDpdEventTime(value) {
|
|
121
|
+
const raw = text(value);
|
|
122
|
+
if (!raw)
|
|
123
|
+
return undefined;
|
|
124
|
+
const compact = raw.match(/^(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})$/);
|
|
125
|
+
if (compact) {
|
|
126
|
+
return localBudapestToIso(Number(compact[1]), Number(compact[2]), Number(compact[3]), Number(compact[4]), Number(compact[5]), Number(compact[6]));
|
|
127
|
+
}
|
|
128
|
+
const parsed = new Date(raw);
|
|
129
|
+
return Number.isNaN(parsed.getTime()) ? undefined : parsed.toISOString();
|
|
130
|
+
}
|
|
131
|
+
function localBudapestToIso(year, month, day, hour, minute, second) {
|
|
132
|
+
const approximateUtc = Date.UTC(year, month - 1, day, hour, minute, second);
|
|
133
|
+
const offsetMinutes = budapestOffsetMinutes(new Date(approximateUtc));
|
|
134
|
+
return new Date(approximateUtc - offsetMinutes * 60_000).toISOString();
|
|
135
|
+
}
|
|
136
|
+
function budapestOffsetMinutes(date) {
|
|
137
|
+
const formatter = new Intl.DateTimeFormat("en-US", {
|
|
138
|
+
timeZone: "Europe/Budapest",
|
|
139
|
+
timeZoneName: "shortOffset",
|
|
140
|
+
year: "numeric",
|
|
141
|
+
});
|
|
142
|
+
const zone = formatter.formatToParts(date).find((part) => part.type === "timeZoneName")?.value || "GMT+1";
|
|
143
|
+
const match = zone.match(/GMT([+-])(\d{1,2})(?::(\d{2}))?/);
|
|
144
|
+
if (!match)
|
|
145
|
+
return 60;
|
|
146
|
+
const minutes = Number(match[2]) * 60 + Number(match[3] || 0);
|
|
147
|
+
return match[1] === "-" ? -minutes : minutes;
|
|
148
|
+
}
|
|
149
|
+
function findHeader(headers, candidates) {
|
|
150
|
+
return headers.findIndex((header) => candidates.includes(header));
|
|
151
|
+
}
|
|
152
|
+
function normalizeHeader(value) {
|
|
153
|
+
return text(value).toUpperCase().replace(/[\s-]+/g, "_");
|
|
154
|
+
}
|
|
155
|
+
function valueAt(values, index) {
|
|
156
|
+
return index >= 0 ? text(values[index]) || undefined : undefined;
|
|
157
|
+
}
|
|
158
|
+
function text(value) {
|
|
159
|
+
return value == null ? "" : String(value).trim();
|
|
160
|
+
}
|
|
161
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdHVzZGF0YS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9wcm92aWRlcnMvZHBkL3N0YXR1c2RhdGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUE2QkEsZ0RBa0RDO0FBRUQsZ0RBeUJDO0FBRUQsa0RBd0JDO0FBRUQsc0RBa0JDO0FBeEpELGtFQUc0QztBQVk1QyxNQUFNLGNBQWMsR0FBRyxDQUFDLFVBQVUsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLGVBQWUsQ0FBQyxDQUFBO0FBQ2pGLE1BQU0sWUFBWSxHQUFHLENBQUMsV0FBVyxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsWUFBWSxDQUFDLENBQUE7QUFDM0UsTUFBTSxZQUFZLEdBQUc7SUFDbkIsZ0JBQWdCO0lBQ2hCLGNBQWM7SUFDZCxpQkFBaUI7SUFDakIsZUFBZTtJQUNmLFlBQVk7SUFDWixXQUFXO0NBQ1osQ0FBQTtBQUNELE1BQU0sZUFBZSxHQUFHLENBQUMsU0FBUyxFQUFFLGNBQWMsRUFBRSxhQUFhLENBQUMsQ0FBQTtBQUNsRSxNQUFNLGtCQUFrQixHQUFHLENBQUMsWUFBWSxFQUFFLFdBQVcsQ0FBQyxDQUFBO0FBQ3RELE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxXQUFXLEVBQUUsWUFBWSxDQUFDLENBQUE7QUFFdEQsU0FBZ0Isa0JBQWtCLENBQUMsS0FBYTtJQUM5QyxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQztTQUM5QixPQUFPLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQztTQUN0QixLQUFLLENBQUMsT0FBTyxDQUFDO1NBQ2QsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7U0FDMUIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQ2xCLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTTtRQUFFLE9BQU8sRUFBRSxDQUFBO0lBRTVC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
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type MplConfig, type MplLabelQueryResult, type MplShipmentCreateRequest, type MplShipmentCreateResult, type MplShipmentQueryResult, type MplTrackingResponse } from "./types";
|
|
1
|
+
import { type MplConfig, type MplLabelQueryResult, type MplPushTrackingRecord, type MplShipmentCreateRequest, type MplShipmentCreateResult, type MplShipmentQueryResult, type MplTrackingResponse } from "./types";
|
|
2
2
|
export declare class MplClient {
|
|
3
3
|
readonly config: MplConfig;
|
|
4
4
|
private accessToken?;
|
|
@@ -17,6 +17,8 @@ export declare class MplClient {
|
|
|
17
17
|
requestId?: string;
|
|
18
18
|
}): Promise<Record<string, unknown>>;
|
|
19
19
|
trackShipment(trackingNumber: string): Promise<MplTrackingResponse>;
|
|
20
|
+
subscribePushTracking(): Promise<string>;
|
|
21
|
+
readPushTracking(subscriptionToken: string, lastRead?: string | null): Promise<MplPushTrackingRecord[]>;
|
|
20
22
|
private trackShipmentRequest;
|
|
21
23
|
private request;
|
|
22
24
|
private clearToken;
|