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,37 @@
|
|
|
1
|
+
import { brandCarrierIds, carrierIdFromName } from '../../core/catalog/hints.js';
|
|
2
|
+
import { detectCarrierMatch } from '../../core/detection/index.js';
|
|
3
|
+
export { isKnownCarrierName } from '../../core/catalog/hints.js';
|
|
4
|
+
/**
|
|
5
|
+
* A bare brand ("DPD Group") names several catalog networks; the number can
|
|
6
|
+
* still pick one. Keep the networks whose detection rules match it, then the
|
|
7
|
+
* one a preferred rule backs, such as a DPD depot range. Anything else stays
|
|
8
|
+
* unresolved rather than guessed.
|
|
9
|
+
*/
|
|
10
|
+
export function brandCarrierForNumber(name, trackingNumber) {
|
|
11
|
+
const networks = brandCarrierIds(name);
|
|
12
|
+
if (!networks.length)
|
|
13
|
+
return undefined;
|
|
14
|
+
const detected = detectCarrierMatch(trackingNumber);
|
|
15
|
+
const matching = networks.filter((id) => detected.candidates.includes(id));
|
|
16
|
+
if (matching.length === 1)
|
|
17
|
+
return matching[0];
|
|
18
|
+
const preferred = matching.filter((id) => detected.preferred.includes(id));
|
|
19
|
+
return preferred.length === 1 ? preferred[0] : undefined;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Names are hints only. A direct adapter must confirm the shipment before
|
|
23
|
+
* adoption. The looked-up number resolves a bare brand name.
|
|
24
|
+
*/
|
|
25
|
+
export function universalCarrierHints(raw, trackingNumber) {
|
|
26
|
+
const names = [...new Set(raw.filter((value) => typeof value === 'string'
|
|
27
|
+
&& value.length <= 80 && /^[\p{L}\p{N} .&'()-]+$/u.test(value)).map((value) => value.trim()))].filter(Boolean).slice(0, 10);
|
|
28
|
+
const detected = new Set();
|
|
29
|
+
for (const name of names) {
|
|
30
|
+
const carrier = carrierIdFromName(name) ?? (trackingNumber ? brandCarrierForNumber(name, trackingNumber) : undefined);
|
|
31
|
+
if (carrier)
|
|
32
|
+
detected.add(carrier);
|
|
33
|
+
}
|
|
34
|
+
return { reported_carriers: names,
|
|
35
|
+
...(names.length === 1 && detected.size === 1 ? { discovered_carrier: [...detected][0] } : {}),
|
|
36
|
+
};
|
|
37
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { Stage } from '../../generated/catalog.js';
|
|
2
|
+
import type { CarrierEvent, CarrierResult } from '../../core/result/index.js';
|
|
3
|
+
export type UniversalSource = '17TRACK' | 'ParcelsApp' | 'Postal Ninja' | 'Ship24' | 'UPU';
|
|
4
|
+
export declare function numberOf(raw: string): string;
|
|
5
|
+
export declare function text(value: unknown): string;
|
|
6
|
+
export declare function isNotice(description: string): boolean;
|
|
7
|
+
export declare function hasPrivateDeliveryDetails(description: string): boolean;
|
|
8
|
+
export declare function eventStage(description: string): Stage | undefined;
|
|
9
|
+
export declare function event(time: unknown, description: unknown, stage?: unknown): CarrierEvent | null;
|
|
10
|
+
/**
|
|
11
|
+
* Like event(), but a scan without an offset keeps its wall time as local_time
|
|
12
|
+
* instead of failing the whole shipment. Never invents a UTC instant.
|
|
13
|
+
*/
|
|
14
|
+
export declare function localEvent(time: unknown, description: unknown, stage?: unknown): CarrierEvent | null;
|
|
15
|
+
export declare function result(events: CarrierEvent[], source: UniversalSource, preserveOrder?: boolean): CarrierResult;
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What the universal providers share once a payload has been read: the
|
|
3
|
+
* tracking-number guard, the text and notice filters, the event builders with
|
|
4
|
+
* their timezone policy, and the result projection that sorts, deduplicates
|
|
5
|
+
* and summarizes a history.
|
|
6
|
+
*
|
|
7
|
+
* The wording -> stage logic below is provider vocabulary (Ship24, ParcelsApp,
|
|
8
|
+
* 17TRACK and Postal Ninja all render the same aggregated scans), not a
|
|
9
|
+
* carrier status map. It is kept here unchanged while the classifiers are
|
|
10
|
+
* merged in a later step.
|
|
11
|
+
*/
|
|
12
|
+
import { DateTime } from 'luxon';
|
|
13
|
+
import { trackingLanguageStage } from '../../core/status/index.js';
|
|
14
|
+
import { nonterminalEnglishReturn } from '../../core/status/language.js';
|
|
15
|
+
const STAGES = {
|
|
16
|
+
InfoReceived: 'registered', InTransit: 'in_transit', AvailableForPickup: 'ready_for_pickup',
|
|
17
|
+
OutForDelivery: 'out_for_delivery', DeliveryFailure: 'failed_attempt', Delivered: 'delivered',
|
|
18
|
+
};
|
|
19
|
+
export function numberOf(raw) {
|
|
20
|
+
const number = raw.toUpperCase().replace(/[\s.-]/g, '');
|
|
21
|
+
if (!/^(?=.*\d)[A-Z0-9]{4,40}$/.test(number))
|
|
22
|
+
throw new TypeError('Invalid tracking number');
|
|
23
|
+
return number;
|
|
24
|
+
}
|
|
25
|
+
export function text(value) {
|
|
26
|
+
return typeof value === 'string' ? value.replace(/\s+/g, ' ').trim().slice(0, 500) : '';
|
|
27
|
+
}
|
|
28
|
+
// Universal sites mix carrier events with UI notices. Notices must not manufacture a
|
|
29
|
+
// shipment timestamp or make an electronic announcement look like movement.
|
|
30
|
+
export function isNotice(description) {
|
|
31
|
+
return /enter .*?(?:postal|post|zip|phone)|select (?:a |the )?(?:carrier|destination country)|no information about your (?:package|parcel|shipment)|tracking (?:is |temporarily )?unavailable|tracking number (?:not found|is incorrect)|no tracking (?:information|data)|delivery preference|captcha|verify (?:you|your)|enable javascript|try again later/i.test(description);
|
|
32
|
+
}
|
|
33
|
+
// Raw text, so accented and plain spellings are both listed. A carrier receiving the
|
|
34
|
+
// parcel ("Recibido por Estafeta") and German "Firma" (a business) are not private.
|
|
35
|
+
export function hasPrivateDeliveryDetails(description) {
|
|
36
|
+
return /\bpin\s*:|(?:access|security|pickup|collection) code|(?:door|house) (?:no\b|number)|signed (?:for )?by|signature|numero civico|firmato da|signe par|signé par|code (?:de retrait|d['’]acc[eè]s)|num[eé]ro de (?:rue|maison)|abholcode|zugangscode|hausnummer|unterschrieben von|codice (?:di ritiro|di accesso)|c[oó]digo (?:pin|secreto|de (?:recogida|retirada|retiro|acceso|acesso|entrega|seguridad|seguran[cç]a|levantamento|recolha|desbloqueo|desbloqueio|apertura|abertura))|firmad[oa] por|firma del destinatari|assinad[oa] por|assinatura|n[uú]mero (?:de (?:portal|puerta|casa|piso|vivienda|pol[ií]cia)|da (?:porta|casa))|(?:porta|puerta) n\.?\s?[º°]|n\.?\s?[º°] (?:de |da )?porta/i.test(description);
|
|
37
|
+
}
|
|
38
|
+
function sourceEventStage(description, includeBroadMovement = true) {
|
|
39
|
+
// Public aggregators retain the carrier's French wording even in English.
|
|
40
|
+
const french = description.toLowerCase().normalize('NFD').replace(/\p{Diacritic}/gu, '');
|
|
41
|
+
if (/colis en preparation chez l'expediteur/.test(french))
|
|
42
|
+
return 'registered';
|
|
43
|
+
if (/prise en charge de votre colis sur notre site logistique/.test(french))
|
|
44
|
+
return 'accepted';
|
|
45
|
+
if (nonterminalEnglishReturn(description))
|
|
46
|
+
return 'exception';
|
|
47
|
+
if (/returned to (?:the )?sender/i.test(description))
|
|
48
|
+
return 'returned';
|
|
49
|
+
if (/not delivered|could not.*deliver|unable to deliver|delivery (?:attempt|failed)/i.test(description))
|
|
50
|
+
return 'failed_attempt';
|
|
51
|
+
// Carrier-reported problems that are neither a missed attempt nor a return.
|
|
52
|
+
if (/damaged|broken in transit|lost in transit|(?:package|parcel|shipment) (?:is )?lost|refused(?: by)?|rejected by (?:the )?recipient|(?:incorrect|incomplete|insufficient|unknown|invalid) address|address (?:incorrect|incomplete|insufficient|unknown|invalid)|addressee (?:unknown|cannot be located)|delivery exception|shipment exception|carrier exception|held (?:by|in|at) customs|customs (?:issue|problem)|action required|awaiting instructions|(?:shipment|parcel) (?:held|on hold)/i.test(description))
|
|
53
|
+
return 'exception';
|
|
54
|
+
// A voided label was cancelled before shipping, even where a provider files
|
|
55
|
+
// it as transit (17TRACK's generic code). Exact wording only, so a relabel
|
|
56
|
+
// ("label voided, new label created") is not read as a cancellation.
|
|
57
|
+
if (/^(?:parcel|package|shipment|(?:shipping )?label) (?:(?:has been|was|is) )?void(?:ed)?[.!]?$/i.test(description))
|
|
58
|
+
return 'exception';
|
|
59
|
+
if (/delivered to (?:the )?(?:local carrier|delivery partner|post office)/i.test(description))
|
|
60
|
+
return 'in_transit';
|
|
61
|
+
if (/will be available for (?:pickup|collection)/i.test(description))
|
|
62
|
+
return 'in_transit';
|
|
63
|
+
// Sender pre-advice such as Quickpac's "Shipment recorded by sender (data delivered)".
|
|
64
|
+
if (/will be delivered|being prepared by the sender|recorded by (?:the )?(?:foreign )?sender|\bdata delivered\b|en route to .*awaiting processing/i.test(description))
|
|
65
|
+
return 'registered';
|
|
66
|
+
// The bare word also appears in handoffs, forecasts and negations ("delivered
|
|
67
|
+
// to airline", "expected to be delivered", "not yet delivered"); those follow
|
|
68
|
+
// the language rules instead of reading as a delivery.
|
|
69
|
+
if (/\bdelivered\b|delivery completed/i.test(description)
|
|
70
|
+
&& [undefined, 'delivered'].includes(trackingLanguageStage(description)))
|
|
71
|
+
return 'delivered';
|
|
72
|
+
if (/ready for (?:pickup|collection)|available for (?:pickup|collection)/i.test(description))
|
|
73
|
+
return 'ready_for_pickup';
|
|
74
|
+
// "The status will be updated once shipment is out for delivery" is not the round itself.
|
|
75
|
+
if (/out for delivery/i.test(description)
|
|
76
|
+
&& !/(?:once|when|as soon as) (?:the |your )?(?:shipment|parcel|package|item) is out for delivery/i.test(description))
|
|
77
|
+
return 'out_for_delivery';
|
|
78
|
+
if (/clearance (?:processing )?completed|customs (?:cleared|released)/i.test(description))
|
|
79
|
+
return 'in_transit';
|
|
80
|
+
if (/customs|clearance/i.test(description))
|
|
81
|
+
return 'customs';
|
|
82
|
+
if (/instruction data.*provided.*electronically|electronic information|information (?:received|submitted)|label (?:created|printed)|pre.?advice|shipment announced/i.test(description))
|
|
83
|
+
return 'registered';
|
|
84
|
+
if (/will be transported to the destination country/i.test(description))
|
|
85
|
+
return 'in_transit';
|
|
86
|
+
if (!includeBroadMovement)
|
|
87
|
+
return undefined;
|
|
88
|
+
if (/package received at dhl ecommerce|^pick-up was successful[.!]?$|accepted|collected|picked up|handed over/i.test(description))
|
|
89
|
+
return 'accepted';
|
|
90
|
+
if (/transit|arrived|departed|processed|processing completed at origin|sorting|sorted|transport|dispatched|en route|loaded to movement/i.test(description))
|
|
91
|
+
return 'in_transit';
|
|
92
|
+
return undefined;
|
|
93
|
+
}
|
|
94
|
+
export function eventStage(description) {
|
|
95
|
+
return sourceEventStage(description, false) ?? trackingLanguageStage(description) ?? sourceEventStage(description);
|
|
96
|
+
}
|
|
97
|
+
const EXPLICIT_OFFSET = /(?:Z|[+-]\d{2}:\d{2})$/;
|
|
98
|
+
const LOCAL_WALL_TIME = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}(?::\d{2}(?:\.\d+)?)?$/;
|
|
99
|
+
function describe(description, stage) {
|
|
100
|
+
const label = text(description);
|
|
101
|
+
if (!label || isNotice(label))
|
|
102
|
+
return null;
|
|
103
|
+
const declared = typeof stage === 'string' && Object.hasOwn(STAGES, stage) ? STAGES[stage] : undefined;
|
|
104
|
+
// Established source semantics (e.g. handoff/negation) remain first. A real
|
|
105
|
+
// provider stage outranks the new intuitive translation fallback.
|
|
106
|
+
const resolved = sourceEventStage(label, false) ?? declared ?? trackingLanguageStage(label) ?? sourceEventStage(label);
|
|
107
|
+
if (resolved !== 'delivered' && hasPrivateDeliveryDetails(label))
|
|
108
|
+
return null;
|
|
109
|
+
// Delivery descriptions can include signatures, access codes or door numbers.
|
|
110
|
+
return { description: resolved === 'delivered' ? 'Delivered' : label, stage: resolved ?? 'pending' };
|
|
111
|
+
}
|
|
112
|
+
export function event(time, description, stage) {
|
|
113
|
+
const described = describe(description, stage);
|
|
114
|
+
if (!described)
|
|
115
|
+
return null;
|
|
116
|
+
// Require an explicit offset: universal events can originate in any timezone.
|
|
117
|
+
if (typeof time !== 'string' || !EXPLICIT_OFFSET.test(time)) {
|
|
118
|
+
throw new TypeError('Tracking event has no valid timezone');
|
|
119
|
+
}
|
|
120
|
+
const date = DateTime.fromISO(time, { setZone: true });
|
|
121
|
+
if (!date.isValid)
|
|
122
|
+
throw new TypeError('Tracking event has an invalid timestamp');
|
|
123
|
+
return { time: date.toUTC().toISO(), ...described };
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Like event(), but a scan without an offset keeps its wall time as local_time
|
|
127
|
+
* instead of failing the whole shipment. Never invents a UTC instant.
|
|
128
|
+
*/
|
|
129
|
+
export function localEvent(time, description, stage) {
|
|
130
|
+
if (typeof time === 'string' && EXPLICIT_OFFSET.test(time))
|
|
131
|
+
return event(time, description, stage);
|
|
132
|
+
const described = describe(description, stage);
|
|
133
|
+
if (!described)
|
|
134
|
+
return null;
|
|
135
|
+
if (typeof time !== 'string' || !LOCAL_WALL_TIME.test(time) || !DateTime.fromISO(time, { zone: 'UTC' }).isValid) {
|
|
136
|
+
throw new TypeError('Tracking event has an invalid timestamp');
|
|
137
|
+
}
|
|
138
|
+
return { local_time: time, ...described };
|
|
139
|
+
}
|
|
140
|
+
function moment(value) {
|
|
141
|
+
return value.time ?? (typeof value.local_time === 'string' ? value.local_time : '');
|
|
142
|
+
}
|
|
143
|
+
export function result(events, source, preserveOrder = false) {
|
|
144
|
+
// Wall times sort alongside UTC instants only approximately; providers that
|
|
145
|
+
// omit offsets everywhere pass preserveOrder instead.
|
|
146
|
+
const unique = [...new Map(events.map((e) => [`${moment(e)}|${e.description}`, e])).values()]
|
|
147
|
+
.sort((a, b) => preserveOrder ? 0 : moment(b).localeCompare(moment(a))).slice(0, 100);
|
|
148
|
+
if (!unique.length)
|
|
149
|
+
throw new TypeError('No usable tracking events');
|
|
150
|
+
const current = unique.find((e) => e.stage && e.stage !== 'pending')?.stage;
|
|
151
|
+
// Unknown wording can be displayed, but must not imply movement.
|
|
152
|
+
const status = current === 'delivered' ? 'delivered'
|
|
153
|
+
: current === 'registered' || !current ? 'pending'
|
|
154
|
+
: current === 'out_for_delivery' || current === 'ready_for_pickup' ? 'out_for_delivery'
|
|
155
|
+
: ['returned', 'failed_attempt', 'exception'].includes(current) ? 'exception' : 'in_transit';
|
|
156
|
+
return {
|
|
157
|
+
status, current_stage: current ?? 'pending', last_status_text: unique[0].description,
|
|
158
|
+
last_update: unique[0].time ?? null, expected_delivery: null, timezone: 'UTC',
|
|
159
|
+
tracking_provider: source, events: unique,
|
|
160
|
+
};
|
|
161
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Carrier scan vocabularies for histories a universal provider relays.
|
|
3
|
+
*
|
|
4
|
+
* Some carriers reach us only through aggregators, which pass the carrier's own
|
|
5
|
+
* scan labels through, sometimes machine-translated. When the provider names
|
|
6
|
+
* the carrier of a scan and that carrier has a vocabulary, the label's stage and
|
|
7
|
+
* stored wording come from it rather than from the shared wording rules.
|
|
8
|
+
*/
|
|
9
|
+
import type { CarrierEvent } from '../../core/result/index.js';
|
|
10
|
+
import type { Stage } from '../../core/status/index.js';
|
|
11
|
+
export interface CarrierScan {
|
|
12
|
+
stage: Stage;
|
|
13
|
+
wording: string;
|
|
14
|
+
returnLeg?: true;
|
|
15
|
+
}
|
|
16
|
+
/** The vocabulary entry for one relayed label, when its carrier has a vocabulary. */
|
|
17
|
+
export declare function carrierScan(carrier: string | undefined, label: string): CarrierScan | undefined;
|
|
18
|
+
/** Rewrites the delivery-side scans that follow a vocabulary return scan. */
|
|
19
|
+
export declare function markReturnLeg(scans: ReadonlyArray<{
|
|
20
|
+
event: CarrierEvent;
|
|
21
|
+
scan: CarrierScan;
|
|
22
|
+
}>): void;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { ytoScan } from '../../carriers/yto/status.js';
|
|
2
|
+
const VOCABULARIES = {
|
|
3
|
+
yto: ytoScan,
|
|
4
|
+
};
|
|
5
|
+
/** The vocabulary entry for one relayed label, when its carrier has a vocabulary. */
|
|
6
|
+
export function carrierScan(carrier, label) {
|
|
7
|
+
return carrier && Object.hasOwn(VOCABULARIES, carrier) ? VOCABULARIES[carrier](label) : undefined;
|
|
8
|
+
}
|
|
9
|
+
// After the carrier's own return scan, its delivery-side scans are the trip
|
|
10
|
+
// back: the sender signing for the parcel is a return, not a delivery.
|
|
11
|
+
const RETURN_LEG = {
|
|
12
|
+
out_for_delivery: 'Out for delivery back to the sender',
|
|
13
|
+
ready_for_pickup: 'In a parcel locker or station on its way back',
|
|
14
|
+
delivered: 'Returned to the sender',
|
|
15
|
+
};
|
|
16
|
+
/** Rewrites the delivery-side scans that follow a vocabulary return scan. */
|
|
17
|
+
export function markReturnLeg(scans) {
|
|
18
|
+
const started = scans.filter(({ scan }) => scan.returnLeg || scan.stage === 'returned')
|
|
19
|
+
.map(({ event }) => event.time ?? '').filter(Boolean).sort()[0];
|
|
20
|
+
if (!started)
|
|
21
|
+
return;
|
|
22
|
+
for (const { event, scan } of scans) {
|
|
23
|
+
if ((event.time ?? '') < started)
|
|
24
|
+
continue;
|
|
25
|
+
const wording = RETURN_LEG[scan.stage];
|
|
26
|
+
Object.assign(event, { provider_leg: 'return' }, wording ? { description: wording,
|
|
27
|
+
stage: scan.stage === 'delivered' ? 'returned' : scan.stage } : {});
|
|
28
|
+
}
|
|
29
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { AdapterFactory } from '../../core/adapter/index.js';
|
|
2
|
+
import type { CarrierResult } from '../../core/result/index.js';
|
|
3
|
+
import type { StepRecorder } from '../../core/telemetry/index.js';
|
|
4
|
+
import { type UniversalBrowserOptions } from '../../core/transport/browser.js';
|
|
5
|
+
import { Ship24HttpClient } from './http.js';
|
|
6
|
+
export declare function parseShip24Response(payload: unknown, trackingNumber: string, timezone?: string | null): CarrierResult;
|
|
7
|
+
export interface Ship24Options extends UniversalBrowserOptions {
|
|
8
|
+
/** The signed HTTP client for the direct tier; without one the browser tier runs alone. */
|
|
9
|
+
httpClient?: Ship24HttpClient | null;
|
|
10
|
+
recorder?: StepRecorder;
|
|
11
|
+
}
|
|
12
|
+
export declare class Ship24Tracker {
|
|
13
|
+
readonly options: Ship24Options;
|
|
14
|
+
constructor(options?: Ship24Options);
|
|
15
|
+
fetch(trackingNumber: string, budgetMs?: number, timezone?: string | null): Promise<CarrierResult>;
|
|
16
|
+
}
|
|
17
|
+
export declare const adapter: AdapterFactory;
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ship24 (ship24.com), a universal aggregator and the first discovery
|
|
3
|
+
* provider.
|
|
4
|
+
*
|
|
5
|
+
* Two tiers: `direct` is one signed anonymous JSON POST per lookup (see
|
|
6
|
+
* http.ts), `browser` loads the public tracking page in a local Chromium
|
|
7
|
+
* session and reads the same API response from it. The browser tier only runs
|
|
8
|
+
* when the direct tier failed for a reason a browser can repair: a rate limit
|
|
9
|
+
* or a server outage is reported as it is, so the router's backoff is not
|
|
10
|
+
* amplified into a second request, and a number the aggregator does not know
|
|
11
|
+
* stays unknown to the page that asks the same API.
|
|
12
|
+
*/
|
|
13
|
+
import { DateTime } from 'luxon';
|
|
14
|
+
import { carrierTimezone } from '../../core/catalog/index.js';
|
|
15
|
+
import { brandTimeZones, carrierIdFromName, carrierNameCountryZone } from '../../core/catalog/hints.js';
|
|
16
|
+
import { SchemaError, UpstreamHttpError } from '../../core/errors/index.js';
|
|
17
|
+
import { runSteps } from '../../core/runner/index.js';
|
|
18
|
+
import { scrapeUniversalPage } from '../../core/transport/browser.js';
|
|
19
|
+
import { countryTimeZone, sharedClockZone } from '../../core/time/index.js';
|
|
20
|
+
import { isRecord } from '../../core/types.js';
|
|
21
|
+
import { brandCarrierForNumber, universalCarrierHints } from '../shared/hints.js';
|
|
22
|
+
import { localEvent, numberOf, result } from '../shared/result.js';
|
|
23
|
+
import { Ship24HttpClient } from './http.js';
|
|
24
|
+
const SOURCE = 'Ship24';
|
|
25
|
+
const MAX_EVENTS = 1000;
|
|
26
|
+
const MAX_COURIERS = 20;
|
|
27
|
+
/** The direct tier's own share of the lookup budget; the browser keeps the rest. */
|
|
28
|
+
const DIRECT_BUDGET_MS = 8_000;
|
|
29
|
+
/** A courier name's clock: its catalog carrier's, the country it names, or its brand's shared one. */
|
|
30
|
+
function courierZones(name, number, wall) {
|
|
31
|
+
const carrier = carrierIdFromName(name) ?? brandCarrierForNumber(name, number);
|
|
32
|
+
const zone = carrier ? carrierTimezone(carrier) : 'UTC';
|
|
33
|
+
if (zone !== 'UTC')
|
|
34
|
+
return zone;
|
|
35
|
+
return carrierNameCountryZone(name) ?? sharedClockZone(brandTimeZones(name), wall);
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* The zone of a scan whose timestamp names no offset: it is the scanning
|
|
39
|
+
* carrier's wall clock. Read it in the clock every courier the reply names
|
|
40
|
+
* keeps at that moment (La Poste and its Chronopost leg), else the scan
|
|
41
|
+
* location's country, else the zone routing passes for the parcel's carrier.
|
|
42
|
+
* With none of them it stays a wall time, which the timeline cannot place.
|
|
43
|
+
*/
|
|
44
|
+
function wallZone(couriers, location, number, wall, fallback) {
|
|
45
|
+
const zones = couriers.map((name) => courierZones(name, number, wall));
|
|
46
|
+
const named = zones.length && zones.every((zone) => zone !== null) ? sharedClockZone(zones, wall) : null;
|
|
47
|
+
if (named)
|
|
48
|
+
return named;
|
|
49
|
+
const country = typeof location === 'string' ? location.split(',').at(-1) : undefined;
|
|
50
|
+
return countryTimeZone(country) ?? fallback;
|
|
51
|
+
}
|
|
52
|
+
export function parseShip24Response(payload, trackingNumber, timezone = null) {
|
|
53
|
+
const number = numberOf(trackingNumber);
|
|
54
|
+
if (!isRecord(payload) || !isRecord(payload.data) || payload.data.tracking_number !== number
|
|
55
|
+
|| payload.data.error || !Array.isArray(payload.data.events) || payload.data.events.length > MAX_EVENTS) {
|
|
56
|
+
throw new SchemaError(SOURCE, 'Ship24 has no matching shipment history');
|
|
57
|
+
}
|
|
58
|
+
// The public frontend renders couriers[].translation.name. Keep names only;
|
|
59
|
+
// website/phone fields and alternate numbers are not needed for discovery.
|
|
60
|
+
const couriers = Array.isArray(payload.data.couriers) ? payload.data.couriers.slice(0, MAX_COURIERS) : [];
|
|
61
|
+
const names = universalCarrierHints(couriers.map((courier) => isRecord(courier) && isRecord(courier.translation) ? courier.translation.name : undefined), number);
|
|
62
|
+
const events = [];
|
|
63
|
+
for (const raw of payload.data.events) {
|
|
64
|
+
if (!isRecord(raw))
|
|
65
|
+
throw new SchemaError(SOURCE, 'Ship24 returned an invalid event');
|
|
66
|
+
// datetime can end in Z while still containing the carrier's local time.
|
|
67
|
+
// timestamp carries the real offset (verified against the public web app),
|
|
68
|
+
// except for some carrier legs (Chronopost) that omit it entirely.
|
|
69
|
+
const parsed = localEvent(raw.timestamp, raw.status, raw.dispatch_code_id === 7 ? 'Delivered' : undefined);
|
|
70
|
+
if (!parsed)
|
|
71
|
+
continue;
|
|
72
|
+
const wall = typeof parsed.local_time === 'string' ? parsed.local_time : null;
|
|
73
|
+
const zone = wall ? wallZone(names.reported_carriers, raw.location, number, wall, timezone) : null;
|
|
74
|
+
const instant = wall && zone ? DateTime.fromISO(wall, { zone }) : null;
|
|
75
|
+
if (instant?.isValid) {
|
|
76
|
+
const timed = { ...parsed, time: instant.toUTC().toISO() };
|
|
77
|
+
delete timed.local_time;
|
|
78
|
+
events.push(timed);
|
|
79
|
+
}
|
|
80
|
+
else
|
|
81
|
+
events.push(parsed);
|
|
82
|
+
}
|
|
83
|
+
return { ...result(events, SOURCE), ...names };
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* A browser cannot repair a rate limit or a server outage: keep the original
|
|
87
|
+
* status and Retry-After for the router's backoff instead of asking twice.
|
|
88
|
+
* Nor can it find a parcel the API answered 404 for: the page waits for the
|
|
89
|
+
* same reply, so every such fallback only burned the rest of the budget.
|
|
90
|
+
*/
|
|
91
|
+
function browserCanRecover(error) {
|
|
92
|
+
return !(error instanceof UpstreamHttpError
|
|
93
|
+
&& (error.status === 404 || error.status === 410 || error.status === 429 || error.status >= 500));
|
|
94
|
+
}
|
|
95
|
+
export class Ship24Tracker {
|
|
96
|
+
options;
|
|
97
|
+
constructor(options = {}) {
|
|
98
|
+
this.options = options;
|
|
99
|
+
}
|
|
100
|
+
async fetch(trackingNumber, budgetMs, timezone = null) {
|
|
101
|
+
const number = numberOf(trackingNumber);
|
|
102
|
+
const timeoutMs = budgetMs ?? this.options.timeoutMs ?? 45_000;
|
|
103
|
+
if (!Number.isFinite(timeoutMs) || timeoutMs <= 0 || timeoutMs > 60_000)
|
|
104
|
+
throw new TypeError('Ship24 timeout must be between 1 and 60000 ms');
|
|
105
|
+
const http = this.options.httpClient ?? null;
|
|
106
|
+
return runSteps({ carrier: SOURCE, budgetMs: timeoutMs, recorder: this.options.recorder }, [
|
|
107
|
+
{
|
|
108
|
+
id: 'direct',
|
|
109
|
+
enabled: http !== null,
|
|
110
|
+
run: async ({ remainingMs }) => ({
|
|
111
|
+
...parseShip24Response(await http.fetch(number, Math.max(1, Math.min(DIRECT_BUDGET_MS, Math.floor(remainingMs)))), number, timezone),
|
|
112
|
+
tracking_source: 'structured-web-response',
|
|
113
|
+
}),
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
id: 'browser',
|
|
117
|
+
recovers: browserCanRecover,
|
|
118
|
+
run: async ({ remainingMs }) => ({
|
|
119
|
+
...await scrapeUniversalPage({ executablePath: this.options.executablePath, timeoutMs: Math.max(1, Math.floor(remainingMs)) }, {
|
|
120
|
+
name: SOURCE, url: `https://www.ship24.com/tracking?p=${number}`,
|
|
121
|
+
responseUrl: `https://api.ship24.com/api/parcels/${number}?lang=en`,
|
|
122
|
+
}, (payload) => parseShip24Response(payload, number, timezone)),
|
|
123
|
+
tracking_source: 'browser-session-response',
|
|
124
|
+
}),
|
|
125
|
+
},
|
|
126
|
+
]);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
export const adapter = (environment) => {
|
|
130
|
+
const tracker = new Ship24Tracker({
|
|
131
|
+
httpClient: new Ship24HttpClient(environment.fetcher),
|
|
132
|
+
executablePath: environment.browserExecutablePath ?? undefined,
|
|
133
|
+
recorder: environment.recorder,
|
|
134
|
+
});
|
|
135
|
+
return {
|
|
136
|
+
id: SOURCE,
|
|
137
|
+
steps: ['direct', 'browser'],
|
|
138
|
+
track: (input, context) => tracker.fetch(input.number, context?.budgetMs, input.timezone ?? null),
|
|
139
|
+
};
|
|
140
|
+
};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export declare function ship24Checksum(text: string): number;
|
|
2
|
+
export declare class Ship24HttpClient {
|
|
3
|
+
readonly fetcher?: typeof fetch | undefined;
|
|
4
|
+
constructor(fetcher?: typeof fetch | undefined);
|
|
5
|
+
fetch(number: string, timeoutMs: number): Promise<unknown>;
|
|
6
|
+
}
|
|
7
|
+
export declare const ship24Http: Ship24HttpClient;
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The signed request the public Ship24 web app makes for one parcel.
|
|
3
|
+
*
|
|
4
|
+
* The website builds `x-ship24-token` from a timestamp, an opaque digest, a
|
|
5
|
+
* MurmurHash3 checksum bound to the tracking number and an HMAC over the
|
|
6
|
+
* three. The constants below are public frontend configuration read from the
|
|
7
|
+
* site's own script, not a provisioned API credential: no account, cookie,
|
|
8
|
+
* browser fingerprint or issued token is involved. See README.md.
|
|
9
|
+
*/
|
|
10
|
+
import { createHash, createHmac } from 'node:crypto';
|
|
11
|
+
import { fetchBounded, parseJsonBytes } from '../../core/transport/index.js';
|
|
12
|
+
const PAGE = 'https://www.ship24.com/tracking';
|
|
13
|
+
// Public website checksum configuration, not a provisioned API credential.
|
|
14
|
+
// Source (verified 2026-09-10):
|
|
15
|
+
// https://cdn.ship24.com/assets/main.16f5bc7c0914804e.js
|
|
16
|
+
// getOneParcel's N(...) argument and the first value appended to $zoho_.
|
|
17
|
+
const WEBSITE_SIGNING_KEY = "qxV6SOr2tqw9m36j0-R-ohPt1PAB2et0"; // gitleaks:allow -- public frontend checksum constant, not an API credential
|
|
18
|
+
const WEBSITE_SALT = '\u1780';
|
|
19
|
+
// Standard MurmurHash3 x86/32, used by the public frontend's request checksum.
|
|
20
|
+
export function ship24Checksum(text) {
|
|
21
|
+
const bytes = Buffer.from(text);
|
|
22
|
+
let hash = 0;
|
|
23
|
+
let offset = 0;
|
|
24
|
+
const mix = (value) => {
|
|
25
|
+
value = Math.imul(value, 0xcc9e2d51);
|
|
26
|
+
value = value << 15 | value >>> 17;
|
|
27
|
+
return Math.imul(value, 0x1b873593);
|
|
28
|
+
};
|
|
29
|
+
for (; offset + 4 <= bytes.length; offset += 4) {
|
|
30
|
+
hash ^= mix(bytes.readUInt32LE(offset));
|
|
31
|
+
hash = hash << 13 | hash >>> 19;
|
|
32
|
+
hash = (Math.imul(hash, 5) + 0xe6546b64) | 0;
|
|
33
|
+
}
|
|
34
|
+
let tail = 0;
|
|
35
|
+
for (let index = offset; index < bytes.length; index++)
|
|
36
|
+
tail |= bytes[index] << ((index - offset) * 8);
|
|
37
|
+
if (offset < bytes.length)
|
|
38
|
+
hash ^= mix(tail);
|
|
39
|
+
hash ^= bytes.length;
|
|
40
|
+
hash = Math.imul(hash ^ hash >>> 16, 0x85ebca6b);
|
|
41
|
+
hash = Math.imul(hash ^ hash >>> 13, 0xc2b2ae35);
|
|
42
|
+
return (hash ^ hash >>> 16) >>> 0;
|
|
43
|
+
}
|
|
44
|
+
function token(number) {
|
|
45
|
+
const timestamp = Date.now();
|
|
46
|
+
// The anonymous endpoint accepts an opaque digest; a browser fingerprint is
|
|
47
|
+
// unnecessary. Verified with fresh Node-only requests in the production container.
|
|
48
|
+
const digest = createHash('sha256').update(`delivery-tracker|en-US|${timestamp}`).digest('hex');
|
|
49
|
+
const encoded = Buffer.from(JSON.stringify({
|
|
50
|
+
a: ship24Checksum(number + timestamp + digest.length + WEBSITE_SALT), b: timestamp, c: digest,
|
|
51
|
+
})).toString('base64');
|
|
52
|
+
return `${encoded}.${createHmac('sha256', WEBSITE_SIGNING_KEY).update(encoded).digest('hex')}`;
|
|
53
|
+
}
|
|
54
|
+
export class Ship24HttpClient {
|
|
55
|
+
fetcher;
|
|
56
|
+
constructor(fetcher) {
|
|
57
|
+
this.fetcher = fetcher;
|
|
58
|
+
}
|
|
59
|
+
async fetch(number, timeoutMs) {
|
|
60
|
+
if (!/^(?=.*\d)[A-Z0-9]{4,40}$/.test(number))
|
|
61
|
+
throw new TypeError('Invalid Ship24 tracking number');
|
|
62
|
+
if (!Number.isFinite(timeoutMs) || timeoutMs < 1)
|
|
63
|
+
throw new TypeError('Ship24 HTTP timeout must be positive');
|
|
64
|
+
const { bytes } = await fetchBounded(`https://api.ship24.com/api/parcels/${number}?lang=en`, {
|
|
65
|
+
method: 'POST',
|
|
66
|
+
headers: { 'Content-Type': 'application/json', Origin: 'https://www.ship24.com',
|
|
67
|
+
Referer: PAGE, 'x-ship24-token': token(number) },
|
|
68
|
+
body: JSON.stringify({ userAgent: '', os: 'Linux', browser: 'Unknown', device: 'Unknown',
|
|
69
|
+
os_version: 'unknown', browser_version: 'unknown', deviceType: 'desktop',
|
|
70
|
+
orientation: 'landscape', uL: 'en-US' }),
|
|
71
|
+
}, { provider: 'Ship24 HTTP', fetcher: this.fetcher, timeoutMs: Math.floor(timeoutMs), maxBytes: 2_000_000 });
|
|
72
|
+
return parseJsonBytes(bytes, 'Ship24');
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
export const ship24Http = new Ship24HttpClient();
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export type UniversalSource = 'Ship24' | 'ParcelsApp' | '17TRACK' | 'Postal Ninja' | 'UPU';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The universal discovery chain: what runs when no dedicated carrier adapter
|
|
3
|
+
* can answer for a parcel.
|
|
4
|
+
*
|
|
5
|
+
* Default order is ParcelsApp -> Ship24 -> 17TRACK -> UPU, with Postal Ninja inserted before
|
|
6
|
+
* 17TRACK only when the host enables it. A carrier with coverage evidence
|
|
7
|
+
* (coverage.ts) gets its own order: fuller history first, HTTP before the
|
|
8
|
+
* browser service within a tier, providers that answered with another parcel or
|
|
9
|
+
* refused the format left out. Validated China Post C/L numbers put 17TRACK
|
|
10
|
+
* first. Each provider is asked once per lookup and the first usable history
|
|
11
|
+
* wins; the per-parcel router remembers which provider answered, except UPU
|
|
12
|
+
* stays last and requires a postal S10. The source names are persisted in
|
|
13
|
+
* routing state and must not change.
|
|
14
|
+
*
|
|
15
|
+
* This module owns the order and the aggregate failure; every protocol detail
|
|
16
|
+
* lives in the provider folder next to it.
|
|
17
|
+
*/
|
|
18
|
+
import type { AdapterEnvironment } from '../core/adapter/index.js';
|
|
19
|
+
import type { CarrierResult } from '../core/result/index.js';
|
|
20
|
+
import { type UniversalSource as Source } from './shared/result.js';
|
|
21
|
+
export { parse17TrackResponse, SeventeenTrackLookupError, SeventeenTrackNoHistoryError, SeventeenTrackVerificationError } from './seventeentrack/adapter.js';
|
|
22
|
+
export { parseParcelsAppHtml, parseParcelsAppResponse } from './parcelsapp/adapter.js';
|
|
23
|
+
export { parsePostalNinjaResponse } from './postal-ninja/adapter.js';
|
|
24
|
+
export { parseShip24Response } from './ship24/adapter.js';
|
|
25
|
+
export { TrackingCaptureError } from './shared/capture.js';
|
|
26
|
+
export type { UniversalSource } from './shared/result.js';
|
|
27
|
+
export * from './plan.js';
|
|
28
|
+
interface SourceFailure {
|
|
29
|
+
source: Source;
|
|
30
|
+
reason: string;
|
|
31
|
+
error: unknown;
|
|
32
|
+
}
|
|
33
|
+
export declare class UniversalTrackingError extends AggregateError {
|
|
34
|
+
readonly failures: ReadonlyArray<SourceFailure>;
|
|
35
|
+
constructor(failures: ReadonlyArray<SourceFailure>);
|
|
36
|
+
}
|
|
37
|
+
export interface UniversalTrackerOptions {
|
|
38
|
+
providers?: readonly Source[];
|
|
39
|
+
/** The browser service endpoint; overrides `environment.trawl`. An empty string disables it. */
|
|
40
|
+
trawlUrl?: string;
|
|
41
|
+
timeoutMs?: number;
|
|
42
|
+
fetcher?: typeof fetch;
|
|
43
|
+
executablePath?: string;
|
|
44
|
+
enablePostalNinja?: boolean;
|
|
45
|
+
/** Test seam replacing the two local-browser providers. */
|
|
46
|
+
browserLookup?: (source: 'Postal Ninja' | 'Ship24', number: string) => Promise<CarrierResult>;
|
|
47
|
+
/** What the host gives every adapter: browser service, telemetry sink, flags. */
|
|
48
|
+
environment?: Partial<AdapterEnvironment>;
|
|
49
|
+
}
|
|
50
|
+
export declare class UniversalTracker {
|
|
51
|
+
readonly options: UniversalTrackerOptions;
|
|
52
|
+
private readonly instances;
|
|
53
|
+
constructor(options?: UniversalTrackerOptions);
|
|
54
|
+
/**
|
|
55
|
+
* Look up one number through the whole chain. `postcode` is the parcel's
|
|
56
|
+
* stored delivery postcode, if the user supplied one: it is forwarded into
|
|
57
|
+
* every provider's track input. ParcelsApp submits it as extra[zipcode] on
|
|
58
|
+
* its direct API request; the other providers currently do not consume it.
|
|
59
|
+
*/
|
|
60
|
+
fetch(trackingNumber: string, postcode?: string | null): Promise<CarrierResult>;
|
|
61
|
+
fetchSource(source: Source, trackingNumber: string, timeoutMs?: number, postcode?: string | null, timezone?: string | null, signal?: AbortSignal): Promise<CarrierResult>;
|
|
62
|
+
/** One provider adapter, built from this tracker's environment. */
|
|
63
|
+
private provider;
|
|
64
|
+
private environment;
|
|
65
|
+
private trawl;
|
|
66
|
+
}
|