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