@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.
Files changed (182) hide show
  1. package/.medusa/server/src/admin/index.js +6361 -3789
  2. package/.medusa/server/src/admin/index.mjs +6361 -3789
  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/core-carts/[id]/items/[itemId]/route.d.ts +3 -0
  6. package/.medusa/server/src/api/admin/core-carts/[id]/items/[itemId]/route.js +64 -0
  7. package/.medusa/server/src/api/admin/core-carts/[id]/items/route.d.ts +2 -0
  8. package/.medusa/server/src/api/admin/core-carts/[id]/items/route.js +40 -0
  9. package/.medusa/server/src/api/admin/core-carts/[id]/promotions/[code]/route.d.ts +2 -0
  10. package/.medusa/server/src/api/admin/core-carts/[id]/promotions/[code]/route.js +40 -0
  11. package/.medusa/server/src/api/admin/core-carts/[id]/promotions/route.d.ts +2 -0
  12. package/.medusa/server/src/api/admin/core-carts/[id]/promotions/route.js +41 -0
  13. package/.medusa/server/src/api/admin/core-carts/[id]/route.d.ts +2 -0
  14. package/.medusa/server/src/api/admin/core-carts/[id]/route.js +28 -0
  15. package/.medusa/server/src/api/admin/core-carts/customer/[id]/route.d.ts +2 -0
  16. package/.medusa/server/src/api/admin/core-carts/customer/[id]/route.js +34 -0
  17. package/.medusa/server/src/api/admin/core-carts/route.d.ts +3 -0
  18. package/.medusa/server/src/api/admin/core-carts/route.js +69 -0
  19. package/.medusa/server/src/api/admin/customer-activation/route.d.ts +2 -0
  20. package/.medusa/server/src/api/admin/customer-activation/route.js +97 -0
  21. package/.medusa/server/src/api/admin/customer-import/route.d.ts +2 -0
  22. package/.medusa/server/src/api/admin/customer-import/route.js +166 -0
  23. package/.medusa/server/src/api/admin/order-export/route.d.ts +2 -0
  24. package/.medusa/server/src/api/admin/order-export/route.js +88 -0
  25. package/.medusa/server/src/api/admin/product-migration/inventory/route.d.ts +3 -0
  26. package/.medusa/server/src/api/admin/product-migration/inventory/route.js +164 -0
  27. package/.medusa/server/src/api/admin/product-migration/price-list-prices/route.d.ts +3 -0
  28. package/.medusa/server/src/api/admin/product-migration/price-list-prices/route.js +204 -0
  29. package/.medusa/server/src/api/admin/product-migration/products/route.d.ts +2 -0
  30. package/.medusa/server/src/api/admin/product-migration/products/route.js +24 -0
  31. package/.medusa/server/src/api/admin/product-reviews/[id]/route.js +36 -4
  32. package/.medusa/server/src/api/admin/product-reviews/settings/route.d.ts +3 -0
  33. package/.medusa/server/src/api/admin/product-reviews/settings/route.js +63 -0
  34. package/.medusa/server/src/api/admin/shared-cart/settings/route.d.ts +5 -0
  35. package/.medusa/server/src/api/admin/shared-cart/settings/route.js +31 -0
  36. package/.medusa/server/src/api/admin/system-runtime/route.d.ts +2 -0
  37. package/.medusa/server/src/api/admin/system-runtime/route.js +18 -0
  38. package/.medusa/server/src/api/hooks/packeta/status/route.d.ts +2 -0
  39. package/.medusa/server/src/api/hooks/packeta/status/route.js +55 -0
  40. package/.medusa/server/src/api/middlewares.js +24 -1
  41. package/.medusa/server/src/api/store/abandoned-cart/recover/route.d.ts +2 -0
  42. package/.medusa/server/src/api/store/abandoned-cart/recover/route.js +37 -0
  43. package/.medusa/server/src/api/store/back-in-stock/route.d.ts +8 -0
  44. package/.medusa/server/src/api/store/back-in-stock/route.js +124 -0
  45. package/.medusa/server/src/api/store/core-carts/me/active/route.d.ts +2 -0
  46. package/.medusa/server/src/api/store/core-carts/me/active/route.js +54 -0
  47. package/.medusa/server/src/api/store/customer-activation/complete/route.d.ts +2 -0
  48. package/.medusa/server/src/api/store/customer-activation/complete/route.js +96 -0
  49. package/.medusa/server/src/api/store/customer-activation/route.d.ts +2 -0
  50. package/.medusa/server/src/api/store/customer-activation/route.js +34 -0
  51. package/.medusa/server/src/api/store/products/[id]/reviews/route.d.ts +1 -0
  52. package/.medusa/server/src/api/store/products/[id]/reviews/route.js +76 -34
  53. package/.medusa/server/src/api/store/review-request/route.d.ts +2 -0
  54. package/.medusa/server/src/api/store/review-request/route.js +60 -0
  55. package/.medusa/server/src/api/store/shared-carts/[token]/route.d.ts +2 -0
  56. package/.medusa/server/src/api/store/shared-carts/[token]/route.js +52 -0
  57. package/.medusa/server/src/api/store/shared-carts/route.d.ts +13 -0
  58. package/.medusa/server/src/api/store/shared-carts/route.js +78 -0
  59. package/.medusa/server/src/core/abandoned-cart.d.ts +64 -0
  60. package/.medusa/server/src/core/abandoned-cart.js +197 -0
  61. package/.medusa/server/src/core/admin-cart-management.d.ts +18 -0
  62. package/.medusa/server/src/core/admin-cart-management.js +102 -0
  63. package/.medusa/server/src/core/admin-cart-visibility.d.ts +94 -0
  64. package/.medusa/server/src/core/admin-cart-visibility.js +192 -0
  65. package/.medusa/server/src/core/back-in-stock.d.ts +51 -0
  66. package/.medusa/server/src/core/back-in-stock.js +107 -0
  67. package/.medusa/server/src/core/cart-observability.d.ts +23 -0
  68. package/.medusa/server/src/core/cart-observability.js +54 -0
  69. package/.medusa/server/src/core/checkout-contract.d.ts +1 -0
  70. package/.medusa/server/src/core/checkout-contract.js +2 -1
  71. package/.medusa/server/src/core/customer-account-contract.d.ts +3 -0
  72. package/.medusa/server/src/core/customer-account-contract.js +4 -1
  73. package/.medusa/server/src/core/customer-activation.d.ts +120 -0
  74. package/.medusa/server/src/core/customer-activation.js +169 -0
  75. package/.medusa/server/src/core/customer-cart-resume.d.ts +21 -0
  76. package/.medusa/server/src/core/customer-cart-resume.js +72 -0
  77. package/.medusa/server/src/core/customer-email.d.ts +1 -1
  78. package/.medusa/server/src/core/customer-email.js +4 -1
  79. package/.medusa/server/src/core/native-migration-export.d.ts +6 -0
  80. package/.medusa/server/src/core/native-migration-export.js +105 -0
  81. package/.medusa/server/src/core/order-export.d.ts +11 -0
  82. package/.medusa/server/src/core/order-export.js +297 -0
  83. package/.medusa/server/src/core/review-request.d.ts +61 -0
  84. package/.medusa/server/src/core/review-request.js +105 -0
  85. package/.medusa/server/src/core/review-reward.d.ts +94 -0
  86. package/.medusa/server/src/core/review-reward.js +124 -0
  87. package/.medusa/server/src/core/runtime-health.d.ts +39 -0
  88. package/.medusa/server/src/core/runtime-health.js +250 -0
  89. package/.medusa/server/src/core/storefront-core-config.d.ts +10 -0
  90. package/.medusa/server/src/core/storefront-core-config.js +26 -1
  91. package/.medusa/server/src/core/version.d.ts +2 -2
  92. package/.medusa/server/src/core/version.js +2 -2
  93. package/.medusa/server/src/jobs/abandoned-cart-recovery.d.ts +23 -0
  94. package/.medusa/server/src/jobs/abandoned-cart-recovery.js +137 -0
  95. package/.medusa/server/src/jobs/back-in-stock-reconciliation.d.ts +15 -0
  96. package/.medusa/server/src/jobs/back-in-stock-reconciliation.js +90 -0
  97. package/.medusa/server/src/jobs/dpd-statusdata-sync.d.ts +17 -0
  98. package/.medusa/server/src/jobs/dpd-statusdata-sync.js +107 -0
  99. package/.medusa/server/src/jobs/mpl-push-tracking.d.ts +19 -0
  100. package/.medusa/server/src/jobs/mpl-push-tracking.js +183 -0
  101. package/.medusa/server/src/jobs/mpl-status-sync.d.ts +8 -2
  102. package/.medusa/server/src/jobs/mpl-status-sync.js +12 -7
  103. package/.medusa/server/src/jobs/product-review-request-dispatch.d.ts +28 -0
  104. package/.medusa/server/src/jobs/product-review-request-dispatch.js +84 -0
  105. package/.medusa/server/src/jobs/runtime-heartbeat.d.ts +12 -0
  106. package/.medusa/server/src/jobs/runtime-heartbeat.js +13 -0
  107. package/.medusa/server/src/jobs/shipping-status-sync.d.ts +8 -2
  108. package/.medusa/server/src/jobs/shipping-status-sync.js +11 -14
  109. package/.medusa/server/src/lib/modules/shipping/idempotency.js +3 -3
  110. package/.medusa/server/src/lib/modules/shipping/index.d.ts +1 -0
  111. package/.medusa/server/src/lib/modules/shipping/index.js +2 -1
  112. package/.medusa/server/src/lib/modules/shipping/tracking.d.ts +48 -0
  113. package/.medusa/server/src/lib/modules/shipping/tracking.js +368 -0
  114. package/.medusa/server/src/lib/modules/shipping/webhooks.d.ts +6 -9
  115. package/.medusa/server/src/lib/modules/shipping/webhooks.js +24 -137
  116. package/.medusa/server/src/modules/back-in-stock/index.d.ts +23 -0
  117. package/.medusa/server/src/modules/back-in-stock/index.js +16 -0
  118. package/.medusa/server/src/modules/back-in-stock/migrations/Migration20261101202000.d.ts +5 -0
  119. package/.medusa/server/src/modules/back-in-stock/migrations/Migration20261101202000.js +18 -0
  120. package/.medusa/server/src/modules/back-in-stock/models/back-in-stock-subscription.d.ts +13 -0
  121. package/.medusa/server/src/modules/back-in-stock/models/back-in-stock-subscription.js +23 -0
  122. package/.medusa/server/src/modules/back-in-stock/service.d.ts +22 -0
  123. package/.medusa/server/src/modules/back-in-stock/service.js +12 -0
  124. package/.medusa/server/src/modules/email-center/abandoned-cart-registration.d.ts +1 -0
  125. package/.medusa/server/src/modules/email-center/abandoned-cart-registration.js +27 -0
  126. package/.medusa/server/src/modules/email-center/back-in-stock-registration.d.ts +1 -0
  127. package/.medusa/server/src/modules/email-center/back-in-stock-registration.js +27 -0
  128. package/.medusa/server/src/modules/email-center/defaults.js +7 -1
  129. package/.medusa/server/src/modules/email-center/index.d.ts +2 -0
  130. package/.medusa/server/src/modules/email-center/index.js +3 -1
  131. package/.medusa/server/src/modules/integration-settings/abandoned-cart-registration.d.ts +1 -0
  132. package/.medusa/server/src/modules/integration-settings/abandoned-cart-registration.js +30 -0
  133. package/.medusa/server/src/modules/integration-settings/index.d.ts +1 -0
  134. package/.medusa/server/src/modules/integration-settings/index.js +2 -1
  135. package/.medusa/server/src/modules/integration-settings/storefront-public-registration.js +15 -1
  136. package/.medusa/server/src/modules/product-review/index.d.ts +14 -0
  137. package/.medusa/server/src/modules/product-review/migrations/Migration20261101113000.d.ts +5 -0
  138. package/.medusa/server/src/modules/product-review/migrations/Migration20261101113000.js +28 -0
  139. package/.medusa/server/src/modules/product-review/migrations/Migration20261101114500.d.ts +5 -0
  140. package/.medusa/server/src/modules/product-review/migrations/Migration20261101114500.js +20 -0
  141. package/.medusa/server/src/modules/product-review/migrations/Migration20261101121500.d.ts +5 -0
  142. package/.medusa/server/src/modules/product-review/migrations/Migration20261101121500.js +18 -0
  143. package/.medusa/server/src/modules/product-review/models/product-review-settings.d.ts +15 -0
  144. package/.medusa/server/src/modules/product-review/models/product-review-settings.js +19 -0
  145. package/.medusa/server/src/modules/product-review/models/product-review.d.ts +6 -2
  146. package/.medusa/server/src/modules/product-review/models/product-review.js +7 -3
  147. package/.medusa/server/src/modules/product-review/service.d.ts +22 -1
  148. package/.medusa/server/src/modules/product-review/service.js +3 -2
  149. package/.medusa/server/src/modules/shared-cart/index.d.ts +21 -0
  150. package/.medusa/server/src/modules/shared-cart/index.js +13 -0
  151. package/.medusa/server/src/modules/shared-cart/migrations/Migration20261102010000.d.ts +5 -0
  152. package/.medusa/server/src/modules/shared-cart/migrations/Migration20261102010000.js +16 -0
  153. package/.medusa/server/src/modules/shared-cart/models/shared-cart.d.ts +10 -0
  154. package/.medusa/server/src/modules/shared-cart/models/shared-cart.js +17 -0
  155. package/.medusa/server/src/modules/shared-cart/service.d.ts +14 -0
  156. package/.medusa/server/src/modules/shared-cart/service.js +11 -0
  157. package/.medusa/server/src/modules/shared-cart/settings.d.ts +7 -0
  158. package/.medusa/server/src/modules/shared-cart/settings.js +64 -0
  159. package/.medusa/server/src/providers/dpd/index.d.ts +2 -0
  160. package/.medusa/server/src/providers/dpd/index.js +3 -1
  161. package/.medusa/server/src/providers/dpd/statusdata-ftp.d.ts +16 -0
  162. package/.medusa/server/src/providers/dpd/statusdata-ftp.js +268 -0
  163. package/.medusa/server/src/providers/dpd/statusdata.d.ts +14 -0
  164. package/.medusa/server/src/providers/dpd/statusdata.js +161 -0
  165. package/.medusa/server/src/providers/mpl/client.d.ts +3 -1
  166. package/.medusa/server/src/providers/mpl/client.js +154 -2
  167. package/.medusa/server/src/providers/mpl/service.js +31 -20
  168. package/.medusa/server/src/providers/mpl/types.d.ts +25 -0
  169. package/.medusa/server/src/providers/mpl/types.js +1 -1
  170. package/.medusa/server/src/providers/packeta/index.d.ts +1 -0
  171. package/.medusa/server/src/providers/packeta/index.js +2 -1
  172. package/.medusa/server/src/providers/packeta/push-tracking.d.ts +8 -0
  173. package/.medusa/server/src/providers/packeta/push-tracking.js +96 -0
  174. package/.medusa/server/src/providers/packeta/service.js +22 -2
  175. package/.medusa/server/src/scripts/core-init.d.ts +1 -1
  176. package/.medusa/server/src/scripts/core-init.js +3 -2
  177. package/.medusa/server/src/subscribers/back-in-stock-inventory-changed.d.ts +7 -0
  178. package/.medusa/server/src/subscribers/back-in-stock-inventory-changed.js +65 -0
  179. package/.medusa/server/src/workflows/link-migrated-customer.d.ts +8 -0
  180. package/.medusa/server/src/workflows/link-migrated-customer.js +17 -0
  181. package/README.md +1 -1
  182. 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;