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,89 @@
|
|
|
1
|
+
/** Validate parcel credentials against the catalog and pure carrier URL validators. */
|
|
2
|
+
import { activeRequirements, carrierDefinition } from './index.js';
|
|
3
|
+
import { isValidMondialRelayBarcode } from '../detection/index.js';
|
|
4
|
+
import { validateDachserTrackingUrl } from './urls.js';
|
|
5
|
+
import { validatePlanzerSharedUrl } from './urls.js';
|
|
6
|
+
export { AUTOMATIC_CARRIER_IDS, CARRIER_NAMES, activeRequirements, carrierAdapter, carrierDefinition, carrierTimezone, requiredRequirements, } from './index.js';
|
|
7
|
+
export { isValidS10TrackingNumber, supportsSwissPostHandoff, } from '../detection/index.js';
|
|
8
|
+
export function normalizeCarrierInputs(carrierId, trackingNumber, trackingUrl, dpdPostcode) {
|
|
9
|
+
const supplied = {
|
|
10
|
+
trackingUrl: trackingUrl.trim() || null,
|
|
11
|
+
dpdPostcode: dpdPostcode.trim() || null,
|
|
12
|
+
};
|
|
13
|
+
const mondialBarcode = carrierId === 'mondial-relay' && /^\d{26}$/.test(trackingNumber);
|
|
14
|
+
if (mondialBarcode && !isValidMondialRelayBarcode(trackingNumber)) {
|
|
15
|
+
throw new TypeError('Invalid Mondial Relay barcode');
|
|
16
|
+
}
|
|
17
|
+
const requirements = new Map(activeRequirements(carrierId, trackingNumber).map((item) => [item.field, item]));
|
|
18
|
+
// Older clients may still supply a postcode for label barcodes. Validate it
|
|
19
|
+
// when present, while allowing the public alias to work without one.
|
|
20
|
+
if (mondialBarcode && supplied.dpdPostcode) {
|
|
21
|
+
requirements.set('dpdPostcode', { field: 'dpdPostcode', validator: 'francePostcode' });
|
|
22
|
+
}
|
|
23
|
+
for (const [field, value] of Object.entries(supplied)) {
|
|
24
|
+
if (value !== null && !requirements.has(field)) {
|
|
25
|
+
if (field === 'trackingUrl') {
|
|
26
|
+
throw new TypeError('A tracking URL is not used for this carrier or tracking number');
|
|
27
|
+
}
|
|
28
|
+
throw new TypeError('A delivery postcode is not used for this carrier');
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
for (const [field, requirement] of requirements) {
|
|
32
|
+
const value = supplied[field];
|
|
33
|
+
if (!value) {
|
|
34
|
+
// An optional input only unlocks extra detail; a supplied one is still checked below.
|
|
35
|
+
if (requirement.optional)
|
|
36
|
+
continue;
|
|
37
|
+
if (field === 'trackingUrl') {
|
|
38
|
+
throw new TypeError(`${carrierDefinition(carrierId).displayName} requires its complete tracking URL`);
|
|
39
|
+
}
|
|
40
|
+
if (requirement.validator === 'swissPostcode') {
|
|
41
|
+
throw new TypeError(`${carrierDefinition(carrierId).displayName} requires the four-digit delivery postcode`);
|
|
42
|
+
}
|
|
43
|
+
if (requirement.validator === 'francePostcode') {
|
|
44
|
+
throw new TypeError(`${carrierDefinition(carrierId).displayName} requires the five-digit delivery postcode`);
|
|
45
|
+
}
|
|
46
|
+
if (requirement.validator === 'swissOrFrancePostcode') {
|
|
47
|
+
throw new TypeError(`${carrierDefinition(carrierId).displayName} requires a four- or five-digit delivery postcode`);
|
|
48
|
+
}
|
|
49
|
+
if (requirement.validator === 'paackPostcode') {
|
|
50
|
+
throw new TypeError('Paack requires the delivery postcode');
|
|
51
|
+
}
|
|
52
|
+
throw new TypeError(`${carrierDefinition(carrierId).displayName} requires the delivery postcode`);
|
|
53
|
+
}
|
|
54
|
+
switch (requirement.validator) {
|
|
55
|
+
case 'planzerSharedUrl':
|
|
56
|
+
supplied[field] = validatePlanzerSharedUrl(value, trackingNumber);
|
|
57
|
+
break;
|
|
58
|
+
case 'dachserCapabilityUrl':
|
|
59
|
+
supplied[field] = validateDachserTrackingUrl(value, trackingNumber);
|
|
60
|
+
break;
|
|
61
|
+
case 'swissPostcode':
|
|
62
|
+
if (!/^\d{4}$/.test(value)) {
|
|
63
|
+
throw new TypeError(`${carrierDefinition(carrierId).displayName} requires the four-digit delivery postcode`);
|
|
64
|
+
}
|
|
65
|
+
break;
|
|
66
|
+
case 'francePostcode':
|
|
67
|
+
if (!/^\d{5}$/.test(value)) {
|
|
68
|
+
throw new TypeError(`${carrierDefinition(carrierId).displayName} requires the five-digit delivery postcode`);
|
|
69
|
+
}
|
|
70
|
+
break;
|
|
71
|
+
case 'swissOrFrancePostcode':
|
|
72
|
+
if (!/^\d{4,5}$/.test(value)) {
|
|
73
|
+
throw new TypeError(`${carrierDefinition(carrierId).displayName} requires a four- or five-digit delivery postcode`);
|
|
74
|
+
}
|
|
75
|
+
break;
|
|
76
|
+
case 'paackPostcode': {
|
|
77
|
+
const rawPostcode = value.toLocaleUpperCase('en-US');
|
|
78
|
+
if (!/^(?=.{3,10}$)(?=.*\d)[A-Z0-9]+(?:[ -][A-Z0-9]+)*$/.test(rawPostcode)) {
|
|
79
|
+
throw new TypeError('Paack requires a valid delivery postcode');
|
|
80
|
+
}
|
|
81
|
+
supplied[field] = rawPostcode.replace(/\s+/g, '');
|
|
82
|
+
break;
|
|
83
|
+
}
|
|
84
|
+
default:
|
|
85
|
+
requirement.validator;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
return supplied;
|
|
89
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Compiled tracking-link rules.
|
|
3
|
+
*
|
|
4
|
+
* What it is: every carrier's `linkRules` with their regexes compiled once, so
|
|
5
|
+
* a pasted URL can be matched against the whole catalog.
|
|
6
|
+
* What it is not: no fetching, no URL following, no provider I/O. Matching a
|
|
7
|
+
* URL against these rules lives in `core/detection`.
|
|
8
|
+
*/
|
|
9
|
+
import type { CarrierId } from '../../generated/catalog.js';
|
|
10
|
+
export interface TrackingLinkRule {
|
|
11
|
+
carrier: CarrierId;
|
|
12
|
+
domains: string[];
|
|
13
|
+
params?: string[];
|
|
14
|
+
path?: RegExp;
|
|
15
|
+
pathPattern?: RegExp;
|
|
16
|
+
fragment?: RegExp;
|
|
17
|
+
detectFromNumber?: boolean;
|
|
18
|
+
keepsCapabilityUrl?: boolean;
|
|
19
|
+
}
|
|
20
|
+
export declare const TRACKING_LINK_RULES: TrackingLinkRule[];
|
|
21
|
+
/** The compiled link rules declared by one carrier. */
|
|
22
|
+
export declare function carrierLinkRules(carrierId: CarrierId): TrackingLinkRule[];
|
|
23
|
+
/** A hostname matches a rule domain exactly or as one of its subdomains. */
|
|
24
|
+
export declare function matchesDomain(hostname: string, domain: string): boolean;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { CARRIER_DEFINITIONS } from './definitions.js';
|
|
2
|
+
export const TRACKING_LINK_RULES = Object.entries(CARRIER_DEFINITIONS)
|
|
3
|
+
.flatMap(([carrier, definition]) => definition.linkRules.map((rule) => ({
|
|
4
|
+
carrier: carrier,
|
|
5
|
+
domains: [...rule.domains],
|
|
6
|
+
params: rule.params ? [...rule.params] : undefined,
|
|
7
|
+
path: rule.path ? new RegExp(rule.path, 'i') : undefined,
|
|
8
|
+
pathPattern: rule.pathPattern ? new RegExp(rule.pathPattern, 'i') : undefined,
|
|
9
|
+
fragment: rule.fragment ? new RegExp(rule.fragment, 'i') : undefined,
|
|
10
|
+
detectFromNumber: rule.detectFromNumber,
|
|
11
|
+
keepsCapabilityUrl: rule.keepsCapabilityUrl,
|
|
12
|
+
})));
|
|
13
|
+
/** The compiled link rules declared by one carrier. */
|
|
14
|
+
export function carrierLinkRules(carrierId) {
|
|
15
|
+
return TRACKING_LINK_RULES.filter((rule) => rule.carrier === carrierId);
|
|
16
|
+
}
|
|
17
|
+
/** A hostname matches a rule domain exactly or as one of its subdomains. */
|
|
18
|
+
export function matchesDomain(hostname, domain) {
|
|
19
|
+
return hostname === domain || hostname.endsWith(`.${domain}`);
|
|
20
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Brands that run several catalog networks ("DPD" is `dpd` and `dpd-fr`).
|
|
3
|
+
*
|
|
4
|
+
* Kept apart from the provider-name hints so browser code can use it without
|
|
5
|
+
* their country tables.
|
|
6
|
+
*/
|
|
7
|
+
export declare const NETWORK_BRANDS: readonly string[];
|
|
8
|
+
/** The multi-network brand a catalog carrier belongs to ("dpd" for `dpd-fr`), if any. */
|
|
9
|
+
export declare function carrierBrand(id: string): string | undefined;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Brands that run several catalog networks ("DPD" is `dpd` and `dpd-fr`).
|
|
3
|
+
*
|
|
4
|
+
* Kept apart from the provider-name hints so browser code can use it without
|
|
5
|
+
* their country tables.
|
|
6
|
+
*/
|
|
7
|
+
// Brands whose other networks keep the brand in front ("DHL Express", "GLS
|
|
8
|
+
// Italy"). "post" is left out: it also starts unrelated names.
|
|
9
|
+
export const NETWORK_BRANDS = ['dhl', 'dpd', 'gls', 'hermes'];
|
|
10
|
+
/** The multi-network brand a catalog carrier belongs to ("dpd" for `dpd-fr`), if any. */
|
|
11
|
+
export function carrierBrand(id) {
|
|
12
|
+
return NETWORK_BRANDS.find((brand) => id === brand || id.startsWith(`${brand}-`));
|
|
13
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { CarrierInputField } from './types.js';
|
|
2
|
+
/** Carriers asked at once. */
|
|
3
|
+
export declare const MAX_RECOGNITIONS = 5;
|
|
4
|
+
export interface RecognitionCandidate {
|
|
5
|
+
carrier: string;
|
|
6
|
+
/** The first input the carrier needs before it can track, if any. */
|
|
7
|
+
needsInput: CarrierInputField | null;
|
|
8
|
+
/** A preferred detection rule backs it with number evidence. */
|
|
9
|
+
preferred: boolean;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* The low-confidence candidates worth asking, best first: the carrier a
|
|
13
|
+
* universal provider named, then the ones number evidence backs, then the
|
|
14
|
+
* catalog's popularity rank. Only carriers that declare `tracking.recognition`
|
|
15
|
+
* qualify. A high-confidence number needs no recognition.
|
|
16
|
+
*/
|
|
17
|
+
export declare function recognitionCandidates(number: string, options?: {
|
|
18
|
+
hint?: string;
|
|
19
|
+
skip?: (carrier: string) => boolean;
|
|
20
|
+
}): RecognitionCandidate[];
|
|
21
|
+
/** The carriers the detect route asks about a number, best first; empty when none can answer. */
|
|
22
|
+
export declare function recognitionAskedCarriers(number: string): string[];
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Which carriers recognition asks about an ambiguous number.
|
|
3
|
+
*
|
|
4
|
+
* What it is: the ranked candidates whose adapter can cheaply say whether it
|
|
5
|
+
* knows a number. The detect route and routing ask them; the Add sheets name
|
|
6
|
+
* them while the answer is on its way.
|
|
7
|
+
* What it is not: no provider I/O. Asking the carriers is the server's job
|
|
8
|
+
* (`src/server/carrierRecognition.ts`).
|
|
9
|
+
*/
|
|
10
|
+
import { CARRIER_RECOGNITION_RANKS } from '../../generated/recognition.js';
|
|
11
|
+
import { detectCarrierMatch } from '../detection/detect.js';
|
|
12
|
+
import { AUTOMATIC_CARRIER_IDS, carrierAdapter, requiredRequirements } from './definitions.js';
|
|
13
|
+
import { carrierBrand } from './networks.js';
|
|
14
|
+
/** Carriers asked at once. */
|
|
15
|
+
export const MAX_RECOGNITIONS = 5;
|
|
16
|
+
/**
|
|
17
|
+
* The low-confidence candidates worth asking, best first: the carrier a
|
|
18
|
+
* universal provider named, then the ones number evidence backs, then the
|
|
19
|
+
* catalog's popularity rank. Only carriers that declare `tracking.recognition`
|
|
20
|
+
* qualify. A high-confidence number needs no recognition.
|
|
21
|
+
*/
|
|
22
|
+
export function recognitionCandidates(number, options = {}) {
|
|
23
|
+
const detected = detectCarrierMatch(number);
|
|
24
|
+
if (detected.confidence !== 'low')
|
|
25
|
+
return [];
|
|
26
|
+
// A carrier the number points to but that cannot be asked (DPD France) keeps
|
|
27
|
+
// its brand's other networks out: DPD's guest API also answers for DPD
|
|
28
|
+
// France parcels, and would file one under DPD Switzerland.
|
|
29
|
+
const shadowed = new Set(detected.preferred
|
|
30
|
+
.filter((carrier) => CARRIER_RECOGNITION_RANKS[carrier] === undefined)
|
|
31
|
+
.map((carrier) => carrierBrand(carrier)).filter(Boolean));
|
|
32
|
+
const score = (carrier) => [
|
|
33
|
+
carrier === options.hint ? 1 : 0,
|
|
34
|
+
detected.preferred.includes(carrier) ? 1 : 0,
|
|
35
|
+
CARRIER_RECOGNITION_RANKS[carrier] ?? 0,
|
|
36
|
+
];
|
|
37
|
+
return detected.candidates
|
|
38
|
+
.filter((carrier) => CARRIER_RECOGNITION_RANKS[carrier] !== undefined && AUTOMATIC_CARRIER_IDS.has(carrier)
|
|
39
|
+
&& carrierAdapter(carrier) !== 'universal' && !shadowed.has(carrierBrand(carrier)) && !options.skip?.(carrier))
|
|
40
|
+
.map((carrier) => ({ carrier, score: score(carrier) }))
|
|
41
|
+
// Array#sort is stable: equal scores keep the catalog order.
|
|
42
|
+
.sort((left, right) => right.score[0] - left.score[0] || right.score[1] - left.score[1] || right.score[2] - left.score[2])
|
|
43
|
+
.map(({ carrier }) => ({
|
|
44
|
+
carrier,
|
|
45
|
+
needsInput: requiredRequirements(carrier, number)[0]?.field ?? null,
|
|
46
|
+
preferred: detected.preferred.includes(carrier),
|
|
47
|
+
}));
|
|
48
|
+
}
|
|
49
|
+
/** The carriers the detect route asks about a number, best first; empty when none can answer. */
|
|
50
|
+
export function recognitionAskedCarriers(number) {
|
|
51
|
+
return recognitionCandidates(number).slice(0, MAX_RECOGNITIONS).map(({ carrier }) => carrier);
|
|
52
|
+
}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Catalog vocabulary.
|
|
3
|
+
*
|
|
4
|
+
* What it is: the shape of a merged `carrier.json` entry and the typed views
|
|
5
|
+
* the application consumes (carrier info, capabilities, input requirements,
|
|
6
|
+
* tracking links).
|
|
7
|
+
* What it is not: no data, no behaviour and no provider I/O; every declaration
|
|
8
|
+
* here is erased at build time.
|
|
9
|
+
*/
|
|
10
|
+
import type { CarrierId } from '../../generated/catalog.js';
|
|
11
|
+
import type { DetectionConfidence } from '../detection/types.js';
|
|
12
|
+
export type CarrierTrackingMode = 'automatic' | 'link-only';
|
|
13
|
+
export type CarrierInputField = 'trackingUrl' | 'dpdPostcode';
|
|
14
|
+
export type CarrierInputValidator = 'planzerSharedUrl' | 'dachserCapabilityUrl' | 'swissPostcode' | 'francePostcode' | 'swissOrFrancePostcode' | 'paackPostcode';
|
|
15
|
+
/** What the "add a parcel" forms render for a carrier that needs extra input. */
|
|
16
|
+
export interface CarrierInputRequirement {
|
|
17
|
+
field: CarrierInputField;
|
|
18
|
+
whenTrackingNumber?: string;
|
|
19
|
+
/** The form may be submitted without it; a supplied value is still checked. */
|
|
20
|
+
optional?: boolean;
|
|
21
|
+
label: string;
|
|
22
|
+
type: 'text' | 'url';
|
|
23
|
+
placeholder?: string;
|
|
24
|
+
help?: string;
|
|
25
|
+
pattern?: string;
|
|
26
|
+
maxLength?: number;
|
|
27
|
+
inputMode?: 'numeric' | 'text' | 'url';
|
|
28
|
+
autoComplete?: string;
|
|
29
|
+
}
|
|
30
|
+
/** What the server checks that extra input against. */
|
|
31
|
+
export interface CarrierRequirementRule {
|
|
32
|
+
field: CarrierInputField;
|
|
33
|
+
validator: CarrierInputValidator;
|
|
34
|
+
whenTrackingNumber?: string;
|
|
35
|
+
optional?: boolean;
|
|
36
|
+
}
|
|
37
|
+
export interface CarrierCatalogRequirement extends CarrierInputRequirement, CarrierRequirementRule {
|
|
38
|
+
}
|
|
39
|
+
export interface CarrierCapabilities {
|
|
40
|
+
tracking: {
|
|
41
|
+
mode: CarrierTrackingMode;
|
|
42
|
+
adapter: string | null;
|
|
43
|
+
requirements: CarrierInputRequirement[];
|
|
44
|
+
};
|
|
45
|
+
selectable: boolean;
|
|
46
|
+
timezone: string;
|
|
47
|
+
}
|
|
48
|
+
export interface CarrierInfo {
|
|
49
|
+
id: CarrierId;
|
|
50
|
+
name: string;
|
|
51
|
+
/** Other names the carrier is known by, searched by the carrier pickers. */
|
|
52
|
+
aliases: readonly string[];
|
|
53
|
+
/** ISO codes of the countries it delivers in under its own name, home first. */
|
|
54
|
+
countries: readonly string[];
|
|
55
|
+
trackingSiteName?: string;
|
|
56
|
+
/** Accent used for the carrier chip in the UI. */
|
|
57
|
+
color: string;
|
|
58
|
+
trackingUrl?: (trackingNumber: string) => string;
|
|
59
|
+
capabilities: CarrierCapabilities;
|
|
60
|
+
}
|
|
61
|
+
export interface DetectionRule {
|
|
62
|
+
pattern: string;
|
|
63
|
+
/** Additional condition on the input before separators are removed. */
|
|
64
|
+
rawPattern?: string;
|
|
65
|
+
confidence: Exclude<DetectionConfidence, 'none'>;
|
|
66
|
+
checksum?: 's10' | 'mondial-relay' | 'hermes' | 'gls';
|
|
67
|
+
/** Low confidence only: number evidence that lists this carrier first among suggestions. */
|
|
68
|
+
preferred?: boolean;
|
|
69
|
+
}
|
|
70
|
+
/** A link rule as it is written in the catalog, before its regexes compile. */
|
|
71
|
+
export interface RawTrackingLinkRule {
|
|
72
|
+
domains: readonly string[];
|
|
73
|
+
params?: readonly string[];
|
|
74
|
+
path?: string;
|
|
75
|
+
pathPattern?: string;
|
|
76
|
+
fragment?: string;
|
|
77
|
+
detectFromNumber?: boolean;
|
|
78
|
+
keepsCapabilityUrl?: boolean;
|
|
79
|
+
}
|
|
80
|
+
/** One merged catalog entry: everything the app knows about a carrier. */
|
|
81
|
+
export interface CarrierDefinition {
|
|
82
|
+
displayName: string;
|
|
83
|
+
displayNames?: Record<string, string>;
|
|
84
|
+
aliases?: readonly string[];
|
|
85
|
+
countries?: readonly string[];
|
|
86
|
+
trackingSiteName?: string;
|
|
87
|
+
color: string;
|
|
88
|
+
selectable: boolean;
|
|
89
|
+
timezone: string;
|
|
90
|
+
canaryUrl?: string;
|
|
91
|
+
tracking: {
|
|
92
|
+
mode: CarrierTrackingMode;
|
|
93
|
+
adapter: string | null;
|
|
94
|
+
upstreamName?: string;
|
|
95
|
+
requirements?: readonly CarrierCatalogRequirement[];
|
|
96
|
+
/** Present when the adapter can recognize a number; higher is asked first. */
|
|
97
|
+
recognitionRank?: number;
|
|
98
|
+
refresh?: {
|
|
99
|
+
minMinutes: number;
|
|
100
|
+
afterFailureMinutes?: number;
|
|
101
|
+
};
|
|
102
|
+
localClocks?: boolean;
|
|
103
|
+
};
|
|
104
|
+
trackingUrlTemplate?: string;
|
|
105
|
+
linkRules: readonly RawTrackingLinkRule[];
|
|
106
|
+
detectionRules: readonly DetectionRule[];
|
|
107
|
+
}
|
|
108
|
+
export interface ParcelTrackingLink {
|
|
109
|
+
carrier: CarrierInfo;
|
|
110
|
+
name: string;
|
|
111
|
+
url: string;
|
|
112
|
+
active: boolean;
|
|
113
|
+
ready: boolean;
|
|
114
|
+
role: 'active' | 'waiting' | 'history';
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* The parcel fields the tracking-link helpers read. Structurally a subset of
|
|
118
|
+
* the application's `Parcel`, restated here so the package stays independent.
|
|
119
|
+
*/
|
|
120
|
+
export interface TrackedParcel {
|
|
121
|
+
carrier: CarrierId;
|
|
122
|
+
trackingNumber: string;
|
|
123
|
+
trackingUrl?: string;
|
|
124
|
+
/** Carrier currently supplying automatic updates for a multi-carrier journey. */
|
|
125
|
+
trackingSource?: CarrierId;
|
|
126
|
+
trackingProvider?: string;
|
|
127
|
+
/** The carrier answered the check the provider's result came from; links stay with the carrier. */
|
|
128
|
+
carrierAnswered?: boolean;
|
|
129
|
+
activeTrackingNumber?: string;
|
|
130
|
+
/** Whether Swiss Post has announced a Swiss-issued inbound shipment. */
|
|
131
|
+
swissPostReady?: boolean;
|
|
132
|
+
originalCarrier?: CarrierId;
|
|
133
|
+
originalTrackingNumber?: string;
|
|
134
|
+
originalTrackingUrl?: string;
|
|
135
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import { normalizeTrackingNumber } from '../detection/index.js';
|
|
2
|
+
const PLANZER_SHARED_HOST = 'trackandtrace.planzergroup.com';
|
|
3
|
+
const PLANZER_SHARED_PATH = /^\/shared\/sendungen\/([^/]+)\/?$/;
|
|
4
|
+
const PLANZER_ACCESS_KEY = /^[A-Za-z0-9_-]{32,256}$/;
|
|
5
|
+
const DACHSER_HOST = 'customeriberia.dachser.com';
|
|
6
|
+
const DACHSER_PAGE_PATH = '/customerarea/utilidades/seguimiento-publico/detalle';
|
|
7
|
+
const CAPABILITY_VALUE = /^[A-Za-z0-9_-]{4,256}$/;
|
|
8
|
+
const CONTROL_CHARACTER = /[\x00-\x1f\x7f]/;
|
|
9
|
+
const ALLOWED_QUERY_KEYS = new Set([
|
|
10
|
+
'hash',
|
|
11
|
+
'cliente',
|
|
12
|
+
'numeroUnico',
|
|
13
|
+
'referencia',
|
|
14
|
+
'fecha',
|
|
15
|
+
'clave',
|
|
16
|
+
'user',
|
|
17
|
+
'idioma',
|
|
18
|
+
'expedicion',
|
|
19
|
+
'tipoMail',
|
|
20
|
+
'error',
|
|
21
|
+
'origen',
|
|
22
|
+
'usuario',
|
|
23
|
+
]);
|
|
24
|
+
export function validatePlanzerSharedUrl(rawUrl, trackingNumber) {
|
|
25
|
+
const value = rawUrl.trim();
|
|
26
|
+
if (value.length < 1 || value.length > 4_096) {
|
|
27
|
+
throw new TypeError('Paste the complete Planzer tracking URL');
|
|
28
|
+
}
|
|
29
|
+
let url;
|
|
30
|
+
try {
|
|
31
|
+
url = new URL(value);
|
|
32
|
+
}
|
|
33
|
+
catch (error) {
|
|
34
|
+
throw new TypeError('Paste a valid Planzer tracking URL', { cause: error });
|
|
35
|
+
}
|
|
36
|
+
if (url.protocol !== 'https:'
|
|
37
|
+
|| url.hostname.toLowerCase() !== PLANZER_SHARED_HOST
|
|
38
|
+
|| url.username
|
|
39
|
+
|| url.password
|
|
40
|
+
|| (url.port && url.port !== '443')
|
|
41
|
+
|| url.hash) {
|
|
42
|
+
throw new TypeError(`Planzer shared links must use https://${PLANZER_SHARED_HOST}`);
|
|
43
|
+
}
|
|
44
|
+
let pathname;
|
|
45
|
+
try {
|
|
46
|
+
pathname = decodeURIComponent(url.pathname);
|
|
47
|
+
}
|
|
48
|
+
catch (error) {
|
|
49
|
+
throw new TypeError('Paste a valid Planzer tracking URL', { cause: error });
|
|
50
|
+
}
|
|
51
|
+
const match = PLANZER_SHARED_PATH.exec(pathname);
|
|
52
|
+
if (!match)
|
|
53
|
+
throw new TypeError('Paste a Planzer shared shipment URL');
|
|
54
|
+
if (normalizeTrackingNumber(match[1]) !== normalizeTrackingNumber(trackingNumber)) {
|
|
55
|
+
throw new TypeError('The Planzer URL belongs to a different tracking number');
|
|
56
|
+
}
|
|
57
|
+
const accessKeys = url.searchParams.getAll('accessKey');
|
|
58
|
+
if (accessKeys.length !== 1 || !PLANZER_ACCESS_KEY.test(accessKeys[0])) {
|
|
59
|
+
throw new TypeError('The Planzer URL must include its accessKey');
|
|
60
|
+
}
|
|
61
|
+
return url.toString();
|
|
62
|
+
}
|
|
63
|
+
export function validateDachserTrackingUrl(rawUrl, trackingNumber) {
|
|
64
|
+
const value = rawUrl.trim();
|
|
65
|
+
if (value.length < 1 || value.length > 4_096) {
|
|
66
|
+
throw new TypeError('Paste the complete Dachser tracking URL');
|
|
67
|
+
}
|
|
68
|
+
let url;
|
|
69
|
+
try {
|
|
70
|
+
url = new URL(value);
|
|
71
|
+
}
|
|
72
|
+
catch (error) {
|
|
73
|
+
throw new TypeError('Paste a valid Dachser tracking URL', { cause: error });
|
|
74
|
+
}
|
|
75
|
+
if (url.protocol !== 'https:'
|
|
76
|
+
|| url.hostname.toLowerCase() !== DACHSER_HOST
|
|
77
|
+
|| url.username
|
|
78
|
+
|| url.password
|
|
79
|
+
|| (url.port && url.port !== '443')
|
|
80
|
+
|| url.hash)
|
|
81
|
+
throw new TypeError(`Dachser links must use https://${DACHSER_HOST}`);
|
|
82
|
+
let pathname;
|
|
83
|
+
try {
|
|
84
|
+
pathname = decodeURIComponent(url.pathname);
|
|
85
|
+
}
|
|
86
|
+
catch (error) {
|
|
87
|
+
throw new TypeError('Paste a valid Dachser tracking URL', { cause: error });
|
|
88
|
+
}
|
|
89
|
+
if (pathname !== DACHSER_PAGE_PATH && pathname !== `${DACHSER_PAGE_PATH}/`) {
|
|
90
|
+
throw new TypeError('Paste a Dachser public shipment detail URL');
|
|
91
|
+
}
|
|
92
|
+
const values = new Map();
|
|
93
|
+
for (const [name, parameter] of url.searchParams) {
|
|
94
|
+
if (!ALLOWED_QUERY_KEYS.has(name)) {
|
|
95
|
+
throw new TypeError('The Dachser URL contains an unsupported parameter');
|
|
96
|
+
}
|
|
97
|
+
if (values.has(name))
|
|
98
|
+
throw new TypeError('The Dachser URL contains a duplicate parameter');
|
|
99
|
+
if (!parameter || parameter.length > 256 || CONTROL_CHARACTER.test(parameter)) {
|
|
100
|
+
throw new TypeError('The Dachser URL contains an invalid parameter');
|
|
101
|
+
}
|
|
102
|
+
values.set(name, parameter);
|
|
103
|
+
}
|
|
104
|
+
const uniqueNumber = values.get('numeroUnico');
|
|
105
|
+
if (!uniqueNumber)
|
|
106
|
+
throw new TypeError('The Dachser URL must include its shipment number');
|
|
107
|
+
if (normalizeTrackingNumber(uniqueNumber) !== normalizeTrackingNumber(trackingNumber)) {
|
|
108
|
+
throw new TypeError('The Dachser URL belongs to a different tracking number');
|
|
109
|
+
}
|
|
110
|
+
const capabilityHash = values.get('hash');
|
|
111
|
+
const capabilityKey = values.get('clave');
|
|
112
|
+
const capabilityDate = values.get('fecha');
|
|
113
|
+
const hasHash = Boolean(capabilityHash && CAPABILITY_VALUE.test(capabilityHash));
|
|
114
|
+
const hasKey = Boolean(capabilityKey
|
|
115
|
+
&& capabilityDate
|
|
116
|
+
&& CAPABILITY_VALUE.test(capabilityKey)
|
|
117
|
+
&& /^\d{8}$/.test(capabilityDate));
|
|
118
|
+
if (!hasHash && !hasKey) {
|
|
119
|
+
throw new TypeError('The Dachser URL must include its access parameters');
|
|
120
|
+
}
|
|
121
|
+
url.protocol = 'https:';
|
|
122
|
+
url.hostname = DACHSER_HOST;
|
|
123
|
+
url.port = '';
|
|
124
|
+
return url.toString();
|
|
125
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Amazon tracking-number recognition.
|
|
3
|
+
*
|
|
4
|
+
* What it is: the Amazon number shape, read from the catalog so the pattern has
|
|
5
|
+
* exactly one source of truth, and the predicate built on it.
|
|
6
|
+
* What it is not: no Amazon account state, no eligibility check, no provider
|
|
7
|
+
* I/O; whether a parcel needs the customer's Amazon account is a catalog
|
|
8
|
+
* concern and lives in `core/catalog/amazon`.
|
|
9
|
+
*/
|
|
10
|
+
import { CARRIER_CATALOG } from '../../generated/catalog.js';
|
|
11
|
+
export const AMAZON_NUMBER_PATTERN = CARRIER_CATALOG['amazon-logistics'].detectionRules[0].pattern;
|
|
12
|
+
export function isAmazonTrackingNumber(raw) {
|
|
13
|
+
return new RegExp(AMAZON_NUMBER_PATTERN).test(raw.replace(/[\s.-]/g, '').toUpperCase());
|
|
14
|
+
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export declare const TRACKING_CANDIDATE_PATTERNS: RegExp[];
|
|
2
|
+
/** The first candidate in the text that one carrier claims confidently. */
|
|
3
|
+
export declare function recognizedNumberInText(raw: string): string | undefined;
|
|
4
|
+
/** Last resort: a number introduced by a "tracking number:" style label. */
|
|
5
|
+
export declare function keywordNumberInText(raw: string): string | undefined;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Candidate numbers inside free text.
|
|
3
|
+
*
|
|
4
|
+
* What it is: the shapes worth testing when a whole shipping message, or a URL
|
|
5
|
+
* with no matching link rule, is pasted, and the two scans over them.
|
|
6
|
+
* What it is not: no carrier decision of its own (it defers to the detection
|
|
7
|
+
* engine) and no provider I/O.
|
|
8
|
+
*/
|
|
9
|
+
import { AMAZON_NUMBER_PATTERN } from './amazon.js';
|
|
10
|
+
import { detectCarrierMatch } from './detect.js';
|
|
11
|
+
import { validTrackingNumber } from './normalize.js';
|
|
12
|
+
export const TRACKING_CANDIDATE_PATTERNS = [
|
|
13
|
+
new RegExp(`\\b${AMAZON_NUMBER_PATTERN.slice(1, -1).replaceAll('[0-9]', '(?:[\\s.-]*[0-9])')}\\b`, 'gi'),
|
|
14
|
+
// NACEX agency/shipment composites keep their slash boundary (never stripped).
|
|
15
|
+
/\b\d{4}\/\d{8}\b/g,
|
|
16
|
+
/\b\d{26}\b/g,
|
|
17
|
+
/\bH\d{15,19}\b/gi,
|
|
18
|
+
/\b1Z[A-Z0-9]{16}\b/gi,
|
|
19
|
+
/\b1G[A-Z0-9]{10}\b/gi,
|
|
20
|
+
/\b[A-Z]{2}\s*\d(?:[\s.-]?\d){8}\s*[A-Z]{2}\b/gi,
|
|
21
|
+
/\b(?:JJD|JVGL)[A-Z0-9]{8,}\b/gi,
|
|
22
|
+
/\b\d(?:[\s.-]?\d){9,19}\b/g,
|
|
23
|
+
];
|
|
24
|
+
/** The first candidate in the text that one carrier claims confidently. */
|
|
25
|
+
export function recognizedNumberInText(raw) {
|
|
26
|
+
for (const pattern of TRACKING_CANDIDATE_PATTERNS) {
|
|
27
|
+
pattern.lastIndex = 0;
|
|
28
|
+
for (const match of raw.matchAll(pattern)) {
|
|
29
|
+
const candidate = match[0].trim();
|
|
30
|
+
if (detectCarrierMatch(candidate).confidence === 'high')
|
|
31
|
+
return candidate;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
return undefined;
|
|
35
|
+
}
|
|
36
|
+
/** Last resort: a number introduced by a "tracking number:" style label. */
|
|
37
|
+
export function keywordNumberInText(raw) {
|
|
38
|
+
const match = raw.match(/(?:(?:tracking|track(?:ing)?\s*(?:number|no\.?|id)?)|(?:parcel|shipment)(?:\s+(?:tracking|number|no\.?|id))?)\s*[:#-]?\s*([A-Z0-9][A-Z0-9.-]{3,39})/i);
|
|
39
|
+
const candidate = match?.[1]?.trim();
|
|
40
|
+
return candidate && validTrackingNumber(candidate) ? candidate : undefined;
|
|
41
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The detection engine.
|
|
3
|
+
*
|
|
4
|
+
* What it is: matches a tracking number against every carrier's catalog
|
|
5
|
+
* detection rules and their checksums. Exactly one high-confidence match
|
|
6
|
+
* selects a carrier; zero or several keep the number as a low-confidence
|
|
7
|
+
* suggestion and return the candidates.
|
|
8
|
+
* What it is not: no network lookup, no provider I/O, no carrier ranking by
|
|
9
|
+
* popularity — only the rules declared in the catalog decide. A `preferred`
|
|
10
|
+
* rule only moves its carrier to the front of the suggestions.
|
|
11
|
+
*/
|
|
12
|
+
import type { CarrierId } from '../../generated/catalog.js';
|
|
13
|
+
import type { CarrierDetection } from './types.js';
|
|
14
|
+
/** Return only a high-confidence carrier; preserve ambiguous candidates for the UI. */
|
|
15
|
+
export declare function detectCarrierMatch(raw: string): CarrierDetection;
|
|
16
|
+
/** Guess only when the tracking-number shape identifies one carrier confidently. */
|
|
17
|
+
export declare function detectCarrier(raw: string): CarrierId;
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { CARRIER_DEFINITIONS } from '../catalog/definitions.js';
|
|
2
|
+
import { isValidGlsParcelNumber } from './gls.js';
|
|
3
|
+
import { isValidHermesParcelNumber } from './hermes.js';
|
|
4
|
+
import { isValidMondialRelayBarcode } from './mondialRelay.js';
|
|
5
|
+
import { normalizeTrackingNumber } from './normalize.js';
|
|
6
|
+
import { isValidS10TrackingNumber } from './s10.js';
|
|
7
|
+
function checksumPasses(rule, trackingNumber) {
|
|
8
|
+
if (rule.checksum === 'mondial-relay')
|
|
9
|
+
return isValidMondialRelayBarcode(trackingNumber);
|
|
10
|
+
if (rule.checksum === 's10')
|
|
11
|
+
return isValidS10TrackingNumber(trackingNumber);
|
|
12
|
+
if (rule.checksum === 'hermes')
|
|
13
|
+
return isValidHermesParcelNumber(trackingNumber);
|
|
14
|
+
if (rule.checksum === 'gls')
|
|
15
|
+
return isValidGlsParcelNumber(trackingNumber);
|
|
16
|
+
return true;
|
|
17
|
+
}
|
|
18
|
+
/** Return only a high-confidence carrier; preserve ambiguous candidates for the UI. */
|
|
19
|
+
export function detectCarrierMatch(raw) {
|
|
20
|
+
const printed = raw.trim().toUpperCase();
|
|
21
|
+
const trackingNumber = normalizeTrackingNumber(raw);
|
|
22
|
+
if (!trackingNumber) {
|
|
23
|
+
return { carrier: 'unknown', confidence: 'none', candidates: [], preferred: [] };
|
|
24
|
+
}
|
|
25
|
+
const matches = [];
|
|
26
|
+
for (const [carrier, definition] of Object.entries(CARRIER_DEFINITIONS)) {
|
|
27
|
+
// A carrier's first matching rule decides its confidence and preference.
|
|
28
|
+
const rule = definition.detectionRules.find((candidate) => new RegExp(candidate.pattern).test(trackingNumber)
|
|
29
|
+
&& (!candidate.rawPattern || new RegExp(candidate.rawPattern).test(printed))
|
|
30
|
+
&& checksumPasses(candidate, trackingNumber));
|
|
31
|
+
if (rule)
|
|
32
|
+
matches.push({ carrier: carrier, confidence: rule.confidence, preferred: rule.preferred === true });
|
|
33
|
+
}
|
|
34
|
+
const highConfidence = matches.filter((match) => match.confidence === 'high');
|
|
35
|
+
const ranked = highConfidence.length > 0 ? highConfidence : matches;
|
|
36
|
+
// Number evidence first; catalog order otherwise.
|
|
37
|
+
const preferred = ranked.filter((match) => match.preferred).map((match) => match.carrier);
|
|
38
|
+
const candidates = [...preferred, ...ranked.filter((match) => !match.preferred).map((match) => match.carrier)];
|
|
39
|
+
if (highConfidence.length === 1) {
|
|
40
|
+
return { carrier: highConfidence[0].carrier, confidence: 'high', candidates, preferred };
|
|
41
|
+
}
|
|
42
|
+
return {
|
|
43
|
+
carrier: 'unknown',
|
|
44
|
+
confidence: matches.length > 0 ? 'low' : 'none',
|
|
45
|
+
candidates,
|
|
46
|
+
preferred,
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
/** Guess only when the tracking-number shape identifies one carrier confidently. */
|
|
50
|
+
export function detectCarrier(raw) {
|
|
51
|
+
return detectCarrierMatch(raw).carrier;
|
|
52
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GLS parcel number check digit.
|
|
3
|
+
*
|
|
4
|
+
* What it is: the check used by the `"gls"` detection rules on 12-digit
|
|
5
|
+
* numbers, which are otherwise shared with FedEx, Mondial Relay, SF Express
|
|
6
|
+
* and others.
|
|
7
|
+
* What it is not: no carrier lookup and no provider I/O. The caller passes an
|
|
8
|
+
* already-normalized number; anything else fails the digits-only shape test.
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* 11 digits and a modulo-10 check digit: weights 3, 1, 3, … from the right,
|
|
12
|
+
* plus one (paketda.de's "Paket-Prüfziffern"; GLS ShipIT answers a 12-digit
|
|
13
|
+
* number with its first 11 digits). An 11-digit number is the same parcel
|
|
14
|
+
* number without its check digit and has nothing to verify.
|
|
15
|
+
*/
|
|
16
|
+
export declare function isValidGlsParcelNumber(value: string): boolean;
|