universal-parcel-scraper 0.665.0-main.3166 → 0.665.2-main.3170
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 +1 -1
- package/dist/browser/scraper.js +2 -0
- package/dist/carriers/dayone/statuses.json +1 -0
- package/dist/carriers/gofo/status.js +2 -0
- package/dist/carriers/gofo/statuses.json +9 -0
- package/dist/carriers/ups/status.js +3 -0
- package/dist/carriers/ups/statuses.json +1 -0
- package/dist/core/status/language.js +6 -0
- package/dist/server/openapi.json +1 -1
- package/package.json +1 -1
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,
|
|
158
|
+
The carrier folders record 16,540 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.
|
package/dist/browser/scraper.js
CHANGED
|
@@ -30080,6 +30080,8 @@ function Hc(e) {
|
|
|
30080
30080
|
if (/^preparing to leave (?:the )?(?:[a-z]+ ){0,3}operation cent(?:er|re)$/.test(t)) return "in_transit";
|
|
30081
30081
|
if (/^(?:the )?item is ready for shipment$/.test(t)) return "registered";
|
|
30082
30082
|
if (/^consignment received at (?:the )?postnl acceptance cent(?:re|er)$/.test(t)) return "accepted";
|
|
30083
|
+
if (/^as requested, (?:the )?(?:ups my choice®? )?delivery change (?:was|has been) completed$|^(?:the )?(?:delivery )?address (?:was|has been) changed as (?:the )?(?:receiver|recipient) requested$/.test(t)) return "in_transit";
|
|
30084
|
+
if (/^the company or receiver name is incorrect\. this will delay delivery\b/.test(t)) return "exception";
|
|
30083
30085
|
if (/^(?:received in office|export to foreign provider)$/.test(t) || /^(?:(?:the )?(?:shipment|parcel|package|item) )?(?:(?:has been|was) )?(?:sent|dispatched|forwarded) abroad$/.test(t)) return "in_transit";
|
|
30084
30086
|
if (/^(?:posting\/collection|posted|origin scan)$|received at (?:our |the )?(?:[a-z]+ )?origin (?:office|facility|hub)|dropped off (?:after|before) (?:the )?latest drop ?off time/.test(t)) return "accepted";
|
|
30085
30087
|
if (/(?:\b(?:not|never)|n't)(?: (?:be|been|being))? accepted\b/.test(t)) return "exception";
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
"carrier": "dayone",
|
|
3
3
|
"entries": [
|
|
4
4
|
{"wording": "Shipment has begun. In transit to destination city", "stage": "in_transit", "language": "en", "confirmedBy": "live", "note": "The single scan of a parcel the tracker lists with a YunExpress number, whose tracker carries the rest of its history."},
|
|
5
|
+
{"wording": "Clearence processing completed - Export", "stage": "in_transit", "language": "en", "confirmedBy": "live", "note": "YunExpress's export clearance, spelt as YunExpress writes it, relayed for a parcel DayOne handed to YunExpress."},
|
|
5
6
|
{"wording": "Order processed by shipper", "stage": "registered", "language": "en", "confirmedBy": "live", "note": "Yanwen's record of the merchant's order data, the first scan."},
|
|
6
7
|
{"wording": "SHIPPING INFORMATION RECEIVED", "stage": "registered", "language": "en", "confirmedBy": "live"},
|
|
7
8
|
{"wording": "SHIPPING INFORMATION RECEIVED BY AUSTRALIA POST", "stage": "registered", "language": "en", "confirmedBy": "live", "note": "Australia Post's manifest, relayed: it comes after the parcel has moved and is no step back."},
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
const CODES = new Map([
|
|
2
2
|
['100', { status: 'pending', stage: 'registered' }],
|
|
3
|
+
// The label voided after it was created: no parcel is coming under the number.
|
|
4
|
+
['101', { status: 'exception', stage: 'exception' }],
|
|
3
5
|
// A pickup exception: GOFO has not received the parcel from the sender's warehouse yet.
|
|
4
6
|
['802', { status: 'pending', stage: 'registered' }],
|
|
5
7
|
...['200', '201', '202', '203', '411', '412', '414', '810'].map(code => [code, { status: 'in_transit', stage: 'in_transit' }]),
|
|
@@ -8,6 +8,15 @@
|
|
|
8
8
|
"stage": "registered",
|
|
9
9
|
"confirmedBy": "live"
|
|
10
10
|
},
|
|
11
|
+
{
|
|
12
|
+
"code": "101",
|
|
13
|
+
"wording": "Label Cancelled",
|
|
14
|
+
"language": "en",
|
|
15
|
+
"stage": "exception",
|
|
16
|
+
"confirmedBy": "live",
|
|
17
|
+
"firstSeen": "2026-10-23",
|
|
18
|
+
"note": "The label voided after code 100 created it, and no scan follows: no parcel is coming under the number."
|
|
19
|
+
},
|
|
11
20
|
{
|
|
12
21
|
"code": "802",
|
|
13
22
|
"wording": "Pickup Exception, GOFO has not Received the Package from the Warehouse yet.",
|
|
@@ -76,6 +76,9 @@ const ACTIVITY_STAGES = new Map([
|
|
|
76
76
|
// Receiver absent, absent again at the final attempt, business closed, or
|
|
77
77
|
// diverted to an access point after a failed attempt.
|
|
78
78
|
['48', 'failed_attempt'], ['49', 'failed_attempt'], ['G3', 'failed_attempt'], ['5R', 'failed_attempt'],
|
|
79
|
+
// The receiver's or company's name is wrong, which holds the delivery until
|
|
80
|
+
// UPS has the right one.
|
|
81
|
+
['AD', 'exception'],
|
|
79
82
|
// Delivered to an access point, and held there.
|
|
80
83
|
['2Q', 'ready_for_pickup'], ['ZP', 'ready_for_pickup'],
|
|
81
84
|
// Delivered, including collection from an access point and delivery by the
|
|
@@ -48,6 +48,7 @@
|
|
|
48
48
|
{ "code": "49", "language": "en", "stage": "failed_attempt", "confirmedBy": "live", "firstSeen": "2026-10-17", "note": "actCode: \"The receiver was not available at the time of the final delivery attempt.\" Seen after two 48 scans. The attempt failed; a hold, an access point or a return comes as a later scan." },
|
|
49
49
|
{ "code": "G3", "language": "en", "stage": "failed_attempt", "confirmedBy": "live", "firstSeen": "2026-10-07", "note": "actCode: the business was closed; a second attempt follows." },
|
|
50
50
|
{ "code": "5R", "language": "en", "stage": "failed_attempt", "confirmedBy": "live", "firstSeen": "2026-10-07", "note": "actCode: UPS could not deliver and is taking the parcel to an access point." },
|
|
51
|
+
{ "code": "AD", "language": "en", "stage": "exception", "confirmedBy": "live", "firstSeen": "2026-10-22", "note": "actCode: \"The company or receiver name is incorrect. This will delay delivery. We're attempting to update this information.\" Seen after Out For Delivery, before the receiver moved the delivery to an access point: the delivery waits on the receiver's details, as an incorrect address does." },
|
|
51
52
|
{ "code": "2Q", "language": "en", "stage": "ready_for_pickup", "confirmedBy": "live", "firstSeen": "2026-10-07", "note": "actCode: \"Delivered to UPS Access Point™\"." },
|
|
52
53
|
{ "code": "ZP", "language": "en", "stage": "ready_for_pickup", "confirmedBy": "live", "firstSeen": "2026-10-07", "note": "actCode: \"UPS Access Point™ possession\", right after 2Q. The shared classifier left it in transit." },
|
|
53
54
|
{ "code": "9E", "language": "en", "stage": "delivered", "confirmedBy": "live", "firstSeen": "2026-10-07", "note": "actCode: \"DELIVERED\"." },
|
|
@@ -463,6 +463,12 @@ export function trackingLanguageStage(description) {
|
|
|
463
463
|
return 'registered';
|
|
464
464
|
if (/^consignment received at (?:the )?postnl acceptance cent(?:re|er)$/.test(text))
|
|
465
465
|
return 'accepted';
|
|
466
|
+
// UPS's scans as providers relay them without its activity codes, read as UPS's own map reads them: a delivery
|
|
467
|
+
// change the receiver asked for, carried out, and a wrong company or receiver name holding the delivery.
|
|
468
|
+
if (/^as requested, (?:the )?(?:ups my choice®? )?delivery change (?:was|has been) completed$|^(?:the )?(?:delivery )?address (?:was|has been) changed as (?:the )?(?:receiver|recipient) requested$/.test(text))
|
|
469
|
+
return 'in_transit';
|
|
470
|
+
if (/^the company or receiver name is incorrect\. this will delay delivery\b/.test(text))
|
|
471
|
+
return 'exception';
|
|
466
472
|
if (/^(?:received in office|export to foreign provider)$/.test(text))
|
|
467
473
|
return 'in_transit';
|
|
468
474
|
// Sent on to another country: "Sent abroad".
|
package/dist/server/openapi.json
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "universal-parcel-scraper",
|
|
3
|
-
"version": "0.665.
|
|
3
|
+
"version": "0.665.2-main.3170",
|
|
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",
|