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,84 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "swiss-post",
|
|
3
|
+
"displayName": "Swiss Post",
|
|
4
|
+
"aliases": [
|
|
5
|
+
"Die Post",
|
|
6
|
+
"La Poste Suisse",
|
|
7
|
+
"La Posta Svizzera",
|
|
8
|
+
"Swiss Post Ltd"
|
|
9
|
+
],
|
|
10
|
+
"region": {
|
|
11
|
+
"countries": [
|
|
12
|
+
"CH",
|
|
13
|
+
"LI"
|
|
14
|
+
]
|
|
15
|
+
},
|
|
16
|
+
"brand": {
|
|
17
|
+
"color": "#ffcc00"
|
|
18
|
+
},
|
|
19
|
+
"selectable": true,
|
|
20
|
+
"timezone": "Europe/Zurich",
|
|
21
|
+
"tracking": {
|
|
22
|
+
"mode": "automatic",
|
|
23
|
+
"adapter": "swiss-post",
|
|
24
|
+
"steps": [
|
|
25
|
+
"direct"
|
|
26
|
+
]
|
|
27
|
+
},
|
|
28
|
+
"capabilities": [
|
|
29
|
+
"history",
|
|
30
|
+
"location",
|
|
31
|
+
"eta",
|
|
32
|
+
"provider_code"
|
|
33
|
+
],
|
|
34
|
+
"portal": {
|
|
35
|
+
"url": "https://service.post.ch/ekp-web/ui/entry/search/{trackingNumber}",
|
|
36
|
+
"canaryUrl": "https://service.post.ch/",
|
|
37
|
+
"shows": [
|
|
38
|
+
"status",
|
|
39
|
+
"history",
|
|
40
|
+
"location",
|
|
41
|
+
"eta",
|
|
42
|
+
"eta_window",
|
|
43
|
+
"recipient_name",
|
|
44
|
+
"recipient_address",
|
|
45
|
+
"signature",
|
|
46
|
+
"delivery_instructions"
|
|
47
|
+
],
|
|
48
|
+
"scraped": [
|
|
49
|
+
"status",
|
|
50
|
+
"history",
|
|
51
|
+
"location",
|
|
52
|
+
"eta",
|
|
53
|
+
"provider_code"
|
|
54
|
+
],
|
|
55
|
+
"discarded": [
|
|
56
|
+
"recipient_name",
|
|
57
|
+
"recipient_address",
|
|
58
|
+
"signature",
|
|
59
|
+
"delivery_instructions"
|
|
60
|
+
],
|
|
61
|
+
"unavailable": []
|
|
62
|
+
},
|
|
63
|
+
"links": [
|
|
64
|
+
{
|
|
65
|
+
"domains": [
|
|
66
|
+
"service.post.ch"
|
|
67
|
+
],
|
|
68
|
+
"path": "/entry/search/([^/?#]+)"
|
|
69
|
+
}
|
|
70
|
+
],
|
|
71
|
+
"detection": [
|
|
72
|
+
{
|
|
73
|
+
"id": "swiss-post-1",
|
|
74
|
+
"pattern": "^[A-Z]{2}\\d{9}CH$",
|
|
75
|
+
"confidence": "high",
|
|
76
|
+
"checksum": "s10"
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
"id": "swiss-post-2",
|
|
80
|
+
"pattern": "^9[89]\\d{16}$",
|
|
81
|
+
"confidence": "high"
|
|
82
|
+
}
|
|
83
|
+
]
|
|
84
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
{
|
|
2
|
+
"carrier": "swiss-post",
|
|
3
|
+
"records": [
|
|
4
|
+
{
|
|
5
|
+
"number": "98.11.223344.55667788",
|
|
6
|
+
"role": "shipment",
|
|
7
|
+
"evidence": "synthetic",
|
|
8
|
+
"derivedFrom": "official_shape",
|
|
9
|
+
"shapeConfirmed": "2026-09-12",
|
|
10
|
+
"expect": {
|
|
11
|
+
"carrier": "swiss-post",
|
|
12
|
+
"confidence": "high"
|
|
13
|
+
},
|
|
14
|
+
"note": "Made-up number that follows the published format."
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
"number": "99.34.123456.12345678",
|
|
18
|
+
"role": "shipment",
|
|
19
|
+
"evidence": "synthetic",
|
|
20
|
+
"derivedFrom": "official_shape",
|
|
21
|
+
"shapeConfirmed": "2026-09-12",
|
|
22
|
+
"expect": {
|
|
23
|
+
"carrier": "swiss-post",
|
|
24
|
+
"confidence": "high"
|
|
25
|
+
},
|
|
26
|
+
"note": "Made-up number that follows the published format."
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
"number": "RA123456785CH",
|
|
30
|
+
"role": "shipment",
|
|
31
|
+
"evidence": "synthetic",
|
|
32
|
+
"derivedFrom": "official_shape",
|
|
33
|
+
"shapeConfirmed": "2026-09-12",
|
|
34
|
+
"expect": {
|
|
35
|
+
"carrier": "swiss-post",
|
|
36
|
+
"confidence": "high"
|
|
37
|
+
},
|
|
38
|
+
"note": "Made-up number that follows the published format."
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"number": "RS908247336CH",
|
|
42
|
+
"role": "shipment",
|
|
43
|
+
"evidence": "open_source_example",
|
|
44
|
+
"source": {
|
|
45
|
+
"url": "https://gist.github.com/zxp/e83a4a1b7294a5ed6207",
|
|
46
|
+
"date": "2015-08-29"
|
|
47
|
+
},
|
|
48
|
+
"expect": {
|
|
49
|
+
"carrier": "swiss-post",
|
|
50
|
+
"confidence": "high"
|
|
51
|
+
},
|
|
52
|
+
"note": "Open-source project example, not a real shipment."
|
|
53
|
+
}
|
|
54
|
+
]
|
|
55
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Swiss Post status classification.
|
|
3
|
+
*
|
|
4
|
+
* Two independent vocabularies meet here. `globalStatus` is the shipment-level
|
|
5
|
+
* summary the portal shows at the top of the page. Event codes are the last
|
|
6
|
+
* segment of a dotted `eventCode` such as `PARCEL.*.1.1003`, and they are the
|
|
7
|
+
* authority for the current stage: the summary lags behind (a MyPost24 deposit
|
|
8
|
+
* reads `DELIVERED` while the parcel is still waiting in the locker).
|
|
9
|
+
*
|
|
10
|
+
* Only codes with a confirmed meaning are mapped. Anything else is left without
|
|
11
|
+
* a stage so the sync can classify the wording and record the code for review.
|
|
12
|
+
*/
|
|
13
|
+
import type { CarrierStatus } from '../../core/result/index.js';
|
|
14
|
+
import type { Stage } from '../../generated/catalog.js';
|
|
15
|
+
/** Shipment-level `globalStatus` → status. The event codes below refine it. */
|
|
16
|
+
export declare const STATUS_MAP: Map<string, CarrierStatus>;
|
|
17
|
+
/** Wording for codes the translation service does not resolve. */
|
|
18
|
+
export declare const FALLBACK_EVENT_LABELS: Record<string, string>;
|
|
19
|
+
/** Parcel event codes (the last dotted segment) with a confirmed stage. */
|
|
20
|
+
export declare const EVENT_STAGE_BY_CODE: Record<string, Stage>;
|
|
21
|
+
export declare const LETTER_IMPORT_STAGE_BY_CODE: Record<string, Stage>;
|
|
22
|
+
/** The shipment status implied by the newest event's stage. */
|
|
23
|
+
export declare const STAGE_STATUS: Record<string, CarrierStatus>;
|
|
24
|
+
/** Only `LETTER.*.90.*` scans use the import table; everything else uses the parcel table. */
|
|
25
|
+
export declare const LETTER_IMPORT_EVENT: RegExp;
|
|
26
|
+
/** The stage for a full dotted event code, or undefined when the code is not mapped. */
|
|
27
|
+
export declare function swissPostEventStage(eventCode: string): Stage | undefined;
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/** Shipment-level `globalStatus` → status. The event codes below refine it. */
|
|
2
|
+
export const STATUS_MAP = new Map([
|
|
3
|
+
['REPORTED', 'pending'],
|
|
4
|
+
['REGISTERED', 'pending'],
|
|
5
|
+
['TO_BE_DELIVERED', 'in_transit'],
|
|
6
|
+
['IN_DELIVERY', 'out_for_delivery'],
|
|
7
|
+
['DELIVERED', 'delivered'],
|
|
8
|
+
['MISSED_DELIVERY', 'exception'],
|
|
9
|
+
['NOT_DELIVERED', 'exception'],
|
|
10
|
+
['RETURNED', 'exception'],
|
|
11
|
+
['CUSTOMS', 'in_transit'],
|
|
12
|
+
]);
|
|
13
|
+
/** Wording for codes the translation service does not resolve. */
|
|
14
|
+
export const FALLBACK_EVENT_LABELS = {
|
|
15
|
+
'600': 'Your shipment will shortly be handed over to Swiss Post',
|
|
16
|
+
'1003': 'Loading into delivery vehicle',
|
|
17
|
+
'1201': 'Sorted for delivery',
|
|
18
|
+
'1202': 'Shipment was sorted',
|
|
19
|
+
};
|
|
20
|
+
/** Parcel event codes (the last dotted segment) with a confirmed stage. */
|
|
21
|
+
export const EVENT_STAGE_BY_CODE = {
|
|
22
|
+
'600': 'registered',
|
|
23
|
+
'820': 'in_transit',
|
|
24
|
+
'1003': 'out_for_delivery',
|
|
25
|
+
'1201': 'in_transit',
|
|
26
|
+
'1202': 'in_transit',
|
|
27
|
+
'2102': 'ready_for_pickup',
|
|
28
|
+
'3600': 'returned',
|
|
29
|
+
'4600': 'delivered',
|
|
30
|
+
};
|
|
31
|
+
// International letter/packet scans used for postal handoffs (including DHL
|
|
32
|
+
// Kleinpaket). Their wording can otherwise imply delivery or active customs.
|
|
33
|
+
export const LETTER_IMPORT_STAGE_BY_CODE = {
|
|
34
|
+
'620': 'registered',
|
|
35
|
+
'803': 'customs',
|
|
36
|
+
'804': 'in_transit',
|
|
37
|
+
'805': 'in_transit',
|
|
38
|
+
'818': 'in_transit',
|
|
39
|
+
'912': 'accepted',
|
|
40
|
+
'915': 'in_transit',
|
|
41
|
+
'1001': 'in_transit',
|
|
42
|
+
'1213': 'in_transit',
|
|
43
|
+
'1218': 'in_transit',
|
|
44
|
+
};
|
|
45
|
+
/** The shipment status implied by the newest event's stage. */
|
|
46
|
+
export const STAGE_STATUS = {
|
|
47
|
+
registered: 'pending',
|
|
48
|
+
accepted: 'in_transit',
|
|
49
|
+
in_transit: 'in_transit',
|
|
50
|
+
out_for_delivery: 'out_for_delivery',
|
|
51
|
+
delivered: 'delivered',
|
|
52
|
+
customs: 'in_transit',
|
|
53
|
+
failed_attempt: 'exception',
|
|
54
|
+
ready_for_pickup: 'in_transit',
|
|
55
|
+
returned: 'exception',
|
|
56
|
+
};
|
|
57
|
+
/** Only `LETTER.*.90.*` scans use the import table; everything else uses the parcel table. */
|
|
58
|
+
export const LETTER_IMPORT_EVENT = /^LETTER\.[^.]+\.90\./;
|
|
59
|
+
/** The stage for a full dotted event code, or undefined when the code is not mapped. */
|
|
60
|
+
export function swissPostEventStage(eventCode) {
|
|
61
|
+
const code = eventCode.split('.').at(-1) ?? '';
|
|
62
|
+
return (LETTER_IMPORT_EVENT.test(eventCode) ? LETTER_IMPORT_STAGE_BY_CODE[code] : undefined)
|
|
63
|
+
?? EVENT_STAGE_BY_CODE[code];
|
|
64
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
{
|
|
2
|
+
"carrier": "swiss-post",
|
|
3
|
+
"entries": [
|
|
4
|
+
{ "code": "REPORTED", "stage": "registered", "confirmedBy": "prior-art", "firstSeen": "2026-09-12", "note": "Shipment-level globalStatus; reported as status 'pending'." },
|
|
5
|
+
{ "code": "REGISTERED", "stage": "registered", "confirmedBy": "fixture", "firstSeen": "2026-09-12", "note": "Shipment-level globalStatus; reported as status 'pending'." },
|
|
6
|
+
{ "code": "TO_BE_DELIVERED", "stage": "in_transit", "confirmedBy": "fixture", "firstSeen": "2026-09-12", "note": "Shipment-level globalStatus." },
|
|
7
|
+
{ "code": "IN_DELIVERY", "stage": "out_for_delivery", "confirmedBy": "fixture", "firstSeen": "2026-09-12", "note": "Shipment-level globalStatus." },
|
|
8
|
+
{ "code": "DELIVERED", "stage": "delivered", "confirmedBy": "fixture", "firstSeen": "2026-09-12", "note": "Shipment-level globalStatus; overridden by the newest event code, so a MyPost24 deposit stays ready_for_pickup." },
|
|
9
|
+
{ "code": "MISSED_DELIVERY", "stage": "failed_attempt", "confirmedBy": "prior-art", "firstSeen": "2026-09-12", "note": "Shipment-level globalStatus; reported as status 'exception'." },
|
|
10
|
+
{ "code": "NOT_DELIVERED", "stage": "failed_attempt", "confirmedBy": "prior-art", "firstSeen": "2026-09-12", "note": "Shipment-level globalStatus; reported as status 'exception'." },
|
|
11
|
+
{ "code": "RETURNED", "stage": "returned", "confirmedBy": "prior-art", "firstSeen": "2026-09-12", "note": "Shipment-level globalStatus; reported as status 'exception'." },
|
|
12
|
+
{ "code": "CUSTOMS", "stage": "customs", "confirmedBy": "prior-art", "firstSeen": "2026-09-12", "note": "Shipment-level globalStatus; reported as status 'in_transit'." },
|
|
13
|
+
{ "code": "600", "wording": "Your shipment will shortly be handed over to Swiss Post", "language": "en", "stage": "registered", "confirmedBy": "fixture", "firstSeen": "2026-09-12", "note": "Parcel event code; also carries a hard-coded fallback wording." },
|
|
14
|
+
{ "code": "820", "wording": "Shipment is being forwarded", "language": "en", "stage": "in_transit", "confirmedBy": "fixture", "firstSeen": "2026-09-12", "note": "Parcel event code." },
|
|
15
|
+
{ "code": "1003", "wording": "Loading into delivery vehicle", "language": "en", "stage": "out_for_delivery", "confirmedBy": "fixture", "firstSeen": "2026-09-12", "note": "Parcel event code; also carries a hard-coded fallback wording." },
|
|
16
|
+
{ "code": "1201", "wording": "Sorted for delivery", "language": "en", "stage": "in_transit", "confirmedBy": "prior-art", "firstSeen": "2026-09-12", "note": "Parcel event code; also carries a hard-coded fallback wording." },
|
|
17
|
+
{ "code": "1202", "wording": "Shipment was sorted", "language": "en", "stage": "in_transit", "confirmedBy": "prior-art", "firstSeen": "2026-09-12", "note": "Parcel event code; also carries a hard-coded fallback wording." },
|
|
18
|
+
{ "code": "2102", "wording": "Deposited in the MyPost24 machine", "language": "en", "stage": "ready_for_pickup", "confirmedBy": "fixture", "firstSeen": "2026-09-12", "note": "Parcel event code. Arrival in a locker, not a delivery, even when the shipment summary says DELIVERED." },
|
|
19
|
+
{ "code": "3600", "stage": "returned", "confirmedBy": "prior-art", "firstSeen": "2026-09-12", "note": "Parcel event code." },
|
|
20
|
+
{ "code": "4600", "stage": "delivered", "confirmedBy": "prior-art", "firstSeen": "2026-09-12", "note": "Parcel event code." },
|
|
21
|
+
{ "code": "LETTER.*.90.620", "wording": "Consignment recorded by the foreign sender (data delivered)", "language": "en", "stage": "registered", "confirmedBy": "fixture", "firstSeen": "2026-09-10", "note": "International letter/packet import scan; the wording would otherwise read as a delivery." },
|
|
22
|
+
{ "code": "LETTER.*.90.803", "wording": "Customs clearance process underway", "language": "en", "stage": "customs", "confirmedBy": "fixture", "firstSeen": "2026-09-10", "note": "International letter/packet import scan." },
|
|
23
|
+
{ "code": "LETTER.*.90.804", "wording": "Completion of customs clearance process", "language": "en", "stage": "in_transit", "confirmedBy": "fixture", "firstSeen": "2026-09-10", "note": "Completion, not active clearance." },
|
|
24
|
+
{ "code": "LETTER.*.90.805", "wording": "Completion of customs clearance process", "language": "en", "stage": "in_transit", "confirmedBy": "fixture", "firstSeen": "2026-09-10", "note": "Completion, not active clearance." },
|
|
25
|
+
{ "code": "LETTER.*.90.818", "wording": "Arrival in destination country", "language": "en", "stage": "in_transit", "confirmedBy": "fixture", "firstSeen": "2026-09-10", "note": "International letter/packet import scan." },
|
|
26
|
+
{ "code": "LETTER.*.90.912", "wording": "Time at which your consignment was mailed", "language": "en", "stage": "accepted", "confirmedBy": "fixture", "firstSeen": "2026-09-10", "note": "International letter/packet import scan." },
|
|
27
|
+
{ "code": "LETTER.*.90.915", "wording": "The consignment has left the border point", "language": "en", "stage": "in_transit", "confirmedBy": "fixture", "firstSeen": "2026-09-10", "note": "International letter/packet import scan." },
|
|
28
|
+
{ "code": "LETTER.*.90.1001", "wording": "Arrival at the collection/delivery point", "language": "en", "stage": "in_transit", "confirmedBy": "fixture", "firstSeen": "2026-09-10", "note": "Arrival at the office, not a handover to the recipient." },
|
|
29
|
+
{ "code": "LETTER.*.90.1213", "wording": "Sorted for delivery", "language": "en", "stage": "in_transit", "confirmedBy": "fixture", "firstSeen": "2026-09-10", "note": "International letter/packet import scan." },
|
|
30
|
+
{ "code": "LETTER.*.90.1218", "wording": "Sorted for delivery", "language": "en", "stage": "in_transit", "confirmedBy": "fixture", "firstSeen": "2026-09-10", "note": "International letter/packet import scan." },
|
|
31
|
+
{ "code": "any other event code", "confirmedBy": "prior-art", "firstSeen": "2026-09-12", "note": "Left without a stage: the event keeps its translated wording and its raw code, and the sync classifies and records it for review." }
|
|
32
|
+
]
|
|
33
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { AdapterFactory } from '../../core/adapter/index.js';
|
|
2
|
+
import type { CarrierResult } from '../../core/result/index.js';
|
|
3
|
+
export interface SwissPostCargoOptions {
|
|
4
|
+
timeoutMs?: number;
|
|
5
|
+
/** Test seam; production uses the global fetch. */
|
|
6
|
+
fetcher?: typeof fetch;
|
|
7
|
+
/** Test seam for the clock that decides which reference shipments are current. */
|
|
8
|
+
now?: () => number;
|
|
9
|
+
}
|
|
10
|
+
export declare function normalizeSwissPostCargoTrackingNumber(raw: string): string;
|
|
11
|
+
export declare function swissPostCargoTrackingUrl(raw: string): string;
|
|
12
|
+
export declare function parseSwissPostCargoResponse(payload: unknown, rawTrackingNumber: string, now?: number): CarrierResult;
|
|
13
|
+
export declare class SwissPostCargoTracker {
|
|
14
|
+
#private;
|
|
15
|
+
readonly timeoutMs: number;
|
|
16
|
+
constructor(options?: number | SwissPostCargoOptions);
|
|
17
|
+
fetch(rawTrackingNumber: string): Promise<CarrierResult>;
|
|
18
|
+
}
|
|
19
|
+
export declare const adapter: AdapterFactory;
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
import { InputRequiredError, NotFoundError, SchemaError } from '../../core/errors/index.js';
|
|
2
|
+
import { isoTime, zonedTime } from '../../core/time/index.js';
|
|
3
|
+
import { cleanScalar, fetchBounded, parseJsonBytes } from '../../core/transport/index.js';
|
|
4
|
+
import { isRecord } from '../../core/types.js';
|
|
5
|
+
import { referenceConsignment } from './reference.js';
|
|
6
|
+
import { statusFor } from './status.js';
|
|
7
|
+
// Protocol provenance (inspected 2026-08-30): the source map published by the
|
|
8
|
+
// official public tracker posts { Identifier } to this anonymous endpoint and
|
|
9
|
+
// treats a null Data property as a clean not-found result.
|
|
10
|
+
// https://apv.swisspost-cargo.com/static/js/907.9a0b939a.chunk.js.map
|
|
11
|
+
const TRACKING_API = 'https://eosapi.swisspost-cargo.com/api/trackandtrace/public';
|
|
12
|
+
const TRACKING_PAGE = 'https://apv.swisspost-cargo.com/public/trackandtrace';
|
|
13
|
+
const PROVIDER = 'Swiss Post Cargo';
|
|
14
|
+
const ZONE = 'Europe/Zurich';
|
|
15
|
+
const DEFAULT_TIMEOUT_MS = 15_000;
|
|
16
|
+
const MAX_RESPONSE_BYTES = 2_000_000;
|
|
17
|
+
/**
|
|
18
|
+
* The endpoint sends Swiss wall-clock ISO-8601 without an offset
|
|
19
|
+
* (`2026-08-30T12:30:00.777`). It is read in Europe/Zurich, never in the
|
|
20
|
+
* server's zone, and so are the dotted and slashed fallbacks. An explicit
|
|
21
|
+
* offset or `Z` is kept as sent.
|
|
22
|
+
*/
|
|
23
|
+
function eventTimestamp(value) {
|
|
24
|
+
return isoTime(value, ZONE)
|
|
25
|
+
?? zonedTime(value, 'dd.MM.yyyy HH:mm:ss', ZONE)
|
|
26
|
+
?? zonedTime(value, 'dd.MM.yyyy HH:mm', ZONE)
|
|
27
|
+
?? zonedTime(value, 'dd/MM/yyyy HH:mm:ss', ZONE);
|
|
28
|
+
}
|
|
29
|
+
export function normalizeSwissPostCargoTrackingNumber(raw) {
|
|
30
|
+
const value = raw.toLocaleUpperCase('en-US').replace(/[\s.-]/g, '');
|
|
31
|
+
if (!/^(?=.*\d)[A-Z0-9]{6,40}$/.test(value)) {
|
|
32
|
+
throw new InputRequiredError(PROVIDER, 'a 6- to 40-character barcode or reference');
|
|
33
|
+
}
|
|
34
|
+
return value;
|
|
35
|
+
}
|
|
36
|
+
export function swissPostCargoTrackingUrl(raw) {
|
|
37
|
+
return `${TRACKING_PAGE}/${encodeURIComponent(normalizeSwissPostCargoTrackingNumber(raw))}`;
|
|
38
|
+
}
|
|
39
|
+
export function parseSwissPostCargoResponse(payload, rawTrackingNumber, now = Date.now()) {
|
|
40
|
+
const trackingNumber = normalizeSwissPostCargoTrackingNumber(rawTrackingNumber);
|
|
41
|
+
if (!isRecord(payload) || !Object.hasOwn(payload, 'Data')) {
|
|
42
|
+
throw new SchemaError(PROVIDER, 'Swiss Post Cargo returned an invalid tracking response');
|
|
43
|
+
}
|
|
44
|
+
if (payload.Data === null)
|
|
45
|
+
throw new NotFoundError(PROVIDER);
|
|
46
|
+
if (!Array.isArray(payload.Data) || payload.Data.length === 0) {
|
|
47
|
+
throw new SchemaError(PROVIDER, 'Swiss Post Cargo returned an invalid tracking response');
|
|
48
|
+
}
|
|
49
|
+
let shipments = payload.Data.filter(isRecord);
|
|
50
|
+
if (shipments.length === 0) {
|
|
51
|
+
throw new SchemaError(PROVIDER, 'Swiss Post Cargo returned an invalid tracking response');
|
|
52
|
+
}
|
|
53
|
+
const responseType = Number(payload.Type);
|
|
54
|
+
if (responseType !== 1 && responseType !== 2 && responseType !== 3) {
|
|
55
|
+
throw new SchemaError(PROVIDER, 'Swiss Post Cargo returned an invalid tracking response type');
|
|
56
|
+
}
|
|
57
|
+
if (responseType !== 2) {
|
|
58
|
+
const identifiers = shipments
|
|
59
|
+
.map((shipment) => cleanScalar(shipment.Identifier, 64).toLocaleUpperCase('en-US'))
|
|
60
|
+
.filter(Boolean);
|
|
61
|
+
if (identifiers.length === 0) {
|
|
62
|
+
throw new SchemaError(PROVIDER, 'Swiss Post Cargo returned no shipment identifier');
|
|
63
|
+
}
|
|
64
|
+
if (!identifiers.includes(trackingNumber)) {
|
|
65
|
+
throw new SchemaError(PROVIDER, 'Swiss Post Cargo returned a different shipment');
|
|
66
|
+
}
|
|
67
|
+
shipments = shipments.filter((shipment) => (cleanScalar(shipment.Identifier, 64).toLocaleUpperCase('en-US') === trackingNumber));
|
|
68
|
+
}
|
|
69
|
+
// Type 3, which the tracker's source map does not name, relays Swiss Post's
|
|
70
|
+
// own scans (placeholder `PST` codes, no place) for a parcel barcode the eos
|
|
71
|
+
// system does not hold. The parcel is Swiss Post's, so this is a not-found
|
|
72
|
+
// here and routing asks the Swiss Post adapter instead.
|
|
73
|
+
if (responseType === 3) {
|
|
74
|
+
throw new NotFoundError(PROVIDER, 'Swiss Post Cargo only relays Swiss Post tracking for this barcode');
|
|
75
|
+
}
|
|
76
|
+
if (responseType === 2) {
|
|
77
|
+
shipments = referenceConsignment(shipments, (shipment) => (Array.isArray(shipment.History) ? shipment.History.filter(isRecord) : []).map((row) => eventTimestamp(row.TimeStamp)?.timestamp ?? Number.NaN), PROVIDER, now);
|
|
78
|
+
}
|
|
79
|
+
const parsedEvents = [];
|
|
80
|
+
const seen = new Set();
|
|
81
|
+
let index = 0;
|
|
82
|
+
for (const shipment of shipments.slice(0, 100)) {
|
|
83
|
+
if (!Array.isArray(shipment.History))
|
|
84
|
+
continue;
|
|
85
|
+
for (const candidate of shipment.History.slice(0, 500)) {
|
|
86
|
+
if (!isRecord(candidate))
|
|
87
|
+
continue;
|
|
88
|
+
const time = eventTimestamp(candidate.TimeStamp);
|
|
89
|
+
const description = cleanScalar(candidate.Description);
|
|
90
|
+
if (!time || !description)
|
|
91
|
+
continue;
|
|
92
|
+
const location = cleanScalar(candidate.City, 120);
|
|
93
|
+
const code = cleanScalar(candidate.Status, 32).toLocaleUpperCase('en-US');
|
|
94
|
+
const identity = JSON.stringify([time.iso, location, description, code]);
|
|
95
|
+
if (seen.has(identity))
|
|
96
|
+
continue;
|
|
97
|
+
seen.add(identity);
|
|
98
|
+
const classified = statusFor(code, description);
|
|
99
|
+
parsedEvents.push({
|
|
100
|
+
event: {
|
|
101
|
+
time: time.iso,
|
|
102
|
+
location,
|
|
103
|
+
description,
|
|
104
|
+
stage: classified.stage,
|
|
105
|
+
...(code ? { provider_code: code } : {}),
|
|
106
|
+
},
|
|
107
|
+
status: classified.status,
|
|
108
|
+
timestamp: time.timestamp,
|
|
109
|
+
index,
|
|
110
|
+
});
|
|
111
|
+
index += 1;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
parsedEvents.sort((left, right) => right.timestamp - left.timestamp || left.index - right.index);
|
|
115
|
+
const events = parsedEvents.slice(0, 100);
|
|
116
|
+
if (events.length === 0) {
|
|
117
|
+
throw new SchemaError(PROVIDER, 'Swiss Post Cargo returned no usable tracking events');
|
|
118
|
+
}
|
|
119
|
+
const latest = events[0];
|
|
120
|
+
return {
|
|
121
|
+
status: latest.status,
|
|
122
|
+
current_stage: latest.event.stage,
|
|
123
|
+
last_status_text: latest.event.description,
|
|
124
|
+
last_update: latest.event.time,
|
|
125
|
+
expected_delivery: null,
|
|
126
|
+
timezone: ZONE,
|
|
127
|
+
events: events.map(({ event }) => event),
|
|
128
|
+
tracking_url: swissPostCargoTrackingUrl(trackingNumber),
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
export class SwissPostCargoTracker {
|
|
132
|
+
timeoutMs;
|
|
133
|
+
#fetcher;
|
|
134
|
+
#now;
|
|
135
|
+
constructor(options = {}) {
|
|
136
|
+
const { timeoutMs = DEFAULT_TIMEOUT_MS, fetcher, now = Date.now } = typeof options === 'number' ? { timeoutMs: options } : options;
|
|
137
|
+
if (!Number.isFinite(timeoutMs) || timeoutMs <= 0) {
|
|
138
|
+
throw new TypeError('Swiss Post Cargo timeout must be positive');
|
|
139
|
+
}
|
|
140
|
+
this.timeoutMs = timeoutMs;
|
|
141
|
+
this.#fetcher = fetcher;
|
|
142
|
+
this.#now = now;
|
|
143
|
+
}
|
|
144
|
+
async fetch(rawTrackingNumber) {
|
|
145
|
+
const trackingNumber = normalizeSwissPostCargoTrackingNumber(rawTrackingNumber);
|
|
146
|
+
const { bytes } = await fetchBounded(TRACKING_API, {
|
|
147
|
+
method: 'POST',
|
|
148
|
+
headers: {
|
|
149
|
+
Accept: 'application/json',
|
|
150
|
+
'Accept-Language': 'en-CH,en;q=0.9',
|
|
151
|
+
'Content-Type': 'application/json',
|
|
152
|
+
Origin: 'https://apv.swisspost-cargo.com',
|
|
153
|
+
Referer: `${TRACKING_PAGE}/`,
|
|
154
|
+
'User-Agent': 'Mozilla/5.0 (compatible; DeliveryTracker/1.0)',
|
|
155
|
+
},
|
|
156
|
+
body: JSON.stringify({ Identifier: trackingNumber }),
|
|
157
|
+
}, {
|
|
158
|
+
provider: 'Swiss Post Cargo tracking',
|
|
159
|
+
timeoutMs: this.timeoutMs,
|
|
160
|
+
maxBytes: MAX_RESPONSE_BYTES,
|
|
161
|
+
...(this.#fetcher ? { fetcher: this.#fetcher } : {}),
|
|
162
|
+
});
|
|
163
|
+
return parseSwissPostCargoResponse(parseJsonBytes(bytes, PROVIDER), trackingNumber, this.#now());
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
export const adapter = (environment) => {
|
|
167
|
+
const tracker = new SwissPostCargoTracker({ fetcher: environment.fetcher });
|
|
168
|
+
return {
|
|
169
|
+
id: 'swiss-post-cargo',
|
|
170
|
+
steps: ['direct'],
|
|
171
|
+
track: (input) => tracker.fetch(input.number),
|
|
172
|
+
};
|
|
173
|
+
};
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "swiss-post-cargo",
|
|
3
|
+
"displayName": "Swiss Post Cargo",
|
|
4
|
+
"aliases": [
|
|
5
|
+
"Hugger"
|
|
6
|
+
],
|
|
7
|
+
"region": {
|
|
8
|
+
"countries": [
|
|
9
|
+
"CH"
|
|
10
|
+
]
|
|
11
|
+
},
|
|
12
|
+
"brand": {
|
|
13
|
+
"color": "#ffcc00"
|
|
14
|
+
},
|
|
15
|
+
"selectable": true,
|
|
16
|
+
"timezone": "Europe/Zurich",
|
|
17
|
+
"tracking": {
|
|
18
|
+
"mode": "automatic",
|
|
19
|
+
"adapter": "swiss-post-cargo",
|
|
20
|
+
"steps": [
|
|
21
|
+
"direct"
|
|
22
|
+
]
|
|
23
|
+
},
|
|
24
|
+
"capabilities": [
|
|
25
|
+
"history",
|
|
26
|
+
"location",
|
|
27
|
+
"provider_code"
|
|
28
|
+
],
|
|
29
|
+
"portal": {
|
|
30
|
+
"url": "https://apv.swisspost-cargo.com/public/trackandtrace/{trackingNumber}",
|
|
31
|
+
"canaryUrl": "https://apv.swisspost-cargo.com/public/trackandtrace",
|
|
32
|
+
"shows": [
|
|
33
|
+
"status",
|
|
34
|
+
"history",
|
|
35
|
+
"location",
|
|
36
|
+
"recipient_name",
|
|
37
|
+
"recipient_address"
|
|
38
|
+
],
|
|
39
|
+
"scraped": [
|
|
40
|
+
"status",
|
|
41
|
+
"history",
|
|
42
|
+
"location",
|
|
43
|
+
"provider_code"
|
|
44
|
+
],
|
|
45
|
+
"discarded": [
|
|
46
|
+
"recipient_name",
|
|
47
|
+
"recipient_address"
|
|
48
|
+
],
|
|
49
|
+
"unavailable": []
|
|
50
|
+
},
|
|
51
|
+
"links": [
|
|
52
|
+
{
|
|
53
|
+
"domains": [
|
|
54
|
+
"apv.swisspost-cargo.com"
|
|
55
|
+
],
|
|
56
|
+
"path": "^/public/trackandtrace/([^/?#]+)/?$"
|
|
57
|
+
}
|
|
58
|
+
],
|
|
59
|
+
"detection": []
|
|
60
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
{
|
|
2
|
+
"carrier": "swiss-post-cargo",
|
|
3
|
+
"records": [
|
|
4
|
+
{
|
|
5
|
+
"number": "12345678",
|
|
6
|
+
"role": "shipment",
|
|
7
|
+
"evidence": "official_documentation_example",
|
|
8
|
+
"source": {
|
|
9
|
+
"url": "https://portal-de1.swisspost-cargo.com/Track",
|
|
10
|
+
"date": "2026-09-30"
|
|
11
|
+
},
|
|
12
|
+
"expect": {
|
|
13
|
+
"carrier": "unknown",
|
|
14
|
+
"confidence": "low",
|
|
15
|
+
"candidates": [
|
|
16
|
+
"mondial-relay",
|
|
17
|
+
"heppner"
|
|
18
|
+
]
|
|
19
|
+
},
|
|
20
|
+
"note": "Example Sendungsnummer from the carrier's tracking form, where it goes with a Betriebsnummer; on its own eos matches it to unrelated shipments. The source attributes it to Swiss Post Cargo, which no rule claims."
|
|
21
|
+
}
|
|
22
|
+
]
|
|
23
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The barcodes an eos customer reference (`Type: 2`) stands for in a parcel.
|
|
3
|
+
*
|
|
4
|
+
* Shippers reuse references, so an answer can list unrelated shipments years
|
|
5
|
+
* apart; the official tracker shows each barcode on its own behind a filter. A
|
|
6
|
+
* parcel needs one consignment: the barcodes first scanned within a day of the
|
|
7
|
+
* newest one, read only when they have a scan from the last 60 days and no
|
|
8
|
+
* other barcode does. Any other answer names no single current shipment and is
|
|
9
|
+
* a not-found. `scanTimes` gives one instant per history row, NaN when the row's
|
|
10
|
+
* time cannot be read; barcodes without a dated scan cannot be placed and are
|
|
11
|
+
* dropped.
|
|
12
|
+
*/
|
|
13
|
+
export declare function referenceConsignment<T>(shipments: readonly T[], scanTimes: (shipment: T) => number[], provider: string, now: number): T[];
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { NotFoundError, SchemaError } from '../../core/errors/index.js';
|
|
2
|
+
const DAY_MS = 24 * 3_600_000;
|
|
3
|
+
/** The pieces of one consignment are announced and picked up together. */
|
|
4
|
+
const CONSIGNMENT_SPREAD_MS = DAY_MS;
|
|
5
|
+
/** Carrier recognition's window: a shipment quiet this long is an older one reusing the reference. */
|
|
6
|
+
const CURRENT_MS = 60 * DAY_MS;
|
|
7
|
+
/**
|
|
8
|
+
* The barcodes an eos customer reference (`Type: 2`) stands for in a parcel.
|
|
9
|
+
*
|
|
10
|
+
* Shippers reuse references, so an answer can list unrelated shipments years
|
|
11
|
+
* apart; the official tracker shows each barcode on its own behind a filter. A
|
|
12
|
+
* parcel needs one consignment: the barcodes first scanned within a day of the
|
|
13
|
+
* newest one, read only when they have a scan from the last 60 days and no
|
|
14
|
+
* other barcode does. Any other answer names no single current shipment and is
|
|
15
|
+
* a not-found. `scanTimes` gives one instant per history row, NaN when the row's
|
|
16
|
+
* time cannot be read; barcodes without a dated scan cannot be placed and are
|
|
17
|
+
* dropped.
|
|
18
|
+
*/
|
|
19
|
+
export function referenceConsignment(shipments, scanTimes, provider, now) {
|
|
20
|
+
const scanned = shipments.map((shipment) => ({ shipment, times: scanTimes(shipment) }));
|
|
21
|
+
const timelines = scanned.flatMap(({ shipment, times }) => {
|
|
22
|
+
const dated = times.filter(Number.isFinite);
|
|
23
|
+
if (dated.length === 0)
|
|
24
|
+
return [];
|
|
25
|
+
return [{
|
|
26
|
+
shipment,
|
|
27
|
+
first: dated.reduce((earliest, time) => Math.min(earliest, time)),
|
|
28
|
+
last: dated.reduce((latest, time) => Math.max(latest, time)),
|
|
29
|
+
}];
|
|
30
|
+
});
|
|
31
|
+
if (timelines.length === 0) {
|
|
32
|
+
if (scanned.some(({ times }) => times.length > 0)) {
|
|
33
|
+
throw new SchemaError(provider, `${provider} returned reference scans without a readable time`);
|
|
34
|
+
}
|
|
35
|
+
throw new NotFoundError(provider, `${provider} has no scans for this reference yet`);
|
|
36
|
+
}
|
|
37
|
+
const newest = timelines.reduce((latest, timeline) => Math.max(latest, timeline.first), Number.NEGATIVE_INFINITY);
|
|
38
|
+
const joins = (timeline) => newest - timeline.first <= CONSIGNMENT_SPREAD_MS;
|
|
39
|
+
const current = (timeline) => now - timeline.last < CURRENT_MS;
|
|
40
|
+
const consignment = timelines.filter(joins);
|
|
41
|
+
if (!consignment.some(current)) {
|
|
42
|
+
throw new NotFoundError(provider, `${provider} only has older shipments for this reference`);
|
|
43
|
+
}
|
|
44
|
+
if (timelines.some((timeline) => !joins(timeline) && current(timeline))) {
|
|
45
|
+
throw new NotFoundError(provider, `${provider} has several shipments for this reference`);
|
|
46
|
+
}
|
|
47
|
+
return consignment.map((timeline) => timeline.shipment);
|
|
48
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { CarrierStatus } from '../../core/result/index.js';
|
|
2
|
+
import type { Stage } from '../../generated/catalog.js';
|
|
3
|
+
/** Lower-cased, accent-free wording, for language-independent matching. */
|
|
4
|
+
export declare function comparable(value: unknown): string;
|
|
5
|
+
/**
|
|
6
|
+
* Confirmed codes (observed on the public tracker, 2026-08-30): DLV/POD/P40/
|
|
7
|
+
* IMG/SIG accompany a delivery, SCA a delivery-round scan, NTF an
|
|
8
|
+
* announcement, RFS an acceptance. Everything else stays in transit.
|
|
9
|
+
*/
|
|
10
|
+
export declare function statusFor(code: string, description: string): {
|
|
11
|
+
status: CarrierStatus;
|
|
12
|
+
stage: Stage;
|
|
13
|
+
};
|