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,341 @@
1
+ {
2
+ "carrier": "relais-colis",
3
+ "entries": [
4
+ {
5
+ "wording": "retour a l expediteur",
6
+ "language": "fr",
7
+ "stage": "returned",
8
+ "confirmedBy": "prior-art",
9
+ "firstSeen": "2026-09-12",
10
+ "note": "Return fragments apply only after excluding planned or ongoing return wording."
11
+ },
12
+ {
13
+ "wording": "retourne a l expediteur",
14
+ "language": "fr",
15
+ "stage": "returned",
16
+ "confirmedBy": "prior-art",
17
+ "firstSeen": "2026-09-12",
18
+ "note": "Return fragments apply only after excluding planned or ongoing return wording."
19
+ },
20
+ {
21
+ "wording": "retourne a votre vendeur",
22
+ "language": "fr",
23
+ "stage": "returned",
24
+ "confirmedBy": "fixture",
25
+ "firstSeen": "2026-09-12",
26
+ "note": "Return fragments apply only after excluding planned or ongoing return wording."
27
+ },
28
+ {
29
+ "wording": "retour a votre vendeur",
30
+ "language": "fr",
31
+ "stage": "returned",
32
+ "confirmedBy": "prior-art",
33
+ "firstSeen": "2026-09-12",
34
+ "note": "Return fragments apply only after excluding planned or ongoing return wording."
35
+ },
36
+ {
37
+ "wording": "retour vendeur",
38
+ "language": "fr",
39
+ "stage": "returned",
40
+ "confirmedBy": "prior-art",
41
+ "firstSeen": "2026-09-12",
42
+ "note": "Return fragments apply only after excluding planned or ongoing return wording."
43
+ },
44
+ {
45
+ "wording": "livraison impossible",
46
+ "language": "fr",
47
+ "stage": "failed_attempt",
48
+ "confirmedBy": "prior-art",
49
+ "firstSeen": "2026-09-12",
50
+ "note": "Sentence fragment inherited from the pre-package adapter; source not recorded."
51
+ },
52
+ {
53
+ "wording": "echec de livraison",
54
+ "language": "fr",
55
+ "stage": "failed_attempt",
56
+ "confirmedBy": "prior-art",
57
+ "firstSeen": "2026-09-12",
58
+ "note": "Sentence fragment inherited from the pre-package adapter; source not recorded."
59
+ },
60
+ {
61
+ "wording": "incident de livraison",
62
+ "language": "fr",
63
+ "stage": "failed_attempt",
64
+ "confirmedBy": "prior-art",
65
+ "firstSeen": "2026-09-12",
66
+ "note": "Sentence fragment inherited from the pre-package adapter; source not recorded."
67
+ },
68
+ {
69
+ "wording": "adresse incorrecte",
70
+ "language": "fr",
71
+ "stage": "exception",
72
+ "confirmedBy": "prior-art",
73
+ "firstSeen": "2026-09-12",
74
+ "note": "Sentence fragment inherited from the pre-package adapter; source not recorded. Reclassified to exception 2026-09-12."
75
+ },
76
+ {
77
+ "wording": "colis endommage",
78
+ "language": "fr",
79
+ "stage": "exception",
80
+ "confirmedBy": "prior-art",
81
+ "firstSeen": "2026-09-12",
82
+ "note": "Sentence fragment inherited from the pre-package adapter; source not recorded. Reclassified to exception 2026-09-12."
83
+ },
84
+ {
85
+ "wording": "colis refuse",
86
+ "language": "fr",
87
+ "stage": "exception",
88
+ "confirmedBy": "prior-art",
89
+ "firstSeen": "2026-09-12",
90
+ "note": "Sentence fragment inherited from the pre-package adapter; source not recorded. Reclassified to exception 2026-09-12."
91
+ },
92
+ {
93
+ "wording": "colis perdu",
94
+ "language": "fr",
95
+ "stage": "exception",
96
+ "confirmedBy": "prior-art",
97
+ "firstSeen": "2026-09-12",
98
+ "note": "Sentence fragment inherited from the pre-package adapter; source not recorded. Reclassified to exception 2026-09-12."
99
+ },
100
+ {
101
+ "wording": "destinataire absent",
102
+ "language": "fr",
103
+ "stage": "failed_attempt",
104
+ "confirmedBy": "prior-art",
105
+ "firstSeen": "2026-09-12",
106
+ "note": "Sentence fragment inherited from the pre-package adapter; source not recorded."
107
+ },
108
+ {
109
+ "wording": "n a pas pu etre livre",
110
+ "language": "fr",
111
+ "stage": "failed_attempt",
112
+ "confirmedBy": "prior-art",
113
+ "firstSeen": "2026-09-12",
114
+ "note": "Sentence fragment inherited from the pre-package adapter; source not recorded."
115
+ },
116
+ {
117
+ "wording": "disponible dans votre relais",
118
+ "language": "fr",
119
+ "stage": "ready_for_pickup",
120
+ "confirmedBy": "fixture",
121
+ "firstSeen": "2026-09-12",
122
+ "note": "Matched on the fixture step \"Votre colis est disponible dans votre Relais Colis\"."
123
+ },
124
+ {
125
+ "wording": "disponible au relais",
126
+ "language": "fr",
127
+ "stage": "ready_for_pickup",
128
+ "confirmedBy": "prior-art",
129
+ "firstSeen": "2026-09-12",
130
+ "note": "Sentence fragment inherited from the pre-package adapter; source not recorded."
131
+ },
132
+ {
133
+ "wording": "disponible en relais",
134
+ "language": "fr",
135
+ "stage": "ready_for_pickup",
136
+ "confirmedBy": "prior-art",
137
+ "firstSeen": "2026-09-12",
138
+ "note": "Sentence fragment inherited from the pre-package adapter; source not recorded."
139
+ },
140
+ {
141
+ "wording": "mis a disposition dans votre relais",
142
+ "language": "fr",
143
+ "stage": "ready_for_pickup",
144
+ "confirmedBy": "prior-art",
145
+ "firstSeen": "2026-09-12",
146
+ "note": "Sentence fragment inherited from the pre-package adapter; source not recorded."
147
+ },
148
+ {
149
+ "wording": "vous attend dans votre relais",
150
+ "language": "fr",
151
+ "stage": "ready_for_pickup",
152
+ "confirmedBy": "prior-art",
153
+ "firstSeen": "2026-09-12",
154
+ "note": "Sentence fragment inherited from the pre-package adapter; source not recorded."
155
+ },
156
+ {
157
+ "wording": "a retirer dans votre relais",
158
+ "language": "fr",
159
+ "stage": "ready_for_pickup",
160
+ "confirmedBy": "prior-art",
161
+ "firstSeen": "2026-09-12",
162
+ "note": "Sentence fragment inherited from the pre-package adapter; source not recorded."
163
+ },
164
+ {
165
+ "wording": "en cours de livraison",
166
+ "language": "fr",
167
+ "stage": "out_for_delivery",
168
+ "confirmedBy": "fixture",
169
+ "firstSeen": "2026-09-12",
170
+ "note": "Exercised by the offline out-for-delivery scenario; tested before the delivery rules so \"livraison dans votre relais\" cannot read as delivered."
171
+ },
172
+ {
173
+ "wording": "en cours de distribution",
174
+ "language": "fr",
175
+ "stage": "out_for_delivery",
176
+ "confirmedBy": "prior-art",
177
+ "firstSeen": "2026-09-12",
178
+ "note": "Sentence fragment inherited from the pre-package adapter; source not recorded."
179
+ },
180
+ {
181
+ "wording": "livraison dans votre relais",
182
+ "language": "fr",
183
+ "stage": "out_for_delivery",
184
+ "confirmedBy": "prior-art",
185
+ "firstSeen": "2026-09-12",
186
+ "note": "Sentence fragment inherited from the pre-package adapter; source not recorded."
187
+ },
188
+ {
189
+ "wording": "retire par le destinataire",
190
+ "language": "fr",
191
+ "stage": "delivered",
192
+ "confirmedBy": "prior-art",
193
+ "firstSeen": "2026-09-12",
194
+ "note": "Sentence fragment inherited from the pre-package adapter; source not recorded."
195
+ },
196
+ {
197
+ "wording": "remis au destinataire",
198
+ "language": "fr",
199
+ "stage": "delivered",
200
+ "confirmedBy": "prior-art",
201
+ "firstSeen": "2026-09-12",
202
+ "note": "Sentence fragment inherited from the pre-package adapter; source not recorded."
203
+ },
204
+ {
205
+ "wording": "remis a son destinataire",
206
+ "language": "fr",
207
+ "stage": "delivered",
208
+ "confirmedBy": "prior-art",
209
+ "firstSeen": "2026-09-12",
210
+ "note": "Sentence fragment inherited from the pre-package adapter; source not recorded."
211
+ },
212
+ {
213
+ "wording": "livraison effectuee",
214
+ "language": "fr",
215
+ "stage": "delivered",
216
+ "confirmedBy": "prior-art",
217
+ "firstSeen": "2026-09-12",
218
+ "note": "Sentence fragment inherited from the pre-package adapter; source not recorded."
219
+ },
220
+ {
221
+ "wording": "colis|commande a ete|est livre",
222
+ "language": "fr",
223
+ "stage": "delivered",
224
+ "confirmedBy": "fixture",
225
+ "firstSeen": "2026-09-12",
226
+ "note": "Regular expression rather than a fragment; exercised by the offline \"Votre colis a été livré au destinataire\" scenario."
227
+ },
228
+ {
229
+ "wording": "commande enregistree",
230
+ "language": "fr",
231
+ "stage": "registered",
232
+ "confirmedBy": "prior-art",
233
+ "firstSeen": "2026-09-12",
234
+ "note": "Sentence fragment inherited from the pre-package adapter; source not recorded."
235
+ },
236
+ {
237
+ "wording": "colis annonce",
238
+ "language": "fr",
239
+ "stage": "registered",
240
+ "confirmedBy": "prior-art",
241
+ "firstSeen": "2026-09-12",
242
+ "note": "Sentence fragment inherited from the pre-package adapter; source not recorded."
243
+ },
244
+ {
245
+ "wording": "colis a ete annonce",
246
+ "language": "fr",
247
+ "stage": "registered",
248
+ "confirmedBy": "fixture",
249
+ "firstSeen": "2026-09-12",
250
+ "note": "Matched on the fixture step \"Votre colis a été annoncé\"."
251
+ },
252
+ {
253
+ "wording": "information transmise",
254
+ "language": "fr",
255
+ "stage": "registered",
256
+ "confirmedBy": "prior-art",
257
+ "firstSeen": "2026-09-12",
258
+ "note": "Sentence fragment inherited from the pre-package adapter; source not recorded."
259
+ },
260
+ {
261
+ "wording": "en attente de prise en charge",
262
+ "language": "fr",
263
+ "stage": "registered",
264
+ "confirmedBy": "prior-art",
265
+ "firstSeen": "2026-09-12",
266
+ "note": "Sentence fragment inherited from the pre-package adapter; source not recorded."
267
+ },
268
+ {
269
+ "wording": "sera prochainement confie",
270
+ "language": "fr",
271
+ "stage": "registered",
272
+ "confirmedBy": "prior-art",
273
+ "firstSeen": "2026-09-12",
274
+ "note": "Sentence fragment inherited from the pre-package adapter; source not recorded."
275
+ },
276
+ {
277
+ "wording": "pris en charge",
278
+ "language": "fr",
279
+ "stage": "in_transit",
280
+ "confirmedBy": "fixture",
281
+ "firstSeen": "2026-09-12",
282
+ "note": "Matched on the fixture step \"Votre colis a été pris en charge\"."
283
+ },
284
+ {
285
+ "wording": "en cours d acheminement",
286
+ "language": "fr",
287
+ "stage": "in_transit",
288
+ "confirmedBy": "fixture",
289
+ "firstSeen": "2026-09-12",
290
+ "note": "Matched on the fixture step \"Votre colis est en cours d'acheminement dans notre réseau\"."
291
+ },
292
+ {
293
+ "wording": "en transit",
294
+ "language": "fr",
295
+ "stage": "in_transit",
296
+ "confirmedBy": "prior-art",
297
+ "firstSeen": "2026-09-12",
298
+ "note": "Sentence fragment inherited from the pre-package adapter; source not recorded."
299
+ },
300
+ {
301
+ "wording": "arrive dans notre agence",
302
+ "language": "fr",
303
+ "stage": "in_transit",
304
+ "confirmedBy": "prior-art",
305
+ "firstSeen": "2026-09-12",
306
+ "note": "Sentence fragment inherited from the pre-package adapter; source not recorded."
307
+ },
308
+ {
309
+ "wording": "arrive sur notre agence",
310
+ "language": "fr",
311
+ "stage": "in_transit",
312
+ "confirmedBy": "prior-art",
313
+ "firstSeen": "2026-09-12",
314
+ "note": "Sentence fragment inherited from the pre-package adapter; source not recorded."
315
+ },
316
+ {
317
+ "wording": "a quitte notre agence",
318
+ "language": "fr",
319
+ "stage": "in_transit",
320
+ "confirmedBy": "prior-art",
321
+ "firstSeen": "2026-09-12",
322
+ "note": "Sentence fragment inherited from the pre-package adapter; source not recorded."
323
+ },
324
+ {
325
+ "wording": "achemine vers",
326
+ "language": "fr",
327
+ "stage": "in_transit",
328
+ "confirmedBy": "prior-art",
329
+ "firstSeen": "2026-09-12",
330
+ "note": "Sentence fragment inherited from the pre-package adapter; source not recorded."
331
+ },
332
+ {
333
+ "wording": "expedie vers",
334
+ "language": "fr",
335
+ "stage": "in_transit",
336
+ "confirmedBy": "prior-art",
337
+ "firstSeen": "2026-09-12",
338
+ "note": "Sentence fragment inherited from the pre-package adapter; source not recorded."
339
+ }
340
+ ]
341
+ }
@@ -0,0 +1,32 @@
1
+ import type { AdapterFactory } from '../../core/adapter/index.js';
2
+ import type { CarrierResult } from '../../core/result/index.js';
3
+ import { type StepRecorder } from '../../core/telemetry/index.js';
4
+ import { TrawlClient } from '../../core/transport/index.js';
5
+ export declare function normalizeRoyalMailNumber(raw: string): string;
6
+ export declare function royalMailTrackingUrl(trackingNumber: string): string;
7
+ export declare function royalMailSummaryApiUrl(trackingNumber: string): string;
8
+ /** Only the field vocabulary consumed by the public tracking application. */
9
+ export declare function parseRoyalMailTrackingResponse(payload: unknown, trackingNumber: string): CarrierResult;
10
+ /**
11
+ * The page the browser rendered, read only to tell a bot challenge from an
12
+ * inconclusive load. Rendered text never decides not-found: only the
13
+ * structured reply does.
14
+ */
15
+ export declare function parseRoyalMailTrackingHtml(page: string): 'challenged' | 'inconclusive';
16
+ export interface RoyalMailTrackerOptions {
17
+ timeoutMs?: number;
18
+ /** Legacy configuration seam; `trawl` is preferred. */
19
+ trawlUrl?: string;
20
+ /** The browser service, or null when none is configured. */
21
+ trawl?: TrawlClient | null;
22
+ fetcher?: typeof fetch;
23
+ recorder?: StepRecorder;
24
+ }
25
+ export declare class RoyalMailTracker {
26
+ #private;
27
+ readonly timeoutMs: number;
28
+ readonly trawlUrl: string;
29
+ constructor(options?: RoyalMailTrackerOptions);
30
+ fetch(trackingNumber: string): Promise<CarrierResult>;
31
+ }
32
+ export declare const adapter: AdapterFactory;
@@ -0,0 +1,260 @@
1
+ import { DateTime } from 'luxon';
2
+ import { load } from 'cheerio';
3
+ import { ChallengeError, IndeterminateError, RateLimitedError, SchemaError, TransportError, UpstreamHttpError } from '../../core/errors/index.js';
4
+ import { runSteps } from '../../core/runner/index.js';
5
+ import { NOOP_RECORDER } from '../../core/telemetry/index.js';
6
+ import { clean, cleanScalar, TrawlClient } from '../../core/transport/index.js';
7
+ import { explicitOffsetTime } from '../../core/time/index.js';
8
+ import { isRecord } from '../../core/types.js';
9
+ import { royalMailStage, royalMailSummaryStage, statusForStage } from './status.js';
10
+ /** Read the response produced by Royal Mail's form and hCaptcha callback. */
11
+ const TRACKING_BASE = 'https://www.royalmail.com/track-your-item';
12
+ const SUMMARY_API_PREFIX = 'https://api-web.royalmail.com/mailpieces/microsummary/v1/summary/';
13
+ const MAX_BYTES = 10_000_000;
14
+ const DEFAULT_TIMEOUT_MS = 60_000;
15
+ // How long the browser may wait for the page's own summary call after the page settles.
16
+ const SETTLE_TIMEOUT_MS = 15_000;
17
+ // Captured replies beyond this many are noise, never the answer.
18
+ const MAX_CAPTURED = 20;
19
+ const MAX_EVENTS_TO_INSPECT = 500;
20
+ const MAX_EVENTS_TO_RETURN = 100;
21
+ export function normalizeRoyalMailNumber(raw) {
22
+ const value = raw.toLocaleUpperCase('en-US').replace(/[\s.-]/g, '');
23
+ if (!/^[A-Z]{2}\d{9}GB$/.test(value)) {
24
+ throw new SchemaError('Royal Mail', 'Royal Mail tracking numbers must match the UPU S10 format');
25
+ }
26
+ return value;
27
+ }
28
+ export function royalMailTrackingUrl(trackingNumber) {
29
+ return `${TRACKING_BASE}#/tracking-results/${normalizeRoyalMailNumber(trackingNumber)}`;
30
+ }
31
+ export function royalMailSummaryApiUrl(trackingNumber) {
32
+ return `${SUMMARY_API_PREFIX}${normalizeRoyalMailNumber(trackingNumber)}`;
33
+ }
34
+ /** Preserve offset-free wall time instead of assigning a zone to overseas scans. */
35
+ function eventTime(value) {
36
+ const raw = cleanScalar(value, 64);
37
+ return explicitOffsetTime(raw)?.iso ?? raw;
38
+ }
39
+ /** A delivery estimate reduced to its calendar day. */
40
+ function expectedDelivery(value) {
41
+ const raw = cleanScalar(value, 64);
42
+ const day = /^\d{4}-\d{2}-\d{2}/.exec(raw)?.[0];
43
+ return day && DateTime.fromISO(day).isValid ? day : null;
44
+ }
45
+ /** Only the field vocabulary consumed by the public tracking application. */
46
+ export function parseRoyalMailTrackingResponse(payload, trackingNumber) {
47
+ const number = normalizeRoyalMailNumber(trackingNumber);
48
+ if (!isRecord(payload))
49
+ throw new SchemaError('Royal Mail', 'Royal Mail returned an invalid tracking response');
50
+ const errors = Array.isArray(payload.errors) ? payload.errors.filter(isRecord) : [];
51
+ if (errors.some(error => error.errorCode === 'E0015' || error.code === 'E0015')) {
52
+ throw new ChallengeError('Royal Mail', 'Royal Mail denied the tracking session');
53
+ }
54
+ if (String(payload.httpCode) === '429')
55
+ throw new RateLimitedError('Royal Mail');
56
+ if (errors.length)
57
+ throw new IndeterminateError('Royal Mail', 'Royal Mail could not confirm the tracking status');
58
+ const mailpiece = payload.mailPieces;
59
+ // The microsummary endpoint returns one object, not the array used by the
60
+ // recent-items endpoint. Never treat a gateway 404 or schema drift as not-found.
61
+ if (!isRecord(mailpiece) || !isRecord(mailpiece.summary)) {
62
+ throw new SchemaError('Royal Mail', 'Royal Mail returned an invalid tracking response');
63
+ }
64
+ if (cleanScalar(mailpiece.mailPieceId).toUpperCase() !== number) {
65
+ throw new SchemaError('Royal Mail', 'Royal Mail did not return the requested parcel');
66
+ }
67
+ const summary = mailpiece.summary;
68
+ const summaryText = cleanScalar(summary.statusDescription);
69
+ if (mailpiece.events !== undefined && !Array.isArray(mailpiece.events)) {
70
+ throw new SchemaError('Royal Mail', 'Royal Mail returned invalid tracking events');
71
+ }
72
+ const scans = Array.isArray(mailpiece.events) ? mailpiece.events : [];
73
+ const events = [];
74
+ const seen = new Set();
75
+ for (const raw of scans.slice(0, MAX_EVENTS_TO_INSPECT)) {
76
+ if (!isRecord(raw))
77
+ continue;
78
+ const description = cleanScalar(raw.eventName);
79
+ if (!description)
80
+ continue;
81
+ const stage = royalMailStage(description) ?? undefined;
82
+ const time = eventTime(raw.eventDateTime);
83
+ const location = cleanScalar(raw.locationName, 250);
84
+ const code = cleanScalar(raw.eventCode, 64);
85
+ const event = {
86
+ ...(time ? { time } : {}),
87
+ ...(location ? { location } : {}),
88
+ description: stage === 'delivered' ? 'Delivered' : description,
89
+ ...(stage ? { stage } : {}),
90
+ ...(/^[A-Za-z0-9_-]+$/.test(code) ? { provider_code: code } : {}),
91
+ };
92
+ const identity = JSON.stringify([time, location, event.description]);
93
+ if (seen.has(identity))
94
+ continue;
95
+ seen.add(identity);
96
+ events.push(event);
97
+ }
98
+ // Royal Mail also sorts the history; upstream order is not guaranteed.
99
+ events.sort((a, b) => {
100
+ const left = Date.parse(a.time ?? '');
101
+ const right = Date.parse(b.time ?? '');
102
+ return Number.isFinite(left) && Number.isFinite(right) ? right - left : 0;
103
+ });
104
+ const trimmed = events.slice(0, MAX_EVENTS_TO_RETURN);
105
+ const summaryCategory = cleanScalar(summary.statusCategory);
106
+ const statusText = summaryText || summaryCategory || trimmed[0]?.description;
107
+ if (!statusText)
108
+ throw new SchemaError('Royal Mail', 'Royal Mail returned no usable tracking status');
109
+ const stage = royalMailSummaryStage(summaryCategory, statusText) ?? undefined;
110
+ const delivered = stage === 'delivered';
111
+ return {
112
+ status: stage ? statusForStage(stage) : 'unknown',
113
+ ...(stage ? { current_stage: stage } : {}),
114
+ last_status_text: delivered ? 'Delivered' : statusText,
115
+ last_update: eventTime(summary.lastEventDateTime) || trimmed[0]?.time || null,
116
+ expected_delivery: delivered || !isRecord(mailpiece.estimatedDelivery)
117
+ ? null : expectedDelivery(mailpiece.estimatedDelivery.date),
118
+ events: trimmed,
119
+ };
120
+ }
121
+ /**
122
+ * The page the browser rendered, read only to tell a bot challenge from an
123
+ * inconclusive load. Rendered text never decides not-found: only the
124
+ * structured reply does.
125
+ */
126
+ export function parseRoyalMailTrackingHtml(page) {
127
+ const $ = load(page);
128
+ $('script, style, noscript').remove();
129
+ const visible = clean($('body').text(), 20_000);
130
+ if (/access denied|just a moment|attention required|are you a robot|verify you are human|before you proceed|unusual traffic/i.test(visible)) {
131
+ return 'challenged';
132
+ }
133
+ return 'inconclusive';
134
+ }
135
+ export class RoyalMailTracker {
136
+ timeoutMs;
137
+ trawlUrl;
138
+ #trawl;
139
+ #fetcher;
140
+ #recorder;
141
+ constructor(options = {}) {
142
+ if (options.timeoutMs !== undefined && (!Number.isFinite(options.timeoutMs) || options.timeoutMs <= 0)) {
143
+ throw new TypeError('Royal Mail timeout must be positive');
144
+ }
145
+ this.timeoutMs = options.timeoutMs ?? DEFAULT_TIMEOUT_MS;
146
+ this.trawlUrl = (options.trawlUrl ?? '').trim();
147
+ this.#trawl = options.trawl;
148
+ this.#fetcher = options.fetcher;
149
+ this.#recorder = options.recorder ?? NOOP_RECORDER;
150
+ }
151
+ /** The injected browser service, or one built from the configured URL. */
152
+ #browserService() {
153
+ if (this.#trawl !== undefined)
154
+ return this.#trawl;
155
+ return this.trawlUrl ? new TrawlClient(this.trawlUrl, this.#fetcher) : null;
156
+ }
157
+ async fetch(trackingNumber) {
158
+ const number = normalizeRoyalMailNumber(trackingNumber);
159
+ // Akamai refuses every non-browser client, so a direct attempt only burns
160
+ // time. There is one step, and it is the browser.
161
+ const trawl = this.#browserService();
162
+ if (!trawl) {
163
+ throw new ChallengeError('Royal Mail', 'Royal Mail challenged direct tracking; configure FLARESOLVERR_URL for browser fallback');
164
+ }
165
+ return runSteps({
166
+ carrier: 'royal-mail', budgetMs: this.timeoutMs, recorder: this.#recorder,
167
+ }, [
168
+ { id: 'trawl', run: () => this.#trawlResult(trawl, number) },
169
+ ]);
170
+ }
171
+ /**
172
+ * A real browser loads the page and makes the summary call itself; the
173
+ * service hands that reply back. The browser's session is never replayed
174
+ * over plain HTTP: the edge accepts the call only from the session it
175
+ * validated. The page the browser rendered only tells a challenge apart.
176
+ */
177
+ async #trawlResult(trawl, number) {
178
+ const summaryUrl = royalMailSummaryApiUrl(number);
179
+ const page = await trawl.scrape({
180
+ url: royalMailTrackingUrl(number),
181
+ skipHttp: true,
182
+ maxTier: 3,
183
+ maxTimeout: this.timeoutMs,
184
+ captureResponses: [summaryUrl],
185
+ settleTimeout: SETTLE_TIMEOUT_MS,
186
+ }, {
187
+ provider: 'TRAWL while fetching Royal Mail',
188
+ // A browser may validate its cached main document with 304 while the
189
+ // freshly submitted tracking request still returns a normal JSON reply.
190
+ requireSolved: false,
191
+ timeoutMs: this.timeoutMs,
192
+ maxBytes: MAX_BYTES,
193
+ fetcher: this.#fetcher,
194
+ });
195
+ if (![2, 3].includes(page.tier) || ![200, 304].includes(page.statusCode)) {
196
+ throw new TransportError('Royal Mail', 'The browser service did not load the Royal Mail tracking page');
197
+ }
198
+ let captureError;
199
+ // Newest first: a later reply is the page's final answer. The entry URL
200
+ // itself carries the number, so only the exact requested call is read.
201
+ for (const entry of page.capturedResponses.slice(0, MAX_CAPTURED).reverse()) {
202
+ if (entry.url !== summaryUrl)
203
+ continue;
204
+ if (entry.status === 429) {
205
+ const retry = entry.headers['retry-after'];
206
+ const retryMs = retry && /^\d+$/.test(retry) ? Number(retry) * 1_000 : undefined;
207
+ throw new RateLimitedError('Royal Mail', retryMs);
208
+ }
209
+ if ([401, 403].includes(entry.status))
210
+ throw new ChallengeError('Royal Mail');
211
+ if (entry.status === 404 && entry.body && !entry.truncated && !entry.base64Encoded && !entry.error) {
212
+ let payload;
213
+ try {
214
+ payload = JSON.parse(entry.body);
215
+ }
216
+ catch { /* Keep the HTTP failure below. */ }
217
+ if (isRecord(payload) && Array.isArray(payload.errors)
218
+ && payload.errors.some(error => isRecord(error) && error.errorCode === 'E1142')) {
219
+ throw new IndeterminateError('Royal Mail', 'Royal Mail could not confirm the tracking status');
220
+ }
221
+ }
222
+ if (entry.status >= 400)
223
+ throw new UpstreamHttpError('Royal Mail', entry.status);
224
+ if (entry.status !== 200 || entry.truncated || entry.base64Encoded || entry.error || entry.body === null)
225
+ continue;
226
+ try {
227
+ return this.#structuredResult(number, JSON.parse(entry.body));
228
+ }
229
+ catch (error) {
230
+ // An unreadable or unrelated reply; the rendered page may still name a challenge.
231
+ if (!(error instanceof SyntaxError))
232
+ throw error;
233
+ captureError = error;
234
+ }
235
+ }
236
+ if (parseRoyalMailTrackingHtml(page.html) === 'challenged') {
237
+ throw new ChallengeError('Royal Mail', 'Royal Mail challenged the browser tracking session', { cause: captureError });
238
+ }
239
+ throw new TransportError('Royal Mail', 'TRAWL did not capture the Royal Mail tracking response', { cause: captureError });
240
+ }
241
+ #structuredResult(number, payload) {
242
+ const result = parseRoyalMailTrackingResponse(payload, number);
243
+ result.tracking_url = royalMailTrackingUrl(number);
244
+ result.tracking_source = 'structured-web-response';
245
+ return result;
246
+ }
247
+ }
248
+ export const adapter = (environment) => {
249
+ const tracker = new RoyalMailTracker({
250
+ fetcher: environment.fetcher,
251
+ trawl: environment.trawl,
252
+ recorder: environment.recorder,
253
+ });
254
+ return {
255
+ id: 'royal-mail',
256
+ // Akamai refuses every non-browser client, so there is no direct tier.
257
+ steps: ['trawl'],
258
+ track: (input) => tracker.fetch(input.number),
259
+ };
260
+ };