universal-parcel-scraper 0.652.3-main.3107 → 0.652.4-main.3109

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/README.md CHANGED
@@ -155,7 +155,7 @@ createTracker({ providers: ['ParcelsApp', 'Ship24', '17TRACK', 'Postal Ninja', '
155
155
  <!-- GENERATED:stages -->
156
156
  <img src="docs/assets/stages.svg" alt="DHL: Die Sendung wurde in das Zustellfahrzeug geladen.; Mondial Relay: En cours de livraison; Correios Brazil: Objeto saiu para entrega ao destinatário; Correos Express: EN REPARTO; Yamato Transport: 配達中; La Poste / Colissimo: DISTOU. All are filed under out_for_delivery." width="760">
157
157
 
158
- The carrier folders record 16,475 such statuses, each filed under one stage.
158
+ The carrier folders record 16,477 such statuses, each filed under one stage.
159
159
  <!-- /GENERATED:stages -->
160
160
 
161
161
  Wording nobody recorded yet goes through a classifier that reads seven European languages.
@@ -89,6 +89,8 @@ const PATTERNS = [
89
89
  [/已出口直封$/, 'in_transit'],
90
90
  [/^出口海关\/放行$/, 'in_transit'],
91
91
  [/^到达寄达地(?:处理中心)?$/, 'in_transit'],
92
+ // Collected at the destination port after import clearance, though its English says a delivery was made.
93
+ [/^目的港已提货/, 'in_transit'],
92
94
  [/^离开【[^】]*】处理中心$/, 'in_transit'],
93
95
  [/^送交出口海关$/, 'customs'],
94
96
  [/安排投递$/, 'out_for_delivery'],
@@ -53,6 +53,7 @@
53
53
  {"wording": "送交出口海关", "stage": "customs", "language": "zh", "confirmedBy": "live", "note": "Presented to export customs."},
54
54
  {"wording": "出口海关/放行", "stage": "in_transit", "language": "zh", "confirmedBy": "live", "note": "Released by export customs; transit resumes."},
55
55
  {"wording": "到达寄达地", "stage": "in_transit", "language": "zh", "confirmedBy": "live", "note": "Arrived in the destination country."},
56
+ {"wording": "目的港已提货 Delivery has been made at the destination port", "stage": "in_transit", "language": "zh", "confirmedBy": "live", "note": "Collected at the destination port after import clearance, before the destination's own scans; the English says a delivery, which it is not."},
56
57
  {"wording": "到达寄达地处理中心", "stage": "in_transit", "language": "zh", "confirmedBy": "live", "note": "Arrived at the destination's processing centre."},
57
58
  {"wording": "离开【GB】处理中心", "stage": "in_transit", "language": "zh", "confirmedBy": "live", "note": "Left the destination's processing centre."},
58
59
  {"wording": "【GB】安排投递", "stage": "out_for_delivery", "language": "zh", "confirmedBy": "live", "note": "Out for delivery abroad; any country."},
@@ -47,9 +47,10 @@ const CODES = new Map([
47
47
  export function mailamericasMappedStage(code) {
48
48
  return CODES.get(code.toUpperCase());
49
49
  }
50
- // Tax ID checks (SM), notices (AV) and the record of a prepaid duty (AD-4,
51
- // seen while the parcel was still at the origin warehouse) move nothing.
52
- const NOTICE = /^(?:SM-|AV-|AD-4$)/i;
50
+ // Tax ID checks (SM), notices (AV), the record of a prepaid duty (AD-4,
51
+ // seen while the parcel was still at the origin warehouse) and a delivery
52
+ // moved to a later round (LM-11) move nothing.
53
+ const NOTICE = /^(?:SM-|AV-|AD-4$|LM-11$)/i;
53
54
  /** A scan's stage: its code, else the shared wording rules, else nothing. */
54
55
  export function mailamericasStage(code, wording) {
55
56
  const mapped = mailamericasMappedStage(code);
@@ -69,5 +70,6 @@ export const statusMap = {
69
70
  { code: 'SM-9', note: 'The buyer\'s details form received, logged again every half hour while the parcel moves on; it moves nothing.' },
70
71
  { code: 'AD-4', note: 'The import duty recorded as paid, which can come while the parcel is still at the origin warehouse; it moves nothing.' },
71
72
  { code: 'AV-1', note: 'A notice that adds information to the history; it moves nothing.' },
73
+ { code: 'LM-11', note: 'The delivery moved to a later round, logged after a round or beside the next one, which can deliver; it names no attempt and moves nothing.' },
72
74
  ],
73
75
  };
@@ -40,6 +40,7 @@
40
40
  {"code": "LM-5", "wording": "Delivery office: Returned for failed delivery", "language": "en", "stage": "returned", "confirmedBy": "live"},
41
41
  {"code": "LM-7", "wording": "Delivery office: Recipient Absent", "language": "en", "stage": "failed_attempt", "confirmedBy": "live"},
42
42
  {"code": "LM-9", "wording": "Delivery office: Wrong delivery address", "language": "en", "stage": "failed_attempt", "confirmedBy": "live", "note": "The parcel went out again and was delivered in the history seen."},
43
+ {"code": "LM-11", "wording": "Delivery office: Rescheduling", "language": "en", "confirmedBy": "live", "unmapped": true, "note": "After a round with the postman, and again beside the next round, which delivered the parcel; it names no attempt."},
43
44
  {"code": "PF-1", "wording": "Finished: Delivered", "language": "en", "stage": "delivered", "confirmedBy": "live"},
44
45
  {"code": "PF-2", "wording": "Finished: Delivered to return address", "language": "en", "stage": "returned", "confirmedBy": "live", "note": "The summary's status reads returned."},
45
46
  {"code": "RT-1", "wording": "Return-Destruction: Received at return Warehouse", "language": "en", "stage": "returned", "confirmedBy": "live", "note": "The summary's status reads returned."},
@@ -2,7 +2,7 @@
2
2
  "openapi": "3.1.0",
3
3
  "info": {
4
4
  "title": "Universal Parcel Scraper",
5
- "version": "0.652.3"
5
+ "version": "0.652.4"
6
6
  },
7
7
  "paths": {
8
8
  "/health": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "universal-parcel-scraper",
3
- "version": "0.652.3-main.3107",
3
+ "version": "0.652.4-main.3109",
4
4
  "description": "Self-hosted parcel tracking: carrier detection, dedicated scrapers and optional universal providers.",
5
5
  "type": "module",
6
6
  "license": "Apache-2.0",