@browserless.io/browserless 2.30.1 → 2.31.1-beta-1

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 (440) hide show
  1. package/CHANGELOG.md +8 -1
  2. package/build/browserless.d.ts +1 -1
  3. package/build/browserless.js +17 -15
  4. package/build/browsers/index.js +3 -0
  5. package/build/routes/chrome/http/content.post.body.json +8 -8
  6. package/build/routes/chrome/http/pdf.post.body.json +8 -8
  7. package/build/routes/chrome/http/scrape.post.body.json +8 -8
  8. package/build/routes/chrome/http/screenshot.post.body.json +22 -9
  9. package/build/routes/chromium/http/content.post.body.json +8 -8
  10. package/build/routes/chromium/http/pdf.post.body.json +8 -8
  11. package/build/routes/chromium/http/scrape.post.body.json +8 -8
  12. package/build/routes/chromium/http/screenshot.post.body.json +22 -9
  13. package/build/routes/chromium/tests/websocket.spec.js +1 -1
  14. package/build/routes/edge/http/content.post.body.json +8 -8
  15. package/build/routes/edge/http/pdf.post.body.json +8 -8
  16. package/build/routes/edge/http/scrape.post.body.json +8 -8
  17. package/build/routes/edge/http/screenshot.post.body.json +22 -9
  18. package/extensions/ublocklite/README.md +5 -4
  19. package/extensions/ublocklite/_locales/ar/messages.json +36 -0
  20. package/extensions/ublocklite/_locales/az/messages.json +36 -0
  21. package/extensions/ublocklite/_locales/be/messages.json +36 -0
  22. package/extensions/ublocklite/_locales/bg/messages.json +36 -0
  23. package/extensions/ublocklite/_locales/bn/messages.json +38 -2
  24. package/extensions/ublocklite/_locales/br_FR/messages.json +39 -3
  25. package/extensions/ublocklite/_locales/bs/messages.json +36 -0
  26. package/extensions/ublocklite/_locales/ca/messages.json +36 -0
  27. package/extensions/ublocklite/_locales/cs/messages.json +36 -0
  28. package/extensions/ublocklite/_locales/cv/messages.json +36 -0
  29. package/extensions/ublocklite/_locales/cy/messages.json +36 -0
  30. package/extensions/ublocklite/_locales/da/messages.json +37 -1
  31. package/extensions/ublocklite/_locales/de/messages.json +36 -0
  32. package/extensions/ublocklite/_locales/el/messages.json +36 -0
  33. package/extensions/ublocklite/_locales/en/messages.json +36 -0
  34. package/extensions/ublocklite/_locales/en_GB/messages.json +36 -0
  35. package/extensions/ublocklite/_locales/eo/messages.json +36 -0
  36. package/extensions/ublocklite/_locales/es/messages.json +36 -0
  37. package/extensions/ublocklite/_locales/et/messages.json +36 -0
  38. package/extensions/ublocklite/_locales/eu/messages.json +36 -0
  39. package/extensions/ublocklite/_locales/fa/messages.json +36 -0
  40. package/extensions/ublocklite/_locales/fi/messages.json +41 -5
  41. package/extensions/ublocklite/_locales/fil/messages.json +36 -0
  42. package/extensions/ublocklite/_locales/fr/messages.json +36 -0
  43. package/extensions/ublocklite/_locales/fy/messages.json +36 -0
  44. package/extensions/ublocklite/_locales/gl/messages.json +38 -2
  45. package/extensions/ublocklite/_locales/gu/messages.json +36 -0
  46. package/extensions/ublocklite/_locales/he/messages.json +36 -0
  47. package/extensions/ublocklite/_locales/hi/messages.json +36 -0
  48. package/extensions/ublocklite/_locales/hr/messages.json +37 -1
  49. package/extensions/ublocklite/_locales/hu/messages.json +36 -0
  50. package/extensions/ublocklite/_locales/hy/messages.json +36 -0
  51. package/extensions/ublocklite/_locales/id/messages.json +36 -0
  52. package/extensions/ublocklite/_locales/it/messages.json +36 -0
  53. package/extensions/ublocklite/_locales/ja/messages.json +36 -0
  54. package/extensions/ublocklite/_locales/ka/messages.json +36 -0
  55. package/extensions/ublocklite/_locales/kk/messages.json +36 -0
  56. package/extensions/ublocklite/_locales/kn/messages.json +36 -0
  57. package/extensions/ublocklite/_locales/ko/messages.json +37 -1
  58. package/extensions/ublocklite/_locales/lt/messages.json +36 -0
  59. package/extensions/ublocklite/_locales/lv/messages.json +36 -0
  60. package/extensions/ublocklite/_locales/mk/messages.json +36 -0
  61. package/extensions/ublocklite/_locales/ml/messages.json +36 -0
  62. package/extensions/ublocklite/_locales/mr/messages.json +36 -0
  63. package/extensions/ublocklite/_locales/ms/messages.json +36 -0
  64. package/extensions/ublocklite/_locales/nb/messages.json +40 -4
  65. package/extensions/ublocklite/_locales/nl/messages.json +40 -4
  66. package/extensions/ublocklite/_locales/oc/messages.json +36 -0
  67. package/extensions/ublocklite/_locales/pa/messages.json +36 -0
  68. package/extensions/ublocklite/_locales/pl/messages.json +36 -0
  69. package/extensions/ublocklite/_locales/pt_BR/messages.json +36 -0
  70. package/extensions/ublocklite/_locales/pt_PT/messages.json +38 -2
  71. package/extensions/ublocklite/_locales/ro/messages.json +36 -0
  72. package/extensions/ublocklite/_locales/ru/messages.json +36 -0
  73. package/extensions/ublocklite/_locales/si/messages.json +63 -27
  74. package/extensions/ublocklite/_locales/sk/messages.json +36 -0
  75. package/extensions/ublocklite/_locales/sl/messages.json +36 -0
  76. package/extensions/ublocklite/_locales/so/messages.json +36 -0
  77. package/extensions/ublocklite/_locales/sq/messages.json +37 -1
  78. package/extensions/ublocklite/_locales/sr/messages.json +36 -0
  79. package/extensions/ublocklite/_locales/sv/messages.json +36 -0
  80. package/extensions/ublocklite/_locales/sw/messages.json +36 -0
  81. package/extensions/ublocklite/_locales/ta/messages.json +36 -0
  82. package/extensions/ublocklite/_locales/te/messages.json +36 -0
  83. package/extensions/ublocklite/_locales/th/messages.json +36 -0
  84. package/extensions/ublocklite/_locales/tr/messages.json +37 -1
  85. package/extensions/ublocklite/_locales/uk/messages.json +36 -0
  86. package/extensions/ublocklite/_locales/ur/messages.json +36 -0
  87. package/extensions/ublocklite/_locales/vi/messages.json +36 -0
  88. package/extensions/ublocklite/_locales/zh_CN/messages.json +36 -0
  89. package/extensions/ublocklite/_locales/zh_TW/messages.json +36 -0
  90. package/extensions/ublocklite/css/common.css +2 -1
  91. package/extensions/ublocklite/css/dashboard-common.css +6 -1
  92. package/extensions/ublocklite/css/dashboard.css +15 -8
  93. package/extensions/ublocklite/css/default.css +1 -1
  94. package/extensions/ublocklite/css/develop.css +112 -0
  95. package/extensions/ublocklite/css/filtering-mode.css +29 -20
  96. package/extensions/ublocklite/css/popup.css +14 -16
  97. package/extensions/ublocklite/css/report.css +11 -0
  98. package/extensions/ublocklite/css/settings.css +11 -6
  99. package/extensions/ublocklite/css/zapper-ui.css +15 -10
  100. package/extensions/ublocklite/dashboard.html +39 -6
  101. package/extensions/ublocklite/img/icon_512.png +0 -0
  102. package/extensions/ublocklite/js/background.js +35 -5
  103. package/extensions/ublocklite/js/dashboard.js +18 -1
  104. package/extensions/ublocklite/js/develop.js +889 -0
  105. package/extensions/ublocklite/js/dnr-parser.js +561 -0
  106. package/extensions/ublocklite/js/ext-compat.js +3 -3
  107. package/extensions/ublocklite/js/filter-lists.js +6 -1
  108. package/extensions/ublocklite/js/report.js +54 -4
  109. package/extensions/ublocklite/js/ruleset-manager.js +122 -22
  110. package/extensions/ublocklite/js/scripting-manager.js +45 -16
  111. package/extensions/ublocklite/js/settings.js +33 -19
  112. package/extensions/ublocklite/js/theme.js +3 -1
  113. package/extensions/ublocklite/js/zapper-ui.js +11 -0
  114. package/extensions/ublocklite/lib/codemirror/LICENSE +21 -0
  115. package/extensions/ublocklite/lib/codemirror/README.md +9 -0
  116. package/extensions/ublocklite/lib/codemirror/cm6.bundle.ubol.min.js +1 -0
  117. package/extensions/ublocklite/manifest.json +6 -6
  118. package/extensions/ublocklite/popup.html +7 -11
  119. package/extensions/ublocklite/report.html +4 -2
  120. package/extensions/ublocklite/rulesets/generic-details.json +16 -5
  121. package/extensions/ublocklite/rulesets/main/adguard-mobile.json +533 -0
  122. package/extensions/ublocklite/rulesets/main/alb-0.json +23 -23
  123. package/extensions/ublocklite/rulesets/main/annoyances-cookies.json +32 -14
  124. package/extensions/ublocklite/rulesets/main/annoyances-others.json +3 -1
  125. package/extensions/ublocklite/rulesets/main/annoyances-overlays.json +10 -4
  126. package/extensions/ublocklite/rulesets/main/annoyances-social.json +1 -0
  127. package/extensions/ublocklite/rulesets/main/annoyances-widgets.json +5 -3
  128. package/extensions/ublocklite/rulesets/main/chn-0.json +59 -39
  129. package/extensions/ublocklite/rulesets/main/cze-0.json +1 -1
  130. package/extensions/ublocklite/rulesets/main/deu-0.json +12 -5
  131. package/extensions/ublocklite/rulesets/main/easylist.json +33 -36
  132. package/extensions/ublocklite/rulesets/main/easyprivacy.json +52 -12
  133. package/extensions/ublocklite/rulesets/main/fin-0.json +168 -168
  134. package/extensions/ublocklite/rulesets/main/fra-0.json +10 -11
  135. package/extensions/ublocklite/rulesets/main/hun-0.json +17 -6
  136. package/extensions/ublocklite/rulesets/main/idn-0.json +16 -4
  137. package/extensions/ublocklite/rulesets/main/ind-0.json +118 -78
  138. package/extensions/ublocklite/rulesets/main/isr-0.json +7 -19
  139. package/extensions/ublocklite/rulesets/main/ita-0.json +3 -2
  140. package/extensions/ublocklite/rulesets/main/jpn-1.json +34 -19
  141. package/extensions/ublocklite/rulesets/main/kor-1.json +8 -1
  142. package/extensions/ublocklite/rulesets/main/nor-0.json +36 -6
  143. package/extensions/ublocklite/rulesets/main/pgl.json +6 -18
  144. package/extensions/ublocklite/rulesets/main/pol-0.json +1 -1
  145. package/extensions/ublocklite/rulesets/main/rou-1.json +1 -1
  146. package/extensions/ublocklite/rulesets/main/rus-0.json +25 -17
  147. package/extensions/ublocklite/rulesets/main/rus-1.json +12 -14
  148. package/extensions/ublocklite/rulesets/main/spa-0.json +9 -2
  149. package/extensions/ublocklite/rulesets/main/spa-1.json +12 -7
  150. package/extensions/ublocklite/rulesets/main/stevenblack-hosts.json +15575 -4509
  151. package/extensions/ublocklite/rulesets/main/swe-1.json +39 -33
  152. package/extensions/ublocklite/rulesets/main/tur-0.json +31 -9
  153. package/extensions/ublocklite/rulesets/main/ublock-badware.json +48 -116
  154. package/extensions/ublocklite/rulesets/main/ublock-filters.json +73 -39
  155. package/extensions/ublocklite/rulesets/main/ukr-0.json +6 -2
  156. package/extensions/ublocklite/rulesets/main/urlhaus-full.json +484 -977
  157. package/extensions/ublocklite/rulesets/main/vie-1.json +81 -70
  158. package/extensions/ublocklite/rulesets/modify-headers/chn-0.json +50 -2
  159. package/extensions/ublocklite/rulesets/modify-headers/vie-1.json +1 -1
  160. package/extensions/ublocklite/rulesets/redirect/adguard-mobile.json +20 -0
  161. package/extensions/ublocklite/rulesets/redirect/annoyances-overlays.json +0 -1
  162. package/extensions/ublocklite/rulesets/redirect/easylist.json +19 -0
  163. package/extensions/ublocklite/rulesets/redirect/fin-0.json +25 -25
  164. package/extensions/ublocklite/rulesets/redirect/isr-0.json +2 -1
  165. package/extensions/ublocklite/rulesets/redirect/rou-1.json +1 -0
  166. package/extensions/ublocklite/rulesets/redirect/rus-1.json +33 -17
  167. package/extensions/ublocklite/rulesets/redirect/swe-1.json +11 -156
  168. package/extensions/ublocklite/rulesets/redirect/tur-0.json +0 -1
  169. package/extensions/ublocklite/rulesets/redirect/ublock-filters.json +14 -9
  170. package/extensions/ublocklite/rulesets/redirect/vie-1.json +20 -4
  171. package/extensions/ublocklite/rulesets/regex/adguard-mobile.json +101 -0
  172. package/extensions/ublocklite/rulesets/regex/chn-0.json +3 -3
  173. package/extensions/ublocklite/rulesets/regex/deu-0.json +0 -1
  174. package/extensions/ublocklite/rulesets/regex/easylist.json +1 -1
  175. package/extensions/ublocklite/rulesets/regex/jpn-1.json +3 -5
  176. package/extensions/ublocklite/rulesets/regex/kor-1.json +2 -1
  177. package/extensions/ublocklite/rulesets/regex/nor-0.json +1 -15
  178. package/extensions/ublocklite/rulesets/regex/swe-1.json +1 -0
  179. package/extensions/ublocklite/rulesets/regex/tur-0.json +1 -0
  180. package/extensions/ublocklite/rulesets/regex/ublock-badware.json +5 -4
  181. package/extensions/ublocklite/rulesets/regex/ublock-filters.json +17 -4
  182. package/extensions/ublocklite/rulesets/removeparam/adguard-spyware-url.json +13 -6
  183. package/extensions/ublocklite/rulesets/removeparam/fin-0.json +12 -12
  184. package/extensions/ublocklite/rulesets/removeparam/rus-1.json +2 -2
  185. package/extensions/ublocklite/rulesets/removeparam/swe-1.json +25 -0
  186. package/extensions/ublocklite/rulesets/removeparam/ublock-filters.json +2 -2
  187. package/extensions/ublocklite/rulesets/ruleset-details.json +265 -268
  188. package/extensions/ublocklite/rulesets/scripting/declarative/adguard-mobile.js +42 -0
  189. package/extensions/ublocklite/rulesets/scripting/declarative/annoyances-cookies.js +3 -3
  190. package/extensions/ublocklite/rulesets/scripting/declarative/annoyances-overlays.js +3 -3
  191. package/extensions/ublocklite/rulesets/scripting/declarative/chn-0.js +3 -3
  192. package/extensions/ublocklite/rulesets/scripting/declarative/cze-0.js +3 -3
  193. package/extensions/ublocklite/rulesets/scripting/declarative/isr-0.js +3 -3
  194. package/extensions/ublocklite/rulesets/scripting/declarative/jpn-1.js +3 -3
  195. package/extensions/ublocklite/rulesets/scripting/declarative/nor-0.js +3 -3
  196. package/extensions/ublocklite/rulesets/scripting/declarative/rou-1.js +3 -3
  197. package/extensions/ublocklite/rulesets/scripting/declarative/rus-0.js +3 -3
  198. package/extensions/ublocklite/rulesets/scripting/declarative/rus-1.js +3 -3
  199. package/extensions/ublocklite/rulesets/scripting/declarative/spa-1.js +3 -3
  200. package/extensions/ublocklite/rulesets/scripting/declarative/swe-1.js +3 -3
  201. package/extensions/ublocklite/rulesets/scripting/declarative/tur-0.js +3 -3
  202. package/extensions/ublocklite/rulesets/scripting/declarative/ublock-filters.js +3 -3
  203. package/extensions/ublocklite/rulesets/scripting/declarative/vie-1.js +1 -1
  204. package/extensions/ublocklite/rulesets/scripting/generic/adguard-mobile.js +87 -0
  205. package/extensions/ublocklite/rulesets/scripting/generic/annoyances-cookies.js +3 -3
  206. package/extensions/ublocklite/rulesets/scripting/generic/annoyances-others.js +3 -3
  207. package/extensions/ublocklite/rulesets/scripting/generic/annoyances-social.js +3 -3
  208. package/extensions/ublocklite/rulesets/scripting/generic/chn-0.js +3 -3
  209. package/extensions/ublocklite/rulesets/scripting/generic/deu-0.js +2 -2
  210. package/extensions/ublocklite/rulesets/scripting/generic/easylist.js +3 -3
  211. package/extensions/ublocklite/rulesets/scripting/generic/fin-0.js +1 -1
  212. package/extensions/ublocklite/rulesets/scripting/generic/fra-0.js +2 -2
  213. package/extensions/ublocklite/rulesets/scripting/generic/idn-0.js +3 -3
  214. package/extensions/ublocklite/rulesets/scripting/generic/isr-0.js +1 -1
  215. package/extensions/ublocklite/rulesets/scripting/generic/nor-0.js +3 -3
  216. package/extensions/ublocklite/rulesets/scripting/generic/rus-0.js +3 -3
  217. package/extensions/ublocklite/rulesets/scripting/generic/spa-0.js +2 -2
  218. package/extensions/ublocklite/rulesets/scripting/generic/spa-1.js +2 -2
  219. package/extensions/ublocklite/rulesets/scripting/generic/swe-1.js +1 -1
  220. package/extensions/ublocklite/rulesets/scripting/generic/tur-0.js +1 -1
  221. package/extensions/ublocklite/rulesets/scripting/generic/ublock-filters.js +3 -3
  222. package/extensions/ublocklite/rulesets/scripting/generic/vie-1.js +3 -3
  223. package/extensions/ublocklite/rulesets/scripting/generichigh/adguard-mobile.css +39 -0
  224. package/extensions/ublocklite/rulesets/scripting/generichigh/annoyances-cookies.css +0 -2
  225. package/extensions/ublocklite/rulesets/scripting/generichigh/chn-0.css +4 -1
  226. package/extensions/ublocklite/rulesets/scripting/generichigh/easylist.css +3 -14
  227. package/extensions/ublocklite/rulesets/scripting/generichigh/fra-0.css +0 -2
  228. package/extensions/ublocklite/rulesets/scripting/generichigh/idn-0.css +129 -139
  229. package/extensions/ublocklite/rulesets/scripting/generichigh/rus-0.css +1 -0
  230. package/extensions/ublocklite/rulesets/scripting/generichigh/tur-0.css +1 -0
  231. package/extensions/ublocklite/rulesets/scripting/generichigh/ublock-filters.css +1 -0
  232. package/extensions/ublocklite/rulesets/scripting/procedural/adguard-mobile.js +42 -0
  233. package/extensions/ublocklite/rulesets/scripting/procedural/annoyances-cookies.js +3 -3
  234. package/extensions/ublocklite/rulesets/scripting/procedural/annoyances-others.js +3 -3
  235. package/extensions/ublocklite/rulesets/scripting/procedural/annoyances-overlays.js +3 -3
  236. package/extensions/ublocklite/rulesets/scripting/procedural/chn-0.js +1 -1
  237. package/extensions/ublocklite/rulesets/scripting/procedural/deu-0.js +3 -3
  238. package/extensions/ublocklite/rulesets/scripting/procedural/easylist.js +3 -3
  239. package/extensions/ublocklite/rulesets/scripting/procedural/hun-0.js +3 -3
  240. package/extensions/ublocklite/rulesets/scripting/procedural/idn-0.js +2 -2
  241. package/extensions/ublocklite/rulesets/scripting/procedural/ind-0.js +3 -3
  242. package/extensions/ublocklite/rulesets/scripting/procedural/ita-0.js +3 -3
  243. package/extensions/ublocklite/rulesets/scripting/procedural/jpn-1.js +3 -3
  244. package/extensions/ublocklite/rulesets/scripting/procedural/kor-1.js +1 -1
  245. package/extensions/ublocklite/rulesets/scripting/procedural/rus-0.js +3 -3
  246. package/extensions/ublocklite/rulesets/scripting/procedural/spa-0.js +3 -3
  247. package/extensions/ublocklite/rulesets/scripting/procedural/spa-1.js +3 -3
  248. package/extensions/ublocklite/rulesets/scripting/procedural/swe-1.js +3 -3
  249. package/extensions/ublocklite/rulesets/scripting/procedural/ublock-filters.js +3 -3
  250. package/extensions/ublocklite/rulesets/scripting/procedural/ukr-0.js +3 -3
  251. package/extensions/ublocklite/rulesets/scripting/scriptlet/adguard-mobile.abort-current-script.js +451 -0
  252. package/extensions/ublocklite/rulesets/scripting/scriptlet/adguard-mobile.abort-on-property-read.js +369 -0
  253. package/extensions/ublocklite/rulesets/scripting/scriptlet/adguard-mobile.abort-on-property-write.js +347 -0
  254. package/extensions/ublocklite/rulesets/scripting/scriptlet/adguard-mobile.addEventListener-defuser.js +498 -0
  255. package/extensions/ublocklite/rulesets/scripting/scriptlet/adguard-mobile.adjust-setInterval.js +332 -0
  256. package/extensions/ublocklite/rulesets/scripting/scriptlet/adguard-mobile.prevent-setTimeout.js +443 -0
  257. package/extensions/ublocklite/rulesets/scripting/scriptlet/adguard-mobile.remove-attr.js +405 -0
  258. package/extensions/ublocklite/rulesets/scripting/scriptlet/adguard-mobile.remove-class.js +396 -0
  259. package/extensions/ublocklite/rulesets/scripting/scriptlet/adguard-mobile.remove-node-text.js +449 -0
  260. package/extensions/ublocklite/rulesets/scripting/scriptlet/adguard-mobile.set-constant.js +541 -0
  261. package/extensions/ublocklite/rulesets/scripting/scriptlet/adguard-mobile.set-cookie-reload.js +437 -0
  262. package/extensions/ublocklite/rulesets/scripting/scriptlet/adguard-mobile.set-cookie.js +433 -0
  263. package/extensions/ublocklite/rulesets/scripting/scriptlet/adguard-mobile.set-local-storage-item.js +399 -0
  264. package/extensions/ublocklite/rulesets/scripting/scriptlet/adguard-mobile.set-session-storage-item.js +399 -0
  265. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-cookies.remove-class.js +2 -2
  266. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-cookies.set-constant.js +1 -1
  267. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-cookies.set-cookie.js +2 -2
  268. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-cookies.set-local-storage-item.js +2 -2
  269. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-cookies.trusted-click-element.js +2 -2
  270. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-cookies.trusted-set-cookie-reload.js +2 -2
  271. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-cookies.trusted-set-cookie.js +2 -2
  272. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-cookies.trusted-set-local-storage-item.js +2 -2
  273. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.abort-current-script.js +2 -2
  274. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.abort-on-property-read.js +1 -1
  275. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.addEventListener-defuser.js +1 -1
  276. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.remove-cookie.js +2 -2
  277. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.remove-node-text.js +2 -2
  278. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.set-constant.js +1 -1
  279. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.set-cookie.js +2 -2
  280. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.trusted-set-local-storage-item.js +1 -1
  281. package/extensions/ublocklite/rulesets/scripting/scriptlet/chn-0.abort-current-script.js +2 -2
  282. package/extensions/ublocklite/rulesets/scripting/scriptlet/chn-0.prevent-setTimeout.js +1 -1
  283. package/extensions/ublocklite/rulesets/scripting/scriptlet/chn-0.remove-attr.js +1 -1
  284. package/extensions/ublocklite/rulesets/scripting/scriptlet/easyprivacy.set-constant.js +2 -2
  285. package/extensions/ublocklite/rulesets/scripting/scriptlet/fra-0.set-constant.js +2 -2
  286. package/extensions/ublocklite/rulesets/scripting/scriptlet/idn-0.addEventListener-defuser.js +2 -2
  287. package/extensions/ublocklite/rulesets/scripting/scriptlet/jpn-1.addEventListener-defuser.js +2 -2
  288. package/extensions/ublocklite/rulesets/scripting/scriptlet/jpn-1.prevent-fetch.js +2 -2
  289. package/extensions/ublocklite/rulesets/scripting/scriptlet/jpn-1.prevent-refresh.js +330 -0
  290. package/extensions/ublocklite/rulesets/scripting/scriptlet/jpn-1.remove-attr.js +1 -1
  291. package/extensions/ublocklite/rulesets/scripting/scriptlet/jpn-1.set-constant.js +2 -2
  292. package/extensions/ublocklite/rulesets/scripting/scriptlet/kor-1.abort-current-script.js +2 -2
  293. package/extensions/ublocklite/rulesets/scripting/scriptlet/kor-1.prevent-setTimeout.js +2 -2
  294. package/extensions/ublocklite/rulesets/scripting/scriptlet/nld-0.adjust-setTimeout.js +2 -2
  295. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.abort-on-property-read.js +2 -2
  296. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.addEventListener-defuser.js +3 -3
  297. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.json-prune-fetch-response.js +2 -2
  298. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.prevent-fetch.js +3 -3
  299. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.prevent-setTimeout.js +2 -2
  300. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.remove-node-text.js +3 -3
  301. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.set-constant.js +3 -3
  302. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.set-cookie.js +2 -2
  303. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-1.json-prune.js +1 -1
  304. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-1.set-constant.js +1 -1
  305. package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.abort-on-property-read.js +2 -2
  306. package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.adjust-setInterval.js +2 -2
  307. package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.adjust-setTimeout.js +2 -2
  308. package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.noeval-if.js +2 -2
  309. package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.prevent-fetch.js +2 -2
  310. package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.prevent-setTimeout.js +3 -3
  311. package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.set-constant.js +2 -2
  312. package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.set-cookie.js +3 -3
  313. package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.set-local-storage-item.js +3 -3
  314. package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.set-session-storage-item.js +399 -0
  315. package/extensions/ublocklite/rulesets/scripting/scriptlet/swe-1.abort-current-script.js +1 -1
  316. package/extensions/ublocklite/rulesets/scripting/scriptlet/swe-1.addEventListener-defuser.js +1 -1
  317. package/extensions/ublocklite/rulesets/scripting/scriptlet/swe-1.href-sanitizer.js +2 -2
  318. package/extensions/ublocklite/rulesets/scripting/scriptlet/swe-1.remove-cookie.js +2 -2
  319. package/extensions/ublocklite/rulesets/scripting/scriptlet/swe-1.remove-node-text.js +2 -2
  320. package/extensions/ublocklite/rulesets/scripting/scriptlet/tur-0.abort-current-script.js +2 -2
  321. package/extensions/ublocklite/rulesets/scripting/scriptlet/tur-0.abort-on-property-read.js +2 -2
  322. package/extensions/ublocklite/rulesets/scripting/scriptlet/tur-0.abort-on-stack-trace.js +421 -0
  323. package/extensions/ublocklite/rulesets/scripting/scriptlet/tur-0.addEventListener-defuser.js +2 -2
  324. package/extensions/ublocklite/rulesets/scripting/scriptlet/tur-0.prevent-window-open.js +2 -2
  325. package/extensions/ublocklite/rulesets/scripting/scriptlet/tur-0.prevent-xhr.js +2 -2
  326. package/extensions/ublocklite/rulesets/scripting/scriptlet/tur-0.remove-node-text.js +3 -3
  327. package/extensions/ublocklite/rulesets/scripting/scriptlet/tur-0.set-constant.js +2 -2
  328. package/extensions/ublocklite/rulesets/scripting/scriptlet/tur-0.set-local-storage-item.js +2 -2
  329. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.abort-current-script.js +3 -3
  330. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.abort-on-property-read.js +1 -1
  331. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.abort-on-property-write.js +2 -2
  332. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.abort-on-stack-trace.js +3 -3
  333. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.addEventListener-defuser.js +3 -3
  334. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.adjust-setInterval.js +1 -1
  335. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.disable-newtab-links.js +1 -1
  336. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.href-sanitizer.js +2 -2
  337. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.json-edit.js +788 -0
  338. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.json-prune-fetch-response.js +2 -2
  339. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.json-prune-xhr-response.js +3 -3
  340. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.json-prune.js +3 -3
  341. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.jsonl-edit-xhr-response.js +809 -0
  342. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.noeval-if.js +1 -1
  343. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.nowebrtc.js +1 -1
  344. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.prevent-fetch.js +2 -2
  345. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.prevent-requestAnimationFrame.js +2 -2
  346. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.prevent-setInterval.js +2 -2
  347. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.prevent-setTimeout.js +3 -3
  348. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.prevent-window-open.js +3 -3
  349. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.prevent-xhr.js +2 -2
  350. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.remove-attr.js +2 -2
  351. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.remove-cookie.js +2 -2
  352. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.remove-node-text.js +4 -4
  353. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.set-constant.js +3 -3
  354. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.set-cookie.js +2 -2
  355. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.set-local-storage-item.js +2 -2
  356. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.set-session-storage-item.js +2 -2
  357. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.spoof-css.js +2 -2
  358. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.trusted-replace-node-text.js +3 -3
  359. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.trusted-replace-xhr-response.js +2 -2
  360. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.trusted-set-constant.js +2 -2
  361. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.trusted-suppress-native-method.js +2 -2
  362. package/extensions/ublocklite/rulesets/scripting/scriptlet/ubol-tests.jsonl-edit-fetch-response.js +5 -3
  363. package/extensions/ublocklite/rulesets/scripting/scriptlet/ubol-tests.jsonl-edit-xhr-response.js +5 -3
  364. package/extensions/ublocklite/rulesets/scripting/scriptlet/vie-1.abort-current-script.js +2 -2
  365. package/extensions/ublocklite/rulesets/scripting/scriptlet/vie-1.abort-on-property-read.js +2 -2
  366. package/extensions/ublocklite/rulesets/scripting/scriptlet/vie-1.m3u-prune.js +1 -1
  367. package/extensions/ublocklite/rulesets/scripting/scriptlet/vie-1.set-constant.js +2 -2
  368. package/extensions/ublocklite/rulesets/scripting/specific/adguard-mobile.js +42 -0
  369. package/extensions/ublocklite/rulesets/scripting/specific/annoyances-cookies.js +3 -3
  370. package/extensions/ublocklite/rulesets/scripting/specific/annoyances-others.js +3 -3
  371. package/extensions/ublocklite/rulesets/scripting/specific/annoyances-overlays.js +3 -3
  372. package/extensions/ublocklite/rulesets/scripting/specific/annoyances-social.js +3 -3
  373. package/extensions/ublocklite/rulesets/scripting/specific/chn-0.js +3 -3
  374. package/extensions/ublocklite/rulesets/scripting/specific/cze-0.js +3 -3
  375. package/extensions/ublocklite/rulesets/scripting/specific/deu-0.js +3 -3
  376. package/extensions/ublocklite/rulesets/scripting/specific/easylist.js +3 -3
  377. package/extensions/ublocklite/rulesets/scripting/specific/fin-0.js +3 -3
  378. package/extensions/ublocklite/rulesets/scripting/specific/fra-0.js +3 -3
  379. package/extensions/ublocklite/rulesets/scripting/specific/grc-0.js +3 -3
  380. package/extensions/ublocklite/rulesets/scripting/specific/hun-0.js +3 -3
  381. package/extensions/ublocklite/rulesets/scripting/specific/idn-0.js +3 -3
  382. package/extensions/ublocklite/rulesets/scripting/specific/ind-0.js +3 -3
  383. package/extensions/ublocklite/rulesets/scripting/specific/isr-0.js +3 -3
  384. package/extensions/ublocklite/rulesets/scripting/specific/ita-0.js +3 -3
  385. package/extensions/ublocklite/rulesets/scripting/specific/jpn-1.js +3 -3
  386. package/extensions/ublocklite/rulesets/scripting/specific/kor-1.js +3 -3
  387. package/extensions/ublocklite/rulesets/scripting/specific/nld-0.js +3 -3
  388. package/extensions/ublocklite/rulesets/scripting/specific/nor-0.js +3 -3
  389. package/extensions/ublocklite/rulesets/scripting/specific/rou-1.js +3 -3
  390. package/extensions/ublocklite/rulesets/scripting/specific/rus-0.js +3 -3
  391. package/extensions/ublocklite/rulesets/scripting/specific/spa-0.js +3 -3
  392. package/extensions/ublocklite/rulesets/scripting/specific/spa-1.js +3 -3
  393. package/extensions/ublocklite/rulesets/scripting/specific/swe-1.js +3 -3
  394. package/extensions/ublocklite/rulesets/scripting/specific/tur-0.js +3 -3
  395. package/extensions/ublocklite/rulesets/scripting/specific/ublock-filters.js +3 -3
  396. package/extensions/ublocklite/rulesets/scripting/specific/ukr-0.js +3 -3
  397. package/extensions/ublocklite/rulesets/scripting/specific/vie-1.js +3 -3
  398. package/extensions/ublocklite/rulesets/scriptlet-details.json +467 -310
  399. package/extensions/ublocklite/rulesets/strictblock/adguard-mobile.json +891 -0
  400. package/extensions/ublocklite/rulesets/strictblock/annoyances-cookies.json +8 -1
  401. package/extensions/ublocklite/rulesets/strictblock/annoyances-widgets.json +2 -0
  402. package/extensions/ublocklite/rulesets/strictblock/chn-0.json +281 -4
  403. package/extensions/ublocklite/rulesets/strictblock/deu-0.json +1 -0
  404. package/extensions/ublocklite/rulesets/strictblock/easylist.json +15 -13
  405. package/extensions/ublocklite/rulesets/strictblock/easyprivacy.json +143 -696
  406. package/extensions/ublocklite/rulesets/strictblock/fra-0.json +245 -78
  407. package/extensions/ublocklite/rulesets/strictblock/hun-0.json +1 -1
  408. package/extensions/ublocklite/rulesets/strictblock/isr-0.json +0 -12
  409. package/extensions/ublocklite/rulesets/strictblock/ita-0.json +1 -1
  410. package/extensions/ublocklite/rulesets/strictblock/jpn-1.json +161 -156
  411. package/extensions/ublocklite/rulesets/strictblock/kor-1.json +2 -0
  412. package/extensions/ublocklite/rulesets/strictblock/pgl.json +6 -18
  413. package/extensions/ublocklite/rulesets/strictblock/pol-0.json +1 -0
  414. package/extensions/ublocklite/rulesets/strictblock/rou-1.json +1 -0
  415. package/extensions/ublocklite/rulesets/strictblock/rus-0.json +0 -1
  416. package/extensions/ublocklite/rulesets/strictblock/rus-1.json +1 -0
  417. package/extensions/ublocklite/rulesets/strictblock/spa-0.json +2 -0
  418. package/extensions/ublocklite/rulesets/strictblock/spa-1.json +1 -0
  419. package/extensions/ublocklite/rulesets/strictblock/stevenblack-hosts.json +15575 -4509
  420. package/extensions/ublocklite/rulesets/strictblock/swe-1.json +1 -4
  421. package/extensions/ublocklite/rulesets/strictblock/tur-0.json +3 -0
  422. package/extensions/ublocklite/rulesets/strictblock/ublock-badware.json +583 -614
  423. package/extensions/ublocklite/rulesets/strictblock/ublock-filters.json +1 -1
  424. package/extensions/ublocklite/rulesets/strictblock/ukr-0.json +6 -0
  425. package/extensions/ublocklite/rulesets/strictblock/urlhaus-full.json +484 -977
  426. package/extensions/ublocklite/rulesets/strictblock/vie-1.json +4 -9
  427. package/extensions/ublocklite/rulesets/urlskip/ublock-filters.json +61 -1
  428. package/extensions/ublocklite/ublock.zip +0 -0
  429. package/extensions/ublocklite/zapper-ui.html +7 -1
  430. package/package.json +13 -13
  431. package/scripts/build-open-api.js +1 -1
  432. package/src/browserless.ts +33 -30
  433. package/src/browsers/index.ts +6 -0
  434. package/src/routes/chromium/tests/websocket.spec.ts +1 -1
  435. package/static/docs/swagger.json +24 -11
  436. package/static/docs/swagger.min.json +23 -10
  437. package/static/function/client.js +6 -3
  438. package/static/function/index.html +6 -3
  439. package/extensions/ublocklite/rulesets/main/pol-3.json +0 -56707
  440. 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
- const isSupported = result?.isSupported || false;
89
- pruneInvalidRegexRules.validated.set(regex, isSupported);
90
- if ( isSupported ) { return true; }
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
- if ( pruneInvalidRegexRules.validated.has(regexFilter) ) {
105
- toCheck.push(pruneInvalidRegexRules.validated.get(regexFilter));
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 ( rejectedRegexRules.length !== 0 ) {
119
+ if ( rejected.length !== 0 ) {
115
120
  ubolLog(`${realm} realm: rejected regexes:\n`,
116
- rejectedRegexRules.join('\n')
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 defaultRulesetsFromLanguage() {
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 !== 'string' ) { continue; }
506
- if ( reTargetLang.test(ruleset.lang) === false ) { continue; }
507
- out.push(id);
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
- defaultRulesetsFromLanguage(),
542
+ defaultRulesetsFromEnv(),
522
543
  getStaticRulesets().then(r => r.map(a => a.id)),
523
544
  ]);
524
545
  const toAdd = [];
@@ -648,15 +669,94 @@ async function getEnabledRulesetsDetails() {
648
669
 
649
670
  /******************************************************************************/
650
671
 
672
+ async function getEffectiveUserRules() {
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
+ getEffectiveUserRules(),
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 getEffectiveUserRules();
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,
754
+ getEffectiveUserRules,
656
755
  getEnabledRulesetsDetails,
657
756
  getRulesetDetails,
658
757
  patchDefaultRulesets,
659
758
  setStrictBlockMode,
660
759
  updateDynamicRules,
661
760
  updateSessionRules,
761
+ updateUserRules,
662
762
  };
@@ -21,7 +21,12 @@
21
21
 
22
22
  import * as ut from './utils.js';
23
23
 
24
- import { browser } from './ext.js';
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
- excludeMatches,
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
- excludeMatches,
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
- excludeMatches,
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
- excludeMatches,
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
- excludeMatches,
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
- await browser.scripting.unregisterContentScripts({ ids: toRemove })
597
- .catch(reason => { console.info(reason); });
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
- await browser.scripting.registerContentScripts(toAdd)
603
- .catch(reason => { console.info(reason); });
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
- dom.prop('#developerMode input[type="checkbox"]', 'checked',
74
- Boolean(cachedRulesetData.developerMode)
75
- );
76
- if ( cachedRulesetData.isSideloaded ) {
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
- sendMessage({
162
- what: 'setDeveloperMode',
163
- state: ev.target.checked,
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
- textarea.value = hostnames.map(hn => punycode.toUnicode(hn)).join('\n');
173
- if ( textarea.value !== '' ) {
174
- textarea.value += '\n';
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 textarea = qs$('#trustedSites');
190
- return textarea.value.split(/\s/).map(hn => {
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('#trustedSites', 'blur', changeTrustedSites);
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
- dom.cl.toggle(dom.html, 'mobile', mql.matches !== true);
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