@browserless.io/browserless 2.34.0-beta-0 → 2.34.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 (312) hide show
  1. package/CHANGELOG.md +13 -1
  2. package/build/routes/chrome/http/content.post.body.json +18 -109
  3. package/build/routes/chrome/http/pdf.post.body.json +18 -109
  4. package/build/routes/chrome/http/scrape.post.body.json +18 -109
  5. package/build/routes/chrome/http/screenshot.post.body.json +18 -109
  6. package/build/routes/chromium/http/content.post.body.json +18 -109
  7. package/build/routes/chromium/http/pdf.post.body.json +18 -109
  8. package/build/routes/chromium/http/scrape.post.body.json +18 -109
  9. package/build/routes/chromium/http/screenshot.post.body.json +18 -109
  10. package/build/routes/edge/http/content.post.body.json +18 -109
  11. package/build/routes/edge/http/pdf.post.body.json +18 -109
  12. package/build/routes/edge/http/scrape.post.body.json +18 -109
  13. package/build/routes/edge/http/screenshot.post.body.json +18 -109
  14. package/build/shared/content.http.js +9 -2
  15. package/build/shared/pdf.http.js +9 -2
  16. package/build/shared/scrape.http.js +9 -2
  17. package/build/shared/screenshot.http.js +9 -2
  18. package/build/types.d.ts +7 -1
  19. package/build/utils.d.ts +1 -0
  20. package/build/utils.js +3 -2
  21. package/extensions/ublocklite/_locales/ru/messages.json +1 -1
  22. package/extensions/ublocklite/css/dashboard.css +9 -4
  23. package/extensions/ublocklite/css/settings.css +17 -13
  24. package/extensions/ublocklite/dashboard.html +16 -12
  25. package/extensions/ublocklite/js/background.js +46 -14
  26. package/extensions/ublocklite/js/config.js +2 -1
  27. package/extensions/ublocklite/js/dashboard.js +9 -5
  28. package/extensions/ublocklite/js/debug.js +62 -3
  29. package/extensions/ublocklite/js/ext.js +6 -0
  30. package/extensions/ublocklite/js/fetch.js +3 -1
  31. package/extensions/ublocklite/js/filter-lists.js +16 -7
  32. package/extensions/ublocklite/js/filter-manager.js +26 -8
  33. package/extensions/ublocklite/js/jsonpath.js +65 -26
  34. package/extensions/ublocklite/js/mode-manager.js +5 -1
  35. package/extensions/ublocklite/js/popup.js +1 -1
  36. package/extensions/ublocklite/js/report.js +4 -2
  37. package/extensions/ublocklite/js/ruleset-manager.js +38 -13
  38. package/extensions/ublocklite/js/scripting/css-generic.js +0 -1
  39. package/extensions/ublocklite/js/scripting-manager.js +4 -10
  40. package/extensions/ublocklite/js/settings.js +3 -5
  41. package/extensions/ublocklite/js/static-filtering-parser.js +1 -1
  42. package/extensions/ublocklite/js/tool-overlay-ui.js +19 -23
  43. package/extensions/ublocklite/js/troubleshooting.js +11 -19
  44. package/extensions/ublocklite/js/ubo-parser.js +1 -1
  45. package/extensions/ublocklite/manifest.json +6 -1
  46. package/extensions/ublocklite/rulesets/generic-details.json +18 -2
  47. package/extensions/ublocklite/rulesets/main/adguard-mobile.json +3 -1
  48. package/extensions/ublocklite/rulesets/main/annoyances-cookies.json +11 -8
  49. package/extensions/ublocklite/rulesets/main/annoyances-notifications.json +276 -0
  50. package/extensions/ublocklite/rulesets/main/annoyances-widgets.json +2 -1
  51. package/extensions/ublocklite/rulesets/main/bgr-0.json +54 -68
  52. package/extensions/ublocklite/rulesets/main/block-lan.json +1 -1
  53. package/extensions/ublocklite/rulesets/main/chn-0.json +17 -11
  54. package/extensions/ublocklite/rulesets/main/deu-0.json +1 -1
  55. package/extensions/ublocklite/rulesets/main/dpollock-0.json +3 -0
  56. package/extensions/ublocklite/rulesets/main/easylist.json +18 -16
  57. package/extensions/ublocklite/rulesets/main/easyprivacy.json +27 -3
  58. package/extensions/ublocklite/rulesets/main/fra-0.json +13 -11
  59. package/extensions/ublocklite/rulesets/main/hun-0.json +5 -3
  60. package/extensions/ublocklite/rulesets/main/idn-0.json +6 -1
  61. package/extensions/ublocklite/rulesets/main/ind-0.json +5 -3
  62. package/extensions/ublocklite/rulesets/main/irn-0.json +635 -3
  63. package/extensions/ublocklite/rulesets/main/jpn-1.json +18 -10
  64. package/extensions/ublocklite/rulesets/main/kor-1.json +1 -1
  65. package/extensions/ublocklite/rulesets/main/nld-0.json +1 -1
  66. package/extensions/ublocklite/rulesets/main/nor-0.json +23 -3
  67. package/extensions/ublocklite/rulesets/main/pgl.json +7 -3
  68. package/extensions/ublocklite/rulesets/main/pol-0.json +2 -1
  69. package/extensions/ublocklite/rulesets/main/rus-0.json +15 -8
  70. package/extensions/ublocklite/rulesets/main/rus-1.json +4 -2
  71. package/extensions/ublocklite/rulesets/main/spa-1.json +6 -1
  72. package/extensions/ublocklite/rulesets/main/stevenblack-hosts.json +2534 -1986
  73. package/extensions/ublocklite/rulesets/main/swe-1.json +15 -13
  74. package/extensions/ublocklite/rulesets/main/tur-0.json +21 -9
  75. package/extensions/ublocklite/rulesets/main/ublock-badware.json +26 -26
  76. package/extensions/ublocklite/rulesets/main/ublock-filters.json +48 -36
  77. package/extensions/ublocklite/rulesets/main/urlhaus-full.json +139 -235
  78. package/extensions/ublocklite/rulesets/main/vie-1.json +14 -16
  79. package/extensions/ublocklite/rulesets/modify-headers/chn-0.json +1 -2
  80. package/extensions/ublocklite/rulesets/modify-headers/fra-0.json +1 -0
  81. package/extensions/ublocklite/rulesets/modify-headers/irn-0.json +45 -0
  82. package/extensions/ublocklite/rulesets/modify-headers/ublock-filters.json +2 -2
  83. package/extensions/ublocklite/rulesets/redirect/annoyances-overlays.json +0 -1
  84. package/extensions/ublocklite/rulesets/redirect/easyprivacy.json +19 -0
  85. package/extensions/ublocklite/rulesets/redirect/irn-0.json +73 -0
  86. package/extensions/ublocklite/rulesets/redirect/kor-1.json +1 -1
  87. package/extensions/ublocklite/rulesets/redirect/tur-0.json +2 -1
  88. package/extensions/ublocklite/rulesets/redirect/ublock-badware.json +18 -0
  89. package/extensions/ublocklite/rulesets/redirect/ublock-filters.json +5 -7
  90. package/extensions/ublocklite/rulesets/redirect/vie-1.json +2 -2
  91. package/extensions/ublocklite/rulesets/regex/irn-0.json +22 -0
  92. package/extensions/ublocklite/rulesets/regex/tur-0.json +2 -1
  93. package/extensions/ublocklite/rulesets/regex/ublock-badware.json +2 -4
  94. package/extensions/ublocklite/rulesets/regex/ublock-filters.json +9 -7
  95. package/extensions/ublocklite/rulesets/regex/ukr-0.json +1 -3
  96. package/extensions/ublocklite/rulesets/removeparam/adguard-spyware-url.json +6 -2
  97. package/extensions/ublocklite/rulesets/removeparam/irn-0.json +16 -27
  98. package/extensions/ublocklite/rulesets/removeparam/rus-1.json +2 -1
  99. package/extensions/ublocklite/rulesets/removeparam/ublock-filters.json +5 -3
  100. package/extensions/ublocklite/rulesets/ruleset-details.json +238 -207
  101. package/extensions/ublocklite/rulesets/scripting/generic/annoyances-cookies.js +3 -3
  102. package/extensions/ublocklite/rulesets/scripting/generic/annoyances-notifications.js +87 -0
  103. package/extensions/ublocklite/rulesets/scripting/generic/bgr-0.js +3 -3
  104. package/extensions/ublocklite/rulesets/scripting/generic/chn-0.js +1 -1
  105. package/extensions/ublocklite/rulesets/scripting/generic/easylist.js +2 -2
  106. package/extensions/ublocklite/rulesets/scripting/generic/est-0.js +1 -1
  107. package/extensions/ublocklite/rulesets/scripting/generic/idn-0.js +1 -1
  108. package/extensions/ublocklite/rulesets/scripting/generic/irn-0.js +3 -3
  109. package/extensions/ublocklite/rulesets/scripting/generic/jpn-1.js +3 -3
  110. package/extensions/ublocklite/rulesets/scripting/generic/nor-0.js +1 -1
  111. package/extensions/ublocklite/rulesets/scripting/generic/pol-0.js +1 -1
  112. package/extensions/ublocklite/rulesets/scripting/generic/rus-0.js +1 -1
  113. package/extensions/ublocklite/rulesets/scripting/generic/tur-0.js +1 -1
  114. package/extensions/ublocklite/rulesets/scripting/generic/ublock-filters.js +3 -3
  115. package/extensions/ublocklite/rulesets/scripting/generic/ukr-0.js +1 -1
  116. package/extensions/ublocklite/rulesets/scripting/generic/vie-1.js +1 -1
  117. package/extensions/ublocklite/rulesets/scripting/generichigh/annoyances-notifications.css +36 -0
  118. package/extensions/ublocklite/rulesets/scripting/generichigh/chn-0.css +12 -0
  119. package/extensions/ublocklite/rulesets/scripting/generichigh/est-0.css +1 -0
  120. package/extensions/ublocklite/rulesets/scripting/generichigh/idn-0.css +8 -0
  121. package/extensions/ublocklite/rulesets/scripting/generichigh/irn-0.css +27 -0
  122. package/extensions/ublocklite/rulesets/scripting/generichigh/nor-0.css +17 -0
  123. package/extensions/ublocklite/rulesets/scripting/generichigh/pol-0.css +8 -0
  124. package/extensions/ublocklite/rulesets/scripting/generichigh/rou-1.css +1 -0
  125. package/extensions/ublocklite/rulesets/scripting/generichigh/rus-0.css +105 -0
  126. package/extensions/ublocklite/rulesets/scripting/generichigh/rus-1.css +3 -0
  127. package/extensions/ublocklite/rulesets/scripting/generichigh/swe-1.css +1 -0
  128. package/extensions/ublocklite/rulesets/scripting/generichigh/ublock-filters.css +8 -2
  129. package/extensions/ublocklite/rulesets/scripting/generichigh/vie-1.css +1 -0
  130. package/extensions/ublocklite/rulesets/scripting/procedural/adguard-mobile.js +3 -3
  131. package/extensions/ublocklite/rulesets/scripting/procedural/annoyances-cookies.js +3 -3
  132. package/extensions/ublocklite/rulesets/scripting/procedural/annoyances-notifications.js +42 -0
  133. package/extensions/ublocklite/rulesets/scripting/procedural/annoyances-others.js +3 -3
  134. package/extensions/ublocklite/rulesets/scripting/procedural/annoyances-overlays.js +2 -2
  135. package/extensions/ublocklite/rulesets/scripting/procedural/chn-0.js +2 -2
  136. package/extensions/ublocklite/rulesets/scripting/procedural/easylist.js +3 -3
  137. package/extensions/ublocklite/rulesets/scripting/procedural/ind-0.js +1 -1
  138. package/extensions/ublocklite/rulesets/scripting/procedural/irn-0.js +3 -3
  139. package/extensions/ublocklite/rulesets/scripting/procedural/ita-0.js +3 -3
  140. package/extensions/ublocklite/rulesets/scripting/procedural/jpn-1.js +3 -3
  141. package/extensions/ublocklite/rulesets/scripting/procedural/kor-1.js +1 -1
  142. package/extensions/ublocklite/rulesets/scripting/procedural/rou-1.js +3 -3
  143. package/extensions/ublocklite/rulesets/scripting/procedural/rus-0.js +3 -3
  144. package/extensions/ublocklite/rulesets/scripting/procedural/rus-1.js +1 -1
  145. package/extensions/ublocklite/rulesets/scripting/procedural/spa-1.js +3 -3
  146. package/extensions/ublocklite/rulesets/scripting/procedural/swe-1.js +3 -3
  147. package/extensions/ublocklite/rulesets/scripting/procedural/tur-0.js +3 -3
  148. package/extensions/ublocklite/rulesets/scripting/procedural/ublock-filters.js +3 -3
  149. package/extensions/ublocklite/rulesets/scripting/scriptlet/adguard-mobile.abort-current-script.js +2 -2
  150. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-cookies.set-constant.js +2 -2
  151. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-cookies.set-cookie.js +2 -2
  152. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-cookies.set-local-storage-item.js +2 -2
  153. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-cookies.set-session-storage-item.js +2 -2
  154. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-cookies.trusted-click-element.js +2 -2
  155. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-cookies.trusted-set-cookie.js +2 -2
  156. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-notifications.abort-current-script.js +452 -0
  157. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-notifications.abort-on-property-write.js +347 -0
  158. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-notifications.addEventListener-defuser.js +498 -0
  159. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-notifications.remove-attr.js +405 -0
  160. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-notifications.remove-class.js +396 -0
  161. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-notifications.set-constant.js +541 -0
  162. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-notifications.set-cookie.js +442 -0
  163. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-notifications.set-local-storage-item.js +399 -0
  164. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-notifications.set-session-storage-item.js +399 -0
  165. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.abort-current-script.js +1 -1
  166. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.abort-on-property-read.js +1 -1
  167. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.prevent-setTimeout.js +2 -2
  168. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.remove-node-text.js +2 -2
  169. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.set-constant.js +1 -1
  170. package/extensions/ublocklite/rulesets/scripting/scriptlet/chn-0.addEventListener-defuser.js +1 -1
  171. package/extensions/ublocklite/rulesets/scripting/scriptlet/chn-0.json-prune.js +1 -1
  172. package/extensions/ublocklite/rulesets/scripting/scriptlet/chn-0.prevent-setTimeout.js +2 -2
  173. package/extensions/ublocklite/rulesets/scripting/scriptlet/chn-0.set-constant.js +2 -2
  174. package/extensions/ublocklite/rulesets/scripting/scriptlet/easyprivacy.set-constant.js +1 -1
  175. package/extensions/ublocklite/rulesets/scripting/scriptlet/idn-0.abort-on-property-read.js +2 -2
  176. package/extensions/ublocklite/rulesets/scripting/scriptlet/irn-0.abort-current-script.js +452 -0
  177. package/extensions/ublocklite/rulesets/scripting/scriptlet/irn-0.abort-on-property-read.js +369 -0
  178. package/extensions/ublocklite/rulesets/scripting/scriptlet/irn-0.abort-on-property-write.js +347 -0
  179. package/extensions/ublocklite/rulesets/scripting/scriptlet/irn-0.abort-on-stack-trace.js +421 -0
  180. package/extensions/ublocklite/rulesets/scripting/scriptlet/irn-0.addEventListener-defuser.js +498 -0
  181. package/extensions/ublocklite/rulesets/scripting/scriptlet/irn-0.adjust-setInterval.js +332 -0
  182. package/extensions/ublocklite/rulesets/scripting/scriptlet/irn-0.adjust-setTimeout.js +332 -0
  183. package/extensions/ublocklite/rulesets/scripting/scriptlet/irn-0.href-sanitizer.js +541 -0
  184. package/extensions/ublocklite/rulesets/scripting/scriptlet/irn-0.json-prune.js +506 -0
  185. package/extensions/ublocklite/rulesets/scripting/scriptlet/irn-0.prevent-fetch.js +553 -0
  186. package/extensions/ublocklite/rulesets/scripting/scriptlet/irn-0.prevent-setTimeout.js +443 -0
  187. package/extensions/ublocklite/rulesets/scripting/scriptlet/irn-0.prevent-window-open.js +471 -0
  188. package/extensions/ublocklite/rulesets/scripting/scriptlet/irn-0.prevent-xhr.js +584 -0
  189. package/extensions/ublocklite/rulesets/scripting/scriptlet/irn-0.remove-attr.js +405 -0
  190. package/extensions/ublocklite/rulesets/scripting/scriptlet/irn-0.remove-cookie.js +376 -0
  191. package/extensions/ublocklite/rulesets/scripting/scriptlet/{ublock-experimental.trusted-replace-node-text.js → irn-0.remove-node-text.js} +8 -9
  192. package/extensions/ublocklite/rulesets/scripting/scriptlet/irn-0.set-attr.js +425 -0
  193. package/extensions/ublocklite/rulesets/scripting/scriptlet/irn-0.set-constant.js +541 -0
  194. package/extensions/ublocklite/rulesets/scripting/scriptlet/irn-0.set-local-storage-item.js +2 -2
  195. package/extensions/ublocklite/rulesets/scripting/scriptlet/irn-0.set-session-storage-item.js +2 -2
  196. package/extensions/ublocklite/rulesets/scripting/scriptlet/jpn-1.abort-on-property-write.js +2 -2
  197. package/extensions/ublocklite/rulesets/scripting/scriptlet/jpn-1.href-sanitizer.js +2 -2
  198. package/extensions/ublocklite/rulesets/scripting/scriptlet/kor-1.spoof-css.js +2 -2
  199. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.abort-on-property-read.js +1 -1
  200. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.href-sanitizer.js +2 -2
  201. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.set-constant.js +3 -3
  202. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.set-cookie.js +2 -2
  203. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-1.set-constant.js +3 -3
  204. package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.addEventListener-defuser.js +3 -3
  205. package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.noeval-if.js +3 -3
  206. package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.prevent-fetch.js +2 -2
  207. package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.remove-attr.js +1 -1
  208. package/extensions/ublocklite/rulesets/scripting/scriptlet/swe-1.prevent-xhr.js +1 -1
  209. package/extensions/ublocklite/rulesets/scripting/scriptlet/tur-0.adjust-setInterval.js +2 -2
  210. package/extensions/ublocklite/rulesets/scripting/scriptlet/tur-0.adjust-setTimeout.js +1 -1
  211. package/extensions/ublocklite/rulesets/scripting/scriptlet/tur-0.prevent-window-open.js +1 -1
  212. package/extensions/ublocklite/rulesets/scripting/scriptlet/tur-0.set-constant.js +2 -2
  213. package/extensions/ublocklite/rulesets/scripting/scriptlet/tur-0.set-local-storage-item.js +3 -3
  214. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.abort-current-script.js +3 -3
  215. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.abort-on-property-read.js +2 -2
  216. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.abort-on-property-write.js +2 -2
  217. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.abort-on-stack-trace.js +2 -2
  218. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.addEventListener-defuser.js +2 -2
  219. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.adjust-setInterval.js +2 -2
  220. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.adjust-setTimeout.js +3 -3
  221. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.json-edit.js +69 -29
  222. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.json-prune-fetch-response.js +2 -2
  223. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.jsonl-edit-xhr-response.js +68 -28
  224. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.noeval-if.js +1 -1
  225. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.prevent-fetch.js +2 -2
  226. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.prevent-setInterval.js +3 -3
  227. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.prevent-setTimeout.js +2 -2
  228. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.prevent-window-open.js +2 -2
  229. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.prevent-xhr.js +3 -3
  230. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.remove-node-text.js +2 -2
  231. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.set-constant.js +3 -3
  232. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.set-cookie.js +2 -2
  233. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.trusted-create-html.js +2 -2
  234. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.trusted-json-edit-fetch-response.js +68 -28
  235. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.trusted-replace-argument.js +2 -2
  236. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.trusted-replace-node-text.js +3 -3
  237. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.trusted-replace-outbound-text.js +2 -2
  238. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.trusted-set-constant.js +1 -1
  239. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.trusted-set-local-storage-item.js +1 -1
  240. package/extensions/ublocklite/rulesets/scripting/scriptlet/ubol-tests.jsonl-edit-fetch-response.js +68 -28
  241. package/extensions/ublocklite/rulesets/scripting/scriptlet/ubol-tests.jsonl-edit-xhr-response.js +68 -28
  242. package/extensions/ublocklite/rulesets/scripting/scriptlet/vie-1.abort-current-script.js +1 -1
  243. package/extensions/ublocklite/rulesets/scripting/scriptlet/vie-1.abort-on-property-read.js +2 -2
  244. package/extensions/ublocklite/rulesets/scripting/specific/adguard-mobile.js +3 -3
  245. package/extensions/ublocklite/rulesets/scripting/specific/annoyances-cookies.js +3 -3
  246. package/extensions/ublocklite/rulesets/scripting/specific/annoyances-notifications.js +42 -0
  247. package/extensions/ublocklite/rulesets/scripting/specific/annoyances-others.js +3 -3
  248. package/extensions/ublocklite/rulesets/scripting/specific/annoyances-overlays.js +3 -3
  249. package/extensions/ublocklite/rulesets/scripting/specific/annoyances-social.js +3 -3
  250. package/extensions/ublocklite/rulesets/scripting/specific/bgr-0.js +3 -3
  251. package/extensions/ublocklite/rulesets/scripting/specific/chn-0.js +3 -3
  252. package/extensions/ublocklite/rulesets/scripting/specific/deu-0.js +3 -3
  253. package/extensions/ublocklite/rulesets/scripting/specific/easylist.js +3 -3
  254. package/extensions/ublocklite/rulesets/scripting/specific/fin-0.js +3 -3
  255. package/extensions/ublocklite/rulesets/scripting/specific/fra-0.js +3 -3
  256. package/extensions/ublocklite/rulesets/scripting/specific/hun-0.js +3 -3
  257. package/extensions/ublocklite/rulesets/scripting/specific/idn-0.js +3 -3
  258. package/extensions/ublocklite/rulesets/scripting/specific/ind-0.js +3 -3
  259. package/extensions/ublocklite/rulesets/scripting/specific/irn-0.js +3 -3
  260. package/extensions/ublocklite/rulesets/scripting/specific/isr-0.js +3 -3
  261. package/extensions/ublocklite/rulesets/scripting/specific/ita-0.js +3 -3
  262. package/extensions/ublocklite/rulesets/scripting/specific/jpn-1.js +3 -3
  263. package/extensions/ublocklite/rulesets/scripting/specific/kor-1.js +3 -3
  264. package/extensions/ublocklite/rulesets/scripting/specific/nld-0.js +3 -3
  265. package/extensions/ublocklite/rulesets/scripting/specific/pol-0.js +3 -3
  266. package/extensions/ublocklite/rulesets/scripting/specific/rou-1.js +3 -3
  267. package/extensions/ublocklite/rulesets/scripting/specific/rus-0.js +3 -3
  268. package/extensions/ublocklite/rulesets/scripting/specific/rus-1.js +3 -3
  269. package/extensions/ublocklite/rulesets/scripting/specific/spa-1.js +3 -3
  270. package/extensions/ublocklite/rulesets/scripting/specific/swe-1.js +3 -3
  271. package/extensions/ublocklite/rulesets/scripting/specific/tur-0.js +3 -3
  272. package/extensions/ublocklite/rulesets/scripting/specific/ublock-filters.js +3 -3
  273. package/extensions/ublocklite/rulesets/scripting/specific/vie-1.js +3 -3
  274. package/extensions/ublocklite/rulesets/scriptlet-details.json +469 -114
  275. package/extensions/ublocklite/rulesets/strictblock/adguard-mobile.json +7 -0
  276. package/extensions/ublocklite/rulesets/strictblock/annoyances-notifications.json +41 -0
  277. package/extensions/ublocklite/rulesets/strictblock/bgr-0.json +1 -2
  278. package/extensions/ublocklite/rulesets/strictblock/chn-0.json +43 -0
  279. package/extensions/ublocklite/rulesets/strictblock/dpollock-0.json +3 -0
  280. package/extensions/ublocklite/rulesets/strictblock/easylist.json +1 -1
  281. package/extensions/ublocklite/rulesets/strictblock/easyprivacy.json +22 -1
  282. package/extensions/ublocklite/rulesets/strictblock/fra-0.json +270 -16
  283. package/extensions/ublocklite/rulesets/strictblock/hun-0.json +1 -0
  284. package/extensions/ublocklite/rulesets/strictblock/irn-0.json +249 -2
  285. package/extensions/ublocklite/rulesets/strictblock/jpn-1.json +171 -168
  286. package/extensions/ublocklite/rulesets/strictblock/kor-1.json +1 -0
  287. package/extensions/ublocklite/rulesets/strictblock/nor-0.json +6 -4
  288. package/extensions/ublocklite/rulesets/strictblock/pgl.json +7 -3
  289. package/extensions/ublocklite/rulesets/strictblock/rus-1.json +1 -0
  290. package/extensions/ublocklite/rulesets/strictblock/spa-1.json +1 -0
  291. package/extensions/ublocklite/rulesets/strictblock/stevenblack-hosts.json +2534 -1986
  292. package/extensions/ublocklite/rulesets/strictblock/swe-1.json +3 -0
  293. package/extensions/ublocklite/rulesets/strictblock/ublock-badware.json +341 -339
  294. package/extensions/ublocklite/rulesets/strictblock/ublock-filters.json +1 -1
  295. package/extensions/ublocklite/rulesets/strictblock/urlhaus-full.json +139 -235
  296. package/extensions/ublocklite/rulesets/urlskip/ublock-filters.json +37 -12
  297. package/extensions/ublocklite/ublock.zip +0 -0
  298. package/package.json +5 -5
  299. package/src/shared/content.http.ts +9 -1
  300. package/src/shared/pdf.http.ts +9 -1
  301. package/src/shared/scrape.http.ts +9 -1
  302. package/src/shared/screenshot.http.ts +9 -1
  303. package/src/types.ts +7 -1
  304. package/src/utils.ts +4 -2
  305. package/static/docs/swagger.json +218 -122
  306. package/static/docs/swagger.min.json +217 -121
  307. package/static/function/client.js +1 -1
  308. package/static/function/index.html +1 -1
  309. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-experimental.trusted-json-edit-xhr-request.js +0 -795
  310. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.overlay-buster.js +0 -165
  311. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.trusted-json-edit-fetch-request.js +0 -884
  312. package/extensions/ublocklite/rulesets/scripting/specific/easyprivacy.js +0 -42
@@ -1,795 +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-experimental
24
-
25
- // Important!
26
- // Isolate from global scope
27
-
28
- // Start of local scope
29
- (function uBOL_trustedJsonEditXhrRequest() {
30
-
31
- /******************************************************************************/
32
-
33
- function trustedJsonEditXhrRequest(jsonq = '', ...args) {
34
- jsonEditXhrRequestFn(true, jsonq, ...args);
35
- }
36
-
37
- function jsonEditXhrRequestFn(trusted, jsonq = '') {
38
- const safe = safeSelf();
39
- const logPrefix = safe.makeLogPrefix(
40
- `${trusted ? 'trusted-' : ''}json-edit-xhr-request`,
41
- jsonq
42
- );
43
- const xhrInstances = new WeakMap();
44
- const jsonp = JSONPath.create(jsonq);
45
- if ( jsonp.valid === false || jsonp.value !== undefined && trusted !== true ) {
46
- return safe.uboLog(logPrefix, 'Bad JSONPath query');
47
- }
48
- const extraArgs = safe.getExtraArgs(Array.from(arguments), 2);
49
- const propNeedles = parsePropertiesToMatchFn(extraArgs.propsToMatch, 'url');
50
- self.XMLHttpRequest = class extends self.XMLHttpRequest {
51
- open(method, url, ...args) {
52
- const xhrDetails = { method, url };
53
- const matched = propNeedles.size === 0 ||
54
- matchObjectPropertiesFn(propNeedles, xhrDetails);
55
- if ( matched ) {
56
- if ( safe.logLevel > 1 && Array.isArray(matched) ) {
57
- safe.uboLog(logPrefix, `Matched "propsToMatch":\n\t${matched.join('\n\t')}`);
58
- }
59
- xhrInstances.set(this, xhrDetails);
60
- }
61
- return super.open(method, url, ...args);
62
- }
63
- send(body) {
64
- const xhrDetails = xhrInstances.get(this);
65
- if ( xhrDetails ) {
66
- body = this.#filterBody(body) || body;
67
- }
68
- super.send(body);
69
- }
70
- #filterBody(body) {
71
- if ( typeof body !== 'string' ) { return; }
72
- let data;
73
- try { data = safe.JSON_parse(body); }
74
- catch { }
75
- if ( data instanceof Object === false ) { return; }
76
- const n = jsonp.apply(data);
77
- if ( n === 0 ) { return; }
78
- body = safe.JSON_stringify(data);
79
- safe.uboLog(logPrefix, 'Edited');
80
- if ( safe.logLevel > 1 ) {
81
- safe.uboLog(logPrefix, `After edit:\n${body}`);
82
- }
83
- return body;
84
- }
85
- };
86
- }
87
-
88
- class JSONPath {
89
- static create(query) {
90
- const jsonp = new JSONPath();
91
- jsonp.compile(query);
92
- return jsonp;
93
- }
94
- static toJSON(obj, stringifier, ...args) {
95
- return (stringifier || JSON.stringify)(obj, ...args)
96
- .replace(/\//g, '\\/');
97
- }
98
- get value() {
99
- return this.#compiled && this.#compiled.rval;
100
- }
101
- set value(v) {
102
- if ( this.#compiled === undefined ) { return; }
103
- this.#compiled.rval = v;
104
- }
105
- get valid() {
106
- return this.#compiled !== undefined;
107
- }
108
- compile(query) {
109
- this.#compiled = undefined;
110
- const r = this.#compile(query, 0);
111
- if ( r === undefined ) { return; }
112
- if ( r.i !== query.length ) {
113
- if ( query.startsWith('+=', r.i) ) {
114
- r.modify = '+';
115
- r.i += 1;
116
- }
117
- if ( query.startsWith('=', r.i) === false ) { return; }
118
- try { r.rval = JSON.parse(query.slice(r.i+1)); }
119
- catch { return; }
120
- }
121
- this.#compiled = r;
122
- }
123
- evaluate(root) {
124
- if ( this.valid === false ) { return []; }
125
- this.#root = root;
126
- const paths = this.#evaluate(this.#compiled.steps, []);
127
- this.#root = null;
128
- return paths;
129
- }
130
- apply(root) {
131
- if ( this.valid === false ) { return 0; }
132
- const { modify, rval } = this.#compiled;
133
- this.#root = root;
134
- const paths = this.#evaluate(this.#compiled.steps, []);
135
- const n = paths.length;
136
- let i = n;
137
- while ( i-- ) {
138
- const { obj, key } = this.#resolvePath(paths[i]);
139
- if ( rval !== undefined ) {
140
- if ( modify === '+' ) {
141
- this.#modifyVal(obj, key, rval);
142
- } else {
143
- obj[key] = rval;
144
- }
145
- } else if ( Array.isArray(obj) && typeof key === 'number' ) {
146
- obj.splice(key, 1);
147
- } else {
148
- delete obj[key];
149
- }
150
- }
151
- this.#root = null;
152
- return n;
153
- }
154
- dump() {
155
- return JSON.stringify(this.#compiled);
156
- }
157
- toJSON(obj, ...args) {
158
- return JSONPath.toJSON(obj, null, ...args)
159
- }
160
- get [Symbol.toStringTag]() {
161
- return 'JSONPath';
162
- }
163
- #UNDEFINED = 0;
164
- #ROOT = 1;
165
- #CURRENT = 2;
166
- #CHILDREN = 3;
167
- #DESCENDANTS = 4;
168
- #reUnquotedIdentifier = /^[A-Za-z_][\w]*|^\*/;
169
- #reExpr = /^([!=^$*]=|[<>]=?)(.+?)\]/;
170
- #reIndice = /^-?\d+/;
171
- #root;
172
- #compiled;
173
- #compile(query, i) {
174
- if ( query.length === 0 ) { return; }
175
- const steps = [];
176
- let c = query.charCodeAt(i);
177
- steps.push({ mv: c === 0x24 /* $ */ ? this.#ROOT : this.#CURRENT });
178
- if ( c === 0x24 /* $ */ || c === 0x40 /* @ */ ) { i += 1; }
179
- let mv = this.#UNDEFINED;
180
- for (;;) {
181
- if ( i === query.length ) { break; }
182
- c = query.charCodeAt(i);
183
- if ( c === 0x20 /* whitespace */ ) {
184
- i += 1;
185
- continue;
186
- }
187
- // Dot accessor syntax
188
- if ( c === 0x2E /* . */ ) {
189
- if ( mv !== this.#UNDEFINED ) { return; }
190
- if ( query.startsWith('..', i) ) {
191
- mv = this.#DESCENDANTS;
192
- i += 2;
193
- } else {
194
- mv = this.#CHILDREN;
195
- i += 1;
196
- }
197
- continue;
198
- }
199
- if ( c !== 0x5B /* [ */ ) {
200
- if ( mv === this.#UNDEFINED ) {
201
- const step = steps.at(-1);
202
- if ( step === undefined ) { return; }
203
- i = this.#compileExpr(query, step, i);
204
- break;
205
- }
206
- const s = this.#consumeUnquotedIdentifier(query, i);
207
- if ( s === undefined ) { return; }
208
- steps.push({ mv, k: s });
209
- i += s.length;
210
- mv = this.#UNDEFINED;
211
- continue;
212
- }
213
- // Bracket accessor syntax
214
- if ( query.startsWith('[?', i) ) {
215
- const not = query.charCodeAt(i+2) === 0x21 /* ! */;
216
- const j = i + 2 + (not ? 1 : 0);
217
- const r = this.#compile(query, j);
218
- if ( r === undefined ) { return; }
219
- if ( query.startsWith(']', r.i) === false ) { return; }
220
- if ( not ) { r.steps.at(-1).not = true; }
221
- steps.push({ mv: mv || this.#CHILDREN, steps: r.steps });
222
- i = r.i + 1;
223
- mv = this.#UNDEFINED;
224
- continue;
225
- }
226
- if ( query.startsWith('[*]', i) ) {
227
- mv ||= this.#CHILDREN;
228
- steps.push({ mv, k: '*' });
229
- i += 3;
230
- mv = this.#UNDEFINED;
231
- continue;
232
- }
233
- const r = this.#consumeIdentifier(query, i+1);
234
- if ( r === undefined ) { return; }
235
- mv ||= this.#CHILDREN;
236
- steps.push({ mv, k: r.s });
237
- i = r.i + 1;
238
- mv = this.#UNDEFINED;
239
- }
240
- if ( steps.length <= 1 ) { return; }
241
- return { steps, i };
242
- }
243
- #evaluate(steps, pathin) {
244
- let resultset = [];
245
- if ( Array.isArray(steps) === false ) { return resultset; }
246
- for ( const step of steps ) {
247
- switch ( step.mv ) {
248
- case this.#ROOT:
249
- resultset = [ [] ];
250
- break;
251
- case this.#CURRENT:
252
- resultset = [ pathin ];
253
- break;
254
- case this.#CHILDREN:
255
- case this.#DESCENDANTS:
256
- resultset = this.#getMatches(resultset, step);
257
- break;
258
- default:
259
- break;
260
- }
261
- }
262
- return resultset;
263
- }
264
- #getMatches(listin, step) {
265
- const listout = [];
266
- for ( const pathin of listin ) {
267
- const { value: owner } = this.#resolvePath(pathin);
268
- if ( step.k === '*' ) {
269
- this.#getMatchesFromAll(pathin, step, owner, listout);
270
- } else if ( step.k !== undefined ) {
271
- this.#getMatchesFromKeys(pathin, step, owner, listout);
272
- } else if ( step.steps ) {
273
- this.#getMatchesFromExpr(pathin, step, owner, listout);
274
- }
275
- }
276
- return listout;
277
- }
278
- #getMatchesFromAll(pathin, step, owner, out) {
279
- const recursive = step.mv === this.#DESCENDANTS;
280
- for ( const { path } of this.#getDescendants(owner, recursive) ) {
281
- out.push([ ...pathin, ...path ]);
282
- }
283
- }
284
- #getMatchesFromKeys(pathin, step, owner, out) {
285
- const kk = Array.isArray(step.k) ? step.k : [ step.k ];
286
- for ( const k of kk ) {
287
- const normalized = this.#evaluateExpr(step, owner, k);
288
- if ( normalized === undefined ) { continue; }
289
- out.push([ ...pathin, normalized ]);
290
- }
291
- if ( step.mv !== this.#DESCENDANTS ) { return; }
292
- for ( const { obj, key, path } of this.#getDescendants(owner, true) ) {
293
- for ( const k of kk ) {
294
- const normalized = this.#evaluateExpr(step, obj[key], k);
295
- if ( normalized === undefined ) { continue; }
296
- out.push([ ...pathin, ...path, normalized ]);
297
- }
298
- }
299
- }
300
- #getMatchesFromExpr(pathin, step, owner, out) {
301
- const recursive = step.mv === this.#DESCENDANTS;
302
- if ( Array.isArray(owner) === false ) {
303
- const r = this.#evaluate(step.steps, pathin);
304
- if ( r.length !== 0 ) { out.push(pathin); }
305
- if ( recursive !== true ) { return; }
306
- }
307
- for ( const { obj, key, path } of this.#getDescendants(owner, recursive) ) {
308
- if ( Array.isArray(obj[key]) ) { continue; }
309
- const q = [ ...pathin, ...path ];
310
- const r = this.#evaluate(step.steps, q);
311
- if ( r.length === 0 ) { continue; }
312
- out.push(q);
313
- }
314
- }
315
- #normalizeKey(owner, key) {
316
- if ( typeof key === 'number' ) {
317
- if ( Array.isArray(owner) ) {
318
- return key >= 0 ? key : owner.length + key;
319
- }
320
- }
321
- return key;
322
- }
323
- #getDescendants(v, recursive) {
324
- const iterator = {
325
- next() {
326
- const n = this.stack.length;
327
- if ( n === 0 ) {
328
- this.value = undefined;
329
- this.done = true;
330
- return this;
331
- }
332
- const details = this.stack[n-1];
333
- const entry = details.keys.next();
334
- if ( entry.done ) {
335
- this.stack.pop();
336
- this.path.pop();
337
- return this.next();
338
- }
339
- this.path[n-1] = entry.value;
340
- this.value = {
341
- obj: details.obj,
342
- key: entry.value,
343
- path: this.path.slice(),
344
- };
345
- const v = this.value.obj[this.value.key];
346
- if ( recursive ) {
347
- if ( Array.isArray(v) ) {
348
- this.stack.push({ obj: v, keys: v.keys() });
349
- } else if ( typeof v === 'object' && v !== null ) {
350
- this.stack.push({ obj: v, keys: Object.keys(v).values() });
351
- }
352
- }
353
- return this;
354
- },
355
- path: [],
356
- value: undefined,
357
- done: false,
358
- stack: [],
359
- [Symbol.iterator]() { return this; },
360
- };
361
- if ( Array.isArray(v) ) {
362
- iterator.stack.push({ obj: v, keys: v.keys() });
363
- } else if ( typeof v === 'object' && v !== null ) {
364
- iterator.stack.push({ obj: v, keys: Object.keys(v).values() });
365
- }
366
- return iterator;
367
- }
368
- #consumeIdentifier(query, i) {
369
- const keys = [];
370
- for (;;) {
371
- const c0 = query.charCodeAt(i);
372
- if ( c0 === 0x5D /* ] */ ) { break; }
373
- if ( c0 === 0x2C /* , */ ) {
374
- i += 1;
375
- continue;
376
- }
377
- if ( c0 === 0x27 /* ' */ ) {
378
- const r = this.#consumeQuotedIdentifier(query, i+1);
379
- if ( r === undefined ) { return; }
380
- keys.push(r.s);
381
- i = r.i;
382
- continue;
383
- }
384
- if ( c0 === 0x2D /* - */ || c0 >= 0x30 && c0 <= 0x39 ) {
385
- const match = this.#reIndice.exec(query.slice(i));
386
- if ( match === null ) { return; }
387
- const indice = parseInt(query.slice(i), 10);
388
- keys.push(indice);
389
- i += match[0].length;
390
- continue;
391
- }
392
- const s = this.#consumeUnquotedIdentifier(query, i);
393
- if ( s === undefined ) { return; }
394
- keys.push(s);
395
- i += s.length;
396
- }
397
- return { s: keys.length === 1 ? keys[0] : keys, i };
398
- }
399
- #consumeQuotedIdentifier(query, i) {
400
- const len = query.length;
401
- const parts = [];
402
- let beg = i, end = i;
403
- for (;;) {
404
- if ( end === len ) { return; }
405
- const c = query.charCodeAt(end);
406
- if ( c === 0x27 /* ' */ ) {
407
- parts.push(query.slice(beg, end));
408
- end += 1;
409
- break;
410
- }
411
- if ( c === 0x5C /* \ */ && (end+1) < len ) {
412
- parts.push(query.slice(beg, end));
413
- const d = query.chatCodeAt(end+1);
414
- if ( d === 0x27 || d === 0x5C ) {
415
- end += 1;
416
- beg = end;
417
- }
418
- }
419
- end += 1;
420
- }
421
- return { s: parts.join(''), i: end };
422
- }
423
- #consumeUnquotedIdentifier(query, i) {
424
- const match = this.#reUnquotedIdentifier.exec(query.slice(i));
425
- if ( match === null ) { return; }
426
- return match[0];
427
- }
428
- #compileExpr(query, step, i) {
429
- const match = this.#reExpr.exec(query.slice(i));
430
- if ( match === null ) { return i; }
431
- try {
432
- step.rval = JSON.parse(match[2]);
433
- step.op = match[1];
434
- } catch {
435
- }
436
- return i + match[1].length + match[2].length;
437
- }
438
- #resolvePath(path) {
439
- if ( path.length === 0 ) { return { value: this.#root }; }
440
- const key = path.at(-1);
441
- let obj = this.#root
442
- for ( let i = 0, n = path.length-1; i < n; i++ ) {
443
- obj = obj[path[i]];
444
- }
445
- return { obj, key, value: obj[key] };
446
- }
447
- #evaluateExpr(step, owner, key) {
448
- if ( owner === undefined || owner === null ) { return; }
449
- if ( typeof key === 'number' ) {
450
- if ( Array.isArray(owner) === false ) { return; }
451
- }
452
- const k = this.#normalizeKey(owner, key);
453
- const hasOwn = Object.hasOwn(owner, k);
454
- if ( step.op !== undefined && hasOwn === false ) { return; }
455
- const target = step.not !== true;
456
- const v = owner[k];
457
- let outcome = false;
458
- switch ( step.op ) {
459
- case '==': outcome = (v === step.rval) === target; break;
460
- case '!=': outcome = (v !== step.rval) === target; break;
461
- case '<': outcome = (v < step.rval) === target; break;
462
- case '<=': outcome = (v <= step.rval) === target; break;
463
- case '>': outcome = (v > step.rval) === target; break;
464
- case '>=': outcome = (v >= step.rval) === target; break;
465
- case '^=': outcome = `${v}`.startsWith(step.rval) === target; break;
466
- case '$=': outcome = `${v}`.endsWith(step.rval) === target; break;
467
- case '*=': outcome = `${v}`.includes(step.rval) === target; break;
468
- default: outcome = hasOwn === target; break;
469
- }
470
- if ( outcome ) { return k; }
471
- }
472
- #modifyVal(obj, key, rval) {
473
- const lval = obj[key];
474
- if ( rval instanceof Object === false ) { return; }
475
- if ( lval instanceof Object === false ) { return; }
476
- if ( Array.isArray(lval) ) { return; }
477
- for ( const [ k, v ] of Object.entries(rval) ) {
478
- lval[k] = v;
479
- }
480
- }
481
- }
482
-
483
- function matchObjectPropertiesFn(propNeedles, ...objs) {
484
- const safe = safeSelf();
485
- const matched = [];
486
- for ( const obj of objs ) {
487
- if ( obj instanceof Object === false ) { continue; }
488
- for ( const [ prop, details ] of propNeedles ) {
489
- let value = obj[prop];
490
- if ( value === undefined ) { continue; }
491
- if ( typeof value !== 'string' ) {
492
- try { value = safe.JSON_stringify(value); }
493
- catch { }
494
- if ( typeof value !== 'string' ) { continue; }
495
- }
496
- if ( safe.testPattern(details, value) === false ) { return; }
497
- matched.push(`${prop}: ${value}`);
498
- }
499
- }
500
- return matched;
501
- }
502
-
503
- function parsePropertiesToMatchFn(propsToMatch, implicit = '') {
504
- const safe = safeSelf();
505
- const needles = new Map();
506
- if ( propsToMatch === undefined || propsToMatch === '' ) { return needles; }
507
- const options = { canNegate: true };
508
- for ( const needle of safe.String_split.call(propsToMatch, /\s+/) ) {
509
- let [ prop, pattern ] = safe.String_split.call(needle, ':');
510
- if ( prop === '' ) { continue; }
511
- if ( pattern !== undefined && /[^$\w -]/.test(prop) ) {
512
- prop = `${prop}:${pattern}`;
513
- pattern = undefined;
514
- }
515
- if ( pattern !== undefined ) {
516
- needles.set(prop, safe.initPattern(pattern, options));
517
- } else if ( implicit !== '' ) {
518
- needles.set(implicit, safe.initPattern(prop, options));
519
- }
520
- }
521
- return needles;
522
- }
523
-
524
- function safeSelf() {
525
- if ( scriptletGlobals.safeSelf ) {
526
- return scriptletGlobals.safeSelf;
527
- }
528
- const self = globalThis;
529
- const safe = {
530
- 'Array_from': Array.from,
531
- 'Error': self.Error,
532
- 'Function_toStringFn': self.Function.prototype.toString,
533
- 'Function_toString': thisArg => safe.Function_toStringFn.call(thisArg),
534
- 'Math_floor': Math.floor,
535
- 'Math_max': Math.max,
536
- 'Math_min': Math.min,
537
- 'Math_random': Math.random,
538
- 'Object': Object,
539
- 'Object_defineProperty': Object.defineProperty.bind(Object),
540
- 'Object_defineProperties': Object.defineProperties.bind(Object),
541
- 'Object_fromEntries': Object.fromEntries.bind(Object),
542
- 'Object_getOwnPropertyDescriptor': Object.getOwnPropertyDescriptor.bind(Object),
543
- 'Object_hasOwn': Object.hasOwn.bind(Object),
544
- 'RegExp': self.RegExp,
545
- 'RegExp_test': self.RegExp.prototype.test,
546
- 'RegExp_exec': self.RegExp.prototype.exec,
547
- 'Request_clone': self.Request.prototype.clone,
548
- 'String': self.String,
549
- 'String_fromCharCode': String.fromCharCode,
550
- 'String_split': String.prototype.split,
551
- 'XMLHttpRequest': self.XMLHttpRequest,
552
- 'addEventListener': self.EventTarget.prototype.addEventListener,
553
- 'removeEventListener': self.EventTarget.prototype.removeEventListener,
554
- 'fetch': self.fetch,
555
- 'JSON': self.JSON,
556
- 'JSON_parseFn': self.JSON.parse,
557
- 'JSON_stringifyFn': self.JSON.stringify,
558
- 'JSON_parse': (...args) => safe.JSON_parseFn.call(safe.JSON, ...args),
559
- 'JSON_stringify': (...args) => safe.JSON_stringifyFn.call(safe.JSON, ...args),
560
- 'log': console.log.bind(console),
561
- // Properties
562
- logLevel: 0,
563
- // Methods
564
- makeLogPrefix(...args) {
565
- return this.sendToLogger && `[${args.join(' \u205D ')}]` || '';
566
- },
567
- uboLog(...args) {
568
- if ( this.sendToLogger === undefined ) { return; }
569
- if ( args === undefined || args[0] === '' ) { return; }
570
- return this.sendToLogger('info', ...args);
571
-
572
- },
573
- uboErr(...args) {
574
- if ( this.sendToLogger === undefined ) { return; }
575
- if ( args === undefined || args[0] === '' ) { return; }
576
- return this.sendToLogger('error', ...args);
577
- },
578
- escapeRegexChars(s) {
579
- return s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
580
- },
581
- initPattern(pattern, options = {}) {
582
- if ( pattern === '' ) {
583
- return { matchAll: true, expect: true };
584
- }
585
- const expect = (options.canNegate !== true || pattern.startsWith('!') === false);
586
- if ( expect === false ) {
587
- pattern = pattern.slice(1);
588
- }
589
- const match = /^\/(.+)\/([gimsu]*)$/.exec(pattern);
590
- if ( match !== null ) {
591
- return {
592
- re: new this.RegExp(
593
- match[1],
594
- match[2] || options.flags
595
- ),
596
- expect,
597
- };
598
- }
599
- if ( options.flags !== undefined ) {
600
- return {
601
- re: new this.RegExp(this.escapeRegexChars(pattern),
602
- options.flags
603
- ),
604
- expect,
605
- };
606
- }
607
- return { pattern, expect };
608
- },
609
- testPattern(details, haystack) {
610
- if ( details.matchAll ) { return true; }
611
- if ( details.re ) {
612
- return this.RegExp_test.call(details.re, haystack) === details.expect;
613
- }
614
- return haystack.includes(details.pattern) === details.expect;
615
- },
616
- patternToRegex(pattern, flags = undefined, verbatim = false) {
617
- if ( pattern === '' ) { return /^/; }
618
- const match = /^\/(.+)\/([gimsu]*)$/.exec(pattern);
619
- if ( match === null ) {
620
- const reStr = this.escapeRegexChars(pattern);
621
- return new RegExp(verbatim ? `^${reStr}$` : reStr, flags);
622
- }
623
- try {
624
- return new RegExp(match[1], match[2] || undefined);
625
- }
626
- catch {
627
- }
628
- return /^/;
629
- },
630
- getExtraArgs(args, offset = 0) {
631
- const entries = args.slice(offset).reduce((out, v, i, a) => {
632
- if ( (i & 1) === 0 ) {
633
- const rawValue = a[i+1];
634
- const value = /^\d+$/.test(rawValue)
635
- ? parseInt(rawValue, 10)
636
- : rawValue;
637
- out.push([ a[i], value ]);
638
- }
639
- return out;
640
- }, []);
641
- return this.Object_fromEntries(entries);
642
- },
643
- onIdle(fn, options) {
644
- if ( self.requestIdleCallback ) {
645
- return self.requestIdleCallback(fn, options);
646
- }
647
- return self.requestAnimationFrame(fn);
648
- },
649
- offIdle(id) {
650
- if ( self.requestIdleCallback ) {
651
- return self.cancelIdleCallback(id);
652
- }
653
- return self.cancelAnimationFrame(id);
654
- }
655
- };
656
- scriptletGlobals.safeSelf = safe;
657
- if ( scriptletGlobals.bcSecret === undefined ) { return safe; }
658
- // This is executed only when the logger is opened
659
- safe.logLevel = scriptletGlobals.logLevel || 1;
660
- let lastLogType = '';
661
- let lastLogText = '';
662
- let lastLogTime = 0;
663
- safe.toLogText = (type, ...args) => {
664
- if ( args.length === 0 ) { return; }
665
- const text = `[${document.location.hostname || document.location.href}]${args.join(' ')}`;
666
- if ( text === lastLogText && type === lastLogType ) {
667
- if ( (Date.now() - lastLogTime) < 5000 ) { return; }
668
- }
669
- lastLogType = type;
670
- lastLogText = text;
671
- lastLogTime = Date.now();
672
- return text;
673
- };
674
- try {
675
- const bc = new self.BroadcastChannel(scriptletGlobals.bcSecret);
676
- let bcBuffer = [];
677
- safe.sendToLogger = (type, ...args) => {
678
- const text = safe.toLogText(type, ...args);
679
- if ( text === undefined ) { return; }
680
- if ( bcBuffer === undefined ) {
681
- return bc.postMessage({ what: 'messageToLogger', type, text });
682
- }
683
- bcBuffer.push({ type, text });
684
- };
685
- bc.onmessage = ev => {
686
- const msg = ev.data;
687
- switch ( msg ) {
688
- case 'iamready!':
689
- if ( bcBuffer === undefined ) { break; }
690
- bcBuffer.forEach(({ type, text }) =>
691
- bc.postMessage({ what: 'messageToLogger', type, text })
692
- );
693
- bcBuffer = undefined;
694
- break;
695
- case 'setScriptletLogLevelToOne':
696
- safe.logLevel = 1;
697
- break;
698
- case 'setScriptletLogLevelToTwo':
699
- safe.logLevel = 2;
700
- break;
701
- }
702
- };
703
- bc.postMessage('areyouready?');
704
- } catch {
705
- safe.sendToLogger = (type, ...args) => {
706
- const text = safe.toLogText(type, ...args);
707
- if ( text === undefined ) { return; }
708
- safe.log(`uBO ${text}`);
709
- };
710
- }
711
- return safe;
712
- }
713
-
714
- /******************************************************************************/
715
-
716
- const scriptletGlobals = {}; // eslint-disable-line
717
- const argsList = [[".context.client[?.clientScreen==\"WATCH_FULL_SCREEN\"].clientScreen=\"ADUNIT\"","/youtubei/v1/player?prettyPrint"]];
718
- const hostnamesMap = new Map([["www.youtube.com",0]]);
719
- const exceptionsMap = new Map([]);
720
- const hasEntities = false;
721
- const hasAncestors = false;
722
-
723
- const collectArgIndices = (hn, map, out) => {
724
- let argsIndices = map.get(hn);
725
- if ( argsIndices === undefined ) { return; }
726
- if ( typeof argsIndices !== 'number' ) {
727
- for ( const argsIndex of argsIndices ) {
728
- out.add(argsIndex);
729
- }
730
- } else {
731
- out.add(argsIndices);
732
- }
733
- };
734
-
735
- const indicesFromHostname = (hostname, suffix = '') => {
736
- const hnParts = hostname.split('.');
737
- const hnpartslen = hnParts.length;
738
- if ( hnpartslen === 0 ) { return; }
739
- for ( let i = 0; i < hnpartslen; i++ ) {
740
- const hn = `${hnParts.slice(i).join('.')}${suffix}`;
741
- collectArgIndices(hn, hostnamesMap, todoIndices);
742
- collectArgIndices(hn, exceptionsMap, tonotdoIndices);
743
- }
744
- if ( hasEntities ) {
745
- const n = hnpartslen - 1;
746
- for ( let i = 0; i < n; i++ ) {
747
- for ( let j = n; j > i; j-- ) {
748
- const en = `${hnParts.slice(i,j).join('.')}.*${suffix}`;
749
- collectArgIndices(en, hostnamesMap, todoIndices);
750
- collectArgIndices(en, exceptionsMap, tonotdoIndices);
751
- }
752
- }
753
- }
754
- };
755
-
756
- const entries = (( ) => {
757
- const docloc = document.location;
758
- const origins = [ docloc.origin ];
759
- if ( docloc.ancestorOrigins ) {
760
- origins.push(...docloc.ancestorOrigins);
761
- }
762
- return origins.map((origin, i) => {
763
- const beg = origin.lastIndexOf('://');
764
- if ( beg === -1 ) { return; }
765
- const hn = origin.slice(beg+3)
766
- const end = hn.indexOf(':');
767
- return { hn: end === -1 ? hn : hn.slice(0, end), i };
768
- }).filter(a => a !== undefined);
769
- })();
770
- if ( entries.length === 0 ) { return; }
771
-
772
- const todoIndices = new Set();
773
- const tonotdoIndices = new Set();
774
-
775
- indicesFromHostname(entries[0].hn);
776
- if ( hasAncestors ) {
777
- for ( const entry of entries ) {
778
- if ( entry.i === 0 ) { continue; }
779
- indicesFromHostname(entry.hn, '>>');
780
- }
781
- }
782
-
783
- // Apply scriplets
784
- for ( const i of todoIndices ) {
785
- if ( tonotdoIndices.has(i) ) { continue; }
786
- try { trustedJsonEditXhrRequest(...argsList[i]); }
787
- catch { }
788
- }
789
-
790
- /******************************************************************************/
791
-
792
- // End of local scope
793
- })();
794
-
795
- void 0;