@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
@@ -103,6 +103,13 @@
103
103
  "-base64"
104
104
  ]
105
105
  },
106
+ {
107
+ "re": "^[a-z-]+://(?:[^/?#]+\\.)?migmig\\.affilio\\.ir/api/v1/click(?:[^%.0-9a-z_-]|$)",
108
+ "steps": [
109
+ "?b64",
110
+ "-base64"
111
+ ]
112
+ },
106
113
  {
107
114
  "re": "^[a-z-]+://(?:[^/?#]+\\.)?freex2line\\.online/\\S*?/\\?redirect",
108
115
  "steps": [
Binary file
@@ -0,0 +1,45 @@
1
+ /*******************************************************************************
2
+
3
+ uBlock Origin - a browser extension to block requests.
4
+ Copyright (C) 2022-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
+ (function() {
23
+ 'use strict';
24
+ const visitorId = (( ) => {
25
+ let id = '';
26
+ for ( let i = 0; i < 8; i++ ) {
27
+ id += (Math.random() * 0x10000 + 0x1000 | 0).toString(16).slice(-4);
28
+ }
29
+ return id;
30
+ })();
31
+ const FingerprintJS = class {
32
+ static hashComponents() {
33
+ return visitorId;
34
+ }
35
+ static load() {
36
+ return Promise.resolve(new FingerprintJS());
37
+ }
38
+ get() {
39
+ return Promise.resolve({
40
+ visitorId,
41
+ });
42
+ }
43
+ };
44
+ window.FingerprintJS = FingerprintJS;
45
+ })();
@@ -10,7 +10,7 @@
10
10
  </head>
11
11
 
12
12
  <body>
13
- <aside style="right: 2px; bottom: 2px;">
13
+ <aside>
14
14
  <div id="quit" data-i18n-title="zapperTipQuit">
15
15
  <svg viewBox="0 0 64 64"><path d="M16 16L48 48M16 48L48 16" /></svg>
16
16
  </div>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@browserless.io/browserless",
3
- "version": "2.26.1",
3
+ "version": "2.27.0",
4
4
  "license": "SSPL",
5
5
  "description": "The browserless platform",
6
6
  "author": "browserless.io",
@@ -55,7 +55,7 @@
55
55
  "get-port": "^7.1.0",
56
56
  "gradient-string": "^3.0.0",
57
57
  "http-proxy": "^1.18.1",
58
- "lighthouse": "^12.4.0",
58
+ "lighthouse": "^12.5.1",
59
59
  "micromatch": "^4.0.8",
60
60
  "playwright-1.47": "npm:playwright-core@1.47.2",
61
61
  "playwright-1.48": "npm:playwright-core@1.48.2",
@@ -70,21 +70,21 @@
70
70
  "tar-fs": "^3.0.8"
71
71
  },
72
72
  "optionalDependencies": {
73
- "@types/chai": "^5.2.0",
73
+ "@types/chai": "^5.2.1",
74
74
  "@types/debug": "^4.1.12",
75
75
  "@types/gradient-string": "^1.1.6",
76
76
  "@types/http-proxy": "^1.17.16",
77
77
  "@types/micromatch": "^4.0.9",
78
78
  "@types/mocha": "^10.0.10",
79
- "@types/node": "^22.13.11",
79
+ "@types/node": "^22.13.15",
80
80
  "@types/sinon": "^17.0.4",
81
- "@typescript-eslint/eslint-plugin": "^8.27.0",
82
- "@typescript-eslint/parser": "^8.27.0",
81
+ "@typescript-eslint/eslint-plugin": "^8.29.0",
82
+ "@typescript-eslint/parser": "^8.29.0",
83
83
  "assert": "^2.0.0",
84
84
  "chai": "^5.2.0",
85
85
  "cross-env": "^7.0.3",
86
86
  "env-cmd": "^10.1.0",
87
- "esbuild": "^0.25.1",
87
+ "esbuild": "^0.25.2",
88
88
  "esbuild-plugin-polyfill-node": "^0.3.0",
89
89
  "eslint": "^9.23.0",
90
90
  "extract-zip": "^2.0.1",
@@ -93,7 +93,7 @@
93
93
  "mocha": "^11.1.0",
94
94
  "move-file": "^3.1.0",
95
95
  "prettier": "^3.5.3",
96
- "sinon": "^19.0.4",
96
+ "sinon": "^20.0.0",
97
97
  "ts-node": "^10.9.2",
98
98
  "typescript": "^5.7.3",
99
99
  "typescript-json-schema": "^0.65.1"
package/src/config.ts CHANGED
@@ -17,7 +17,6 @@ const __dirname = path.dirname(fileURLToPath(import.meta.url));
17
17
  /**
18
18
  * configs to add:
19
19
  * EXIT_ON_HEALTH_FAILURE
20
- * MAX_PAYLOAD_SIZE
21
20
  */
22
21
 
23
22
  enum oldConfig {
@@ -176,6 +175,7 @@ export class Config extends EventEmitter {
176
175
  protected corsMaxAge = +(process.env.CORS_MAX_AGE ?? '2592000');
177
176
  protected maxCpu = +(process.env.MAX_CPU_PERCENT ?? '99');
178
177
  protected maxMemory = +(process.env.MAX_MEMORY_PERCENT ?? '99');
178
+ protected maxPayloadSize = +(process.env.MAX_PAYLOAD_SIZE ?? '10485760'); // Default 10MB
179
179
  protected healthCheck = !!parseEnvVars(false, 'HEALTH');
180
180
  protected failedHealthURL = process.env.FAILED_HEALTH_URL ?? null;
181
181
  protected queueAlertURL = process.env.QUEUE_ALERT_URL ?? null;
@@ -251,6 +251,9 @@ export class Config extends EventEmitter {
251
251
  public getMemoryLimit(): number {
252
252
  return this.maxMemory;
253
253
  }
254
+ public getMaxPayloadSize(): number {
255
+ return this.maxPayloadSize;
256
+ }
254
257
  public getHealthChecksEnabled(): boolean {
255
258
  return this.healthCheck;
256
259
  }
@@ -410,6 +413,11 @@ export class Config extends EventEmitter {
410
413
  return (this.maxMemory = limit);
411
414
  }
412
415
 
416
+ public setMaxPayloadSize(limit: number): number {
417
+ this.emit('maxPayloadSize', limit);
418
+ return (this.maxPayloadSize = limit);
419
+ }
420
+
413
421
  public enableHealthChecks(enable: boolean): boolean {
414
422
  this.emit('healthCheck', enable);
415
423
  return (this.healthCheck = enable);
@@ -389,4 +389,31 @@ describe('/chromium/pdf API', function () {
389
389
  expect(res.status).to.equal(200);
390
390
  });
391
391
  });
392
+
393
+ it('returns 400 when payload size exceeds maximum allowed size', async () => {
394
+ const config = new Config();
395
+ config.setToken('browserless');
396
+ config.setMaxPayloadSize(100); // Set a very small max payload size for testing
397
+ const metrics = new Metrics();
398
+ await start({ config, metrics });
399
+
400
+ // Create a large payload that exceeds the 100 byte limit
401
+ const body = {
402
+ html: 'a'.repeat(200), // Create a 200 byte string
403
+ };
404
+
405
+ await fetch('http://localhost:3000/chromium/pdf?token=browserless', {
406
+ body: JSON.stringify(body),
407
+ headers: {
408
+ 'content-type': 'application/json',
409
+ },
410
+ method: 'POST',
411
+ }).then(async (res) => {
412
+ const errorText = await res.text();
413
+ console.log(errorText);
414
+ expect(res.status).to.equal(400);
415
+ expect(errorText).to.include('Request payload size');
416
+ expect(errorText).to.include('exceeds maximum allowed size');
417
+ });
418
+ });
392
419
  });
package/src/server.ts CHANGED
@@ -60,6 +60,32 @@ export class HTTPServer extends EventEmitter {
60
60
  );
61
61
  }
62
62
 
63
+ protected handleErrorRequest(e: Error, res: Response | stream.Duplex) {
64
+ if (e instanceof BadRequest) {
65
+ return writeResponse(res, 400, e.message);
66
+ }
67
+
68
+ if (e instanceof NotFound) {
69
+ return writeResponse(res, 404, e.message);
70
+ }
71
+
72
+ if (e instanceof Unauthorized) {
73
+ return writeResponse(res, 401, e.message);
74
+ }
75
+
76
+ if (e instanceof TooManyRequests) {
77
+ return writeResponse(res, 429, e.message);
78
+ }
79
+
80
+ if (e instanceof Timeout) {
81
+ return writeResponse(res, 408, e.message);
82
+ }
83
+
84
+ this.logger.error(`Error handling request: ${e}\n${e.stack}`);
85
+
86
+ return writeResponse(res, 500, e.toString());
87
+ }
88
+
63
89
  protected onHTTPUnauthorized(_req: Request, res: Response) {
64
90
  this.logger.error(
65
91
  `HTTP request is not properly authorized, responding with 401`,
@@ -177,7 +203,9 @@ export class HTTPServer extends EventEmitter {
177
203
  }
178
204
  }
179
205
 
180
- const body = await readBody(req);
206
+ const body = await readBody(req, this.config.getMaxPayloadSize()).catch(
207
+ (e) => this.handleErrorRequest(e, res),
208
+ );
181
209
  req.body = body;
182
210
  req.queryParams = queryParamsToObject(req.parsed.searchParams);
183
211
 
@@ -285,29 +313,7 @@ export class HTTPServer extends EventEmitter {
285
313
  .then(() => {
286
314
  this.logger.trace('HTTP connection complete');
287
315
  })
288
- .catch((e) => {
289
- if (e instanceof BadRequest) {
290
- return writeResponse(res, 400, e.message);
291
- }
292
-
293
- if (e instanceof NotFound) {
294
- return writeResponse(res, 404, e.message);
295
- }
296
-
297
- if (e instanceof Unauthorized) {
298
- return writeResponse(res, 401, e.message);
299
- }
300
-
301
- if (e instanceof TooManyRequests) {
302
- return writeResponse(res, 429, e.message);
303
- }
304
-
305
- if (e instanceof Timeout) {
306
- return writeResponse(res, 408, e.message);
307
- }
308
-
309
- return writeResponse(res, 500, e.toString());
310
- });
316
+ .catch((e) => this.handleErrorRequest(e, res));
311
317
  }
312
318
 
313
319
  protected async handleWebSocket(
@@ -394,29 +400,7 @@ export class HTTPServer extends EventEmitter {
394
400
  .then(() => {
395
401
  this.logger.trace('Websocket connection complete');
396
402
  })
397
- .catch((e) => {
398
- if (e instanceof BadRequest) {
399
- return writeResponse(socket, 400, e.message);
400
- }
401
-
402
- if (e instanceof NotFound) {
403
- return writeResponse(socket, 404, e.message);
404
- }
405
-
406
- if (e instanceof Unauthorized) {
407
- return writeResponse(socket, 401, e.message);
408
- }
409
-
410
- if (e instanceof TooManyRequests) {
411
- return writeResponse(socket, 429, e.message);
412
- }
413
-
414
- this.logger.error(
415
- `Error handling request at "${route.path}": ${e}\n${e.stack}`,
416
- );
417
-
418
- return writeResponse(socket, 500, e.message);
419
- });
403
+ .catch((e) => this.handleErrorRequest(e, socket));
420
404
  }
421
405
 
422
406
  this.logger.error(
package/src/utils.ts CHANGED
@@ -236,10 +236,14 @@ export const getTokenFromRequest = (req: Request) => {
236
236
  };
237
237
 
238
238
  // NOTE, if proxying request elsewhere, you must re-stream the body again
239
- export const readRequestBody = async (req: Request): Promise<string> => {
240
- return new Promise((resolve) => {
239
+ export const readRequestBody = async (
240
+ req: Request,
241
+ maxSize: number = 10485760,
242
+ ): Promise<string> => {
243
+ return new Promise((resolve, reject) => {
241
244
  const body: Uint8Array[] = [];
242
245
  let hasResolved = false;
246
+ let totalSize = 0;
243
247
 
244
248
  const resolveOnce = (results: string) => {
245
249
  if (hasResolved) {
@@ -249,8 +253,27 @@ export const readRequestBody = async (req: Request): Promise<string> => {
249
253
  resolve(results);
250
254
  };
251
255
 
256
+ const rejectOnce = (error: Error) => {
257
+ if (hasResolved) {
258
+ return;
259
+ }
260
+ hasResolved = true;
261
+ reject(error);
262
+ };
263
+
252
264
  req
253
- .on('data', (chunk) => body.push(chunk))
265
+ .on('data', (chunk) => {
266
+ totalSize += chunk.length;
267
+ if (totalSize > maxSize) {
268
+ rejectOnce(
269
+ new BadRequest(
270
+ `Request payload size (${totalSize} bytes) exceeds maximum allowed size of ${maxSize} bytes`,
271
+ ),
272
+ );
273
+ return;
274
+ }
275
+ body.push(chunk);
276
+ })
254
277
  .on('end', () => {
255
278
  const final = Buffer.concat(body).toString();
256
279
  resolveOnce(final);
@@ -258,8 +281,8 @@ export const readRequestBody = async (req: Request): Promise<string> => {
258
281
  .on('aborted', () => {
259
282
  resolveOnce('');
260
283
  })
261
- .on('error', () => {
262
- resolveOnce('');
284
+ .on('error', (error) => {
285
+ rejectOnce(error);
263
286
  });
264
287
  });
265
288
  };
@@ -317,6 +340,7 @@ export const generateDataDir = async (
317
340
 
318
341
  export const readBody = async (
319
342
  req: Request,
343
+ maxSize: number = 10485760,
320
344
  ): Promise<ReturnType<typeof safeParse>> => {
321
345
  if (
322
346
  typeof req.body === 'string' &&
@@ -324,7 +348,7 @@ export const readBody = async (
324
348
  ) {
325
349
  return safeParse(convertIfBase64(req.body));
326
350
  }
327
- const body = await readRequestBody(req);
351
+ const body = await readRequestBody(req, maxSize);
328
352
 
329
353
  return req.headers['content-type']?.includes(contentTypes.json)
330
354
  ? safeParse(body)