@browserless.io/browserless 2.37.0 → 2.37.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (338) hide show
  1. package/build/browsers/index.js +15 -0
  2. package/build/routes/chrome/http/content.post.query.json +3 -0
  3. package/build/routes/chrome/http/download.post.query.json +3 -0
  4. package/build/routes/chrome/http/function.post.query.json +3 -0
  5. package/build/routes/chrome/http/pdf.post.query.json +3 -0
  6. package/build/routes/chrome/http/performance.post.query.json +3 -0
  7. package/build/routes/chrome/http/scrape.post.query.json +3 -0
  8. package/build/routes/chrome/http/screenshot.post.query.json +3 -0
  9. package/build/routes/chrome/tests/content.spec.js +21 -0
  10. package/build/routes/chrome/tests/json.spec.js +100 -0
  11. package/build/routes/chrome/ws/browser.query.json +3 -0
  12. package/build/routes/chrome/ws/cdp.query.json +3 -0
  13. package/build/routes/chrome/ws/function-connect.query.json +3 -0
  14. package/build/routes/chrome/ws/page.query.json +3 -0
  15. package/build/routes/chromium/http/content.post.query.json +3 -0
  16. package/build/routes/chromium/http/download.post.query.json +3 -0
  17. package/build/routes/chromium/http/function.post.query.json +3 -0
  18. package/build/routes/chromium/http/pdf.post.query.json +3 -0
  19. package/build/routes/chromium/http/performance.post.query.json +3 -0
  20. package/build/routes/chromium/http/scrape.post.query.json +3 -0
  21. package/build/routes/chromium/http/screenshot.post.query.json +3 -0
  22. package/build/routes/chromium/tests/content.spec.js +21 -0
  23. package/build/routes/chromium/tests/function.spec.js +27 -0
  24. package/build/routes/chromium/tests/json.spec.js +100 -0
  25. package/build/routes/chromium/ws/browser.query.json +3 -0
  26. package/build/routes/chromium/ws/cdp.query.json +3 -0
  27. package/build/routes/chromium/ws/function-connect.query.json +3 -0
  28. package/build/routes/chromium/ws/page.query.json +3 -0
  29. package/build/routes/edge/http/content.post.query.json +3 -0
  30. package/build/routes/edge/http/download.post.query.json +3 -0
  31. package/build/routes/edge/http/function.post.query.json +3 -0
  32. package/build/routes/edge/http/pdf.post.query.json +3 -0
  33. package/build/routes/edge/http/performance.post.query.json +3 -0
  34. package/build/routes/edge/http/scrape.post.query.json +3 -0
  35. package/build/routes/edge/http/screenshot.post.query.json +3 -0
  36. package/build/routes/edge/tests/content.spec.js +21 -0
  37. package/build/routes/edge/tests/json.spec.js +100 -0
  38. package/build/routes/edge/ws/browser.query.json +3 -0
  39. package/build/routes/edge/ws/cdp.query.json +3 -0
  40. package/build/routes/edge/ws/function-connect.query.json +3 -0
  41. package/build/routes/edge/ws/page.query.json +3 -0
  42. package/build/routes/management/http/kill.get.query.json +3 -0
  43. package/build/routes/management/http/sessions.get.query.json +3 -0
  44. package/build/routes/management/tests/management.spec.js +44 -0
  45. package/build/server.js +1 -1
  46. package/build/shim.js +11 -1
  47. package/build/shim.spec.js +14 -0
  48. package/build/types.d.ts +2 -0
  49. package/extensions/ublocklite/_locales/br_FR/messages.json +2 -2
  50. package/extensions/ublocklite/_locales/cs/messages.json +8 -8
  51. package/extensions/ublocklite/_locales/da/messages.json +5 -5
  52. package/extensions/ublocklite/_locales/es/messages.json +4 -4
  53. package/extensions/ublocklite/_locales/gl/messages.json +5 -5
  54. package/extensions/ublocklite/_locales/ka/messages.json +5 -5
  55. package/extensions/ublocklite/_locales/ru/messages.json +3 -3
  56. package/extensions/ublocklite/_locales/sq/messages.json +5 -5
  57. package/extensions/ublocklite/_locales/sv/messages.json +5 -5
  58. package/extensions/ublocklite/_locales/zh_CN/messages.json +5 -5
  59. package/extensions/ublocklite/css/settings.css +6 -0
  60. package/extensions/ublocklite/dashboard.html +1 -1
  61. package/extensions/ublocklite/js/background.js +10 -6
  62. package/extensions/ublocklite/js/dashboard.js +4 -5
  63. package/extensions/ublocklite/js/jsonpath.js +25 -10
  64. package/extensions/ublocklite/js/report.js +2 -4
  65. package/extensions/ublocklite/js/troubleshooting.js +30 -18
  66. package/extensions/ublocklite/manifest.json +2 -2
  67. package/extensions/ublocklite/rulesets/main/adguard-mobile.json +1 -1
  68. package/extensions/ublocklite/rulesets/main/adguard-spyware-url.json +1 -1
  69. package/extensions/ublocklite/rulesets/main/annoyances-cookies.json +6 -4
  70. package/extensions/ublocklite/rulesets/main/annoyances-widgets.json +2 -1
  71. package/extensions/ublocklite/rulesets/main/chn-0.json +5 -3
  72. package/extensions/ublocklite/rulesets/main/easylist.json +10 -13
  73. package/extensions/ublocklite/rulesets/main/easyprivacy.json +8 -9
  74. package/extensions/ublocklite/rulesets/main/fin-0.json +3 -1
  75. package/extensions/ublocklite/rulesets/main/ita-0.json +2 -0
  76. package/extensions/ublocklite/rulesets/main/jpn-1.json +8 -10
  77. package/extensions/ublocklite/rulesets/main/nor-0.json +2 -2
  78. package/extensions/ublocklite/rulesets/main/pol-0.json +1 -1
  79. package/extensions/ublocklite/rulesets/main/rus-1.json +2 -1
  80. package/extensions/ublocklite/rulesets/main/spa-1.json +6 -1
  81. package/extensions/ublocklite/rulesets/main/swe-1.json +5 -5
  82. package/extensions/ublocklite/rulesets/main/tur-0.json +2 -2
  83. package/extensions/ublocklite/rulesets/main/ublock-badware.json +4 -2
  84. package/extensions/ublocklite/rulesets/main/ublock-filters.json +25 -25
  85. package/extensions/ublocklite/rulesets/main/ukr-0.json +2 -2
  86. package/extensions/ublocklite/rulesets/main/urlhaus-full.json +610 -80
  87. package/extensions/ublocklite/rulesets/main/vie-1.json +20 -14
  88. package/extensions/ublocklite/rulesets/regex/easylist.json +1 -6
  89. package/extensions/ublocklite/rulesets/regex/jpn-1.json +1 -1
  90. package/extensions/ublocklite/rulesets/regex/ublock-badware.json +3 -4
  91. package/extensions/ublocklite/rulesets/regex/ublock-filters.json +11 -9
  92. package/extensions/ublocklite/rulesets/ruleset-details.json +120 -120
  93. package/extensions/ublocklite/rulesets/scripting/generic/annoyances-cookies.js +2 -2
  94. package/extensions/ublocklite/rulesets/scripting/generic/ita-0.js +1 -1
  95. package/extensions/ublocklite/rulesets/scripting/procedural/adguard-mobile.js +2 -2
  96. package/extensions/ublocklite/rulesets/scripting/procedural/annoyances-cookies.js +3 -3
  97. package/extensions/ublocklite/rulesets/scripting/procedural/annoyances-others.js +2 -2
  98. package/extensions/ublocklite/rulesets/scripting/procedural/annoyances-overlays.js +3 -3
  99. package/extensions/ublocklite/rulesets/scripting/procedural/chn-0.js +3 -3
  100. package/extensions/ublocklite/rulesets/scripting/procedural/fin-0.js +1 -1
  101. package/extensions/ublocklite/rulesets/scripting/procedural/grc-0.js +3 -3
  102. package/extensions/ublocklite/rulesets/scripting/procedural/ind-0.js +3 -3
  103. package/extensions/ublocklite/rulesets/scripting/procedural/jpn-1.js +3 -3
  104. package/extensions/ublocklite/rulesets/scripting/procedural/rus-0.js +3 -3
  105. package/extensions/ublocklite/rulesets/scripting/procedural/spa-1.js +3 -3
  106. package/extensions/ublocklite/rulesets/scripting/procedural/swe-1.js +2 -2
  107. package/extensions/ublocklite/rulesets/scripting/procedural/ublock-filters.js +3 -3
  108. package/extensions/ublocklite/rulesets/scripting/scriptlet/adguard-mobile.addEventListener-defuser.js +7 -3
  109. package/extensions/ublocklite/rulesets/scripting/scriptlet/adguard-mobile.prevent-setTimeout.js +5 -1
  110. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-cookies.addEventListener-defuser.js +5 -1
  111. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-cookies.prevent-requestAnimationFrame.js +5 -1
  112. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-cookies.prevent-setTimeout.js +5 -1
  113. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-cookies.set-cookie.js +2 -2
  114. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-cookies.set-local-storage-item.js +2 -2
  115. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-cookies.trusted-click-element.js +2 -2
  116. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-cookies.trusted-set-cookie.js +2 -2
  117. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-notifications.addEventListener-defuser.js +5 -1
  118. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-others.addEventListener-defuser.js +5 -1
  119. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-others.json-prune.js +2 -2
  120. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-others.prevent-setInterval.js +5 -1
  121. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-others.prevent-setTimeout.js +5 -1
  122. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.addEventListener-defuser.js +5 -1
  123. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.noeval-if.js +5 -1
  124. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.prevent-fetch.js +5 -1
  125. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.prevent-setInterval.js +5 -1
  126. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.prevent-setTimeout.js +5 -1
  127. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.prevent-window-open.js +5 -1
  128. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.remove-class.js +2 -2
  129. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.trusted-replace-argument.js +5 -1
  130. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.trusted-replace-outbound-text.js +5 -1
  131. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.trusted-suppress-native-method.js +5 -1
  132. package/extensions/ublocklite/rulesets/scripting/scriptlet/chn-0.addEventListener-defuser.js +5 -1
  133. package/extensions/ublocklite/rulesets/scripting/scriptlet/chn-0.evaldata-prune.js +5 -1
  134. package/extensions/ublocklite/rulesets/scripting/scriptlet/chn-0.noeval-if.js +5 -1
  135. package/extensions/ublocklite/rulesets/scripting/scriptlet/chn-0.prevent-fetch.js +6 -2
  136. package/extensions/ublocklite/rulesets/scripting/scriptlet/chn-0.prevent-setInterval.js +5 -1
  137. package/extensions/ublocklite/rulesets/scripting/scriptlet/chn-0.prevent-setTimeout.js +5 -1
  138. package/extensions/ublocklite/rulesets/scripting/scriptlet/chn-0.prevent-window-open.js +5 -1
  139. package/extensions/ublocklite/rulesets/scripting/scriptlet/cze-0.addEventListener-defuser.js +5 -1
  140. package/extensions/ublocklite/rulesets/scripting/scriptlet/cze-0.prevent-setInterval.js +5 -1
  141. package/extensions/ublocklite/rulesets/scripting/scriptlet/cze-0.prevent-setTimeout.js +5 -1
  142. package/extensions/ublocklite/rulesets/scripting/scriptlet/easyprivacy.prevent-fetch.js +5 -1
  143. package/extensions/ublocklite/rulesets/scripting/scriptlet/est-0.addEventListener-defuser.js +5 -1
  144. package/extensions/ublocklite/rulesets/scripting/scriptlet/fin-0.prevent-setTimeout.js +5 -1
  145. package/extensions/ublocklite/rulesets/scripting/scriptlet/fin-0.remove-node-text.js +449 -0
  146. package/extensions/ublocklite/rulesets/scripting/scriptlet/fra-0.addEventListener-defuser.js +5 -1
  147. package/extensions/ublocklite/rulesets/scripting/scriptlet/fra-0.prevent-fetch.js +5 -1
  148. package/extensions/ublocklite/rulesets/scripting/scriptlet/fra-0.prevent-requestAnimationFrame.js +5 -1
  149. package/extensions/ublocklite/rulesets/scripting/scriptlet/fra-0.prevent-setInterval.js +5 -1
  150. package/extensions/ublocklite/rulesets/scripting/scriptlet/fra-0.prevent-setTimeout.js +5 -1
  151. package/extensions/ublocklite/rulesets/scripting/scriptlet/fra-0.prevent-window-open.js +5 -1
  152. package/extensions/ublocklite/rulesets/scripting/scriptlet/hun-0.addEventListener-defuser.js +5 -1
  153. package/extensions/ublocklite/rulesets/scripting/scriptlet/hun-0.prevent-setTimeout.js +5 -1
  154. package/extensions/ublocklite/rulesets/scripting/scriptlet/hun-0.prevent-window-open.js +5 -1
  155. package/extensions/ublocklite/rulesets/scripting/scriptlet/idn-0.addEventListener-defuser.js +5 -1
  156. package/extensions/ublocklite/rulesets/scripting/scriptlet/idn-0.noeval-if.js +5 -1
  157. package/extensions/ublocklite/rulesets/scripting/scriptlet/idn-0.prevent-fetch.js +5 -1
  158. package/extensions/ublocklite/rulesets/scripting/scriptlet/idn-0.prevent-setTimeout.js +5 -1
  159. package/extensions/ublocklite/rulesets/scripting/scriptlet/idn-0.prevent-window-open.js +5 -1
  160. package/extensions/ublocklite/rulesets/scripting/scriptlet/irn-0.addEventListener-defuser.js +5 -1
  161. package/extensions/ublocklite/rulesets/scripting/scriptlet/irn-0.prevent-fetch.js +5 -1
  162. package/extensions/ublocklite/rulesets/scripting/scriptlet/irn-0.prevent-setTimeout.js +5 -1
  163. package/extensions/ublocklite/rulesets/scripting/scriptlet/irn-0.prevent-window-open.js +5 -1
  164. package/extensions/ublocklite/rulesets/scripting/scriptlet/isr-0.addEventListener-defuser.js +5 -1
  165. package/extensions/ublocklite/rulesets/scripting/scriptlet/isr-0.prevent-fetch.js +5 -1
  166. package/extensions/ublocklite/rulesets/scripting/scriptlet/isr-0.prevent-setTimeout.js +5 -1
  167. package/extensions/ublocklite/rulesets/scripting/scriptlet/isr-0.prevent-window-open.js +5 -1
  168. package/extensions/ublocklite/rulesets/scripting/scriptlet/jpn-1.addEventListener-defuser.js +5 -1
  169. package/extensions/ublocklite/rulesets/scripting/scriptlet/jpn-1.json-prune.js +2 -2
  170. package/extensions/ublocklite/rulesets/scripting/scriptlet/jpn-1.noeval-if.js +5 -1
  171. package/extensions/ublocklite/rulesets/scripting/scriptlet/jpn-1.prevent-fetch.js +5 -1
  172. package/extensions/ublocklite/rulesets/scripting/scriptlet/jpn-1.prevent-setInterval.js +5 -1
  173. package/extensions/ublocklite/rulesets/scripting/scriptlet/jpn-1.prevent-setTimeout.js +5 -1
  174. package/extensions/ublocklite/rulesets/scripting/scriptlet/jpn-1.prevent-window-open.js +5 -1
  175. package/extensions/ublocklite/rulesets/scripting/scriptlet/kor-1.addEventListener-defuser.js +5 -1
  176. package/extensions/ublocklite/rulesets/scripting/scriptlet/kor-1.prevent-fetch.js +5 -1
  177. package/extensions/ublocklite/rulesets/scripting/scriptlet/kor-1.prevent-setInterval.js +5 -1
  178. package/extensions/ublocklite/rulesets/scripting/scriptlet/kor-1.prevent-setTimeout.js +5 -1
  179. package/extensions/ublocklite/rulesets/scripting/scriptlet/kor-1.prevent-window-open.js +5 -1
  180. package/extensions/ublocklite/rulesets/scripting/scriptlet/ltu-0.prevent-setTimeout.js +5 -1
  181. package/extensions/ublocklite/rulesets/scripting/scriptlet/ltu-0.prevent-window-open.js +5 -1
  182. package/extensions/ublocklite/rulesets/scripting/scriptlet/nld-0.addEventListener-defuser.js +5 -1
  183. package/extensions/ublocklite/rulesets/scripting/scriptlet/nld-0.prevent-fetch.js +5 -1
  184. package/extensions/ublocklite/rulesets/scripting/scriptlet/nld-0.prevent-setTimeout.js +5 -1
  185. package/extensions/ublocklite/rulesets/scripting/scriptlet/nor-0.addEventListener-defuser.js +5 -1
  186. package/extensions/ublocklite/rulesets/scripting/scriptlet/nor-0.prevent-fetch.js +5 -1
  187. package/extensions/ublocklite/rulesets/scripting/scriptlet/nor-0.prevent-setTimeout.js +5 -1
  188. package/extensions/ublocklite/rulesets/scripting/scriptlet/pol-0.addEventListener-defuser.js +5 -1
  189. package/extensions/ublocklite/rulesets/scripting/scriptlet/pol-0.noeval-if.js +5 -1
  190. package/extensions/ublocklite/rulesets/scripting/scriptlet/pol-0.prevent-setInterval.js +5 -1
  191. package/extensions/ublocklite/rulesets/scripting/scriptlet/pol-0.prevent-setTimeout.js +5 -1
  192. package/extensions/ublocklite/rulesets/scripting/scriptlet/pol-0.prevent-window-open.js +5 -1
  193. package/extensions/ublocklite/rulesets/scripting/scriptlet/rou-1.noeval-if.js +5 -1
  194. package/extensions/ublocklite/rulesets/scripting/scriptlet/rou-1.prevent-setInterval.js +5 -1
  195. package/extensions/ublocklite/rulesets/scripting/scriptlet/rou-1.prevent-setTimeout.js +5 -1
  196. package/extensions/ublocklite/rulesets/scripting/scriptlet/rou-1.prevent-window-open.js +5 -1
  197. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.abort-on-stack-trace.js +2 -2
  198. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.addEventListener-defuser.js +8 -4
  199. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.noeval-if.js +5 -1
  200. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.prevent-fetch.js +5 -1
  201. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.prevent-setInterval.js +5 -1
  202. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.prevent-setTimeout.js +5 -1
  203. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.prevent-window-open.js +5 -1
  204. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.remove-node-text.js +3 -3
  205. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.set-attr.js +2 -2
  206. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.set-constant.js +3 -3
  207. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-1.addEventListener-defuser.js +5 -1
  208. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-1.prevent-fetch.js +5 -1
  209. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-1.prevent-setTimeout.js +5 -1
  210. package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.addEventListener-defuser.js +5 -1
  211. package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.json-prune.js +2 -2
  212. package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.noeval-if.js +5 -1
  213. package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.prevent-fetch.js +5 -1
  214. package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.prevent-requestAnimationFrame.js +5 -1
  215. package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.prevent-setInterval.js +5 -1
  216. package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.prevent-setTimeout.js +5 -1
  217. package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.prevent-window-open.js +5 -1
  218. package/extensions/ublocklite/rulesets/scripting/scriptlet/swe-1.addEventListener-defuser.js +5 -1
  219. package/extensions/ublocklite/rulesets/scripting/scriptlet/swe-1.noeval-if.js +5 -1
  220. package/extensions/ublocklite/rulesets/scripting/scriptlet/swe-1.prevent-setInterval.js +5 -1
  221. package/extensions/ublocklite/rulesets/scripting/scriptlet/swe-1.prevent-setTimeout.js +5 -1
  222. package/extensions/ublocklite/rulesets/scripting/scriptlet/tur-0.addEventListener-defuser.js +5 -1
  223. package/extensions/ublocklite/rulesets/scripting/scriptlet/tur-0.prevent-fetch.js +5 -1
  224. package/extensions/ublocklite/rulesets/scripting/scriptlet/tur-0.prevent-setInterval.js +5 -1
  225. package/extensions/ublocklite/rulesets/scripting/scriptlet/tur-0.prevent-setTimeout.js +5 -1
  226. package/extensions/ublocklite/rulesets/scripting/scriptlet/tur-0.prevent-window-open.js +6 -2
  227. package/extensions/ublocklite/rulesets/scripting/scriptlet/tur-0.set-constant.js +1 -1
  228. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-badware.addEventListener-defuser.js +5 -1
  229. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-badware.noeval-if.js +5 -1
  230. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-badware.trusted-replace-argument.js +5 -1
  231. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-experimental.trusted-json-edit-xhr-request.js +848 -0
  232. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-experimental.trusted-replace-node-text.js +1 -1
  233. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.abort-current-script.js +3 -3
  234. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.abort-on-property-read.js +1 -1
  235. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.abort-on-stack-trace.js +3 -3
  236. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.addEventListener-defuser.js +7 -3
  237. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.json-edit-fetch-response.js +29 -11
  238. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.json-edit-xhr-response.js +24 -10
  239. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.json-edit.js +29 -11
  240. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.json-prune-fetch-response.js +2 -2
  241. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.jsonl-edit-xhr-response.js +24 -10
  242. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.noeval-if.js +6 -2
  243. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.prevent-fetch.js +7 -3
  244. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.prevent-requestAnimationFrame.js +5 -1
  245. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.prevent-setInterval.js +5 -1
  246. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.prevent-setTimeout.js +7 -3
  247. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.prevent-window-open.js +5 -1
  248. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.prevent-xhr.js +3 -3
  249. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.remove-node-text.js +2 -2
  250. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.set-constant.js +1 -1
  251. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.set-cookie.js +2 -2
  252. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.trusted-json-edit-fetch-request.js +941 -0
  253. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.trusted-json-edit-fetch-response.js +29 -11
  254. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.trusted-json-edit.js +29 -11
  255. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.trusted-override-element-method.js +5 -1
  256. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.trusted-prevent-dom-bypass.js +5 -1
  257. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.trusted-prevent-fetch.js +7 -3
  258. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.trusted-replace-argument.js +5 -1
  259. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.trusted-replace-node-text.js +2 -2
  260. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.trusted-replace-outbound-text.js +7 -3
  261. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.trusted-suppress-native-method.js +6 -2
  262. package/extensions/ublocklite/rulesets/scripting/scriptlet/ubol-tests.jsonl-edit-fetch-response.js +29 -11
  263. package/extensions/ublocklite/rulesets/scripting/scriptlet/ubol-tests.jsonl-edit-xhr-response.js +24 -10
  264. package/extensions/ublocklite/rulesets/scripting/scriptlet/ubol-tests.prevent-setTimeout.js +5 -1
  265. package/extensions/ublocklite/rulesets/scripting/scriptlet/ubol-tests.trusted-prevent-dom-bypass.js +5 -1
  266. package/extensions/ublocklite/rulesets/scripting/scriptlet/ukr-0.prevent-fetch.js +5 -1
  267. package/extensions/ublocklite/rulesets/scripting/scriptlet/ukr-0.prevent-window-open.js +5 -1
  268. package/extensions/ublocklite/rulesets/scripting/scriptlet/vie-1.abort-current-script.js +2 -2
  269. package/extensions/ublocklite/rulesets/scripting/scriptlet/vie-1.abort-on-property-read.js +1 -1
  270. package/extensions/ublocklite/rulesets/scripting/scriptlet/vie-1.addEventListener-defuser.js +5 -1
  271. package/extensions/ublocklite/rulesets/scripting/scriptlet/vie-1.prevent-fetch.js +5 -1
  272. package/extensions/ublocklite/rulesets/scripting/scriptlet/vie-1.prevent-setTimeout.js +5 -1
  273. package/extensions/ublocklite/rulesets/scripting/specific/adguard-mobile.js +3 -3
  274. package/extensions/ublocklite/rulesets/scripting/specific/annoyances-cookies.js +3 -3
  275. package/extensions/ublocklite/rulesets/scripting/specific/annoyances-notifications.js +3 -3
  276. package/extensions/ublocklite/rulesets/scripting/specific/annoyances-others.js +3 -3
  277. package/extensions/ublocklite/rulesets/scripting/specific/annoyances-overlays.js +3 -3
  278. package/extensions/ublocklite/rulesets/scripting/specific/annoyances-social.js +3 -3
  279. package/extensions/ublocklite/rulesets/scripting/specific/chn-0.js +3 -3
  280. package/extensions/ublocklite/rulesets/scripting/specific/deu-0.js +3 -3
  281. package/extensions/ublocklite/rulesets/scripting/specific/easylist.js +3 -3
  282. package/extensions/ublocklite/rulesets/scripting/specific/fin-0.js +3 -3
  283. package/extensions/ublocklite/rulesets/scripting/specific/grc-0.js +3 -3
  284. package/extensions/ublocklite/rulesets/scripting/specific/idn-0.js +3 -3
  285. package/extensions/ublocklite/rulesets/scripting/specific/ind-0.js +3 -3
  286. package/extensions/ublocklite/rulesets/scripting/specific/isr-0.js +1 -1
  287. package/extensions/ublocklite/rulesets/scripting/specific/ita-0.js +3 -3
  288. package/extensions/ublocklite/rulesets/scripting/specific/jpn-1.js +3 -3
  289. package/extensions/ublocklite/rulesets/scripting/specific/kor-1.js +3 -3
  290. package/extensions/ublocklite/rulesets/scripting/specific/rus-0.js +3 -3
  291. package/extensions/ublocklite/rulesets/scripting/specific/spa-1.js +3 -3
  292. package/extensions/ublocklite/rulesets/scripting/specific/swe-1.js +3 -3
  293. package/extensions/ublocklite/rulesets/scripting/specific/tur-0.js +3 -3
  294. package/extensions/ublocklite/rulesets/scripting/specific/ublock-filters.js +3 -3
  295. package/extensions/ublocklite/rulesets/scripting/specific/vie-1.js +3 -3
  296. package/extensions/ublocklite/rulesets/scriptlet-details.json +90 -32
  297. package/extensions/ublocklite/rulesets/strictblock/adguard-mobile.json +5 -0
  298. package/extensions/ublocklite/rulesets/strictblock/chn-0.json +67 -1
  299. package/extensions/ublocklite/rulesets/strictblock/easylist.json +1 -1
  300. package/extensions/ublocklite/rulesets/strictblock/easyprivacy.json +17 -1
  301. package/extensions/ublocklite/rulesets/strictblock/jpn-1.json +198 -196
  302. package/extensions/ublocklite/rulesets/strictblock/nor-0.json +1 -1
  303. package/extensions/ublocklite/rulesets/strictblock/pol-0.json +2 -0
  304. package/extensions/ublocklite/rulesets/strictblock/ublock-badware.json +532 -530
  305. package/extensions/ublocklite/rulesets/strictblock/ublock-filters.json +23 -19
  306. package/extensions/ublocklite/rulesets/strictblock/ukr-0.json +2 -0
  307. package/extensions/ublocklite/rulesets/strictblock/urlhaus-full.json +610 -80
  308. package/extensions/ublocklite/ublock.zip +0 -0
  309. package/package.json +13 -12
  310. package/scripts/install-debugger.js +2 -2
  311. package/src/browsers/index.ts +20 -0
  312. package/src/routes/chrome/tests/content.spec.ts +24 -0
  313. package/src/routes/chrome/tests/json.spec.ts +134 -0
  314. package/src/routes/chromium/tests/content.spec.ts +24 -0
  315. package/src/routes/chromium/tests/function.spec.ts +33 -0
  316. package/src/routes/chromium/tests/json.spec.ts +134 -0
  317. package/src/routes/chromium/tests/scrape.spec.ts +3 -1
  318. package/src/routes/edge/tests/content.spec.ts +24 -0
  319. package/src/routes/edge/tests/json.spec.ts +134 -0
  320. package/src/routes/management/tests/management.spec.ts +66 -0
  321. package/src/server.ts +1 -1
  322. package/src/shared/screenshot.http.ts +1 -1
  323. package/src/shim.spec.ts +18 -0
  324. package/src/shim.ts +15 -1
  325. package/src/types.ts +2 -0
  326. package/static/docs/swagger.json +4 -1
  327. package/static/docs/swagger.min.json +4 -1
  328. package/static/function/client.js +86 -92
  329. package/static/function/index.html +86 -92
  330. package/build/routes/chrome/tests/json-version.spec.js +0 -37
  331. package/build/routes/chromium/tests/json-version.spec.js +0 -37
  332. package/build/routes/edge/tests/json-version.spec.js +0 -37
  333. package/src/routes/chrome/tests/json-version.spec.ts +0 -52
  334. package/src/routes/chromium/tests/json-version.spec.ts +0 -52
  335. package/src/routes/edge/tests/json-version.spec.ts +0 -52
  336. /package/build/routes/chrome/tests/{json-version.spec.d.ts → json.spec.d.ts} +0 -0
  337. /package/build/routes/chromium/tests/{json-version.spec.d.ts → json.spec.d.ts} +0 -0
  338. /package/build/routes/edge/tests/{json-version.spec.d.ts → json.spec.d.ts} +0 -0
Binary file
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@browserless.io/browserless",
3
- "version": "2.37.0",
3
+ "version": "2.37.1",
4
4
  "license": "SSPL",
5
5
  "description": "The browserless platform",
6
6
  "author": "browserless.io",
@@ -21,6 +21,7 @@
21
21
  "build:schemas": "node scripts/build-schemas.js",
22
22
  "build:openapi": "node scripts/build-open-api.js",
23
23
  "build:ts": "tsc",
24
+ "build:tests": "npm run build:ts && npm run build:function && npm run install:debugger",
24
25
  "clean": "node scripts/clean.js",
25
26
  "dev": "npm run build:dev && env-cmd -f .env node build",
26
27
  "install:adblock": "node scripts/install-adblock.js",
@@ -30,7 +31,7 @@
30
31
  "lint": "cross-env ESLINT_USE_FLAT_CONFIG=false eslint . --ext .ts --fix",
31
32
  "prepack": "npm run build:dev",
32
33
  "prettier": "prettier '{src,functions,scripts,bin,external,.github}/**/*.{js,ts,json,yml,yaml,md}' --log-level error --write",
33
- "test": "npm run build:ts && cross-env DEBUG=quiet mocha",
34
+ "test": "npm run build:tests && cross-env DEBUG=quiet mocha",
34
35
  "coverage": "npm run build:ts && c8 --reporter=text --reporter=html --reporter=lcov cross-env DEBUG=quiet mocha",
35
36
  "start": "env-cmd -f .env node build"
36
37
  },
@@ -65,11 +66,11 @@
65
66
  "playwright-1.53": "npm:playwright-core@1.53.2",
66
67
  "playwright-1.54": "npm:playwright-core@1.54.2",
67
68
  "playwright-core": "1.55.1",
68
- "puppeteer-core": "24.22.3",
69
+ "puppeteer-core": "24.23.0",
69
70
  "puppeteer-extra": "^3.3.6",
70
71
  "puppeteer-extra-plugin-stealth": "^2.11.2",
71
72
  "queue": "^7.0.0",
72
- "systeminformation": "^5.27.10",
73
+ "systeminformation": "^5.27.11",
73
74
  "tar-fs": "^3.1.1"
74
75
  },
75
76
  "optionalDependencies": {
@@ -79,27 +80,27 @@
79
80
  "@types/http-proxy": "^1.17.16",
80
81
  "@types/micromatch": "^4.0.9",
81
82
  "@types/mocha": "^10.0.10",
82
- "@types/node": "^24.5.2",
83
+ "@types/node": "^24.7.0",
83
84
  "@types/sinon": "^17.0.4",
84
- "@typescript-eslint/eslint-plugin": "^8.44.1",
85
- "@typescript-eslint/parser": "^8.44.1",
85
+ "@typescript-eslint/eslint-plugin": "^8.46.0",
86
+ "@typescript-eslint/parser": "^8.46.0",
86
87
  "assert": "^2.0.0",
87
88
  "c8": "^10.1.3",
88
89
  "chai": "^6.2.0",
89
- "cross-env": "^10.0.0",
90
+ "cross-env": "^10.1.0",
90
91
  "env-cmd": "^11.0.0",
91
92
  "esbuild": "^0.25.10",
92
93
  "esbuild-plugin-polyfill-node": "^0.3.0",
93
- "eslint": "^9.36.0",
94
+ "eslint": "^9.37.0",
94
95
  "extract-zip": "^2.0.1",
95
96
  "gunzip-maybe": "^1.4.2",
96
- "marked": "^16.3.0",
97
- "mocha": "^11.7.2",
97
+ "marked": "^16.4.0",
98
+ "mocha": "^11.7.4",
98
99
  "move-file": "^3.1.0",
99
100
  "prettier": "^3.6.2",
100
101
  "sinon": "^21.0.0",
101
102
  "ts-node": "^10.9.2",
102
- "typescript": "^5.8.3",
103
+ "typescript": "^5.9.3",
103
104
  "typescript-json-schema": "^0.65.1"
104
105
  },
105
106
  "playwrightVersions": {
@@ -6,7 +6,7 @@ import os from 'os';
6
6
 
7
7
  import { deleteAsync } from 'del';
8
8
  import gunzip from 'gunzip-maybe';
9
- import { moveFile } from 'move-file';
9
+ import { cp } from 'fs/promises';
10
10
  import tar from 'tar-fs';
11
11
 
12
12
  const registryURL = 'https://registry.npmjs.org/@browserless.io/debugger/';
@@ -52,7 +52,7 @@ const getLatestVersion = async () => {
52
52
  process.exit(1);
53
53
  });
54
54
 
55
- await moveFile(untarDir, debuggerDir);
55
+ await cp(untarDir, debuggerDir, { recursive: true });
56
56
  await deleteAsync(tmp, { force: true });
57
57
  })().catch((error) => {
58
58
  console.error(`An error occurred: ${error.message}`);
@@ -542,6 +542,16 @@ export class BrowserManager {
542
542
  ...routerOptions,
543
543
  ...parsedLaunchOptions,
544
544
  };
545
+ const proxyServerParam = req.parsed.searchParams.get('--proxy-server');
546
+ if (proxyServerParam) {
547
+ const existingArgs = launchOptions.args || [];
548
+ const filteredArgs = existingArgs.filter(
549
+ (arg) => !arg.includes('--proxy-server='),
550
+ );
551
+ launchOptions.args = [...filteredArgs, `--proxy-server=${proxyServerParam}`];
552
+ }
553
+
554
+
545
555
 
546
556
  const manualUserDataDir =
547
557
  launchOptions.args
@@ -566,6 +576,16 @@ export class BrowserManager {
566
576
  arg.includes('--proxy-server='),
567
577
  );
568
578
 
579
+ /**
580
+ * Handle deprecated launch options
581
+ */
582
+ if (Object.hasOwn(launchOptions, 'ignoreHTTPSErrors')) {
583
+ if (!Object.hasOwn(launchOptions, 'acceptInsecureCerts')) {
584
+ (launchOptions as CDPLaunchOptions).acceptInsecureCerts = (launchOptions as CDPLaunchOptions).ignoreHTTPSErrors;
585
+ }
586
+ delete (launchOptions as CDPLaunchOptions).ignoreHTTPSErrors;
587
+ }
588
+
569
589
  /**
570
590
  * If it is a playwright request
571
591
  */
@@ -373,4 +373,28 @@ describe('/chrome/content API', function () {
373
373
  expect(res.status).to.equal(200);
374
374
  });
375
375
  });
376
+
377
+ it('can accept insecure certs', async () => {
378
+ const config = new Config();
379
+ config.setToken('browserless');
380
+ const metrics = new Metrics();
381
+ await start({ config, metrics });
382
+
383
+ const body = {
384
+ gotoOptions: {
385
+ waitUntil: `networkidle2`,
386
+ },
387
+ url: 'https://self-signed.badssl.com',
388
+ };
389
+
390
+ await fetch('http://localhost:3000/chrome/content?token=browserless&launch={"acceptInsecureCerts":true}', {
391
+ body: JSON.stringify(body),
392
+ headers: {
393
+ 'content-type': 'application/json',
394
+ },
395
+ method: 'POST',
396
+ }).then(async (res) => {
397
+ expect(res.status).to.equal(200);
398
+ });
399
+ });
376
400
  });
@@ -0,0 +1,134 @@
1
+ import { Browserless, Config, Metrics } from '@browserless.io/browserless';
2
+ import { expect } from 'chai';
3
+
4
+ describe('/json/ API', function () {
5
+ let browserless: Browserless;
6
+
7
+ const start = ({
8
+ config = new Config(),
9
+ metrics = new Metrics(),
10
+ }: { config?: Config; metrics?: Metrics } = {}) => {
11
+ browserless = new Browserless({ config, metrics });
12
+ return browserless.start();
13
+ };
14
+
15
+ afterEach(async () => {
16
+ await browserless.stop();
17
+ });
18
+
19
+ it('allows requests to /json/version', async () => {
20
+ const config = new Config();
21
+ config.setToken('browserless');
22
+ const metrics = new Metrics();
23
+ await start({ config, metrics });
24
+
25
+ const res = await fetch(
26
+ 'http://localhost:3000/json/version?token=browserless',
27
+ );
28
+ const resJSON = await res.json();
29
+
30
+ [
31
+ 'Browser',
32
+ 'Protocol-Version',
33
+ 'User-Agent',
34
+ 'V8-Version',
35
+ 'WebKit-Version',
36
+ 'webSocketDebuggerUrl',
37
+ 'Debugger-Version',
38
+ ].forEach((k) => expect(resJSON).to.haveOwnProperty(k));
39
+ });
40
+
41
+ it('rejects unauthorized requests to /json/version', async () => {
42
+ const config = new Config();
43
+ config.setToken('browserless');
44
+ const metrics = new Metrics();
45
+ await start({ config, metrics });
46
+
47
+ const res = await fetch(
48
+ 'http://localhost:3000/json/version?token=imabadboi',
49
+ );
50
+ expect(res.status).to.equal(401);
51
+ });
52
+
53
+ it('rejects unauthorized requests to /json/list', async () => {
54
+ const config = new Config();
55
+ config.setToken('browserless');
56
+ const metrics = new Metrics();
57
+ await start({ config, metrics });
58
+
59
+ const res = await fetch('http://localhost:3000/json/list?token=imabadboi');
60
+ expect(res.status).to.equal(401);
61
+ });
62
+
63
+ it('allows requests to /json/protocol', async () => {
64
+ const config = new Config();
65
+ config.setToken('browserless');
66
+ const metrics = new Metrics();
67
+ await start({ config, metrics });
68
+
69
+ const res = await fetch(
70
+ 'http://localhost:3000/json/protocol?token=browserless',
71
+ );
72
+ expect(res.status).to.equal(200);
73
+ const resJSON = await res.json();
74
+ expect(resJSON).to.be.an('object');
75
+ expect(resJSON).to.haveOwnProperty('version');
76
+ expect(resJSON).to.haveOwnProperty('domains');
77
+ });
78
+
79
+ it('rejects unauthorized requests to /json/protocol', async () => {
80
+ const config = new Config();
81
+ config.setToken('browserless');
82
+ const metrics = new Metrics();
83
+ await start({ config, metrics });
84
+
85
+ const res = await fetch(
86
+ 'http://localhost:3000/json/protocol?token=imabadboi',
87
+ );
88
+ expect(res.status).to.equal(401);
89
+ });
90
+
91
+ it('allows requests to PUT /json/new', async () => {
92
+ const config = new Config();
93
+ config.setToken('browserless');
94
+ const metrics = new Metrics();
95
+ await start({ config, metrics });
96
+
97
+ const res = await fetch(
98
+ 'http://localhost:3000/json/new?token=browserless',
99
+ {
100
+ method: 'PUT',
101
+ },
102
+ );
103
+ expect(res.status).to.equal(200);
104
+ const resJSON = await res.json();
105
+
106
+ const keys = [
107
+ 'description',
108
+ 'devtoolsFrontendUrl',
109
+ 'id',
110
+ 'title',
111
+ 'type',
112
+ 'url',
113
+ 'webSocketDebuggerUrl',
114
+ ];
115
+ keys.forEach((k) => expect(resJSON).to.haveOwnProperty(k));
116
+
117
+ expect(resJSON.type).to.equal('page');
118
+ expect(resJSON.title).to.equal('New Tab');
119
+ expect(resJSON.url).to.equal('about:blank');
120
+ expect(resJSON.description).to.equal('');
121
+ });
122
+
123
+ it('rejects unauthorized requests to PUT /json/new', async () => {
124
+ const config = new Config();
125
+ config.setToken('browserless');
126
+ const metrics = new Metrics();
127
+ await start({ config, metrics });
128
+
129
+ const res = await fetch('http://localhost:3000/json/new?token=imabadboi', {
130
+ method: 'PUT',
131
+ });
132
+ expect(res.status).to.equal(401);
133
+ });
134
+ });
@@ -399,4 +399,28 @@ describe('/chromium/content API', function () {
399
399
  expect(res.status).to.equal(200);
400
400
  });
401
401
  });
402
+
403
+ it('can accept insecure certs', async () => {
404
+ const config = new Config();
405
+ config.setToken('browserless');
406
+ const metrics = new Metrics();
407
+ await start({ config, metrics });
408
+
409
+ const body = {
410
+ gotoOptions: {
411
+ waitUntil: `networkidle2`,
412
+ },
413
+ url: 'https://self-signed.badssl.com',
414
+ };
415
+
416
+ await fetch('http://localhost:3000/chromium/content?token=browserless&launch={"acceptInsecureCerts":true}', {
417
+ body: JSON.stringify(body),
418
+ headers: {
419
+ 'content-type': 'application/json',
420
+ },
421
+ method: 'POST',
422
+ }).then(async (res) => {
423
+ expect(res.status).to.equal(200);
424
+ });
425
+ });
402
426
  });
@@ -279,4 +279,37 @@ describe('/chromium/function API', function () {
279
279
  expect(res.status).to.equal(200);
280
280
  });
281
281
  });
282
+ it('allows --proxy-server query parameter', async () => {
283
+ const config = new Config();
284
+ config.setToken('browserless');
285
+ const metrics = new Metrics();
286
+ await start({ config, metrics });
287
+ const body = {
288
+ code: `export default async function ({ page }) {
289
+ return Promise.resolve({
290
+ data: "ok",
291
+ type: "application/text",
292
+ });
293
+ }`,
294
+ context: {},
295
+ };
296
+
297
+ await fetch(
298
+ 'http://localhost:3000/chromium/function?--proxy-server=test.proxy.com:8080&token=browserless',
299
+ {
300
+ body: JSON.stringify(body),
301
+ headers: {
302
+ 'content-type': 'application/json',
303
+ },
304
+ method: 'POST',
305
+ },
306
+ ).then(async (res) => {
307
+ const json = await res.json();
308
+ expect(json).to.have.property('data');
309
+ expect(json.data).to.equal('ok');
310
+ expect(res.status).to.equal(200);
311
+ });
312
+ });
313
+
314
+
282
315
  });
@@ -0,0 +1,134 @@
1
+ import { Browserless, Config, Metrics } from '@browserless.io/browserless';
2
+ import { expect } from 'chai';
3
+
4
+ describe('/json/ API', function () {
5
+ let browserless: Browserless;
6
+
7
+ const start = ({
8
+ config = new Config(),
9
+ metrics = new Metrics(),
10
+ }: { config?: Config; metrics?: Metrics } = {}) => {
11
+ browserless = new Browserless({ config, metrics });
12
+ return browserless.start();
13
+ };
14
+
15
+ afterEach(async () => {
16
+ await browserless.stop();
17
+ });
18
+
19
+ it('allows requests to /json/version', async () => {
20
+ const config = new Config();
21
+ config.setToken('browserless');
22
+ const metrics = new Metrics();
23
+ await start({ config, metrics });
24
+
25
+ const res = await fetch(
26
+ 'http://localhost:3000/json/version?token=browserless',
27
+ );
28
+ const resJSON = await res.json();
29
+
30
+ [
31
+ 'Browser',
32
+ 'Protocol-Version',
33
+ 'User-Agent',
34
+ 'V8-Version',
35
+ 'WebKit-Version',
36
+ 'webSocketDebuggerUrl',
37
+ 'Debugger-Version',
38
+ ].forEach((k) => expect(resJSON).to.haveOwnProperty(k));
39
+ });
40
+
41
+ it('rejects unauthorized requests to /json/version', async () => {
42
+ const config = new Config();
43
+ config.setToken('browserless');
44
+ const metrics = new Metrics();
45
+ await start({ config, metrics });
46
+
47
+ const res = await fetch(
48
+ 'http://localhost:3000/json/version?token=imabadboi',
49
+ );
50
+ expect(res.status).to.equal(401);
51
+ });
52
+
53
+ it('rejects unauthorized requests to /json/list', async () => {
54
+ const config = new Config();
55
+ config.setToken('browserless');
56
+ const metrics = new Metrics();
57
+ await start({ config, metrics });
58
+
59
+ const res = await fetch('http://localhost:3000/json/list?token=imabadboi');
60
+ expect(res.status).to.equal(401);
61
+ });
62
+
63
+ it('allows requests to /json/protocol', async () => {
64
+ const config = new Config();
65
+ config.setToken('browserless');
66
+ const metrics = new Metrics();
67
+ await start({ config, metrics });
68
+
69
+ const res = await fetch(
70
+ 'http://localhost:3000/json/protocol?token=browserless',
71
+ );
72
+ expect(res.status).to.equal(200);
73
+ const resJSON = await res.json();
74
+ expect(resJSON).to.be.an('object');
75
+ expect(resJSON).to.haveOwnProperty('version');
76
+ expect(resJSON).to.haveOwnProperty('domains');
77
+ });
78
+
79
+ it('rejects unauthorized requests to /json/protocol', async () => {
80
+ const config = new Config();
81
+ config.setToken('browserless');
82
+ const metrics = new Metrics();
83
+ await start({ config, metrics });
84
+
85
+ const res = await fetch(
86
+ 'http://localhost:3000/json/protocol?token=imabadboi',
87
+ );
88
+ expect(res.status).to.equal(401);
89
+ });
90
+
91
+ it('allows requests to PUT /json/new', async () => {
92
+ const config = new Config();
93
+ config.setToken('browserless');
94
+ const metrics = new Metrics();
95
+ await start({ config, metrics });
96
+
97
+ const res = await fetch(
98
+ 'http://localhost:3000/json/new?token=browserless',
99
+ {
100
+ method: 'PUT',
101
+ },
102
+ );
103
+ expect(res.status).to.equal(200);
104
+ const resJSON = await res.json();
105
+
106
+ const keys = [
107
+ 'description',
108
+ 'devtoolsFrontendUrl',
109
+ 'id',
110
+ 'title',
111
+ 'type',
112
+ 'url',
113
+ 'webSocketDebuggerUrl',
114
+ ];
115
+ keys.forEach((k) => expect(resJSON).to.haveOwnProperty(k));
116
+
117
+ expect(resJSON.type).to.equal('page');
118
+ expect(resJSON.title).to.equal('New Tab');
119
+ expect(resJSON.url).to.equal('about:blank');
120
+ expect(resJSON.description).to.equal('');
121
+ });
122
+
123
+ it('rejects unauthorized requests to PUT /json/new', async () => {
124
+ const config = new Config();
125
+ config.setToken('browserless');
126
+ const metrics = new Metrics();
127
+ await start({ config, metrics });
128
+
129
+ const res = await fetch('http://localhost:3000/json/new?token=imabadboi', {
130
+ method: 'PUT',
131
+ });
132
+ expect(res.status).to.equal(401);
133
+ });
134
+ });
@@ -454,7 +454,9 @@ describe('/chromium/scrape API', function () {
454
454
  expect(json.data).to.have.length(3);
455
455
 
456
456
  const aResults = json.data.find((item: any) => item.selector === 'a');
457
- const nonexistentResults = json.data.find((item: any) => item.selector === 'nonexistent-element');
457
+ const nonexistentResults = json.data.find(
458
+ (item: any) => item.selector === 'nonexistent-element',
459
+ );
458
460
  const h1Results = json.data.find((item: any) => item.selector === 'h1');
459
461
 
460
462
  expect(aResults.results).to.be.an('array');
@@ -373,4 +373,28 @@ describe('/edge/content API', function () {
373
373
  expect(res.status).to.equal(200);
374
374
  });
375
375
  });
376
+
377
+ it('can accept insecure certs', async () => {
378
+ const config = new Config();
379
+ config.setToken('browserless');
380
+ const metrics = new Metrics();
381
+ await start({ config, metrics });
382
+
383
+ const body = {
384
+ gotoOptions: {
385
+ waitUntil: `networkidle2`,
386
+ },
387
+ url: 'https://self-signed.badssl.com',
388
+ };
389
+
390
+ await fetch('http://localhost:3000/edge/content?token=browserless&launch={"acceptInsecureCerts":true}', {
391
+ body: JSON.stringify(body),
392
+ headers: {
393
+ 'content-type': 'application/json',
394
+ },
395
+ method: 'POST',
396
+ }).then(async (res) => {
397
+ expect(res.status).to.equal(200);
398
+ });
399
+ });
376
400
  });
@@ -0,0 +1,134 @@
1
+ import { Browserless, Config, Metrics } from '@browserless.io/browserless';
2
+ import { expect } from 'chai';
3
+
4
+ describe('/json/ API', function () {
5
+ let browserless: Browserless;
6
+
7
+ const start = ({
8
+ config = new Config(),
9
+ metrics = new Metrics(),
10
+ }: { config?: Config; metrics?: Metrics } = {}) => {
11
+ browserless = new Browserless({ config, metrics });
12
+ return browserless.start();
13
+ };
14
+
15
+ afterEach(async () => {
16
+ await browserless.stop();
17
+ });
18
+
19
+ it('allows requests to /json/version', async () => {
20
+ const config = new Config();
21
+ config.setToken('browserless');
22
+ const metrics = new Metrics();
23
+ await start({ config, metrics });
24
+
25
+ const res = await fetch(
26
+ 'http://localhost:3000/json/version?token=browserless',
27
+ );
28
+ const resJSON = await res.json();
29
+
30
+ [
31
+ 'Browser',
32
+ 'Protocol-Version',
33
+ 'User-Agent',
34
+ 'V8-Version',
35
+ 'WebKit-Version',
36
+ 'webSocketDebuggerUrl',
37
+ 'Debugger-Version',
38
+ ].forEach((k) => expect(resJSON).to.haveOwnProperty(k));
39
+ });
40
+
41
+ it('rejects unauthorized requests to /json/version', async () => {
42
+ const config = new Config();
43
+ config.setToken('browserless');
44
+ const metrics = new Metrics();
45
+ await start({ config, metrics });
46
+
47
+ const res = await fetch(
48
+ 'http://localhost:3000/json/version?token=imabadboi',
49
+ );
50
+ expect(res.status).to.equal(401);
51
+ });
52
+
53
+ it('rejects unauthorized requests to /json/list', async () => {
54
+ const config = new Config();
55
+ config.setToken('browserless');
56
+ const metrics = new Metrics();
57
+ await start({ config, metrics });
58
+
59
+ const res = await fetch('http://localhost:3000/json/list?token=imabadboi');
60
+ expect(res.status).to.equal(401);
61
+ });
62
+
63
+ it('allows requests to /json/protocol', async () => {
64
+ const config = new Config();
65
+ config.setToken('browserless');
66
+ const metrics = new Metrics();
67
+ await start({ config, metrics });
68
+
69
+ const res = await fetch(
70
+ 'http://localhost:3000/json/protocol?token=browserless',
71
+ );
72
+ expect(res.status).to.equal(200);
73
+ const resJSON = await res.json();
74
+ expect(resJSON).to.be.an('object');
75
+ expect(resJSON).to.haveOwnProperty('version');
76
+ expect(resJSON).to.haveOwnProperty('domains');
77
+ });
78
+
79
+ it('rejects unauthorized requests to /json/protocol', async () => {
80
+ const config = new Config();
81
+ config.setToken('browserless');
82
+ const metrics = new Metrics();
83
+ await start({ config, metrics });
84
+
85
+ const res = await fetch(
86
+ 'http://localhost:3000/json/protocol?token=imabadboi',
87
+ );
88
+ expect(res.status).to.equal(401);
89
+ });
90
+
91
+ it('allows requests to PUT /json/new', async () => {
92
+ const config = new Config();
93
+ config.setToken('browserless');
94
+ const metrics = new Metrics();
95
+ await start({ config, metrics });
96
+
97
+ const res = await fetch(
98
+ 'http://localhost:3000/json/new?token=browserless',
99
+ {
100
+ method: 'PUT',
101
+ },
102
+ );
103
+ expect(res.status).to.equal(200);
104
+ const resJSON = await res.json();
105
+
106
+ const keys = [
107
+ 'description',
108
+ 'devtoolsFrontendUrl',
109
+ 'id',
110
+ 'title',
111
+ 'type',
112
+ 'url',
113
+ 'webSocketDebuggerUrl',
114
+ ];
115
+ keys.forEach((k) => expect(resJSON).to.haveOwnProperty(k));
116
+
117
+ expect(resJSON.type).to.equal('page');
118
+ expect(resJSON.title).to.equal('New Tab');
119
+ expect(resJSON.url).to.equal('about:blank');
120
+ expect(resJSON.description).to.equal('');
121
+ });
122
+
123
+ it('rejects unauthorized requests to PUT /json/new', async () => {
124
+ const config = new Config();
125
+ config.setToken('browserless');
126
+ const metrics = new Metrics();
127
+ await start({ config, metrics });
128
+
129
+ const res = await fetch('http://localhost:3000/json/new?token=imabadboi', {
130
+ method: 'PUT',
131
+ });
132
+ expect(res.status).to.equal(401);
133
+ });
134
+ });