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,107 @@
|
|
|
1
|
+
import { DateTime } from 'luxon';
|
|
2
|
+
import { IndeterminateError, SchemaError } from '../../core/errors/index.js';
|
|
3
|
+
import { calendarDay, explicitOffsetTime } from '../../core/time/index.js';
|
|
4
|
+
import { clean } from '../../core/transport/index.js';
|
|
5
|
+
import { isRecord } from '../../core/types.js';
|
|
6
|
+
import { classifyCttExpressStatus } from './status.js';
|
|
7
|
+
export function normalizeCttExpressNumber(raw) {
|
|
8
|
+
const number = raw.replace(/[\s.-]/g, '');
|
|
9
|
+
if (!/^00\d{20}$/.test(number))
|
|
10
|
+
throw new TypeError('CTT Express requires a Spanish shipment tracking number');
|
|
11
|
+
return number;
|
|
12
|
+
}
|
|
13
|
+
function scanClock(value) {
|
|
14
|
+
const raw = clean(value, 64);
|
|
15
|
+
if (/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d{1,9})?(?:Z|[+-](?:[01]\d|2[0-3]):?[0-5]\d)$/.test(raw)) {
|
|
16
|
+
const instant = explicitOffsetTime(raw);
|
|
17
|
+
if (instant)
|
|
18
|
+
return { time: instant.iso };
|
|
19
|
+
}
|
|
20
|
+
if (/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d{1,3})?$/.test(raw)) {
|
|
21
|
+
const wall = DateTime.fromISO(raw, { zone: 'UTC' });
|
|
22
|
+
if (wall.isValid)
|
|
23
|
+
return { local_time: wall.toISO({ includeOffset: false, suppressMilliseconds: true }) };
|
|
24
|
+
}
|
|
25
|
+
return raw ? { provider_time_text: raw } : {};
|
|
26
|
+
}
|
|
27
|
+
export function parseCttExpress(payload, number) {
|
|
28
|
+
const requested = normalizeCttExpressNumber(number);
|
|
29
|
+
if (!isRecord(payload))
|
|
30
|
+
throw new SchemaError('CTT Express');
|
|
31
|
+
// An upstream Invalid token reply can precede successful anonymous retrieval.
|
|
32
|
+
// No error signature has established a reliable parcel-negative response.
|
|
33
|
+
if (payload.error != null)
|
|
34
|
+
throw new IndeterminateError('CTT Express', 'CTT Express returned an inconclusive tracking response');
|
|
35
|
+
const data = payload.data;
|
|
36
|
+
if (!isRecord(data) || data.shipping_code !== requested || !isRecord(data.shipping_history)) {
|
|
37
|
+
throw new SchemaError('CTT Express', 'CTT Express returned a different or incomplete shipment');
|
|
38
|
+
}
|
|
39
|
+
const history = data.shipping_history;
|
|
40
|
+
if (!Array.isArray(history.events) || history.events.length > 500)
|
|
41
|
+
throw new SchemaError('CTT Express');
|
|
42
|
+
if (!history.events.length)
|
|
43
|
+
throw new IndeterminateError('CTT Express', 'CTT Express returned no tracking scans');
|
|
44
|
+
// The public response contains one package's history. Shipment completion
|
|
45
|
+
// cannot be inferred from one delivered package of a multi-piece shipment.
|
|
46
|
+
if (data.item_count !== 1)
|
|
47
|
+
throw new IndeterminateError('CTT Express', 'CTT Express did not return a single-piece shipment');
|
|
48
|
+
// Official label specification: 22 shipment digits + 3 parcel-counter digits.
|
|
49
|
+
if (history.item_code !== `${requested}001`)
|
|
50
|
+
throw new SchemaError('CTT Express', 'CTT Express returned a different package');
|
|
51
|
+
const events = [];
|
|
52
|
+
// Newest provider positions win equal-clock ties. Preserve duplicates until
|
|
53
|
+
// their chronological leg is known so an earlier return start is not lost.
|
|
54
|
+
for (const row of [...history.events].reverse()) {
|
|
55
|
+
if (!isRecord(row) || row.type !== 'STATUS' || !['ITEM_STATUS_V2', 'ITEM_STATUS_CHANGE_V1'].includes(clean(row.source, 64))) {
|
|
56
|
+
throw new SchemaError('CTT Express', 'CTT Express returned an unsupported scan source');
|
|
57
|
+
}
|
|
58
|
+
const code = clean(row.code, 16);
|
|
59
|
+
const description = clean(row.description, 500);
|
|
60
|
+
if (!/^\d{4}$/.test(code) || !description)
|
|
61
|
+
throw new SchemaError('CTT Express', 'CTT Express returned an incomplete scan');
|
|
62
|
+
const clock = scanClock(row.event_date);
|
|
63
|
+
const mapped = classifyCttExpressStatus(code);
|
|
64
|
+
events.push({ provider_code: code, description, ...clock, ...(mapped ? { stage: mapped.stage } : {}) });
|
|
65
|
+
}
|
|
66
|
+
// An unresolved newest scan must not yield to an older instant.
|
|
67
|
+
if (events.every((event) => event.time))
|
|
68
|
+
events.sort((a, b) => Date.parse(b.time) - Date.parse(a.time));
|
|
69
|
+
// 2500 explicitly starts delivery back to the sender. Apply that evidence
|
|
70
|
+
// chronologically, using the provider's order whenever a clock is unresolved.
|
|
71
|
+
// Movement on that leg remains movement; only completed delivery is returned.
|
|
72
|
+
let returning = false;
|
|
73
|
+
for (const event of [...events].reverse()) {
|
|
74
|
+
if (event.provider_code === '2500')
|
|
75
|
+
returning = true;
|
|
76
|
+
if (!returning)
|
|
77
|
+
continue;
|
|
78
|
+
event.provider_leg = 'return';
|
|
79
|
+
if (event.stage === 'delivered')
|
|
80
|
+
event.stage = 'returned';
|
|
81
|
+
}
|
|
82
|
+
const seen = new Set();
|
|
83
|
+
const unique = events.filter(event => {
|
|
84
|
+
const key = JSON.stringify(event);
|
|
85
|
+
if (seen.has(key))
|
|
86
|
+
return false;
|
|
87
|
+
seen.add(key);
|
|
88
|
+
return true;
|
|
89
|
+
});
|
|
90
|
+
const latest = unique[0];
|
|
91
|
+
const mapped = classifyCttExpressStatus(latest.provider_code ?? '');
|
|
92
|
+
const returned = latest.stage === 'returned';
|
|
93
|
+
const eta = clean(data.committed_delivery_datetime, 32);
|
|
94
|
+
const date = /^(\d{4})-(\d{2})-(\d{2})$/.exec(eta);
|
|
95
|
+
const validEta = date && calendarDay(Number(date[1]), Number(date[2]), Number(date[3]));
|
|
96
|
+
const latestDay = latest.time ? DateTime.fromISO(latest.time, { setZone: true }).toISODate()
|
|
97
|
+
: typeof latest.local_time === 'string' ? latest.local_time.slice(0, 10) : null;
|
|
98
|
+
const heldForDocuments = history.events.some((row) => isRecord(row) && isRecord(row.detail) && row.detail.incident_type_code === '21_INCT');
|
|
99
|
+
const active = mapped && ['pending', 'in_transit', 'out_for_delivery'].includes(mapped.status) && mapped.stage !== 'ready_for_pickup';
|
|
100
|
+
// The widget uses the committed date as a calendar estimate. Old estimates
|
|
101
|
+
// persist after incidents/returns; do not present those as a current promise.
|
|
102
|
+
const expected = active && latest.provider_leg !== 'return' && !heldForDocuments && validEta && latestDay && validEta >= latestDay ? validEta : null;
|
|
103
|
+
return { status: returned ? 'exception' : mapped?.status ?? 'unknown', ...(latest.stage ? { current_stage: latest.stage } : {}),
|
|
104
|
+
last_status_text: latest.description, last_update: latest.time ?? null, last_update_local: latest.local_time ?? null,
|
|
105
|
+
expected_delivery: expected, ...(mapped?.status === 'delivered' && !returned && latest.time ? { delivered_at: latest.time } : {}),
|
|
106
|
+
events: unique.slice(0, 100) };
|
|
107
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
const codes = {
|
|
2
|
+
'0000': { status: 'pending', stage: 'registered' },
|
|
3
|
+
'0600': { status: 'exception', stage: 'exception' },
|
|
4
|
+
'1000': { status: 'in_transit', stage: 'in_transit' },
|
|
5
|
+
'1500': { status: 'out_for_delivery', stage: 'out_for_delivery' },
|
|
6
|
+
'1600': { status: 'exception', stage: 'exception' },
|
|
7
|
+
// Actual "Nuevo reparto" scan, grouped with 1500 by the official widget.
|
|
8
|
+
'2400': { status: 'out_for_delivery', stage: 'out_for_delivery' },
|
|
9
|
+
'2310': { status: 'in_transit', stage: 'ready_for_pickup' },
|
|
10
|
+
// The widget explicitly says the parcel is on its way back to the sender.
|
|
11
|
+
'2500': { status: 'exception', stage: 'exception' },
|
|
12
|
+
'2100': { status: 'delivered', stage: 'delivered' },
|
|
13
|
+
'2110': { status: 'delivered', stage: 'delivered' },
|
|
14
|
+
};
|
|
15
|
+
export function classifyCttExpressStatus(code) {
|
|
16
|
+
return Object.hasOwn(codes, code) ? codes[code] : undefined;
|
|
17
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
{
|
|
2
|
+
"carrier": "ctt-express",
|
|
3
|
+
"entries": [
|
|
4
|
+
{ "code": "0000", "wording": "Pendiente de recepción en CTT Express", "language": "es", "stage": "registered", "confirmedBy": "live" },
|
|
5
|
+
{ "code": "0600", "wording": "Recogida fallida", "language": "es", "stage": "exception", "confirmedBy": "live" },
|
|
6
|
+
{ "code": "1000", "wording": "Enviado", "language": "es", "stage": "in_transit", "confirmedBy": "live" },
|
|
7
|
+
{ "code": "1500", "wording": "En reparto", "language": "es", "stage": "out_for_delivery", "confirmedBy": "live" },
|
|
8
|
+
{ "code": "1600", "wording": "Incidencia en el reparto", "language": "es", "stage": "exception", "confirmedBy": "live" },
|
|
9
|
+
{ "code": "2400", "wording": "Nuevo reparto", "language": "es", "stage": "out_for_delivery", "confirmedBy": "live" },
|
|
10
|
+
{ "code": "2310", "wording": "Disponible en Punto Collectt Express", "language": "es", "stage": "ready_for_pickup", "confirmedBy": "live" },
|
|
11
|
+
{ "code": "2500", "wording": "En devolución", "language": "es", "stage": "exception", "confirmedBy": "live" },
|
|
12
|
+
{ "code": "2100", "wording": "El envío fue entregado correctamente", "language": "es", "stage": "delivered", "confirmedBy": "portal" },
|
|
13
|
+
{ "code": "2110", "wording": "El envío fue entregado correctamente", "language": "es", "stage": "delivered", "confirmedBy": "portal" }
|
|
14
|
+
]
|
|
15
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export { validateDachserTrackingUrl } from '../../core/catalog/urls.js';
|
|
2
|
+
import type { AdapterFactory } from '../../core/adapter/index.js';
|
|
3
|
+
import type { CarrierResult } from '../../core/result/index.js';
|
|
4
|
+
export interface DachserOptions {
|
|
5
|
+
timeoutMs?: number;
|
|
6
|
+
/** Test seam; production uses the global fetch. */
|
|
7
|
+
fetcher?: typeof fetch;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Validate and canonicalize a pasted Dachser capability URL.
|
|
11
|
+
*
|
|
12
|
+
* The host's `carriers.ts` calls this when a parcel is created or edited, so
|
|
13
|
+
* the failures below are user-facing input errors, not provider errors. The
|
|
14
|
+
* URL's query parameters grant access to the shipment: treat the whole string
|
|
15
|
+
* like a password.
|
|
16
|
+
*/
|
|
17
|
+
export declare function dachserApiUrl(trackingUrl: string, trackingNumber: string): string;
|
|
18
|
+
export declare function parseDachserTrackingResponse(payload: unknown, trackingNumber: string): CarrierResult;
|
|
19
|
+
export declare class DachserTracker {
|
|
20
|
+
#private;
|
|
21
|
+
readonly timeoutMs: number;
|
|
22
|
+
constructor(options?: number | DachserOptions);
|
|
23
|
+
fetch(trackingNumber: string, trackingUrl: string): Promise<CarrierResult>;
|
|
24
|
+
}
|
|
25
|
+
export declare const adapter: AdapterFactory;
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
import { validateDachserTrackingUrl } from '../../core/catalog/urls.js';
|
|
2
|
+
export { validateDachserTrackingUrl } from '../../core/catalog/urls.js';
|
|
3
|
+
import { DateTime } from 'luxon';
|
|
4
|
+
import { InputRequiredError, NotFoundError, SchemaError, UpstreamHttpError } from '../../core/errors/index.js';
|
|
5
|
+
import { fetchBounded, parseJsonBytes } from '../../core/transport/index.js';
|
|
6
|
+
import { isRecord } from '../../core/types.js';
|
|
7
|
+
import { eventLabel, plainText, shipmentStatus } from './status.js';
|
|
8
|
+
const DACHSER_HOST = 'customeriberia.dachser.com';
|
|
9
|
+
const DACHSER_PAGE_PATH = '/customerarea/utilidades/seguimiento-publico/detalle';
|
|
10
|
+
const DACHSER_API_PATH = '/api/utilidades/seguimiento-publico/detalle';
|
|
11
|
+
const PROVIDER = 'Dachser';
|
|
12
|
+
const DEFAULT_TIMEOUT_MS = 15_000;
|
|
13
|
+
const DATE_FORMATS = [
|
|
14
|
+
'dd/MM/yyyy HH:mm:ss',
|
|
15
|
+
'dd/MM/yyyy HH:mm',
|
|
16
|
+
'dd/MM/yyyy',
|
|
17
|
+
'yyyy-MM-dd HH:mm:ss',
|
|
18
|
+
'yyyy-MM-dd HH:mm',
|
|
19
|
+
'yyyy-MM-dd',
|
|
20
|
+
];
|
|
21
|
+
function normalizeTrackingNumber(raw) {
|
|
22
|
+
return String(raw ?? '').replace(/[\s.-]/g, '').toUpperCase();
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Validate and canonicalize a pasted Dachser capability URL.
|
|
26
|
+
*
|
|
27
|
+
* The host's `carriers.ts` calls this when a parcel is created or edited, so
|
|
28
|
+
* the failures below are user-facing input errors, not provider errors. The
|
|
29
|
+
* URL's query parameters grant access to the shipment: treat the whole string
|
|
30
|
+
* like a password.
|
|
31
|
+
*/
|
|
32
|
+
export function dachserApiUrl(trackingUrl, trackingNumber) {
|
|
33
|
+
const url = new URL(validateDachserTrackingUrl(trackingUrl, trackingNumber));
|
|
34
|
+
url.pathname = DACHSER_API_PATH;
|
|
35
|
+
return url.toString();
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Local time policy: the endpoint mixes ISO-8601 with `dd/MM/yyyy [HH:mm[:ss]]`
|
|
39
|
+
* and `yyyy-MM-dd [HH:mm[:ss]]`, all of them wall-clock times in Spain. Values
|
|
40
|
+
* that do carry an offset keep it; everything else is read in Europe/Madrid.
|
|
41
|
+
*/
|
|
42
|
+
function parseDateTime(raw) {
|
|
43
|
+
const value = String(raw ?? '').trim();
|
|
44
|
+
if (!value)
|
|
45
|
+
return null;
|
|
46
|
+
let parsed = DateTime.fromISO(value, { zone: 'Europe/Madrid', setZone: true });
|
|
47
|
+
if (!parsed.isValid) {
|
|
48
|
+
for (const format of DATE_FORMATS) {
|
|
49
|
+
parsed = DateTime.fromFormat(value, format, { zone: 'Europe/Madrid' });
|
|
50
|
+
if (parsed.isValid)
|
|
51
|
+
break;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return parsed.isValid ? parsed : null;
|
|
55
|
+
}
|
|
56
|
+
export function parseDachserTrackingResponse(payload, trackingNumber) {
|
|
57
|
+
if (!isRecord(payload))
|
|
58
|
+
throw new SchemaError(PROVIDER, 'Dachser returned an invalid tracking response');
|
|
59
|
+
if (!payload.numUnico)
|
|
60
|
+
throw new SchemaError(PROVIDER, 'Dachser did not return a shipment number');
|
|
61
|
+
if (normalizeTrackingNumber(payload.numUnico) !== normalizeTrackingNumber(trackingNumber)) {
|
|
62
|
+
throw new SchemaError(PROVIDER, 'Dachser returned a different shipment');
|
|
63
|
+
}
|
|
64
|
+
const sourceEvents = Array.isArray(payload.incidenciaExpedicionData)
|
|
65
|
+
? payload.incidenciaExpedicionData
|
|
66
|
+
: [];
|
|
67
|
+
const events = [];
|
|
68
|
+
const seen = new Set();
|
|
69
|
+
for (const sourceEvent of sourceEvents.slice(0, 200)) {
|
|
70
|
+
if (!isRecord(sourceEvent))
|
|
71
|
+
continue;
|
|
72
|
+
const occurred = parseDateTime(sourceEvent.fechaIncidencia);
|
|
73
|
+
if (!occurred)
|
|
74
|
+
continue;
|
|
75
|
+
const label = eventLabel(sourceEvent.descripcionIncidencia);
|
|
76
|
+
const timestamp = occurred.toISO({ suppressMilliseconds: true });
|
|
77
|
+
const identity = JSON.stringify([timestamp, label.stage, label.description]);
|
|
78
|
+
if (seen.has(identity))
|
|
79
|
+
continue;
|
|
80
|
+
seen.add(identity);
|
|
81
|
+
events.push({ time: timestamp, location: '', ...label });
|
|
82
|
+
}
|
|
83
|
+
events.sort((left, right) => right.time.localeCompare(left.time));
|
|
84
|
+
const status = shipmentStatus(payload.estadoExpedicion, events.length > 0);
|
|
85
|
+
const lastUpdate = parseDateTime(payload.fechaEstado) ?? parseDateTime(events[0]?.time);
|
|
86
|
+
let expectedDelivery = null;
|
|
87
|
+
if (status.status !== 'delivered') {
|
|
88
|
+
for (const field of ['fechaEntregaAplazada', 'fCompromiso', 'fechaPrimeraEntrega']) {
|
|
89
|
+
const value = parseDateTime(payload[field]);
|
|
90
|
+
if (value) {
|
|
91
|
+
expectedDelivery = value.toISODate();
|
|
92
|
+
break;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
return {
|
|
97
|
+
status: status.status,
|
|
98
|
+
last_status_text: status.text,
|
|
99
|
+
last_update: lastUpdate?.toISO({ suppressMilliseconds: true }) ?? null,
|
|
100
|
+
expected_delivery: expectedDelivery,
|
|
101
|
+
timezone: 'Europe/Madrid',
|
|
102
|
+
events,
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
export class DachserTracker {
|
|
106
|
+
timeoutMs;
|
|
107
|
+
#fetcher;
|
|
108
|
+
constructor(options = {}) {
|
|
109
|
+
const { timeoutMs = DEFAULT_TIMEOUT_MS, fetcher } = typeof options === 'number'
|
|
110
|
+
? { timeoutMs: options, fetcher: undefined }
|
|
111
|
+
: options;
|
|
112
|
+
this.timeoutMs = timeoutMs;
|
|
113
|
+
this.#fetcher = fetcher;
|
|
114
|
+
}
|
|
115
|
+
async fetch(trackingNumber, trackingUrl) {
|
|
116
|
+
const { bytes, response } = await fetchBounded(dachserApiUrl(trackingUrl, trackingNumber), {
|
|
117
|
+
headers: {
|
|
118
|
+
Accept: 'application/json',
|
|
119
|
+
'Accept-Language': 'en',
|
|
120
|
+
Referer: `https://${DACHSER_HOST}${DACHSER_PAGE_PATH}`,
|
|
121
|
+
'User-Agent': 'SwissDeliveryTracker/1.0',
|
|
122
|
+
},
|
|
123
|
+
}, {
|
|
124
|
+
provider: 'Dachser tracking',
|
|
125
|
+
timeoutMs: this.timeoutMs,
|
|
126
|
+
allowHttpError: true,
|
|
127
|
+
...(this.#fetcher ? { fetcher: this.#fetcher } : {}),
|
|
128
|
+
});
|
|
129
|
+
if (!response.ok) {
|
|
130
|
+
if (response.status === 404)
|
|
131
|
+
throw new NotFoundError(PROVIDER);
|
|
132
|
+
let errorPayload;
|
|
133
|
+
try {
|
|
134
|
+
errorPayload = parseJsonBytes(bytes, PROVIDER);
|
|
135
|
+
}
|
|
136
|
+
catch {
|
|
137
|
+
throw new UpstreamHttpError('Dachser tracking', response.status);
|
|
138
|
+
}
|
|
139
|
+
// An unknown shipment/access tuple currently reaches a null result in
|
|
140
|
+
// Dachser's public endpoint and is surfaced as this stable JSON 500.
|
|
141
|
+
// Match the public error signature narrowly so unrelated 500s remain
|
|
142
|
+
// operational failures rather than false not-found results.
|
|
143
|
+
const errorMessage = plainText(isRecord(errorPayload) ? errorPayload.message ?? '' : '');
|
|
144
|
+
if (response.status === 500
|
|
145
|
+
&& isRecord(errorPayload)
|
|
146
|
+
&& errorPayload.code === 'ERR_APP_500'
|
|
147
|
+
&& errorPayload.path === DACHSER_API_PATH
|
|
148
|
+
&& errorMessage.includes('resultadodetexp')
|
|
149
|
+
&& errorMessage.includes('null'))
|
|
150
|
+
throw new NotFoundError(PROVIDER);
|
|
151
|
+
throw new UpstreamHttpError('Dachser tracking', response.status);
|
|
152
|
+
}
|
|
153
|
+
return parseDachserTrackingResponse(parseJsonBytes(bytes, PROVIDER), trackingNumber);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
export const adapter = (environment) => {
|
|
157
|
+
const tracker = new DachserTracker({ fetcher: environment.fetcher });
|
|
158
|
+
return {
|
|
159
|
+
id: 'dachser',
|
|
160
|
+
steps: ['direct'],
|
|
161
|
+
track: async (input) => {
|
|
162
|
+
if (!input.trackingUrl) {
|
|
163
|
+
throw new InputRequiredError(PROVIDER, 'its complete tracking URL', 'Dachser tracking requires its complete tracking URL');
|
|
164
|
+
}
|
|
165
|
+
return tracker.fetch(input.number, input.trackingUrl);
|
|
166
|
+
},
|
|
167
|
+
};
|
|
168
|
+
};
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "dachser",
|
|
3
|
+
"displayName": "Dachser",
|
|
4
|
+
"aliases": [
|
|
5
|
+
"Dachser SE",
|
|
6
|
+
"Dachser Customer Iberia"
|
|
7
|
+
],
|
|
8
|
+
"region": {
|
|
9
|
+
"countries": [
|
|
10
|
+
"ES",
|
|
11
|
+
"PT"
|
|
12
|
+
]
|
|
13
|
+
},
|
|
14
|
+
"brand": {
|
|
15
|
+
"color": "#005ca9"
|
|
16
|
+
},
|
|
17
|
+
"selectable": true,
|
|
18
|
+
"timezone": "Europe/Madrid",
|
|
19
|
+
"tracking": {
|
|
20
|
+
"mode": "automatic",
|
|
21
|
+
"adapter": "dachser",
|
|
22
|
+
"requirements": [
|
|
23
|
+
{
|
|
24
|
+
"field": "trackingUrl",
|
|
25
|
+
"validator": "dachserCapabilityUrl",
|
|
26
|
+
"label": "Dachser tracking URL",
|
|
27
|
+
"type": "url",
|
|
28
|
+
"placeholder": "https://customeriberia.dachser.com/customerarea/…",
|
|
29
|
+
"help": "Paste the complete public detail link, including its access parameters."
|
|
30
|
+
}
|
|
31
|
+
],
|
|
32
|
+
"steps": [
|
|
33
|
+
"direct"
|
|
34
|
+
]
|
|
35
|
+
},
|
|
36
|
+
"capabilities": [
|
|
37
|
+
"history",
|
|
38
|
+
"eta"
|
|
39
|
+
],
|
|
40
|
+
"portal": {
|
|
41
|
+
"canaryUrl": "https://customeriberia.dachser.com/customerarea/",
|
|
42
|
+
"shows": [
|
|
43
|
+
"status",
|
|
44
|
+
"history",
|
|
45
|
+
"eta",
|
|
46
|
+
"sender_name",
|
|
47
|
+
"recipient_name",
|
|
48
|
+
"recipient_address",
|
|
49
|
+
"recipient_contact",
|
|
50
|
+
"signature"
|
|
51
|
+
],
|
|
52
|
+
"scraped": [
|
|
53
|
+
"status",
|
|
54
|
+
"history",
|
|
55
|
+
"eta"
|
|
56
|
+
],
|
|
57
|
+
"discarded": [
|
|
58
|
+
"sender_name",
|
|
59
|
+
"recipient_name",
|
|
60
|
+
"recipient_address",
|
|
61
|
+
"recipient_contact",
|
|
62
|
+
"signature"
|
|
63
|
+
],
|
|
64
|
+
"unavailable": [
|
|
65
|
+
"location"
|
|
66
|
+
]
|
|
67
|
+
},
|
|
68
|
+
"links": [
|
|
69
|
+
{
|
|
70
|
+
"domains": [
|
|
71
|
+
"customeriberia.dachser.com"
|
|
72
|
+
],
|
|
73
|
+
"params": [
|
|
74
|
+
"numeroUnico"
|
|
75
|
+
],
|
|
76
|
+
"keepsCapabilityUrl": true
|
|
77
|
+
}
|
|
78
|
+
],
|
|
79
|
+
"detection": []
|
|
80
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
{
|
|
2
|
+
"carrier": "dachser",
|
|
3
|
+
"records": [
|
|
4
|
+
{
|
|
5
|
+
"number": "04610654186",
|
|
6
|
+
"role": "shipment",
|
|
7
|
+
"evidence": "public_shipment_report",
|
|
8
|
+
"source": {
|
|
9
|
+
"url": "https://www.trustpilot.com/reviews/6a21b9515f37085b8ae3d11d",
|
|
10
|
+
"date": "2026-06-04"
|
|
11
|
+
},
|
|
12
|
+
"expect": {
|
|
13
|
+
"carrier": "unknown",
|
|
14
|
+
"confidence": "low",
|
|
15
|
+
"candidates": [
|
|
16
|
+
"postlogistics",
|
|
17
|
+
"gls-ch",
|
|
18
|
+
"gls-fr",
|
|
19
|
+
"gls-de",
|
|
20
|
+
"blue-dart",
|
|
21
|
+
"aramex"
|
|
22
|
+
]
|
|
23
|
+
},
|
|
24
|
+
"note": "Publicly reported shipment number; the attribution was not independently verified. The source attributes it to Dachser, which no rule claims. Consignment within Spain."
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"number": "4966085731",
|
|
28
|
+
"role": "shipment",
|
|
29
|
+
"evidence": "public_shipment_report",
|
|
30
|
+
"source": {
|
|
31
|
+
"url": "https://portaldaqueixa.com/brands/dachser-portugal/complaints/dachser-portugal-rececao-de-mensagens-de-encomenda-nao-solicitada-157557926",
|
|
32
|
+
"date": "2026-06-24"
|
|
33
|
+
},
|
|
34
|
+
"expect": {
|
|
35
|
+
"carrier": "unknown",
|
|
36
|
+
"confidence": "low",
|
|
37
|
+
"candidates": [
|
|
38
|
+
"dhl",
|
|
39
|
+
"mondial-relay",
|
|
40
|
+
"relais-colis",
|
|
41
|
+
"tipsa",
|
|
42
|
+
"estafeta"
|
|
43
|
+
]
|
|
44
|
+
},
|
|
45
|
+
"note": "Publicly reported shipment number; the attribution was not independently verified. The source attributes it to Dachser, which no rule claims. Consignment number from a delivery SMS the recipient did not expect."
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
"number": "9010000001234",
|
|
49
|
+
"role": "shipment",
|
|
50
|
+
"evidence": "synthetic",
|
|
51
|
+
"derivedFrom": "official_shape",
|
|
52
|
+
"shapeConfirmed": "2026-09-10",
|
|
53
|
+
"expect": {
|
|
54
|
+
"carrier": "unknown",
|
|
55
|
+
"confidence": "low",
|
|
56
|
+
"candidates": [
|
|
57
|
+
"la-poste",
|
|
58
|
+
"correos-chile",
|
|
59
|
+
"delhivery",
|
|
60
|
+
"yunda"
|
|
61
|
+
]
|
|
62
|
+
},
|
|
63
|
+
"note": "Made-up number that follows the published format. Filed under Dachser, which no rule claims."
|
|
64
|
+
}
|
|
65
|
+
]
|
|
66
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dachser status classification.
|
|
3
|
+
*
|
|
4
|
+
* The Customer Iberia endpoint has no status code: it sends a free-text
|
|
5
|
+
* `descripcionIncidencia` per event and a free-text `estadoExpedicion` for the
|
|
6
|
+
* shipment, in Spanish and occasionally English, French, German or Italian.
|
|
7
|
+
* Both classifiers therefore work on accent-folded, lower-cased substrings,
|
|
8
|
+
* ordered so that negatives and future-dated notices are decided before the
|
|
9
|
+
* broad delivery words they contain.
|
|
10
|
+
*/
|
|
11
|
+
import type { CarrierResult } from '../../core/result/index.js';
|
|
12
|
+
import type { Stage } from '../../generated/catalog.js';
|
|
13
|
+
/** Lower-cased, accent-free text, for language-independent matching. */
|
|
14
|
+
export declare function plainText(raw: unknown): string;
|
|
15
|
+
interface EventRule {
|
|
16
|
+
stage: Stage;
|
|
17
|
+
description: string;
|
|
18
|
+
needles: string[];
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Event wording rules, in priority order. The first match wins, so
|
|
22
|
+
* "no entregado" is classified before the "entregado" it contains, and a
|
|
23
|
+
* rescheduled delivery appointment ("fecha de entrega", "cita") never counts
|
|
24
|
+
* as a delivery.
|
|
25
|
+
*/
|
|
26
|
+
export declare const EVENT_RULES: readonly EventRule[];
|
|
27
|
+
/** The stage and the neutral English wording we show for one event row. */
|
|
28
|
+
export declare function eventLabel(rawDescription: unknown): {
|
|
29
|
+
stage: Stage;
|
|
30
|
+
description: string;
|
|
31
|
+
};
|
|
32
|
+
/**
|
|
33
|
+
* The shipment-level status. `hasEvents` keeps a shipment with history but no
|
|
34
|
+
* recognized heading in transit, while a shipment with neither stays unknown.
|
|
35
|
+
*/
|
|
36
|
+
export declare function shipmentStatus(rawStatus: unknown, hasEvents: boolean): {
|
|
37
|
+
status: CarrierResult['status'];
|
|
38
|
+
text: string;
|
|
39
|
+
};
|
|
40
|
+
export {};
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/** Lower-cased, accent-free text, for language-independent matching. */
|
|
2
|
+
export function plainText(raw) {
|
|
3
|
+
return String(raw ?? '')
|
|
4
|
+
.toLocaleLowerCase()
|
|
5
|
+
.normalize('NFKD')
|
|
6
|
+
.replace(/\p{M}/gu, '');
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Event wording rules, in priority order. The first match wins, so
|
|
10
|
+
* "no entregado" is classified before the "entregado" it contains, and a
|
|
11
|
+
* rescheduled delivery appointment ("fecha de entrega", "cita") never counts
|
|
12
|
+
* as a delivery.
|
|
13
|
+
*/
|
|
14
|
+
export const EVENT_RULES = [
|
|
15
|
+
{ stage: 'exception', description: 'Shipment exception', needles: ['incidencia', 'averia', 'danad', 'rechazad', 'direccion incorrecta'] },
|
|
16
|
+
{ stage: 'failed_attempt', description: 'Delivery attempt was unsuccessful', needles: ['no entreg', 'entrega fallida', 'failed delivery', 'unsuccessful'] },
|
|
17
|
+
{ stage: 'returned', description: 'Shipment returned', needles: ['devol', 'retorn', 'return', 'retour'] },
|
|
18
|
+
{ stage: 'in_transit', description: 'Delivery appointment updated', needles: ['fecha de entrega', 'cita', 'appointment', 'avis de livraison'] },
|
|
19
|
+
{ stage: 'delivered', description: 'Delivered', needles: ['entregado', 'entregada', 'delivered', 'zugestellt', 'consegnat'] },
|
|
20
|
+
{ stage: 'out_for_delivery', description: 'Out for delivery', needles: ['reparto', 'proceso de entrega', 'out for delivery', 'in zustellung'] },
|
|
21
|
+
{ stage: 'ready_for_pickup', description: 'Ready for pickup', needles: ['recogida', 'ready for pickup', 'ready for collection', 'abholbereit'] },
|
|
22
|
+
{ stage: 'customs', description: 'Customs processing', needles: ['aduana', 'customs', 'clearance', 'zoll'] },
|
|
23
|
+
{ stage: 'in_transit', description: 'Shipment departed a Dachser facility', needles: ['salida', 'departed', 'outbound'] },
|
|
24
|
+
{ stage: 'in_transit', description: 'Shipment arrived at a Dachser facility', needles: ['llegada', 'arrived', 'inbound'] },
|
|
25
|
+
{ stage: 'accepted', description: 'Shipment accepted by Dachser', needles: ['recogido', 'aceptado', 'picked up', 'accepted'] },
|
|
26
|
+
{ stage: 'registered', description: 'Shipment registered by Dachser', needles: ['registrado', 'creado', 'announced', 'registered', 'information received'] },
|
|
27
|
+
];
|
|
28
|
+
/** The stage and the neutral English wording we show for one event row. */
|
|
29
|
+
export function eventLabel(rawDescription) {
|
|
30
|
+
const value = plainText(rawDescription);
|
|
31
|
+
const matched = EVENT_RULES.find((rule) => rule.needles.some((needle) => value.includes(needle)));
|
|
32
|
+
return matched
|
|
33
|
+
? { stage: matched.stage, description: matched.description }
|
|
34
|
+
: { stage: 'in_transit', description: 'Dachser tracking update' };
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* The shipment-level status. `hasEvents` keeps a shipment with history but no
|
|
38
|
+
* recognized heading in transit, while a shipment with neither stays unknown.
|
|
39
|
+
*/
|
|
40
|
+
export function shipmentStatus(rawStatus, hasEvents) {
|
|
41
|
+
const value = plainText(rawStatus);
|
|
42
|
+
if (['no entreg', 'incidencia', 'averia', 'failed', 'problem', 'devol', 'return', 'retour']
|
|
43
|
+
.some((needle) => value.includes(needle)))
|
|
44
|
+
return { status: 'exception', text: 'Shipment exception' };
|
|
45
|
+
if (['entregado', 'entregada', 'delivered', 'zugestellt', 'consegnat']
|
|
46
|
+
.some((needle) => value.includes(needle)))
|
|
47
|
+
return { status: 'delivered', text: 'Delivered' };
|
|
48
|
+
if (['reparto', 'proceso de entrega', 'out for delivery', 'in zustellung']
|
|
49
|
+
.some((needle) => value.includes(needle)))
|
|
50
|
+
return { status: 'out_for_delivery', text: 'Out for delivery' };
|
|
51
|
+
if (['registrado', 'creado', 'announced', 'registered', 'information received']
|
|
52
|
+
.some((needle) => value.includes(needle)))
|
|
53
|
+
return { status: 'pending', text: 'Shipment registered by Dachser' };
|
|
54
|
+
if (value || hasEvents)
|
|
55
|
+
return { status: 'in_transit', text: 'In transit' };
|
|
56
|
+
return { status: 'unknown', text: 'Tracking update unavailable' };
|
|
57
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"carrier": "dachser",
|
|
3
|
+
"entries": [
|
|
4
|
+
{ "wording": "no entreg… / entrega fallida / failed delivery / unsuccessful", "language": "mul", "stage": "failed_attempt", "confirmedBy": "fixture", "firstSeen": "2026-09-10", "note": "Checked before every delivery word, because 'no entregado' contains 'entregado'." },
|
|
5
|
+
{ "wording": "incidencia / averia / dañad… / rechazad… / dirección incorrecta", "language": "mul", "stage": "exception", "confirmedBy": "prior-art", "firstSeen": "2026-09-12", "note": "Checked before the failed-attempt rule. Reclassified to exception 2026-09-12." },
|
|
6
|
+
{ "wording": "devol… / retorn… / return / retour", "language": "mul", "stage": "returned", "confirmedBy": "prior-art", "firstSeen": "2026-09-10", "note": "" },
|
|
7
|
+
{ "wording": "fecha de entrega / cita / appointment / avis de livraison", "language": "mul", "stage": "in_transit", "confirmedBy": "fixture", "firstSeen": "2026-09-10", "note": "A rescheduled delivery appointment is a future date, never a delivery." },
|
|
8
|
+
{ "wording": "entregado / entregada / delivered / zugestellt / consegnat…", "language": "mul", "stage": "delivered", "confirmedBy": "fixture", "firstSeen": "2026-09-10", "note": "" },
|
|
9
|
+
{ "wording": "reparto / proceso de entrega / out for delivery / in Zustellung", "language": "mul", "stage": "out_for_delivery", "confirmedBy": "prior-art", "firstSeen": "2026-09-10", "note": "" },
|
|
10
|
+
{ "wording": "recogida / ready for pickup / ready for collection / abholbereit", "language": "mul", "stage": "ready_for_pickup", "confirmedBy": "prior-art", "firstSeen": "2026-09-10", "note": "" },
|
|
11
|
+
{ "wording": "aduana / customs / clearance / Zoll", "language": "mul", "stage": "customs", "confirmedBy": "prior-art", "firstSeen": "2026-09-10", "note": "" },
|
|
12
|
+
{ "wording": "salida / departed / outbound", "language": "mul", "stage": "in_transit", "confirmedBy": "fixture", "firstSeen": "2026-09-10", "note": "Reported as 'Shipment departed a Dachser facility'." },
|
|
13
|
+
{ "wording": "llegada / arrived / inbound", "language": "mul", "stage": "in_transit", "confirmedBy": "fixture", "firstSeen": "2026-09-10", "note": "Reported as 'Shipment arrived at a Dachser facility'." },
|
|
14
|
+
{ "wording": "recogido / aceptado / picked up / accepted", "language": "mul", "stage": "accepted", "confirmedBy": "fixture", "firstSeen": "2026-09-10", "note": "" },
|
|
15
|
+
{ "wording": "registrado / creado / announced / registered / information received", "language": "mul", "stage": "registered", "confirmedBy": "fixture", "firstSeen": "2026-09-10", "note": "" },
|
|
16
|
+
{ "wording": "any other event wording", "stage": "in_transit", "confirmedBy": "prior-art", "firstSeen": "2026-09-10", "note": "Reported as 'Dachser tracking update'; the raw Spanish wording is not retained." }
|
|
17
|
+
]
|
|
18
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { AdapterFactory, TrackingContext } from '../../core/adapter/index.js';
|
|
2
|
+
import { type StepRecorder } from '../../core/telemetry/index.js';
|
|
3
|
+
export declare class DelhiveryTracker {
|
|
4
|
+
private readonly options;
|
|
5
|
+
constructor(options?: {
|
|
6
|
+
fetcher?: typeof fetch;
|
|
7
|
+
recorder?: StepRecorder;
|
|
8
|
+
});
|
|
9
|
+
fetch(raw: string, context?: TrackingContext): Promise<import("../../index.js").CarrierResult>;
|
|
10
|
+
}
|
|
11
|
+
export declare const adapter: AdapterFactory;
|