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.
- package/README.md +48 -66
- package/dist/clean.mjs +62 -16
- package/dist/defaults.d.mts +10 -0
- package/dist/defaults.mjs +742 -25
- package/dist/index.d.mts +304 -5
- package/dist/index.mjs +337 -38
- package/dist/node_modules/trousse/dist/urls.mjs +65 -3
- package/dist/pathTarget.mjs +14 -0
- package/dist/unwraps/12ft.d.mts +4 -0
- package/dist/unwraps/12ft.mjs +9 -0
- package/dist/unwraps/2performant.d.mts +4 -0
- package/dist/unwraps/2performant.mjs +9 -0
- package/dist/unwraps/4pda.d.mts +4 -0
- package/dist/unwraps/4pda.mjs +13 -0
- package/dist/unwraps/a8Net.d.mts +4 -0
- package/dist/unwraps/a8Net.mjs +23 -0
- package/dist/unwraps/aboutCom.d.mts +4 -0
- package/dist/unwraps/aboutCom.mjs +17 -0
- package/dist/unwraps/acast.d.mts +4 -0
- package/dist/unwraps/acast.mjs +10 -0
- package/dist/unwraps/accesstrade.d.mts +4 -0
- package/dist/unwraps/accesstrade.mjs +18 -0
- package/dist/unwraps/aceml.mjs +6 -1
- package/dist/unwraps/adcell.d.mts +4 -0
- package/dist/unwraps/adcell.mjs +13 -0
- package/dist/unwraps/adfly.d.mts +4 -0
- package/dist/unwraps/adfly.mjs +16 -0
- package/dist/unwraps/adjust.mjs +25 -4
- package/dist/unwraps/admitad.d.mts +4 -0
- package/dist/unwraps/admitad.mjs +29 -0
- package/dist/unwraps/adrecord.d.mts +4 -0
- package/dist/unwraps/adrecord.mjs +9 -0
- package/dist/unwraps/adtraction.d.mts +4 -0
- package/dist/unwraps/adtraction.mjs +9 -0
- package/dist/unwraps/affilae.d.mts +4 -0
- package/dist/unwraps/affilae.mjs +8 -0
- package/dist/unwraps/affiliateFuture.d.mts +4 -0
- package/dist/unwraps/affiliateFuture.mjs +9 -0
- package/dist/unwraps/affiliatesOne.d.mts +4 -0
- package/dist/unwraps/affiliatesOne.mjs +39 -0
- package/dist/unwraps/aliexpress.d.mts +4 -0
- package/dist/unwraps/aliexpress.mjs +9 -0
- package/dist/unwraps/aliyun.d.mts +4 -0
- package/dist/unwraps/aliyun.mjs +9 -0
- package/dist/unwraps/allblog.d.mts +4 -0
- package/dist/unwraps/allblog.mjs +10 -0
- package/dist/unwraps/amazonAffiliate.mjs +16 -1
- package/dist/unwraps/amazonSes.d.mts +4 -0
- package/dist/unwraps/amazonSes.mjs +14 -0
- package/dist/unwraps/ampCache.mjs +12 -6
- package/dist/unwraps/anchor.d.mts +4 -0
- package/dist/unwraps/anchor.mjs +15 -0
- package/dist/unwraps/anonymTo.mjs +4 -1
- package/dist/unwraps/anonymouse.d.mts +4 -0
- package/dist/unwraps/anonymouse.mjs +12 -0
- package/dist/unwraps/appsflyerOnelink.d.mts +4 -0
- package/dist/unwraps/appsflyerOnelink.mjs +13 -0
- package/dist/unwraps/apptrkr.d.mts +4 -0
- package/dist/unwraps/apptrkr.mjs +13 -0
- package/dist/unwraps/archiveToday.d.mts +4 -0
- package/dist/unwraps/archiveToday.mjs +24 -0
- package/dist/unwraps/arquivo.d.mts +4 -0
- package/dist/unwraps/arquivo.mjs +12 -0
- package/dist/unwraps/arttrack.d.mts +4 -0
- package/dist/unwraps/arttrack.mjs +10 -0
- package/dist/unwraps/arxiv.d.mts +4 -0
- package/dist/unwraps/arxiv.mjs +9 -0
- package/dist/unwraps/ask.d.mts +4 -0
- package/dist/unwraps/ask.mjs +14 -0
- package/dist/unwraps/augure.d.mts +4 -0
- package/dist/unwraps/augure.mjs +28 -0
- package/dist/unwraps/ausha.d.mts +4 -0
- package/dist/unwraps/ausha.mjs +10 -0
- package/dist/unwraps/avantlink.d.mts +4 -0
- package/dist/unwraps/avantlink.mjs +13 -0
- package/dist/unwraps/awesound.d.mts +4 -0
- package/dist/unwraps/awesound.mjs +10 -0
- package/dist/unwraps/awin.mjs +10 -2
- package/dist/unwraps/axigen.d.mts +4 -0
- package/dist/unwraps/axigen.mjs +11 -0
- package/dist/unwraps/babyblog.d.mts +4 -0
- package/dist/unwraps/babyblog.mjs +9 -0
- package/dist/unwraps/bacLacWebArchive.d.mts +4 -0
- package/dist/unwraps/bacLacWebArchive.mjs +12 -0
- package/dist/unwraps/bale.d.mts +4 -0
- package/dist/unwraps/bale.mjs +9 -0
- package/dist/unwraps/bananatag.d.mts +4 -0
- package/dist/unwraps/bananatag.mjs +17 -0
- package/dist/unwraps/barracudaLinkProtect.d.mts +4 -0
- package/dist/unwraps/barracudaLinkProtect.mjs +9 -0
- package/dist/unwraps/big5Gate.d.mts +4 -0
- package/dist/unwraps/big5Gate.mjs +11 -0
- package/dist/unwraps/bing.mjs +19 -4
- package/dist/unwraps/bingAds.d.mts +4 -0
- package/dist/unwraps/bingAds.mjs +18 -0
- package/dist/unwraps/bitrix.d.mts +4 -0
- package/dist/unwraps/bitrix.mjs +14 -0
- package/dist/unwraps/bitrixBanner.d.mts +4 -0
- package/dist/unwraps/bitrixBanner.mjs +8 -0
- package/dist/unwraps/bizrate.d.mts +4 -0
- package/dist/unwraps/bizrate.mjs +9 -0
- package/dist/unwraps/blubrry.d.mts +4 -0
- package/dist/unwraps/blubrry.mjs +15 -0
- package/dist/unwraps/bolPartner.d.mts +4 -0
- package/dist/unwraps/bolPartner.mjs +13 -0
- package/dist/unwraps/bridgyFed.d.mts +4 -0
- package/dist/unwraps/bridgyFed.mjs +16 -0
- package/dist/unwraps/businessWire.d.mts +4 -0
- package/dist/unwraps/businessWire.mjs +9 -0
- package/dist/unwraps/button.d.mts +4 -0
- package/dist/unwraps/button.mjs +13 -0
- package/dist/unwraps/buyAt.d.mts +4 -0
- package/dist/unwraps/buyAt.mjs +13 -0
- package/dist/unwraps/buybox.d.mts +4 -0
- package/dist/unwraps/buybox.mjs +13 -0
- package/dist/unwraps/buzzstream.d.mts +4 -0
- package/dist/unwraps/buzzstream.mjs +13 -0
- package/dist/unwraps/bytedance.d.mts +4 -0
- package/dist/unwraps/bytedance.mjs +9 -0
- package/dist/unwraps/cake.d.mts +4 -0
- package/dist/unwraps/cake.mjs +11 -0
- package/dist/unwraps/calendly.d.mts +4 -0
- package/dist/unwraps/calendly.mjs +9 -0
- package/dist/unwraps/canva.d.mts +4 -0
- package/dist/unwraps/canva.mjs +9 -0
- package/dist/unwraps/castPlus.d.mts +4 -0
- package/dist/unwraps/castPlus.mjs +10 -0
- package/dist/unwraps/ccbill.d.mts +4 -0
- package/dist/unwraps/ccbill.mjs +9 -0
- package/dist/unwraps/chartable.d.mts +4 -0
- package/dist/unwraps/chartable.mjs +11 -0
- package/dist/unwraps/checkPointHarmony.d.mts +4 -0
- package/dist/unwraps/checkPointHarmony.mjs +25 -0
- package/dist/unwraps/chitika.d.mts +4 -0
- package/dist/unwraps/chitika.mjs +9 -0
- package/dist/unwraps/ciscoSecureWeb.d.mts +4 -0
- package/dist/unwraps/ciscoSecureWeb.mjs +16 -0
- package/dist/unwraps/cjNetwork.mjs +41 -12
- package/dist/unwraps/claritas.d.mts +4 -0
- package/dist/unwraps/claritas.mjs +11 -0
- package/dist/unwraps/cleverbridge.d.mts +4 -0
- package/dist/unwraps/cleverbridge.mjs +12 -0
- package/dist/unwraps/clevercomm.d.mts +4 -0
- package/dist/unwraps/clevercomm.mjs +9 -0
- package/dist/unwraps/cloudhq.d.mts +4 -0
- package/dist/unwraps/cloudhq.mjs +13 -0
- package/dist/unwraps/cloze.d.mts +4 -0
- package/dist/unwraps/cloze.mjs +12 -0
- package/dist/unwraps/cohst.d.mts +4 -0
- package/dist/unwraps/cohst.mjs +10 -0
- package/dist/unwraps/commissionFactory.d.mts +4 -0
- package/dist/unwraps/commissionFactory.mjs +13 -0
- package/dist/unwraps/communicationads.d.mts +4 -0
- package/dist/unwraps/communicationads.mjs +9 -0
- package/dist/unwraps/constantContact.d.mts +4 -0
- package/dist/unwraps/constantContact.mjs +9 -0
- package/dist/unwraps/contactMonkey.d.mts +4 -0
- package/dist/unwraps/contactMonkey.mjs +12 -0
- package/dist/unwraps/convertiser.d.mts +4 -0
- package/dist/unwraps/convertiser.mjs +13 -0
- package/dist/unwraps/csdn.mjs +1 -0
- package/dist/unwraps/cse360.d.mts +4 -0
- package/dist/unwraps/cse360.mjs +17 -0
- package/dist/unwraps/cuelinks.d.mts +4 -0
- package/dist/unwraps/cuelinks.mjs +9 -0
- package/dist/unwraps/dasBlog.d.mts +4 -0
- package/dist/unwraps/dasBlog.mjs +11 -0
- package/dist/unwraps/datalifeEngine.d.mts +4 -0
- package/dist/unwraps/datalifeEngine.mjs +14 -0
- package/dist/unwraps/deployer.d.mts +4 -0
- package/dist/unwraps/deployer.mjs +18 -0
- package/dist/unwraps/derefMail.d.mts +4 -0
- package/dist/unwraps/derefMail.mjs +61 -0
- package/dist/unwraps/deviantartOutgoing.mjs +3 -2
- package/dist/unwraps/digidip.mjs +6 -1
- package/dist/unwraps/digikala.d.mts +4 -0
- package/dist/unwraps/digikala.mjs +13 -0
- package/dist/unwraps/directMail.d.mts +4 -0
- package/dist/unwraps/directMail.mjs +17 -0
- package/dist/unwraps/disqus.mjs +6 -1
- package/dist/unwraps/dmmAffiliate.d.mts +4 -0
- package/dist/unwraps/dmmAffiliate.mjs +13 -0
- package/dist/unwraps/dognet.d.mts +4 -0
- package/dist/unwraps/dognet.mjs +9 -0
- package/dist/unwraps/douban.mjs +5 -1
- package/dist/unwraps/dropbox.d.mts +4 -0
- package/dist/unwraps/dropbox.mjs +22 -0
- package/dist/unwraps/dstats.d.mts +4 -0
- package/dist/unwraps/dstats.mjs +21 -0
- package/dist/unwraps/duckduckgo.mjs +1 -1
- package/dist/unwraps/duckduckgoAds.d.mts +4 -0
- package/dist/unwraps/duckduckgoAds.mjs +9 -0
- package/dist/unwraps/duomai.d.mts +4 -0
- package/dist/unwraps/duomai.mjs +9 -0
- package/dist/unwraps/dyn.d.mts +4 -0
- package/dist/unwraps/dyn.mjs +9 -0
- package/dist/unwraps/dzen.d.mts +4 -0
- package/dist/unwraps/dzen.mjs +9 -0
- package/dist/unwraps/eClick.d.mts +4 -0
- package/dist/unwraps/eClick.mjs +13 -0
- package/dist/unwraps/easyMarketing.d.mts +4 -0
- package/dist/unwraps/easyMarketing.mjs +20 -0
- package/dist/unwraps/ebayRover.mjs +10 -3
- package/dist/unwraps/ebuzzing.d.mts +4 -0
- package/dist/unwraps/ebuzzing.mjs +20 -0
- package/dist/unwraps/edgepilot.d.mts +4 -0
- package/dist/unwraps/edgepilot.mjs +13 -0
- package/dist/unwraps/effiliation.mjs +7 -2
- package/dist/unwraps/ehub.d.mts +4 -0
- package/dist/unwraps/ehub.mjs +9 -0
- package/dist/unwraps/elasticEmail.d.mts +4 -0
- package/dist/unwraps/elasticEmail.mjs +11 -0
- package/dist/unwraps/embedly.mjs +2 -1
- package/dist/unwraps/epn.d.mts +4 -0
- package/dist/unwraps/epn.mjs +19 -0
- package/dist/unwraps/esva.d.mts +4 -0
- package/dist/unwraps/esva.mjs +9 -0
- package/dist/unwraps/eulerian.d.mts +4 -0
- package/dist/unwraps/eulerian.mjs +12 -0
- package/dist/unwraps/evernote.d.mts +4 -0
- package/dist/unwraps/evernote.mjs +9 -0
- package/dist/unwraps/exciteTranslate.d.mts +4 -0
- package/dist/unwraps/exciteTranslate.mjs +17 -0
- package/dist/unwraps/expediaAffiliate.d.mts +4 -0
- package/dist/unwraps/expediaAffiliate.mjs +9 -0
- package/dist/unwraps/facebook.mjs +48 -3
- package/dist/unwraps/fanbridge.d.mts +4 -0
- package/dist/unwraps/fanbridge.mjs +9 -0
- package/dist/unwraps/federatedMedia.d.mts +4 -0
- package/dist/unwraps/federatedMedia.mjs +9 -0
- package/dist/unwraps/feedStatistics.d.mts +4 -0
- package/dist/unwraps/feedStatistics.mjs +12 -0
- package/dist/unwraps/feedblitz.d.mts +4 -0
- package/dist/unwraps/feedblitz.mjs +12 -0
- package/dist/unwraps/finalsite.d.mts +4 -0
- package/dist/unwraps/finalsite.mjs +12 -0
- package/dist/unwraps/firebaseDynamicLinks.mjs +15 -3
- package/dist/unwraps/fireeye.d.mts +4 -0
- package/dist/unwraps/fireeye.mjs +11 -0
- package/dist/unwraps/firstory.d.mts +4 -0
- package/dist/unwraps/firstory.mjs +21 -0
- package/dist/unwraps/fiveByFive.d.mts +4 -0
- package/dist/unwraps/fiveByFive.mjs +12 -0
- package/dist/unwraps/fiverr.d.mts +4 -0
- package/dist/unwraps/fiverr.mjs +9 -0
- package/dist/unwraps/flexoffers.d.mts +4 -0
- package/dist/unwraps/flexoffers.mjs +13 -0
- package/dist/unwraps/fortimail.d.mts +4 -0
- package/dist/unwraps/fortimail.mjs +11 -0
- package/dist/unwraps/ftc.d.mts +4 -0
- package/dist/unwraps/ftc.mjs +13 -0
- package/dist/unwraps/gateSc.mjs +1 -0
- package/dist/unwraps/georiot.mjs +7 -1
- package/dist/unwraps/gfnLinkProxy.d.mts +4 -0
- package/dist/unwraps/gfnLinkProxy.mjs +13 -0
- package/dist/unwraps/glueUp.d.mts +4 -0
- package/dist/unwraps/glueUp.mjs +16 -0
- package/dist/unwraps/godcaster.d.mts +4 -0
- package/dist/unwraps/godcaster.mjs +21 -0
- package/dist/unwraps/google.mjs +4 -2
- package/dist/unwraps/googleAds.d.mts +4 -0
- package/dist/unwraps/googleAds.mjs +52 -0
- package/dist/unwraps/googleScholar.mjs +1 -1
- package/dist/unwraps/googleTranslate.mjs +34 -6
- package/dist/unwraps/googleWebLight.d.mts +4 -0
- package/dist/unwraps/googleWebLight.mjs +17 -0
- package/dist/unwraps/groupMail.d.mts +4 -0
- package/dist/unwraps/groupMail.mjs +11 -0
- package/dist/unwraps/groupon.d.mts +4 -0
- package/dist/unwraps/groupon.mjs +17 -0
- package/dist/unwraps/gumball.d.mts +4 -0
- package/dist/unwraps/gumball.mjs +11 -0
- package/dist/unwraps/gurunavi.d.mts +4 -0
- package/dist/unwraps/gurunavi.mjs +9 -0
- package/dist/unwraps/hackerone.d.mts +4 -0
- package/dist/unwraps/hackerone.mjs +9 -0
- package/dist/unwraps/hasoffers.d.mts +4 -0
- package/dist/unwraps/hasoffers.mjs +11 -0
- package/dist/unwraps/hearthis.d.mts +4 -0
- package/dist/unwraps/hearthis.mjs +9 -0
- package/dist/unwraps/hellohq.d.mts +4 -0
- package/dist/unwraps/hellohq.mjs +9 -0
- package/dist/unwraps/hirkereso.d.mts +4 -0
- package/dist/unwraps/hirkereso.mjs +13 -0
- package/dist/unwraps/horde.d.mts +4 -0
- package/dist/unwraps/horde.mjs +12 -0
- package/dist/unwraps/hornetsecurity.d.mts +4 -0
- package/dist/unwraps/hornetsecurity.mjs +9 -0
- package/dist/unwraps/hrefLi.mjs +1 -1
- package/dist/unwraps/hubspotSidekick.d.mts +4 -0
- package/dist/unwraps/hubspotSidekick.mjs +13 -0
- package/dist/unwraps/icptrack.mjs +7 -3
- package/dist/unwraps/igafnl.d.mts +4 -0
- package/dist/unwraps/igafnl.mjs +9 -0
- package/dist/unwraps/impact.d.mts +4 -0
- package/dist/unwraps/impact.mjs +19 -0
- package/dist/unwraps/indexHu.d.mts +4 -0
- package/dist/unwraps/indexHu.mjs +27 -0
- package/dist/unwraps/infospace.d.mts +4 -0
- package/dist/unwraps/infospace.mjs +14 -0
- package/dist/unwraps/insiderAffiliate.d.mts +4 -0
- package/dist/unwraps/insiderAffiliate.mjs +17 -0
- package/dist/unwraps/instagram.mjs +1 -0
- package/dist/unwraps/intranetQuorum.d.mts +4 -0
- package/dist/unwraps/intranetQuorum.mjs +13 -0
- package/dist/unwraps/invisionNoExternalLinks.d.mts +4 -0
- package/dist/unwraps/invisionNoExternalLinks.mjs +14 -0
- package/dist/unwraps/involveAsia.d.mts +4 -0
- package/dist/unwraps/involveAsia.mjs +18 -0
- package/dist/unwraps/irs.d.mts +4 -0
- package/dist/unwraps/irs.mjs +9 -0
- package/dist/unwraps/jianshuGo.mjs +9 -1
- package/dist/unwraps/jive.d.mts +4 -0
- package/dist/unwraps/jive.mjs +11 -0
- package/dist/unwraps/juejin.mjs +2 -1
- package/dist/unwraps/justwatch.d.mts +4 -0
- package/dist/unwraps/justwatch.mjs +9 -0
- package/dist/unwraps/klook.d.mts +4 -0
- package/dist/unwraps/klook.mjs +10 -0
- package/dist/unwraps/lazada.d.mts +4 -0
- package/dist/unwraps/lazada.mjs +20 -0
- package/dist/unwraps/ld246.d.mts +4 -0
- package/dist/unwraps/ld246.mjs +14 -0
- package/dist/unwraps/letscast.d.mts +4 -0
- package/dist/unwraps/letscast.mjs +10 -0
- package/dist/unwraps/leverAnalytics.mjs +1 -0
- package/dist/unwraps/linkA.d.mts +4 -0
- package/dist/unwraps/linkA.mjs +18 -0
- package/dist/unwraps/linkconnector.d.mts +4 -0
- package/dist/unwraps/linkconnector.mjs +9 -0
- package/dist/unwraps/linkedin.d.mts +4 -0
- package/dist/unwraps/linkedin.mjs +12 -0
- package/dist/unwraps/linksynergy.mjs +23 -6
- package/dist/unwraps/linktrust.d.mts +4 -0
- package/dist/unwraps/linktrust.mjs +18 -0
- package/dist/unwraps/linkwise.d.mts +4 -0
- package/dist/unwraps/linkwise.mjs +13 -0
- package/dist/unwraps/livejournal.d.mts +4 -0
- package/dist/unwraps/livejournal.mjs +9 -0
- package/dist/unwraps/lnkam.d.mts +4 -0
- package/dist/unwraps/lnkam.mjs +9 -0
- package/dist/unwraps/locWebArchive.d.mts +4 -0
- package/dist/unwraps/locWebArchive.mjs +12 -0
- package/dist/unwraps/locaweb.d.mts +4 -0
- package/dist/unwraps/locaweb.mjs +9 -0
- package/dist/unwraps/logicboard.d.mts +4 -0
- package/dist/unwraps/logicboard.mjs +14 -0
- package/dist/unwraps/magellan.d.mts +4 -0
- package/dist/unwraps/magellan.mjs +10 -0
- package/dist/unwraps/magnetmail.d.mts +4 -0
- package/dist/unwraps/magnetmail.mjs +9 -0
- package/dist/unwraps/mail2easy.d.mts +4 -0
- package/dist/unwraps/mail2easy.mjs +12 -0
- package/dist/unwraps/mailRu.d.mts +4 -0
- package/dist/unwraps/mailRu.mjs +17 -0
- package/dist/unwraps/mailRuLink.d.mts +4 -0
- package/dist/unwraps/mailRuLink.mjs +9 -0
- package/dist/unwraps/mailchimp.mjs +7 -3
- package/dist/unwraps/mailinblack.d.mts +4 -0
- package/dist/unwraps/mailinblack.mjs +16 -0
- package/dist/unwraps/mailpanion.mjs +1 -0
- package/dist/unwraps/mailpgn.mjs +1 -0
- package/dist/unwraps/mailstat.d.mts +4 -0
- package/dist/unwraps/mailstat.mjs +11 -0
- package/dist/unwraps/mailtrack.mjs +6 -1
- package/dist/unwraps/mandrill.d.mts +4 -0
- package/dist/unwraps/mandrill.mjs +26 -0
- package/dist/unwraps/marketwire.d.mts +4 -0
- package/dist/unwraps/marketwire.mjs +9 -0
- package/dist/unwraps/mcas.d.mts +4 -0
- package/dist/unwraps/mcas.mjs +28 -0
- package/dist/unwraps/medium.mjs +13 -3
- package/dist/unwraps/megalodon.d.mts +4 -0
- package/dist/unwraps/megalodon.mjs +14 -0
- package/dist/unwraps/mimecast.mjs +6 -3
- package/dist/unwraps/ministryCloud.d.mts +4 -0
- package/dist/unwraps/ministryCloud.mjs +10 -0
- package/dist/unwraps/mintDownloads.d.mts +4 -0
- package/dist/unwraps/mintDownloads.mjs +11 -0
- package/dist/unwraps/mintFeeder.d.mts +4 -0
- package/dist/unwraps/mintFeeder.mjs +10 -0
- package/dist/unwraps/mohtwize.d.mts +4 -0
- package/dist/unwraps/mohtwize.mjs +20 -0
- package/dist/unwraps/moshimo.d.mts +4 -0
- package/dist/unwraps/moshimo.mjs +13 -0
- package/dist/unwraps/mozillaOutgoing.mjs +5 -1
- package/dist/unwraps/myNewsletterBuilder.d.mts +4 -0
- package/dist/unwraps/myNewsletterBuilder.mjs +9 -0
- package/dist/unwraps/narrativ.mjs +21 -2
- package/dist/unwraps/natlibNz.d.mts +4 -0
- package/dist/unwraps/natlibNz.mjs +12 -0
- package/dist/unwraps/naverOutgoing.mjs +10 -1
- package/dist/unwraps/ncls.d.mts +4 -0
- package/dist/unwraps/ncls.mjs +11 -0
- package/dist/unwraps/ndlWarp.d.mts +4 -0
- package/dist/unwraps/ndlWarp.mjs +16 -0
- package/dist/unwraps/netaffiliation.d.mts +4 -0
- package/dist/unwraps/netaffiliation.mjs +18 -0
- package/dist/unwraps/netcentrum.d.mts +4 -0
- package/dist/unwraps/netcentrum.mjs +9 -0
- package/dist/unwraps/newswire.d.mts +4 -0
- package/dist/unwraps/newswire.mjs +19 -0
- package/dist/unwraps/nicoMs.mjs +2 -1
- package/dist/unwraps/nimble.d.mts +4 -0
- package/dist/unwraps/nimble.mjs +13 -0
- package/dist/unwraps/nlaWebarchive.d.mts +4 -0
- package/dist/unwraps/nlaWebarchive.mjs +22 -0
- package/dist/unwraps/nodeseek.d.mts +4 -0
- package/dist/unwraps/nodeseek.mjs +9 -0
- package/dist/unwraps/okRu.d.mts +4 -0
- package/dist/unwraps/okRu.mjs +23 -0
- package/dist/unwraps/op3.d.mts +4 -0
- package/dist/unwraps/op3.mjs +10 -0
- package/dist/unwraps/orkut.d.mts +4 -0
- package/dist/unwraps/orkut.mjs +13 -0
- package/dist/unwraps/osnova.d.mts +4 -0
- package/dist/unwraps/osnova.mjs +9 -0
- package/dist/unwraps/outlookSafelinks.mjs +12 -2
- package/dist/unwraps/outlookWebAccess.d.mts +4 -0
- package/dist/unwraps/outlookWebAccess.mjs +12 -0
- package/dist/unwraps/pagefreezer.d.mts +4 -0
- package/dist/unwraps/pagefreezer.mjs +18 -0
- package/dist/unwraps/partnerAds.mjs +11 -2
- package/dist/unwraps/pbs.d.mts +4 -0
- package/dist/unwraps/pbs.mjs +10 -0
- package/dist/unwraps/philpapers.d.mts +4 -0
- package/dist/unwraps/philpapers.mjs +9 -0
- package/dist/unwraps/pinterest.d.mts +4 -0
- package/dist/unwraps/pinterest.mjs +17 -0
- package/dist/unwraps/pipedrive.d.mts +4 -0
- package/dist/unwraps/pipedrive.mjs +13 -0
- package/dist/unwraps/podcorn.d.mts +4 -0
- package/dist/unwraps/podcorn.mjs +10 -0
- package/dist/unwraps/podder.d.mts +4 -0
- package/dist/unwraps/podder.mjs +10 -0
- package/dist/unwraps/podkite.d.mts +4 -0
- package/dist/unwraps/podkite.mjs +12 -0
- package/dist/unwraps/podroll.d.mts +4 -0
- package/dist/unwraps/podroll.mjs +10 -0
- package/dist/unwraps/podscribe.d.mts +4 -0
- package/dist/unwraps/podscribe.mjs +10 -0
- package/dist/unwraps/podsights.d.mts +4 -0
- package/dist/unwraps/podsights.mjs +10 -0
- package/dist/unwraps/podtrac.d.mts +4 -0
- package/dist/unwraps/podtrac.mjs +21 -0
- package/dist/unwraps/podup.d.mts +4 -0
- package/dist/unwraps/podup.mjs +11 -0
- package/dist/unwraps/postAffiliatePro.d.mts +4 -0
- package/dist/unwraps/postAffiliatePro.mjs +13 -0
- package/dist/unwraps/postmark.mjs +5 -3
- package/dist/unwraps/prNewswire.d.mts +4 -0
- package/dist/unwraps/prNewswire.mjs +13 -0
- package/dist/unwraps/prezly.d.mts +4 -0
- package/dist/unwraps/prezly.mjs +17 -0
- package/dist/unwraps/priceGrabber.d.mts +4 -0
- package/dist/unwraps/priceGrabber.mjs +9 -0
- package/dist/unwraps/promoJukebox.d.mts +4 -0
- package/dist/unwraps/promoJukebox.mjs +9 -0
- package/dist/unwraps/proofpointIsolation.d.mts +4 -0
- package/dist/unwraps/proofpointIsolation.mjs +9 -0
- package/dist/unwraps/prweb.d.mts +4 -0
- package/dist/unwraps/prweb.mjs +16 -0
- package/dist/unwraps/qualityClick.d.mts +4 -0
- package/dist/unwraps/qualityClick.mjs +13 -0
- package/dist/unwraps/rakutenAffiliate.d.mts +4 -0
- package/dist/unwraps/rakutenAffiliate.mjs +29 -0
- package/dist/unwraps/ramblerMail.d.mts +4 -0
- package/dist/unwraps/ramblerMail.mjs +9 -0
- package/dist/unwraps/recruitics.mjs +1 -0
- package/dist/unwraps/redditOut.mjs +6 -1
- package/dist/unwraps/rediffmail.d.mts +4 -0
- package/dist/unwraps/rediffmail.mjs +9 -0
- package/dist/unwraps/redirectingat.mjs +6 -1
- package/dist/unwraps/researchgate.d.mts +4 -0
- package/dist/unwraps/researchgate.mjs +23 -0
- package/dist/unwraps/reverbnation.d.mts +4 -0
- package/dist/unwraps/reverbnation.mjs +17 -0
- package/dist/unwraps/reviveAdserver.d.mts +4 -0
- package/dist/unwraps/reviveAdserver.mjs +29 -0
- package/dist/unwraps/salesdoubler.d.mts +4 -0
- package/dist/unwraps/salesdoubler.mjs +13 -0
- package/dist/unwraps/salesflare.d.mts +4 -0
- package/dist/unwraps/salesflare.mjs +9 -0
- package/dist/unwraps/salesforceiq.d.mts +4 -0
- package/dist/unwraps/salesforceiq.mjs +9 -0
- package/dist/unwraps/saleshandy.d.mts +4 -0
- package/dist/unwraps/saleshandy.mjs +13 -0
- package/dist/unwraps/salsa.d.mts +4 -0
- package/dist/unwraps/salsa.mjs +12 -0
- package/dist/unwraps/sapHelp.d.mts +4 -0
- package/dist/unwraps/sapHelp.mjs +13 -0
- package/dist/unwraps/sbsAd.d.mts +4 -0
- package/dist/unwraps/sbsAd.mjs +9 -0
- package/dist/unwraps/segmentfault.mjs +1 -0
- package/dist/unwraps/serendipity.d.mts +4 -0
- package/dist/unwraps/serendipity.mjs +13 -0
- package/dist/unwraps/shareasale.mjs +1 -1
- package/dist/unwraps/shareit.d.mts +4 -0
- package/dist/unwraps/shareit.mjs +17 -0
- package/dist/unwraps/skimlinks.mjs +6 -1
- package/dist/unwraps/skyrock.d.mts +4 -0
- package/dist/unwraps/skyrock.mjs +9 -0
- package/dist/unwraps/slickdeals.d.mts +4 -0
- package/dist/unwraps/slickdeals.mjs +9 -0
- package/dist/unwraps/smartAdserver.d.mts +4 -0
- package/dist/unwraps/smartAdserver.mjs +9 -0
- package/dist/unwraps/smartredirect.mjs +12 -2
- package/dist/unwraps/smry.d.mts +4 -0
- package/dist/unwraps/smry.mjs +9 -0
- package/dist/unwraps/sophos.d.mts +4 -0
- package/dist/unwraps/sophos.mjs +16 -0
- package/dist/unwraps/soundOn.d.mts +4 -0
- package/dist/unwraps/soundOn.mjs +10 -0
- package/dist/unwraps/soundcloud.d.mts +4 -0
- package/dist/unwraps/soundcloud.mjs +9 -0
- package/dist/unwraps/soundstack.d.mts +4 -0
- package/dist/unwraps/soundstack.mjs +10 -0
- package/dist/unwraps/squarespaceEmail.d.mts +4 -0
- package/dist/unwraps/squarespaceEmail.mjs +9 -0
- package/dist/unwraps/sspai.mjs +1 -1
- package/dist/unwraps/stay22.d.mts +4 -0
- package/dist/unwraps/stay22.mjs +11 -0
- package/dist/unwraps/steamLinkfilter.mjs +1 -1
- package/dist/unwraps/storify.d.mts +4 -0
- package/dist/unwraps/storify.mjs +9 -0
- package/dist/unwraps/streak.d.mts +4 -0
- package/dist/unwraps/streak.mjs +15 -0
- package/dist/unwraps/streamsend.d.mts +4 -0
- package/dist/unwraps/streamsend.mjs +13 -0
- package/dist/unwraps/stumbleupon.d.mts +4 -0
- package/dist/unwraps/stumbleupon.mjs +19 -0
- package/dist/unwraps/subscribeRu.d.mts +4 -0
- package/dist/unwraps/subscribeRu.mjs +11 -0
- package/dist/unwraps/substack.d.mts +4 -0
- package/dist/unwraps/substack.mjs +15 -0
- package/dist/unwraps/surly.d.mts +4 -0
- package/dist/unwraps/surly.mjs +19 -0
- package/dist/unwraps/surugaya.d.mts +4 -0
- package/dist/unwraps/surugaya.mjs +9 -0
- package/dist/unwraps/swap.d.mts +4 -0
- package/dist/unwraps/swap.mjs +17 -0
- package/dist/unwraps/symantecClicktime.d.mts +4 -0
- package/dist/unwraps/symantecClicktime.mjs +13 -0
- package/dist/unwraps/symplicity.d.mts +4 -0
- package/dist/unwraps/symplicity.mjs +16 -0
- package/dist/unwraps/targetCircle.d.mts +4 -0
- package/dist/unwraps/targetCircle.mjs +13 -0
- package/dist/unwraps/teacup.d.mts +4 -0
- package/dist/unwraps/teacup.mjs +14 -0
- package/dist/unwraps/telegramIv.mjs +1 -1
- package/dist/unwraps/theRegister.d.mts +4 -0
- package/dist/unwraps/theRegister.mjs +10 -0
- package/dist/unwraps/threads.mjs +1 -0
- package/dist/unwraps/tiktok.d.mts +4 -0
- package/dist/unwraps/tiktok.mjs +9 -0
- package/dist/unwraps/titanhqLinklock.d.mts +4 -0
- package/dist/unwraps/titanhqLinklock.mjs +9 -0
- package/dist/unwraps/topsec.d.mts +4 -0
- package/dist/unwraps/topsec.mjs +9 -0
- package/dist/unwraps/toucharcade.d.mts +4 -0
- package/dist/unwraps/toucharcade.mjs +12 -0
- package/dist/unwraps/tracdelight.d.mts +4 -0
- package/dist/unwraps/tracdelight.mjs +18 -0
- package/dist/unwraps/tradedoubler.mjs +6 -1
- package/dist/unwraps/tradetracker.d.mts +4 -0
- package/dist/unwraps/tradetracker.mjs +9 -0
- package/dist/unwraps/travelpayouts.d.mts +4 -0
- package/dist/unwraps/travelpayouts.mjs +17 -0
- package/dist/unwraps/trendMicro.d.mts +4 -0
- package/dist/unwraps/trendMicro.mjs +17 -0
- package/dist/unwraps/triplelift.d.mts +4 -0
- package/dist/unwraps/triplelift.mjs +9 -0
- package/dist/unwraps/trustwaveScanmail.d.mts +4 -0
- package/dist/unwraps/trustwaveScanmail.mjs +9 -0
- package/dist/unwraps/trxHub.d.mts +4 -0
- package/dist/unwraps/trxHub.mjs +13 -0
- package/dist/unwraps/twitterRedirect.d.mts +4 -0
- package/dist/unwraps/twitterRedirect.mjs +9 -0
- package/dist/unwraps/twoCheckout.d.mts +4 -0
- package/dist/unwraps/twoCheckout.mjs +12 -0
- package/dist/unwraps/uinterbox.d.mts +4 -0
- package/dist/unwraps/uinterbox.mjs +9 -0
- package/dist/unwraps/ukWebArchive.d.mts +4 -0
- package/dist/unwraps/ukWebArchive.mjs +12 -0
- package/dist/unwraps/ukgwa.d.mts +4 -0
- package/dist/unwraps/ukgwa.mjs +14 -0
- package/dist/unwraps/unescoWebArchive.d.mts +4 -0
- package/dist/unwraps/unescoWebArchive.mjs +12 -0
- package/dist/unwraps/unhcrWebArchive.d.mts +4 -0
- package/dist/unwraps/unhcrWebArchive.mjs +12 -0
- package/dist/unwraps/unisender.d.mts +4 -0
- package/dist/unwraps/unisender.mjs +33 -0
- package/dist/unwraps/upAudio.d.mts +4 -0
- package/dist/unwraps/upAudio.mjs +10 -0
- package/dist/unwraps/vadeSecure.d.mts +4 -0
- package/dist/unwraps/vadeSecure.mjs +22 -0
- package/dist/unwraps/valuePress.d.mts +4 -0
- package/dist/unwraps/valuePress.mjs +19 -0
- package/dist/unwraps/valuecommerce.mjs +15 -1
- package/dist/unwraps/vanilla.d.mts +4 -0
- package/dist/unwraps/vanilla.mjs +12 -0
- package/dist/unwraps/vbulletin.d.mts +4 -0
- package/dist/unwraps/vbulletin.mjs +12 -0
- package/dist/unwraps/vefsafn.d.mts +4 -0
- package/dist/unwraps/vefsafn.mjs +14 -0
- package/dist/unwraps/vgWort.d.mts +4 -0
- package/dist/unwraps/vgWort.mjs +14 -0
- package/dist/unwraps/viglink.mjs +15 -2
- package/dist/unwraps/virgool.d.mts +4 -0
- package/dist/unwraps/virgool.mjs +9 -0
- package/dist/unwraps/visibli.d.mts +4 -0
- package/dist/unwraps/visibli.mjs +17 -0
- package/dist/unwraps/vkAway.mjs +8 -1
- package/dist/unwraps/vocus.d.mts +4 -0
- package/dist/unwraps/vocus.mjs +15 -0
- package/dist/unwraps/voxnest.d.mts +4 -0
- package/dist/unwraps/voxnest.mjs +10 -0
- package/dist/unwraps/vpixl.d.mts +4 -0
- package/dist/unwraps/vpixl.mjs +10 -0
- package/dist/unwraps/vuture.d.mts +4 -0
- package/dist/unwraps/vuture.mjs +11 -0
- package/dist/unwraps/webArchive.mjs +32 -6
- package/dist/unwraps/webcitation.d.mts +4 -0
- package/dist/unwraps/webcitation.mjs +13 -0
- package/dist/unwraps/webgains.d.mts +4 -0
- package/dist/unwraps/webgains.mjs +13 -0
- package/dist/unwraps/webharvest.d.mts +4 -0
- package/dist/unwraps/webharvest.mjs +12 -0
- package/dist/unwraps/wikiwix.d.mts +4 -0
- package/dist/unwraps/wikiwix.mjs +17 -0
- package/dist/unwraps/wikizero.d.mts +4 -0
- package/dist/unwraps/wikizero.mjs +22 -0
- package/dist/unwraps/wordpressEmail.d.mts +4 -0
- package/dist/unwraps/wordpressEmail.mjs +9 -0
- package/dist/unwraps/wordpressGo2.d.mts +4 -0
- package/dist/unwraps/wordpressGo2.mjs +9 -0
- package/dist/unwraps/worldNomads.d.mts +4 -0
- package/dist/unwraps/worldNomads.mjs +9 -0
- package/dist/unwraps/wpPoczta.d.mts +4 -0
- package/dist/unwraps/wpPoczta.mjs +16 -0
- package/dist/unwraps/xengentr.d.mts +4 -0
- package/dist/unwraps/xengentr.mjs +12 -0
- package/dist/unwraps/xiaoyuzhou.d.mts +4 -0
- package/dist/unwraps/xiaoyuzhou.mjs +10 -0
- package/dist/unwraps/ximalaya.d.mts +4 -0
- package/dist/unwraps/ximalaya.mjs +18 -0
- package/dist/unwraps/yahooJapan.d.mts +4 -0
- package/dist/unwraps/yahooJapan.mjs +15 -0
- package/dist/unwraps/yahooJapanAmpViewer.d.mts +4 -0
- package/dist/unwraps/yahooJapanAmpViewer.mjs +20 -0
- package/dist/unwraps/yahooSearch.mjs +11 -4
- package/dist/unwraps/yamm.d.mts +4 -0
- package/dist/unwraps/yamm.mjs +9 -0
- package/dist/unwraps/yandexMail.d.mts +4 -0
- package/dist/unwraps/yandexMail.mjs +14 -0
- package/dist/unwraps/yandexTurbo.mjs +20 -1
- package/dist/unwraps/yelp.d.mts +4 -0
- package/dist/unwraps/yelp.mjs +13 -0
- package/dist/unwraps/yesware.d.mts +4 -0
- package/dist/unwraps/yesware.mjs +19 -0
- package/dist/unwraps/yourMembership.d.mts +4 -0
- package/dist/unwraps/yourMembership.mjs +13 -0
- package/dist/unwraps/youtube.mjs +1 -1
- package/dist/unwraps/zanox.d.mts +4 -0
- package/dist/unwraps/zanox.mjs +17 -0
- package/dist/unwraps/zayads.d.mts +4 -0
- package/dist/unwraps/zayads.mjs +10 -0
- package/dist/unwraps/zemanta.d.mts +4 -0
- package/dist/unwraps/zemanta.mjs +9 -0
- package/dist/unwraps/zencastr.d.mts +4 -0
- package/dist/unwraps/zencastr.mjs +10 -0
- package/dist/unwraps/zhihu.mjs +1 -0
- package/dist/unwraps/zix.d.mts +4 -0
- package/dist/unwraps/zix.mjs +13 -0
- package/dist/unwraps/zscalerIsolation.d.mts +4 -0
- package/dist/unwraps/zscalerIsolation.mjs +13 -0
- package/dist/utils.d.mts +6 -1
- package/dist/utils.mjs +39 -4
- package/package.json +1 -1
- package/dist/unwraps/idealoPartner.d.mts +0 -4
- package/dist/unwraps/idealoPartner.mjs +0 -8
- package/dist/unwraps/pxf.d.mts +0 -4
- package/dist/unwraps/pxf.mjs +0 -8
- package/dist/unwraps/sjv.d.mts +0 -4
- 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
|
-
|
|
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
|
|
17
|
+
## Quick start
|
|
18
18
|
|
|
19
19
|
```typescript
|
|
20
20
|
import { cleanUrl } from 'urlpurify'
|
|
21
21
|
|
|
22
|
-
|
|
23
|
-
|
|
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
|
|
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
|
-
|
|
36
|
-
//
|
|
36
|
+
cleanUrl(url, {
|
|
37
|
+
// First match wins per pass.
|
|
37
38
|
unwrappers: [...defaultUnwrappers, unwrapWebArchive],
|
|
38
|
-
//
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
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
|
-
|
|
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
|
|
54
|
+
Removes tracking parameters and returns the serialized URL. Both this and `cleanUrl` apply three rules on top of the list:
|
|
53
55
|
|
|
54
|
-
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
###
|
|
81
|
+
### Tracking parameters
|
|
76
82
|
|
|
77
|
-
`defaultTrackingParams`
|
|
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
|
-
|
|
85
|
+
## Unwrappers
|
|
80
86
|
|
|
81
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
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
|
|
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
|
|
25
|
-
const keptPairs = pairs.filter((
|
|
26
|
-
const entry =
|
|
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
|
-
|
|
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
|
|
49
|
+
if (keptPairs.length === pairs.length) return;
|
|
34
50
|
url.search = keptPairs.join("&");
|
|
35
|
-
|
|
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
|
|
40
|
-
if (
|
|
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
|
-
|
|
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
|
-
|
|
52
|
-
return
|
|
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 ??
|
|
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
|
-
|
|
71
|
-
return
|
|
116
|
+
deleteTrackingParams(currentParsed, trackingParams);
|
|
117
|
+
return currentParsed.href;
|
|
72
118
|
};
|
|
73
119
|
//#endregion
|
|
74
120
|
export { cleanUrl, stripTrackingParams, unwrapUrl };
|
package/dist/defaults.d.mts
CHANGED
|
@@ -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 };
|