urlpurify 1.5.0 → 1.6.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 (685) hide show
  1. package/README.md +48 -66
  2. package/dist/clean.mjs +62 -16
  3. package/dist/defaults.d.mts +10 -0
  4. package/dist/defaults.mjs +742 -25
  5. package/dist/index.d.mts +304 -5
  6. package/dist/index.mjs +337 -38
  7. package/dist/node_modules/trousse/dist/urls.mjs +65 -3
  8. package/dist/pathTarget.mjs +14 -0
  9. package/dist/unwraps/12ft.d.mts +4 -0
  10. package/dist/unwraps/12ft.mjs +9 -0
  11. package/dist/unwraps/2performant.d.mts +4 -0
  12. package/dist/unwraps/2performant.mjs +9 -0
  13. package/dist/unwraps/4pda.d.mts +4 -0
  14. package/dist/unwraps/4pda.mjs +13 -0
  15. package/dist/unwraps/a8Net.d.mts +4 -0
  16. package/dist/unwraps/a8Net.mjs +23 -0
  17. package/dist/unwraps/aboutCom.d.mts +4 -0
  18. package/dist/unwraps/aboutCom.mjs +17 -0
  19. package/dist/unwraps/acast.d.mts +4 -0
  20. package/dist/unwraps/acast.mjs +10 -0
  21. package/dist/unwraps/accesstrade.d.mts +4 -0
  22. package/dist/unwraps/accesstrade.mjs +18 -0
  23. package/dist/unwraps/aceml.mjs +6 -1
  24. package/dist/unwraps/adcell.d.mts +4 -0
  25. package/dist/unwraps/adcell.mjs +13 -0
  26. package/dist/unwraps/adfly.d.mts +4 -0
  27. package/dist/unwraps/adfly.mjs +16 -0
  28. package/dist/unwraps/adjust.mjs +25 -4
  29. package/dist/unwraps/admitad.d.mts +4 -0
  30. package/dist/unwraps/admitad.mjs +29 -0
  31. package/dist/unwraps/adrecord.d.mts +4 -0
  32. package/dist/unwraps/adrecord.mjs +9 -0
  33. package/dist/unwraps/adtraction.d.mts +4 -0
  34. package/dist/unwraps/adtraction.mjs +9 -0
  35. package/dist/unwraps/affilae.d.mts +4 -0
  36. package/dist/unwraps/affilae.mjs +8 -0
  37. package/dist/unwraps/affiliateFuture.d.mts +4 -0
  38. package/dist/unwraps/affiliateFuture.mjs +9 -0
  39. package/dist/unwraps/affiliatesOne.d.mts +4 -0
  40. package/dist/unwraps/affiliatesOne.mjs +39 -0
  41. package/dist/unwraps/aliexpress.d.mts +4 -0
  42. package/dist/unwraps/aliexpress.mjs +9 -0
  43. package/dist/unwraps/aliyun.d.mts +4 -0
  44. package/dist/unwraps/aliyun.mjs +9 -0
  45. package/dist/unwraps/allblog.d.mts +4 -0
  46. package/dist/unwraps/allblog.mjs +10 -0
  47. package/dist/unwraps/amazonAffiliate.mjs +16 -1
  48. package/dist/unwraps/amazonSes.d.mts +4 -0
  49. package/dist/unwraps/amazonSes.mjs +14 -0
  50. package/dist/unwraps/ampCache.mjs +12 -6
  51. package/dist/unwraps/anchor.d.mts +4 -0
  52. package/dist/unwraps/anchor.mjs +15 -0
  53. package/dist/unwraps/anonymTo.mjs +4 -1
  54. package/dist/unwraps/anonymouse.d.mts +4 -0
  55. package/dist/unwraps/anonymouse.mjs +12 -0
  56. package/dist/unwraps/appsflyerOnelink.d.mts +4 -0
  57. package/dist/unwraps/appsflyerOnelink.mjs +13 -0
  58. package/dist/unwraps/apptrkr.d.mts +4 -0
  59. package/dist/unwraps/apptrkr.mjs +13 -0
  60. package/dist/unwraps/archiveToday.d.mts +4 -0
  61. package/dist/unwraps/archiveToday.mjs +24 -0
  62. package/dist/unwraps/arquivo.d.mts +4 -0
  63. package/dist/unwraps/arquivo.mjs +12 -0
  64. package/dist/unwraps/arttrack.d.mts +4 -0
  65. package/dist/unwraps/arttrack.mjs +10 -0
  66. package/dist/unwraps/arxiv.d.mts +4 -0
  67. package/dist/unwraps/arxiv.mjs +9 -0
  68. package/dist/unwraps/ask.d.mts +4 -0
  69. package/dist/unwraps/ask.mjs +14 -0
  70. package/dist/unwraps/augure.d.mts +4 -0
  71. package/dist/unwraps/augure.mjs +28 -0
  72. package/dist/unwraps/ausha.d.mts +4 -0
  73. package/dist/unwraps/ausha.mjs +10 -0
  74. package/dist/unwraps/avantlink.d.mts +4 -0
  75. package/dist/unwraps/avantlink.mjs +13 -0
  76. package/dist/unwraps/awesound.d.mts +4 -0
  77. package/dist/unwraps/awesound.mjs +10 -0
  78. package/dist/unwraps/awin.mjs +10 -2
  79. package/dist/unwraps/axigen.d.mts +4 -0
  80. package/dist/unwraps/axigen.mjs +11 -0
  81. package/dist/unwraps/babyblog.d.mts +4 -0
  82. package/dist/unwraps/babyblog.mjs +9 -0
  83. package/dist/unwraps/bacLacWebArchive.d.mts +4 -0
  84. package/dist/unwraps/bacLacWebArchive.mjs +12 -0
  85. package/dist/unwraps/bale.d.mts +4 -0
  86. package/dist/unwraps/bale.mjs +9 -0
  87. package/dist/unwraps/bananatag.d.mts +4 -0
  88. package/dist/unwraps/bananatag.mjs +17 -0
  89. package/dist/unwraps/barracudaLinkProtect.d.mts +4 -0
  90. package/dist/unwraps/barracudaLinkProtect.mjs +9 -0
  91. package/dist/unwraps/big5Gate.d.mts +4 -0
  92. package/dist/unwraps/big5Gate.mjs +11 -0
  93. package/dist/unwraps/bing.mjs +19 -4
  94. package/dist/unwraps/bingAds.d.mts +4 -0
  95. package/dist/unwraps/bingAds.mjs +18 -0
  96. package/dist/unwraps/bitrix.d.mts +4 -0
  97. package/dist/unwraps/bitrix.mjs +14 -0
  98. package/dist/unwraps/bitrixBanner.d.mts +4 -0
  99. package/dist/unwraps/bitrixBanner.mjs +8 -0
  100. package/dist/unwraps/bizrate.d.mts +4 -0
  101. package/dist/unwraps/bizrate.mjs +9 -0
  102. package/dist/unwraps/blubrry.d.mts +4 -0
  103. package/dist/unwraps/blubrry.mjs +15 -0
  104. package/dist/unwraps/bolPartner.d.mts +4 -0
  105. package/dist/unwraps/bolPartner.mjs +13 -0
  106. package/dist/unwraps/bridgyFed.d.mts +4 -0
  107. package/dist/unwraps/bridgyFed.mjs +16 -0
  108. package/dist/unwraps/businessWire.d.mts +4 -0
  109. package/dist/unwraps/businessWire.mjs +9 -0
  110. package/dist/unwraps/button.d.mts +4 -0
  111. package/dist/unwraps/button.mjs +13 -0
  112. package/dist/unwraps/buyAt.d.mts +4 -0
  113. package/dist/unwraps/buyAt.mjs +13 -0
  114. package/dist/unwraps/buybox.d.mts +4 -0
  115. package/dist/unwraps/buybox.mjs +13 -0
  116. package/dist/unwraps/buzzstream.d.mts +4 -0
  117. package/dist/unwraps/buzzstream.mjs +13 -0
  118. package/dist/unwraps/bytedance.d.mts +4 -0
  119. package/dist/unwraps/bytedance.mjs +9 -0
  120. package/dist/unwraps/cake.d.mts +4 -0
  121. package/dist/unwraps/cake.mjs +11 -0
  122. package/dist/unwraps/calendly.d.mts +4 -0
  123. package/dist/unwraps/calendly.mjs +9 -0
  124. package/dist/unwraps/canva.d.mts +4 -0
  125. package/dist/unwraps/canva.mjs +9 -0
  126. package/dist/unwraps/castPlus.d.mts +4 -0
  127. package/dist/unwraps/castPlus.mjs +10 -0
  128. package/dist/unwraps/ccbill.d.mts +4 -0
  129. package/dist/unwraps/ccbill.mjs +9 -0
  130. package/dist/unwraps/chartable.d.mts +4 -0
  131. package/dist/unwraps/chartable.mjs +11 -0
  132. package/dist/unwraps/checkPointHarmony.d.mts +4 -0
  133. package/dist/unwraps/checkPointHarmony.mjs +25 -0
  134. package/dist/unwraps/chitika.d.mts +4 -0
  135. package/dist/unwraps/chitika.mjs +9 -0
  136. package/dist/unwraps/ciscoSecureWeb.d.mts +4 -0
  137. package/dist/unwraps/ciscoSecureWeb.mjs +16 -0
  138. package/dist/unwraps/cjNetwork.mjs +41 -12
  139. package/dist/unwraps/claritas.d.mts +4 -0
  140. package/dist/unwraps/claritas.mjs +11 -0
  141. package/dist/unwraps/cleverbridge.d.mts +4 -0
  142. package/dist/unwraps/cleverbridge.mjs +12 -0
  143. package/dist/unwraps/clevercomm.d.mts +4 -0
  144. package/dist/unwraps/clevercomm.mjs +9 -0
  145. package/dist/unwraps/cloudhq.d.mts +4 -0
  146. package/dist/unwraps/cloudhq.mjs +13 -0
  147. package/dist/unwraps/cloze.d.mts +4 -0
  148. package/dist/unwraps/cloze.mjs +12 -0
  149. package/dist/unwraps/cohst.d.mts +4 -0
  150. package/dist/unwraps/cohst.mjs +10 -0
  151. package/dist/unwraps/commissionFactory.d.mts +4 -0
  152. package/dist/unwraps/commissionFactory.mjs +13 -0
  153. package/dist/unwraps/communicationads.d.mts +4 -0
  154. package/dist/unwraps/communicationads.mjs +9 -0
  155. package/dist/unwraps/constantContact.d.mts +4 -0
  156. package/dist/unwraps/constantContact.mjs +9 -0
  157. package/dist/unwraps/contactMonkey.d.mts +4 -0
  158. package/dist/unwraps/contactMonkey.mjs +12 -0
  159. package/dist/unwraps/convertiser.d.mts +4 -0
  160. package/dist/unwraps/convertiser.mjs +13 -0
  161. package/dist/unwraps/csdn.mjs +1 -0
  162. package/dist/unwraps/cse360.d.mts +4 -0
  163. package/dist/unwraps/cse360.mjs +17 -0
  164. package/dist/unwraps/cuelinks.d.mts +4 -0
  165. package/dist/unwraps/cuelinks.mjs +9 -0
  166. package/dist/unwraps/dasBlog.d.mts +4 -0
  167. package/dist/unwraps/dasBlog.mjs +11 -0
  168. package/dist/unwraps/datalifeEngine.d.mts +4 -0
  169. package/dist/unwraps/datalifeEngine.mjs +14 -0
  170. package/dist/unwraps/deployer.d.mts +4 -0
  171. package/dist/unwraps/deployer.mjs +18 -0
  172. package/dist/unwraps/derefMail.d.mts +4 -0
  173. package/dist/unwraps/derefMail.mjs +61 -0
  174. package/dist/unwraps/deviantartOutgoing.mjs +3 -2
  175. package/dist/unwraps/digidip.mjs +6 -1
  176. package/dist/unwraps/digikala.d.mts +4 -0
  177. package/dist/unwraps/digikala.mjs +13 -0
  178. package/dist/unwraps/directMail.d.mts +4 -0
  179. package/dist/unwraps/directMail.mjs +17 -0
  180. package/dist/unwraps/disqus.mjs +6 -1
  181. package/dist/unwraps/dmmAffiliate.d.mts +4 -0
  182. package/dist/unwraps/dmmAffiliate.mjs +13 -0
  183. package/dist/unwraps/dognet.d.mts +4 -0
  184. package/dist/unwraps/dognet.mjs +9 -0
  185. package/dist/unwraps/douban.mjs +5 -1
  186. package/dist/unwraps/dropbox.d.mts +4 -0
  187. package/dist/unwraps/dropbox.mjs +22 -0
  188. package/dist/unwraps/dstats.d.mts +4 -0
  189. package/dist/unwraps/dstats.mjs +21 -0
  190. package/dist/unwraps/duckduckgo.mjs +1 -1
  191. package/dist/unwraps/duckduckgoAds.d.mts +4 -0
  192. package/dist/unwraps/duckduckgoAds.mjs +9 -0
  193. package/dist/unwraps/duomai.d.mts +4 -0
  194. package/dist/unwraps/duomai.mjs +9 -0
  195. package/dist/unwraps/dyn.d.mts +4 -0
  196. package/dist/unwraps/dyn.mjs +9 -0
  197. package/dist/unwraps/dzen.d.mts +4 -0
  198. package/dist/unwraps/dzen.mjs +9 -0
  199. package/dist/unwraps/eClick.d.mts +4 -0
  200. package/dist/unwraps/eClick.mjs +13 -0
  201. package/dist/unwraps/easyMarketing.d.mts +4 -0
  202. package/dist/unwraps/easyMarketing.mjs +20 -0
  203. package/dist/unwraps/ebayRover.mjs +10 -3
  204. package/dist/unwraps/ebuzzing.d.mts +4 -0
  205. package/dist/unwraps/ebuzzing.mjs +20 -0
  206. package/dist/unwraps/edgepilot.d.mts +4 -0
  207. package/dist/unwraps/edgepilot.mjs +13 -0
  208. package/dist/unwraps/effiliation.mjs +7 -2
  209. package/dist/unwraps/ehub.d.mts +4 -0
  210. package/dist/unwraps/ehub.mjs +9 -0
  211. package/dist/unwraps/elasticEmail.d.mts +4 -0
  212. package/dist/unwraps/elasticEmail.mjs +11 -0
  213. package/dist/unwraps/embedly.mjs +2 -1
  214. package/dist/unwraps/epn.d.mts +4 -0
  215. package/dist/unwraps/epn.mjs +19 -0
  216. package/dist/unwraps/esva.d.mts +4 -0
  217. package/dist/unwraps/esva.mjs +9 -0
  218. package/dist/unwraps/eulerian.d.mts +4 -0
  219. package/dist/unwraps/eulerian.mjs +12 -0
  220. package/dist/unwraps/evernote.d.mts +4 -0
  221. package/dist/unwraps/evernote.mjs +9 -0
  222. package/dist/unwraps/exciteTranslate.d.mts +4 -0
  223. package/dist/unwraps/exciteTranslate.mjs +17 -0
  224. package/dist/unwraps/expediaAffiliate.d.mts +4 -0
  225. package/dist/unwraps/expediaAffiliate.mjs +9 -0
  226. package/dist/unwraps/facebook.mjs +48 -3
  227. package/dist/unwraps/fanbridge.d.mts +4 -0
  228. package/dist/unwraps/fanbridge.mjs +9 -0
  229. package/dist/unwraps/federatedMedia.d.mts +4 -0
  230. package/dist/unwraps/federatedMedia.mjs +9 -0
  231. package/dist/unwraps/feedStatistics.d.mts +4 -0
  232. package/dist/unwraps/feedStatistics.mjs +12 -0
  233. package/dist/unwraps/feedblitz.d.mts +4 -0
  234. package/dist/unwraps/feedblitz.mjs +12 -0
  235. package/dist/unwraps/finalsite.d.mts +4 -0
  236. package/dist/unwraps/finalsite.mjs +12 -0
  237. package/dist/unwraps/firebaseDynamicLinks.mjs +15 -3
  238. package/dist/unwraps/fireeye.d.mts +4 -0
  239. package/dist/unwraps/fireeye.mjs +11 -0
  240. package/dist/unwraps/firstory.d.mts +4 -0
  241. package/dist/unwraps/firstory.mjs +21 -0
  242. package/dist/unwraps/fiveByFive.d.mts +4 -0
  243. package/dist/unwraps/fiveByFive.mjs +12 -0
  244. package/dist/unwraps/fiverr.d.mts +4 -0
  245. package/dist/unwraps/fiverr.mjs +9 -0
  246. package/dist/unwraps/flexoffers.d.mts +4 -0
  247. package/dist/unwraps/flexoffers.mjs +13 -0
  248. package/dist/unwraps/fortimail.d.mts +4 -0
  249. package/dist/unwraps/fortimail.mjs +11 -0
  250. package/dist/unwraps/ftc.d.mts +4 -0
  251. package/dist/unwraps/ftc.mjs +13 -0
  252. package/dist/unwraps/gateSc.mjs +1 -0
  253. package/dist/unwraps/georiot.mjs +7 -1
  254. package/dist/unwraps/gfnLinkProxy.d.mts +4 -0
  255. package/dist/unwraps/gfnLinkProxy.mjs +13 -0
  256. package/dist/unwraps/glueUp.d.mts +4 -0
  257. package/dist/unwraps/glueUp.mjs +16 -0
  258. package/dist/unwraps/godcaster.d.mts +4 -0
  259. package/dist/unwraps/godcaster.mjs +21 -0
  260. package/dist/unwraps/google.mjs +4 -2
  261. package/dist/unwraps/googleAds.d.mts +4 -0
  262. package/dist/unwraps/googleAds.mjs +52 -0
  263. package/dist/unwraps/googleScholar.mjs +1 -1
  264. package/dist/unwraps/googleTranslate.mjs +34 -6
  265. package/dist/unwraps/googleWebLight.d.mts +4 -0
  266. package/dist/unwraps/googleWebLight.mjs +17 -0
  267. package/dist/unwraps/groupMail.d.mts +4 -0
  268. package/dist/unwraps/groupMail.mjs +11 -0
  269. package/dist/unwraps/groupon.d.mts +4 -0
  270. package/dist/unwraps/groupon.mjs +17 -0
  271. package/dist/unwraps/gumball.d.mts +4 -0
  272. package/dist/unwraps/gumball.mjs +11 -0
  273. package/dist/unwraps/gurunavi.d.mts +4 -0
  274. package/dist/unwraps/gurunavi.mjs +9 -0
  275. package/dist/unwraps/hackerone.d.mts +4 -0
  276. package/dist/unwraps/hackerone.mjs +9 -0
  277. package/dist/unwraps/hasoffers.d.mts +4 -0
  278. package/dist/unwraps/hasoffers.mjs +11 -0
  279. package/dist/unwraps/hearthis.d.mts +4 -0
  280. package/dist/unwraps/hearthis.mjs +9 -0
  281. package/dist/unwraps/hellohq.d.mts +4 -0
  282. package/dist/unwraps/hellohq.mjs +9 -0
  283. package/dist/unwraps/hirkereso.d.mts +4 -0
  284. package/dist/unwraps/hirkereso.mjs +13 -0
  285. package/dist/unwraps/horde.d.mts +4 -0
  286. package/dist/unwraps/horde.mjs +12 -0
  287. package/dist/unwraps/hornetsecurity.d.mts +4 -0
  288. package/dist/unwraps/hornetsecurity.mjs +9 -0
  289. package/dist/unwraps/hrefLi.mjs +1 -1
  290. package/dist/unwraps/hubspotSidekick.d.mts +4 -0
  291. package/dist/unwraps/hubspotSidekick.mjs +13 -0
  292. package/dist/unwraps/icptrack.mjs +7 -3
  293. package/dist/unwraps/igafnl.d.mts +4 -0
  294. package/dist/unwraps/igafnl.mjs +9 -0
  295. package/dist/unwraps/impact.d.mts +4 -0
  296. package/dist/unwraps/impact.mjs +19 -0
  297. package/dist/unwraps/indexHu.d.mts +4 -0
  298. package/dist/unwraps/indexHu.mjs +27 -0
  299. package/dist/unwraps/infospace.d.mts +4 -0
  300. package/dist/unwraps/infospace.mjs +14 -0
  301. package/dist/unwraps/insiderAffiliate.d.mts +4 -0
  302. package/dist/unwraps/insiderAffiliate.mjs +17 -0
  303. package/dist/unwraps/instagram.mjs +1 -0
  304. package/dist/unwraps/intranetQuorum.d.mts +4 -0
  305. package/dist/unwraps/intranetQuorum.mjs +13 -0
  306. package/dist/unwraps/invisionNoExternalLinks.d.mts +4 -0
  307. package/dist/unwraps/invisionNoExternalLinks.mjs +14 -0
  308. package/dist/unwraps/involveAsia.d.mts +4 -0
  309. package/dist/unwraps/involveAsia.mjs +18 -0
  310. package/dist/unwraps/irs.d.mts +4 -0
  311. package/dist/unwraps/irs.mjs +9 -0
  312. package/dist/unwraps/jianshuGo.mjs +9 -1
  313. package/dist/unwraps/jive.d.mts +4 -0
  314. package/dist/unwraps/jive.mjs +11 -0
  315. package/dist/unwraps/juejin.mjs +2 -1
  316. package/dist/unwraps/justwatch.d.mts +4 -0
  317. package/dist/unwraps/justwatch.mjs +9 -0
  318. package/dist/unwraps/klook.d.mts +4 -0
  319. package/dist/unwraps/klook.mjs +10 -0
  320. package/dist/unwraps/lazada.d.mts +4 -0
  321. package/dist/unwraps/lazada.mjs +20 -0
  322. package/dist/unwraps/ld246.d.mts +4 -0
  323. package/dist/unwraps/ld246.mjs +14 -0
  324. package/dist/unwraps/letscast.d.mts +4 -0
  325. package/dist/unwraps/letscast.mjs +10 -0
  326. package/dist/unwraps/leverAnalytics.mjs +1 -0
  327. package/dist/unwraps/linkA.d.mts +4 -0
  328. package/dist/unwraps/linkA.mjs +18 -0
  329. package/dist/unwraps/linkconnector.d.mts +4 -0
  330. package/dist/unwraps/linkconnector.mjs +9 -0
  331. package/dist/unwraps/linkedin.d.mts +4 -0
  332. package/dist/unwraps/linkedin.mjs +12 -0
  333. package/dist/unwraps/linksynergy.mjs +23 -6
  334. package/dist/unwraps/linktrust.d.mts +4 -0
  335. package/dist/unwraps/linktrust.mjs +18 -0
  336. package/dist/unwraps/linkwise.d.mts +4 -0
  337. package/dist/unwraps/linkwise.mjs +13 -0
  338. package/dist/unwraps/livejournal.d.mts +4 -0
  339. package/dist/unwraps/livejournal.mjs +9 -0
  340. package/dist/unwraps/lnkam.d.mts +4 -0
  341. package/dist/unwraps/lnkam.mjs +9 -0
  342. package/dist/unwraps/locWebArchive.d.mts +4 -0
  343. package/dist/unwraps/locWebArchive.mjs +12 -0
  344. package/dist/unwraps/locaweb.d.mts +4 -0
  345. package/dist/unwraps/locaweb.mjs +9 -0
  346. package/dist/unwraps/logicboard.d.mts +4 -0
  347. package/dist/unwraps/logicboard.mjs +14 -0
  348. package/dist/unwraps/magellan.d.mts +4 -0
  349. package/dist/unwraps/magellan.mjs +10 -0
  350. package/dist/unwraps/magnetmail.d.mts +4 -0
  351. package/dist/unwraps/magnetmail.mjs +9 -0
  352. package/dist/unwraps/mail2easy.d.mts +4 -0
  353. package/dist/unwraps/mail2easy.mjs +12 -0
  354. package/dist/unwraps/mailRu.d.mts +4 -0
  355. package/dist/unwraps/mailRu.mjs +17 -0
  356. package/dist/unwraps/mailRuLink.d.mts +4 -0
  357. package/dist/unwraps/mailRuLink.mjs +9 -0
  358. package/dist/unwraps/mailchimp.mjs +7 -3
  359. package/dist/unwraps/mailinblack.d.mts +4 -0
  360. package/dist/unwraps/mailinblack.mjs +16 -0
  361. package/dist/unwraps/mailpanion.mjs +1 -0
  362. package/dist/unwraps/mailpgn.mjs +1 -0
  363. package/dist/unwraps/mailstat.d.mts +4 -0
  364. package/dist/unwraps/mailstat.mjs +11 -0
  365. package/dist/unwraps/mailtrack.mjs +6 -1
  366. package/dist/unwraps/mandrill.d.mts +4 -0
  367. package/dist/unwraps/mandrill.mjs +26 -0
  368. package/dist/unwraps/marketwire.d.mts +4 -0
  369. package/dist/unwraps/marketwire.mjs +9 -0
  370. package/dist/unwraps/mcas.d.mts +4 -0
  371. package/dist/unwraps/mcas.mjs +28 -0
  372. package/dist/unwraps/medium.mjs +13 -3
  373. package/dist/unwraps/megalodon.d.mts +4 -0
  374. package/dist/unwraps/megalodon.mjs +14 -0
  375. package/dist/unwraps/mimecast.mjs +6 -3
  376. package/dist/unwraps/ministryCloud.d.mts +4 -0
  377. package/dist/unwraps/ministryCloud.mjs +10 -0
  378. package/dist/unwraps/mintDownloads.d.mts +4 -0
  379. package/dist/unwraps/mintDownloads.mjs +11 -0
  380. package/dist/unwraps/mintFeeder.d.mts +4 -0
  381. package/dist/unwraps/mintFeeder.mjs +10 -0
  382. package/dist/unwraps/mohtwize.d.mts +4 -0
  383. package/dist/unwraps/mohtwize.mjs +20 -0
  384. package/dist/unwraps/moshimo.d.mts +4 -0
  385. package/dist/unwraps/moshimo.mjs +13 -0
  386. package/dist/unwraps/mozillaOutgoing.mjs +5 -1
  387. package/dist/unwraps/myNewsletterBuilder.d.mts +4 -0
  388. package/dist/unwraps/myNewsletterBuilder.mjs +9 -0
  389. package/dist/unwraps/narrativ.mjs +21 -2
  390. package/dist/unwraps/natlibNz.d.mts +4 -0
  391. package/dist/unwraps/natlibNz.mjs +12 -0
  392. package/dist/unwraps/naverOutgoing.mjs +10 -1
  393. package/dist/unwraps/ncls.d.mts +4 -0
  394. package/dist/unwraps/ncls.mjs +11 -0
  395. package/dist/unwraps/ndlWarp.d.mts +4 -0
  396. package/dist/unwraps/ndlWarp.mjs +16 -0
  397. package/dist/unwraps/netaffiliation.d.mts +4 -0
  398. package/dist/unwraps/netaffiliation.mjs +18 -0
  399. package/dist/unwraps/netcentrum.d.mts +4 -0
  400. package/dist/unwraps/netcentrum.mjs +9 -0
  401. package/dist/unwraps/newswire.d.mts +4 -0
  402. package/dist/unwraps/newswire.mjs +19 -0
  403. package/dist/unwraps/nicoMs.mjs +2 -1
  404. package/dist/unwraps/nimble.d.mts +4 -0
  405. package/dist/unwraps/nimble.mjs +13 -0
  406. package/dist/unwraps/nlaWebarchive.d.mts +4 -0
  407. package/dist/unwraps/nlaWebarchive.mjs +22 -0
  408. package/dist/unwraps/nodeseek.d.mts +4 -0
  409. package/dist/unwraps/nodeseek.mjs +9 -0
  410. package/dist/unwraps/okRu.d.mts +4 -0
  411. package/dist/unwraps/okRu.mjs +23 -0
  412. package/dist/unwraps/op3.d.mts +4 -0
  413. package/dist/unwraps/op3.mjs +10 -0
  414. package/dist/unwraps/orkut.d.mts +4 -0
  415. package/dist/unwraps/orkut.mjs +13 -0
  416. package/dist/unwraps/osnova.d.mts +4 -0
  417. package/dist/unwraps/osnova.mjs +9 -0
  418. package/dist/unwraps/outlookSafelinks.mjs +12 -2
  419. package/dist/unwraps/outlookWebAccess.d.mts +4 -0
  420. package/dist/unwraps/outlookWebAccess.mjs +12 -0
  421. package/dist/unwraps/pagefreezer.d.mts +4 -0
  422. package/dist/unwraps/pagefreezer.mjs +18 -0
  423. package/dist/unwraps/partnerAds.mjs +11 -2
  424. package/dist/unwraps/pbs.d.mts +4 -0
  425. package/dist/unwraps/pbs.mjs +10 -0
  426. package/dist/unwraps/philpapers.d.mts +4 -0
  427. package/dist/unwraps/philpapers.mjs +9 -0
  428. package/dist/unwraps/pinterest.d.mts +4 -0
  429. package/dist/unwraps/pinterest.mjs +17 -0
  430. package/dist/unwraps/pipedrive.d.mts +4 -0
  431. package/dist/unwraps/pipedrive.mjs +13 -0
  432. package/dist/unwraps/podcorn.d.mts +4 -0
  433. package/dist/unwraps/podcorn.mjs +10 -0
  434. package/dist/unwraps/podder.d.mts +4 -0
  435. package/dist/unwraps/podder.mjs +10 -0
  436. package/dist/unwraps/podkite.d.mts +4 -0
  437. package/dist/unwraps/podkite.mjs +12 -0
  438. package/dist/unwraps/podroll.d.mts +4 -0
  439. package/dist/unwraps/podroll.mjs +10 -0
  440. package/dist/unwraps/podscribe.d.mts +4 -0
  441. package/dist/unwraps/podscribe.mjs +10 -0
  442. package/dist/unwraps/podsights.d.mts +4 -0
  443. package/dist/unwraps/podsights.mjs +10 -0
  444. package/dist/unwraps/podtrac.d.mts +4 -0
  445. package/dist/unwraps/podtrac.mjs +21 -0
  446. package/dist/unwraps/podup.d.mts +4 -0
  447. package/dist/unwraps/podup.mjs +11 -0
  448. package/dist/unwraps/postAffiliatePro.d.mts +4 -0
  449. package/dist/unwraps/postAffiliatePro.mjs +13 -0
  450. package/dist/unwraps/postmark.mjs +5 -3
  451. package/dist/unwraps/prNewswire.d.mts +4 -0
  452. package/dist/unwraps/prNewswire.mjs +13 -0
  453. package/dist/unwraps/prezly.d.mts +4 -0
  454. package/dist/unwraps/prezly.mjs +17 -0
  455. package/dist/unwraps/priceGrabber.d.mts +4 -0
  456. package/dist/unwraps/priceGrabber.mjs +9 -0
  457. package/dist/unwraps/promoJukebox.d.mts +4 -0
  458. package/dist/unwraps/promoJukebox.mjs +9 -0
  459. package/dist/unwraps/proofpointIsolation.d.mts +4 -0
  460. package/dist/unwraps/proofpointIsolation.mjs +9 -0
  461. package/dist/unwraps/prweb.d.mts +4 -0
  462. package/dist/unwraps/prweb.mjs +16 -0
  463. package/dist/unwraps/qualityClick.d.mts +4 -0
  464. package/dist/unwraps/qualityClick.mjs +13 -0
  465. package/dist/unwraps/rakutenAffiliate.d.mts +4 -0
  466. package/dist/unwraps/rakutenAffiliate.mjs +29 -0
  467. package/dist/unwraps/ramblerMail.d.mts +4 -0
  468. package/dist/unwraps/ramblerMail.mjs +9 -0
  469. package/dist/unwraps/recruitics.mjs +1 -0
  470. package/dist/unwraps/redditOut.mjs +6 -1
  471. package/dist/unwraps/rediffmail.d.mts +4 -0
  472. package/dist/unwraps/rediffmail.mjs +9 -0
  473. package/dist/unwraps/redirectingat.mjs +6 -1
  474. package/dist/unwraps/researchgate.d.mts +4 -0
  475. package/dist/unwraps/researchgate.mjs +23 -0
  476. package/dist/unwraps/reverbnation.d.mts +4 -0
  477. package/dist/unwraps/reverbnation.mjs +17 -0
  478. package/dist/unwraps/reviveAdserver.d.mts +4 -0
  479. package/dist/unwraps/reviveAdserver.mjs +29 -0
  480. package/dist/unwraps/salesdoubler.d.mts +4 -0
  481. package/dist/unwraps/salesdoubler.mjs +13 -0
  482. package/dist/unwraps/salesflare.d.mts +4 -0
  483. package/dist/unwraps/salesflare.mjs +9 -0
  484. package/dist/unwraps/salesforceiq.d.mts +4 -0
  485. package/dist/unwraps/salesforceiq.mjs +9 -0
  486. package/dist/unwraps/saleshandy.d.mts +4 -0
  487. package/dist/unwraps/saleshandy.mjs +13 -0
  488. package/dist/unwraps/salsa.d.mts +4 -0
  489. package/dist/unwraps/salsa.mjs +12 -0
  490. package/dist/unwraps/sapHelp.d.mts +4 -0
  491. package/dist/unwraps/sapHelp.mjs +13 -0
  492. package/dist/unwraps/sbsAd.d.mts +4 -0
  493. package/dist/unwraps/sbsAd.mjs +9 -0
  494. package/dist/unwraps/segmentfault.mjs +1 -0
  495. package/dist/unwraps/serendipity.d.mts +4 -0
  496. package/dist/unwraps/serendipity.mjs +13 -0
  497. package/dist/unwraps/shareasale.mjs +1 -1
  498. package/dist/unwraps/shareit.d.mts +4 -0
  499. package/dist/unwraps/shareit.mjs +17 -0
  500. package/dist/unwraps/skimlinks.mjs +6 -1
  501. package/dist/unwraps/skyrock.d.mts +4 -0
  502. package/dist/unwraps/skyrock.mjs +9 -0
  503. package/dist/unwraps/slickdeals.d.mts +4 -0
  504. package/dist/unwraps/slickdeals.mjs +9 -0
  505. package/dist/unwraps/smartAdserver.d.mts +4 -0
  506. package/dist/unwraps/smartAdserver.mjs +9 -0
  507. package/dist/unwraps/smartredirect.mjs +12 -2
  508. package/dist/unwraps/smry.d.mts +4 -0
  509. package/dist/unwraps/smry.mjs +9 -0
  510. package/dist/unwraps/sophos.d.mts +4 -0
  511. package/dist/unwraps/sophos.mjs +16 -0
  512. package/dist/unwraps/soundOn.d.mts +4 -0
  513. package/dist/unwraps/soundOn.mjs +10 -0
  514. package/dist/unwraps/soundcloud.d.mts +4 -0
  515. package/dist/unwraps/soundcloud.mjs +9 -0
  516. package/dist/unwraps/soundstack.d.mts +4 -0
  517. package/dist/unwraps/soundstack.mjs +10 -0
  518. package/dist/unwraps/squarespaceEmail.d.mts +4 -0
  519. package/dist/unwraps/squarespaceEmail.mjs +9 -0
  520. package/dist/unwraps/sspai.mjs +1 -1
  521. package/dist/unwraps/stay22.d.mts +4 -0
  522. package/dist/unwraps/stay22.mjs +11 -0
  523. package/dist/unwraps/steamLinkfilter.mjs +1 -1
  524. package/dist/unwraps/storify.d.mts +4 -0
  525. package/dist/unwraps/storify.mjs +9 -0
  526. package/dist/unwraps/streak.d.mts +4 -0
  527. package/dist/unwraps/streak.mjs +15 -0
  528. package/dist/unwraps/streamsend.d.mts +4 -0
  529. package/dist/unwraps/streamsend.mjs +13 -0
  530. package/dist/unwraps/stumbleupon.d.mts +4 -0
  531. package/dist/unwraps/stumbleupon.mjs +19 -0
  532. package/dist/unwraps/subscribeRu.d.mts +4 -0
  533. package/dist/unwraps/subscribeRu.mjs +11 -0
  534. package/dist/unwraps/substack.d.mts +4 -0
  535. package/dist/unwraps/substack.mjs +15 -0
  536. package/dist/unwraps/surly.d.mts +4 -0
  537. package/dist/unwraps/surly.mjs +19 -0
  538. package/dist/unwraps/surugaya.d.mts +4 -0
  539. package/dist/unwraps/surugaya.mjs +9 -0
  540. package/dist/unwraps/swap.d.mts +4 -0
  541. package/dist/unwraps/swap.mjs +17 -0
  542. package/dist/unwraps/symantecClicktime.d.mts +4 -0
  543. package/dist/unwraps/symantecClicktime.mjs +13 -0
  544. package/dist/unwraps/symplicity.d.mts +4 -0
  545. package/dist/unwraps/symplicity.mjs +16 -0
  546. package/dist/unwraps/targetCircle.d.mts +4 -0
  547. package/dist/unwraps/targetCircle.mjs +13 -0
  548. package/dist/unwraps/teacup.d.mts +4 -0
  549. package/dist/unwraps/teacup.mjs +14 -0
  550. package/dist/unwraps/telegramIv.mjs +1 -1
  551. package/dist/unwraps/theRegister.d.mts +4 -0
  552. package/dist/unwraps/theRegister.mjs +10 -0
  553. package/dist/unwraps/threads.mjs +1 -0
  554. package/dist/unwraps/tiktok.d.mts +4 -0
  555. package/dist/unwraps/tiktok.mjs +9 -0
  556. package/dist/unwraps/titanhqLinklock.d.mts +4 -0
  557. package/dist/unwraps/titanhqLinklock.mjs +9 -0
  558. package/dist/unwraps/topsec.d.mts +4 -0
  559. package/dist/unwraps/topsec.mjs +9 -0
  560. package/dist/unwraps/toucharcade.d.mts +4 -0
  561. package/dist/unwraps/toucharcade.mjs +12 -0
  562. package/dist/unwraps/tracdelight.d.mts +4 -0
  563. package/dist/unwraps/tracdelight.mjs +18 -0
  564. package/dist/unwraps/tradedoubler.mjs +6 -1
  565. package/dist/unwraps/tradetracker.d.mts +4 -0
  566. package/dist/unwraps/tradetracker.mjs +9 -0
  567. package/dist/unwraps/travelpayouts.d.mts +4 -0
  568. package/dist/unwraps/travelpayouts.mjs +17 -0
  569. package/dist/unwraps/trendMicro.d.mts +4 -0
  570. package/dist/unwraps/trendMicro.mjs +17 -0
  571. package/dist/unwraps/triplelift.d.mts +4 -0
  572. package/dist/unwraps/triplelift.mjs +9 -0
  573. package/dist/unwraps/trustwaveScanmail.d.mts +4 -0
  574. package/dist/unwraps/trustwaveScanmail.mjs +9 -0
  575. package/dist/unwraps/trxHub.d.mts +4 -0
  576. package/dist/unwraps/trxHub.mjs +13 -0
  577. package/dist/unwraps/twitterRedirect.d.mts +4 -0
  578. package/dist/unwraps/twitterRedirect.mjs +9 -0
  579. package/dist/unwraps/twoCheckout.d.mts +4 -0
  580. package/dist/unwraps/twoCheckout.mjs +12 -0
  581. package/dist/unwraps/uinterbox.d.mts +4 -0
  582. package/dist/unwraps/uinterbox.mjs +9 -0
  583. package/dist/unwraps/ukWebArchive.d.mts +4 -0
  584. package/dist/unwraps/ukWebArchive.mjs +12 -0
  585. package/dist/unwraps/ukgwa.d.mts +4 -0
  586. package/dist/unwraps/ukgwa.mjs +14 -0
  587. package/dist/unwraps/unescoWebArchive.d.mts +4 -0
  588. package/dist/unwraps/unescoWebArchive.mjs +12 -0
  589. package/dist/unwraps/unhcrWebArchive.d.mts +4 -0
  590. package/dist/unwraps/unhcrWebArchive.mjs +12 -0
  591. package/dist/unwraps/unisender.d.mts +4 -0
  592. package/dist/unwraps/unisender.mjs +33 -0
  593. package/dist/unwraps/upAudio.d.mts +4 -0
  594. package/dist/unwraps/upAudio.mjs +10 -0
  595. package/dist/unwraps/vadeSecure.d.mts +4 -0
  596. package/dist/unwraps/vadeSecure.mjs +22 -0
  597. package/dist/unwraps/valuePress.d.mts +4 -0
  598. package/dist/unwraps/valuePress.mjs +19 -0
  599. package/dist/unwraps/valuecommerce.mjs +15 -1
  600. package/dist/unwraps/vanilla.d.mts +4 -0
  601. package/dist/unwraps/vanilla.mjs +12 -0
  602. package/dist/unwraps/vbulletin.d.mts +4 -0
  603. package/dist/unwraps/vbulletin.mjs +12 -0
  604. package/dist/unwraps/vefsafn.d.mts +4 -0
  605. package/dist/unwraps/vefsafn.mjs +14 -0
  606. package/dist/unwraps/vgWort.d.mts +4 -0
  607. package/dist/unwraps/vgWort.mjs +14 -0
  608. package/dist/unwraps/viglink.mjs +15 -2
  609. package/dist/unwraps/virgool.d.mts +4 -0
  610. package/dist/unwraps/virgool.mjs +9 -0
  611. package/dist/unwraps/visibli.d.mts +4 -0
  612. package/dist/unwraps/visibli.mjs +17 -0
  613. package/dist/unwraps/vkAway.mjs +8 -1
  614. package/dist/unwraps/vocus.d.mts +4 -0
  615. package/dist/unwraps/vocus.mjs +15 -0
  616. package/dist/unwraps/voxnest.d.mts +4 -0
  617. package/dist/unwraps/voxnest.mjs +10 -0
  618. package/dist/unwraps/vpixl.d.mts +4 -0
  619. package/dist/unwraps/vpixl.mjs +10 -0
  620. package/dist/unwraps/vuture.d.mts +4 -0
  621. package/dist/unwraps/vuture.mjs +11 -0
  622. package/dist/unwraps/webArchive.mjs +32 -6
  623. package/dist/unwraps/webcitation.d.mts +4 -0
  624. package/dist/unwraps/webcitation.mjs +13 -0
  625. package/dist/unwraps/webgains.d.mts +4 -0
  626. package/dist/unwraps/webgains.mjs +13 -0
  627. package/dist/unwraps/webharvest.d.mts +4 -0
  628. package/dist/unwraps/webharvest.mjs +12 -0
  629. package/dist/unwraps/wikiwix.d.mts +4 -0
  630. package/dist/unwraps/wikiwix.mjs +17 -0
  631. package/dist/unwraps/wikizero.d.mts +4 -0
  632. package/dist/unwraps/wikizero.mjs +22 -0
  633. package/dist/unwraps/wordpressEmail.d.mts +4 -0
  634. package/dist/unwraps/wordpressEmail.mjs +9 -0
  635. package/dist/unwraps/wordpressGo2.d.mts +4 -0
  636. package/dist/unwraps/wordpressGo2.mjs +9 -0
  637. package/dist/unwraps/worldNomads.d.mts +4 -0
  638. package/dist/unwraps/worldNomads.mjs +9 -0
  639. package/dist/unwraps/wpPoczta.d.mts +4 -0
  640. package/dist/unwraps/wpPoczta.mjs +16 -0
  641. package/dist/unwraps/xengentr.d.mts +4 -0
  642. package/dist/unwraps/xengentr.mjs +12 -0
  643. package/dist/unwraps/xiaoyuzhou.d.mts +4 -0
  644. package/dist/unwraps/xiaoyuzhou.mjs +10 -0
  645. package/dist/unwraps/ximalaya.d.mts +4 -0
  646. package/dist/unwraps/ximalaya.mjs +18 -0
  647. package/dist/unwraps/yahooJapan.d.mts +4 -0
  648. package/dist/unwraps/yahooJapan.mjs +15 -0
  649. package/dist/unwraps/yahooJapanAmpViewer.d.mts +4 -0
  650. package/dist/unwraps/yahooJapanAmpViewer.mjs +20 -0
  651. package/dist/unwraps/yahooSearch.mjs +11 -4
  652. package/dist/unwraps/yamm.d.mts +4 -0
  653. package/dist/unwraps/yamm.mjs +9 -0
  654. package/dist/unwraps/yandexMail.d.mts +4 -0
  655. package/dist/unwraps/yandexMail.mjs +14 -0
  656. package/dist/unwraps/yandexTurbo.mjs +20 -1
  657. package/dist/unwraps/yelp.d.mts +4 -0
  658. package/dist/unwraps/yelp.mjs +13 -0
  659. package/dist/unwraps/yesware.d.mts +4 -0
  660. package/dist/unwraps/yesware.mjs +19 -0
  661. package/dist/unwraps/yourMembership.d.mts +4 -0
  662. package/dist/unwraps/yourMembership.mjs +13 -0
  663. package/dist/unwraps/youtube.mjs +1 -1
  664. package/dist/unwraps/zanox.d.mts +4 -0
  665. package/dist/unwraps/zanox.mjs +17 -0
  666. package/dist/unwraps/zayads.d.mts +4 -0
  667. package/dist/unwraps/zayads.mjs +10 -0
  668. package/dist/unwraps/zemanta.d.mts +4 -0
  669. package/dist/unwraps/zemanta.mjs +9 -0
  670. package/dist/unwraps/zencastr.d.mts +4 -0
  671. package/dist/unwraps/zencastr.mjs +10 -0
  672. package/dist/unwraps/zhihu.mjs +1 -0
  673. package/dist/unwraps/zix.d.mts +4 -0
  674. package/dist/unwraps/zix.mjs +13 -0
  675. package/dist/unwraps/zscalerIsolation.d.mts +4 -0
  676. package/dist/unwraps/zscalerIsolation.mjs +13 -0
  677. package/dist/utils.d.mts +6 -1
  678. package/dist/utils.mjs +39 -4
  679. package/package.json +1 -1
  680. package/dist/unwraps/idealoPartner.d.mts +0 -4
  681. package/dist/unwraps/idealoPartner.mjs +0 -8
  682. package/dist/unwraps/pxf.d.mts +0 -4
  683. package/dist/unwraps/pxf.mjs +0 -8
  684. package/dist/unwraps/sjv.d.mts +0 -4
  685. package/dist/unwraps/sjv.mjs +0 -8
package/README.md CHANGED
@@ -6,7 +6,7 @@
6
6
 
7
7
  Unwrap redirect, affiliate, and tracking wrapper URLs and strip tracking parameters. Turn noisy links into clean, direct URLs.
8
8
 
9
- URLs collected from feeds, emails, and social platforms rarely point straight at their destination: they pass through search-engine redirects, email security gateways, affiliate networks, and AMP caches, and carry analytics parameters that bloat the link and leak data. urlpurify ships 70+ unwrappers for known wrapper services and a list of 150+ known tracking parameters, plus a composite `cleanUrl()` that applies both. It has zero dependencies and runs in any modern JavaScript runtime, including browsers.
9
+ Links from feeds, emails and social platforms rarely point straight at their destination. They pass through search redirects, link shims, email gateways and affiliate networks, and pick up tracking parameters on the way, the link decoration that follows a reader from site to site. urlpurify unwraps 380+ known wrappers and strips 170+ known tracking parameters plus families like `utm_*`. It has no dependencies and runs in any modern JavaScript runtime, browsers included.
10
10
 
11
11
  ## Installation
12
12
 
@@ -14,113 +14,95 @@ URLs collected from feeds, emails, and social platforms rarely point straight at
14
14
  npm install urlpurify
15
15
  ```
16
16
 
17
- ## Quick Start
17
+ ## Quick start
18
18
 
19
19
  ```typescript
20
20
  import { cleanUrl } from 'urlpurify'
21
21
 
22
- cleanUrl('https://www.google.com/url?q=https%3A%2F%2Fexample.com%2Fpost%3Futm_source%3Dnewsletter')
23
- // => 'https://example.com/post'
22
+ const url = 'https://www.google.com/url?q=https%3A%2F%2Fexample.com%2Fpost%3Futm_source%3Dnewsletter'
23
+
24
+ cleanUrl(url) // => 'https://example.com/post'
24
25
  ```
25
26
 
26
27
  ## API
27
28
 
28
29
  ### `cleanUrl(url, options?)`
29
30
 
30
- Unwraps redirect wrappers (repeatedly, since wrappers can nest), then strips tracking parameters. When the input cannot be parsed as a URL or nothing applies, the input string is returned unchanged, so the result is always safe to display.
31
+ Unwraps wrappers, repeatedly since they nest, then strips tracking parameters. The result is serialized per the URL Standard, and input that can't be parsed comes back unchanged, so the result is always safe to display.
31
32
 
32
33
  ```typescript
33
- import { cleanUrl, defaultUnwrappers, unwrapWebArchive } from 'urlpurify'
34
+ import { cleanUrl, defaultTrackingParams, defaultUnwrappers, unwrapWebArchive } from 'urlpurify'
34
35
 
35
- const cleaned = cleanUrl(url, {
36
- // Unwrappers to apply, first match wins per pass (omit to use defaults).
36
+ cleanUrl(url, {
37
+ // First match wins per pass.
37
38
  unwrappers: [...defaultUnwrappers, unwrapWebArchive],
38
- // Param names (matched case-insensitively) or anchored regexes tested against the
39
- // lowercased name (omit to use defaults).
40
- trackingParams: ['fbclid', /^utm_[a-z0-9_-]+$/],
41
- // Maximum number of unwrap passes for nested wrappers. Defaults to 3.
42
- maxUnwrapDepth: 3,
39
+ // Names, or regexes tested on the lowercased name.
40
+ trackingParams: [...defaultTrackingParams, 'newsletter_id', /^cmp_[a-z0-9_]+$/],
41
+ // The default.
42
+ maxUnwrapDepth: 6,
43
43
  })
44
44
  ```
45
45
 
46
+ An unwrapped target that isn't a usable URL is ignored, and the wrapper is kept.
47
+
46
48
  ### `unwrapUrl(url, unwrappers?)`
47
49
 
48
- Applies the unwrappers in order (one pass) and returns the first extracted target, or `undefined` when none match or the input cannot be parsed.
50
+ Runs one pass of the unwrappers and returns the first target, or `undefined`.
49
51
 
50
52
  ### `stripTrackingParams(url, trackingParams?)`
51
53
 
52
- Removes matching query parameters and returns the cleaned URL. The input is returned unchanged when nothing matches or it cannot be parsed.
54
+ Removes tracking parameters and returns the serialized URL. Both this and `cleanUrl` apply three rules on top of the list:
53
55
 
54
- Both `cleanUrl` and `stripTrackingParams` also drop a `ref` parameter when its value is the URL's own host (Ghost's self-referral `?ref=example.com` on `example.com`), regardless of the tracking list passed. With any other value `ref` is left alone, since it is often a real referral target.
56
+ - `ref` is dropped when it names the URL's own host, as in Ghost's `?ref=example.com`, and kept otherwise.
57
+ - A query with a signature (`sig`, `signature`, `X-Amz-Signature` or `X-Goog-Signature`) stays whole, since dropping anything breaks the signature.
58
+ - `ts` stays on Alibaba DirectMail click URLs, which fail without it.
55
59
 
56
- A tracking list is compiled the first time it's used, and later calls with the same array reuse that result. To change the list, pass a new array. Entries pushed onto an array that's already been used are ignored.
60
+ A tracking list is compiled on first use and cached per array. To change it, pass a new array.
57
61
 
58
62
  ### `createParamExtractor(config)`
59
63
 
60
- Builds an unwrapper for the common case where the target URL sits in a query parameter:
64
+ Builds an unwrapper for a target that sits in a query parameter:
61
65
 
62
66
  ```typescript
63
67
  import { cleanUrl, createParamExtractor, defaultUnwrappers } from 'urlpurify'
64
68
 
65
69
  const unwrapExample = createParamExtractor({
66
- hosts: 'go.example.com', // Also accepts an array of hosts or a regex.
70
+ // The domain and every subdomain. Use `hosts` for exact hosts or a regex.
71
+ domains: 'example.com',
72
+ path: '/out',
67
73
  params: ['target'],
68
74
  })
69
75
 
70
76
  cleanUrl(url, { unwrappers: [...defaultUnwrappers, unwrapExample] })
71
77
  ```
72
78
 
73
- For wrappers that encode the target (base64 path segments, custom escaping), write a plain function of type `UrlUnwrapper`: it receives a `URL` and returns the target string or `undefined`.
79
+ A value still encoded after one decode, starting with `http%3A` or `https%3A`, is decoded once more. For any other shape, write a plain `UrlUnwrapper`: a function that takes a `URL` and returns the target or `undefined`.
74
80
 
75
- ### Defaults
81
+ ### Tracking parameters
76
82
 
77
- `defaultTrackingParams` is the combined default list for `cleanUrl` and `stripTrackingParams`: literal names plus family regexes like `/^utm_[a-z0-9_-]+$/` that cover vendor namespaces where new variants keep appearing. Its parts are exported separately as `trackingParamsLiterals` (strings only, for consumers that need a plain string list) and `trackingParamsPatterns`. `defaultUnwrappers` is exported alongside. `defaultUnwrappers` enables a conservative subset of the catalog; everything else is exported individually for explicit opt-in.
83
+ `defaultTrackingParams` holds literal names plus regexes for vendor families like `utm_*`. The two halves are also exported as `trackingParamsLiterals` and `trackingParamsPatterns`.
78
84
 
79
- **On by default:** redirects that only track the click — search-engine redirects and platform shims. Unwrapping them costs the destination nothing.
85
+ ## Unwrappers
80
86
 
81
- **Off by default:** affiliate and referral wrappers (`unwrapSkimlinks`, `unwrapAwin`, `unwrapShareasale`, `unwrapAmazonAffiliate`, `unwrapViglink`, and the rest). The reader lands on the same page either way — unwrapping only removes the writer's commission, which for a small blog is the money paying for the work. Opt in explicitly if you want them.
87
+ There are more than 380 unwrappers, each in its own file in [src/unwraps](src/unwraps), with a comment naming the service and the URL shape it handles. Each is exported on its own and belongs to one category. The categories split by what unwrapping takes away from someone, which is what decides whether you want it:
82
88
 
83
- Prevalence is not the test: affiliate wrappers are more common than tracking shims.
89
+ | Category | Export | Unwrapping removes | Default |
90
+ | --- | --- | --- | :---: |
91
+ | Search clicks | `searchClickUnwrappers` | The search engine's or aggregator's click logging | ☑️ |
92
+ | Link shims | `linkShimUnwrappers` | Nothing, or a platform's click count or a site click counter | ☑️ |
93
+ | Press releases | `pressReleaseUnwrappers` | The wire's click stats | ☑️ |
94
+ | Sign-in shims | `signInShimUnwrappers` | Nothing, but the shim's page needs a sign-in | |
95
+ | Security gateways | `securityGatewayUnwrappers` | The gateway's click-time check of the target | |
96
+ | Email tracking | `emailTrackingUnwrappers` | The sender's click stats | |
97
+ | Affiliate links | `affiliateUnwrappers` | The publisher's commission | |
98
+ | Advertising | `advertisingUnwrappers` | Ad click and app install attribution | |
99
+ | Download measurement | `downloadMeasurementUnwrappers` | A podcast measurement prefix's download counts, or a site's download or click counts | |
100
+ | Archives and proxies | `archiveProxyUnwrappers` | The archived or translated copy: you get the live page | |
84
101
 
85
- ## Unwrappers
102
+ `defaultUnwrappers` combines the first three. The rest cost somebody something or change the page: an affiliate link may pay for a small blog, and an archive link points at a copy on purpose. To turn more on, spread them next to the defaults:
86
103
 
87
- Enabled by default:
88
-
89
- | Unwrapper | Description |
90
- | --- | --- |
91
- | `unwrapBing` | Bing search-result redirect (www.bing.com/ck/a?u=a1\<base64url\>) |
92
- | `unwrapAnonymTo` | anonym.to referrer anonymizer (anonym.to/?\<target\>) |
93
- | `unwrapBlueskyRedirect` | Bluesky outbound link redirect (go.bsky.app/redirect?u=\<target\>) |
94
- | `unwrapCsdn` | CSDN external link redirect (link.csdn.net/?target=\<target\>) |
95
- | `unwrapDeviantartOutgoing` | DeviantArt outbound link shim (deviantart.com/\<user\>/outgoing?\<target\>) |
96
- | `unwrapDisqus` | Disqus outbound link redirect (disq.us/?url=\<target\>) |
97
- | `unwrapDouban` | Douban external link redirect (www.douban.com/link2/?url=\<target\>) |
98
- | `unwrapFacebookShim` | Meta link shim (l.facebook.com / l.messenger.com /l.php?u=\<target\>) |
99
- | `unwrapFlipboard` | Flipboard outbound redirect (flipboard.com/redirect?url=\<target\>) |
100
- | `unwrapGitee` | Gitee external link redirect (gitee.com/link?target=\<target\>) |
101
- | `unwrapGoogle` | Google redirect (google.\<TLD\>/url?url=\<target\> or ?q=\<target\>) |
102
- | `unwrapGoogleAmpViewer` | Google AMP viewer (www.google.\<TLD\>/amp/s/\<host\>/\<path\>) |
103
- | `unwrapGoogleNews` | Google News legacy redirect (news.google.\<TLD\>/news/url?url=\<target\>) |
104
- | `unwrapGoogleNewsModern` | Google News modern article URLs (news.google.com/articles/\<base64\>) |
105
- | `unwrapGoogleScholar` | Google Scholar search-result redirect (scholar.google.\<TLD\>/scholar_url?url=\<target\>) |
106
- | `unwrapHashnode` | Hashnode outbound redirect (hashnode.com/util/redirect?url=\<target\>) |
107
- | `unwrapHrefLi` | href.li referrer stripper (href.li/?\<target\>), used by Tumblr |
108
- | `unwrapInstagramShim` | Instagram outbound link shim (l.instagram.com with ?u=\<target\>) |
109
- | `unwrapJianshuGo` | Jianshu external link redirect (links.jianshu.com/go?to=\<target\>) |
110
- | `unwrapJuejin` | Juejin external link redirect (link.juejin.cn/?target=\<target\>) |
111
- | `unwrapMedium` | Medium outbound link redirect (medium.com/r/?url=\<target\>) |
112
- | `unwrapMozillaOutgoing` | Mozilla outgoing-link redirector (outgoing.prod.mozaws.net/v1/\<hash\>/\<target\>) |
113
- | `unwrapPocket` | Pocket redirect (getpocket.com/redirect?url=\<target\>) |
114
- | `unwrapNaverOutgoing` | Naver outbound link redirect (cc.loginfra.com/...?u=\<target\>) |
115
- | `unwrapRedditOut` | Reddit outbound click tracker (out.reddit.com/?url=\<target\>) |
116
- | `unwrapSegmentfault` | Segmentfault external link redirect (link.segmentfault.com/?enc=\<base64\>) |
117
- | `unwrapSspai` | Sspai external link redirect (sspai.com/link?target=\<target\>) |
118
- | `unwrapSteamLinkfilter` | Steam outbound link filter (steamcommunity.com/linkfilter/?url=\<target\>) |
119
- | `unwrapThreadsShim` | Threads outbound link shim (l.threads.com / l.threads.net with ?u=\<target\>) |
120
- | `unwrapTumblr` | Tumblr outbound redirect (t.umblr.com/redirect?z=\<target\>) |
121
- | `unwrapVkAway` | VK away redirect (vk.com/away.php?to=\<target\>) |
122
- | `unwrapYahooSearch` | Yahoo Search redirect (r.search.yahoo.com/.../RU=\<target\>/RK=...) |
123
- | `unwrapYouTube` | YouTube external redirect (www.youtube.com/redirect?q=\<target\>) |
124
- | `unwrapZhihu` | Zhihu external redirect (link.zhihu.com/?target=\<target\>) |
125
-
126
- Many more are available for explicit opt-in: email security gateways (Outlook SafeLinks, Proofpoint, Mimecast), affiliate networks (Awin, Skimlinks, Commission Junction), CJK platforms, AMP caches, and others. See [src/unwraps](src/unwraps) for the full catalog, each documented in its source file.
104
+ ```typescript
105
+ import { affiliateUnwrappers, cleanUrl, defaultUnwrappers } from 'urlpurify'
106
+
107
+ cleanUrl(url, { unwrappers: [...defaultUnwrappers, ...affiliateUnwrappers] })
108
+ ```
package/dist/clean.mjs CHANGED
@@ -1,6 +1,14 @@
1
- import { isHttpUrl, parseUrl, stripWww } from "./node_modules/trousse/dist/urls.mjs";
1
+ import { fixMalformedProtocol, isHttpUrl, isIpAddress, parseUrl, stripWww } from "./node_modules/trousse/dist/urls.mjs";
2
2
  import { defaultTrackingParams, defaultUnwrappers } from "./defaults.mjs";
3
3
  //#region src/clean.ts
4
+ const replacementCharacter = "�";
5
+ const refDelimitersRegex = /[\s/?#\\:@]/;
6
+ const signatureParams = [
7
+ "sig",
8
+ "signature",
9
+ "x-amz-signature",
10
+ "x-goog-signature"
11
+ ];
4
12
  const trackingMatcherCache = /* @__PURE__ */ new WeakMap();
5
13
  const getTrackingMatcher = (params) => {
6
14
  let cached = trackingMatcherCache.get(params);
@@ -18,47 +26,77 @@ const getTrackingMatcher = (params) => {
18
26
  return cached;
19
27
  };
20
28
  const deleteTrackingParams = (url, trackingParams) => {
21
- if (!url.search) return false;
29
+ if (!url.search) return;
30
+ const pairs = url.search.slice(1).split("&");
31
+ const entries = pairs.map((pair) => new URLSearchParams(pair).entries().next().value);
32
+ for (const entry of entries) if (entry && signatureParams.includes(entry[0].toLowerCase())) return;
22
33
  const matcher = getTrackingMatcher(trackingParams);
23
34
  const host = stripWww(url.hostname);
24
- const pairs = url.search.slice(1).split("&");
25
- const keptPairs = pairs.filter((pair) => {
26
- const entry = new URLSearchParams(pair).entries().next().value;
35
+ const keepsTs = url.hostname === "dm-cn.aliyuncs.com" && url.pathname === "/trace/v1/report";
36
+ const keptPairs = pairs.filter((_pair, index) => {
37
+ const entry = entries[index];
27
38
  if (!entry) return true;
28
39
  const [key, value] = entry;
29
40
  const name = key.toLowerCase();
41
+ if (keepsTs && name === "ts") return true;
30
42
  if (matcher.literals.has(name) || matcher.patterns.some((pattern) => name.search(pattern) !== -1)) return false;
31
- return key !== "ref" || stripWww(value.toLowerCase()) !== host;
43
+ if (name !== "ref" || refDelimitersRegex.test(value)) return true;
44
+ try {
45
+ return stripWww(new URL(`http://${value}`).hostname) !== host;
46
+ } catch {}
47
+ return true;
32
48
  });
33
- if (keptPairs.length === pairs.length) return false;
49
+ if (keptPairs.length === pairs.length) return;
34
50
  url.search = keptPairs.join("&");
35
- return true;
51
+ };
52
+ const controlCharactersRegex = /[\p{Cc}\u2028\u2029]/u;
53
+ const dottedHostRegex = /[^.]\.[^.]/;
54
+ const fileExtensionHostRegex = /\.(?:asp|aspx|cgi|htm|html|jsp|jspa|php)$/;
55
+ const cleanTarget = (target) => {
56
+ if (!target) return;
57
+ const repaired = fixMalformedProtocol(target.trim());
58
+ if (controlCharactersRegex.test(repaired)) return;
59
+ const hostname = parseUrl(repaired)?.hostname ?? "";
60
+ if (!dottedHostRegex.test(hostname) && !isIpAddress(hostname)) return;
61
+ if (fileExtensionHostRegex.test(hostname)) return;
62
+ return repaired;
63
+ };
64
+ const protocolRelativeRegex = /^\/\/[^/]/;
65
+ const addMissingScheme = (target) => {
66
+ if (!target || !protocolRelativeRegex.test(target)) return target;
67
+ return `https:${target}`;
36
68
  };
37
69
  const applyUnwrappers = (url, unwrappers) => {
38
70
  for (const unwrap of unwrappers) {
39
- const target = unwrap(url);
40
- if (target && isHttpUrl(target)) return target;
71
+ const raw = addMissingScheme(unwrap(url));
72
+ if (!raw || !isHttpUrl(raw)) continue;
73
+ const target = cleanTarget(raw);
74
+ if (target) return target;
41
75
  }
42
76
  };
43
77
  const unwrapUrl = (url, unwrappers = defaultUnwrappers) => {
44
78
  const parsed = parseUrl(url);
45
79
  if (!parsed) return;
46
- return applyUnwrappers(parsed, unwrappers);
80
+ const target = applyUnwrappers(parsed, unwrappers);
81
+ if (!target || target.includes(replacementCharacter)) return;
82
+ return parseUrl(target)?.href;
47
83
  };
48
84
  const stripTrackingParams = (url, trackingParams = defaultTrackingParams) => {
49
85
  const parsed = parseUrl(url);
50
86
  if (!parsed) return url;
51
- if (deleteTrackingParams(parsed, trackingParams)) return parsed.toString();
52
- return url;
87
+ deleteTrackingParams(parsed, trackingParams);
88
+ return parsed.href;
53
89
  };
54
90
  const cleanUrl = (url, options) => {
55
91
  const unwrappers = options?.unwrappers ?? defaultUnwrappers;
56
92
  const trackingParams = options?.trackingParams ?? defaultTrackingParams;
57
- const maxUnwrapDepth = options?.maxUnwrapDepth ?? 3;
93
+ const maxUnwrapDepth = options?.maxUnwrapDepth ?? 6;
58
94
  const parsed = parseUrl(url);
59
95
  if (!parsed) return url;
60
96
  let currentUrl = url;
61
97
  let currentParsed = parsed;
98
+ let intactUrl = url;
99
+ let intactParsed = parsed;
62
100
  for (let depth = 0; depth < maxUnwrapDepth; depth += 1) {
63
101
  const target = applyUnwrappers(currentParsed, unwrappers);
64
102
  if (!target) break;
@@ -66,9 +104,17 @@ const cleanUrl = (url, options) => {
66
104
  if (!targetParsed) break;
67
105
  currentUrl = target;
68
106
  currentParsed = targetParsed;
107
+ if (!target.includes(replacementCharacter)) {
108
+ intactUrl = target;
109
+ intactParsed = targetParsed;
110
+ }
111
+ }
112
+ if (currentUrl.includes(replacementCharacter)) {
113
+ currentUrl = intactUrl;
114
+ currentParsed = intactParsed;
69
115
  }
70
- if (deleteTrackingParams(currentParsed, trackingParams)) return currentParsed.toString();
71
- return currentUrl;
116
+ deleteTrackingParams(currentParsed, trackingParams);
117
+ return currentParsed.href;
72
118
  };
73
119
  //#endregion
74
120
  export { cleanUrl, stripTrackingParams, unwrapUrl };
@@ -3,6 +3,16 @@ import { trackingParamsLiterals } from "./tracking/literals.mjs";
3
3
  import { trackingParamsPatterns } from "./tracking/patterns.mjs";
4
4
  //#region src/defaults.d.ts
5
5
  export declare const defaultTrackingParams: Array<TrackingParam>;
6
+ export declare const searchClickUnwrappers: Array<UrlUnwrapper>;
7
+ export declare const linkShimUnwrappers: Array<UrlUnwrapper>;
8
+ export declare const pressReleaseUnwrappers: Array<UrlUnwrapper>;
9
+ export declare const signInShimUnwrappers: Array<UrlUnwrapper>;
10
+ export declare const securityGatewayUnwrappers: Array<UrlUnwrapper>;
11
+ export declare const emailTrackingUnwrappers: Array<UrlUnwrapper>;
12
+ export declare const affiliateUnwrappers: Array<UrlUnwrapper>;
13
+ export declare const advertisingUnwrappers: Array<UrlUnwrapper>;
14
+ export declare const downloadMeasurementUnwrappers: Array<UrlUnwrapper>;
15
+ export declare const archiveProxyUnwrappers: Array<UrlUnwrapper>;
6
16
  export declare const defaultUnwrappers: Array<UrlUnwrapper>;
7
17
  //#endregion
8
18
  export { trackingParamsLiterals, trackingParamsPatterns };