@browserless.io/browserless 2.34.1 → 2.36.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (425) hide show
  1. package/CHANGELOG.md +25 -3
  2. package/build/limiter.js +1 -1
  3. package/build/routes/chrome/http/content.post.body.json +90 -1
  4. package/build/routes/chrome/http/pdf.post.body.json +90 -1
  5. package/build/routes/chrome/http/scrape.post.body.json +90 -1
  6. package/build/routes/chrome/http/scrape.post.response.json +21 -22
  7. package/build/routes/chrome/http/screenshot.post.body.json +90 -1
  8. package/build/routes/chromium/http/content.post.body.json +90 -1
  9. package/build/routes/chromium/http/pdf.post.body.json +90 -1
  10. package/build/routes/chromium/http/scrape.post.body.json +90 -1
  11. package/build/routes/chromium/http/scrape.post.response.json +21 -22
  12. package/build/routes/chromium/http/screenshot.post.body.json +90 -1
  13. package/build/routes/chromium/tests/scrape.spec.js +41 -0
  14. package/build/routes/edge/http/content.post.body.json +90 -1
  15. package/build/routes/edge/http/pdf.post.body.json +90 -1
  16. package/build/routes/edge/http/scrape.post.body.json +90 -1
  17. package/build/routes/edge/http/scrape.post.response.json +21 -22
  18. package/build/routes/edge/http/screenshot.post.body.json +90 -1
  19. package/build/sdk-utils.js +1 -1
  20. package/build/shared/scrape.http.js +13 -3
  21. package/docker/base/Dockerfile +8 -8
  22. package/docker/chrome/Dockerfile +2 -2
  23. package/docker/chromium/Dockerfile +2 -2
  24. package/docker/edge/Dockerfile +2 -2
  25. package/docker/firefox/Dockerfile +2 -2
  26. package/docker/multi/Dockerfile +2 -2
  27. package/docker/sdk/Dockerfile +1 -1
  28. package/docker/webkit/Dockerfile +2 -2
  29. package/extensions/ublocklite/_locales/br_FR/messages.json +1 -1
  30. package/extensions/ublocklite/_locales/he/messages.json +2 -2
  31. package/extensions/ublocklite/_locales/hu/messages.json +1 -1
  32. package/extensions/ublocklite/_locales/pt_BR/messages.json +1 -1
  33. package/extensions/ublocklite/_locales/pt_PT/messages.json +1 -1
  34. package/extensions/ublocklite/_locales/sk/messages.json +6 -6
  35. package/extensions/ublocklite/_locales/sq/messages.json +17 -17
  36. package/extensions/ublocklite/_locales/th/messages.json +1 -1
  37. package/extensions/ublocklite/_locales/tr/messages.json +1 -1
  38. package/extensions/ublocklite/_locales/vi/messages.json +1 -1
  39. package/extensions/ublocklite/css/common.css +5 -3
  40. package/extensions/ublocklite/css/default.css +10 -0
  41. package/extensions/ublocklite/js/dnr-parser.js +1 -1
  42. package/extensions/ublocklite/js/filter-lists.js +1 -4
  43. package/extensions/ublocklite/js/popup.js +2 -2
  44. package/extensions/ublocklite/js/ruleset-manager.js +5 -121
  45. package/extensions/ublocklite/js/rw-dnr-editor.js +8 -4
  46. package/extensions/ublocklite/js/scripting/tool-overlay.js +1 -0
  47. package/extensions/ublocklite/js/settings.js +2 -1
  48. package/extensions/ublocklite/js/static-filtering-parser.js +8 -8
  49. package/extensions/ublocklite/js/ubo-parser.js +181 -65
  50. package/extensions/ublocklite/manifest.json +3 -3
  51. package/extensions/ublocklite/rulesets/generic-details.json +6 -16
  52. package/extensions/ublocklite/rulesets/main/adguard-mobile.json +25 -4
  53. package/extensions/ublocklite/rulesets/main/adguard-spyware-url.json +615 -1
  54. package/extensions/ublocklite/rulesets/main/annoyances-cookies.json +19 -7
  55. package/extensions/ublocklite/rulesets/main/annoyances-others.json +4 -2
  56. package/extensions/ublocklite/rulesets/main/annoyances-overlays.json +22 -2
  57. package/extensions/ublocklite/rulesets/main/annoyances-widgets.json +1 -1
  58. package/extensions/ublocklite/rulesets/main/chn-0.json +93 -28
  59. package/extensions/ublocklite/rulesets/main/cze-0.json +6 -1
  60. package/extensions/ublocklite/rulesets/main/deu-0.json +11 -5
  61. package/extensions/ublocklite/rulesets/main/dpollock-0.json +2 -0
  62. package/extensions/ublocklite/rulesets/main/easylist.json +135 -29
  63. package/extensions/ublocklite/rulesets/main/easyprivacy.json +132 -27
  64. package/extensions/ublocklite/rulesets/main/est-0.json +1 -1
  65. package/extensions/ublocklite/rulesets/main/fin-0.json +9 -0
  66. package/extensions/ublocklite/rulesets/main/fra-0.json +48 -10
  67. package/extensions/ublocklite/rulesets/main/hun-0.json +4 -1
  68. package/extensions/ublocklite/rulesets/main/idn-0.json +1 -1
  69. package/extensions/ublocklite/rulesets/main/ind-0.json +93 -150
  70. package/extensions/ublocklite/rulesets/main/irn-0.json +33 -7
  71. package/extensions/ublocklite/rulesets/main/isr-0.json +20 -2
  72. package/extensions/ublocklite/rulesets/main/ita-0.json +3 -1
  73. package/extensions/ublocklite/rulesets/main/jpn-1.json +60 -13
  74. package/extensions/ublocklite/rulesets/main/kor-1.json +38 -6
  75. package/extensions/ublocklite/rulesets/main/ltu-0.json +3 -1
  76. package/extensions/ublocklite/rulesets/main/lva-0.json +2 -1
  77. package/extensions/ublocklite/rulesets/main/nld-0.json +6 -1
  78. package/extensions/ublocklite/rulesets/main/nor-0.json +13 -4
  79. package/extensions/ublocklite/rulesets/main/pgl.json +8 -9
  80. package/extensions/ublocklite/rulesets/main/pol-0.json +13 -1
  81. package/extensions/ublocklite/rulesets/main/rou-1.json +17 -1
  82. package/extensions/ublocklite/rulesets/main/rus-0.json +101 -24
  83. package/extensions/ublocklite/rulesets/main/rus-1.json +112 -4
  84. package/extensions/ublocklite/rulesets/main/spa-1.json +38 -14
  85. package/extensions/ublocklite/rulesets/main/stevenblack-hosts.json +13076 -6934
  86. package/extensions/ublocklite/rulesets/main/swe-1.json +77 -43
  87. package/extensions/ublocklite/rulesets/main/tha-0.json +7 -1
  88. package/extensions/ublocklite/rulesets/main/tur-0.json +45 -5
  89. package/extensions/ublocklite/rulesets/main/ublock-badware.json +76 -102
  90. package/extensions/ublocklite/rulesets/main/ublock-filters.json +770 -99
  91. package/extensions/ublocklite/rulesets/main/ubol-tests.json +43 -0
  92. package/extensions/ublocklite/rulesets/main/ukr-0.json +20 -1
  93. package/extensions/ublocklite/rulesets/main/urlhaus-full.json +503 -614
  94. package/extensions/ublocklite/rulesets/main/vie-1.json +61 -52
  95. package/extensions/ublocklite/rulesets/regex/chn-0.json +6 -3
  96. package/extensions/ublocklite/rulesets/regex/deu-0.json +0 -1
  97. package/extensions/ublocklite/rulesets/regex/jpn-1.json +1 -1
  98. package/extensions/ublocklite/rulesets/regex/kor-1.json +1 -0
  99. package/extensions/ublocklite/rulesets/regex/pol-0.json +1 -0
  100. package/extensions/ublocklite/rulesets/regex/rus-0.json +1 -0
  101. package/extensions/ublocklite/rulesets/regex/rus-1.json +24 -0
  102. package/extensions/ublocklite/rulesets/regex/tur-0.json +2 -1
  103. package/extensions/ublocklite/rulesets/regex/ublock-badware.json +10 -8
  104. package/extensions/ublocklite/rulesets/regex/ublock-filters.json +26 -9
  105. package/extensions/ublocklite/rulesets/ruleset-details.json +238 -458
  106. package/extensions/ublocklite/rulesets/scripting/generic/annoyances-cookies.js +3 -3
  107. package/extensions/ublocklite/rulesets/scripting/generic/annoyances-notifications.js +1 -1
  108. package/extensions/ublocklite/rulesets/scripting/generic/annoyances-overlays.js +1 -1
  109. package/extensions/ublocklite/rulesets/scripting/generic/annoyances-social.js +1 -1
  110. package/extensions/ublocklite/rulesets/scripting/generic/chn-0.js +3 -3
  111. package/extensions/ublocklite/rulesets/scripting/generic/easylist.js +3 -3
  112. package/extensions/ublocklite/rulesets/scripting/generic/fra-0.js +1 -1
  113. package/extensions/ublocklite/rulesets/scripting/generic/idn-0.js +1 -1
  114. package/extensions/ublocklite/rulesets/scripting/generic/jpn-1.js +1 -1
  115. package/extensions/ublocklite/rulesets/scripting/generic/nld-0.js +1 -1
  116. package/extensions/ublocklite/rulesets/scripting/generic/nor-0.js +1 -1
  117. package/extensions/ublocklite/rulesets/scripting/generic/spa-1.js +3 -3
  118. package/extensions/ublocklite/rulesets/scripting/generic/swe-1.js +1 -1
  119. package/extensions/ublocklite/rulesets/scripting/generic/tur-0.js +3 -3
  120. package/extensions/ublocklite/rulesets/scripting/generic/ublock-filters.js +3 -3
  121. package/extensions/ublocklite/rulesets/scripting/generic/ukr-0.js +1 -1
  122. package/extensions/ublocklite/rulesets/scripting/generic/vie-1.js +2 -2
  123. package/extensions/ublocklite/rulesets/scripting/generichigh/chn-0.css +2 -9
  124. package/extensions/ublocklite/rulesets/scripting/generichigh/easylist.css +1 -1
  125. package/extensions/ublocklite/rulesets/scripting/generichigh/idn-0.css +1 -0
  126. package/extensions/ublocklite/rulesets/scripting/generichigh/ublock-filters.css +0 -2
  127. package/extensions/ublocklite/rulesets/scripting/procedural/adguard-mobile.js +3 -3
  128. package/extensions/ublocklite/rulesets/scripting/procedural/annoyances-cookies.js +3 -3
  129. package/extensions/ublocklite/rulesets/scripting/procedural/annoyances-notifications.js +3 -3
  130. package/extensions/ublocklite/rulesets/scripting/procedural/annoyances-others.js +3 -3
  131. package/extensions/ublocklite/rulesets/scripting/procedural/annoyances-overlays.js +3 -3
  132. package/extensions/ublocklite/rulesets/scripting/procedural/annoyances-social.js +3 -3
  133. package/extensions/ublocklite/rulesets/scripting/procedural/chn-0.js +1 -1
  134. package/extensions/ublocklite/rulesets/scripting/procedural/deu-0.js +3 -3
  135. package/extensions/ublocklite/rulesets/scripting/procedural/easylist.js +3 -3
  136. package/extensions/ublocklite/rulesets/scripting/procedural/fra-0.js +3 -3
  137. package/extensions/ublocklite/rulesets/scripting/procedural/idn-0.js +3 -3
  138. package/extensions/ublocklite/rulesets/scripting/procedural/irn-0.js +3 -3
  139. package/extensions/ublocklite/rulesets/scripting/procedural/jpn-1.js +3 -3
  140. package/extensions/ublocklite/rulesets/scripting/procedural/kor-1.js +3 -3
  141. package/extensions/ublocklite/rulesets/scripting/procedural/nld-0.js +3 -3
  142. package/extensions/ublocklite/rulesets/scripting/procedural/rou-1.js +3 -3
  143. package/extensions/ublocklite/rulesets/scripting/procedural/rus-0.js +3 -3
  144. package/extensions/ublocklite/rulesets/scripting/procedural/rus-1.js +3 -3
  145. package/extensions/ublocklite/rulesets/scripting/procedural/spa-1.js +3 -3
  146. package/extensions/ublocklite/rulesets/scripting/procedural/swe-1.js +3 -3
  147. package/extensions/ublocklite/rulesets/scripting/procedural/tur-0.js +3 -3
  148. package/extensions/ublocklite/rulesets/scripting/procedural/ublock-filters.js +3 -3
  149. package/extensions/ublocklite/rulesets/scripting/procedural/vie-1.js +2 -2
  150. package/extensions/ublocklite/rulesets/scripting/scriptlet/adguard-mobile.abort-on-property-read.js +2 -2
  151. package/extensions/ublocklite/rulesets/scripting/scriptlet/adguard-mobile.set-constant.js +2 -2
  152. package/extensions/ublocklite/rulesets/scripting/scriptlet/adguard-mobile.set-cookie.js +2 -2
  153. package/extensions/ublocklite/rulesets/scripting/scriptlet/adguard-mobile.trusted-replace-node-text.js +450 -0
  154. package/extensions/ublocklite/rulesets/scripting/scriptlet/{jpn-1.abort-on-property-write.js → adguard-mobile.trusted-set-attr.js} +107 -41
  155. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-cookies.prevent-requestAnimationFrame.js +407 -0
  156. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-cookies.remove-node-text.js +1 -1
  157. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-cookies.set-cookie.js +2 -2
  158. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-cookies.set-local-storage-item.js +2 -2
  159. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-cookies.trusted-click-element.js +2 -2
  160. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-cookies.trusted-replace-node-text.js +2 -2
  161. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-cookies.trusted-set-cookie.js +2 -2
  162. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-cookies.trusted-set-local-storage-item.js +2 -2
  163. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-others.addEventListener-defuser.js +1 -1
  164. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.abort-current-script.js +1 -1
  165. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.abort-on-stack-trace.js +2 -2
  166. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.addEventListener-defuser.js +2 -2
  167. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.prevent-fetch.js +9 -2
  168. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.prevent-setInterval.js +2 -2
  169. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.prevent-setTimeout.js +2 -2
  170. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.prevent-xhr.js +2 -2
  171. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.remove-cookie.js +2 -2
  172. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.set-constant.js +2 -2
  173. package/extensions/ublocklite/rulesets/scripting/scriptlet/chn-0.abort-current-script.js +2 -2
  174. package/extensions/ublocklite/rulesets/scripting/scriptlet/chn-0.addEventListener-defuser.js +2 -2
  175. package/extensions/ublocklite/rulesets/scripting/scriptlet/chn-0.adjust-setTimeout.js +2 -2
  176. package/extensions/ublocklite/rulesets/scripting/scriptlet/chn-0.json-prune.js +1 -1
  177. package/extensions/ublocklite/rulesets/scripting/scriptlet/chn-0.prevent-fetch.js +9 -2
  178. package/extensions/ublocklite/rulesets/scripting/scriptlet/chn-0.prevent-setTimeout.js +2 -2
  179. package/extensions/ublocklite/rulesets/scripting/scriptlet/chn-0.prevent-window-open.js +1 -1
  180. package/extensions/ublocklite/rulesets/scripting/scriptlet/chn-0.set-constant.js +2 -2
  181. package/extensions/ublocklite/rulesets/scripting/scriptlet/{vie-1.m3u-prune.js → chn-0.spoof-css.js} +109 -148
  182. package/extensions/ublocklite/rulesets/scripting/scriptlet/easyprivacy.abort-current-script.js +1 -1
  183. package/extensions/ublocklite/rulesets/scripting/scriptlet/easyprivacy.prevent-fetch.js +7 -0
  184. package/extensions/ublocklite/rulesets/scripting/scriptlet/easyprivacy.set-constant.js +1 -1
  185. package/extensions/ublocklite/rulesets/scripting/scriptlet/fra-0.addEventListener-defuser.js +2 -2
  186. package/extensions/ublocklite/rulesets/scripting/scriptlet/fra-0.adjust-setTimeout.js +2 -2
  187. package/extensions/ublocklite/rulesets/scripting/scriptlet/fra-0.prevent-fetch.js +7 -0
  188. package/extensions/ublocklite/rulesets/scripting/scriptlet/fra-0.prevent-setTimeout.js +2 -2
  189. package/extensions/ublocklite/rulesets/scripting/scriptlet/fra-0.set-constant.js +1 -1
  190. package/extensions/ublocklite/rulesets/scripting/scriptlet/hun-0.set-local-storage-item.js +2 -2
  191. package/extensions/ublocklite/rulesets/scripting/scriptlet/idn-0.prevent-fetch.js +7 -0
  192. package/extensions/ublocklite/rulesets/scripting/scriptlet/irn-0.abort-current-script.js +2 -2
  193. package/extensions/ublocklite/rulesets/scripting/scriptlet/irn-0.prevent-fetch.js +7 -0
  194. package/extensions/ublocklite/rulesets/scripting/scriptlet/irn-0.set-constant.js +2 -2
  195. package/extensions/ublocklite/rulesets/scripting/scriptlet/irn-0.set-session-storage-item.js +2 -2
  196. package/extensions/ublocklite/rulesets/scripting/scriptlet/isr-0.prevent-fetch.js +7 -0
  197. package/extensions/ublocklite/rulesets/scripting/scriptlet/jpn-1.json-prune.js +2 -2
  198. package/extensions/ublocklite/rulesets/scripting/scriptlet/jpn-1.prevent-fetch.js +7 -0
  199. package/extensions/ublocklite/rulesets/scripting/scriptlet/jpn-1.remove-attr.js +1 -1
  200. package/extensions/ublocklite/rulesets/scripting/scriptlet/jpn-1.set-cookie.js +442 -0
  201. package/extensions/ublocklite/rulesets/scripting/scriptlet/{chn-0.json-prune-fetch-response.js → kor-1.json-prune-xhr-response.js} +71 -62
  202. package/extensions/ublocklite/rulesets/scripting/scriptlet/kor-1.json-prune.js +2 -2
  203. package/extensions/ublocklite/rulesets/scripting/scriptlet/kor-1.prevent-fetch.js +7 -0
  204. package/extensions/ublocklite/rulesets/scripting/scriptlet/kor-1.prevent-setTimeout.js +2 -2
  205. package/extensions/ublocklite/rulesets/scripting/scriptlet/kor-1.set-constant.js +2 -2
  206. package/extensions/ublocklite/rulesets/scripting/scriptlet/nld-0.prevent-fetch.js +7 -0
  207. package/extensions/ublocklite/rulesets/scripting/scriptlet/nor-0.prevent-fetch.js +7 -0
  208. package/extensions/ublocklite/rulesets/scripting/scriptlet/rou-1.abort-current-script.js +2 -2
  209. package/extensions/ublocklite/rulesets/scripting/scriptlet/rou-1.remove-node-text.js +1 -1
  210. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.abort-on-property-read.js +2 -2
  211. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.addEventListener-defuser.js +3 -3
  212. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.prevent-fetch.js +10 -3
  213. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.prevent-setTimeout.js +2 -2
  214. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.prevent-xhr.js +1 -1
  215. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.remove-cookie.js +3 -3
  216. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.remove-node-text.js +3 -3
  217. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.set-attr.js +2 -2
  218. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.set-constant.js +3 -3
  219. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.set-local-storage-item.js +2 -2
  220. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-1.abort-on-property-read.js +3 -3
  221. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-1.addEventListener-defuser.js +1 -1
  222. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-1.json-prune.js +2 -2
  223. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-1.prevent-fetch.js +7 -0
  224. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-1.remove-cookie.js +4 -4
  225. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-1.set-constant.js +3 -3
  226. package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.abort-current-script.js +2 -2
  227. package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.abort-on-property-read.js +1 -1
  228. package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.addEventListener-defuser.js +1 -1
  229. package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.adjust-setInterval.js +1 -1
  230. package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.json-prune.js +2 -2
  231. package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.noeval-if.js +1 -1
  232. package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.prevent-fetch.js +9 -2
  233. package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.prevent-requestAnimationFrame.js +2 -2
  234. package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.prevent-setTimeout.js +2 -2
  235. package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.prevent-window-open.js +1 -1
  236. package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.set-constant.js +2 -2
  237. package/extensions/ublocklite/rulesets/scripting/scriptlet/swe-1.addEventListener-defuser.js +2 -2
  238. package/extensions/ublocklite/rulesets/scripting/scriptlet/swe-1.href-sanitizer.js +2 -2
  239. package/extensions/ublocklite/rulesets/scripting/scriptlet/swe-1.prevent-setTimeout.js +2 -2
  240. package/extensions/ublocklite/rulesets/scripting/scriptlet/tur-0.abort-on-property-read.js +2 -2
  241. package/extensions/ublocklite/rulesets/scripting/scriptlet/tur-0.abort-on-property-write.js +1 -1
  242. package/extensions/ublocklite/rulesets/scripting/scriptlet/tur-0.addEventListener-defuser.js +2 -2
  243. package/extensions/ublocklite/rulesets/scripting/scriptlet/tur-0.prevent-fetch.js +7 -0
  244. package/extensions/ublocklite/rulesets/scripting/scriptlet/tur-0.prevent-setTimeout.js +2 -2
  245. package/extensions/ublocklite/rulesets/scripting/scriptlet/tur-0.prevent-window-open.js +1 -1
  246. package/extensions/ublocklite/rulesets/scripting/scriptlet/tur-0.remove-attr.js +2 -2
  247. package/extensions/ublocklite/rulesets/scripting/scriptlet/tur-0.remove-node-text.js +2 -2
  248. package/extensions/ublocklite/rulesets/scripting/scriptlet/tur-0.set-constant.js +2 -2
  249. package/extensions/ublocklite/rulesets/scripting/scriptlet/tur-0.set-cookie.js +2 -2
  250. package/extensions/ublocklite/rulesets/scripting/scriptlet/{ublock-filters.evaldata-prune.js → ublock-badware.addEventListener-defuser.js} +103 -173
  251. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-experimental.trusted-replace-node-text.js +450 -0
  252. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.abort-current-script.js +3 -3
  253. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.abort-on-property-read.js +3 -3
  254. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.abort-on-property-write.js +2 -2
  255. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.abort-on-stack-trace.js +3 -3
  256. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.addEventListener-defuser.js +3 -3
  257. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.adjust-setInterval.js +2 -2
  258. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.adjust-setTimeout.js +2 -2
  259. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.disable-newtab-links.js +1 -1
  260. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.href-sanitizer.js +2 -2
  261. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.json-edit-xhr-response.js +851 -0
  262. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.json-prune-fetch-response.js +2 -2
  263. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.json-prune-xhr-response.js +3 -3
  264. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.json-prune.js +3 -3
  265. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.m3u-prune.js +2 -2
  266. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.noeval-if.js +2 -2
  267. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.nowebrtc.js +2 -2
  268. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.prevent-fetch.js +9 -2
  269. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.prevent-requestAnimationFrame.js +2 -2
  270. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.prevent-setInterval.js +2 -2
  271. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.prevent-setTimeout.js +3 -3
  272. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.prevent-window-open.js +2 -2
  273. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.prevent-xhr.js +3 -3
  274. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.remove-attr.js +2 -2
  275. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.remove-cookie.js +2 -2
  276. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.remove-node-text.js +2 -2
  277. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.set-attr.js +2 -2
  278. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.set-constant.js +3 -3
  279. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.set-cookie.js +2 -2
  280. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.set-local-storage-item.js +2 -2
  281. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.spoof-css.js +2 -2
  282. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.trusted-click-element.js +1 -1
  283. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.trusted-create-html.js +2 -2
  284. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.trusted-override-element-method.js +1 -1
  285. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.trusted-prevent-fetch.js +7 -0
  286. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.trusted-prevent-xhr.js +1 -1
  287. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.trusted-replace-argument.js +2 -2
  288. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.trusted-replace-node-text.js +3 -3
  289. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.trusted-replace-outbound-text.js +2 -2
  290. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.trusted-replace-xhr-response.js +1 -1
  291. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.trusted-set-constant.js +1 -1
  292. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.trusted-set-cookie.js +3 -3
  293. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.trusted-set-local-storage-item.js +2 -2
  294. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.trusted-suppress-native-method.js +1 -1
  295. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.xml-prune.js +2 -2
  296. package/extensions/ublocklite/rulesets/scripting/scriptlet/ukr-0.prevent-fetch.js +7 -0
  297. package/extensions/ublocklite/rulesets/scripting/scriptlet/vie-1.abort-current-script.js +2 -2
  298. package/extensions/ublocklite/rulesets/scripting/scriptlet/vie-1.abort-on-property-read.js +2 -2
  299. package/extensions/ublocklite/rulesets/scripting/scriptlet/vie-1.json-prune.js +1 -1
  300. package/extensions/ublocklite/rulesets/scripting/scriptlet/vie-1.prevent-fetch.js +7 -0
  301. package/extensions/ublocklite/rulesets/scripting/specific/adguard-mobile.js +3 -3
  302. package/extensions/ublocklite/rulesets/scripting/specific/annoyances-cookies.js +3 -3
  303. package/extensions/ublocklite/rulesets/scripting/specific/annoyances-notifications.js +3 -3
  304. package/extensions/ublocklite/rulesets/scripting/specific/annoyances-others.js +3 -3
  305. package/extensions/ublocklite/rulesets/scripting/specific/annoyances-overlays.js +3 -3
  306. package/extensions/ublocklite/rulesets/scripting/specific/annoyances-social.js +3 -3
  307. package/extensions/ublocklite/rulesets/scripting/specific/chn-0.js +3 -3
  308. package/extensions/ublocklite/rulesets/scripting/specific/deu-0.js +3 -3
  309. package/extensions/ublocklite/rulesets/scripting/specific/easylist.js +3 -3
  310. package/extensions/ublocklite/rulesets/scripting/specific/fin-0.js +3 -3
  311. package/extensions/ublocklite/rulesets/scripting/specific/fra-0.js +3 -3
  312. package/extensions/ublocklite/rulesets/scripting/specific/hun-0.js +3 -3
  313. package/extensions/ublocklite/rulesets/scripting/specific/idn-0.js +3 -3
  314. package/extensions/ublocklite/rulesets/scripting/specific/ind-0.js +3 -3
  315. package/extensions/ublocklite/rulesets/scripting/specific/irn-0.js +3 -3
  316. package/extensions/ublocklite/rulesets/scripting/specific/isr-0.js +3 -3
  317. package/extensions/ublocklite/rulesets/scripting/specific/ita-0.js +3 -3
  318. package/extensions/ublocklite/rulesets/scripting/specific/jpn-1.js +3 -3
  319. package/extensions/ublocklite/rulesets/scripting/specific/kor-1.js +3 -3
  320. package/extensions/ublocklite/rulesets/scripting/specific/nld-0.js +3 -3
  321. package/extensions/ublocklite/rulesets/scripting/specific/nor-0.js +3 -3
  322. package/extensions/ublocklite/rulesets/scripting/specific/rou-1.js +3 -3
  323. package/extensions/ublocklite/rulesets/scripting/specific/rus-0.js +3 -3
  324. package/extensions/ublocklite/rulesets/scripting/specific/rus-1.js +3 -3
  325. package/extensions/ublocklite/rulesets/scripting/specific/spa-1.js +3 -3
  326. package/extensions/ublocklite/rulesets/scripting/specific/swe-1.js +3 -3
  327. package/extensions/ublocklite/rulesets/scripting/specific/tha-0.js +3 -3
  328. package/extensions/ublocklite/rulesets/scripting/specific/tur-0.js +3 -3
  329. package/extensions/ublocklite/rulesets/scripting/specific/ublock-filters.js +3 -3
  330. package/extensions/ublocklite/rulesets/scripting/specific/ukr-0.js +3 -3
  331. package/extensions/ublocklite/rulesets/scripting/specific/vie-1.js +3 -3
  332. package/extensions/ublocklite/rulesets/scriptlet-details.json +271 -174
  333. package/extensions/ublocklite/rulesets/strictblock/adguard-mobile.json +3 -2
  334. package/extensions/ublocklite/rulesets/strictblock/annoyances-cookies.json +1 -0
  335. package/extensions/ublocklite/rulesets/strictblock/chn-0.json +329 -791
  336. package/extensions/ublocklite/rulesets/strictblock/dpollock-0.json +2 -0
  337. package/extensions/ublocklite/rulesets/strictblock/easylist.json +1 -1
  338. package/extensions/ublocklite/rulesets/strictblock/easyprivacy.json +62 -4
  339. package/extensions/ublocklite/rulesets/strictblock/fra-0.json +429 -49
  340. package/extensions/ublocklite/rulesets/strictblock/irn-0.json +2 -0
  341. package/extensions/ublocklite/rulesets/strictblock/jpn-1.json +183 -176
  342. package/extensions/ublocklite/rulesets/strictblock/kor-1.json +6 -1
  343. package/extensions/ublocklite/rulesets/strictblock/nor-0.json +1 -1
  344. package/extensions/ublocklite/rulesets/strictblock/pgl.json +8 -9
  345. package/extensions/ublocklite/rulesets/strictblock/pol-0.json +1 -0
  346. package/extensions/ublocklite/rulesets/strictblock/rus-1.json +1 -0
  347. package/extensions/ublocklite/rulesets/strictblock/spa-1.json +0 -2
  348. package/extensions/ublocklite/rulesets/strictblock/stevenblack-hosts.json +13076 -6934
  349. package/extensions/ublocklite/rulesets/strictblock/swe-1.json +2 -0
  350. package/extensions/ublocklite/rulesets/strictblock/tur-0.json +4 -0
  351. package/extensions/ublocklite/rulesets/strictblock/ublock-badware.json +580 -577
  352. package/extensions/ublocklite/rulesets/strictblock/ublock-filters.json +3 -2
  353. package/extensions/ublocklite/rulesets/strictblock/urlhaus-full.json +503 -614
  354. package/extensions/ublocklite/rulesets/strictblock/vie-1.json +6 -7
  355. package/extensions/ublocklite/rulesets/urlskip/ublock-filters.json +30 -0
  356. package/extensions/ublocklite/ublock.zip +0 -0
  357. package/package.json +23 -21
  358. package/scripts/install-adblock.js +25 -4
  359. package/scripts/start.sh +1 -1
  360. package/scripts/test.sh +2 -2
  361. package/src/limiter.ts +1 -1
  362. package/src/routes/chromium/tests/scrape.spec.ts +48 -0
  363. package/src/sdk-utils.ts +1 -1
  364. package/src/shared/scrape.http.ts +17 -5
  365. package/static/docs/swagger.json +330 -102
  366. package/static/docs/swagger.min.json +329 -101
  367. package/static/function/client.js +203 -104
  368. package/static/function/index.html +203 -104
  369. package/extensions/ublocklite/rulesets/modify-headers/annoyances-overlays.json +0 -108
  370. package/extensions/ublocklite/rulesets/modify-headers/chn-0.json +0 -316
  371. package/extensions/ublocklite/rulesets/modify-headers/cze-0.json +0 -25
  372. package/extensions/ublocklite/rulesets/modify-headers/deu-0.json +0 -24
  373. package/extensions/ublocklite/rulesets/modify-headers/easylist.json +0 -14
  374. package/extensions/ublocklite/rulesets/modify-headers/easyprivacy.json +0 -48
  375. package/extensions/ublocklite/rulesets/modify-headers/fra-0.json +0 -215
  376. package/extensions/ublocklite/rulesets/modify-headers/irn-0.json +0 -45
  377. package/extensions/ublocklite/rulesets/modify-headers/isr-0.json +0 -50
  378. package/extensions/ublocklite/rulesets/modify-headers/rus-0.json +0 -40
  379. package/extensions/ublocklite/rulesets/modify-headers/rus-1.json +0 -22
  380. package/extensions/ublocklite/rulesets/modify-headers/swe-1.json +0 -46
  381. package/extensions/ublocklite/rulesets/modify-headers/ublock-filters.json +0 -54
  382. package/extensions/ublocklite/rulesets/modify-headers/ubol-tests.json +0 -25
  383. package/extensions/ublocklite/rulesets/modify-headers/vie-1.json +0 -162
  384. package/extensions/ublocklite/rulesets/redirect/adguard-mobile.json +0 -20
  385. package/extensions/ublocklite/rulesets/redirect/annoyances-overlays.json +0 -15
  386. package/extensions/ublocklite/rulesets/redirect/chn-0.json +0 -40
  387. package/extensions/ublocklite/rulesets/redirect/cze-0.json +0 -76
  388. package/extensions/ublocklite/rulesets/redirect/deu-0.json +0 -79
  389. package/extensions/ublocklite/rulesets/redirect/easylist.json +0 -103
  390. package/extensions/ublocklite/rulesets/redirect/easyprivacy.json +0 -137
  391. package/extensions/ublocklite/rulesets/redirect/fin-0.json +0 -121
  392. package/extensions/ublocklite/rulesets/redirect/fra-0.json +0 -35
  393. package/extensions/ublocklite/rulesets/redirect/hun-0.json +0 -38
  394. package/extensions/ublocklite/rulesets/redirect/irn-0.json +0 -73
  395. package/extensions/ublocklite/rulesets/redirect/isr-0.json +0 -17
  396. package/extensions/ublocklite/rulesets/redirect/jpn-1.json +0 -29
  397. package/extensions/ublocklite/rulesets/redirect/kor-1.json +0 -25
  398. package/extensions/ublocklite/rulesets/redirect/ltu-0.json +0 -33
  399. package/extensions/ublocklite/rulesets/redirect/nld-0.json +0 -79
  400. package/extensions/ublocklite/rulesets/redirect/nor-0.json +0 -132
  401. package/extensions/ublocklite/rulesets/redirect/pol-0.json +0 -15
  402. package/extensions/ublocklite/rulesets/redirect/rou-1.json +0 -53
  403. package/extensions/ublocklite/rulesets/redirect/rus-0.json +0 -21
  404. package/extensions/ublocklite/rulesets/redirect/rus-1.json +0 -118
  405. package/extensions/ublocklite/rulesets/redirect/spa-1.json +0 -27
  406. package/extensions/ublocklite/rulesets/redirect/swe-1.json +0 -14
  407. package/extensions/ublocklite/rulesets/redirect/tha-0.json +0 -78
  408. package/extensions/ublocklite/rulesets/redirect/tur-0.json +0 -24
  409. package/extensions/ublocklite/rulesets/redirect/ublock-badware.json +0 -18
  410. package/extensions/ublocklite/rulesets/redirect/ublock-filters.json +0 -548
  411. package/extensions/ublocklite/rulesets/redirect/ubol-tests.json +0 -22
  412. package/extensions/ublocklite/rulesets/redirect/ukr-0.json +0 -18
  413. package/extensions/ublocklite/rulesets/redirect/vie-1.json +0 -117
  414. package/extensions/ublocklite/rulesets/removeparam/adguard-spyware-url.json +0 -612
  415. package/extensions/ublocklite/rulesets/removeparam/annoyances-overlays.json +0 -27
  416. package/extensions/ublocklite/rulesets/removeparam/chn-0.json +0 -48
  417. package/extensions/ublocklite/rulesets/removeparam/est-0.json +0 -26
  418. package/extensions/ublocklite/rulesets/removeparam/fin-0.json +0 -52
  419. package/extensions/ublocklite/rulesets/removeparam/irn-0.json +0 -18
  420. package/extensions/ublocklite/rulesets/removeparam/kor-1.json +0 -26
  421. package/extensions/ublocklite/rulesets/removeparam/rus-0.json +0 -19
  422. package/extensions/ublocklite/rulesets/removeparam/rus-1.json +0 -99
  423. package/extensions/ublocklite/rulesets/removeparam/swe-1.json +0 -125
  424. package/extensions/ublocklite/rulesets/removeparam/ublock-filters.json +0 -64
  425. package/extensions/ublocklite/rulesets/removeparam/ukr-0.json +0 -49
@@ -63,6 +63,16 @@ const validRedirectResources = (( ) => {
63
63
  return out;
64
64
  })();
65
65
 
66
+ const isNotEntity = hn => hn.endsWith('.*') === false;
67
+
68
+ /******************************************************************************/
69
+
70
+ function toSuperDomain(hn) {
71
+ const pos = hn.indexOf('.');
72
+ if ( pos === -1 ) { return; }
73
+ return hn.slice(pos+1);
74
+ }
75
+
66
76
  /******************************************************************************/
67
77
 
68
78
  function parseHostnameList(iter) {
@@ -93,64 +103,145 @@ function parseHostnameList(iter) {
93
103
 
94
104
  /******************************************************************************/
95
105
 
96
- export function mergeIncludeExclude(rules) {
97
- const includeExcludes = [
98
- { includeName: 'requestDomains', excludeName: 'excludedRequestDomains' },
99
- { includeName: 'initiatorDomains', excludeName: 'excludedInitiatorDomains' },
100
- { includeName: 'resourceTypes', excludeName: 'excludedResourceTypes' },
101
- { includeName: 'requestMethods', excludeName: 'excludedRequestMethods' },
106
+ function ownerFromPropertyPath(root, path) {
107
+ let owner = root;
108
+ let prop = path;
109
+ for (;;) {
110
+ if ( owner instanceof Object === false ) { break; }
111
+ const pos = prop.indexOf('.');
112
+ if ( pos === -1 ) { break; }
113
+ owner = owner[prop.slice(0, pos)];
114
+ prop = prop.slice(pos+1)
115
+ }
116
+ return { owner: owner ?? undefined, prop };
117
+ }
118
+
119
+ /******************************************************************************/
120
+
121
+ function mergeArrays(rules, propertyPath) {
122
+ const out = [];
123
+ const distinctRules = new Map();
124
+ for ( const rule of rules ) {
125
+ const { id } = rule;
126
+ const { owner, prop } = ownerFromPropertyPath(rule, propertyPath);
127
+ if ( owner === undefined || Array.isArray(owner[prop]) === false ) {
128
+ out.push(rule);
129
+ continue;
130
+ }
131
+ const collection = owner[prop] || [];
132
+ owner[prop] = undefined;
133
+ rule.id = undefined;
134
+ const hash = JSON.stringify(rule);
135
+ const details = distinctRules.get(hash) ||
136
+ { id, collection: new Set() };
137
+ if ( details.collection.size === 0 ) {
138
+ distinctRules.set(hash, details);
139
+ }
140
+ for ( const hn of collection ) {
141
+ details.collection.add(hn);
142
+ }
143
+ }
144
+ for ( const [ hash, { id, collection } ] of distinctRules ) {
145
+ const rule = JSON.parse(hash);
146
+ if ( id ) {
147
+ rule.id = id;
148
+ }
149
+ if ( collection.size !== 0 ) {
150
+ const { owner, prop } = ownerFromPropertyPath(rule, propertyPath);
151
+ owner[prop] = Array.from(collection).sort();
152
+ }
153
+ out.push(rule);
154
+ }
155
+ return out;
156
+ }
157
+
158
+ /******************************************************************************/
159
+
160
+ function minimizeRuleset(rules) {
161
+ rules = mergeArrays(rules, 'condition.requestDomains');
162
+ rules = mergeArrays(rules, 'condition.excludedRequestDomains');
163
+ rules = mergeArrays(rules, 'condition.initiatorDomains');
164
+ rules = mergeArrays(rules, 'condition.excludedInitiatorDomains');
165
+ rules = mergeArrays(rules, 'condition.resourceTypes');
166
+ rules = mergeArrays(rules, 'condition.excludedRequestMethods');
167
+ rules = mergeArrays(rules, 'condition.requestMethods');
168
+ rules = mergeArrays(rules, 'condition.excludedResourceTypes');
169
+ rules = mergeArrays(rules, 'action.redirect.transform.queryTransform.removeParams');
170
+ return rules;
171
+ }
172
+
173
+ /******************************************************************************/
174
+
175
+ function minimizeRules(rules) {
176
+ const hostnameListProp = [
177
+ 'requestDomains',
178
+ 'excludedRequestDomains',
179
+ 'initiatorDomains',
180
+ 'excludedInitiatorDomains',
102
181
  ];
103
- for ( const { includeName, excludeName } of includeExcludes ) {
104
- const out = [];
105
- const distinctRules = new Map();
106
- for ( const rule of rules ) {
107
- const { id, condition } = rule;
108
- if ( Boolean(condition[includeName]?.length) === false ) {
109
- if ( Boolean(condition[excludeName]?.length) === false ) {
110
- out.push(rule);
111
- continue;
182
+ for ( const rule of rules ) {
183
+ for ( const prop of hostnameListProp ) {
184
+ const hostnames = rule.condition[prop];
185
+ if ( hostnames === undefined ) { continue; }
186
+ if ( hostnames.length === 1 ) { continue; }
187
+ const hnSet = new Set(hostnames);
188
+ for ( let hn of hnSet ) {
189
+ for (;;) {
190
+ const hnup = toSuperDomain(hn);
191
+ if ( hnup === undefined ) { break; }
192
+ if ( hnSet.has(hnup) ) { hnSet.delete(hn); }
193
+ hn = hnup;
112
194
  }
113
195
  }
114
- const included = condition[includeName] || [];
115
- condition[includeName] = undefined;
116
- const excluded = condition[excludeName] || [];
117
- condition[excludeName] = undefined;
118
- rule.id = undefined;
119
- const hash = JSON.stringify(rule);
120
- const details = distinctRules.get(hash) ||
121
- { id, included: new Set(), excluded: new Set() };
122
- if ( details.included.size === 0 && details.excluded.size === 0 ) {
123
- distinctRules.set(hash, details);
124
- }
125
- for ( const hn of included ) {
126
- details.included.add(hn);
127
- }
128
- for ( const hn of excluded ) {
129
- if ( details.included.has(hn) ) { continue; }
130
- details.excluded.add(hn);
131
- }
132
- }
133
- for ( const [ hash, { id, included, excluded } ] of distinctRules ) {
134
- const rule = JSON.parse(hash);
135
- if ( id ) {
136
- rule.id = id;
137
- }
138
- if ( included.size !== 0 ) {
139
- rule.condition[includeName] = Array.from(included);
140
- }
141
- if ( excluded.size !== 0 ) {
142
- rule.condition[excludeName] = Array.from(excluded);
143
- }
144
- out.push(rule);
196
+ if ( hnSet.size === hostnames.length ) { continue; }
197
+ rule.condition[prop] = Array.from(hnSet).sort();
145
198
  }
146
- rules = out;
147
199
  }
148
200
  return rules;
149
201
  }
150
202
 
151
203
  /******************************************************************************/
152
204
 
153
- function parseNetworkFilter(parser) {
205
+ function dropEntities(rule, prop) {
206
+ const { condition } = rule;
207
+ if ( condition[prop] === undefined ) { return; }
208
+ const sanitized = condition[prop].filter(a => isNotEntity(a));
209
+ if ( sanitized.length === condition[prop].length ) { return; }
210
+ if ( sanitized.length === 0 ) { return 0; }
211
+ condition.requestDomains = sanitized;
212
+ }
213
+
214
+ /******************************************************************************/
215
+
216
+ function validateRules(rules) {
217
+ const out = [];
218
+ for ( const rule of rules ) {
219
+ const { condition } = rule;
220
+ // "Only one of resourceTypes and excludedResourceTypes should be specified"
221
+ if ( condition.resourceTypes ) {
222
+ if ( condition.excludedResourceTypes ) { continue; }
223
+ }
224
+ // "Only one of requestMethods and excludedRequestMethods should be specified"
225
+ if ( condition.requestMethods ) {
226
+ if ( condition.excludedRequestMethods ) { continue; }
227
+ }
228
+ // Drop entity-based hostnames
229
+ if ( dropEntities(rule, 'requestDomains') === 0 ) { continue; }
230
+ if ( dropEntities(rule, 'excludedRequestDomains') === 0 ) { continue; }
231
+ if ( dropEntities(rule, 'initiatorDomains') === 0 ) { continue; }
232
+ if ( dropEntities(rule, 'excludedInitiatorDomains') === 0 ) { continue; }
233
+ // regexSubstitution requires regexFilter
234
+ if ( rule.action?.redirect?.regexSubstitution ) {
235
+ if ( rule.condition.regexFilter === undefined ) { continue; }
236
+ }
237
+ out.push(rule);
238
+ }
239
+ return out;
240
+ }
241
+
242
+ /******************************************************************************/
243
+
244
+ export function parseNetworkFilter(parser) {
154
245
  if ( parser.isNetworkFilter() === false ) { return; }
155
246
  if ( parser.hasError() ) { return; }
156
247
 
@@ -181,6 +272,9 @@ function parseNetworkFilter(parser) {
181
272
  rule.condition.urlFilter = pattern;
182
273
  }
183
274
 
275
+ const defaultResourceTypes = new Set();
276
+ let defaultUrlFilter = '';
277
+
184
278
  const initiatorDomains = new Set();
185
279
  const excludedInitiatorDomains = new Set();
186
280
  const requestDomains = new Set();
@@ -247,6 +341,9 @@ function parseNetworkFilter(parser) {
247
341
  operation: 'append',
248
342
  value: parser.getNetOptionValue(type),
249
343
  } ];
344
+ defaultResourceTypes.add('main_frame');
345
+ defaultResourceTypes.add('sub_frame');
346
+ defaultResourceTypes.add('object');
250
347
  break;
251
348
  case sfp.NODE_TYPE_NET_OPTION_NAME_CSS:
252
349
  processResourceType('stylesheet', type);
@@ -338,6 +435,9 @@ function parseNetworkFilter(parser) {
338
435
  operation: 'append',
339
436
  value: parser.getNetOptionValue(type),
340
437
  } ];
438
+ defaultResourceTypes.add('main_frame');
439
+ defaultResourceTypes.add('sub_frame');
440
+ defaultResourceTypes.add('object');
341
441
  break;
342
442
  case sfp.NODE_TYPE_NET_OPTION_NAME_PING:
343
443
  processResourceType('ping', type);
@@ -374,6 +474,10 @@ function parseNetworkFilter(parser) {
374
474
  rule.action.redirect = {
375
475
  transform: { queryTransform: { removeParams } }
376
476
  };
477
+ defaultResourceTypes.add('main_frame');
478
+ defaultResourceTypes.add('sub_frame');
479
+ defaultResourceTypes.add('xmlhttprequest');
480
+ defaultUrlFilter = '?';
377
481
  break;
378
482
  }
379
483
  case sfp.NODE_TYPE_NET_OPTION_NAME_SCRIPT:
@@ -395,11 +499,16 @@ function parseNetworkFilter(parser) {
395
499
  }
396
500
  break;
397
501
  }
398
- case sfp.NODE_TYPE_NET_OPTION_NAME_URLTRANSFORM:
399
- if ( this.processOptionWithValue(parser, type) === false ) {
400
- return this.FILTER_INVALID;
401
- }
502
+ case sfp.NODE_TYPE_NET_OPTION_NAME_URLTRANSFORM: {
503
+ const parsed = sfp.parseReplaceByRegexValue(parser.getNetOptionValue(type));
504
+ if ( parsed === undefined ) { return; }
505
+ if ( parsed.re ) { return; }
506
+ rule.action.type = 'redirect';
507
+ rule.action.redirect = {
508
+ regexSubstitution: parsed.replacement.replace(/\$(\d+)/g, '\\$1'),
509
+ };
402
510
  break;
511
+ }
403
512
  case sfp.NODE_TYPE_NET_OPTION_NAME_XHR:
404
513
  processResourceType('xmlhttprequest', type);
405
514
  break;
@@ -410,34 +519,38 @@ function parseNetworkFilter(parser) {
410
519
  break;
411
520
  }
412
521
  }
522
+ if ( pattern === '*' && defaultUrlFilter !== '' ) {
523
+ rule.condition.urlFilter = defaultUrlFilter;
524
+ }
413
525
  if ( initiatorDomains.size !== 0 ) {
414
- rule.condition.initiatorDomains = Array.from(initiatorDomains);
526
+ rule.condition.initiatorDomains = Array.from(initiatorDomains).sort();
415
527
  }
416
528
  if ( excludedInitiatorDomains.size !== 0 ) {
417
- rule.condition.excludedInitiatorDomains = Array.from(excludedInitiatorDomains);
529
+ rule.condition.excludedInitiatorDomains = Array.from(excludedInitiatorDomains).sort();
418
530
  }
419
531
  if ( requestDomains.size !== 0 ) {
420
- rule.condition.requestDomains = Array.from(requestDomains);
532
+ rule.condition.requestDomains = Array.from(requestDomains).sort();
421
533
  }
422
534
  if ( excludedRequestDomains.size !== 0 ) {
423
- rule.condition.excludedRequestDomains = Array.from(excludedRequestDomains);
535
+ rule.condition.excludedRequestDomains = Array.from(excludedRequestDomains).sort();
424
536
  }
425
537
  if ( requestMethods.size !== 0 ) {
426
- rule.condition.requestMethods = Array.from(requestMethods);
538
+ rule.condition.requestMethods = Array.from(requestMethods).sort();
427
539
  }
428
540
  if ( excludedRequestMethods.size !== 0 ) {
429
- rule.condition.excludedRequestMethods = Array.from(excludedRequestMethods);
541
+ rule.condition.excludedRequestMethods = Array.from(excludedRequestMethods).sort();
542
+ }
543
+ if ( resourceTypes.size === 0 && excludedResourceTypes.size === 0 ) {
544
+ defaultResourceTypes.forEach(a => resourceTypes.add(a));
430
545
  }
431
546
  if ( resourceTypes.size !== 0 ) {
432
- const types = Array.from(resourceTypes).filter(a => a !== '');
547
+ const types = Array.from(resourceTypes).filter(a => a !== '').sort();
433
548
  if ( types.length === 0 ) { return; }
434
549
  rule.condition.resourceTypes = types;
435
550
  }
436
551
  if ( excludedResourceTypes.size !== 0 ) {
437
- if ( resourceTypes.size !== 0 ) {
438
- if ( excludedResourceTypes.size !== 0 ) { return; }
439
- }
440
- rule.condition.excludedResourceTypes = Array.from(excludedResourceTypes);
552
+ if ( resourceTypes.size !== 0 ) { return; }
553
+ rule.condition.excludedResourceTypes = Array.from(excludedResourceTypes).sort();
441
554
  }
442
555
  if ( priority !== 0 ) {
443
556
  rule.priority = priority;
@@ -452,7 +565,7 @@ export function parseFilters(text) {
452
565
  if ( text.endsWith('---') ) { return; }
453
566
  const lines = text.split(/\n/);
454
567
  if ( lines.some(a => a.startsWith(' ')) ) { return; }
455
- const rules = [];
568
+ let rules = [];
456
569
  const parser = new sfp.AstFilterParser({ trustedSource: true });
457
570
  for ( const line of lines ) {
458
571
  parser.parse(line);
@@ -461,5 +574,8 @@ export function parseFilters(text) {
461
574
  if ( rule === undefined ) { continue; }
462
575
  rules.push(rule);
463
576
  }
464
- return mergeIncludeExclude(rules);
577
+ rules = minimizeRuleset(rules);
578
+ rules = minimizeRules(rules);
579
+ rules = validateRules(rules);
580
+ return rules;
465
581
  }
@@ -324,7 +324,7 @@
324
324
  "storage": {
325
325
  "managed_schema": "managed_storage.json"
326
326
  },
327
- "version": "2025.818.1918",
327
+ "version": "2025.911.1335",
328
328
  "web_accessible_resources": [
329
329
  {
330
330
  "resources": [
@@ -396,8 +396,8 @@
396
396
  "web_accessible_resources/nobab2.js",
397
397
  "web_accessible_resources/chartbeat.js",
398
398
  "web_accessible_resources/noop.json",
399
- "web_accessible_resources/click2load.html",
400
- "web_accessible_resources/noeval-silent.js"
399
+ "web_accessible_resources/noeval-silent.js",
400
+ "web_accessible_resources/click2load.html"
401
401
  ],
402
402
  "matches": [
403
403
  "<all_urls>"
@@ -60,7 +60,6 @@
60
60
  "anime-loads.org",
61
61
  "animedevil.com",
62
62
  "animefire.plus",
63
- "animesaria.com",
64
63
  "animevietsub.tv",
65
64
  "antenadosnaskyecia.com",
66
65
  "antonimos.de",
@@ -124,7 +123,6 @@
124
123
  "blackwoodacademy.org",
125
124
  "blog.itijobalert.in",
126
125
  "blog.potterworld.co",
127
- "blog.yurasu.xyz",
128
126
  "blogshinobijawi.blogspot.com",
129
127
  "blogspot.com",
130
128
  "boardgamesonline.net",
@@ -136,7 +134,6 @@
136
134
  "bookmystrip.com",
137
135
  "bookshared.org",
138
136
  "bootdey.com",
139
- "brazzers3x.org",
140
137
  "british-birdsongs.uk",
141
138
  "broncos.com.au",
142
139
  "brownsboys.com",
@@ -395,8 +392,6 @@
395
392
  "freex2line.online",
396
393
  "frkn64modding.com",
397
394
  "fruitlab.com",
398
- "fssquad.com",
399
- "fulltip.net",
400
395
  "fun--seiten-de.translate.goog",
401
396
  "fun-seiten.de",
402
397
  "funkeypagali.com",
@@ -417,11 +412,9 @@
417
412
  "gastroepato.it",
418
413
  "gatevidyalay.com",
419
414
  "gats.io",
420
- "gdrivelinks.me",
421
415
  "gecmisi.com.tr",
422
416
  "geekdrop.com",
423
417
  "geekprank.com",
424
- "genelpara.com",
425
418
  "genialne.pl",
426
419
  "gestyy.com",
427
420
  "get-click2.blogspot.com",
@@ -455,7 +448,6 @@
455
448
  "h-flash.com",
456
449
  "hacknetfl1x.net",
457
450
  "hackshort.me",
458
- "hacoscripts.com",
459
451
  "handelsblatt.com",
460
452
  "hanime.tv",
461
453
  "hardware--entwicklung-de.translate.goog",
@@ -520,7 +512,6 @@
520
512
  "is2btc.com",
521
513
  "isekaipalace.com",
522
514
  "isthischannelmonetized.com",
523
- "itopmusic.org",
524
515
  "itsguider.com",
525
516
  "jastrzabpost.pl",
526
517
  "javaguides.net",
@@ -546,7 +537,6 @@
546
537
  "knightlobby.com",
547
538
  "kojodan.jp",
548
539
  "komorkomania.pl",
549
- "konstantinova.net",
550
540
  "koyso.com",
551
541
  "kryptografie-de.translate.goog",
552
542
  "kryptografie.de",
@@ -605,13 +595,13 @@
605
595
  "makeincomeinfo.com",
606
596
  "mangfall24.de",
607
597
  "manhwa18.com",
598
+ "manwa.me",
608
599
  "maqal360.com",
609
600
  "matchendirect.fr",
610
601
  "mathportal.org",
611
602
  "matzoo.pl",
612
603
  "mcqmall.com",
613
604
  "me-encantas.com",
614
- "megadescarga.net",
615
605
  "meinyouporn.com",
616
606
  "melbournestorm.com.au",
617
607
  "memexcomputer.it",
@@ -642,7 +632,6 @@
642
632
  "money.it",
643
633
  "money.pl",
644
634
  "mopo.de",
645
- "morbidthought.com",
646
635
  "motoroids.com",
647
636
  "mpsconline.gov.in",
648
637
  "mrfreemium.blogspot.com",
@@ -710,7 +699,6 @@
710
699
  "ontechhindi.com",
711
700
  "operationharshdoorstop.com",
712
701
  "orangeobserver.com",
713
- "orangeptc.com",
714
702
  "osuskinner.com",
715
703
  "osuskins.net",
716
704
  "otakukan.com",
@@ -769,7 +757,6 @@
769
757
  "premid.app",
770
758
  "preu-pdf-paste.blogspot.com",
771
759
  "printablebricks.com",
772
- "printerprojects.com",
773
760
  "prinxy.app",
774
761
  "proboards.com",
775
762
  "procinehub.com",
@@ -780,7 +767,9 @@
780
767
  "promods.net",
781
768
  "properhacks.weebly.com",
782
769
  "psprices.com",
770
+ "pubgaimassist.com",
783
771
  "pudelek.pl",
772
+ "pvpoke-re.com",
784
773
  "pysznosci.pl",
785
774
  "qctimes.com",
786
775
  "qrl.com.au",
@@ -864,7 +853,6 @@
864
853
  "shirainime.com",
865
854
  "shoop.de",
866
855
  "shoot-yalla.to",
867
- "shoot-yalla.tv",
868
856
  "shorterall.com",
869
857
  "shortit.pw",
870
858
  "shorttrick.in",
@@ -885,7 +873,6 @@
885
873
  "sms-anonyme.net",
886
874
  "smscodeonline.com",
887
875
  "smsonline.cloud",
888
- "soccerinhd.com",
889
876
  "software-on.com",
890
877
  "softwaredetail.com",
891
878
  "softwareengineer-de.translate.goog",
@@ -1464,6 +1451,7 @@
1464
1451
  "unhide": [
1465
1452
  "10010.com",
1466
1453
  "10086.cn",
1454
+ "1991421.cn",
1467
1455
  "199it.com",
1468
1456
  "1keydata.com",
1469
1457
  "3dpchip.com",
@@ -1548,6 +1536,7 @@
1548
1536
  "haichaobiao.com",
1549
1537
  "haiwai.com",
1550
1538
  "hh010.com",
1539
+ "hk.on.cc",
1551
1540
  "hopto.org",
1552
1541
  "ibf.tw",
1553
1542
  "imydl.com",
@@ -2192,6 +2181,7 @@
2192
2181
  "duan24h.net",
2193
2182
  "gamehayvl.com",
2194
2183
  "gocmod.com",
2184
+ "hackbloxfruit.pro",
2195
2185
  "idpvn.com",
2196
2186
  "itudong.com",
2197
2187
  "laptrinhcanban.com",