urlpurify 1.0.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/LICENSE +21 -0
- package/README.md +93 -0
- package/dist/clean.d.ts +8 -0
- package/dist/clean.js +63 -0
- package/dist/defaults.d.ts +7 -0
- package/dist/defaults.js +30 -0
- package/dist/index.d.ts +80 -0
- package/dist/index.js +79 -0
- package/dist/params.d.ts +4 -0
- package/dist/params.js +157 -0
- package/dist/types.d.ts +9 -0
- package/dist/unwraps/aceml.d.ts +6 -0
- package/dist/unwraps/aceml.js +15 -0
- package/dist/unwraps/adjust.d.ts +6 -0
- package/dist/unwraps/adjust.js +9 -0
- package/dist/unwraps/amazonAffiliate.d.ts +6 -0
- package/dist/unwraps/amazonAffiliate.js +9 -0
- package/dist/unwraps/ampCache.d.ts +6 -0
- package/dist/unwraps/ampCache.js +13 -0
- package/dist/unwraps/awin.d.ts +6 -0
- package/dist/unwraps/awin.js +9 -0
- package/dist/unwraps/bing.d.ts +6 -0
- package/dist/unwraps/bing.js +14 -0
- package/dist/unwraps/cjNetwork.d.ts +6 -0
- package/dist/unwraps/cjNetwork.js +17 -0
- package/dist/unwraps/digidip.d.ts +6 -0
- package/dist/unwraps/digidip.js +8 -0
- package/dist/unwraps/disqus.d.ts +6 -0
- package/dist/unwraps/disqus.js +8 -0
- package/dist/unwraps/douban.d.ts +6 -0
- package/dist/unwraps/douban.js +9 -0
- package/dist/unwraps/duckduckgo.d.ts +6 -0
- package/dist/unwraps/duckduckgo.js +9 -0
- package/dist/unwraps/ebayRover.d.ts +6 -0
- package/dist/unwraps/ebayRover.js +8 -0
- package/dist/unwraps/effiliation.d.ts +6 -0
- package/dist/unwraps/effiliation.js +8 -0
- package/dist/unwraps/embedly.d.ts +6 -0
- package/dist/unwraps/embedly.js +8 -0
- package/dist/unwraps/facebook.d.ts +6 -0
- package/dist/unwraps/facebook.js +9 -0
- package/dist/unwraps/feedsportal.d.ts +6 -0
- package/dist/unwraps/feedsportal.js +44 -0
- package/dist/unwraps/firebaseDynamicLinks.d.ts +6 -0
- package/dist/unwraps/firebaseDynamicLinks.js +8 -0
- package/dist/unwraps/flipboard.d.ts +6 -0
- package/dist/unwraps/flipboard.js +9 -0
- package/dist/unwraps/gateSc.d.ts +6 -0
- package/dist/unwraps/gateSc.js +8 -0
- package/dist/unwraps/georiot.d.ts +6 -0
- package/dist/unwraps/georiot.js +8 -0
- package/dist/unwraps/gitee.d.ts +6 -0
- package/dist/unwraps/gitee.js +9 -0
- package/dist/unwraps/google.d.ts +6 -0
- package/dist/unwraps/google.js +8 -0
- package/dist/unwraps/googleAmpViewer.d.ts +6 -0
- package/dist/unwraps/googleAmpViewer.js +13 -0
- package/dist/unwraps/googleNews.d.ts +6 -0
- package/dist/unwraps/googleNews.js +8 -0
- package/dist/unwraps/googleNewsModern.d.ts +6 -0
- package/dist/unwraps/googleNewsModern.js +14 -0
- package/dist/unwraps/googleScholar.d.ts +6 -0
- package/dist/unwraps/googleScholar.js +8 -0
- package/dist/unwraps/googleTranslate.d.ts +6 -0
- package/dist/unwraps/googleTranslate.js +8 -0
- package/dist/unwraps/hashnode.d.ts +6 -0
- package/dist/unwraps/hashnode.js +9 -0
- package/dist/unwraps/icptrack.d.ts +6 -0
- package/dist/unwraps/icptrack.js +9 -0
- package/dist/unwraps/idealoPartner.d.ts +6 -0
- package/dist/unwraps/idealoPartner.js +8 -0
- package/dist/unwraps/instagram.d.ts +6 -0
- package/dist/unwraps/instagram.js +8 -0
- package/dist/unwraps/jianshuGo.d.ts +6 -0
- package/dist/unwraps/jianshuGo.js +9 -0
- package/dist/unwraps/juejin.d.ts +6 -0
- package/dist/unwraps/juejin.js +8 -0
- package/dist/unwraps/leverAnalytics.d.ts +6 -0
- package/dist/unwraps/leverAnalytics.js +8 -0
- package/dist/unwraps/linksynergy.d.ts +6 -0
- package/dist/unwraps/linksynergy.js +9 -0
- package/dist/unwraps/mailchimp.d.ts +6 -0
- package/dist/unwraps/mailchimp.js +9 -0
- package/dist/unwraps/mailpanion.d.ts +6 -0
- package/dist/unwraps/mailpanion.js +8 -0
- package/dist/unwraps/mailpgn.d.ts +6 -0
- package/dist/unwraps/mailpgn.js +8 -0
- package/dist/unwraps/mailtrack.d.ts +6 -0
- package/dist/unwraps/mailtrack.js +8 -0
- package/dist/unwraps/medium.d.ts +6 -0
- package/dist/unwraps/medium.js +9 -0
- package/dist/unwraps/mimecast.d.ts +6 -0
- package/dist/unwraps/mimecast.js +11 -0
- package/dist/unwraps/mozillaOutgoing.d.ts +6 -0
- package/dist/unwraps/mozillaOutgoing.js +13 -0
- package/dist/unwraps/narrativ.d.ts +6 -0
- package/dist/unwraps/narrativ.js +8 -0
- package/dist/unwraps/nicoMs.d.ts +6 -0
- package/dist/unwraps/nicoMs.js +12 -0
- package/dist/unwraps/outlookSafelinks.d.ts +6 -0
- package/dist/unwraps/outlookSafelinks.js +8 -0
- package/dist/unwraps/partnerAds.d.ts +6 -0
- package/dist/unwraps/partnerAds.js +8 -0
- package/dist/unwraps/pocket.d.ts +6 -0
- package/dist/unwraps/pocket.js +9 -0
- package/dist/unwraps/postmark.d.ts +6 -0
- package/dist/unwraps/postmark.js +12 -0
- package/dist/unwraps/proofpointV1.d.ts +6 -0
- package/dist/unwraps/proofpointV1.js +16 -0
- package/dist/unwraps/proofpointV2.d.ts +6 -0
- package/dist/unwraps/proofpointV2.js +16 -0
- package/dist/unwraps/proofpointV3.d.ts +6 -0
- package/dist/unwraps/proofpointV3.js +78 -0
- package/dist/unwraps/pxf.d.ts +6 -0
- package/dist/unwraps/pxf.js +8 -0
- package/dist/unwraps/recruitics.d.ts +6 -0
- package/dist/unwraps/recruitics.js +8 -0
- package/dist/unwraps/redditOut.d.ts +6 -0
- package/dist/unwraps/redditOut.js +8 -0
- package/dist/unwraps/redirectingat.d.ts +6 -0
- package/dist/unwraps/redirectingat.js +8 -0
- package/dist/unwraps/segmentfault.d.ts +6 -0
- package/dist/unwraps/segmentfault.js +14 -0
- package/dist/unwraps/shareasale.d.ts +6 -0
- package/dist/unwraps/shareasale.js +9 -0
- package/dist/unwraps/sjv.d.ts +6 -0
- package/dist/unwraps/sjv.js +8 -0
- package/dist/unwraps/skimlinks.d.ts +6 -0
- package/dist/unwraps/skimlinks.js +8 -0
- package/dist/unwraps/slack.d.ts +6 -0
- package/dist/unwraps/slack.js +9 -0
- package/dist/unwraps/smartredirect.d.ts +6 -0
- package/dist/unwraps/smartredirect.js +8 -0
- package/dist/unwraps/sspai.d.ts +6 -0
- package/dist/unwraps/sspai.js +9 -0
- package/dist/unwraps/steamLinkfilter.d.ts +6 -0
- package/dist/unwraps/steamLinkfilter.js +9 -0
- package/dist/unwraps/telegramIv.d.ts +6 -0
- package/dist/unwraps/telegramIv.js +9 -0
- package/dist/unwraps/tradedoubler.d.ts +6 -0
- package/dist/unwraps/tradedoubler.js +9 -0
- package/dist/unwraps/tumblr.d.ts +6 -0
- package/dist/unwraps/tumblr.js +9 -0
- package/dist/unwraps/valuecommerce.d.ts +6 -0
- package/dist/unwraps/valuecommerce.js +9 -0
- package/dist/unwraps/viglink.d.ts +6 -0
- package/dist/unwraps/viglink.js +8 -0
- package/dist/unwraps/vkAway.d.ts +6 -0
- package/dist/unwraps/vkAway.js +9 -0
- package/dist/unwraps/webArchive.d.ts +6 -0
- package/dist/unwraps/webArchive.js +12 -0
- package/dist/unwraps/yahooSearch.d.ts +6 -0
- package/dist/unwraps/yahooSearch.js +12 -0
- package/dist/unwraps/yandexTurbo.d.ts +6 -0
- package/dist/unwraps/yandexTurbo.js +12 -0
- package/dist/unwraps/youtube.d.ts +6 -0
- package/dist/unwraps/youtube.js +9 -0
- package/dist/unwraps/zhihu.d.ts +6 -0
- package/dist/unwraps/zhihu.js +8 -0
- package/dist/utils.d.ts +11 -0
- package/dist/utils.js +50 -0
- package/package.json +45 -0
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { createParamExtractor } from "../utils.js";
|
|
2
|
+
//#region src/unwraps/valuecommerce.ts
|
|
3
|
+
const unwrapValuecommerce = createParamExtractor({
|
|
4
|
+
hosts: "ck.jp.ap.valuecommerce.com",
|
|
5
|
+
path: "/servlet/referral",
|
|
6
|
+
params: ["vc_url"]
|
|
7
|
+
});
|
|
8
|
+
//#endregion
|
|
9
|
+
export { unwrapValuecommerce };
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
//#region src/unwraps/webArchive.ts
|
|
2
|
+
const pathRegex = /^\/web\/\d{14}\*?\/(.+)$/;
|
|
3
|
+
const unwrapWebArchive = (url) => {
|
|
4
|
+
if (url.hostname !== "web.archive.org") return;
|
|
5
|
+
const match = url.pathname.match(pathRegex);
|
|
6
|
+
if (!match) return;
|
|
7
|
+
try {
|
|
8
|
+
return decodeURIComponent(match[1]);
|
|
9
|
+
} catch {}
|
|
10
|
+
};
|
|
11
|
+
//#endregion
|
|
12
|
+
export { unwrapWebArchive };
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
//#region src/unwraps/yahooSearch.ts
|
|
2
|
+
const yahooPathRegex = /\/RU=([^/]+)\/RK=/;
|
|
3
|
+
const unwrapYahooSearch = (url) => {
|
|
4
|
+
if (url.hostname !== "r.search.yahoo.com") return;
|
|
5
|
+
const match = url.pathname.match(yahooPathRegex);
|
|
6
|
+
if (!match) return;
|
|
7
|
+
try {
|
|
8
|
+
return decodeURIComponent(match[1]);
|
|
9
|
+
} catch {}
|
|
10
|
+
};
|
|
11
|
+
//#endregion
|
|
12
|
+
export { unwrapYahooSearch };
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
//#region src/unwraps/yandexTurbo.ts
|
|
2
|
+
const turbopagesHostRegex = /\.turbopages\.org$/;
|
|
3
|
+
const turbopagesPathRegex = /^\/[^/]+\/s\/(.+)$/;
|
|
4
|
+
const dashRegex = /-/g;
|
|
5
|
+
const unwrapYandexTurbo = (url) => {
|
|
6
|
+
if (!turbopagesHostRegex.test(url.hostname)) return;
|
|
7
|
+
const match = url.pathname.match(turbopagesPathRegex);
|
|
8
|
+
if (!match) return;
|
|
9
|
+
return `https://${url.hostname.replace(turbopagesHostRegex, "").replace(dashRegex, ".")}/${match[1]}`;
|
|
10
|
+
};
|
|
11
|
+
//#endregion
|
|
12
|
+
export { unwrapYandexTurbo };
|
package/dist/utils.d.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { UrlUnwrapper } from "./types.js";
|
|
2
|
+
|
|
3
|
+
//#region src/utils.d.ts
|
|
4
|
+
type ParamExtractorConfig = {
|
|
5
|
+
hosts: string | Array<string> | RegExp;
|
|
6
|
+
path?: string;
|
|
7
|
+
params: Array<string>;
|
|
8
|
+
};
|
|
9
|
+
declare const createParamExtractor: (config: ParamExtractorConfig) => UrlUnwrapper;
|
|
10
|
+
//#endregion
|
|
11
|
+
export { ParamExtractorConfig, createParamExtractor };
|
package/dist/utils.js
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
//#region src/utils.ts
|
|
2
|
+
const createHostMatcher = (hosts) => {
|
|
3
|
+
if (hosts instanceof RegExp) return (host) => hosts.test(host);
|
|
4
|
+
const hostSet = new Set(Array.isArray(hosts) ? hosts : [hosts]);
|
|
5
|
+
return (host) => hostSet.has(host);
|
|
6
|
+
};
|
|
7
|
+
const createParamExtractor = (config) => {
|
|
8
|
+
const matchesHost = createHostMatcher(config.hosts);
|
|
9
|
+
return (url) => {
|
|
10
|
+
if (!matchesHost(url.hostname)) return;
|
|
11
|
+
if (config.path && url.pathname !== config.path) return;
|
|
12
|
+
for (const param of config.params) {
|
|
13
|
+
const value = url.searchParams.get(param);
|
|
14
|
+
if (value) return value;
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
};
|
|
18
|
+
const isHostOf = (url, hosts) => {
|
|
19
|
+
try {
|
|
20
|
+
const hostname = (url instanceof URL ? url : new URL(url)).hostname.toLowerCase();
|
|
21
|
+
return (Array.isArray(hosts) ? hosts : [hosts]).some((host) => hostname === host.toLowerCase().trim());
|
|
22
|
+
} catch {}
|
|
23
|
+
return false;
|
|
24
|
+
};
|
|
25
|
+
const isSubdomainOf = (url, domains) => {
|
|
26
|
+
try {
|
|
27
|
+
const hostname = (url instanceof URL ? url : new URL(url)).hostname.toLowerCase();
|
|
28
|
+
return (Array.isArray(domains) ? domains : [domains]).some((domain) => hostname.endsWith(`.${domain}`));
|
|
29
|
+
} catch {}
|
|
30
|
+
return false;
|
|
31
|
+
};
|
|
32
|
+
const decodeBase64Binary = (value) => {
|
|
33
|
+
try {
|
|
34
|
+
return atob(value);
|
|
35
|
+
} catch {}
|
|
36
|
+
};
|
|
37
|
+
const decodeBase64 = (value) => {
|
|
38
|
+
const binary = decodeBase64Binary(value);
|
|
39
|
+
if (binary === void 0) return;
|
|
40
|
+
const bytes = Uint8Array.from(binary, (char) => char.charCodeAt(0));
|
|
41
|
+
return new TextDecoder().decode(bytes);
|
|
42
|
+
};
|
|
43
|
+
const decodeBase64Url = (value) => {
|
|
44
|
+
return decodeBase64(value.replace(/-/g, "+").replace(/_/g, "/"));
|
|
45
|
+
};
|
|
46
|
+
const getUtf8ByteLength = (value) => {
|
|
47
|
+
return new TextEncoder().encode(value).length;
|
|
48
|
+
};
|
|
49
|
+
//#endregion
|
|
50
|
+
export { createParamExtractor, decodeBase64, decodeBase64Binary, decodeBase64Url, getUtf8ByteLength, isHostOf, isSubdomainOf };
|
package/package.json
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "urlpurify",
|
|
3
|
+
"description": "Unwrap redirect, affiliate, and tracking wrapper URLs and strip tracking parameters. Turn noisy links into clean, direct URLs.",
|
|
4
|
+
"repository": {
|
|
5
|
+
"type": "git",
|
|
6
|
+
"url": "https://github.com/macieklamberski/urlpurify.git"
|
|
7
|
+
},
|
|
8
|
+
"bugs": {
|
|
9
|
+
"url": "https://github.com/macieklamberski/urlpurify/issues"
|
|
10
|
+
},
|
|
11
|
+
"license": "MIT",
|
|
12
|
+
"author": "Maciej Lamberski",
|
|
13
|
+
"sideEffects": false,
|
|
14
|
+
"keywords": [
|
|
15
|
+
"url",
|
|
16
|
+
"clean",
|
|
17
|
+
"tracking",
|
|
18
|
+
"utm",
|
|
19
|
+
"redirect",
|
|
20
|
+
"unwrap",
|
|
21
|
+
"affiliate",
|
|
22
|
+
"privacy"
|
|
23
|
+
],
|
|
24
|
+
"type": "module",
|
|
25
|
+
"exports": {
|
|
26
|
+
".": {
|
|
27
|
+
"types": "./dist/index.d.ts",
|
|
28
|
+
"default": "./dist/index.js"
|
|
29
|
+
}
|
|
30
|
+
},
|
|
31
|
+
"files": [
|
|
32
|
+
"dist"
|
|
33
|
+
],
|
|
34
|
+
"scripts": {
|
|
35
|
+
"prepare": "lefthook install",
|
|
36
|
+
"build": "tsdown src/index.ts --format esm --dts --clean --unbundle --no-fixed-extension",
|
|
37
|
+
"test": "bun test"
|
|
38
|
+
},
|
|
39
|
+
"devDependencies": {
|
|
40
|
+
"@types/bun": "^1.3.14",
|
|
41
|
+
"kvalita": "^1.14.0",
|
|
42
|
+
"tsdown": "^0.22.2"
|
|
43
|
+
},
|
|
44
|
+
"version": "1.0.0"
|
|
45
|
+
}
|