@browserless.io/browserless 2.30.0 → 2.31.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/CHANGELOG.md +16 -3
- package/build/browsers/index.js +3 -0
- package/build/limiter.js +3 -1
- package/build/routes/chrome/http/content.post.body.json +8 -8
- package/build/routes/chrome/http/pdf.post.body.json +8 -8
- package/build/routes/chrome/http/scrape.post.body.json +8 -8
- package/build/routes/chrome/http/screenshot.post.body.json +22 -9
- package/build/routes/chromium/http/content.post.body.json +8 -8
- package/build/routes/chromium/http/pdf.post.body.json +8 -8
- package/build/routes/chromium/http/scrape.post.body.json +8 -8
- package/build/routes/chromium/http/screenshot.post.body.json +22 -9
- package/build/routes/chromium/tests/websocket.spec.js +1 -1
- package/build/routes/edge/http/content.post.body.json +8 -8
- package/build/routes/edge/http/pdf.post.body.json +8 -8
- package/build/routes/edge/http/scrape.post.body.json +8 -8
- package/build/routes/edge/http/screenshot.post.body.json +22 -9
- package/extensions/ublocklite/README.md +5 -4
- package/extensions/ublocklite/_locales/ar/messages.json +36 -0
- package/extensions/ublocklite/_locales/az/messages.json +36 -0
- package/extensions/ublocklite/_locales/be/messages.json +36 -0
- package/extensions/ublocklite/_locales/bg/messages.json +36 -0
- package/extensions/ublocklite/_locales/bn/messages.json +38 -2
- package/extensions/ublocklite/_locales/br_FR/messages.json +39 -3
- package/extensions/ublocklite/_locales/bs/messages.json +36 -0
- package/extensions/ublocklite/_locales/ca/messages.json +36 -0
- package/extensions/ublocklite/_locales/cs/messages.json +36 -0
- package/extensions/ublocklite/_locales/cv/messages.json +36 -0
- package/extensions/ublocklite/_locales/cy/messages.json +36 -0
- package/extensions/ublocklite/_locales/da/messages.json +37 -1
- package/extensions/ublocklite/_locales/de/messages.json +36 -0
- package/extensions/ublocklite/_locales/el/messages.json +36 -0
- package/extensions/ublocklite/_locales/en/messages.json +36 -0
- package/extensions/ublocklite/_locales/en_GB/messages.json +36 -0
- package/extensions/ublocklite/_locales/eo/messages.json +36 -0
- package/extensions/ublocklite/_locales/es/messages.json +36 -0
- package/extensions/ublocklite/_locales/et/messages.json +36 -0
- package/extensions/ublocklite/_locales/eu/messages.json +36 -0
- package/extensions/ublocklite/_locales/fa/messages.json +36 -0
- package/extensions/ublocklite/_locales/fi/messages.json +41 -5
- package/extensions/ublocklite/_locales/fil/messages.json +36 -0
- package/extensions/ublocklite/_locales/fr/messages.json +36 -0
- package/extensions/ublocklite/_locales/fy/messages.json +36 -0
- package/extensions/ublocklite/_locales/gl/messages.json +36 -0
- package/extensions/ublocklite/_locales/gu/messages.json +36 -0
- package/extensions/ublocklite/_locales/he/messages.json +36 -0
- package/extensions/ublocklite/_locales/hi/messages.json +36 -0
- package/extensions/ublocklite/_locales/hr/messages.json +37 -1
- package/extensions/ublocklite/_locales/hu/messages.json +36 -0
- package/extensions/ublocklite/_locales/hy/messages.json +36 -0
- package/extensions/ublocklite/_locales/id/messages.json +36 -0
- package/extensions/ublocklite/_locales/it/messages.json +36 -0
- package/extensions/ublocklite/_locales/ja/messages.json +36 -0
- package/extensions/ublocklite/_locales/ka/messages.json +36 -0
- package/extensions/ublocklite/_locales/kk/messages.json +36 -0
- package/extensions/ublocklite/_locales/kn/messages.json +36 -0
- package/extensions/ublocklite/_locales/ko/messages.json +37 -1
- package/extensions/ublocklite/_locales/lt/messages.json +36 -0
- package/extensions/ublocklite/_locales/lv/messages.json +36 -0
- package/extensions/ublocklite/_locales/mk/messages.json +36 -0
- package/extensions/ublocklite/_locales/ml/messages.json +36 -0
- package/extensions/ublocklite/_locales/mr/messages.json +36 -0
- package/extensions/ublocklite/_locales/ms/messages.json +36 -0
- package/extensions/ublocklite/_locales/nb/messages.json +40 -4
- package/extensions/ublocklite/_locales/nl/messages.json +40 -4
- package/extensions/ublocklite/_locales/oc/messages.json +36 -0
- package/extensions/ublocklite/_locales/pa/messages.json +36 -0
- package/extensions/ublocklite/_locales/pl/messages.json +36 -0
- package/extensions/ublocklite/_locales/pt_BR/messages.json +36 -0
- package/extensions/ublocklite/_locales/pt_PT/messages.json +38 -2
- package/extensions/ublocklite/_locales/ro/messages.json +36 -0
- package/extensions/ublocklite/_locales/ru/messages.json +36 -0
- package/extensions/ublocklite/_locales/si/messages.json +63 -27
- package/extensions/ublocklite/_locales/sk/messages.json +36 -0
- package/extensions/ublocklite/_locales/sl/messages.json +36 -0
- package/extensions/ublocklite/_locales/so/messages.json +36 -0
- package/extensions/ublocklite/_locales/sq/messages.json +37 -1
- package/extensions/ublocklite/_locales/sr/messages.json +36 -0
- package/extensions/ublocklite/_locales/sv/messages.json +36 -0
- package/extensions/ublocklite/_locales/sw/messages.json +36 -0
- package/extensions/ublocklite/_locales/ta/messages.json +36 -0
- package/extensions/ublocklite/_locales/te/messages.json +36 -0
- package/extensions/ublocklite/_locales/th/messages.json +36 -0
- package/extensions/ublocklite/_locales/tr/messages.json +37 -1
- package/extensions/ublocklite/_locales/uk/messages.json +36 -0
- package/extensions/ublocklite/_locales/ur/messages.json +36 -0
- package/extensions/ublocklite/_locales/vi/messages.json +36 -0
- package/extensions/ublocklite/_locales/zh_CN/messages.json +36 -0
- package/extensions/ublocklite/_locales/zh_TW/messages.json +36 -0
- package/extensions/ublocklite/css/common.css +2 -1
- package/extensions/ublocklite/css/dashboard-common.css +6 -1
- package/extensions/ublocklite/css/dashboard.css +15 -8
- package/extensions/ublocklite/css/default.css +1 -1
- package/extensions/ublocklite/css/develop.css +112 -0
- package/extensions/ublocklite/css/filtering-mode.css +29 -20
- package/extensions/ublocklite/css/popup.css +14 -16
- package/extensions/ublocklite/css/report.css +11 -0
- package/extensions/ublocklite/css/settings.css +11 -6
- package/extensions/ublocklite/css/zapper-ui.css +15 -10
- package/extensions/ublocklite/dashboard.html +39 -6
- package/extensions/ublocklite/img/icon_512.png +0 -0
- package/extensions/ublocklite/js/background.js +28 -5
- package/extensions/ublocklite/js/dashboard.js +18 -1
- package/extensions/ublocklite/js/develop.js +889 -0
- package/extensions/ublocklite/js/dnr-parser.js +561 -0
- package/extensions/ublocklite/js/ext-compat.js +3 -3
- package/extensions/ublocklite/js/filter-lists.js +6 -1
- package/extensions/ublocklite/js/report.js +48 -3
- package/extensions/ublocklite/js/ruleset-manager.js +121 -22
- package/extensions/ublocklite/js/scripting-manager.js +45 -16
- package/extensions/ublocklite/js/settings.js +33 -19
- package/extensions/ublocklite/js/theme.js +3 -1
- package/extensions/ublocklite/js/zapper-ui.js +11 -0
- package/extensions/ublocklite/lib/codemirror/LICENSE +21 -0
- package/extensions/ublocklite/lib/codemirror/README.md +9 -0
- package/extensions/ublocklite/lib/codemirror/cm6.bundle.ubol.min.js +1 -0
- package/extensions/ublocklite/manifest.json +6 -6
- package/extensions/ublocklite/popup.html +7 -11
- package/extensions/ublocklite/report.html +4 -2
- package/extensions/ublocklite/rulesets/generic-details.json +16 -5
- package/extensions/ublocklite/rulesets/main/adguard-mobile.json +533 -0
- package/extensions/ublocklite/rulesets/main/alb-0.json +23 -23
- package/extensions/ublocklite/rulesets/main/annoyances-cookies.json +29 -14
- package/extensions/ublocklite/rulesets/main/annoyances-others.json +3 -1
- package/extensions/ublocklite/rulesets/main/annoyances-overlays.json +10 -4
- package/extensions/ublocklite/rulesets/main/annoyances-social.json +1 -0
- package/extensions/ublocklite/rulesets/main/annoyances-widgets.json +3 -2
- package/extensions/ublocklite/rulesets/main/chn-0.json +59 -39
- package/extensions/ublocklite/rulesets/main/deu-0.json +11 -3
- package/extensions/ublocklite/rulesets/main/easylist.json +28 -36
- package/extensions/ublocklite/rulesets/main/easyprivacy.json +44 -12
- package/extensions/ublocklite/rulesets/main/fin-0.json +168 -168
- package/extensions/ublocklite/rulesets/main/fra-0.json +10 -11
- package/extensions/ublocklite/rulesets/main/hun-0.json +17 -6
- package/extensions/ublocklite/rulesets/main/idn-0.json +16 -4
- package/extensions/ublocklite/rulesets/main/ind-0.json +112 -77
- package/extensions/ublocklite/rulesets/main/isr-0.json +7 -19
- package/extensions/ublocklite/rulesets/main/ita-0.json +3 -2
- package/extensions/ublocklite/rulesets/main/jpn-1.json +26 -15
- package/extensions/ublocklite/rulesets/main/kor-1.json +7 -1
- package/extensions/ublocklite/rulesets/main/nor-0.json +38 -2
- package/extensions/ublocklite/rulesets/main/pgl.json +6 -18
- package/extensions/ublocklite/rulesets/main/pol-0.json +1 -1
- package/extensions/ublocklite/rulesets/main/rou-1.json +1 -1
- package/extensions/ublocklite/rulesets/main/rus-0.json +25 -16
- package/extensions/ublocklite/rulesets/main/rus-1.json +11 -13
- package/extensions/ublocklite/rulesets/main/spa-0.json +9 -2
- package/extensions/ublocklite/rulesets/main/spa-1.json +9 -6
- package/extensions/ublocklite/rulesets/main/stevenblack-hosts.json +14117 -4504
- package/extensions/ublocklite/rulesets/main/swe-1.json +35 -30
- package/extensions/ublocklite/rulesets/main/tur-0.json +31 -9
- package/extensions/ublocklite/rulesets/main/ublock-badware.json +49 -115
- package/extensions/ublocklite/rulesets/main/ublock-filters.json +72 -37
- package/extensions/ublocklite/rulesets/main/ukr-0.json +6 -2
- package/extensions/ublocklite/rulesets/main/urlhaus-full.json +439 -846
- package/extensions/ublocklite/rulesets/main/vie-1.json +80 -69
- package/extensions/ublocklite/rulesets/modify-headers/chn-0.json +46 -2
- package/extensions/ublocklite/rulesets/modify-headers/vie-1.json +1 -1
- package/extensions/ublocklite/rulesets/redirect/adguard-mobile.json +20 -0
- package/extensions/ublocklite/rulesets/redirect/annoyances-overlays.json +0 -1
- package/extensions/ublocklite/rulesets/redirect/easylist.json +19 -0
- package/extensions/ublocklite/rulesets/redirect/fin-0.json +25 -25
- package/extensions/ublocklite/rulesets/redirect/isr-0.json +2 -1
- package/extensions/ublocklite/rulesets/redirect/rou-1.json +1 -0
- package/extensions/ublocklite/rulesets/redirect/rus-1.json +33 -17
- package/extensions/ublocklite/rulesets/redirect/swe-1.json +11 -156
- package/extensions/ublocklite/rulesets/redirect/tur-0.json +0 -1
- package/extensions/ublocklite/rulesets/redirect/ublock-filters.json +14 -9
- package/extensions/ublocklite/rulesets/redirect/vie-1.json +20 -4
- package/extensions/ublocklite/rulesets/regex/adguard-mobile.json +101 -0
- package/extensions/ublocklite/rulesets/regex/chn-0.json +3 -3
- package/extensions/ublocklite/rulesets/regex/jpn-1.json +3 -5
- package/extensions/ublocklite/rulesets/regex/kor-1.json +2 -1
- package/extensions/ublocklite/rulesets/regex/nor-0.json +1 -1
- package/extensions/ublocklite/rulesets/regex/swe-1.json +1 -0
- package/extensions/ublocklite/rulesets/regex/tur-0.json +1 -0
- package/extensions/ublocklite/rulesets/regex/ublock-badware.json +5 -4
- package/extensions/ublocklite/rulesets/regex/ublock-filters.json +17 -4
- package/extensions/ublocklite/rulesets/removeparam/adguard-spyware-url.json +13 -6
- package/extensions/ublocklite/rulesets/removeparam/fin-0.json +12 -12
- package/extensions/ublocklite/rulesets/removeparam/rus-1.json +2 -2
- package/extensions/ublocklite/rulesets/removeparam/swe-1.json +25 -0
- package/extensions/ublocklite/rulesets/removeparam/ublock-filters.json +2 -2
- package/extensions/ublocklite/rulesets/ruleset-details.json +259 -262
- package/extensions/ublocklite/rulesets/scripting/declarative/adguard-mobile.js +42 -0
- package/extensions/ublocklite/rulesets/scripting/declarative/annoyances-cookies.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/declarative/annoyances-overlays.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/declarative/chn-0.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/declarative/isr-0.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/declarative/jpn-1.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/declarative/nor-0.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/declarative/rou-1.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/declarative/rus-0.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/declarative/rus-1.js +1 -1
- package/extensions/ublocklite/rulesets/scripting/declarative/spa-1.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/declarative/swe-1.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/declarative/tur-0.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/declarative/ublock-filters.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/declarative/vie-1.js +1 -1
- package/extensions/ublocklite/rulesets/scripting/generic/adguard-mobile.js +87 -0
- package/extensions/ublocklite/rulesets/scripting/generic/annoyances-cookies.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/generic/annoyances-others.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/generic/annoyances-social.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/generic/chn-0.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/generic/deu-0.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/generic/easylist.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/generic/fin-0.js +1 -1
- package/extensions/ublocklite/rulesets/scripting/generic/fra-0.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/generic/idn-0.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/generic/isr-0.js +1 -1
- package/extensions/ublocklite/rulesets/scripting/generic/nor-0.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/generic/rus-0.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/generic/spa-0.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/generic/spa-1.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/generic/swe-1.js +1 -1
- package/extensions/ublocklite/rulesets/scripting/generic/tur-0.js +1 -1
- package/extensions/ublocklite/rulesets/scripting/generic/ublock-filters.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/generic/vie-1.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/generichigh/adguard-mobile.css +39 -0
- package/extensions/ublocklite/rulesets/scripting/generichigh/annoyances-cookies.css +0 -2
- package/extensions/ublocklite/rulesets/scripting/generichigh/chn-0.css +1 -1
- package/extensions/ublocklite/rulesets/scripting/generichigh/easylist.css +3 -14
- package/extensions/ublocklite/rulesets/scripting/generichigh/fra-0.css +0 -2
- package/extensions/ublocklite/rulesets/scripting/generichigh/idn-0.css +129 -139
- package/extensions/ublocklite/rulesets/scripting/generichigh/rus-0.css +1 -0
- package/extensions/ublocklite/rulesets/scripting/generichigh/tur-0.css +1 -0
- package/extensions/ublocklite/rulesets/scripting/generichigh/ublock-filters.css +1 -0
- package/extensions/ublocklite/rulesets/scripting/procedural/adguard-mobile.js +42 -0
- package/extensions/ublocklite/rulesets/scripting/procedural/annoyances-cookies.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/procedural/annoyances-others.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/procedural/annoyances-overlays.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/procedural/chn-0.js +1 -1
- package/extensions/ublocklite/rulesets/scripting/procedural/deu-0.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/procedural/easylist.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/procedural/hun-0.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/procedural/idn-0.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/procedural/ind-0.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/procedural/ita-0.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/procedural/jpn-1.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/procedural/kor-1.js +1 -1
- package/extensions/ublocklite/rulesets/scripting/procedural/rus-0.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/procedural/spa-0.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/procedural/spa-1.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/procedural/swe-1.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/procedural/ublock-filters.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/procedural/ukr-0.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/scriptlet/adguard-mobile.abort-current-script.js +451 -0
- package/extensions/ublocklite/rulesets/scripting/scriptlet/adguard-mobile.abort-on-property-read.js +369 -0
- package/extensions/ublocklite/rulesets/scripting/scriptlet/adguard-mobile.abort-on-property-write.js +347 -0
- package/extensions/ublocklite/rulesets/scripting/scriptlet/adguard-mobile.addEventListener-defuser.js +498 -0
- package/extensions/ublocklite/rulesets/scripting/scriptlet/adguard-mobile.adjust-setInterval.js +332 -0
- package/extensions/ublocklite/rulesets/scripting/scriptlet/adguard-mobile.prevent-setTimeout.js +443 -0
- package/extensions/ublocklite/rulesets/scripting/scriptlet/adguard-mobile.remove-attr.js +405 -0
- package/extensions/ublocklite/rulesets/scripting/scriptlet/adguard-mobile.remove-class.js +396 -0
- package/extensions/ublocklite/rulesets/scripting/scriptlet/adguard-mobile.remove-node-text.js +449 -0
- package/extensions/ublocklite/rulesets/scripting/scriptlet/adguard-mobile.set-constant.js +541 -0
- package/extensions/ublocklite/rulesets/scripting/scriptlet/adguard-mobile.set-cookie-reload.js +437 -0
- package/extensions/ublocklite/rulesets/scripting/scriptlet/adguard-mobile.set-cookie.js +433 -0
- package/extensions/ublocklite/rulesets/scripting/scriptlet/adguard-mobile.set-local-storage-item.js +399 -0
- package/extensions/ublocklite/rulesets/scripting/scriptlet/adguard-mobile.set-session-storage-item.js +399 -0
- package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-cookies.remove-class.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-cookies.set-constant.js +1 -1
- package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-cookies.set-cookie.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-cookies.set-local-storage-item.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-cookies.trusted-click-element.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-cookies.trusted-set-cookie-reload.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-cookies.trusted-set-cookie.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-cookies.trusted-set-local-storage-item.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.abort-current-script.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.abort-on-property-read.js +1 -1
- package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.addEventListener-defuser.js +1 -1
- package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.remove-cookie.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.remove-node-text.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.set-constant.js +1 -1
- package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.set-cookie.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.trusted-set-local-storage-item.js +1 -1
- package/extensions/ublocklite/rulesets/scripting/scriptlet/chn-0.abort-current-script.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/scriptlet/chn-0.prevent-setTimeout.js +1 -1
- package/extensions/ublocklite/rulesets/scripting/scriptlet/chn-0.remove-attr.js +1 -1
- package/extensions/ublocklite/rulesets/scripting/scriptlet/easyprivacy.set-constant.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/scriptlet/idn-0.addEventListener-defuser.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/scriptlet/jpn-1.addEventListener-defuser.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/scriptlet/jpn-1.prevent-fetch.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/scriptlet/jpn-1.prevent-refresh.js +330 -0
- package/extensions/ublocklite/rulesets/scripting/scriptlet/jpn-1.remove-attr.js +1 -1
- package/extensions/ublocklite/rulesets/scripting/scriptlet/jpn-1.set-constant.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/scriptlet/kor-1.abort-current-script.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/scriptlet/nld-0.adjust-setTimeout.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.abort-on-property-read.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.addEventListener-defuser.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.json-prune-fetch-response.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.remove-node-text.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.set-constant.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.set-cookie.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-1.json-prune.js +1 -1
- package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-1.set-constant.js +1 -1
- package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.abort-on-property-read.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.adjust-setInterval.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.adjust-setTimeout.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.noeval-if.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.prevent-fetch.js +1 -1
- package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.prevent-setTimeout.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.set-constant.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.set-cookie.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.set-local-storage-item.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.set-session-storage-item.js +399 -0
- package/extensions/ublocklite/rulesets/scripting/scriptlet/swe-1.addEventListener-defuser.js +1 -1
- package/extensions/ublocklite/rulesets/scripting/scriptlet/swe-1.href-sanitizer.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/scriptlet/swe-1.remove-cookie.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/scriptlet/swe-1.remove-node-text.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/scriptlet/tur-0.abort-current-script.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/scriptlet/tur-0.abort-on-property-read.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/scriptlet/tur-0.abort-on-stack-trace.js +421 -0
- package/extensions/ublocklite/rulesets/scripting/scriptlet/tur-0.addEventListener-defuser.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/scriptlet/tur-0.prevent-window-open.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/scriptlet/tur-0.prevent-xhr.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/scriptlet/tur-0.remove-node-text.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/scriptlet/tur-0.set-constant.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/scriptlet/tur-0.set-local-storage-item.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.abort-current-script.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.abort-on-property-read.js +1 -1
- package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.abort-on-property-write.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.abort-on-stack-trace.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.addEventListener-defuser.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.adjust-setInterval.js +1 -1
- package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.disable-newtab-links.js +1 -1
- package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.href-sanitizer.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.json-edit.js +788 -0
- package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.json-prune-fetch-response.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.json-prune-xhr-response.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.json-prune.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.jsonl-edit-xhr-response.js +809 -0
- package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.noeval-if.js +1 -1
- package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.nowebrtc.js +1 -1
- package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.prevent-fetch.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.prevent-requestAnimationFrame.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.prevent-setInterval.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.prevent-setTimeout.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.prevent-window-open.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.prevent-xhr.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.remove-attr.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.remove-cookie.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.remove-node-text.js +4 -4
- package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.set-constant.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.set-cookie.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.set-local-storage-item.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.set-session-storage-item.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.spoof-css.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.trusted-replace-node-text.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.trusted-replace-xhr-response.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.trusted-set-constant.js +1 -1
- package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.trusted-suppress-native-method.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/scriptlet/ubol-tests.jsonl-edit-fetch-response.js +5 -3
- package/extensions/ublocklite/rulesets/scripting/scriptlet/ubol-tests.jsonl-edit-xhr-response.js +5 -3
- package/extensions/ublocklite/rulesets/scripting/scriptlet/vie-1.abort-current-script.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/scriptlet/vie-1.abort-on-property-read.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/scriptlet/vie-1.m3u-prune.js +1 -1
- package/extensions/ublocklite/rulesets/scripting/scriptlet/vie-1.set-constant.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/specific/adguard-mobile.js +42 -0
- package/extensions/ublocklite/rulesets/scripting/specific/annoyances-cookies.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/specific/annoyances-others.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/specific/annoyances-overlays.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/specific/annoyances-social.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/specific/chn-0.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/specific/deu-0.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/specific/easylist.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/specific/fin-0.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/specific/fra-0.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/specific/grc-0.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/specific/hun-0.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/specific/idn-0.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/specific/ind-0.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/specific/isr-0.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/specific/ita-0.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/specific/jpn-1.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/specific/kor-1.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/specific/nld-0.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/specific/nor-0.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/specific/rou-1.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/specific/rus-0.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/specific/spa-0.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/specific/spa-1.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/specific/swe-1.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/specific/tur-0.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/specific/ublock-filters.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/specific/ukr-0.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/specific/vie-1.js +3 -3
- package/extensions/ublocklite/rulesets/scriptlet-details.json +431 -273
- package/extensions/ublocklite/rulesets/strictblock/adguard-mobile.json +891 -0
- package/extensions/ublocklite/rulesets/strictblock/annoyances-cookies.json +8 -1
- package/extensions/ublocklite/rulesets/strictblock/annoyances-widgets.json +1 -0
- package/extensions/ublocklite/rulesets/strictblock/chn-0.json +257 -4
- package/extensions/ublocklite/rulesets/strictblock/deu-0.json +1 -0
- package/extensions/ublocklite/rulesets/strictblock/easylist.json +15 -13
- package/extensions/ublocklite/rulesets/strictblock/easyprivacy.json +137 -695
- package/extensions/ublocklite/rulesets/strictblock/fra-0.json +245 -78
- package/extensions/ublocklite/rulesets/strictblock/hun-0.json +1 -1
- package/extensions/ublocklite/rulesets/strictblock/isr-0.json +0 -12
- package/extensions/ublocklite/rulesets/strictblock/ita-0.json +1 -1
- package/extensions/ublocklite/rulesets/strictblock/jpn-1.json +157 -152
- package/extensions/ublocklite/rulesets/strictblock/kor-1.json +2 -0
- package/extensions/ublocklite/rulesets/strictblock/pgl.json +6 -18
- package/extensions/ublocklite/rulesets/strictblock/pol-0.json +1 -0
- package/extensions/ublocklite/rulesets/strictblock/rou-1.json +1 -0
- package/extensions/ublocklite/rulesets/strictblock/rus-0.json +0 -1
- package/extensions/ublocklite/rulesets/strictblock/rus-1.json +1 -0
- package/extensions/ublocklite/rulesets/strictblock/spa-0.json +2 -0
- package/extensions/ublocklite/rulesets/strictblock/spa-1.json +1 -0
- package/extensions/ublocklite/rulesets/strictblock/stevenblack-hosts.json +14117 -4504
- package/extensions/ublocklite/rulesets/strictblock/swe-1.json +0 -2
- package/extensions/ublocklite/rulesets/strictblock/tur-0.json +3 -0
- package/extensions/ublocklite/rulesets/strictblock/ublock-badware.json +584 -614
- package/extensions/ublocklite/rulesets/strictblock/ublock-filters.json +1 -1
- package/extensions/ublocklite/rulesets/strictblock/ukr-0.json +2 -0
- package/extensions/ublocklite/rulesets/strictblock/urlhaus-full.json +439 -846
- package/extensions/ublocklite/rulesets/strictblock/vie-1.json +2 -9
- package/extensions/ublocklite/rulesets/urlskip/ublock-filters.json +61 -1
- package/extensions/ublocklite/ublock.zip +0 -0
- package/extensions/ublocklite/zapper-ui.html +7 -1
- package/package.json +14 -14
- package/scripts/build-open-api.js +16 -4
- package/src/browsers/index.ts +6 -0
- package/src/limiter.ts +7 -2
- package/src/routes/chromium/tests/websocket.spec.ts +1 -1
- package/static/docs/swagger.json +57 -44
- package/static/docs/swagger.min.json +56 -43
- package/static/function/client.js +8 -5
- package/static/function/index.html +8 -5
- package/extensions/ublocklite/rulesets/main/pol-3.json +0 -56707
- package/extensions/ublocklite/rulesets/strictblock/pol-3.json +0 -56714
|
@@ -35,11 +35,16 @@ import { dnr } from './ext-compat.js';
|
|
|
35
35
|
import { fetchJSON } from './fetch.js';
|
|
36
36
|
import { getAdminRulesets } from './admin.js';
|
|
37
37
|
import { hasBroadHostPermissions } from './utils.js';
|
|
38
|
+
import { rulesFromText } from './dnr-parser.js';
|
|
38
39
|
import { ubolLog } from './debug.js';
|
|
39
40
|
|
|
40
41
|
/******************************************************************************/
|
|
41
42
|
|
|
43
|
+
const SPECIAL_RULES_REALM = 5000000;
|
|
44
|
+
const USER_RULES_BASE_RULE_ID = 9000000;
|
|
45
|
+
const USER_RULES_PRIORITY = 1000000;
|
|
42
46
|
const TRUSTED_DIRECTIVE_BASE_RULE_ID = 8000000;
|
|
47
|
+
const TRUSTED_DIRECTIVE_PRIORITY = USER_RULES_PRIORITY + 1000000;
|
|
43
48
|
const STRICTBLOCK_PRIORITY = 29;
|
|
44
49
|
|
|
45
50
|
let dynamicRegexCount = 0;
|
|
@@ -80,15 +85,12 @@ function getRulesetDetails() {
|
|
|
80
85
|
|
|
81
86
|
/******************************************************************************/
|
|
82
87
|
|
|
83
|
-
async function pruneInvalidRegexRules(realm, rulesIn) {
|
|
84
|
-
const rejectedRegexRules = [];
|
|
85
|
-
|
|
88
|
+
async function pruneInvalidRegexRules(realm, rulesIn, rejected = []) {
|
|
86
89
|
const validateRegex = regex => {
|
|
87
90
|
return dnr.isRegexSupported({ regex, isCaseSensitive: false }).then(result => {
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
rejectedRegexRules.push(`\t${regex} ${result?.reason}`);
|
|
91
|
+
pruneInvalidRegexRules.validated.set(regex, result?.reason || true);
|
|
92
|
+
if ( result.isSupported ) { return true; }
|
|
93
|
+
rejected.push({ regex, reason: result?.reason });
|
|
92
94
|
return false;
|
|
93
95
|
});
|
|
94
96
|
};
|
|
@@ -101,8 +103,11 @@ async function pruneInvalidRegexRules(realm, rulesIn) {
|
|
|
101
103
|
continue;
|
|
102
104
|
}
|
|
103
105
|
const { regexFilter } = rule.condition;
|
|
104
|
-
|
|
105
|
-
|
|
106
|
+
const reason = pruneInvalidRegexRules.validated.get(regexFilter);
|
|
107
|
+
if ( reason !== undefined ) {
|
|
108
|
+
toCheck.push(reason === true);
|
|
109
|
+
if ( reason === true ) { continue; }
|
|
110
|
+
rejected.push({ regex: regexFilter, reason });
|
|
106
111
|
continue;
|
|
107
112
|
}
|
|
108
113
|
toCheck.push(validateRegex(regexFilter));
|
|
@@ -111,9 +116,9 @@ async function pruneInvalidRegexRules(realm, rulesIn) {
|
|
|
111
116
|
// Collate results
|
|
112
117
|
const isValid = await Promise.all(toCheck);
|
|
113
118
|
|
|
114
|
-
if (
|
|
119
|
+
if ( rejected.length !== 0 ) {
|
|
115
120
|
ubolLog(`${realm} realm: rejected regexes:\n`,
|
|
116
|
-
|
|
121
|
+
rejected.map(e => `${e.regex} → ${e.reason}`).join('\n')
|
|
117
122
|
);
|
|
118
123
|
}
|
|
119
124
|
|
|
@@ -126,6 +131,7 @@ pruneInvalidRegexRules.validated = new Map();
|
|
|
126
131
|
async function updateRegexRules(currentRules, addRules, removeRuleIds) {
|
|
127
132
|
// Remove existing regex-related block rules
|
|
128
133
|
for ( const rule of currentRules ) {
|
|
134
|
+
if ( rule.id >= SPECIAL_RULES_REALM ) { continue; }
|
|
129
135
|
const { type } = rule.action;
|
|
130
136
|
if ( type !== 'block' && type !== 'allow' ) { continue; }
|
|
131
137
|
if ( rule.condition.regexFilter === undefined ) { continue; }
|
|
@@ -164,6 +170,7 @@ async function updateRegexRules(currentRules, addRules, removeRuleIds) {
|
|
|
164
170
|
async function updateRemoveparamRules(currentRules, addRules, removeRuleIds) {
|
|
165
171
|
// Remove existing removeparam-related rules
|
|
166
172
|
for ( const rule of currentRules ) {
|
|
173
|
+
if ( rule.id >= SPECIAL_RULES_REALM ) { continue; }
|
|
167
174
|
if ( rule.action.type !== 'redirect' ) { continue; }
|
|
168
175
|
if ( rule.action.redirect.transform === undefined ) { continue; }
|
|
169
176
|
removeRuleIds.push(rule.id);
|
|
@@ -179,7 +186,6 @@ async function updateRemoveparamRules(currentRules, addRules, removeRuleIds) {
|
|
|
179
186
|
}
|
|
180
187
|
const removeparamRulesets = await Promise.all(toFetch);
|
|
181
188
|
|
|
182
|
-
// Removeparam rules can only be enforced with omnipotence
|
|
183
189
|
const allRules = [];
|
|
184
190
|
for ( const rules of removeparamRulesets ) {
|
|
185
191
|
if ( Array.isArray(rules) === false ) { continue; }
|
|
@@ -201,6 +207,7 @@ async function updateRemoveparamRules(currentRules, addRules, removeRuleIds) {
|
|
|
201
207
|
async function updateRedirectRules(currentRules, addRules, removeRuleIds) {
|
|
202
208
|
// Remove existing redirect-related rules
|
|
203
209
|
for ( const rule of currentRules ) {
|
|
210
|
+
if ( rule.id >= SPECIAL_RULES_REALM ) { continue; }
|
|
204
211
|
if ( rule.action.type !== 'redirect' ) { continue; }
|
|
205
212
|
if ( rule.action.redirect.extensionPath === undefined ) { continue; }
|
|
206
213
|
removeRuleIds.push(rule.id);
|
|
@@ -216,7 +223,6 @@ async function updateRedirectRules(currentRules, addRules, removeRuleIds) {
|
|
|
216
223
|
}
|
|
217
224
|
const redirectRulesets = await Promise.all(toFetch);
|
|
218
225
|
|
|
219
|
-
// Redirect rules can only be enforced with omnipotence
|
|
220
226
|
const allRules = [];
|
|
221
227
|
for ( const rules of redirectRulesets ) {
|
|
222
228
|
if ( Array.isArray(rules) === false ) { continue; }
|
|
@@ -238,6 +244,7 @@ async function updateRedirectRules(currentRules, addRules, removeRuleIds) {
|
|
|
238
244
|
async function updateModifyHeadersRules(currentRules, addRules, removeRuleIds) {
|
|
239
245
|
// Remove existing header modification-related rules
|
|
240
246
|
for ( const rule of currentRules ) {
|
|
247
|
+
if ( rule.id >= SPECIAL_RULES_REALM ) { continue; }
|
|
241
248
|
if ( rule.action.type !== 'modifyHeaders' ) { continue; }
|
|
242
249
|
removeRuleIds.push(rule.id);
|
|
243
250
|
}
|
|
@@ -252,7 +259,6 @@ async function updateModifyHeadersRules(currentRules, addRules, removeRuleIds) {
|
|
|
252
259
|
}
|
|
253
260
|
const rulesets = await Promise.all(toFetch);
|
|
254
261
|
|
|
255
|
-
// Redirect rules can only be enforced with omnipotence
|
|
256
262
|
const allRules = [];
|
|
257
263
|
for ( const rules of rulesets ) {
|
|
258
264
|
if ( Array.isArray(rules) === false ) { continue; }
|
|
@@ -278,6 +284,7 @@ async function updateDynamicRules() {
|
|
|
278
284
|
|
|
279
285
|
// Remove potentially left-over strict-block rules from previous version
|
|
280
286
|
for ( const rule of currentRules ) {
|
|
287
|
+
if ( rule.id >= SPECIAL_RULES_REALM ) { continue; }
|
|
281
288
|
if ( isStrictBlockRule(rule) === false ) { continue; }
|
|
282
289
|
removeRuleIds.push(rule.id);
|
|
283
290
|
}
|
|
@@ -294,7 +301,6 @@ async function updateDynamicRules() {
|
|
|
294
301
|
let ruleId = 1;
|
|
295
302
|
for ( const rule of addRules ) {
|
|
296
303
|
if ( rule?.condition.regexFilter ) { dynamicRegexCount += 1; }
|
|
297
|
-
if ( (rule.id || 0) >= TRUSTED_DIRECTIVE_BASE_RULE_ID ) { continue; }
|
|
298
304
|
rule.id = ruleId++;
|
|
299
305
|
}
|
|
300
306
|
if ( dynamicRegexCount !== 0 ) {
|
|
@@ -467,7 +473,8 @@ async function filteringModesToDNR(modes) {
|
|
|
467
473
|
TRUSTED_DIRECTIVE_BASE_RULE_ID,
|
|
468
474
|
requestDomains.sort(),
|
|
469
475
|
excludedRequestDomains.sort(),
|
|
470
|
-
allowEverywhere
|
|
476
|
+
allowEverywhere,
|
|
477
|
+
TRUSTED_DIRECTIVE_PRIORITY
|
|
471
478
|
).then(modified => {
|
|
472
479
|
if ( modified === false ) { return; }
|
|
473
480
|
ubolLog(`${allowEverywhere ? 'Enabled' : 'Disabled'} DNR filtering for ${noneCount} sites`);
|
|
@@ -476,7 +483,7 @@ async function filteringModesToDNR(modes) {
|
|
|
476
483
|
|
|
477
484
|
/******************************************************************************/
|
|
478
485
|
|
|
479
|
-
async function
|
|
486
|
+
async function defaultRulesetsFromEnv() {
|
|
480
487
|
const dropCountry = lang => {
|
|
481
488
|
const pos = lang.indexOf('-');
|
|
482
489
|
if ( pos === -1 ) { return lang; }
|
|
@@ -494,6 +501,10 @@ async function defaultRulesetsFromLanguage() {
|
|
|
494
501
|
`\\b(${Array.from(langSet).join('|')})\\b`
|
|
495
502
|
);
|
|
496
503
|
|
|
504
|
+
const reMobile = /\bMobile\b/.test(navigator.userAgent)
|
|
505
|
+
? /\bmobile\b/
|
|
506
|
+
: null
|
|
507
|
+
|
|
497
508
|
const rulesetDetails = await getRulesetDetails();
|
|
498
509
|
const out = [];
|
|
499
510
|
for ( const ruleset of rulesetDetails.values() ) {
|
|
@@ -502,10 +513,20 @@ async function defaultRulesetsFromLanguage() {
|
|
|
502
513
|
out.push(id);
|
|
503
514
|
continue;
|
|
504
515
|
}
|
|
505
|
-
if ( typeof ruleset.lang
|
|
506
|
-
|
|
507
|
-
|
|
516
|
+
if ( typeof ruleset.lang === 'string' ) {
|
|
517
|
+
if ( reTargetLang.test(ruleset.lang) ) {
|
|
518
|
+
out.push(id);
|
|
519
|
+
continue;
|
|
520
|
+
}
|
|
521
|
+
}
|
|
522
|
+
if ( typeof ruleset.tags === 'string' ) {
|
|
523
|
+
if ( reMobile?.test(ruleset.tags) ) {
|
|
524
|
+
out.push(id);
|
|
525
|
+
continue;
|
|
526
|
+
}
|
|
527
|
+
}
|
|
508
528
|
}
|
|
529
|
+
|
|
509
530
|
return out;
|
|
510
531
|
}
|
|
511
532
|
|
|
@@ -518,7 +539,7 @@ async function patchDefaultRulesets() {
|
|
|
518
539
|
staticRulesetIds,
|
|
519
540
|
] = await Promise.all([
|
|
520
541
|
localRead('defaultRulesetIds'),
|
|
521
|
-
|
|
542
|
+
defaultRulesetsFromEnv(),
|
|
522
543
|
getStaticRulesets().then(r => r.map(a => a.id)),
|
|
523
544
|
]);
|
|
524
545
|
const toAdd = [];
|
|
@@ -648,8 +669,85 @@ async function getEnabledRulesetsDetails() {
|
|
|
648
669
|
|
|
649
670
|
/******************************************************************************/
|
|
650
671
|
|
|
672
|
+
async function getUserRules() {
|
|
673
|
+
const allRules = await dnr.getDynamicRules();
|
|
674
|
+
const userRules = [];
|
|
675
|
+
for ( const rule of allRules ) {
|
|
676
|
+
if ( rule.id < USER_RULES_BASE_RULE_ID ) { continue; }
|
|
677
|
+
userRules.push(rule);
|
|
678
|
+
}
|
|
679
|
+
return userRules;
|
|
680
|
+
}
|
|
681
|
+
|
|
682
|
+
async function updateUserRules() {
|
|
683
|
+
const [
|
|
684
|
+
userRules,
|
|
685
|
+
userRulesText = '',
|
|
686
|
+
] = await Promise.all([
|
|
687
|
+
getUserRules(),
|
|
688
|
+
localRead('userDnrRules'),
|
|
689
|
+
]);
|
|
690
|
+
|
|
691
|
+
const effectiveRulesText = rulesetConfig.developerMode
|
|
692
|
+
? userRulesText
|
|
693
|
+
: '';
|
|
694
|
+
|
|
695
|
+
const parsed = rulesFromText(effectiveRulesText);
|
|
696
|
+
const { rules } = parsed;
|
|
697
|
+
const removeRuleIds = [ ...userRules.map(a => a.id) ];
|
|
698
|
+
const rejectedRegexes = [];
|
|
699
|
+
const addRules = await pruneInvalidRegexRules('user', rules, rejectedRegexes);
|
|
700
|
+
const out = { added: 0, removed: 0, errors: [] };
|
|
701
|
+
|
|
702
|
+
if ( rejectedRegexes.length !== 0 ) {
|
|
703
|
+
rejectedRegexes.forEach(e =>
|
|
704
|
+
out.errors.push(`regexFilter: ${e.regex} → ${e.reason}`)
|
|
705
|
+
);
|
|
706
|
+
}
|
|
707
|
+
|
|
708
|
+
if ( removeRuleIds.length === 0 && addRules.length === 0 ) {
|
|
709
|
+
await localRemove('userDnrRuleCount');
|
|
710
|
+
return out;
|
|
711
|
+
}
|
|
712
|
+
|
|
713
|
+
let ruleId = 0;
|
|
714
|
+
for ( const rule of addRules ) {
|
|
715
|
+
rule.id = USER_RULES_BASE_RULE_ID + ruleId++;
|
|
716
|
+
rule.priority = (rule.priority || 1) + USER_RULES_PRIORITY;
|
|
717
|
+
}
|
|
718
|
+
|
|
719
|
+
// Rules are first removed separately to ensure registered rules match
|
|
720
|
+
// user rules text. A bad rule in user rules text would prevent the
|
|
721
|
+
// rules from being removed if the removal was done at the same time as
|
|
722
|
+
// adding rules.
|
|
723
|
+
try {
|
|
724
|
+
await dnr.updateDynamicRules({ removeRuleIds });
|
|
725
|
+
await dnr.updateDynamicRules({ addRules });
|
|
726
|
+
if ( removeRuleIds.length !== 0 ) {
|
|
727
|
+
ubolLog(`updateUserRules() / Removed ${removeRuleIds.length} dynamic DNR rules`);
|
|
728
|
+
}
|
|
729
|
+
if ( addRules.length !== 0 ) {
|
|
730
|
+
ubolLog(`updateUserRules() / Added ${addRules.length} DNR rules`);
|
|
731
|
+
}
|
|
732
|
+
out.added = addRules.length;
|
|
733
|
+
out.removed = removeRuleIds.length;
|
|
734
|
+
} catch(reason) {
|
|
735
|
+
console.info(`updateUserRules() / ${reason}`);
|
|
736
|
+
out.errors.push(`${reason}`);
|
|
737
|
+
} finally {
|
|
738
|
+
const userRules = await getUserRules();
|
|
739
|
+
if ( userRules.length === 0 ) {
|
|
740
|
+
await localRemove('userDnrRuleCount');
|
|
741
|
+
} else {
|
|
742
|
+
await localWrite('userDnrRuleCount', addRules.length);
|
|
743
|
+
}
|
|
744
|
+
}
|
|
745
|
+
return out;
|
|
746
|
+
}
|
|
747
|
+
|
|
748
|
+
/******************************************************************************/
|
|
749
|
+
|
|
651
750
|
export {
|
|
652
|
-
defaultRulesetsFromLanguage,
|
|
653
751
|
enableRulesets,
|
|
654
752
|
excludeFromStrictBlock,
|
|
655
753
|
filteringModesToDNR,
|
|
@@ -659,4 +757,5 @@ export {
|
|
|
659
757
|
setStrictBlockMode,
|
|
660
758
|
updateDynamicRules,
|
|
661
759
|
updateSessionRules,
|
|
760
|
+
updateUserRules,
|
|
662
761
|
};
|
|
@@ -21,7 +21,12 @@
|
|
|
21
21
|
|
|
22
22
|
import * as ut from './utils.js';
|
|
23
23
|
|
|
24
|
-
import {
|
|
24
|
+
import {
|
|
25
|
+
browser,
|
|
26
|
+
localRemove,
|
|
27
|
+
localWrite,
|
|
28
|
+
} from './ext.js';
|
|
29
|
+
|
|
25
30
|
import { fetchJSON } from './fetch.js';
|
|
26
31
|
import { getEnabledRulesetsDetails } from './ruleset-manager.js';
|
|
27
32
|
import { getFilteringModeDetails } from './mode-manager.js';
|
|
@@ -142,11 +147,13 @@ function registerHighGeneric(context, genericDetails) {
|
|
|
142
147
|
const directive = {
|
|
143
148
|
id: 'css-generichigh',
|
|
144
149
|
css,
|
|
145
|
-
allFrames: true,
|
|
146
150
|
matches,
|
|
147
|
-
|
|
151
|
+
allFrames: true,
|
|
148
152
|
runAt: 'document_end',
|
|
149
153
|
};
|
|
154
|
+
if ( excludeMatches.length !== 0 ) {
|
|
155
|
+
directive.excludeMatches = excludeMatches;
|
|
156
|
+
}
|
|
150
157
|
|
|
151
158
|
// register
|
|
152
159
|
if ( registered === undefined ) {
|
|
@@ -239,9 +246,12 @@ function registerGeneric(context, genericDetails) {
|
|
|
239
246
|
js,
|
|
240
247
|
allFrames: true,
|
|
241
248
|
matches: [ '<all_urls>' ],
|
|
242
|
-
excludeMatches,
|
|
243
249
|
runAt: 'document_idle',
|
|
244
250
|
};
|
|
251
|
+
if ( excludeMatches.length !== 0 ) {
|
|
252
|
+
directiveAll.excludeMatches = excludeMatches;
|
|
253
|
+
}
|
|
254
|
+
|
|
245
255
|
if ( registeredAll === undefined ) { // register
|
|
246
256
|
context.toAdd.push(directiveAll);
|
|
247
257
|
} else if ( // update
|
|
@@ -316,11 +326,13 @@ function registerProcedural(context) {
|
|
|
316
326
|
const directive = {
|
|
317
327
|
id: 'css-procedural',
|
|
318
328
|
js,
|
|
319
|
-
allFrames: true,
|
|
320
329
|
matches,
|
|
321
|
-
|
|
330
|
+
allFrames: true,
|
|
322
331
|
runAt: 'document_start',
|
|
323
332
|
};
|
|
333
|
+
if ( excludeMatches.length !== 0 ) {
|
|
334
|
+
directive.excludeMatches = excludeMatches;
|
|
335
|
+
}
|
|
324
336
|
|
|
325
337
|
// register
|
|
326
338
|
if ( registered === undefined ) {
|
|
@@ -378,11 +390,13 @@ function registerDeclarative(context) {
|
|
|
378
390
|
const directive = {
|
|
379
391
|
id: 'css-declarative',
|
|
380
392
|
js,
|
|
381
|
-
allFrames: true,
|
|
382
393
|
matches,
|
|
383
|
-
|
|
394
|
+
allFrames: true,
|
|
384
395
|
runAt: 'document_start',
|
|
385
396
|
};
|
|
397
|
+
if ( excludeMatches.length !== 0 ) {
|
|
398
|
+
directive.excludeMatches = excludeMatches;
|
|
399
|
+
}
|
|
386
400
|
|
|
387
401
|
// register
|
|
388
402
|
if ( registered === undefined ) {
|
|
@@ -440,11 +454,13 @@ function registerSpecific(context) {
|
|
|
440
454
|
const directive = {
|
|
441
455
|
id: 'css-specific',
|
|
442
456
|
js,
|
|
443
|
-
allFrames: true,
|
|
444
457
|
matches,
|
|
445
|
-
|
|
458
|
+
allFrames: true,
|
|
446
459
|
runAt: 'document_start',
|
|
447
460
|
};
|
|
461
|
+
if ( excludeMatches.length !== 0 ) {
|
|
462
|
+
directive.excludeMatches = excludeMatches;
|
|
463
|
+
}
|
|
448
464
|
|
|
449
465
|
// register
|
|
450
466
|
if ( registered === undefined ) {
|
|
@@ -511,19 +527,22 @@ function registerScriptlet(context, scriptletDetails) {
|
|
|
511
527
|
}
|
|
512
528
|
if ( targetHostnames.length === 0 ) { continue; }
|
|
513
529
|
matches.push(...ut.matchesFromHostnames(targetHostnames));
|
|
530
|
+
normalizeMatches(matches);
|
|
514
531
|
|
|
515
532
|
before.delete(id); // Important!
|
|
516
533
|
|
|
517
534
|
const directive = {
|
|
518
535
|
id,
|
|
519
536
|
js: [ `/rulesets/scripting/scriptlet/${id}.js` ],
|
|
520
|
-
allFrames: true,
|
|
521
537
|
matches,
|
|
522
|
-
|
|
538
|
+
allFrames: true,
|
|
523
539
|
matchOriginAsFallback: true,
|
|
524
540
|
runAt: 'document_start',
|
|
525
541
|
world: details.world,
|
|
526
542
|
};
|
|
543
|
+
if ( excludeMatches.length !== 0 ) {
|
|
544
|
+
directive.excludeMatches = excludeMatches;
|
|
545
|
+
}
|
|
527
546
|
|
|
528
547
|
// register
|
|
529
548
|
if ( registered === undefined ) {
|
|
@@ -593,14 +612,24 @@ async function registerInjectables() {
|
|
|
593
612
|
|
|
594
613
|
if ( toRemove.length !== 0 ) {
|
|
595
614
|
ubolLog(`Unregistered ${toRemove} content (css/js)`);
|
|
596
|
-
|
|
597
|
-
.
|
|
615
|
+
try {
|
|
616
|
+
await browser.scripting.unregisterContentScripts({ ids: toRemove });
|
|
617
|
+
localRemove('$scripting.unregisterContentScripts');
|
|
618
|
+
} catch(reason) {
|
|
619
|
+
localWrite('$scripting.unregisterContentScripts', reason);
|
|
620
|
+
console.info(reason);
|
|
621
|
+
}
|
|
598
622
|
}
|
|
599
623
|
|
|
600
624
|
if ( toAdd.length !== 0 ) {
|
|
601
625
|
ubolLog(`Registered ${toAdd.map(v => v.id)} content (css/js)`);
|
|
602
|
-
|
|
603
|
-
|
|
626
|
+
try {
|
|
627
|
+
await browser.scripting.registerContentScripts(toAdd);
|
|
628
|
+
localRemove('$scripting.registerContentScripts');
|
|
629
|
+
} catch(reason) {
|
|
630
|
+
localWrite('$scripting.registerContentScripts', reason);
|
|
631
|
+
console.info(reason);
|
|
632
|
+
}
|
|
604
633
|
}
|
|
605
634
|
|
|
606
635
|
registerInjectables.barrier = false;
|
|
@@ -22,11 +22,23 @@
|
|
|
22
22
|
import { browser, sendMessage } from './ext.js';
|
|
23
23
|
import { dom, qs$ } from './dom.js';
|
|
24
24
|
import { hashFromIterable } from './dashboard.js';
|
|
25
|
+
import { i18n$ } from './i18n.js';
|
|
25
26
|
import punycode from './punycode.js';
|
|
26
27
|
import { renderFilterLists } from './filter-lists.js';
|
|
27
28
|
|
|
28
29
|
/******************************************************************************/
|
|
29
30
|
|
|
31
|
+
const cm6 = self.cm6;
|
|
32
|
+
|
|
33
|
+
const cmTrustedSites = (( ) => {
|
|
34
|
+
const options = {};
|
|
35
|
+
if ( dom.cl.has(':root', 'dark') ) {
|
|
36
|
+
options.oneDark = true;
|
|
37
|
+
}
|
|
38
|
+
options.placeholder = i18n$('noFilteringModePlaceholder');
|
|
39
|
+
return cm6.createEditorView(options, qs$('#trustedSites'));
|
|
40
|
+
})();
|
|
41
|
+
|
|
30
42
|
let cachedRulesetData = {};
|
|
31
43
|
|
|
32
44
|
/******************************************************************************/
|
|
@@ -70,12 +82,10 @@ function renderWidgets() {
|
|
|
70
82
|
}
|
|
71
83
|
|
|
72
84
|
{
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
dom.attr('#developerMode', 'hidden', null);
|
|
78
|
-
}
|
|
85
|
+
const state = Boolean(cachedRulesetData.developerMode) &&
|
|
86
|
+
cachedRulesetData.disabledFeatures?.includes('develop') !== true;
|
|
87
|
+
dom.body.dataset.develop = `${state}`;
|
|
88
|
+
dom.prop('#developerMode input[type="checkbox"]', 'checked', state);
|
|
79
89
|
}
|
|
80
90
|
}
|
|
81
91
|
|
|
@@ -158,21 +168,23 @@ dom.on('#strictBlockMode input[type="checkbox"]', 'change', ev => {
|
|
|
158
168
|
});
|
|
159
169
|
|
|
160
170
|
dom.on('#developerMode input[type="checkbox"]', 'change', ev => {
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
});
|
|
171
|
+
const state = ev.target.checked;
|
|
172
|
+
sendMessage({ what: 'setDeveloperMode', state });
|
|
173
|
+
dom.body.dataset.develop = `${state}`;
|
|
165
174
|
});
|
|
166
175
|
|
|
167
176
|
/******************************************************************************/
|
|
168
177
|
|
|
169
178
|
function renderTrustedSites() {
|
|
170
|
-
const textarea = qs$('#trustedSites');
|
|
171
179
|
const hostnames = cachedRulesetData.trustedSites || [];
|
|
172
|
-
|
|
173
|
-
if (
|
|
174
|
-
|
|
175
|
-
|
|
180
|
+
let text = hostnames.map(hn => punycode.toUnicode(hn)).join('\n');
|
|
181
|
+
if ( text !== '' ) { text += '\n'; }
|
|
182
|
+
cmTrustedSites.dispatch({
|
|
183
|
+
changes: {
|
|
184
|
+
from: 0, to: cmTrustedSites.state.doc.length,
|
|
185
|
+
insert: text
|
|
186
|
+
},
|
|
187
|
+
});
|
|
176
188
|
}
|
|
177
189
|
|
|
178
190
|
function changeTrustedSites() {
|
|
@@ -186,8 +198,9 @@ function changeTrustedSites() {
|
|
|
186
198
|
}
|
|
187
199
|
|
|
188
200
|
function getStagedTrustedSites() {
|
|
189
|
-
const
|
|
190
|
-
return
|
|
201
|
+
const text = cmTrustedSites.state.doc.toString();
|
|
202
|
+
return text.split(/\s/).map(hn => {
|
|
203
|
+
if ( hn === '' ) { return ''; }
|
|
191
204
|
try {
|
|
192
205
|
return punycode.toASCII(
|
|
193
206
|
(new URL(`https://${hn}/`)).hostname
|
|
@@ -198,7 +211,7 @@ function getStagedTrustedSites() {
|
|
|
198
211
|
}).filter(hn => hn !== '');
|
|
199
212
|
}
|
|
200
213
|
|
|
201
|
-
dom.on(
|
|
214
|
+
dom.on(cmTrustedSites.contentDOM, 'blur', changeTrustedSites);
|
|
202
215
|
|
|
203
216
|
self.addEventListener('beforeunload', changeTrustedSites);
|
|
204
217
|
|
|
@@ -296,7 +309,8 @@ sendMessage({
|
|
|
296
309
|
renderFilterLists(cachedRulesetData);
|
|
297
310
|
renderWidgets();
|
|
298
311
|
dom.cl.remove(dom.body, 'loading');
|
|
299
|
-
} catch {
|
|
312
|
+
} catch(reason) {
|
|
313
|
+
console.error(reason);
|
|
300
314
|
}
|
|
301
315
|
listen();
|
|
302
316
|
}).catch(reason => {
|
|
@@ -34,5 +34,7 @@ import { dom } from './dom.js';
|
|
|
34
34
|
|
|
35
35
|
{
|
|
36
36
|
const mql = self.matchMedia('(hover: hover)');
|
|
37
|
-
|
|
37
|
+
const isTouchScreen = mql.matches !== true;
|
|
38
|
+
dom.cl.toggle(dom.html, 'mobile', isTouchScreen);
|
|
39
|
+
dom.cl.toggle(dom.html, 'desktop', isTouchScreen === false);
|
|
38
40
|
}
|
|
@@ -126,6 +126,7 @@ const svgListening = (( ) => {
|
|
|
126
126
|
};
|
|
127
127
|
|
|
128
128
|
return state => {
|
|
129
|
+
if ( $stor(':root.mobile') !== null ) { return; }
|
|
129
130
|
if ( state === on ) { return; }
|
|
130
131
|
on = state;
|
|
131
132
|
if ( on ) {
|
|
@@ -190,6 +191,7 @@ const startZapper = function(port) {
|
|
|
190
191
|
$stor('svg#sea').addEventListener('touchstart', onSvgTouch, { passive: true });
|
|
191
192
|
$stor('svg#sea').addEventListener('touchend', onSvgTouch);
|
|
192
193
|
$id('quit').addEventListener('click', quitZapper );
|
|
194
|
+
$id('pick').addEventListener('click', resetZapper );
|
|
193
195
|
svgListening(true);
|
|
194
196
|
};
|
|
195
197
|
|
|
@@ -201,6 +203,7 @@ const quitZapper = function() {
|
|
|
201
203
|
$stor('svg#sea').removeEventListener('touchstart', onSvgTouch, { passive: true });
|
|
202
204
|
$stor('svg#sea').removeEventListener('touchend', onSvgTouch);
|
|
203
205
|
$id('quit').removeEventListener('click', quitZapper );
|
|
206
|
+
$id('pick').removeEventListener('click', resetZapper );
|
|
204
207
|
svgListening(false);
|
|
205
208
|
if ( zapperScriptPort ) {
|
|
206
209
|
zapperScriptPort.postMessage({ what: 'quitZapper' });
|
|
@@ -213,6 +216,14 @@ const quitZapper = function() {
|
|
|
213
216
|
|
|
214
217
|
/******************************************************************************/
|
|
215
218
|
|
|
219
|
+
const resetZapper = function() {
|
|
220
|
+
zapperScriptPort.postMessage({
|
|
221
|
+
what: 'unhighlight'
|
|
222
|
+
});
|
|
223
|
+
};
|
|
224
|
+
|
|
225
|
+
/******************************************************************************/
|
|
226
|
+
|
|
216
227
|
// Wait for the content script to establish communication
|
|
217
228
|
|
|
218
229
|
globalThis.addEventListener('message', ev => {
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 Bryan Gillespie
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
Steps to build `cm6.bundle.ubol.min.js` -- command line from repo root:
|
|
2
|
+
|
|
3
|
+
- `git submodule init platform/mv3/extension/lib/codemirror/codemirror-ubol`
|
|
4
|
+
- `cd platform/mv3/extension/lib/codemirror/codemirror-ubol/`
|
|
5
|
+
- We are now in a customized repo forked from <https://github.com/RPGillespie6/codemirror-quickstart>
|
|
6
|
+
- `npm install`
|
|
7
|
+
- `npm run build`
|
|
8
|
+
- `cm6.bundle.ubol.min.js` should be in `dist` directory
|
|
9
|
+
- This is the origin of the `cm6.bundle.ubol.min.js` in the current directory
|