universal-parcel-scraper 0.233.0 → 0.236.0-main.1501

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/data/catalog.json CHANGED
@@ -2466,6 +2466,10 @@
2466
2466
  {
2467
2467
  "pattern": "^\\d{7}$",
2468
2468
  "confidence": "low"
2469
+ },
2470
+ {
2471
+ "pattern": "^20\\d{2}(?:0[1-9]|[12]\\d|3[01])(?:0[1-9]|1[0-2])\\d{14}$",
2472
+ "confidence": "low"
2469
2473
  }
2470
2474
  ]
2471
2475
  },
@@ -2676,6 +2680,10 @@
2676
2680
  {
2677
2681
  "pattern": "^F\\d{3}D\\d{8}$",
2678
2682
  "confidence": "low"
2683
+ },
2684
+ {
2685
+ "pattern": "^D\\d{5}[A-Z]\\d{6}$",
2686
+ "confidence": "low"
2679
2687
  }
2680
2688
  ]
2681
2689
  },
@@ -4309,6 +4317,7 @@
4309
4317
  "tracking": {
4310
4318
  "mode": "automatic",
4311
4319
  "adapter": "china-post",
4320
+ "recognitionRank": 905,
4312
4321
  "localClocks": true
4313
4322
  },
4314
4323
  "canaryUrl": "https://ec.ems.com.cn/ect-web/mail/getGisTraces/checkMail",
@@ -17903,6 +17903,7 @@
17903
17903
  "candidates": [
17904
17904
  "apc-overnight",
17905
17905
  "austrian-post",
17906
+ "seur",
17906
17907
  "usps",
17907
17908
  "estafeta"
17908
17909
  ],
@@ -17911,6 +17912,7 @@
17911
17912
  ],
17912
17913
  "asked": [
17913
17914
  "apc-overnight",
17915
+ "seur",
17914
17916
  "austrian-post"
17915
17917
  ]
17916
17918
  },
@@ -17921,6 +17923,7 @@
17921
17923
  "candidates": [
17922
17924
  "apc-overnight",
17923
17925
  "austrian-post",
17926
+ "seur",
17924
17927
  "usps",
17925
17928
  "estafeta"
17926
17929
  ],
@@ -17929,6 +17932,22 @@
17929
17932
  ],
17930
17933
  "asked": [
17931
17934
  "apc-overnight",
17935
+ "seur",
17936
+ "austrian-post"
17937
+ ]
17938
+ },
17939
+ {
17940
+ "input": "2026151000000000000001",
17941
+ "carrier": "unknown",
17942
+ "confidence": "low",
17943
+ "candidates": [
17944
+ "austrian-post",
17945
+ "seur",
17946
+ "usps",
17947
+ "estafeta"
17948
+ ],
17949
+ "asked": [
17950
+ "seur",
17932
17951
  "austrian-post"
17933
17952
  ]
17934
17953
  },
@@ -53698,6 +53717,17 @@
53698
53717
  "canpar"
53699
53718
  ]
53700
53719
  },
53720
+ {
53721
+ "input": "D99000A000001",
53722
+ "carrier": "unknown",
53723
+ "confidence": "low",
53724
+ "candidates": [
53725
+ "poste-italiane"
53726
+ ],
53727
+ "asked": [
53728
+ "poste-italiane"
53729
+ ]
53730
+ },
53701
53731
  {
53702
53732
  "input": "DC010822S3ZDUD",
53703
53733
  "carrier": "pathao-courier",
@@ -71962,6 +71992,7 @@
71962
71992
  "china-post"
71963
71993
  ],
71964
71994
  "asked": [
71995
+ "china-post",
71965
71996
  "la-poste"
71966
71997
  ]
71967
71998
  },
@@ -2181,6 +2181,10 @@ var Ae = {
2181
2181
  {
2182
2182
  pattern: "^\\d{7}$",
2183
2183
  confidence: "low"
2184
+ },
2185
+ {
2186
+ pattern: "^20\\d{2}(?:0[1-9]|[12]\\d|3[01])(?:0[1-9]|1[0-2])\\d{14}$",
2187
+ confidence: "low"
2184
2188
  }
2185
2189
  ]
2186
2190
  },
@@ -2348,6 +2352,10 @@ var Ae = {
2348
2352
  {
2349
2353
  pattern: "^F\\d{3}D\\d{8}$",
2350
2354
  confidence: "low"
2355
+ },
2356
+ {
2357
+ pattern: "^D\\d{5}[A-Z]\\d{6}$",
2358
+ confidence: "low"
2351
2359
  }
2352
2360
  ]
2353
2361
  },
@@ -3613,6 +3621,7 @@ var Ae = {
3613
3621
  tracking: {
3614
3622
  mode: "automatic",
3615
3623
  adapter: "china-post",
3624
+ recognitionRank: 905,
3616
3625
  localClocks: !0
3617
3626
  },
3618
3627
  canaryUrl: "https://ec.ems.com.cn/ect-web/mail/getGisTraces/checkMail",
@@ -16818,7 +16827,8 @@ var Ae = {
16818
16827
  seur: [
16819
16828
  "seur-1",
16820
16829
  "seur-2",
16821
- "seur-3"
16830
+ "seur-3",
16831
+ "seur-4"
16822
16832
  ],
16823
16833
  mrw: ["mrw-1", "mrw-2"],
16824
16834
  nacex: ["nacex-1"],
@@ -16835,7 +16845,8 @@ var Ae = {
16835
16845
  "poste-italiane-4",
16836
16846
  "poste-italiane-delivery-europe",
16837
16847
  "poste-italiane-sda-domestic",
16838
- "poste-italiane-promopacco"
16848
+ "poste-italiane-promopacco",
16849
+ "poste-italiane-d"
16839
16850
  ],
16840
16851
  brt: [
16841
16852
  "brt-1",
@@ -22586,6 +22597,7 @@ var il = {
22586
22597
  "ceska-posta": 380,
22587
22598
  "ceva-logistics": 925,
22588
22599
  chilexpress: 958,
22600
+ "china-post": 905,
22589
22601
  "chit-chats": 115,
22590
22602
  chronopost: 890,
22591
22603
  ciblex: 640,
@@ -43,6 +43,7 @@
43
43
  "candidates": [
44
44
  "apc-overnight",
45
45
  "austrian-post",
46
+ "seur",
46
47
  "usps",
47
48
  "estafeta"
48
49
  ]
@@ -68,6 +69,7 @@
68
69
  "candidates": [
69
70
  "apc-overnight",
70
71
  "austrian-post",
72
+ "seur",
71
73
  "usps",
72
74
  "estafeta"
73
75
  ]
@@ -1,4 +1,5 @@
1
- import { lookupBudget } from '../../core/adapter/index.js';
1
+ import { accepted, lookupBudget, recognizeFromLookup } from '../../core/adapter/index.js';
2
+ import { carrierErrorKind } from '../../core/errors/index.js';
2
3
  import { userAgentOf } from '../../core/transport/index.js';
3
4
  import { readChinaPostTraces } from './app.js';
4
5
  import { normalizeChinaPostNumber, parseChinaPostTraces, PROVIDER } from './parser.js';
@@ -20,5 +21,21 @@ export class ChinaPostTracker {
20
21
  }
21
22
  export const adapter = (environment) => {
22
23
  const tracker = new ChinaPostTracker({ fetcher: environment.fetcher, userAgent: environment.userAgent });
23
- return { id: 'china-post', steps: ['direct'], track: (input, context) => tracker.fetch(input.number, context) };
24
+ return {
25
+ id: 'china-post',
26
+ steps: ['direct'],
27
+ track: (input, context) => tracker.fetch(input.number, context),
28
+ recognize: async (number, context) => {
29
+ try {
30
+ return await recognizeFromLookup(() => tracker.fetch(number, context), () => accepted(() => normalizeChinaPostNumber(number)));
31
+ }
32
+ catch (error) {
33
+ // The check step asks for a contact phone's digits only about an item China Post holds;
34
+ // other numbers get its "no information" answer, which stays inconclusive.
35
+ if (carrierErrorKind(error) === 'input_required')
36
+ return { known: true, lastActivityAt: null };
37
+ throw error;
38
+ }
39
+ },
40
+ };
24
41
  };
@@ -18,6 +18,9 @@
18
18
  "steps": [
19
19
  "direct"
20
20
  ],
21
+ "recognition": {
22
+ "rank": 905
23
+ },
21
24
  "localClocks": true
22
25
  },
23
26
  "capabilities": [
@@ -112,6 +112,11 @@
112
112
  "id": "poste-italiane-promopacco",
113
113
  "pattern": "^F\\d{3}D\\d{8}$",
114
114
  "confidence": "low"
115
+ },
116
+ {
117
+ "id": "poste-italiane-d",
118
+ "pattern": "^D\\d{5}[A-Z]\\d{6}$",
119
+ "confidence": "low"
115
120
  }
116
121
  ]
117
122
  }
@@ -410,6 +410,21 @@
410
410
  },
411
411
  "note": "Made-up number in the shape of a PROMOPACCO PLUS parcel number that Poste's own tracker follows."
412
412
  },
413
+ {
414
+ "number": "D99000A000001",
415
+ "role": "shipment",
416
+ "evidence": "synthetic",
417
+ "derivedFrom": "donated_real",
418
+ "shapeConfirmed": "2026-10-16",
419
+ "expect": {
420
+ "carrier": "unknown",
421
+ "confidence": "low",
422
+ "candidates": [
423
+ "poste-italiane"
424
+ ]
425
+ },
426
+ "note": "Made-up number in the shape of a D parcel code that Poste's own tracker follows as a ROAD EUROPE shipment."
427
+ },
413
428
  {
414
429
  "number": "1C1000A000001",
415
430
  "role": "shipment",
@@ -85,6 +85,11 @@
85
85
  "id": "seur-3",
86
86
  "pattern": "^\\d{7}$",
87
87
  "confidence": "low"
88
+ },
89
+ {
90
+ "id": "seur-4",
91
+ "pattern": "^20\\d{2}(?:0[1-9]|[12]\\d|3[01])(?:0[1-9]|1[0-2])\\d{14}$",
92
+ "confidence": "low"
88
93
  }
89
94
  ]
90
95
  }
@@ -605,6 +605,24 @@
605
605
  ]
606
606
  },
607
607
  "note": "Seven-digit expedition number from the subject line of SEUR's incident e-mail; the simplified lookup did not locate it."
608
+ },
609
+ {
610
+ "number": "2026151000000000000001",
611
+ "role": "shipment",
612
+ "evidence": "synthetic",
613
+ "derivedFrom": "donated_real",
614
+ "shapeConfirmed": "2026-10-16",
615
+ "expect": {
616
+ "carrier": "unknown",
617
+ "confidence": "low",
618
+ "candidates": [
619
+ "austrian-post",
620
+ "seur",
621
+ "usps",
622
+ "estafeta"
623
+ ]
624
+ },
625
+ "note": "Made-up number in the layout of a sender's reference, dated day before month, that SEUR's lookup found for its shipments."
608
626
  }
609
627
  ]
610
628
  }
@@ -5,8 +5,9 @@ import { isRecord } from '../../core/types.js';
5
5
  import { classifySeurStatus } from './status.js';
6
6
  export function normalizeSeurNumber(raw) {
7
7
  const number = raw.replace(/\s/g, '');
8
- if (!/^(?:\d{7}|\d{14}|\d{21})$/.test(number))
9
- throw new InvalidInputError('SEUR', 'SEUR requires a seven, fourteen or twenty-one digit identifier');
8
+ // Twenty-two digits is a sender's reference, which the lookup also finds.
9
+ if (!/^(?:\d{7}|\d{14}|\d{21}|\d{22})$/.test(number))
10
+ throw new InvalidInputError('SEUR', 'SEUR requires a seven, fourteen, twenty-one or twenty-two digit identifier');
10
11
  return number;
11
12
  }
12
13
  function field(value, limit) {
@@ -2466,6 +2466,10 @@
2466
2466
  {
2467
2467
  "pattern": "^\\d{7}$",
2468
2468
  "confidence": "low"
2469
+ },
2470
+ {
2471
+ "pattern": "^20\\d{2}(?:0[1-9]|[12]\\d|3[01])(?:0[1-9]|1[0-2])\\d{14}$",
2472
+ "confidence": "low"
2469
2473
  }
2470
2474
  ]
2471
2475
  },
@@ -2676,6 +2680,10 @@
2676
2680
  {
2677
2681
  "pattern": "^F\\d{3}D\\d{8}$",
2678
2682
  "confidence": "low"
2683
+ },
2684
+ {
2685
+ "pattern": "^D\\d{5}[A-Z]\\d{6}$",
2686
+ "confidence": "low"
2679
2687
  }
2680
2688
  ]
2681
2689
  },
@@ -4309,6 +4317,7 @@
4309
4317
  "tracking": {
4310
4318
  "mode": "automatic",
4311
4319
  "adapter": "china-post",
4320
+ "recognitionRank": 905,
4312
4321
  "localClocks": true
4313
4322
  },
4314
4323
  "canaryUrl": "https://ec.ems.com.cn/ect-web/mail/getGisTraces/checkMail",
@@ -1660,6 +1660,9 @@ export declare const CARRIER_CATALOG: {
1660
1660
  }, {
1661
1661
  readonly pattern: "^\\d{7}$";
1662
1662
  readonly confidence: "low";
1663
+ }, {
1664
+ readonly pattern: "^20\\d{2}(?:0[1-9]|[12]\\d|3[01])(?:0[1-9]|1[0-2])\\d{14}$";
1665
+ readonly confidence: "low";
1663
1666
  }];
1664
1667
  };
1665
1668
  readonly mrw: {
@@ -1805,6 +1808,9 @@ export declare const CARRIER_CATALOG: {
1805
1808
  }, {
1806
1809
  readonly pattern: "^F\\d{3}D\\d{8}$";
1807
1810
  readonly confidence: "low";
1811
+ }, {
1812
+ readonly pattern: "^D\\d{5}[A-Z]\\d{6}$";
1813
+ readonly confidence: "low";
1808
1814
  }];
1809
1815
  };
1810
1816
  readonly brt: {
@@ -2965,6 +2971,7 @@ export declare const CARRIER_CATALOG: {
2965
2971
  readonly tracking: {
2966
2972
  readonly mode: "automatic";
2967
2973
  readonly adapter: "china-post";
2974
+ readonly recognitionRank: 905;
2968
2975
  readonly localClocks: true;
2969
2976
  };
2970
2977
  readonly canaryUrl: "https://ec.ems.com.cn/ect-web/mail/getGisTraces/checkMail";
@@ -2467,6 +2467,10 @@ export const CARRIER_CATALOG = {
2467
2467
  {
2468
2468
  "pattern": "^\\d{7}$",
2469
2469
  "confidence": "low"
2470
+ },
2471
+ {
2472
+ "pattern": "^20\\d{2}(?:0[1-9]|[12]\\d|3[01])(?:0[1-9]|1[0-2])\\d{14}$",
2473
+ "confidence": "low"
2470
2474
  }
2471
2475
  ]
2472
2476
  },
@@ -2677,6 +2681,10 @@ export const CARRIER_CATALOG = {
2677
2681
  {
2678
2682
  "pattern": "^F\\d{3}D\\d{8}$",
2679
2683
  "confidence": "low"
2684
+ },
2685
+ {
2686
+ "pattern": "^D\\d{5}[A-Z]\\d{6}$",
2687
+ "confidence": "low"
2680
2688
  }
2681
2689
  ]
2682
2690
  },
@@ -4310,6 +4318,7 @@ export const CARRIER_CATALOG = {
4310
4318
  "tracking": {
4311
4319
  "mode": "automatic",
4312
4320
  "adapter": "china-post",
4321
+ "recognitionRank": 905,
4313
4322
  "localClocks": true
4314
4323
  },
4315
4324
  "canaryUrl": "https://ec.ems.com.cn/ect-web/mail/getGisTraces/checkMail",
@@ -22613,12 +22622,12 @@ export const DETECTION_RULE_IDS = {
22613
22622
  "postnord": ["postnord-1", "postnord-2", "postnord-5", "postnord-3"],
22614
22623
  "posti": ["posti-1", "posti-2", "posti-3"],
22615
22624
  "correos-express": ["correos-express-1", "correos-express-2"],
22616
- "seur": ["seur-1", "seur-2", "seur-3"],
22625
+ "seur": ["seur-1", "seur-2", "seur-3", "seur-4"],
22617
22626
  "mrw": ["mrw-1", "mrw-2"],
22618
22627
  "nacex": ["nacex-1"],
22619
22628
  "ctt": ["ctt-1"],
22620
22629
  "ctt-express": ["ctt-express-3", "ctt-express-1", "ctt-express-2"],
22621
- "poste-italiane": ["poste-italiane-1", "poste-italiane-2", "poste-italiane-3", "poste-italiane-4", "poste-italiane-delivery-europe", "poste-italiane-sda-domestic", "poste-italiane-promopacco"],
22630
+ "poste-italiane": ["poste-italiane-1", "poste-italiane-2", "poste-italiane-3", "poste-italiane-4", "poste-italiane-delivery-europe", "poste-italiane-sda-domestic", "poste-italiane-promopacco", "poste-italiane-d"],
22622
22631
  "brt": ["brt-1", "brt-shipment-number", "brt-parcel-id"],
22623
22632
  "ecoscooting": ["ecoscooting-postcode", "ecoscooting-1", "ecoscooting-2", "ecoscooting-without-cn"],
22624
22633
  "tipsa": ["tipsa-1", "tipsa-2"],
@@ -33,6 +33,7 @@ export const CARRIER_RECOGNITION_RANKS = {
33
33
  "ceska-posta": 380,
34
34
  "ceva-logistics": 925,
35
35
  "chilexpress": 958,
36
+ "china-post": 905,
36
37
  "chit-chats": 115,
37
38
  "chronopost": 890,
38
39
  "ciblex": 640,
@@ -2,7 +2,7 @@
2
2
  "openapi": "3.1.0",
3
3
  "info": {
4
4
  "title": "Universal Parcel Scraper",
5
- "version": "0.233.0"
5
+ "version": "0.236.0"
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.233.0",
3
+ "version": "0.236.0-main.1501",
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",