universal-parcel-scraper 0.0.0-stage → 0.2.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.
- package/LICENSE +201 -0
- package/NOTICE +15 -0
- package/README.md +123 -2
- package/data/carrier-order.json +107 -0
- package/data/carrier.schema.json +415 -0
- package/data/catalog.json +3969 -0
- package/data/coverage-summary.json +17 -0
- package/data/detection-golden.json +5375 -0
- package/data/stages.json +13 -0
- package/dist/browser/scraper.js +9292 -0
- package/dist/carriers/aliexpress/adapter.d.ts +30 -0
- package/dist/carriers/aliexpress/adapter.js +164 -0
- package/dist/carriers/aliexpress/carrier.json +59 -0
- package/dist/carriers/aliexpress/numbers.json +36 -0
- package/dist/carriers/aliexpress/status.d.ts +31 -0
- package/dist/carriers/aliexpress/status.js +79 -0
- package/dist/carriers/aliexpress/statuses.json +355 -0
- package/dist/carriers/amazon-logistics/carrier.json +94 -0
- package/dist/carriers/amazon-logistics/numbers.json +307 -0
- package/dist/carriers/amazon-shipping/adapter.d.ts +34 -0
- package/dist/carriers/amazon-shipping/adapter.js +292 -0
- package/dist/carriers/amazon-shipping/carrier.json +96 -0
- package/dist/carriers/amazon-shipping/eligibility.d.ts +3 -0
- package/dist/carriers/amazon-shipping/eligibility.js +16 -0
- package/dist/carriers/amazon-shipping/numbers.json +67 -0
- package/dist/carriers/amazon-shipping/status.d.ts +26 -0
- package/dist/carriers/amazon-shipping/status.js +118 -0
- package/dist/carriers/amazon-shipping/statuses.json +19 -0
- package/dist/carriers/an-post/carrier.json +38 -0
- package/dist/carriers/an-post/numbers.json +33 -0
- package/dist/carriers/aramex/adapter.d.ts +11 -0
- package/dist/carriers/aramex/adapter.js +49 -0
- package/dist/carriers/aramex/carrier.json +62 -0
- package/dist/carriers/aramex/numbers.json +71 -0
- package/dist/carriers/aramex/parser.d.ts +5 -0
- package/dist/carriers/aramex/parser.js +83 -0
- package/dist/carriers/aramex/status.d.ts +2 -0
- package/dist/carriers/aramex/status.js +16 -0
- package/dist/carriers/aramex/statuses.json +41 -0
- package/dist/carriers/asendia/adapter.d.ts +82 -0
- package/dist/carriers/asendia/adapter.js +342 -0
- package/dist/carriers/asendia/carrier.json +91 -0
- package/dist/carriers/asendia/numbers.json +177 -0
- package/dist/carriers/asendia/probe.d.ts +31 -0
- package/dist/carriers/asendia/probe.js +355 -0
- package/dist/carriers/asendia/status.d.ts +41 -0
- package/dist/carriers/asendia/status.js +147 -0
- package/dist/carriers/asendia/statuses.json +877 -0
- package/dist/carriers/australia-post/adapter.d.ts +20 -0
- package/dist/carriers/australia-post/adapter.js +175 -0
- package/dist/carriers/australia-post/carrier.json +72 -0
- package/dist/carriers/australia-post/numbers.json +66 -0
- package/dist/carriers/australia-post/status.d.ts +2 -0
- package/dist/carriers/australia-post/status.js +34 -0
- package/dist/carriers/australia-post/statuses.json +172 -0
- package/dist/carriers/austrian-post/adapter.d.ts +13 -0
- package/dist/carriers/austrian-post/adapter.js +101 -0
- package/dist/carriers/austrian-post/carrier.json +58 -0
- package/dist/carriers/austrian-post/numbers.json +73 -0
- package/dist/carriers/austrian-post/status.d.ts +3 -0
- package/dist/carriers/austrian-post/status.js +30 -0
- package/dist/carriers/austrian-post/statuses.json +47 -0
- package/dist/carriers/blue-dart/adapter.d.ts +11 -0
- package/dist/carriers/blue-dart/adapter.js +34 -0
- package/dist/carriers/blue-dart/carrier.json +59 -0
- package/dist/carriers/blue-dart/numbers.json +113 -0
- package/dist/carriers/blue-dart/parser.d.ts +3 -0
- package/dist/carriers/blue-dart/parser.js +75 -0
- package/dist/carriers/blue-dart/status.d.ts +2 -0
- package/dist/carriers/blue-dart/status.js +14 -0
- package/dist/carriers/blue-dart/statuses.json +59 -0
- package/dist/carriers/bpost/adapter.d.ts +11 -0
- package/dist/carriers/bpost/adapter.js +46 -0
- package/dist/carriers/bpost/carrier.json +81 -0
- package/dist/carriers/bpost/numbers.json +103 -0
- package/dist/carriers/bpost/parser.d.ts +3 -0
- package/dist/carriers/bpost/parser.js +84 -0
- package/dist/carriers/bpost/status.d.ts +2 -0
- package/dist/carriers/bpost/status.js +18 -0
- package/dist/carriers/bpost/statuses.json +96 -0
- package/dist/carriers/bring-posten/adapter.d.ts +11 -0
- package/dist/carriers/bring-posten/adapter.js +35 -0
- package/dist/carriers/bring-posten/carrier.json +91 -0
- package/dist/carriers/bring-posten/numbers.json +33 -0
- package/dist/carriers/bring-posten/parser.d.ts +3 -0
- package/dist/carriers/bring-posten/parser.js +95 -0
- package/dist/carriers/bring-posten/status.d.ts +3 -0
- package/dist/carriers/bring-posten/status.js +23 -0
- package/dist/carriers/bring-posten/statuses.json +33 -0
- package/dist/carriers/brt/adapter.d.ts +11 -0
- package/dist/carriers/brt/adapter.js +36 -0
- package/dist/carriers/brt/carrier.json +80 -0
- package/dist/carriers/brt/numbers.json +91 -0
- package/dist/carriers/brt/parser.d.ts +3 -0
- package/dist/carriers/brt/parser.js +84 -0
- package/dist/carriers/brt/status.d.ts +2 -0
- package/dist/carriers/brt/status.js +14 -0
- package/dist/carriers/brt/statuses.json +53 -0
- package/dist/carriers/c-chez-vous/adapter.d.ts +31 -0
- package/dist/carriers/c-chez-vous/adapter.js +181 -0
- package/dist/carriers/c-chez-vous/carrier.json +69 -0
- package/dist/carriers/c-chez-vous/numbers.json +31 -0
- package/dist/carriers/c-chez-vous/status.d.ts +27 -0
- package/dist/carriers/c-chez-vous/status.js +19 -0
- package/dist/carriers/c-chez-vous/statuses.json +10 -0
- package/dist/carriers/canada-post/adapter.d.ts +40 -0
- package/dist/carriers/canada-post/adapter.js +78 -0
- package/dist/carriers/canada-post/carrier.json +77 -0
- package/dist/carriers/canada-post/numbers.json +81 -0
- package/dist/carriers/canada-post/parser.d.ts +5 -0
- package/dist/carriers/canada-post/parser.js +202 -0
- package/dist/carriers/canada-post/status.d.ts +9 -0
- package/dist/carriers/canada-post/status.js +67 -0
- package/dist/carriers/canada-post/statuses.json +171 -0
- package/dist/carriers/canpar/adapter.d.ts +11 -0
- package/dist/carriers/canpar/adapter.js +40 -0
- package/dist/carriers/canpar/carrier.json +74 -0
- package/dist/carriers/canpar/numbers.json +71 -0
- package/dist/carriers/canpar/parser.d.ts +3 -0
- package/dist/carriers/canpar/parser.js +75 -0
- package/dist/carriers/canpar/status.d.ts +2 -0
- package/dist/carriers/canpar/status.js +16 -0
- package/dist/carriers/canpar/statuses.json +82 -0
- package/dist/carriers/china-post/carrier.json +38 -0
- package/dist/carriers/china-post/numbers.json +59 -0
- package/dist/carriers/chronopost/carrier.json +84 -0
- package/dist/carriers/chronopost/numbers.json +110 -0
- package/dist/carriers/chronopost/statuses.json +47 -0
- package/dist/carriers/ciblex/adapter.d.ts +17 -0
- package/dist/carriers/ciblex/adapter.js +46 -0
- package/dist/carriers/ciblex/carrier.json +71 -0
- package/dist/carriers/ciblex/numbers.json +63 -0
- package/dist/carriers/ciblex/parser.d.ts +4 -0
- package/dist/carriers/ciblex/parser.js +100 -0
- package/dist/carriers/ciblex/status.d.ts +24 -0
- package/dist/carriers/ciblex/status.js +55 -0
- package/dist/carriers/ciblex/statuses.json +221 -0
- package/dist/carriers/colis-prive/adapter.d.ts +39 -0
- package/dist/carriers/colis-prive/adapter.js +0 -0
- package/dist/carriers/colis-prive/carrier.json +72 -0
- package/dist/carriers/colis-prive/numbers.json +97 -0
- package/dist/carriers/colis-prive/status.d.ts +30 -0
- package/dist/carriers/colis-prive/status.js +85 -0
- package/dist/carriers/colis-prive/statuses.json +39 -0
- package/dist/carriers/colisweb/adapter.d.ts +29 -0
- package/dist/carriers/colisweb/adapter.js +166 -0
- package/dist/carriers/colisweb/carrier.json +63 -0
- package/dist/carriers/colisweb/numbers.json +39 -0
- package/dist/carriers/colisweb/status.d.ts +32 -0
- package/dist/carriers/colisweb/status.js +61 -0
- package/dist/carriers/colisweb/statuses.json +25 -0
- package/dist/carriers/correios-br/adapter.d.ts +16 -0
- package/dist/carriers/correios-br/adapter.js +78 -0
- package/dist/carriers/correios-br/carrier.json +64 -0
- package/dist/carriers/correios-br/model/LICENSE +21 -0
- package/dist/carriers/correios-br/model/captcha.onnx +0 -0
- package/dist/carriers/correios-br/numbers.json +72 -0
- package/dist/carriers/correios-br/ocr-worker.mjs +53 -0
- package/dist/carriers/correios-br/ocr.d.ts +10 -0
- package/dist/carriers/correios-br/ocr.js +83 -0
- package/dist/carriers/correios-br/parser.d.ts +4 -0
- package/dist/carriers/correios-br/parser.js +79 -0
- package/dist/carriers/correios-br/status.d.ts +2 -0
- package/dist/carriers/correios-br/status.js +17 -0
- package/dist/carriers/correios-br/statuses.json +16 -0
- package/dist/carriers/correos-chile/adapter.d.ts +12 -0
- package/dist/carriers/correos-chile/adapter.js +85 -0
- package/dist/carriers/correos-chile/carrier.json +62 -0
- package/dist/carriers/correos-chile/numbers.json +38 -0
- package/dist/carriers/correos-chile/parser.d.ts +9 -0
- package/dist/carriers/correos-chile/parser.js +120 -0
- package/dist/carriers/correos-chile/status.d.ts +3 -0
- package/dist/carriers/correos-chile/status.js +17 -0
- package/dist/carriers/correos-chile/statuses.json +12 -0
- package/dist/carriers/correos-express/adapter.d.ts +11 -0
- package/dist/carriers/correos-express/adapter.js +32 -0
- package/dist/carriers/correos-express/carrier.json +65 -0
- package/dist/carriers/correos-express/numbers.json +80 -0
- package/dist/carriers/correos-express/parser.d.ts +3 -0
- package/dist/carriers/correos-express/parser.js +97 -0
- package/dist/carriers/correos-express/status.d.ts +2 -0
- package/dist/carriers/correos-express/status.js +25 -0
- package/dist/carriers/correos-express/statuses.json +19 -0
- package/dist/carriers/correos-spain/adapter.d.ts +15 -0
- package/dist/carriers/correos-spain/adapter.js +191 -0
- package/dist/carriers/correos-spain/carrier.json +92 -0
- package/dist/carriers/correos-spain/numbers.json +149 -0
- package/dist/carriers/correos-spain/status.d.ts +17 -0
- package/dist/carriers/correos-spain/status.js +51 -0
- package/dist/carriers/correos-spain/statuses.json +46 -0
- package/dist/carriers/ctt/adapter.d.ts +34 -0
- package/dist/carriers/ctt/adapter.js +320 -0
- package/dist/carriers/ctt/carrier.json +72 -0
- package/dist/carriers/ctt/numbers.json +33 -0
- package/dist/carriers/ctt/status.d.ts +16 -0
- package/dist/carriers/ctt/status.js +16 -0
- package/dist/carriers/ctt/statuses.json +15 -0
- package/dist/carriers/ctt-express/adapter.d.ts +11 -0
- package/dist/carriers/ctt-express/adapter.js +41 -0
- package/dist/carriers/ctt-express/carrier.json +64 -0
- package/dist/carriers/ctt-express/numbers.json +59 -0
- package/dist/carriers/ctt-express/parser.d.ts +3 -0
- package/dist/carriers/ctt-express/parser.js +107 -0
- package/dist/carriers/ctt-express/status.d.ts +2 -0
- package/dist/carriers/ctt-express/status.js +17 -0
- package/dist/carriers/ctt-express/statuses.json +15 -0
- package/dist/carriers/dachser/adapter.d.ts +25 -0
- package/dist/carriers/dachser/adapter.js +168 -0
- package/dist/carriers/dachser/carrier.json +80 -0
- package/dist/carriers/dachser/numbers.json +66 -0
- package/dist/carriers/dachser/status.d.ts +40 -0
- package/dist/carriers/dachser/status.js +57 -0
- package/dist/carriers/dachser/statuses.json +18 -0
- package/dist/carriers/delhivery/adapter.d.ts +11 -0
- package/dist/carriers/delhivery/adapter.js +36 -0
- package/dist/carriers/delhivery/carrier.json +50 -0
- package/dist/carriers/delhivery/numbers.json +108 -0
- package/dist/carriers/delhivery/parser.d.ts +3 -0
- package/dist/carriers/delhivery/parser.js +81 -0
- package/dist/carriers/delhivery/status.d.ts +2 -0
- package/dist/carriers/delhivery/status.js +11 -0
- package/dist/carriers/delhivery/statuses.json +11 -0
- package/dist/carriers/delivengo/carrier.json +56 -0
- package/dist/carriers/delivengo/numbers.json +31 -0
- package/dist/carriers/delivengo/statuses.json +5 -0
- package/dist/carriers/dhl/adapter.d.ts +70 -0
- package/dist/carriers/dhl/adapter.js +308 -0
- package/dist/carriers/dhl/carrier.json +98 -0
- package/dist/carriers/dhl/numbers.json +153 -0
- package/dist/carriers/dhl/status.d.ts +14 -0
- package/dist/carriers/dhl/status.js +45 -0
- package/dist/carriers/dhl/statuses.json +27 -0
- package/dist/carriers/dhl-ecommerce/adapter.d.ts +50 -0
- package/dist/carriers/dhl-ecommerce/adapter.js +179 -0
- package/dist/carriers/dhl-ecommerce/carrier.json +97 -0
- package/dist/carriers/dhl-ecommerce/numbers.json +130 -0
- package/dist/carriers/dhl-ecommerce/status.d.ts +13 -0
- package/dist/carriers/dhl-ecommerce/status.js +57 -0
- package/dist/carriers/dhl-ecommerce/statuses.json +23 -0
- package/dist/carriers/dpd/adapter.d.ts +70 -0
- package/dist/carriers/dpd/adapter.js +809 -0
- package/dist/carriers/dpd/carrier.json +111 -0
- package/dist/carriers/dpd/numbers.json +43 -0
- package/dist/carriers/dpd/status.d.ts +39 -0
- package/dist/carriers/dpd/status.js +93 -0
- package/dist/carriers/dpd/statuses.json +144 -0
- package/dist/carriers/dpd-fr/adapter.d.ts +42 -0
- package/dist/carriers/dpd-fr/adapter.js +288 -0
- package/dist/carriers/dpd-fr/carrier.json +83 -0
- package/dist/carriers/dpd-fr/numbers.json +80 -0
- package/dist/carriers/dpd-fr/status.d.ts +21 -0
- package/dist/carriers/dpd-fr/status.js +93 -0
- package/dist/carriers/dpd-fr/statuses.json +325 -0
- package/dist/carriers/dtdc/adapter.d.ts +11 -0
- package/dist/carriers/dtdc/adapter.js +39 -0
- package/dist/carriers/dtdc/carrier.json +77 -0
- package/dist/carriers/dtdc/numbers.json +50 -0
- package/dist/carriers/dtdc/parser.d.ts +3 -0
- package/dist/carriers/dtdc/parser.js +90 -0
- package/dist/carriers/dtdc/status.d.ts +2 -0
- package/dist/carriers/dtdc/status.js +15 -0
- package/dist/carriers/dtdc/statuses.json +65 -0
- package/dist/carriers/ecoscooting/adapter.d.ts +11 -0
- package/dist/carriers/ecoscooting/adapter.js +42 -0
- package/dist/carriers/ecoscooting/carrier.json +76 -0
- package/dist/carriers/ecoscooting/numbers.json +291 -0
- package/dist/carriers/ecoscooting/parser.d.ts +3 -0
- package/dist/carriers/ecoscooting/parser.js +88 -0
- package/dist/carriers/ecoscooting/status.d.ts +2 -0
- package/dist/carriers/ecoscooting/status.js +50 -0
- package/dist/carriers/ecoscooting/statuses.json +295 -0
- package/dist/carriers/ems/adapter.d.ts +14 -0
- package/dist/carriers/ems/adapter.js +124 -0
- package/dist/carriers/ems/carrier.json +61 -0
- package/dist/carriers/ems/numbers.json +43 -0
- package/dist/carriers/ems/status.d.ts +2 -0
- package/dist/carriers/ems/status.js +24 -0
- package/dist/carriers/ems/statuses.json +128 -0
- package/dist/carriers/estafeta/adapter.d.ts +11 -0
- package/dist/carriers/estafeta/adapter.js +45 -0
- package/dist/carriers/estafeta/carrier.json +79 -0
- package/dist/carriers/estafeta/numbers.json +85 -0
- package/dist/carriers/estafeta/parser.d.ts +11 -0
- package/dist/carriers/estafeta/parser.js +123 -0
- package/dist/carriers/estafeta/status.d.ts +3 -0
- package/dist/carriers/estafeta/status.js +17 -0
- package/dist/carriers/estafeta/statuses.json +47 -0
- package/dist/carriers/evri/adapter.d.ts +14 -0
- package/dist/carriers/evri/adapter.js +146 -0
- package/dist/carriers/evri/carrier.json +69 -0
- package/dist/carriers/evri/numbers.json +32 -0
- package/dist/carriers/evri/status.d.ts +2 -0
- package/dist/carriers/evri/status.js +24 -0
- package/dist/carriers/evri/statuses.json +133 -0
- package/dist/carriers/fedex/adapter.d.ts +32 -0
- package/dist/carriers/fedex/adapter.js +307 -0
- package/dist/carriers/fedex/carrier.json +74 -0
- package/dist/carriers/fedex/numbers.json +198 -0
- package/dist/carriers/fedex/status.d.ts +33 -0
- package/dist/carriers/fedex/status.js +114 -0
- package/dist/carriers/fedex/statuses.json +34 -0
- package/dist/carriers/four-px/adapter.d.ts +12 -0
- package/dist/carriers/four-px/adapter.js +113 -0
- package/dist/carriers/four-px/carrier.json +60 -0
- package/dist/carriers/four-px/numbers.json +32 -0
- package/dist/carriers/four-px/status.d.ts +2 -0
- package/dist/carriers/four-px/status.js +22 -0
- package/dist/carriers/four-px/statuses.json +141 -0
- package/dist/carriers/geodis/adapter.d.ts +37 -0
- package/dist/carriers/geodis/adapter.js +275 -0
- package/dist/carriers/geodis/carrier.json +75 -0
- package/dist/carriers/geodis/numbers.json +45 -0
- package/dist/carriers/geodis/status.d.ts +37 -0
- package/dist/carriers/geodis/status.js +105 -0
- package/dist/carriers/geodis/statuses.json +51 -0
- package/dist/carriers/gls-ch/adapter.d.ts +39 -0
- package/dist/carriers/gls-ch/adapter.js +405 -0
- package/dist/carriers/gls-ch/carrier.json +122 -0
- package/dist/carriers/gls-ch/numbers.json +31 -0
- package/dist/carriers/gls-ch/status.d.ts +19 -0
- package/dist/carriers/gls-ch/status.js +79 -0
- package/dist/carriers/gls-ch/statuses.json +31 -0
- package/dist/carriers/gls-de/adapter.d.ts +28 -0
- package/dist/carriers/gls-de/adapter.js +113 -0
- package/dist/carriers/gls-de/carrier.json +126 -0
- package/dist/carriers/gls-de/numbers.json +111 -0
- package/dist/carriers/gls-de/status.d.ts +10 -0
- package/dist/carriers/gls-de/status.js +10 -0
- package/dist/carriers/gls-de/statuses.json +31 -0
- package/dist/carriers/gls-fr/adapter.d.ts +29 -0
- package/dist/carriers/gls-fr/adapter.js +220 -0
- package/dist/carriers/gls-fr/carrier.json +107 -0
- package/dist/carriers/gls-fr/numbers.json +113 -0
- package/dist/carriers/gls-fr/status.d.ts +28 -0
- package/dist/carriers/gls-fr/status.js +58 -0
- package/dist/carriers/gls-fr/statuses.json +34 -0
- package/dist/carriers/gofo/adapter.d.ts +11 -0
- package/dist/carriers/gofo/adapter.js +41 -0
- package/dist/carriers/gofo/carrier.json +80 -0
- package/dist/carriers/gofo/numbers.json +59 -0
- package/dist/carriers/gofo/parser.d.ts +5 -0
- package/dist/carriers/gofo/parser.js +131 -0
- package/dist/carriers/gofo/status.d.ts +2 -0
- package/dist/carriers/gofo/status.js +7 -0
- package/dist/carriers/gofo/statuses.json +54 -0
- package/dist/carriers/heppner/adapter.d.ts +27 -0
- package/dist/carriers/heppner/adapter.js +247 -0
- package/dist/carriers/heppner/carrier.json +74 -0
- package/dist/carriers/heppner/numbers.json +39 -0
- package/dist/carriers/heppner/status.d.ts +28 -0
- package/dist/carriers/heppner/status.js +43 -0
- package/dist/carriers/heppner/statuses.json +69 -0
- package/dist/carriers/hermes/adapter.d.ts +17 -0
- package/dist/carriers/hermes/adapter.js +103 -0
- package/dist/carriers/hermes/carrier.json +58 -0
- package/dist/carriers/hermes/numbers.json +20 -0
- package/dist/carriers/hermes/status.d.ts +15 -0
- package/dist/carriers/hermes/status.js +61 -0
- package/dist/carriers/hermes/statuses.json +31 -0
- package/dist/carriers/hermes-de/adapter.d.ts +22 -0
- package/dist/carriers/hermes-de/adapter.js +168 -0
- package/dist/carriers/hermes-de/carrier.json +90 -0
- package/dist/carriers/hermes-de/numbers.json +125 -0
- package/dist/carriers/hermes-de/status.d.ts +24 -0
- package/dist/carriers/hermes-de/status.js +52 -0
- package/dist/carriers/hermes-de/statuses.json +277 -0
- package/dist/carriers/hongkong-post/carrier.json +38 -0
- package/dist/carriers/hongkong-post/numbers.json +32 -0
- package/dist/carriers/india-post/adapter.d.ts +33 -0
- package/dist/carriers/india-post/adapter.js +415 -0
- package/dist/carriers/india-post/carrier.json +74 -0
- package/dist/carriers/india-post/numbers.json +58 -0
- package/dist/carriers/india-post/status.d.ts +23 -0
- package/dist/carriers/india-post/status.js +99 -0
- package/dist/carriers/india-post/statuses.json +18 -0
- package/dist/carriers/inpost/adapter.d.ts +14 -0
- package/dist/carriers/inpost/adapter.js +143 -0
- package/dist/carriers/inpost/carrier.json +75 -0
- package/dist/carriers/inpost/numbers.json +130 -0
- package/dist/carriers/inpost/status.d.ts +16 -0
- package/dist/carriers/inpost/status.js +31 -0
- package/dist/carriers/inpost/statuses.json +26 -0
- package/dist/carriers/intl-post/carrier.json +46 -0
- package/dist/carriers/intl-post/numbers.json +29 -0
- package/dist/carriers/j-and-t/carrier.json +66 -0
- package/dist/carriers/j-and-t/numbers.json +90 -0
- package/dist/carriers/japan-post/adapter.d.ts +13 -0
- package/dist/carriers/japan-post/adapter.js +159 -0
- package/dist/carriers/japan-post/carrier.json +71 -0
- package/dist/carriers/japan-post/numbers.json +35 -0
- package/dist/carriers/japan-post/status.d.ts +2 -0
- package/dist/carriers/japan-post/status.js +25 -0
- package/dist/carriers/japan-post/statuses.json +136 -0
- package/dist/carriers/jd-logistics/carrier.json +37 -0
- package/dist/carriers/jd-logistics/numbers.json +19 -0
- package/dist/carriers/korea-post/adapter.d.ts +12 -0
- package/dist/carriers/korea-post/adapter.js +101 -0
- package/dist/carriers/korea-post/carrier.json +74 -0
- package/dist/carriers/korea-post/numbers.json +54 -0
- package/dist/carriers/korea-post/status.d.ts +2 -0
- package/dist/carriers/korea-post/status.js +19 -0
- package/dist/carriers/korea-post/statuses.json +103 -0
- package/dist/carriers/la-poste/adapter.d.ts +29 -0
- package/dist/carriers/la-poste/adapter.js +241 -0
- package/dist/carriers/la-poste/carrier.json +87 -0
- package/dist/carriers/la-poste/numbers.json +140 -0
- package/dist/carriers/la-poste/status.d.ts +30 -0
- package/dist/carriers/la-poste/status.js +110 -0
- package/dist/carriers/la-poste/statuses.json +163 -0
- package/dist/carriers/landmark-global/adapter.d.ts +11 -0
- package/dist/carriers/landmark-global/adapter.js +30 -0
- package/dist/carriers/landmark-global/carrier.json +64 -0
- package/dist/carriers/landmark-global/numbers.json +58 -0
- package/dist/carriers/landmark-global/parser.d.ts +3 -0
- package/dist/carriers/landmark-global/parser.js +78 -0
- package/dist/carriers/landmark-global/status.d.ts +2 -0
- package/dist/carriers/landmark-global/status.js +13 -0
- package/dist/carriers/landmark-global/statuses.json +125 -0
- package/dist/carriers/mondial-relay/adapter.d.ts +32 -0
- package/dist/carriers/mondial-relay/adapter.js +352 -0
- package/dist/carriers/mondial-relay/carrier.json +94 -0
- package/dist/carriers/mondial-relay/numbers.json +130 -0
- package/dist/carriers/mondial-relay/status.d.ts +31 -0
- package/dist/carriers/mondial-relay/status.js +98 -0
- package/dist/carriers/mondial-relay/statuses.json +50 -0
- package/dist/carriers/mrw/adapter.d.ts +13 -0
- package/dist/carriers/mrw/adapter.js +131 -0
- package/dist/carriers/mrw/carrier.json +60 -0
- package/dist/carriers/mrw/numbers.json +116 -0
- package/dist/carriers/mrw/parser.d.ts +12 -0
- package/dist/carriers/mrw/parser.js +149 -0
- package/dist/carriers/mrw/status.d.ts +2 -0
- package/dist/carriers/mrw/status.js +14 -0
- package/dist/carriers/mrw/statuses.json +13 -0
- package/dist/carriers/nacex/adapter.d.ts +11 -0
- package/dist/carriers/nacex/adapter.js +99 -0
- package/dist/carriers/nacex/carrier.json +78 -0
- package/dist/carriers/nacex/numbers.json +47 -0
- package/dist/carriers/nacex/parser.d.ts +4 -0
- package/dist/carriers/nacex/parser.js +119 -0
- package/dist/carriers/nacex/status.d.ts +2 -0
- package/dist/carriers/nacex/status.js +12 -0
- package/dist/carriers/nacex/statuses.json +11 -0
- package/dist/carriers/ninja-van/adapter.d.ts +11 -0
- package/dist/carriers/ninja-van/adapter.js +45 -0
- package/dist/carriers/ninja-van/carrier.json +79 -0
- package/dist/carriers/ninja-van/numbers.json +67 -0
- package/dist/carriers/ninja-van/parser.d.ts +5 -0
- package/dist/carriers/ninja-van/parser.js +95 -0
- package/dist/carriers/ninja-van/status.d.ts +3 -0
- package/dist/carriers/ninja-van/status.js +25 -0
- package/dist/carriers/ninja-van/statuses.json +11 -0
- package/dist/carriers/nz-post/adapter.d.ts +11 -0
- package/dist/carriers/nz-post/adapter.js +45 -0
- package/dist/carriers/nz-post/carrier.json +82 -0
- package/dist/carriers/nz-post/numbers.json +49 -0
- package/dist/carriers/nz-post/parser.d.ts +3 -0
- package/dist/carriers/nz-post/parser.js +97 -0
- package/dist/carriers/nz-post/status.d.ts +2 -0
- package/dist/carriers/nz-post/status.js +29 -0
- package/dist/carriers/nz-post/statuses.json +68 -0
- package/dist/carriers/old-dominion/carrier.json +51 -0
- package/dist/carriers/old-dominion/numbers.json +83 -0
- package/dist/carriers/ontrac/adapter.d.ts +11 -0
- package/dist/carriers/ontrac/adapter.js +34 -0
- package/dist/carriers/ontrac/carrier.json +81 -0
- package/dist/carriers/ontrac/numbers.json +214 -0
- package/dist/carriers/ontrac/parser.d.ts +3 -0
- package/dist/carriers/ontrac/parser.js +72 -0
- package/dist/carriers/ontrac/status.d.ts +2 -0
- package/dist/carriers/ontrac/status.js +19 -0
- package/dist/carriers/ontrac/statuses.json +61 -0
- package/dist/carriers/paack/adapter.d.ts +19 -0
- package/dist/carriers/paack/adapter.js +255 -0
- package/dist/carriers/paack/carrier.json +79 -0
- package/dist/carriers/paack/numbers.json +106 -0
- package/dist/carriers/paack/status.d.ts +26 -0
- package/dist/carriers/paack/status.js +82 -0
- package/dist/carriers/paack/statuses.json +357 -0
- package/dist/carriers/packeta/adapter.d.ts +15 -0
- package/dist/carriers/packeta/adapter.js +166 -0
- package/dist/carriers/packeta/carrier.json +90 -0
- package/dist/carriers/packeta/numbers.json +71 -0
- package/dist/carriers/packeta/status.d.ts +23 -0
- package/dist/carriers/packeta/status.js +40 -0
- package/dist/carriers/packeta/statuses.json +21 -0
- package/dist/carriers/parcelforce/carrier.json +47 -0
- package/dist/carriers/parcelforce/numbers.json +32 -0
- package/dist/carriers/planzer/adapter.d.ts +40 -0
- package/dist/carriers/planzer/adapter.js +148 -0
- package/dist/carriers/planzer/carrier.json +85 -0
- package/dist/carriers/planzer/numbers.json +118 -0
- package/dist/carriers/planzer/shared.d.ts +19 -0
- package/dist/carriers/planzer/shared.js +135 -0
- package/dist/carriers/planzer/status.d.ts +33 -0
- package/dist/carriers/planzer/status.js +89 -0
- package/dist/carriers/planzer/statuses.json +229 -0
- package/dist/carriers/poczta-polska/adapter.d.ts +15 -0
- package/dist/carriers/poczta-polska/adapter.js +65 -0
- package/dist/carriers/poczta-polska/carrier.json +79 -0
- package/dist/carriers/poczta-polska/numbers.json +130 -0
- package/dist/carriers/poczta-polska/parser.d.ts +3 -0
- package/dist/carriers/poczta-polska/parser.js +96 -0
- package/dist/carriers/poczta-polska/status.d.ts +2 -0
- package/dist/carriers/poczta-polska/status.js +21 -0
- package/dist/carriers/poczta-polska/statuses.json +47 -0
- package/dist/carriers/pos-malaysia/adapter.d.ts +18 -0
- package/dist/carriers/pos-malaysia/adapter.js +199 -0
- package/dist/carriers/pos-malaysia/carrier.json +78 -0
- package/dist/carriers/pos-malaysia/numbers.json +73 -0
- package/dist/carriers/pos-malaysia/status.d.ts +17 -0
- package/dist/carriers/pos-malaysia/status.js +21 -0
- package/dist/carriers/pos-malaysia/statuses.json +17 -0
- package/dist/carriers/poste-italiane/adapter.d.ts +15 -0
- package/dist/carriers/poste-italiane/adapter.js +211 -0
- package/dist/carriers/poste-italiane/carrier.json +86 -0
- package/dist/carriers/poste-italiane/numbers.json +117 -0
- package/dist/carriers/poste-italiane/status.d.ts +19 -0
- package/dist/carriers/poste-italiane/status.js +44 -0
- package/dist/carriers/poste-italiane/statuses.json +22 -0
- package/dist/carriers/posti/adapter.d.ts +17 -0
- package/dist/carriers/posti/adapter.js +195 -0
- package/dist/carriers/posti/carrier.json +69 -0
- package/dist/carriers/posti/numbers.json +52 -0
- package/dist/carriers/posti/status.d.ts +4 -0
- package/dist/carriers/posti/status.js +41 -0
- package/dist/carriers/posti/statuses.json +18 -0
- package/dist/carriers/postlogistics/adapter.d.ts +39 -0
- package/dist/carriers/postlogistics/adapter.js +162 -0
- package/dist/carriers/postlogistics/carrier.json +67 -0
- package/dist/carriers/postlogistics/number.d.ts +2 -0
- package/dist/carriers/postlogistics/number.js +7 -0
- package/dist/carriers/postlogistics/numbers.json +54 -0
- package/dist/carriers/postlogistics/status.d.ts +20 -0
- package/dist/carriers/postlogistics/status.js +12 -0
- package/dist/carriers/postlogistics/statuses.json +40 -0
- package/dist/carriers/postnord/adapter.d.ts +11 -0
- package/dist/carriers/postnord/adapter.js +76 -0
- package/dist/carriers/postnord/carrier.json +82 -0
- package/dist/carriers/postnord/numbers.json +66 -0
- package/dist/carriers/postnord/parser.d.ts +3 -0
- package/dist/carriers/postnord/parser.js +75 -0
- package/dist/carriers/postnord/status.d.ts +3 -0
- package/dist/carriers/postnord/status.js +38 -0
- package/dist/carriers/postnord/statuses.json +16 -0
- package/dist/carriers/purolator/adapter.d.ts +11 -0
- package/dist/carriers/purolator/adapter.js +45 -0
- package/dist/carriers/purolator/carrier.json +75 -0
- package/dist/carriers/purolator/numbers.json +146 -0
- package/dist/carriers/purolator/parser.d.ts +3 -0
- package/dist/carriers/purolator/parser.js +79 -0
- package/dist/carriers/purolator/status.d.ts +2 -0
- package/dist/carriers/purolator/status.js +17 -0
- package/dist/carriers/purolator/statuses.json +15 -0
- package/dist/carriers/quickpac/carrier.json +68 -0
- package/dist/carriers/quickpac/numbers.json +31 -0
- package/dist/carriers/quickpac/statuses.json +213 -0
- package/dist/carriers/relais-colis/adapter.d.ts +28 -0
- package/dist/carriers/relais-colis/adapter.js +242 -0
- package/dist/carriers/relais-colis/carrier.json +77 -0
- package/dist/carriers/relais-colis/numbers.json +64 -0
- package/dist/carriers/relais-colis/status.d.ts +26 -0
- package/dist/carriers/relais-colis/status.js +91 -0
- package/dist/carriers/relais-colis/statuses.json +341 -0
- package/dist/carriers/royal-mail/adapter.d.ts +32 -0
- package/dist/carriers/royal-mail/adapter.js +260 -0
- package/dist/carriers/royal-mail/carrier.json +60 -0
- package/dist/carriers/royal-mail/numbers.json +57 -0
- package/dist/carriers/royal-mail/status.d.ts +19 -0
- package/dist/carriers/royal-mail/status.js +80 -0
- package/dist/carriers/royal-mail/statuses.json +16 -0
- package/dist/carriers/seur/adapter.d.ts +11 -0
- package/dist/carriers/seur/adapter.js +35 -0
- package/dist/carriers/seur/carrier.json +89 -0
- package/dist/carriers/seur/numbers.json +80 -0
- package/dist/carriers/seur/parser.d.ts +3 -0
- package/dist/carriers/seur/parser.js +78 -0
- package/dist/carriers/seur/status.d.ts +2 -0
- package/dist/carriers/seur/status.js +14 -0
- package/dist/carriers/seur/statuses.json +47 -0
- package/dist/carriers/sf-express/adapter.d.ts +17 -0
- package/dist/carriers/sf-express/adapter.js +87 -0
- package/dist/carriers/sf-express/carrier.json +78 -0
- package/dist/carriers/sf-express/numbers.json +66 -0
- package/dist/carriers/sf-express/parser.d.ts +4 -0
- package/dist/carriers/sf-express/parser.js +102 -0
- package/dist/carriers/sf-express/status.d.ts +4 -0
- package/dist/carriers/sf-express/status.js +28 -0
- package/dist/carriers/sf-express/statuses.json +334 -0
- package/dist/carriers/shipup/carrier.json +28 -0
- package/dist/carriers/shipup/numbers.json +20 -0
- package/dist/carriers/singapore-post/adapter.d.ts +12 -0
- package/dist/carriers/singapore-post/adapter.js +106 -0
- package/dist/carriers/singapore-post/carrier.json +62 -0
- package/dist/carriers/singapore-post/numbers.json +77 -0
- package/dist/carriers/singapore-post/status.d.ts +2 -0
- package/dist/carriers/singapore-post/status.js +17 -0
- package/dist/carriers/singapore-post/statuses.json +101 -0
- package/dist/carriers/spee-dee/carrier.json +51 -0
- package/dist/carriers/spee-dee/numbers.json +55 -0
- package/dist/carriers/speedx/carrier.json +49 -0
- package/dist/carriers/speedx/numbers.json +112 -0
- package/dist/carriers/spring-gds/adapter.d.ts +35 -0
- package/dist/carriers/spring-gds/adapter.js +212 -0
- package/dist/carriers/spring-gds/carrier.json +90 -0
- package/dist/carriers/spring-gds/numbers.json +224 -0
- package/dist/carriers/spring-gds/status.d.ts +19 -0
- package/dist/carriers/spring-gds/status.js +28 -0
- package/dist/carriers/spring-gds/statuses.json +140 -0
- package/dist/carriers/sto/carrier.json +37 -0
- package/dist/carriers/sto/numbers.json +33 -0
- package/dist/carriers/sunyou/adapter.d.ts +18 -0
- package/dist/carriers/sunyou/adapter.js +156 -0
- package/dist/carriers/sunyou/carrier.json +64 -0
- package/dist/carriers/sunyou/numbers.json +44 -0
- package/dist/carriers/sunyou/status.d.ts +17 -0
- package/dist/carriers/sunyou/status.js +13 -0
- package/dist/carriers/sunyou/statuses.json +53 -0
- package/dist/carriers/swiss-post/adapter.d.ts +18 -0
- package/dist/carriers/swiss-post/adapter.js +282 -0
- package/dist/carriers/swiss-post/carrier.json +84 -0
- package/dist/carriers/swiss-post/numbers.json +55 -0
- package/dist/carriers/swiss-post/status.d.ts +27 -0
- package/dist/carriers/swiss-post/status.js +64 -0
- package/dist/carriers/swiss-post/statuses.json +33 -0
- package/dist/carriers/swiss-post-cargo/adapter.d.ts +19 -0
- package/dist/carriers/swiss-post-cargo/adapter.js +173 -0
- package/dist/carriers/swiss-post-cargo/carrier.json +60 -0
- package/dist/carriers/swiss-post-cargo/numbers.json +23 -0
- package/dist/carriers/swiss-post-cargo/reference.d.ts +13 -0
- package/dist/carriers/swiss-post-cargo/reference.js +48 -0
- package/dist/carriers/swiss-post-cargo/status.d.ts +13 -0
- package/dist/carriers/swiss-post-cargo/status.js +53 -0
- package/dist/carriers/swiss-post-cargo/statuses.json +19 -0
- package/dist/carriers/thailand-post/carrier.json +38 -0
- package/dist/carriers/thailand-post/numbers.json +33 -0
- package/dist/carriers/the-courier-guy/adapter.d.ts +11 -0
- package/dist/carriers/the-courier-guy/adapter.js +49 -0
- package/dist/carriers/the-courier-guy/carrier.json +73 -0
- package/dist/carriers/the-courier-guy/number.d.ts +3 -0
- package/dist/carriers/the-courier-guy/number.js +18 -0
- package/dist/carriers/the-courier-guy/numbers.json +74 -0
- package/dist/carriers/the-courier-guy/parser.d.ts +3 -0
- package/dist/carriers/the-courier-guy/parser.js +104 -0
- package/dist/carriers/the-courier-guy/status.d.ts +5 -0
- package/dist/carriers/the-courier-guy/status.js +21 -0
- package/dist/carriers/the-courier-guy/statuses.json +61 -0
- package/dist/carriers/tipsa/adapter.d.ts +12 -0
- package/dist/carriers/tipsa/adapter.js +52 -0
- package/dist/carriers/tipsa/carrier.json +92 -0
- package/dist/carriers/tipsa/numbers.json +100 -0
- package/dist/carriers/tipsa/parser.d.ts +17 -0
- package/dist/carriers/tipsa/parser.js +114 -0
- package/dist/carriers/tipsa/status.d.ts +3 -0
- package/dist/carriers/tipsa/status.js +25 -0
- package/dist/carriers/tipsa/statuses.json +12 -0
- package/dist/carriers/tnt/adapter.d.ts +23 -0
- package/dist/carriers/tnt/adapter.js +210 -0
- package/dist/carriers/tnt/carrier.json +66 -0
- package/dist/carriers/tnt/numbers.json +116 -0
- package/dist/carriers/tnt/status.d.ts +3 -0
- package/dist/carriers/tnt/status.js +35 -0
- package/dist/carriers/tnt/statuses.json +126 -0
- package/dist/carriers/ukrposhta/adapter.d.ts +13 -0
- package/dist/carriers/ukrposhta/adapter.js +152 -0
- package/dist/carriers/ukrposhta/carrier.json +62 -0
- package/dist/carriers/ukrposhta/numbers.json +53 -0
- package/dist/carriers/ukrposhta/parser.d.ts +15 -0
- package/dist/carriers/ukrposhta/parser.js +130 -0
- package/dist/carriers/ukrposhta/status.d.ts +3 -0
- package/dist/carriers/ukrposhta/status.js +34 -0
- package/dist/carriers/ukrposhta/statuses.json +208 -0
- package/dist/carriers/uniuni/adapter.d.ts +11 -0
- package/dist/carriers/uniuni/adapter.js +48 -0
- package/dist/carriers/uniuni/carrier.json +90 -0
- package/dist/carriers/uniuni/numbers.json +72 -0
- package/dist/carriers/uniuni/parser.d.ts +5 -0
- package/dist/carriers/uniuni/parser.js +114 -0
- package/dist/carriers/uniuni/status.d.ts +2 -0
- package/dist/carriers/uniuni/status.js +16 -0
- package/dist/carriers/uniuni/statuses.json +54 -0
- package/dist/carriers/unknown/carrier.json +57 -0
- package/dist/carriers/unknown/numbers.json +257 -0
- package/dist/carriers/ups/adapter.d.ts +40 -0
- package/dist/carriers/ups/adapter.js +473 -0
- package/dist/carriers/ups/carrier.json +69 -0
- package/dist/carriers/ups/numbers.json +134 -0
- package/dist/carriers/ups/status.d.ts +25 -0
- package/dist/carriers/ups/status.js +41 -0
- package/dist/carriers/ups/statuses.json +35 -0
- package/dist/carriers/usps/adapter.d.ts +25 -0
- package/dist/carriers/usps/adapter.js +261 -0
- package/dist/carriers/usps/carrier.json +74 -0
- package/dist/carriers/usps/numbers.json +286 -0
- package/dist/carriers/usps/status.d.ts +25 -0
- package/dist/carriers/usps/status.js +72 -0
- package/dist/carriers/usps/statuses.json +24 -0
- package/dist/carriers/yamato/adapter.d.ts +13 -0
- package/dist/carriers/yamato/adapter.js +130 -0
- package/dist/carriers/yamato/carrier.json +72 -0
- package/dist/carriers/yamato/numbers.json +57 -0
- package/dist/carriers/yamato/status.d.ts +2 -0
- package/dist/carriers/yamato/status.js +27 -0
- package/dist/carriers/yamato/statuses.json +159 -0
- package/dist/carriers/yanwen/adapter.d.ts +13 -0
- package/dist/carriers/yanwen/adapter.js +130 -0
- package/dist/carriers/yanwen/carrier.json +66 -0
- package/dist/carriers/yanwen/numbers.json +45 -0
- package/dist/carriers/yanwen/status.d.ts +2 -0
- package/dist/carriers/yanwen/status.js +25 -0
- package/dist/carriers/yanwen/statuses.json +131 -0
- package/dist/carriers/yto/adapter.d.ts +11 -0
- package/dist/carriers/yto/adapter.js +36 -0
- package/dist/carriers/yto/carrier.json +75 -0
- package/dist/carriers/yto/numbers.json +33 -0
- package/dist/carriers/yto/parser.d.ts +3 -0
- package/dist/carriers/yto/parser.js +92 -0
- package/dist/carriers/yto/status.d.ts +10 -0
- package/dist/carriers/yto/status.js +46 -0
- package/dist/carriers/yto/statuses.json +206 -0
- package/dist/carriers/yunda/adapter.d.ts +11 -0
- package/dist/carriers/yunda/adapter.js +68 -0
- package/dist/carriers/yunda/carrier.json +69 -0
- package/dist/carriers/yunda/challenge.d.ts +5 -0
- package/dist/carriers/yunda/challenge.js +68 -0
- package/dist/carriers/yunda/numbers.json +43 -0
- package/dist/carriers/yunda/parser.d.ts +4 -0
- package/dist/carriers/yunda/parser.js +105 -0
- package/dist/carriers/yunda/status.d.ts +4 -0
- package/dist/carriers/yunda/status.js +9 -0
- package/dist/carriers/yunda/statuses.json +40 -0
- package/dist/carriers/yunexpress/adapter.d.ts +20 -0
- package/dist/carriers/yunexpress/adapter.js +240 -0
- package/dist/carriers/yunexpress/carrier.json +69 -0
- package/dist/carriers/yunexpress/numbers.json +32 -0
- package/dist/carriers/yunexpress/status.d.ts +2 -0
- package/dist/carriers/yunexpress/status.js +23 -0
- package/dist/carriers/yunexpress/statuses.json +112 -0
- package/dist/carriers/zto/carrier.json +37 -0
- package/dist/carriers/zto/numbers.json +30 -0
- package/dist/cli/index.d.ts +2 -0
- package/dist/cli/index.js +82 -0
- package/dist/core/adapter/index.d.ts +90 -0
- package/dist/core/adapter/index.js +103 -0
- package/dist/core/adapter/track.d.ts +10 -0
- package/dist/core/adapter/track.js +20 -0
- package/dist/core/catalog/amazon.d.ts +5 -0
- package/dist/core/catalog/amazon.js +33 -0
- package/dist/core/catalog/definitions.d.ts +24 -0
- package/dist/core/catalog/definitions.js +44 -0
- package/dist/core/catalog/handoff.d.ts +9 -0
- package/dist/core/catalog/handoff.js +56 -0
- package/dist/core/catalog/hints.d.ts +45 -0
- package/dist/core/catalog/hints.js +162 -0
- package/dist/core/catalog/index.d.ts +38 -0
- package/dist/core/catalog/index.js +223 -0
- package/dist/core/catalog/inputs.d.ts +6 -0
- package/dist/core/catalog/inputs.js +89 -0
- package/dist/core/catalog/linkRules.d.ts +24 -0
- package/dist/core/catalog/linkRules.js +20 -0
- package/dist/core/catalog/networks.d.ts +9 -0
- package/dist/core/catalog/networks.js +13 -0
- package/dist/core/catalog/recognition.d.ts +22 -0
- package/dist/core/catalog/recognition.js +52 -0
- package/dist/core/catalog/types.d.ts +135 -0
- package/dist/core/catalog/types.js +1 -0
- package/dist/core/catalog/urls.d.ts +2 -0
- package/dist/core/catalog/urls.js +125 -0
- package/dist/core/detection/amazon.d.ts +2 -0
- package/dist/core/detection/amazon.js +14 -0
- package/dist/core/detection/candidates.d.ts +5 -0
- package/dist/core/detection/candidates.js +41 -0
- package/dist/core/detection/detect.d.ts +17 -0
- package/dist/core/detection/detect.js +52 -0
- package/dist/core/detection/gls.d.ts +16 -0
- package/dist/core/detection/gls.js +21 -0
- package/dist/core/detection/hermes.d.ts +14 -0
- package/dist/core/detection/hermes.js +19 -0
- package/dist/core/detection/index.d.ts +19 -0
- package/dist/core/detection/index.js +9 -0
- package/dist/core/detection/mondialRelay.d.ts +13 -0
- package/dist/core/detection/mondialRelay.js +25 -0
- package/dist/core/detection/normalize.d.ts +15 -0
- package/dist/core/detection/normalize.js +39 -0
- package/dist/core/detection/parse.d.ts +6 -0
- package/dist/core/detection/parse.js +112 -0
- package/dist/core/detection/s10.d.ts +4 -0
- package/dist/core/detection/s10.js +25 -0
- package/dist/core/detection/types.d.ts +22 -0
- package/dist/core/detection/types.js +1 -0
- package/dist/core/errors/hint.d.ts +7 -0
- package/dist/core/errors/hint.js +7 -0
- package/dist/core/errors/index.d.ts +98 -0
- package/dist/core/errors/index.js +178 -0
- package/dist/core/recognition/index.d.ts +24 -0
- package/dist/core/recognition/index.js +65 -0
- package/dist/core/result/index.d.ts +57 -0
- package/dist/core/result/index.js +114 -0
- package/dist/core/result/resolve.d.ts +18 -0
- package/dist/core/result/resolve.js +49 -0
- package/dist/core/runner/index.d.ts +33 -0
- package/dist/core/runner/index.js +109 -0
- package/dist/core/status/index.d.ts +22 -0
- package/dist/core/status/index.js +3 -0
- package/dist/core/status/language.d.ts +11 -0
- package/dist/core/status/language.js +149 -0
- package/dist/core/status/wording.d.ts +25 -0
- package/dist/core/status/wording.js +91 -0
- package/dist/core/telemetry/index.d.ts +62 -0
- package/dist/core/telemetry/index.js +55 -0
- package/dist/core/time/index.d.ts +84 -0
- package/dist/core/time/index.js +243 -0
- package/dist/core/time/result.d.ts +5 -0
- package/dist/core/time/result.js +55 -0
- package/dist/core/transport/boundedFetch.d.ts +26 -0
- package/dist/core/transport/boundedFetch.js +152 -0
- package/dist/core/transport/browser.d.ts +14 -0
- package/dist/core/transport/browser.js +113 -0
- package/dist/core/transport/index.d.ts +8 -0
- package/dist/core/transport/index.js +5 -0
- package/dist/core/transport/optional.d.ts +2 -0
- package/dist/core/transport/optional.js +17 -0
- package/dist/core/transport/text.d.ts +8 -0
- package/dist/core/transport/text.js +18 -0
- package/dist/core/transport/trawl.d.ts +80 -0
- package/dist/core/transport/trawl.js +212 -0
- package/dist/core/transport/upstreamHttpDiagnostics.d.ts +16 -0
- package/dist/core/transport/upstreamHttpDiagnostics.js +97 -0
- package/dist/core/types.d.ts +8 -0
- package/dist/core/types.js +11 -0
- package/dist/data/catalog.json +3969 -0
- package/dist/facade/index.d.ts +57 -0
- package/dist/facade/index.js +195 -0
- package/dist/generated/catalog.d.ts +2671 -0
- package/dist/generated/catalog.js +4090 -0
- package/dist/generated/recognition.d.ts +2 -0
- package/dist/generated/recognition.js +31 -0
- package/dist/generated/regionTowns.d.ts +2 -0
- package/dist/generated/regionTowns.js +11 -0
- package/dist/generated/registry.d.ts +4 -0
- package/dist/generated/registry.js +286 -0
- package/dist/index.d.ts +19 -0
- package/dist/index.js +18 -0
- package/dist/node.d.ts +11 -0
- package/dist/node.js +11 -0
- package/dist/places/countries.json +1670 -0
- package/dist/places/facilities.json +11 -0
- package/dist/places/index.d.ts +42 -0
- package/dist/places/index.js +307 -0
- package/dist/places/names.d.mts +15 -0
- package/dist/places/names.mjs +36 -0
- package/dist/places/places.tsv.br +0 -0
- package/dist/places/trackingLocation.d.ts +18 -0
- package/dist/places/trackingLocation.js +89 -0
- package/dist/providers/coverage.d.ts +31 -0
- package/dist/providers/coverage.js +70 -0
- package/dist/providers/coverage.json +1744 -0
- package/dist/providers/parcelsapp/adapter.d.ts +23 -0
- package/dist/providers/parcelsapp/adapter.js +391 -0
- package/dist/providers/parcelsapp/http.d.ts +9 -0
- package/dist/providers/parcelsapp/http.js +67 -0
- package/dist/providers/plan.d.ts +38 -0
- package/dist/providers/plan.js +54 -0
- package/dist/providers/postal-ninja/adapter.d.ts +17 -0
- package/dist/providers/postal-ninja/adapter.js +200 -0
- package/dist/providers/seventeentrack/adapter.d.ts +50 -0
- package/dist/providers/seventeentrack/adapter.js +165 -0
- package/dist/providers/seventeentrack/events.d.ts +4 -0
- package/dist/providers/seventeentrack/events.js +56 -0
- package/dist/providers/shared/capture.d.ts +46 -0
- package/dist/providers/shared/capture.js +92 -0
- package/dist/providers/shared/hints.d.ts +16 -0
- package/dist/providers/shared/hints.js +37 -0
- package/dist/providers/shared/result.d.ts +15 -0
- package/dist/providers/shared/result.js +161 -0
- package/dist/providers/shared/scans.d.ts +22 -0
- package/dist/providers/shared/scans.js +29 -0
- package/dist/providers/ship24/adapter.d.ts +17 -0
- package/dist/providers/ship24/adapter.js +140 -0
- package/dist/providers/ship24/http.d.ts +7 -0
- package/dist/providers/ship24/http.js +75 -0
- package/dist/providers/types.d.ts +1 -0
- package/dist/providers/types.js +1 -0
- package/dist/providers/universal.d.ts +66 -0
- package/dist/providers/universal.js +95 -0
- package/dist/providers/upu/adapter.d.ts +5 -0
- package/dist/providers/upu/adapter.js +107 -0
- package/dist/scripts/canary-report.d.mts +22 -0
- package/dist/scripts/canary-report.mjs +69 -0
- package/dist/scripts/carrier-canary.d.ts +50 -0
- package/dist/scripts/carrier-canary.js +220 -0
- package/dist/server/index.d.ts +20 -0
- package/dist/server/index.js +226 -0
- package/dist/server/openapi.json +487 -0
- package/dist/server/page.d.ts +1 -0
- package/dist/server/page.js +33 -0
- package/package.json +102 -4
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "yunexpress",
|
|
3
|
+
"displayName": "YunExpress",
|
|
4
|
+
"aliases": [],
|
|
5
|
+
"region": {
|
|
6
|
+
"countries": [
|
|
7
|
+
"CN"
|
|
8
|
+
]
|
|
9
|
+
},
|
|
10
|
+
"brand": {
|
|
11
|
+
"color": "#008284"
|
|
12
|
+
},
|
|
13
|
+
"selectable": true,
|
|
14
|
+
"timezone": "UTC",
|
|
15
|
+
"tracking": {
|
|
16
|
+
"mode": "automatic",
|
|
17
|
+
"adapter": "yunexpress",
|
|
18
|
+
"steps": [
|
|
19
|
+
"browser",
|
|
20
|
+
"trawl"
|
|
21
|
+
],
|
|
22
|
+
"localClocks": true
|
|
23
|
+
},
|
|
24
|
+
"capabilities": [
|
|
25
|
+
"history",
|
|
26
|
+
"location"
|
|
27
|
+
],
|
|
28
|
+
"portal": {
|
|
29
|
+
"url": "https://www.yuntrack.com/parcelTracking?id={trackingNumber}",
|
|
30
|
+
"canaryUrl": "https://www.yuntrack.com/",
|
|
31
|
+
"shows": [
|
|
32
|
+
"status",
|
|
33
|
+
"history",
|
|
34
|
+
"location"
|
|
35
|
+
],
|
|
36
|
+
"scraped": [
|
|
37
|
+
"status",
|
|
38
|
+
"history",
|
|
39
|
+
"location"
|
|
40
|
+
],
|
|
41
|
+
"discarded": [],
|
|
42
|
+
"unavailable": []
|
|
43
|
+
},
|
|
44
|
+
"links": [
|
|
45
|
+
{
|
|
46
|
+
"domains": [
|
|
47
|
+
"www.yuntrack.com",
|
|
48
|
+
"yuntrack.com"
|
|
49
|
+
],
|
|
50
|
+
"params": [
|
|
51
|
+
"id"
|
|
52
|
+
]
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
"domains": [
|
|
56
|
+
"www.yuntrack.com",
|
|
57
|
+
"yuntrack.com"
|
|
58
|
+
],
|
|
59
|
+
"path": "/Track/Detail/([A-Z0-9]+)"
|
|
60
|
+
}
|
|
61
|
+
],
|
|
62
|
+
"detection": [
|
|
63
|
+
{
|
|
64
|
+
"id": "yunexpress-1",
|
|
65
|
+
"pattern": "^YT\\d{16}$",
|
|
66
|
+
"confidence": "high"
|
|
67
|
+
}
|
|
68
|
+
]
|
|
69
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
{
|
|
2
|
+
"carrier": "yunexpress",
|
|
3
|
+
"records": [
|
|
4
|
+
{
|
|
5
|
+
"number": "YT2621200705470145",
|
|
6
|
+
"role": "shipment",
|
|
7
|
+
"evidence": "public_shipment_report",
|
|
8
|
+
"source": {
|
|
9
|
+
"url": "https://www.reddit.com/r/AirReps/comments/1vfhh53/please_help_yunexpress_alibaba_tracking_stuck_on/"
|
|
10
|
+
},
|
|
11
|
+
"expect": {
|
|
12
|
+
"carrier": "yunexpress",
|
|
13
|
+
"confidence": "high"
|
|
14
|
+
},
|
|
15
|
+
"note": "Publicly reported shipment number; the attribution was not independently verified."
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"number": "YT2623100700785323",
|
|
19
|
+
"role": "shipment",
|
|
20
|
+
"evidence": "public_shipment_report",
|
|
21
|
+
"source": {
|
|
22
|
+
"url": "https://www.trustpilot.com/reviews/6a9c1d3f497adcfb20e6f16e",
|
|
23
|
+
"date": "2026-09-05"
|
|
24
|
+
},
|
|
25
|
+
"expect": {
|
|
26
|
+
"carrier": "yunexpress",
|
|
27
|
+
"confidence": "high"
|
|
28
|
+
},
|
|
29
|
+
"note": "Publicly reported shipment number; the attribution was not independently verified."
|
|
30
|
+
}
|
|
31
|
+
]
|
|
32
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
const WORDING = new Map([
|
|
2
|
+
['Shipment information received', { status: 'pending', stage: 'registered' }],
|
|
3
|
+
['Shipment picked up', { status: 'in_transit', stage: 'accepted' }],
|
|
4
|
+
['Arrived at origin facility', { status: 'in_transit', stage: 'in_transit' }],
|
|
5
|
+
['Departed from sort facility', { status: 'in_transit', stage: 'in_transit' }],
|
|
6
|
+
['Shipment is in transit to next facility', { status: 'in_transit', stage: 'in_transit' }],
|
|
7
|
+
['The country of origin commences customs declaration.', { status: 'in_transit', stage: 'customs' }],
|
|
8
|
+
['Arrived at the origin international airport', { status: 'in_transit', stage: 'in_transit' }],
|
|
9
|
+
['Clearence processing completed - Export', { status: 'in_transit', stage: 'in_transit' }],
|
|
10
|
+
['International flight has departed', { status: 'in_transit', stage: 'in_transit' }],
|
|
11
|
+
['International flight has arrived', { status: 'in_transit', stage: 'in_transit' }],
|
|
12
|
+
['Start Customs Clearence', { status: 'in_transit', stage: 'customs' }],
|
|
13
|
+
['Collected at Cargo Terminal', { status: 'in_transit', stage: 'in_transit' }],
|
|
14
|
+
['Clearance processing completed - Import', { status: 'in_transit', stage: 'in_transit' }],
|
|
15
|
+
['Customs inspection - Import', { status: 'in_transit', stage: 'customs' }],
|
|
16
|
+
]);
|
|
17
|
+
export function yunExpressStatus(description, code) {
|
|
18
|
+
// The latest event's explicit delivered code also covers partner wording
|
|
19
|
+
// containing variable delivery notes. It is never inherited by older scans.
|
|
20
|
+
if (code === 50)
|
|
21
|
+
return { status: 'delivered', stage: 'delivered' };
|
|
22
|
+
return WORDING.get(description);
|
|
23
|
+
}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
{
|
|
2
|
+
"carrier": "yunexpress",
|
|
3
|
+
"entries": [
|
|
4
|
+
{
|
|
5
|
+
"wording": "Customs inspection - Import",
|
|
6
|
+
"stage": "customs",
|
|
7
|
+
"language": "en",
|
|
8
|
+
"confirmedBy": "live",
|
|
9
|
+
"firstSeen": "2026-09-28"
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
"wording": "Clearance processing completed - Import",
|
|
13
|
+
"stage": "in_transit",
|
|
14
|
+
"language": "en",
|
|
15
|
+
"confirmedBy": "live",
|
|
16
|
+
"firstSeen": "2026-09-28"
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"wording": "Collected at Cargo Terminal",
|
|
20
|
+
"stage": "in_transit",
|
|
21
|
+
"language": "en",
|
|
22
|
+
"confirmedBy": "live",
|
|
23
|
+
"firstSeen": "2026-09-28"
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
"wording": "Start Customs Clearence",
|
|
27
|
+
"stage": "customs",
|
|
28
|
+
"language": "en",
|
|
29
|
+
"confirmedBy": "live",
|
|
30
|
+
"firstSeen": "2026-09-28"
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"wording": "International flight has arrived",
|
|
34
|
+
"stage": "in_transit",
|
|
35
|
+
"language": "en",
|
|
36
|
+
"confirmedBy": "live",
|
|
37
|
+
"firstSeen": "2026-09-28"
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
"wording": "International flight has departed",
|
|
41
|
+
"stage": "in_transit",
|
|
42
|
+
"language": "en",
|
|
43
|
+
"confirmedBy": "live",
|
|
44
|
+
"firstSeen": "2026-09-28"
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
"wording": "Clearence processing completed - Export",
|
|
48
|
+
"stage": "in_transit",
|
|
49
|
+
"language": "en",
|
|
50
|
+
"confirmedBy": "live",
|
|
51
|
+
"firstSeen": "2026-09-28"
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
"wording": "Arrived at the origin international airport",
|
|
55
|
+
"stage": "in_transit",
|
|
56
|
+
"language": "en",
|
|
57
|
+
"confirmedBy": "live",
|
|
58
|
+
"firstSeen": "2026-09-28"
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
"wording": "The country of origin commences customs declaration.",
|
|
62
|
+
"stage": "customs",
|
|
63
|
+
"language": "en",
|
|
64
|
+
"confirmedBy": "live",
|
|
65
|
+
"firstSeen": "2026-09-28"
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
"wording": "Shipment is in transit to next facility",
|
|
69
|
+
"stage": "in_transit",
|
|
70
|
+
"language": "en",
|
|
71
|
+
"confirmedBy": "live",
|
|
72
|
+
"firstSeen": "2026-09-28"
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
"wording": "Departed from sort facility",
|
|
76
|
+
"stage": "in_transit",
|
|
77
|
+
"language": "en",
|
|
78
|
+
"confirmedBy": "live",
|
|
79
|
+
"firstSeen": "2026-09-28"
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
"wording": "Arrived at origin facility",
|
|
83
|
+
"stage": "in_transit",
|
|
84
|
+
"language": "en",
|
|
85
|
+
"confirmedBy": "live",
|
|
86
|
+
"firstSeen": "2026-09-28"
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
"wording": "Shipment picked up",
|
|
90
|
+
"stage": "accepted",
|
|
91
|
+
"language": "en",
|
|
92
|
+
"confirmedBy": "live",
|
|
93
|
+
"firstSeen": "2026-09-28"
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
"wording": "Shipment information received",
|
|
97
|
+
"stage": "registered",
|
|
98
|
+
"language": "en",
|
|
99
|
+
"confirmedBy": "live",
|
|
100
|
+
"firstSeen": "2026-09-28"
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
"code": "50",
|
|
104
|
+
"wording": "Delivered by Mailbox",
|
|
105
|
+
"stage": "delivered",
|
|
106
|
+
"language": "en",
|
|
107
|
+
"confirmedBy": "live",
|
|
108
|
+
"firstSeen": "2026-09-28",
|
|
109
|
+
"note": "The exact latest event declares delivered; variable partner delivery notes remain descriptive."
|
|
110
|
+
}
|
|
111
|
+
]
|
|
112
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "zto",
|
|
3
|
+
"displayName": "ZTO Express",
|
|
4
|
+
"aliases": [],
|
|
5
|
+
"region": {
|
|
6
|
+
"countries": [
|
|
7
|
+
"CN"
|
|
8
|
+
]
|
|
9
|
+
},
|
|
10
|
+
"brand": {
|
|
11
|
+
"color": "#0279ff"
|
|
12
|
+
},
|
|
13
|
+
"selectable": true,
|
|
14
|
+
"timezone": "Asia/Shanghai",
|
|
15
|
+
"tracking": {
|
|
16
|
+
"mode": "automatic",
|
|
17
|
+
"adapter": "universal",
|
|
18
|
+
"steps": []
|
|
19
|
+
},
|
|
20
|
+
"capabilities": [],
|
|
21
|
+
"portal": {
|
|
22
|
+
"url": "https://www.zto.com/",
|
|
23
|
+
"canaryUrl": "https://t.17track.net/",
|
|
24
|
+
"shows": [],
|
|
25
|
+
"scraped": [],
|
|
26
|
+
"discarded": [],
|
|
27
|
+
"unavailable": []
|
|
28
|
+
},
|
|
29
|
+
"links": [],
|
|
30
|
+
"detection": [
|
|
31
|
+
{
|
|
32
|
+
"id": "zto-1",
|
|
33
|
+
"pattern": "^\\d{12}$",
|
|
34
|
+
"confidence": "low"
|
|
35
|
+
}
|
|
36
|
+
]
|
|
37
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
{
|
|
2
|
+
"carrier": "zto",
|
|
3
|
+
"records": [
|
|
4
|
+
{
|
|
5
|
+
"number": "778564698005",
|
|
6
|
+
"role": "shipment",
|
|
7
|
+
"evidence": "open_source_example",
|
|
8
|
+
"source": {
|
|
9
|
+
"url": "https://gist.github.com/zxp/e83a4a1b7294a5ed6207",
|
|
10
|
+
"date": "2015-08-29"
|
|
11
|
+
},
|
|
12
|
+
"expect": {
|
|
13
|
+
"carrier": "unknown",
|
|
14
|
+
"confidence": "low",
|
|
15
|
+
"candidates": [
|
|
16
|
+
"fedex",
|
|
17
|
+
"mondial-relay",
|
|
18
|
+
"colis-prive",
|
|
19
|
+
"mrw",
|
|
20
|
+
"sf-express",
|
|
21
|
+
"sto",
|
|
22
|
+
"zto",
|
|
23
|
+
"yamato",
|
|
24
|
+
"j-and-t"
|
|
25
|
+
]
|
|
26
|
+
},
|
|
27
|
+
"note": "Open-source project example, not a real shipment. The source attributes it to ZTO Express, which stays one candidate among several."
|
|
28
|
+
}
|
|
29
|
+
]
|
|
30
|
+
}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { pathToFileURL } from 'node:url';
|
|
3
|
+
import { realpathSync } from 'node:fs';
|
|
4
|
+
import { createTracker, TrackingError } from '../facade/index.js';
|
|
5
|
+
import { CARRIER_CATALOG } from '../generated/catalog.js';
|
|
6
|
+
import { createTrackingServer } from '../server/index.js';
|
|
7
|
+
const help = `Universal Parcel Scraper
|
|
8
|
+
|
|
9
|
+
parcel-scraper detect <number, link or text>
|
|
10
|
+
parcel-scraper recognize <number>
|
|
11
|
+
parcel-scraper track <number> [--carrier <id>] [--postcode <value>] [--tracking-url <url>]
|
|
12
|
+
parcel-scraper carriers
|
|
13
|
+
parcel-scraper serve [--host <address>] [--port <port>]
|
|
14
|
+
|
|
15
|
+
SCRAPER_PROVIDERS selects comma-separated providers; default: UPU.
|
|
16
|
+
FLARESOLVERR_URL and TRACKING_CHROMIUM_PATH enable browser transports.
|
|
17
|
+
SCRAPER_TOKEN protects the HTTP API. SCRAPER_DEMO_PAGE=true enables its one-off page.`;
|
|
18
|
+
export async function main(argv = process.argv.slice(2), env = process.env) {
|
|
19
|
+
const [command, ...args] = argv;
|
|
20
|
+
if (!command || ['--help', '-h', 'help'].includes(command)) {
|
|
21
|
+
console.log(help);
|
|
22
|
+
return 0;
|
|
23
|
+
}
|
|
24
|
+
const values = {};
|
|
25
|
+
const positional = [];
|
|
26
|
+
const allowed = command === 'track' ? ['carrier', 'postcode', 'tracking-url'] : command === 'serve' ? ['host', 'port'] : [];
|
|
27
|
+
for (let i = 0; i < args.length; i++) {
|
|
28
|
+
const argument = args[i];
|
|
29
|
+
if (!argument.startsWith('--')) {
|
|
30
|
+
positional.push(argument);
|
|
31
|
+
continue;
|
|
32
|
+
}
|
|
33
|
+
const name = argument.slice(2);
|
|
34
|
+
if (!allowed.includes(name) || !args[i + 1] || args[i + 1].startsWith('--'))
|
|
35
|
+
throw new TypeError('Unknown or incomplete command option');
|
|
36
|
+
values[name] = args[++i];
|
|
37
|
+
}
|
|
38
|
+
const providers = env.SCRAPER_PROVIDERS === undefined ? undefined
|
|
39
|
+
: env.SCRAPER_PROVIDERS.split(',').map(value => value.trim()).filter(Boolean);
|
|
40
|
+
const options = { providers, trawlUrl: env.FLARESOLVERR_URL, chromiumPath: env.TRACKING_CHROMIUM_PATH, env };
|
|
41
|
+
const tracker = createTracker(options);
|
|
42
|
+
const print = (value) => console.log(JSON.stringify(value, null, 2));
|
|
43
|
+
if (command === 'carriers' && positional.length === 0) {
|
|
44
|
+
print(CARRIER_CATALOG);
|
|
45
|
+
return 0;
|
|
46
|
+
}
|
|
47
|
+
if (command === 'serve' && positional.length === 0) {
|
|
48
|
+
const port = Number(values.port ?? env.PORT ?? 8080);
|
|
49
|
+
if (!Number.isInteger(port) || port < 1 || port > 65535)
|
|
50
|
+
throw new TypeError('Invalid port');
|
|
51
|
+
const host = values.host ?? env.HOST ?? '127.0.0.1';
|
|
52
|
+
const server = createTrackingServer({ ...options, token: env.SCRAPER_TOKEN, demoPage: env.SCRAPER_DEMO_PAGE === 'true',
|
|
53
|
+
log: record => console.error(JSON.stringify(record)) });
|
|
54
|
+
await new Promise((resolve, reject) => { server.once('error', reject); server.listen(port, host, resolve); });
|
|
55
|
+
console.error(`Parcel tracking server listening on ${host}:${port}`);
|
|
56
|
+
for (const signal of ['SIGINT', 'SIGTERM'])
|
|
57
|
+
process.once(signal, () => server.close());
|
|
58
|
+
return 0;
|
|
59
|
+
}
|
|
60
|
+
const input = positional.join(' ');
|
|
61
|
+
if (!input)
|
|
62
|
+
throw new TypeError('Supply a tracking input');
|
|
63
|
+
if (command === 'detect')
|
|
64
|
+
print(tracker.detect(input));
|
|
65
|
+
else if (command === 'recognize')
|
|
66
|
+
print(await tracker.recognize(input));
|
|
67
|
+
else if (command === 'track')
|
|
68
|
+
print(await tracker.track({ number: input, carrier: values.carrier, postcode: values.postcode, trackingUrl: values['tracking-url'] }));
|
|
69
|
+
else
|
|
70
|
+
throw new TypeError('Unknown command; use --help');
|
|
71
|
+
return 0;
|
|
72
|
+
}
|
|
73
|
+
if (process.argv[1] && import.meta.url === pathToFileURL(realpathSync(process.argv[1])).href) {
|
|
74
|
+
try {
|
|
75
|
+
process.exitCode = await main();
|
|
76
|
+
}
|
|
77
|
+
catch (error) {
|
|
78
|
+
console.error(error instanceof TrackingError ? JSON.stringify({ error: error.message, attempts: error.attempts, hint: error.hint })
|
|
79
|
+
: error instanceof TypeError ? 'Invalid input or command; use --help' : 'Tracking could not be completed');
|
|
80
|
+
process.exitCode = 1;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import type { CarrierResult } from '../result/index.js';
|
|
2
|
+
import type { StepRecorder } from '../telemetry/index.js';
|
|
3
|
+
import type { TrawlClient } from '../transport/trawl.js';
|
|
4
|
+
export interface TrackingInput {
|
|
5
|
+
/** The tracking number as stored on the parcel, validated at the API boundary. */
|
|
6
|
+
number: string;
|
|
7
|
+
/** A capability URL for carriers that need one (shared Planzer links, Dachser). */
|
|
8
|
+
trackingUrl?: string | null;
|
|
9
|
+
/** The delivery postcode for carriers that need one; part of the tracking credential. */
|
|
10
|
+
postcode?: string | null;
|
|
11
|
+
/**
|
|
12
|
+
* The zone of the carrier the parcel is filed under, for universal providers
|
|
13
|
+
* whose scan times name no zone they can be trusted with. When that
|
|
14
|
+
* carrier's catalog zone is UTC, the zone of the carrier a direct lookup
|
|
15
|
+
* confirmed for the same number. Never a guess: absent when neither has one.
|
|
16
|
+
*/
|
|
17
|
+
timezone?: string | null;
|
|
18
|
+
}
|
|
19
|
+
export interface TrackingContext {
|
|
20
|
+
signal?: AbortSignal;
|
|
21
|
+
/** Overrides the adapter's default lookup budget. */
|
|
22
|
+
budgetMs?: number;
|
|
23
|
+
}
|
|
24
|
+
export interface AdapterEnvironment {
|
|
25
|
+
/** Test seam; production uses the global fetch. */
|
|
26
|
+
fetcher?: typeof fetch;
|
|
27
|
+
/** The private browser service, or null when not configured. */
|
|
28
|
+
trawl: TrawlClient | null;
|
|
29
|
+
/** A Chromium executable for adapters that must run a browser locally, or null. */
|
|
30
|
+
browserExecutablePath: string | null;
|
|
31
|
+
recorder: StepRecorder;
|
|
32
|
+
/** Provider-specific configuration (feature flags, optional endpoints). */
|
|
33
|
+
env: Readonly<Record<string, string | undefined>>;
|
|
34
|
+
}
|
|
35
|
+
/** Whether a carrier knows a tracking number, from a cheap check. */
|
|
36
|
+
export interface Recognition {
|
|
37
|
+
known: boolean;
|
|
38
|
+
/** The newest activity the check saw, when it reports one; old parcels can share a reused number. */
|
|
39
|
+
lastActivityAt?: string | null;
|
|
40
|
+
}
|
|
41
|
+
export interface CarrierAdapter {
|
|
42
|
+
readonly id: string;
|
|
43
|
+
/** The tiers this adapter can go through, in order; telemetry labels use these ids. */
|
|
44
|
+
readonly steps: readonly string[];
|
|
45
|
+
/** The adapter records its own steps, including single-step protocols. */
|
|
46
|
+
readonly recordsSteps?: boolean;
|
|
47
|
+
track(input: TrackingInput, context?: TrackingContext): Promise<CarrierResult>;
|
|
48
|
+
/**
|
|
49
|
+
* Required when carrier.json declares `tracking.recognition`: whether the
|
|
50
|
+
* carrier knows the number, without the user's inputs, through plain HTTP
|
|
51
|
+
* only (never a browser tier). A positive not-found is `known: false`; any
|
|
52
|
+
* other failure throws.
|
|
53
|
+
*/
|
|
54
|
+
recognize?(number: string, context?: TrackingContext): Promise<Recognition>;
|
|
55
|
+
}
|
|
56
|
+
export type AdapterFactory = (environment: AdapterEnvironment) => CarrierAdapter;
|
|
57
|
+
/**
|
|
58
|
+
* `recognize()` for an adapter whose ordinary lookup is already cheap: a
|
|
59
|
+
* result with scans, or a status past pending, is known; a positive not-found
|
|
60
|
+
* is unknown; any other failure is thrown. `accepts` is the adapter's own
|
|
61
|
+
* number check: a form it cannot look up is unknown without a request. Only
|
|
62
|
+
* for lookups without a browser tier.
|
|
63
|
+
*/
|
|
64
|
+
/** Whether a number check passes: false when it throws its TypeError. */
|
|
65
|
+
export declare function accepted(check: () => unknown): boolean;
|
|
66
|
+
export declare function recognizeFromLookup(lookup: () => Promise<CarrierResult>, accepts?: () => boolean): Promise<Recognition>;
|
|
67
|
+
/** Registered adapter factories plus the carrier → adapter mapping, as generated. */
|
|
68
|
+
export interface RegistryDefinition {
|
|
69
|
+
factories: Readonly<Record<string, AdapterFactory>>;
|
|
70
|
+
/** Carrier id → adapter id (a key of `factories`), 'universal', or null for link-only carriers. */
|
|
71
|
+
carriers: Readonly<Record<string, string | null>>;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* One adapter instance per adapter id for the process lifetime, created on
|
|
75
|
+
* first use so a broken provider module cannot prevent unrelated carriers
|
|
76
|
+
* from syncing.
|
|
77
|
+
*/
|
|
78
|
+
export declare class AdapterRegistry {
|
|
79
|
+
private readonly definition;
|
|
80
|
+
private readonly environment;
|
|
81
|
+
private readonly instances;
|
|
82
|
+
constructor(definition: RegistryDefinition, environment: AdapterEnvironment);
|
|
83
|
+
/** The adapter id that serves this carrier, 'universal', or null. */
|
|
84
|
+
adapterIdFor(carrierId: string): string | null;
|
|
85
|
+
/** Whether a dedicated adapter module serves this carrier. */
|
|
86
|
+
has(carrierId: string): boolean;
|
|
87
|
+
for(carrierId: string): CarrierAdapter | null;
|
|
88
|
+
/** Every dedicated adapter id, for canaries and documentation. */
|
|
89
|
+
adapterIds(): string[];
|
|
90
|
+
}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The contract between the host and a carrier adapter.
|
|
3
|
+
*
|
|
4
|
+
* A carrier folder exports an `AdapterFactory`; the generated registry lists
|
|
5
|
+
* every factory by carrier id, and the host creates one adapter instance per
|
|
6
|
+
* process through an `AdapterRegistry`. An adapter owns its sessions and
|
|
7
|
+
* declares its steps; it reaches the network only through what the
|
|
8
|
+
* `AdapterEnvironment` provides, and it reports through the `StepRecorder`.
|
|
9
|
+
*/
|
|
10
|
+
import { carrierErrorKind } from '../errors/index.js';
|
|
11
|
+
import { explicitOffsetTime } from '../time/index.js';
|
|
12
|
+
/**
|
|
13
|
+
* `recognize()` for an adapter whose ordinary lookup is already cheap: a
|
|
14
|
+
* result with scans, or a status past pending, is known; a positive not-found
|
|
15
|
+
* is unknown; any other failure is thrown. `accepts` is the adapter's own
|
|
16
|
+
* number check: a form it cannot look up is unknown without a request. Only
|
|
17
|
+
* for lookups without a browser tier.
|
|
18
|
+
*/
|
|
19
|
+
/** Whether a number check passes: false when it throws its TypeError. */
|
|
20
|
+
export function accepted(check) {
|
|
21
|
+
try {
|
|
22
|
+
check();
|
|
23
|
+
return true;
|
|
24
|
+
}
|
|
25
|
+
catch (error) {
|
|
26
|
+
if (error instanceof TypeError)
|
|
27
|
+
return false;
|
|
28
|
+
throw error;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
export async function recognizeFromLookup(lookup, accepts = () => true) {
|
|
32
|
+
if (!accepts())
|
|
33
|
+
return { known: false };
|
|
34
|
+
let result;
|
|
35
|
+
try {
|
|
36
|
+
result = await lookup();
|
|
37
|
+
}
|
|
38
|
+
catch (error) {
|
|
39
|
+
if (carrierErrorKind(error) === 'not_found')
|
|
40
|
+
return { known: false };
|
|
41
|
+
throw error;
|
|
42
|
+
}
|
|
43
|
+
// Local clocks and malformed dates cannot rank reuse of a tracking number.
|
|
44
|
+
const iso = (value) => {
|
|
45
|
+
if (typeof value !== 'string')
|
|
46
|
+
return Number.NaN;
|
|
47
|
+
const raw = value.trim();
|
|
48
|
+
// Luxon normalizes impossible offsets such as +02:99 or +99:00.
|
|
49
|
+
// Those are unresolved clocks, not instants that can rank a match.
|
|
50
|
+
return /^\d{4}-\d{2}-\d{2}T/.test(raw) && /(?:Z|[+-](?:[01]\d|2[0-3]):?[0-5]\d)$/i.test(raw)
|
|
51
|
+
? explicitOffsetTime(raw)?.timestamp ?? Number.NaN : Number.NaN;
|
|
52
|
+
};
|
|
53
|
+
const times = (result.events ?? []).map((event) => iso(event.time)).filter(Number.isFinite);
|
|
54
|
+
// A pending status without a scan is no evidence: some carriers answer any number that way.
|
|
55
|
+
const known = (result.events?.length ?? 0) > 0 || !['unknown', 'pending', undefined].includes(result.status);
|
|
56
|
+
const updated = iso(result.last_update);
|
|
57
|
+
return {
|
|
58
|
+
known,
|
|
59
|
+
lastActivityAt: !known ? null : times.length ? new Date(Math.max(...times)).toISOString()
|
|
60
|
+
: Number.isFinite(updated) ? new Date(updated).toISOString() : null,
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* One adapter instance per adapter id for the process lifetime, created on
|
|
65
|
+
* first use so a broken provider module cannot prevent unrelated carriers
|
|
66
|
+
* from syncing.
|
|
67
|
+
*/
|
|
68
|
+
export class AdapterRegistry {
|
|
69
|
+
definition;
|
|
70
|
+
environment;
|
|
71
|
+
instances = new Map();
|
|
72
|
+
constructor(definition, environment) {
|
|
73
|
+
this.definition = definition;
|
|
74
|
+
this.environment = environment;
|
|
75
|
+
}
|
|
76
|
+
/** The adapter id that serves this carrier, 'universal', or null. */
|
|
77
|
+
adapterIdFor(carrierId) {
|
|
78
|
+
return this.definition.carriers[carrierId] ?? null;
|
|
79
|
+
}
|
|
80
|
+
/** Whether a dedicated adapter module serves this carrier. */
|
|
81
|
+
has(carrierId) {
|
|
82
|
+
const adapterId = this.adapterIdFor(carrierId);
|
|
83
|
+
return adapterId !== null && adapterId !== 'universal' && Object.hasOwn(this.definition.factories, adapterId);
|
|
84
|
+
}
|
|
85
|
+
for(carrierId) {
|
|
86
|
+
const adapterId = this.adapterIdFor(carrierId);
|
|
87
|
+
if (adapterId === null || adapterId === 'universal')
|
|
88
|
+
return null;
|
|
89
|
+
const factory = this.definition.factories[adapterId];
|
|
90
|
+
if (!factory)
|
|
91
|
+
return null;
|
|
92
|
+
let instance = this.instances.get(adapterId);
|
|
93
|
+
if (!instance) {
|
|
94
|
+
instance = factory(this.environment);
|
|
95
|
+
this.instances.set(adapterId, instance);
|
|
96
|
+
}
|
|
97
|
+
return instance;
|
|
98
|
+
}
|
|
99
|
+
/** Every dedicated adapter id, for canaries and documentation. */
|
|
100
|
+
adapterIds() {
|
|
101
|
+
return Object.keys(this.definition.factories);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { type CarrierResult } from '../result/index.js';
|
|
2
|
+
import { type StepRecorder } from '../telemetry/index.js';
|
|
3
|
+
import type { UniversalTracker } from '../../providers/universal.js';
|
|
4
|
+
import type { AdapterRegistry, TrackingContext, TrackingInput } from './index.js';
|
|
5
|
+
/** One carrier lookup, leaving provider selection and scheduling to the consumer. */
|
|
6
|
+
export declare function trackCarrier(carrier: string, input: TrackingInput, options: TrackingContext & {
|
|
7
|
+
registry: AdapterRegistry;
|
|
8
|
+
universal: UniversalTracker;
|
|
9
|
+
recorder?: StepRecorder;
|
|
10
|
+
}): Promise<CarrierResult>;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { normalizeCarrierResult } from '../result/index.js';
|
|
2
|
+
import { runSteps } from '../runner/index.js';
|
|
3
|
+
import { NOOP_RECORDER } from '../telemetry/index.js';
|
|
4
|
+
/** One carrier lookup, leaving provider selection and scheduling to the consumer. */
|
|
5
|
+
export async function trackCarrier(carrier, input, options) {
|
|
6
|
+
const registered = options.registry.for(carrier);
|
|
7
|
+
if (registered) {
|
|
8
|
+
const context = { signal: options.signal, budgetMs: options.budgetMs === undefined ? undefined : Math.min(60_000, options.budgetMs) };
|
|
9
|
+
const result = registered.recordsSteps || registered.steps.length > 1
|
|
10
|
+
? await registered.track(input, ...(options.signal || options.budgetMs !== undefined ? [context] : []))
|
|
11
|
+
: await runSteps({ carrier, budgetMs: options.budgetMs ?? 120_000, signal: options.signal,
|
|
12
|
+
recorder: options.recorder ?? NOOP_RECORDER }, [{ id: registered.steps[0] ?? 'direct',
|
|
13
|
+
run: ({ signal, remainingMs }) => registered.track(input, ...(options.signal || options.budgetMs !== undefined ? [{ signal, budgetMs: context.budgetMs === undefined ? undefined : Math.min(context.budgetMs, remainingMs) }] : [])) }]);
|
|
14
|
+
return normalizeCarrierResult(result);
|
|
15
|
+
}
|
|
16
|
+
if (options.registry.adapterIdFor(carrier) === 'universal') {
|
|
17
|
+
return normalizeCarrierResult(await options.universal.fetch(input.number, input.postcode));
|
|
18
|
+
}
|
|
19
|
+
throw new RangeError(`No tracking adapter is registered for ${carrier}`);
|
|
20
|
+
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export declare function requiresAmazonAccount(carrier: string, trackingNumber?: string): boolean;
|
|
2
|
+
export declare function amazonMarketplace(raw: string): string;
|
|
3
|
+
export declare function amazonOrdersUrl(raw: string): string;
|
|
4
|
+
export declare function amazonShippingOrigin(raw: string): string;
|
|
5
|
+
export declare function amazonShippingUrl(raw: string): string;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Amazon portal links.
|
|
3
|
+
*
|
|
4
|
+
* What it is: the marketplace mapping behind Amazon's order-history and public
|
|
5
|
+
* Amazon Shipping URLs, and the rule that decides when a parcel can only be
|
|
6
|
+
* followed inside the customer's Amazon account.
|
|
7
|
+
* What it is not: no account state, no eligibility probe, no provider I/O; the
|
|
8
|
+
* server checks public availability separately.
|
|
9
|
+
*/
|
|
10
|
+
import { isAmazonTrackingNumber } from '../detection/amazon.js';
|
|
11
|
+
export function requiresAmazonAccount(carrier, trackingNumber = '') {
|
|
12
|
+
return carrier !== 'amazon-shipping' && (carrier === 'amazon-logistics' || isAmazonTrackingNumber(trackingNumber));
|
|
13
|
+
}
|
|
14
|
+
export function amazonMarketplace(raw) {
|
|
15
|
+
const prefix = raw.replace(/[\s.-]/g, '').toUpperCase().slice(0, 2);
|
|
16
|
+
const marketplaces = {
|
|
17
|
+
FR: 'fr', DE: 'de', AT: 'de', BE: 'com.be', UK: 'co.uk', GB: 'co.uk',
|
|
18
|
+
IT: 'it', ES: 'es', PT: 'es', NL: 'nl', IE: 'ie', PL: 'pl', SE: 'se', TR: 'com.tr',
|
|
19
|
+
};
|
|
20
|
+
return marketplaces[prefix] ?? 'com';
|
|
21
|
+
}
|
|
22
|
+
export function amazonOrdersUrl(raw) {
|
|
23
|
+
return `https://www.amazon.${amazonMarketplace(raw)}/gp/your-account/order-history`;
|
|
24
|
+
}
|
|
25
|
+
// These public portals share Amazon's European tracker; DE/BE have no portal of their own.
|
|
26
|
+
export function amazonShippingOrigin(raw) {
|
|
27
|
+
const prefix = raw.replace(/[\s.-]/g, '').toUpperCase().slice(0, 2);
|
|
28
|
+
const domains = { IT: 'it', ES: 'es', UK: 'co.uk', GB: 'co.uk', TB: 'com' };
|
|
29
|
+
return `https://track.amazon.${domains[prefix] ?? 'fr'}`;
|
|
30
|
+
}
|
|
31
|
+
export function amazonShippingUrl(raw) {
|
|
32
|
+
return `${amazonShippingOrigin(raw)}/tracking/${encodeURIComponent(raw.replace(/[\s.-]/g, '').toUpperCase())}`;
|
|
33
|
+
}
|