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,101 @@
1
+ import { load } from 'cheerio';
2
+ import { DateTime } from 'luxon';
3
+ import { IndeterminateError, InputRequiredError, NotFoundError, SchemaError, TransportError, UpstreamHttpError } from '../../core/errors/index.js';
4
+ import { runSteps } from '../../core/runner/index.js';
5
+ import { clean, decodeText, fetchBounded } from '../../core/transport/index.js';
6
+ import { koreaPostStatus } from './status.js';
7
+ const ENDPOINT = 'https://trace.epost.go.kr/xtts/servlet/kpl.tts.common.svl.SttSVL';
8
+ export function normalizeKoreaPostNumber(raw) {
9
+ const number = raw.toUpperCase().replace(/[\s.-]/g, '');
10
+ if (!/^[A-Z]{2}\d{9}[A-Z]{2}$/.test(number))
11
+ throw new InputRequiredError('Korea Post', 'number', 'Korea Post direct tracking supports international postal identifiers');
12
+ return number;
13
+ }
14
+ function eventTime(raw) {
15
+ const parsed = DateTime.fromFormat(raw, 'HH:mm dd-LLL-yyyy', { zone: 'UTC', locale: 'en-US' });
16
+ if (!parsed.isValid)
17
+ throw new SchemaError('Korea Post', 'Korea Post returned an invalid scan time');
18
+ // The portal explicitly uses destination-local time after handover. Preserve
19
+ // its sequence and wall clocks; a Korea-wide timezone would corrupt these.
20
+ return parsed.toISO({ suppressMilliseconds: true, includeOffset: false });
21
+ }
22
+ export function parse(html, trackingNumber) {
23
+ const number = normalizeKoreaPostNumber(trackingNumber);
24
+ const $ = load(html);
25
+ $('script, style, noscript').remove();
26
+ $('br').replaceWith(' ');
27
+ const basic = $('table').filter((_, element) => $(element).attr('summary') === 'Basic Information');
28
+ const basicRows = basic.find('tbody > tr');
29
+ if (basic.length !== 1 || basicRows.length !== 1 || clean(basicRows.children('td').first().text()) !== number)
30
+ throw new SchemaError('Korea Post', 'Korea Post returned a different or ambiguous shipment');
31
+ const history = $('table').filter((_, element) => clean($(element).find('thead th').map((__, cell) => clean($(cell).text())).get().join('|')) === 'Date|Status|Post office/Airport|Details');
32
+ if (history.length !== 1)
33
+ throw new SchemaError('Korea Post', 'Korea Post returned an invalid tracking table');
34
+ const rows = history.find('tbody > tr');
35
+ if (rows.length === 1 && rows.children('td').length === 1 && rows.children('td').attr('colspan') === '4'
36
+ && clean(rows.text()) === `Your item number ${number} is not found. Confirm your item number.`)
37
+ throw new NotFoundError('Korea Post');
38
+ if (!rows.length)
39
+ throw new IndeterminateError('Korea Post', 'Korea Post returned no parcel scans');
40
+ if (rows.length > 500)
41
+ throw new SchemaError('Korea Post');
42
+ const events = [];
43
+ const seen = new Set();
44
+ for (const row of rows.toArray().reverse()) {
45
+ const cells = $(row).children('td');
46
+ if (cells.length !== 4 || cells.filter('[colspan]').length)
47
+ throw new SchemaError('Korea Post');
48
+ const time = eventTime(clean(cells.eq(0).text(), 64));
49
+ const description = clean(cells.eq(1).text(), 500);
50
+ if (!description)
51
+ throw new SchemaError('Korea Post', 'Korea Post returned an empty scan');
52
+ const location = clean(cells.eq(2).text(), 200);
53
+ const key = JSON.stringify([time, description, location]);
54
+ if (seen.has(key))
55
+ continue;
56
+ seen.add(key);
57
+ const classified = koreaPostStatus(description);
58
+ // The fourth cell mixes routing notes with recipient names and results;
59
+ // project only the dedicated timestamp, status and facility columns.
60
+ events.push({ local_time: time, description, location, ...(classified ? { stage: classified.stage } : {}) });
61
+ }
62
+ const latest = events[0];
63
+ const classified = koreaPostStatus(latest.description);
64
+ return { status: classified?.status ?? 'unknown', ...(classified ? { current_stage: classified.stage } : {}),
65
+ last_status_text: latest.description, last_update: null, events: events.slice(0, 100) };
66
+ }
67
+ export class KoreaPostTracker {
68
+ options;
69
+ constructor(options = {}) {
70
+ this.options = options;
71
+ }
72
+ async fetch(raw, context = {}) {
73
+ const number = normalizeKoreaPostNumber(raw);
74
+ const budgetMs = context.budgetMs ?? 15_000;
75
+ if (!Number.isFinite(budgetMs) || budgetMs <= 0)
76
+ throw new TypeError('Korea Post timeout must be positive');
77
+ context.signal?.throwIfAborted();
78
+ try {
79
+ const { bytes } = await fetchBounded(ENDPOINT, { method: 'POST',
80
+ headers: { 'Content-Type': 'application/x-www-form-urlencoded', Accept: 'text/html,*/*;q=0.8' },
81
+ body: new URLSearchParams({ target_command: 'kpl.tts.tt.epost.cmd.RetrieveEmsTraceEngCmd',
82
+ JspURI: '/xtts/tt/epost/ems/EmsSearchResultEng.jsp', POST_CODE: number }).toString(),
83
+ }, { provider: 'Korea Post', timeoutMs: Math.max(1, Math.floor(budgetMs)), maxBytes: 1_000_000,
84
+ fetcher: (input, init) => (this.options.fetcher ?? fetch)(input, { ...init,
85
+ signal: AbortSignal.any([...(context.signal ? [context.signal] : []), ...(init?.signal ? [init.signal] : [])]) }),
86
+ });
87
+ context.signal?.throwIfAborted();
88
+ return parse(decodeText(bytes), number);
89
+ }
90
+ catch (error) {
91
+ if (error instanceof UpstreamHttpError && [404, 410].includes(error.status))
92
+ throw new TransportError('Korea Post', 'Korea Post tracking endpoint is unavailable', { cause: error });
93
+ throw error;
94
+ }
95
+ }
96
+ }
97
+ export const adapter = (environment) => {
98
+ const tracker = new KoreaPostTracker({ fetcher: environment.fetcher });
99
+ return { id: 'korea-post', recordsSteps: true, steps: ['direct'], track: (input, context = {}) => runSteps({ carrier: 'korea-post', budgetMs: context.budgetMs ?? 15_000,
100
+ signal: context.signal, recorder: environment.recorder }, [{ id: 'direct', run: ({ signal, remainingMs }) => tracker.fetch(input.number, { signal, budgetMs: remainingMs }) }]) };
101
+ };
@@ -0,0 +1,74 @@
1
+ {
2
+ "id": "korea-post",
3
+ "displayName": "Korea Post",
4
+ "aliases": [],
5
+ "region": {
6
+ "countries": [
7
+ "KR"
8
+ ]
9
+ },
10
+ "brand": {
11
+ "color": "#da291c"
12
+ },
13
+ "selectable": true,
14
+ "timezone": "UTC",
15
+ "tracking": {
16
+ "mode": "automatic",
17
+ "adapter": "korea-post",
18
+ "steps": [
19
+ "direct"
20
+ ],
21
+ "localClocks": true
22
+ },
23
+ "capabilities": [
24
+ "history",
25
+ "location"
26
+ ],
27
+ "portal": {
28
+ "url": "https://trace.epost.go.kr/xtts/servlet/kpl.tts.common.svl.SttSVL?target_command=kpl.tts.tt.epost.cmd.RetrieveEmsTraceEngCmd&JspURI=%2Fxtts%2Ftt%2Fepost%2Fems%2FEmsSearchResultEng.jsp&POST_CODE={trackingNumber}",
29
+ "canaryUrl": "https://trace.epost.go.kr/xtts/tt/epost/ems/ems_eng.jsp",
30
+ "shows": [
31
+ "status",
32
+ "history",
33
+ "location"
34
+ ],
35
+ "scraped": [
36
+ "status",
37
+ "history",
38
+ "location"
39
+ ],
40
+ "discarded": [],
41
+ "unavailable": []
42
+ },
43
+ "links": [
44
+ {
45
+ "domains": [
46
+ "trace.epost.go.kr"
47
+ ],
48
+ "params": [
49
+ "POST_CODE"
50
+ ]
51
+ },
52
+ {
53
+ "domains": [
54
+ "service.epost.go.kr"
55
+ ],
56
+ "params": [
57
+ "sid1"
58
+ ]
59
+ }
60
+ ],
61
+ "detection": [
62
+ {
63
+ "id": "korea-post-1",
64
+ "pattern": "^[A-Z]{2}\\d{9}KR$",
65
+ "confidence": "high",
66
+ "checksum": "s10"
67
+ },
68
+ {
69
+ "id": "korea-post-2",
70
+ "pattern": "^6\\d{12}$",
71
+ "confidence": "low"
72
+ }
73
+ ]
74
+ }
@@ -0,0 +1,54 @@
1
+ {
2
+ "carrier": "korea-post",
3
+ "records": [
4
+ {
5
+ "number": "6097542557191",
6
+ "role": "shipment",
7
+ "evidence": "public_shipment_report",
8
+ "source": {
9
+ "url": "https://kin.naver.com/qna/detail.naver?dirId=81302&docId=495290455",
10
+ "date": "2026-09-24"
11
+ },
12
+ "expect": {
13
+ "carrier": "unknown",
14
+ "confidence": "low",
15
+ "candidates": [
16
+ "la-poste",
17
+ "correos-chile",
18
+ "delhivery",
19
+ "yunda",
20
+ "korea-post"
21
+ ]
22
+ },
23
+ "note": "Publicly reported shipment number; the attribution was not independently verified. The source attributes it to Korea Post, which stays one candidate among several. Domestic parcel."
24
+ },
25
+ {
26
+ "number": "EM385783825KR",
27
+ "role": "shipment",
28
+ "evidence": "open_source_example",
29
+ "source": {
30
+ "url": "https://gist.github.com/zxp/e83a4a1b7294a5ed6207",
31
+ "date": "2015-08-29"
32
+ },
33
+ "expect": {
34
+ "carrier": "korea-post",
35
+ "confidence": "high"
36
+ },
37
+ "note": "Open-source project example, not a real shipment."
38
+ },
39
+ {
40
+ "number": "ES401809342KR",
41
+ "role": "shipment",
42
+ "evidence": "public_shipment_report",
43
+ "source": {
44
+ "url": "https://kin.naver.com/qna/detail.naver?dirId=81302&docId=495261561",
45
+ "date": "2026-09-22"
46
+ },
47
+ "expect": {
48
+ "carrier": "korea-post",
49
+ "confidence": "high"
50
+ },
51
+ "note": "Publicly reported shipment number; the attribution was not independently verified. EMS item to Japan."
52
+ }
53
+ ]
54
+ }
@@ -0,0 +1,2 @@
1
+ import type { ClassifiedStatus } from '../../core/status/index.js';
2
+ export declare function koreaPostStatus(description: string): ClassifiedStatus | undefined;
@@ -0,0 +1,19 @@
1
+ const WORDING = new Map([
2
+ ['Posting/Collection', { status: 'in_transit', stage: 'accepted' }],
3
+ ['Departure from inward office of exchange', { status: 'in_transit', stage: 'in_transit' }],
4
+ ['Arrival at Office of Exchange', { status: 'in_transit', stage: 'in_transit' }],
5
+ ['Arrival at outward office of exchange', { status: 'in_transit', stage: 'in_transit' }],
6
+ ['Ready for dispatch', { status: 'in_transit', stage: 'in_transit' }],
7
+ ['Handed over to a transport company', { status: 'in_transit', stage: 'in_transit' }],
8
+ ['Received by Air carriers', { status: 'in_transit', stage: 'in_transit' }],
9
+ ['Departure from the Airport', { status: 'in_transit', stage: 'in_transit' }],
10
+ ['Arrival at Destination Airport', { status: 'in_transit', stage: 'in_transit' }],
11
+ ['Delivered to Destination Post', { status: 'in_transit', stage: 'in_transit' }],
12
+ ['Arrival at inward office of exchange', { status: 'in_transit', stage: 'in_transit' }],
13
+ ['Ready for customs clearance', { status: 'in_transit', stage: 'customs' }],
14
+ ['Unsuccessful delivery', { status: 'exception', stage: 'failed_attempt' }],
15
+ ['Delivery complete', { status: 'delivered', stage: 'delivered' }],
16
+ ]);
17
+ export function koreaPostStatus(description) {
18
+ return WORDING.get(description);
19
+ }
@@ -0,0 +1,103 @@
1
+ {
2
+ "carrier": "korea-post",
3
+ "entries": [
4
+ {
5
+ "wording": "Posting/Collection",
6
+ "language": "en",
7
+ "stage": "accepted",
8
+ "confirmedBy": "live",
9
+ "firstSeen": "2026-09-28"
10
+ },
11
+ {
12
+ "wording": "Departure from inward office of exchange",
13
+ "language": "en",
14
+ "stage": "in_transit",
15
+ "confirmedBy": "live",
16
+ "firstSeen": "2026-09-28"
17
+ },
18
+ {
19
+ "wording": "Arrival at Office of Exchange",
20
+ "language": "en",
21
+ "stage": "in_transit",
22
+ "confirmedBy": "live",
23
+ "firstSeen": "2026-09-28"
24
+ },
25
+ {
26
+ "wording": "Arrival at outward office of exchange",
27
+ "language": "en",
28
+ "stage": "in_transit",
29
+ "confirmedBy": "live",
30
+ "firstSeen": "2026-09-28"
31
+ },
32
+ {
33
+ "wording": "Ready for dispatch",
34
+ "language": "en",
35
+ "stage": "in_transit",
36
+ "confirmedBy": "live",
37
+ "firstSeen": "2026-09-28"
38
+ },
39
+ {
40
+ "wording": "Handed over to a transport company",
41
+ "language": "en",
42
+ "stage": "in_transit",
43
+ "confirmedBy": "live",
44
+ "firstSeen": "2026-09-28"
45
+ },
46
+ {
47
+ "wording": "Received by Air carriers",
48
+ "language": "en",
49
+ "stage": "in_transit",
50
+ "confirmedBy": "live",
51
+ "firstSeen": "2026-09-28"
52
+ },
53
+ {
54
+ "wording": "Departure from the Airport",
55
+ "language": "en",
56
+ "stage": "in_transit",
57
+ "confirmedBy": "live",
58
+ "firstSeen": "2026-09-28"
59
+ },
60
+ {
61
+ "wording": "Arrival at Destination Airport",
62
+ "language": "en",
63
+ "stage": "in_transit",
64
+ "confirmedBy": "live",
65
+ "firstSeen": "2026-09-28"
66
+ },
67
+ {
68
+ "wording": "Delivered to Destination Post",
69
+ "language": "en",
70
+ "stage": "in_transit",
71
+ "confirmedBy": "live",
72
+ "firstSeen": "2026-09-28"
73
+ },
74
+ {
75
+ "wording": "Arrival at inward office of exchange",
76
+ "language": "en",
77
+ "stage": "in_transit",
78
+ "confirmedBy": "live",
79
+ "firstSeen": "2026-09-28"
80
+ },
81
+ {
82
+ "wording": "Ready for customs clearance",
83
+ "language": "en",
84
+ "stage": "customs",
85
+ "confirmedBy": "live",
86
+ "firstSeen": "2026-09-28"
87
+ },
88
+ {
89
+ "wording": "Unsuccessful delivery",
90
+ "language": "en",
91
+ "stage": "failed_attempt",
92
+ "confirmedBy": "live",
93
+ "firstSeen": "2026-09-28"
94
+ },
95
+ {
96
+ "wording": "Delivery complete",
97
+ "language": "en",
98
+ "stage": "delivered",
99
+ "confirmedBy": "live",
100
+ "firstSeen": "2026-09-28"
101
+ }
102
+ ]
103
+ }
@@ -0,0 +1,29 @@
1
+ import { type AdapterFactory } from '../../core/adapter/index.js';
2
+ import { CarrierError } from '../../core/errors/index.js';
3
+ import type { CarrierResult } from '../../core/result/index.js';
4
+ import type { StepRecorder } from '../../core/telemetry/index.js';
5
+ /**
6
+ * A provider `returnCode` that is not a success. Code 104 is a positive
7
+ * not-found; anything else only proves the feed could not answer.
8
+ */
9
+ export declare class LaPosteTrackingError extends CarrierError {
10
+ readonly code: number | null;
11
+ constructor(code: number | null);
12
+ }
13
+ export declare function normalizeLaPosteTrackingNumber(raw: string): string;
14
+ export declare function laPosteTrackingUrl(trackingNumber: string): string;
15
+ export declare function laPosteTrackingApiUrl(trackingNumber: string): string;
16
+ export declare function parseLaPosteTrackingResponse(payload: unknown, trackingNumber: string): CarrierResult;
17
+ export interface LaPosteTrackerOptions {
18
+ timeoutMs?: number;
19
+ fetcher?: typeof fetch;
20
+ recorder?: StepRecorder;
21
+ }
22
+ export declare class LaPosteTracker {
23
+ readonly timeoutMs: number;
24
+ private readonly fetcher?;
25
+ private readonly recorder?;
26
+ constructor(options?: LaPosteTrackerOptions);
27
+ fetch(trackingNumber: string): Promise<CarrierResult>;
28
+ }
29
+ export declare const adapter: AdapterFactory;
@@ -0,0 +1,241 @@
1
+ import { accepted, recognizeFromLookup } from '../../core/adapter/index.js';
2
+ import { carrierIdFromPartner } from '../../core/catalog/hints.js';
3
+ import { CarrierError, SchemaError, UpstreamHttpError, } from '../../core/errors/index.js';
4
+ import { runSteps } from '../../core/runner/index.js';
5
+ import { isoTime } from '../../core/time/index.js';
6
+ import { clean, fetchBounded, parseJsonBytes } from '../../core/transport/index.js';
7
+ import { isRecord } from '../../core/types.js';
8
+ import { eventStage, eventStatus } from './status.js';
9
+ // Protocol provenance:
10
+ // - `suivi-unifie` is the keyless feed the public tracking page calls: one
11
+ // array entry per requested number, each with a `returnCode`, a `shipment`
12
+ // and its `event` list. It covers Colissimo, tracked mail, Chronopost and
13
+ // Delivengo, which is why those carriers share this adapter.
14
+ // - The response is matched on `shipment.idShip`: a feed entry for another
15
+ // number is refused rather than projected.
16
+ // - `returnCode` 104 is the positive "unknown shipment"; any other non-zero
17
+ // code is an inconclusive provider failure.
18
+ // - Production HTTP 403s carried La Poste's "Site indisponible - Incident en
19
+ // cours" page and immediately following checks succeeded, so a 403 is
20
+ // retried up to three times inside the original deadline (see README.md).
21
+ const TRACKING_API = 'https://www.laposte.fr/ssu/sun/back/suivi-unifie';
22
+ const TRACKING_PAGE = 'https://www.laposte.fr/outils/suivre-vos-envois';
23
+ const TIMEZONE = 'Europe/Paris';
24
+ const DEFAULT_TIMEOUT_MS = 15_000;
25
+ const MAX_RESPONSE_BYTES = 2_000_000;
26
+ const MAX_EVENTS_TO_RETURN = 100;
27
+ /** The provider's "unknown shipment" return code. */
28
+ const UNKNOWN_SHIPMENT_CODE = 104;
29
+ function number(value) {
30
+ if (typeof value !== 'number' && (typeof value !== 'string' || !value.trim()))
31
+ return null;
32
+ const parsed = typeof value === 'number' ? value : Number(value.trim());
33
+ return Number.isFinite(parsed) ? parsed : null;
34
+ }
35
+ function records(value) {
36
+ return Array.isArray(value) ? value.filter(isRecord) : [];
37
+ }
38
+ function eventOrder(event) {
39
+ return number(event.order) ?? -1;
40
+ }
41
+ /**
42
+ * Event timestamps already carry their Paris offset, so the provider's own
43
+ * string is retained verbatim; only calendar-impossible values are dropped.
44
+ */
45
+ function safeDate(value) {
46
+ const raw = clean(value, 64);
47
+ if (!/^\d{4}-\d{2}-\d{2}(?:[T ][0-9:+.Z-]+)?$/i.test(raw))
48
+ return '';
49
+ return isoTime(raw, TIMEZONE) ? raw : '';
50
+ }
51
+ function expectedDate(value) {
52
+ const text = safeDate(value);
53
+ return /^\d{4}-\d{2}-\d{2}/.exec(text)?.[0] ?? null;
54
+ }
55
+ /**
56
+ * A provider `returnCode` that is not a success. Code 104 is a positive
57
+ * not-found; anything else only proves the feed could not answer.
58
+ */
59
+ export class LaPosteTrackingError extends CarrierError {
60
+ code;
61
+ constructor(code) {
62
+ super(code === UNKNOWN_SHIPMENT_CODE ? 'not_found' : 'indeterminate', 'La Poste', code === UNKNOWN_SHIPMENT_CODE
63
+ ? 'La Poste could not locate the shipment'
64
+ : 'La Poste tracking is unavailable');
65
+ this.name = 'LaPosteTrackingError';
66
+ this.code = code;
67
+ }
68
+ }
69
+ export function normalizeLaPosteTrackingNumber(raw) {
70
+ const value = raw.toLocaleUpperCase('en-US').replace(/[\s.-]/g, '');
71
+ const domestic = /^[A-Z0-9]{2}\d{11}$/.test(value);
72
+ const international = /^[A-Z]{2}\d{9}[A-Z]{2}$/.test(value);
73
+ const foreignExpress = /^\d{14}[A-Z]$/.test(value);
74
+ if (!domestic && !international && !foreignExpress) {
75
+ throw new TypeError('La Poste tracking numbers must use a supported 13- or 15-character format');
76
+ }
77
+ return value;
78
+ }
79
+ export function laPosteTrackingUrl(trackingNumber) {
80
+ const url = new URL(TRACKING_PAGE);
81
+ url.searchParams.set('code', normalizeLaPosteTrackingNumber(trackingNumber));
82
+ return url.toString();
83
+ }
84
+ export function laPosteTrackingApiUrl(trackingNumber) {
85
+ const normalized = normalizeLaPosteTrackingNumber(trackingNumber);
86
+ const url = new URL(`${TRACKING_API}/${encodeURIComponent(normalized)}`);
87
+ url.searchParams.set('lang', 'fr');
88
+ return url.toString();
89
+ }
90
+ export function parseLaPosteTrackingResponse(payload, trackingNumber) {
91
+ const requested = normalizeLaPosteTrackingNumber(trackingNumber);
92
+ if (!Array.isArray(payload) || payload.length === 0) {
93
+ throw new SchemaError('La Poste', 'La Poste returned an invalid tracking response');
94
+ }
95
+ const responses = payload.filter(isRecord);
96
+ if (responses.length === 0) {
97
+ throw new SchemaError('La Poste', 'La Poste returned an invalid tracking response');
98
+ }
99
+ const response = responses.find((candidate) => {
100
+ const shipment = isRecord(candidate.shipment) ? candidate.shipment : {};
101
+ return clean(shipment.idShip, 64).toLocaleUpperCase('en-US') === requested;
102
+ });
103
+ if (!response) {
104
+ const providerError = responses.find((candidate) => ![0, 200].includes(number(candidate.returnCode) ?? -1));
105
+ if (providerError) {
106
+ throw new LaPosteTrackingError(number(providerError.returnCode));
107
+ }
108
+ throw new SchemaError('La Poste', 'La Poste returned a different shipment');
109
+ }
110
+ const returnCode = number(response.returnCode);
111
+ if (returnCode === null || ![0, 200].includes(returnCode)) {
112
+ throw new LaPosteTrackingError(returnCode);
113
+ }
114
+ const shipment = isRecord(response.shipment) ? response.shipment : {};
115
+ const rawEvents = records(shipment.event).sort((left, right) => {
116
+ const orderDifference = eventOrder(right) - eventOrder(left);
117
+ if (orderDifference !== 0)
118
+ return orderDifference;
119
+ return safeDate(right.date).localeCompare(safeDate(left.date));
120
+ });
121
+ // Projection allowlist: nothing but status wording, time, coarse location and
122
+ // the provider's own codes leaves this function. Recipient blocks, addresses
123
+ // and proof-of-delivery fields in the payload are never read.
124
+ const events = rawEvents.slice(0, MAX_EVENTS_TO_RETURN).flatMap((event) => {
125
+ const description = clean(event.label);
126
+ const time = safeDate(event.date);
127
+ if (!description && !time)
128
+ return [];
129
+ const group = clean(event.group, 40).toLocaleUpperCase('en-US');
130
+ const code = clean(event.code, 40).toLocaleUpperCase('en-US');
131
+ return [{
132
+ time,
133
+ location: clean(event.country, 80),
134
+ description: description || 'Tracking update',
135
+ stage: eventStage(group, code, description),
136
+ ...(group || code ? { provider_code: [group, code].filter(Boolean).join('/') } : {}),
137
+ }];
138
+ });
139
+ const latestRaw = rawEvents[0] ?? {};
140
+ const latest = events[0];
141
+ const timeline = records(shipment.timeline)
142
+ .filter((step) => step.status === true)
143
+ .sort((left, right) => (number(right.id) ?? -1) - (number(left.id) ?? -1));
144
+ const currentState = isRecord(shipment.currentState) ? shipment.currentState : {};
145
+ const fallbackLabel = clean(currentState.shortLabel) || clean(timeline[0]?.shortLabel);
146
+ const latestLabel = latest?.description || fallbackLabel || clean(response.returnMessage);
147
+ const latestGroup = clean(latestRaw.group, 40);
148
+ const latestCode = clean(latestRaw.code, 40);
149
+ const context = isRecord(shipment.contextData) ? shipment.contextData : {};
150
+ const destination = clean(context.arrivalCountry, 80).toUpperCase();
151
+ const partner = isRecord(context.partner) ? context.partner : {};
152
+ const deliveryCarrier = carrierIdFromPartner(clean(partner.name, 80), clean(partner.url, 2048));
153
+ const deliveryNumber = clean(partner.reference, 64).toUpperCase();
154
+ return {
155
+ status: eventStatus(latestGroup, latestCode, latestLabel, events.length > 0),
156
+ // The status vocabulary has no pickup or customs value; without the stage
157
+ // the sync would re-read the sentence and fall back to "out for delivery".
158
+ ...(latest?.stage ? { current_stage: latest.stage } : {}),
159
+ last_status_text: latestLabel || 'Tracking information received',
160
+ last_update: latest?.time || safeDate(timeline[0]?.date) || null,
161
+ expected_delivery: shipment.isFinal === true ? null : expectedDate(shipment.estimDate),
162
+ timezone: TIMEZONE,
163
+ ...(/^[A-Z]{2}$/.test(destination) ? { destination_country: destination } : {}),
164
+ ...(deliveryCarrier ? {
165
+ delivery_carrier: deliveryCarrier,
166
+ ...(/^[A-Z0-9]{4,40}$/.test(deliveryNumber) ? { delivery_tracking_number: deliveryNumber } : {}),
167
+ } : {}),
168
+ events,
169
+ };
170
+ }
171
+ export class LaPosteTracker {
172
+ timeoutMs;
173
+ fetcher;
174
+ recorder;
175
+ constructor(options = {}) {
176
+ this.timeoutMs = options.timeoutMs ?? DEFAULT_TIMEOUT_MS;
177
+ if (!Number.isFinite(this.timeoutMs) || this.timeoutMs <= 0) {
178
+ throw new TypeError('La Poste timeout must be positive');
179
+ }
180
+ this.fetcher = options.fetcher;
181
+ this.recorder = options.recorder;
182
+ }
183
+ async fetch(trackingNumber) {
184
+ const normalized = normalizeLaPosteTrackingNumber(trackingNumber);
185
+ const deadline = performance.now() + this.timeoutMs;
186
+ const request = async (remainingMs) => {
187
+ const { bytes } = await fetchBounded(laPosteTrackingApiUrl(normalized), {
188
+ headers: {
189
+ Accept: 'application/json, text/plain, */*',
190
+ 'Accept-Language': 'fr-FR,fr;q=0.9',
191
+ Referer: laPosteTrackingUrl(normalized),
192
+ 'User-Agent': 'Mozilla/5.0 (compatible; SwissDeliveryTracker/1.0)',
193
+ },
194
+ }, {
195
+ provider: 'La Poste tracking',
196
+ timeoutMs: Math.max(1, Math.floor(remainingMs)),
197
+ maxBytes: MAX_RESPONSE_BYTES,
198
+ fetcher: this.fetcher,
199
+ });
200
+ return parseLaPosteTrackingResponse(parseJsonBytes(bytes, 'La Poste'), normalized);
201
+ };
202
+ // La Poste's edge answers single lookups with an HTTP 403 "Site indisponible
203
+ // - Incident en cours" page while another parcel, or the same one a moment
204
+ // later, is answered normally. It is a hiccup of that one request, not
205
+ // maintenance, so the page is retried like any other 403: three immediate
206
+ // retries sharing the original deadline. A real incident still fails every
207
+ // attempt within seconds and reaches the router. Do not retry other HTTP or
208
+ // parsing failures. Once the deadline is spent the retry is refused, so the
209
+ // caller still sees the provider's own rejection rather than a budget error.
210
+ const retriable = (error) => error instanceof UpstreamHttpError
211
+ && error.status === 403
212
+ && deadline - performance.now() >= 1;
213
+ const retry = {
214
+ id: 'retry',
215
+ recovers: retriable,
216
+ run: ({ remainingMs }) => request(remainingMs),
217
+ };
218
+ return await runSteps({
219
+ carrier: 'la-poste', budgetMs: this.timeoutMs, recorder: this.recorder,
220
+ }, [
221
+ { id: 'direct', run: ({ remainingMs }) => request(remainingMs) },
222
+ retry,
223
+ { ...retry },
224
+ { ...retry },
225
+ ]);
226
+ }
227
+ }
228
+ export const adapter = (environment) => {
229
+ const tracker = new LaPosteTracker({
230
+ fetcher: environment.fetcher,
231
+ recorder: environment.recorder,
232
+ });
233
+ return {
234
+ id: 'la-poste',
235
+ // One keyless request, then up to three immediate retries of the same
236
+ // request after a transient HTTP 403, inside the original deadline.
237
+ steps: ['direct', 'retry'],
238
+ track: (input) => tracker.fetch(input.number),
239
+ recognize: (number) => recognizeFromLookup(() => tracker.fetch(number), () => accepted(() => normalizeLaPosteTrackingNumber(number))),
240
+ };
241
+ };