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,21 @@
|
|
|
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 function isValidGlsParcelNumber(value) {
|
|
17
|
+
if (!/^\d{12}$/.test(value))
|
|
18
|
+
return false;
|
|
19
|
+
const sum = [...value.slice(0, 11)].reverse().reduce((total, digit, i) => total + Number(digit) * (i % 2 === 0 ? 3 : 1), 1);
|
|
20
|
+
return (10 - (sum % 10)) % 10 === Number(value[11]);
|
|
21
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hermes Germany legacy parcel number check digit.
|
|
3
|
+
*
|
|
4
|
+
* What it is: the check used by the `"hermes"` detection rule on 14-digit
|
|
5
|
+
* numbers, which are otherwise shared with DPD, BRT, SEUR and others.
|
|
6
|
+
* What it is not: no carrier lookup and no provider I/O. The caller passes an
|
|
7
|
+
* already-normalized number; anything else fails the digits-only shape test.
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* 13 digits and a modulo-10 check digit, weighted 3, 1, 3, … from the left
|
|
11
|
+
* (the EAN scheme). Documented by paketda.de ("Paket-Prüfziffern"); every
|
|
12
|
+
* publicly reported 14-digit Hermes number in the corpus passes it.
|
|
13
|
+
*/
|
|
14
|
+
export declare function isValidHermesParcelNumber(value: string): boolean;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hermes Germany legacy parcel number check digit.
|
|
3
|
+
*
|
|
4
|
+
* What it is: the check used by the `"hermes"` detection rule on 14-digit
|
|
5
|
+
* numbers, which are otherwise shared with DPD, BRT, SEUR and others.
|
|
6
|
+
* What it is not: no carrier lookup and no provider I/O. The caller passes an
|
|
7
|
+
* already-normalized number; anything else fails the digits-only shape test.
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* 13 digits and a modulo-10 check digit, weighted 3, 1, 3, … from the left
|
|
11
|
+
* (the EAN scheme). Documented by paketda.de ("Paket-Prüfziffern"); every
|
|
12
|
+
* publicly reported 14-digit Hermes number in the corpus passes it.
|
|
13
|
+
*/
|
|
14
|
+
export function isValidHermesParcelNumber(value) {
|
|
15
|
+
if (!/^\d{14}$/.test(value))
|
|
16
|
+
return false;
|
|
17
|
+
const sum = [...value.slice(0, 13)].reduce((total, digit, i) => total + Number(digit) * (i % 2 === 0 ? 3 : 1), 0);
|
|
18
|
+
return (10 - (sum % 10)) % 10 === Number(value[13]);
|
|
19
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tracking-number detection.
|
|
3
|
+
*
|
|
4
|
+
* What it is: the one engine that normalizes a number, validates its checksum,
|
|
5
|
+
* decides which carrier it belongs to, and parses whatever a user pastes. The
|
|
6
|
+
* web client, the server and the corpus sweep all import it from here.
|
|
7
|
+
* What it is not: no provider I/O, no HTTP, no Node APIs, no application or
|
|
8
|
+
* framework code — it bundles for the browser unchanged.
|
|
9
|
+
*/
|
|
10
|
+
export type { CarrierDetection, DetectionConfidence, TrackingInputMatch, } from './types.js';
|
|
11
|
+
export { AMAZON_NUMBER_PATTERN, isAmazonTrackingNumber } from './amazon.js';
|
|
12
|
+
export { TRACKING_CANDIDATE_PATTERNS, keywordNumberInText, recognizedNumberInText, } from './candidates.js';
|
|
13
|
+
export { detectCarrier, detectCarrierMatch } from './detect.js';
|
|
14
|
+
export { isValidGlsParcelNumber } from './gls.js';
|
|
15
|
+
export { isValidHermesParcelNumber } from './hermes.js';
|
|
16
|
+
export { isValidMondialRelayBarcode } from './mondialRelay.js';
|
|
17
|
+
export { formatTrackingNumber, isPlanzerSharedTrackingNumber, normalizeTrackingNumber, validTrackingNumber, } from './normalize.js';
|
|
18
|
+
export { parseTrackingInput } from './parse.js';
|
|
19
|
+
export { isValidS10TrackingNumber, supportsSwissPostHandoff } from './s10.js';
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export { AMAZON_NUMBER_PATTERN, isAmazonTrackingNumber } from './amazon.js';
|
|
2
|
+
export { TRACKING_CANDIDATE_PATTERNS, keywordNumberInText, recognizedNumberInText, } from './candidates.js';
|
|
3
|
+
export { detectCarrier, detectCarrierMatch } from './detect.js';
|
|
4
|
+
export { isValidGlsParcelNumber } from './gls.js';
|
|
5
|
+
export { isValidHermesParcelNumber } from './hermes.js';
|
|
6
|
+
export { isValidMondialRelayBarcode } from './mondialRelay.js';
|
|
7
|
+
export { formatTrackingNumber, isPlanzerSharedTrackingNumber, normalizeTrackingNumber, validTrackingNumber, } from './normalize.js';
|
|
8
|
+
export { parseTrackingInput } from './parse.js';
|
|
9
|
+
export { isValidS10TrackingNumber, supportsSwissPostHandoff } from './s10.js';
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mondial Relay label barcode checksum.
|
|
3
|
+
*
|
|
4
|
+
* What it is: the 26-digit label check used by the `"mondial-relay"` detection
|
|
5
|
+
* rule and by input validation.
|
|
6
|
+
* What it is not: no carrier lookup and no provider I/O. The caller passes an
|
|
7
|
+
* already-normalized number; anything else fails the digits-only shape test.
|
|
8
|
+
*/
|
|
9
|
+
/** Mondial Relay label specification v2.4, pages 5–7 (July 2024).
|
|
10
|
+
* https://storage.mondialrelay.fr/etiquette-mondial-relay-v-24.pdf
|
|
11
|
+
* Brand(2), shipment(8), sequence(2), count(2), check(1), routing(10), check(1).
|
|
12
|
+
*/
|
|
13
|
+
export declare function isValidMondialRelayBarcode(value: string): boolean;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mondial Relay label barcode checksum.
|
|
3
|
+
*
|
|
4
|
+
* What it is: the 26-digit label check used by the `"mondial-relay"` detection
|
|
5
|
+
* rule and by input validation.
|
|
6
|
+
* What it is not: no carrier lookup and no provider I/O. The caller passes an
|
|
7
|
+
* already-normalized number; anything else fails the digits-only shape test.
|
|
8
|
+
*/
|
|
9
|
+
/** Mondial Relay label specification v2.4, pages 5–7 (July 2024).
|
|
10
|
+
* https://storage.mondialrelay.fr/etiquette-mondial-relay-v-24.pdf
|
|
11
|
+
* Brand(2), shipment(8), sequence(2), count(2), check(1), routing(10), check(1).
|
|
12
|
+
*/
|
|
13
|
+
export function isValidMondialRelayBarcode(value) {
|
|
14
|
+
if (!/^\d{26}$/.test(value))
|
|
15
|
+
return false;
|
|
16
|
+
const check = (digits) => {
|
|
17
|
+
const sum = [...digits].reverse().reduce((total, digit, i) => total + Number(digit) * (2 + i % 6), 0);
|
|
18
|
+
const remainder = 11 - sum % 11;
|
|
19
|
+
return String(remainder >= 10 ? 0 : remainder);
|
|
20
|
+
};
|
|
21
|
+
const sequence = Number(value.slice(10, 12));
|
|
22
|
+
const count = Number(value.slice(12, 14));
|
|
23
|
+
return sequence > 0 && sequence <= count
|
|
24
|
+
&& check(value.slice(0, 14)) === value[14] && check(value.slice(15, 25)) === value[25];
|
|
25
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tracking-number normalization and display formatting.
|
|
3
|
+
*
|
|
4
|
+
* What it is: the one place that decides what "the same number" means, plus
|
|
5
|
+
* the printed grouping carriers use on their labels.
|
|
6
|
+
* What it is not: no carrier lookup, no checksum validation, no provider I/O.
|
|
7
|
+
*/
|
|
8
|
+
/** Uppercase and strip spaces, dots and dashes (Swiss Post prints 99.34.…). */
|
|
9
|
+
export declare function normalizeTrackingNumber(raw: string): string;
|
|
10
|
+
/** Capability-link shipment numbers look like 999.90.########. */
|
|
11
|
+
export declare function isPlanzerSharedTrackingNumber(raw: string): boolean;
|
|
12
|
+
/** Swiss carriers show 18-digit barcodes as 99.34.123456.12345678. */
|
|
13
|
+
export declare function formatTrackingNumber(raw: string, carrier?: string): string;
|
|
14
|
+
/** Shape gate applied to anything pulled out of a link or pasted prose. */
|
|
15
|
+
export declare function validTrackingNumber(raw: string): boolean;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { postlogisticsIdentifier } from '../../carriers/postlogistics/number.js';
|
|
2
|
+
/**
|
|
3
|
+
* Tracking-number normalization and display formatting.
|
|
4
|
+
*
|
|
5
|
+
* What it is: the one place that decides what "the same number" means, plus
|
|
6
|
+
* the printed grouping carriers use on their labels.
|
|
7
|
+
* What it is not: no carrier lookup, no checksum validation, no provider I/O.
|
|
8
|
+
*/
|
|
9
|
+
/** Uppercase and strip spaces, dots and dashes (Swiss Post prints 99.34.…). */
|
|
10
|
+
export function normalizeTrackingNumber(raw) {
|
|
11
|
+
return raw.toUpperCase().replace(/[\s.-]/g, '');
|
|
12
|
+
}
|
|
13
|
+
/** Capability-link shipment numbers look like 999.90.########. */
|
|
14
|
+
export function isPlanzerSharedTrackingNumber(raw) {
|
|
15
|
+
return /^99990\d{8}$/.test(normalizeTrackingNumber(raw));
|
|
16
|
+
}
|
|
17
|
+
/** Swiss carriers show 18-digit barcodes as 99.34.123456.12345678. */
|
|
18
|
+
export function formatTrackingNumber(raw, carrier) {
|
|
19
|
+
if (carrier === 'postlogistics')
|
|
20
|
+
return postlogisticsIdentifier(raw);
|
|
21
|
+
const value = normalizeTrackingNumber(raw);
|
|
22
|
+
if (isPlanzerSharedTrackingNumber(value)) {
|
|
23
|
+
return `${value.slice(0, 3)}.${value.slice(3, 5)}.${value.slice(5)}`;
|
|
24
|
+
}
|
|
25
|
+
if (/^\d{18}$/.test(value)) {
|
|
26
|
+
return `${value.slice(0, 2)}.${value.slice(2, 4)}.${value.slice(4, 10)}.${value.slice(10)}`;
|
|
27
|
+
}
|
|
28
|
+
return value;
|
|
29
|
+
}
|
|
30
|
+
/** Shape gate applied to anything pulled out of a link or pasted prose. */
|
|
31
|
+
export function validTrackingNumber(raw) {
|
|
32
|
+
const normalized = normalizeTrackingNumber(raw);
|
|
33
|
+
return normalized.length >= 4
|
|
34
|
+
&& normalized.length <= 40
|
|
35
|
+
// The NACEX agency/shipment composite is the only tracking shape allowed
|
|
36
|
+
// to keep punctuation; everything else stays strict alphanumeric.
|
|
37
|
+
&& (/^[A-Z0-9]+$/.test(normalized) || /^\d{4}\/\d{8}$/.test(normalized))
|
|
38
|
+
&& /\d/.test(normalized);
|
|
39
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { TrackingInputMatch } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Pull a tracking number and carrier out of a number, carrier URL, or pasted
|
|
4
|
+
* shipping message. Number shape disambiguates links shared by multiple brands.
|
|
5
|
+
*/
|
|
6
|
+
export declare function parseTrackingInput(raw: string): TrackingInputMatch;
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pasted-input parsing.
|
|
3
|
+
*
|
|
4
|
+
* What it is: turns whatever a user pastes — a bare number, a carrier link, or
|
|
5
|
+
* a whole shipping message — into a tracking number plus a carrier, using the
|
|
6
|
+
* catalog link rules and then the detection engine.
|
|
7
|
+
* What it is not: it never fetches the pasted URL and performs no provider I/O;
|
|
8
|
+
* every decision comes from the string and the catalog.
|
|
9
|
+
*/
|
|
10
|
+
import { TRACKING_LINK_RULES, matchesDomain } from '../catalog/linkRules.js';
|
|
11
|
+
import { keywordNumberInText, recognizedNumberInText } from './candidates.js';
|
|
12
|
+
import { detectCarrierMatch } from './detect.js';
|
|
13
|
+
import { validTrackingNumber } from './normalize.js';
|
|
14
|
+
function trimPastedUrl(raw) {
|
|
15
|
+
return raw.replace(/^[\s<'"(\x5b]+/, '').replace(/[\s>'")\],;.!?]+$/, '');
|
|
16
|
+
}
|
|
17
|
+
function cleanLinkTrackingNumber(raw) {
|
|
18
|
+
return raw.split(/[,|]/, 1)[0].trim();
|
|
19
|
+
}
|
|
20
|
+
function queryParam(url, names) {
|
|
21
|
+
const wanted = new Set(names.map((name) => name.toLowerCase()));
|
|
22
|
+
for (const [name, value] of url.searchParams) {
|
|
23
|
+
if (wanted.has(name.toLowerCase()) && value.trim())
|
|
24
|
+
return value;
|
|
25
|
+
}
|
|
26
|
+
return undefined;
|
|
27
|
+
}
|
|
28
|
+
function numberFromRule(url, rule) {
|
|
29
|
+
const fromQuery = rule.params ? queryParam(url, rule.params) : undefined;
|
|
30
|
+
const fromPath = rule.path?.exec(url.pathname)?.[1];
|
|
31
|
+
const fromFragment = rule.fragment?.exec(decodeURIComponent(url.hash.slice(1)))?.[1];
|
|
32
|
+
const candidate = cleanLinkTrackingNumber(fromQuery ?? fromPath ?? fromFragment ?? '');
|
|
33
|
+
return validTrackingNumber(candidate) ? candidate : undefined;
|
|
34
|
+
}
|
|
35
|
+
function trackingMatch(trackingNumber, source) {
|
|
36
|
+
return { trackingNumber, source, ...detectCarrierMatch(trackingNumber) };
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Pull a tracking number and carrier out of a number, carrier URL, or pasted
|
|
40
|
+
* shipping message. Number shape disambiguates links shared by multiple brands.
|
|
41
|
+
*/
|
|
42
|
+
export function parseTrackingInput(raw) {
|
|
43
|
+
const input = raw.trim();
|
|
44
|
+
if (!input) {
|
|
45
|
+
return {
|
|
46
|
+
trackingNumber: '',
|
|
47
|
+
carrier: 'unknown',
|
|
48
|
+
confidence: 'none',
|
|
49
|
+
candidates: [],
|
|
50
|
+
preferred: [],
|
|
51
|
+
source: 'none',
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
const pastedUrls = input.match(/https?:\/\/[^\s<>"']+/gi) ?? [];
|
|
55
|
+
for (const pastedUrl of pastedUrls) {
|
|
56
|
+
const trackingUrl = trimPastedUrl(pastedUrl);
|
|
57
|
+
try {
|
|
58
|
+
const url = new URL(trackingUrl);
|
|
59
|
+
const rules = TRACKING_LINK_RULES.filter((candidate) => candidate.domains.some((domain) => matchesDomain(url.hostname.toLowerCase(), domain))
|
|
60
|
+
&& (!candidate.pathPattern || candidate.pathPattern.test(url.pathname)));
|
|
61
|
+
const specificity = (rule) => Math.max(...rule.domains.filter((domain) => matchesDomain(url.hostname.toLowerCase(), domain)).map((domain) => domain.length));
|
|
62
|
+
rules.sort((a, b) => specificity(b) - specificity(a));
|
|
63
|
+
for (const firstRule of rules) {
|
|
64
|
+
const trackingNumber = numberFromRule(url, firstRule);
|
|
65
|
+
if (trackingNumber) {
|
|
66
|
+
const detected = detectCarrierMatch(trackingNumber);
|
|
67
|
+
if (firstRule.detectFromNumber && detected.confidence === 'high') {
|
|
68
|
+
return { trackingNumber, ...detected, source: 'link' };
|
|
69
|
+
}
|
|
70
|
+
const suggestedRules = rules.filter((candidate) => detected.candidates.includes(candidate.carrier));
|
|
71
|
+
const suggestedCarriers = new Set(suggestedRules.map((candidate) => candidate.carrier));
|
|
72
|
+
const rule = detected.confidence === 'high'
|
|
73
|
+
? rules.find((candidate) => candidate.carrier === detected.carrier) ?? firstRule
|
|
74
|
+
: suggestedCarriers.size === 1 ? suggestedRules[0] : firstRule;
|
|
75
|
+
return {
|
|
76
|
+
trackingNumber,
|
|
77
|
+
carrier: rule.carrier,
|
|
78
|
+
confidence: 'high',
|
|
79
|
+
candidates: [rule.carrier],
|
|
80
|
+
preferred: [],
|
|
81
|
+
trackingUrl: rule.keepsCapabilityUrl ? trackingUrl : undefined,
|
|
82
|
+
source: 'link',
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
const trackingNumber = recognizedNumberInText(decodeURIComponent(url.href));
|
|
87
|
+
if (trackingNumber)
|
|
88
|
+
return trackingMatch(trackingNumber, 'link');
|
|
89
|
+
}
|
|
90
|
+
catch {
|
|
91
|
+
// Keep looking: pasted prose can contain a truncated or malformed URL.
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
const recognized = recognizedNumberInText(input);
|
|
95
|
+
if (recognized) {
|
|
96
|
+
return trackingMatch(recognized, input === recognized ? 'number' : 'text');
|
|
97
|
+
}
|
|
98
|
+
const keywordNumber = keywordNumberInText(input);
|
|
99
|
+
if (keywordNumber)
|
|
100
|
+
return trackingMatch(keywordNumber, 'text');
|
|
101
|
+
if (!input.includes('://') && validTrackingNumber(input)) {
|
|
102
|
+
return trackingMatch(input, 'number');
|
|
103
|
+
}
|
|
104
|
+
return {
|
|
105
|
+
trackingNumber: '',
|
|
106
|
+
carrier: 'unknown',
|
|
107
|
+
confidence: 'none',
|
|
108
|
+
candidates: [],
|
|
109
|
+
preferred: [],
|
|
110
|
+
source: 'none',
|
|
111
|
+
};
|
|
112
|
+
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
/** Validate the UPU S10 check digit, not only its broad A2-N9-A2 shape. */
|
|
2
|
+
export declare function isValidS10TrackingNumber(raw: string): boolean;
|
|
3
|
+
/** Swiss-issued tracked letter-post can move from Cainiao to Swiss Post. */
|
|
4
|
+
export declare function supportsSwissPostHandoff(raw: string): boolean;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* UPU S10 check digit.
|
|
3
|
+
*
|
|
4
|
+
* What it is: the single S10 validator used by the client, the server adapters
|
|
5
|
+
* and the detection rules that declare `"checksum": "s10"`.
|
|
6
|
+
* What it is not: no carrier lookup and no provider I/O. Input is normalized
|
|
7
|
+
* here, so callers may pass a raw or an already-normalized number.
|
|
8
|
+
*/
|
|
9
|
+
import { normalizeTrackingNumber } from './normalize.js';
|
|
10
|
+
/** Validate the UPU S10 check digit, not only its broad A2-N9-A2 shape. */
|
|
11
|
+
export function isValidS10TrackingNumber(raw) {
|
|
12
|
+
const value = normalizeTrackingNumber(raw);
|
|
13
|
+
if (!/^[A-Z]{2}\d{9}[A-Z]{2}$/.test(value))
|
|
14
|
+
return false;
|
|
15
|
+
const weights = [8, 6, 4, 2, 3, 5, 9, 7];
|
|
16
|
+
const sum = weights.reduce((total, weight, index) => total + Number(value[index + 2]) * weight, 0);
|
|
17
|
+
const rawCheckDigit = 11 - (sum % 11);
|
|
18
|
+
const expected = rawCheckDigit === 10 ? 0 : rawCheckDigit === 11 ? 5 : rawCheckDigit;
|
|
19
|
+
return Number(value[10]) === expected;
|
|
20
|
+
}
|
|
21
|
+
/** Swiss-issued tracked letter-post can move from Cainiao to Swiss Post. */
|
|
22
|
+
export function supportsSwissPostHandoff(raw) {
|
|
23
|
+
const value = normalizeTrackingNumber(raw);
|
|
24
|
+
return /^L[A-Z]\d{9}CH$/.test(value) && isValidS10TrackingNumber(value);
|
|
25
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Detection vocabulary.
|
|
3
|
+
*
|
|
4
|
+
* What it is: the result shapes the detection engine returns and its callers
|
|
5
|
+
* pass around (confidence, candidate carriers, parsed input).
|
|
6
|
+
* What it is not: no provider I/O, no application or framework types. These
|
|
7
|
+
* declarations are erased at build time and safe to import from anywhere.
|
|
8
|
+
*/
|
|
9
|
+
import type { CarrierId } from '../../generated/catalog.js';
|
|
10
|
+
export type DetectionConfidence = 'high' | 'low' | 'none';
|
|
11
|
+
export interface CarrierDetection {
|
|
12
|
+
carrier: CarrierId;
|
|
13
|
+
confidence: DetectionConfidence;
|
|
14
|
+
candidates: CarrierId[];
|
|
15
|
+
/** Candidates a `preferred` rule backs with number evidence, listed first. */
|
|
16
|
+
preferred: CarrierId[];
|
|
17
|
+
}
|
|
18
|
+
export interface TrackingInputMatch extends CarrierDetection {
|
|
19
|
+
trackingNumber: string;
|
|
20
|
+
trackingUrl?: string;
|
|
21
|
+
source: 'number' | 'link' | 'text' | 'none';
|
|
22
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { type CarrierErrorKind } from './index.js';
|
|
2
|
+
export interface FailureHint {
|
|
3
|
+
kind: CarrierErrorKind;
|
|
4
|
+
retryAfterMs?: number;
|
|
5
|
+
}
|
|
6
|
+
/** The upstream's advice; consumers own their refresh cadence and backoff. */
|
|
7
|
+
export declare function failureHint(error: unknown): FailureHint;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { carrierErrorKind, retryAfterMsOf } from './index.js';
|
|
2
|
+
/** The upstream's advice; consumers own their refresh cadence and backoff. */
|
|
3
|
+
export function failureHint(error) {
|
|
4
|
+
const kind = carrierErrorKind(error) ?? 'transport';
|
|
5
|
+
const retryAfterMs = retryAfterMsOf(error);
|
|
6
|
+
return { kind, ...(retryAfterMs === undefined ? {} : { retryAfterMs }) };
|
|
7
|
+
}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The single error taxonomy for carrier adapters, universal providers, routing
|
|
3
|
+
* and telemetry.
|
|
4
|
+
*
|
|
5
|
+
* Adapters throw one of the classes below (or let `fetchBounded` throw its
|
|
6
|
+
* `UpstreamHttpError` / `UpstreamNetworkError`). Routing, the sync worker and
|
|
7
|
+
* the telemetry sinks never inspect messages or class names: they call
|
|
8
|
+
* `carrierErrorKind()`, which walks the `cause` chain so wrapped errors keep
|
|
9
|
+
* their meaning.
|
|
10
|
+
*
|
|
11
|
+
* `status` mirrors the HTTP-like convention older code still inspects (404 not
|
|
12
|
+
* found, 429 rate limited, 403 challenge, 502 indeterminate, 503 maintenance),
|
|
13
|
+
* which keeps the migration behavior-preserving.
|
|
14
|
+
*/
|
|
15
|
+
import type { UpstreamHttpDiagnostics } from '../transport/upstreamHttpDiagnostics.js';
|
|
16
|
+
export type { UpstreamHttpDiagnostics };
|
|
17
|
+
export type CarrierErrorKind = 'not_found' | 'indeterminate' | 'challenge' | 'rate_limited' | 'maintenance' | 'schema' | 'input_required' | 'transport' | 'budget';
|
|
18
|
+
export interface CarrierErrorOptions {
|
|
19
|
+
cause?: unknown;
|
|
20
|
+
status?: number;
|
|
21
|
+
retryAfterMs?: number;
|
|
22
|
+
/** Stable detail within an error kind, such as `history_expired`. */
|
|
23
|
+
reason?: string;
|
|
24
|
+
}
|
|
25
|
+
export declare class CarrierError extends Error {
|
|
26
|
+
readonly kind: CarrierErrorKind;
|
|
27
|
+
readonly provider: string;
|
|
28
|
+
readonly status?: number;
|
|
29
|
+
readonly retryAfterMs?: number;
|
|
30
|
+
readonly reason?: string;
|
|
31
|
+
constructor(kind: CarrierErrorKind, provider: string, message: string, options?: CarrierErrorOptions);
|
|
32
|
+
}
|
|
33
|
+
export declare class NotFoundError extends CarrierError {
|
|
34
|
+
constructor(provider: string, message?: string, options?: CarrierErrorOptions);
|
|
35
|
+
}
|
|
36
|
+
export declare class IndeterminateError extends CarrierError {
|
|
37
|
+
constructor(provider: string, message?: string, options?: CarrierErrorOptions);
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* A universal provider looked the number up and has no history for it yet (not
|
|
41
|
+
* announced, not handed over). An answer about the parcel, not an outage.
|
|
42
|
+
*/
|
|
43
|
+
export declare class NoHistoryError extends IndeterminateError {
|
|
44
|
+
constructor(provider: string, message?: string, options?: CarrierErrorOptions);
|
|
45
|
+
}
|
|
46
|
+
export declare class ChallengeError extends CarrierError {
|
|
47
|
+
constructor(provider: string, message?: string, options?: CarrierErrorOptions);
|
|
48
|
+
}
|
|
49
|
+
export declare class RateLimitedError extends CarrierError {
|
|
50
|
+
constructor(provider: string, retryAfterMs?: number, message?: string, options?: CarrierErrorOptions);
|
|
51
|
+
}
|
|
52
|
+
export declare class MaintenanceError extends CarrierError {
|
|
53
|
+
constructor(provider: string, message?: string, options?: CarrierErrorOptions);
|
|
54
|
+
}
|
|
55
|
+
export declare class SchemaError extends CarrierError {
|
|
56
|
+
constructor(provider: string, message?: string, options?: CarrierErrorOptions);
|
|
57
|
+
}
|
|
58
|
+
export declare class InputRequiredError extends CarrierError {
|
|
59
|
+
readonly field: string;
|
|
60
|
+
constructor(provider: string, field: string, message?: string, options?: CarrierErrorOptions);
|
|
61
|
+
}
|
|
62
|
+
export declare class TransportError extends CarrierError {
|
|
63
|
+
constructor(provider: string, message?: string, options?: CarrierErrorOptions);
|
|
64
|
+
}
|
|
65
|
+
export declare class BudgetExceededError extends CarrierError {
|
|
66
|
+
constructor(provider: string, budgetMs: number, options?: CarrierErrorOptions);
|
|
67
|
+
}
|
|
68
|
+
/** Request details kept on transport errors for diagnostics. Bodies are truncated. */
|
|
69
|
+
export interface UpstreamRequestDiagnostics {
|
|
70
|
+
url: string;
|
|
71
|
+
method: string;
|
|
72
|
+
headers: Record<string, string>;
|
|
73
|
+
body?: string;
|
|
74
|
+
body_truncated?: boolean;
|
|
75
|
+
timeout_ms: number;
|
|
76
|
+
}
|
|
77
|
+
/** A rejected HTTP response from a provider. Kind is derived from the status. */
|
|
78
|
+
export declare class UpstreamHttpError extends CarrierError {
|
|
79
|
+
readonly diagnostics?: UpstreamHttpDiagnostics | undefined;
|
|
80
|
+
readonly request?: UpstreamRequestDiagnostics | undefined;
|
|
81
|
+
/** Always present for HTTP errors; narrowed from the optional base field. */
|
|
82
|
+
readonly status: number;
|
|
83
|
+
constructor(provider: string, status: number, retryAfterMs?: number, diagnostics?: UpstreamHttpDiagnostics | undefined, request?: UpstreamRequestDiagnostics | undefined);
|
|
84
|
+
}
|
|
85
|
+
/** A network failure (DNS, TLS, timeout, interrupted body) while talking to a provider. */
|
|
86
|
+
export declare class UpstreamNetworkError extends CarrierError {
|
|
87
|
+
readonly request?: UpstreamRequestDiagnostics | undefined;
|
|
88
|
+
constructor(provider: string, cause: unknown, request?: UpstreamRequestDiagnostics | undefined);
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Classify any error, walking `cause` chains. Returns null for errors that are
|
|
92
|
+
* not part of the taxonomy so callers can apply their own fallback.
|
|
93
|
+
*/
|
|
94
|
+
export declare function carrierErrorKind(error: unknown): CarrierErrorKind | null;
|
|
95
|
+
/** The retry window a rate-limiting provider asked for, when any error in the chain carries one. */
|
|
96
|
+
export declare function retryAfterMsOf(error: unknown): number | undefined;
|
|
97
|
+
/** A stable, low-cardinality name for an error, safe as a metric label. */
|
|
98
|
+
export declare function errorTypeOf(error: unknown): string;
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The single error taxonomy for carrier adapters, universal providers, routing
|
|
3
|
+
* and telemetry.
|
|
4
|
+
*
|
|
5
|
+
* Adapters throw one of the classes below (or let `fetchBounded` throw its
|
|
6
|
+
* `UpstreamHttpError` / `UpstreamNetworkError`). Routing, the sync worker and
|
|
7
|
+
* the telemetry sinks never inspect messages or class names: they call
|
|
8
|
+
* `carrierErrorKind()`, which walks the `cause` chain so wrapped errors keep
|
|
9
|
+
* their meaning.
|
|
10
|
+
*
|
|
11
|
+
* `status` mirrors the HTTP-like convention older code still inspects (404 not
|
|
12
|
+
* found, 429 rate limited, 403 challenge, 502 indeterminate, 503 maintenance),
|
|
13
|
+
* which keeps the migration behavior-preserving.
|
|
14
|
+
*/
|
|
15
|
+
const STATUS_BY_KIND = {
|
|
16
|
+
not_found: 404,
|
|
17
|
+
indeterminate: 502,
|
|
18
|
+
challenge: 403,
|
|
19
|
+
rate_limited: 429,
|
|
20
|
+
maintenance: 503,
|
|
21
|
+
};
|
|
22
|
+
export class CarrierError extends Error {
|
|
23
|
+
kind;
|
|
24
|
+
provider;
|
|
25
|
+
status;
|
|
26
|
+
retryAfterMs;
|
|
27
|
+
reason;
|
|
28
|
+
constructor(kind, provider, message, options = {}) {
|
|
29
|
+
super(message, options.cause === undefined ? undefined : { cause: options.cause });
|
|
30
|
+
this.name = 'CarrierError';
|
|
31
|
+
this.kind = kind;
|
|
32
|
+
this.provider = provider;
|
|
33
|
+
if (options.reason !== undefined)
|
|
34
|
+
this.reason = options.reason;
|
|
35
|
+
const status = options.status ?? STATUS_BY_KIND[kind];
|
|
36
|
+
if (status !== undefined)
|
|
37
|
+
this.status = status;
|
|
38
|
+
if (options.retryAfterMs !== undefined && Number.isFinite(options.retryAfterMs)) {
|
|
39
|
+
this.retryAfterMs = Math.max(0, options.retryAfterMs);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
export class NotFoundError extends CarrierError {
|
|
44
|
+
constructor(provider, message = `${provider} could not locate the shipment`, options) {
|
|
45
|
+
super('not_found', provider, message, options);
|
|
46
|
+
this.name = 'NotFoundError';
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
export class IndeterminateError extends CarrierError {
|
|
50
|
+
constructor(provider, message = `${provider} returned an inconclusive response`, options) {
|
|
51
|
+
super('indeterminate', provider, message, options);
|
|
52
|
+
this.name = 'IndeterminateError';
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* A universal provider looked the number up and has no history for it yet (not
|
|
57
|
+
* announced, not handed over). An answer about the parcel, not an outage.
|
|
58
|
+
*/
|
|
59
|
+
export class NoHistoryError extends IndeterminateError {
|
|
60
|
+
constructor(provider, message = `${provider} has no history for the shipment`, options) {
|
|
61
|
+
super(provider, message, options);
|
|
62
|
+
this.name = 'NoHistoryError';
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
export class ChallengeError extends CarrierError {
|
|
66
|
+
constructor(provider, message = `${provider} requires a browser challenge`, options) {
|
|
67
|
+
super('challenge', provider, message, options);
|
|
68
|
+
this.name = 'ChallengeError';
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
export class RateLimitedError extends CarrierError {
|
|
72
|
+
constructor(provider, retryAfterMs, message = `${provider} is rate limiting tracking requests`, options) {
|
|
73
|
+
super('rate_limited', provider, message, { ...options, retryAfterMs });
|
|
74
|
+
this.name = 'RateLimitedError';
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
export class MaintenanceError extends CarrierError {
|
|
78
|
+
constructor(provider, message = `${provider} tracking is under maintenance`, options) {
|
|
79
|
+
super('maintenance', provider, message, options);
|
|
80
|
+
this.name = 'MaintenanceError';
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
export class SchemaError extends CarrierError {
|
|
84
|
+
constructor(provider, message = `${provider} returned an invalid tracking response`, options) {
|
|
85
|
+
super('schema', provider, message, options);
|
|
86
|
+
this.name = 'SchemaError';
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
export class InputRequiredError extends CarrierError {
|
|
90
|
+
field;
|
|
91
|
+
constructor(provider, field, message = `${provider} tracking requires ${field}`, options) {
|
|
92
|
+
super('input_required', provider, message, options);
|
|
93
|
+
this.name = 'InputRequiredError';
|
|
94
|
+
this.field = field;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
export class TransportError extends CarrierError {
|
|
98
|
+
constructor(provider, message = `${provider} is unreachable`, options) {
|
|
99
|
+
super('transport', provider, message, options);
|
|
100
|
+
this.name = 'TransportError';
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
export class BudgetExceededError extends CarrierError {
|
|
104
|
+
constructor(provider, budgetMs, options) {
|
|
105
|
+
super('budget', provider, `${provider} lookup exceeded its ${budgetMs} ms budget`, options);
|
|
106
|
+
this.name = 'BudgetExceededError';
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
function kindForStatus(status) {
|
|
110
|
+
if (status === 404 || status === 410)
|
|
111
|
+
return 'not_found';
|
|
112
|
+
if (status === 429)
|
|
113
|
+
return 'rate_limited';
|
|
114
|
+
if (status === 401 || status === 403)
|
|
115
|
+
return 'challenge';
|
|
116
|
+
if (status === 503)
|
|
117
|
+
return 'maintenance';
|
|
118
|
+
if (status >= 500)
|
|
119
|
+
return 'indeterminate';
|
|
120
|
+
return 'transport';
|
|
121
|
+
}
|
|
122
|
+
/** A rejected HTTP response from a provider. Kind is derived from the status. */
|
|
123
|
+
export class UpstreamHttpError extends CarrierError {
|
|
124
|
+
diagnostics;
|
|
125
|
+
request;
|
|
126
|
+
constructor(provider, status, retryAfterMs, diagnostics, request) {
|
|
127
|
+
super(kindForStatus(status), provider, `${provider} returned HTTP ${status}`, { status, retryAfterMs });
|
|
128
|
+
this.diagnostics = diagnostics;
|
|
129
|
+
this.request = request;
|
|
130
|
+
this.name = 'UpstreamHttpError';
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
/** A network failure (DNS, TLS, timeout, interrupted body) while talking to a provider. */
|
|
134
|
+
export class UpstreamNetworkError extends CarrierError {
|
|
135
|
+
request;
|
|
136
|
+
constructor(provider, cause, request) {
|
|
137
|
+
super('transport', provider, `${provider} is unreachable`, { cause });
|
|
138
|
+
this.request = request;
|
|
139
|
+
this.name = 'UpstreamNetworkError';
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
const MAX_CAUSE_DEPTH = 8;
|
|
143
|
+
/**
|
|
144
|
+
* Classify any error, walking `cause` chains. Returns null for errors that are
|
|
145
|
+
* not part of the taxonomy so callers can apply their own fallback.
|
|
146
|
+
*/
|
|
147
|
+
export function carrierErrorKind(error) {
|
|
148
|
+
const seen = new Set();
|
|
149
|
+
let current = error;
|
|
150
|
+
for (let depth = 0; depth < MAX_CAUSE_DEPTH && current instanceof Error && !seen.has(current); depth += 1) {
|
|
151
|
+
seen.add(current);
|
|
152
|
+
if (current instanceof CarrierError)
|
|
153
|
+
return current.kind;
|
|
154
|
+
current = current.cause;
|
|
155
|
+
}
|
|
156
|
+
return null;
|
|
157
|
+
}
|
|
158
|
+
/** The retry window a rate-limiting provider asked for, when any error in the chain carries one. */
|
|
159
|
+
export function retryAfterMsOf(error) {
|
|
160
|
+
const seen = new Set();
|
|
161
|
+
let current = error;
|
|
162
|
+
for (let depth = 0; depth < MAX_CAUSE_DEPTH && current instanceof Error && !seen.has(current); depth += 1) {
|
|
163
|
+
seen.add(current);
|
|
164
|
+
if (current instanceof CarrierError && current.retryAfterMs !== undefined)
|
|
165
|
+
return current.retryAfterMs;
|
|
166
|
+
current = current.cause;
|
|
167
|
+
}
|
|
168
|
+
return undefined;
|
|
169
|
+
}
|
|
170
|
+
/** A stable, low-cardinality name for an error, safe as a metric label. */
|
|
171
|
+
export function errorTypeOf(error) {
|
|
172
|
+
if (error instanceof Error && /^(?:Error|[A-Z][A-Za-z0-9_.-]{0,80}(?:Error|Exception))$/.test(error.name.trim())) {
|
|
173
|
+
return error.name.trim();
|
|
174
|
+
}
|
|
175
|
+
if (error instanceof Error)
|
|
176
|
+
return 'Error';
|
|
177
|
+
return typeof error;
|
|
178
|
+
}
|