From 276bb92d08d89c5f722648a8b6f3c091077f4491 Mon Sep 17 00:00:00 2001 From: Swrup Date: Sun, 3 Apr 2022 16:45:33 +0200 Subject: [PATCH] first commit --- .gitignore | 1 + .ocamlformat | 42 +++++++++++++++ LICENSE.md | 8 +++ README.md | 23 ++++++++ clear_url.opam | 31 +++++++++++ dune-project | 29 ++++++++++ src/clear_url.ml | 131 +++++++++++++++++++++++++++++++++++++++++++++ src/dune | 18 +++++++ src/rules.json | 1 + src/updaterules.ml | 10 ++++ 10 files changed, 294 insertions(+) create mode 100644 .gitignore create mode 100644 .ocamlformat create mode 100644 LICENSE.md create mode 100644 README.md create mode 100644 clear_url.opam create mode 100644 dune-project create mode 100644 src/clear_url.ml create mode 100644 src/dune create mode 100644 src/rules.json create mode 100644 src/updaterules.ml diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e35d885 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +_build diff --git a/.ocamlformat b/.ocamlformat new file mode 100644 index 0000000..cc34f68 --- /dev/null +++ b/.ocamlformat @@ -0,0 +1,42 @@ +version=0.20.1 +assignment-operator=end-line +break-cases=fit +break-fun-decl=wrap +break-fun-sig=wrap +break-infix=wrap +break-infix-before-func=false +break-separators=before +break-sequences=true +cases-exp-indent=2 +cases-matching-exp-indent=normal +doc-comments=before +doc-comments-padding=2 +doc-comments-tag-only=default +dock-collection-brackets=false +exp-grouping=preserve +field-space=loose +if-then-else=compact +indicate-multiline-delimiters=space +indicate-nested-or-patterns=unsafe-no +infix-precedence=indent +leading-nested-match-parens=false +let-and=sparse +let-binding-spacing=compact +let-module=compact +margin=80 +max-indent=68 +module-item-spacing=sparse +ocp-indent-compat=false +parens-ite=false +parens-tuple=always +parse-docstrings=true +sequence-blank-line=preserve-one +sequence-style=terminator +single-case=compact +space-around-arrays=true +space-around-lists=true +space-around-records=true +space-around-variants=true +type-decl=sparse +wrap-comments=false +wrap-fun-args=true diff --git a/LICENSE.md b/LICENSE.md new file mode 100644 index 0000000..c0fd71b --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,8 @@ +The ISC License (ISC) +===================== + +Copyright © 2022, TODO + +Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..9704e0b --- /dev/null +++ b/README.md @@ -0,0 +1,23 @@ +# clear_url + +clear_url is an [OCaml] library to remove tracking elements from URLs. + +It is based on [ClearURLs](https://gitlab.com/KevinRoebert/ClearUrls) + + +## Usage + +```ocaml +let dirty_url = "https://example.com?utm_source=newsletter1&utm_medium=email&utm_campaign=sale" +let () = Format.printf (Clear_url.clean dirty_url) +``` + +## About + +- [LICENSE] + +[example]: ./example +[LICENSE]: ./LICENSE.md +[opam file]: ./clear_url.opam + +[OCaml]: https://ocaml.org diff --git a/clear_url.opam b/clear_url.opam new file mode 100644 index 0000000..5c62a76 --- /dev/null +++ b/clear_url.opam @@ -0,0 +1,31 @@ +# This file is generated by dune, edit dune-project instead +opam-version: "2.0" +synopsis: "OCaml library to remove tracking in URLs" +description: "Use `Clear_url.clean` to remove tracking elements from URLs." +authors: ["swrup "] +license: "ISC" +tags: ["clear_url" "clean" "url" "tracker" "web3"] +homepage: "https://git.zapashcanon.fr/swrup/clear-url" +bug-reports: "https://git.zapashcanon.fr/swrup/ocaml-clear-url/issues" +depends: [ + "dune" {>= "2.9"} + "ocaml" {>= "4.08"} + "odoc" {with-doc} +] +build: [ + ["dune" "subst"] {dev} + [ + "dune" + "build" + "-p" + name + "-j" + jobs + "--promote-install-files=false" + "@install" + "@runtest" {with-test} + "@doc" {with-doc} + ] + ["dune" "install" "-p" name "--create-install-files" name] +] +dev-repo: "git+https://git.zapashcanon.fr/swrup/clear-url.git" diff --git a/dune-project b/dune-project new file mode 100644 index 0000000..b6e3de7 --- /dev/null +++ b/dune-project @@ -0,0 +1,29 @@ +(lang dune 2.9) + +(implicit_transitive_deps false) + +(name clear_url) + +(license ISC) + +(authors "swrup ") + +(source + (uri git+https://git.zapashcanon.fr/swrup/clear-url.git)) + +(homepage https://git.zapashcanon.fr/swrup/clear-url) + +(bug_reports https://git.zapashcanon.fr/swrup/ocaml-clear-url/issues) + +(generate_opam_files true) + +(package + (name clear_url) + (synopsis "OCaml library to remove tracking in URLs") + (description + "Use `Clear_url.clean` to remove tracking elements from URLs.") + (tags + (clear_url clean url tracker web3)) + (depends + (ocaml + (>= 4.08)))) diff --git a/src/clear_url.ml b/src/clear_url.ml new file mode 100644 index 0000000..a26e282 --- /dev/null +++ b/src/clear_url.ml @@ -0,0 +1,131 @@ +open Yojson.Basic.Util + +let file = + match Fpath.of_string "./src/rules.json" with + | Ok f -> f + | Error (`Msg s) -> failwith s + +let parsed = + match Bos.OS.File.read file with + | Error (`Msg s) -> failwith s + | Ok s -> Yojson.Safe.to_basic (Yojson.Safe.from_string s) + +type regexps = + { urlpattern : Re.re + ; rawrules : Re.re array + ; rules : Re.re array + ; exceptions : Re.re array + ; redirections : Re.re array + } + +let values = parsed |> member "providers" |> values |> Array.of_list + +let regexps_array = + Array.map + (fun value -> + let urlpattern = + value |> member "urlPattern" |> to_string |> Re.Perl.re |> Re.compile + in + + let get_array key = + value + |> (fun el -> + (*we can't use `filter_member "rules"` here because empty list + * where removed from the file ..*) + match member key el with + | `Null -> (*it was an empty list *) [] + | json -> to_list json ) + |> filter_string |> Array.of_list + in + let compile_array l = + l |> Array.map (fun s -> Re.compile @@ Re.Perl.re s) + in + + (* referralMarketing should be in rules *) + let rules = + Array.append (get_array "rules") (get_array "referralMarketing") + |> Array.map (Format.sprintf "(?:&|[/?#&])(?:%s=[^&]*)") + |> compile_array + in + let rawrules = get_array "rawRules" |> compile_array in + let exceptions = get_array "exceptions" |> compile_array in + let redirections = get_array "redirections" |> compile_array in + + { urlpattern; rawrules; rules; exceptions; redirections } ) + values + +let split_queries_regex = Re.compile (Re.Perl.re "[^\\/|\\?|&]+=[^\\/|\\?|&]+") + +(* see https://docs.clearurls.xyz/1.23.0/specs/rules/ *) +let clean url = + (* filter by url pattern *) + let regexps_list = + Array.fold_left + (fun acc regexps -> + if Re.matches regexps.urlpattern url <> [] then regexps :: acc else acc + ) + [] regexps_array + in + + let is_exception = + List.exists + (fun t -> + Array.exists (fun except -> Re.matches except url <> []) t.exceptions ) + regexps_list + in + if is_exception then url + else + (*TODO implement redirection, is it always percent-encoded ?? *) + + (* apply rawrules to whole url *) + let url = + List.fold_left + (fun acc t -> + Array.fold_left + (fun acc rawrule -> Re.replace_string ~all:true rawrule ~by:"" acc) + acc t.rawrules ) + url regexps_list + in + + let uri = Uri.of_string url in + match Uri.verbatim_query uri with + | None -> url + | Some query -> + let query = "?" ^ query in + let fragment = + Option.fold ~none:"" ~some:(fun s -> "#" ^ s) (Uri.fragment uri) + in + (* let query = "?" ^ Re.replace_string get_query_regex ~by:"" url in *) + let base = + String.sub url 0 + (String.length url - String.length query - String.length fragment) + in + + (* apply rules to query *) + let apply_rules s = + List.fold_left + (fun s t -> + Array.fold_left + (fun acc rule -> Re.replace_string ~all:true rule ~by:"" acc) + s t.rules ) + s regexps_list + in + + let clean_query = apply_rules query in + + (* TODO fragment might contains tracking fields as well (really?) *) + let query_list = Re.matches split_queries_regex clean_query in + + let pp_field_list = + Format.pp_print_list + ~pp_sep:(fun fmt () -> Format.pp_print_string fmt "&") + Format.pp_print_string + in + let pp_query fmt query_list = + match query_list with + | [] -> Format.fprintf fmt "" + | query_list -> Format.fprintf fmt "?%a" pp_field_list query_list + in + Format.asprintf "%s%a%s" base pp_query query_list fragment + +(* TODO implement link unshortening like https://github.com/AmanoTeam/Unalix/blob/master/unalix/core/url_unshort.py *) diff --git a/src/dune b/src/dune new file mode 100644 index 0000000..3185e5d --- /dev/null +++ b/src/dune @@ -0,0 +1,18 @@ +(library + (name clear_url) + (modules clear_url) + (libraries bos fpath re uri yojson)) + +(executable + (name updaterules) + (modules updaterules) + (libraries lwt lwt.unix cohttp-lwt cohttp-lwt-unix uri yojson)) + +(rule + (target rules.json) + (deps updaterules.exe) + (mode promote) + (action + (with-stdout-to + rules.json + (run ./updaterules.exe)))) diff --git a/src/rules.json b/src/rules.json new file mode 100644 index 0000000..e7ccedd --- /dev/null +++ b/src/rules.json @@ -0,0 +1 @@ +{"providers":{"amazon":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?amazon(?:\\.[a-z]{2,}){1,}","rules":["p[fd]_rd_[a-z]*","qid","srs?","__mk_[a-z]{1,3}_[a-z]{1,3}","spIA","ms3_c","[a-z%0-9]*ie","refRID","colii?d","[^a-z%0-9]adId","qualifier","_encoding","smid","field-lbr_brands_browse-bin","ref_?","th","sprefix","crid","keywords","cv_ct_[a-z]+","linkCode","creativeASIN","ascsubtag","aaxitk","hsa_cr_id","sb-ci-[a-z]+","rnid","dchild","camp","creative","s"],"rawRules":["\\/ref=[^/?]*"],"referralMarketing":["tag","ascsubtag"],"exceptions":["^https?:\\/\\/(?:[a-z0-9-]+\\.)*?amazon(?:\\.[a-z]{2,}){1,}\\/gp\\/.*?(?:redirector.html|cart\\/ajax-update.html|video\\/api\\/)","^https?:\\/\\/(?:[a-z0-9-]+\\.)*?amazon(?:\\.[a-z]{2,}){1,}\\/(?:hz\\/reviews-render\\/ajax\\/|message-us\\?|s\\?)"]},"amazon search":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?amazon(?:\\.[a-z]{2,}){1,}\\/s\\?","rules":["p[fd]_rd_[a-z]*","qid","srs?","__mk_[a-z]{1,3}_[a-z]{1,3}","spIA","ms3_c","[a-z%0-9]*ie","refRID","colii?d","[^a-z%0-9]adId","qualifier","_encoding","smid","field-lbr_brands_browse-bin","ref_?","th","sprefix","crid","cv_ct_[a-z]+","linkCode","creativeASIN","ascsubtag","aaxitk","hsa_cr_id","sb-ci-[a-z]+","rnid","dchild","camp","creative"],"rawRules":["\\/ref=[^/?]*"],"referralMarketing":["tag"]},"fls-na.amazon":{"completeProvider":true,"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?fls-na\\.amazon(?:\\.[a-z]{2,}){1,}"},"google":{"forceRedirection":true,"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?google(?:\\.[a-z]{2,}){1,}","rules":["ved","bi[a-z]*","gfe_[a-z]*","ei","source","gs_[a-z]*","site","oq","esrc","uact","cd","cad","gws_[a-z]*","atyp","vet","zx","_u","je","dcr","ie","sei","sa","dpr","btn[a-z]*","usg","cd","cad","uact","aqs","sourceid","sxsrf","rlz","i-would-rather-use-firefox","pcampaignid"],"referralMarketing":["referrer"],"exceptions":["^https?:\\/\\/mail\\.google\\.com\\/mail\\/u\\/","^https?:\\/\\/(?:docs|accounts)\\.google(?:\\.[a-z]{2,}){1,}","^https?:\\/\\/([a-z0-9-\\.])*drive\\.google\\.com\\/videoplayback","^https?:\\/\\/(?:[a-z0-9-]+\\.)*?google(?:\\.[a-z]{2,}){1,}(?:\\/upload)?\\/drive\\/","^https?:\\/\\/news\\.google\\.com.*\\?hl=.","^https?:\\/\\/hangouts\\.google\\.com\\/webchat.*?zx=.","^https?:\\/\\/client-channel\\.google\\.com\\/client-channel.*?zx=.","^https?:\\/\\/(?:[a-z0-9-]+\\.)*?google(?:\\.[a-z]{2,}){1,}\\/s\\?tbm=map.*?gs_[a-z]*=.","^https?:\\/\\/(?:[a-z0-9-]+\\.)*?google(?:\\.[a-z]{2,}){1,}\\/(?:complete\\/search|setprefs|searchbyimage)","^https?:\\/\\/(?:[a-z0-9-]+\\.)*?google(?:\\.[a-z]{2,}){1,}\\/(?:appsactivity|aclk\\?)"],"redirections":["^https?:\\/\\/(?:[a-z0-9-]+\\.)*?google(?:\\.[a-z]{2,}){1,}\\/url\\?.*?(?:url|q)=(https?[^&]+)","^https?:\\/\\/(?:[a-z0-9-]+\\.)*?google(?:\\.[a-z]{2,}){1,}\\/.*?adurl=([^&]+)","^https?:\\/\\/(?:[a-z0-9-]+\\.)*?google(?:\\.[a-z]{2,}){1,}\\/amp\\/s\\/([^&]+)"]},"googleSearch":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?google(?:\\.[a-z]{2,}){1,}\\/search\\?","rules":["client","sclient"]},"googlesyndication":{"completeProvider":true,"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?googlesyndication\\.com"},"doubleclick":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?doubleclick(?:\\.[a-z]{2,}){1,}","redirections":["^https?:\\/\\/(?:[a-z0-9-]+\\.)*?doubleclick(?:\\.[a-z]{2,}){1,}\\/.*?tag_for_child_directed_treatment=;%3F([^&]*)"]},"googleadservices":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?googleadservices\\.com","redirections":["^https?:\\/\\/(?:[a-z0-9-]+\\.)*?googleadservices\\.com\\/.*?adurl=([^&]*)"]},"globalRules":{"urlPattern":".*","rules":["(?:%3F)?utm(?:_[a-z_]*)?","(?:%3F)?ga_[a-z_]+","(?:%3F)?yclid","(?:%3F)?_openstat","(?:%3F)?fb_action_(?:types|ids)","(?:%3F)?fb_(?:source|ref)","(?:%3F)?fbclid","(?:%3F)?action_(?:object|type|ref)_map","(?:%3F)?gs_l","(?:%3F)?mkt_tok","(?:%3F)?hmb_(?:campaign|medium|source)","(?:%3F)?ref_?","(?:%3F)?referrer","(?:%3F)?gclid","(?:%3F)?otm_[a-z_]*","(?:%3F)?cmpid","(?:%3F)?os_ehash","(?:%3F)?_ga","(?:%3F)?_gl","(?:%3F)?__twitter_impression","(?:%3F)?wt_?z?mc","(?:%3F)?wtrid","(?:%3F)?[a-z]?mc","(?:%3F)?dclid","Echobox","(?:%3F)?spm","(?:%3F)?vn(?:_[a-z]*)+","(?:%3F)?tracking_source","(?:%3F)?ceneo_spo"],"exceptions":["^https?:\\/\\/(?:[a-z0-9-]+\\.)*?matrix\\.org\\/_matrix\\/","^https?:\\/\\/(?:[a-z0-9-]+\\.)*?(?:cloudflare\\.com|prismic\\.io|tangerine\\.ca|gitlab\\.com)","^https?:\\/\\/myaccount.google(?:\\.[a-z]{2,}){1,}","^https?:\\/\\/(?:[a-z0-9-]+\\.)*?gcsip\\.(?:com|nl)[^?]*\\?.*?&?ref_?=.","^https?:\\/\\/[^/]+/[^/]+/[^/]+\\/-\\/refs\\/switch[^?]*\\?.*?&?ref_?=.","^https?:\\/\\/bugtracker\\.[^/]*\\/[^?]+\\?.*?&?ref_?=[^/?&]*","^https?:\\/\\/comment-cdn\\.9gag\\.com\\/.*?comment-list.json\\?","^https?:\\/\\/(?:[a-z0-9-]+\\.)*?battle\\.net\\/login","^https?:\\/\\/blizzard\\.com\\/oauth2","^https?:\\/\\/kreditkarten-banking\\.lbb\\.de","^https?:\\/\\/www\\.tinkoff\\.ru","^https?:\\/\\/www\\.cyberport\\.de\\/adscript\\.php","^https?:\\/\\/(?:[a-z0-9-]+\\.)*?tweakers\\.net\\/ext\\/lt\\.dsp\\?.*?(?:%3F)?&?ref_?=.","^https?:\\/\\/git(lab)?\\.[^/]*\\/[^?]+\\?.*?&?ref_?=[^/?&]*","^https?:\\/\\/(?:[a-z0-9-]+\\.)*?amazon(?:\\.[a-z]{2,}){1,}\\/message-us\\?","^https?:\\/\\/authorization\\.td\\.com","^https?:\\/\\/support\\.steampowered\\.com","^https?:\\/\\/privacy\\.vakmedianet\\.nl\\/.*?ref=","^https?:\\/\\/sso\\.serverplan\\.com\\/manage2fa\\/check\\?ref=","^https?:\\/\\/login\\.meijer\\.com\\/.*?\\?ref=","^https?:\\/\\/(?:[a-z0-9-]+\\.)*?facebook\\.com\\/(?:login_alerts|ajax|should_add_browser)/","^https?:\\/\\/(?:[a-z0-9-]+\\.)*?facebook\\.com\\/groups\\/member_bio\\/bio_dialog\\/","^https?:\\/\\/api\\.taiga\\.io","^https?:\\/\\/(?:[a-z0-9-]+\\.)*?gog\\.com\\/click\\.html","^https?:\\/\\/login\\.progressive\\.com","^https?:\\/\\/www\\.sephora\\.com\\/api\\/","^https?:\\/\\/www\\.contestgirl\\.com","^https?:\\/\\/(?:[a-z0-9-]+\\.)*?agenciatributaria\\.gob\\.es","^https?:\\/\\/login\\.ingbank\\.pl","^wss?:\\/\\/(?:[a-z0-9-]+\\.)*?zoom\\.us","^https?:\\/\\/api\\.bilibili\\.com","^https?:\\/\\/(?:[a-z0-9-]+\\.)*?onet\\.pl\\/[^?]*\\?.*?utm_campaign=.","^https?:\\/\\/(?:[a-z0-9-]+\\.)*?stripe\\.com\\/[^?]+.*?&?referrer=[^/?&]*","^https?:\\/\\/(?:[a-z0-9-]+\\.)*?lichess\\.org\\/login.*?&?referrer=.*?","^https?:\\/\\/like.co\\/api\\/like\\/likebutton\\/[^?]+.*?&?referrer=[^/?&]*","^https?:\\/\\/button.like.co\\/in\\/.*?&?referrer=[^/?&]*","^https?:\\/\\/www\\.mma\\.go\\.kr","^https?:\\/\\/(?:[a-z0-9-]+\\.)*?github\\.com","^https?:\\/\\/(?:[a-z0-9-]+\\.)*?billiger\\.de\\/.*?mc="]},"adtech":{"completeProvider":true,"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?adtech(?:\\.[a-z]{2,}){1,}"},"contentpass":{"completeProvider":true,"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?contentpass\\.(?:net|de)"},"bf-ad":{"completeProvider":true,"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?bf-ad(?:\\.[a-z]{2,}){1,}"},"amazon-adsystem":{"completeProvider":true,"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?amazon-adsystem(?:\\.[a-z]{2,}){1,}","exceptions":["^https?:\\/\\/(?:[a-z0-9-]+\\.)*?amazon-adsystem(?:\\.[a-z]{2,}){1,}\\/v3\\/oor\\?"],"redirections":["^https?:\\/\\/(?:[a-z0-9-]+\\.)*?amazon-adsystem(?:\\.[a-z]{2,}){1,}\\/x\\/c\\/.+?\\/([^&]+)"]},"adsensecustomsearchads":{"completeProvider":true,"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?adsensecustomsearchads(?:\\.[a-z]{2,}){1,}"},"youtube":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?youtube\\.com","rules":["feature","gclid","kw"],"exceptions":["^https?:\\/\\/(?:[a-z0-9-]+\\.)*?youtube\\.com\\/signin\\?.*?"],"redirections":["^https?:\\/\\/(?:[a-z0-9-]+\\.)*?youtube\\.com\\/redirect?.*?q=([^&]*)"]},"youtube_pagead":{"completeProvider":true,"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?youtube\\.com\\/pagead"},"youtube_apiads":{"completeProvider":true,"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?youtube\\.com\\/api\\/stats\\/ads"},"facebook":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?facebook\\.com","rules":["hc_[a-z_%\\[\\]0-9]*","[a-z]*ref[a-z]*","__tn__","eid","__(?:xts|cft)__(?:\\[|%5B)\\d(?:\\]|%5D)","comment_tracking","dti","app","video_source","ftentidentifier","pageid","padding","ls_ref","action_history","tracking","referral_code","referral_story_type"],"exceptions":["^https?:\\/\\/(?:[a-z0-9-]+\\.)*?facebook\\.com\\/.*?(plugins|ajax)\\/","^https?:\\/\\/(?:[a-z0-9-]+\\.)*?facebook\\.com\\/dialog\\/(?:share|send)","^https?:\\/\\/(?:[a-z0-9-]+\\.)*?facebook\\.com\\/groups\\/member_bio\\/bio_dialog\\/","^https?:\\/\\/(?:[a-z0-9-]+\\.)*?facebook\\.com\\/photo\\.php\\?","^https?:\\/\\/(?:[a-z0-9-]+\\.)*?facebook\\.com\\/privacy\\/specific_audience_selector_dialog\\/","^https?:\\/\\/(?:[a-z0-9-]+\\.)*?facebook\\.com\\/photo\\/download\\/"],"redirections":["^https?:\\/\\/l[a-z]?\\.facebook\\.com/l\\.php\\?.*?u=(https?%3A%2F%2F[^&]*)"]},"twitter":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?twitter.com","rules":["(?:ref_?)?src","s","cn","ref_url"]},"reddit":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?reddit.com","rules":["%24deep_link","\\$deep_link","correlation_id","ref_campaign","ref_source","%243p","\\$3p","%24original_url","\\$original_url","_branch_match_id"],"redirections":["^https?:\\/\\/out\\.reddit\\.com\\/.*?url=([^&]*)","^https?:\\/\\/click\\.redditmail\\.com\\/.*?url=([^&]*)"]},"netflix":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?netflix.com","rules":["trackId","tctx","jb[a-z]*?"]},"techcrunch":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?techcrunch\\.com","rules":["ncid","sr","sr_share"]},"bing":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?bing(?:\\.[a-z]{2,}){1,}","rules":["cvid","form","sk","sp","sc","qs","qp"],"exceptions":["^https?:\\/\\/(?:[a-z0-9-]+\\.)*?bing(?:\\.[a-z]{2,}){1,}\\/WS\\/redirect\\/"]},"tweakers":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?tweakers\\.net","rules":["nb","u"]},"twitch":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?twitch\\.com","rules":["tt_medium","tt_content"]},"vivaldi":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?vivaldi\\.com","rules":["pk_campaign","pk_kwd"]},"indeed":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?indeed\\.com","rules":["from","alid","[a-z]*tk"],"exceptions":["^https?:\\/\\/(?:[a-z0-9-]+\\.)*?indeed\\.com\\/rc\\/clk"]},"hhdotru":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?hh\\.ru","rules":["vss","t","swnt","grpos","ptl","stl","exp","plim"]},"ebay":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?ebay(?:\\.[a-z]{2,}){1,}","rules":["_trkparms","_trksid","_from","hash"],"redirections":["^https?:\\/\\/(?:[a-z0-9-]+\\.)*?rover\\.ebay(?:\\.[a-z]{2,}){1,}\\/rover.*mpre=([^&]*)"]},"cnet":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?cnet\\.com","rules":["ftag"]},"imdb.com":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?imdb\\.com","rules":["ref_","pf_rd_[a-z]*"]},"govdelivery.com":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?govdelivery\\.com","redirections":["^https?:\\/\\/(?:[a-z0-9-]+\\.)*?links\\.govdelivery\\.com.*\\/track\\?.*(https?:\\/\\/.*)"]},"walmart.com":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?walmart\\.com","rules":["u1","ath[a-z]*"]},"net-parade.it":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?net\\-parade\\.it","rules":["pl"]},"prvnizpravy.cz":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?prvnizpravy\\.cz","rules":["xid"]},"youku.com":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?youku\\.com","rules":["tpa"]},"nytimes.com":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?nytimes\\.com","rules":["smid"]},"tchibo.de":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?tchibo\\.de","rules":["wbdcd"]},"steampowered":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?steampowered\\.com","rules":["snr"]},"steamcommunity":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?steamcommunity\\.com","redirections":["^https?:\\/\\/(?:[a-z0-9-]+\\.)*?steamcommunity\\.com\\/linkfilter\\/\\?url=([^&]*)"]},"mozaws.net":{"urlPattern":"https?:\\/\\/outgoing\\.prod\\.mozaws\\.net\\/","redirections":["https?:\\/\\/[^/]+\\/v1\\/[0-9a-f]{64}\\/(.*)"]},"shutterstock.com":{"urlPattern":"https?:\\/\\/([a-z0-9-.]*\\.)shutterstock\\.com","rules":["src"]},"mozilla.org":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?mozilla\\.org","rules":["src","platform","redirect_source"],"exceptions":["^https?:\\/\\/(?:[a-z0-9-]+\\.)*?mozilla.org\\/api"]},"readdc.com":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?readdc\\.com","rules":["ref"]},"dailycodingproblem.com":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?dailycodingproblem\\.com","rules":["email"]},"github.com":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?github\\.com","rules":["email_token","email_source"]},"deviantart.com":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?deviantart\\.com","redirections":["^https?:\\/\\/(?:[a-z0-9-]+\\.)*?deviantart\\.com\\/.*?\\/outgoing\\?(.*)"]},"site2.com":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?site2\\.com","redirections":["^https?:\\/\\/(?:[a-z0-9-]+\\.)*?site2\\.com.*?\\?.*=(.*)"]},"site.com":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?site\\.com","redirections":["^https?:\\/\\/(?:[a-z0-9-]+\\.)*?site\\.com.*?\\?to=([^&]*)"]},"site3.com":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?site3\\.com","redirections":["^https?:\\/\\/(?:[a-z0-9-]+\\.)*?site3\\.com.*?\\?r=([^&]*)"]},"aliexpress":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?aliexpress(?:\\.[a-z]{2,}){1,}","rules":["ws_ab_test","btsid","algo_expid","algo_pvid","gps-id","scm[_a-z-]*","cv","af","mall_affr","sk","dp","terminal_id","aff_request_id"]},"mozillazine.org":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?mozillazine\\.org","rules":["sid"]},"9gag.com":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?9gag\\.com","rules":["ref"],"exceptions":["^https?:\\/\\/comment-cdn\\.9gag\\.com\\/.*?comment-list.json\\?"]},"linksynergy.com":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?linksynergy\\.com","redirections":["^https?:\\/\\/(?:[a-z0-9-]+\\.)*?linksynergy\\.com\\/.*?murl=([^&]*)"]},"giphy.com":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?giphy\\.com","rules":["ref"]},"gate.sc":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?gate\\.sc","redirections":["^https?:\\/\\/(?:[a-z0-9-]+\\.)*?gate\\.sc\\/.*?url=([^&]*)"]},"vk.com":{"urlPattern":"^https?:\\/\\/vk\\.com","redirections":["^https?:\\/\\/vk\\.com\\/away\\.php\\?to=([^&]*)"]},"woot.com":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?woot\\.com","rules":["ref_?"]},"vitamix.com":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?vitamix\\.com","rules":["_requestid","cid","dl","di","sd","bi"]},"curseforge.com":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?curseforge\\.com","redirections":["^https?:\\/\\/(?:[a-z0-9-]+\\.)*?curseforge\\.com\\/linkout\\?remoteUrl=([^&]*)"]},"messenger.com":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?messenger\\.com","redirections":["^https?:\\/\\/l\\.messenger\\.com\\/l\\.php\\?u=([^&]*)"]},"nypost.com":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?nypost\\.com","rules":["__twitter_impression"]},"ozon.ru":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?ozon\\.ru","rules":["partner"]},"norml.org":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?norml\\.org","rules":["link_id","can_id","source","email_referrer","email_subject"]},"LinkedIn":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?linkedin\\.com","rules":["refId","trk","li[a-z]{2}"]},"LinkedIn Learning":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?linkedin\\.com\\/learning","rules":["u"]},"smartredirect.de":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?smartredirect\\.de","redirections":["^https?:\\/\\/(?:[a-z0-9-]+\\.)*?smartredirect\\.de.*?url=([^&]*)"]},"SPIEGEL ONLINE":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?spiegel\\.de","rules":["b"]},"rutracker.org":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?rutracker\\.org","redirections":[".*url=([^&]*)"]},"instagram":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?instagram\\.com","rules":["igshid"],"redirections":[".*u=([^&]*)"]},"lazada.com.my":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?lazada\\.com\\.my","rules":["ad_src","did","pa","mp","impsrc","cid","pos"]},"imgsrc.ru":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?imgsrc\\.ru","redirections":["^https?:\\/\\/(?:[a-z0-9-]+\\.)*?dlp\\.imgsrc\\.ru\\/go\\/\\d+\\/\\d+\\/\\d+\\/([^&]*)"]},"boredpanda.com":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?boredpanda\\.com","rules":["h"]},"awstrack.me":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?awstrack\\.me","redirections":["^https?:\\/\\/(?:[a-z0-9-]+\\.)*?awstrack\\.me\\/.*\\/(https?.*?)\\/"]},"exactag.com":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?exactag\\.com","redirections":["^https?:\\/\\/(?:[a-z0-9-]+\\.)*?exactag\\.com.*url=([^&]*)"]},"bahn.de":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?bahn\\.de","rules":["dbkanal_[0-9]{3}"]},"disq.us":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?disq\\.us","rules":["cuid"],"redirections":["^https?:\\/\\/(?:[a-z0-9-]+\\.)*?disq\\.us\\/.*?url=([^&]*)%3A"]},"anonym.to":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?anonym\\.to","redirections":["^https?:\\/\\/(?:[a-z0-9-]+\\.)*?anonym\\.to.*\\?([^&]*)"]},"moosejaw.com":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?moosejaw\\.com","rules":["cm_lm","cm_mmc","webUserId","spMailingID","spUserID","spJobID","spReportId"]},"spotify.com":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?spotify\\.com","rules":["si"]},"yandex":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?(?:yandex(?:\\.[a-z]{2,}){1,}|ya\\.ru)","rules":["lr","redircnt"]},"healio.com":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?healio\\.com","rules":["ecp","m_bt"]},"zoho.com":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?zoho\\.com","rules":["iref"]},"snapchat.com":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?snapchat\\.com","rules":["sc_referrer","sc_ua"]},"medium.com":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?medium\\.com","rules":["source"]},"swp.de":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?swp\\.de","rules":["source"]},"wps.com":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?wps\\.com","rules":["from"]},"accounts.firefox.com":{"urlPattern":"^https?:\\/\\/(?:accounts\\.)?firefox\\.com","rules":["context","entrypoint","form_type"]},"support.mozilla.org":{"urlPattern":"^https?:\\/\\/(?:support\\.)?mozilla\\.org","rules":["as"]},"ClearURLsTest":{"urlPattern":"^https?:\\/\\/kevinroebert\\.gitlab\\.io\\/ClearUrls\\/void\\/index\\.html","rules":["test"],"redirections":["^https?:\\/\\/kevinroebert\\.gitlab\\.io\\/ClearUrls\\/void\\/index\\.html\\?url=([^&]*)"]},"ClearURLsTestBlock":{"completeProvider":true,"urlPattern":"^https?:\\/\\/kevinroebert\\.gitlab\\.io\\/ClearUrls\\/void\\/block\\.svg"},"ClearURLsTest2":{"urlPattern":"^https?:\\/\\/test\\.clearurls\\.xyz\\/void\\/index\\.html","rules":["test"],"redirections":["^https?:\\/\\/test\\.clearurls\\.xyz\\/void\\/index\\.html\\?url=([^&]*)"]},"ClearURLsTestBlock2":{"completeProvider":true,"urlPattern":"^https?:\\/\\/test\\.clearurls\\.xyz\\/void\\/block\\.svg"},"diepresse.com":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?diepresse\\.com","rules":["from","xtor","xt_at"]},"newsletter.lidl.com":{"urlPattern":"^https?:\\/\\/newsletter\\.lidl(?:\\.[a-z]{2,}){1,}","rules":["x"]},"allegro.pl":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?allegro\\.pl","rules":["reco_id","sid"]},"backcountry.com":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?backcountry\\.com","rules":["CMP_SKU","MER","mr:trackingCode","mr:device","mr:adType","iv_","CMP_ID","k_clickid","rmatt","INT_ID","ti","fl"],"referralMarketing":["mr:referralID"]},"meetup.com":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?meetup\\.com","rules":["rv","_xtd"]},"apple.com":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?apple\\.com","rules":["app","ign-itsc[a-z]+"]},"alabout.com":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?alabout\\.com","redirections":["^https?:\\/\\/(?:[a-z0-9-]+\\.)*?alabout\\.com.*url=([^&]*)"]},"newyorker.com":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?newyorker\\.com","rules":["source","bxid","cndid","esrc","mbid"]},"gog.com":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?gog\\.com","rules":["track_click","link_id"]},"tradedoubler.com":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?tradedoubler\\.com","redirections":["^https?:\\/\\/(?:[a-z0-9-]+\\.)*?tradedoubler\\.com.*(?:url|_td_deeplink)=([^&]*)"]},"theguardian.com":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?theguardian\\.com","rules":["CMP"]},"srvtrck.com":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?srvtrck\\.com","redirections":["^https?:\\/\\/(?:[a-z0-9-]+\\.)*?srvtrck\\.com.*url=([^&]*)"]},"mysku.ru":{"urlPattern":"^https?:\\/\\/mysku\\.ru","redirections":["^https?:\\/\\/mysku\\.ru.*r=([^&]*)"]},"admitad.com":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?admitad\\.com","redirections":["^https?:\\/\\/(?:[a-z0-9-]+\\.)*?admitad\\.com.*ulp=([^&]*)"]},"taobao.com":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?taobao\\.com","rules":["price","sourceType","suid","ut_sk","un","share_crt_v","sp_tk","cpp","shareurl","short_name","app","scm[_a-z-]*","pvid","algo_expid","algo_pvid","ns","abbucket","ali_refid","ali_trackid","acm","utparam","pos","abtest","trackInfo","utkn","scene","mytmenu","turing_bucket","lygClk","impid","bftTag","bftRwd","spm","_u"]},"tmall.com":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?tmall\\.com","rules":["price","sourceType","suid","ut_sk","un","share_crt_v","sp_tk","cpp","shareurl","short_name","app","scm[_a-z-]*","pvid","algo_expid","algo_pvid","ns","abbucket","ali_refid","ali_trackid","acm","utparam","pos","abtest","trackInfo","user_number_id","utkn","scene","mytmenu","turing_bucket","lygClk","impid","bftTag","bftRwd","activity_id"]},"tb.cn":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?tb\\.cn","rules":["sm"]},"bilibili.com":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?bilibili\\.com","rules":["callback","spm_id_from","from_source","from","seid","share_source","msource","refer_from","share_medium","share_source","share_plat","share_tag","share_session_id","timestamp","unique_k"],"exceptions":["^https?:\\/\\/api\\.bilibili\\.com"]},"m.bilibili.com":{"urlPattern":"^https?:\\/\\/m\\.bilibili\\.com","rules":["bbid","ts"]},"live.bilibili.com":{"urlPattern":"^https?:\\/\\/live\\.bilibili\\.com","rules":["visit_id","session_id","broadcast_type","is_room_feed"]},"marketscreener.com":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?marketscreener\\.com","rules":["type_recherche","mots","noredirect","RewriteLast","lien","aComposeInputSearch","type_recherche_forum","add_mots","countview"],"exceptions":["^https?:\\/\\/(?:[a-z0-9-]+\\.)*?marketscreener\\.com\\/search\\/\\?"]},"marketscreener.com search":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?marketscreener\\.com\\/search\\/\\?","rules":["type_recherche","noredirect","RewriteLast","lien","aComposeInputSearch","type_recherche_forum","countview"]},"bestbuy.com":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?bestbuy\\.com","rules":["irclickid","irgwc","loc","acampID","mpid","intl"]},"digidip.net":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?digidip\\.net","redirections":["^https?:\\/\\/(?:[a-z0-9-]+\\.)*?digidip\\.net.*url=([^&]*)"]},"tiktok.com":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?tiktok\\.com","rules":["u_code","preview_pb","_d","timestamp","user_id","share_app_name","share_iid","source"]},"autoplus.fr":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?autoplus\\.fr","rules":["idprob","hash","sending_id","site_id","dr_tracker"]},"bigfishgames.com":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?bigfishgames\\.com","rules":["pc","npc","npv[0-9]+","npi"],"rawRules":["\\?pc$"]},"dpbolvw.net":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?dpbolvw\\.net","redirections":["^https?:\\/\\/(?:[a-z0-9-]+\\.)*?dpbolvw\\.net.*url=([^&]*)"]},"humblebundle.com":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?humblebundle\\.com","referralMarketing":["partner"]},"cafepedagogique.net":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?cafepedagogique\\.net","rules":["actId","actCampaignType","actSource"]},"bloculus.com":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?bloculus\\.com","rules":["tl_[a-z_]+"]},"mailpanion.com":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?mailpanion\\.com","redirections":["^https?:\\/\\/(?:[a-z0-9-]+\\.)*?mailpanion\\.com.*destination=([^&]*)"]},"signtr.website":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?signtr\\.website","redirections":["^https?:\\/\\/(?:[a-z0-9-]+\\.)*?signtr\\.website.*redirect=([^&]*)"]},"mailtrack.io":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?mailtrack\\.io","redirections":["^https?:\\/\\/(?:[a-z0-9-]+\\.)*?mailtrack\\.io.*url=([^&]*)"]},"zillow.com":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?zillow\\.com","rules":["rtoken"]},"realtor.com":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?realtor\\.com","rules":["ex","identityID","MID","RID"]},"redfin.com":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?redfin\\.com","rules":["riftinfo"]},"epicgames.com":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?epicgames\\.com","rules":["epic_affiliate","epic_gameId"]},"onet.pl":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?onet\\.pl","rules":["srcc","utm_v","utm_medium","utm_source"]},"allrecipes.com":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?allrecipes\\.com","rules":["internalSource","referringId","referringContentType","clickId"]},"europe1.fr":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?europe1\\.fr","rules":["xtor"]},"effiliation.com":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?effiliation\\.com","redirections":["^https?:\\/\\/(?:[a-z0-9-]+\\.)*?effiliation\\.com.*url=([^&]*)"]},"argos.co.uk":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?argos\\.co\\.uk","rules":["istCompanyId","istFeedId","istItemId","istBid","clickOrigin"]},"hlserve.com":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?hlserve\\.com","redirections":["^https?:\\/\\/(?:[a-z0-9-]+\\.)*?hlserve\\.com.*dest=([^&]*)"]},"thunderbird.net":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?thunderbird\\.net","rules":["src"]},"cnbc.com":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?cnbc\\.com","rules":["__source"]},"roblox.com":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?roblox\\.com","rules":["refPageId"]},"cell.com":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?cell\\.com","rules":["_returnURL"]},"academic.oup.com":{"urlPattern":"^https?:\\/\\/academic\\.oup\\.com","rules":["redirectedFrom"]},"flexlinkspro.com":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?flexlinkspro\\.com","redirections":["^https?:\\/\\/(?:[a-z0-9-]+\\.)*?flexlinkspro\\.com.*url=([^&]*)"]},"agata88.com":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?agata88\\.com","rules":["source"]},"hs.fi":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?hs\\.fi","rules":["share"]},"yle.fi":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?yle\\.fi","rules":["origin"]},"ccbill.com":{"urlPattern":"^https?:\\/\\/refer\\.ccbill\\.com","redirections":["^https?:\\/\\/refer\\.ccbill\\.com.*HTML=([^&]*)"]},"flipkart":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?flipkart\\.com","rules":["otracker.?","ssid","[cilp]id","marketplace","store","srno","store","ppn","ppt","fm","collection-tab-name","sattr\\[\\]","p\\[\\]","st"]},"idealo.de":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?idealo\\.de","rules":["sid","src","siteId","lcb","leadOutUrl","offerListId","osId","cancelUrl","disc"]},"idealo-partner.com":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?idealo-partner\\.com","redirections":["^https?:\\/\\/(?:[a-z0-9-]+\\.)*?idealo-partner\\.com.*trg=([^&]*)"]},"teletrader.com":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?teletrader\\.com","rules":["internal"]},"webgains.com":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?webgains\\.com","redirections":["^https?:\\/\\/(?:[a-z0-9-]+\\.)*?webgains\\.com.*wgtarget=([^&]*)"]},"deeplearning.ai":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?deeplearning\\.ai","rules":["ecid","_hsmi","_hsenc"]},"getpocket.com":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?getpocket\\.com","redirections":["^https?:\\/\\/(?:[a-z0-9-]+\\.)*?getpocket\\.com.*url=([^&]*)"]},"gamespot.com":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?gamespot\\.com","rules":["PostType","ServiceType","ftag","UniqueID","TheTime"]},"tokopedia.com":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?tokopedia\\.com","rules":["src","trkid","whid"],"redirections":["^https?:\\/\\/(?:[a-z0-9-]+\\.)*?tokopedia\\.com\\/promo.*r=([^&]*)"]},"wkorea.com":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?wkorea\\.com","rules":["ddw","ds_ch"]},"eonline.com":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?eonline\\.com","rules":["source","medium","content"]},"reuters.com":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?reuters\\.com","rules":["taid"]},"app.adjust.com":{"urlPattern":"^https?:\\/\\/app\\.adjust\\.com","redirections":["^https?:\\/\\/app\\.adjust\\.com.*redirect=([^&]*)"]},"change.org":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?change\\.org","rules":["source_location","psf_variant","share_intent"]},"ceneo.pl":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?ceneo\\.pl","rules":["tag"]},"wired.com":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?wired\\.com","rules":["intcid"]},"alibaba cloud arms":{"urlPattern":"^https?:\\/\\/arms-retcode\\.aliyuncs\\.com","rules":["pid","uid","tag","release","environment","sample","behavior","enableSPA","enableLinkTrace","page","begin","c2","c3","success","code","msg","api","traceId","pv_id","flag","sr","vp","ct","_v","sampling","dl","post_res"]},"nikkei":{"urlPattern":"^https?://(?:[a-z0-9-]+\\.)*?nikkei\\.co(?:m|\\.jp)","rules":["adid","i_cid","n_cid","waad"]},"weibo":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?weibo\\.(cn|com)","rules":["weibo_id","dt_dapp"]},"fiverr.com":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?fiverr\\.com","rules":["context_referrer","source","ref_ctx_id","funnel"]},"etsy.com":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?etsy\\.com","rules":["click_key","click_sum","organic_search_click"]},"magento.com":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?magento\\.com","rules":["itm_campaign","itm_medium","itm_source","itm_term"]},"novinky.cz":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?novinky\\.cz","rules":["dop_ab_variant","dop_source_zone_name","dop_req_id","dop_id","source","seq_no"]},"aktualne.cz":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?aktualne\\.cz","rules":["dop_ab_variant","dop_source_zone_name","dop_req_id","dop_id"]},"seznamzpravy.cz":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?seznamzpravy\\.cz","rules":["dop_ab_variant","dop_source_zone_name","dop_req_id","dop_id","source","seq_no"]},"billiger.de":{"urlPattern":"^https?:\\/\\/(?:[a-z0-9-]+\\.)*?billiger\\.de","rules":["log","p"]}}} diff --git a/src/updaterules.ml b/src/updaterules.ml new file mode 100644 index 0000000..e10a5bc --- /dev/null +++ b/src/updaterules.ml @@ -0,0 +1,10 @@ +open Lwt.Syntax + +let url = "https://rules2.clearurls.xyz/data.minify.json" + +let program = + let* _, body = Cohttp_lwt_unix.Client.get (url |> Uri.of_string) in + let* body = Cohttp_lwt.Body.to_string body in + Lwt_io.write_line Lwt_io.stdout body + +let () = Lwt_main.run program