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,24 @@
|
|
|
1
|
+
import type { Recognition } from '../adapter/index.js';
|
|
2
|
+
import type { RecognitionCandidate } from '../catalog/recognition.js';
|
|
3
|
+
export { MAX_RECOGNITIONS, recognitionCandidates, type RecognitionCandidate, } from '../catalog/recognition.js';
|
|
4
|
+
export type RecognitionStatus = 'known' | 'unknown' | 'failed';
|
|
5
|
+
export interface RecognitionOutcome extends RecognitionCandidate {
|
|
6
|
+
status: RecognitionStatus;
|
|
7
|
+
lastActivityAt: string | null;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Ask every candidate at once. A candidate that throws, or has not answered
|
|
11
|
+
* when the budget runs out, is `failed`; its lookup may still finish in the
|
|
12
|
+
* background, but its answer is ignored.
|
|
13
|
+
*/
|
|
14
|
+
export declare function recognizeAll(candidates: readonly RecognitionCandidate[], recognize: (carrier: string) => Promise<Recognition>, budgetMs: number): Promise<RecognitionOutcome[]>;
|
|
15
|
+
/**
|
|
16
|
+
* The carrier the answers settle on: the only recent one, else the only one
|
|
17
|
+
* number evidence backs, else, when every answer comes from one brand's
|
|
18
|
+
* networks, the most popular of them. Unrelated carriers that all know the
|
|
19
|
+
* number stay a choice for the user.
|
|
20
|
+
*/
|
|
21
|
+
export declare function settleRecognition(outcomes: readonly RecognitionOutcome[], now?: Date): {
|
|
22
|
+
carrier?: string;
|
|
23
|
+
choices: string[];
|
|
24
|
+
};
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { carrierBrand } from '../catalog/networks.js';
|
|
2
|
+
import { CARRIER_RECOGNITION_RANKS } from '../../generated/recognition.js';
|
|
3
|
+
export { MAX_RECOGNITIONS, recognitionCandidates, } from '../catalog/recognition.js';
|
|
4
|
+
/**
|
|
5
|
+
* Carrier recognition: when a number's shape fits several carriers, ask the
|
|
6
|
+
* ones that can answer cheaply whether they know it. The Add sheet runs it
|
|
7
|
+
* while the user is still in the form, the first sync runs it again after
|
|
8
|
+
* saving, and routing keeps retrying it while the filed carrier cannot track
|
|
9
|
+
* the number. Which carriers qualify is shared with the Add sheets
|
|
10
|
+
* (`@carriers/core/catalog/recognition`), which name them while they answer.
|
|
11
|
+
*/
|
|
12
|
+
/** An answer for a parcel quiet this long is taken for an older parcel that reused the number. */
|
|
13
|
+
const RECENT_ACTIVITY_MS = 60 * 24 * 3_600_000;
|
|
14
|
+
/**
|
|
15
|
+
* Ask every candidate at once. A candidate that throws, or has not answered
|
|
16
|
+
* when the budget runs out, is `failed`; its lookup may still finish in the
|
|
17
|
+
* background, but its answer is ignored.
|
|
18
|
+
*/
|
|
19
|
+
export async function recognizeAll(candidates, recognize, budgetMs) {
|
|
20
|
+
const outcomes = candidates.map((candidate) => ({ ...candidate, status: 'failed', lastActivityAt: null }));
|
|
21
|
+
let timer;
|
|
22
|
+
const deadline = new Promise((resolve) => { timer = setTimeout(resolve, budgetMs); });
|
|
23
|
+
const asked = candidates.map(async (candidate, index) => {
|
|
24
|
+
try {
|
|
25
|
+
const answer = await recognize(candidate.carrier);
|
|
26
|
+
outcomes[index] = { ...candidate, status: answer.known ? 'known' : 'unknown', lastActivityAt: answer.lastActivityAt ?? null };
|
|
27
|
+
}
|
|
28
|
+
catch {
|
|
29
|
+
// Stays failed: an outage is no answer about the number.
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
try {
|
|
33
|
+
await Promise.race([Promise.all(asked), deadline]);
|
|
34
|
+
}
|
|
35
|
+
finally {
|
|
36
|
+
clearTimeout(timer);
|
|
37
|
+
}
|
|
38
|
+
return outcomes.map((outcome) => ({ ...outcome }));
|
|
39
|
+
}
|
|
40
|
+
function recent(outcome, now) {
|
|
41
|
+
const at = Date.parse(outcome.lastActivityAt ?? '');
|
|
42
|
+
return !Number.isFinite(at) || now.getTime() - at < RECENT_ACTIVITY_MS;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* The carrier the answers settle on: the only recent one, else the only one
|
|
46
|
+
* number evidence backs, else, when every answer comes from one brand's
|
|
47
|
+
* networks, the most popular of them. Unrelated carriers that all know the
|
|
48
|
+
* number stay a choice for the user.
|
|
49
|
+
*/
|
|
50
|
+
export function settleRecognition(outcomes, now = new Date()) {
|
|
51
|
+
const known = outcomes.filter((outcome) => outcome.status === 'known' && recent(outcome, now));
|
|
52
|
+
if (known.length === 0)
|
|
53
|
+
return { choices: [] };
|
|
54
|
+
if (known.length === 1)
|
|
55
|
+
return { carrier: known[0].carrier, choices: [] };
|
|
56
|
+
const backed = known.filter((outcome) => outcome.preferred);
|
|
57
|
+
if (backed.length === 1)
|
|
58
|
+
return { carrier: backed[0].carrier, choices: [] };
|
|
59
|
+
const brands = new Set(known.map((outcome) => carrierBrand(outcome.carrier) ?? outcome.carrier));
|
|
60
|
+
if (brands.size === 1) {
|
|
61
|
+
const [best] = [...known].sort((left, right) => (CARRIER_RECOGNITION_RANKS[right.carrier] ?? 0) - (CARRIER_RECOGNITION_RANKS[left.carrier] ?? 0));
|
|
62
|
+
return { carrier: best.carrier, choices: [] };
|
|
63
|
+
}
|
|
64
|
+
return { choices: known.map((outcome) => outcome.carrier) };
|
|
65
|
+
}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The result every adapter and provider returns, and its normalization.
|
|
3
|
+
*
|
|
4
|
+
* What it is: the shape contract between the carrier package and the host
|
|
5
|
+
* (status, stage, estimate, sender/pickup names, weight, and the projected
|
|
6
|
+
* events). What it is not: it does not classify wording or touch the
|
|
7
|
+
* database; the host's sync does that after `normalizeCarrierResult`.
|
|
8
|
+
* An event with no `stage` means "no explicit mapping" (see
|
|
9
|
+
* ARCHITECTURE.md § Status model).
|
|
10
|
+
*/
|
|
11
|
+
import { type JsonObject } from '../types.js';
|
|
12
|
+
export type CarrierStatus = 'pending' | 'in_transit' | 'out_for_delivery' | 'delivered' | 'exception' | 'unknown';
|
|
13
|
+
export interface CarrierEvent extends JsonObject {
|
|
14
|
+
time?: string;
|
|
15
|
+
location?: string;
|
|
16
|
+
description?: string;
|
|
17
|
+
stage?: string;
|
|
18
|
+
provider_code?: string;
|
|
19
|
+
/**
|
|
20
|
+
* Where the carrier itself puts the scanning facility, when it says so. The
|
|
21
|
+
* map uses it only where it agrees with the town in `location`.
|
|
22
|
+
*/
|
|
23
|
+
point?: EventPoint;
|
|
24
|
+
}
|
|
25
|
+
export interface EventPoint extends JsonObject {
|
|
26
|
+
latitude: number;
|
|
27
|
+
longitude: number;
|
|
28
|
+
}
|
|
29
|
+
export interface CarrierResult extends JsonObject {
|
|
30
|
+
status?: CarrierStatus;
|
|
31
|
+
current_stage?: string;
|
|
32
|
+
last_status_text?: string | null;
|
|
33
|
+
last_update?: string | null;
|
|
34
|
+
expected_delivery?: string | null;
|
|
35
|
+
expected_delivery_from?: string | null;
|
|
36
|
+
sender_name?: string | null;
|
|
37
|
+
receiver_name?: string | null;
|
|
38
|
+
pickup_point?: string | null;
|
|
39
|
+
delivered_at?: string | null;
|
|
40
|
+
weight_kg?: number | null;
|
|
41
|
+
dimensions_text?: string | null;
|
|
42
|
+
/** A declared delivery partner, still subject to direct identity/progress confirmation. */
|
|
43
|
+
delivery_carrier?: string;
|
|
44
|
+
destination_country?: string;
|
|
45
|
+
/** Preserve provider country labels when no verified ISO mapping is available. */
|
|
46
|
+
destination_country_name?: string;
|
|
47
|
+
delivery_tracking_number?: string;
|
|
48
|
+
canonical_tracking_number?: string;
|
|
49
|
+
international_tracking_number?: string;
|
|
50
|
+
timezone?: string;
|
|
51
|
+
/** An identity-bound current status without a scan history. */
|
|
52
|
+
summary_only?: boolean;
|
|
53
|
+
events?: CarrierEvent[];
|
|
54
|
+
}
|
|
55
|
+
/** A carrier's coordinates for a scan, or null when they are not a usable point. */
|
|
56
|
+
export declare function eventPoint(latitude: unknown, longitude: unknown): EventPoint | null;
|
|
57
|
+
export declare function normalizeCarrierResult(value: unknown): CarrierResult;
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The result every adapter and provider returns, and its normalization.
|
|
3
|
+
*
|
|
4
|
+
* What it is: the shape contract between the carrier package and the host
|
|
5
|
+
* (status, stage, estimate, sender/pickup names, weight, and the projected
|
|
6
|
+
* events). What it is not: it does not classify wording or touch the
|
|
7
|
+
* database; the host's sync does that after `normalizeCarrierResult`.
|
|
8
|
+
* An event with no `stage` means "no explicit mapping" (see
|
|
9
|
+
* ARCHITECTURE.md § Status model).
|
|
10
|
+
*/
|
|
11
|
+
import { isRecord } from '../types.js';
|
|
12
|
+
import { CARRIER_CATALOG, STAGES } from '../../generated/catalog.js';
|
|
13
|
+
const STATUSES = new Set([
|
|
14
|
+
'pending',
|
|
15
|
+
'in_transit',
|
|
16
|
+
'out_for_delivery',
|
|
17
|
+
'delivered',
|
|
18
|
+
'exception',
|
|
19
|
+
'unknown',
|
|
20
|
+
]);
|
|
21
|
+
const CURRENT_STAGES = new Set(STAGES);
|
|
22
|
+
const OPTIONAL_TEXT_FIELDS = [
|
|
23
|
+
'last_status_text',
|
|
24
|
+
'last_update',
|
|
25
|
+
'expected_delivery',
|
|
26
|
+
'expected_delivery_from',
|
|
27
|
+
'sender_name',
|
|
28
|
+
'receiver_name',
|
|
29
|
+
'pickup_point',
|
|
30
|
+
'delivered_at',
|
|
31
|
+
'dimensions_text',
|
|
32
|
+
'canonical_tracking_number',
|
|
33
|
+
'international_tracking_number',
|
|
34
|
+
'timezone',
|
|
35
|
+
];
|
|
36
|
+
const EVENT_TEXT_FIELDS = ['time', 'location', 'description', 'stage'];
|
|
37
|
+
/** A carrier's coordinates for a scan, or null when they are not a usable point. */
|
|
38
|
+
export function eventPoint(latitude, longitude) {
|
|
39
|
+
const number = (value) => typeof value === 'string' && value.trim() ? Number(value) : value;
|
|
40
|
+
const lat = number(latitude);
|
|
41
|
+
const lon = number(longitude);
|
|
42
|
+
if (typeof lat !== 'number' || typeof lon !== 'number' || !Number.isFinite(lat) || !Number.isFinite(lon))
|
|
43
|
+
return null;
|
|
44
|
+
// 0,0 is a missing value, not a scan in the Gulf of Guinea.
|
|
45
|
+
if (Math.abs(lat) > 90 || Math.abs(lon) > 180 || (lat === 0 && lon === 0))
|
|
46
|
+
return null;
|
|
47
|
+
// Four decimals is about ten metres: a building, not a desk.
|
|
48
|
+
return { latitude: Math.round(lat * 1e4) / 1e4, longitude: Math.round(lon * 1e4) / 1e4 };
|
|
49
|
+
}
|
|
50
|
+
export function normalizeCarrierResult(value) {
|
|
51
|
+
if (!isRecord(value))
|
|
52
|
+
throw new TypeError('The carrier adapter returned an invalid response');
|
|
53
|
+
const normalized = { ...value };
|
|
54
|
+
normalized.status = typeof value.status === 'string' && STATUSES.has(value.status)
|
|
55
|
+
? value.status
|
|
56
|
+
: 'unknown';
|
|
57
|
+
if (value.current_stage !== undefined) {
|
|
58
|
+
if (typeof value.current_stage !== 'string' || !CURRENT_STAGES.has(value.current_stage)) {
|
|
59
|
+
throw new TypeError('The carrier adapter returned an invalid current stage');
|
|
60
|
+
}
|
|
61
|
+
normalized.current_stage = value.current_stage;
|
|
62
|
+
}
|
|
63
|
+
for (const field of OPTIONAL_TEXT_FIELDS) {
|
|
64
|
+
const fieldValue = normalized[field];
|
|
65
|
+
if (fieldValue != null && typeof fieldValue !== 'string') {
|
|
66
|
+
throw new TypeError(`The carrier adapter returned an invalid ${field.replaceAll('_', ' ')}`);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
const weight = normalized.weight_kg;
|
|
70
|
+
if (weight != null && (typeof weight !== 'number' || !Number.isFinite(weight) || weight < 0)) {
|
|
71
|
+
throw new TypeError('The carrier adapter returned an invalid parcel weight');
|
|
72
|
+
}
|
|
73
|
+
// Optional routing evidence must not discard otherwise valid tracking history.
|
|
74
|
+
// A carrier can report a verified downstream reference without naming the
|
|
75
|
+
// operator. Preserve that independent evidence for catalog-based discovery.
|
|
76
|
+
if ((normalized.delivery_carrier != null && (typeof normalized.delivery_carrier !== 'string'
|
|
77
|
+
|| !Object.hasOwn(CARRIER_CATALOG, normalized.delivery_carrier)))
|
|
78
|
+
|| (normalized.delivery_tracking_number != null && (typeof normalized.delivery_tracking_number !== 'string'
|
|
79
|
+
|| !/^[A-Z0-9]{4,40}$/.test(normalized.delivery_tracking_number)))) {
|
|
80
|
+
delete normalized.delivery_carrier;
|
|
81
|
+
delete normalized.delivery_tracking_number;
|
|
82
|
+
}
|
|
83
|
+
if (typeof normalized.destination_country !== 'string' || !/^[A-Z]{2}$/.test(normalized.destination_country)) {
|
|
84
|
+
delete normalized.destination_country;
|
|
85
|
+
}
|
|
86
|
+
if (typeof normalized.destination_country_name !== 'string' || normalized.destination_country_name.length > 80) {
|
|
87
|
+
delete normalized.destination_country_name;
|
|
88
|
+
}
|
|
89
|
+
const rawEvents = normalized.events ?? [];
|
|
90
|
+
if (!Array.isArray(rawEvents)) {
|
|
91
|
+
throw new TypeError('The carrier adapter returned invalid tracking events');
|
|
92
|
+
}
|
|
93
|
+
normalized.events = rawEvents.map((rawEvent) => {
|
|
94
|
+
if (!isRecord(rawEvent)) {
|
|
95
|
+
throw new TypeError('The carrier adapter returned an invalid tracking event');
|
|
96
|
+
}
|
|
97
|
+
for (const field of EVENT_TEXT_FIELDS) {
|
|
98
|
+
const fieldValue = rawEvent[field];
|
|
99
|
+
if (fieldValue != null && typeof fieldValue !== 'string') {
|
|
100
|
+
throw new TypeError('The carrier adapter returned an invalid tracking event');
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
const event = { ...rawEvent };
|
|
104
|
+
if (event.point !== undefined) {
|
|
105
|
+
const point = isRecord(event.point) ? eventPoint(event.point.latitude, event.point.longitude) : null;
|
|
106
|
+
if (point)
|
|
107
|
+
event.point = point;
|
|
108
|
+
else
|
|
109
|
+
delete event.point;
|
|
110
|
+
}
|
|
111
|
+
return event;
|
|
112
|
+
});
|
|
113
|
+
return normalized;
|
|
114
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { type Stage } from '../../generated/catalog.js';
|
|
2
|
+
import { type CarrierEvent, type CarrierResult } from './index.js';
|
|
3
|
+
export declare function resultStage(result: CarrierResult): Stage | null;
|
|
4
|
+
export declare function resultHasUpdate(result: CarrierResult): boolean;
|
|
5
|
+
export declare function classifyStage(text: string, fallback?: string): import("../status/wording.js").ClassifiedWording;
|
|
6
|
+
export declare function inferStage(text: string, fallback?: string): string;
|
|
7
|
+
export declare function stageSource(declaredStage: string, description: string): string;
|
|
8
|
+
export interface ResolvedEvent extends CarrierEvent {
|
|
9
|
+
stage: Stage;
|
|
10
|
+
stage_source: string;
|
|
11
|
+
/** Null for a date or local clock whose offset the feed did not establish. */
|
|
12
|
+
instant: string | null;
|
|
13
|
+
}
|
|
14
|
+
export interface ResolvedResult extends CarrierResult {
|
|
15
|
+
events: ResolvedEvent[];
|
|
16
|
+
}
|
|
17
|
+
/** Classify wording and expose verified instants while retaining the feed's clocks. */
|
|
18
|
+
export declare function resolveResult(input: unknown): ResolvedResult;
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { STAGES } from '../../generated/catalog.js';
|
|
2
|
+
import { classifyWording } from '../status/index.js';
|
|
3
|
+
import { explicitOffsetTime } from '../time/index.js';
|
|
4
|
+
import { normalizeCarrierResult } from './index.js';
|
|
5
|
+
const stages = new Set(STAGES);
|
|
6
|
+
export function resultStage(result) {
|
|
7
|
+
if (stages.has(result.current_stage ?? ''))
|
|
8
|
+
return result.current_stage;
|
|
9
|
+
const fallback = {
|
|
10
|
+
pending: 'pending', in_transit: 'in_transit', out_for_delivery: 'out_for_delivery',
|
|
11
|
+
delivered: 'delivered', exception: 'failed_attempt',
|
|
12
|
+
};
|
|
13
|
+
const base = fallback[result.status ?? 'unknown'];
|
|
14
|
+
if (!base)
|
|
15
|
+
return null;
|
|
16
|
+
const stage = classifyWording(result.last_status_text ?? '', base).stage;
|
|
17
|
+
const first = result.events?.[0]?.stage;
|
|
18
|
+
return stage === 'pending' && stages.has(first ?? '') ? first : stage;
|
|
19
|
+
}
|
|
20
|
+
export function resultHasUpdate(result) {
|
|
21
|
+
const stage = resultStage(result);
|
|
22
|
+
return Boolean(stage && stage !== 'pending') || (result.events ?? []).some(event => {
|
|
23
|
+
const declared = stages.has(event.stage ?? '') ? event.stage : undefined;
|
|
24
|
+
return Boolean(declared && declared !== 'pending')
|
|
25
|
+
|| Boolean(event.description && classifyWording(event.description, 'pending').stage !== 'pending');
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
export function classifyStage(text, fallback = 'in_transit') {
|
|
29
|
+
return classifyWording(text, fallback);
|
|
30
|
+
}
|
|
31
|
+
export function inferStage(text, fallback = 'in_transit') {
|
|
32
|
+
return classifyStage(text, fallback).stage;
|
|
33
|
+
}
|
|
34
|
+
export function stageSource(declaredStage, description) {
|
|
35
|
+
return stages.has(declaredStage) ? 'carrier_map' : classifyStage(description).source;
|
|
36
|
+
}
|
|
37
|
+
/** Classify wording and expose verified instants while retaining the feed's clocks. */
|
|
38
|
+
export function resolveResult(input) {
|
|
39
|
+
const result = normalizeCarrierResult(input);
|
|
40
|
+
const current = resultStage(result);
|
|
41
|
+
const events = (result.events ?? []).map((event) => {
|
|
42
|
+
const declared = stages.has(event.stage ?? '') ? event.stage : undefined;
|
|
43
|
+
const classified = classifyWording(event.description ?? '', 'in_transit');
|
|
44
|
+
return { ...event, stage: declared ?? classified.stage,
|
|
45
|
+
stage_source: declared ? 'carrier_map' : classified.source,
|
|
46
|
+
instant: explicitOffsetTime(event.time)?.iso ?? null };
|
|
47
|
+
});
|
|
48
|
+
return { ...result, ...(current ? { current_stage: current } : {}), events };
|
|
49
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { type StepRecorder } from '../telemetry/index.js';
|
|
2
|
+
export interface StepContext {
|
|
3
|
+
/** Aborts when the lookup budget or the caller's signal expires. */
|
|
4
|
+
signal: AbortSignal;
|
|
5
|
+
/** Milliseconds left in the lookup budget when the step started. */
|
|
6
|
+
remainingMs: number;
|
|
7
|
+
attempt: number;
|
|
8
|
+
/** The error that made the previous step fail, when this step is a recovery. */
|
|
9
|
+
previousError: unknown;
|
|
10
|
+
}
|
|
11
|
+
export interface StepSpec<T> {
|
|
12
|
+
id: string;
|
|
13
|
+
run: (context: StepContext) => Promise<T>;
|
|
14
|
+
/** Skipped when false, for example when the browser service is not configured. */
|
|
15
|
+
enabled?: boolean;
|
|
16
|
+
/** Whether this step may run after the previous one failed with `error`. Defaults to `recoverableByDefault`. */
|
|
17
|
+
recovers?: (error: unknown) => boolean;
|
|
18
|
+
}
|
|
19
|
+
export interface RunOptions {
|
|
20
|
+
carrier: string;
|
|
21
|
+
budgetMs: number;
|
|
22
|
+
recorder?: StepRecorder;
|
|
23
|
+
signal?: AbortSignal;
|
|
24
|
+
now?: () => number;
|
|
25
|
+
}
|
|
26
|
+
/** A later tier may retry after a challenge, a transport failure, an inconclusive answer or an unclassified error; never after a definite answer. */
|
|
27
|
+
export declare function recoverableByDefault(error: unknown): boolean;
|
|
28
|
+
export declare function runSteps<T>(options: RunOptions, steps: readonly StepSpec<T>[]): Promise<T>;
|
|
29
|
+
/**
|
|
30
|
+
* Serialize calls through one adapter instance so a shared session (cookies,
|
|
31
|
+
* CSRF tokens, version handles) is never refreshed by two lookups at once.
|
|
32
|
+
*/
|
|
33
|
+
export declare function singleFlight(): <T>(operation: () => Promise<T>) => Promise<T>;
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tiered execution for adapters that have more than one way to reach a
|
|
3
|
+
* provider (for example a direct HTTP request, then a browser service when the
|
|
4
|
+
* direct path is challenged).
|
|
5
|
+
*
|
|
6
|
+
* `runSteps()` runs the declared steps in order, decides from the error kind
|
|
7
|
+
* whether the next step may recover, enforces one time budget across all
|
|
8
|
+
* steps, and reports every attempt plus the final outcome through the
|
|
9
|
+
* `StepRecorder`. Adapters describe their tiers; they do not time or count
|
|
10
|
+
* them.
|
|
11
|
+
*/
|
|
12
|
+
import { BudgetExceededError, carrierErrorKind } from '../errors/index.js';
|
|
13
|
+
import { NOOP_RECORDER, errorTypeOf, outcomeOf, safeRecorder } from '../telemetry/index.js';
|
|
14
|
+
const RECOVERABLE = new Set(['challenge', 'transport', 'indeterminate', 'error']);
|
|
15
|
+
/** A later tier may retry after a challenge, a transport failure, an inconclusive answer or an unclassified error; never after a definite answer. */
|
|
16
|
+
export function recoverableByDefault(error) {
|
|
17
|
+
return RECOVERABLE.has(outcomeOf(error));
|
|
18
|
+
}
|
|
19
|
+
function combinedSignal(external, timeoutMs) {
|
|
20
|
+
const timeout = AbortSignal.timeout(Math.max(1, Math.floor(timeoutMs)));
|
|
21
|
+
if (!external)
|
|
22
|
+
return timeout;
|
|
23
|
+
const any = AbortSignal.any;
|
|
24
|
+
return typeof any === 'function' ? any.call(AbortSignal, [external, timeout]) : timeout;
|
|
25
|
+
}
|
|
26
|
+
export async function runSteps(options, steps) {
|
|
27
|
+
const recorder = safeRecorder(options.recorder ?? NOOP_RECORDER);
|
|
28
|
+
const now = options.now ?? (() => performance.now());
|
|
29
|
+
const started = now();
|
|
30
|
+
const enabled = steps.filter((step) => step.enabled !== false);
|
|
31
|
+
let attempt = 0;
|
|
32
|
+
let previousError;
|
|
33
|
+
let previousStep = null;
|
|
34
|
+
let lastStep = null;
|
|
35
|
+
const finish = (outcome, error) => {
|
|
36
|
+
recorder.lookup({
|
|
37
|
+
carrier: options.carrier, finalStep: lastStep, outcome, errorType: error === undefined ? null : errorTypeOf(error),
|
|
38
|
+
durationMs: Math.max(0, now() - started), attempts: attempt, stepsAvailable: enabled.length,
|
|
39
|
+
...(error === undefined ? {} : { error }),
|
|
40
|
+
});
|
|
41
|
+
};
|
|
42
|
+
const fallback = () => (previousStep === null
|
|
43
|
+
? { fallbackFrom: null, fallbackReason: null, fallbackErrorType: null }
|
|
44
|
+
: { fallbackFrom: previousStep, fallbackReason: outcomeOf(previousError), fallbackErrorType: errorTypeOf(previousError), fallbackError: previousError });
|
|
45
|
+
for (const step of enabled) {
|
|
46
|
+
if (previousStep !== null && !(step.recovers ?? recoverableByDefault)(previousError))
|
|
47
|
+
continue;
|
|
48
|
+
const remainingMs = options.budgetMs - (now() - started);
|
|
49
|
+
if (remainingMs <= 0) {
|
|
50
|
+
const error = new BudgetExceededError(options.carrier, options.budgetMs, { cause: previousError });
|
|
51
|
+
finish('budget', error);
|
|
52
|
+
throw error;
|
|
53
|
+
}
|
|
54
|
+
attempt += 1;
|
|
55
|
+
lastStep = step.id;
|
|
56
|
+
const stepStarted = now();
|
|
57
|
+
try {
|
|
58
|
+
const value = await step.run({
|
|
59
|
+
signal: combinedSignal(options.signal, remainingMs), remainingMs, attempt, previousError,
|
|
60
|
+
});
|
|
61
|
+
recorder.step({
|
|
62
|
+
carrier: options.carrier, step: step.id, attempt, outcome: 'ok', errorType: null,
|
|
63
|
+
durationMs: Math.max(0, now() - stepStarted), ...fallback(),
|
|
64
|
+
});
|
|
65
|
+
finish('ok');
|
|
66
|
+
return value;
|
|
67
|
+
}
|
|
68
|
+
catch (error) {
|
|
69
|
+
recorder.step({
|
|
70
|
+
carrier: options.carrier, step: step.id, attempt, outcome: outcomeOf(error), errorType: errorTypeOf(error),
|
|
71
|
+
durationMs: Math.max(0, now() - stepStarted), ...fallback(), error,
|
|
72
|
+
});
|
|
73
|
+
previousError = error;
|
|
74
|
+
previousStep = step.id;
|
|
75
|
+
// A definite answer (not found, rate limited, schema...) ends the lookup here.
|
|
76
|
+
if (carrierErrorKind(error) !== null && !recoverableByDefault(error)
|
|
77
|
+
&& !enabled.slice(enabled.indexOf(step) + 1).some((next) => next.recovers?.(error))) {
|
|
78
|
+
finish(outcomeOf(error), error);
|
|
79
|
+
throw error;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
if (attempt === 0) {
|
|
84
|
+
const error = new BudgetExceededError(options.carrier, options.budgetMs);
|
|
85
|
+
finish('budget', error);
|
|
86
|
+
throw error;
|
|
87
|
+
}
|
|
88
|
+
finish(outcomeOf(previousError), previousError);
|
|
89
|
+
throw previousError;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Serialize calls through one adapter instance so a shared session (cookies,
|
|
93
|
+
* CSRF tokens, version handles) is never refreshed by two lookups at once.
|
|
94
|
+
*/
|
|
95
|
+
export function singleFlight() {
|
|
96
|
+
let tail = Promise.resolve();
|
|
97
|
+
return async (operation) => {
|
|
98
|
+
const previous = tail;
|
|
99
|
+
let release;
|
|
100
|
+
tail = new Promise((resolve) => { release = resolve; });
|
|
101
|
+
await previous;
|
|
102
|
+
try {
|
|
103
|
+
return await operation();
|
|
104
|
+
}
|
|
105
|
+
finally {
|
|
106
|
+
release();
|
|
107
|
+
}
|
|
108
|
+
};
|
|
109
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Status vocabulary and the shared wording classifier.
|
|
3
|
+
*
|
|
4
|
+
* What it is: the product `Stage` vocabulary re-exported for adapters, the
|
|
5
|
+
* `ClassifiedStatus` pair every carrier status map produces, and the
|
|
6
|
+
* multilingual wording → stage rules used as a fallback when a carrier has no
|
|
7
|
+
* explicit map for an event. What it is not: it never talks to a provider and
|
|
8
|
+
* never persists anything; the host's sync decides precedence and records
|
|
9
|
+
* where each stage came from.
|
|
10
|
+
*/
|
|
11
|
+
import type { CarrierStatus } from '../result/index.js';
|
|
12
|
+
import type { Stage } from '../../generated/catalog.js';
|
|
13
|
+
export type { Stage };
|
|
14
|
+
export { STAGES } from '../../generated/catalog.js';
|
|
15
|
+
export { trackingLanguageStage, languageStageStatus } from './language.js';
|
|
16
|
+
export { classifyWording, wordingStage } from './wording.js';
|
|
17
|
+
export type { ClassifiedWording } from './wording.js';
|
|
18
|
+
/** What a carrier's explicit status map yields for one raw code or wording. */
|
|
19
|
+
export interface ClassifiedStatus {
|
|
20
|
+
status: CarrierStatus;
|
|
21
|
+
stage: Stage;
|
|
22
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Stage } from '../../generated/catalog.js';
|
|
2
|
+
import type { CarrierStatus } from '../result/index.js';
|
|
3
|
+
/** Instructions, uncertainty and a return in progress do not prove sender delivery. */
|
|
4
|
+
export declare function nonterminalEnglishReturn(description: string): boolean;
|
|
5
|
+
/**
|
|
6
|
+
* INFERRED language rules, not captured carrier codes. EN/FR/DE/IT/ES/PT/PL equivalents
|
|
7
|
+
* are intuitive and overridable: an adapter must resolve verified codes and
|
|
8
|
+
* carrier-specific semantics before consulting this fallback. No fixture import.
|
|
9
|
+
*/
|
|
10
|
+
export declare function trackingLanguageStage(description: string): Stage | undefined;
|
|
11
|
+
export declare function languageStageStatus(stage: Stage): CarrierStatus;
|