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,307 @@
|
|
|
1
|
+
import { load } from 'cheerio';
|
|
2
|
+
import { ChallengeError, InputRequiredError, RateLimitedError, SchemaError, TransportError, UpstreamHttpError, } from '../../core/errors/index.js';
|
|
3
|
+
import { runSteps } from '../../core/runner/index.js';
|
|
4
|
+
import { NOOP_RECORDER } from '../../core/telemetry/index.js';
|
|
5
|
+
import { explicitOffsetTime } from '../../core/time/index.js';
|
|
6
|
+
import { clean, cleanScalar, TrawlClient } from '../../core/transport/index.js';
|
|
7
|
+
import { isRecord } from '../../core/types.js';
|
|
8
|
+
import { FEDEX_CODE_STAGE, fedexStage, fedexStatus } from './status.js';
|
|
9
|
+
/**
|
|
10
|
+
* FedEx, through the tracking reply the public page reads itself.
|
|
11
|
+
*
|
|
12
|
+
* The page at `fedextrack/?trknbr=` is a shell: every byte of tracking data
|
|
13
|
+
* arrives as `POST https://api.fedex.com/track/v2/shipments`, a
|
|
14
|
+
* browser-gated call. Plain HTTP and the deployed browser service received
|
|
15
|
+
* HTTP 403 on 2026-09-22, while an interactive browser returned full history.
|
|
16
|
+
* The browser service retains verified FedEx contexts for later lookups.
|
|
17
|
+
* API rejection must stay a challenge so routing applies cooldown/fallback.
|
|
18
|
+
* The browser's session is never replayed over plain HTTP.
|
|
19
|
+
*
|
|
20
|
+
* Response shape provenance: the page bundle's package model (`trackingNbr`,
|
|
21
|
+
* `keyStatus`/`keyStatusCD`, `scanEventList` items with
|
|
22
|
+
* `date`/`time`/`gmtOffset`/`scanLocation`/`status`/`statusCD`/`scanDetails`),
|
|
23
|
+
* inspected 2026-09-20.
|
|
24
|
+
*/
|
|
25
|
+
const TRACKING_BASE = 'https://www.fedex.com/fedextrack/';
|
|
26
|
+
const TRACK_API = 'https://api.fedex.com/track/v2/shipments';
|
|
27
|
+
const MAX_BYTES = 10_000_000;
|
|
28
|
+
const DEFAULT_TIMEOUT_MS = 90_000;
|
|
29
|
+
// How long the browser may wait for the page's own tracking call after the page settles.
|
|
30
|
+
const SETTLE_TIMEOUT_MS = 15_000;
|
|
31
|
+
// Captured replies beyond this many are noise, never the answer.
|
|
32
|
+
const MAX_CAPTURED = 20;
|
|
33
|
+
const MAX_EVENTS_TO_INSPECT = 500;
|
|
34
|
+
const MAX_EVENTS_TO_RETURN = 100;
|
|
35
|
+
export function normalizeFedExTrackingNumber(raw) {
|
|
36
|
+
const value = raw.toLocaleUpperCase('en-US').replace(/[\s.-]/g, '');
|
|
37
|
+
if (!/^\d{12}$/.test(value) && !/^\d{15}$/.test(value)) {
|
|
38
|
+
throw new SchemaError('FedEx', 'FedEx tracking numbers must contain 12 or 15 digits');
|
|
39
|
+
}
|
|
40
|
+
return value;
|
|
41
|
+
}
|
|
42
|
+
export function fedexTrackingUrl(trackingNumber) {
|
|
43
|
+
const url = new URL(TRACKING_BASE);
|
|
44
|
+
url.searchParams.set('trknbr', normalizeFedExTrackingNumber(trackingNumber));
|
|
45
|
+
return url.toString();
|
|
46
|
+
}
|
|
47
|
+
/** A scan timestamp. FedEx sends a local wall-clock pair plus its explicit
|
|
48
|
+
* offset, assembled into an offset-carrying ISO string rather than parsed, so
|
|
49
|
+
* no zone is ever guessed; a scan with an unusable pair keeps no time. */
|
|
50
|
+
function scanTime(scan) {
|
|
51
|
+
const date = cleanScalar(scan.date);
|
|
52
|
+
const time = cleanScalar(scan.time);
|
|
53
|
+
const offset = cleanScalar(scan.gmtOffset);
|
|
54
|
+
if (/^\d{4}-\d{2}-\d{2}$/.test(date)
|
|
55
|
+
&& /^\d{2}:\d{2}(?::\d{2})?$/.test(time)
|
|
56
|
+
&& /^[+-]\d{2}:?\d{2}$/.test(offset)) {
|
|
57
|
+
const clock = time.length === 5 ? `${time}:00` : time;
|
|
58
|
+
const parsed = explicitOffsetTime(`${date}T${clock}${offset}`);
|
|
59
|
+
if (parsed)
|
|
60
|
+
return parsed.iso;
|
|
61
|
+
}
|
|
62
|
+
return '';
|
|
63
|
+
}
|
|
64
|
+
function scanDescription(scan) {
|
|
65
|
+
const status = clean(scan.status);
|
|
66
|
+
const details = clean(scan.scanDetails);
|
|
67
|
+
if (details && !status.toLocaleLowerCase('en-US').includes(details.toLocaleLowerCase('en-US'))) {
|
|
68
|
+
return clean(`${status} — ${details}`);
|
|
69
|
+
}
|
|
70
|
+
return status;
|
|
71
|
+
}
|
|
72
|
+
/** Delivery-date estimate as a calendar day; anything else is not an estimate. */
|
|
73
|
+
function expectedDelivery(value) {
|
|
74
|
+
const match = /^(\d{4}-\d{2}-\d{2})/.exec(cleanScalar(value, 64));
|
|
75
|
+
return match ? match[1] : null;
|
|
76
|
+
}
|
|
77
|
+
/** A delivered-at instant; offset-less or unparsable values are dropped. */
|
|
78
|
+
function deliveredAt(value) {
|
|
79
|
+
return explicitOffsetTime(value)?.iso ?? null;
|
|
80
|
+
}
|
|
81
|
+
function errorCode(error) {
|
|
82
|
+
return isRecord(error) ? cleanScalar(error.code).toLocaleUpperCase('en-US') : '';
|
|
83
|
+
}
|
|
84
|
+
/** An empty answer proves nothing either way, so it stays a retryable unknown. */
|
|
85
|
+
function notLocated() {
|
|
86
|
+
return {
|
|
87
|
+
status: 'unknown',
|
|
88
|
+
last_status_text: 'FedEx could not locate the shipment',
|
|
89
|
+
last_update: null,
|
|
90
|
+
expected_delivery: null,
|
|
91
|
+
events: [],
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
/** The structured answer of the tracking page's own API call. */
|
|
95
|
+
export function parseFedExTrackingResponse(payload, trackingNumber) {
|
|
96
|
+
const number = normalizeFedExTrackingNumber(trackingNumber);
|
|
97
|
+
if (!isRecord(payload) || !isRecord(payload.output)) {
|
|
98
|
+
throw new SchemaError('FedEx', 'FedEx returned an invalid tracking response');
|
|
99
|
+
}
|
|
100
|
+
const output = payload.output;
|
|
101
|
+
const packages = Array.isArray(output.packages) ? output.packages.filter(isRecord) : null;
|
|
102
|
+
if (!packages)
|
|
103
|
+
throw new SchemaError('FedEx', 'FedEx returned an invalid tracking response');
|
|
104
|
+
if (packages.length === 0) {
|
|
105
|
+
const codes = Array.isArray(output.errorList) ? output.errorList.map(errorCode).join(' ') : '';
|
|
106
|
+
if (/AUTHENTICAT|AUTHORIZATION/.test(codes)) {
|
|
107
|
+
throw new InputRequiredError('FedEx', 'recipient verification', 'FedEx requires recipient verification for this shipment');
|
|
108
|
+
}
|
|
109
|
+
return notLocated();
|
|
110
|
+
}
|
|
111
|
+
const matches = packages.filter((item) => cleanScalar(item.trackingNbr).replace(/[\s.-]/g, '').toLocaleUpperCase('en-US') === number);
|
|
112
|
+
if (matches.length !== 1) {
|
|
113
|
+
throw new SchemaError('FedEx', matches.length === 0
|
|
114
|
+
? 'FedEx did not return the requested parcel'
|
|
115
|
+
: 'FedEx returned several shipments for this number');
|
|
116
|
+
}
|
|
117
|
+
const shipment = matches[0];
|
|
118
|
+
const scans = Array.isArray(shipment.scanEventList) ? shipment.scanEventList.filter(isRecord) : [];
|
|
119
|
+
const errors = Array.isArray(shipment.errorList) ? shipment.errorList.filter(isRecord) : [];
|
|
120
|
+
const keyStatus = clean(shipment.keyStatus);
|
|
121
|
+
const keyStatusCD = cleanScalar(shipment.keyStatusCD);
|
|
122
|
+
const statusDetails = clean(shipment.statusWithDetails);
|
|
123
|
+
if (scans.length === 0 && !keyStatus && !keyStatusCD) {
|
|
124
|
+
const codes = errors.map(errorCode).join(' ');
|
|
125
|
+
if (/TRACKINGNUMBER|NOTFOUND|NOT FOUND|NO TRACKING/.test(codes))
|
|
126
|
+
return notLocated();
|
|
127
|
+
if (/AUTHENTICAT|AUTHORIZATION/.test(codes)) {
|
|
128
|
+
throw new InputRequiredError('FedEx', 'recipient verification', 'FedEx requires recipient verification for this shipment');
|
|
129
|
+
}
|
|
130
|
+
throw new SchemaError('FedEx', 'FedEx returned no usable tracking status');
|
|
131
|
+
}
|
|
132
|
+
const events = [];
|
|
133
|
+
const seen = new Set();
|
|
134
|
+
for (const raw of scans.slice(0, MAX_EVENTS_TO_INSPECT)) {
|
|
135
|
+
const description = scanDescription(raw);
|
|
136
|
+
if (!description)
|
|
137
|
+
continue;
|
|
138
|
+
const statusCD = cleanScalar(raw.statusCD).toLocaleUpperCase('en-US');
|
|
139
|
+
const stage = FEDEX_CODE_STAGE[statusCD]
|
|
140
|
+
?? fedexStage(`${clean(raw.status)} ${clean(raw.scanDetails)}`)
|
|
141
|
+
?? undefined;
|
|
142
|
+
const time = scanTime(raw);
|
|
143
|
+
const location = clean(raw.scanLocation);
|
|
144
|
+
// A delivered scan names its signatory; the event keeps the fact, not the name.
|
|
145
|
+
const event = {
|
|
146
|
+
...(time ? { time } : {}),
|
|
147
|
+
...(location ? { location } : {}),
|
|
148
|
+
description: stage === 'delivered' ? 'Delivered' : description,
|
|
149
|
+
...(stage ? { stage } : {}),
|
|
150
|
+
};
|
|
151
|
+
const identity = JSON.stringify([event.time ?? '', event.location ?? '', event.description]);
|
|
152
|
+
if (seen.has(identity))
|
|
153
|
+
continue;
|
|
154
|
+
seen.add(identity);
|
|
155
|
+
events.push(event);
|
|
156
|
+
}
|
|
157
|
+
events.sort((left, right) => String(right.time ?? '').localeCompare(String(left.time ?? '')));
|
|
158
|
+
const trimmed = events.slice(0, MAX_EVENTS_TO_RETURN);
|
|
159
|
+
const statusText = keyStatus || trimmed[0]?.description || 'Tracking information received';
|
|
160
|
+
const stage = FEDEX_CODE_STAGE[keyStatusCD.toUpperCase()]
|
|
161
|
+
?? fedexStage(`${keyStatus} ${statusDetails}`) ?? undefined;
|
|
162
|
+
const status = fedexStatus(keyStatusCD, `${keyStatus} ${statusDetails}`, trimmed.length > 0);
|
|
163
|
+
const delivered = stage === 'delivered';
|
|
164
|
+
const estimate = delivered ? null : expectedDelivery(shipment.estDeliveryDt);
|
|
165
|
+
return {
|
|
166
|
+
status,
|
|
167
|
+
...(stage ? { current_stage: stage } : {}),
|
|
168
|
+
last_status_text: delivered ? 'Delivered' : statusText,
|
|
169
|
+
last_update: trimmed[0]?.time || null,
|
|
170
|
+
expected_delivery: estimate,
|
|
171
|
+
...(delivered && deliveredAt(shipment.actDeliveryDt)
|
|
172
|
+
? { delivered_at: deliveredAt(shipment.actDeliveryDt) } : {}),
|
|
173
|
+
events: trimmed,
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* The page the browser rendered, read only to tell a bot challenge from an
|
|
178
|
+
* inconclusive load. The page renders its "can't find that tracking number"
|
|
179
|
+
* notice both for unknown numbers and for tracking calls the edge refused,
|
|
180
|
+
* so rendered text never decides not-found: only the structured reply does.
|
|
181
|
+
*/
|
|
182
|
+
export function parseFedExTrackingHtml(page) {
|
|
183
|
+
const $ = load(page);
|
|
184
|
+
$('script, style, noscript').remove();
|
|
185
|
+
const visible = clean($('body').text(), 20_000);
|
|
186
|
+
if (/access denied|system down|just a moment|attention required|are you a robot|verify you are human|before you proceed/i.test(visible)) {
|
|
187
|
+
return 'challenged';
|
|
188
|
+
}
|
|
189
|
+
return 'inconclusive';
|
|
190
|
+
}
|
|
191
|
+
export class FedExTracker {
|
|
192
|
+
timeoutMs;
|
|
193
|
+
trawlUrl;
|
|
194
|
+
#trawl;
|
|
195
|
+
#fetcher;
|
|
196
|
+
#recorder;
|
|
197
|
+
constructor(options = {}) {
|
|
198
|
+
if (options.timeoutMs !== undefined && (!Number.isFinite(options.timeoutMs) || options.timeoutMs <= 0)) {
|
|
199
|
+
throw new TypeError('FedEx timeout must be positive');
|
|
200
|
+
}
|
|
201
|
+
this.timeoutMs = options.timeoutMs ?? DEFAULT_TIMEOUT_MS;
|
|
202
|
+
this.trawlUrl = (options.trawlUrl ?? '').trim();
|
|
203
|
+
this.#trawl = options.trawl;
|
|
204
|
+
this.#fetcher = options.fetcher;
|
|
205
|
+
this.#recorder = options.recorder ?? NOOP_RECORDER;
|
|
206
|
+
}
|
|
207
|
+
/** The injected browser service, or one built from the configured URL. */
|
|
208
|
+
#browserService() {
|
|
209
|
+
if (this.#trawl !== undefined)
|
|
210
|
+
return this.#trawl;
|
|
211
|
+
return this.trawlUrl ? new TrawlClient(this.trawlUrl, this.#fetcher) : null;
|
|
212
|
+
}
|
|
213
|
+
async fetch(trackingNumber) {
|
|
214
|
+
const number = normalizeFedExTrackingNumber(trackingNumber);
|
|
215
|
+
// Plain HTTP probes were rejected; the dedicated route uses the browser.
|
|
216
|
+
const trawl = this.#browserService();
|
|
217
|
+
if (!trawl) {
|
|
218
|
+
throw new ChallengeError('FedEx', 'FedEx challenged direct tracking; configure FLARESOLVERR_URL for browser fallback');
|
|
219
|
+
}
|
|
220
|
+
return runSteps({
|
|
221
|
+
carrier: 'fedex', budgetMs: this.timeoutMs, recorder: this.#recorder,
|
|
222
|
+
}, [
|
|
223
|
+
{ id: 'trawl', run: () => this.#trawlResult(trawl, number) },
|
|
224
|
+
]);
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* A real browser loads the page and makes the tracking call itself; the
|
|
228
|
+
* service hands that reply back. The browser's session is never replayed
|
|
229
|
+
* over plain HTTP: the edge accepts the call only from the session it
|
|
230
|
+
* validated. The page the browser rendered only tells a challenge apart.
|
|
231
|
+
*/
|
|
232
|
+
async #trawlResult(trawl, number) {
|
|
233
|
+
const page = await trawl.scrape({
|
|
234
|
+
url: fedexTrackingUrl(number),
|
|
235
|
+
skipHttp: true,
|
|
236
|
+
maxTier: 3,
|
|
237
|
+
maxTimeout: this.timeoutMs,
|
|
238
|
+
captureResponses: [TRACK_API],
|
|
239
|
+
settleTimeout: SETTLE_TIMEOUT_MS,
|
|
240
|
+
}, {
|
|
241
|
+
provider: 'TRAWL while fetching FedEx',
|
|
242
|
+
timeoutMs: this.timeoutMs,
|
|
243
|
+
maxBytes: MAX_BYTES,
|
|
244
|
+
fetcher: this.#fetcher,
|
|
245
|
+
});
|
|
246
|
+
let captureError;
|
|
247
|
+
// Newest first: a later reply is the page's final answer.
|
|
248
|
+
for (const entry of page.capturedResponses.slice(-MAX_CAPTURED).reverse()) {
|
|
249
|
+
if (entry.url !== TRACK_API)
|
|
250
|
+
continue;
|
|
251
|
+
// The page shell can load normally while its tracking API is rejected.
|
|
252
|
+
// Preserve that failure instead of reporting a missing capture or falling
|
|
253
|
+
// back to an older successful reply from the same page.
|
|
254
|
+
if (entry.status === 401 || entry.status === 403) {
|
|
255
|
+
throw new ChallengeError('FedEx', 'FedEx rejected the browser tracking request', { status: entry.status });
|
|
256
|
+
}
|
|
257
|
+
if (entry.status === 429) {
|
|
258
|
+
const header = entry.headers['retry-after'] ?? entry.headers['Retry-After'];
|
|
259
|
+
const delay = header && /^\d+(?:\.\d+)?$/.test(header) ? Number(header) * 1000
|
|
260
|
+
: header ? Date.parse(header) - Date.now() : NaN;
|
|
261
|
+
throw new RateLimitedError('FedEx', Number.isFinite(delay) ? Math.max(0, delay) : undefined);
|
|
262
|
+
}
|
|
263
|
+
if (entry.status >= 500)
|
|
264
|
+
throw new UpstreamHttpError('FedEx', entry.status);
|
|
265
|
+
if (entry.status >= 400) {
|
|
266
|
+
throw new TransportError('FedEx', `FedEx tracking API returned HTTP ${entry.status}`, { status: entry.status });
|
|
267
|
+
}
|
|
268
|
+
if (entry.status !== 200 || entry.truncated || entry.body === null)
|
|
269
|
+
continue;
|
|
270
|
+
try {
|
|
271
|
+
return this.#structuredResult(number, JSON.parse(entry.body));
|
|
272
|
+
}
|
|
273
|
+
catch (error) {
|
|
274
|
+
if (error instanceof InputRequiredError)
|
|
275
|
+
throw error;
|
|
276
|
+
// An unreadable or unrelated reply; the rendered page may still name a challenge.
|
|
277
|
+
captureError ??= error instanceof SyntaxError
|
|
278
|
+
? new SchemaError('FedEx', 'FedEx returned unreadable tracking JSON', { cause: error }) : error;
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
if (parseFedExTrackingHtml(page.html) === 'challenged') {
|
|
282
|
+
throw new ChallengeError('FedEx', 'FedEx challenged the browser tracking session', { cause: captureError });
|
|
283
|
+
}
|
|
284
|
+
if (captureError)
|
|
285
|
+
throw captureError;
|
|
286
|
+
throw new TransportError('FedEx', 'TRAWL did not capture the FedEx tracking response', { cause: captureError });
|
|
287
|
+
}
|
|
288
|
+
#structuredResult(number, payload) {
|
|
289
|
+
const result = parseFedExTrackingResponse(payload, number);
|
|
290
|
+
result.tracking_url = fedexTrackingUrl(number);
|
|
291
|
+
result.tracking_source = 'structured-web-response';
|
|
292
|
+
return result;
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
export const adapter = (environment) => {
|
|
296
|
+
const tracker = new FedExTracker({
|
|
297
|
+
fetcher: environment.fetcher,
|
|
298
|
+
trawl: environment.trawl,
|
|
299
|
+
recorder: environment.recorder,
|
|
300
|
+
});
|
|
301
|
+
return {
|
|
302
|
+
id: 'fedex',
|
|
303
|
+
// Browser-backed direct tracking; universal recovery belongs to the caller.
|
|
304
|
+
steps: ['trawl'],
|
|
305
|
+
track: (input) => tracker.fetch(input.number),
|
|
306
|
+
};
|
|
307
|
+
};
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "fedex",
|
|
3
|
+
"displayName": "FedEx",
|
|
4
|
+
"aliases": [],
|
|
5
|
+
"region": {
|
|
6
|
+
"countries": []
|
|
7
|
+
},
|
|
8
|
+
"brand": {
|
|
9
|
+
"color": "#4d148c"
|
|
10
|
+
},
|
|
11
|
+
"selectable": true,
|
|
12
|
+
"timezone": "UTC",
|
|
13
|
+
"tracking": {
|
|
14
|
+
"mode": "automatic",
|
|
15
|
+
"adapter": "fedex",
|
|
16
|
+
"steps": [
|
|
17
|
+
"trawl"
|
|
18
|
+
]
|
|
19
|
+
},
|
|
20
|
+
"capabilities": [
|
|
21
|
+
"history",
|
|
22
|
+
"location",
|
|
23
|
+
"eta",
|
|
24
|
+
"delivered_at"
|
|
25
|
+
],
|
|
26
|
+
"portal": {
|
|
27
|
+
"url": "https://www.fedex.com/fedextrack/?trknbr={trackingNumber}",
|
|
28
|
+
"canaryUrl": "https://www.fedex.com/fedextrack/",
|
|
29
|
+
"shows": [
|
|
30
|
+
"status",
|
|
31
|
+
"history",
|
|
32
|
+
"eta",
|
|
33
|
+
"location"
|
|
34
|
+
],
|
|
35
|
+
"scraped": [
|
|
36
|
+
"status",
|
|
37
|
+
"history",
|
|
38
|
+
"eta",
|
|
39
|
+
"location"
|
|
40
|
+
],
|
|
41
|
+
"discarded": [
|
|
42
|
+
"recipient name and address",
|
|
43
|
+
"shipper details",
|
|
44
|
+
"signature",
|
|
45
|
+
"weight",
|
|
46
|
+
"dimensions",
|
|
47
|
+
"service options"
|
|
48
|
+
],
|
|
49
|
+
"unavailable": []
|
|
50
|
+
},
|
|
51
|
+
"links": [
|
|
52
|
+
{
|
|
53
|
+
"domains": [
|
|
54
|
+
"fedex.com"
|
|
55
|
+
],
|
|
56
|
+
"params": [
|
|
57
|
+
"trknbr",
|
|
58
|
+
"tracknumbers"
|
|
59
|
+
]
|
|
60
|
+
}
|
|
61
|
+
],
|
|
62
|
+
"detection": [
|
|
63
|
+
{
|
|
64
|
+
"id": "fedex-1",
|
|
65
|
+
"pattern": "^\\d{12}$",
|
|
66
|
+
"confidence": "low"
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
"id": "fedex-2",
|
|
70
|
+
"pattern": "^\\d{15}$",
|
|
71
|
+
"confidence": "low"
|
|
72
|
+
}
|
|
73
|
+
]
|
|
74
|
+
}
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
{
|
|
2
|
+
"carrier": "fedex",
|
|
3
|
+
"records": [
|
|
4
|
+
{
|
|
5
|
+
"number": "041441760228964",
|
|
6
|
+
"role": "shipment",
|
|
7
|
+
"evidence": "open_source_example",
|
|
8
|
+
"source": {
|
|
9
|
+
"url": "https://github.com/jkeen/tracking_number_data/blob/main/couriers/fedex.json"
|
|
10
|
+
},
|
|
11
|
+
"expect": {
|
|
12
|
+
"carrier": "unknown",
|
|
13
|
+
"confidence": "low",
|
|
14
|
+
"candidates": [
|
|
15
|
+
"fedex",
|
|
16
|
+
"dpd-fr",
|
|
17
|
+
"yunda"
|
|
18
|
+
]
|
|
19
|
+
},
|
|
20
|
+
"note": "Open-source project example, not a real shipment. The source attributes it to FedEx, which stays one candidate among several."
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"number": "477179081230",
|
|
24
|
+
"role": "shipment",
|
|
25
|
+
"evidence": "open_source_example",
|
|
26
|
+
"source": {
|
|
27
|
+
"url": "https://github.com/jkeen/tracking_number_data/blob/main/couriers/fedex.json"
|
|
28
|
+
},
|
|
29
|
+
"expect": {
|
|
30
|
+
"carrier": "unknown",
|
|
31
|
+
"confidence": "low",
|
|
32
|
+
"candidates": [
|
|
33
|
+
"fedex",
|
|
34
|
+
"mondial-relay",
|
|
35
|
+
"colis-prive",
|
|
36
|
+
"mrw",
|
|
37
|
+
"purolator",
|
|
38
|
+
"sf-express",
|
|
39
|
+
"sto",
|
|
40
|
+
"zto",
|
|
41
|
+
"yamato",
|
|
42
|
+
"j-and-t"
|
|
43
|
+
]
|
|
44
|
+
},
|
|
45
|
+
"note": "Open-source project example, not a real shipment. The source attributes it to FedEx, which stays one candidate among several."
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
"number": "532981649667",
|
|
49
|
+
"role": "shipment",
|
|
50
|
+
"evidence": "public_shipment_report",
|
|
51
|
+
"source": {
|
|
52
|
+
"url": "https://www.trustpilot.com/reviews/6aa95a1ed3a830f75a5b84e6",
|
|
53
|
+
"date": "2026-09-15"
|
|
54
|
+
},
|
|
55
|
+
"expect": {
|
|
56
|
+
"carrier": "unknown",
|
|
57
|
+
"confidence": "low",
|
|
58
|
+
"candidates": [
|
|
59
|
+
"fedex",
|
|
60
|
+
"mondial-relay",
|
|
61
|
+
"colis-prive",
|
|
62
|
+
"mrw",
|
|
63
|
+
"purolator",
|
|
64
|
+
"sf-express",
|
|
65
|
+
"sto",
|
|
66
|
+
"zto",
|
|
67
|
+
"yamato",
|
|
68
|
+
"j-and-t"
|
|
69
|
+
]
|
|
70
|
+
},
|
|
71
|
+
"note": "Publicly reported FedEx shipment; detection lists FedEx among several twelve-digit candidates. On 2026-09-30 ParcelsApp listed its US scans as \"City, ST\"; its delivery-day order only fits local clocks."
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
"number": "541270563758",
|
|
75
|
+
"role": "shipment",
|
|
76
|
+
"evidence": "public_shipment_report",
|
|
77
|
+
"source": {
|
|
78
|
+
"url": "https://www.trustpilot.com/reviews/6aa6eaabc62ce509075349c1",
|
|
79
|
+
"date": "2026-09-13"
|
|
80
|
+
},
|
|
81
|
+
"expect": {
|
|
82
|
+
"carrier": "unknown",
|
|
83
|
+
"confidence": "low",
|
|
84
|
+
"candidates": [
|
|
85
|
+
"fedex",
|
|
86
|
+
"mondial-relay",
|
|
87
|
+
"colis-prive",
|
|
88
|
+
"mrw",
|
|
89
|
+
"purolator",
|
|
90
|
+
"sf-express",
|
|
91
|
+
"sto",
|
|
92
|
+
"zto",
|
|
93
|
+
"yamato",
|
|
94
|
+
"j-and-t"
|
|
95
|
+
]
|
|
96
|
+
},
|
|
97
|
+
"note": "Publicly reported FedEx shipment; detection lists FedEx among several twelve-digit candidates. On 2026-09-30 FedEx's own page gave the local delivery time whose digits ParcelsApp labels UTC."
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
"number": "986578788855",
|
|
101
|
+
"role": "shipment",
|
|
102
|
+
"evidence": "open_source_example",
|
|
103
|
+
"source": {
|
|
104
|
+
"url": "https://github.com/jkeen/tracking_number_data/blob/main/couriers/fedex.json"
|
|
105
|
+
},
|
|
106
|
+
"expect": {
|
|
107
|
+
"carrier": "unknown",
|
|
108
|
+
"confidence": "low",
|
|
109
|
+
"candidates": [
|
|
110
|
+
"fedex",
|
|
111
|
+
"mondial-relay",
|
|
112
|
+
"colis-prive",
|
|
113
|
+
"mrw",
|
|
114
|
+
"sf-express",
|
|
115
|
+
"sto",
|
|
116
|
+
"zto",
|
|
117
|
+
"yamato",
|
|
118
|
+
"j-and-t"
|
|
119
|
+
]
|
|
120
|
+
},
|
|
121
|
+
"note": "Open-source project example, not a real shipment. The source attributes it to FedEx, which stays one candidate among several."
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
"number": "000123450000000027",
|
|
125
|
+
"role": "full_barcode",
|
|
126
|
+
"evidence": "open_source_example",
|
|
127
|
+
"source": {
|
|
128
|
+
"url": "https://github.com/jkeen/tracking_number_data/blob/main/couriers/fedex.json"
|
|
129
|
+
},
|
|
130
|
+
"expect": {
|
|
131
|
+
"carrier": "unknown",
|
|
132
|
+
"confidence": "low",
|
|
133
|
+
"candidates": [
|
|
134
|
+
"bpost",
|
|
135
|
+
"ecoscooting"
|
|
136
|
+
]
|
|
137
|
+
},
|
|
138
|
+
"note": "Open-source project example, not a real shipment. Full label barcode rather than the number a user types. The source attributes it to FedEx, which no rule claims."
|
|
139
|
+
},
|
|
140
|
+
{
|
|
141
|
+
"number": "1001921334250001000300779017972697",
|
|
142
|
+
"role": "full_barcode",
|
|
143
|
+
"evidence": "open_source_example",
|
|
144
|
+
"source": {
|
|
145
|
+
"url": "https://github.com/jkeen/tracking_number_data/blob/main/couriers/fedex.json"
|
|
146
|
+
},
|
|
147
|
+
"expect": {
|
|
148
|
+
"carrier": "unknown",
|
|
149
|
+
"confidence": "none"
|
|
150
|
+
},
|
|
151
|
+
"note": "Open-source project example, not a real shipment. Full label barcode rather than the number a user types. The source attributes it to FedEx; no rule matches this shape."
|
|
152
|
+
},
|
|
153
|
+
{
|
|
154
|
+
"number": "32971514560102447849175802862014",
|
|
155
|
+
"role": "full_barcode",
|
|
156
|
+
"evidence": "open_source_example",
|
|
157
|
+
"source": {
|
|
158
|
+
"url": "https://github.com/jkeen/tracking_number_data/blob/main/couriers/fedex.json"
|
|
159
|
+
},
|
|
160
|
+
"expect": {
|
|
161
|
+
"carrier": "unknown",
|
|
162
|
+
"confidence": "none"
|
|
163
|
+
},
|
|
164
|
+
"note": "Open-source project example, not a real shipment. Full label barcode rather than the number a user types. The source attributes it to FedEx; no rule matches this shape."
|
|
165
|
+
},
|
|
166
|
+
{
|
|
167
|
+
"number": "9611020987654312345672",
|
|
168
|
+
"role": "full_barcode",
|
|
169
|
+
"evidence": "open_source_example",
|
|
170
|
+
"source": {
|
|
171
|
+
"url": "https://github.com/jkeen/tracking_number_data/blob/main/couriers/fedex.json"
|
|
172
|
+
},
|
|
173
|
+
"expect": {
|
|
174
|
+
"carrier": "unknown",
|
|
175
|
+
"confidence": "low",
|
|
176
|
+
"candidates": [
|
|
177
|
+
"austrian-post",
|
|
178
|
+
"usps",
|
|
179
|
+
"estafeta"
|
|
180
|
+
]
|
|
181
|
+
},
|
|
182
|
+
"note": "Open-source project example, not a real shipment. Full label barcode rather than the number a user types. The source attributes it to FedEx, which no rule claims."
|
|
183
|
+
},
|
|
184
|
+
{
|
|
185
|
+
"number": "9622001900000000000000776632517510",
|
|
186
|
+
"role": "full_barcode",
|
|
187
|
+
"evidence": "open_source_example",
|
|
188
|
+
"source": {
|
|
189
|
+
"url": "https://github.com/jkeen/tracking_number_data/blob/main/couriers/fedex.json"
|
|
190
|
+
},
|
|
191
|
+
"expect": {
|
|
192
|
+
"carrier": "unknown",
|
|
193
|
+
"confidence": "none"
|
|
194
|
+
},
|
|
195
|
+
"note": "Open-source project example, not a real shipment. Full label barcode rather than the number a user types. The source attributes it to FedEx; no rule matches this shape."
|
|
196
|
+
}
|
|
197
|
+
]
|
|
198
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FedEx status vocabulary.
|
|
3
|
+
*
|
|
4
|
+
* The tracking reply carries two signals per shipment and per scan: a short
|
|
5
|
+
* machine code (`keyStatusCD` on the package, `statusCD` on a scan) and
|
|
6
|
+
* English prose (`keyStatus`, `status`, `scanDetails`). The code is read
|
|
7
|
+
* first; the prose is matched on substrings because FedEx re-words it freely.
|
|
8
|
+
* A `delivered` code is terminal and outranks an intuitive translation of the
|
|
9
|
+
* wording, the way the tracking page itself treats it.
|
|
10
|
+
*
|
|
11
|
+
* Code provenance: `DE` and `DY` drive the page's own delivery-exception and
|
|
12
|
+
* delay flags, `DL`/`OD`/`OC`/`PU`/`AR`/`DP` come from the page bundle and
|
|
13
|
+
* FedEx's tracking documentation; `IT`/`SE`/`CA` match the official Track API
|
|
14
|
+
* vocabulary (prior art). `statuses.json` holds the full list.
|
|
15
|
+
*/
|
|
16
|
+
import type { CarrierStatus } from '../../core/result/index.js';
|
|
17
|
+
import type { Stage } from '../../core/status/index.js';
|
|
18
|
+
/** Package and scan codes, uppercased, to the product stage. */
|
|
19
|
+
export declare const FEDEX_CODE_STAGE: Readonly<Record<string, Stage>>;
|
|
20
|
+
/**
|
|
21
|
+
* Classify FedEx status prose. Returns null when nothing matches, so callers
|
|
22
|
+
* can fall back to the code or leave an event unstaged rather than invent a
|
|
23
|
+
* stage. `hasEvents` reports an existing scan history, which makes
|
|
24
|
+
* unrecognized wording "moving" rather than "unknown".
|
|
25
|
+
*/
|
|
26
|
+
export declare function fedexStage(text: string): Stage | null;
|
|
27
|
+
export declare function statusForStage(stage: Stage): CarrierStatus;
|
|
28
|
+
/**
|
|
29
|
+
* The result-level status for a package code plus its prose. The code wins,
|
|
30
|
+
* except that an unmapped code falls back to the wording, and unrecognized
|
|
31
|
+
* wording on a shipment that already has scans reads as moving.
|
|
32
|
+
*/
|
|
33
|
+
export declare function fedexStatus(code: string, text: string, hasEvents?: boolean): CarrierStatus;
|