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.
Files changed (897) hide show
  1. package/LICENSE +201 -0
  2. package/NOTICE +15 -0
  3. package/README.md +123 -2
  4. package/data/carrier-order.json +107 -0
  5. package/data/carrier.schema.json +415 -0
  6. package/data/catalog.json +3969 -0
  7. package/data/coverage-summary.json +17 -0
  8. package/data/detection-golden.json +5375 -0
  9. package/data/stages.json +13 -0
  10. package/dist/browser/scraper.js +9292 -0
  11. package/dist/carriers/aliexpress/adapter.d.ts +30 -0
  12. package/dist/carriers/aliexpress/adapter.js +164 -0
  13. package/dist/carriers/aliexpress/carrier.json +59 -0
  14. package/dist/carriers/aliexpress/numbers.json +36 -0
  15. package/dist/carriers/aliexpress/status.d.ts +31 -0
  16. package/dist/carriers/aliexpress/status.js +79 -0
  17. package/dist/carriers/aliexpress/statuses.json +355 -0
  18. package/dist/carriers/amazon-logistics/carrier.json +94 -0
  19. package/dist/carriers/amazon-logistics/numbers.json +307 -0
  20. package/dist/carriers/amazon-shipping/adapter.d.ts +34 -0
  21. package/dist/carriers/amazon-shipping/adapter.js +292 -0
  22. package/dist/carriers/amazon-shipping/carrier.json +96 -0
  23. package/dist/carriers/amazon-shipping/eligibility.d.ts +3 -0
  24. package/dist/carriers/amazon-shipping/eligibility.js +16 -0
  25. package/dist/carriers/amazon-shipping/numbers.json +67 -0
  26. package/dist/carriers/amazon-shipping/status.d.ts +26 -0
  27. package/dist/carriers/amazon-shipping/status.js +118 -0
  28. package/dist/carriers/amazon-shipping/statuses.json +19 -0
  29. package/dist/carriers/an-post/carrier.json +38 -0
  30. package/dist/carriers/an-post/numbers.json +33 -0
  31. package/dist/carriers/aramex/adapter.d.ts +11 -0
  32. package/dist/carriers/aramex/adapter.js +49 -0
  33. package/dist/carriers/aramex/carrier.json +62 -0
  34. package/dist/carriers/aramex/numbers.json +71 -0
  35. package/dist/carriers/aramex/parser.d.ts +5 -0
  36. package/dist/carriers/aramex/parser.js +83 -0
  37. package/dist/carriers/aramex/status.d.ts +2 -0
  38. package/dist/carriers/aramex/status.js +16 -0
  39. package/dist/carriers/aramex/statuses.json +41 -0
  40. package/dist/carriers/asendia/adapter.d.ts +82 -0
  41. package/dist/carriers/asendia/adapter.js +342 -0
  42. package/dist/carriers/asendia/carrier.json +91 -0
  43. package/dist/carriers/asendia/numbers.json +177 -0
  44. package/dist/carriers/asendia/probe.d.ts +31 -0
  45. package/dist/carriers/asendia/probe.js +355 -0
  46. package/dist/carriers/asendia/status.d.ts +41 -0
  47. package/dist/carriers/asendia/status.js +147 -0
  48. package/dist/carriers/asendia/statuses.json +877 -0
  49. package/dist/carriers/australia-post/adapter.d.ts +20 -0
  50. package/dist/carriers/australia-post/adapter.js +175 -0
  51. package/dist/carriers/australia-post/carrier.json +72 -0
  52. package/dist/carriers/australia-post/numbers.json +66 -0
  53. package/dist/carriers/australia-post/status.d.ts +2 -0
  54. package/dist/carriers/australia-post/status.js +34 -0
  55. package/dist/carriers/australia-post/statuses.json +172 -0
  56. package/dist/carriers/austrian-post/adapter.d.ts +13 -0
  57. package/dist/carriers/austrian-post/adapter.js +101 -0
  58. package/dist/carriers/austrian-post/carrier.json +58 -0
  59. package/dist/carriers/austrian-post/numbers.json +73 -0
  60. package/dist/carriers/austrian-post/status.d.ts +3 -0
  61. package/dist/carriers/austrian-post/status.js +30 -0
  62. package/dist/carriers/austrian-post/statuses.json +47 -0
  63. package/dist/carriers/blue-dart/adapter.d.ts +11 -0
  64. package/dist/carriers/blue-dart/adapter.js +34 -0
  65. package/dist/carriers/blue-dart/carrier.json +59 -0
  66. package/dist/carriers/blue-dart/numbers.json +113 -0
  67. package/dist/carriers/blue-dart/parser.d.ts +3 -0
  68. package/dist/carriers/blue-dart/parser.js +75 -0
  69. package/dist/carriers/blue-dart/status.d.ts +2 -0
  70. package/dist/carriers/blue-dart/status.js +14 -0
  71. package/dist/carriers/blue-dart/statuses.json +59 -0
  72. package/dist/carriers/bpost/adapter.d.ts +11 -0
  73. package/dist/carriers/bpost/adapter.js +46 -0
  74. package/dist/carriers/bpost/carrier.json +81 -0
  75. package/dist/carriers/bpost/numbers.json +103 -0
  76. package/dist/carriers/bpost/parser.d.ts +3 -0
  77. package/dist/carriers/bpost/parser.js +84 -0
  78. package/dist/carriers/bpost/status.d.ts +2 -0
  79. package/dist/carriers/bpost/status.js +18 -0
  80. package/dist/carriers/bpost/statuses.json +96 -0
  81. package/dist/carriers/bring-posten/adapter.d.ts +11 -0
  82. package/dist/carriers/bring-posten/adapter.js +35 -0
  83. package/dist/carriers/bring-posten/carrier.json +91 -0
  84. package/dist/carriers/bring-posten/numbers.json +33 -0
  85. package/dist/carriers/bring-posten/parser.d.ts +3 -0
  86. package/dist/carriers/bring-posten/parser.js +95 -0
  87. package/dist/carriers/bring-posten/status.d.ts +3 -0
  88. package/dist/carriers/bring-posten/status.js +23 -0
  89. package/dist/carriers/bring-posten/statuses.json +33 -0
  90. package/dist/carriers/brt/adapter.d.ts +11 -0
  91. package/dist/carriers/brt/adapter.js +36 -0
  92. package/dist/carriers/brt/carrier.json +80 -0
  93. package/dist/carriers/brt/numbers.json +91 -0
  94. package/dist/carriers/brt/parser.d.ts +3 -0
  95. package/dist/carriers/brt/parser.js +84 -0
  96. package/dist/carriers/brt/status.d.ts +2 -0
  97. package/dist/carriers/brt/status.js +14 -0
  98. package/dist/carriers/brt/statuses.json +53 -0
  99. package/dist/carriers/c-chez-vous/adapter.d.ts +31 -0
  100. package/dist/carriers/c-chez-vous/adapter.js +181 -0
  101. package/dist/carriers/c-chez-vous/carrier.json +69 -0
  102. package/dist/carriers/c-chez-vous/numbers.json +31 -0
  103. package/dist/carriers/c-chez-vous/status.d.ts +27 -0
  104. package/dist/carriers/c-chez-vous/status.js +19 -0
  105. package/dist/carriers/c-chez-vous/statuses.json +10 -0
  106. package/dist/carriers/canada-post/adapter.d.ts +40 -0
  107. package/dist/carriers/canada-post/adapter.js +78 -0
  108. package/dist/carriers/canada-post/carrier.json +77 -0
  109. package/dist/carriers/canada-post/numbers.json +81 -0
  110. package/dist/carriers/canada-post/parser.d.ts +5 -0
  111. package/dist/carriers/canada-post/parser.js +202 -0
  112. package/dist/carriers/canada-post/status.d.ts +9 -0
  113. package/dist/carriers/canada-post/status.js +67 -0
  114. package/dist/carriers/canada-post/statuses.json +171 -0
  115. package/dist/carriers/canpar/adapter.d.ts +11 -0
  116. package/dist/carriers/canpar/adapter.js +40 -0
  117. package/dist/carriers/canpar/carrier.json +74 -0
  118. package/dist/carriers/canpar/numbers.json +71 -0
  119. package/dist/carriers/canpar/parser.d.ts +3 -0
  120. package/dist/carriers/canpar/parser.js +75 -0
  121. package/dist/carriers/canpar/status.d.ts +2 -0
  122. package/dist/carriers/canpar/status.js +16 -0
  123. package/dist/carriers/canpar/statuses.json +82 -0
  124. package/dist/carriers/china-post/carrier.json +38 -0
  125. package/dist/carriers/china-post/numbers.json +59 -0
  126. package/dist/carriers/chronopost/carrier.json +84 -0
  127. package/dist/carriers/chronopost/numbers.json +110 -0
  128. package/dist/carriers/chronopost/statuses.json +47 -0
  129. package/dist/carriers/ciblex/adapter.d.ts +17 -0
  130. package/dist/carriers/ciblex/adapter.js +46 -0
  131. package/dist/carriers/ciblex/carrier.json +71 -0
  132. package/dist/carriers/ciblex/numbers.json +63 -0
  133. package/dist/carriers/ciblex/parser.d.ts +4 -0
  134. package/dist/carriers/ciblex/parser.js +100 -0
  135. package/dist/carriers/ciblex/status.d.ts +24 -0
  136. package/dist/carriers/ciblex/status.js +55 -0
  137. package/dist/carriers/ciblex/statuses.json +221 -0
  138. package/dist/carriers/colis-prive/adapter.d.ts +39 -0
  139. package/dist/carriers/colis-prive/adapter.js +0 -0
  140. package/dist/carriers/colis-prive/carrier.json +72 -0
  141. package/dist/carriers/colis-prive/numbers.json +97 -0
  142. package/dist/carriers/colis-prive/status.d.ts +30 -0
  143. package/dist/carriers/colis-prive/status.js +85 -0
  144. package/dist/carriers/colis-prive/statuses.json +39 -0
  145. package/dist/carriers/colisweb/adapter.d.ts +29 -0
  146. package/dist/carriers/colisweb/adapter.js +166 -0
  147. package/dist/carriers/colisweb/carrier.json +63 -0
  148. package/dist/carriers/colisweb/numbers.json +39 -0
  149. package/dist/carriers/colisweb/status.d.ts +32 -0
  150. package/dist/carriers/colisweb/status.js +61 -0
  151. package/dist/carriers/colisweb/statuses.json +25 -0
  152. package/dist/carriers/correios-br/adapter.d.ts +16 -0
  153. package/dist/carriers/correios-br/adapter.js +78 -0
  154. package/dist/carriers/correios-br/carrier.json +64 -0
  155. package/dist/carriers/correios-br/model/LICENSE +21 -0
  156. package/dist/carriers/correios-br/model/captcha.onnx +0 -0
  157. package/dist/carriers/correios-br/numbers.json +72 -0
  158. package/dist/carriers/correios-br/ocr-worker.mjs +53 -0
  159. package/dist/carriers/correios-br/ocr.d.ts +10 -0
  160. package/dist/carriers/correios-br/ocr.js +83 -0
  161. package/dist/carriers/correios-br/parser.d.ts +4 -0
  162. package/dist/carriers/correios-br/parser.js +79 -0
  163. package/dist/carriers/correios-br/status.d.ts +2 -0
  164. package/dist/carriers/correios-br/status.js +17 -0
  165. package/dist/carriers/correios-br/statuses.json +16 -0
  166. package/dist/carriers/correos-chile/adapter.d.ts +12 -0
  167. package/dist/carriers/correos-chile/adapter.js +85 -0
  168. package/dist/carriers/correos-chile/carrier.json +62 -0
  169. package/dist/carriers/correos-chile/numbers.json +38 -0
  170. package/dist/carriers/correos-chile/parser.d.ts +9 -0
  171. package/dist/carriers/correos-chile/parser.js +120 -0
  172. package/dist/carriers/correos-chile/status.d.ts +3 -0
  173. package/dist/carriers/correos-chile/status.js +17 -0
  174. package/dist/carriers/correos-chile/statuses.json +12 -0
  175. package/dist/carriers/correos-express/adapter.d.ts +11 -0
  176. package/dist/carriers/correos-express/adapter.js +32 -0
  177. package/dist/carriers/correos-express/carrier.json +65 -0
  178. package/dist/carriers/correos-express/numbers.json +80 -0
  179. package/dist/carriers/correos-express/parser.d.ts +3 -0
  180. package/dist/carriers/correos-express/parser.js +97 -0
  181. package/dist/carriers/correos-express/status.d.ts +2 -0
  182. package/dist/carriers/correos-express/status.js +25 -0
  183. package/dist/carriers/correos-express/statuses.json +19 -0
  184. package/dist/carriers/correos-spain/adapter.d.ts +15 -0
  185. package/dist/carriers/correos-spain/adapter.js +191 -0
  186. package/dist/carriers/correos-spain/carrier.json +92 -0
  187. package/dist/carriers/correos-spain/numbers.json +149 -0
  188. package/dist/carriers/correos-spain/status.d.ts +17 -0
  189. package/dist/carriers/correos-spain/status.js +51 -0
  190. package/dist/carriers/correos-spain/statuses.json +46 -0
  191. package/dist/carriers/ctt/adapter.d.ts +34 -0
  192. package/dist/carriers/ctt/adapter.js +320 -0
  193. package/dist/carriers/ctt/carrier.json +72 -0
  194. package/dist/carriers/ctt/numbers.json +33 -0
  195. package/dist/carriers/ctt/status.d.ts +16 -0
  196. package/dist/carriers/ctt/status.js +16 -0
  197. package/dist/carriers/ctt/statuses.json +15 -0
  198. package/dist/carriers/ctt-express/adapter.d.ts +11 -0
  199. package/dist/carriers/ctt-express/adapter.js +41 -0
  200. package/dist/carriers/ctt-express/carrier.json +64 -0
  201. package/dist/carriers/ctt-express/numbers.json +59 -0
  202. package/dist/carriers/ctt-express/parser.d.ts +3 -0
  203. package/dist/carriers/ctt-express/parser.js +107 -0
  204. package/dist/carriers/ctt-express/status.d.ts +2 -0
  205. package/dist/carriers/ctt-express/status.js +17 -0
  206. package/dist/carriers/ctt-express/statuses.json +15 -0
  207. package/dist/carriers/dachser/adapter.d.ts +25 -0
  208. package/dist/carriers/dachser/adapter.js +168 -0
  209. package/dist/carriers/dachser/carrier.json +80 -0
  210. package/dist/carriers/dachser/numbers.json +66 -0
  211. package/dist/carriers/dachser/status.d.ts +40 -0
  212. package/dist/carriers/dachser/status.js +57 -0
  213. package/dist/carriers/dachser/statuses.json +18 -0
  214. package/dist/carriers/delhivery/adapter.d.ts +11 -0
  215. package/dist/carriers/delhivery/adapter.js +36 -0
  216. package/dist/carriers/delhivery/carrier.json +50 -0
  217. package/dist/carriers/delhivery/numbers.json +108 -0
  218. package/dist/carriers/delhivery/parser.d.ts +3 -0
  219. package/dist/carriers/delhivery/parser.js +81 -0
  220. package/dist/carriers/delhivery/status.d.ts +2 -0
  221. package/dist/carriers/delhivery/status.js +11 -0
  222. package/dist/carriers/delhivery/statuses.json +11 -0
  223. package/dist/carriers/delivengo/carrier.json +56 -0
  224. package/dist/carriers/delivengo/numbers.json +31 -0
  225. package/dist/carriers/delivengo/statuses.json +5 -0
  226. package/dist/carriers/dhl/adapter.d.ts +70 -0
  227. package/dist/carriers/dhl/adapter.js +308 -0
  228. package/dist/carriers/dhl/carrier.json +98 -0
  229. package/dist/carriers/dhl/numbers.json +153 -0
  230. package/dist/carriers/dhl/status.d.ts +14 -0
  231. package/dist/carriers/dhl/status.js +45 -0
  232. package/dist/carriers/dhl/statuses.json +27 -0
  233. package/dist/carriers/dhl-ecommerce/adapter.d.ts +50 -0
  234. package/dist/carriers/dhl-ecommerce/adapter.js +179 -0
  235. package/dist/carriers/dhl-ecommerce/carrier.json +97 -0
  236. package/dist/carriers/dhl-ecommerce/numbers.json +130 -0
  237. package/dist/carriers/dhl-ecommerce/status.d.ts +13 -0
  238. package/dist/carriers/dhl-ecommerce/status.js +57 -0
  239. package/dist/carriers/dhl-ecommerce/statuses.json +23 -0
  240. package/dist/carriers/dpd/adapter.d.ts +70 -0
  241. package/dist/carriers/dpd/adapter.js +809 -0
  242. package/dist/carriers/dpd/carrier.json +111 -0
  243. package/dist/carriers/dpd/numbers.json +43 -0
  244. package/dist/carriers/dpd/status.d.ts +39 -0
  245. package/dist/carriers/dpd/status.js +93 -0
  246. package/dist/carriers/dpd/statuses.json +144 -0
  247. package/dist/carriers/dpd-fr/adapter.d.ts +42 -0
  248. package/dist/carriers/dpd-fr/adapter.js +288 -0
  249. package/dist/carriers/dpd-fr/carrier.json +83 -0
  250. package/dist/carriers/dpd-fr/numbers.json +80 -0
  251. package/dist/carriers/dpd-fr/status.d.ts +21 -0
  252. package/dist/carriers/dpd-fr/status.js +93 -0
  253. package/dist/carriers/dpd-fr/statuses.json +325 -0
  254. package/dist/carriers/dtdc/adapter.d.ts +11 -0
  255. package/dist/carriers/dtdc/adapter.js +39 -0
  256. package/dist/carriers/dtdc/carrier.json +77 -0
  257. package/dist/carriers/dtdc/numbers.json +50 -0
  258. package/dist/carriers/dtdc/parser.d.ts +3 -0
  259. package/dist/carriers/dtdc/parser.js +90 -0
  260. package/dist/carriers/dtdc/status.d.ts +2 -0
  261. package/dist/carriers/dtdc/status.js +15 -0
  262. package/dist/carriers/dtdc/statuses.json +65 -0
  263. package/dist/carriers/ecoscooting/adapter.d.ts +11 -0
  264. package/dist/carriers/ecoscooting/adapter.js +42 -0
  265. package/dist/carriers/ecoscooting/carrier.json +76 -0
  266. package/dist/carriers/ecoscooting/numbers.json +291 -0
  267. package/dist/carriers/ecoscooting/parser.d.ts +3 -0
  268. package/dist/carriers/ecoscooting/parser.js +88 -0
  269. package/dist/carriers/ecoscooting/status.d.ts +2 -0
  270. package/dist/carriers/ecoscooting/status.js +50 -0
  271. package/dist/carriers/ecoscooting/statuses.json +295 -0
  272. package/dist/carriers/ems/adapter.d.ts +14 -0
  273. package/dist/carriers/ems/adapter.js +124 -0
  274. package/dist/carriers/ems/carrier.json +61 -0
  275. package/dist/carriers/ems/numbers.json +43 -0
  276. package/dist/carriers/ems/status.d.ts +2 -0
  277. package/dist/carriers/ems/status.js +24 -0
  278. package/dist/carriers/ems/statuses.json +128 -0
  279. package/dist/carriers/estafeta/adapter.d.ts +11 -0
  280. package/dist/carriers/estafeta/adapter.js +45 -0
  281. package/dist/carriers/estafeta/carrier.json +79 -0
  282. package/dist/carriers/estafeta/numbers.json +85 -0
  283. package/dist/carriers/estafeta/parser.d.ts +11 -0
  284. package/dist/carriers/estafeta/parser.js +123 -0
  285. package/dist/carriers/estafeta/status.d.ts +3 -0
  286. package/dist/carriers/estafeta/status.js +17 -0
  287. package/dist/carriers/estafeta/statuses.json +47 -0
  288. package/dist/carriers/evri/adapter.d.ts +14 -0
  289. package/dist/carriers/evri/adapter.js +146 -0
  290. package/dist/carriers/evri/carrier.json +69 -0
  291. package/dist/carriers/evri/numbers.json +32 -0
  292. package/dist/carriers/evri/status.d.ts +2 -0
  293. package/dist/carriers/evri/status.js +24 -0
  294. package/dist/carriers/evri/statuses.json +133 -0
  295. package/dist/carriers/fedex/adapter.d.ts +32 -0
  296. package/dist/carriers/fedex/adapter.js +307 -0
  297. package/dist/carriers/fedex/carrier.json +74 -0
  298. package/dist/carriers/fedex/numbers.json +198 -0
  299. package/dist/carriers/fedex/status.d.ts +33 -0
  300. package/dist/carriers/fedex/status.js +114 -0
  301. package/dist/carriers/fedex/statuses.json +34 -0
  302. package/dist/carriers/four-px/adapter.d.ts +12 -0
  303. package/dist/carriers/four-px/adapter.js +113 -0
  304. package/dist/carriers/four-px/carrier.json +60 -0
  305. package/dist/carriers/four-px/numbers.json +32 -0
  306. package/dist/carriers/four-px/status.d.ts +2 -0
  307. package/dist/carriers/four-px/status.js +22 -0
  308. package/dist/carriers/four-px/statuses.json +141 -0
  309. package/dist/carriers/geodis/adapter.d.ts +37 -0
  310. package/dist/carriers/geodis/adapter.js +275 -0
  311. package/dist/carriers/geodis/carrier.json +75 -0
  312. package/dist/carriers/geodis/numbers.json +45 -0
  313. package/dist/carriers/geodis/status.d.ts +37 -0
  314. package/dist/carriers/geodis/status.js +105 -0
  315. package/dist/carriers/geodis/statuses.json +51 -0
  316. package/dist/carriers/gls-ch/adapter.d.ts +39 -0
  317. package/dist/carriers/gls-ch/adapter.js +405 -0
  318. package/dist/carriers/gls-ch/carrier.json +122 -0
  319. package/dist/carriers/gls-ch/numbers.json +31 -0
  320. package/dist/carriers/gls-ch/status.d.ts +19 -0
  321. package/dist/carriers/gls-ch/status.js +79 -0
  322. package/dist/carriers/gls-ch/statuses.json +31 -0
  323. package/dist/carriers/gls-de/adapter.d.ts +28 -0
  324. package/dist/carriers/gls-de/adapter.js +113 -0
  325. package/dist/carriers/gls-de/carrier.json +126 -0
  326. package/dist/carriers/gls-de/numbers.json +111 -0
  327. package/dist/carriers/gls-de/status.d.ts +10 -0
  328. package/dist/carriers/gls-de/status.js +10 -0
  329. package/dist/carriers/gls-de/statuses.json +31 -0
  330. package/dist/carriers/gls-fr/adapter.d.ts +29 -0
  331. package/dist/carriers/gls-fr/adapter.js +220 -0
  332. package/dist/carriers/gls-fr/carrier.json +107 -0
  333. package/dist/carriers/gls-fr/numbers.json +113 -0
  334. package/dist/carriers/gls-fr/status.d.ts +28 -0
  335. package/dist/carriers/gls-fr/status.js +58 -0
  336. package/dist/carriers/gls-fr/statuses.json +34 -0
  337. package/dist/carriers/gofo/adapter.d.ts +11 -0
  338. package/dist/carriers/gofo/adapter.js +41 -0
  339. package/dist/carriers/gofo/carrier.json +80 -0
  340. package/dist/carriers/gofo/numbers.json +59 -0
  341. package/dist/carriers/gofo/parser.d.ts +5 -0
  342. package/dist/carriers/gofo/parser.js +131 -0
  343. package/dist/carriers/gofo/status.d.ts +2 -0
  344. package/dist/carriers/gofo/status.js +7 -0
  345. package/dist/carriers/gofo/statuses.json +54 -0
  346. package/dist/carriers/heppner/adapter.d.ts +27 -0
  347. package/dist/carriers/heppner/adapter.js +247 -0
  348. package/dist/carriers/heppner/carrier.json +74 -0
  349. package/dist/carriers/heppner/numbers.json +39 -0
  350. package/dist/carriers/heppner/status.d.ts +28 -0
  351. package/dist/carriers/heppner/status.js +43 -0
  352. package/dist/carriers/heppner/statuses.json +69 -0
  353. package/dist/carriers/hermes/adapter.d.ts +17 -0
  354. package/dist/carriers/hermes/adapter.js +103 -0
  355. package/dist/carriers/hermes/carrier.json +58 -0
  356. package/dist/carriers/hermes/numbers.json +20 -0
  357. package/dist/carriers/hermes/status.d.ts +15 -0
  358. package/dist/carriers/hermes/status.js +61 -0
  359. package/dist/carriers/hermes/statuses.json +31 -0
  360. package/dist/carriers/hermes-de/adapter.d.ts +22 -0
  361. package/dist/carriers/hermes-de/adapter.js +168 -0
  362. package/dist/carriers/hermes-de/carrier.json +90 -0
  363. package/dist/carriers/hermes-de/numbers.json +125 -0
  364. package/dist/carriers/hermes-de/status.d.ts +24 -0
  365. package/dist/carriers/hermes-de/status.js +52 -0
  366. package/dist/carriers/hermes-de/statuses.json +277 -0
  367. package/dist/carriers/hongkong-post/carrier.json +38 -0
  368. package/dist/carriers/hongkong-post/numbers.json +32 -0
  369. package/dist/carriers/india-post/adapter.d.ts +33 -0
  370. package/dist/carriers/india-post/adapter.js +415 -0
  371. package/dist/carriers/india-post/carrier.json +74 -0
  372. package/dist/carriers/india-post/numbers.json +58 -0
  373. package/dist/carriers/india-post/status.d.ts +23 -0
  374. package/dist/carriers/india-post/status.js +99 -0
  375. package/dist/carriers/india-post/statuses.json +18 -0
  376. package/dist/carriers/inpost/adapter.d.ts +14 -0
  377. package/dist/carriers/inpost/adapter.js +143 -0
  378. package/dist/carriers/inpost/carrier.json +75 -0
  379. package/dist/carriers/inpost/numbers.json +130 -0
  380. package/dist/carriers/inpost/status.d.ts +16 -0
  381. package/dist/carriers/inpost/status.js +31 -0
  382. package/dist/carriers/inpost/statuses.json +26 -0
  383. package/dist/carriers/intl-post/carrier.json +46 -0
  384. package/dist/carriers/intl-post/numbers.json +29 -0
  385. package/dist/carriers/j-and-t/carrier.json +66 -0
  386. package/dist/carriers/j-and-t/numbers.json +90 -0
  387. package/dist/carriers/japan-post/adapter.d.ts +13 -0
  388. package/dist/carriers/japan-post/adapter.js +159 -0
  389. package/dist/carriers/japan-post/carrier.json +71 -0
  390. package/dist/carriers/japan-post/numbers.json +35 -0
  391. package/dist/carriers/japan-post/status.d.ts +2 -0
  392. package/dist/carriers/japan-post/status.js +25 -0
  393. package/dist/carriers/japan-post/statuses.json +136 -0
  394. package/dist/carriers/jd-logistics/carrier.json +37 -0
  395. package/dist/carriers/jd-logistics/numbers.json +19 -0
  396. package/dist/carriers/korea-post/adapter.d.ts +12 -0
  397. package/dist/carriers/korea-post/adapter.js +101 -0
  398. package/dist/carriers/korea-post/carrier.json +74 -0
  399. package/dist/carriers/korea-post/numbers.json +54 -0
  400. package/dist/carriers/korea-post/status.d.ts +2 -0
  401. package/dist/carriers/korea-post/status.js +19 -0
  402. package/dist/carriers/korea-post/statuses.json +103 -0
  403. package/dist/carriers/la-poste/adapter.d.ts +29 -0
  404. package/dist/carriers/la-poste/adapter.js +241 -0
  405. package/dist/carriers/la-poste/carrier.json +87 -0
  406. package/dist/carriers/la-poste/numbers.json +140 -0
  407. package/dist/carriers/la-poste/status.d.ts +30 -0
  408. package/dist/carriers/la-poste/status.js +110 -0
  409. package/dist/carriers/la-poste/statuses.json +163 -0
  410. package/dist/carriers/landmark-global/adapter.d.ts +11 -0
  411. package/dist/carriers/landmark-global/adapter.js +30 -0
  412. package/dist/carriers/landmark-global/carrier.json +64 -0
  413. package/dist/carriers/landmark-global/numbers.json +58 -0
  414. package/dist/carriers/landmark-global/parser.d.ts +3 -0
  415. package/dist/carriers/landmark-global/parser.js +78 -0
  416. package/dist/carriers/landmark-global/status.d.ts +2 -0
  417. package/dist/carriers/landmark-global/status.js +13 -0
  418. package/dist/carriers/landmark-global/statuses.json +125 -0
  419. package/dist/carriers/mondial-relay/adapter.d.ts +32 -0
  420. package/dist/carriers/mondial-relay/adapter.js +352 -0
  421. package/dist/carriers/mondial-relay/carrier.json +94 -0
  422. package/dist/carriers/mondial-relay/numbers.json +130 -0
  423. package/dist/carriers/mondial-relay/status.d.ts +31 -0
  424. package/dist/carriers/mondial-relay/status.js +98 -0
  425. package/dist/carriers/mondial-relay/statuses.json +50 -0
  426. package/dist/carriers/mrw/adapter.d.ts +13 -0
  427. package/dist/carriers/mrw/adapter.js +131 -0
  428. package/dist/carriers/mrw/carrier.json +60 -0
  429. package/dist/carriers/mrw/numbers.json +116 -0
  430. package/dist/carriers/mrw/parser.d.ts +12 -0
  431. package/dist/carriers/mrw/parser.js +149 -0
  432. package/dist/carriers/mrw/status.d.ts +2 -0
  433. package/dist/carriers/mrw/status.js +14 -0
  434. package/dist/carriers/mrw/statuses.json +13 -0
  435. package/dist/carriers/nacex/adapter.d.ts +11 -0
  436. package/dist/carriers/nacex/adapter.js +99 -0
  437. package/dist/carriers/nacex/carrier.json +78 -0
  438. package/dist/carriers/nacex/numbers.json +47 -0
  439. package/dist/carriers/nacex/parser.d.ts +4 -0
  440. package/dist/carriers/nacex/parser.js +119 -0
  441. package/dist/carriers/nacex/status.d.ts +2 -0
  442. package/dist/carriers/nacex/status.js +12 -0
  443. package/dist/carriers/nacex/statuses.json +11 -0
  444. package/dist/carriers/ninja-van/adapter.d.ts +11 -0
  445. package/dist/carriers/ninja-van/adapter.js +45 -0
  446. package/dist/carriers/ninja-van/carrier.json +79 -0
  447. package/dist/carriers/ninja-van/numbers.json +67 -0
  448. package/dist/carriers/ninja-van/parser.d.ts +5 -0
  449. package/dist/carriers/ninja-van/parser.js +95 -0
  450. package/dist/carriers/ninja-van/status.d.ts +3 -0
  451. package/dist/carriers/ninja-van/status.js +25 -0
  452. package/dist/carriers/ninja-van/statuses.json +11 -0
  453. package/dist/carriers/nz-post/adapter.d.ts +11 -0
  454. package/dist/carriers/nz-post/adapter.js +45 -0
  455. package/dist/carriers/nz-post/carrier.json +82 -0
  456. package/dist/carriers/nz-post/numbers.json +49 -0
  457. package/dist/carriers/nz-post/parser.d.ts +3 -0
  458. package/dist/carriers/nz-post/parser.js +97 -0
  459. package/dist/carriers/nz-post/status.d.ts +2 -0
  460. package/dist/carriers/nz-post/status.js +29 -0
  461. package/dist/carriers/nz-post/statuses.json +68 -0
  462. package/dist/carriers/old-dominion/carrier.json +51 -0
  463. package/dist/carriers/old-dominion/numbers.json +83 -0
  464. package/dist/carriers/ontrac/adapter.d.ts +11 -0
  465. package/dist/carriers/ontrac/adapter.js +34 -0
  466. package/dist/carriers/ontrac/carrier.json +81 -0
  467. package/dist/carriers/ontrac/numbers.json +214 -0
  468. package/dist/carriers/ontrac/parser.d.ts +3 -0
  469. package/dist/carriers/ontrac/parser.js +72 -0
  470. package/dist/carriers/ontrac/status.d.ts +2 -0
  471. package/dist/carriers/ontrac/status.js +19 -0
  472. package/dist/carriers/ontrac/statuses.json +61 -0
  473. package/dist/carriers/paack/adapter.d.ts +19 -0
  474. package/dist/carriers/paack/adapter.js +255 -0
  475. package/dist/carriers/paack/carrier.json +79 -0
  476. package/dist/carriers/paack/numbers.json +106 -0
  477. package/dist/carriers/paack/status.d.ts +26 -0
  478. package/dist/carriers/paack/status.js +82 -0
  479. package/dist/carriers/paack/statuses.json +357 -0
  480. package/dist/carriers/packeta/adapter.d.ts +15 -0
  481. package/dist/carriers/packeta/adapter.js +166 -0
  482. package/dist/carriers/packeta/carrier.json +90 -0
  483. package/dist/carriers/packeta/numbers.json +71 -0
  484. package/dist/carriers/packeta/status.d.ts +23 -0
  485. package/dist/carriers/packeta/status.js +40 -0
  486. package/dist/carriers/packeta/statuses.json +21 -0
  487. package/dist/carriers/parcelforce/carrier.json +47 -0
  488. package/dist/carriers/parcelforce/numbers.json +32 -0
  489. package/dist/carriers/planzer/adapter.d.ts +40 -0
  490. package/dist/carriers/planzer/adapter.js +148 -0
  491. package/dist/carriers/planzer/carrier.json +85 -0
  492. package/dist/carriers/planzer/numbers.json +118 -0
  493. package/dist/carriers/planzer/shared.d.ts +19 -0
  494. package/dist/carriers/planzer/shared.js +135 -0
  495. package/dist/carriers/planzer/status.d.ts +33 -0
  496. package/dist/carriers/planzer/status.js +89 -0
  497. package/dist/carriers/planzer/statuses.json +229 -0
  498. package/dist/carriers/poczta-polska/adapter.d.ts +15 -0
  499. package/dist/carriers/poczta-polska/adapter.js +65 -0
  500. package/dist/carriers/poczta-polska/carrier.json +79 -0
  501. package/dist/carriers/poczta-polska/numbers.json +130 -0
  502. package/dist/carriers/poczta-polska/parser.d.ts +3 -0
  503. package/dist/carriers/poczta-polska/parser.js +96 -0
  504. package/dist/carriers/poczta-polska/status.d.ts +2 -0
  505. package/dist/carriers/poczta-polska/status.js +21 -0
  506. package/dist/carriers/poczta-polska/statuses.json +47 -0
  507. package/dist/carriers/pos-malaysia/adapter.d.ts +18 -0
  508. package/dist/carriers/pos-malaysia/adapter.js +199 -0
  509. package/dist/carriers/pos-malaysia/carrier.json +78 -0
  510. package/dist/carriers/pos-malaysia/numbers.json +73 -0
  511. package/dist/carriers/pos-malaysia/status.d.ts +17 -0
  512. package/dist/carriers/pos-malaysia/status.js +21 -0
  513. package/dist/carriers/pos-malaysia/statuses.json +17 -0
  514. package/dist/carriers/poste-italiane/adapter.d.ts +15 -0
  515. package/dist/carriers/poste-italiane/adapter.js +211 -0
  516. package/dist/carriers/poste-italiane/carrier.json +86 -0
  517. package/dist/carriers/poste-italiane/numbers.json +117 -0
  518. package/dist/carriers/poste-italiane/status.d.ts +19 -0
  519. package/dist/carriers/poste-italiane/status.js +44 -0
  520. package/dist/carriers/poste-italiane/statuses.json +22 -0
  521. package/dist/carriers/posti/adapter.d.ts +17 -0
  522. package/dist/carriers/posti/adapter.js +195 -0
  523. package/dist/carriers/posti/carrier.json +69 -0
  524. package/dist/carriers/posti/numbers.json +52 -0
  525. package/dist/carriers/posti/status.d.ts +4 -0
  526. package/dist/carriers/posti/status.js +41 -0
  527. package/dist/carriers/posti/statuses.json +18 -0
  528. package/dist/carriers/postlogistics/adapter.d.ts +39 -0
  529. package/dist/carriers/postlogistics/adapter.js +162 -0
  530. package/dist/carriers/postlogistics/carrier.json +67 -0
  531. package/dist/carriers/postlogistics/number.d.ts +2 -0
  532. package/dist/carriers/postlogistics/number.js +7 -0
  533. package/dist/carriers/postlogistics/numbers.json +54 -0
  534. package/dist/carriers/postlogistics/status.d.ts +20 -0
  535. package/dist/carriers/postlogistics/status.js +12 -0
  536. package/dist/carriers/postlogistics/statuses.json +40 -0
  537. package/dist/carriers/postnord/adapter.d.ts +11 -0
  538. package/dist/carriers/postnord/adapter.js +76 -0
  539. package/dist/carriers/postnord/carrier.json +82 -0
  540. package/dist/carriers/postnord/numbers.json +66 -0
  541. package/dist/carriers/postnord/parser.d.ts +3 -0
  542. package/dist/carriers/postnord/parser.js +75 -0
  543. package/dist/carriers/postnord/status.d.ts +3 -0
  544. package/dist/carriers/postnord/status.js +38 -0
  545. package/dist/carriers/postnord/statuses.json +16 -0
  546. package/dist/carriers/purolator/adapter.d.ts +11 -0
  547. package/dist/carriers/purolator/adapter.js +45 -0
  548. package/dist/carriers/purolator/carrier.json +75 -0
  549. package/dist/carriers/purolator/numbers.json +146 -0
  550. package/dist/carriers/purolator/parser.d.ts +3 -0
  551. package/dist/carriers/purolator/parser.js +79 -0
  552. package/dist/carriers/purolator/status.d.ts +2 -0
  553. package/dist/carriers/purolator/status.js +17 -0
  554. package/dist/carriers/purolator/statuses.json +15 -0
  555. package/dist/carriers/quickpac/carrier.json +68 -0
  556. package/dist/carriers/quickpac/numbers.json +31 -0
  557. package/dist/carriers/quickpac/statuses.json +213 -0
  558. package/dist/carriers/relais-colis/adapter.d.ts +28 -0
  559. package/dist/carriers/relais-colis/adapter.js +242 -0
  560. package/dist/carriers/relais-colis/carrier.json +77 -0
  561. package/dist/carriers/relais-colis/numbers.json +64 -0
  562. package/dist/carriers/relais-colis/status.d.ts +26 -0
  563. package/dist/carriers/relais-colis/status.js +91 -0
  564. package/dist/carriers/relais-colis/statuses.json +341 -0
  565. package/dist/carriers/royal-mail/adapter.d.ts +32 -0
  566. package/dist/carriers/royal-mail/adapter.js +260 -0
  567. package/dist/carriers/royal-mail/carrier.json +60 -0
  568. package/dist/carriers/royal-mail/numbers.json +57 -0
  569. package/dist/carriers/royal-mail/status.d.ts +19 -0
  570. package/dist/carriers/royal-mail/status.js +80 -0
  571. package/dist/carriers/royal-mail/statuses.json +16 -0
  572. package/dist/carriers/seur/adapter.d.ts +11 -0
  573. package/dist/carriers/seur/adapter.js +35 -0
  574. package/dist/carriers/seur/carrier.json +89 -0
  575. package/dist/carriers/seur/numbers.json +80 -0
  576. package/dist/carriers/seur/parser.d.ts +3 -0
  577. package/dist/carriers/seur/parser.js +78 -0
  578. package/dist/carriers/seur/status.d.ts +2 -0
  579. package/dist/carriers/seur/status.js +14 -0
  580. package/dist/carriers/seur/statuses.json +47 -0
  581. package/dist/carriers/sf-express/adapter.d.ts +17 -0
  582. package/dist/carriers/sf-express/adapter.js +87 -0
  583. package/dist/carriers/sf-express/carrier.json +78 -0
  584. package/dist/carriers/sf-express/numbers.json +66 -0
  585. package/dist/carriers/sf-express/parser.d.ts +4 -0
  586. package/dist/carriers/sf-express/parser.js +102 -0
  587. package/dist/carriers/sf-express/status.d.ts +4 -0
  588. package/dist/carriers/sf-express/status.js +28 -0
  589. package/dist/carriers/sf-express/statuses.json +334 -0
  590. package/dist/carriers/shipup/carrier.json +28 -0
  591. package/dist/carriers/shipup/numbers.json +20 -0
  592. package/dist/carriers/singapore-post/adapter.d.ts +12 -0
  593. package/dist/carriers/singapore-post/adapter.js +106 -0
  594. package/dist/carriers/singapore-post/carrier.json +62 -0
  595. package/dist/carriers/singapore-post/numbers.json +77 -0
  596. package/dist/carriers/singapore-post/status.d.ts +2 -0
  597. package/dist/carriers/singapore-post/status.js +17 -0
  598. package/dist/carriers/singapore-post/statuses.json +101 -0
  599. package/dist/carriers/spee-dee/carrier.json +51 -0
  600. package/dist/carriers/spee-dee/numbers.json +55 -0
  601. package/dist/carriers/speedx/carrier.json +49 -0
  602. package/dist/carriers/speedx/numbers.json +112 -0
  603. package/dist/carriers/spring-gds/adapter.d.ts +35 -0
  604. package/dist/carriers/spring-gds/adapter.js +212 -0
  605. package/dist/carriers/spring-gds/carrier.json +90 -0
  606. package/dist/carriers/spring-gds/numbers.json +224 -0
  607. package/dist/carriers/spring-gds/status.d.ts +19 -0
  608. package/dist/carriers/spring-gds/status.js +28 -0
  609. package/dist/carriers/spring-gds/statuses.json +140 -0
  610. package/dist/carriers/sto/carrier.json +37 -0
  611. package/dist/carriers/sto/numbers.json +33 -0
  612. package/dist/carriers/sunyou/adapter.d.ts +18 -0
  613. package/dist/carriers/sunyou/adapter.js +156 -0
  614. package/dist/carriers/sunyou/carrier.json +64 -0
  615. package/dist/carriers/sunyou/numbers.json +44 -0
  616. package/dist/carriers/sunyou/status.d.ts +17 -0
  617. package/dist/carriers/sunyou/status.js +13 -0
  618. package/dist/carriers/sunyou/statuses.json +53 -0
  619. package/dist/carriers/swiss-post/adapter.d.ts +18 -0
  620. package/dist/carriers/swiss-post/adapter.js +282 -0
  621. package/dist/carriers/swiss-post/carrier.json +84 -0
  622. package/dist/carriers/swiss-post/numbers.json +55 -0
  623. package/dist/carriers/swiss-post/status.d.ts +27 -0
  624. package/dist/carriers/swiss-post/status.js +64 -0
  625. package/dist/carriers/swiss-post/statuses.json +33 -0
  626. package/dist/carriers/swiss-post-cargo/adapter.d.ts +19 -0
  627. package/dist/carriers/swiss-post-cargo/adapter.js +173 -0
  628. package/dist/carriers/swiss-post-cargo/carrier.json +60 -0
  629. package/dist/carriers/swiss-post-cargo/numbers.json +23 -0
  630. package/dist/carriers/swiss-post-cargo/reference.d.ts +13 -0
  631. package/dist/carriers/swiss-post-cargo/reference.js +48 -0
  632. package/dist/carriers/swiss-post-cargo/status.d.ts +13 -0
  633. package/dist/carriers/swiss-post-cargo/status.js +53 -0
  634. package/dist/carriers/swiss-post-cargo/statuses.json +19 -0
  635. package/dist/carriers/thailand-post/carrier.json +38 -0
  636. package/dist/carriers/thailand-post/numbers.json +33 -0
  637. package/dist/carriers/the-courier-guy/adapter.d.ts +11 -0
  638. package/dist/carriers/the-courier-guy/adapter.js +49 -0
  639. package/dist/carriers/the-courier-guy/carrier.json +73 -0
  640. package/dist/carriers/the-courier-guy/number.d.ts +3 -0
  641. package/dist/carriers/the-courier-guy/number.js +18 -0
  642. package/dist/carriers/the-courier-guy/numbers.json +74 -0
  643. package/dist/carriers/the-courier-guy/parser.d.ts +3 -0
  644. package/dist/carriers/the-courier-guy/parser.js +104 -0
  645. package/dist/carriers/the-courier-guy/status.d.ts +5 -0
  646. package/dist/carriers/the-courier-guy/status.js +21 -0
  647. package/dist/carriers/the-courier-guy/statuses.json +61 -0
  648. package/dist/carriers/tipsa/adapter.d.ts +12 -0
  649. package/dist/carriers/tipsa/adapter.js +52 -0
  650. package/dist/carriers/tipsa/carrier.json +92 -0
  651. package/dist/carriers/tipsa/numbers.json +100 -0
  652. package/dist/carriers/tipsa/parser.d.ts +17 -0
  653. package/dist/carriers/tipsa/parser.js +114 -0
  654. package/dist/carriers/tipsa/status.d.ts +3 -0
  655. package/dist/carriers/tipsa/status.js +25 -0
  656. package/dist/carriers/tipsa/statuses.json +12 -0
  657. package/dist/carriers/tnt/adapter.d.ts +23 -0
  658. package/dist/carriers/tnt/adapter.js +210 -0
  659. package/dist/carriers/tnt/carrier.json +66 -0
  660. package/dist/carriers/tnt/numbers.json +116 -0
  661. package/dist/carriers/tnt/status.d.ts +3 -0
  662. package/dist/carriers/tnt/status.js +35 -0
  663. package/dist/carriers/tnt/statuses.json +126 -0
  664. package/dist/carriers/ukrposhta/adapter.d.ts +13 -0
  665. package/dist/carriers/ukrposhta/adapter.js +152 -0
  666. package/dist/carriers/ukrposhta/carrier.json +62 -0
  667. package/dist/carriers/ukrposhta/numbers.json +53 -0
  668. package/dist/carriers/ukrposhta/parser.d.ts +15 -0
  669. package/dist/carriers/ukrposhta/parser.js +130 -0
  670. package/dist/carriers/ukrposhta/status.d.ts +3 -0
  671. package/dist/carriers/ukrposhta/status.js +34 -0
  672. package/dist/carriers/ukrposhta/statuses.json +208 -0
  673. package/dist/carriers/uniuni/adapter.d.ts +11 -0
  674. package/dist/carriers/uniuni/adapter.js +48 -0
  675. package/dist/carriers/uniuni/carrier.json +90 -0
  676. package/dist/carriers/uniuni/numbers.json +72 -0
  677. package/dist/carriers/uniuni/parser.d.ts +5 -0
  678. package/dist/carriers/uniuni/parser.js +114 -0
  679. package/dist/carriers/uniuni/status.d.ts +2 -0
  680. package/dist/carriers/uniuni/status.js +16 -0
  681. package/dist/carriers/uniuni/statuses.json +54 -0
  682. package/dist/carriers/unknown/carrier.json +57 -0
  683. package/dist/carriers/unknown/numbers.json +257 -0
  684. package/dist/carriers/ups/adapter.d.ts +40 -0
  685. package/dist/carriers/ups/adapter.js +473 -0
  686. package/dist/carriers/ups/carrier.json +69 -0
  687. package/dist/carriers/ups/numbers.json +134 -0
  688. package/dist/carriers/ups/status.d.ts +25 -0
  689. package/dist/carriers/ups/status.js +41 -0
  690. package/dist/carriers/ups/statuses.json +35 -0
  691. package/dist/carriers/usps/adapter.d.ts +25 -0
  692. package/dist/carriers/usps/adapter.js +261 -0
  693. package/dist/carriers/usps/carrier.json +74 -0
  694. package/dist/carriers/usps/numbers.json +286 -0
  695. package/dist/carriers/usps/status.d.ts +25 -0
  696. package/dist/carriers/usps/status.js +72 -0
  697. package/dist/carriers/usps/statuses.json +24 -0
  698. package/dist/carriers/yamato/adapter.d.ts +13 -0
  699. package/dist/carriers/yamato/adapter.js +130 -0
  700. package/dist/carriers/yamato/carrier.json +72 -0
  701. package/dist/carriers/yamato/numbers.json +57 -0
  702. package/dist/carriers/yamato/status.d.ts +2 -0
  703. package/dist/carriers/yamato/status.js +27 -0
  704. package/dist/carriers/yamato/statuses.json +159 -0
  705. package/dist/carriers/yanwen/adapter.d.ts +13 -0
  706. package/dist/carriers/yanwen/adapter.js +130 -0
  707. package/dist/carriers/yanwen/carrier.json +66 -0
  708. package/dist/carriers/yanwen/numbers.json +45 -0
  709. package/dist/carriers/yanwen/status.d.ts +2 -0
  710. package/dist/carriers/yanwen/status.js +25 -0
  711. package/dist/carriers/yanwen/statuses.json +131 -0
  712. package/dist/carriers/yto/adapter.d.ts +11 -0
  713. package/dist/carriers/yto/adapter.js +36 -0
  714. package/dist/carriers/yto/carrier.json +75 -0
  715. package/dist/carriers/yto/numbers.json +33 -0
  716. package/dist/carriers/yto/parser.d.ts +3 -0
  717. package/dist/carriers/yto/parser.js +92 -0
  718. package/dist/carriers/yto/status.d.ts +10 -0
  719. package/dist/carriers/yto/status.js +46 -0
  720. package/dist/carriers/yto/statuses.json +206 -0
  721. package/dist/carriers/yunda/adapter.d.ts +11 -0
  722. package/dist/carriers/yunda/adapter.js +68 -0
  723. package/dist/carriers/yunda/carrier.json +69 -0
  724. package/dist/carriers/yunda/challenge.d.ts +5 -0
  725. package/dist/carriers/yunda/challenge.js +68 -0
  726. package/dist/carriers/yunda/numbers.json +43 -0
  727. package/dist/carriers/yunda/parser.d.ts +4 -0
  728. package/dist/carriers/yunda/parser.js +105 -0
  729. package/dist/carriers/yunda/status.d.ts +4 -0
  730. package/dist/carriers/yunda/status.js +9 -0
  731. package/dist/carriers/yunda/statuses.json +40 -0
  732. package/dist/carriers/yunexpress/adapter.d.ts +20 -0
  733. package/dist/carriers/yunexpress/adapter.js +240 -0
  734. package/dist/carriers/yunexpress/carrier.json +69 -0
  735. package/dist/carriers/yunexpress/numbers.json +32 -0
  736. package/dist/carriers/yunexpress/status.d.ts +2 -0
  737. package/dist/carriers/yunexpress/status.js +23 -0
  738. package/dist/carriers/yunexpress/statuses.json +112 -0
  739. package/dist/carriers/zto/carrier.json +37 -0
  740. package/dist/carriers/zto/numbers.json +30 -0
  741. package/dist/cli/index.d.ts +2 -0
  742. package/dist/cli/index.js +82 -0
  743. package/dist/core/adapter/index.d.ts +90 -0
  744. package/dist/core/adapter/index.js +103 -0
  745. package/dist/core/adapter/track.d.ts +10 -0
  746. package/dist/core/adapter/track.js +20 -0
  747. package/dist/core/catalog/amazon.d.ts +5 -0
  748. package/dist/core/catalog/amazon.js +33 -0
  749. package/dist/core/catalog/definitions.d.ts +24 -0
  750. package/dist/core/catalog/definitions.js +44 -0
  751. package/dist/core/catalog/handoff.d.ts +9 -0
  752. package/dist/core/catalog/handoff.js +56 -0
  753. package/dist/core/catalog/hints.d.ts +45 -0
  754. package/dist/core/catalog/hints.js +162 -0
  755. package/dist/core/catalog/index.d.ts +38 -0
  756. package/dist/core/catalog/index.js +223 -0
  757. package/dist/core/catalog/inputs.d.ts +6 -0
  758. package/dist/core/catalog/inputs.js +89 -0
  759. package/dist/core/catalog/linkRules.d.ts +24 -0
  760. package/dist/core/catalog/linkRules.js +20 -0
  761. package/dist/core/catalog/networks.d.ts +9 -0
  762. package/dist/core/catalog/networks.js +13 -0
  763. package/dist/core/catalog/recognition.d.ts +22 -0
  764. package/dist/core/catalog/recognition.js +52 -0
  765. package/dist/core/catalog/types.d.ts +135 -0
  766. package/dist/core/catalog/types.js +1 -0
  767. package/dist/core/catalog/urls.d.ts +2 -0
  768. package/dist/core/catalog/urls.js +125 -0
  769. package/dist/core/detection/amazon.d.ts +2 -0
  770. package/dist/core/detection/amazon.js +14 -0
  771. package/dist/core/detection/candidates.d.ts +5 -0
  772. package/dist/core/detection/candidates.js +41 -0
  773. package/dist/core/detection/detect.d.ts +17 -0
  774. package/dist/core/detection/detect.js +52 -0
  775. package/dist/core/detection/gls.d.ts +16 -0
  776. package/dist/core/detection/gls.js +21 -0
  777. package/dist/core/detection/hermes.d.ts +14 -0
  778. package/dist/core/detection/hermes.js +19 -0
  779. package/dist/core/detection/index.d.ts +19 -0
  780. package/dist/core/detection/index.js +9 -0
  781. package/dist/core/detection/mondialRelay.d.ts +13 -0
  782. package/dist/core/detection/mondialRelay.js +25 -0
  783. package/dist/core/detection/normalize.d.ts +15 -0
  784. package/dist/core/detection/normalize.js +39 -0
  785. package/dist/core/detection/parse.d.ts +6 -0
  786. package/dist/core/detection/parse.js +112 -0
  787. package/dist/core/detection/s10.d.ts +4 -0
  788. package/dist/core/detection/s10.js +25 -0
  789. package/dist/core/detection/types.d.ts +22 -0
  790. package/dist/core/detection/types.js +1 -0
  791. package/dist/core/errors/hint.d.ts +7 -0
  792. package/dist/core/errors/hint.js +7 -0
  793. package/dist/core/errors/index.d.ts +98 -0
  794. package/dist/core/errors/index.js +178 -0
  795. package/dist/core/recognition/index.d.ts +24 -0
  796. package/dist/core/recognition/index.js +65 -0
  797. package/dist/core/result/index.d.ts +57 -0
  798. package/dist/core/result/index.js +114 -0
  799. package/dist/core/result/resolve.d.ts +18 -0
  800. package/dist/core/result/resolve.js +49 -0
  801. package/dist/core/runner/index.d.ts +33 -0
  802. package/dist/core/runner/index.js +109 -0
  803. package/dist/core/status/index.d.ts +22 -0
  804. package/dist/core/status/index.js +3 -0
  805. package/dist/core/status/language.d.ts +11 -0
  806. package/dist/core/status/language.js +149 -0
  807. package/dist/core/status/wording.d.ts +25 -0
  808. package/dist/core/status/wording.js +91 -0
  809. package/dist/core/telemetry/index.d.ts +62 -0
  810. package/dist/core/telemetry/index.js +55 -0
  811. package/dist/core/time/index.d.ts +84 -0
  812. package/dist/core/time/index.js +243 -0
  813. package/dist/core/time/result.d.ts +5 -0
  814. package/dist/core/time/result.js +55 -0
  815. package/dist/core/transport/boundedFetch.d.ts +26 -0
  816. package/dist/core/transport/boundedFetch.js +152 -0
  817. package/dist/core/transport/browser.d.ts +14 -0
  818. package/dist/core/transport/browser.js +113 -0
  819. package/dist/core/transport/index.d.ts +8 -0
  820. package/dist/core/transport/index.js +5 -0
  821. package/dist/core/transport/optional.d.ts +2 -0
  822. package/dist/core/transport/optional.js +17 -0
  823. package/dist/core/transport/text.d.ts +8 -0
  824. package/dist/core/transport/text.js +18 -0
  825. package/dist/core/transport/trawl.d.ts +80 -0
  826. package/dist/core/transport/trawl.js +212 -0
  827. package/dist/core/transport/upstreamHttpDiagnostics.d.ts +16 -0
  828. package/dist/core/transport/upstreamHttpDiagnostics.js +97 -0
  829. package/dist/core/types.d.ts +8 -0
  830. package/dist/core/types.js +11 -0
  831. package/dist/data/catalog.json +3969 -0
  832. package/dist/facade/index.d.ts +57 -0
  833. package/dist/facade/index.js +195 -0
  834. package/dist/generated/catalog.d.ts +2671 -0
  835. package/dist/generated/catalog.js +4090 -0
  836. package/dist/generated/recognition.d.ts +2 -0
  837. package/dist/generated/recognition.js +31 -0
  838. package/dist/generated/regionTowns.d.ts +2 -0
  839. package/dist/generated/regionTowns.js +11 -0
  840. package/dist/generated/registry.d.ts +4 -0
  841. package/dist/generated/registry.js +286 -0
  842. package/dist/index.d.ts +19 -0
  843. package/dist/index.js +18 -0
  844. package/dist/node.d.ts +11 -0
  845. package/dist/node.js +11 -0
  846. package/dist/places/countries.json +1670 -0
  847. package/dist/places/facilities.json +11 -0
  848. package/dist/places/index.d.ts +42 -0
  849. package/dist/places/index.js +307 -0
  850. package/dist/places/names.d.mts +15 -0
  851. package/dist/places/names.mjs +36 -0
  852. package/dist/places/places.tsv.br +0 -0
  853. package/dist/places/trackingLocation.d.ts +18 -0
  854. package/dist/places/trackingLocation.js +89 -0
  855. package/dist/providers/coverage.d.ts +31 -0
  856. package/dist/providers/coverage.js +70 -0
  857. package/dist/providers/coverage.json +1744 -0
  858. package/dist/providers/parcelsapp/adapter.d.ts +23 -0
  859. package/dist/providers/parcelsapp/adapter.js +391 -0
  860. package/dist/providers/parcelsapp/http.d.ts +9 -0
  861. package/dist/providers/parcelsapp/http.js +67 -0
  862. package/dist/providers/plan.d.ts +38 -0
  863. package/dist/providers/plan.js +54 -0
  864. package/dist/providers/postal-ninja/adapter.d.ts +17 -0
  865. package/dist/providers/postal-ninja/adapter.js +200 -0
  866. package/dist/providers/seventeentrack/adapter.d.ts +50 -0
  867. package/dist/providers/seventeentrack/adapter.js +165 -0
  868. package/dist/providers/seventeentrack/events.d.ts +4 -0
  869. package/dist/providers/seventeentrack/events.js +56 -0
  870. package/dist/providers/shared/capture.d.ts +46 -0
  871. package/dist/providers/shared/capture.js +92 -0
  872. package/dist/providers/shared/hints.d.ts +16 -0
  873. package/dist/providers/shared/hints.js +37 -0
  874. package/dist/providers/shared/result.d.ts +15 -0
  875. package/dist/providers/shared/result.js +161 -0
  876. package/dist/providers/shared/scans.d.ts +22 -0
  877. package/dist/providers/shared/scans.js +29 -0
  878. package/dist/providers/ship24/adapter.d.ts +17 -0
  879. package/dist/providers/ship24/adapter.js +140 -0
  880. package/dist/providers/ship24/http.d.ts +7 -0
  881. package/dist/providers/ship24/http.js +75 -0
  882. package/dist/providers/types.d.ts +1 -0
  883. package/dist/providers/types.js +1 -0
  884. package/dist/providers/universal.d.ts +66 -0
  885. package/dist/providers/universal.js +95 -0
  886. package/dist/providers/upu/adapter.d.ts +5 -0
  887. package/dist/providers/upu/adapter.js +107 -0
  888. package/dist/scripts/canary-report.d.mts +22 -0
  889. package/dist/scripts/canary-report.mjs +69 -0
  890. package/dist/scripts/carrier-canary.d.ts +50 -0
  891. package/dist/scripts/carrier-canary.js +220 -0
  892. package/dist/server/index.d.ts +20 -0
  893. package/dist/server/index.js +226 -0
  894. package/dist/server/openapi.json +487 -0
  895. package/dist/server/page.d.ts +1 -0
  896. package/dist/server/page.js +33 -0
  897. package/package.json +102 -4
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Typed access to the merged carrier catalog.
3
+ *
4
+ * What it is: the generated `x-carriers` data read through the catalog types,
5
+ * plus the lookups the server and the detection engine need (definition,
6
+ * timezone, adapter, active input requirements, automatic-carrier sets).
7
+ * What it is not: no provider I/O, no HTTP, no application code. Everything
8
+ * here is a pure function of the generated catalog.
9
+ */
10
+ import { type CarrierId } from '../../generated/catalog.js';
11
+ import type { CarrierDefinition, CarrierRequirementRule } from './types.js';
12
+ export declare const CARRIER_DEFINITIONS: Record<CarrierId, CarrierDefinition>;
13
+ export declare function carrierDefinition(carrierId: string): CarrierDefinition;
14
+ export declare function carrierTimezone(carrierId: string): string;
15
+ export declare function carrierAdapter(carrierId: string): string | null;
16
+ /**
17
+ * The requirements that apply to one number. The pattern is anchored here,
18
+ * unlike the unanchored UI filter in `carrierRequirements`.
19
+ */
20
+ export declare function activeRequirements(carrierId: string, trackingNumber: string): CarrierRequirementRule[];
21
+ /** The inputs a lookup cannot run without; an optional one only adds detail. */
22
+ export declare function requiredRequirements(carrierId: string, trackingNumber: string): CarrierRequirementRule[];
23
+ export declare const AUTOMATIC_CARRIER_IDS: Set<string>;
24
+ export declare const CARRIER_NAMES: Map<string, string>;
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Typed access to the merged carrier catalog.
3
+ *
4
+ * What it is: the generated `x-carriers` data read through the catalog types,
5
+ * plus the lookups the server and the detection engine need (definition,
6
+ * timezone, adapter, active input requirements, automatic-carrier sets).
7
+ * What it is not: no provider I/O, no HTTP, no application code. Everything
8
+ * here is a pure function of the generated catalog.
9
+ */
10
+ import { CARRIER_CATALOG } from '../../generated/catalog.js';
11
+ export const CARRIER_DEFINITIONS = CARRIER_CATALOG;
12
+ export function carrierDefinition(carrierId) {
13
+ const definition = CARRIER_DEFINITIONS[carrierId];
14
+ if (!definition)
15
+ throw new RangeError(`Unknown carrier ${carrierId}`);
16
+ return definition;
17
+ }
18
+ export function carrierTimezone(carrierId) {
19
+ return carrierDefinition(carrierId).timezone ?? 'UTC';
20
+ }
21
+ export function carrierAdapter(carrierId) {
22
+ return carrierDefinition(carrierId).tracking.adapter;
23
+ }
24
+ /**
25
+ * The requirements that apply to one number. The pattern is anchored here,
26
+ * unlike the unanchored UI filter in `carrierRequirements`.
27
+ */
28
+ export function activeRequirements(carrierId, trackingNumber) {
29
+ return (carrierDefinition(carrierId).tracking.requirements ?? []).filter((requirement) => !requirement.whenTrackingNumber
30
+ || new RegExp(`^(?:${requirement.whenTrackingNumber})$`).test(trackingNumber));
31
+ }
32
+ /** The inputs a lookup cannot run without; an optional one only adds detail. */
33
+ export function requiredRequirements(carrierId, trackingNumber) {
34
+ return activeRequirements(carrierId, trackingNumber).filter((requirement) => requirement.optional !== true);
35
+ }
36
+ export const AUTOMATIC_CARRIER_IDS = new Set(Object.entries(CARRIER_DEFINITIONS)
37
+ .filter(([, definition]) => definition.tracking.mode === 'automatic')
38
+ .map(([carrierId]) => carrierId));
39
+ export const CARRIER_NAMES = new Map(Object.entries(CARRIER_DEFINITIONS)
40
+ .filter(([carrierId]) => AUTOMATIC_CARRIER_IDS.has(carrierId))
41
+ .map(([carrierId, definition]) => [
42
+ carrierId,
43
+ definition.tracking.upstreamName ?? definition.displayName,
44
+ ]));
@@ -0,0 +1,9 @@
1
+ import type { CarrierResult } from '../result/index.js';
2
+ export interface DeliveryHandoff {
3
+ carrier: string;
4
+ number: string;
5
+ basis: 'partner' | 'destination' | 'reference';
6
+ }
7
+ export declare function hasDirectHandoffAdapter(carrier: string, number: string): boolean;
8
+ /** Propose one confirmation lookup; a candidate never changes the carrier by itself. */
9
+ export declare function deliveryHandoff(carrier: string, number: string, result: CarrierResult): DeliveryHandoff | null;
@@ -0,0 +1,56 @@
1
+ import { activeRequirements, AUTOMATIC_CARRIER_IDS, carrierAdapter, requiredRequirements } from './index.js';
2
+ import { carrierIdsFromPartnerLinks, nationalPostCandidate } from './hints.js';
3
+ import { detectCarrierMatch, isValidS10TrackingNumber, supportsSwissPostHandoff } from '../detection/index.js';
4
+ export function hasDirectHandoffAdapter(carrier, number) {
5
+ if (!AUTOMATIC_CARRIER_IDS.has(carrier) || carrierAdapter(carrier) === 'universal')
6
+ return false;
7
+ // Another carrier's inputs are never borrowed, so a required one rules the carrier out.
8
+ if (requiredRequirements(carrier, number).length > 0)
9
+ return false;
10
+ // A carrier with only an optional input (DPD's postcode) looks parcels up by
11
+ // its own number: hand it a reference of its own shape, never a postal one.
12
+ return activeRequirements(carrier, number).length === 0
13
+ || detectCarrierMatch(number).candidates.includes(carrier);
14
+ }
15
+ /** Propose one confirmation lookup; a candidate never changes the carrier by itself. */
16
+ export function deliveryHandoff(carrier, number, result) {
17
+ if (result.delivery_tracking_number != null && (typeof result.delivery_tracking_number !== 'string'
18
+ || !/^[A-Z0-9]{4,40}$/.test(result.delivery_tracking_number)))
19
+ return null;
20
+ const linked = carrierIdsFromPartnerLinks([result.last_status_text, ...(result.events ?? []).map((event) => event.description)], carrier);
21
+ if (!result.delivery_carrier && linked.length > 1)
22
+ return null;
23
+ let target = result.delivery_carrier ?? linked[0];
24
+ let basis = 'partner';
25
+ const reference = result.delivery_tracking_number || number;
26
+ const destination = typeof result.destination_country === 'string' ? result.destination_country
27
+ : typeof result.destination_country_name === 'string' ? result.destination_country_name : undefined;
28
+ // S10 binds the postal identity across borders. Its issuer suffix does not
29
+ // identify the destination operator; try that country's post only when no
30
+ // partner is named, and let the shared progress/freshness checks confirm it.
31
+ if (!target && isValidS10TrackingNumber(reference)) {
32
+ target = nationalPostCandidate(destination);
33
+ if (target)
34
+ basis = 'destination';
35
+ }
36
+ // A downstream reference binds the two identities, but does not prove its
37
+ // operator. Only a unique high-confidence catalog match may propose a probe.
38
+ if (!target && result.delivery_tracking_number) {
39
+ const detected = detectCarrierMatch(reference);
40
+ if (detected.confidence === 'high') {
41
+ target = detected.carrier;
42
+ basis = 'reference';
43
+ }
44
+ }
45
+ // Compatibility with the common AliExpress Swiss letter-post journey. This
46
+ // remains a bounded confirmation lookup, never an automatic carrier choice.
47
+ if (!target && !result.delivery_tracking_number && ['aliexpress', 'intl-post'].includes(carrier)
48
+ && supportsSwissPostHandoff(number) && (!destination || ['ch', 'switzerland'].includes(destination.trim().toLowerCase()))) {
49
+ target = 'swiss-post';
50
+ basis = 'reference';
51
+ }
52
+ if (!target || target === carrier || !/^[A-Z0-9]{4,40}$/.test(reference)
53
+ || !hasDirectHandoffAdapter(target, reference))
54
+ return null;
55
+ return { carrier: target, number: reference, basis };
56
+ }
@@ -0,0 +1,45 @@
1
+ import { carrierBrand } from './networks.js';
2
+ import type { CarrierId } from '../../generated/catalog.js';
3
+ export { carrierBrand };
4
+ /** Accept ISO codes or exact English country names supplied by a provider. */
5
+ export declare function nationalPostCandidate(country: unknown): CarrierId | undefined;
6
+ /** A name is only a lookup hint; the destination adapter still has to verify the parcel. */
7
+ export declare function carrierIdFromName(name: string): string | undefined;
8
+ /**
9
+ * Whether a reported carrier name is already in the catalog: a carrier or alias,
10
+ * another network of a brand that has several ("DHL Express", "GLS Italy"), or
11
+ * one of those followed by a country. Any other name is a carrier new to us.
12
+ */
13
+ export declare function isKnownCarrierName(name: string): boolean;
14
+ /**
15
+ * The single clock of the country after a known carrier or brand network
16
+ * ("DPD UK", "GLS Italy", "DHL Parcel Netherlands"), for scans that carry no
17
+ * zone of their own. A zone only, never a carrier. Null for a country with
18
+ * several zones and for names new to the catalog, whose last word need not be
19
+ * a place. The name can be a branch rather than where the scan happened
20
+ * ("Cainiao (China)"), so a scan's own location comes first.
21
+ */
22
+ export declare function carrierNameCountryZone(name: string): string | null;
23
+ /**
24
+ * The catalog networks of a brand named bare or as a group ("DPD", "DPD
25
+ * Group", "GLS", "Hermes"): every carrier whose id is the brand or starts with
26
+ * it and a dash. Empty for other names. The name alone cannot say which
27
+ * network it means; only the tracking number can narrow it.
28
+ */
29
+ export declare function brandCarrierIds(name: string): string[];
30
+ /**
31
+ * The catalog zones of a brand's networks (`brandCarrierIds`). The name cannot
32
+ * say which network scanned, so use them only when they all read the scan's
33
+ * clock as one instant (`sharedClockZone`). Empty for other names, and when
34
+ * any network has no local clock (DHL, whose eCommerce network is UTC). The
35
+ * set follows the catalog: a new network of a brand on another clock turns the
36
+ * brand's zone off, which moves the stored instants, and so the event ids, of
37
+ * that brand's past scans.
38
+ */
39
+ export declare function brandTimeZones(name: string): string[];
40
+ /** Reconcile a structured partner name and optional official link, without country guesses. */
41
+ export declare function carrierIdFromPartner(name: string, url?: string): string | undefined;
42
+ /** Retain ambiguity so weaker hints cannot override conflicting partner links. */
43
+ export declare function carrierIdsFromPartnerLinks(descriptions: (string | null | undefined)[], origin: string): string[];
44
+ /** An unambiguous partner link in carrier wording may propose one confirmation lookup. */
45
+ export declare function carrierIdFromPartnerLinks(descriptions: (string | null | undefined)[], origin: string): string | undefined;
@@ -0,0 +1,162 @@
1
+ import { CARRIER_DEFINITIONS, carrierTimezone } from './definitions.js';
2
+ import { matchesDomain } from './linkRules.js';
3
+ import { countryTimeZone } from '../time/index.js';
4
+ import { NETWORK_BRANDS, carrierBrand } from './networks.js';
5
+ export { carrierBrand };
6
+ const key = (name) => name.toLowerCase().replace(/[^a-z0-9]/g, '');
7
+ // These brands have several regional/service adapters.
8
+ const AMBIGUOUS_BRANDS = ['dhl', 'dpd', 'gls', 'hermes', 'post'];
9
+ const NAME_ALIASES = {
10
+ ups: 'ups', swisspost: 'swiss-post', laposte: 'la-poste', colissimo: 'la-poste',
11
+ dhlecommerce: 'dhl-ecommerce', cainiao: 'aliexpress', postnl: 'spring-gds',
12
+ asendiausa: 'asendia',
13
+ };
14
+ const CATALOG_NAMES = new Set([
15
+ ...Object.entries(CARRIER_DEFINITIONS).filter(([id]) => id !== 'unknown')
16
+ .map(([, definition]) => key(definition.displayName)),
17
+ ...Object.keys(NAME_ALIASES), ...AMBIGUOUS_BRANDS,
18
+ ]);
19
+ // Postal lookup candidates, not proof of which operator delivers a shipment.
20
+ // Only operators with a dedicated adapter are useful here. The host also
21
+ // checks adapter availability and required inputs before making a request.
22
+ const NATIONAL_POSTS = new Map([
23
+ ['CA', 'canada-post'], ['CH', 'swiss-post'], ['DE', 'dhl'],
24
+ ['ES', 'correos-spain'], ['FI', 'posti'], ['FR', 'la-poste'],
25
+ ['GB', 'royal-mail'], ['IN', 'india-post'], ['IT', 'poste-italiane'],
26
+ ['JP', 'japan-post'], ['MY', 'pos-malaysia'], ['NL', 'spring-gds'], ['PT', 'ctt'], ['SE', 'postnord'], ['US', 'usps'],
27
+ ]);
28
+ const englishCountries = new Intl.DisplayNames(['en'], { type: 'region' });
29
+ // Deprecated codes carry their successor's name, so fold them into it ("FX" is France).
30
+ const currentRegion = (code) => new Intl.Locale(`und-${code}`).region ?? code;
31
+ // Every region's English name, plus the common short forms, by name key.
32
+ const COUNTRY_CODES = new Map([
33
+ ...Array.from({ length: 26 * 26 }, (_, index) => String.fromCharCode(65 + Math.floor(index / 26), 65 + (index % 26)))
34
+ .map((code) => [key(englishCountries.of(code) ?? ''), currentRegion(code)])
35
+ .filter(([name, code]) => name !== '' && name !== code.toLowerCase()),
36
+ ['uk', 'GB'], ['usa', 'US'],
37
+ ]);
38
+ /** Accept ISO codes or exact English country names supplied by a provider. */
39
+ export function nationalPostCandidate(country) {
40
+ if (typeof country !== 'string')
41
+ return undefined;
42
+ const value = country.trim().toUpperCase();
43
+ const direct = NATIONAL_POSTS.get(value);
44
+ if (direct)
45
+ return direct;
46
+ return [...NATIONAL_POSTS].find(([code]) => englishCountries.of(code)?.toUpperCase() === value)?.[1];
47
+ }
48
+ function catalogCarrier(normalized) {
49
+ if (AMBIGUOUS_BRANDS.includes(normalized))
50
+ return undefined;
51
+ if (Object.hasOwn(NAME_ALIASES, normalized))
52
+ return NAME_ALIASES[normalized];
53
+ const matches = Object.entries(CARRIER_DEFINITIONS)
54
+ .filter(([id, definition]) => id !== 'unknown' && key(definition.displayName) === normalized);
55
+ return matches.length === 1 ? matches[0][0] : undefined;
56
+ }
57
+ /** "Chronopost France", "Royal Mail (UK)": the name before a trailing country, and its ISO code. */
58
+ function countryQualified(name) {
59
+ const words = name.replace(/[()]/g, ' ').trim().split(/\s+/);
60
+ for (let size = Math.min(3, words.length - 1); size > 0; size--) {
61
+ const tail = words.slice(-size).join(' ');
62
+ const country = COUNTRY_CODES.get(key(tail))
63
+ ?? (/^[A-Z]{2}$/.test(tail) && englishCountries.of(tail) !== tail ? currentRegion(tail) : undefined);
64
+ if (country)
65
+ return { base: words.slice(0, -size).join(' '), country };
66
+ }
67
+ return undefined;
68
+ }
69
+ /** A name is only a lookup hint; the destination adapter still has to verify the parcel. */
70
+ export function carrierIdFromName(name) {
71
+ const exact = catalogCarrier(key(name));
72
+ if (exact)
73
+ return exact;
74
+ // The carrier's own country names the same carrier; another country can be a
75
+ // different company under the brand, and a multi-zone country cannot tell.
76
+ const qualified = countryQualified(name);
77
+ const carrier = qualified && catalogCarrier(key(qualified.base));
78
+ const zone = qualified && countryTimeZone(qualified.country);
79
+ return carrier && zone && CARRIER_DEFINITIONS[carrier]?.timezone === zone ? carrier : undefined;
80
+ }
81
+ /**
82
+ * Whether a reported carrier name is already in the catalog: a carrier or alias,
83
+ * another network of a brand that has several ("DHL Express", "GLS Italy"), or
84
+ * one of those followed by a country. Any other name is a carrier new to us.
85
+ */
86
+ export function isKnownCarrierName(name) {
87
+ const qualified = countryQualified(name);
88
+ return [key(name), ...(qualified ? [key(qualified.base)] : [])].some((candidate) => CATALOG_NAMES.has(candidate) || NETWORK_BRANDS.some((brand) => candidate.startsWith(brand)));
89
+ }
90
+ /**
91
+ * The single clock of the country after a known carrier or brand network
92
+ * ("DPD UK", "GLS Italy", "DHL Parcel Netherlands"), for scans that carry no
93
+ * zone of their own. A zone only, never a carrier. Null for a country with
94
+ * several zones and for names new to the catalog, whose last word need not be
95
+ * a place. The name can be a branch rather than where the scan happened
96
+ * ("Cainiao (China)"), so a scan's own location comes first.
97
+ */
98
+ export function carrierNameCountryZone(name) {
99
+ const qualified = countryQualified(name);
100
+ return qualified && isKnownCarrierName(name) ? countryTimeZone(qualified.country) : null;
101
+ }
102
+ /**
103
+ * The catalog networks of a brand named bare or as a group ("DPD", "DPD
104
+ * Group", "GLS", "Hermes"): every carrier whose id is the brand or starts with
105
+ * it and a dash. Empty for other names. The name alone cannot say which
106
+ * network it means; only the tracking number can narrow it.
107
+ */
108
+ export function brandCarrierIds(name) {
109
+ const normalized = key(name);
110
+ const brand = NETWORK_BRANDS.find((candidate) => normalized === candidate || normalized === `${candidate}group`);
111
+ if (!brand)
112
+ return [];
113
+ return Object.keys(CARRIER_DEFINITIONS).filter((id) => carrierBrand(id) === brand);
114
+ }
115
+ /**
116
+ * The catalog zones of a brand's networks (`brandCarrierIds`). The name cannot
117
+ * say which network scanned, so use them only when they all read the scan's
118
+ * clock as one instant (`sharedClockZone`). Empty for other names, and when
119
+ * any network has no local clock (DHL, whose eCommerce network is UTC). The
120
+ * set follows the catalog: a new network of a brand on another clock turns the
121
+ * brand's zone off, which moves the stored instants, and so the event ids, of
122
+ * that brand's past scans.
123
+ */
124
+ export function brandTimeZones(name) {
125
+ const zones = brandCarrierIds(name).map((id) => carrierTimezone(id));
126
+ return zones.includes('UTC') ? [] : [...new Set(zones)];
127
+ }
128
+ /** Known portal hosts only. This identifies a lookup hint; it never follows the URL. */
129
+ function carriersFromUrl(raw) {
130
+ let url;
131
+ try {
132
+ url = new URL(raw);
133
+ }
134
+ catch {
135
+ return [];
136
+ }
137
+ if (!['https:', 'http:'].includes(url.protocol) || url.username || url.password)
138
+ return [];
139
+ // Arrival notices also use the Swiss Post homepage instead of its tracking subdomain.
140
+ if (['post.ch', 'www.post.ch'].includes(url.hostname))
141
+ return ['swiss-post'];
142
+ return Object.entries(CARRIER_DEFINITIONS).filter(([, definition]) => definition.linkRules.some((rule) => rule.domains.some((domain) => matchesDomain(url.hostname, domain)))).map(([id]) => id);
143
+ }
144
+ /** Reconcile a structured partner name and optional official link, without country guesses. */
145
+ export function carrierIdFromPartner(name, url = '') {
146
+ const named = carrierIdFromName(name);
147
+ const linked = carriersFromUrl(url);
148
+ if (named)
149
+ return !linked.length || linked.includes(named) ? named : undefined;
150
+ return linked.length === 1 ? linked[0] : undefined;
151
+ }
152
+ /** Retain ambiguity so weaker hints cannot override conflicting partner links. */
153
+ export function carrierIdsFromPartnerLinks(descriptions, origin) {
154
+ const candidates = new Set(descriptions.flatMap((description) => [...String(description ?? '').matchAll(/https?:\/\/[^\s<>"')]+/gi)]
155
+ .flatMap(([url]) => carriersFromUrl(url)).filter((carrier) => carrier !== origin)));
156
+ return [...candidates];
157
+ }
158
+ /** An unambiguous partner link in carrier wording may propose one confirmation lookup. */
159
+ export function carrierIdFromPartnerLinks(descriptions, origin) {
160
+ const candidates = carrierIdsFromPartnerLinks(descriptions, origin);
161
+ return candidates.length === 1 ? candidates[0] : undefined;
162
+ }
@@ -0,0 +1,38 @@
1
+ import type { CarrierId } from '../../generated/catalog.js';
2
+ import { amazonOrdersUrl } from './amazon.js';
3
+ import type { CarrierInfo, CarrierInputRequirement, ParcelTrackingLink, TrackedParcel } from './types.js';
4
+ export * from './types.js';
5
+ export * from './definitions.js';
6
+ export * from './linkRules.js';
7
+ export * from './amazon.js';
8
+ /** Carrier-specific printed identifiers expected by the official portal. */
9
+ export declare function trackingNumberForLink(carrierId: CarrierId, raw: string): string;
10
+ /** Build a carrier's portal link factory from its catalog template. */
11
+ export declare function trackingLink(carrierId: CarrierId, template: string | undefined): typeof amazonOrdersUrl | undefined;
12
+ export declare const CARRIERS: Record<CarrierId, CarrierInfo>;
13
+ export declare function carrierInfo(id: CarrierId, locale?: string): CarrierInfo;
14
+ export declare const SELECTABLE_CARRIERS: CarrierInfo[];
15
+ /** The requirements a form shows for one number, matched unanchored. */
16
+ export declare function carrierRequirements(carrierId: CarrierId, trackingNumber: string): CarrierInputRequirement[];
17
+ /**
18
+ * Whether a form value lets the parcel be saved: blank passes only for an
19
+ * optional input, and a value that is typed must still match the pattern.
20
+ */
21
+ export declare function requirementSatisfied(requirement: Pick<CarrierInputRequirement, 'optional' | 'pattern'>, raw: string): boolean;
22
+ export declare function tracksAutomatically(carrierId: CarrierId): boolean;
23
+ export declare function carrierTrackingHintKey(carrierId: CarrierId): "add.amazonAccount" | "add.autoSync" | "add.linkSync";
24
+ /** The source shown on cards and used as the primary link. */
25
+ export declare function activeTrackingCarrierId(parcel: Pick<TrackedParcel, 'carrier' | 'trackingNumber' | 'trackingSource'>): CarrierId;
26
+ /** Keep the original carrier identity when separate tracking numbers have been linked. */
27
+ export declare function displayedCarrierId(parcel: Pick<TrackedParcel, 'carrier' | 'trackingNumber' | 'trackingSource' | 'originalCarrier'>): CarrierId;
28
+ /** Distinct numbers in delivery-first order, including carriers without a website. */
29
+ export declare function parcelTrackingNumbers(parcel: Pick<TrackedParcel, 'carrier' | 'trackingNumber' | 'trackingSource' | 'activeTrackingNumber' | 'originalCarrier' | 'originalTrackingNumber'>): {
30
+ carrier: CarrierId;
31
+ number: string;
32
+ }[];
33
+ /** Link to the source of the displayed result, never a speculative routing preference. */
34
+ export declare function parcelTrackingLinks(parcel: Parameters<typeof carrierTrackingLinks>[0], locale?: string): ParcelTrackingLink[];
35
+ /** Primary delivery tracker first, followed by the earlier international journey. */
36
+ declare function carrierTrackingLinks(parcel: Pick<TrackedParcel, 'carrier' | 'trackingNumber' | 'trackingUrl' | 'trackingSource' | 'trackingProvider' | 'carrierAnswered' | 'activeTrackingNumber' | 'swissPostReady' | 'originalCarrier' | 'originalTrackingNumber' | 'originalTrackingUrl'>, locale?: string): ParcelTrackingLink[];
37
+ /** Point a carrier portal at the reader's language when the site supports it. */
38
+ export declare function localizedCarrierUrl(carrierId: CarrierId, url: string, locale?: string): string;
@@ -0,0 +1,223 @@
1
+ /**
2
+ * The carrier catalog, as the application consumes it.
3
+ *
4
+ * What it is: the `CARRIERS` record derived from the generated catalog, the
5
+ * per-carrier lookups, and the tracking links that follow from catalog data
6
+ * alone (carrier portals, localized URLs, a parcel's link list).
7
+ * What it is not: no provider I/O, no HTTP, no application or framework code.
8
+ * Everything here is a pure function of the catalog and its arguments.
9
+ */
10
+ import { normalizeCourierGuyNumber } from '../../carriers/the-courier-guy/number.js';
11
+ import { postlogisticsIdentifier } from '../../carriers/postlogistics/number.js';
12
+ import { isValidMondialRelayBarcode } from '../detection/mondialRelay.js';
13
+ import { normalizeTrackingNumber } from '../detection/normalize.js';
14
+ import { supportsSwissPostHandoff } from '../detection/s10.js';
15
+ import { amazonOrdersUrl, amazonShippingUrl, requiresAmazonAccount } from './amazon.js';
16
+ import { CARRIER_DEFINITIONS } from './definitions.js';
17
+ export * from './types.js';
18
+ export * from './definitions.js';
19
+ export * from './linkRules.js';
20
+ export * from './amazon.js';
21
+ /** Carrier-specific printed identifiers expected by the official portal. */
22
+ export function trackingNumberForLink(carrierId, raw) {
23
+ const normalized = normalizeTrackingNumber(raw);
24
+ if (carrierId === 'mondial-relay' && isValidMondialRelayBarcode(normalized))
25
+ return normalized.slice(0, 12);
26
+ if (carrierId === 'c-chez-vous') {
27
+ const composite = /^([A-Z0-9]{11})(\d{5})$/.exec(normalized);
28
+ if (composite)
29
+ return `${composite[1]}--${composite[2]}`;
30
+ }
31
+ if (carrierId === 'the-courier-guy') {
32
+ const product = /^(DD|LD)([A-Z0-9]{6})$/.exec(normalized);
33
+ if (product)
34
+ return normalizeCourierGuyNumber(normalized);
35
+ }
36
+ if (carrierId === 'postlogistics')
37
+ return postlogisticsIdentifier(raw);
38
+ return raw;
39
+ }
40
+ /** Build a carrier's portal link factory from its catalog template. */
41
+ export function trackingLink(carrierId, template) {
42
+ if (carrierId === 'amazon-logistics')
43
+ return amazonOrdersUrl;
44
+ if (carrierId === 'amazon-shipping')
45
+ return amazonShippingUrl;
46
+ if (!template)
47
+ return undefined;
48
+ return (trackingNumber) => template.replace('{trackingNumber}', encodeURIComponent(trackingNumberForLink(carrierId, trackingNumber)));
49
+ }
50
+ function builtCarrierInfo(id, carrier) {
51
+ return {
52
+ id,
53
+ name: carrier.displayName,
54
+ aliases: carrier.aliases ?? [],
55
+ countries: carrier.countries ?? [],
56
+ trackingSiteName: carrier.trackingSiteName,
57
+ color: carrier.color,
58
+ trackingUrl: trackingLink(id, carrier.trackingUrlTemplate),
59
+ capabilities: {
60
+ tracking: {
61
+ mode: carrier.tracking.mode,
62
+ adapter: carrier.tracking.adapter,
63
+ requirements: [...(carrier.tracking.requirements ?? [])],
64
+ },
65
+ selectable: carrier.selectable,
66
+ timezone: carrier.timezone,
67
+ },
68
+ };
69
+ }
70
+ export const CARRIERS = Object.fromEntries(Object.entries(CARRIER_DEFINITIONS).map(([id, carrier]) => [
71
+ id,
72
+ builtCarrierInfo(id, carrier),
73
+ ]));
74
+ export function carrierInfo(id, locale) {
75
+ const carrier = CARRIERS[id] ?? CARRIERS.unknown;
76
+ const name = locale ? CARRIER_DEFINITIONS[carrier.id].displayNames?.[locale] : undefined;
77
+ return name ? { ...carrier, name } : carrier;
78
+ }
79
+ export const SELECTABLE_CARRIERS = Object.values(CARRIERS).filter((carrier) => carrier.capabilities.selectable);
80
+ /** The requirements a form shows for one number, matched unanchored. */
81
+ export function carrierRequirements(carrierId, trackingNumber) {
82
+ const normalized = normalizeTrackingNumber(trackingNumber);
83
+ return CARRIERS[carrierId].capabilities.tracking.requirements.filter((requirement) => !requirement.whenTrackingNumber
84
+ || new RegExp(requirement.whenTrackingNumber).test(normalized));
85
+ }
86
+ /**
87
+ * Whether a form value lets the parcel be saved: blank passes only for an
88
+ * optional input, and a value that is typed must still match the pattern.
89
+ */
90
+ export function requirementSatisfied(requirement, raw) {
91
+ const value = raw.trim();
92
+ if (!value)
93
+ return requirement.optional === true;
94
+ return !requirement.pattern || new RegExp(requirement.pattern).test(value);
95
+ }
96
+ export function tracksAutomatically(carrierId) {
97
+ return CARRIERS[carrierId].capabilities.tracking.mode === 'automatic';
98
+ }
99
+ export function carrierTrackingHintKey(carrierId) {
100
+ return requiresAmazonAccount(carrierId) ? 'add.amazonAccount'
101
+ : tracksAutomatically(carrierId) ? 'add.autoSync' : 'add.linkSync';
102
+ }
103
+ /** The source shown on cards and used as the primary link. */
104
+ export function activeTrackingCarrierId(parcel) {
105
+ if (requiresAmazonAccount(parcel.carrier, parcel.trackingNumber))
106
+ return 'amazon-logistics';
107
+ if (parcel.trackingSource)
108
+ return parcel.trackingSource;
109
+ return supportsSwissPostHandoff(parcel.trackingNumber) ? 'aliexpress' : parcel.carrier;
110
+ }
111
+ /** Keep the original carrier identity when separate tracking numbers have been linked. */
112
+ export function displayedCarrierId(parcel) {
113
+ return parcel.originalCarrier ?? activeTrackingCarrierId(parcel);
114
+ }
115
+ /** Distinct numbers in delivery-first order, including carriers without a website. */
116
+ export function parcelTrackingNumbers(parcel) {
117
+ const delivery = { carrier: activeTrackingCarrierId(parcel), number: parcel.activeTrackingNumber ?? parcel.trackingNumber };
118
+ const original = { carrier: parcel.originalCarrier ?? parcel.carrier, number: parcel.originalTrackingNumber ?? parcel.trackingNumber };
119
+ return delivery.number === original.number ? [delivery] : [delivery, original];
120
+ }
121
+ /** Link to the source of the displayed result, never a speculative routing preference. */
122
+ export function parcelTrackingLinks(parcel, locale) {
123
+ if (requiresAmazonAccount(parcel.carrier, parcel.trackingNumber)) {
124
+ const carrier = carrierInfo('amazon-logistics', locale);
125
+ return [{ carrier, name: carrier.name, url: amazonOrdersUrl(parcel.trackingNumber), active: true, ready: true, role: 'active' }];
126
+ }
127
+ const links = carrierTrackingLinks(parcel, locale);
128
+ const number = encodeURIComponent(parcel.originalCarrier && parcel.trackingSource
129
+ ? parcel.activeTrackingNumber ?? parcel.trackingNumber : parcel.trackingNumber);
130
+ const provider = parcel.carrierAnswered ? undefined : parcel.trackingProvider;
131
+ const url = provider === '17TRACK' ? `https://t.17track.net/en#nums=${number}`
132
+ : provider === 'ParcelsApp' ? `https://parcelsapp.com/en/tracking/${number}`
133
+ : provider === 'Ship24' ? `https://www.ship24.com/tracking?p=${number}`
134
+ // Postal Ninja's verified public entry point; no guessed session/private URL.
135
+ : provider === 'Postal Ninja' ? 'https://postal.ninja/en/track'
136
+ : provider === 'UPU' ? 'https://globaltracktrace.ptc.post/gtt.web/Search.aspx' : undefined;
137
+ if (!url || !provider)
138
+ return links;
139
+ const primary = { carrier: carrierInfo('unknown', locale), name: provider,
140
+ url: localizedCarrierUrl('unknown', url, locale), active: true, ready: true, role: 'active' };
141
+ return [primary, ...links.filter((link) => link.role !== 'active' && link.url !== primary.url)];
142
+ }
143
+ /** Primary delivery tracker first, followed by the earlier international journey. */
144
+ function carrierTrackingLinks(parcel, locale) {
145
+ if (parcel.originalCarrier && parcel.originalTrackingNumber) {
146
+ const active = parcelTrackingLinks({
147
+ carrier: activeTrackingCarrierId(parcel), trackingNumber: parcel.activeTrackingNumber ?? parcel.trackingNumber,
148
+ trackingUrl: activeTrackingCarrierId(parcel) === parcel.carrier
149
+ && (!parcel.activeTrackingNumber || parcel.activeTrackingNumber === parcel.trackingNumber) ? parcel.trackingUrl : undefined,
150
+ }, locale);
151
+ const original = parcelTrackingLinks({
152
+ carrier: parcel.originalCarrier, trackingNumber: parcel.originalTrackingNumber,
153
+ trackingUrl: parcel.originalTrackingUrl,
154
+ }, locale).map((link) => ({ ...link, active: false, role: 'history' }));
155
+ return [...active, ...original];
156
+ }
157
+ if (!supportsSwissPostHandoff(parcel.trackingNumber)) {
158
+ const carrier = carrierInfo(activeTrackingCarrierId(parcel), locale);
159
+ const number = parcel.activeTrackingNumber ?? parcel.trackingNumber;
160
+ // Repair obsolete generated links saved by earlier app versions.
161
+ let savedUrl = requiresAmazonAccount(carrier.id, number) || carrier.id === 'intl-post' || carrier.id !== parcel.carrier
162
+ || number !== parcel.trackingNumber ? undefined : parcel.trackingUrl;
163
+ if (parcel.carrier === 'spring-gds' && savedUrl) {
164
+ try {
165
+ const saved = new URL(savedUrl);
166
+ if (saved.hostname === 'postnl.post' && saved.pathname.startsWith('/details/')) {
167
+ savedUrl = undefined;
168
+ }
169
+ }
170
+ catch {
171
+ // Leave other saved URLs to the existing link validation.
172
+ }
173
+ }
174
+ const url = savedUrl ?? carrier.trackingUrl?.(number);
175
+ return url ? [{
176
+ carrier,
177
+ name: carrier.trackingSiteName ?? carrier.name,
178
+ url: localizedCarrierUrl(carrier.id, url, locale),
179
+ active: true,
180
+ ready: true,
181
+ role: 'active',
182
+ }] : [];
183
+ }
184
+ const activeCarrier = activeTrackingCarrierId(parcel);
185
+ const swissPostReady = parcel.swissPostReady === true || activeCarrier === 'swiss-post';
186
+ const links = ['aliexpress', 'swiss-post'].map((carrierId) => {
187
+ const carrier = carrierInfo(carrierId, locale);
188
+ const active = carrierId === activeCarrier;
189
+ const ready = carrierId !== 'swiss-post' || swissPostReady;
190
+ return {
191
+ carrier,
192
+ name: carrier.trackingSiteName ?? carrier.name,
193
+ url: localizedCarrierUrl(carrier.id, carrier.trackingUrl(parcel.trackingNumber), locale),
194
+ active,
195
+ ready,
196
+ role: active ? 'active' : ready ? 'history' : 'waiting',
197
+ };
198
+ });
199
+ return links.sort((first, second) => Number(second.active) - Number(first.active));
200
+ }
201
+ /** Point a carrier portal at the reader's language when the site supports it. */
202
+ export function localizedCarrierUrl(carrierId, url, locale) {
203
+ if (!locale || !['en', 'de', 'fr', 'it', 'es', 'pt', 'pl'].includes(locale))
204
+ return url;
205
+ try {
206
+ const localizedUrl = new URL(url);
207
+ if (carrierId === 'swiss-post') {
208
+ localizedUrl.searchParams.set('lang', ['en', 'de', 'fr', 'it'].includes(locale) ? locale : 'en');
209
+ }
210
+ else if (localizedUrl.hostname === 't.17track.net' || localizedUrl.hostname === 'parcelsapp.com') {
211
+ // Parcels supports Spanish and Portuguese, but has no Polish page.
212
+ const siteLocale = localizedUrl.hostname === 'parcelsapp.com' && locale === 'pl' ? 'en' : locale;
213
+ localizedUrl.pathname = localizedUrl.pathname.replace(/^\/[a-z]{2}(?=\/|$)/i, `/${siteLocale}`);
214
+ }
215
+ else {
216
+ return url;
217
+ }
218
+ return localizedUrl.toString();
219
+ }
220
+ catch {
221
+ return url;
222
+ }
223
+ }
@@ -0,0 +1,6 @@
1
+ export { AUTOMATIC_CARRIER_IDS, CARRIER_NAMES, activeRequirements, carrierAdapter, carrierDefinition, carrierTimezone, requiredRequirements, } from './index.js';
2
+ export { isValidS10TrackingNumber, supportsSwissPostHandoff, } from '../detection/index.js';
3
+ export declare function normalizeCarrierInputs(carrierId: string, trackingNumber: string, trackingUrl: string, dpdPostcode: string): {
4
+ trackingUrl: string | null;
5
+ dpdPostcode: string | null;
6
+ };