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,94 @@
1
+ {
2
+ "id": "mondial-relay",
3
+ "displayName": "Mondial Relay",
4
+ "aliases": [],
5
+ "region": {
6
+ "countries": [
7
+ "FR",
8
+ "BE",
9
+ "ES",
10
+ "LU",
11
+ "PT"
12
+ ]
13
+ },
14
+ "brand": {
15
+ "color": "#ef3026"
16
+ },
17
+ "selectable": true,
18
+ "timezone": "Europe/Paris",
19
+ "tracking": {
20
+ "mode": "automatic",
21
+ "adapter": "mondial-relay",
22
+ "requirements": [
23
+ {
24
+ "field": "dpdPostcode",
25
+ "whenTrackingNumber": "^(?![0-9]{26}$).*$",
26
+ "validator": "francePostcode",
27
+ "label": "Delivery postcode",
28
+ "type": "text",
29
+ "placeholder": "75001",
30
+ "help": "Short Mondial Relay shipment numbers require the recipient postcode; validated 26-digit label barcodes do not.",
31
+ "pattern": "^[0-9]{5}$",
32
+ "maxLength": 5,
33
+ "inputMode": "numeric",
34
+ "autoComplete": "postal-code"
35
+ }
36
+ ],
37
+ "steps": [
38
+ "trawl"
39
+ ]
40
+ },
41
+ "capabilities": [
42
+ "history",
43
+ "eta"
44
+ ],
45
+ "portal": {
46
+ "url": "https://www.mondialrelay.fr/suivi-de-colis/?numeroExpedition={trackingNumber}",
47
+ "canaryUrl": "https://www.mondialrelay.fr/suivi-de-colis/",
48
+ "shows": [
49
+ "status",
50
+ "history",
51
+ "eta",
52
+ "pickup_point",
53
+ "recipient_name",
54
+ "recipient_address"
55
+ ],
56
+ "scraped": [
57
+ "status",
58
+ "history",
59
+ "eta"
60
+ ],
61
+ "discarded": [
62
+ "pickup_point",
63
+ "recipient_name",
64
+ "recipient_address"
65
+ ],
66
+ "unavailable": []
67
+ },
68
+ "links": [
69
+ {
70
+ "domains": [
71
+ "mondialrelay.fr"
72
+ ],
73
+ "params": [
74
+ "shipment",
75
+ "numeroExpedition",
76
+ "numero",
77
+ "trackingNumber"
78
+ ]
79
+ }
80
+ ],
81
+ "detection": [
82
+ {
83
+ "id": "mondial-relay-1",
84
+ "pattern": "^[0-9]{26}$",
85
+ "confidence": "high",
86
+ "checksum": "mondial-relay"
87
+ },
88
+ {
89
+ "id": "mondial-relay-2",
90
+ "pattern": "^(?:\\d{8}|\\d{10}|\\d{12})$",
91
+ "confidence": "low"
92
+ }
93
+ ]
94
+ }
@@ -0,0 +1,130 @@
1
+ {
2
+ "carrier": "mondial-relay",
3
+ "records": [
4
+ {
5
+ "number": "12123456780101006623123454",
6
+ "role": "shipment",
7
+ "evidence": "synthetic",
8
+ "derivedFrom": "official_shape",
9
+ "shapeConfirmed": "2026-09-12",
10
+ "expect": {
11
+ "carrier": "mondial-relay",
12
+ "confidence": "high"
13
+ },
14
+ "note": "Made-up number that follows the published format."
15
+ },
16
+ {
17
+ "number": "4744000791",
18
+ "role": "shipment",
19
+ "evidence": "public_shipment_report",
20
+ "source": {
21
+ "url": "https://suivi-colis.org/mondial-relay/"
22
+ },
23
+ "expect": {
24
+ "carrier": "unknown",
25
+ "confidence": "low",
26
+ "candidates": [
27
+ "dhl",
28
+ "mondial-relay",
29
+ "relais-colis",
30
+ "tipsa",
31
+ "estafeta"
32
+ ]
33
+ },
34
+ "note": "Publicly reported shipment number; the attribution was not independently verified. The source attributes it to Mondial Relay, which stays one candidate among several."
35
+ },
36
+ {
37
+ "number": "87778793",
38
+ "role": "shipment",
39
+ "evidence": "public_shipment_report",
40
+ "source": {
41
+ "url": "https://suivi-colis.org/mondial-relay/"
42
+ },
43
+ "expect": {
44
+ "carrier": "unknown",
45
+ "confidence": "low",
46
+ "candidates": [
47
+ "mondial-relay",
48
+ "heppner"
49
+ ]
50
+ },
51
+ "note": "Publicly reported shipment number; the attribution was not independently verified. The source attributes it to Mondial Relay, which stays one candidate among several."
52
+ },
53
+ {
54
+ "number": "98911884",
55
+ "role": "shipment",
56
+ "evidence": "public_shipment_report",
57
+ "source": {
58
+ "url": "https://suivi-colis.org/mondial-relay/"
59
+ },
60
+ "expect": {
61
+ "carrier": "unknown",
62
+ "confidence": "low",
63
+ "candidates": [
64
+ "mondial-relay",
65
+ "heppner"
66
+ ]
67
+ },
68
+ "note": "Publicly reported shipment number; the attribution was not independently verified. The source attributes it to Mondial Relay, which stays one candidate among several."
69
+ },
70
+ {
71
+ "number": "73800244620101503002000732",
72
+ "role": "full_barcode",
73
+ "evidence": "public_shipment_report",
74
+ "source": {
75
+ "url": "https://forum.quechoisir.org/probleme-colis-mondial-relay-gls-t286523-40.html",
76
+ "date": "2022-04-25"
77
+ },
78
+ "expect": {
79
+ "carrier": "mondial-relay",
80
+ "confidence": "high"
81
+ },
82
+ "note": "Publicly reported shipment number; the attribution was not independently verified. Full label barcode rather than the number a user types."
83
+ },
84
+ {
85
+ "number": "00000000000000000000000000",
86
+ "role": "negative",
87
+ "evidence": "synthetic",
88
+ "derivedFrom": "invented",
89
+ "shapeConfirmed": "2026-09-12",
90
+ "expect": {
91
+ "carrier": "unknown",
92
+ "confidence": "none",
93
+ "not": [
94
+ "mondial-relay"
95
+ ]
96
+ },
97
+ "note": "All-zero 26-digit string; the checksum gate rejects it. Filed under Mondial Relay; no rule matches this shape."
98
+ },
99
+ {
100
+ "number": "12123456780101006623123455",
101
+ "role": "negative",
102
+ "evidence": "synthetic",
103
+ "derivedFrom": "official_shape",
104
+ "shapeConfirmed": "2026-09-12",
105
+ "expect": {
106
+ "carrier": "unknown",
107
+ "confidence": "none",
108
+ "not": [
109
+ "mondial-relay"
110
+ ]
111
+ },
112
+ "note": "Valid barcode with the final check digit changed. Filed under Mondial Relay; no rule matches this shape."
113
+ },
114
+ {
115
+ "number": "12123456780101106623123454",
116
+ "role": "negative",
117
+ "evidence": "synthetic",
118
+ "derivedFrom": "official_shape",
119
+ "shapeConfirmed": "2026-09-12",
120
+ "expect": {
121
+ "carrier": "unknown",
122
+ "confidence": "none",
123
+ "not": [
124
+ "mondial-relay"
125
+ ]
126
+ },
127
+ "note": "Valid barcode with the first check digit changed. Filed under Mondial Relay; no rule matches this shape."
128
+ }
129
+ ]
130
+ }
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Mondial Relay status vocabulary.
3
+ *
4
+ * The tracking endpoint carries no status code: every state is French prose,
5
+ * in `SuiviContextuel` (the headline), in each event's `Libelle`, and in the
6
+ * `SuiviParEtapes` milestone labels. Matching is therefore done on
7
+ * accent-folded, punctuation-free phrases so that "Retour à l'expéditeur",
8
+ * "retour a l expediteur" and "RETOUR A L'EXPEDITEUR" are one entry.
9
+ *
10
+ * Phrases are grouped most specific first: a return and a failed delivery both
11
+ * mention "livraison", and a pickup that has happened must outrank the parcel
12
+ * merely being available. Wording that matches nothing yields `unknown` with an
13
+ * `in_transit` stage placeholder, which the adapter only uses as an event stage
14
+ * when a more specific source has already set the shipment status.
15
+ */
16
+ import type { ClassifiedStatus } from '../../core/status/index.js';
17
+ /** Fold a French label to the form the phrase lists are written in. */
18
+ export declare function comparableText(value: string): string;
19
+ /** Ordered rules; the first phrase that appears in the folded label wins. */
20
+ export declare const MONDIAL_RELAY_WORDING: readonly {
21
+ phrases: readonly string[];
22
+ classified: ClassifiedStatus;
23
+ }[];
24
+ /** The status and stage a Mondial Relay label denotes. */
25
+ export declare function classifyStatus(description: string): ClassifiedStatus;
26
+ /**
27
+ * `SuiviParEtapes` milestone numbers, used only when no wording on the
28
+ * shipment classified. The numbers are positions on the page's own progress
29
+ * bar, so they are read as "at least this far".
30
+ */
31
+ export declare function milestoneNumberStatus(number: number): ClassifiedStatus;
@@ -0,0 +1,98 @@
1
+ /** Fold a French label to the form the phrase lists are written in. */
2
+ export function comparableText(value) {
3
+ return value
4
+ .toLocaleLowerCase('fr-FR')
5
+ .normalize('NFD')
6
+ .replace(/\p{Diacritic}/gu, '')
7
+ .replace(/[^\p{Letter}\p{Number}]+/gu, ' ')
8
+ .replace(/\s+/g, ' ')
9
+ .trim();
10
+ }
11
+ /** Ordered rules; the first phrase that appears in the folded label wins. */
12
+ export const MONDIAL_RELAY_WORDING = [
13
+ {
14
+ phrases: ['retour a l expediteur', 'retourne a l expediteur', 'retour expediteur', 'retour en cours'],
15
+ classified: { status: 'exception', stage: 'returned' },
16
+ },
17
+ {
18
+ // Carrier-reported problems that are neither a missed attempt nor a return.
19
+ phrases: [
20
+ 'anomalie', 'incident', 'adresse incorrecte', 'colis endommage',
21
+ 'colis refuse', 'colis perdu',
22
+ ],
23
+ classified: { status: 'exception', stage: 'exception' },
24
+ },
25
+ {
26
+ phrases: ['echec de livraison', 'livraison impossible', 'n a pas pu etre livre'],
27
+ classified: { status: 'exception', stage: 'failed_attempt' },
28
+ },
29
+ {
30
+ phrases: [
31
+ 'retire par le destinataire', 'retrait effectue', 'remis au destinataire',
32
+ 'livraison effectuee au destinataire', 'colis livre au destinataire',
33
+ ],
34
+ classified: { status: 'delivered', stage: 'delivered' },
35
+ },
36
+ {
37
+ phrases: [
38
+ 'disponible dans votre point relais', 'disponible au point relais',
39
+ 'disponible dans votre locker', 'disponible au locker',
40
+ 'disponible au point de retrait', 'disponible en consigne',
41
+ 'vous attend au point relais', 'vous attend dans le locker', 'pret a etre retire',
42
+ // The locker countdown: "5 jours restants pour retirer le colis en Locker".
43
+ 'restants pour retirer', 'restant pour retirer',
44
+ ],
45
+ classified: { status: 'out_for_delivery', stage: 'ready_for_pickup' },
46
+ },
47
+ {
48
+ phrases: [
49
+ 'en cours de livraison', 'livraison en cours', 'en cours de distribution',
50
+ 'en cours de mise a disposition',
51
+ ],
52
+ classified: { status: 'out_for_delivery', stage: 'out_for_delivery' },
53
+ },
54
+ {
55
+ phrases: [
56
+ 'information transmise par l expediteur', 'en cours de preparation par l expediteur',
57
+ 'en preparation chez l expediteur', 'etiquette creee', 'colis enregistre',
58
+ ],
59
+ classified: { status: 'pending', stage: 'registered' },
60
+ },
61
+ {
62
+ // Physical acceptance by the carrier, which is not the same event as the
63
+ // shipper announcing the parcel electronically.
64
+ phrases: ['pris en charge', 'prise en charge'],
65
+ classified: { status: 'in_transit', stage: 'accepted' },
66
+ },
67
+ {
68
+ phrases: [
69
+ 'en cours d acheminement', 'en transit', 'arrive sur l agence', 'arrive a l agence',
70
+ 'arrive au centre', 'depart de l agence', 'expedie vers', 'achemine vers',
71
+ 'expedie depuis', 'en cours de traitement sur le site', 'en route vers le point de livraison',
72
+ ],
73
+ classified: { status: 'in_transit', stage: 'in_transit' },
74
+ },
75
+ ];
76
+ /** The status and stage a Mondial Relay label denotes. */
77
+ export function classifyStatus(description) {
78
+ const value = comparableText(description);
79
+ for (const rule of MONDIAL_RELAY_WORDING) {
80
+ if (rule.phrases.some((phrase) => value.includes(phrase)))
81
+ return rule.classified;
82
+ }
83
+ return { status: 'unknown', stage: 'in_transit' };
84
+ }
85
+ /**
86
+ * `SuiviParEtapes` milestone numbers, used only when no wording on the
87
+ * shipment classified. The numbers are positions on the page's own progress
88
+ * bar, so they are read as "at least this far".
89
+ */
90
+ export function milestoneNumberStatus(number) {
91
+ if (number >= 5)
92
+ return { status: 'delivered', stage: 'delivered' };
93
+ if (number === 4)
94
+ return { status: 'out_for_delivery', stage: 'ready_for_pickup' };
95
+ if (number >= 2)
96
+ return { status: 'in_transit', stage: 'in_transit' };
97
+ return { status: 'pending', stage: 'registered' };
98
+ }
@@ -0,0 +1,50 @@
1
+ {
2
+ "carrier": "mondial-relay",
3
+ "entries": [
4
+ { "wording": "Retour à l'expéditeur", "language": "fr", "stage": "returned", "confirmedBy": "fixture", "firstSeen": "2026-09-12", "note": "Adapter result status: exception. Matched accent- and punctuation-free, so \"retourné à l'expéditeur\" and \"retour expéditeur\" are the same entry." },
5
+ { "wording": "Retour en cours", "language": "fr", "stage": "returned", "confirmedBy": "prior-art", "firstSeen": "2026-09-12", "note": "Adapter result status: exception." },
6
+ { "wording": "Anomalie", "language": "fr", "stage": "exception", "confirmedBy": "prior-art", "firstSeen": "2026-09-12", "note": "Adapter result status: exception. Reclassified to exception 2026-09-12." },
7
+ { "wording": "Incident", "language": "fr", "stage": "exception", "confirmedBy": "prior-art", "firstSeen": "2026-09-12", "note": "Adapter result status: exception. Reclassified to exception 2026-09-12." },
8
+ { "wording": "Échec de livraison", "language": "fr", "stage": "failed_attempt", "confirmedBy": "prior-art", "firstSeen": "2026-09-12", "note": "Adapter result status: exception." },
9
+ { "wording": "Livraison impossible", "language": "fr", "stage": "failed_attempt", "confirmedBy": "prior-art", "firstSeen": "2026-09-12", "note": "Adapter result status: exception." },
10
+ { "wording": "N'a pas pu être livré", "language": "fr", "stage": "failed_attempt", "confirmedBy": "prior-art", "firstSeen": "2026-09-12", "note": "Adapter result status: exception." },
11
+ { "wording": "Adresse incorrecte", "language": "fr", "stage": "exception", "confirmedBy": "prior-art", "firstSeen": "2026-09-12", "note": "Adapter result status: exception. Reclassified to exception 2026-09-12." },
12
+ { "wording": "Colis endommagé", "language": "fr", "stage": "exception", "confirmedBy": "prior-art", "firstSeen": "2026-09-12", "note": "Adapter result status: exception. Reclassified to exception 2026-09-12." },
13
+ { "wording": "Colis refusé", "language": "fr", "stage": "exception", "confirmedBy": "prior-art", "firstSeen": "2026-09-12", "note": "Adapter result status: exception. Reclassified to exception 2026-09-12." },
14
+ { "wording": "Colis perdu", "language": "fr", "stage": "exception", "confirmedBy": "prior-art", "firstSeen": "2026-09-12", "note": "Adapter result status: exception. Reclassified to exception 2026-09-12." },
15
+ { "wording": "Retiré par le destinataire", "language": "fr", "stage": "delivered", "confirmedBy": "prior-art", "firstSeen": "2026-09-12", "note": "Collection from the Point Relais is this carrier's delivery event." },
16
+ { "wording": "Retrait effectué", "language": "fr", "stage": "delivered", "confirmedBy": "prior-art", "firstSeen": "2026-09-12", "note": "" },
17
+ { "wording": "Remis au destinataire", "language": "fr", "stage": "delivered", "confirmedBy": "fixture", "firstSeen": "2026-09-12", "note": "" },
18
+ { "wording": "Livraison effectuée au destinataire", "language": "fr", "stage": "delivered", "confirmedBy": "prior-art", "firstSeen": "2026-09-12", "note": "" },
19
+ { "wording": "Colis livré au destinataire", "language": "fr", "stage": "delivered", "confirmedBy": "prior-art", "firstSeen": "2026-09-12", "note": "" },
20
+ { "wording": "Disponible dans votre Point Relais", "language": "fr", "stage": "ready_for_pickup", "confirmedBy": "fixture", "firstSeen": "2026-09-12", "note": "Adapter result status: out_for_delivery. Exercised by fixtures/available-at-relay.json." },
21
+ { "wording": "Disponible au Point Relais", "language": "fr", "stage": "ready_for_pickup", "confirmedBy": "fixture", "firstSeen": "2026-09-12", "note": "Milestone label in fixtures/available-at-relay.json." },
22
+ { "wording": "Disponible dans votre locker", "language": "fr", "stage": "ready_for_pickup", "confirmedBy": "prior-art", "firstSeen": "2026-09-12", "note": "" },
23
+ { "wording": "Disponible en consigne", "language": "fr", "stage": "ready_for_pickup", "confirmedBy": "prior-art", "firstSeen": "2026-09-12", "note": "" },
24
+ { "wording": "Vous attend au Point Relais", "language": "fr", "stage": "ready_for_pickup", "confirmedBy": "prior-art", "firstSeen": "2026-09-12", "note": "" },
25
+ { "wording": "Vous attend dans le locker", "language": "fr", "stage": "ready_for_pickup", "confirmedBy": "prior-art", "firstSeen": "2026-09-12", "note": "" },
26
+ { "wording": "Prêt à être retiré", "language": "fr", "stage": "ready_for_pickup", "confirmedBy": "prior-art", "firstSeen": "2026-09-12", "note": "" },
27
+ { "wording": "En cours de livraison", "language": "fr", "stage": "out_for_delivery", "confirmedBy": "prior-art", "firstSeen": "2026-09-12", "note": "Home-delivery offers; also matched as \"livraison en cours\"." },
28
+ { "wording": "En cours de distribution", "language": "fr", "stage": "out_for_delivery", "confirmedBy": "prior-art", "firstSeen": "2026-09-12", "note": "" },
29
+ { "wording": "En cours de mise à disposition", "language": "fr", "stage": "out_for_delivery", "confirmedBy": "prior-art", "firstSeen": "2026-09-12", "note": "" },
30
+ { "wording": "Information transmise par l'expéditeur", "language": "fr", "stage": "registered", "confirmedBy": "prior-art", "firstSeen": "2026-09-12", "note": "Adapter result status: pending." },
31
+ { "wording": "Colis en cours de préparation par l'expéditeur", "language": "fr", "stage": "registered", "confirmedBy": "fixture", "firstSeen": "2026-09-12", "note": "Adapter result status: pending." },
32
+ { "wording": "Étiquette créée", "language": "fr", "stage": "registered", "confirmedBy": "prior-art", "firstSeen": "2026-09-12", "note": "Adapter result status: pending." },
33
+ { "wording": "Colis enregistré", "language": "fr", "stage": "registered", "confirmedBy": "fixture", "firstSeen": "2026-09-12", "note": "Milestone label in fixtures/available-at-relay.json." },
34
+ { "wording": "Prise en charge", "language": "fr", "stage": "accepted", "confirmedBy": "fixture", "firstSeen": "2026-09-12", "note": "Physical acceptance by the carrier, deliberately distinct from the shipper's electronic registration. Also matched as \"pris en charge\"." },
35
+ { "wording": "En cours d'acheminement", "language": "fr", "stage": "in_transit", "confirmedBy": "fixture", "firstSeen": "2026-09-12", "note": "" },
36
+ { "wording": "En transit", "language": "fr", "stage": "in_transit", "confirmedBy": "prior-art", "firstSeen": "2026-09-12", "note": "" },
37
+ { "wording": "Arrivé sur l'agence", "language": "fr", "stage": "in_transit", "confirmedBy": "prior-art", "firstSeen": "2026-09-12", "note": "Also matched as \"arrivé à l'agence\" and \"arrivé au centre\"." },
38
+ { "wording": "Départ de l'agence", "language": "fr", "stage": "in_transit", "confirmedBy": "prior-art", "firstSeen": "2026-09-12", "note": "" },
39
+ { "wording": "Expédié vers", "language": "fr", "stage": "in_transit", "confirmedBy": "prior-art", "firstSeen": "2026-09-12", "note": "Also matched as \"acheminé vers\"." },
40
+ { "code": "5", "language": "fr", "stage": "delivered", "confirmedBy": "prior-art", "firstSeen": "2026-09-12", "note": "SuiviParEtapes milestone number, used only when no wording on the shipment classified. Read as \"at least this far\", so any number above 5 is delivered too." },
41
+ { "code": "4", "language": "fr", "stage": "ready_for_pickup", "confirmedBy": "fixture", "firstSeen": "2026-09-12", "note": "SuiviParEtapes milestone number; adapter result status out_for_delivery." },
42
+ { "code": "2", "language": "fr", "stage": "in_transit", "confirmedBy": "prior-art", "firstSeen": "2026-09-12", "note": "SuiviParEtapes milestone number, 2 or 3." },
43
+ { "code": "1", "language": "fr", "stage": "registered", "confirmedBy": "fixture", "firstSeen": "2026-09-12", "note": "SuiviParEtapes milestone number; adapter result status pending." },
44
+ { "wording": "jours restants pour retirer le colis", "language": "fr", "stage": "ready_for_pickup", "confirmedBy": "live", "firstSeen": "2026-09-20", "note": "Locker countdown; matched as \"restant(s) pour retirer\". Adapter result status: out_for_delivery." },
45
+ { "wording": "Colis en préparation chez l'expéditeur", "language": "fr", "stage": "registered", "confirmedBy": "live", "firstSeen": "2026-09-20", "note": "Adapter result status: pending." },
46
+ { "wording": "Colis expédié depuis le site", "language": "fr", "stage": "in_transit", "confirmedBy": "live", "firstSeen": "2026-09-20", "note": "Followed by the name of the logistics site." },
47
+ { "wording": "Colis en cours de traitement sur le site", "language": "fr", "stage": "in_transit", "confirmedBy": "live", "firstSeen": "2026-09-20", "note": "Followed by the name of the logistics site." },
48
+ { "wording": "Colis en route vers le point de livraison", "language": "fr", "stage": "in_transit", "confirmedBy": "live", "firstSeen": "2026-09-20", "note": "" }
49
+ ]
50
+ }
@@ -0,0 +1,13 @@
1
+ import type { AdapterFactory, TrackingContext } from '../../core/adapter/index.js';
2
+ import type { CarrierResult } from '../../core/result/index.js';
3
+ import { type StepRecorder } from '../../core/telemetry/index.js';
4
+ export declare class MrwTracker {
5
+ private readonly options;
6
+ constructor(options?: {
7
+ fetcher?: typeof fetch;
8
+ recorder?: StepRecorder;
9
+ paceMs?: number;
10
+ });
11
+ fetch(raw: string, context?: TrackingContext): Promise<CarrierResult>;
12
+ }
13
+ export declare const adapter: AdapterFactory;
@@ -0,0 +1,131 @@
1
+ import { BudgetExceededError, IndeterminateError, RateLimitedError, SchemaError } from '../../core/errors/index.js';
2
+ import { runSteps } from '../../core/runner/index.js';
3
+ import { NOOP_RECORDER } from '../../core/telemetry/index.js';
4
+ import { decodeText, fetchBounded } from '../../core/transport/index.js';
5
+ import { normalizeMrwNumber, parseMrwBootstrap, parseMrwHistory, parseMrwSummary } from './parser.js';
6
+ const ORIGIN = 'https://www.mrw.es';
7
+ const LANDING = `${ORIGIN}/seguimiento/`;
8
+ const POST = `${ORIGIN}/seguimiento/validar-envio.asp`;
9
+ const USER_AGENT = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/154.0.0.0 Safari/537.36';
10
+ const PACE_MS = 1_200;
11
+ const MAX_BYTES = 500_000;
12
+ function addSessionCookies(response, jar) {
13
+ for (const header of response.headers.getSetCookie()) {
14
+ const part = header.split(';', 1)[0] ?? '';
15
+ const separator = part.indexOf('=');
16
+ if (separator < 1)
17
+ continue;
18
+ const name = part.slice(0, separator);
19
+ const value = part.slice(separator + 1);
20
+ if (/^(?:ASPSESSIONID[A-Z0-9]{8}|TS[0-9a-f]{6,32})$/.test(name) && /^[^\s;]{1,256}$/.test(value))
21
+ jar.set(name, value);
22
+ }
23
+ }
24
+ function nextLocation(response, sourceUrl, expected) {
25
+ if (response.status !== 302)
26
+ throw new IndeterminateError('MRW', 'MRW did not continue the tracking session');
27
+ let next;
28
+ try {
29
+ next = new URL(response.headers.get('location') ?? '', sourceUrl);
30
+ }
31
+ catch {
32
+ throw new SchemaError('MRW', 'MRW tracking redirect is invalid');
33
+ }
34
+ if (next.origin === ORIGIN && next.pathname === '/error/429.asp')
35
+ throw new RateLimitedError('MRW');
36
+ if (next.origin !== ORIGIN || next.pathname !== expected || next.search || next.hash || next.username || next.password) {
37
+ throw new IndeterminateError('MRW', 'MRW tracking session changed route');
38
+ }
39
+ return next.toString();
40
+ }
41
+ export class MrwTracker {
42
+ options;
43
+ constructor(options = {}) {
44
+ this.options = options;
45
+ }
46
+ fetch(raw, context = {}) {
47
+ const number = normalizeMrwNumber(raw);
48
+ const budgetMs = context.budgetMs ?? 18_000;
49
+ return runSteps({ carrier: 'mrw', budgetMs, signal: context.signal,
50
+ recorder: this.options.recorder ?? NOOP_RECORDER }, [{ id: 'direct', run: async ({ signal, remainingMs }) => {
51
+ const deadline = performance.now() + remainingMs;
52
+ const jar = new Map();
53
+ let requests = 0;
54
+ const ensureTime = () => {
55
+ if (performance.now() >= deadline)
56
+ throw new BudgetExceededError('MRW', budgetMs);
57
+ signal.throwIfAborted();
58
+ };
59
+ const pace = async () => {
60
+ if (!requests)
61
+ return;
62
+ ensureTime();
63
+ await new Promise((resolve, reject) => {
64
+ const abort = () => {
65
+ clearTimeout(timer);
66
+ signal.removeEventListener('abort', abort);
67
+ reject(signal.reason);
68
+ };
69
+ const timer = setTimeout(() => {
70
+ signal.removeEventListener('abort', abort);
71
+ resolve();
72
+ }, this.options.paceMs ?? PACE_MS);
73
+ signal.addEventListener('abort', abort, { once: true });
74
+ }).catch(error => {
75
+ if (performance.now() >= deadline)
76
+ throw new BudgetExceededError('MRW', budgetMs, { cause: error });
77
+ throw error;
78
+ });
79
+ ensureTime();
80
+ };
81
+ const read = async (url, init = {}) => {
82
+ await pace();
83
+ ensureTime();
84
+ const left = deadline - performance.now();
85
+ const cookies = [...jar].map(([name, value]) => `${name}=${value}`).join('; ');
86
+ const headers = new Headers(init.headers);
87
+ headers.set('User-Agent', USER_AGENT);
88
+ headers.set('Accept', 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8');
89
+ headers.set('Accept-Language', 'es-ES,es;q=0.9');
90
+ if (cookies)
91
+ headers.set('Cookie', cookies);
92
+ const result = await fetchBounded(url, { ...init, headers, signal }, {
93
+ provider: 'MRW', timeoutMs: Math.max(1, Math.floor(left)), maxBytes: MAX_BYTES,
94
+ redirect: 'manual', allowHttpStatuses: [302, 404, 410], fetcher: this.options.fetcher,
95
+ });
96
+ requests += 1;
97
+ ensureTime();
98
+ addSessionCookies(result.response, jar);
99
+ if (result.response.status === 404 || result.response.status === 410) {
100
+ throw new IndeterminateError('MRW', 'MRW tracking page is unavailable');
101
+ }
102
+ return { response: result.response, html: decodeText(result.bytes) };
103
+ };
104
+ const landing = await read(LANDING);
105
+ if (landing.response.status !== 200)
106
+ throw new IndeterminateError('MRW', 'MRW tracking form is unavailable');
107
+ parseMrwBootstrap(landing.html);
108
+ if (![...jar.keys()].some(name => name.startsWith('ASPSESSIONID'))) {
109
+ throw new IndeterminateError('MRW', 'MRW did not establish an anonymous session');
110
+ }
111
+ const submitted = await read(POST, { method: 'POST', headers: {
112
+ 'Content-Type': 'application/x-www-form-urlencoded', Origin: ORIGIN, Referer: LANDING,
113
+ }, body: new URLSearchParams({ 'mrw-finder-follow-code': number, enviar_numenvio_bt: 'Enviar' }) });
114
+ const summaryUrl = nextLocation(submitted.response, POST, '/seguimiento/envio-actual.asp');
115
+ const summaryPage = await read(summaryUrl, { headers: { Referer: POST } });
116
+ if (summaryPage.response.status !== 200)
117
+ throw new IndeterminateError('MRW', 'MRW did not return a shipment summary');
118
+ const summary = parseMrwSummary(summaryPage.html, number);
119
+ const historyJump = await read(summary.historyUrl, { headers: { Referer: summaryUrl } });
120
+ const historyUrl = nextLocation(historyJump.response, summary.historyUrl, '/seguimiento/envio-historico.asp');
121
+ const historyPage = await read(historyUrl, { headers: { Referer: summaryUrl } });
122
+ if (historyPage.response.status !== 200)
123
+ throw new IndeterminateError('MRW', 'MRW did not return shipment history');
124
+ return parseMrwHistory(historyPage.html, number, summary);
125
+ } }]);
126
+ }
127
+ }
128
+ export const adapter = environment => {
129
+ const tracker = new MrwTracker({ fetcher: environment.fetcher, recorder: environment.recorder });
130
+ return { id: 'mrw', recordsSteps: true, steps: ['direct'], track: (input, context) => tracker.fetch(input.number, context) };
131
+ };
@@ -0,0 +1,60 @@
1
+ {
2
+ "id": "mrw",
3
+ "displayName": "MRW",
4
+ "aliases": [],
5
+ "region": {
6
+ "countries": [
7
+ "ES",
8
+ "PT"
9
+ ]
10
+ },
11
+ "brand": {
12
+ "color": "#19133b"
13
+ },
14
+ "selectable": true,
15
+ "timezone": "UTC",
16
+ "tracking": {
17
+ "mode": "automatic",
18
+ "adapter": "mrw",
19
+ "steps": [
20
+ "direct"
21
+ ],
22
+ "localClocks": true
23
+ },
24
+ "capabilities": [
25
+ "history",
26
+ "location"
27
+ ],
28
+ "portal": {
29
+ "url": "https://www.mrw.es/seguimiento",
30
+ "canaryUrl": "https://www.mrw.es/seguimiento/",
31
+ "shows": [
32
+ "status",
33
+ "history",
34
+ "location",
35
+ "pickup_point_address"
36
+ ],
37
+ "scraped": [
38
+ "status",
39
+ "history",
40
+ "location"
41
+ ],
42
+ "discarded": [
43
+ "pickup_point_address"
44
+ ],
45
+ "unavailable": []
46
+ },
47
+ "links": [],
48
+ "detection": [
49
+ {
50
+ "id": "mrw-1",
51
+ "pattern": "^\\d{12}$",
52
+ "confidence": "low"
53
+ },
54
+ {
55
+ "id": "mrw-2",
56
+ "pattern": "^\\d{5}[A-Z]\\d{6}$",
57
+ "confidence": "high"
58
+ }
59
+ ]
60
+ }