@browserless.io/browserless 2.26.1 → 2.27.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 (437) hide show
  1. package/CHANGELOG.md +8 -1
  2. package/build/config.d.ts +3 -0
  3. package/build/config.js +8 -1
  4. package/build/routes/chrome/http/content.post.body.json +8 -8
  5. package/build/routes/chrome/http/pdf.post.body.json +8 -8
  6. package/build/routes/chrome/http/scrape.post.body.json +8 -8
  7. package/build/routes/chrome/http/screenshot.post.body.json +8 -8
  8. package/build/routes/chromium/http/content.post.body.json +8 -8
  9. package/build/routes/chromium/http/pdf.post.body.json +8 -8
  10. package/build/routes/chromium/http/scrape.post.body.json +8 -8
  11. package/build/routes/chromium/http/screenshot.post.body.json +8 -8
  12. package/build/routes/chromium/tests/pdf.spec.js +24 -0
  13. package/build/routes/edge/http/content.post.body.json +8 -8
  14. package/build/routes/edge/http/pdf.post.body.json +8 -8
  15. package/build/routes/edge/http/scrape.post.body.json +8 -8
  16. package/build/routes/edge/http/screenshot.post.body.json +8 -8
  17. package/build/server.d.ts +1 -0
  18. package/build/server.js +22 -35
  19. package/build/utils.d.ts +2 -2
  20. package/build/utils.js +22 -7
  21. package/extensions/ublocklite/_locales/ar/messages.json +4 -0
  22. package/extensions/ublocklite/_locales/az/messages.json +4 -0
  23. package/extensions/ublocklite/_locales/be/messages.json +6 -2
  24. package/extensions/ublocklite/_locales/bg/messages.json +4 -0
  25. package/extensions/ublocklite/_locales/bn/messages.json +4 -0
  26. package/extensions/ublocklite/_locales/br_FR/messages.json +6 -2
  27. package/extensions/ublocklite/_locales/bs/messages.json +4 -0
  28. package/extensions/ublocklite/_locales/ca/messages.json +4 -0
  29. package/extensions/ublocklite/_locales/cs/messages.json +4 -0
  30. package/extensions/ublocklite/_locales/cv/messages.json +4 -0
  31. package/extensions/ublocklite/_locales/cy/messages.json +4 -0
  32. package/extensions/ublocklite/_locales/da/messages.json +4 -0
  33. package/extensions/ublocklite/_locales/de/messages.json +4 -0
  34. package/extensions/ublocklite/_locales/el/messages.json +4 -0
  35. package/extensions/ublocklite/_locales/en/messages.json +4 -0
  36. package/extensions/ublocklite/_locales/en_GB/messages.json +4 -0
  37. package/extensions/ublocklite/_locales/eo/messages.json +4 -0
  38. package/extensions/ublocklite/_locales/es/messages.json +4 -0
  39. package/extensions/ublocklite/_locales/et/messages.json +6 -2
  40. package/extensions/ublocklite/_locales/eu/messages.json +12 -8
  41. package/extensions/ublocklite/_locales/fa/messages.json +4 -0
  42. package/extensions/ublocklite/_locales/fi/messages.json +4 -0
  43. package/extensions/ublocklite/_locales/fil/messages.json +4 -0
  44. package/extensions/ublocklite/_locales/fr/messages.json +4 -0
  45. package/extensions/ublocklite/_locales/fy/messages.json +6 -2
  46. package/extensions/ublocklite/_locales/gl/messages.json +4 -0
  47. package/extensions/ublocklite/_locales/gu/messages.json +4 -0
  48. package/extensions/ublocklite/_locales/he/messages.json +4 -0
  49. package/extensions/ublocklite/_locales/hi/messages.json +4 -0
  50. package/extensions/ublocklite/_locales/hr/messages.json +4 -0
  51. package/extensions/ublocklite/_locales/hu/messages.json +6 -2
  52. package/extensions/ublocklite/_locales/hy/messages.json +4 -0
  53. package/extensions/ublocklite/_locales/id/messages.json +4 -0
  54. package/extensions/ublocklite/_locales/it/messages.json +4 -0
  55. package/extensions/ublocklite/_locales/ja/messages.json +4 -0
  56. package/extensions/ublocklite/_locales/ka/messages.json +4 -0
  57. package/extensions/ublocklite/_locales/kk/messages.json +4 -0
  58. package/extensions/ublocklite/_locales/kn/messages.json +4 -0
  59. package/extensions/ublocklite/_locales/ko/messages.json +4 -0
  60. package/extensions/ublocklite/_locales/lt/messages.json +4 -0
  61. package/extensions/ublocklite/_locales/lv/messages.json +4 -0
  62. package/extensions/ublocklite/_locales/mk/messages.json +4 -0
  63. package/extensions/ublocklite/_locales/ml/messages.json +4 -0
  64. package/extensions/ublocklite/_locales/mr/messages.json +4 -0
  65. package/extensions/ublocklite/_locales/ms/messages.json +4 -0
  66. package/extensions/ublocklite/_locales/nb/messages.json +4 -0
  67. package/extensions/ublocklite/_locales/nl/messages.json +4 -0
  68. package/extensions/ublocklite/_locales/oc/messages.json +4 -0
  69. package/extensions/ublocklite/_locales/pa/messages.json +4 -0
  70. package/extensions/ublocklite/_locales/pl/messages.json +4 -0
  71. package/extensions/ublocklite/_locales/pt_BR/messages.json +4 -0
  72. package/extensions/ublocklite/_locales/pt_PT/messages.json +4 -0
  73. package/extensions/ublocklite/_locales/ro/messages.json +4 -0
  74. package/extensions/ublocklite/_locales/ru/messages.json +4 -0
  75. package/extensions/ublocklite/_locales/si/messages.json +4 -0
  76. package/extensions/ublocklite/_locales/sk/messages.json +4 -0
  77. package/extensions/ublocklite/_locales/sl/messages.json +4 -0
  78. package/extensions/ublocklite/_locales/so/messages.json +4 -0
  79. package/extensions/ublocklite/_locales/sq/messages.json +4 -0
  80. package/extensions/ublocklite/_locales/sr/messages.json +4 -0
  81. package/extensions/ublocklite/_locales/sv/messages.json +4 -0
  82. package/extensions/ublocklite/_locales/sw/messages.json +4 -0
  83. package/extensions/ublocklite/_locales/ta/messages.json +4 -0
  84. package/extensions/ublocklite/_locales/te/messages.json +4 -0
  85. package/extensions/ublocklite/_locales/th/messages.json +4 -0
  86. package/extensions/ublocklite/_locales/tr/messages.json +4 -0
  87. package/extensions/ublocklite/_locales/uk/messages.json +4 -0
  88. package/extensions/ublocklite/_locales/ur/messages.json +4 -0
  89. package/extensions/ublocklite/_locales/vi/messages.json +4 -0
  90. package/extensions/ublocklite/_locales/zh_CN/messages.json +4 -0
  91. package/extensions/ublocklite/_locales/zh_TW/messages.json +4 -0
  92. package/extensions/ublocklite/css/matched-rules.css +3 -0
  93. package/extensions/ublocklite/css/zapper-ui.css +14 -2
  94. package/extensions/ublocklite/js/background.js +18 -21
  95. package/extensions/ublocklite/js/i18n.js +1 -1
  96. package/extensions/ublocklite/js/report.js +29 -17
  97. package/extensions/ublocklite/js/ruleset-manager.js +4 -3
  98. package/extensions/ublocklite/js/scripting/zapper.js +5 -3
  99. package/extensions/ublocklite/manifest.json +5 -3
  100. package/extensions/ublocklite/report.html +7 -1
  101. package/extensions/ublocklite/rulesets/generic-details.json +6 -18
  102. package/extensions/ublocklite/rulesets/main/annoyances-cookies.json +15 -13
  103. package/extensions/ublocklite/rulesets/main/annoyances-others.json +1 -0
  104. package/extensions/ublocklite/rulesets/main/annoyances-overlays.json +9 -12
  105. package/extensions/ublocklite/rulesets/main/badware.json +28 -3
  106. package/extensions/ublocklite/rulesets/main/block-lan.json +1 -0
  107. package/extensions/ublocklite/rulesets/main/chn-0.json +8 -6
  108. package/extensions/ublocklite/rulesets/main/cze-0.json +1 -2
  109. package/extensions/ublocklite/rulesets/main/default.json +80 -82
  110. package/extensions/ublocklite/rulesets/main/fra-0.json +14 -13
  111. package/extensions/ublocklite/rulesets/main/idn-0.json +9 -41
  112. package/extensions/ublocklite/rulesets/main/ind-0.json +14 -15
  113. package/extensions/ublocklite/rulesets/main/irn-0.json +5 -3
  114. package/extensions/ublocklite/rulesets/main/jpn-1.json +16 -6
  115. package/extensions/ublocklite/rulesets/main/kor-1.json +2 -1
  116. package/extensions/ublocklite/rulesets/main/lva-0.json +3 -2
  117. package/extensions/ublocklite/rulesets/main/nld-0.json +1 -1
  118. package/extensions/ublocklite/rulesets/main/nor-0.json +12 -0
  119. package/extensions/ublocklite/rulesets/main/openphish-domains.json +2527 -2127
  120. package/extensions/ublocklite/rulesets/main/rus-0.json +11 -5
  121. package/extensions/ublocklite/rulesets/main/rus-1.json +3 -2
  122. package/extensions/ublocklite/rulesets/main/spa-1.json +5 -3
  123. package/extensions/ublocklite/rulesets/main/stevenblack-hosts.json +2347 -4306
  124. package/extensions/ublocklite/rulesets/main/swe-1.json +23 -25
  125. package/extensions/ublocklite/rulesets/main/tur-0.json +5 -4
  126. package/extensions/ublocklite/rulesets/main/ukr-0.json +11 -3
  127. package/extensions/ublocklite/rulesets/main/urlhaus-full.json +466 -151
  128. package/extensions/ublocklite/rulesets/main/vie-1.json +43 -61
  129. package/extensions/ublocklite/rulesets/modify-headers/chn-0.json +23 -0
  130. package/extensions/ublocklite/rulesets/modify-headers/default.json +3 -3
  131. package/extensions/ublocklite/rulesets/modify-headers/vie-1.json +1 -1
  132. package/extensions/ublocklite/rulesets/redirect/default.json +13 -9
  133. package/extensions/ublocklite/rulesets/redirect/swe-1.json +1 -3
  134. package/extensions/ublocklite/rulesets/redirect/vie-1.json +5 -21
  135. package/extensions/ublocklite/rulesets/regex/badware.json +1 -0
  136. package/extensions/ublocklite/rulesets/regex/default.json +4 -8
  137. package/extensions/ublocklite/rulesets/removeparam/adguard-spyware-url.json +5 -4
  138. package/extensions/ublocklite/rulesets/removeparam/default.json +1 -1
  139. package/extensions/ublocklite/rulesets/ruleset-details.json +188 -188
  140. package/extensions/ublocklite/rulesets/scripting/declarative/annoyances-cookies.js +3 -3
  141. package/extensions/ublocklite/rulesets/scripting/declarative/annoyances-others.js +3 -3
  142. package/extensions/ublocklite/rulesets/scripting/declarative/annoyances-overlays.js +3 -3
  143. package/extensions/ublocklite/rulesets/scripting/declarative/default.js +3 -3
  144. package/extensions/ublocklite/rulesets/scripting/declarative/fin-0.js +3 -3
  145. package/extensions/ublocklite/rulesets/scripting/declarative/irn-0.js +3 -3
  146. package/extensions/ublocklite/rulesets/scripting/declarative/jpn-1.js +3 -3
  147. package/extensions/ublocklite/rulesets/scripting/declarative/rus-0.js +3 -3
  148. package/extensions/ublocklite/rulesets/scripting/declarative/rus-1.js +3 -3
  149. package/extensions/ublocklite/rulesets/scripting/declarative/spa-1.js +3 -3
  150. package/extensions/ublocklite/rulesets/scripting/declarative/swe-1.js +3 -3
  151. package/extensions/ublocklite/rulesets/scripting/declarative/tur-0.js +3 -3
  152. package/extensions/ublocklite/rulesets/scripting/declarative/ukr-0.js +3 -3
  153. package/extensions/ublocklite/rulesets/scripting/declarative/vie-1.js +1 -1
  154. package/extensions/ublocklite/rulesets/scripting/generic/annoyances-cookies.js +3 -3
  155. package/extensions/ublocklite/rulesets/scripting/generic/annoyances-overlays.js +3 -3
  156. package/extensions/ublocklite/rulesets/scripting/generic/chn-0.js +2 -2
  157. package/extensions/ublocklite/rulesets/scripting/generic/default.js +3 -3
  158. package/extensions/ublocklite/rulesets/scripting/generic/deu-0.js +1 -1
  159. package/extensions/ublocklite/rulesets/scripting/generic/fra-0.js +1 -1
  160. package/extensions/ublocklite/rulesets/scripting/generic/idn-0.js +2 -2
  161. package/extensions/ublocklite/rulesets/scripting/generic/kor-1.js +2 -2
  162. package/extensions/ublocklite/rulesets/scripting/generic/lva-0.js +2 -2
  163. package/extensions/ublocklite/rulesets/scripting/generic/nld-0.js +1 -1
  164. package/extensions/ublocklite/rulesets/scripting/generic/rus-0.js +2 -2
  165. package/extensions/ublocklite/rulesets/scripting/generic/spa-1.js +2 -2
  166. package/extensions/ublocklite/rulesets/scripting/generic/swe-1.js +2 -2
  167. package/extensions/ublocklite/rulesets/scripting/generic/ukr-0.js +1 -1
  168. package/extensions/ublocklite/rulesets/scripting/generichigh/default.css +3 -2
  169. package/extensions/ublocklite/rulesets/scripting/procedural/annoyances-cookies.js +3 -3
  170. package/extensions/ublocklite/rulesets/scripting/procedural/annoyances-overlays.js +3 -3
  171. package/extensions/ublocklite/rulesets/scripting/procedural/annoyances-social.js +3 -3
  172. package/extensions/ublocklite/rulesets/scripting/procedural/cze-0.js +1 -1
  173. package/extensions/ublocklite/rulesets/scripting/procedural/default.js +3 -3
  174. package/extensions/ublocklite/rulesets/scripting/procedural/deu-0.js +4 -4
  175. package/extensions/ublocklite/rulesets/scripting/procedural/fra-0.js +3 -3
  176. package/extensions/ublocklite/rulesets/scripting/procedural/idn-0.js +3 -3
  177. package/extensions/ublocklite/rulesets/scripting/procedural/irn-0.js +3 -3
  178. package/extensions/ublocklite/rulesets/scripting/procedural/kor-1.js +1 -1
  179. package/extensions/ublocklite/rulesets/scripting/procedural/lva-0.js +3 -3
  180. package/extensions/ublocklite/rulesets/scripting/procedural/pol-0.js +3 -3
  181. package/extensions/ublocklite/rulesets/scripting/procedural/rus-0.js +3 -3
  182. package/extensions/ublocklite/rulesets/scripting/procedural/swe-1.js +1 -1
  183. package/extensions/ublocklite/rulesets/scripting/procedural/ukr-0.js +3 -3
  184. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-cookies.abort-current-script.js +2 -2
  185. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-cookies.addEventListener-defuser.js +1 -1
  186. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-cookies.remove-class.js +1 -1
  187. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-cookies.set-attr.js +1 -1
  188. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-cookies.set-constant.js +1 -1
  189. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-cookies.set-cookie.js +2 -2
  190. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-cookies.set-local-storage-item.js +2 -2
  191. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-cookies.trusted-click-element.js +2 -2
  192. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-cookies.trusted-replace-node-text.js +1 -1
  193. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-cookies.trusted-set-constant.js +1 -1
  194. package/extensions/ublocklite/rulesets/scripting/scriptlet/{badware.abort-on-property-read.js → annoyances-cookies.trusted-set-cookie-reload.js} +120 -62
  195. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-cookies.trusted-set-cookie.js +2 -2
  196. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-cookies.trusted-set-local-storage-item.js +2 -2
  197. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-others.addEventListener-defuser.js +1 -1
  198. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-others.remove-attr.js +1 -1
  199. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-others.remove-class.js +1 -1
  200. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-others.remove-cookie.js +1 -1
  201. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-others.set-constant.js +1 -1
  202. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-others.set-session-storage-item.js +2 -2
  203. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.abort-current-script.js +2 -2
  204. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.abort-on-property-read.js +2 -2
  205. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.abort-on-property-write.js +2 -2
  206. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.abort-on-stack-trace.js +2 -2
  207. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.addEventListener-defuser.js +3 -3
  208. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.noeval-if.js +2 -2
  209. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.prevent-fetch.js +2 -2
  210. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.prevent-setInterval.js +2 -2
  211. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.prevent-setTimeout.js +2 -2
  212. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.prevent-xhr.js +2 -2
  213. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.remove-attr.js +3 -3
  214. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.remove-class.js +1 -1
  215. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.remove-node-text.js +3 -3
  216. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.set-constant.js +3 -3
  217. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.set-local-storage-item.js +2 -2
  218. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.trusted-click-element.js +2 -2
  219. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.trusted-replace-argument.js +1 -5
  220. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.trusted-replace-node-text.js +3 -3
  221. package/extensions/ublocklite/rulesets/scripting/scriptlet/badware.trusted-replace-argument.js +1 -5
  222. package/extensions/ublocklite/rulesets/scripting/scriptlet/chn-0.addEventListener-defuser.js +1 -1
  223. package/extensions/ublocklite/rulesets/scripting/scriptlet/chn-0.remove-attr.js +1 -1
  224. package/extensions/ublocklite/rulesets/scripting/scriptlet/chn-0.remove-class.js +1 -1
  225. package/extensions/ublocklite/rulesets/scripting/scriptlet/chn-0.remove-node-text.js +1 -1
  226. package/extensions/ublocklite/rulesets/scripting/scriptlet/chn-0.set-constant.js +1 -1
  227. package/extensions/ublocklite/rulesets/scripting/scriptlet/cze-0.addEventListener-defuser.js +1 -1
  228. package/extensions/ublocklite/rulesets/scripting/scriptlet/cze-0.remove-attr.js +1 -1
  229. package/extensions/ublocklite/rulesets/scripting/scriptlet/cze-0.set-constant.js +2 -2
  230. package/extensions/ublocklite/rulesets/scripting/scriptlet/default.abort-current-script.js +3 -3
  231. package/extensions/ublocklite/rulesets/scripting/scriptlet/default.abort-on-property-read.js +3 -3
  232. package/extensions/ublocklite/rulesets/scripting/scriptlet/default.abort-on-property-write.js +2 -2
  233. package/extensions/ublocklite/rulesets/scripting/scriptlet/default.abort-on-stack-trace.js +3 -3
  234. package/extensions/ublocklite/rulesets/scripting/scriptlet/default.addEventListener-defuser.js +4 -4
  235. package/extensions/ublocklite/rulesets/scripting/scriptlet/default.adjust-setInterval.js +3 -3
  236. package/extensions/ublocklite/rulesets/scripting/scriptlet/default.adjust-setTimeout.js +2 -2
  237. package/extensions/ublocklite/rulesets/scripting/scriptlet/default.disable-newtab-links.js +1 -1
  238. package/extensions/ublocklite/rulesets/scripting/scriptlet/default.href-sanitizer.js +1 -1
  239. package/extensions/ublocklite/rulesets/scripting/scriptlet/default.json-prune-fetch-response.js +4 -8
  240. package/extensions/ublocklite/rulesets/scripting/scriptlet/default.json-prune-xhr-response.js +3 -7
  241. package/extensions/ublocklite/rulesets/scripting/scriptlet/default.json-prune.js +2 -2
  242. package/extensions/ublocklite/rulesets/scripting/scriptlet/default.noeval-if.js +3 -3
  243. package/extensions/ublocklite/rulesets/scripting/scriptlet/default.prevent-fetch.js +2 -2
  244. package/extensions/ublocklite/rulesets/scripting/scriptlet/default.prevent-refresh.js +1 -1
  245. package/extensions/ublocklite/rulesets/scripting/scriptlet/default.prevent-setInterval.js +2 -2
  246. package/extensions/ublocklite/rulesets/scripting/scriptlet/default.prevent-setTimeout.js +2 -2
  247. package/extensions/ublocklite/rulesets/scripting/scriptlet/default.prevent-window-open.js +3 -3
  248. package/extensions/ublocklite/rulesets/scripting/scriptlet/default.prevent-xhr.js +2 -2
  249. package/extensions/ublocklite/rulesets/scripting/scriptlet/default.remove-attr.js +3 -3
  250. package/extensions/ublocklite/rulesets/scripting/scriptlet/default.remove-class.js +3 -3
  251. package/extensions/ublocklite/rulesets/scripting/scriptlet/default.remove-cookie.js +2 -2
  252. package/extensions/ublocklite/rulesets/scripting/scriptlet/default.remove-node-text.js +3 -3
  253. package/extensions/ublocklite/rulesets/scripting/scriptlet/default.set-attr.js +1 -1
  254. package/extensions/ublocklite/rulesets/scripting/scriptlet/default.set-constant.js +4 -4
  255. package/extensions/ublocklite/rulesets/scripting/scriptlet/default.set-cookie.js +1 -1
  256. package/extensions/ublocklite/rulesets/scripting/scriptlet/default.set-local-storage-item.js +2 -2
  257. package/extensions/ublocklite/rulesets/scripting/scriptlet/default.trusted-click-element.js +2 -2
  258. package/extensions/ublocklite/rulesets/scripting/scriptlet/default.trusted-override-element-method.js +1 -1
  259. package/extensions/ublocklite/rulesets/scripting/scriptlet/default.trusted-prevent-dom-bypass.js +10 -1
  260. package/extensions/ublocklite/rulesets/scripting/scriptlet/default.trusted-replace-argument.js +1 -5
  261. package/extensions/ublocklite/rulesets/scripting/scriptlet/default.trusted-replace-node-text.js +4 -4
  262. package/extensions/ublocklite/rulesets/scripting/scriptlet/default.trusted-replace-xhr-response.js +1 -1
  263. package/extensions/ublocklite/rulesets/scripting/scriptlet/default.trusted-set-attr.js +1 -1
  264. package/extensions/ublocklite/rulesets/scripting/scriptlet/default.trusted-set-constant.js +1 -1
  265. package/extensions/ublocklite/rulesets/scripting/scriptlet/default.trusted-set-cookie.js +2 -2
  266. package/extensions/ublocklite/rulesets/scripting/scriptlet/default.trusted-suppress-native-method.js +2 -2
  267. package/extensions/ublocklite/rulesets/scripting/scriptlet/default.xml-prune.js +2 -2
  268. package/extensions/ublocklite/rulesets/scripting/scriptlet/est-0.addEventListener-defuser.js +1 -1
  269. package/extensions/ublocklite/rulesets/scripting/scriptlet/fin-0.json-prune-fetch-response.js +1 -5
  270. package/extensions/ublocklite/rulesets/scripting/scriptlet/fin-0.remove-class.js +1 -1
  271. package/extensions/ublocklite/rulesets/scripting/scriptlet/fra-0.addEventListener-defuser.js +1 -1
  272. package/extensions/ublocklite/rulesets/scripting/scriptlet/fra-0.remove-attr.js +1 -1
  273. package/extensions/ublocklite/rulesets/scripting/scriptlet/fra-0.remove-class.js +1 -1
  274. package/extensions/ublocklite/rulesets/scripting/scriptlet/fra-0.set-constant.js +1 -1
  275. package/extensions/ublocklite/rulesets/scripting/scriptlet/grc-0.remove-attr.js +1 -1
  276. package/extensions/ublocklite/rulesets/scripting/scriptlet/hun-0.addEventListener-defuser.js +1 -1
  277. package/extensions/ublocklite/rulesets/scripting/scriptlet/hun-0.remove-attr.js +1 -1
  278. package/extensions/ublocklite/rulesets/scripting/scriptlet/hun-0.remove-class.js +1 -1
  279. package/extensions/ublocklite/rulesets/scripting/scriptlet/hun-0.remove-node-text.js +1 -1
  280. package/extensions/ublocklite/rulesets/scripting/scriptlet/hun-0.set-constant.js +1 -1
  281. package/extensions/ublocklite/rulesets/scripting/scriptlet/idn-0.abort-on-property-read.js +2 -2
  282. package/extensions/ublocklite/rulesets/scripting/scriptlet/idn-0.addEventListener-defuser.js +1 -1
  283. package/extensions/ublocklite/rulesets/scripting/scriptlet/idn-0.noeval-if.js +1 -1
  284. package/extensions/ublocklite/rulesets/scripting/scriptlet/idn-0.prevent-setTimeout.js +2 -2
  285. package/extensions/ublocklite/rulesets/scripting/scriptlet/idn-0.prevent-window-open.js +1 -1
  286. package/extensions/ublocklite/rulesets/scripting/scriptlet/{ubol-tests.jsonl-prune-xhr-response.js → idn-0.prevent-xhr.js} +216 -235
  287. package/extensions/ublocklite/rulesets/scripting/scriptlet/idn-0.remove-class.js +1 -1
  288. package/extensions/ublocklite/rulesets/scripting/scriptlet/idn-0.remove-node-text.js +3 -3
  289. package/extensions/ublocklite/rulesets/scripting/scriptlet/irn-0.abort-current-script.js +2 -2
  290. package/extensions/ublocklite/rulesets/scripting/scriptlet/irn-0.abort-on-property-read.js +1 -1
  291. package/extensions/ublocklite/rulesets/scripting/scriptlet/irn-0.addEventListener-defuser.js +1 -1
  292. package/extensions/ublocklite/rulesets/scripting/scriptlet/irn-0.href-sanitizer.js +3 -3
  293. package/extensions/ublocklite/rulesets/scripting/scriptlet/irn-0.remove-attr.js +1 -1
  294. package/extensions/ublocklite/rulesets/scripting/scriptlet/irn-0.remove-node-text.js +1 -1
  295. package/extensions/ublocklite/rulesets/scripting/scriptlet/irn-0.set-attr.js +1 -1
  296. package/extensions/ublocklite/rulesets/scripting/scriptlet/irn-0.set-constant.js +1 -1
  297. package/extensions/ublocklite/rulesets/scripting/scriptlet/isr-0.addEventListener-defuser.js +1 -1
  298. package/extensions/ublocklite/rulesets/scripting/scriptlet/isr-0.set-constant.js +1 -1
  299. package/extensions/ublocklite/rulesets/scripting/scriptlet/jpn-1.addEventListener-defuser.js +1 -1
  300. package/extensions/ublocklite/rulesets/scripting/scriptlet/jpn-1.noeval-if.js +2 -2
  301. package/extensions/ublocklite/rulesets/scripting/scriptlet/jpn-1.prevent-fetch.js +2 -2
  302. package/extensions/ublocklite/rulesets/scripting/scriptlet/jpn-1.remove-attr.js +1 -1
  303. package/extensions/ublocklite/rulesets/scripting/scriptlet/jpn-1.remove-class.js +1 -1
  304. package/extensions/ublocklite/rulesets/scripting/scriptlet/jpn-1.remove-node-text.js +1 -1
  305. package/extensions/ublocklite/rulesets/scripting/scriptlet/jpn-1.set-attr.js +1 -1
  306. package/extensions/ublocklite/rulesets/scripting/scriptlet/jpn-1.set-constant.js +1 -1
  307. package/extensions/ublocklite/rulesets/scripting/scriptlet/kor-1.abort-on-property-read.js +2 -2
  308. package/extensions/ublocklite/rulesets/scripting/scriptlet/kor-1.addEventListener-defuser.js +1 -1
  309. package/extensions/ublocklite/rulesets/scripting/scriptlet/kor-1.remove-attr.js +1 -1
  310. package/extensions/ublocklite/rulesets/scripting/scriptlet/kor-1.remove-class.js +1 -1
  311. package/extensions/ublocklite/rulesets/scripting/scriptlet/kor-1.set-attr.js +1 -1
  312. package/extensions/ublocklite/rulesets/scripting/scriptlet/kor-1.set-constant.js +1 -1
  313. package/extensions/ublocklite/rulesets/scripting/scriptlet/ltu-0.set-constant.js +1 -1
  314. package/extensions/ublocklite/rulesets/scripting/scriptlet/{swe-1.abort-on-property-write.js → lva-0.adjust-setInterval.js} +27 -42
  315. package/extensions/ublocklite/rulesets/scripting/scriptlet/lva-0.set-constant.js +541 -0
  316. package/extensions/ublocklite/rulesets/scripting/scriptlet/nld-0.addEventListener-defuser.js +1 -1
  317. package/extensions/ublocklite/rulesets/scripting/scriptlet/nld-0.json-prune-fetch-response.js +1 -5
  318. package/extensions/ublocklite/rulesets/scripting/scriptlet/nld-0.remove-class.js +1 -1
  319. package/extensions/ublocklite/rulesets/scripting/scriptlet/nld-0.remove-node-text.js +1 -1
  320. package/extensions/ublocklite/rulesets/scripting/scriptlet/nld-0.set-constant.js +1 -1
  321. package/extensions/ublocklite/rulesets/scripting/scriptlet/nor-0.addEventListener-defuser.js +1 -1
  322. package/extensions/ublocklite/rulesets/scripting/scriptlet/nor-0.remove-attr.js +1 -1
  323. package/extensions/ublocklite/rulesets/scripting/scriptlet/nor-0.set-constant.js +1 -1
  324. package/extensions/ublocklite/rulesets/scripting/scriptlet/pol-0.addEventListener-defuser.js +1 -1
  325. package/extensions/ublocklite/rulesets/scripting/scriptlet/pol-0.prevent-window-open.js +2 -2
  326. package/extensions/ublocklite/rulesets/scripting/scriptlet/pol-0.remove-attr.js +1 -1
  327. package/extensions/ublocklite/rulesets/scripting/scriptlet/pol-0.set-constant.js +1 -1
  328. package/extensions/ublocklite/rulesets/scripting/scriptlet/rou-1.remove-class.js +1 -1
  329. package/extensions/ublocklite/rulesets/scripting/scriptlet/rou-1.remove-node-text.js +1 -1
  330. package/extensions/ublocklite/rulesets/scripting/scriptlet/rou-1.set-constant.js +1 -1
  331. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.abort-on-property-read.js +2 -2
  332. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.abort-on-stack-trace.js +3 -3
  333. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.addEventListener-defuser.js +3 -3
  334. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.adjust-setInterval.js +1 -1
  335. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.href-sanitizer.js +3 -3
  336. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.json-prune-fetch-response.js +1 -5
  337. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.json-prune.js +1 -1
  338. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.prevent-fetch.js +3 -3
  339. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.remove-attr.js +1 -1
  340. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.remove-class.js +1 -1
  341. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.remove-node-text.js +4 -4
  342. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.set-attr.js +1 -1
  343. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.set-constant.js +1 -1
  344. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-1.addEventListener-defuser.js +1 -1
  345. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-1.remove-attr.js +1 -1
  346. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-1.set-constant.js +1 -1
  347. package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.abort-on-property-read.js +2 -2
  348. package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.addEventListener-defuser.js +4 -4
  349. package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.href-sanitizer.js +1 -1
  350. package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.remove-attr.js +1 -1
  351. package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.remove-class.js +1 -1
  352. package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.remove-node-text.js +1 -1
  353. package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.set-constant.js +1 -1
  354. package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.set-local-storage-item.js +1 -1
  355. package/extensions/ublocklite/rulesets/scripting/scriptlet/swe-1.addEventListener-defuser.js +1 -1
  356. package/extensions/ublocklite/rulesets/scripting/scriptlet/swe-1.href-sanitizer.js +1 -1
  357. package/extensions/ublocklite/rulesets/scripting/scriptlet/swe-1.json-prune-fetch-response.js +1 -5
  358. package/extensions/ublocklite/rulesets/scripting/scriptlet/swe-1.remove-node-text.js +1 -1
  359. package/extensions/ublocklite/rulesets/scripting/scriptlet/swe-1.set-constant.js +1 -1
  360. package/extensions/ublocklite/rulesets/scripting/scriptlet/tha-0.remove-attr.js +1 -1
  361. package/extensions/ublocklite/rulesets/scripting/scriptlet/tha-0.set-attr.js +1 -1
  362. package/extensions/ublocklite/rulesets/scripting/scriptlet/tha-0.set-constant.js +1 -1
  363. package/extensions/ublocklite/rulesets/scripting/scriptlet/tur-0.abort-on-property-read.js +2 -2
  364. package/extensions/ublocklite/rulesets/scripting/scriptlet/tur-0.addEventListener-defuser.js +3 -3
  365. package/extensions/ublocklite/rulesets/scripting/scriptlet/tur-0.adjust-setInterval.js +1 -1
  366. package/extensions/ublocklite/rulesets/scripting/scriptlet/tur-0.remove-attr.js +1 -1
  367. package/extensions/ublocklite/rulesets/scripting/scriptlet/tur-0.remove-node-text.js +1 -1
  368. package/extensions/ublocklite/rulesets/scripting/scriptlet/tur-0.set-attr.js +1 -1
  369. package/extensions/ublocklite/rulesets/scripting/scriptlet/tur-0.set-constant.js +3 -3
  370. package/extensions/ublocklite/rulesets/scripting/scriptlet/tur-0.set-cookie.js +2 -2
  371. package/extensions/ublocklite/rulesets/scripting/scriptlet/ubol-tests.jsonl-edit-fetch-response.js +896 -0
  372. package/extensions/ublocklite/rulesets/scripting/scriptlet/ubol-tests.jsonl-edit-xhr-response.js +807 -0
  373. package/extensions/ublocklite/rulesets/scripting/scriptlet/ubol-tests.set-constant.js +1 -1
  374. package/extensions/ublocklite/rulesets/scripting/scriptlet/{annoyances-cookies.remove-node-text.js → ubol-tests.trusted-prevent-dom-bypass.js} +115 -138
  375. package/extensions/ublocklite/rulesets/scripting/scriptlet/ukr-0.remove-node-text.js +3 -3
  376. package/extensions/ublocklite/rulesets/scripting/scriptlet/vie-1.abort-current-script.js +2 -2
  377. package/extensions/ublocklite/rulesets/scripting/scriptlet/vie-1.abort-on-property-read.js +2 -2
  378. package/extensions/ublocklite/rulesets/scripting/scriptlet/vie-1.addEventListener-defuser.js +1 -1
  379. package/extensions/ublocklite/rulesets/scripting/scriptlet/vie-1.m3u-prune.js +1 -1
  380. package/extensions/ublocklite/rulesets/scripting/scriptlet/vie-1.remove-attr.js +1 -1
  381. package/extensions/ublocklite/rulesets/scripting/scriptlet/vie-1.set-constant.js +1 -1
  382. package/extensions/ublocklite/rulesets/scripting/specific/annoyances-cookies.js +3 -3
  383. package/extensions/ublocklite/rulesets/scripting/specific/annoyances-others.js +3 -3
  384. package/extensions/ublocklite/rulesets/scripting/specific/annoyances-overlays.js +3 -3
  385. package/extensions/ublocklite/rulesets/scripting/specific/annoyances-social.js +3 -3
  386. package/extensions/ublocklite/rulesets/scripting/specific/badware.js +3 -3
  387. package/extensions/ublocklite/rulesets/scripting/specific/chn-0.js +3 -3
  388. package/extensions/ublocklite/rulesets/scripting/specific/cze-0.js +3 -3
  389. package/extensions/ublocklite/rulesets/scripting/specific/default.js +3 -3
  390. package/extensions/ublocklite/rulesets/scripting/specific/deu-0.js +3 -3
  391. package/extensions/ublocklite/rulesets/scripting/specific/fin-0.js +3 -3
  392. package/extensions/ublocklite/rulesets/scripting/specific/fra-0.js +3 -3
  393. package/extensions/ublocklite/rulesets/scripting/specific/hun-0.js +1 -1
  394. package/extensions/ublocklite/rulesets/scripting/specific/idn-0.js +3 -3
  395. package/extensions/ublocklite/rulesets/scripting/specific/ind-0.js +3 -3
  396. package/extensions/ublocklite/rulesets/scripting/specific/irn-0.js +3 -3
  397. package/extensions/ublocklite/rulesets/scripting/specific/isr-0.js +1 -1
  398. package/extensions/ublocklite/rulesets/scripting/specific/ita-0.js +3 -3
  399. package/extensions/ublocklite/rulesets/scripting/specific/jpn-1.js +3 -3
  400. package/extensions/ublocklite/rulesets/scripting/specific/kor-1.js +3 -3
  401. package/extensions/ublocklite/rulesets/scripting/specific/lva-0.js +3 -3
  402. package/extensions/ublocklite/rulesets/scripting/specific/nld-0.js +3 -3
  403. package/extensions/ublocklite/rulesets/scripting/specific/nor-0.js +3 -3
  404. package/extensions/ublocklite/rulesets/scripting/specific/pol-0.js +3 -3
  405. package/extensions/ublocklite/rulesets/scripting/specific/rus-0.js +3 -3
  406. package/extensions/ublocklite/rulesets/scripting/specific/spa-0.js +1 -1
  407. package/extensions/ublocklite/rulesets/scripting/specific/spa-1.js +3 -3
  408. package/extensions/ublocklite/rulesets/scripting/specific/swe-1.js +3 -3
  409. package/extensions/ublocklite/rulesets/scripting/specific/tur-0.js +3 -3
  410. package/extensions/ublocklite/rulesets/scripting/specific/ukr-0.js +3 -3
  411. package/extensions/ublocklite/rulesets/scripting/specific/vie-1.js +3 -3
  412. package/extensions/ublocklite/rulesets/scriptlet-details.json +334 -360
  413. package/extensions/ublocklite/rulesets/strictblock/badware.json +274 -265
  414. package/extensions/ublocklite/rulesets/strictblock/chn-0.json +58 -0
  415. package/extensions/ublocklite/rulesets/strictblock/default.json +10 -9
  416. package/extensions/ublocklite/rulesets/strictblock/fra-0.json +27 -4
  417. package/extensions/ublocklite/rulesets/strictblock/idn-0.json +1 -31
  418. package/extensions/ublocklite/rulesets/strictblock/irn-0.json +3 -0
  419. package/extensions/ublocklite/rulesets/strictblock/jpn-1.json +154 -149
  420. package/extensions/ublocklite/rulesets/strictblock/spa-1.json +1 -0
  421. package/extensions/ublocklite/rulesets/strictblock/stevenblack-hosts.json +2347 -4306
  422. package/extensions/ublocklite/rulesets/strictblock/swe-1.json +1 -2
  423. package/extensions/ublocklite/rulesets/strictblock/ukr-0.json +1 -1
  424. package/extensions/ublocklite/rulesets/strictblock/urlhaus-full.json +466 -151
  425. package/extensions/ublocklite/rulesets/urlskip/default.json +7 -0
  426. package/extensions/ublocklite/ublock.zip +0 -0
  427. package/extensions/ublocklite/web_accessible_resources/fingerprint3.js +45 -0
  428. package/extensions/ublocklite/zapper-ui.html +1 -1
  429. package/package.json +8 -8
  430. package/src/config.ts +9 -1
  431. package/src/routes/chromium/tests/pdf.spec.ts +27 -0
  432. package/src/server.ts +31 -47
  433. package/src/utils.ts +30 -6
  434. package/static/docs/swagger.json +10 -10
  435. package/static/docs/swagger.min.json +9 -9
  436. package/extensions/ublocklite/rulesets/scripting/scriptlet/ubol-tests.jsonl-prune-fetch-response.js +0 -613
  437. package/extensions/ublocklite/rulesets/strictblock/openphish-domains.json +0 -37227
@@ -20,102 +20,253 @@
20
20
 
21
21
  */
22
22
 
23
- // ruleset: ubol-tests
23
+ // ruleset: idn-0
24
24
 
25
25
  // Important!
26
26
  // Isolate from global scope
27
27
 
28
28
  // Start of local scope
29
- (function uBOL_jsonlPruneXhrResponse() {
29
+ (function uBOL_preventXhr() {
30
30
 
31
31
  /******************************************************************************/
32
32
 
33
- function jsonlPruneXhrResponse(...args) {
34
- jsonlPruneXhrResponseFn(...args);
33
+ function preventXhr(...args) {
34
+ return preventXhrFn(false, ...args);
35
35
  }
36
36
 
37
- function jsonlPruneXhrResponseFn(
38
- rawPrunePaths = '',
39
- rawNeedlePaths = ''
37
+ function preventXhrFn(
38
+ trusted = false,
39
+ propsToMatch = '',
40
+ directive = ''
40
41
  ) {
42
+ if ( typeof propsToMatch !== 'string' ) { return; }
41
43
  const safe = safeSelf();
42
- const logPrefix = safe.makeLogPrefix('jsonl-prune-xhr-response', rawPrunePaths, rawNeedlePaths);
44
+ const scriptletName = trusted ? 'trusted-prevent-xhr' : 'prevent-xhr';
45
+ const logPrefix = safe.makeLogPrefix(scriptletName, propsToMatch, directive);
43
46
  const xhrInstances = new WeakMap();
44
- const extraArgs = safe.getExtraArgs(Array.from(arguments), 2);
45
- const propNeedles = parsePropertiesToMatchFn(extraArgs.propsToMatch, 'url');
47
+ const propNeedles = parsePropertiesToMatchFn(propsToMatch, 'url');
48
+ const warOrigin = scriptletGlobals.warOrigin;
49
+ const safeDispatchEvent = (xhr, type) => {
50
+ try {
51
+ xhr.dispatchEvent(new Event(type));
52
+ } catch {
53
+ }
54
+ };
55
+ const XHRBefore = XMLHttpRequest.prototype;
46
56
  self.XMLHttpRequest = class extends self.XMLHttpRequest {
47
57
  open(method, url, ...args) {
48
- const xhrDetails = { method, url };
49
- const matched = propNeedles.size === 0 ||
50
- matchObjectPropertiesFn(propNeedles, xhrDetails);
51
- if ( matched ) {
52
- if ( safe.logLevel > 1 && Array.isArray(matched) ) {
53
- safe.uboLog(logPrefix, `Matched "propsToMatch":\n\t${matched.join('\n\t')}`);
54
- }
58
+ xhrInstances.delete(this);
59
+ if ( warOrigin !== undefined && url.startsWith(warOrigin) ) {
60
+ return super.open(method, url, ...args);
61
+ }
62
+ const haystack = { method, url };
63
+ if ( propsToMatch === '' && directive === '' ) {
64
+ safe.uboLog(logPrefix, `Called: ${safe.JSON_stringify(haystack, null, 2)}`);
65
+ return super.open(method, url, ...args);
66
+ }
67
+ if ( matchObjectPropertiesFn(propNeedles, haystack) ) {
68
+ const xhrDetails = Object.assign(haystack, {
69
+ xhr: this,
70
+ defer: args.length === 0 || !!args[0],
71
+ directive,
72
+ headers: {
73
+ 'date': '',
74
+ 'content-type': '',
75
+ 'content-length': '',
76
+ },
77
+ url: haystack.url,
78
+ props: {
79
+ response: { value: '' },
80
+ responseText: { value: '' },
81
+ responseXML: { value: null },
82
+ },
83
+ });
55
84
  xhrInstances.set(this, xhrDetails);
56
85
  }
57
86
  return super.open(method, url, ...args);
58
87
  }
59
- get response() {
60
- const innerResponse = super.response;
88
+ send(...args) {
61
89
  const xhrDetails = xhrInstances.get(this);
62
90
  if ( xhrDetails === undefined ) {
63
- return innerResponse;
91
+ return super.send(...args);
92
+ }
93
+ xhrDetails.headers['date'] = (new Date()).toUTCString();
94
+ let xhrText = '';
95
+ switch ( this.responseType ) {
96
+ case 'arraybuffer':
97
+ xhrDetails.props.response.value = new ArrayBuffer(0);
98
+ xhrDetails.headers['content-type'] = 'application/octet-stream';
99
+ break;
100
+ case 'blob':
101
+ xhrDetails.props.response.value = new Blob([]);
102
+ xhrDetails.headers['content-type'] = 'application/octet-stream';
103
+ break;
104
+ case 'document': {
105
+ const parser = new DOMParser();
106
+ const doc = parser.parseFromString('', 'text/html');
107
+ xhrDetails.props.response.value = doc;
108
+ xhrDetails.props.responseXML.value = doc;
109
+ xhrDetails.headers['content-type'] = 'text/html';
110
+ break;
64
111
  }
65
- const responseLength = typeof innerResponse === 'string'
66
- ? innerResponse.length
67
- : undefined;
68
- if ( xhrDetails.lastResponseLength !== responseLength ) {
69
- xhrDetails.response = undefined;
70
- xhrDetails.lastResponseLength = responseLength;
112
+ case 'json':
113
+ xhrDetails.props.response.value = {};
114
+ xhrDetails.props.responseText.value = '{}';
115
+ xhrDetails.headers['content-type'] = 'application/json';
116
+ break;
117
+ default: {
118
+ if ( directive === '' ) { break; }
119
+ xhrText = generateContentFn(trusted, xhrDetails.directive);
120
+ if ( xhrText instanceof Promise ) {
121
+ xhrText = xhrText.then(text => {
122
+ xhrDetails.props.response.value = text;
123
+ xhrDetails.props.responseText.value = text;
124
+ });
125
+ } else {
126
+ xhrDetails.props.response.value = xhrText;
127
+ xhrDetails.props.responseText.value = xhrText;
128
+ }
129
+ xhrDetails.headers['content-type'] = 'text/plain';
130
+ break;
71
131
  }
72
- if ( xhrDetails.response !== undefined ) {
73
- return xhrDetails.response;
74
132
  }
75
- if ( typeof innerResponse !== 'string' ) {
76
- return (xhrDetails.response = innerResponse);
133
+ if ( xhrDetails.defer === false ) {
134
+ xhrDetails.headers['content-length'] = `${xhrDetails.props.response.value}`.length;
135
+ Object.defineProperties(xhrDetails.xhr, {
136
+ readyState: { value: 4 },
137
+ responseURL: { value: xhrDetails.url },
138
+ status: { value: 200 },
139
+ statusText: { value: 'OK' },
140
+ });
141
+ Object.defineProperties(xhrDetails.xhr, xhrDetails.props);
142
+ return;
77
143
  }
78
- const outerResponse = jsonlPruneFn(innerResponse, rawPrunePaths, rawNeedlePaths);
79
- if ( outerResponse !== innerResponse ) {
80
- safe.uboLog(logPrefix, 'Pruned');
144
+ Promise.resolve(xhrText).then(( ) => xhrDetails).then(details => {
145
+ Object.defineProperties(details.xhr, {
146
+ readyState: { value: 1, configurable: true },
147
+ responseURL: { value: xhrDetails.url },
148
+ });
149
+ safeDispatchEvent(details.xhr, 'readystatechange');
150
+ return details;
151
+ }).then(details => {
152
+ xhrDetails.headers['content-length'] = `${details.props.response.value}`.length;
153
+ Object.defineProperties(details.xhr, {
154
+ readyState: { value: 2, configurable: true },
155
+ status: { value: 200 },
156
+ statusText: { value: 'OK' },
157
+ });
158
+ safeDispatchEvent(details.xhr, 'readystatechange');
159
+ return details;
160
+ }).then(details => {
161
+ Object.defineProperties(details.xhr, {
162
+ readyState: { value: 3, configurable: true },
163
+ });
164
+ Object.defineProperties(details.xhr, details.props);
165
+ safeDispatchEvent(details.xhr, 'readystatechange');
166
+ return details;
167
+ }).then(details => {
168
+ Object.defineProperties(details.xhr, {
169
+ readyState: { value: 4 },
170
+ });
171
+ safeDispatchEvent(details.xhr, 'readystatechange');
172
+ safeDispatchEvent(details.xhr, 'load');
173
+ safeDispatchEvent(details.xhr, 'loadend');
174
+ safe.uboLog(logPrefix, `Prevented with response:\n${details.xhr.response}`);
175
+ });
176
+ }
177
+ getResponseHeader(headerName) {
178
+ const xhrDetails = xhrInstances.get(this);
179
+ if ( xhrDetails === undefined || this.readyState < this.HEADERS_RECEIVED ) {
180
+ return super.getResponseHeader(headerName);
81
181
  }
82
- return (xhrDetails.response = outerResponse);
182
+ const value = xhrDetails.headers[headerName.toLowerCase()];
183
+ if ( value !== undefined && value !== '' ) { return value; }
184
+ return null;
83
185
  }
84
- get responseText() {
85
- const response = this.response;
86
- return typeof response !== 'string'
87
- ? super.responseText
88
- : response;
186
+ getAllResponseHeaders() {
187
+ const xhrDetails = xhrInstances.get(this);
188
+ if ( xhrDetails === undefined || this.readyState < this.HEADERS_RECEIVED ) {
189
+ return super.getAllResponseHeaders();
190
+ }
191
+ const out = [];
192
+ for ( const [ name, value ] of Object.entries(xhrDetails.headers) ) {
193
+ if ( !value ) { continue; }
194
+ out.push(`${name}: ${value}`);
195
+ }
196
+ if ( out.length !== 0 ) { out.push(''); }
197
+ return out.join('\r\n');
89
198
  }
90
199
  };
200
+ self.XMLHttpRequest.prototype.open.toString = function() {
201
+ return XHRBefore.open.toString();
202
+ };
203
+ self.XMLHttpRequest.prototype.send.toString = function() {
204
+ return XHRBefore.send.toString();
205
+ };
206
+ self.XMLHttpRequest.prototype.getResponseHeader.toString = function() {
207
+ return XHRBefore.getResponseHeader.toString();
208
+ };
209
+ self.XMLHttpRequest.prototype.getAllResponseHeaders.toString = function() {
210
+ return XHRBefore.getAllResponseHeaders.toString();
211
+ };
91
212
  }
92
213
 
93
- function jsonlPruneFn(
94
- text = '',
95
- rawPrunePaths = '',
96
- rawNeedlePaths = ''
97
- ) {
214
+ function generateContentFn(trusted, directive) {
98
215
  const safe = safeSelf();
99
- const linesBefore = text.split(/\n+/);
100
- const linesAfter = [];
101
- for ( const lineBefore of linesBefore ) {
102
- let objBefore;
103
- try {
104
- objBefore = safe.JSON_parse(lineBefore);
105
- } catch {
106
- }
107
- if ( typeof objBefore !== 'object' ) {
108
- linesAfter.push(lineBefore);
109
- continue;
110
- }
111
- const objAfter = objectPruneFn(objBefore, rawPrunePaths, rawNeedlePaths);
112
- if ( typeof objAfter !== 'object' ) {
113
- linesAfter.push(lineBefore);
114
- continue;
216
+ const randomize = len => {
217
+ const chunks = [];
218
+ let textSize = 0;
219
+ do {
220
+ const s = safe.Math_random().toString(36).slice(2);
221
+ chunks.push(s);
222
+ textSize += s.length;
115
223
  }
116
- linesAfter.push(safe.JSON_stringifyFn(objAfter));
224
+ while ( textSize < len );
225
+ return chunks.join(' ').slice(0, len);
226
+ };
227
+ if ( directive === 'true' ) {
228
+ return randomize(10);
229
+ }
230
+ if ( directive === 'emptyObj' ) {
231
+ return '{}';
117
232
  }
118
- return linesAfter.join('\n');
233
+ if ( directive === 'emptyArr' ) {
234
+ return '[]';
235
+ }
236
+ if ( directive === 'emptyStr' ) {
237
+ return '';
238
+ }
239
+ if ( directive.startsWith('length:') ) {
240
+ const match = /^length:(\d+)(?:-(\d+))?$/.exec(directive);
241
+ if ( match === null ) { return ''; }
242
+ const min = parseInt(match[1], 10);
243
+ const extent = safe.Math_max(parseInt(match[2], 10) || 0, min) - min;
244
+ const len = safe.Math_min(min + extent * safe.Math_random(), 500000);
245
+ return randomize(len | 0);
246
+ }
247
+ if ( directive.startsWith('war:') ) {
248
+ if ( scriptletGlobals.warOrigin === undefined ) { return ''; }
249
+ return new Promise(resolve => {
250
+ const warOrigin = scriptletGlobals.warOrigin;
251
+ const warName = directive.slice(4);
252
+ const fullpath = [ warOrigin, '/', warName ];
253
+ const warSecret = scriptletGlobals.warSecret;
254
+ if ( warSecret !== undefined ) {
255
+ fullpath.push('?secret=', warSecret);
256
+ }
257
+ const warXHR = new safe.XMLHttpRequest();
258
+ warXHR.responseType = 'text';
259
+ warXHR.onloadend = ev => {
260
+ resolve(ev.target.responseText || '');
261
+ };
262
+ warXHR.open('GET', fullpath.join(''));
263
+ warXHR.send();
264
+ }).catch(( ) => '');
265
+ }
266
+ if ( trusted ) {
267
+ return directive;
268
+ }
269
+ return '';
119
270
  }
120
271
 
121
272
  function matchObjectPropertiesFn(propNeedles, ...objs) {
@@ -349,181 +500,11 @@ function safeSelf() {
349
500
  return safe;
350
501
  }
351
502
 
352
- function objectPruneFn(
353
- obj,
354
- rawPrunePaths,
355
- rawNeedlePaths,
356
- stackNeedleDetails = { matchAll: true },
357
- extraArgs = {}
358
- ) {
359
- if ( typeof rawPrunePaths !== 'string' ) { return; }
360
- const safe = safeSelf();
361
- const prunePaths = rawPrunePaths !== ''
362
- ? safe.String_split.call(rawPrunePaths, / +/)
363
- : [];
364
- const needlePaths = prunePaths.length !== 0 && rawNeedlePaths !== ''
365
- ? safe.String_split.call(rawNeedlePaths, / +/)
366
- : [];
367
- if ( stackNeedleDetails.matchAll !== true ) {
368
- if ( matchesStackTraceFn(stackNeedleDetails, extraArgs.logstack) === false ) {
369
- return;
370
- }
371
- }
372
- if ( objectPruneFn.mustProcess === undefined ) {
373
- objectPruneFn.mustProcess = (root, needlePaths) => {
374
- for ( const needlePath of needlePaths ) {
375
- if ( objectFindOwnerFn(root, needlePath) === false ) {
376
- return false;
377
- }
378
- }
379
- return true;
380
- };
381
- }
382
- if ( prunePaths.length === 0 ) { return; }
383
- let outcome = 'nomatch';
384
- if ( objectPruneFn.mustProcess(obj, needlePaths) ) {
385
- for ( const path of prunePaths ) {
386
- if ( objectFindOwnerFn(obj, path, true) ) {
387
- outcome = 'match';
388
- }
389
- }
390
- }
391
- if ( outcome === 'match' ) { return obj; }
392
- }
393
-
394
- function matchesStackTraceFn(
395
- needleDetails,
396
- logLevel = ''
397
- ) {
398
- const safe = safeSelf();
399
- const exceptionToken = getExceptionTokenFn();
400
- const error = new safe.Error(exceptionToken);
401
- const docURL = new URL(self.location.href);
402
- docURL.hash = '';
403
- // Normalize stack trace
404
- const reLine = /(.*?@)?(\S+)(:\d+):\d+\)?$/;
405
- const lines = [];
406
- for ( let line of safe.String_split.call(error.stack, /[\n\r]+/) ) {
407
- if ( line.includes(exceptionToken) ) { continue; }
408
- line = line.trim();
409
- const match = safe.RegExp_exec.call(reLine, line);
410
- if ( match === null ) { continue; }
411
- let url = match[2];
412
- if ( url.startsWith('(') ) { url = url.slice(1); }
413
- if ( url === docURL.href ) {
414
- url = 'inlineScript';
415
- } else if ( url.startsWith('<anonymous>') ) {
416
- url = 'injectedScript';
417
- }
418
- let fn = match[1] !== undefined
419
- ? match[1].slice(0, -1)
420
- : line.slice(0, match.index).trim();
421
- if ( fn.startsWith('at') ) { fn = fn.slice(2).trim(); }
422
- let rowcol = match[3];
423
- lines.push(' ' + `${fn} ${url}${rowcol}:1`.trim());
424
- }
425
- lines[0] = `stackDepth:${lines.length-1}`;
426
- const stack = lines.join('\t');
427
- const r = needleDetails.matchAll !== true &&
428
- safe.testPattern(needleDetails, stack);
429
- if (
430
- logLevel === 'all' ||
431
- logLevel === 'match' && r ||
432
- logLevel === 'nomatch' && !r
433
- ) {
434
- safe.uboLog(stack.replace(/\t/g, '\n'));
435
- }
436
- return r;
437
- }
438
-
439
- function objectFindOwnerFn(
440
- root,
441
- path,
442
- prune = false
443
- ) {
444
- const safe = safeSelf();
445
- let owner = root;
446
- let chain = path;
447
- for (;;) {
448
- if ( typeof owner !== 'object' || owner === null ) { return false; }
449
- const pos = chain.indexOf('.');
450
- if ( pos === -1 ) {
451
- if ( prune === false ) {
452
- return safe.Object_hasOwn(owner, chain);
453
- }
454
- let modified = false;
455
- if ( chain === '*' ) {
456
- for ( const key in owner ) {
457
- if ( safe.Object_hasOwn(owner, key) === false ) { continue; }
458
- delete owner[key];
459
- modified = true;
460
- }
461
- } else if ( safe.Object_hasOwn(owner, chain) ) {
462
- delete owner[chain];
463
- modified = true;
464
- }
465
- return modified;
466
- }
467
- const prop = chain.slice(0, pos);
468
- const next = chain.slice(pos + 1);
469
- let found = false;
470
- if ( prop === '[-]' && Array.isArray(owner) ) {
471
- let i = owner.length;
472
- while ( i-- ) {
473
- if ( objectFindOwnerFn(owner[i], next) === false ) { continue; }
474
- owner.splice(i, 1);
475
- found = true;
476
- }
477
- return found;
478
- }
479
- if ( prop === '{-}' && owner instanceof Object ) {
480
- for ( const key of Object.keys(owner) ) {
481
- if ( objectFindOwnerFn(owner[key], next) === false ) { continue; }
482
- delete owner[key];
483
- found = true;
484
- }
485
- return found;
486
- }
487
- if (
488
- prop === '[]' && Array.isArray(owner) ||
489
- prop === '{}' && owner instanceof Object ||
490
- prop === '*' && owner instanceof Object
491
- ) {
492
- for ( const key of Object.keys(owner) ) {
493
- if (objectFindOwnerFn(owner[key], next, prune) === false ) { continue; }
494
- found = true;
495
- }
496
- return found;
497
- }
498
- if ( safe.Object_hasOwn(owner, prop) === false ) { return false; }
499
- owner = owner[prop];
500
- chain = chain.slice(pos + 1);
501
- }
502
- }
503
-
504
- function getExceptionTokenFn() {
505
- const token = getRandomTokenFn();
506
- const oe = self.onerror;
507
- self.onerror = function(msg, ...args) {
508
- if ( typeof msg === 'string' && msg.includes(token) ) { return true; }
509
- if ( oe instanceof Function ) {
510
- return oe.call(this, msg, ...args);
511
- }
512
- }.bind();
513
- return token;
514
- }
515
-
516
- function getRandomTokenFn() {
517
- const safe = safeSelf();
518
- return safe.String_fromCharCode(Date.now() % 26 + 97) +
519
- safe.Math_floor(safe.Math_random() * 982451653 + 982451653).toString(36);
520
- }
521
-
522
503
  /******************************************************************************/
523
504
 
524
505
  const scriptletGlobals = {}; // eslint-disable-line
525
- const argsList = [["b"]];
526
- const hostnamesMap = new Map([["ublockorigin.github.io",0],["localhost",0]]);
506
+ const argsList = [["googlesyndication"]];
507
+ const hostnamesMap = new Map([["jurnalistekno.id",0],["tutwuri.id",0]]);
527
508
  const exceptionsMap = new Map([]);
528
509
  const hasEntities = false;
529
510
  const hasAncestors = false;
@@ -591,7 +572,7 @@ if ( hasAncestors ) {
591
572
  // Apply scriplets
592
573
  for ( const i of todoIndices ) {
593
574
  if ( tonotdoIndices.has(i) ) { continue; }
594
- try { jsonlPruneXhrResponse(...argsList[i]); }
575
+ try { preventXhr(...argsList[i]); }
595
576
  catch { }
596
577
  }
597
578
 
@@ -103,7 +103,7 @@ function runAt(fn, when) {
103
103
  const tokens = Array.isArray(state) ? state : [ state ];
104
104
  for ( const token of tokens ) {
105
105
  const prop = `${token}`;
106
- if ( targets.hasOwnProperty(prop) === false ) { continue; }
106
+ if ( Object.hasOwn(targets, prop) === false ) { continue; }
107
107
  return targets[prop];
108
108
  }
109
109
  return 0;
@@ -156,7 +156,7 @@ function runAt(fn, when) {
156
156
  const tokens = Array.isArray(state) ? state : [ state ];
157
157
  for ( const token of tokens ) {
158
158
  const prop = `${token}`;
159
- if ( targets.hasOwnProperty(prop) === false ) { continue; }
159
+ if ( Object.hasOwn(targets, prop) === false ) { continue; }
160
160
  return targets[prop];
161
161
  }
162
162
  return 0;
@@ -368,8 +368,8 @@ function safeSelf() {
368
368
  /******************************************************************************/
369
369
 
370
370
  const scriptletGlobals = {}; // eslint-disable-line
371
- const argsList = [["script","adblock"],["script","hargamenu"],["script","modalAdsPopup"],["script","replaceState","condition","shope.ee"],["script","showModal"]];
372
- const hostnamesMap = new Map([["almaftuchin.com",0],["wisatalova.com",1],["katadata.co.id",2],["gramedia.com",3],["carisinyal.com",4]]);
371
+ const argsList = [["script","/decodeURIComponent\\(escape|fairAdblock/"],["script","adblock"],["script","hargamenu"],["script","modalAdsPopup"],["script","replaceState","condition","shope.ee"],["script","showModal"]];
372
+ const hostnamesMap = new Map([["3gpterbaru.com",0],["duniaseksi.com",0],["almaftuchin.com",1],["wisatalova.com",2],["katadata.co.id",3],["gramedia.com",4],["carisinyal.com",5]]);
373
373
  const exceptionsMap = new Map([]);
374
374
  const hasEntities = false;
375
375
  const hasAncestors = false;
@@ -370,8 +370,8 @@ function getRandomTokenFn() {
370
370
  /******************************************************************************/
371
371
 
372
372
  const scriptletGlobals = {}; // eslint-disable-line
373
- const argsList = [["vc_url"],["watermarkAdData"],["document.onclick","checkCookie"],["disableSelection","reEnable"],["document.onselectstart","killCopy"],["eif"],["document.onclick","Hamisheonlinepaps"],["jQuery","Drupal"],["jQuery","contextmenu"],["reEnable"],["document.oncontextmenu"],["jQuery","wccp_pro"],["clear_body_at_all_for_extentions"],["pa_vc_url"],["document.write","renderAds"]];
374
- const hostnamesMap = new Map([["androidparsi.ir",0],["dailymobile.ir",0],["tarfandha.org",0],["alaatv.com",1],["bandmoviez.one",2],["coffeeapps.ir",3],["fileboro.com",4],["farnet.io",5],["hamisheonline.com",6],["iranstar.com",7],["itarfand.com",8],["jafekri.com",[9,10,11,12]],["jeyran.net",10],["searchline.ir",10],["takmili.com",10],["vakil.net",10],["mybia4music.com",13],["p30konkor.com",3],["sclinic.ir",3],["tabnak.ir",14]]);
373
+ const argsList = [["disableSelection","reEnable"],["vc_url"],["watermarkAdData"],["document.onclick","checkCookie"],["document.onselectstart","killCopy"],["eif"],["document.onclick","Hamisheonlinepaps"],["jQuery","Drupal"],["jQuery","contextmenu"],["reEnable"],["document.oncontextmenu"],["jQuery","wccp_pro"],["clear_body_at_all_for_extentions"],["pa_vc_url"],["document.write","renderAds"]];
374
+ const hostnamesMap = new Map([["anesthesianotes.ir",0],["coffeeapps.ir",0],["androidparsi.ir",1],["dailymobile.ir",1],["tarfandha.org",1],["alaatv.com",2],["bandmoviez.one",3],["fileboro.com",4],["farnet.io",5],["hamisheonline.com",6],["iranstar.com",7],["itarfand.com",8],["jafekri.com",[9,10,11,12]],["jeyran.net",10],["searchline.ir",10],["takmili.com",10],["vakil.net",10],["mybia4music.com",13],["p30konkor.com",0],["sclinic.ir",0],["tabnak.ir",14]]);
375
375
  const exceptionsMap = new Map([]);
376
376
  const hasEntities = false;
377
377
  const hasAncestors = false;
@@ -289,7 +289,7 @@ function getRandomTokenFn() {
289
289
 
290
290
  const scriptletGlobals = {}; // eslint-disable-line
291
291
  const argsList = [["nocontext"],["vc_url"],["show_wpcp_message"],["fixedPostGroups"],["tinPa"],["SGPB_POPUP_PARAMS"],["needpop"],["window.LOCO_DATA.copyrightTranslation"]];
292
- const hostnamesMap = new Map([["coffeeapps.ir",0],["p30konkor.com",0],["sclinic.ir",0],["nab-music.com",1],["shahanmusic.ir",2],["saednews.com",3],["tinroid.ir",4],["tak3da.com",5],["yeknet.ir",6],["oila.tj",7]]);
292
+ const hostnamesMap = new Map([["anesthesianotes.ir",0],["coffeeapps.ir",0],["p30konkor.com",0],["sclinic.ir",0],["nab-music.com",1],["shahanmusic.ir",2],["saednews.com",3],["tinroid.ir",4],["tak3da.com",5],["yeknet.ir",6],["oila.tj",7]]);
293
293
  const exceptionsMap = new Map([]);
294
294
  const hasEntities = false;
295
295
  const hasAncestors = false;
@@ -200,7 +200,7 @@ function runAt(fn, when) {
200
200
  const tokens = Array.isArray(state) ? state : [ state ];
201
201
  for ( const token of tokens ) {
202
202
  const prop = `${token}`;
203
- if ( targets.hasOwnProperty(prop) === false ) { continue; }
203
+ if ( Object.hasOwn(targets, prop) === false ) { continue; }
204
204
  return targets[prop];
205
205
  }
206
206
  return 0;
@@ -156,7 +156,7 @@ function runAt(fn, when) {
156
156
  const tokens = Array.isArray(state) ? state : [ state ];
157
157
  for ( const token of tokens ) {
158
158
  const prop = `${token}`;
159
- if ( targets.hasOwnProperty(prop) === false ) { continue; }
159
+ if ( Object.hasOwn(targets, prop) === false ) { continue; }
160
160
  return targets[prop];
161
161
  }
162
162
  return 0;
@@ -460,8 +460,8 @@ function urlSkip(url, blocked, steps, directive = {}) {
460
460
  /******************************************************************************/
461
461
 
462
462
  const scriptletGlobals = {}; // eslint-disable-line
463
- const argsList = [["a[href^=\"/goto/\"]","?url -base64"],["a[href^=\"https://hamtamovie.nl/dl/?url=\"]","?url"],["a[href^=\"https://l.vrgl.ir/r?\"][href*=\"&l=http\"]","?l"],["div#link-container > a[data-sentry-element=\"Link\"]","?url"]];
464
- const hostnamesMap = new Map([["fontchi.com",0],["hamtamovie.nl",1],["virgool.io",2],["zarebin.ir",3]]);
463
+ const argsList = [["a[href^=\"/goto/\"]","?url -base64"],["a[href^=\"https://hamtamovie.nl/dl/?url=\"]","?url"],["a[href^=\"https://l.vrgl.ir/r?\"][href*=\"&l=http\"]","?l"],["div#link-container > a[data-sentry-element=\"Link\"]","?url"],["a[variant=\"contained\"][href^=\"https://api2.zoomit.ir/catalog/store-links/\"][href*=\"/click?url=http\"]","?url"]];
464
+ const hostnamesMap = new Map([["fontchi.com",0],["hamtamovie.nl",1],["virgool.io",2],["zarebin.ir",3],["zoomit.ir",4]]);
465
465
  const exceptionsMap = new Map([]);
466
466
  const hasEntities = false;
467
467
  const hasAncestors = false;
@@ -112,7 +112,7 @@ function runAt(fn, when) {
112
112
  const tokens = Array.isArray(state) ? state : [ state ];
113
113
  for ( const token of tokens ) {
114
114
  const prop = `${token}`;
115
- if ( targets.hasOwnProperty(prop) === false ) { continue; }
115
+ if ( Object.hasOwn(targets, prop) === false ) { continue; }
116
116
  return targets[prop];
117
117
  }
118
118
  return 0;
@@ -156,7 +156,7 @@ function runAt(fn, when) {
156
156
  const tokens = Array.isArray(state) ? state : [ state ];
157
157
  for ( const token of tokens ) {
158
158
  const prop = `${token}`;
159
- if ( targets.hasOwnProperty(prop) === false ) { continue; }
159
+ if ( Object.hasOwn(targets, prop) === false ) { continue; }
160
160
  return targets[prop];
161
161
  }
162
162
  return 0;
@@ -322,7 +322,7 @@ function runAt(fn, when) {
322
322
  const tokens = Array.isArray(state) ? state : [ state ];
323
323
  for ( const token of tokens ) {
324
324
  const prop = `${token}`;
325
- if ( targets.hasOwnProperty(prop) === false ) { continue; }
325
+ if ( Object.hasOwn(targets, prop) === false ) { continue; }
326
326
  return targets[prop];
327
327
  }
328
328
  return 0;
@@ -196,7 +196,7 @@ function runAt(fn, when) {
196
196
  const tokens = Array.isArray(state) ? state : [ state ];
197
197
  for ( const token of tokens ) {
198
198
  const prop = `${token}`;
199
- if ( targets.hasOwnProperty(prop) === false ) { continue; }
199
+ if ( Object.hasOwn(targets, prop) === false ) { continue; }
200
200
  return targets[prop];
201
201
  }
202
202
  return 0;
@@ -200,7 +200,7 @@ function runAt(fn, when) {
200
200
  const tokens = Array.isArray(state) ? state : [ state ];
201
201
  for ( const token of tokens ) {
202
202
  const prop = `${token}`;
203
- if ( targets.hasOwnProperty(prop) === false ) { continue; }
203
+ if ( Object.hasOwn(targets, prop) === false ) { continue; }
204
204
  return targets[prop];
205
205
  }
206
206
  return 0;
@@ -196,7 +196,7 @@ function runAt(fn, when) {
196
196
  const tokens = Array.isArray(state) ? state : [ state ];
197
197
  for ( const token of tokens ) {
198
198
  const prop = `${token}`;
199
- if ( targets.hasOwnProperty(prop) === false ) { continue; }
199
+ if ( Object.hasOwn(targets, prop) === false ) { continue; }
200
200
  return targets[prop];
201
201
  }
202
202
  return 0;