@browserless.io/browserless 2.34.0-beta-0 → 2.34.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (351) hide show
  1. package/CHANGELOG.md +18 -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/README.md +1 -1
  22. package/extensions/ublocklite/_locales/bs/messages.json +58 -58
  23. package/extensions/ublocklite/_locales/ro/messages.json +1 -1
  24. package/extensions/ublocklite/_locales/ru/messages.json +1 -1
  25. package/extensions/ublocklite/_locales/sr/messages.json +28 -28
  26. package/extensions/ublocklite/css/dashboard.css +9 -4
  27. package/extensions/ublocklite/css/settings.css +17 -13
  28. package/extensions/ublocklite/css/unpicker-ui.css +1 -0
  29. package/extensions/ublocklite/dashboard.html +16 -12
  30. package/extensions/ublocklite/js/background.js +48 -14
  31. package/extensions/ublocklite/js/config.js +2 -1
  32. package/extensions/ublocklite/js/dashboard.js +9 -5
  33. package/extensions/ublocklite/js/debug.js +62 -3
  34. package/extensions/ublocklite/js/ext.js +6 -0
  35. package/extensions/ublocklite/js/fetch.js +3 -1
  36. package/extensions/ublocklite/js/filter-lists.js +16 -7
  37. package/extensions/ublocklite/js/filter-manager.js +63 -9
  38. package/extensions/ublocklite/js/jsonpath.js +65 -26
  39. package/extensions/ublocklite/js/mode-manager.js +5 -1
  40. package/extensions/ublocklite/js/popup.js +1 -1
  41. package/extensions/ublocklite/js/report.js +4 -2
  42. package/extensions/ublocklite/js/ruleset-manager.js +38 -13
  43. package/extensions/ublocklite/js/scripting/css-generic.js +0 -1
  44. package/extensions/ublocklite/js/scripting/css-procedural.js +2 -0
  45. package/extensions/ublocklite/js/scripting/css-specific.js +2 -0
  46. package/extensions/ublocklite/js/scripting-manager.js +4 -10
  47. package/extensions/ublocklite/js/settings.js +3 -5
  48. package/extensions/ublocklite/js/static-filtering-parser.js +18 -11
  49. package/extensions/ublocklite/js/tool-overlay-ui.js +19 -23
  50. package/extensions/ublocklite/js/troubleshooting.js +11 -19
  51. package/extensions/ublocklite/js/ubo-parser.js +1 -1
  52. package/extensions/ublocklite/manifest.json +7 -2
  53. package/extensions/ublocklite/rulesets/generic-details.json +19 -3
  54. package/extensions/ublocklite/rulesets/main/adguard-mobile.json +3 -1
  55. package/extensions/ublocklite/rulesets/main/annoyances-cookies.json +15 -11
  56. package/extensions/ublocklite/rulesets/main/annoyances-notifications.json +276 -0
  57. package/extensions/ublocklite/rulesets/main/annoyances-others.json +2 -1
  58. package/extensions/ublocklite/rulesets/main/annoyances-widgets.json +2 -1
  59. package/extensions/ublocklite/rulesets/main/bgr-0.json +54 -68
  60. package/extensions/ublocklite/rulesets/main/block-lan.json +1 -1
  61. package/extensions/ublocklite/rulesets/main/chn-0.json +22 -12
  62. package/extensions/ublocklite/rulesets/main/deu-0.json +5 -7
  63. package/extensions/ublocklite/rulesets/main/dpollock-0.json +5 -0
  64. package/extensions/ublocklite/rulesets/main/easylist.json +29 -85
  65. package/extensions/ublocklite/rulesets/main/easyprivacy.json +44 -8
  66. package/extensions/ublocklite/rulesets/main/fra-0.json +15 -11
  67. package/extensions/ublocklite/rulesets/main/hun-0.json +5 -3
  68. package/extensions/ublocklite/rulesets/main/idn-0.json +6 -1
  69. package/extensions/ublocklite/rulesets/main/ind-0.json +14 -9
  70. package/extensions/ublocklite/rulesets/main/irn-0.json +632 -3
  71. package/extensions/ublocklite/rulesets/main/jpn-1.json +26 -18
  72. package/extensions/ublocklite/rulesets/main/kor-1.json +4 -2
  73. package/extensions/ublocklite/rulesets/main/nld-0.json +1 -1
  74. package/extensions/ublocklite/rulesets/main/nor-0.json +24 -4
  75. package/extensions/ublocklite/rulesets/main/pgl.json +8 -6
  76. package/extensions/ublocklite/rulesets/main/pol-0.json +3 -3
  77. package/extensions/ublocklite/rulesets/main/rus-0.json +18 -11
  78. package/extensions/ublocklite/rulesets/main/rus-1.json +6 -2
  79. package/extensions/ublocklite/rulesets/main/spa-1.json +11 -2
  80. package/extensions/ublocklite/rulesets/main/stevenblack-hosts.json +5438 -4232
  81. package/extensions/ublocklite/rulesets/main/swe-1.json +29 -24
  82. package/extensions/ublocklite/rulesets/main/tur-0.json +30 -10
  83. package/extensions/ublocklite/rulesets/main/ublock-badware.json +29 -30
  84. package/extensions/ublocklite/rulesets/main/ublock-filters.json +73 -49
  85. package/extensions/ublocklite/rulesets/main/ubol-tests.json +17 -0
  86. package/extensions/ublocklite/rulesets/main/urlhaus-full.json +326 -356
  87. package/extensions/ublocklite/rulesets/main/vie-1.json +30 -26
  88. package/extensions/ublocklite/rulesets/modify-headers/chn-0.json +1 -2
  89. package/extensions/ublocklite/rulesets/modify-headers/fra-0.json +1 -0
  90. package/extensions/ublocklite/rulesets/modify-headers/irn-0.json +45 -0
  91. package/extensions/ublocklite/rulesets/modify-headers/rus-0.json +0 -1
  92. package/extensions/ublocklite/rulesets/modify-headers/ublock-filters.json +4 -3
  93. package/extensions/ublocklite/rulesets/redirect/annoyances-overlays.json +1 -2
  94. package/extensions/ublocklite/rulesets/redirect/easyprivacy.json +19 -0
  95. package/extensions/ublocklite/rulesets/redirect/irn-0.json +73 -0
  96. package/extensions/ublocklite/rulesets/redirect/jpn-1.json +0 -1
  97. package/extensions/ublocklite/rulesets/redirect/kor-1.json +1 -1
  98. package/extensions/ublocklite/rulesets/redirect/tur-0.json +2 -1
  99. package/extensions/ublocklite/rulesets/redirect/ublock-badware.json +18 -0
  100. package/extensions/ublocklite/rulesets/redirect/ublock-filters.json +18 -28
  101. package/extensions/ublocklite/rulesets/redirect/vie-1.json +34 -2
  102. package/extensions/ublocklite/rulesets/regex/chn-0.json +3 -1
  103. package/extensions/ublocklite/rulesets/regex/easylist.json +0 -2
  104. package/extensions/ublocklite/rulesets/regex/irn-0.json +22 -0
  105. package/extensions/ublocklite/rulesets/regex/jpn-1.json +1 -1
  106. package/extensions/ublocklite/rulesets/regex/tur-0.json +2 -1
  107. package/extensions/ublocklite/rulesets/regex/ublock-badware.json +2 -4
  108. package/extensions/ublocklite/rulesets/regex/ublock-filters.json +10 -9
  109. package/extensions/ublocklite/rulesets/regex/ukr-0.json +1 -3
  110. package/extensions/ublocklite/rulesets/removeparam/adguard-spyware-url.json +9 -5
  111. package/extensions/ublocklite/rulesets/removeparam/irn-0.json +16 -27
  112. package/extensions/ublocklite/rulesets/removeparam/rus-1.json +3 -1
  113. package/extensions/ublocklite/rulesets/removeparam/ublock-filters.json +6 -3
  114. package/extensions/ublocklite/rulesets/ruleset-details.json +264 -233
  115. package/extensions/ublocklite/rulesets/scripting/generic/annoyances-cookies.js +3 -3
  116. package/extensions/ublocklite/rulesets/scripting/generic/annoyances-notifications.js +87 -0
  117. package/extensions/ublocklite/rulesets/scripting/generic/bgr-0.js +3 -3
  118. package/extensions/ublocklite/rulesets/scripting/generic/chn-0.js +1 -1
  119. package/extensions/ublocklite/rulesets/scripting/generic/deu-0.js +2 -2
  120. package/extensions/ublocklite/rulesets/scripting/generic/easylist.js +3 -3
  121. package/extensions/ublocklite/rulesets/scripting/generic/est-0.js +1 -1
  122. package/extensions/ublocklite/rulesets/scripting/generic/idn-0.js +1 -1
  123. package/extensions/ublocklite/rulesets/scripting/generic/irn-0.js +3 -3
  124. package/extensions/ublocklite/rulesets/scripting/generic/jpn-1.js +3 -3
  125. package/extensions/ublocklite/rulesets/scripting/generic/nor-0.js +1 -1
  126. package/extensions/ublocklite/rulesets/scripting/generic/pol-0.js +1 -1
  127. package/extensions/ublocklite/rulesets/scripting/generic/rus-0.js +1 -1
  128. package/extensions/ublocklite/rulesets/scripting/generic/tur-0.js +1 -1
  129. package/extensions/ublocklite/rulesets/scripting/generic/ublock-filters.js +3 -3
  130. package/extensions/ublocklite/rulesets/scripting/generic/ukr-0.js +1 -1
  131. package/extensions/ublocklite/rulesets/scripting/generic/vie-1.js +1 -1
  132. package/extensions/ublocklite/rulesets/scripting/generichigh/annoyances-notifications.css +36 -0
  133. package/extensions/ublocklite/rulesets/scripting/generichigh/chn-0.css +12 -0
  134. package/extensions/ublocklite/rulesets/scripting/generichigh/easylist.css +1 -12
  135. package/extensions/ublocklite/rulesets/scripting/generichigh/est-0.css +1 -0
  136. package/extensions/ublocklite/rulesets/scripting/generichigh/idn-0.css +11 -0
  137. package/extensions/ublocklite/rulesets/scripting/generichigh/irn-0.css +27 -0
  138. package/extensions/ublocklite/rulesets/scripting/generichigh/nor-0.css +17 -0
  139. package/extensions/ublocklite/rulesets/scripting/generichigh/pol-0.css +8 -0
  140. package/extensions/ublocklite/rulesets/scripting/generichigh/rou-1.css +1 -0
  141. package/extensions/ublocklite/rulesets/scripting/generichigh/rus-0.css +106 -0
  142. package/extensions/ublocklite/rulesets/scripting/generichigh/rus-1.css +3 -0
  143. package/extensions/ublocklite/rulesets/scripting/generichigh/swe-1.css +1 -0
  144. package/extensions/ublocklite/rulesets/scripting/generichigh/ublock-filters.css +8 -2
  145. package/extensions/ublocklite/rulesets/scripting/generichigh/vie-1.css +1 -0
  146. package/extensions/ublocklite/rulesets/scripting/procedural/adguard-mobile.js +3 -3
  147. package/extensions/ublocklite/rulesets/scripting/procedural/annoyances-cookies.js +3 -3
  148. package/extensions/ublocklite/rulesets/scripting/procedural/annoyances-notifications.js +42 -0
  149. package/extensions/ublocklite/rulesets/scripting/procedural/annoyances-others.js +3 -3
  150. package/extensions/ublocklite/rulesets/scripting/procedural/annoyances-overlays.js +3 -3
  151. package/extensions/ublocklite/rulesets/scripting/procedural/annoyances-social.js +3 -3
  152. package/extensions/ublocklite/rulesets/scripting/procedural/chn-0.js +3 -3
  153. package/extensions/ublocklite/rulesets/scripting/procedural/easylist.js +3 -3
  154. package/extensions/ublocklite/rulesets/scripting/procedural/ind-0.js +1 -1
  155. package/extensions/ublocklite/rulesets/scripting/procedural/irn-0.js +3 -3
  156. package/extensions/ublocklite/rulesets/scripting/procedural/ita-0.js +3 -3
  157. package/extensions/ublocklite/rulesets/scripting/procedural/jpn-1.js +3 -3
  158. package/extensions/ublocklite/rulesets/scripting/procedural/kor-1.js +1 -1
  159. package/extensions/ublocklite/rulesets/scripting/procedural/rou-1.js +3 -3
  160. package/extensions/ublocklite/rulesets/scripting/procedural/rus-0.js +3 -3
  161. package/extensions/ublocklite/rulesets/scripting/procedural/rus-1.js +1 -1
  162. package/extensions/ublocklite/rulesets/scripting/procedural/spa-1.js +3 -3
  163. package/extensions/ublocklite/rulesets/scripting/procedural/swe-1.js +3 -3
  164. package/extensions/ublocklite/rulesets/scripting/procedural/tur-0.js +3 -3
  165. package/extensions/ublocklite/rulesets/scripting/procedural/ublock-filters.js +3 -3
  166. package/extensions/ublocklite/rulesets/scripting/scriptlet/adguard-mobile.abort-current-script.js +2 -2
  167. package/extensions/ublocklite/rulesets/scripting/scriptlet/adguard-mobile.set-cookie-reload.js +1 -1
  168. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-cookies.set-constant.js +2 -2
  169. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-cookies.set-cookie.js +2 -2
  170. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-cookies.set-local-storage-item.js +2 -2
  171. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-cookies.set-session-storage-item.js +2 -2
  172. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-cookies.trusted-click-element.js +2 -2
  173. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-cookies.trusted-set-cookie.js +2 -2
  174. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-notifications.abort-current-script.js +452 -0
  175. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-notifications.abort-on-property-write.js +347 -0
  176. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-notifications.addEventListener-defuser.js +498 -0
  177. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-notifications.remove-attr.js +405 -0
  178. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-notifications.remove-class.js +396 -0
  179. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-notifications.set-constant.js +541 -0
  180. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-notifications.set-cookie.js +442 -0
  181. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-notifications.set-local-storage-item.js +399 -0
  182. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-notifications.set-session-storage-item.js +399 -0
  183. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.abort-current-script.js +1 -1
  184. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.abort-on-property-read.js +1 -1
  185. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.addEventListener-defuser.js +2 -2
  186. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.prevent-setTimeout.js +2 -2
  187. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.remove-node-text.js +2 -2
  188. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.set-constant.js +1 -1
  189. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.set-cookie.js +2 -2
  190. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.trusted-click-element.js +1 -1
  191. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.trusted-replace-outbound-text.js +427 -0
  192. package/extensions/ublocklite/rulesets/scripting/scriptlet/chn-0.abort-current-script.js +2 -2
  193. package/extensions/ublocklite/rulesets/scripting/scriptlet/chn-0.addEventListener-defuser.js +1 -1
  194. package/extensions/ublocklite/rulesets/scripting/scriptlet/chn-0.json-prune-fetch-response.js +588 -0
  195. package/extensions/ublocklite/rulesets/scripting/scriptlet/chn-0.json-prune.js +1 -1
  196. package/extensions/ublocklite/rulesets/scripting/scriptlet/chn-0.prevent-setTimeout.js +2 -2
  197. package/extensions/ublocklite/rulesets/scripting/scriptlet/chn-0.set-constant.js +2 -2
  198. package/extensions/ublocklite/rulesets/scripting/scriptlet/easyprivacy.set-constant.js +1 -1
  199. package/extensions/ublocklite/rulesets/scripting/scriptlet/idn-0.abort-on-property-read.js +2 -2
  200. package/extensions/ublocklite/rulesets/scripting/scriptlet/irn-0.abort-current-script.js +452 -0
  201. package/extensions/ublocklite/rulesets/scripting/scriptlet/irn-0.abort-on-property-read.js +369 -0
  202. package/extensions/ublocklite/rulesets/scripting/scriptlet/irn-0.abort-on-property-write.js +347 -0
  203. package/extensions/ublocklite/rulesets/scripting/scriptlet/irn-0.abort-on-stack-trace.js +421 -0
  204. package/extensions/ublocklite/rulesets/scripting/scriptlet/irn-0.addEventListener-defuser.js +498 -0
  205. package/extensions/ublocklite/rulesets/scripting/scriptlet/irn-0.adjust-setInterval.js +332 -0
  206. package/extensions/ublocklite/rulesets/scripting/scriptlet/irn-0.adjust-setTimeout.js +332 -0
  207. package/extensions/ublocklite/rulesets/scripting/scriptlet/irn-0.href-sanitizer.js +541 -0
  208. package/extensions/ublocklite/rulesets/scripting/scriptlet/irn-0.json-prune.js +506 -0
  209. package/extensions/ublocklite/rulesets/scripting/scriptlet/irn-0.prevent-fetch.js +553 -0
  210. package/extensions/ublocklite/rulesets/scripting/scriptlet/irn-0.prevent-setTimeout.js +443 -0
  211. package/extensions/ublocklite/rulesets/scripting/scriptlet/irn-0.prevent-window-open.js +471 -0
  212. package/extensions/ublocklite/rulesets/scripting/scriptlet/irn-0.prevent-xhr.js +584 -0
  213. package/extensions/ublocklite/rulesets/scripting/scriptlet/irn-0.remove-attr.js +405 -0
  214. package/extensions/ublocklite/rulesets/scripting/scriptlet/irn-0.remove-cookie.js +376 -0
  215. package/extensions/ublocklite/rulesets/scripting/scriptlet/{ublock-experimental.trusted-replace-node-text.js → irn-0.remove-node-text.js} +8 -9
  216. package/extensions/ublocklite/rulesets/scripting/scriptlet/irn-0.set-attr.js +425 -0
  217. package/extensions/ublocklite/rulesets/scripting/scriptlet/irn-0.set-constant.js +541 -0
  218. package/extensions/ublocklite/rulesets/scripting/scriptlet/irn-0.set-local-storage-item.js +2 -2
  219. package/extensions/ublocklite/rulesets/scripting/scriptlet/irn-0.set-session-storage-item.js +2 -2
  220. package/extensions/ublocklite/rulesets/scripting/scriptlet/jpn-1.abort-current-script.js +2 -2
  221. package/extensions/ublocklite/rulesets/scripting/scriptlet/jpn-1.abort-on-property-write.js +2 -2
  222. package/extensions/ublocklite/rulesets/scripting/scriptlet/jpn-1.href-sanitizer.js +2 -2
  223. package/extensions/ublocklite/rulesets/scripting/scriptlet/kor-1.spoof-css.js +2 -2
  224. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.abort-on-property-read.js +1 -1
  225. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.abort-on-property-write.js +2 -2
  226. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.addEventListener-defuser.js +3 -3
  227. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.href-sanitizer.js +2 -2
  228. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.set-constant.js +3 -3
  229. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.set-cookie.js +2 -2
  230. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-1.set-constant.js +3 -3
  231. package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.abort-on-property-read.js +2 -2
  232. package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.addEventListener-defuser.js +3 -3
  233. package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.noeval-if.js +3 -3
  234. package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.prevent-fetch.js +2 -2
  235. package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.prevent-window-open.js +1 -1
  236. package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.remove-attr.js +1 -1
  237. package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.set-constant.js +2 -2
  238. package/extensions/ublocklite/rulesets/scripting/scriptlet/swe-1.prevent-xhr.js +1 -1
  239. package/extensions/ublocklite/rulesets/scripting/scriptlet/tur-0.abort-on-property-read.js +1 -1
  240. package/extensions/ublocklite/rulesets/scripting/scriptlet/tur-0.addEventListener-defuser.js +2 -2
  241. package/extensions/ublocklite/rulesets/scripting/scriptlet/tur-0.adjust-setTimeout.js +1 -1
  242. package/extensions/ublocklite/rulesets/scripting/scriptlet/tur-0.prevent-window-open.js +1 -1
  243. package/extensions/ublocklite/rulesets/scripting/scriptlet/tur-0.set-constant.js +2 -2
  244. package/extensions/ublocklite/rulesets/scripting/scriptlet/tur-0.set-local-storage-item.js +3 -3
  245. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.abort-current-script.js +3 -3
  246. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.abort-on-property-read.js +2 -2
  247. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.abort-on-property-write.js +2 -2
  248. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.abort-on-stack-trace.js +2 -2
  249. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.addEventListener-defuser.js +3 -3
  250. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.adjust-setInterval.js +3 -3
  251. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.adjust-setTimeout.js +2 -2
  252. package/extensions/ublocklite/rulesets/scripting/scriptlet/{ublock-filters.trusted-json-edit-fetch-request.js → ublock-filters.json-edit-fetch-response.js} +109 -66
  253. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.json-edit.js +69 -29
  254. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.json-prune-fetch-response.js +2 -2
  255. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.json-prune.js +2 -2
  256. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.jsonl-edit-xhr-response.js +68 -28
  257. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.noeval-if.js +3 -3
  258. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.prevent-fetch.js +3 -3
  259. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.prevent-setInterval.js +3 -3
  260. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.prevent-setTimeout.js +2 -2
  261. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.prevent-window-open.js +3 -3
  262. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.prevent-xhr.js +3 -3
  263. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.remove-cookie.js +2 -2
  264. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.remove-node-text.js +2 -2
  265. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.set-constant.js +3 -3
  266. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.set-cookie.js +2 -2
  267. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.set-local-storage-item.js +2 -2
  268. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.trusted-create-html.js +2 -2
  269. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.trusted-json-edit-fetch-response.js +68 -28
  270. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.trusted-replace-argument.js +2 -2
  271. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.trusted-replace-node-text.js +3 -3
  272. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.trusted-replace-outbound-text.js +2 -2
  273. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.trusted-set-constant.js +2 -2
  274. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.trusted-set-local-storage-item.js +1 -1
  275. package/extensions/ublocklite/rulesets/scripting/scriptlet/ubol-tests.jsonl-edit-fetch-response.js +68 -28
  276. package/extensions/ublocklite/rulesets/scripting/scriptlet/ubol-tests.jsonl-edit-xhr-response.js +68 -28
  277. package/extensions/ublocklite/rulesets/scripting/scriptlet/vie-1.abort-current-script.js +2 -2
  278. package/extensions/ublocklite/rulesets/scripting/scriptlet/vie-1.abort-on-property-read.js +2 -2
  279. package/extensions/ublocklite/rulesets/scripting/specific/adguard-mobile.js +3 -3
  280. package/extensions/ublocklite/rulesets/scripting/specific/annoyances-cookies.js +3 -3
  281. package/extensions/ublocklite/rulesets/scripting/specific/annoyances-notifications.js +42 -0
  282. package/extensions/ublocklite/rulesets/scripting/specific/annoyances-others.js +3 -3
  283. package/extensions/ublocklite/rulesets/scripting/specific/annoyances-overlays.js +3 -3
  284. package/extensions/ublocklite/rulesets/scripting/specific/annoyances-social.js +3 -3
  285. package/extensions/ublocklite/rulesets/scripting/specific/bgr-0.js +3 -3
  286. package/extensions/ublocklite/rulesets/scripting/specific/chn-0.js +3 -3
  287. package/extensions/ublocklite/rulesets/scripting/specific/deu-0.js +3 -3
  288. package/extensions/ublocklite/rulesets/scripting/specific/easylist.js +3 -3
  289. package/extensions/ublocklite/rulesets/scripting/specific/fin-0.js +3 -3
  290. package/extensions/ublocklite/rulesets/scripting/specific/fra-0.js +3 -3
  291. package/extensions/ublocklite/rulesets/scripting/specific/hun-0.js +3 -3
  292. package/extensions/ublocklite/rulesets/scripting/specific/idn-0.js +3 -3
  293. package/extensions/ublocklite/rulesets/scripting/specific/ind-0.js +3 -3
  294. package/extensions/ublocklite/rulesets/scripting/specific/irn-0.js +3 -3
  295. package/extensions/ublocklite/rulesets/scripting/specific/isr-0.js +3 -3
  296. package/extensions/ublocklite/rulesets/scripting/specific/ita-0.js +3 -3
  297. package/extensions/ublocklite/rulesets/scripting/specific/jpn-1.js +3 -3
  298. package/extensions/ublocklite/rulesets/scripting/specific/kor-1.js +3 -3
  299. package/extensions/ublocklite/rulesets/scripting/specific/nld-0.js +3 -3
  300. package/extensions/ublocklite/rulesets/scripting/specific/nor-0.js +1 -1
  301. package/extensions/ublocklite/rulesets/scripting/specific/pol-0.js +3 -3
  302. package/extensions/ublocklite/rulesets/scripting/specific/rou-1.js +3 -3
  303. package/extensions/ublocklite/rulesets/scripting/specific/rus-0.js +3 -3
  304. package/extensions/ublocklite/rulesets/scripting/specific/rus-1.js +3 -3
  305. package/extensions/ublocklite/rulesets/scripting/specific/spa-1.js +3 -3
  306. package/extensions/ublocklite/rulesets/scripting/specific/swe-1.js +3 -3
  307. package/extensions/ublocklite/rulesets/scripting/specific/tur-0.js +3 -3
  308. package/extensions/ublocklite/rulesets/scripting/specific/ublock-filters.js +3 -3
  309. package/extensions/ublocklite/rulesets/scripting/specific/ukr-0.js +3 -3
  310. package/extensions/ublocklite/rulesets/scripting/specific/vie-1.js +3 -3
  311. package/extensions/ublocklite/rulesets/scriptlet-details.json +521 -135
  312. package/extensions/ublocklite/rulesets/strictblock/adguard-mobile.json +16 -0
  313. package/extensions/ublocklite/rulesets/strictblock/annoyances-notifications.json +41 -0
  314. package/extensions/ublocklite/rulesets/strictblock/bgr-0.json +1 -2
  315. package/extensions/ublocklite/rulesets/strictblock/chn-0.json +112 -0
  316. package/extensions/ublocklite/rulesets/strictblock/dpollock-0.json +5 -0
  317. package/extensions/ublocklite/rulesets/strictblock/easylist.json +1 -1
  318. package/extensions/ublocklite/rulesets/strictblock/easyprivacy.json +36 -71
  319. package/extensions/ublocklite/rulesets/strictblock/fra-0.json +270 -16
  320. package/extensions/ublocklite/rulesets/strictblock/hun-0.json +1 -0
  321. package/extensions/ublocklite/rulesets/strictblock/irn-0.json +249 -2
  322. package/extensions/ublocklite/rulesets/strictblock/jpn-1.json +182 -177
  323. package/extensions/ublocklite/rulesets/strictblock/kor-1.json +1 -0
  324. package/extensions/ublocklite/rulesets/strictblock/nor-0.json +6 -4
  325. package/extensions/ublocklite/rulesets/strictblock/pgl.json +8 -6
  326. package/extensions/ublocklite/rulesets/strictblock/pol-0.json +1 -0
  327. package/extensions/ublocklite/rulesets/strictblock/rus-1.json +1 -0
  328. package/extensions/ublocklite/rulesets/strictblock/spa-1.json +2 -0
  329. package/extensions/ublocklite/rulesets/strictblock/stevenblack-hosts.json +5438 -4232
  330. package/extensions/ublocklite/rulesets/strictblock/swe-1.json +3 -0
  331. package/extensions/ublocklite/rulesets/strictblock/ublock-badware.json +679 -675
  332. package/extensions/ublocklite/rulesets/strictblock/ublock-filters.json +1 -1
  333. package/extensions/ublocklite/rulesets/strictblock/urlhaus-full.json +326 -356
  334. package/extensions/ublocklite/rulesets/strictblock/vie-1.json +1 -1
  335. package/extensions/ublocklite/rulesets/urlskip/ublock-filters.json +37 -12
  336. package/extensions/ublocklite/ublock.zip +0 -0
  337. package/package.json +8 -8
  338. package/scripts/build-open-api.js +15 -1
  339. package/src/shared/content.http.ts +9 -1
  340. package/src/shared/pdf.http.ts +9 -1
  341. package/src/shared/scrape.http.ts +9 -1
  342. package/src/shared/screenshot.http.ts +9 -1
  343. package/src/types.ts +7 -1
  344. package/src/utils.ts +4 -2
  345. package/static/docs/swagger.json +218 -122
  346. package/static/docs/swagger.min.json +217 -121
  347. package/static/function/client.js +71 -68
  348. package/static/function/index.html +71 -68
  349. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-experimental.trusted-json-edit-xhr-request.js +0 -795
  350. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.overlay-buster.js +0 -165
  351. package/extensions/ublocklite/rulesets/scripting/specific/easyprivacy.js +0 -42
@@ -26,18 +26,18 @@
26
26
  // Isolate from global scope
27
27
 
28
28
  // Start of local scope
29
- (function uBOL_trustedJsonEditFetchRequest() {
29
+ (function uBOL_jsonEditFetchResponse() {
30
30
 
31
31
  /******************************************************************************/
32
32
 
33
- function trustedJsonEditFetchRequest(jsonq = '', ...args) {
34
- jsonEditFetchRequestFn(true, jsonq, ...args);
33
+ function jsonEditFetchResponse(jsonq = '', ...args) {
34
+ jsonEditFetchResponseFn(false, jsonq, ...args);
35
35
  }
36
36
 
37
- function jsonEditFetchRequestFn(trusted, jsonq = '') {
37
+ function jsonEditFetchResponseFn(trusted, jsonq = '') {
38
38
  const safe = safeSelf();
39
39
  const logPrefix = safe.makeLogPrefix(
40
- `${trusted ? 'trusted-' : ''}json-edit-fetch-request`,
40
+ `${trusted ? 'trusted-' : ''}json-edit-fetch-response`,
41
41
  jsonq
42
42
  );
43
43
  const jsonp = JSONPath.create(jsonq);
@@ -46,29 +46,11 @@ function jsonEditFetchRequestFn(trusted, jsonq = '') {
46
46
  }
47
47
  const extraArgs = safe.getExtraArgs(Array.from(arguments), 2);
48
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 n = jsonp.apply(data);
56
- if ( n === 0 ) { return; }
57
- return safe.JSON_stringify(data);
58
- }
59
- const proxyHandler = context => {
49
+ proxyApplyFn('fetch', function(context) {
60
50
  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
- }
51
+ const fetchPromise = context.reflect();
68
52
  if ( propNeedles.size !== 0 ) {
69
- const objs = [
70
- resource instanceof Object ? resource : { url: `${resource}` }
71
- ];
53
+ const objs = [ args[0] instanceof Object ? args[0] : { url: args[0] } ];
72
54
  if ( objs[0] instanceof Request ) {
73
55
  try {
74
56
  objs[0] = safe.Request_clone.call(objs[0]);
@@ -76,21 +58,43 @@ function jsonEditFetchRequestFn(trusted, jsonq = '') {
76
58
  safe.uboErr(logPrefix, 'Error:', ex);
77
59
  }
78
60
  }
61
+ if ( args[1] instanceof Object ) {
62
+ objs.push(args[1]);
63
+ }
79
64
  const matched = matchObjectPropertiesFn(propNeedles, ...objs);
80
- if ( matched === undefined ) { return context.reflect(); }
65
+ if ( matched === undefined ) { return fetchPromise; }
81
66
  if ( safe.logLevel > 1 ) {
82
67
  safe.uboLog(logPrefix, `Matched "propsToMatch":\n\t${matched.join('\n\t')}`);
83
68
  }
84
69
  }
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);
70
+ return fetchPromise.then(responseBefore => {
71
+ const response = responseBefore.clone();
72
+ return response.json().then(obj => {
73
+ if ( typeof obj !== 'object' ) { return responseBefore; }
74
+ const objAfter = jsonp.apply(obj);
75
+ if ( objAfter === undefined ) { return responseBefore; }
76
+ safe.uboLog(logPrefix, 'Edited');
77
+ const responseAfter = Response.json(objAfter, {
78
+ status: responseBefore.status,
79
+ statusText: responseBefore.statusText,
80
+ headers: responseBefore.headers,
81
+ });
82
+ Object.defineProperties(responseAfter, {
83
+ ok: { value: responseBefore.ok },
84
+ redirected: { value: responseBefore.redirected },
85
+ type: { value: responseBefore.type },
86
+ url: { value: responseBefore.url },
87
+ });
88
+ return responseAfter;
89
+ }).catch(reason => {
90
+ safe.uboErr(logPrefix, 'Error:', reason);
91
+ return responseBefore;
92
+ });
93
+ }).catch(reason => {
94
+ safe.uboErr(logPrefix, 'Error:', reason);
95
+ return fetchPromise;
96
+ });
97
+ });
94
98
  }
95
99
 
96
100
  class JSONPath {
@@ -118,12 +122,19 @@ class JSONPath {
118
122
  const r = this.#compile(query, 0);
119
123
  if ( r === undefined ) { return; }
120
124
  if ( r.i !== query.length ) {
121
- if ( query.startsWith('+=', r.i) ) {
125
+ let val;
126
+ if ( query.startsWith('=', r.i) ) {
127
+ if ( /^=repl\(.+\)$/.test(query.slice(r.i)) ) {
128
+ r.modify = 'repl';
129
+ val = query.slice(r.i+6, -1);
130
+ } else {
131
+ val = query.slice(r.i+1);
132
+ }
133
+ } else if ( query.startsWith('+=', r.i) ) {
122
134
  r.modify = '+';
123
- r.i += 1;
135
+ val = query.slice(r.i+2);
124
136
  }
125
- if ( query.startsWith('=', r.i) === false ) { return; }
126
- try { r.rval = JSON.parse(query.slice(r.i+1)); }
137
+ try { r.rval = JSON.parse(val); }
127
138
  catch { return; }
128
139
  }
129
140
  this.#compiled = r;
@@ -136,28 +147,25 @@ class JSONPath {
136
147
  return paths;
137
148
  }
138
149
  apply(root) {
139
- if ( this.valid === false ) { return 0; }
140
- const { modify, rval } = this.#compiled;
141
- this.#root = root;
150
+ if ( this.valid === false ) { return; }
151
+ const { rval } = this.#compiled;
152
+ this.#root = { '$': root };
142
153
  const paths = this.#evaluate(this.#compiled.steps, []);
143
- const n = paths.length;
144
- let i = n;
154
+ let i = paths.length
155
+ if ( i === 0 ) { this.#root = null; return; }
145
156
  while ( i-- ) {
146
157
  const { obj, key } = this.#resolvePath(paths[i]);
147
158
  if ( rval !== undefined ) {
148
- if ( modify === '+' ) {
149
- this.#modifyVal(obj, key, rval);
150
- } else {
151
- obj[key] = rval;
152
- }
159
+ this.#modifyVal(obj, key);
153
160
  } else if ( Array.isArray(obj) && typeof key === 'number' ) {
154
161
  obj.splice(key, 1);
155
162
  } else {
156
163
  delete obj[key];
157
164
  }
158
165
  }
166
+ const result = this.#root['$'] ?? null;
159
167
  this.#root = null;
160
- return n;
168
+ return result;
161
169
  }
162
170
  dump() {
163
171
  return JSON.stringify(this.#compiled);
@@ -182,8 +190,15 @@ class JSONPath {
182
190
  if ( query.length === 0 ) { return; }
183
191
  const steps = [];
184
192
  let c = query.charCodeAt(i);
185
- steps.push({ mv: c === 0x24 /* $ */ ? this.#ROOT : this.#CURRENT });
186
- if ( c === 0x24 /* $ */ || c === 0x40 /* @ */ ) { i += 1; }
193
+ if ( c === 0x24 /* $ */ ) {
194
+ steps.push({ mv: this.#ROOT });
195
+ i += 1;
196
+ } else if ( c === 0x40 /* @ */ ) {
197
+ steps.push({ mv: this.#CURRENT });
198
+ i += 1;
199
+ } else {
200
+ steps.push({ mv: i === 0 ? this.#ROOT : this.#CURRENT });
201
+ }
187
202
  let mv = this.#UNDEFINED;
188
203
  for (;;) {
189
204
  if ( i === query.length ) { break; }
@@ -245,7 +260,8 @@ class JSONPath {
245
260
  i = r.i + 1;
246
261
  mv = this.#UNDEFINED;
247
262
  }
248
- if ( steps.length <= 1 ) { return; }
263
+ if ( steps.length === 0 ) { return; }
264
+ if ( mv !== this.#UNDEFINED ) { return; }
249
265
  return { steps, i };
250
266
  }
251
267
  #evaluate(steps, pathin) {
@@ -254,7 +270,7 @@ class JSONPath {
254
270
  for ( const step of steps ) {
255
271
  switch ( step.mv ) {
256
272
  case this.#ROOT:
257
- resultset = [ [] ];
273
+ resultset = [ [ '$' ] ];
258
274
  break;
259
275
  case this.#CURRENT:
260
276
  resultset = [ pathin ];
@@ -477,13 +493,40 @@ class JSONPath {
477
493
  }
478
494
  if ( outcome ) { return k; }
479
495
  }
480
- #modifyVal(obj, key, rval) {
481
- const lval = obj[key];
482
- if ( rval instanceof Object === false ) { return; }
483
- if ( lval instanceof Object === false ) { return; }
484
- if ( Array.isArray(lval) ) { return; }
485
- for ( const [ k, v ] of Object.entries(rval) ) {
486
- lval[k] = v;
496
+ #modifyVal(obj, key) {
497
+ const { modify, rval } = this.#compiled;
498
+ switch ( modify ) {
499
+ case undefined:
500
+ obj[key] = rval;
501
+ break;
502
+ case '+': {
503
+ if ( rval instanceof Object === false ) { return; }
504
+ const lval = obj[key];
505
+ if ( lval instanceof Object === false ) { return; }
506
+ if ( Array.isArray(lval) ) { return; }
507
+ for ( const [ k, v ] of Object.entries(rval) ) {
508
+ lval[k] = v;
509
+ }
510
+ break;
511
+ }
512
+ case 'repl': {
513
+ const lval = obj[key];
514
+ if ( typeof lval !== 'string' ) { return; }
515
+ if ( this.#compiled.re === undefined ) {
516
+ this.#compiled.re = null;
517
+ try {
518
+ this.#compiled.re = rval.regex !== undefined
519
+ ? new RegExp(rval.regex, rval.flags)
520
+ : new RegExp(rval.pattern.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'));
521
+ } catch {
522
+ }
523
+ }
524
+ if ( this.#compiled.re === null ) { return; }
525
+ obj[key] = lval.replace(this.#compiled.re, rval.replacement);
526
+ break;
527
+ }
528
+ default:
529
+ break;
487
530
  }
488
531
  }
489
532
  }
@@ -803,10 +846,10 @@ function safeSelf() {
803
846
  /******************************************************************************/
804
847
 
805
848
  const scriptletGlobals = {}; // eslint-disable-line
806
- const argsList = [[".context.client+={\"clientScreen\":\"ADUNIT\"}","/get_watch?"]];
807
- const hostnamesMap = new Map([["www.youtube.com",0]]);
849
+ const argsList = [[".pageProps.__APOLLO_STATE__.*[?.__typename==\"AotSidebar\"]","propsToMatch","/_next/data"]];
850
+ const hostnamesMap = new Map([["asiaon.*",0],["asiaontop.com",0]]);
808
851
  const exceptionsMap = new Map([]);
809
- const hasEntities = false;
852
+ const hasEntities = true;
810
853
  const hasAncestors = false;
811
854
 
812
855
  const collectArgIndices = (hn, map, out) => {
@@ -872,7 +915,7 @@ if ( hasAncestors ) {
872
915
  // Apply scriplets
873
916
  for ( const i of todoIndices ) {
874
917
  if ( tonotdoIndices.has(i) ) { continue; }
875
- try { trustedJsonEditFetchRequest(...argsList[i]); }
918
+ try { jsonEditFetchResponse(...argsList[i]); }
876
919
  catch { }
877
920
  }
878
921
 
@@ -52,12 +52,13 @@ function editOutboundObjectFn(
52
52
  }
53
53
  proxyApplyFn(propChain, function(context) {
54
54
  const obj = context.reflect();
55
- if ( jsonp.apply(obj) === 0 ) { return obj; }
55
+ const objAfter = jsonp.apply(obj);
56
+ if ( objAfter === undefined ) { return obj; }
56
57
  safe.uboLog(logPrefix, 'Edited');
57
58
  if ( safe.logLevel > 1 ) {
58
- safe.uboLog(logPrefix, `After edit:\n${safe.JSON_stringify(obj, null, 2)}`);
59
+ safe.uboLog(logPrefix, `After edit:\n${safe.JSON_stringify(objAfter, null, 2)}`);
59
60
  }
60
- return obj;
61
+ return objAfter;
61
62
  });
62
63
  }
63
64
 
@@ -86,12 +87,19 @@ class JSONPath {
86
87
  const r = this.#compile(query, 0);
87
88
  if ( r === undefined ) { return; }
88
89
  if ( r.i !== query.length ) {
89
- if ( query.startsWith('+=', r.i) ) {
90
+ let val;
91
+ if ( query.startsWith('=', r.i) ) {
92
+ if ( /^=repl\(.+\)$/.test(query.slice(r.i)) ) {
93
+ r.modify = 'repl';
94
+ val = query.slice(r.i+6, -1);
95
+ } else {
96
+ val = query.slice(r.i+1);
97
+ }
98
+ } else if ( query.startsWith('+=', r.i) ) {
90
99
  r.modify = '+';
91
- r.i += 1;
100
+ val = query.slice(r.i+2);
92
101
  }
93
- if ( query.startsWith('=', r.i) === false ) { return; }
94
- try { r.rval = JSON.parse(query.slice(r.i+1)); }
102
+ try { r.rval = JSON.parse(val); }
95
103
  catch { return; }
96
104
  }
97
105
  this.#compiled = r;
@@ -104,28 +112,25 @@ class JSONPath {
104
112
  return paths;
105
113
  }
106
114
  apply(root) {
107
- if ( this.valid === false ) { return 0; }
108
- const { modify, rval } = this.#compiled;
109
- this.#root = root;
115
+ if ( this.valid === false ) { return; }
116
+ const { rval } = this.#compiled;
117
+ this.#root = { '$': root };
110
118
  const paths = this.#evaluate(this.#compiled.steps, []);
111
- const n = paths.length;
112
- let i = n;
119
+ let i = paths.length
120
+ if ( i === 0 ) { this.#root = null; return; }
113
121
  while ( i-- ) {
114
122
  const { obj, key } = this.#resolvePath(paths[i]);
115
123
  if ( rval !== undefined ) {
116
- if ( modify === '+' ) {
117
- this.#modifyVal(obj, key, rval);
118
- } else {
119
- obj[key] = rval;
120
- }
124
+ this.#modifyVal(obj, key);
121
125
  } else if ( Array.isArray(obj) && typeof key === 'number' ) {
122
126
  obj.splice(key, 1);
123
127
  } else {
124
128
  delete obj[key];
125
129
  }
126
130
  }
131
+ const result = this.#root['$'] ?? null;
127
132
  this.#root = null;
128
- return n;
133
+ return result;
129
134
  }
130
135
  dump() {
131
136
  return JSON.stringify(this.#compiled);
@@ -150,8 +155,15 @@ class JSONPath {
150
155
  if ( query.length === 0 ) { return; }
151
156
  const steps = [];
152
157
  let c = query.charCodeAt(i);
153
- steps.push({ mv: c === 0x24 /* $ */ ? this.#ROOT : this.#CURRENT });
154
- if ( c === 0x24 /* $ */ || c === 0x40 /* @ */ ) { i += 1; }
158
+ if ( c === 0x24 /* $ */ ) {
159
+ steps.push({ mv: this.#ROOT });
160
+ i += 1;
161
+ } else if ( c === 0x40 /* @ */ ) {
162
+ steps.push({ mv: this.#CURRENT });
163
+ i += 1;
164
+ } else {
165
+ steps.push({ mv: i === 0 ? this.#ROOT : this.#CURRENT });
166
+ }
155
167
  let mv = this.#UNDEFINED;
156
168
  for (;;) {
157
169
  if ( i === query.length ) { break; }
@@ -213,7 +225,8 @@ class JSONPath {
213
225
  i = r.i + 1;
214
226
  mv = this.#UNDEFINED;
215
227
  }
216
- if ( steps.length <= 1 ) { return; }
228
+ if ( steps.length === 0 ) { return; }
229
+ if ( mv !== this.#UNDEFINED ) { return; }
217
230
  return { steps, i };
218
231
  }
219
232
  #evaluate(steps, pathin) {
@@ -222,7 +235,7 @@ class JSONPath {
222
235
  for ( const step of steps ) {
223
236
  switch ( step.mv ) {
224
237
  case this.#ROOT:
225
- resultset = [ [] ];
238
+ resultset = [ [ '$' ] ];
226
239
  break;
227
240
  case this.#CURRENT:
228
241
  resultset = [ pathin ];
@@ -445,13 +458,40 @@ class JSONPath {
445
458
  }
446
459
  if ( outcome ) { return k; }
447
460
  }
448
- #modifyVal(obj, key, rval) {
449
- const lval = obj[key];
450
- if ( rval instanceof Object === false ) { return; }
451
- if ( lval instanceof Object === false ) { return; }
452
- if ( Array.isArray(lval) ) { return; }
453
- for ( const [ k, v ] of Object.entries(rval) ) {
454
- lval[k] = v;
461
+ #modifyVal(obj, key) {
462
+ const { modify, rval } = this.#compiled;
463
+ switch ( modify ) {
464
+ case undefined:
465
+ obj[key] = rval;
466
+ break;
467
+ case '+': {
468
+ if ( rval instanceof Object === false ) { return; }
469
+ const lval = obj[key];
470
+ if ( lval instanceof Object === false ) { return; }
471
+ if ( Array.isArray(lval) ) { return; }
472
+ for ( const [ k, v ] of Object.entries(rval) ) {
473
+ lval[k] = v;
474
+ }
475
+ break;
476
+ }
477
+ case 'repl': {
478
+ const lval = obj[key];
479
+ if ( typeof lval !== 'string' ) { return; }
480
+ if ( this.#compiled.re === undefined ) {
481
+ this.#compiled.re = null;
482
+ try {
483
+ this.#compiled.re = rval.regex !== undefined
484
+ ? new RegExp(rval.regex, rval.flags)
485
+ : new RegExp(rval.pattern.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'));
486
+ } catch {
487
+ }
488
+ }
489
+ if ( this.#compiled.re === null ) { return; }
490
+ obj[key] = lval.replace(this.#compiled.re, rval.replacement);
491
+ break;
492
+ }
493
+ default:
494
+ break;
455
495
  }
456
496
  }
457
497
  }
@@ -507,8 +507,8 @@ function getRandomTokenFn() {
507
507
  /******************************************************************************/
508
508
 
509
509
  const scriptletGlobals = {}; // eslint-disable-line
510
- const argsList = [["adPlacements adSlots no_ads playerResponse.adPlacements playerResponse.adSlots playerResponse.no_ads [].playerResponse.adPlacements [].playerResponse.adSlots [].playerResponse.no_ads","","propsToMatch","/player?"],["playerAds adPlacements adSlots no_ads playerResponse.playerAds playerResponse.adPlacements playerResponse.adSlots playerResponse.no_ads","","propsToMatch","/playlist?"],["reelWatchSequenceResponse.entries.[-].command.reelWatchEndpoint.adClientParams.isAd entries.[-].command.reelWatchEndpoint.adClientParams.isAd","","propsToMatch","url:/reel_watch_sequence?"],["response.timeline.elements.[-].advertiserId","","propsToMatch","url:/api/v2/tabs/for_you"],["avails","","propsToMatch","amazonaws.com"],["imasdk","","propsToMatch","topaz."],["response.ads","","propsToMatch","/api"],["plugins.adService"],["adBreaks.[].startingOffset adBreaks.[].adBreakDuration adBreaks.[].ads adBreaks.[].startTime adBreak adBreakLocations","","propsToMatch","/session.json"],["data.device.adsParams data.device.adSponsorshipTemplate","","propsToMatch","url:/appconfig"],["response.ads","","propsToMatch","/streams"],["ads.[].imageUrl","","propsToMatch","url:api/meta"],["adDetails","","propsToMatch","/secure?"],["data.search.products.[-].sponsored_ad.ad_source","","propsToMatch","url:/plp_search_v2?"],["session.sessionAds session.sessionAdsRequired","","propsToMatch","/session"],["itemList.[-].ad_info.ad_id","","propsToMatch","url:api/recommend/item_list/"],["assets.preroll assets.prerollDebug","","propsToMatch","/stream-link"],["adsConfiguration","","propsToMatch","/vod"],["layout.sections.mainContentCollection.components.[].data.productTiles.[-].sponsoredCreative.adGroupId","","propsToMatch","/search"],["data.[].affiliate_url","","propsToMatch","cdnpk.net/v2/images/search?"],["data.[-].inner.ctaCopy","","propsToMatch","?page="],["configs.*.properties.componentConfigs.slideshowConfigs.*.interstitialNativeAds","","propsToMatch","url:/config"],["*","list.[].link.kicker","propsToMatch","/content/v1/cms/api/amp/Document"],["properties.tiles.[-].isAd","","propsToMatch","/mestripewc/default/config"],["breaks custom_breaks_data pause_ads video_metadata.end_credits_time","pause_ads","propsToMatch","/playlist"],["breaks custom_breaks_data pause_ads video_metadata.end_credits_time","breaks","propsToMatch","/playlist"],["breaks custom_breaks_data pause_ads","","propsToMatch","/playlist"],["*","*.aurl","propsToMatch","/cs?id="]];
511
- const hostnamesMap = new Map([["www.youtube.com",[0,1,2]],["m.youtube.com",2],["music.youtube.com",2],["tv.youtube.com",2],["youtubekids.com",2],["youtube-nocookie.com",2],["tumblr.com",3],["nbc.com",4],["southpark.*",5],["southparkstudios.*",5],["player.pop.co.uk",6],["player.popfun.co.uk",6],["iprima.cz",7],["pluto.tv",8],["crackle.com",9],["play.virginmediatelevision.ie",10],["misskey.io",11],["misskey.oga.ninja",11],["mk.yopo.work",11],["sushi.ski",11],["trpger.us",11],["warpday.net",11],["zadankai.club",11],["zee5.com",12],["target.com",13],["play.geforcenow.com",14],["www.tiktok.com",15],["npo.nl",16],["watch.shout-tv.com",17],["realcanadiansuperstore.ca",18],["flaticon.com",19],["fomo.id",20],["www.msn.com",[21,22,23]],["hulu.com",[24,25,26]],["mega.nz",27]]);
510
+ const argsList = [["adPlacements adSlots no_ads playerResponse.adPlacements playerResponse.adSlots playerResponse.no_ads [].playerResponse.adPlacements [].playerResponse.adSlots [].playerResponse.no_ads","","propsToMatch","/player?"],["playerAds adPlacements adSlots no_ads playerResponse.playerAds playerResponse.adPlacements playerResponse.adSlots playerResponse.no_ads","","propsToMatch","/playlist?"],["reelWatchSequenceResponse.entries.[-].command.reelWatchEndpoint.adClientParams.isAd entries.[-].command.reelWatchEndpoint.adClientParams.isAd","","propsToMatch","url:/reel_watch_sequence?"],["prerolls midrolls postrolls comm_ad house_ad pause_ad block_ad end_ad exit_ad pin_ad content_pool vertical_ad elements","","propsToMatch","/detail"],["pageProps.__TEMPLATE_QUERY_DATA__.aotFooterWidgets","","propsToMatch","/_next/data"],["response.timeline.elements.[-].advertiserId","","propsToMatch","url:/api/v2/tabs/for_you"],["avails","","propsToMatch","amazonaws.com"],["imasdk","","propsToMatch","topaz."],["response.ads","","propsToMatch","/api"],["plugins.adService"],["adBreaks.[].startingOffset adBreaks.[].adBreakDuration adBreaks.[].ads adBreaks.[].startTime adBreak adBreakLocations","","propsToMatch","/session.json"],["data.device.adsParams data.device.adSponsorshipTemplate","","propsToMatch","url:/appconfig"],["response.ads","","propsToMatch","/streams"],["ads.[].imageUrl","","propsToMatch","url:api/meta"],["adDetails","","propsToMatch","/secure?"],["data.search.products.[-].sponsored_ad.ad_source","","propsToMatch","url:/plp_search_v2?"],["session.sessionAds session.sessionAdsRequired","","propsToMatch","/session"],["itemList.[-].ad_info.ad_id","","propsToMatch","url:api/recommend/item_list/"],["assets.preroll assets.prerollDebug","","propsToMatch","/stream-link"],["adsConfiguration","","propsToMatch","/vod"],["layout.sections.mainContentCollection.components.[].data.productTiles.[-].sponsoredCreative.adGroupId","","propsToMatch","/search"],["data.[].affiliate_url","","propsToMatch","cdnpk.net/v2/images/search?"],["data.[-].inner.ctaCopy","","propsToMatch","?page="],["configs.*.properties.componentConfigs.slideshowConfigs.*.interstitialNativeAds","","propsToMatch","url:/config"],["*","list.[].link.kicker","propsToMatch","/content/v1/cms/api/amp/Document"],["properties.tiles.[-].isAd","","propsToMatch","/mestripewc/default/config"],["breaks custom_breaks_data pause_ads video_metadata.end_credits_time","pause_ads","propsToMatch","/playlist"],["breaks custom_breaks_data pause_ads video_metadata.end_credits_time","breaks","propsToMatch","/playlist"],["breaks custom_breaks_data pause_ads","","propsToMatch","/playlist"],["*","*.aurl","propsToMatch","/cs?id="]];
511
+ const hostnamesMap = new Map([["www.youtube.com",[0,1,2]],["m.youtube.com",2],["music.youtube.com",2],["tv.youtube.com",2],["youtubekids.com",2],["youtube-nocookie.com",2],["ofiii.com",3],["asiaon.*",4],["asiaontop.com",4],["tumblr.com",5],["nbc.com",6],["southpark.*",7],["southparkstudios.*",7],["player.pop.co.uk",8],["player.popfun.co.uk",8],["iprima.cz",9],["pluto.tv",10],["crackle.com",11],["play.virginmediatelevision.ie",12],["misskey.io",13],["misskey.oga.ninja",13],["mk.yopo.work",13],["sushi.ski",13],["trpger.us",13],["warpday.net",13],["zadankai.club",13],["zee5.com",14],["target.com",15],["play.geforcenow.com",16],["www.tiktok.com",17],["npo.nl",18],["watch.shout-tv.com",19],["realcanadiansuperstore.ca",20],["flaticon.com",21],["fomo.id",22],["www.msn.com",[23,24,25]],["hulu.com",[26,27,28]],["mega.nz",29]]);
512
512
  const exceptionsMap = new Map([]);
513
513
  const hasEntities = true;
514
514
  const hasAncestors = false;
@@ -425,8 +425,8 @@ function getRandomTokenFn() {
425
425
  /******************************************************************************/
426
426
 
427
427
  const scriptletGlobals = {}; // eslint-disable-line
428
- const argsList = [["entries.[-].command.reelWatchEndpoint.adClientParams.isAd"],["require.0.3.0.__bbox.require.[].3.1.__bbox.result.data.viewer.sideFeedUnit.nodes.[].new_adverts.nodes.[-].sponsored_data"],["require.0.3.0.__bbox.require.[].3.1.__bbox.result.data.serpResponse.results.edges.[-].rendering_strategy.view_model.story.sponsored_data.ad_id"],["config.globalInteractions.[].bsData"],["playerResponse.adPlacements playerResponse.playerAds playerResponse.adSlots adPlacements playerAds adSlots important"],["enabled","force_disabled"],["require.0.3.0.__bbox.require.[].3.1.__bbox.result.data.serpResponse.results.edges.[-].relay_rendering_strategy.view_model.story.sponsored_data.ad_id"],["require.0.3.0.__bbox.require.[].3.1.__bbox.result.data.node","require.0.3.0.__bbox.require.[].3.1.__bbox.result.data.node.story.sponsored_data.ad_id"],["require.0.3.0.__bbox.require.[].3.1.__bbox.result.data.marketplace_search.feed_units.edges.[-].node.story.sponsored_data.ad_id"],["require.0.3.0.__bbox.require.[].3.1.__bbox.result.data.viewer.marketplace_feed_stories.edges.[-].node.story.sponsored_data.ad_id"],["*","*.adserverDomain"],["urls","urls.0"],["cuepointPlaylist vodPlaybackUrls.result.playbackUrls.cuepoints"],["value.media.ad_breaks"],["data.[].vast_url"],["adReinsertion"],["enabled","testhide"],["AffiliateAdBlock"],["ad_pods.0.ads.0.segments.0.media ad_pods.1.ads.1.segments.1.media ad_pods.2.ads.2.segments.2.media ad_pods.3.ads.3.segments.3.media ad_pods.4.ads.4.segments.4.media ad_pods.5.ads.5.segments.5.media ad_pods.6.ads.6.segments.6.media ad_pods.7.ads.7.segments.7.media ad_pods.8.ads.8.segments.8.media"],["web_share_ads_adsterra_config wap_short_link_middle_page_ad wap_short_link_middle_page_show_time data.ads_cpm_info"],["data.meta.require_addon data.meta.require_captcha data.meta.require_notifications data.meta.require_og_ads data.meta.require_video data.meta.require_web data.meta.require_related_topics data.meta.require_custom_ad_step data.meta.og_ads_offers data.meta.addon_url data.displayAds data.linkCustomAdOffers"],["data.getDetailPageContent.linkCustomAdOffers.[-].title"],["data.getTaboolaAds.*"],["RT-1562-AdShield-script-on-Huffpost"],["ads.servers.[].apiAddress"],["breaks interstitials info","interstitials"],["ad_slots"],["plugins.dfp"],["clickAnywhere urls"],["meta.advertise"],["data.attributes.config.freewheel data.attributes.config.featureFlags.dPlayer"],["data.attributes.ssaiInfo.forecastTimeline data.attributes.ssaiInfo.vendorAttributes.nonLinearAds data.attributes.ssaiInfo.vendorAttributes.videoView data.attributes.ssaiInfo.vendorAttributes.breaks.[].ads.[].adMetadata data.attributes.ssaiInfo.vendorAttributes.breaks.[].ads.[].adParameters data.attributes.ssaiInfo.vendorAttributes.breaks.[].timeOffset"],["ssaiInfo"],["movie.advertising.ad_server playlist.movie.advertising.ad_server"],["MediaContainer.Metadata.[].Ad"],["cuepoints","cuepoints.[].start cuepoints.[].end cuepoints.[].start_float cuepoints.[].end_float"],["testadtags ad"],["resource_response.data.[-].pin_promotion_id resource_response.data.results.[-].pin_promotion_id"],["initialReduxState.pins.{-}.pin_promotion_id initialReduxState.resources.UserHomefeedResource.*.data.[-].pin_promotion_id"],["ads"],["[].data.searchResults.listings.[-].targetingSegments"],["data.xdt_injected_story_units.ad_media_items"],["ssaiInfo fallback.ssaiInfo"],["adtech-brightline adtech-google-pal adtech-iab-om"],["result.ads"],["items.[-].potentialActions.0.object.impressionToken items.[-].hasPart.0.potentialActions.0.object.impressionToken"],["context.adsIncluded"],["stream.insertion.adSession stream.insertion.points stream.insertion stream.sources.*.insertion pods.0.ads"],["ads.metadata ads.document ads.dxc ads.live ads.vod"],["*.tanya_video_ads"],["success.page.spaces.player.widget_wrappers.[].widget.data.intervention_data"],["avails"],["data.reg"],["playerResponse.adPlacements playerResponse.playerAds adPlacements playerAds"],["response.ads"],["adease adeaseBlob vmap","adease"],["plugins.adService"],["session.showAds"],["adverts.breaks"],["*","all"],["adtagparameter","enabled"],["ssai_manifest ad_manifest playback_info.ad_info qvt.playback_info.ad_info"],["PlaybackDetails.[].DaiVod"],["data.searchClassifiedFeed.searchResultView.0.searchResultItemsV2.edges.[-].node.item.content.creative.clickThroughEvent.adsTrackingMetadata.metadata.adRequestId"],["data.me.personalizedFeed.feedItems.[-].promo.creative.clickThroughUrl.adsTrackingMetadata.metadata.adRequestId"],["data.me.rhrFeed.feedItems.[-].promo.creative.clickThroughUrl.adsTrackingMetadata.metadata.sponsor"],["[].data.displayAdsV3.data.[-].__typename"],["[].data.TopAdsProducts.data.[-].__typename"],["[].data.topads.data.[-].__typename"],["placements.processingFile"],["sorts.[-].recommendationList.[].contentMetadata.EncryptedAdTrackingData"],["ads.[-].ad_id"],["gifs.[-].cta.link"],["playlist.movie.advertising.ad_server"],["result.adverts"],["ads breaks cuepoints times"],["breaks custom_breaks_data pause_ads"],["breaks custom_breaks_data pause_ads video_metadata.end_credits_time","pause_ads"],["breaks custom_breaks_data pause_ads video_metadata.end_credits_time","breaks"],["show_adverts"],["bannerad sidebar ti_sidebar"],["data.*.elements.edges.[].node.outboundLink"],["data.children.[].data.outbound_link"],["require.0.3.0.__bbox.define.[].2.is_linkshim_supported"],["dataLayer.trackingId user.trackingId"]];
429
- const hostnamesMap = new Map([["youtube.com",0],["m.youtube.com",[0,4]],["music.youtube.com",[0,4]],["tv.youtube.com",0],["www.youtube.com",0],["youtubekids.com",[0,4]],["youtube-nocookie.com",[0,4]],["web.facebook.com",[1,2,6,7,8,9]],["www.facebook.com",[1,2,6,7,8,9]],["stories.los40.com",3],["chip.de",5],["focus.de",5],["kicker.de",5],["vipbox.*",10],["vipboxtv.*",10],["viprow.*",10],["shazysport.pro",10],["streamhd247.info",10],["volokit2.com",10],["voodc.com",10],["elixx.*",11],["www.amazon.co.jp",12],["www.amazon.co.uk",12],["www.amazon.com",12],["www.amazon.de",12],["www.primevideo.com",12],["crunchyroll.com",13],["vvvvid.it",14],["plus.rtl.de",15],["tv2.no",16],["5flix.top",17],["listeamed.net",17],["yesmovies.*>>",17],["pistona.xyz",17],["vinomo.xyz",17],["art19.com",18],["fansonlinehub.com",19],["hotmediahub.com",19],["terabox.fun",19],["teralink.me",19],["terashare.me",19],["teraearn.com",19],["linkvertise.com",[20,21,22]],["huffpost.com",23],["domoplus.pl",24],["kuchniaplus.pl",24],["miniminiplus.pl",24],["teletoonplus.pl",24],["vix.com",[25,26,27]],["shorttey.*",28],["vlive.tv",29],["discoveryplus.*",[30,31]],["go.discovery.com",31],["investigationdiscovery.com",31],["watch.foodnetwork.com",31],["play.discoveryplus.com",32],["tvn.pl",33],["app.plex.tv",34],["10.com.au",35],["10play.com.au",35],["player.stv.tv",36],["pinterest.*",[37,38]],["fox.com",39],["foxsports.com",39],["serially.it",39],["autotrader.co.uk",40],["instagram.com",41],["play.hbomax.com",[42,43]],["play.max.com",[42,43]],["sportstiger.com",44],["swisscows.com",[45,46]],["disneyplus.com",[47,48]],["colearn.id",49],["hotstar.com",50],["nbc.com",51],["play.virginmediatelevision.ie",51],["play.history.com",52],["eu-proxy.startpage.com",53],["player.pop.co.uk",54],["player.popfun.co.uk",54],["foxtel.com.au",55],["iprima.cz",56],["speedrun.com",57],["channel4.com",58],["hentaihaven.xxx",59],["winfuture.de",60],["watch.sling.com",61],["dazn.com",62],["nextdoor.com",[63,64,65]],["tokopedia.com",[66,67,68]],["upscaler.stockphotos.com",69],["roblox.com",70],["sainsburys.co.uk",71],["redgifs.com",72],["tvn24.pl",73],["netflix.com",74],["sbs.com.au",75],["hulu.com",[76,77,78]],["bitchute.com",79],["criticker.com",80],["www.reddit.com",[81,82]],["threads.net",83],["nypost.com",84],["pagesix.com",84]]);
428
+ const argsList = [["entries.[-].command.reelWatchEndpoint.adClientParams.isAd"],["require.0.3.0.__bbox.require.[].3.1.__bbox.result.data.viewer.sideFeedUnit.nodes.[].new_adverts.nodes.[-].sponsored_data"],["require.0.3.0.__bbox.require.[].3.1.__bbox.result.data.serpResponse.results.edges.[-].rendering_strategy.view_model.story.sponsored_data.ad_id"],["config.globalInteractions.[].bsData"],["playerResponse.adPlacements playerResponse.playerAds playerResponse.adSlots adPlacements playerAds adSlots important"],["enabled","force_disabled"],["require.0.3.0.__bbox.require.[].3.1.__bbox.result.data.serpResponse.results.edges.[-].relay_rendering_strategy.view_model.story.sponsored_data.ad_id"],["require.0.3.0.__bbox.require.[].3.1.__bbox.result.data.node","require.0.3.0.__bbox.require.[].3.1.__bbox.result.data.node.story.sponsored_data.ad_id"],["require.0.3.0.__bbox.require.[].3.1.__bbox.result.data.marketplace_search.feed_units.edges.[-].node.story.sponsored_data.ad_id"],["require.0.3.0.__bbox.require.[].3.1.__bbox.result.data.viewer.marketplace_feed_stories.edges.[-].node.story.sponsored_data.ad_id"],["*","*.adserverDomain"],["urls","urls.0"],["cuepointPlaylist vodPlaybackUrls.result.playbackUrls.cuepoints"],["value.media.ad_breaks"],["data.[].vast_url"],["adReinsertion"],["enabled","testhide"],["AffiliateAdBlock"],["ad_pods.0.ads.0.segments.0.media ad_pods.1.ads.1.segments.1.media ad_pods.2.ads.2.segments.2.media ad_pods.3.ads.3.segments.3.media ad_pods.4.ads.4.segments.4.media ad_pods.5.ads.5.segments.5.media ad_pods.6.ads.6.segments.6.media ad_pods.7.ads.7.segments.7.media ad_pods.8.ads.8.segments.8.media"],["web_share_ads_adsterra_config wap_short_link_middle_page_ad wap_short_link_middle_page_show_time data.ads_cpm_info"],["data.meta.require_addon data.meta.require_captcha data.meta.require_notifications data.meta.require_og_ads data.meta.require_video data.meta.require_web data.meta.require_related_topics data.meta.require_custom_ad_step data.meta.og_ads_offers data.meta.addon_url data.displayAds data.linkCustomAdOffers"],["data.getDetailPageContent.linkCustomAdOffers.[-].title"],["data.getTaboolaAds.*"],["RT-1562-AdShield-script-on-Huffpost"],["ads.servers.[].apiAddress"],["breaks interstitials info","interstitials"],["ad_slots"],["plugins.dfp"],["clickAnywhere urls"],["meta.advertise"],["data.attributes.config.freewheel data.attributes.config.featureFlags.dPlayer"],["data.attributes.ssaiInfo.forecastTimeline data.attributes.ssaiInfo.vendorAttributes.nonLinearAds data.attributes.ssaiInfo.vendorAttributes.videoView data.attributes.ssaiInfo.vendorAttributes.breaks.[].ads.[].adMetadata data.attributes.ssaiInfo.vendorAttributes.breaks.[].ads.[].adParameters data.attributes.ssaiInfo.vendorAttributes.breaks.[].timeOffset"],["ssaiInfo"],["movie.advertising.ad_server playlist.movie.advertising.ad_server"],["MediaContainer.Metadata.[].Ad"],["cuepoints","cuepoints.[].start cuepoints.[].end cuepoints.[].start_float cuepoints.[].end_float"],["props.pageProps.data.aotHomepageTopBar props.pageProps.data.aotHomepageTopBar props.pageProps.data.aotHeaderAdScripts props.pageProps.data.aotFooterWidgets"],["testadtags ad"],["resource_response.data.[-].pin_promotion_id resource_response.data.results.[-].pin_promotion_id"],["initialReduxState.pins.{-}.pin_promotion_id initialReduxState.resources.UserHomefeedResource.*.data.[-].pin_promotion_id"],["ads"],["[].data.searchResults.listings.[-].targetingSegments"],["data.xdt_injected_story_units.ad_media_items"],["ssaiInfo fallback.ssaiInfo"],["adtech-brightline adtech-google-pal adtech-iab-om"],["result.ads"],["items.[-].potentialActions.0.object.impressionToken items.[-].hasPart.0.potentialActions.0.object.impressionToken"],["context.adsIncluded"],["stream.insertion.adSession stream.insertion.points stream.insertion stream.sources.*.insertion pods.0.ads"],["ads.metadata ads.document ads.dxc ads.live ads.vod"],["*.tanya_video_ads"],["success.page.spaces.player.widget_wrappers.[].widget.data.intervention_data"],["avails"],["data.reg"],["playerResponse.adPlacements playerResponse.playerAds adPlacements playerAds"],["response.ads"],["adease adeaseBlob vmap","adease"],["plugins.adService"],["session.showAds"],["adverts.breaks"],["*","all"],["adtagparameter","enabled"],["ssai_manifest ad_manifest playback_info.ad_info qvt.playback_info.ad_info"],["PlaybackDetails.[].DaiVod"],["data.searchClassifiedFeed.searchResultView.0.searchResultItemsV2.edges.[-].node.item.content.creative.clickThroughEvent.adsTrackingMetadata.metadata.adRequestId"],["data.me.personalizedFeed.feedItems.[-].promo.creative.clickThroughUrl.adsTrackingMetadata.metadata.adRequestId"],["data.me.rhrFeed.feedItems.[-].promo.creative.clickThroughUrl.adsTrackingMetadata.metadata.sponsor"],["[].data.displayAdsV3.data.[-].__typename"],["[].data.TopAdsProducts.data.[-].__typename"],["[].data.topads.data.[-].__typename"],["placements.processingFile"],["sorts.[-].recommendationList.[].contentMetadata.EncryptedAdTrackingData"],["ads.[-].ad_id"],["gifs.[-].cta.link"],["playlist.movie.advertising.ad_server"],["result.adverts"],["data.pinotPausedPlaybackPage"],["ads breaks cuepoints times"],["breaks custom_breaks_data pause_ads"],["breaks custom_breaks_data pause_ads video_metadata.end_credits_time","pause_ads"],["breaks custom_breaks_data pause_ads video_metadata.end_credits_time","breaks"],["show_adverts"],["bannerad sidebar ti_sidebar"],["data.*.elements.edges.[].node.outboundLink"],["data.children.[].data.outbound_link"],["require.0.3.0.__bbox.define.[].2.is_linkshim_supported"],["dataLayer.trackingId user.trackingId"]];
429
+ const hostnamesMap = new Map([["youtube.com",0],["m.youtube.com",[0,4]],["music.youtube.com",[0,4]],["tv.youtube.com",0],["www.youtube.com",0],["youtubekids.com",[0,4]],["youtube-nocookie.com",[0,4]],["web.facebook.com",[1,2,6,7,8,9]],["www.facebook.com",[1,2,6,7,8,9]],["stories.los40.com",3],["chip.de",5],["focus.de",5],["kicker.de",5],["vipbox.*",10],["vipboxtv.*",10],["viprow.*",10],["shazysport.pro",10],["streamhd247.info",10],["volokit2.com",10],["voodc.com",10],["elixx.*",11],["www.amazon.co.jp",12],["www.amazon.co.uk",12],["www.amazon.com",12],["www.amazon.de",12],["www.primevideo.com",12],["crunchyroll.com",13],["vvvvid.it",14],["plus.rtl.de",15],["tv2.no",16],["5flix.top",17],["listeamed.net",17],["yesmovies.*>>",17],["pistona.xyz",17],["vinomo.xyz",17],["art19.com",18],["fansonlinehub.com",19],["hotmediahub.com",19],["terabox.fun",19],["teralink.me",19],["terashare.me",19],["teraearn.com",19],["linkvertise.com",[20,21,22]],["huffpost.com",23],["domoplus.pl",24],["kuchniaplus.pl",24],["miniminiplus.pl",24],["teletoonplus.pl",24],["vix.com",[25,26,27]],["shorttey.*",28],["vlive.tv",29],["discoveryplus.*",[30,31]],["go.discovery.com",31],["investigationdiscovery.com",31],["watch.foodnetwork.com",31],["play.discoveryplus.com",32],["tvn.pl",33],["app.plex.tv",34],["10.com.au",35],["10play.com.au",35],["asiaon.*",36],["asiaontop.com",36],["player.stv.tv",37],["pinterest.*",[38,39]],["fox.com",40],["foxsports.com",40],["serially.it",40],["autotrader.co.uk",41],["instagram.com",42],["play.hbomax.com",[43,44]],["play.max.com",[43,44]],["sportstiger.com",45],["swisscows.com",[46,47]],["disneyplus.com",[48,49]],["colearn.id",50],["hotstar.com",51],["nbc.com",52],["play.virginmediatelevision.ie",52],["play.history.com",53],["eu-proxy.startpage.com",54],["player.pop.co.uk",55],["player.popfun.co.uk",55],["foxtel.com.au",56],["iprima.cz",57],["speedrun.com",58],["channel4.com",59],["hentaihaven.xxx",60],["winfuture.de",61],["watch.sling.com",62],["dazn.com",63],["nextdoor.com",[64,65,66]],["tokopedia.com",[67,68,69]],["upscaler.stockphotos.com",70],["roblox.com",71],["sainsburys.co.uk",72],["redgifs.com",73],["tvn24.pl",74],["netflix.com",[75,76]],["sbs.com.au",77],["hulu.com",[78,79,80]],["bitchute.com",81],["criticker.com",82],["www.reddit.com",[83,84]],["threads.net",85],["nypost.com",86],["pagesix.com",86]]);
430
430
  const exceptionsMap = new Map([["vvid30c.*",[17]]]);
431
431
  const hasEntities = true;
432
432
  const hasAncestors = true;