universal-parcel-scraper 0.233.0 → 0.235.0-main.1500

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
  },
@@ -4309,6 +4313,7 @@
4309
4313
  "tracking": {
4310
4314
  "mode": "automatic",
4311
4315
  "adapter": "china-post",
4316
+ "recognitionRank": 905,
4312
4317
  "localClocks": true
4313
4318
  },
4314
4319
  "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
  },
@@ -71962,6 +71981,7 @@
71962
71981
  "china-post"
71963
71982
  ],
71964
71983
  "asked": [
71984
+ "china-post",
71965
71985
  "la-poste"
71966
71986
  ]
71967
71987
  },
@@ -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
  },
@@ -3613,6 +3617,7 @@ var Ae = {
3613
3617
  tracking: {
3614
3618
  mode: "automatic",
3615
3619
  adapter: "china-post",
3620
+ recognitionRank: 905,
3616
3621
  localClocks: !0
3617
3622
  },
3618
3623
  canaryUrl: "https://ec.ems.com.cn/ect-web/mail/getGisTraces/checkMail",
@@ -16818,7 +16823,8 @@ var Ae = {
16818
16823
  seur: [
16819
16824
  "seur-1",
16820
16825
  "seur-2",
16821
- "seur-3"
16826
+ "seur-3",
16827
+ "seur-4"
16822
16828
  ],
16823
16829
  mrw: ["mrw-1", "mrw-2"],
16824
16830
  nacex: ["nacex-1"],
@@ -22586,6 +22592,7 @@ var il = {
22586
22592
  "ceska-posta": 380,
22587
22593
  "ceva-logistics": 925,
22588
22594
  chilexpress: 958,
22595
+ "china-post": 905,
22589
22596
  "chit-chats": 115,
22590
22597
  chronopost: 890,
22591
22598
  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": [
@@ -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
  },
@@ -4309,6 +4313,7 @@
4309
4313
  "tracking": {
4310
4314
  "mode": "automatic",
4311
4315
  "adapter": "china-post",
4316
+ "recognitionRank": 905,
4312
4317
  "localClocks": true
4313
4318
  },
4314
4319
  "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: {
@@ -2965,6 +2968,7 @@ export declare const CARRIER_CATALOG: {
2965
2968
  readonly tracking: {
2966
2969
  readonly mode: "automatic";
2967
2970
  readonly adapter: "china-post";
2971
+ readonly recognitionRank: 905;
2968
2972
  readonly localClocks: true;
2969
2973
  };
2970
2974
  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
  },
@@ -4310,6 +4314,7 @@ export const CARRIER_CATALOG = {
4310
4314
  "tracking": {
4311
4315
  "mode": "automatic",
4312
4316
  "adapter": "china-post",
4317
+ "recognitionRank": 905,
4313
4318
  "localClocks": true
4314
4319
  },
4315
4320
  "canaryUrl": "https://ec.ems.com.cn/ect-web/mail/getGisTraces/checkMail",
@@ -22613,7 +22618,7 @@ export const DETECTION_RULE_IDS = {
22613
22618
  "postnord": ["postnord-1", "postnord-2", "postnord-5", "postnord-3"],
22614
22619
  "posti": ["posti-1", "posti-2", "posti-3"],
22615
22620
  "correos-express": ["correos-express-1", "correos-express-2"],
22616
- "seur": ["seur-1", "seur-2", "seur-3"],
22621
+ "seur": ["seur-1", "seur-2", "seur-3", "seur-4"],
22617
22622
  "mrw": ["mrw-1", "mrw-2"],
22618
22623
  "nacex": ["nacex-1"],
22619
22624
  "ctt": ["ctt-1"],
@@ -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.235.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.235.0-main.1500",
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",