@browserless.io/browserless 2.37.1 → 2.38.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 (284) hide show
  1. package/CHANGELOG.md +25 -1
  2. package/extensions/ublocklite/_locales/ar/messages.json +5 -5
  3. package/extensions/ublocklite/_locales/de/messages.json +1 -1
  4. package/extensions/ublocklite/_locales/fa/messages.json +8 -8
  5. package/extensions/ublocklite/_locales/hu/messages.json +5 -5
  6. package/extensions/ublocklite/_locales/nb/messages.json +7 -7
  7. package/extensions/ublocklite/_locales/pt_PT/messages.json +9 -9
  8. package/extensions/ublocklite/_locales/ro/messages.json +32 -32
  9. package/extensions/ublocklite/_locales/sq/messages.json +4 -4
  10. package/extensions/ublocklite/js/background.js +19 -2
  11. package/extensions/ublocklite/js/mode-manager.js +7 -9
  12. package/extensions/ublocklite/js/scripting/css-api.js +33 -0
  13. package/extensions/ublocklite/js/scripting/css-generic.js +3 -13
  14. package/extensions/ublocklite/js/scripting/css-procedural-api.js +1 -9
  15. package/extensions/ublocklite/js/scripting/css-procedural.js +1 -5
  16. package/extensions/ublocklite/js/scripting/css-specific.js +1 -5
  17. package/extensions/ublocklite/js/scripting-manager.js +11 -8
  18. package/extensions/ublocklite/js/troubleshooting.js +3 -0
  19. package/extensions/ublocklite/js/utils.js +15 -13
  20. package/extensions/ublocklite/manifest.json +2 -1
  21. package/extensions/ublocklite/rulesets/generic-details.json +4 -2
  22. package/extensions/ublocklite/rulesets/main/adguard-mobile.json +4 -5
  23. package/extensions/ublocklite/rulesets/main/adguard-spyware-url.json +12 -7
  24. package/extensions/ublocklite/rulesets/main/annoyances-cookies.json +21 -17
  25. package/extensions/ublocklite/rulesets/main/annoyances-notifications.json +2 -1
  26. package/extensions/ublocklite/rulesets/main/annoyances-others.json +3 -2
  27. package/extensions/ublocklite/rulesets/main/annoyances-widgets.json +4 -3
  28. package/extensions/ublocklite/rulesets/main/chn-0.json +23 -15
  29. package/extensions/ublocklite/rulesets/main/deu-0.json +4 -4
  30. package/extensions/ublocklite/rulesets/main/dpollock-0.json +2 -1
  31. package/extensions/ublocklite/rulesets/main/easylist.json +37 -91
  32. package/extensions/ublocklite/rulesets/main/easyprivacy.json +22 -8
  33. package/extensions/ublocklite/rulesets/main/est-0.json +2 -1
  34. package/extensions/ublocklite/rulesets/main/fra-0.json +6 -4
  35. package/extensions/ublocklite/rulesets/main/hrv-0.json +6 -3
  36. package/extensions/ublocklite/rulesets/main/hun-0.json +5 -2
  37. package/extensions/ublocklite/rulesets/main/idn-0.json +1 -1
  38. package/extensions/ublocklite/rulesets/main/ind-0.json +36 -34
  39. package/extensions/ublocklite/rulesets/main/isr-0.json +1 -1
  40. package/extensions/ublocklite/rulesets/main/ita-0.json +4 -3
  41. package/extensions/ublocklite/rulesets/main/jpn-1.json +25 -16
  42. package/extensions/ublocklite/rulesets/main/kor-1.json +5 -3
  43. package/extensions/ublocklite/rulesets/main/mkd-0.json +2 -1
  44. package/extensions/ublocklite/rulesets/main/nld-0.json +3 -1
  45. package/extensions/ublocklite/rulesets/main/nor-0.json +15 -1
  46. package/extensions/ublocklite/rulesets/main/pgl.json +16 -20
  47. package/extensions/ublocklite/rulesets/main/pol-0.json +1 -1
  48. package/extensions/ublocklite/rulesets/main/rus-0.json +14 -13
  49. package/extensions/ublocklite/rulesets/main/rus-1.json +4 -2
  50. package/extensions/ublocklite/rulesets/main/spa-1.json +8 -3
  51. package/extensions/ublocklite/rulesets/main/stevenblack-hosts.json +11287 -12041
  52. package/extensions/ublocklite/rulesets/main/swe-1.json +21 -19
  53. package/extensions/ublocklite/rulesets/main/tur-0.json +13 -4
  54. package/extensions/ublocklite/rulesets/main/ublock-badware.json +28 -3
  55. package/extensions/ublocklite/rulesets/main/ublock-filters.json +73 -70
  56. package/extensions/ublocklite/rulesets/main/ukr-0.json +2 -2
  57. package/extensions/ublocklite/rulesets/main/urlhaus-full.json +3496 -291
  58. package/extensions/ublocklite/rulesets/main/vie-1.json +52 -47
  59. package/extensions/ublocklite/rulesets/regex/block-lan.json +16 -0
  60. package/extensions/ublocklite/rulesets/regex/chn-0.json +3 -2
  61. package/extensions/ublocklite/rulesets/regex/jpn-1.json +2 -3
  62. package/extensions/ublocklite/rulesets/regex/rus-0.json +2 -1
  63. package/extensions/ublocklite/rulesets/regex/ublock-badware.json +5 -4
  64. package/extensions/ublocklite/rulesets/regex/ublock-filters.json +22 -15
  65. package/extensions/ublocklite/rulesets/ruleset-details.json +219 -219
  66. package/extensions/ublocklite/rulesets/scripting/generic/adguard-mobile.js +2 -2
  67. package/extensions/ublocklite/rulesets/scripting/generic/alb-0.js +1 -1
  68. package/extensions/ublocklite/rulesets/scripting/generic/annoyances-cookies.js +3 -3
  69. package/extensions/ublocklite/rulesets/scripting/generic/annoyances-notifications.js +2 -2
  70. package/extensions/ublocklite/rulesets/scripting/generic/annoyances-others.js +2 -2
  71. package/extensions/ublocklite/rulesets/scripting/generic/annoyances-overlays.js +2 -2
  72. package/extensions/ublocklite/rulesets/scripting/generic/annoyances-social.js +3 -3
  73. package/extensions/ublocklite/rulesets/scripting/generic/annoyances-widgets.js +1 -1
  74. package/extensions/ublocklite/rulesets/scripting/generic/bgr-0.js +2 -2
  75. package/extensions/ublocklite/rulesets/scripting/generic/chn-0.js +2 -2
  76. package/extensions/ublocklite/rulesets/scripting/generic/cze-0.js +2 -2
  77. package/extensions/ublocklite/rulesets/scripting/generic/deu-0.js +2 -2
  78. package/extensions/ublocklite/rulesets/scripting/generic/easylist.js +3 -3
  79. package/extensions/ublocklite/rulesets/scripting/generic/easyprivacy.js +1 -1
  80. package/extensions/ublocklite/rulesets/scripting/generic/est-0.js +2 -2
  81. package/extensions/ublocklite/rulesets/scripting/generic/fin-0.js +2 -2
  82. package/extensions/ublocklite/rulesets/scripting/generic/fra-0.js +2 -2
  83. package/extensions/ublocklite/rulesets/scripting/generic/grc-0.js +2 -2
  84. package/extensions/ublocklite/rulesets/scripting/generic/hrv-0.js +2 -2
  85. package/extensions/ublocklite/rulesets/scripting/generic/hun-0.js +2 -2
  86. package/extensions/ublocklite/rulesets/scripting/generic/idn-0.js +2 -2
  87. package/extensions/ublocklite/rulesets/scripting/generic/ind-0.js +1 -1
  88. package/extensions/ublocklite/rulesets/scripting/generic/irn-0.js +2 -2
  89. package/extensions/ublocklite/rulesets/scripting/generic/isr-0.js +2 -2
  90. package/extensions/ublocklite/rulesets/scripting/generic/ita-0.js +2 -2
  91. package/extensions/ublocklite/rulesets/scripting/generic/jpn-1.js +2 -2
  92. package/extensions/ublocklite/rulesets/scripting/generic/kor-1.js +2 -2
  93. package/extensions/ublocklite/rulesets/scripting/generic/ltu-0.js +1 -1
  94. package/extensions/ublocklite/rulesets/scripting/generic/lva-0.js +1 -1
  95. package/extensions/ublocklite/rulesets/scripting/generic/mkd-0.js +2 -2
  96. package/extensions/ublocklite/rulesets/scripting/generic/nld-0.js +2 -2
  97. package/extensions/ublocklite/rulesets/scripting/generic/nor-0.js +2 -2
  98. package/extensions/ublocklite/rulesets/scripting/generic/pol-0.js +2 -2
  99. package/extensions/ublocklite/rulesets/scripting/generic/rou-1.js +2 -2
  100. package/extensions/ublocklite/rulesets/scripting/generic/rus-0.js +2 -2
  101. package/extensions/ublocklite/rulesets/scripting/generic/rus-1.js +2 -2
  102. package/extensions/ublocklite/rulesets/scripting/generic/spa-0.js +2 -2
  103. package/extensions/ublocklite/rulesets/scripting/generic/spa-1.js +2 -2
  104. package/extensions/ublocklite/rulesets/scripting/generic/svn-0.js +1 -1
  105. package/extensions/ublocklite/rulesets/scripting/generic/swe-1.js +2 -2
  106. package/extensions/ublocklite/rulesets/scripting/generic/tha-0.js +1 -1
  107. package/extensions/ublocklite/rulesets/scripting/generic/tur-0.js +2 -2
  108. package/extensions/ublocklite/rulesets/scripting/generic/ublock-badware.js +1 -1
  109. package/extensions/ublocklite/rulesets/scripting/generic/ublock-filters.js +3 -3
  110. package/extensions/ublocklite/rulesets/scripting/generic/ubol-tests.js +2 -2
  111. package/extensions/ublocklite/rulesets/scripting/generic/ukr-0.js +3 -3
  112. package/extensions/ublocklite/rulesets/scripting/generic/vie-1.js +3 -3
  113. package/extensions/ublocklite/rulesets/scripting/generichigh/chn-0.css +3 -5
  114. package/extensions/ublocklite/rulesets/scripting/generichigh/easylist.css +4 -0
  115. package/extensions/ublocklite/rulesets/scripting/generichigh/idn-0.css +4 -0
  116. package/extensions/ublocklite/rulesets/scripting/generichigh/rus-0.css +1 -1
  117. package/extensions/ublocklite/rulesets/scripting/procedural/adguard-mobile.js +3 -3
  118. package/extensions/ublocklite/rulesets/scripting/procedural/annoyances-cookies.js +3 -3
  119. package/extensions/ublocklite/rulesets/scripting/procedural/annoyances-others.js +1 -1
  120. package/extensions/ublocklite/rulesets/scripting/procedural/annoyances-overlays.js +3 -3
  121. package/extensions/ublocklite/rulesets/scripting/procedural/chn-0.js +1 -1
  122. package/extensions/ublocklite/rulesets/scripting/procedural/easylist.js +3 -3
  123. package/extensions/ublocklite/rulesets/scripting/procedural/fin-0.js +1 -1
  124. package/extensions/ublocklite/rulesets/scripting/procedural/fra-0.js +1 -1
  125. package/extensions/ublocklite/rulesets/scripting/procedural/ind-0.js +3 -3
  126. package/extensions/ublocklite/rulesets/scripting/procedural/irn-0.js +3 -3
  127. package/extensions/ublocklite/rulesets/scripting/procedural/isr-0.js +3 -3
  128. package/extensions/ublocklite/rulesets/scripting/procedural/jpn-1.js +3 -3
  129. package/extensions/ublocklite/rulesets/scripting/procedural/kor-1.js +3 -3
  130. package/extensions/ublocklite/rulesets/scripting/procedural/rou-1.js +3 -3
  131. package/extensions/ublocklite/rulesets/scripting/procedural/rus-0.js +3 -3
  132. package/extensions/ublocklite/rulesets/scripting/procedural/rus-1.js +3 -3
  133. package/extensions/ublocklite/rulesets/scripting/procedural/spa-1.js +3 -3
  134. package/extensions/ublocklite/rulesets/scripting/procedural/swe-1.js +3 -3
  135. package/extensions/ublocklite/rulesets/scripting/procedural/ublock-experimental.js +42 -0
  136. package/extensions/ublocklite/rulesets/scripting/procedural/ublock-filters.js +3 -3
  137. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-cookies.remove-node-text.js +1 -1
  138. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-cookies.set-cookie.js +2 -2
  139. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-cookies.set-local-storage-item.js +2 -2
  140. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-cookies.set-session-storage-item.js +2 -2
  141. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-cookies.trusted-click-element.js +5 -2
  142. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-cookies.trusted-replace-node-text.js +2 -2
  143. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-cookies.trusted-set-cookie.js +2 -2
  144. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-notifications.set-constant.js +2 -2
  145. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-others.set-cookie.js +2 -2
  146. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.abort-current-script.js +2 -2
  147. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.abort-on-stack-trace.js +2 -2
  148. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.addEventListener-defuser.js +1 -1
  149. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.prevent-setTimeout.js +1 -1
  150. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.remove-attr.js +2 -2
  151. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.remove-class.js +2 -2
  152. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.remove-node-text.js +2 -2
  153. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.set-constant.js +2 -2
  154. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.trusted-click-element.js +3 -0
  155. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.trusted-replace-argument.js +14 -7
  156. package/extensions/ublocklite/rulesets/scripting/scriptlet/chn-0.prevent-fetch.js +2 -2
  157. package/extensions/ublocklite/rulesets/scripting/scriptlet/chn-0.prevent-setTimeout.js +1 -1
  158. package/extensions/ublocklite/rulesets/scripting/scriptlet/chn-0.set-constant.js +1 -1
  159. package/extensions/ublocklite/rulesets/scripting/scriptlet/{vie-1.addEventListener-defuser.js → chn-0.set-cookie.js} +133 -193
  160. package/extensions/ublocklite/rulesets/scripting/scriptlet/hun-0.set-constant.js +2 -2
  161. package/extensions/ublocklite/rulesets/scripting/scriptlet/irn-0.href-sanitizer.js +4 -22
  162. package/extensions/ublocklite/rulesets/scripting/scriptlet/isr-0.prevent-fetch.js +1 -1
  163. package/extensions/ublocklite/rulesets/scripting/scriptlet/jpn-1.adjust-setInterval.js +2 -2
  164. package/extensions/ublocklite/rulesets/scripting/scriptlet/jpn-1.href-sanitizer.js +6 -24
  165. package/extensions/ublocklite/rulesets/scripting/scriptlet/jpn-1.json-prune.js +2 -2
  166. package/extensions/ublocklite/rulesets/scripting/scriptlet/kor-1.abort-current-script.js +2 -2
  167. package/extensions/ublocklite/rulesets/scripting/scriptlet/kor-1.addEventListener-defuser.js +2 -2
  168. package/extensions/ublocklite/rulesets/scripting/scriptlet/kor-1.prevent-fetch.js +2 -2
  169. package/extensions/ublocklite/rulesets/scripting/scriptlet/kor-1.prevent-setTimeout.js +2 -2
  170. package/extensions/ublocklite/rulesets/scripting/scriptlet/kor-1.prevent-xhr.js +2 -2
  171. package/extensions/ublocklite/rulesets/scripting/scriptlet/kor-1.remove-cookie.js +2 -2
  172. package/extensions/ublocklite/rulesets/scripting/scriptlet/kor-1.remove-node-text.js +2 -2
  173. package/extensions/ublocklite/rulesets/scripting/scriptlet/kor-1.set-constant.js +2 -2
  174. package/extensions/ublocklite/rulesets/scripting/scriptlet/{nld-0.json-prune-fetch-response.js → kor-1.set-local-storage-item.js} +86 -275
  175. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.abort-on-property-write.js +2 -2
  176. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.abort-on-stack-trace.js +2 -2
  177. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.addEventListener-defuser.js +2 -2
  178. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.href-sanitizer.js +6 -24
  179. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.set-attr.js +2 -2
  180. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.set-constant.js +3 -3
  181. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.set-cookie.js +2 -2
  182. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-1.set-local-storage-item.js +399 -0
  183. package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.href-sanitizer.js +4 -22
  184. package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.noeval-if.js +1 -1
  185. package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.prevent-setTimeout.js +2 -2
  186. package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.remove-node-text.js +2 -2
  187. package/extensions/ublocklite/rulesets/scripting/scriptlet/swe-1.href-sanitizer.js +4 -22
  188. package/extensions/ublocklite/rulesets/scripting/scriptlet/tur-0.set-constant.js +2 -2
  189. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-badware.trusted-replace-argument.js +14 -7
  190. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-experimental.trusted-json-edit-xhr-request.js +1 -1
  191. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-experimental.trusted-replace-node-text.js +1 -1
  192. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.abort-current-script.js +3 -3
  193. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.abort-on-property-read.js +1 -1
  194. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.abort-on-property-write.js +1 -1
  195. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.abort-on-stack-trace.js +3 -3
  196. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.addEventListener-defuser.js +2 -2
  197. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.adjust-setInterval.js +1 -1
  198. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.adjust-setTimeout.js +2 -2
  199. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.href-sanitizer.js +5 -23
  200. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.json-prune-fetch-response.js +2 -2
  201. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.json-prune-xhr-response.js +3 -3
  202. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.json-prune.js +2 -2
  203. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.noeval-if.js +2 -2
  204. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.prevent-fetch.js +2 -2
  205. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.prevent-requestAnimationFrame.js +1 -1
  206. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.prevent-setInterval.js +3 -3
  207. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.prevent-setTimeout.js +3 -3
  208. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.prevent-window-open.js +2 -2
  209. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.prevent-xhr.js +1 -1
  210. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.remove-attr.js +2 -2
  211. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.remove-cookie.js +2 -2
  212. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.remove-node-text.js +3 -3
  213. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.set-constant.js +3 -3
  214. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.trusted-click-element.js +3 -0
  215. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.trusted-create-html.js +2 -2
  216. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.trusted-replace-argument.js +16 -9
  217. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.trusted-replace-node-text.js +3 -3
  218. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.trusted-replace-outbound-text.js +2 -2
  219. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.trusted-set-attr.js +2 -2
  220. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.trusted-suppress-native-method.js +2 -2
  221. package/extensions/ublocklite/rulesets/scripting/scriptlet/vie-1.abort-current-script.js +2 -2
  222. package/extensions/ublocklite/rulesets/scripting/scriptlet/vie-1.abort-on-property-read.js +2 -2
  223. package/extensions/ublocklite/rulesets/scripting/scriptlet/vie-1.set-constant.js +2 -2
  224. package/extensions/ublocklite/rulesets/scripting/specific/adguard-mobile.js +3 -3
  225. package/extensions/ublocklite/rulesets/scripting/specific/annoyances-cookies.js +3 -3
  226. package/extensions/ublocklite/rulesets/scripting/specific/annoyances-notifications.js +3 -3
  227. package/extensions/ublocklite/rulesets/scripting/specific/annoyances-others.js +3 -3
  228. package/extensions/ublocklite/rulesets/scripting/specific/annoyances-overlays.js +3 -3
  229. package/extensions/ublocklite/rulesets/scripting/specific/annoyances-social.js +3 -3
  230. package/extensions/ublocklite/rulesets/scripting/specific/chn-0.js +3 -3
  231. package/extensions/ublocklite/rulesets/scripting/specific/deu-0.js +3 -3
  232. package/extensions/ublocklite/rulesets/scripting/specific/easylist.js +3 -3
  233. package/extensions/ublocklite/rulesets/scripting/specific/est-0.js +3 -3
  234. package/extensions/ublocklite/rulesets/scripting/specific/fin-0.js +3 -3
  235. package/extensions/ublocklite/rulesets/scripting/specific/fra-0.js +3 -3
  236. package/extensions/ublocklite/rulesets/scripting/specific/grc-0.js +3 -3
  237. package/extensions/ublocklite/rulesets/scripting/specific/hrv-0.js +3 -3
  238. package/extensions/ublocklite/rulesets/scripting/specific/hun-0.js +3 -3
  239. package/extensions/ublocklite/rulesets/scripting/specific/idn-0.js +3 -3
  240. package/extensions/ublocklite/rulesets/scripting/specific/ind-0.js +3 -3
  241. package/extensions/ublocklite/rulesets/scripting/specific/isr-0.js +3 -3
  242. package/extensions/ublocklite/rulesets/scripting/specific/ita-0.js +3 -3
  243. package/extensions/ublocklite/rulesets/scripting/specific/jpn-1.js +3 -3
  244. package/extensions/ublocklite/rulesets/scripting/specific/kor-1.js +2 -2
  245. package/extensions/ublocklite/rulesets/scripting/specific/nor-0.js +3 -3
  246. package/extensions/ublocklite/rulesets/scripting/specific/rou-1.js +3 -3
  247. package/extensions/ublocklite/rulesets/scripting/specific/rus-0.js +3 -3
  248. package/extensions/ublocklite/rulesets/scripting/specific/spa-1.js +3 -3
  249. package/extensions/ublocklite/rulesets/scripting/specific/swe-1.js +3 -3
  250. package/extensions/ublocklite/rulesets/scripting/specific/tur-0.js +3 -3
  251. package/extensions/ublocklite/rulesets/scripting/specific/ublock-badware.js +1 -1
  252. package/extensions/ublocklite/rulesets/scripting/specific/ublock-filters.js +3 -3
  253. package/extensions/ublocklite/rulesets/scripting/specific/ukr-0.js +3 -3
  254. package/extensions/ublocklite/rulesets/scripting/specific/vie-1.js +3 -3
  255. package/extensions/ublocklite/rulesets/scriptlet-details.json +154 -124
  256. package/extensions/ublocklite/rulesets/strictblock/adguard-mobile.json +13 -28
  257. package/extensions/ublocklite/rulesets/strictblock/annoyances-cookies.json +1 -0
  258. package/extensions/ublocklite/rulesets/strictblock/annoyances-widgets.json +1 -0
  259. package/extensions/ublocklite/rulesets/strictblock/chn-0.json +200 -246
  260. package/extensions/ublocklite/rulesets/strictblock/deu-0.json +1 -0
  261. package/extensions/ublocklite/rulesets/strictblock/dpollock-0.json +2 -1
  262. package/extensions/ublocklite/rulesets/strictblock/easylist.json +1 -1
  263. package/extensions/ublocklite/rulesets/strictblock/easyprivacy.json +30 -2
  264. package/extensions/ublocklite/rulesets/strictblock/fra-0.json +102 -41
  265. package/extensions/ublocklite/rulesets/strictblock/jpn-1.json +187 -179
  266. package/extensions/ublocklite/rulesets/strictblock/pgl.json +16 -20
  267. package/extensions/ublocklite/rulesets/strictblock/pol-0.json +3 -1
  268. package/extensions/ublocklite/rulesets/strictblock/spa-1.json +1 -0
  269. package/extensions/ublocklite/rulesets/strictblock/stevenblack-hosts.json +11287 -12041
  270. package/extensions/ublocklite/rulesets/strictblock/swe-1.json +0 -1
  271. package/extensions/ublocklite/rulesets/strictblock/tur-0.json +1 -0
  272. package/extensions/ublocklite/rulesets/strictblock/ublock-badware.json +671 -655
  273. package/extensions/ublocklite/rulesets/strictblock/ublock-filters.json +1 -1
  274. package/extensions/ublocklite/rulesets/strictblock/ukr-0.json +1 -0
  275. package/extensions/ublocklite/rulesets/strictblock/urlhaus-full.json +3496 -291
  276. package/extensions/ublocklite/rulesets/strictblock/vie-1.json +5 -1
  277. package/extensions/ublocklite/rulesets/urlskip/ublock-filters.json +59 -1
  278. package/extensions/ublocklite/ublock.zip +0 -0
  279. package/package.json +17 -17
  280. package/static/docs/swagger.json +2 -2
  281. package/static/docs/swagger.min.json +1 -1
  282. package/static/function/client.js +58 -14
  283. package/static/function/index.html +58 -14
  284. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.trusted-json-edit-fetch-request.js +0 -941
@@ -1,941 +0,0 @@
1
- /*******************************************************************************
2
-
3
- uBlock Origin Lite - a comprehensive, MV3-compliant content blocker
4
- Copyright (C) 2014-present Raymond Hill
5
-
6
- This program is free software: you can redistribute it and/or modify
7
- it under the terms of the GNU General Public License as published by
8
- the Free Software Foundation, either version 3 of the License, or
9
- (at your option) any later version.
10
-
11
- This program is distributed in the hope that it will be useful,
12
- but WITHOUT ANY WARRANTY; without even the implied warranty of
13
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
- GNU General Public License for more details.
15
-
16
- You should have received a copy of the GNU General Public License
17
- along with this program. If not, see {http://www.gnu.org/licenses/}.
18
-
19
- Home: https://github.com/gorhill/uBlock
20
-
21
- */
22
-
23
- // ruleset: ublock-filters
24
-
25
- // Important!
26
- // Isolate from global scope
27
-
28
- // Start of local scope
29
- (function uBOL_trustedJsonEditFetchRequest() {
30
-
31
- /******************************************************************************/
32
-
33
- function trustedJsonEditFetchRequest(jsonq = '', ...args) {
34
- jsonEditFetchRequestFn(true, jsonq, ...args);
35
- }
36
-
37
- function jsonEditFetchRequestFn(trusted, jsonq = '') {
38
- const safe = safeSelf();
39
- const logPrefix = safe.makeLogPrefix(
40
- `${trusted ? 'trusted-' : ''}json-edit-fetch-request`,
41
- jsonq
42
- );
43
- const jsonp = JSONPath.create(jsonq);
44
- if ( jsonp.valid === false || jsonp.value !== undefined && trusted !== true ) {
45
- return safe.uboLog(logPrefix, 'Bad JSONPath query');
46
- }
47
- const extraArgs = safe.getExtraArgs(Array.from(arguments), 2);
48
- const propNeedles = parsePropertiesToMatchFn(extraArgs.propsToMatch, 'url');
49
- const filterBody = body => {
50
- if ( typeof body !== 'string' ) { return; }
51
- let data;
52
- try { data = safe.JSON_parse(body); }
53
- catch { }
54
- if ( data instanceof Object === false ) { return; }
55
- const objAfter = jsonp.apply(data);
56
- if ( objAfter === undefined ) { return; }
57
- return safe.JSON_stringify(objAfter);
58
- }
59
- const proxyHandler = context => {
60
- const args = context.callArgs;
61
- const [ resource, options ] = args;
62
- const bodyBefore = options?.body;
63
- if ( Boolean(bodyBefore) === false ) { return context.reflect(); }
64
- const bodyAfter = filterBody(bodyBefore);
65
- if ( bodyAfter === undefined || bodyAfter === bodyBefore ) {
66
- return context.reflect();
67
- }
68
- if ( propNeedles.size !== 0 ) {
69
- const objs = [
70
- resource instanceof Object ? resource : { url: `${resource}` }
71
- ];
72
- if ( objs[0] instanceof Request ) {
73
- try {
74
- objs[0] = safe.Request_clone.call(objs[0]);
75
- } catch(ex) {
76
- safe.uboErr(logPrefix, 'Error:', ex);
77
- }
78
- }
79
- const matched = matchObjectPropertiesFn(propNeedles, ...objs);
80
- if ( matched === undefined ) { return context.reflect(); }
81
- if ( safe.logLevel > 1 ) {
82
- safe.uboLog(logPrefix, `Matched "propsToMatch":\n\t${matched.join('\n\t')}`);
83
- }
84
- }
85
- safe.uboLog(logPrefix, 'Edited');
86
- if ( safe.logLevel > 1 ) {
87
- safe.uboLog(logPrefix, `After edit:\n${bodyAfter}`);
88
- }
89
- options.body = bodyAfter;
90
- return context.reflect();
91
- };
92
- proxyApplyFn('fetch', proxyHandler);
93
- proxyApplyFn('Request', proxyHandler);
94
- }
95
-
96
- class JSONPath {
97
- static create(query) {
98
- const jsonp = new JSONPath();
99
- jsonp.compile(query);
100
- return jsonp;
101
- }
102
- static toJSON(obj, stringifier, ...args) {
103
- return (stringifier || JSON.stringify)(obj, ...args)
104
- .replace(/\//g, '\\/');
105
- }
106
- get value() {
107
- return this.#compiled && this.#compiled.rval;
108
- }
109
- set value(v) {
110
- if ( this.#compiled === undefined ) { return; }
111
- this.#compiled.rval = v;
112
- }
113
- get valid() {
114
- return this.#compiled !== undefined;
115
- }
116
- compile(query) {
117
- this.#compiled = undefined;
118
- const r = this.#compile(query, 0);
119
- if ( r === undefined ) { return; }
120
- if ( r.i !== query.length ) {
121
- let val;
122
- if ( query.startsWith('=', r.i) ) {
123
- if ( /^=repl\(.+\)$/.test(query.slice(r.i)) ) {
124
- r.modify = 'repl';
125
- val = query.slice(r.i+6, -1);
126
- } else {
127
- val = query.slice(r.i+1);
128
- }
129
- } else if ( query.startsWith('+=', r.i) ) {
130
- r.modify = '+';
131
- val = query.slice(r.i+2);
132
- }
133
- try { r.rval = JSON.parse(val); }
134
- catch { return; }
135
- }
136
- this.#compiled = r;
137
- }
138
- evaluate(root) {
139
- if ( this.valid === false ) { return []; }
140
- this.#root = root;
141
- const paths = this.#evaluate(this.#compiled.steps, []);
142
- this.#root = null;
143
- return paths;
144
- }
145
- apply(root) {
146
- if ( this.valid === false ) { return; }
147
- const { rval } = this.#compiled;
148
- this.#root = { '$': root };
149
- const paths = this.#evaluate(this.#compiled.steps, []);
150
- let i = paths.length
151
- if ( i === 0 ) { this.#root = null; return; }
152
- while ( i-- ) {
153
- const { obj, key } = this.#resolvePath(paths[i]);
154
- if ( rval !== undefined ) {
155
- this.#modifyVal(obj, key);
156
- } else if ( Array.isArray(obj) && typeof key === 'number' ) {
157
- obj.splice(key, 1);
158
- } else {
159
- delete obj[key];
160
- }
161
- }
162
- const result = this.#root['$'] ?? null;
163
- this.#root = null;
164
- return result;
165
- }
166
- dump() {
167
- return JSON.stringify(this.#compiled);
168
- }
169
- toJSON(obj, ...args) {
170
- return JSONPath.toJSON(obj, null, ...args)
171
- }
172
- get [Symbol.toStringTag]() {
173
- return 'JSONPath';
174
- }
175
- #UNDEFINED = 0;
176
- #ROOT = 1;
177
- #CURRENT = 2;
178
- #CHILDREN = 3;
179
- #DESCENDANTS = 4;
180
- #reUnquotedIdentifier = /^[A-Za-z_][\w]*|^\*/;
181
- #reExpr = /^([!=^$*]=|[<>]=?)(.+?)\]/;
182
- #reIndice = /^-?\d+/;
183
- #root;
184
- #compiled;
185
- #compile(query, i) {
186
- if ( query.length === 0 ) { return; }
187
- const steps = [];
188
- let c = query.charCodeAt(i);
189
- if ( c === 0x24 /* $ */ ) {
190
- steps.push({ mv: this.#ROOT });
191
- i += 1;
192
- } else if ( c === 0x40 /* @ */ ) {
193
- steps.push({ mv: this.#CURRENT });
194
- i += 1;
195
- } else {
196
- steps.push({ mv: i === 0 ? this.#ROOT : this.#CURRENT });
197
- }
198
- let mv = this.#UNDEFINED;
199
- for (;;) {
200
- if ( i === query.length ) { break; }
201
- c = query.charCodeAt(i);
202
- if ( c === 0x20 /* whitespace */ ) {
203
- i += 1;
204
- continue;
205
- }
206
- // Dot accessor syntax
207
- if ( c === 0x2E /* . */ ) {
208
- if ( mv !== this.#UNDEFINED ) { return; }
209
- if ( query.startsWith('..', i) ) {
210
- mv = this.#DESCENDANTS;
211
- i += 2;
212
- } else {
213
- mv = this.#CHILDREN;
214
- i += 1;
215
- }
216
- continue;
217
- }
218
- if ( c !== 0x5B /* [ */ ) {
219
- if ( mv === this.#UNDEFINED ) {
220
- const step = steps.at(-1);
221
- if ( step === undefined ) { return; }
222
- i = this.#compileExpr(query, step, i);
223
- break;
224
- }
225
- const s = this.#consumeUnquotedIdentifier(query, i);
226
- if ( s === undefined ) { return; }
227
- steps.push({ mv, k: s });
228
- i += s.length;
229
- mv = this.#UNDEFINED;
230
- continue;
231
- }
232
- // Bracket accessor syntax
233
- if ( query.startsWith('[?', i) ) {
234
- const not = query.charCodeAt(i+2) === 0x21 /* ! */;
235
- const j = i + 2 + (not ? 1 : 0);
236
- const r = this.#compile(query, j);
237
- if ( r === undefined ) { return; }
238
- if ( query.startsWith(']', r.i) === false ) { return; }
239
- if ( not ) { r.steps.at(-1).not = true; }
240
- steps.push({ mv: mv || this.#CHILDREN, steps: r.steps });
241
- i = r.i + 1;
242
- mv = this.#UNDEFINED;
243
- continue;
244
- }
245
- if ( query.startsWith('[*]', i) ) {
246
- mv ||= this.#CHILDREN;
247
- steps.push({ mv, k: '*' });
248
- i += 3;
249
- mv = this.#UNDEFINED;
250
- continue;
251
- }
252
- const r = this.#consumeIdentifier(query, i+1);
253
- if ( r === undefined ) { return; }
254
- mv ||= this.#CHILDREN;
255
- steps.push({ mv, k: r.s });
256
- i = r.i + 1;
257
- mv = this.#UNDEFINED;
258
- }
259
- if ( steps.length === 0 ) { return; }
260
- if ( mv !== this.#UNDEFINED ) { return; }
261
- return { steps, i };
262
- }
263
- #evaluate(steps, pathin) {
264
- let resultset = [];
265
- if ( Array.isArray(steps) === false ) { return resultset; }
266
- for ( const step of steps ) {
267
- switch ( step.mv ) {
268
- case this.#ROOT:
269
- resultset = [ [ '$' ] ];
270
- break;
271
- case this.#CURRENT:
272
- resultset = [ pathin ];
273
- break;
274
- case this.#CHILDREN:
275
- case this.#DESCENDANTS:
276
- resultset = this.#getMatches(resultset, step);
277
- break;
278
- default:
279
- break;
280
- }
281
- }
282
- return resultset;
283
- }
284
- #getMatches(listin, step) {
285
- const listout = [];
286
- for ( const pathin of listin ) {
287
- const { value: owner } = this.#resolvePath(pathin);
288
- if ( step.k === '*' ) {
289
- this.#getMatchesFromAll(pathin, step, owner, listout);
290
- } else if ( step.k !== undefined ) {
291
- this.#getMatchesFromKeys(pathin, step, owner, listout);
292
- } else if ( step.steps ) {
293
- this.#getMatchesFromExpr(pathin, step, owner, listout);
294
- }
295
- }
296
- return listout;
297
- }
298
- #getMatchesFromAll(pathin, step, owner, out) {
299
- const recursive = step.mv === this.#DESCENDANTS;
300
- for ( const { path } of this.#getDescendants(owner, recursive) ) {
301
- out.push([ ...pathin, ...path ]);
302
- }
303
- }
304
- #getMatchesFromKeys(pathin, step, owner, out) {
305
- const kk = Array.isArray(step.k) ? step.k : [ step.k ];
306
- for ( const k of kk ) {
307
- const normalized = this.#evaluateExpr(step, owner, k);
308
- if ( normalized === undefined ) { continue; }
309
- out.push([ ...pathin, normalized ]);
310
- }
311
- if ( step.mv !== this.#DESCENDANTS ) { return; }
312
- for ( const { obj, key, path } of this.#getDescendants(owner, true) ) {
313
- for ( const k of kk ) {
314
- const normalized = this.#evaluateExpr(step, obj[key], k);
315
- if ( normalized === undefined ) { continue; }
316
- out.push([ ...pathin, ...path, normalized ]);
317
- }
318
- }
319
- }
320
- #getMatchesFromExpr(pathin, step, owner, out) {
321
- const recursive = step.mv === this.#DESCENDANTS;
322
- if ( Array.isArray(owner) === false ) {
323
- const r = this.#evaluate(step.steps, pathin);
324
- if ( r.length !== 0 ) { out.push(pathin); }
325
- if ( recursive !== true ) { return; }
326
- }
327
- for ( const { obj, key, path } of this.#getDescendants(owner, recursive) ) {
328
- if ( Array.isArray(obj[key]) ) { continue; }
329
- const q = [ ...pathin, ...path ];
330
- const r = this.#evaluate(step.steps, q);
331
- if ( r.length === 0 ) { continue; }
332
- out.push(q);
333
- }
334
- }
335
- #normalizeKey(owner, key) {
336
- if ( typeof key === 'number' ) {
337
- if ( Array.isArray(owner) ) {
338
- return key >= 0 ? key : owner.length + key;
339
- }
340
- }
341
- return key;
342
- }
343
- #getDescendants(v, recursive) {
344
- const iterator = {
345
- next() {
346
- const n = this.stack.length;
347
- if ( n === 0 ) {
348
- this.value = undefined;
349
- this.done = true;
350
- return this;
351
- }
352
- const details = this.stack[n-1];
353
- const entry = details.keys.next();
354
- if ( entry.done ) {
355
- this.stack.pop();
356
- this.path.pop();
357
- return this.next();
358
- }
359
- this.path[n-1] = entry.value;
360
- this.value = {
361
- obj: details.obj,
362
- key: entry.value,
363
- path: this.path.slice(),
364
- };
365
- const v = this.value.obj[this.value.key];
366
- if ( recursive ) {
367
- if ( Array.isArray(v) ) {
368
- this.stack.push({ obj: v, keys: v.keys() });
369
- } else if ( typeof v === 'object' && v !== null ) {
370
- this.stack.push({ obj: v, keys: Object.keys(v).values() });
371
- }
372
- }
373
- return this;
374
- },
375
- path: [],
376
- value: undefined,
377
- done: false,
378
- stack: [],
379
- [Symbol.iterator]() { return this; },
380
- };
381
- if ( Array.isArray(v) ) {
382
- iterator.stack.push({ obj: v, keys: v.keys() });
383
- } else if ( typeof v === 'object' && v !== null ) {
384
- iterator.stack.push({ obj: v, keys: Object.keys(v).values() });
385
- }
386
- return iterator;
387
- }
388
- #consumeIdentifier(query, i) {
389
- const keys = [];
390
- for (;;) {
391
- const c0 = query.charCodeAt(i);
392
- if ( c0 === 0x5D /* ] */ ) { break; }
393
- if ( c0 === 0x2C /* , */ ) {
394
- i += 1;
395
- continue;
396
- }
397
- if ( c0 === 0x27 /* ' */ ) {
398
- const r = this.#untilChar(query, 0x27 /* ' */, i+1)
399
- if ( r === undefined ) { return; }
400
- keys.push(r.s);
401
- i = r.i;
402
- continue;
403
- }
404
- if ( c0 === 0x2D /* - */ || c0 >= 0x30 && c0 <= 0x39 ) {
405
- const match = this.#reIndice.exec(query.slice(i));
406
- if ( match === null ) { return; }
407
- const indice = parseInt(query.slice(i), 10);
408
- keys.push(indice);
409
- i += match[0].length;
410
- continue;
411
- }
412
- const s = this.#consumeUnquotedIdentifier(query, i);
413
- if ( s === undefined ) { return; }
414
- keys.push(s);
415
- i += s.length;
416
- }
417
- return { s: keys.length === 1 ? keys[0] : keys, i };
418
- }
419
- #consumeUnquotedIdentifier(query, i) {
420
- const match = this.#reUnquotedIdentifier.exec(query.slice(i));
421
- if ( match === null ) { return; }
422
- return match[0];
423
- }
424
- #untilChar(query, targetCharCode, i) {
425
- const len = query.length;
426
- const parts = [];
427
- let beg = i, end = i;
428
- for (;;) {
429
- if ( end === len ) { return; }
430
- const c = query.charCodeAt(end);
431
- if ( c === targetCharCode ) {
432
- parts.push(query.slice(beg, end));
433
- end += 1;
434
- break;
435
- }
436
- if ( c === 0x5C /* \ */ && (end+1) < len ) {
437
- parts.push(query.slice(beg, end));
438
- const d = query.charCodeAt(end+1);
439
- if ( d === targetCharCode || d === 0x5C ) {
440
- end += 1;
441
- beg = end;
442
- }
443
- }
444
- end += 1;
445
- }
446
- return { s: parts.join(''), i: end };
447
- }
448
- #compileExpr(query, step, i) {
449
- if ( query.startsWith('=/', i) ) {
450
- const r = this.#untilChar(query, 0x2F /* / */, i+2);
451
- if ( r === undefined ) { return i; }
452
- const match = /^[i]/.exec(query.slice(r.i));
453
- try {
454
- step.rval = new RegExp(r.s, match && match[0] || undefined);
455
- } catch {
456
- return i;
457
- }
458
- step.op = 're';
459
- if ( match ) { r.i += match[0].length; }
460
- return r.i;
461
- }
462
- const match = this.#reExpr.exec(query.slice(i));
463
- if ( match === null ) { return i; }
464
- try {
465
- step.rval = JSON.parse(match[2]);
466
- step.op = match[1];
467
- } catch {
468
- }
469
- return i + match[1].length + match[2].length;
470
- }
471
- #resolvePath(path) {
472
- if ( path.length === 0 ) { return { value: this.#root }; }
473
- const key = path.at(-1);
474
- let obj = this.#root
475
- for ( let i = 0, n = path.length-1; i < n; i++ ) {
476
- obj = obj[path[i]];
477
- }
478
- return { obj, key, value: obj[key] };
479
- }
480
- #evaluateExpr(step, owner, key) {
481
- if ( owner === undefined || owner === null ) { return; }
482
- if ( typeof key === 'number' ) {
483
- if ( Array.isArray(owner) === false ) { return; }
484
- }
485
- const k = this.#normalizeKey(owner, key);
486
- const hasOwn = Object.hasOwn(owner, k);
487
- if ( step.op !== undefined && hasOwn === false ) { return; }
488
- const target = step.not !== true;
489
- const v = owner[k];
490
- let outcome = false;
491
- switch ( step.op ) {
492
- case '==': outcome = (v === step.rval) === target; break;
493
- case '!=': outcome = (v !== step.rval) === target; break;
494
- case '<': outcome = (v < step.rval) === target; break;
495
- case '<=': outcome = (v <= step.rval) === target; break;
496
- case '>': outcome = (v > step.rval) === target; break;
497
- case '>=': outcome = (v >= step.rval) === target; break;
498
- case '^=': outcome = `${v}`.startsWith(step.rval) === target; break;
499
- case '$=': outcome = `${v}`.endsWith(step.rval) === target; break;
500
- case '*=': outcome = `${v}`.includes(step.rval) === target; break;
501
- case 're': outcome = step.rval.test(`${v}`); break;
502
- default: outcome = hasOwn === target; break;
503
- }
504
- if ( outcome ) { return k; }
505
- }
506
- #modifyVal(obj, key) {
507
- const { modify, rval } = this.#compiled;
508
- switch ( modify ) {
509
- case undefined:
510
- obj[key] = rval;
511
- break;
512
- case '+': {
513
- if ( rval instanceof Object === false ) { return; }
514
- const lval = obj[key];
515
- if ( lval instanceof Object === false ) { return; }
516
- if ( Array.isArray(lval) ) { return; }
517
- for ( const [ k, v ] of Object.entries(rval) ) {
518
- lval[k] = v;
519
- }
520
- break;
521
- }
522
- case 'repl': {
523
- const lval = obj[key];
524
- if ( typeof lval !== 'string' ) { return; }
525
- if ( this.#compiled.re === undefined ) {
526
- this.#compiled.re = null;
527
- try {
528
- this.#compiled.re = rval.regex !== undefined
529
- ? new RegExp(rval.regex, rval.flags)
530
- : new RegExp(rval.pattern.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'));
531
- } catch {
532
- }
533
- }
534
- if ( this.#compiled.re === null ) { return; }
535
- obj[key] = lval.replace(this.#compiled.re, rval.replacement);
536
- break;
537
- }
538
- default:
539
- break;
540
- }
541
- }
542
- }
543
-
544
- function matchObjectPropertiesFn(propNeedles, ...objs) {
545
- const safe = safeSelf();
546
- const matched = [];
547
- for ( const obj of objs ) {
548
- if ( obj instanceof Object === false ) { continue; }
549
- for ( const [ prop, details ] of propNeedles ) {
550
- let value = obj[prop];
551
- if ( value === undefined ) { continue; }
552
- if ( typeof value !== 'string' ) {
553
- try { value = safe.JSON_stringify(value); }
554
- catch { }
555
- if ( typeof value !== 'string' ) { continue; }
556
- }
557
- if ( safe.testPattern(details, value) === false ) { return; }
558
- matched.push(`${prop}: ${value}`);
559
- }
560
- }
561
- return matched;
562
- }
563
-
564
- function parsePropertiesToMatchFn(propsToMatch, implicit = '') {
565
- const safe = safeSelf();
566
- const needles = new Map();
567
- if ( propsToMatch === undefined || propsToMatch === '' ) { return needles; }
568
- const options = { canNegate: true };
569
- for ( const needle of safe.String_split.call(propsToMatch, /\s+/) ) {
570
- let [ prop, pattern ] = safe.String_split.call(needle, ':');
571
- if ( prop === '' ) { continue; }
572
- if ( pattern !== undefined && /[^$\w -]/.test(prop) ) {
573
- prop = `${prop}:${pattern}`;
574
- pattern = undefined;
575
- }
576
- if ( pattern !== undefined ) {
577
- needles.set(prop, safe.initPattern(pattern, options));
578
- } else if ( implicit !== '' ) {
579
- needles.set(implicit, safe.initPattern(prop, options));
580
- }
581
- }
582
- return needles;
583
- }
584
-
585
- function proxyApplyFn(
586
- target = '',
587
- handler = ''
588
- ) {
589
- let context = globalThis;
590
- let prop = target;
591
- for (;;) {
592
- const pos = prop.indexOf('.');
593
- if ( pos === -1 ) { break; }
594
- context = context[prop.slice(0, pos)];
595
- if ( context instanceof Object === false ) { return; }
596
- prop = prop.slice(pos+1);
597
- }
598
- const fn = context[prop];
599
- if ( typeof fn !== 'function' ) { return; }
600
- if ( proxyApplyFn.CtorContext === undefined ) {
601
- proxyApplyFn.ctorContexts = [];
602
- proxyApplyFn.CtorContext = class {
603
- constructor(...args) {
604
- this.init(...args);
605
- }
606
- init(callFn, callArgs) {
607
- this.callFn = callFn;
608
- this.callArgs = callArgs;
609
- return this;
610
- }
611
- reflect() {
612
- const r = Reflect.construct(this.callFn, this.callArgs);
613
- this.callFn = this.callArgs = this.private = undefined;
614
- proxyApplyFn.ctorContexts.push(this);
615
- return r;
616
- }
617
- static factory(...args) {
618
- return proxyApplyFn.ctorContexts.length !== 0
619
- ? proxyApplyFn.ctorContexts.pop().init(...args)
620
- : new proxyApplyFn.CtorContext(...args);
621
- }
622
- };
623
- proxyApplyFn.applyContexts = [];
624
- proxyApplyFn.ApplyContext = class {
625
- constructor(...args) {
626
- this.init(...args);
627
- }
628
- init(callFn, thisArg, callArgs) {
629
- this.callFn = callFn;
630
- this.thisArg = thisArg;
631
- this.callArgs = callArgs;
632
- return this;
633
- }
634
- reflect() {
635
- const r = Reflect.apply(this.callFn, this.thisArg, this.callArgs);
636
- this.callFn = this.thisArg = this.callArgs = this.private = undefined;
637
- proxyApplyFn.applyContexts.push(this);
638
- return r;
639
- }
640
- static factory(...args) {
641
- return proxyApplyFn.applyContexts.length !== 0
642
- ? proxyApplyFn.applyContexts.pop().init(...args)
643
- : new proxyApplyFn.ApplyContext(...args);
644
- }
645
- };
646
- proxyApplyFn.isCtor = new Map();
647
- }
648
- if ( proxyApplyFn.isCtor.has(target) === false ) {
649
- proxyApplyFn.isCtor.set(target, fn.prototype?.constructor === fn);
650
- }
651
- const fnStr = fn.toString();
652
- const toString = (function toString() { return fnStr; }).bind(null);
653
- const proxyDetails = {
654
- apply(target, thisArg, args) {
655
- return handler(proxyApplyFn.ApplyContext.factory(target, thisArg, args));
656
- },
657
- get(target, prop) {
658
- if ( prop === 'toString' ) { return toString; }
659
- return Reflect.get(target, prop);
660
- },
661
- };
662
- if ( proxyApplyFn.isCtor.get(target) ) {
663
- proxyDetails.construct = function(target, args) {
664
- return handler(proxyApplyFn.CtorContext.factory(target, args));
665
- };
666
- }
667
- context[prop] = new Proxy(fn, proxyDetails);
668
- }
669
-
670
- function safeSelf() {
671
- if ( scriptletGlobals.safeSelf ) {
672
- return scriptletGlobals.safeSelf;
673
- }
674
- const self = globalThis;
675
- const safe = {
676
- 'Array_from': Array.from,
677
- 'Error': self.Error,
678
- 'Function_toStringFn': self.Function.prototype.toString,
679
- 'Function_toString': thisArg => safe.Function_toStringFn.call(thisArg),
680
- 'Math_floor': Math.floor,
681
- 'Math_max': Math.max,
682
- 'Math_min': Math.min,
683
- 'Math_random': Math.random,
684
- 'Object': Object,
685
- 'Object_defineProperty': Object.defineProperty.bind(Object),
686
- 'Object_defineProperties': Object.defineProperties.bind(Object),
687
- 'Object_fromEntries': Object.fromEntries.bind(Object),
688
- 'Object_getOwnPropertyDescriptor': Object.getOwnPropertyDescriptor.bind(Object),
689
- 'Object_hasOwn': Object.hasOwn.bind(Object),
690
- 'RegExp': self.RegExp,
691
- 'RegExp_test': self.RegExp.prototype.test,
692
- 'RegExp_exec': self.RegExp.prototype.exec,
693
- 'Request_clone': self.Request.prototype.clone,
694
- 'String': self.String,
695
- 'String_fromCharCode': String.fromCharCode,
696
- 'String_split': String.prototype.split,
697
- 'XMLHttpRequest': self.XMLHttpRequest,
698
- 'addEventListener': self.EventTarget.prototype.addEventListener,
699
- 'removeEventListener': self.EventTarget.prototype.removeEventListener,
700
- 'fetch': self.fetch,
701
- 'JSON': self.JSON,
702
- 'JSON_parseFn': self.JSON.parse,
703
- 'JSON_stringifyFn': self.JSON.stringify,
704
- 'JSON_parse': (...args) => safe.JSON_parseFn.call(safe.JSON, ...args),
705
- 'JSON_stringify': (...args) => safe.JSON_stringifyFn.call(safe.JSON, ...args),
706
- 'log': console.log.bind(console),
707
- // Properties
708
- logLevel: 0,
709
- // Methods
710
- makeLogPrefix(...args) {
711
- return this.sendToLogger && `[${args.join(' \u205D ')}]` || '';
712
- },
713
- uboLog(...args) {
714
- if ( this.sendToLogger === undefined ) { return; }
715
- if ( args === undefined || args[0] === '' ) { return; }
716
- return this.sendToLogger('info', ...args);
717
-
718
- },
719
- uboErr(...args) {
720
- if ( this.sendToLogger === undefined ) { return; }
721
- if ( args === undefined || args[0] === '' ) { return; }
722
- return this.sendToLogger('error', ...args);
723
- },
724
- escapeRegexChars(s) {
725
- return s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
726
- },
727
- initPattern(pattern, options = {}) {
728
- if ( pattern === '' ) {
729
- return { matchAll: true, expect: true };
730
- }
731
- const expect = (options.canNegate !== true || pattern.startsWith('!') === false);
732
- if ( expect === false ) {
733
- pattern = pattern.slice(1);
734
- }
735
- const match = /^\/(.+)\/([gimsu]*)$/.exec(pattern);
736
- if ( match !== null ) {
737
- return {
738
- re: new this.RegExp(
739
- match[1],
740
- match[2] || options.flags
741
- ),
742
- expect,
743
- };
744
- }
745
- if ( options.flags !== undefined ) {
746
- return {
747
- re: new this.RegExp(this.escapeRegexChars(pattern),
748
- options.flags
749
- ),
750
- expect,
751
- };
752
- }
753
- return { pattern, expect };
754
- },
755
- testPattern(details, haystack) {
756
- if ( details.matchAll ) { return true; }
757
- if ( details.re ) {
758
- return this.RegExp_test.call(details.re, haystack) === details.expect;
759
- }
760
- return haystack.includes(details.pattern) === details.expect;
761
- },
762
- patternToRegex(pattern, flags = undefined, verbatim = false) {
763
- if ( pattern === '' ) { return /^/; }
764
- const match = /^\/(.+)\/([gimsu]*)$/.exec(pattern);
765
- if ( match === null ) {
766
- const reStr = this.escapeRegexChars(pattern);
767
- return new RegExp(verbatim ? `^${reStr}$` : reStr, flags);
768
- }
769
- try {
770
- return new RegExp(match[1], match[2] || undefined);
771
- }
772
- catch {
773
- }
774
- return /^/;
775
- },
776
- getExtraArgs(args, offset = 0) {
777
- const entries = args.slice(offset).reduce((out, v, i, a) => {
778
- if ( (i & 1) === 0 ) {
779
- const rawValue = a[i+1];
780
- const value = /^\d+$/.test(rawValue)
781
- ? parseInt(rawValue, 10)
782
- : rawValue;
783
- out.push([ a[i], value ]);
784
- }
785
- return out;
786
- }, []);
787
- return this.Object_fromEntries(entries);
788
- },
789
- onIdle(fn, options) {
790
- if ( self.requestIdleCallback ) {
791
- return self.requestIdleCallback(fn, options);
792
- }
793
- return self.requestAnimationFrame(fn);
794
- },
795
- offIdle(id) {
796
- if ( self.requestIdleCallback ) {
797
- return self.cancelIdleCallback(id);
798
- }
799
- return self.cancelAnimationFrame(id);
800
- }
801
- };
802
- scriptletGlobals.safeSelf = safe;
803
- if ( scriptletGlobals.bcSecret === undefined ) { return safe; }
804
- // This is executed only when the logger is opened
805
- safe.logLevel = scriptletGlobals.logLevel || 1;
806
- let lastLogType = '';
807
- let lastLogText = '';
808
- let lastLogTime = 0;
809
- safe.toLogText = (type, ...args) => {
810
- if ( args.length === 0 ) { return; }
811
- const text = `[${document.location.hostname || document.location.href}]${args.join(' ')}`;
812
- if ( text === lastLogText && type === lastLogType ) {
813
- if ( (Date.now() - lastLogTime) < 5000 ) { return; }
814
- }
815
- lastLogType = type;
816
- lastLogText = text;
817
- lastLogTime = Date.now();
818
- return text;
819
- };
820
- try {
821
- const bc = new self.BroadcastChannel(scriptletGlobals.bcSecret);
822
- let bcBuffer = [];
823
- safe.sendToLogger = (type, ...args) => {
824
- const text = safe.toLogText(type, ...args);
825
- if ( text === undefined ) { return; }
826
- if ( bcBuffer === undefined ) {
827
- return bc.postMessage({ what: 'messageToLogger', type, text });
828
- }
829
- bcBuffer.push({ type, text });
830
- };
831
- bc.onmessage = ev => {
832
- const msg = ev.data;
833
- switch ( msg ) {
834
- case 'iamready!':
835
- if ( bcBuffer === undefined ) { break; }
836
- bcBuffer.forEach(({ type, text }) =>
837
- bc.postMessage({ what: 'messageToLogger', type, text })
838
- );
839
- bcBuffer = undefined;
840
- break;
841
- case 'setScriptletLogLevelToOne':
842
- safe.logLevel = 1;
843
- break;
844
- case 'setScriptletLogLevelToTwo':
845
- safe.logLevel = 2;
846
- break;
847
- }
848
- };
849
- bc.postMessage('areyouready?');
850
- } catch {
851
- safe.sendToLogger = (type, ...args) => {
852
- const text = safe.toLogText(type, ...args);
853
- if ( text === undefined ) { return; }
854
- safe.log(`uBO ${text}`);
855
- };
856
- }
857
- return safe;
858
- }
859
-
860
- /******************************************************************************/
861
-
862
- const scriptletGlobals = {}; // eslint-disable-line
863
- const argsList = [["..playbackContext[?.contentPlaybackContext]+={\"adPlaybackContext\":{\"pyv\":true}}","propsToMatch","/\\/(player|get_watch)/"]];
864
- const hostnamesMap = new Map([["www.youtube.com",0]]);
865
- const exceptionsMap = new Map([]);
866
- const hasEntities = false;
867
- const hasAncestors = false;
868
-
869
- const collectArgIndices = (hn, map, out) => {
870
- let argsIndices = map.get(hn);
871
- if ( argsIndices === undefined ) { return; }
872
- if ( typeof argsIndices !== 'number' ) {
873
- for ( const argsIndex of argsIndices ) {
874
- out.add(argsIndex);
875
- }
876
- } else {
877
- out.add(argsIndices);
878
- }
879
- };
880
-
881
- const indicesFromHostname = (hostname, suffix = '') => {
882
- const hnParts = hostname.split('.');
883
- const hnpartslen = hnParts.length;
884
- if ( hnpartslen === 0 ) { return; }
885
- for ( let i = 0; i < hnpartslen; i++ ) {
886
- const hn = `${hnParts.slice(i).join('.')}${suffix}`;
887
- collectArgIndices(hn, hostnamesMap, todoIndices);
888
- collectArgIndices(hn, exceptionsMap, tonotdoIndices);
889
- }
890
- if ( hasEntities ) {
891
- const n = hnpartslen - 1;
892
- for ( let i = 0; i < n; i++ ) {
893
- for ( let j = n; j > i; j-- ) {
894
- const en = `${hnParts.slice(i,j).join('.')}.*${suffix}`;
895
- collectArgIndices(en, hostnamesMap, todoIndices);
896
- collectArgIndices(en, exceptionsMap, tonotdoIndices);
897
- }
898
- }
899
- }
900
- };
901
-
902
- const entries = (( ) => {
903
- const docloc = document.location;
904
- const origins = [ docloc.origin ];
905
- if ( docloc.ancestorOrigins ) {
906
- origins.push(...docloc.ancestorOrigins);
907
- }
908
- return origins.map((origin, i) => {
909
- const beg = origin.lastIndexOf('://');
910
- if ( beg === -1 ) { return; }
911
- const hn = origin.slice(beg+3)
912
- const end = hn.indexOf(':');
913
- return { hn: end === -1 ? hn : hn.slice(0, end), i };
914
- }).filter(a => a !== undefined);
915
- })();
916
- if ( entries.length === 0 ) { return; }
917
-
918
- const todoIndices = new Set();
919
- const tonotdoIndices = new Set();
920
-
921
- indicesFromHostname(entries[0].hn);
922
- if ( hasAncestors ) {
923
- for ( const entry of entries ) {
924
- if ( entry.i === 0 ) { continue; }
925
- indicesFromHostname(entry.hn, '>>');
926
- }
927
- }
928
-
929
- // Apply scriplets
930
- for ( const i of todoIndices ) {
931
- if ( tonotdoIndices.has(i) ) { continue; }
932
- try { trustedJsonEditFetchRequest(...argsList[i]); }
933
- catch { }
934
- }
935
-
936
- /******************************************************************************/
937
-
938
- // End of local scope
939
- })();
940
-
941
- void 0;