@browserless.io/browserless 2.2.0-beta-8 → 2.2.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 (1316) hide show
  1. package/CHANGELOG.md +21 -2
  2. package/bin/browserless.js +1 -1
  3. package/bin/scaffold/README.md +8 -7
  4. package/build/browserless.js +7 -6
  5. package/build/browsers/chrome.cdp.d.ts +6 -0
  6. package/build/browsers/chrome.cdp.js +6 -0
  7. package/build/browsers/chrome.playwright.d.ts +6 -0
  8. package/build/browsers/chrome.playwright.js +6 -0
  9. package/build/browsers/{cdp-chromium.d.ts → chromium.cdp.d.ts} +3 -2
  10. package/build/browsers/{cdp-chromium.js → chromium.cdp.js} +16 -10
  11. package/build/browsers/{playwright-chromium.d.ts → chromium.playwright.d.ts} +3 -2
  12. package/build/browsers/{playwright-chromium.js → chromium.playwright.js} +6 -5
  13. package/build/browsers/{playwright-firefox.d.ts → firefox.playwright.d.ts} +2 -2
  14. package/build/browsers/{playwright-firefox.js → firefox.playwright.js} +4 -4
  15. package/build/browsers/index.d.ts +20 -10
  16. package/build/browsers/index.js +110 -11
  17. package/build/browsers/{playwright-webkit.d.ts → webkit.playwright.d.ts} +2 -2
  18. package/build/browsers/{playwright-webkit.js → webkit.playwright.js} +4 -4
  19. package/build/data/selectors.json +1 -1
  20. package/build/exports.d.ts +6 -4
  21. package/build/exports.js +6 -4
  22. package/build/hooks.d.ts +4 -5
  23. package/build/hooks.js +4 -6
  24. package/build/http.d.ts +22 -1
  25. package/build/http.js +21 -0
  26. package/build/router.js +19 -3
  27. package/build/routes/{chromium/http/content-post.body.json → chrome/http/content.post.body.json} +8 -8
  28. package/build/routes/chrome/http/content.post.d.ts +7 -0
  29. package/build/routes/chrome/http/content.post.js +6 -0
  30. package/build/routes/chrome/http/download.post.d.ts +7 -0
  31. package/build/routes/chrome/http/download.post.js +6 -0
  32. package/build/routes/chrome/http/function.post.d.ts +7 -0
  33. package/build/routes/chrome/http/function.post.js +6 -0
  34. package/build/routes/chrome/http/json-list.get.d.ts +1 -0
  35. package/build/routes/chrome/http/json-list.get.js +1 -0
  36. package/build/routes/chrome/http/json-new.put.d.ts +1 -0
  37. package/build/routes/chrome/http/json-new.put.js +1 -0
  38. package/build/routes/chrome/http/json-protocol.get.d.ts +1 -0
  39. package/build/routes/chrome/http/json-protocol.get.js +1 -0
  40. package/build/routes/chrome/http/json-version.get.d.ts +1 -0
  41. package/build/routes/chrome/http/json-version.get.js +1 -0
  42. package/build/routes/chrome/http/json-version.get.response.json +44 -0
  43. package/build/routes/{chromium/http/pdf-post.body.json → chrome/http/pdf.post.body.json} +8 -8
  44. package/build/routes/chrome/http/pdf.post.d.ts +7 -0
  45. package/build/routes/chrome/http/pdf.post.js +6 -0
  46. package/build/routes/chrome/http/performance.post.d.ts +7 -0
  47. package/build/routes/chrome/http/performance.post.js +6 -0
  48. package/build/routes/{chromium/http/scrape-post.body.json → chrome/http/scrape.post.body.json} +8 -8
  49. package/build/routes/chrome/http/scrape.post.d.ts +7 -0
  50. package/build/routes/chrome/http/scrape.post.js +6 -0
  51. package/build/routes/{chromium/http/screenshot-post.body.json → chrome/http/screenshot.post.body.json} +8 -8
  52. package/build/routes/chrome/http/screenshot.post.d.ts +7 -0
  53. package/build/routes/chrome/http/screenshot.post.js +6 -0
  54. package/build/routes/chrome/tests/content.spec.js +311 -0
  55. package/build/routes/chrome/tests/download.spec.js +67 -0
  56. package/build/routes/chrome/tests/function.spec.d.ts +1 -0
  57. package/build/routes/chrome/tests/function.spec.js +245 -0
  58. package/build/routes/chrome/tests/json-version.spec.d.ts +1 -0
  59. package/build/routes/chrome/tests/json-version.spec.js +37 -0
  60. package/build/routes/chrome/tests/page-websocket.spec.d.ts +1 -0
  61. package/build/routes/chrome/tests/page-websocket.spec.js +97 -0
  62. package/build/routes/chrome/tests/pdf.spec.d.ts +1 -0
  63. package/build/routes/chrome/tests/pdf.spec.js +333 -0
  64. package/build/routes/chrome/tests/performance.spec.d.ts +1 -0
  65. package/build/routes/chrome/tests/performance.spec.js +124 -0
  66. package/build/routes/chrome/tests/scrape.spec.d.ts +1 -0
  67. package/build/routes/chrome/tests/scrape.spec.js +354 -0
  68. package/build/routes/chrome/tests/screenshot.spec.d.ts +1 -0
  69. package/build/routes/chrome/tests/screenshot.spec.js +339 -0
  70. package/build/routes/chrome/tests/websocket.spec.d.ts +1 -0
  71. package/build/routes/chrome/tests/websocket.spec.js +371 -0
  72. package/build/routes/chrome/ws/browser.d.ts +6 -0
  73. package/build/routes/chrome/ws/browser.js +5 -0
  74. package/build/routes/chrome/ws/cdp.d.ts +7 -0
  75. package/build/routes/chrome/ws/cdp.js +6 -0
  76. package/build/routes/chrome/ws/cdp.query.json +120 -0
  77. package/build/routes/chrome/ws/page.d.ts +6 -0
  78. package/build/routes/chrome/ws/page.js +5 -0
  79. package/build/routes/chrome/ws/page.query.json +120 -0
  80. package/build/routes/chrome/ws/playwright.d.ts +7 -0
  81. package/build/routes/chrome/ws/playwright.js +6 -0
  82. package/build/routes/chromium/http/content.post.body.json +510 -0
  83. package/build/routes/chromium/http/content.post.d.ts +1 -0
  84. package/build/routes/chromium/http/content.post.js +1 -0
  85. package/build/routes/chromium/http/content.post.query.json +183 -0
  86. package/build/routes/chromium/http/content.post.response.json +5 -0
  87. package/build/routes/chromium/http/download.post.body.json +32 -0
  88. package/build/routes/chromium/http/download.post.d.ts +1 -0
  89. package/build/routes/chromium/http/download.post.js +1 -0
  90. package/build/routes/chromium/http/download.post.query.json +120 -0
  91. package/build/routes/chromium/http/download.post.response.json +4 -0
  92. package/build/routes/chromium/http/function.post.body.json +32 -0
  93. package/build/routes/chromium/http/function.post.d.ts +1 -0
  94. package/build/routes/chromium/http/function.post.js +1 -0
  95. package/build/routes/chromium/http/function.post.query.json +120 -0
  96. package/build/routes/chromium/http/function.post.response.json +4 -0
  97. package/build/routes/chromium/http/json-list.get.d.ts +1 -0
  98. package/build/routes/chromium/http/json-list.get.js +1 -0
  99. package/build/routes/chromium/http/json-list.get.response.json +52 -0
  100. package/build/routes/chromium/http/json-new.put.d.ts +1 -0
  101. package/build/routes/chromium/http/json-new.put.js +1 -0
  102. package/build/routes/chromium/http/json-new.put.response.json +44 -0
  103. package/build/routes/chromium/http/json-protocol.get.d.ts +1 -0
  104. package/build/routes/chromium/http/json-protocol.get.js +1 -0
  105. package/build/routes/chromium/http/json-protocol.get.response.json +6 -0
  106. package/build/routes/chromium/http/json-version.get.d.ts +1 -0
  107. package/build/routes/chromium/http/json-version.get.js +1 -0
  108. package/build/routes/chromium/http/json-version.get.response.json +44 -0
  109. package/build/routes/chromium/http/pdf.post.body.json +654 -0
  110. package/build/routes/chromium/http/pdf.post.d.ts +1 -0
  111. package/build/routes/chromium/http/pdf.post.js +1 -0
  112. package/build/routes/chromium/http/pdf.post.query.json +120 -0
  113. package/build/routes/chromium/http/pdf.post.response.json +5 -0
  114. package/build/routes/chromium/http/performance.post.body.json +26 -0
  115. package/build/routes/chromium/http/performance.post.d.ts +1 -0
  116. package/build/routes/chromium/http/performance.post.js +1 -0
  117. package/build/routes/chromium/http/performance.post.query.json +120 -0
  118. package/build/routes/chromium/http/performance.post.response.json +7 -0
  119. package/build/routes/chromium/http/scrape.post.body.json +557 -0
  120. package/build/routes/chromium/http/scrape.post.d.ts +1 -0
  121. package/build/routes/chromium/http/scrape.post.js +1 -0
  122. package/build/routes/chromium/http/scrape.post.query.json +183 -0
  123. package/build/routes/chromium/http/scrape.post.response.json +309 -0
  124. package/build/routes/chromium/http/screenshot.post.body.json +600 -0
  125. package/build/routes/chromium/http/screenshot.post.d.ts +1 -0
  126. package/build/routes/chromium/http/screenshot.post.js +1 -0
  127. package/build/routes/chromium/http/screenshot.post.query.json +120 -0
  128. package/build/routes/chromium/http/screenshot.post.response.json +5 -0
  129. package/build/routes/chromium/tests/content.spec.js +16 -16
  130. package/build/routes/chromium/tests/download.spec.js +3 -3
  131. package/build/routes/chromium/tests/function.spec.js +10 -10
  132. package/build/routes/chromium/tests/page-websocket.spec.d.ts +1 -0
  133. package/build/routes/chromium/tests/page-websocket.spec.js +97 -0
  134. package/build/routes/chromium/tests/pdf.spec.js +16 -16
  135. package/build/routes/chromium/tests/performance.spec.js +7 -7
  136. package/build/routes/chromium/tests/scrape.spec.js +15 -15
  137. package/build/routes/chromium/tests/screenshot.spec.js +17 -17
  138. package/build/routes/chromium/tests/websocket.spec.js +31 -37
  139. package/build/routes/chromium/ws/browser.d.ts +1 -16
  140. package/build/routes/chromium/ws/browser.js +1 -10
  141. package/build/routes/chromium/ws/cdp.d.ts +1 -0
  142. package/build/routes/chromium/ws/cdp.js +1 -0
  143. package/build/routes/chromium/ws/cdp.query.json +120 -0
  144. package/build/routes/chromium/ws/page.d.ts +1 -16
  145. package/build/routes/chromium/ws/page.js +1 -10
  146. package/build/routes/chromium/ws/playwright.d.ts +1 -0
  147. package/build/routes/chromium/ws/playwright.js +1 -0
  148. package/build/routes/firefox/ws/{playwright-firefox.d.ts → playwright.d.ts} +5 -5
  149. package/build/routes/firefox/ws/{playwright-firefox.js → playwright.js} +4 -4
  150. package/build/routes/management/http/{sessions-get.response.json → sessions.get.response.json} +11 -1
  151. package/build/routes/management/http/{static-get.js → static.get.js} +2 -2
  152. package/build/routes/webkit/ws/{playwright-webkit.d.ts → playwright.d.ts} +5 -5
  153. package/build/routes/webkit/ws/{playwright-webkit.js → playwright.js} +4 -4
  154. package/build/routes/webkit/ws/playwright.query.json +100 -0
  155. package/build/{routes/chromium/ws/cdp-chromium.d.ts → shared/browser.ws.d.ts} +4 -4
  156. package/build/shared/browser.ws.js +12 -0
  157. package/build/{routes/chromium/ws/playwright-chromium.d.ts → shared/chromium.playwright.ws.d.ts} +4 -4
  158. package/build/{routes/chromium/ws/playwright-chromium.js → shared/chromium.playwright.ws.js} +6 -3
  159. package/build/shared/chromium.ws.d.ts +16 -0
  160. package/build/shared/chromium.ws.js +10 -0
  161. package/build/{routes/chromium/http/content-post.d.ts → shared/content.http.d.ts} +3 -3
  162. package/build/{routes/chromium/http/content-post.js → shared/content.http.js} +3 -3
  163. package/build/{routes/chromium/http/download-post.d.ts → shared/download.http.d.ts} +3 -3
  164. package/build/{routes/chromium/http/download-post.js → shared/download.http.js} +4 -4
  165. package/build/{routes/chromium/http/function-post.d.ts → shared/function.http.d.ts} +3 -3
  166. package/build/{routes/chromium/http/function-post.js → shared/function.http.js} +4 -4
  167. package/build/{routes/chromium/http/json-new.d.ts → shared/json-list.http.d.ts} +2 -3
  168. package/build/{routes/chromium/http/json-list.js → shared/json-list.http.js} +5 -8
  169. package/build/{routes/chromium/http/json-list.d.ts → shared/json-new.http.d.ts} +2 -3
  170. package/build/shared/json-new.http.js +34 -0
  171. package/build/{routes/chromium/http/json-protocol-get.js → shared/json-protocol.http.js} +2 -2
  172. package/build/{routes/chromium/http/json-version-get.js → shared/json-version.http.js} +3 -3
  173. package/build/shared/page.ws.d.ts +16 -0
  174. package/build/shared/page.ws.js +13 -0
  175. package/build/{routes/chromium/http/pdf-post.d.ts → shared/pdf.http.d.ts} +3 -3
  176. package/build/{routes/chromium/http/pdf-post.js → shared/pdf.http.js} +3 -3
  177. package/build/{routes/chromium/http/performance.d.ts → shared/performance.http.d.ts} +3 -3
  178. package/build/{routes/chromium/http/performance.js → shared/performance.http.js} +4 -4
  179. package/build/{routes/chromium/http/scrape-post.d.ts → shared/scrape.http.d.ts} +3 -3
  180. package/build/{routes/chromium/http/scrape-post.js → shared/scrape.http.js} +3 -3
  181. package/build/{routes/chromium/http/screenshot-post.d.ts → shared/screenshot.http.d.ts} +3 -3
  182. package/build/{routes/chromium/http/screenshot-post.js → shared/screenshot.http.js} +3 -3
  183. package/build/shared/utils/performance/child.d.ts +1 -0
  184. package/build/{routes/chromium → shared}/utils/performance/main.js +1 -1
  185. package/build/shared/utils/performance/types.js +1 -0
  186. package/build/shim.js +2 -1
  187. package/build/types.d.ts +10 -8
  188. package/build/utils.d.ts +8 -3
  189. package/build/utils.js +24 -11
  190. package/docker/base/Dockerfile +1 -1
  191. package/docker/chrome/Dockerfile +4 -4
  192. package/docker/chromium/.dockerignore +16 -0
  193. package/docker/chromium/Dockerfile +40 -0
  194. package/docker/firefox/Dockerfile +1 -1
  195. package/docker/multi/Dockerfile +13 -1
  196. package/docker/webkit/Dockerfile +1 -1
  197. package/extensions/ublock/3p-filters.html +1 -1
  198. package/extensions/ublock/_locales/ar/messages.json +4 -0
  199. package/extensions/ublock/_locales/az/messages.json +4 -0
  200. package/extensions/ublock/_locales/be/messages.json +4 -0
  201. package/extensions/ublock/_locales/bg/messages.json +5 -1
  202. package/extensions/ublock/_locales/bn/messages.json +4 -0
  203. package/extensions/ublock/_locales/br_FR/messages.json +6 -2
  204. package/extensions/ublock/_locales/bs/messages.json +4 -0
  205. package/extensions/ublock/_locales/ca/messages.json +4 -0
  206. package/extensions/ublock/_locales/cs/messages.json +4 -0
  207. package/extensions/ublock/_locales/cv/messages.json +4 -0
  208. package/extensions/ublock/_locales/cy/messages.json +1294 -0
  209. package/extensions/ublock/_locales/da/messages.json +4 -0
  210. package/extensions/ublock/_locales/de/messages.json +5 -1
  211. package/extensions/ublock/_locales/el/messages.json +4 -0
  212. package/extensions/ublock/_locales/en/messages.json +4 -0
  213. package/extensions/ublock/_locales/en_GB/messages.json +4 -0
  214. package/extensions/ublock/_locales/eo/messages.json +9 -5
  215. package/extensions/ublock/_locales/es/messages.json +4 -0
  216. package/extensions/ublock/_locales/et/messages.json +4 -0
  217. package/extensions/ublock/_locales/eu/messages.json +8 -4
  218. package/extensions/ublock/_locales/fa/messages.json +4 -0
  219. package/extensions/ublock/_locales/fi/messages.json +4 -0
  220. package/extensions/ublock/_locales/fil/messages.json +4 -0
  221. package/extensions/ublock/_locales/fr/messages.json +4 -0
  222. package/extensions/ublock/_locales/fy/messages.json +4 -0
  223. package/extensions/ublock/_locales/gl/messages.json +4 -0
  224. package/extensions/ublock/_locales/gu/messages.json +4 -0
  225. package/extensions/ublock/_locales/he/messages.json +4 -0
  226. package/extensions/ublock/_locales/hi/messages.json +4 -0
  227. package/extensions/ublock/_locales/hr/messages.json +4 -0
  228. package/extensions/ublock/_locales/hu/messages.json +4 -0
  229. package/extensions/ublock/_locales/hy/messages.json +4 -0
  230. package/extensions/ublock/_locales/id/messages.json +5 -1
  231. package/extensions/ublock/_locales/it/messages.json +4 -0
  232. package/extensions/ublock/_locales/ja/messages.json +4 -0
  233. package/extensions/ublock/_locales/ka/messages.json +34 -30
  234. package/extensions/ublock/_locales/kk/messages.json +4 -0
  235. package/extensions/ublock/_locales/kn/messages.json +4 -0
  236. package/extensions/ublock/_locales/ko/messages.json +4 -0
  237. package/extensions/ublock/_locales/ku/messages.json +4 -0
  238. package/extensions/ublock/_locales/lt/messages.json +4 -0
  239. package/extensions/ublock/_locales/lv/messages.json +4 -0
  240. package/extensions/ublock/_locales/mk/messages.json +4 -0
  241. package/extensions/ublock/_locales/ml/messages.json +4 -0
  242. package/extensions/ublock/_locales/mr/messages.json +4 -0
  243. package/extensions/ublock/_locales/ms/messages.json +13 -9
  244. package/extensions/ublock/_locales/nb/messages.json +4 -0
  245. package/extensions/ublock/_locales/nl/messages.json +4 -0
  246. package/extensions/ublock/_locales/no/messages.json +4 -0
  247. package/extensions/ublock/_locales/oc/messages.json +4 -0
  248. package/extensions/ublock/_locales/pa/messages.json +4 -0
  249. package/extensions/ublock/_locales/pl/messages.json +5 -1
  250. package/extensions/ublock/_locales/pt_BR/messages.json +4 -0
  251. package/extensions/ublock/_locales/pt_PT/messages.json +4 -0
  252. package/extensions/ublock/_locales/ro/messages.json +5 -1
  253. package/extensions/ublock/_locales/ru/messages.json +4 -0
  254. package/extensions/ublock/_locales/si/messages.json +4 -0
  255. package/extensions/ublock/_locales/sk/messages.json +4 -0
  256. package/extensions/ublock/_locales/sl/messages.json +4 -0
  257. package/extensions/ublock/_locales/so/messages.json +4 -0
  258. package/extensions/ublock/_locales/sq/messages.json +4 -0
  259. package/extensions/ublock/_locales/sr/messages.json +4 -0
  260. package/extensions/ublock/_locales/sv/messages.json +4 -0
  261. package/extensions/ublock/_locales/sw/messages.json +4 -0
  262. package/extensions/ublock/_locales/ta/messages.json +4 -0
  263. package/extensions/ublock/_locales/te/messages.json +4 -0
  264. package/extensions/ublock/_locales/th/messages.json +12 -8
  265. package/extensions/ublock/_locales/tr/messages.json +4 -0
  266. package/extensions/ublock/_locales/uk/messages.json +4 -0
  267. package/extensions/ublock/_locales/ur/messages.json +4 -0
  268. package/extensions/ublock/_locales/vi/messages.json +4 -0
  269. package/extensions/ublock/_locales/zh_CN/messages.json +6 -2
  270. package/extensions/ublock/_locales/zh_TW/messages.json +6 -2
  271. package/extensions/ublock/assets/assets.json +11 -11
  272. package/extensions/ublock/assets/resources/scriptlets.js +660 -378
  273. package/extensions/ublock/assets/thirdparties/easylist/easylist.txt +7173 -3455
  274. package/extensions/ublock/assets/thirdparties/easylist/easyprivacy.txt +18829 -1918
  275. package/extensions/ublock/assets/thirdparties/pgl.yoyo.org/as/serverlist +21 -26
  276. package/extensions/ublock/assets/thirdparties/publicsuffix.org/list/effective_tld_names.dat +118 -46
  277. package/extensions/ublock/assets/thirdparties/urlhaus-filter/urlhaus-filter-online.txt +710 -1117
  278. package/extensions/ublock/assets/ublock/badlists.txt +0 -4
  279. package/extensions/ublock/assets/ublock/badware.min.txt +116 -105
  280. package/extensions/ublock/assets/ublock/filters.min.txt +1443 -1097
  281. package/extensions/ublock/assets/ublock/privacy.min.txt +50 -31
  282. package/extensions/ublock/assets/ublock/quick-fixes.min.txt +97 -108
  283. package/extensions/ublock/assets/ublock/unbreak.min.txt +64 -21
  284. package/extensions/ublock/css/1p-filters.css +4 -0
  285. package/extensions/ublock/css/3p-filters.css +6 -4
  286. package/extensions/ublock/css/common.css +1 -1
  287. package/extensions/ublock/css/fa-icons.css +1 -0
  288. package/extensions/ublock/css/logger-ui.css +72 -52
  289. package/extensions/ublock/css/popup-fenix.css +1 -1
  290. package/extensions/ublock/img/fontawesome/fontawesome-defs.svg +1 -0
  291. package/extensions/ublock/js/3p-filters.js +3 -3
  292. package/extensions/ublock/js/assets.js +7 -4
  293. package/extensions/ublock/js/background.js +1 -3
  294. package/extensions/ublock/js/benchmarks.js +1 -0
  295. package/extensions/ublock/js/broadcast.js +12 -0
  296. package/extensions/ublock/js/click2load.js +2 -3
  297. package/extensions/ublock/js/codemirror/ubo-static-filtering.js +1 -0
  298. package/extensions/ublock/js/commands.js +10 -0
  299. package/extensions/ublock/js/contentscript-extra.js +13 -11
  300. package/extensions/ublock/js/contentscript.js +0 -31
  301. package/extensions/ublock/js/contextmenu.js +5 -1
  302. package/extensions/ublock/js/dyna-rules.js +83 -52
  303. package/extensions/ublock/js/fa-icons.js +1 -0
  304. package/extensions/ublock/js/filtering-context.js +0 -2
  305. package/extensions/ublock/js/i18n.js +1 -5
  306. package/extensions/ublock/js/logger-ui.js +71 -38
  307. package/extensions/ublock/js/logger.js +18 -14
  308. package/extensions/ublock/js/messaging.js +17 -5
  309. package/extensions/ublock/js/popup-fenix.js +6 -6
  310. package/extensions/ublock/js/scriptlet-filtering-core.js +14 -12
  311. package/extensions/ublock/js/scriptlet-filtering.js +149 -53
  312. package/extensions/ublock/js/scriptlets/scriptlet-loglevel-1.js +49 -0
  313. package/extensions/ublock/js/scriptlets/scriptlet-loglevel-2.js +49 -0
  314. package/extensions/ublock/js/scriptlets/should-inject-contentscript.js +1 -1
  315. package/extensions/ublock/js/static-dnr-filtering.js +4 -2
  316. package/extensions/ublock/js/static-filtering-parser.js +14 -8
  317. package/extensions/ublock/js/static-net-filtering.js +32 -30
  318. package/extensions/ublock/js/storage.js +18 -4
  319. package/extensions/ublock/js/traffic.js +3 -3
  320. package/extensions/ublock/js/ublock.js +1 -1
  321. package/extensions/ublock/js/vapi-background.js +15 -7
  322. package/extensions/ublock/logger-ui.html +18 -10
  323. package/extensions/ublock/manifest.json +4 -1
  324. package/extensions/ublock/web_accessible_resources/chartbeat.js +3 -0
  325. package/package.json +12 -11
  326. package/scripts/build-function.js +1 -1
  327. package/scripts/build-open-api.js +3 -2
  328. package/scripts/clean.js +6 -1
  329. package/scripts/install-debugger.js +20 -0
  330. package/scripts/install-devtools.js +40 -0
  331. package/src/browserless.ts +11 -9
  332. package/src/browsers/chrome.cdp.ts +10 -0
  333. package/src/browsers/chrome.playwright.ts +10 -0
  334. package/src/browsers/{cdp-chromium.ts → chromium.cdp.ts} +20 -13
  335. package/src/browsers/{playwright-chromium.ts → chromium.playwright.ts} +7 -6
  336. package/src/browsers/{playwright-firefox.ts → firefox.playwright.ts} +5 -5
  337. package/src/browsers/index.ts +160 -23
  338. package/src/browsers/{playwright-webkit.ts → webkit.playwright.ts} +5 -5
  339. package/src/exports.ts +6 -4
  340. package/src/hooks.ts +4 -12
  341. package/src/http.ts +21 -0
  342. package/src/router.ts +21 -5
  343. package/src/routes/chrome/http/content.post.ts +14 -0
  344. package/src/routes/chrome/http/download.post.ts +14 -0
  345. package/src/routes/chrome/http/function.post.ts +14 -0
  346. package/src/routes/chrome/http/json-list.get.ts +1 -0
  347. package/src/routes/chrome/http/json-new.put.ts +1 -0
  348. package/src/routes/chrome/http/json-protocol.get.ts +1 -0
  349. package/src/routes/chrome/http/json-version.get.ts +1 -0
  350. package/src/routes/chrome/http/pdf.post.ts +14 -0
  351. package/src/routes/chrome/http/performance.post.ts +14 -0
  352. package/src/routes/chrome/http/scrape.post.ts +14 -0
  353. package/src/routes/chrome/http/screenshot.post.ts +14 -0
  354. package/src/routes/chrome/tests/content.spec.ts +375 -0
  355. package/src/routes/chrome/tests/download.spec.ts +77 -0
  356. package/src/routes/chrome/tests/function.spec.ts +282 -0
  357. package/src/routes/chrome/tests/json-version.spec.ts +52 -0
  358. package/src/routes/chrome/tests/page-websocket.spec.ts +129 -0
  359. package/src/routes/chrome/tests/pdf.spec.ts +380 -0
  360. package/src/routes/chrome/tests/performance.spec.ts +155 -0
  361. package/src/routes/chrome/tests/scrape.spec.ts +417 -0
  362. package/src/routes/chrome/tests/screenshot.spec.ts +387 -0
  363. package/src/routes/chrome/tests/websocket.spec.ts +491 -0
  364. package/src/routes/chrome/ws/browser.ts +8 -0
  365. package/src/routes/chrome/ws/cdp.ts +12 -0
  366. package/src/routes/chrome/ws/page.ts +8 -0
  367. package/src/routes/chrome/ws/playwright.ts +12 -0
  368. package/src/routes/chromium/http/content.post.ts +6 -0
  369. package/src/routes/chromium/http/download.post.ts +6 -0
  370. package/src/routes/chromium/http/function.post.ts +6 -0
  371. package/src/routes/chromium/http/json-list.get.ts +1 -0
  372. package/src/routes/chromium/http/json-new.put.ts +1 -0
  373. package/src/routes/chromium/http/json-protocol.get.ts +1 -0
  374. package/src/routes/chromium/http/json-version.get.ts +1 -0
  375. package/src/routes/chromium/http/pdf.post.ts +6 -0
  376. package/src/routes/chromium/http/performance.post.ts +6 -0
  377. package/src/routes/chromium/http/scrape.post.ts +6 -0
  378. package/src/routes/chromium/http/screenshot.post.ts +6 -0
  379. package/src/routes/chromium/tests/content.spec.ts +36 -28
  380. package/src/routes/chromium/tests/download.spec.ts +3 -3
  381. package/src/routes/chromium/tests/function.spec.ts +18 -15
  382. package/src/routes/chromium/tests/page-websocket.spec.ts +129 -0
  383. package/src/routes/chromium/tests/pdf.spec.ts +31 -26
  384. package/src/routes/chromium/tests/performance.spec.ts +46 -34
  385. package/src/routes/chromium/tests/scrape.spec.ts +23 -20
  386. package/src/routes/chromium/tests/screenshot.spec.ts +24 -24
  387. package/src/routes/chromium/tests/websocket.spec.ts +31 -40
  388. package/src/routes/chromium/ws/browser.ts +1 -29
  389. package/src/routes/chromium/ws/cdp.ts +1 -0
  390. package/src/routes/chromium/ws/page.ts +1 -29
  391. package/src/routes/chromium/ws/playwright.ts +4 -0
  392. package/src/routes/firefox/ws/{playwright-firefox.ts → playwright.ts} +5 -5
  393. package/src/routes/management/http/{static-get.ts → static.get.ts} +2 -2
  394. package/src/routes/webkit/ws/{playwright-webkit.ts → playwright.ts} +5 -5
  395. package/src/shared/browser.ws.ts +34 -0
  396. package/src/{routes/chromium/ws/playwright-chromium.ts → shared/chromium.playwright.ws.ts} +7 -4
  397. package/src/{routes/chromium/ws/cdp-chromium.ts → shared/chromium.ws.ts} +6 -6
  398. package/src/{routes/chromium/http/content-post.ts → shared/content.http.ts} +4 -4
  399. package/src/{routes/chromium/http/download-post.ts → shared/download.http.ts} +4 -4
  400. package/src/{routes/chromium/http/function-post.ts → shared/function.http.ts} +4 -4
  401. package/src/shared/json-list.http.ts +35 -0
  402. package/src/{routes/chromium/http/json-new.ts → shared/json-new.http.ts} +23 -7
  403. package/src/{routes/chromium/http/json-protocol-get.ts → shared/json-protocol.http.ts} +3 -5
  404. package/src/{routes/chromium/http/json-version-get.ts → shared/json-version.http.ts} +4 -5
  405. package/src/shared/page.ws.ts +35 -0
  406. package/src/{routes/chromium/http/pdf-post.ts → shared/pdf.http.ts} +4 -4
  407. package/src/{routes/chromium/http/performance.ts → shared/performance.http.ts} +4 -4
  408. package/src/{routes/chromium/http/scrape-post.ts → shared/scrape.http.ts} +4 -4
  409. package/src/{routes/chromium/http/screenshot-post.ts → shared/screenshot.http.ts} +4 -4
  410. package/src/{routes/chromium → shared}/utils/function/handler.ts +2 -2
  411. package/src/{routes/chromium → shared}/utils/performance/main.ts +1 -2
  412. package/src/shim.ts +2 -1
  413. package/src/types.ts +27 -20
  414. package/src/utils.ts +32 -14
  415. package/static/devtools/Images/accelerometer-back.svg +1 -0
  416. package/static/devtools/Images/accelerometer-bottom.png +0 -0
  417. package/static/devtools/Images/accelerometer-front.svg +1 -0
  418. package/static/devtools/Images/accelerometer-left.png +0 -0
  419. package/static/devtools/Images/accelerometer-right.png +0 -0
  420. package/static/devtools/Images/accelerometer-top.png +0 -0
  421. package/static/devtools/Images/baseline-icon.svg +1 -0
  422. package/static/devtools/Images/breaking_change_icon.svg +1 -0
  423. package/static/devtools/Images/checkboxCheckmark.svg +1 -0
  424. package/static/devtools/Images/checker.png +0 -0
  425. package/static/devtools/Images/chevrons.svg +1 -0
  426. package/static/devtools/Images/chromeDisabledSelect.png +0 -0
  427. package/static/devtools/Images/chromeDisabledSelect_2x.png +0 -0
  428. package/static/devtools/Images/chromeLeft.avif +0 -0
  429. package/static/devtools/Images/chromeMiddle.avif +0 -0
  430. package/static/devtools/Images/chromeRight.avif +0 -0
  431. package/static/devtools/Images/chromeSelect.svg +1 -0
  432. package/static/devtools/Images/chromeSelectDark.svg +1 -0
  433. package/static/devtools/Images/cssoverview_icons_2x.avif +0 -0
  434. package/static/devtools/Images/dropdown_7x6_icon.svg +1 -0
  435. package/static/devtools/Images/elements_panel_icon.svg +1 -0
  436. package/static/devtools/Images/errorWave.svg +1 -0
  437. package/static/devtools/Images/error_icon.svg +1 -0
  438. package/static/devtools/Images/feedback_thin_16x16_icon.svg +1 -0
  439. package/static/devtools/Images/flex-align-content-center-icon.svg +1 -0
  440. package/static/devtools/Images/flex-align-content-end-icon.svg +1 -0
  441. package/static/devtools/Images/flex-align-content-space-around-icon.svg +1 -0
  442. package/static/devtools/Images/flex-align-content-space-between-icon.svg +1 -0
  443. package/static/devtools/Images/flex-align-content-space-evenly-icon.svg +1 -0
  444. package/static/devtools/Images/flex-align-content-start-icon.svg +1 -0
  445. package/static/devtools/Images/flex-align-content-stretch-icon.svg +1 -0
  446. package/static/devtools/Images/flex-align-items-center-icon.svg +1 -0
  447. package/static/devtools/Images/flex-align-items-flex-end-icon.svg +1 -0
  448. package/static/devtools/Images/flex-align-items-flex-start-icon.svg +1 -0
  449. package/static/devtools/Images/flex-align-items-stretch-icon.svg +1 -0
  450. package/static/devtools/Images/flex-align-self-center-icon.svg +1 -0
  451. package/static/devtools/Images/flex-align-self-flex-end-icon.svg +1 -0
  452. package/static/devtools/Images/flex-align-self-flex-start-icon.svg +1 -0
  453. package/static/devtools/Images/flex-align-self-stretch-icon.svg +1 -0
  454. package/static/devtools/Images/flex-direction-icon.svg +1 -0
  455. package/static/devtools/Images/flex-justify-content-center-icon.svg +1 -0
  456. package/static/devtools/Images/flex-justify-content-flex-end-icon.svg +1 -0
  457. package/static/devtools/Images/flex-justify-content-flex-start-icon.svg +1 -0
  458. package/static/devtools/Images/flex-justify-content-space-around-icon.svg +1 -0
  459. package/static/devtools/Images/flex-justify-content-space-between-icon.svg +1 -0
  460. package/static/devtools/Images/flex-justify-content-space-evenly-icon.svg +1 -0
  461. package/static/devtools/Images/ic_checkmark_16x16.svg +3 -0
  462. package/static/devtools/Images/ic_delete_filter.svg +1 -0
  463. package/static/devtools/Images/ic_delete_list.svg +1 -0
  464. package/static/devtools/Images/ic_info_black_18dp.svg +1 -0
  465. package/static/devtools/Images/ic_page_next_16x16_icon.svg +1 -0
  466. package/static/devtools/Images/ic_page_prev_16x16_icon.svg +1 -0
  467. package/static/devtools/Images/ic_redo_16x16_icon.svg +1 -0
  468. package/static/devtools/Images/ic_show_node_16x16.svg +4 -0
  469. package/static/devtools/Images/ic_suggest_color.svg +6 -0
  470. package/static/devtools/Images/ic_undo_16x16_icon.svg +1 -0
  471. package/static/devtools/Images/ic_warning_black_18dp.svg +1 -0
  472. package/static/devtools/Images/issue-text-icon.svg +1 -0
  473. package/static/devtools/Images/largeIcons.svg +1 -0
  474. package/static/devtools/Images/lighthouse_logo.svg +1 -0
  475. package/static/devtools/Images/link_icon.svg +1 -0
  476. package/static/devtools/Images/mediumIcons.svg +1 -0
  477. package/static/devtools/Images/navigationControls.png +0 -0
  478. package/static/devtools/Images/navigationControls_2x.png +0 -0
  479. package/static/devtools/Images/network_panel_icon.svg +1 -0
  480. package/static/devtools/Images/nodeIcon.avif +0 -0
  481. package/static/devtools/Images/node_search_icon.svg +1 -0
  482. package/static/devtools/Images/popoverArrows.png +0 -0
  483. package/static/devtools/Images/profileGroupIcon.png +0 -0
  484. package/static/devtools/Images/profileIcon.png +0 -0
  485. package/static/devtools/Images/profileSmallIcon.png +0 -0
  486. package/static/devtools/Images/radioDot-dark-theme.png +0 -0
  487. package/static/devtools/Images/radioDot.png +0 -0
  488. package/static/devtools/Images/refresh_12x12_icon.svg +1 -0
  489. package/static/devtools/Images/resizeDiagonal.svg +1 -0
  490. package/static/devtools/Images/resizeHorizontal.svg +1 -0
  491. package/static/devtools/Images/resizeVertical.svg +1 -0
  492. package/static/devtools/Images/resourceCSSIcon.png +0 -0
  493. package/static/devtools/Images/resourceDocumentIcon.png +0 -0
  494. package/static/devtools/Images/resourceDocumentIconSmall.png +0 -0
  495. package/static/devtools/Images/resourceJSIcon.png +0 -0
  496. package/static/devtools/Images/resourcePlainIcon.png +0 -0
  497. package/static/devtools/Images/resourcePlainIconSmall.png +0 -0
  498. package/static/devtools/Images/resourcesTimeGraphIcon.avif +0 -0
  499. package/static/devtools/Images/searchNext.png +0 -0
  500. package/static/devtools/Images/searchPrev.png +0 -0
  501. package/static/devtools/Images/securityIcons.svg +1 -0
  502. package/static/devtools/Images/settings_14x14_icon.svg +1 -0
  503. package/static/devtools/Images/smallIcons.svg +1 -0
  504. package/static/devtools/Images/sources_panel_icon.svg +1 -0
  505. package/static/devtools/Images/speech.png +0 -0
  506. package/static/devtools/Images/toolbarResizerVertical.png +0 -0
  507. package/static/devtools/Images/touchCursor.png +0 -0
  508. package/static/devtools/Images/touchCursor_2x.png +0 -0
  509. package/static/devtools/Images/treeoutlineTriangles.svg +1 -0
  510. package/static/devtools/Images/warning_icon.svg +1 -0
  511. package/static/devtools/Images/whatsnew.avif +0 -0
  512. package/static/devtools/Tests.js +1654 -0
  513. package/static/devtools/accessibility/accessibility-legacy.js +1 -0
  514. package/static/devtools/accessibility/accessibility-meta.js +1 -0
  515. package/static/devtools/accessibility/accessibility.js +1 -0
  516. package/static/devtools/accessibility/accessibility_module.js +1 -0
  517. package/static/devtools/accessibility_test_runner/accessibility_test_runner.js +77 -0
  518. package/static/devtools/accessibility_test_runner/accessibility_test_runner_module.js +0 -0
  519. package/static/devtools/animation/animation-legacy.js +1 -0
  520. package/static/devtools/animation/animation-meta.js +1 -0
  521. package/static/devtools/animation/animation.js +1 -0
  522. package/static/devtools/animation/animation_module.js +1 -0
  523. package/static/devtools/application_test_runner/AppcacheTestRunner.js +220 -0
  524. package/static/devtools/application_test_runner/CacheStorageTestRunner.js +286 -0
  525. package/static/devtools/application_test_runner/IndexedDBTestRunner.js +476 -0
  526. package/static/devtools/application_test_runner/ResourceTreeTestRunner.js +99 -0
  527. package/static/devtools/application_test_runner/ResourcesTestRunner.js +167 -0
  528. package/static/devtools/application_test_runner/ServiceWorkersTestRunner.js +131 -0
  529. package/static/devtools/application_test_runner/application_test_runner.js +10 -0
  530. package/static/devtools/application_test_runner/application_test_runner_module.js +0 -0
  531. package/static/devtools/axe_core_test_runner/axe_core_test_runner.js +174 -0
  532. package/static/devtools/axe_core_test_runner/axe_core_test_runner_module.js +0 -0
  533. package/static/devtools/bindings/bindings-legacy.js +1 -0
  534. package/static/devtools/bindings/bindings.js +1 -0
  535. package/static/devtools/bindings_test_runner/AutomappingTestRunner.js +130 -0
  536. package/static/devtools/bindings_test_runner/BindingsTestRunner.js +238 -0
  537. package/static/devtools/bindings_test_runner/IsolatedFilesystemTestRunner.js +287 -0
  538. package/static/devtools/bindings_test_runner/OverridesTestRunner.js +26 -0
  539. package/static/devtools/bindings_test_runner/PersistenceTestRunner.js +109 -0
  540. package/static/devtools/bindings_test_runner/bindings_test_runner.js +9 -0
  541. package/static/devtools/bindings_test_runner/bindings_test_runner_module.js +0 -0
  542. package/static/devtools/browser_debugger/browser_debugger-legacy.js +1 -0
  543. package/static/devtools/browser_debugger/browser_debugger-meta.js +1 -0
  544. package/static/devtools/browser_debugger/browser_debugger.js +1 -0
  545. package/static/devtools/browser_debugger/browser_debugger_module.js +1 -0
  546. package/static/devtools/browser_sdk/browser_sdk-meta.js +1 -0
  547. package/static/devtools/browser_sdk/browser_sdk.js +1 -0
  548. package/static/devtools/changes/changes-legacy.js +1 -0
  549. package/static/devtools/changes/changes-meta.js +1 -0
  550. package/static/devtools/changes/changes.js +1 -0
  551. package/static/devtools/changes/changes_module.js +1 -0
  552. package/static/devtools/client_variations/client_variations.js +1 -0
  553. package/static/devtools/client_variations/client_variations_module.js +0 -0
  554. package/static/devtools/cm/cm.js +1 -0
  555. package/static/devtools/cm/cm_module.js +1 -0
  556. package/static/devtools/cm_headless/cm_headless.js +1 -0
  557. package/static/devtools/color_picker/color_picker-legacy.js +1 -0
  558. package/static/devtools/color_picker/color_picker.js +1 -0
  559. package/static/devtools/color_picker/color_picker_module.js +1 -0
  560. package/static/devtools/common/common-legacy.js +1 -0
  561. package/static/devtools/common/common.js +1 -0
  562. package/static/devtools/component_helpers/component_helpers.js +1 -0
  563. package/static/devtools/components/components-legacy.js +1 -0
  564. package/static/devtools/components/components.js +1 -0
  565. package/static/devtools/console/console-legacy.js +1 -0
  566. package/static/devtools/console/console-meta.js +1 -0
  567. package/static/devtools/console/console.js +6 -0
  568. package/static/devtools/console/console_module.js +1 -0
  569. package/static/devtools/console_counters/console_counters-legacy.js +1 -0
  570. package/static/devtools/console_counters/console_counters.js +1 -0
  571. package/static/devtools/console_test_runner/console_test_runner.js +696 -0
  572. package/static/devtools/console_test_runner/console_test_runner_module.js +0 -0
  573. package/static/devtools/cookie_table/cookie_table-legacy.js +1 -0
  574. package/static/devtools/cookie_table/cookie_table.js +1 -0
  575. package/static/devtools/cookie_table/cookie_table_module.js +1 -0
  576. package/static/devtools/coverage/coverage-legacy.js +1 -0
  577. package/static/devtools/coverage/coverage-meta.js +1 -0
  578. package/static/devtools/coverage/coverage.js +1 -0
  579. package/static/devtools/coverage/coverage_module.js +1 -0
  580. package/static/devtools/coverage_test_runner/coverage_test_runner.js +151 -0
  581. package/static/devtools/coverage_test_runner/coverage_test_runner_module.js +0 -0
  582. package/static/devtools/cpu_profiler_test_runner/cpu_profiler_test_runner.js +72 -0
  583. package/static/devtools/cpu_profiler_test_runner/cpu_profiler_test_runner_module.js +0 -0
  584. package/static/devtools/css_overview/css_overview-meta.js +1 -0
  585. package/static/devtools/css_overview/css_overview.js +146 -0
  586. package/static/devtools/css_overview/css_overview_module.js +1 -0
  587. package/static/devtools/data_grid/data_grid-legacy.js +1 -0
  588. package/static/devtools/data_grid/data_grid.js +1 -0
  589. package/static/devtools/data_grid/data_grid_module.js +1 -0
  590. package/static/devtools/data_grid_test_runner/data_grid_test_runner.js +78 -0
  591. package/static/devtools/data_grid_test_runner/data_grid_test_runner_module.js +0 -0
  592. package/static/devtools/developer_resources/developer_resources-legacy.js +1 -0
  593. package/static/devtools/developer_resources/developer_resources-meta.js +1 -0
  594. package/static/devtools/developer_resources/developer_resources.js +1 -0
  595. package/static/devtools/developer_resources/developer_resources_module.js +1 -0
  596. package/static/devtools/device_mode_test_runner/device_mode_test_runner.js +45 -0
  597. package/static/devtools/device_mode_test_runner/device_mode_test_runner_module.js +0 -0
  598. package/static/devtools/devtools_app.html +20 -0
  599. package/static/devtools/devtools_app.js +1 -0
  600. package/static/devtools/devtools_compatibility.js +1546 -0
  601. package/static/devtools/diff/diff-legacy.js +1 -0
  602. package/static/devtools/diff/diff.js +1 -0
  603. package/static/devtools/diff/diff_module.js +0 -0
  604. package/static/devtools/dom_extension/dom_extension.js +1 -0
  605. package/static/devtools/elements/elements-legacy.js +1 -0
  606. package/static/devtools/elements/elements-meta.js +1 -0
  607. package/static/devtools/elements/elements.js +469 -0
  608. package/static/devtools/elements/elements_module.js +1 -0
  609. package/static/devtools/elements_test_runner/EditDOMTestRunner.js +78 -0
  610. package/static/devtools/elements_test_runner/ElementsPanelShadowSelectionOnRefreshTestRunner.js +39 -0
  611. package/static/devtools/elements_test_runner/ElementsTestRunner.js +1280 -0
  612. package/static/devtools/elements_test_runner/SetOuterHTMLTestRunner.js +115 -0
  613. package/static/devtools/elements_test_runner/StylesUpdateLinksTestRunner.js +134 -0
  614. package/static/devtools/elements_test_runner/elements_test_runner.js +9 -0
  615. package/static/devtools/elements_test_runner/elements_test_runner_module.js +0 -0
  616. package/static/devtools/emulated_devices/emulated_devices_module.js +0 -0
  617. package/static/devtools/emulated_devices/optimized/MotoG4-landscape.avif +0 -0
  618. package/static/devtools/emulated_devices/optimized/MotoG4-portrait.avif +0 -0
  619. package/static/devtools/emulated_devices/optimized/Nexus5X-landscape.avif +0 -0
  620. package/static/devtools/emulated_devices/optimized/Nexus5X-portrait.avif +0 -0
  621. package/static/devtools/emulated_devices/optimized/Nexus6P-landscape.avif +0 -0
  622. package/static/devtools/emulated_devices/optimized/Nexus6P-portrait.avif +0 -0
  623. package/static/devtools/emulated_devices/optimized/google-nexus-5-horizontal-default-1x.avif +0 -0
  624. package/static/devtools/emulated_devices/optimized/google-nexus-5-horizontal-default-2x.avif +0 -0
  625. package/static/devtools/emulated_devices/optimized/google-nexus-5-horizontal-keyboard-1x.avif +0 -0
  626. package/static/devtools/emulated_devices/optimized/google-nexus-5-horizontal-keyboard-2x.avif +0 -0
  627. package/static/devtools/emulated_devices/optimized/google-nexus-5-horizontal-navigation-1x.avif +0 -0
  628. package/static/devtools/emulated_devices/optimized/google-nexus-5-horizontal-navigation-2x.avif +0 -0
  629. package/static/devtools/emulated_devices/optimized/google-nexus-5-vertical-default-1x.avif +0 -0
  630. package/static/devtools/emulated_devices/optimized/google-nexus-5-vertical-default-2x.avif +0 -0
  631. package/static/devtools/emulated_devices/optimized/google-nexus-5-vertical-keyboard-1x.avif +0 -0
  632. package/static/devtools/emulated_devices/optimized/google-nexus-5-vertical-keyboard-2x.avif +0 -0
  633. package/static/devtools/emulated_devices/optimized/google-nexus-5-vertical-navigation-1x.avif +0 -0
  634. package/static/devtools/emulated_devices/optimized/google-nexus-5-vertical-navigation-2x.avif +0 -0
  635. package/static/devtools/emulated_devices/optimized/google-nexus-5x-horizontal-default-1x.avif +0 -0
  636. package/static/devtools/emulated_devices/optimized/google-nexus-5x-horizontal-default-2x.avif +0 -0
  637. package/static/devtools/emulated_devices/optimized/google-nexus-5x-horizontal-keyboard-1x.avif +0 -0
  638. package/static/devtools/emulated_devices/optimized/google-nexus-5x-horizontal-keyboard-2x.avif +0 -0
  639. package/static/devtools/emulated_devices/optimized/google-nexus-5x-horizontal-navigation-1x.avif +0 -0
  640. package/static/devtools/emulated_devices/optimized/google-nexus-5x-horizontal-navigation-2x.avif +0 -0
  641. package/static/devtools/emulated_devices/optimized/google-nexus-5x-vertical-default-1x.avif +0 -0
  642. package/static/devtools/emulated_devices/optimized/google-nexus-5x-vertical-default-2x.avif +0 -0
  643. package/static/devtools/emulated_devices/optimized/google-nexus-5x-vertical-keyboard-1x.avif +0 -0
  644. package/static/devtools/emulated_devices/optimized/google-nexus-5x-vertical-keyboard-2x.avif +0 -0
  645. package/static/devtools/emulated_devices/optimized/google-nexus-5x-vertical-navigation-1x.avif +0 -0
  646. package/static/devtools/emulated_devices/optimized/google-nexus-5x-vertical-navigation-2x.avif +0 -0
  647. package/static/devtools/emulated_devices/optimized/iPad-landscape.avif +0 -0
  648. package/static/devtools/emulated_devices/optimized/iPad-portrait.avif +0 -0
  649. package/static/devtools/emulated_devices/optimized/iPhone5-landscape.avif +0 -0
  650. package/static/devtools/emulated_devices/optimized/iPhone5-portrait.avif +0 -0
  651. package/static/devtools/emulated_devices/optimized/iPhone6-landscape.avif +0 -0
  652. package/static/devtools/emulated_devices/optimized/iPhone6-portrait.avif +0 -0
  653. package/static/devtools/emulated_devices/optimized/iPhone6Plus-landscape.avif +0 -0
  654. package/static/devtools/emulated_devices/optimized/iPhone6Plus-portrait.avif +0 -0
  655. package/static/devtools/emulation/emulation-legacy.js +1 -0
  656. package/static/devtools/emulation/emulation-meta.js +1 -0
  657. package/static/devtools/emulation/emulation.js +1 -0
  658. package/static/devtools/event_listeners/event_listeners-legacy.js +1 -0
  659. package/static/devtools/event_listeners/event_listeners.js +1 -0
  660. package/static/devtools/event_listeners/event_listeners_module.js +1 -0
  661. package/static/devtools/extensions/extensions-legacy.js +1 -0
  662. package/static/devtools/extensions/extensions.js +1 -0
  663. package/static/devtools/extensions_test_runner/ExtensionsNetworkTestRunner.js +27 -0
  664. package/static/devtools/extensions_test_runner/ExtensionsTestRunner.js +68 -0
  665. package/static/devtools/extensions_test_runner/extensions_test_runner.js +6 -0
  666. package/static/devtools/extensions_test_runner/extensions_test_runner_module.js +0 -0
  667. package/static/devtools/formatter/formatter-legacy.js +1 -0
  668. package/static/devtools/formatter/formatter.js +1 -0
  669. package/static/devtools/formatter/formatter_module.js +0 -0
  670. package/static/devtools/formatter_worker/FormatterActions.js +1 -0
  671. package/static/devtools/formatter_worker/formatter_worker-entrypoint.js +1 -0
  672. package/static/devtools/formatter_worker/formatter_worker.js +1 -0
  673. package/static/devtools/har_importer/har_importer-legacy.js +1 -0
  674. package/static/devtools/har_importer/har_importer.js +1 -0
  675. package/static/devtools/har_importer/har_importer_module.js +0 -0
  676. package/static/devtools/heap_profiler_test_runner/heap_profiler_test_runner.js +740 -0
  677. package/static/devtools/heap_profiler_test_runner/heap_profiler_test_runner_module.js +0 -0
  678. package/static/devtools/heap_snapshot_model/heap_snapshot_model-legacy.js +1 -0
  679. package/static/devtools/heap_snapshot_model/heap_snapshot_model.js +1 -0
  680. package/static/devtools/heap_snapshot_model/heap_snapshot_model_module.js +0 -0
  681. package/static/devtools/heap_snapshot_worker/heap_snapshot_worker-entrypoint.js +1 -0
  682. package/static/devtools/heap_snapshot_worker/heap_snapshot_worker-legacy.js +1 -0
  683. package/static/devtools/heap_snapshot_worker/heap_snapshot_worker.js +1 -0
  684. package/static/devtools/heap_snapshot_worker/heap_snapshot_worker_module.js +0 -0
  685. package/static/devtools/help/help-legacy.js +1 -0
  686. package/static/devtools/help/help-meta.js +1 -0
  687. package/static/devtools/help/help.js +1 -0
  688. package/static/devtools/help/help_module.js +1 -0
  689. package/static/devtools/host/host-legacy.js +1 -0
  690. package/static/devtools/host/host.js +1 -0
  691. package/static/devtools/i18n/i18n.js +1 -0
  692. package/static/devtools/i18n/i18n_locales-tsconfig.json +8 -0
  693. package/static/devtools/i18n/locales/en-US.json +3566 -0
  694. package/static/devtools/inline_editor/inline_editor-legacy.js +1 -0
  695. package/static/devtools/inline_editor/inline_editor.js +203 -0
  696. package/static/devtools/inline_editor/inline_editor_module.js +1 -0
  697. package/static/devtools/input/input-legacy.js +1 -0
  698. package/static/devtools/input/input-meta.js +1 -0
  699. package/static/devtools/input/input.js +1 -0
  700. package/static/devtools/input/input_module.js +1 -0
  701. package/static/devtools/inspector.html +20 -0
  702. package/static/devtools/inspector.js +1 -0
  703. package/static/devtools/inspector_main/inspector_main-legacy.js +1 -0
  704. package/static/devtools/inspector_main/inspector_main-meta.js +1 -0
  705. package/static/devtools/inspector_main/inspector_main.js +1 -0
  706. package/static/devtools/integration_test_runner.html +14 -0
  707. package/static/devtools/integration_test_runner.js +2 -0
  708. package/static/devtools/issues/issues-legacy.js +1 -0
  709. package/static/devtools/issues/issues-meta.js +1 -0
  710. package/static/devtools/issues/issues.js +67 -0
  711. package/static/devtools/issues/issues_module.js +1 -0
  712. package/static/devtools/javascript_metadata/javascript_metadata-legacy.js +1 -0
  713. package/static/devtools/javascript_metadata/javascript_metadata.js +1 -0
  714. package/static/devtools/javascript_metadata/javascript_metadata_module.js +0 -0
  715. package/static/devtools/js_app.html +20 -0
  716. package/static/devtools/js_app.js +1 -0
  717. package/static/devtools/js_main/js_main-legacy.js +1 -0
  718. package/static/devtools/js_main/js_main.js +1 -0
  719. package/static/devtools/js_profiler/js_profiler-meta.js +1 -0
  720. package/static/devtools/js_profiler/js_profiler.js +1 -0
  721. package/static/devtools/js_profiler/js_profiler_module.js +0 -0
  722. package/static/devtools/layer_viewer/layer_viewer-legacy.js +1 -0
  723. package/static/devtools/layer_viewer/layer_viewer.js +1 -0
  724. package/static/devtools/layer_viewer/layer_viewer_module.js +1 -0
  725. package/static/devtools/layers/layers-legacy.js +1 -0
  726. package/static/devtools/layers/layers-meta.js +1 -0
  727. package/static/devtools/layers/layers.js +1 -0
  728. package/static/devtools/layers/layers_module.js +0 -0
  729. package/static/devtools/layers_test_runner/layers_test_runner.js +156 -0
  730. package/static/devtools/layers_test_runner/layers_test_runner_module.js +0 -0
  731. package/static/devtools/lighthouse/lighthouse-legacy.js +1 -0
  732. package/static/devtools/lighthouse/lighthouse-meta.js +1 -0
  733. package/static/devtools/lighthouse/lighthouse.js +70 -0
  734. package/static/devtools/lighthouse/lighthouse_module.js +1 -0
  735. package/static/devtools/lighthouse_test_runner/lighthouse_test_runner.js +136 -0
  736. package/static/devtools/lighthouse_test_runner/lighthouse_test_runner_module.js +0 -0
  737. package/static/devtools/lighthouse_worker/LighthouseService.js +195 -0
  738. package/static/devtools/lighthouse_worker/lighthouse_worker.js +6 -0
  739. package/static/devtools/lighthouse_worker.js +1 -0
  740. package/static/devtools/linear_memory_inspector/linear_memory_inspector-legacy.js +1 -0
  741. package/static/devtools/linear_memory_inspector/linear_memory_inspector-meta.js +1 -0
  742. package/static/devtools/linear_memory_inspector/linear_memory_inspector.js +399 -0
  743. package/static/devtools/linear_memory_inspector/linear_memory_inspector_module.js +0 -0
  744. package/static/devtools/main/main-legacy.js +1 -0
  745. package/static/devtools/main/main.js +1 -0
  746. package/static/devtools/media/media-legacy.js +1 -0
  747. package/static/devtools/media/media-meta.js +1 -0
  748. package/static/devtools/media/media.js +1 -0
  749. package/static/devtools/media/media_module.js +1 -0
  750. package/static/devtools/mobile_throttling/mobile_throttling-legacy.js +1 -0
  751. package/static/devtools/mobile_throttling/mobile_throttling-meta.js +1 -0
  752. package/static/devtools/mobile_throttling/mobile_throttling.js +1 -0
  753. package/static/devtools/ndb_app.html +20 -0
  754. package/static/devtools/ndb_app.js +1 -0
  755. package/static/devtools/network/network-legacy.js +1 -0
  756. package/static/devtools/network/network-meta.js +1 -0
  757. package/static/devtools/network/network.js +72 -0
  758. package/static/devtools/network/network_module.js +1 -0
  759. package/static/devtools/network_test_runner/network_test_runner.js +280 -0
  760. package/static/devtools/network_test_runner/network_test_runner_module.js +0 -0
  761. package/static/devtools/node_app.html +20 -0
  762. package/static/devtools/node_app.js +1 -0
  763. package/static/devtools/node_debugger/node_debugger-meta.js +1 -0
  764. package/static/devtools/node_debugger/node_debugger.js +1 -0
  765. package/static/devtools/node_debugger/node_debugger_module.js +0 -0
  766. package/static/devtools/node_main/node_main-legacy.js +1 -0
  767. package/static/devtools/node_main/node_main-meta.js +1 -0
  768. package/static/devtools/node_main/node_main.js +1 -0
  769. package/static/devtools/object_ui/object_ui-legacy.js +1 -0
  770. package/static/devtools/object_ui/object_ui.js +3 -0
  771. package/static/devtools/object_ui/object_ui_module.js +1 -0
  772. package/static/devtools/perf_ui/perf_ui-legacy.js +1 -0
  773. package/static/devtools/perf_ui/perf_ui.js +152 -0
  774. package/static/devtools/perf_ui/perf_ui_module.js +1 -0
  775. package/static/devtools/performance_monitor/performance_monitor-legacy.js +1 -0
  776. package/static/devtools/performance_monitor/performance_monitor-meta.js +1 -0
  777. package/static/devtools/performance_monitor/performance_monitor.js +1 -0
  778. package/static/devtools/performance_monitor/performance_monitor_module.js +1 -0
  779. package/static/devtools/performance_test_runner/TimelineDataTestRunner.js +5375 -0
  780. package/static/devtools/performance_test_runner/TimelineTestRunner.js +446 -0
  781. package/static/devtools/performance_test_runner/performance_test_runner.js +6 -0
  782. package/static/devtools/performance_test_runner/performance_test_runner_module.js +0 -0
  783. package/static/devtools/persistence/persistence-legacy.js +1 -0
  784. package/static/devtools/persistence/persistence-meta.js +1 -0
  785. package/static/devtools/persistence/persistence.js +1 -0
  786. package/static/devtools/platform/platform.js +1 -0
  787. package/static/devtools/profiler/profiler-legacy.js +1 -0
  788. package/static/devtools/profiler/profiler-meta.js +1 -0
  789. package/static/devtools/profiler/profiler.js +8 -0
  790. package/static/devtools/profiler/profiler_module.js +1 -0
  791. package/static/devtools/protocol_client/protocol_client-legacy.js +1 -0
  792. package/static/devtools/protocol_client/protocol_client.js +1 -0
  793. package/static/devtools/protocol_monitor/protocol_monitor-legacy.js +1 -0
  794. package/static/devtools/protocol_monitor/protocol_monitor-meta.js +1 -0
  795. package/static/devtools/protocol_monitor/protocol_monitor.js +1 -0
  796. package/static/devtools/protocol_monitor/protocol_monitor_module.js +1 -0
  797. package/static/devtools/quick_open/quick_open-legacy.js +1 -0
  798. package/static/devtools/quick_open/quick_open.js +1 -0
  799. package/static/devtools/quick_open/quick_open_module.js +1 -0
  800. package/static/devtools/recorder/recorder.js +1 -0
  801. package/static/devtools/resources/resources-legacy.js +1 -0
  802. package/static/devtools/resources/resources-meta.js +1 -0
  803. package/static/devtools/resources/resources.js +28 -0
  804. package/static/devtools/resources/resources_module.js +1 -0
  805. package/static/devtools/root/root-legacy.js +1 -0
  806. package/static/devtools/root/root.js +1 -0
  807. package/static/devtools/screencast/screencast-legacy.js +1 -0
  808. package/static/devtools/screencast/screencast.js +1 -0
  809. package/static/devtools/sdk/sdk-legacy.js +1 -0
  810. package/static/devtools/sdk/sdk.js +2 -0
  811. package/static/devtools/sdk_test_runner/sdk_test_runner.js +297 -0
  812. package/static/devtools/sdk_test_runner/sdk_test_runner_module.js +0 -0
  813. package/static/devtools/search/search-legacy.js +1 -0
  814. package/static/devtools/search/search.js +1 -0
  815. package/static/devtools/search/search_module.js +1 -0
  816. package/static/devtools/security/security-legacy.js +1 -0
  817. package/static/devtools/security/security-meta.js +1 -0
  818. package/static/devtools/security/security.js +1 -0
  819. package/static/devtools/security/security_module.js +1 -0
  820. package/static/devtools/security_test_runner/security_test_runner.js +32 -0
  821. package/static/devtools/security_test_runner/security_test_runner_module.js +0 -0
  822. package/static/devtools/services/services-legacy.js +1 -0
  823. package/static/devtools/services/services.js +1 -0
  824. package/static/devtools/settings/settings-legacy.js +1 -0
  825. package/static/devtools/settings/settings-meta.js +1 -0
  826. package/static/devtools/settings/settings.js +1 -0
  827. package/static/devtools/settings/settings_module.js +1 -0
  828. package/static/devtools/shell.js +1 -0
  829. package/static/devtools/snippets/snippets-legacy.js +1 -0
  830. package/static/devtools/snippets/snippets.js +1 -0
  831. package/static/devtools/snippets/snippets_module.js +0 -0
  832. package/static/devtools/source_frame/source_frame-legacy.js +1 -0
  833. package/static/devtools/source_frame/source_frame.js +1 -0
  834. package/static/devtools/source_frame/source_frame_module.js +1 -0
  835. package/static/devtools/sources/sources-legacy.js +1 -0
  836. package/static/devtools/sources/sources-meta.js +1 -0
  837. package/static/devtools/sources/sources.js +13 -0
  838. package/static/devtools/sources/sources_module.js +1 -0
  839. package/static/devtools/sources_test_runner/AutocompleteTestRunner.js +46 -0
  840. package/static/devtools/sources_test_runner/DebuggerTestRunner.js +895 -0
  841. package/static/devtools/sources_test_runner/EditorTestRunner.js +237 -0
  842. package/static/devtools/sources_test_runner/LiveEditTestRunner.js +33 -0
  843. package/static/devtools/sources_test_runner/SearchTestRunner.js +158 -0
  844. package/static/devtools/sources_test_runner/SourcesTestRunner.js +173 -0
  845. package/static/devtools/sources_test_runner/sources_test_runner.js +10 -0
  846. package/static/devtools/sources_test_runner/sources_test_runner_module.js +0 -0
  847. package/static/devtools/startup/startup.js +1 -0
  848. package/static/devtools/test_runner/test_runner.js +1 -0
  849. package/static/devtools/text_editor/text_editor-legacy.js +1 -0
  850. package/static/devtools/text_editor/text_editor.js +1 -0
  851. package/static/devtools/text_editor/text_editor_module.js +1 -0
  852. package/static/devtools/text_utils/text_utils-legacy.js +1 -0
  853. package/static/devtools/text_utils/text_utils.js +1 -0
  854. package/static/devtools/theme_support/theme_support.js +1 -0
  855. package/static/devtools/third_party/acorn/acorn-tsconfig.json +8 -0
  856. package/static/devtools/third_party/acorn/acorn.js +1 -0
  857. package/static/devtools/third_party/acorn/package/dist/acorn.d.ts +209 -0
  858. package/static/devtools/third_party/acorn/package/dist/acorn.mjs +5261 -0
  859. package/static/devtools/third_party/acorn/package/dist/acorn.mjs.d.ts +2 -0
  860. package/static/devtools/third_party/acorn/package/dist/acorn.mjs.map +1 -0
  861. package/static/devtools/third_party/acorn-loose/acorn-loose-tsconfig.json +8 -0
  862. package/static/devtools/third_party/acorn-loose/package/dist/acorn-loose.d.ts +16 -0
  863. package/static/devtools/third_party/acorn-loose/package/dist/acorn-loose.mjs +1418 -0
  864. package/static/devtools/third_party/axe-core/axe.js +16423 -0
  865. package/static/devtools/third_party/chromium/chromium-tsconfig.json +8 -0
  866. package/static/devtools/third_party/chromium/client-variations/ClientVariations.d.ts +13 -0
  867. package/static/devtools/third_party/chromium/client-variations/ClientVariations.js +27 -0
  868. package/static/devtools/third_party/codemirror/codemirror-tsconfig.json +72 -0
  869. package/static/devtools/third_party/codemirror/package/addon/comment/comment.d.ts +4 -0
  870. package/static/devtools/third_party/codemirror/package/addon/comment/comment.js +211 -0
  871. package/static/devtools/third_party/codemirror/package/addon/edit/closebrackets.d.ts +1 -0
  872. package/static/devtools/third_party/codemirror/package/addon/edit/closebrackets.js +201 -0
  873. package/static/devtools/third_party/codemirror/package/addon/edit/matchbrackets.d.ts +1 -0
  874. package/static/devtools/third_party/codemirror/package/addon/edit/matchbrackets.js +158 -0
  875. package/static/devtools/third_party/codemirror/package/addon/fold/brace-fold.d.ts +1 -0
  876. package/static/devtools/third_party/codemirror/package/addon/fold/brace-fold.js +105 -0
  877. package/static/devtools/third_party/codemirror/package/addon/fold/foldcode.d.ts +1 -0
  878. package/static/devtools/third_party/codemirror/package/addon/fold/foldcode.js +157 -0
  879. package/static/devtools/third_party/codemirror/package/addon/fold/foldgutter.d.ts +1 -0
  880. package/static/devtools/third_party/codemirror/package/addon/fold/foldgutter.js +163 -0
  881. package/static/devtools/third_party/codemirror/package/addon/mode/multiplex.d.ts +1 -0
  882. package/static/devtools/third_party/codemirror/package/addon/mode/multiplex.js +131 -0
  883. package/static/devtools/third_party/codemirror/package/addon/mode/overlay.d.ts +1 -0
  884. package/static/devtools/third_party/codemirror/package/addon/mode/overlay.js +90 -0
  885. package/static/devtools/third_party/codemirror/package/addon/mode/simple.d.ts +1 -0
  886. package/static/devtools/third_party/codemirror/package/addon/mode/simple.js +216 -0
  887. package/static/devtools/third_party/codemirror/package/addon/runmode/runmode-standalone.d.ts +1 -0
  888. package/static/devtools/third_party/codemirror/package/addon/runmode/runmode-standalone.js +333 -0
  889. package/static/devtools/third_party/codemirror/package/addon/selection/active-line.d.ts +1 -0
  890. package/static/devtools/third_party/codemirror/package/addon/selection/active-line.js +72 -0
  891. package/static/devtools/third_party/codemirror/package/addon/selection/mark-selection.d.ts +1 -0
  892. package/static/devtools/third_party/codemirror/package/addon/selection/mark-selection.js +119 -0
  893. package/static/devtools/third_party/codemirror/package/lib/codemirror.d.ts +1 -0
  894. package/static/devtools/third_party/codemirror/package/lib/codemirror.js +9800 -0
  895. package/static/devtools/third_party/codemirror/package/mode/clike/clike.d.ts +4 -0
  896. package/static/devtools/third_party/codemirror/package/mode/clike/clike.js +935 -0
  897. package/static/devtools/third_party/codemirror/package/mode/clojure/clojure.d.ts +4 -0
  898. package/static/devtools/third_party/codemirror/package/mode/clojure/clojure.js +292 -0
  899. package/static/devtools/third_party/codemirror/package/mode/coffeescript/coffeescript.d.ts +4 -0
  900. package/static/devtools/third_party/codemirror/package/mode/coffeescript/coffeescript.js +359 -0
  901. package/static/devtools/third_party/codemirror/package/mode/css/css.d.ts +1 -0
  902. package/static/devtools/third_party/codemirror/package/mode/css/css.js +864 -0
  903. package/static/devtools/third_party/codemirror/package/mode/htmlembedded/htmlembedded.d.ts +1 -0
  904. package/static/devtools/third_party/codemirror/package/mode/htmlembedded/htmlembedded.js +37 -0
  905. package/static/devtools/third_party/codemirror/package/mode/htmlmixed/htmlmixed.d.ts +1 -0
  906. package/static/devtools/third_party/codemirror/package/mode/htmlmixed/htmlmixed.js +153 -0
  907. package/static/devtools/third_party/codemirror/package/mode/javascript/javascript.d.ts +1 -0
  908. package/static/devtools/third_party/codemirror/package/mode/javascript/javascript.js +942 -0
  909. package/static/devtools/third_party/codemirror/package/mode/jsx/jsx.d.ts +4 -0
  910. package/static/devtools/third_party/codemirror/package/mode/jsx/jsx.js +148 -0
  911. package/static/devtools/third_party/codemirror/package/mode/livescript/livescript.d.ts +4 -0
  912. package/static/devtools/third_party/codemirror/package/mode/livescript/livescript.js +280 -0
  913. package/static/devtools/third_party/codemirror/package/mode/markdown/markdown.d.ts +1 -0
  914. package/static/devtools/third_party/codemirror/package/mode/markdown/markdown.js +886 -0
  915. package/static/devtools/third_party/codemirror/package/mode/php/php.d.ts +1 -0
  916. package/static/devtools/third_party/codemirror/package/mode/php/php.js +234 -0
  917. package/static/devtools/third_party/codemirror/package/mode/python/python.d.ts +1 -0
  918. package/static/devtools/third_party/codemirror/package/mode/python/python.js +399 -0
  919. package/static/devtools/third_party/codemirror/package/mode/shell/shell.d.ts +1 -0
  920. package/static/devtools/third_party/codemirror/package/mode/shell/shell.js +168 -0
  921. package/static/devtools/third_party/codemirror/package/mode/wast/wast.d.ts +1 -0
  922. package/static/devtools/third_party/codemirror/package/mode/wast/wast.js +41 -0
  923. package/static/devtools/third_party/codemirror/package/mode/xml/xml.d.ts +1 -0
  924. package/static/devtools/third_party/codemirror/package/mode/xml/xml.js +413 -0
  925. package/static/devtools/third_party/i18n/bundle-tsconfig.json +8 -0
  926. package/static/devtools/third_party/i18n/i18n.d.ts +108 -0
  927. package/static/devtools/third_party/i18n/i18n.js +4336 -0
  928. package/static/devtools/third_party/lighthouse/lighthouse-dt-bundle.d.ts +1 -0
  929. package/static/devtools/third_party/lighthouse/lighthouse-dt-bundle.js +1140 -0
  930. package/static/devtools/third_party/lighthouse/lighthouse-tsconfig.json +10 -0
  931. package/static/devtools/third_party/lighthouse/locales/ar-XB.json +2066 -0
  932. package/static/devtools/third_party/lighthouse/locales/ar.json +2066 -0
  933. package/static/devtools/third_party/lighthouse/locales/bg.json +2066 -0
  934. package/static/devtools/third_party/lighthouse/locales/ca.json +2066 -0
  935. package/static/devtools/third_party/lighthouse/locales/cs.json +2066 -0
  936. package/static/devtools/third_party/lighthouse/locales/da.json +2066 -0
  937. package/static/devtools/third_party/lighthouse/locales/de.json +2066 -0
  938. package/static/devtools/third_party/lighthouse/locales/el.json +2066 -0
  939. package/static/devtools/third_party/lighthouse/locales/en-GB.json +2066 -0
  940. package/static/devtools/third_party/lighthouse/locales/en-US.json +2297 -0
  941. package/static/devtools/third_party/lighthouse/locales/en-XA.json +2066 -0
  942. package/static/devtools/third_party/lighthouse/locales/en-XL.json +2297 -0
  943. package/static/devtools/third_party/lighthouse/locales/es-419.json +2066 -0
  944. package/static/devtools/third_party/lighthouse/locales/es.json +2066 -0
  945. package/static/devtools/third_party/lighthouse/locales/fi.json +2066 -0
  946. package/static/devtools/third_party/lighthouse/locales/fil.json +2066 -0
  947. package/static/devtools/third_party/lighthouse/locales/fr.json +2066 -0
  948. package/static/devtools/third_party/lighthouse/locales/he.json +2066 -0
  949. package/static/devtools/third_party/lighthouse/locales/hi.json +2066 -0
  950. package/static/devtools/third_party/lighthouse/locales/hr.json +2066 -0
  951. package/static/devtools/third_party/lighthouse/locales/hu.json +2066 -0
  952. package/static/devtools/third_party/lighthouse/locales/id.json +2066 -0
  953. package/static/devtools/third_party/lighthouse/locales/it.json +2066 -0
  954. package/static/devtools/third_party/lighthouse/locales/ja.json +2066 -0
  955. package/static/devtools/third_party/lighthouse/locales/ko.json +2066 -0
  956. package/static/devtools/third_party/lighthouse/locales/lt.json +2066 -0
  957. package/static/devtools/third_party/lighthouse/locales/lv.json +2066 -0
  958. package/static/devtools/third_party/lighthouse/locales/nl.json +2066 -0
  959. package/static/devtools/third_party/lighthouse/locales/no.json +2066 -0
  960. package/static/devtools/third_party/lighthouse/locales/pl.json +2066 -0
  961. package/static/devtools/third_party/lighthouse/locales/pt-PT.json +2066 -0
  962. package/static/devtools/third_party/lighthouse/locales/pt.json +2066 -0
  963. package/static/devtools/third_party/lighthouse/locales/ro.json +2066 -0
  964. package/static/devtools/third_party/lighthouse/locales/ru.json +2066 -0
  965. package/static/devtools/third_party/lighthouse/locales/sk.json +2066 -0
  966. package/static/devtools/third_party/lighthouse/locales/sl.json +2066 -0
  967. package/static/devtools/third_party/lighthouse/locales/sr-Latn.json +2066 -0
  968. package/static/devtools/third_party/lighthouse/locales/sr.json +2066 -0
  969. package/static/devtools/third_party/lighthouse/locales/sv.json +2066 -0
  970. package/static/devtools/third_party/lighthouse/locales/ta.json +2066 -0
  971. package/static/devtools/third_party/lighthouse/locales/te.json +2066 -0
  972. package/static/devtools/third_party/lighthouse/locales/th.json +2066 -0
  973. package/static/devtools/third_party/lighthouse/locales/tr.json +2066 -0
  974. package/static/devtools/third_party/lighthouse/locales/uk.json +2066 -0
  975. package/static/devtools/third_party/lighthouse/locales/vi.json +2066 -0
  976. package/static/devtools/third_party/lighthouse/locales/zh-HK.json +2066 -0
  977. package/static/devtools/third_party/lighthouse/locales/zh-TW.json +2066 -0
  978. package/static/devtools/third_party/lighthouse/locales/zh.json +2066 -0
  979. package/static/devtools/third_party/lighthouse/report-assets/report-generator.d.ts +1 -0
  980. package/static/devtools/third_party/lighthouse/report-assets/report-generator.js +167 -0
  981. package/static/devtools/third_party/lighthouse/report-assets/report.d.ts +1 -0
  982. package/static/devtools/third_party/lighthouse/report-assets/report.js +5032 -0
  983. package/static/devtools/third_party/lit-html/lit-html-tsconfig.json +22 -0
  984. package/static/devtools/third_party/lit-html/lit-html.js +120 -0
  985. package/static/devtools/third_party/lit-html/package/directives/class-map.d.ts +28 -0
  986. package/static/devtools/third_party/lit-html/package/directives/class-map.js +101 -0
  987. package/static/devtools/third_party/lit-html/package/directives/class-map.js.map +1 -0
  988. package/static/devtools/third_party/lit-html/package/directives/if-defined.d.ts +22 -0
  989. package/static/devtools/third_party/lit-html/package/directives/if-defined.js +37 -0
  990. package/static/devtools/third_party/lit-html/package/directives/if-defined.js.map +1 -0
  991. package/static/devtools/third_party/lit-html/package/directives/live.d.ts +38 -0
  992. package/static/devtools/third_party/lit-html/package/directives/live.js +73 -0
  993. package/static/devtools/third_party/lit-html/package/directives/live.js.map +1 -0
  994. package/static/devtools/third_party/lit-html/package/directives/repeat.d.ts +37 -0
  995. package/static/devtools/third_party/lit-html/package/directives/repeat.js +415 -0
  996. package/static/devtools/third_party/lit-html/package/directives/repeat.js.map +1 -0
  997. package/static/devtools/third_party/lit-html/package/directives/style-map.d.ts +36 -0
  998. package/static/devtools/third_party/lit-html/package/directives/style-map.js +78 -0
  999. package/static/devtools/third_party/lit-html/package/directives/style-map.js.map +1 -0
  1000. package/static/devtools/third_party/lit-html/package/lib/default-template-processor.d.ts +39 -0
  1001. package/static/devtools/third_party/lit-html/package/lib/default-template-processor.js +52 -0
  1002. package/static/devtools/third_party/lit-html/package/lib/default-template-processor.js.map +1 -0
  1003. package/static/devtools/third_party/lit-html/package/lib/directive.d.ts +59 -0
  1004. package/static/devtools/third_party/lit-html/package/lib/directive.js +63 -0
  1005. package/static/devtools/third_party/lit-html/package/lib/directive.js.map +1 -0
  1006. package/static/devtools/third_party/lit-html/package/lib/dom.d.ts +29 -0
  1007. package/static/devtools/third_party/lit-html/package/lib/dom.js +44 -0
  1008. package/static/devtools/third_party/lit-html/package/lib/dom.js.map +1 -0
  1009. package/static/devtools/third_party/lit-html/package/lib/part.d.ts +46 -0
  1010. package/static/devtools/third_party/lit-html/package/lib/part.js +23 -0
  1011. package/static/devtools/third_party/lit-html/package/lib/part.js.map +1 -0
  1012. package/static/devtools/third_party/lit-html/package/lib/parts.d.ts +148 -0
  1013. package/static/devtools/third_party/lit-html/package/lib/parts.js +476 -0
  1014. package/static/devtools/third_party/lit-html/package/lib/parts.js.map +1 -0
  1015. package/static/devtools/third_party/lit-html/package/lib/render.d.ts +33 -0
  1016. package/static/devtools/third_party/lit-html/package/lib/render.js +43 -0
  1017. package/static/devtools/third_party/lit-html/package/lib/render.js.map +1 -0
  1018. package/static/devtools/third_party/lit-html/package/lib/template-factory.d.ts +57 -0
  1019. package/static/devtools/third_party/lit-html/package/lib/template-factory.js +48 -0
  1020. package/static/devtools/third_party/lit-html/package/lib/template-factory.js.map +1 -0
  1021. package/static/devtools/third_party/lit-html/package/lib/template-instance.d.ts +30 -0
  1022. package/static/devtools/third_party/lit-html/package/lib/template-instance.js +134 -0
  1023. package/static/devtools/third_party/lit-html/package/lib/template-instance.js.map +1 -0
  1024. package/static/devtools/third_party/lit-html/package/lib/template-result.d.ts +42 -0
  1025. package/static/devtools/third_party/lit-html/package/lib/template-result.js +131 -0
  1026. package/static/devtools/third_party/lit-html/package/lib/template-result.js.map +1 -0
  1027. package/static/devtools/third_party/lit-html/package/lib/template.d.ts +92 -0
  1028. package/static/devtools/third_party/lit-html/package/lib/template.js +215 -0
  1029. package/static/devtools/third_party/lit-html/package/lib/template.js.map +1 -0
  1030. package/static/devtools/third_party/lit-html/package/lit-html.d.ts +42 -0
  1031. package/static/devtools/third_party/lit-html/package/lit-html.js +59 -0
  1032. package/static/devtools/third_party/lit-html/package/lit-html.js.map +1 -0
  1033. package/static/devtools/third_party/marked/marked-tsconfig.json +8 -0
  1034. package/static/devtools/third_party/marked/marked.js +1 -0
  1035. package/static/devtools/third_party/marked/package/lib/marked.esm.d.ts +1 -0
  1036. package/static/devtools/third_party/marked/package/lib/marked.esm.js +2584 -0
  1037. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/api-docs-entry.d.ts +53 -0
  1038. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/api-docs-entry.d.ts.map +1 -0
  1039. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/api-docs-entry.js +64 -0
  1040. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/Accessibility.d.ts +176 -0
  1041. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/Accessibility.d.ts.map +1 -0
  1042. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/Accessibility.js +356 -0
  1043. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/AriaQueryHandler.d.ts +21 -0
  1044. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/AriaQueryHandler.d.ts.map +1 -0
  1045. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/AriaQueryHandler.js +81 -0
  1046. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/Browser.d.ts +423 -0
  1047. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/Browser.d.ts.map +1 -0
  1048. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/Browser.js +516 -0
  1049. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/BrowserConnector.d.ts +39 -0
  1050. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/BrowserConnector.d.ts.map +1 -0
  1051. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/BrowserConnector.js +76 -0
  1052. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/BrowserWebSocketTransport.d.ts +26 -0
  1053. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/BrowserWebSocketTransport.d.ts.map +1 -0
  1054. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/BrowserWebSocketTransport.js +30 -0
  1055. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/Connection.d.ts +120 -0
  1056. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/Connection.d.ts.map +1 -0
  1057. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/Connection.js +266 -0
  1058. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/ConnectionTransport.d.ts +22 -0
  1059. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/ConnectionTransport.d.ts.map +1 -0
  1060. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/ConnectionTransport.js +15 -0
  1061. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/ConsoleMessage.d.ts +72 -0
  1062. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/ConsoleMessage.d.ts.map +1 -0
  1063. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/ConsoleMessage.js +60 -0
  1064. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/Coverage.d.ts +181 -0
  1065. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/Coverage.d.ts.map +1 -0
  1066. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/Coverage.js +316 -0
  1067. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/DOMWorld.d.ts +174 -0
  1068. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/DOMWorld.d.ts.map +1 -0
  1069. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/DOMWorld.js +647 -0
  1070. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/Debug.d.ts +53 -0
  1071. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/Debug.d.ts.map +1 -0
  1072. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/Debug.js +77 -0
  1073. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/DeviceDescriptors.d.ts +33 -0
  1074. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/DeviceDescriptors.d.ts.map +1 -0
  1075. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/DeviceDescriptors.js +873 -0
  1076. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/Dialog.d.ts +76 -0
  1077. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/Dialog.d.ts.map +1 -0
  1078. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/Dialog.js +92 -0
  1079. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/EmulationManager.d.ts +25 -0
  1080. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/EmulationManager.d.ts.map +1 -0
  1081. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/EmulationManager.js +33 -0
  1082. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/Errors.d.ts +34 -0
  1083. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/Errors.d.ts.map +1 -0
  1084. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/Errors.js +37 -0
  1085. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/EvalTypes.d.ts +59 -0
  1086. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/EvalTypes.d.ts.map +1 -0
  1087. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/EvalTypes.js +15 -0
  1088. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/EventEmitter.d.ts +89 -0
  1089. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/EventEmitter.d.ts.map +1 -0
  1090. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/EventEmitter.js +109 -0
  1091. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/Events.d.ts +82 -0
  1092. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/Events.d.ts.map +1 -0
  1093. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/Events.js +83 -0
  1094. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/ExecutionContext.d.ts +189 -0
  1095. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/ExecutionContext.d.ts.map +1 -0
  1096. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/ExecutionContext.js +313 -0
  1097. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/FileChooser.d.ts +60 -0
  1098. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/FileChooser.d.ts.map +1 -0
  1099. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/FileChooser.js +66 -0
  1100. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/FrameManager.d.ts +735 -0
  1101. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/FrameManager.d.ts.map +1 -0
  1102. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/FrameManager.js +962 -0
  1103. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/HTTPRequest.d.ts +276 -0
  1104. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/HTTPRequest.d.ts.map +1 -0
  1105. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/HTTPRequest.js +421 -0
  1106. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/HTTPResponse.d.ts +128 -0
  1107. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/HTTPResponse.d.ts.map +1 -0
  1108. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/HTTPResponse.js +150 -0
  1109. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/Input.d.ts +322 -0
  1110. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/Input.d.ts.map +1 -0
  1111. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/Input.js +463 -0
  1112. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/JSHandle.d.ts +439 -0
  1113. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/JSHandle.d.ts.map +1 -0
  1114. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/JSHandle.js +724 -0
  1115. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/LifecycleWatcher.d.ts +62 -0
  1116. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/LifecycleWatcher.d.ts.map +1 -0
  1117. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/LifecycleWatcher.js +145 -0
  1118. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/NetworkManager.d.ts +80 -0
  1119. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/NetworkManager.d.ts.map +1 -0
  1120. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/NetworkManager.js +262 -0
  1121. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/PDFOptions.d.ts +152 -0
  1122. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/PDFOptions.d.ts.map +1 -0
  1123. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/PDFOptions.js +31 -0
  1124. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/Page.d.ts +910 -0
  1125. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/Page.d.ts.map +1 -0
  1126. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/Page.js +1343 -0
  1127. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/Product.d.ts +21 -0
  1128. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/Product.d.ts.map +1 -0
  1129. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/Product.js +15 -0
  1130. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/Puppeteer.d.ts +135 -0
  1131. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/Puppeteer.d.ts.map +1 -0
  1132. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/Puppeteer.js +133 -0
  1133. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/PuppeteerViewport.d.ts +24 -0
  1134. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/PuppeteerViewport.d.ts.map +1 -0
  1135. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/PuppeteerViewport.js +0 -0
  1136. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/QueryHandler.d.ts +66 -0
  1137. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/QueryHandler.d.ts.map +1 -0
  1138. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/QueryHandler.js +157 -0
  1139. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/SecurityDetails.d.ts +61 -0
  1140. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/SecurityDetails.d.ts.map +1 -0
  1141. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/SecurityDetails.js +72 -0
  1142. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/Target.d.ts +98 -0
  1143. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/Target.d.ts.map +1 -0
  1144. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/Target.js +137 -0
  1145. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/TimeoutSettings.d.ts +28 -0
  1146. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/TimeoutSettings.d.ts.map +1 -0
  1147. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/TimeoutSettings.js +43 -0
  1148. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/Tracing.d.ts +47 -0
  1149. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/Tracing.d.ts.map +1 -0
  1150. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/Tracing.js +94 -0
  1151. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/USKeyboardLayout.d.ts +40 -0
  1152. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/USKeyboardLayout.d.ts.map +1 -0
  1153. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/USKeyboardLayout.js +403 -0
  1154. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/WebWorker.d.ts +102 -0
  1155. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/WebWorker.d.ts.map +1 -0
  1156. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/WebWorker.js +109 -0
  1157. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/assert.d.ts +22 -0
  1158. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/assert.d.ts.map +1 -0
  1159. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/assert.js +24 -0
  1160. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/fetch.d.ts +17 -0
  1161. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/fetch.d.ts.map +1 -0
  1162. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/fetch.js +20 -0
  1163. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/helper.d.ts +66 -0
  1164. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/helper.d.ts.map +1 -0
  1165. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/common/helper.js +288 -0
  1166. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/environment.d.ts +17 -0
  1167. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/environment.d.ts.map +1 -0
  1168. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/environment.js +16 -0
  1169. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/initialize-node.d.ts +18 -0
  1170. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/initialize-node.d.ts.map +1 -0
  1171. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/initialize-node.js +39 -0
  1172. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/initialize-web.d.ts +18 -0
  1173. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/initialize-web.d.ts.map +1 -0
  1174. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/initialize-web.js +22 -0
  1175. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/node/BrowserFetcher.d.ts +132 -0
  1176. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/node/BrowserFetcher.d.ts.map +1 -0
  1177. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/node/BrowserFetcher.js +468 -0
  1178. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/node/BrowserRunner.d.ts +40 -0
  1179. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/node/BrowserRunner.d.ts.map +1 -0
  1180. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/node/BrowserRunner.js +197 -0
  1181. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/node/LaunchOptions.d.ts +42 -0
  1182. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/node/LaunchOptions.d.ts.map +1 -0
  1183. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/node/LaunchOptions.js +0 -0
  1184. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/node/Launcher.d.ts +16 -0
  1185. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/node/Launcher.d.ts.map +1 -0
  1186. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/node/Launcher.js +469 -0
  1187. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/node/NodeWebSocketTransport.d.ts +29 -0
  1188. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/node/NodeWebSocketTransport.d.ts.map +1 -0
  1189. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/node/NodeWebSocketTransport.js +34 -0
  1190. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/node/PipeTransport.d.ts +31 -0
  1191. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/node/PipeTransport.d.ts.map +1 -0
  1192. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/node/PipeTransport.js +61 -0
  1193. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/node/Puppeteer.d.ts +156 -0
  1194. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/node/Puppeteer.d.ts.map +1 -0
  1195. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/node/Puppeteer.js +183 -0
  1196. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/node/install.d.ts +18 -0
  1197. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/node/install.d.ts.map +1 -0
  1198. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/node/install.js +151 -0
  1199. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/node-puppeteer-core.d.ts +18 -0
  1200. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/node-puppeteer-core.d.ts.map +1 -0
  1201. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/node-puppeteer-core.js +23 -0
  1202. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/node.d.ts +18 -0
  1203. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/node.d.ts.map +1 -0
  1204. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/node.js +22 -0
  1205. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/revisions.d.ts +22 -0
  1206. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/revisions.d.ts.map +1 -0
  1207. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/revisions.js +19 -0
  1208. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/web.d.ts +18 -0
  1209. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/web.d.ts.map +1 -0
  1210. package/static/devtools/third_party/puppeteer/package/lib/esm/puppeteer/web.js +22 -0
  1211. package/static/devtools/third_party/puppeteer/package/lib/esm/vendor/mitt/src/index.d.ts +22 -0
  1212. package/static/devtools/third_party/puppeteer/package/lib/esm/vendor/mitt/src/index.d.ts.map +1 -0
  1213. package/static/devtools/third_party/puppeteer/package/lib/esm/vendor/mitt/src/index.js +53 -0
  1214. package/static/devtools/third_party/puppeteer/puppeteer-tsconfig.json +58 -0
  1215. package/static/devtools/third_party/puppeteer/puppeteer.js +1 -0
  1216. package/static/devtools/third_party/wasmparser/package/dist/esm/WasmDis.js +1595 -0
  1217. package/static/devtools/third_party/wasmparser/package/dist/esm/WasmParser.js +3120 -0
  1218. package/static/devtools/third_party/wasmparser/wasmparser-tsconfig.json +9 -0
  1219. package/static/devtools/timeline/timeline-legacy.js +1 -0
  1220. package/static/devtools/timeline/timeline-meta.js +1 -0
  1221. package/static/devtools/timeline/timeline.js +1 -0
  1222. package/static/devtools/timeline/timeline_module.js +1 -0
  1223. package/static/devtools/timeline_model/timeline_model-legacy.js +1 -0
  1224. package/static/devtools/timeline_model/timeline_model.js +1 -0
  1225. package/static/devtools/timeline_model/timeline_model_module.js +0 -0
  1226. package/static/devtools/toolbox.html +20 -0
  1227. package/static/devtools/toolbox.js +1 -0
  1228. package/static/devtools/toolbox_bootstrap/toolbox_bootstrap.js +1 -0
  1229. package/static/devtools/ui/components/components.js +378 -0
  1230. package/static/devtools/ui/ui-legacy.js +1 -0
  1231. package/static/devtools/ui/ui.js +3 -0
  1232. package/static/devtools/ui/utils/utils.js +1 -0
  1233. package/static/devtools/wasmparser_worker/wasmparser_worker-entrypoint.js +1 -0
  1234. package/static/devtools/wasmparser_worker/wasmparser_worker.js +1 -0
  1235. package/static/devtools/web_audio/graph_visualizer/graph_visualizer.js +1 -0
  1236. package/static/devtools/web_audio/web_audio-legacy.js +1 -0
  1237. package/static/devtools/web_audio/web_audio-meta.js +1 -0
  1238. package/static/devtools/web_audio/web_audio.js +23 -0
  1239. package/static/devtools/web_audio/web_audio_module.js +1 -0
  1240. package/static/devtools/webauthn/webauthn-legacy.js +1 -0
  1241. package/static/devtools/webauthn/webauthn-meta.js +1 -0
  1242. package/static/devtools/webauthn/webauthn.js +6 -0
  1243. package/static/devtools/webauthn/webauthn_module.js +1 -0
  1244. package/static/devtools/worker_app.html +20 -0
  1245. package/static/devtools/worker_app.js +1 -0
  1246. package/static/devtools/worker_main/worker_main-legacy.js +1 -0
  1247. package/static/devtools/worker_main/worker_main.js +1 -0
  1248. package/static/devtools/worker_service/worker_service.js +1 -0
  1249. package/static/devtools/workspace/workspace-legacy.js +1 -0
  1250. package/static/devtools/workspace/workspace.js +1 -0
  1251. package/static/devtools/workspace_diff/workspace_diff-legacy.js +1 -0
  1252. package/static/devtools/workspace_diff/workspace_diff.js +1 -0
  1253. package/static/devtools/workspace_diff/workspace_diff_module.js +0 -0
  1254. package/static/docs/swagger.json +2337 -279
  1255. package/static/function/client.js +1037 -992
  1256. package/build/routes/chromium/http/json-new.js +0 -23
  1257. package/build/routes/chromium/http/json-version-get.response.json +0 -37
  1258. package/build/routes/chromium/utils/cdp.d.ts +0 -2
  1259. package/build/routes/chromium/utils/cdp.js +0 -14
  1260. package/build/routes/chromium/ws/cdp-chromium.js +0 -10
  1261. package/src/routes/chromium/http/json-list.ts +0 -50
  1262. package/src/routes/chromium/utils/cdp.ts +0 -19
  1263. package/build/routes/{chromium/http/content-post.query.json → chrome/http/content.post.query.json} +0 -0
  1264. package/build/routes/{chromium/http/content-post.response.json → chrome/http/content.post.response.json} +0 -0
  1265. package/build/routes/{chromium/http/download-post.body.json → chrome/http/download.post.body.json} +0 -0
  1266. package/build/routes/{chromium/http/download-post.query.json → chrome/http/download.post.query.json} +0 -0
  1267. package/build/routes/{chromium/http/download-post.response.json → chrome/http/download.post.response.json} +0 -0
  1268. package/build/routes/{chromium/http/function-post.body.json → chrome/http/function.post.body.json} +0 -0
  1269. package/build/routes/{chromium/http/function-post.query.json → chrome/http/function.post.query.json} +0 -0
  1270. package/build/routes/{chromium/http/function-post.response.json → chrome/http/function.post.response.json} +0 -0
  1271. package/build/routes/{chromium/http/json-list.response.json → chrome/http/json-list.get.response.json} +0 -0
  1272. package/build/routes/{chromium/http/json-new.response.json → chrome/http/json-new.put.response.json} +0 -0
  1273. package/build/routes/{chromium/http/json-protocol-get.response.json → chrome/http/json-protocol.get.response.json} +0 -0
  1274. package/build/routes/{chromium/http/pdf-post.query.json → chrome/http/pdf.post.query.json} +0 -0
  1275. package/build/routes/{chromium/http/pdf-post.response.json → chrome/http/pdf.post.response.json} +0 -0
  1276. package/build/routes/{chromium/http/performance.body.json → chrome/http/performance.post.body.json} +0 -0
  1277. package/build/routes/{chromium/http/performance.query.json → chrome/http/performance.post.query.json} +0 -0
  1278. package/build/routes/{chromium/http/performance.response.json → chrome/http/performance.post.response.json} +0 -0
  1279. package/build/routes/{chromium/http/scrape-post.query.json → chrome/http/scrape.post.query.json} +0 -0
  1280. package/build/routes/{chromium/http/scrape-post.response.json → chrome/http/scrape.post.response.json} +0 -0
  1281. package/build/routes/{chromium/http/screenshot-post.query.json → chrome/http/screenshot.post.query.json} +0 -0
  1282. package/build/routes/{chromium/http/screenshot-post.response.json → chrome/http/screenshot.post.response.json} +0 -0
  1283. package/build/routes/{chromium/utils/performance/child.d.ts → chrome/tests/content.spec.d.ts} +0 -0
  1284. package/build/routes/{chromium/utils/performance/types.js → chrome/tests/download.spec.d.ts} +0 -0
  1285. package/build/routes/{chromium/ws/cdp-chromium.query.json → chrome/ws/browser.query.json} +0 -0
  1286. package/build/routes/{chromium/ws/playwright-chromium.query.json → chrome/ws/playwright.query.json} +0 -0
  1287. package/build/routes/{firefox/ws/playwright-firefox.query.json → chromium/ws/playwright.query.json} +0 -0
  1288. package/build/routes/{webkit/ws/playwright-webkit.query.json → firefox/ws/playwright.query.json} +0 -0
  1289. package/build/routes/management/http/{config-get.d.ts → config.get.d.ts} +0 -0
  1290. package/build/routes/management/http/{config-get.js → config.get.js} +0 -0
  1291. package/build/routes/management/http/{config-get.response.json → config.get.response.json} +0 -0
  1292. package/build/routes/management/http/{metrics-total-get.d.ts → metrics-total.get.d.ts} +0 -0
  1293. package/build/routes/management/http/{metrics-total-get.js → metrics-total.get.js} +0 -0
  1294. package/build/routes/management/http/{metrics-total-get.response.json → metrics-total.get.response.json} +0 -0
  1295. package/build/routes/management/http/{metrics-get.d.ts → metrics.get.d.ts} +0 -0
  1296. package/build/routes/management/http/{metrics-get.js → metrics.get.js} +0 -0
  1297. package/build/routes/management/http/{metrics-get.response.json → metrics.get.response.json} +0 -0
  1298. package/build/routes/management/http/{sessions-get.d.ts → sessions.get.d.ts} +0 -0
  1299. package/build/routes/management/http/{sessions-get.js → sessions.get.js} +0 -0
  1300. package/build/routes/management/http/{static-get.d.ts → static.get.d.ts} +0 -0
  1301. package/build/{routes/chromium/http/json-protocol-get.d.ts → shared/json-protocol.http.d.ts} +1 -1
  1302. package/build/{routes/chromium/http/json-version-get.d.ts → shared/json-version.http.d.ts} +1 -1
  1303. /package/build/{routes/chromium → shared}/utils/function/client.d.ts +0 -0
  1304. /package/build/{routes/chromium → shared}/utils/function/client.js +0 -0
  1305. /package/build/{routes/chromium → shared}/utils/function/handler.d.ts +0 -0
  1306. /package/build/{routes/chromium → shared}/utils/function/handler.js +0 -0
  1307. /package/build/{routes/chromium → shared}/utils/performance/child.js +0 -0
  1308. /package/build/{routes/chromium → shared}/utils/performance/main.d.ts +0 -0
  1309. /package/build/{routes/chromium → shared}/utils/performance/types.d.ts +0 -0
  1310. /package/src/routes/management/http/{config-get.ts → config.get.ts} +0 -0
  1311. /package/src/routes/management/http/{metrics-total-get.ts → metrics-total.get.ts} +0 -0
  1312. /package/src/routes/management/http/{metrics-get.ts → metrics.get.ts} +0 -0
  1313. /package/src/routes/management/http/{sessions-get.ts → sessions.get.ts} +0 -0
  1314. /package/src/{routes/chromium → shared}/utils/function/client.ts +0 -0
  1315. /package/src/{routes/chromium → shared}/utils/performance/child.ts +0 -0
  1316. /package/src/{routes/chromium → shared}/utils/performance/types.ts +0 -0
@@ -225,14 +225,14 @@
225
225
  "length": {
226
226
  "type": "number"
227
227
  },
228
- "__@toStringTag@10774": {
228
+ "__@toStringTag@10812": {
229
229
  "type": "string",
230
230
  "const": "Uint8Array"
231
231
  }
232
232
  },
233
233
  "required": [
234
234
  "BYTES_PER_ELEMENT",
235
- "__@toStringTag@10774",
235
+ "__@toStringTag@10812",
236
236
  "buffer",
237
237
  "byteLength",
238
238
  "byteOffset",
@@ -267,13 +267,13 @@
267
267
  "byteLength": {
268
268
  "type": "number"
269
269
  },
270
- "__@toStringTag@10774": {
270
+ "__@toStringTag@10812": {
271
271
  "type": "string"
272
272
  }
273
273
  },
274
274
  "additionalProperties": false,
275
275
  "required": [
276
- "__@toStringTag@10774",
276
+ "__@toStringTag@10812",
277
277
  "byteLength"
278
278
  ]
279
279
  },
@@ -283,18 +283,18 @@
283
283
  "byteLength": {
284
284
  "type": "number"
285
285
  },
286
- "__@species@10875": {
286
+ "__@species@10913": {
287
287
  "$ref": "#/definitions/SharedArrayBuffer"
288
288
  },
289
- "__@toStringTag@10774": {
289
+ "__@toStringTag@10812": {
290
290
  "type": "string",
291
291
  "const": "SharedArrayBuffer"
292
292
  }
293
293
  },
294
294
  "additionalProperties": false,
295
295
  "required": [
296
- "__@species@10875",
297
- "__@toStringTag@10774",
296
+ "__@species@10913",
297
+ "__@toStringTag@10812",
298
298
  "byteLength"
299
299
  ]
300
300
  },
@@ -1055,7 +1055,17 @@
1055
1055
  "type": "number"
1056
1056
  },
1057
1057
  "routePath": {
1058
- "type": "string"
1058
+ "anyOf": [
1059
+ {
1060
+ "type": "array",
1061
+ "items": {
1062
+ "type": "string"
1063
+ }
1064
+ },
1065
+ {
1066
+ "type": "string"
1067
+ }
1068
+ ]
1059
1069
  },
1060
1070
  "startedOn": {
1061
1071
  "type": "number"
@@ -1087,9 +1097,9 @@
1087
1097
  }
1088
1098
  },
1089
1099
  "info": {
1090
- "description": "![browserless.io logo](/assets/logo.png)\n\n![Docker Pulls](https://img.shields.io/docker/pulls/browserless/chrome)\n![GitHub package.json version (subfolder of monorepo)](https://img.shields.io/github/package-json/v/browserless/chrome)\n![Chrome CI](https://github.com/browserless/chrome/actions/workflows/docker-chromium.yml/badge.svg)\n![Firefox CI](https://github.com/browserless/chrome/actions/workflows/docker-firefox.yml/badge.svg)\n![Webkit CI](https://github.com/browserless/chrome/actions/workflows/docker-webkit.yml/badge.svg)\n![Multi CI](https://github.com/browserless/chrome/actions/workflows/docker-multi.yml/badge.svg)\n\n\n> [Looking for v1.x.x of browserless? You can find it here](https://github.com/browserless/chrome/tree/v1), although we recommend migrating to v2.\n\nBrowserless allows remote clients to connect and execute headless work, all inside of docker. It supports the standard, unforked Puppeteer and Playwright libraries, as well offering REST-based APIs for common actions like data collection, PDF generation and more.\n\nWe take care of common issues such as missing system-fonts, missing external libraries, and performance improvements, along with edge-cases like downloading files and managing sessions. For details, check out the documentation site built into the project which includes Open API docs.\n\nIf you've been struggling to deploy headless browsers without running into issues or bloated resource requirements, then Browserless was built for you. Run the browsers in [our cloud](https://browserless.io/) or your own, [free for non-commercial uses](https://github.com/browserless/browserless#licensing).\n# Table of Contents\n\n1. [Features](#features)\n2. [How it works](#how-it-works)\n3. [Docker](#docker)\n4. [Hosting](#hosting-providers)\n5. [Puppeteer](#puppeteer)\n6. [Playwright](#playwright)\n7. [Extending with NodeJS SDK](#extending-nodejs-skd)\n8. [Licensing](#licensing)\n9. [Changelog](https://github.com/browserless/chrome/blob/master/CHANGELOG.md)\n\n## External links\n\n1. [Full documentation site](https://www.browserless.io/docs/start)\n2. [Live Debugger (using browserless.io)](https://chrome.browserless.io/)\n3. [Docker](https://github.com/browserless/browserless/pkgs/container/base)\n4. [Slack](https://join.slack.com/t/browserless/shared_invite/enQtMzA3OTMwNjA3MzY1LTRmMWU5NjQ0MTQ2YTE2YmU3MzdjNmVlMmU4MThjM2UxODNmNzNlZjVkY2U2NjdkMzYyNTgyZTBiMmE3Nzg0MzY)\n\n# Features\n\n- Parallelism and request-queueing are built-in + configurable.\n- Fonts and emoji's working out-of-the-box.\n- Debug Viewer for actively viewing/debugging running sessions.\n- An interactive puppeteer debugger, so you can see what the headless browser is doing and use its DevTools.\n- Works with unforked Puppeteer and Playwright.\n- Configurable session timers and health-checks to keep things running smoothly.\n- Error tolerant: if Chrome dies it won't.\n- [Support for running and development on Apple's M1 machines](#building-for-arm64-apple-m1-machines)\n\n# How it works\n\nBrowserless listens for both incoming websocket requests, generally issued by most libraries, as well as pre-build REST APIs to do common functions (PDF generation, images and so on). When a websocket connects to Browserless it starts Chrome and proxies your request into it. Once the session is done then it closes and awaits for more connections. Some libraries use Chrome's HTTP endpoints, like `/json` to inspect debug-able targets, which Browserless also supports.\n\nYou still execute the script itself which gives you total control over what library you want to choose and when to do upgrades. This also comes with the benefit of keep your code proprietary and able to run on numerous platforms. We simply take care of all the browser-aspects and offer a management layer on top of the browser.\n\n# Docker\n\n> See more options on our [full documentation site](https://www.browserless.io/docs/docker-quickstart).\n\n1. `docker run -p 3000:3000 ghcr.io/browserless/chrome`\n2. Visit `http://localhost:3000/docs` to see the documentation site.\n3. See more at our [docker package](https://github.com/browserless/browserless/pkgs/container/base).\n\n# Hosting Providers\n\nWe offer a first-class hosted product located [here](https://browserless.io). Alternatively you can host this image on just about any major platform that offers hosting for docker. Our hosted service takes care of all the machine provisioning, notifications, dashboards and monitoring plus more:\n\n- Easily upgrade and toggle between versions at the press of a button. No managing repositories and other code artifacts.\n- Never need to update or pull anything from docker. There's literally zero software to install to get started.\n- Scale your consumption up or down with different plans. We support up to thousands of concurrent sessions at a given time.\n\nIf you're interested in using this image for commercial aspects, then please read the below section on licensing.\n\n# Puppeteer\n\nPuppeteer allows you to specify a remote location for chrome via the `browserWSEndpoint` option. Setting this for Browserless is a single line of code change.\n\n**Before**\n```js\nconst browser = await puppeteer.launch();\n```\n\n**After**\n```js\nconst browser = await puppeteer.connect({ browserWSEndpoint: 'ws://localhost:3000' });\n```\n\n# Playwright\n\nWe support running with playwright via their remote connection method on the `chromium` interface. Since playwright is very similar to puppeteer, even launch arguments and other things \"just work\":\n\n**Before**\n```js\nconst browser = await pw.chromium.launch();\n```\n\n**After**\n```js\nconst browser = await pw.chromium.connect('ws://localhost:3000/playwright/chromium');\n\n// OR\nconst browser = await pw.chromium.connectOverCDP('ws://localhost:3000');\n```\n\nAfter that, the rest of your code remains the same with no other changes required.\n\n# Extending (NodeJS SKD)\n\nBrowserless comes with built-in extension capabilities, and allows for extending nearly any aspect of the system (for Version 2+). For more details on how to write your own routes, build docker images, and more, [see our SDK README.md](/bin/scaffold/README.md) or simply run \"npx @browserless.io/browserless create\" in a terminal and follow the onscreen prompts.\n\n# Usage with other libraries\n\nMost libraries allow you to specify a remote instance of Chrome to interact with. They are either looking for a websocket endpoint, a host and port, or some address. Browserless supports these by default, however if you're having issues please make an issue in this project and we'll try and work with the library authors to get them integrated with browserless. Please note that in V2 we no longer support selenium or webdriver integrations.\n\nYou can find a much larger list of supported libraries [on our documentation site](https://www.browserless.io/docs/puppeteer-library).\n\n# Motivations\n\nRunning Chrome on lambda or on your own is a fantastic idea but in practice is quite challenging in production. You're met with pretty tough cloud limits, possibly building Chrome yourself, and then dealing with odd invocation issues should everything else go ok. A lot of issues in various repositories are due to just challenges of getting Chrome running smoothly in AWS (see [here](https://github.com/GoogleChrome/puppeteer/issues?q=is%3Aissue+is%3Aopen+sort%3Acomments-desc)). You can see for yourself by going to nearly any library and sorting issues by most commented.\n\nGetting Chrome running well in docker is also a challenge as there's quiet a few packages you need in order to get Chrome running. Once that's done then there's still missing fonts, getting libraries to work with it, and having limitations on service reliability. This is also ignoring CVEs, access-controls, and scaling strategies.\n\nAll of these issues prompted us to build a first-class image and workflow for interacting with Chrome in a more streamlined way. With Browserless you never have to worry about fonts, extra packages, library support, security, or anything else. It just works reliably like any other modern web service. On top of that it comes with a prescribed approach on how you interact with Chrome, which is through socket connections (similar to a database or any other external appliance). What this means is that you get the ability to drive Chrome remotely without having to do updates/releases to the thing that runs Chrome since it's divorced from your application.\n\n# Licensing\n\nSPDX-License-Identifier: SSPL-1.0 OR Browserless Commercial License.\n\nIf you want to use Browserless to build commercial sites, applications, or in a continuous-integration system that's closed-source then you'll need to purchase a commercial license. This allows you to keep your software proprietary whilst still using browserless. [You can purchase a commercial license here](https://www.browserless.io/contact). A commercial license grants you:\n\n- Priority support on issues and features.\n- On-premise running as well as running on public cloud providers for commercial/CI purposes for proprietary systems.\n- Ability to modify the source (forking) for your own purposes.\n- A new admin user-interface.\n\nNot only does it grant you a license to run such a critical piece of infrastructure, but you are also supporting further innovation in this space and our ability to contribute to it.\n\nIf you are creating an open source application under a license compatible with the Server Side License 1.0, you may use Browserless under those terms.\n\n# Changelog\n<h1><a href=\"https://github.com/browserless/chrome/compare/v2.1.0...main\">Latest</a></h1>\n<ul>\n<li>Dependency updates.</li>\n<li>Add <code>clean</code> command to <code>@browserless.io/browserless</code> CLI.</li>\n<li>Adds support for <code>/json/list</code>, <code>/json/new</code> and <code>json/protocol</code> APIs (Chrome only).</li>\n<li>Removes legacy <code>browser.json</code> files since browserless now generates those and caches when requested.</li>\n<li>Only verify that internally managed browsers are installed when starting.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/browserless/compare/v2.0.0-beta-1...v2.1.0\">v2.1.0</a></h1>\n<ul>\n<li>Dependency updates.</li>\n<li>Name is now <code>@browserless.io/browserless</code> to reflect our npm package.</li>\n<li>NEW: SDK is now live here: <a href=\"https://www.npmjs.com/package/@browserless.io/browserless\">https://www.npmjs.com/package/@browserless.io/browserless</a>.</li>\n<li>Drops gulp and other gulp utilities in favor of our own. Move to modules in <code>scripts</code> dir.</li>\n<li>Many private class properties now use <code>protected</code> so they can be referenced in SDK extensions.</li>\n<li>Adds a <code>/json/version</code> route for older libraries that use it.</li>\n<li>Merge startup/test scripts into <code>scripts</code> dir.</li>\n<li>Moves installed browsers to <code>/usr/local/bin/playwright-browsers</code>.</li>\n<li>Merge root files into package.json where possible.</li>\n<li>README updates and fixes.</li>\n<li>Numerous link and copyright fixes.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/master...feat/browserless-2.0\">v2.0.0</a></h1>\n<p>browserless 2.0.0 represents the best body of work after running browserless for over 5 years. It contains mostly the same functionality and more, and is rebuilt to be more modular and offer a NodeJS SDK. It&#39;s also much lighter and faster than prior versions and includes a lot of semantic changes.</p>\n<h2>Features</h2>\n<ul>\n<li>ECMAScript style module loading and dependencies.</li>\n<li>New routing system using purely NodeJS&#39;s HTTP module.</li>\n<li>Better logs and concurrency/queueing parameters.</li>\n<li>Support for running the other major browser vendors in the same format and package.</li>\n<li>The service now compiles TypeScript to runtime JOI validation for our routes.</li>\n<li>Soon: upcoming support for extensions, long-running sessions and more.</li>\n</ul>\n<h2>Breaking Changes</h2>\n<ul>\n<li>Remove support for Selenium.</li>\n<li>The <code>/function</code> API now runs inside the context of the browser and not in Node.</li>\n<li>Drop support for keep-alive and pre-booting.</li>\n<li>Support for a single <code>launch</code> query-string parameter for launching a browser versus many individual parameters.</li>\n</ul>\n<h2>Minor Changes</h2>\n<ul>\n<li>Many docker parameters have been renamed, but are backwards compatible. See config.ts for details.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.60.2...v1.61.0\">v1.61.0</a></h1>\n<ul>\n<li><strong>FINAL of V1 for browserless/chrome. <a href=\"https://github.com/browserless/chrome/pull/3345\">See notes on V2 here</a></strong></li>\n<li>Dependency updates.</li>\n<li>Added <code>fonts-urw-base35</code>.</li>\n<li>Supports puppeteer <code>1.20</code>, <code>10.4.0</code>, <code>13.1.3</code>, <code>14.4.1</code>, <code>16.2.0</code>, <code>19.7.5</code> and <code>21.4.1</code>.</li>\n<li>Supports playwright <code>1.39</code>, <code>1.38</code>, <code>1.37</code>, <code>1.36</code>, <code>1.35</code>, <code>1.34</code>, and <code>1.33</code>.</li>\n<li>Fixes an issue where keep-alive chrome instances aren&#39;t properly tracked when <code>browser.close</code> is called.</li>\n<li>Fix improper handling of HTTP writing on bare sockets with 500 errors.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.60.1...v1.60.2\">v1.60.2</a></h1>\n<ul>\n<li>Dependency updates.</li>\n<li>Fixes an issue where calls to GET /sessions sometimes return blank results.</li>\n<li>Drop puppeteer <code>21.3.1</code> in favor of <code>21.3.6</code>.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.60.0...v1.60.1\">v1.60.1</a></h1>\n<ul>\n<li>Dependency updates.</li>\n<li>Drop the <code>partner</code> repo from builds as we no longer use it for installing <code>flash</code>.</li>\n<li>Bump to <code>Ubuntu</code> lunar.</li>\n<li>Bump to NodeJS 18.17.0</li>\n<li>Package.json <code>engines.node</code> now reflects what node version we run on the docker image.</li>\n<li>Drops support for playwright@<code>1.33</code> and default playwright to <code>1.38</code>.</li>\n<li>Drops support for puppeteer@<code>21.1.1</code> in favor of <code>21.3.1</code>.</li>\n<li>Replaces legacy <code>request</code> module with Node&#39;s native <code>fetch</code> for webhooks.</li>\n<li>Drops <code>node-fetch</code> across the board in favor of <code>fetch</code> native.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.59.0...v1.60.0\">v1.60.0</a></h1>\n<ul>\n<li>Dependency updates.</li>\n<li>New build arguments in our Dockerfile to apply different named base repo.</li>\n<li>New <code>CHROME_STABLE_VERSION</code> build arg for specifying a particular chrome stable version.</li>\n<li>Fixes in postinstall hooks for various platforms and chrome-stable.</li>\n<li>NEW: <code>waitFor</code> properties in our APIs now supports an object with selector + timeouts for more fine tuning.</li>\n<li>Bump puppeteer <code>20.x.x</code> to <code>21.1.1</code> (116.0.5845.96).</li>\n<li>Supports playwright versions <code>1.37</code>, <code>1.36</code>, <code>1.35</code>, <code>1.34</code>, and <code>1.33</code>.</li>\n<li>Fixes in deploy script to handle versions, platforms and architectures.</li>\n<li>Fixes an issue where headless defaults to <code>DEFAULT_STEALTH</code>.</li>\n<li>New <code>PREBOOT_QUANTITY</code> for overriding the amount of pre-booted instances of Chrome.</li>\n<li>Allow using a host&#39;s display by setting <code>DISPLAY</code> env variable.</li>\n<li>Link fixes in README.md.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.58.0...v1.59.0\">v1.59.0</a></h1>\n<ul>\n<li>Dependency updates.</li>\n<li>Bump to Ubuntu Kinetic release + updates to use relevant packages.</li>\n<li>In support of puppeteer 20+, updates to <code>env.js</code> for finding/symlinking Chrome.</li>\n<li>Supports playwright <code>1.33</code>, <code>1.32</code>, <code>1.31</code>, and <code>1.29.</code>. Drops support for earlier versions.</li>\n<li>Ad-blocking and other request-interception in browserless is graceful using the <code>isInterceptResolutionHandled</code> method.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.57.0...v1.58.0\">v1.58.0</a></h1>\n<ul>\n<li>Dependency updates.</li>\n<li>Documentation link fixes.</li>\n<li>Add new required lib <code>libu2f-udev</code>.</li>\n<li>Support for <a href=\"mailto:puppeteer@19.7.5\">puppeteer@19.7.5</a>.</li>\n<li>Supports playwright versions: <code>1.27</code>, <code>1.28</code>, <code>1.29</code>, <code>1.30</code> and <code>1.31</code>.</li>\n<li>Better internal TypeScript definitions.</li>\n<li>Print&#39;s a few extra log-lines at startup for links to various resources.</li>\n<li><code>/kill/all</code> now supports rebooting when PREBOOT is turned on.</li>\n<li>Fixes an issue with chromedriver boot-looping in modern versions.</li>\n<li>Adds support for <code>--headless=new</code>.</li>\n<li>Fixes an issue where user-data-dirs aren&#39;t deleted due to a crashed container.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.56.0...v1.57.0\">v1.57.0</a></h1>\n<ul>\n<li>Dependency updates.</li>\n<li>Add back in <code>puppeteer@13.1.3</code> for PDF/Screenshot performance.</li>\n<li>Replace <code>puppeteer@18.0.5</code> in favor of <code>puppeteer@19.2.2</code>.</li>\n<li>Better puppeteer install/binary path lookups.</li>\n<li>Support for the following playwright versions via the /playwright path:<ul>\n<li>1.23.3</li>\n<li>1.24.2</li>\n<li>1.25.2</li>\n<li>1.26.1</li>\n<li>1.27.1</li>\n</ul>\n</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.55.0...v1.56.0\">v1.56.0</a></h1>\n<ul>\n<li>Dependency updates.</li>\n<li>Fixes various puppeteer issues with regards to revision information and browser-fetching.</li>\n<li>Fixes a Selenium issue where failed browsers can cause session to zombie.</li>\n<li>Small fix for route error handling.</li>\n<li>Better selenium W3C support.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.55.0...v1.54.1\">v1.55.0</a></h1>\n<p><strong>Potentially Breaking</strong></p>\n<ul>\n<li>Update base OS from Ubuntu 20.04 to Ubuntu 22.04.</li>\n<li>Drops <code>path</code> support for both <code>addScriptTag</code> and <code>addStyleTag</code>. Use <code>url</code> or inject content directly.</li>\n</ul>\n<hr>\n<ul>\n<li>Dependency updates.</li>\n<li>We now support multiple versions of playwright via <code>playwright-core</code>. browserless checks the User-Agent string and tries to load a compatible playwright server at runtime in order to avoid breakages between versions.</li>\n<li>New <code>scrollPage</code> boolean parameter for the screenshot and other relevant APIs.</li>\n<li>browserless now writes appropriately formatted HTTP and WebSocket messages for non-2xx responses.</li>\n<li>Better CI coverage with prior puppeteer versions.</li>\n<li>Adds back a <code>browser.json</code> file in our docker images for easier CDP-related queries.</li>\n<li>A new <code>PORT</code> arg is available at build time in order to specify a PORT to listen onto.</li>\n<li>Updated links for browserless documentation in docs.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.54.1...v1.54.0\">v1.54.1</a></h1>\n<ul>\n<li>Dependency updates.</li>\n<li>Add <code>browser.json</code> file to git tags.</li>\n<li>Prettier fixes on source.</li>\n<li>deploy.js file fixes for creating production tags.</li>\n<li>Fix: add the <code>userDataDir</code> option so that we don&#39;t fill disks when using <code>stealth</code>.</li>\n<li>Fix: allow <code>disconnect</code> listeners to fire before closing.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.53.0...v1.54.0\">v1.54.0</a></h1>\n<ul>\n<li>Dependency updates.</li>\n<li>Move to using <code>mocha</code> for better esm support.</li>\n<li>Drop puppeteer <code>13.6.0</code> in favor of <code>14.4.1</code>.</li>\n<li>Utilize puppeteer <code>14.4.1</code> for <code>chrome-stable</code>.</li>\n<li>New internal <code>getCDPClient</code> for loading a page&#39;s CPD connection.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.52.1...v1.53.0\">v1.53.0</a></h1>\n<ul>\n<li>Dependency updates.</li>\n<li>Bump <code>browserless:base</code> to <code>1.16.0</code>.</li>\n<li>Drop <code>--quiet</code> from deploy scripts.</li>\n<li><code>arm64</code> support for latest as well as puppeteer at versions 9,10 and 13.</li>\n<li>Update puppeteer 13 from <code>13.5.2</code> to <code>13.6.0</code> (revision <code>982053</code>).</li>\n<li>README updates.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.52.0...v1.52.1\">v1.52.1</a></h1>\n<ul>\n<li>Dependency updates.</li>\n<li>Playwright example correction in README.md.</li>\n<li>Use revision <code>970485</code> for puppeteer 13.x.x, <code>latest</code>, chrome-stable and <code>arm64</code>.</li>\n<li>When using <code>KEEPALIVE</code> and <code>PREBOOT</code>, don&#39;t create new blank pages, and use the existing one instead.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.51.1...v1.52.0\">v1.52.0</a></h1>\n<ul>\n<li>Dependency updates.</li>\n<li>Added in new fonts: <code>fonts-gfs-neohellenic</code>.</li>\n<li>Minor code formatting changes.</li>\n<li>Drop <a href=\"mailto:puppeteer@13.1.3\">puppeteer@13.1.3</a> in favor of 13.5.2.</li>\n<li>Make <code>heapdump</code> an optional dependency as it&#39;s not always used, and add it back in.</li>\n<li>Utilize <code>fs/promise</code> vs home-rolled promisified utils.</li>\n<li>Fix an issue where PREBOOT and KEEPALIVE might return an <code>undefined</code> browser.</li>\n<li>Logging when file-protocol requests happen and terminate a session.</li>\n<li>Move the browser process exit listener into the puppeteer-provider for better session cleanup.</li>\n<li>Allow &quot;headfull&quot; playwright sessions.</li>\n<li>Don&#39;t <code>await</code> chrome-helper&#39;s closing of the browser as it&#39;s not truly async.</li>\n<li>Remove <code>body-parser</code> in favor of <code>express</code>&#39;s JSON and other parsers.</li>\n<li>Fixes an issue where using a user-data-dir that doesn&#39;t exist causes chrome to crash.</li>\n<li>Add in more unit and integration tests.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.51.1...v1.52.0\">v1.52.0</a></h1>\n<ul>\n<li>Dependency updates.</li>\n<li>Added in new fonts: <code>fonts-gfs-neohellenic</code>.</li>\n<li>Minor code formatting changes.</li>\n<li>Drop <a href=\"mailto:puppeteer@13.1.3\">puppeteer@13.1.3</a> in favor of 13.5.2.</li>\n<li>Make <code>heapdump</code> an optional dependency as it&#39;s not always used, and add it back in.</li>\n<li>Utilize <code>fs/promise</code> vs home-rolled promisified utils.</li>\n<li>Fix an issue where PREBOOT and KEEPALIVE might return an <code>undefined</code> browser.</li>\n<li>Logging when file-protocol requests happen and terminate a session.</li>\n<li>Move the browser process exit listener into the puppeteer-provider for better session cleanup.</li>\n<li>Allow &quot;headfull&quot; playwright sessions.</li>\n<li>Don&#39;t <code>await</code> chrome-helper&#39;s closing of the browser as it&#39;s not truly async.</li>\n<li>Remove <code>body-parser</code> in favor of <code>express</code>&#39;s JSON and other parsers.</li>\n<li>Fixes an issue where using a user-data-dir that doesn&#39;t exist causes chrome to crash.</li>\n<li>Add in more unit and integration tests.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.51.0...v1.51.1\">v1.51.1</a></h1>\n<ul>\n<li>Dependency updates.</li>\n<li>Updates the <code>vm2</code> module to <code>3.9.7</code>.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.50.0...v1.51.0\">v1.51.0</a></h1>\n<ul>\n<li>Dependency updates.</li>\n<li>New <code>viewport</code> option inside of the content API.</li>\n<li>New <code>encoding</code> option in the screenshot API.</li>\n<li>Drop <a href=\"mailto:puppeteer@12.x.x\">puppeteer@12.x.x</a> in favor of 13.x.x.</li>\n<li>Fixes in our deploy scripts.</li>\n<li>Fixes for windows binaries in our postinstall hook.</li>\n<li>Fixes an issue where playwright tries to use a pre-booted chrome instance.</li>\n<li>Small type updates.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.49.1...v1.50.0\">v1.50.0</a></h1>\n<ul>\n<li>Dependency updates.</li>\n<li>Drops support for <code>puppeteer-4.0.1</code> in favor of <code>puppeteer-12.0.1</code>.</li>\n<li>Chrome-stable now utilizes puppeteer @ <code>12.0.1</code>.</li>\n<li>Support for <code>arm64</code> via production tags (<code>1-arm64</code>) as well as in <code>latest</code>.</li>\n<li>Static JSON files (<code>protocol.json</code>, <code>version.json</code>) are built at runtime on their first request and then cached in memory.</li>\n<li>Bumps <code>browserless/base</code> to <code>1.14.0</code>.</li>\n<li>New <code>selector</code> property for screenshot-ing a single DOM node in the screenshot API.</li>\n<li><code>puppeteerVersions</code> in the package.json file has been rename do <code>chromeVersions</code>.</li>\n<li>Internal changes for deploying production tag scripts.</li>\n<li>Consolidate scripts for <code>postinstall</code>.</li>\n<li>Drop support for <code>heapdump</code> due to its age and lack of platform varieties.</li>\n<li>New <code>/metrics/total</code> route for summing up all statistics in a single JSON payload.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.49.0...v1.49.1\">v1.49.1</a></h1>\n<ul>\n<li>Dependency updates.</li>\n<li>Fix webhook not using timeout URL.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.48.0...v1.49.0\">v1.49.0</a></h1>\n<ul>\n<li>Dependency updates.</li>\n<li>Support for ARM64 builds by dropping flash for it.</li>\n<li>Bump puppeteer 10.2.0 for 10.4.0.</li>\n<li>New puppeteer-hook for injecting a puppeteer-compatible library, eg. puppeteer-extra.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.47.0...v1.48.0\">v1.48.0</a></h1>\n<p><strong>Potentially Breaking</strong></p>\n<ul>\n<li>API calls with <code>html</code> in their payloads now use the <code>page.setContent</code> API versus a prior hack using one-time network-request interception (<a href=\"https://github.com/browserless/chrome/compare/v1.47.0...master#diff-67b699af1b24472604e21081d0509620d4ab3d986fcd4f8aa0b04d5ee5e4c63fL88\">example here</a>). Old versions of puppeteer might not work properly with this (&lt;= 5.x.x). This effects the following APIS: <code>/content</code>, <code>/pdf</code> and <code>/screenshot</code>.</li>\n</ul>\n<hr>\n<ul>\n<li>Dependency updates.</li>\n<li>Bump <code>browserless/base</code> to <code>1.12.0</code> (add user-id to <code>blessuser</code> of <code>BLESS_USER_ID=999</code>).</li>\n<li>Bumps puppeteer @10.x.x to <code>10.2.0</code> with revision <code>901912</code>.</li>\n<li>Makes API calls use <code>setContent</code> properly now (no more one-time network interception). This fixes certain issues with images not loading in PDFs and screenshots.</li>\n<li>Fix some typings in tests.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.46.0...v1.47.0\">v1.47.0</a></h1>\n<ul>\n<li>Dependency updates.</li>\n<li>Bump <code>browserless/base</code> to <code>1.11.0</code>.</li>\n<li>Add new lint task and rename GitHub actions tasks, remove <code>tslint</code>.</li>\n<li>Lint and prettier fixes.</li>\n<li>Delay url parsing until after <code>before</code> hook runs.</li>\n<li>New <code>meta</code> object param for page hooks (passing through arbitrary meta data set by prior hooks).</li>\n<li>New <code>FUNCTION_ENV_VARS</code> environment variable pass through an allow-list of environment variables for functions to access.</li>\n<li>Fix <code>someObject.hasOwnProperty</code> to <code>Object.prototype.hasOwnProperty.call</code>.</li>\n<li></li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.45.0...v1.46.0\">v1.46.0</a></h1>\n<ul>\n<li>Dependency updates.</li>\n<li>Move to Node 16.x.x.</li>\n<li>Bump browserless/base to 1.10.0.</li>\n<li>Limit <code>x-response-url</code> to 100 characters.</li>\n<li>Add support for <a href=\"mailto:puppeteer@10.x.x\">puppeteer@10.x.x</a>.</li>\n<li>Add <code>maxConcurrent</code> stat for metrics API + log stats every 5 minutes to stdout.</li>\n<li>Some performance improvements to how pages/browsers are setup and torn down.</li>\n<li>Add <code>API_DOCS_ENDPOINT</code> as a filterable API to deny access to.</li>\n<li>Minor code reformatting from prettier.</li>\n<li>Better page setup and logging.</li>\n<li>Fixes <code>DEFAULT_STEALTH</code> for self-hosted deployments.</li>\n<li>Improvements on how chrome is closed.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.44.0...v1.45.0\">1.45.0</a></h1>\n<ul>\n<li>Dependency Updates.</li>\n<li>Support for <a href=\"https://github.com/browserless/chrome/commit/0903795e936b93a511ec04f7ae35c03397682905\">playwright proxies</a>.</li>\n<li>Fixes an issue with larger headers potentially causing load-balancers to crash and fail.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.43.0...v1.44.0\">v1.44.0</a></h1>\n<p><strong>Potentially Breaking</strong></p>\n<ul>\n<li><code>PROXY_HOST</code> and <code>PROXY_PORT</code> are now replaced with a single <code>PROXY_URL</code> param, eg: <code>https://www.mybrowserless.com/optional/paths</code>. When set, browserless uses this fully-qualified URL to build out links <em>back</em> to its internal debugger and sessions. Useful when you&#39;re instance is behind a proxy or load-balancer of some kind.</li>\n</ul>\n<hr>\n<ul>\n<li>Dependency Updates.</li>\n<li>Use recent Node 14 (browserless-base 1.7.0).</li>\n<li>New <code>rejectResourceTypes</code> property on most APIs (content, screenshot, pdf, etc.).</li>\n<li>Allow serving of <code>file://</code> protocols when explicitly enabled (default is off due to security concerns). Set <code>ALLOW_FILE_PROTOCOL=true</code> in your env params.</li>\n<li>The <code>/pressure</code> API now takes into account CPU/Memory consumption, and adds a &quot;reason&quot; property for why the machine might be not available.</li>\n<li>Fixes an issue where playwright couldn&#39;t download files.</li>\n<li>You can now filter /sessions calls with a <code>trackingId</code> parameter.</li>\n<li><code>detached</code> functions now return a <code>trackingId</code> when present.</li>\n<li>More types, tests, and utility consolidation.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.42.0...v1.43.0\">v1.43.0</a></h1>\n<ul>\n<li>Dependency Updates.</li>\n<li>Fixes an issue where --user-data-dirs aren&#39;t deleted properly, potentially filling disks.</li>\n<li>Changes CPU/Memory checks to be user-based and not the entire OS.</li>\n<li>Adds tests for the user-data-dir issue.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.41.0...v1.42.0\">v1.42.0</a></h1>\n<ul>\n<li>Dependency Updates.</li>\n<li>Move to Node 14!</li>\n<li>Use <code>esModuleInterop</code> for imports.</li>\n<li>Remove <code>page.waitFor</code> in favor of downstream methods.</li>\n<li>Adds new <code>?stealth</code> parameter for API calls (see puppeteer-extra-stealth-plugin).</li>\n<li>New <code>DEFAULT_STEALTH</code> param for making stealth calls by default.</li>\n<li>Fixes <code>ignoreDefaultArgs</code> in chrome stable.</li>\n<li>Ensure temp user-data-dirs are always cleaned up.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.40.2...v1.41.0\">v1.41.0</a></h1>\n<ul>\n<li>Dependency Updates.</li>\n<li>New <code>SESSION_CHECK_FAIL_URL</code> webhook for when pre-session checks fail.</li>\n<li>Health checks now take the last two CPU/Memory samples to determine if a failure (5 minutes).</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.40.1...v1.40.2\">v1.40.2</a></h1>\n<ul>\n<li>Dependency Updates.</li>\n<li>Fix potentially unhandled stream error events when closing chrome.</li>\n<li>Bump puppeteer to 5.4.1 for major 5.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.40.0...v1.40.1\">v1.40.1</a></h1>\n<ul>\n<li>Dependency Updates</li>\n<li>New <code>SOCKET_CLOSE_METHOD</code> for better load-balancing behavior when under load.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.39.0...v1.40.0\">v1.40.0</a></h1>\n<ul>\n<li>Dependency Updates</li>\n<li>Support for playwright 1.4.0 and greater. <a href=\"https://github.com/microsoft/playwright/issues/4054\">See more here</a>.</li>\n<li>New <code>PRE_REQUEST_HEALTH_CHECK</code> env variable to check CPU/Memory prior to running a session. Set <code>MAX_CPU_PERCENT</code> or <code>MAX_MEMORY_PERCENT</code> for setting these thresholds. Responds with a <code>503</code> HTTP code if CPU/Memory are high on any inbound session (API, puppeteer or webdriver).</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.38.0...v1.39.0\">v1.39.0</a></h1>\n<ul>\n<li>Dependency Updates</li>\n<li>Fixes a crash due to <code>browser.close</code> streams not completing properly.</li>\n<li>Adds a <code>dumpio</code> query-string parameter for launching with puppeteer.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.37.2...v1.38.0\">v1.38.0</a></h1>\n<ul>\n<li>Dependency Updates</li>\n<li>Fixes a memory leak when browsers don&#39;t close properly.</li>\n<li>Adds a <code>/heapdump</code> route for capturing heap dumps. Turn on by setting <code>ENABLE_HEAP_DUMP=true</code> in your docker env.</li>\n<li><code>emulateMedia</code> fixes on the pdf route.</li>\n<li>CodeQL implemented.</li>\n<li>README fixes.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.37.1...v1.37.2\">v1.37.2</a></h1>\n<ul>\n<li>Dependency Updates</li>\n<li>Fixes an issue where the webserver can crash after rejecting a request.</li>\n<li>Fixes deployment script not waiting for zip files to be finished unzipped.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.37.0...v1.37.1\">1.37.1</a></h1>\n<ul>\n<li>Dependency Updates</li>\n<li>Fixes an issue in webdriver not starting properly.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.36.0...v1.37.0\">1.37.0</a></h1>\n<p><strong>Potentially Breaking</strong></p>\n<ul>\n<li>Due to stability issues, puppeteer version 3.x.x and 4.x.x now use chromium revision <code>782078</code>. See our <code>package.json</code> for details.</li>\n</ul>\n<hr>\n<ul>\n<li>Dependency Updates</li>\n<li>README Updates</li>\n<li>Fixes an issue for secured containers using prometheus (plus tests).</li>\n<li>Support for puppeteer <code>5.2.1</code></li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.35.0...v1.36.0\">1.36.0</a></h1>\n<ul>\n<li>Dependency Updates</li>\n<li>Drops support for puppeteer <code>2.0.0</code> and <code>3.0.4</code>, please use <code>2.1.1</code> and <code>3.3.0</code> for those revisions.</li>\n<li>Adds support for puppeteer <code>5.0.0</code>.</li>\n<li>Bug-fix with the server randomly closing with an uncaught error event thrown from inside underlying socket connection.</li>\n<li>Adds back in <code>--disable-dev-shm-usage</code> to default arguments for better SHM performance.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.34.0...v1.35.0\">1.35.0</a></h1>\n<ul>\n<li>Dependency Updates</li>\n<li>New <code>maxTime</code>, <code>minTime</code>, <code>meanTime</code> and <code>totalTime</code> of all sessions for a given period in /stats.</li>\n<li>Bugfix on CPU/Memory triggering health failure webhooks.</li>\n<li>Fix issues in websocket errors by awaiting browser.close (or 5 seconds, whichever is quickest).</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.33.1...v1.34.0\">v1.34.0</a></h1>\n<p><strong>Potentially Breaking</strong></p>\n<ul>\n<li>screencast API no longer supports <code>audio</code> or the <code>setPreferences</code> function in order to offer a better video experience. In order to set the width/height, simply set a page width height to what you&#39;d like.</li>\n<li><code>chrome-stable</code> will now use <code>puppeteer@3.1.0</code> for better compatibility.</li>\n</ul>\n<hr>\n<ul>\n<li>Dependency updates.</li>\n<li>Drops puppeteer version <code>1.20.0</code> and below.</li>\n<li>Move <code>browserless/base</code> to <code>v1.5.0</code>.</li>\n<li>Puppeteer support for <code>3.3.0</code> (3.2.x and 3.1.x have the same chromium revision).</li>\n<li>Fixes <code>trackingId</code> on pre-booted sessions.</li>\n<li><code>about:blank</code> pages now are returned in the <code>/sessions</code> API for transparency of open sessions/browsers.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.33.0...v1.33.1\">1.33.1</a></h1>\n<ul>\n<li>Dependency updates.</li>\n<li>Fix socket errors from accidentally firing error webhooks.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.32.0...v1.33.0\">1.33.0</a></h1>\n<ul>\n<li>Drops support for puppeteer 1.17.x and 1.18.x</li>\n<li>Support for puppeteer 3.0.x</li>\n<li>Dependency updates</li>\n<li>Fix reject stat firing on debugger pages not being found</li>\n<li>Consolidates more types.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.31.1...v1.32.0\">1.32.0</a></h1>\n<ul>\n<li>Dependency Updates.</li>\n<li>Adds roboto fonts.</li>\n<li>Updates <code>pressure</code> API to take account of running browsers in the <code>running</code> count.</li>\n<li>Adds <code>maxConcurrent</code>, <code>maxQueued</code>, <code>cpu</code> and <code>memory</code> to pressure.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.31.0...v1.31.1\">1.31.1</a></h1>\n<ul>\n<li>Dependency Updates.</li>\n<li>Fixes a small issue where XVFB doesn&#39;t start properly during an automated restart.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.30.0...v1.31.0\">1.31.0</a></h1>\n<ul>\n<li>Dependency Updates.</li>\n<li>Allows <code>trackingId</code> on uploaded files to save in the appropriate tracking-ID folder.</li>\n<li>New <code>userAgent</code> param for setting user-agent in API requests.</li>\n<li>Fixes an issue where chrome wasn&#39;t being closed in rare cases.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.29.1...v1.30.0\">1.30.0</a></h1>\n<ul>\n<li>Dependency Updates.</li>\n<li>Updates to Node 13 for speed and memory improvements.</li>\n<li>browserless/<a href=\"mailto:base@1.4.0\">base@1.4.0</a></li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.29.0...v1.29.1\">1.29.1</a></h1>\n<ul>\n<li>Dependency Updates.</li>\n<li>Fixes how deploy script determines errors when running child commands.</li>\n<li>Fixes issues when many selenium sessions can potentially fill up disk space.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.28.0...v1.29.0\">1.29.0</a></h1>\n<ul>\n<li>Dependency updates.</li>\n<li>Uses <code>pipe</code>&#39;s for most API calls and other internal endpoints for faster/better throughput. Works only for <code>headless</code> API/puppeteer calls.</li>\n<li>Allows custom lighthouse configs via POST <code>config</code> property.</li>\n<li>Patches vm2.</li>\n<li>Before hooks no longer end requests forcefully -- external hooks must manually end the request/sockets themselves.</li>\n<li>Properly passes socket errors to the error handler/webhook</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.27.0...v1.28.0\">1.28.0</a></h1>\n<ul>\n<li>Dependency updates.</li>\n<li>Sets a system-default font of Ubuntu for most sites that use <code>system-ui</code> in their font declarations.</li>\n<li>Fixes health-check failure webhooks.</li>\n<li>New <code>PROXY_HOST</code>, <code>PROXY_PORT</code> and <code>PROXY_SSL</code> for external load-balancers. <a href=\"https://www.browserless.io/docs/docker.html#using-a-proxy\">See docsite for more info</a>.</li>\n<li>Moves over to GH actions over Travis for CI.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.26.1...v1.27.0\">1.27.0</a></h1>\n<ul>\n<li>Dependency updates.</li>\n<li>New <code>manipulate</code> params for screenshots, allowing for resizing, flipping and more.</li>\n<li>Better tracking of chrome-process for cleanup of zombied sessions.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.26.0...v1.26.1\">1.26.1</a></h1>\n<ul>\n<li>Dependency updates.</li>\n<li>Added <code>git</code> as a dependency in dockerfile for git-based npm dependencies to work.</li>\n<li>Fixed an issue in <code>start.sh</code> so that errors bubble up properly and close the process.</li>\n<li>Bumps <code>browserless/base</code> to <code>1.2.0</code>.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.25.0...v1.26.0\">1.26.0</a></h1>\n<ul>\n<li>Dependency updates.</li>\n<li>Dropping pre-push hooks for speed.</li>\n<li>Consolidate all interfaces/types to a types.d.ts file.</li>\n<li>Fixes an issue where numerous chrome instances launch when prebooting.</li>\n<li>Fixes an issue where incoming requests don&#39;t use the pre-booted chrome instance.</li>\n<li>Uses <code>page.setViewport</code> when <code>--window-size</code> is set in params to help with screenshots not appearing properly (chromedriver only).</li>\n<li></li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.24.0...v1.25.0\">1.25.0</a></h1>\n<ul>\n<li>Dependency updates.</li>\n<li>Stricter build-time arguments for chromium and chromedriver assets.</li>\n<li>Better XVFB functionality.</li>\n<li>New parameters for most API&#39;s, <code>addScriptTag</code> and <code>addStyleTag</code>, accepting an array of scripts/styles respectively.</li>\n<li>Drop support for <code>puppeteer@1.17.0</code>.</li>\n<li>Proper support for parsing <code>ignoreDefaultArgs</code> query-parameters.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.23.1...v1.24.0\">1.24.0</a></h1>\n<ul>\n<li>Dependency updates.</li>\n<li>Bugfix on our debugger&#39;s play button being off-center.</li>\n<li>Fixes driver.close() calls not cleaning the browser.</li>\n<li>New <code>/GET</code> option for most our APIs. Stringify your JSON and add a ?body=YOUR-JSON with a /GET call to most of our functions! Requires <code>ENABLE_API_GET=true</code> in you docker env variables.</li>\n<li>WebSocket (Socket) exception handling and logging.</li>\n<li>More integration and unit tests added.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.23.0...v1.23.1\">1.23.1</a></h1>\n<ul>\n<li>Fixes an issue in chromedriver where commands would hang.</li>\n<li>Fixes an issue in chromedriver sessions not being removed properly.</li>\n<li>Fixes and pins the base image so that headful sessions work again.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.22.0...v1.23.0\">1.23.0</a></h1>\n<ul>\n<li>Dependency updates.</li>\n<li>Use <code>apt-get</code> to install <code>dumb-init</code>.</li>\n<li>Add a LANG arg in docker.</li>\n<li>New <code>setJavaScriptEnabled</code> property for REST APIs.</li>\n<li>Fixes an issue with <code>waitFor</code> functions in REST API calls.</li>\n<li>Fixes issues when PREBOOT_CHROME and KEEPALIVE are true.</li>\n<li>Updates protocol and host information in ad-blocking.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.21.0...v1.22.0\">1.22.0</a></h1>\n<ul>\n<li>Dependency updates.</li>\n<li>Removal of unnecessary &#39;--disable-dev-shm-usage&#39;</li>\n<li>Squelching of chromedriver&#39;s verbose args unless <code>DEBUG=*</code> is set.</li>\n<li>New <code>/kill/${id}</code> route for remotely killing a certain browser.</li>\n<li>Allowing of sub-child routes in workspaces.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.20.0...v1.21.0\">1.21.0</a></h1>\n<ul>\n<li>Dependency updates.</li>\n<li>New <code>viewport</code> property option for PDF endpoint.</li>\n<li>The <code>/stats</code> endpoint now runs in a separate process meaning it can be parallelized.</li>\n<li>Fixed a bug where hardware monitoring can cause the container to restart/crash.</li>\n<li>Fixes an issue with the file-chooser API not working in puppeteer.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.19.0...v1.20.0\">1.20.0</a></h1>\n<ul>\n<li>Dependency updates.</li>\n<li>New <code>/scrape</code> API!</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.18.0...v1.19.0\">1.19.0</a></h1>\n<ul>\n<li>Dependency updates.</li>\n<li>Fixes chrome-stable&#39;s binary chromedriver.</li>\n<li>Move over to Node 12.</li>\n<li>Bugfix on width/height in the screencast API.</li>\n<li>Support for <a href=\"mailto:puppeteer@2.0.0\">puppeteer@2.0.0</a>.</li>\n<li>Fixed issues with the devtools JS files missing.</li>\n<li>Adds support for blacklisting routes in Docker.</li>\n<li>Consolidates hooks into a hooks module.</li>\n<li>Allows Selenium to specify download-paths and pausing via preferences.</li>\n<li>Fixes an issue in certain JSON-based CDP libraries.</li>\n<li>Function API&#39;s can now run incognito mode with a new Docker param.</li>\n<li></li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.17.0...v1.18.0\">1.18.0</a></h1>\n<ul>\n<li>Dependency updates</li>\n<li>Better <code>IS_DOCKER</code> check for kubernetes.</li>\n<li>Updates to README.md, spelling fixes and Slack link.</li>\n<li>Fixes to debugger and larger code bodies.</li>\n<li>Removal of analytics in debugger.</li>\n<li>Screencast improvements and adding ability to set new options.</li>\n<li>New <code>waitFor</code> property in our APIs (content, pdf and screenshot).</li>\n<li>Don&#39;t allow file requests on the debugger for security reasons.</li>\n<li>Better metrics monitoring.</li>\n<li><code>singleRun</code> mode in docker.</li>\n<li>New prometheus support!</li>\n<li>Fixing issues with keeping chrome alive (only closing once TTL is met).</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.16.0...v1.17.0\">1.17.0</a></h1>\n<ul>\n<li>Dependency updates</li>\n<li>Splitting docker images into two repositories for faster builds and pulls</li>\n<li>Adding in external routing capabilities</li>\n<li>New error hook</li>\n<li>More/better types</li>\n<li>Updating <code>deviceScaleFactor</code> in API&#39;s for more granular control.</li>\n<li>Better chromedriver failure messages.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.15.0...v1.16.0\">1.16.0</a></h1>\n<ul>\n<li>Adding <code>ffmpeg</code> to the docker dependency list.</li>\n<li>Add <code>timecut</code> as a dependency for recording.</li>\n<li>Better logs on chrome PID&#39;s and closing forcefully.</li>\n<li>Fixed <code>DEFAULT_CHROME</code> =&gt; <code>DEFAULT_HEADLESS</code>.</li>\n<li>Fixed a bug where <code>xvfb</code> doesn&#39;t start in time.</li>\n<li>Use <code>SIGKILL</code> for killing chromedriver.</li>\n<li><code>/json/version</code> now returns a <code>webSocketDebuggerUrl</code>.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.14.1...v1.15.0\">1.15.0</a></h1>\n<ul>\n<li>New <code>page</code> and <code>browser</code> hooks for docker images that <code>FROM</code> browserless.</li>\n<li><code>bluebird</code> added as a module for <code>function</code> and other endpoints.</li>\n<li>More dependency updates.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.14.0...v1.14.1\">1.14.1</a></h1>\n<ul>\n<li>Bugfix when running multiple &quot;headfull&quot; sessions.</li>\n<li>Dependency updates.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.13.0...v1.14.0\">1.14.0</a></h1>\n<ul>\n<li>New <code>WORKSPACE_DELETE_EXPIRED</code> and <code>WORKSPACE_EXPIRE_DAYS</code> to auto-cleanup workspace dirs.</li>\n<li>README.md cleanup now that HTTPS is no longer required.</li>\n<li>Support for <code>~</code> in docker env parameters.</li>\n<li>More alignment with how chromedriver and puppeteer sessions get cleaned up.</li>\n<li><code>/session</code> API now returns <code>browserWSEndpoint</code> and <code>browserId</code> properties for having multiple debuggers connected.</li>\n<li>Support for reconnecting(!!). When a <code>?keepalive=KEEP-ALIVE-IN-MS</code> is seen in the <code>puppeteer.connect</code> call we keep the browser active for that many ms after the debugger disconnects.</li>\n<li>New <code>/kill/all</code> route which closes <em>all</em> actively running sessions.</li>\n<li>New internal scheduler module, making future things like cron-based jobs a possibility.</li>\n<li>Better internal types.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.12.0...v1.13.0\">1.13.0</a></h1>\n<ul>\n<li>A minor refactor to consolidate calls to <code>url.parse</code> for performance gains.</li>\n<li>Introduces a per-session based timeout that overrides the global timeout.</li>\n<li>Consolidates authorization checks to remove duplication.</li>\n<li>Moves more types into their backing modules in order to better consolidate files.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.11.0...v1.12.0\">1.12.0</a></h1>\n<ul>\n<li>Set&#39;s a non-conflicting <code>WORKSPACE_DIR</code> and <code>DEFAULT_USER_DATA_DIR</code> in docker by default.</li>\n<li>Drops support for puppeteer <code>1.15.0</code> and adds <code>1.19.0</code>.</li>\n<li>Web-based debugger now sends cookies for docker deployments that are secure.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.10.0...v1.11.0\">1.11.0</a></h1>\n<ul>\n<li>Live debugger is now self-hosted, no more enforced https though it&#39;s still recommended.</li>\n<li>Consolidated build steps.</li>\n<li>Using the same chromedriver binary that matches the puppeteer&#39;s bundled chromium.</li>\n<li>Introducing <code>trackingId</code> workflows.</li>\n<li>Fixing unused export&#39;s, removing extraneous internal methods.</li>\n<li><code>/workspace</code> API now returns sub-files and scopes sessions by <code>trackingId</code> when present.</li>\n<li>Support for <code>/json/new</code> protocol.</li>\n<li>Dependency updates.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.9.0...v1.10.0\">1.10.0</a></h1>\n<ul>\n<li>Dropped support for puppeteer <code>1.9.0 =&gt; 1.14.0</code>.</li>\n<li>Added support for puppeteer <code>1.16.0 =&gt; 1.18.0</code>.</li>\n<li>A version of chromedriver is now installed to perfectly match the version of puppeteer&#39;s chromium.</li>\n<li>In dev, chromedriver now uses the puppeteer version of chromium.</li>\n<li>Defaulted most ENV-variables in docker to sensible defaults.</li>\n<li>New <code>rotate</code> feature for PDF endpoint: <code>{ rotate: 90 }</code> =&gt; rotate left 90 degrees.</li>\n<li>Support for <code>browserless.token</code> in the docker image.</li>\n<li>puppeteer integration now returns semantic HTTP codes for certain errors (<code>400</code>, <code>403</code> and <code>429</code>).</li>\n<li>Support for chromedriver&#39;s move to the W3C spec &#39;goog:chromeOptions&#39;.</li>\n<li>The debugger now filters out <code>about:blank</code> pages, and includes sessions by Selenium.</li>\n<li>Workspace support for selenium-based integrations.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.8.0...v1.9.0\">1.9.0</a></h1>\n<ul>\n<li>Better handling of browser/socket closing in puppeteer integrations.</li>\n<li>Numerous screencast fixes.</li>\n<li>Moved all GH links to new repo location.</li>\n<li>Dep updates.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.7.0...v1.8.0\">1.8.0</a></h1>\n<ul>\n<li>Better windows dev experience.</li>\n<li>Indian font support.</li>\n<li>Video capture now supports audio and browser width/height.</li>\n<li>Dependency updates.</li>\n<li>DEFAULT env variables for launching pre-booted Chrome.</li>\n</ul>\n<h1>1.7.0</h1>\n<ul>\n<li>Dep updates</li>\n<li>New <code>?blockAds</code> query-parameter for disabling 3rd-party ad calls.</li>\n</ul>\n<h1>1.6.0</h1>\n<ul>\n<li>New <code>authenticate</code> and <code>setExtraHTTPHeaders</code> params for the <code>content</code>, <code>pdf</code>, and <code>screenshot</code> APIs. Useful for using proxies in our REST APIs.</li>\n<li>Fixed a bunch of bugs inside of the webdriver integration, making it more REST-ful.</li>\n<li>Updated dependencies inside of Chromedriver.</li>\n<li>New <code>DISABLE_AUTO_SET_DOWNLOAD_BEHAVIOR</code> for mitigating errors in puppeteer &lt; 1.15.0.</li>\n<li>Bumped Puppeteer to 1.15.0.</li>\n</ul>\n<h1>1.5.0</h1>\n<ul>\n<li>New <code>/session</code> API (and accompanying routes) for display/viewing active sesions in a remote debugger(!).</li>\n<li>New <code>?pause</code> query-param for pausing sessions prior to running them (useful for the live debug viewer).</li>\n<li>The browserless debugger now exposes links to these debug pages via the sidebar.</li>\n<li>New Debugger page can be disabled via the <code>ENABLE_DEBUG_VIEWER=false</code> environment variable flag.</li>\n<li>Move to use <code>node@10</code>.</li>\n<li>No more <code>no-implicit-any</code>&#39;s inside the codebase.</li>\n</ul>\n<h1>1.4.0</h1>\n<ul>\n<li>During connection, we now set the download dir of REST and puppeteer sessions. Cloud users and docker users no longer have to manually set this field, and the <code>/workspace</code> API references it as well!</li>\n</ul>\n<h1>1.3.1</h1>\n<h1>Fixes</h1>\n<ul>\n<li>New deploy.js file to do deployments &quot;on-prem&quot;</li>\n<li>Updated new builds for puppeteer 1.12.2 and 1.13.0</li>\n<li>Fixes an issues in CORS handling</li>\n</ul>\n<h1>1.3.0</h1>\n<h1>Minor changes</h1>\n<ul>\n<li>The <code>screenshot</code>, <code>function</code>, <code>pdf</code>, and <code>content</code> API&#39;s now accept new content-types for easier POSTing of small payloads (see docsite).</li>\n<li>The <code>screencast</code> API can now start/stop recording programmatically via a <code>startScreencast</code> and <code>stopScreencast</code> params (see docsite).</li>\n<li>New <code>external</code> dir for injecting custom <code>before</code> and <code>after</code> hooks in external docker builds.</li>\n<li>A new <code>timeout</code> query-option for session-based timeouts vs using the global one.</li>\n<li>New <code>requestInterceptors</code> for injection custom request behavior.</li>\n</ul>\n<h1>Fixes</h1>\n<ul>\n<li>Numerous default fixes in the APIs.</li>\n<li>Stray consoles removed :)</li>\n<li>Consolidated download behavior in <code>screencast</code> and <code>download</code> APIs</li>\n</ul>\n<h1>1.2.0</h1>\n<h1>Minor Changes</h1>\n<ul>\n<li>New <code>requestInterceptors</code> for the /screenshot API, <a href=\"https://github.com/browserless/chrome/pull/119\">allowing you to mock data in response to a request</a>.</li>\n<li>Code debugger now transmits code over-the-wire via cookies to avoid URL max-length issues.</li>\n<li>Now supports cookie-based authentication via a <code>browserless_token=TOKEN;</code> cookie.</li>\n</ul>\n<h1>Fixes</h1>\n<ul>\n<li><a href=\"https://github.com/browserless/chrome/issues/118\">Comments in the debugger won&#39;t break it.</a></li>\n<li>Requests that are rejected due to auth reasons aren&#39;t logged in stats.</li>\n</ul>\n<h1>1.1.0</h1>\n<p>With 1.1.0 we offer a refined way of dealing with both downloads and uploads. Both use-cases are tightly coupled to the file-system, and can leave you scratching your head as to what&#39;s going one. For more information and detailed documentation, please refer to our doc-site at <a href=\"https://www.browserless.io/\">https://www.browserless.io/</a></p>\n<h2>Minor Changes</h2>\n<ul>\n<li>New <code>WORKSPACE_DIR</code> variable for controlling where browserless stores files and uploads.</li>\n<li>New <code>/workspace</code> API for doing RESTful operations on the downloads/uploads file-system.</li>\n<li>New <code>/download</code> API for running a puppeteer-script, and responding with the resulting downloaded file.</li>\n</ul>\n<h2>Internal Changes</h2>\n<ul>\n<li>Moved routes out of the browserless module and into their own file/module.</li>\n<li>Renamed the <code>browserless-web-service</code> module to just <code>browserless</code> for simplicity.</li>\n<li>Moved the <code>DOWNLOAD_DIR</code> to <code>WORKSPACE_DIR</code> since it handles both uploads and downloads.</li>\n</ul>\n<h1>1.0.0</h1>\n<p>🥁 -- Stable version 1.0 is here! While this doesn&#39;t include major functionality changes, it <em>does</em> change how the docker builds are generated going forward. The versioning will now contain two pieces of crucial information: the version of the <em>browserless</em> service + the version of Chrome under-the-hood. For instance <code>1.2.3-puppeteer-1.10.0</code> is browserless at <code>1.2.3</code>, exposing puppeteer at <code>1.10.0</code>.</p>\n<p>Similar to how NodeJS itself does docker releases, we&#39;ll now provide releases in 3 distinct ways:</p>\n<ul>\n<li>An <em>immutable</em>, pinned version release: <code>1.0.0-puppeteer-1.11.0</code></li>\n<li>A mutable minor version release: <code>1.1-puppeteer-1.12.0</code></li>\n<li>A mutable major version release: <code>1-puppeteer-1.9.0</code></li>\n</ul>\n<p>For production deployments, we recommend using <em>pinned</em> version releases as they won&#39;t change once released. The mutable minor/major releases will receive on-going updates whenever we do changes that are bug-fixes or feature release. Even with the best intentions it&#39;s possible that instability can be introduced with these mutable images, hence why recommend the pinned version releases.</p>\n<p>Finally, we&#39;ll continue to ship support for the last 5 minor versions of Puppeteer + the Google Chrome (stable). Old images will remain, but newer versions of browserless won&#39;t be included.</p>\n<p>We&#39;ll continue to keep this changelog up-to-date anytime we do docker releases.</p>\n",
1100
+ "description": "![browserless.io logo](/assets/logo.png)\n\n![Docker Pulls](https://img.shields.io/docker/pulls/browserless/chrome)\n![GitHub package.json version (subfolder of monorepo)](https://img.shields.io/github/package-json/v/browserless/chrome)\n![Chrome CI](https://github.com/browserless/chrome/actions/workflows/docker-chromium.yml/badge.svg)\n![Firefox CI](https://github.com/browserless/chrome/actions/workflows/docker-firefox.yml/badge.svg)\n![Webkit CI](https://github.com/browserless/chrome/actions/workflows/docker-webkit.yml/badge.svg)\n![Multi CI](https://github.com/browserless/chrome/actions/workflows/docker-multi.yml/badge.svg)\n\n\n> [Looking for v1.x.x of browserless? You can find it here](https://github.com/browserless/chrome/tree/v1), although we recommend migrating to v2.\n\nBrowserless allows remote clients to connect and execute headless work, all inside of docker. It supports the standard, unforked Puppeteer and Playwright libraries, as well offering REST-based APIs for common actions like data collection, PDF generation and more.\n\nWe take care of common issues such as missing system-fonts, missing external libraries, and performance improvements, along with edge-cases like downloading files and managing sessions. For details, check out the documentation site built into the project which includes Open API docs.\n\nIf you've been struggling to deploy headless browsers without running into issues or bloated resource requirements, then Browserless was built for you. Run the browsers in [our cloud](https://browserless.io/) or your own, [free for non-commercial uses](https://github.com/browserless/browserless#licensing).\n# Table of Contents\n\n1. [Features](#features)\n2. [How it works](#how-it-works)\n3. [Docker](#docker)\n4. [Hosting](#hosting-providers)\n5. [Puppeteer](#puppeteer)\n6. [Playwright](#playwright)\n7. [Extending with NodeJS SDK](#extending-nodejs-skd)\n8. [Licensing](#licensing)\n9. [Changelog](https://github.com/browserless/chrome/blob/master/CHANGELOG.md)\n\n## External links\n\n1. [Full documentation site](https://www.browserless.io/docs/start)\n2. [Live Debugger (using browserless.io)](https://chrome.browserless.io/)\n3. [Docker](https://github.com/browserless/browserless/pkgs/container/base)\n4. [Slack](https://join.slack.com/t/browserless/shared_invite/enQtMzA3OTMwNjA3MzY1LTRmMWU5NjQ0MTQ2YTE2YmU3MzdjNmVlMmU4MThjM2UxODNmNzNlZjVkY2U2NjdkMzYyNTgyZTBiMmE3Nzg0MzY)\n\n# Features\n\n- Parallelism and request-queueing are built-in + configurable.\n- Fonts and emoji's working out-of-the-box.\n- Debug Viewer for actively viewing/debugging running sessions.\n- An interactive puppeteer debugger, so you can see what the headless browser is doing and use its DevTools.\n- Works with unforked Puppeteer and Playwright.\n- Configurable session timers and health-checks to keep things running smoothly.\n- Error tolerant: if Chrome dies it won't.\n- [Support for running and development on Apple's M1 machines](#building-for-arm64-apple-m1-machines)\n\n# How it works\n\nBrowserless listens for both incoming websocket requests, generally issued by most libraries, as well as pre-build REST APIs to do common functions (PDF generation, images and so on). When a websocket connects to Browserless it starts Chrome and proxies your request into it. Once the session is done then it closes and awaits for more connections. Some libraries use Chrome's HTTP endpoints, like `/json` to inspect debug-able targets, which Browserless also supports.\n\nYou still execute the script itself which gives you total control over what library you want to choose and when to do upgrades. This also comes with the benefit of keep your code proprietary and able to run on numerous platforms. We simply take care of all the browser-aspects and offer a management layer on top of the browser.\n\n# Docker\n\n> See more options on our [full documentation site](https://www.browserless.io/docs/docker-quickstart).\n\n1. `docker run -p 3000:3000 ghcr.io/browserless/chrome`\n2. Visit `http://localhost:3000/docs` to see the documentation site.\n3. See more at our [docker package](https://github.com/browserless/browserless/pkgs/container/base).\n\n# Hosting Providers\n\nWe offer a first-class hosted product located [here](https://browserless.io). Alternatively you can host this image on just about any major platform that offers hosting for docker. Our hosted service takes care of all the machine provisioning, notifications, dashboards and monitoring plus more:\n\n- Easily upgrade and toggle between versions at the press of a button. No managing repositories and other code artifacts.\n- Never need to update or pull anything from docker. There's literally zero software to install to get started.\n- Scale your consumption up or down with different plans. We support up to thousands of concurrent sessions at a given time.\n\nIf you're interested in using this image for commercial aspects, then please read the below section on licensing.\n\n# Puppeteer\n\nPuppeteer allows you to specify a remote location for chrome via the `browserWSEndpoint` option. Setting this for Browserless is a single line of code change.\n\n**Before**\n```js\nconst browser = await puppeteer.launch();\n```\n\n**After**\n```js\nconst browser = await puppeteer.connect({ browserWSEndpoint: 'ws://localhost:3000' });\n```\n\n# Playwright\n\nWe support running with playwright via their remote connection method on the `chromium` interface. Since playwright is very similar to puppeteer, even launch arguments and other things \"just work\":\n\n**Before**\n```js\nconst browser = await pw.chromium.launch();\n```\n\n**After**\n```js\nconst browser = await pw.chromium.connect('ws://localhost:3000/playwright/chromium');\n\n// OR\nconst browser = await pw.chromium.connectOverCDP('ws://localhost:3000');\n```\n\nAfter that, the rest of your code remains the same with no other changes required.\n\n# Extending (NodeJS SKD)\n\nBrowserless comes with built-in extension capabilities, and allows for extending nearly any aspect of the system (for Version 2+). For more details on how to write your own routes, build docker images, and more, [see our SDK README.md](/bin/scaffold/README.md) or simply run \"npx @browserless.io/browserless create\" in a terminal and follow the onscreen prompts.\n\n# Usage with other libraries\n\nMost libraries allow you to specify a remote instance of Chrome to interact with. They are either looking for a websocket endpoint, a host and port, or some address. Browserless supports these by default, however if you're having issues please make an issue in this project and we'll try and work with the library authors to get them integrated with browserless. Please note that in V2 we no longer support selenium or webdriver integrations.\n\nYou can find a much larger list of supported libraries [on our documentation site](https://www.browserless.io/docs/puppeteer-library).\n\n# Motivations\n\nRunning Chrome on lambda or on your own is a fantastic idea but in practice is quite challenging in production. You're met with pretty tough cloud limits, possibly building Chrome yourself, and then dealing with odd invocation issues should everything else go ok. A lot of issues in various repositories are due to just challenges of getting Chrome running smoothly in AWS (see [here](https://github.com/GoogleChrome/puppeteer/issues?q=is%3Aissue+is%3Aopen+sort%3Acomments-desc)). You can see for yourself by going to nearly any library and sorting issues by most commented.\n\nGetting Chrome running well in docker is also a challenge as there's quiet a few packages you need in order to get Chrome running. Once that's done then there's still missing fonts, getting libraries to work with it, and having limitations on service reliability. This is also ignoring CVEs, access-controls, and scaling strategies.\n\nAll of these issues prompted us to build a first-class image and workflow for interacting with Chrome in a more streamlined way. With Browserless you never have to worry about fonts, extra packages, library support, security, or anything else. It just works reliably like any other modern web service. On top of that it comes with a prescribed approach on how you interact with Chrome, which is through socket connections (similar to a database or any other external appliance). What this means is that you get the ability to drive Chrome remotely without having to do updates/releases to the thing that runs Chrome since it's divorced from your application.\n\n# Licensing\n\nSPDX-License-Identifier: SSPL-1.0 OR Browserless Commercial License.\n\nIf you want to use Browserless to build commercial sites, applications, or in a continuous-integration system that's closed-source then you'll need to purchase a commercial license. This allows you to keep your software proprietary whilst still using browserless. [You can purchase a commercial license here](https://www.browserless.io/contact). A commercial license grants you:\n\n- Priority support on issues and features.\n- On-premise running as well as running on public cloud providers for commercial/CI purposes for proprietary systems.\n- Ability to modify the source (forking) for your own purposes.\n- A new admin user-interface.\n\nNot only does it grant you a license to run such a critical piece of infrastructure, but you are also supporting further innovation in this space and our ability to contribute to it.\n\nIf you are creating an open source application under a license compatible with the Server Side License 1.0, you may use Browserless under those terms.\n\n# Changelog\n<h1><a href=\"https://github.com/browserless/chrome/compare/v2.2.0...main\">Latest</a></h1>\n<ul>\n<li>Dependency updates.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v2.1.0...v2.2.0\">v2.2.0</a></h1>\n<p><strong>Potentially Breaking</strong></p>\n<ul>\n<li><code>ghcr.io/browserless/chrome</code> now runs actual Chrome and not Chromium! If you were using this tag please update to use <code>ghcr.io/browserless/chromium</code>!<ul>\n<li>This Chrome tag uses the new routing convention below. If you get random 404&#39;s, please add <code>/chrome</code> to the start of the route. EG, <code>/pdf</code> becomes <code>/chrome/pdf</code>.</li>\n<li>Websocket connections follow a similar breakage in that the URL will go from something like <code>ws://localhost:3000</code> to <code>ws://localhost:3000/chrome</code>.</li>\n</ul>\n</li>\n<li>Adds a new <code>ghcr.io/browserless/chromium</code>, and updates <code>ghcr.io/browserless/chrome</code> to use actual Chrome.</li>\n<li>New and current APIs now follow a routing convention of <code>/$BROWSER/$ACTION</code>. In our Chrome image, you&#39;ll see <code>/chrome/pdf</code> for the PDF route as opposed to <code>/pdf</code>.<ul>\n<li>To keep things backwards compatible, all our prior REST APIs still have the same path as well as the new semantic, but only in the <code>multi</code> and <code>chromium</code> tags.</li>\n<li>These backwards compatible routes are ONLY available in <code>ghcr.io/browserless/chromium</code> and <code>ghcr.io/browserless/multi</code>.</li>\n</ul>\n</li>\n<li>Refer to the embedded documentation site for any and all updates on API differences.</li>\n</ul>\n<p><strong>Other Changes</strong></p>\n<ul>\n<li>HTTPRoutes and WebSocket routes can now have multiple paths to listen on.</li>\n<li>Add <code>clean</code> command to <code>@browserless.io/browserless</code> CLI.</li>\n<li>Adds support for <code>/json/list</code>, <code>/json/new</code>, <code>/json/version</code> and <code>json/protocol</code> APIs (Chrome and Chromium only).<ul>\n<li>When both Chrome and Chromium are present (in the case of the multi image), browserless opts for Chromium for these requests.</li>\n</ul>\n</li>\n<li>Removes legacy <code>browser.json</code> files since browserless now generates those and caches when requested.</li>\n<li>Stable docker images are coming! Please be sure to see our packages page for stable tags.</li>\n<li>Only verify that internally managed browsers are installed when starting.</li>\n<li>Preliminary support for <code>--headless=shell</code>.</li>\n<li>More unit-tests for the Chrome /json APIs.</li>\n<li>Dependency updates.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/browserless/compare/v2.0.0-beta-1...v2.1.0\">v2.1.0</a></h1>\n<ul>\n<li>Dependency updates.</li>\n<li>Name is now <code>@browserless.io/browserless</code> to reflect our npm package.</li>\n<li>NEW: SDK is now live here: <a href=\"https://www.npmjs.com/package/@browserless.io/browserless\">https://www.npmjs.com/package/@browserless.io/browserless</a>.</li>\n<li>Drops gulp and other gulp utilities in favor of our own. Move to modules in <code>scripts</code> dir.</li>\n<li>Many private class properties now use <code>protected</code> so they can be referenced in SDK extensions.</li>\n<li>Adds a <code>/json/version</code> route for older libraries that use it.</li>\n<li>Merge startup/test scripts into <code>scripts</code> dir.</li>\n<li>Moves installed browsers to <code>/usr/local/bin/playwright-browsers</code>.</li>\n<li>Merge root files into package.json where possible.</li>\n<li>README updates and fixes.</li>\n<li>Numerous link and copyright fixes.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/master...feat/browserless-2.0\">v2.0.0</a></h1>\n<p>browserless 2.0.0 represents the best body of work after running browserless for over 5 years. It contains mostly the same functionality and more, and is rebuilt to be more modular and offer a NodeJS SDK. It&#39;s also much lighter and faster than prior versions and includes a lot of semantic changes.</p>\n<h2>Features</h2>\n<ul>\n<li>ECMAScript style module loading and dependencies.</li>\n<li>New routing system using purely NodeJS&#39;s HTTP module.</li>\n<li>Better logs and concurrency/queueing parameters.</li>\n<li>Support for running the other major browser vendors in the same format and package.</li>\n<li>The service now compiles TypeScript to runtime JOI validation for our routes.</li>\n<li>Soon: upcoming support for extensions, long-running sessions and more.</li>\n</ul>\n<h2>Breaking Changes</h2>\n<ul>\n<li>Remove support for Selenium.</li>\n<li>The <code>/function</code> API now runs inside the context of the browser and not in Node.</li>\n<li>Drop support for keep-alive and pre-booting.</li>\n<li>Support for a single <code>launch</code> query-string parameter for launching a browser versus many individual parameters.</li>\n</ul>\n<h2>Minor Changes</h2>\n<ul>\n<li>Many docker parameters have been renamed, but are backwards compatible. See config.ts for details.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.60.2...v1.61.0\">v1.61.0</a></h1>\n<ul>\n<li><strong>FINAL of V1 for browserless/chrome. <a href=\"https://github.com/browserless/chrome/pull/3345\">See notes on V2 here</a></strong></li>\n<li>Dependency updates.</li>\n<li>Added <code>fonts-urw-base35</code>.</li>\n<li>Supports puppeteer <code>1.20</code>, <code>10.4.0</code>, <code>13.1.3</code>, <code>14.4.1</code>, <code>16.2.0</code>, <code>19.7.5</code> and <code>21.4.1</code>.</li>\n<li>Supports playwright <code>1.39</code>, <code>1.38</code>, <code>1.37</code>, <code>1.36</code>, <code>1.35</code>, <code>1.34</code>, and <code>1.33</code>.</li>\n<li>Fixes an issue where keep-alive chrome instances aren&#39;t properly tracked when <code>browser.close</code> is called.</li>\n<li>Fix improper handling of HTTP writing on bare sockets with 500 errors.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.60.1...v1.60.2\">v1.60.2</a></h1>\n<ul>\n<li>Dependency updates.</li>\n<li>Fixes an issue where calls to GET /sessions sometimes return blank results.</li>\n<li>Drop puppeteer <code>21.3.1</code> in favor of <code>21.3.6</code>.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.60.0...v1.60.1\">v1.60.1</a></h1>\n<ul>\n<li>Dependency updates.</li>\n<li>Drop the <code>partner</code> repo from builds as we no longer use it for installing <code>flash</code>.</li>\n<li>Bump to <code>Ubuntu</code> lunar.</li>\n<li>Bump to NodeJS 18.17.0</li>\n<li>Package.json <code>engines.node</code> now reflects what node version we run on the docker image.</li>\n<li>Drops support for playwright@<code>1.33</code> and default playwright to <code>1.38</code>.</li>\n<li>Drops support for puppeteer@<code>21.1.1</code> in favor of <code>21.3.1</code>.</li>\n<li>Replaces legacy <code>request</code> module with Node&#39;s native <code>fetch</code> for webhooks.</li>\n<li>Drops <code>node-fetch</code> across the board in favor of <code>fetch</code> native.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.59.0...v1.60.0\">v1.60.0</a></h1>\n<ul>\n<li>Dependency updates.</li>\n<li>New build arguments in our Dockerfile to apply different named base repo.</li>\n<li>New <code>CHROME_STABLE_VERSION</code> build arg for specifying a particular chrome stable version.</li>\n<li>Fixes in postinstall hooks for various platforms and chrome-stable.</li>\n<li>NEW: <code>waitFor</code> properties in our APIs now supports an object with selector + timeouts for more fine tuning.</li>\n<li>Bump puppeteer <code>20.x.x</code> to <code>21.1.1</code> (116.0.5845.96).</li>\n<li>Supports playwright versions <code>1.37</code>, <code>1.36</code>, <code>1.35</code>, <code>1.34</code>, and <code>1.33</code>.</li>\n<li>Fixes in deploy script to handle versions, platforms and architectures.</li>\n<li>Fixes an issue where headless defaults to <code>DEFAULT_STEALTH</code>.</li>\n<li>New <code>PREBOOT_QUANTITY</code> for overriding the amount of pre-booted instances of Chrome.</li>\n<li>Allow using a host&#39;s display by setting <code>DISPLAY</code> env variable.</li>\n<li>Link fixes in README.md.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.58.0...v1.59.0\">v1.59.0</a></h1>\n<ul>\n<li>Dependency updates.</li>\n<li>Bump to Ubuntu Kinetic release + updates to use relevant packages.</li>\n<li>In support of puppeteer 20+, updates to <code>env.js</code> for finding/symlinking Chrome.</li>\n<li>Supports playwright <code>1.33</code>, <code>1.32</code>, <code>1.31</code>, and <code>1.29.</code>. Drops support for earlier versions.</li>\n<li>Ad-blocking and other request-interception in browserless is graceful using the <code>isInterceptResolutionHandled</code> method.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.57.0...v1.58.0\">v1.58.0</a></h1>\n<ul>\n<li>Dependency updates.</li>\n<li>Documentation link fixes.</li>\n<li>Add new required lib <code>libu2f-udev</code>.</li>\n<li>Support for <a href=\"mailto:puppeteer@19.7.5\">puppeteer@19.7.5</a>.</li>\n<li>Supports playwright versions: <code>1.27</code>, <code>1.28</code>, <code>1.29</code>, <code>1.30</code> and <code>1.31</code>.</li>\n<li>Better internal TypeScript definitions.</li>\n<li>Print&#39;s a few extra log-lines at startup for links to various resources.</li>\n<li><code>/kill/all</code> now supports rebooting when PREBOOT is turned on.</li>\n<li>Fixes an issue with chromedriver boot-looping in modern versions.</li>\n<li>Adds support for <code>--headless=new</code>.</li>\n<li>Fixes an issue where user-data-dirs aren&#39;t deleted due to a crashed container.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.56.0...v1.57.0\">v1.57.0</a></h1>\n<ul>\n<li>Dependency updates.</li>\n<li>Add back in <code>puppeteer@13.1.3</code> for PDF/Screenshot performance.</li>\n<li>Replace <code>puppeteer@18.0.5</code> in favor of <code>puppeteer@19.2.2</code>.</li>\n<li>Better puppeteer install/binary path lookups.</li>\n<li>Support for the following playwright versions via the /playwright path:<ul>\n<li>1.23.3</li>\n<li>1.24.2</li>\n<li>1.25.2</li>\n<li>1.26.1</li>\n<li>1.27.1</li>\n</ul>\n</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.55.0...v1.56.0\">v1.56.0</a></h1>\n<ul>\n<li>Dependency updates.</li>\n<li>Fixes various puppeteer issues with regards to revision information and browser-fetching.</li>\n<li>Fixes a Selenium issue where failed browsers can cause session to zombie.</li>\n<li>Small fix for route error handling.</li>\n<li>Better selenium W3C support.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.55.0...v1.54.1\">v1.55.0</a></h1>\n<p><strong>Potentially Breaking</strong></p>\n<ul>\n<li>Update base OS from Ubuntu 20.04 to Ubuntu 22.04.</li>\n<li>Drops <code>path</code> support for both <code>addScriptTag</code> and <code>addStyleTag</code>. Use <code>url</code> or inject content directly.</li>\n</ul>\n<hr>\n<ul>\n<li>Dependency updates.</li>\n<li>We now support multiple versions of playwright via <code>playwright-core</code>. browserless checks the User-Agent string and tries to load a compatible playwright server at runtime in order to avoid breakages between versions.</li>\n<li>New <code>scrollPage</code> boolean parameter for the screenshot and other relevant APIs.</li>\n<li>browserless now writes appropriately formatted HTTP and WebSocket messages for non-2xx responses.</li>\n<li>Better CI coverage with prior puppeteer versions.</li>\n<li>Adds back a <code>browser.json</code> file in our docker images for easier CDP-related queries.</li>\n<li>A new <code>PORT</code> arg is available at build time in order to specify a PORT to listen onto.</li>\n<li>Updated links for browserless documentation in docs.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.54.1...v1.54.0\">v1.54.1</a></h1>\n<ul>\n<li>Dependency updates.</li>\n<li>Add <code>browser.json</code> file to git tags.</li>\n<li>Prettier fixes on source.</li>\n<li>deploy.js file fixes for creating production tags.</li>\n<li>Fix: add the <code>userDataDir</code> option so that we don&#39;t fill disks when using <code>stealth</code>.</li>\n<li>Fix: allow <code>disconnect</code> listeners to fire before closing.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.53.0...v1.54.0\">v1.54.0</a></h1>\n<ul>\n<li>Dependency updates.</li>\n<li>Move to using <code>mocha</code> for better esm support.</li>\n<li>Drop puppeteer <code>13.6.0</code> in favor of <code>14.4.1</code>.</li>\n<li>Utilize puppeteer <code>14.4.1</code> for <code>chrome-stable</code>.</li>\n<li>New internal <code>getCDPClient</code> for loading a page&#39;s CPD connection.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.52.1...v1.53.0\">v1.53.0</a></h1>\n<ul>\n<li>Dependency updates.</li>\n<li>Bump <code>browserless:base</code> to <code>1.16.0</code>.</li>\n<li>Drop <code>--quiet</code> from deploy scripts.</li>\n<li><code>arm64</code> support for latest as well as puppeteer at versions 9,10 and 13.</li>\n<li>Update puppeteer 13 from <code>13.5.2</code> to <code>13.6.0</code> (revision <code>982053</code>).</li>\n<li>README updates.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.52.0...v1.52.1\">v1.52.1</a></h1>\n<ul>\n<li>Dependency updates.</li>\n<li>Playwright example correction in README.md.</li>\n<li>Use revision <code>970485</code> for puppeteer 13.x.x, <code>latest</code>, chrome-stable and <code>arm64</code>.</li>\n<li>When using <code>KEEPALIVE</code> and <code>PREBOOT</code>, don&#39;t create new blank pages, and use the existing one instead.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.51.1...v1.52.0\">v1.52.0</a></h1>\n<ul>\n<li>Dependency updates.</li>\n<li>Added in new fonts: <code>fonts-gfs-neohellenic</code>.</li>\n<li>Minor code formatting changes.</li>\n<li>Drop <a href=\"mailto:puppeteer@13.1.3\">puppeteer@13.1.3</a> in favor of 13.5.2.</li>\n<li>Make <code>heapdump</code> an optional dependency as it&#39;s not always used, and add it back in.</li>\n<li>Utilize <code>fs/promise</code> vs home-rolled promisified utils.</li>\n<li>Fix an issue where PREBOOT and KEEPALIVE might return an <code>undefined</code> browser.</li>\n<li>Logging when file-protocol requests happen and terminate a session.</li>\n<li>Move the browser process exit listener into the puppeteer-provider for better session cleanup.</li>\n<li>Allow &quot;headfull&quot; playwright sessions.</li>\n<li>Don&#39;t <code>await</code> chrome-helper&#39;s closing of the browser as it&#39;s not truly async.</li>\n<li>Remove <code>body-parser</code> in favor of <code>express</code>&#39;s JSON and other parsers.</li>\n<li>Fixes an issue where using a user-data-dir that doesn&#39;t exist causes chrome to crash.</li>\n<li>Add in more unit and integration tests.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.51.1...v1.52.0\">v1.52.0</a></h1>\n<ul>\n<li>Dependency updates.</li>\n<li>Added in new fonts: <code>fonts-gfs-neohellenic</code>.</li>\n<li>Minor code formatting changes.</li>\n<li>Drop <a href=\"mailto:puppeteer@13.1.3\">puppeteer@13.1.3</a> in favor of 13.5.2.</li>\n<li>Make <code>heapdump</code> an optional dependency as it&#39;s not always used, and add it back in.</li>\n<li>Utilize <code>fs/promise</code> vs home-rolled promisified utils.</li>\n<li>Fix an issue where PREBOOT and KEEPALIVE might return an <code>undefined</code> browser.</li>\n<li>Logging when file-protocol requests happen and terminate a session.</li>\n<li>Move the browser process exit listener into the puppeteer-provider for better session cleanup.</li>\n<li>Allow &quot;headfull&quot; playwright sessions.</li>\n<li>Don&#39;t <code>await</code> chrome-helper&#39;s closing of the browser as it&#39;s not truly async.</li>\n<li>Remove <code>body-parser</code> in favor of <code>express</code>&#39;s JSON and other parsers.</li>\n<li>Fixes an issue where using a user-data-dir that doesn&#39;t exist causes chrome to crash.</li>\n<li>Add in more unit and integration tests.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.51.0...v1.51.1\">v1.51.1</a></h1>\n<ul>\n<li>Dependency updates.</li>\n<li>Updates the <code>vm2</code> module to <code>3.9.7</code>.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.50.0...v1.51.0\">v1.51.0</a></h1>\n<ul>\n<li>Dependency updates.</li>\n<li>New <code>viewport</code> option inside of the content API.</li>\n<li>New <code>encoding</code> option in the screenshot API.</li>\n<li>Drop <a href=\"mailto:puppeteer@12.x.x\">puppeteer@12.x.x</a> in favor of 13.x.x.</li>\n<li>Fixes in our deploy scripts.</li>\n<li>Fixes for windows binaries in our postinstall hook.</li>\n<li>Fixes an issue where playwright tries to use a pre-booted chrome instance.</li>\n<li>Small type updates.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.49.1...v1.50.0\">v1.50.0</a></h1>\n<ul>\n<li>Dependency updates.</li>\n<li>Drops support for <code>puppeteer-4.0.1</code> in favor of <code>puppeteer-12.0.1</code>.</li>\n<li>Chrome-stable now utilizes puppeteer @ <code>12.0.1</code>.</li>\n<li>Support for <code>arm64</code> via production tags (<code>1-arm64</code>) as well as in <code>latest</code>.</li>\n<li>Static JSON files (<code>protocol.json</code>, <code>version.json</code>) are built at runtime on their first request and then cached in memory.</li>\n<li>Bumps <code>browserless/base</code> to <code>1.14.0</code>.</li>\n<li>New <code>selector</code> property for screenshot-ing a single DOM node in the screenshot API.</li>\n<li><code>puppeteerVersions</code> in the package.json file has been rename do <code>chromeVersions</code>.</li>\n<li>Internal changes for deploying production tag scripts.</li>\n<li>Consolidate scripts for <code>postinstall</code>.</li>\n<li>Drop support for <code>heapdump</code> due to its age and lack of platform varieties.</li>\n<li>New <code>/metrics/total</code> route for summing up all statistics in a single JSON payload.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.49.0...v1.49.1\">v1.49.1</a></h1>\n<ul>\n<li>Dependency updates.</li>\n<li>Fix webhook not using timeout URL.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.48.0...v1.49.0\">v1.49.0</a></h1>\n<ul>\n<li>Dependency updates.</li>\n<li>Support for ARM64 builds by dropping flash for it.</li>\n<li>Bump puppeteer 10.2.0 for 10.4.0.</li>\n<li>New puppeteer-hook for injecting a puppeteer-compatible library, eg. puppeteer-extra.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.47.0...v1.48.0\">v1.48.0</a></h1>\n<p><strong>Potentially Breaking</strong></p>\n<ul>\n<li>API calls with <code>html</code> in their payloads now use the <code>page.setContent</code> API versus a prior hack using one-time network-request interception (<a href=\"https://github.com/browserless/chrome/compare/v1.47.0...master#diff-67b699af1b24472604e21081d0509620d4ab3d986fcd4f8aa0b04d5ee5e4c63fL88\">example here</a>). Old versions of puppeteer might not work properly with this (&lt;= 5.x.x). This effects the following APIS: <code>/content</code>, <code>/pdf</code> and <code>/screenshot</code>.</li>\n</ul>\n<hr>\n<ul>\n<li>Dependency updates.</li>\n<li>Bump <code>browserless/base</code> to <code>1.12.0</code> (add user-id to <code>blessuser</code> of <code>BLESS_USER_ID=999</code>).</li>\n<li>Bumps puppeteer @10.x.x to <code>10.2.0</code> with revision <code>901912</code>.</li>\n<li>Makes API calls use <code>setContent</code> properly now (no more one-time network interception). This fixes certain issues with images not loading in PDFs and screenshots.</li>\n<li>Fix some typings in tests.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.46.0...v1.47.0\">v1.47.0</a></h1>\n<ul>\n<li>Dependency updates.</li>\n<li>Bump <code>browserless/base</code> to <code>1.11.0</code>.</li>\n<li>Add new lint task and rename GitHub actions tasks, remove <code>tslint</code>.</li>\n<li>Lint and prettier fixes.</li>\n<li>Delay url parsing until after <code>before</code> hook runs.</li>\n<li>New <code>meta</code> object param for page hooks (passing through arbitrary meta data set by prior hooks).</li>\n<li>New <code>FUNCTION_ENV_VARS</code> environment variable pass through an allow-list of environment variables for functions to access.</li>\n<li>Fix <code>someObject.hasOwnProperty</code> to <code>Object.prototype.hasOwnProperty.call</code>.</li>\n<li></li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.45.0...v1.46.0\">v1.46.0</a></h1>\n<ul>\n<li>Dependency updates.</li>\n<li>Move to Node 16.x.x.</li>\n<li>Bump browserless/base to 1.10.0.</li>\n<li>Limit <code>x-response-url</code> to 100 characters.</li>\n<li>Add support for <a href=\"mailto:puppeteer@10.x.x\">puppeteer@10.x.x</a>.</li>\n<li>Add <code>maxConcurrent</code> stat for metrics API + log stats every 5 minutes to stdout.</li>\n<li>Some performance improvements to how pages/browsers are setup and torn down.</li>\n<li>Add <code>API_DOCS_ENDPOINT</code> as a filterable API to deny access to.</li>\n<li>Minor code reformatting from prettier.</li>\n<li>Better page setup and logging.</li>\n<li>Fixes <code>DEFAULT_STEALTH</code> for self-hosted deployments.</li>\n<li>Improvements on how chrome is closed.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.44.0...v1.45.0\">1.45.0</a></h1>\n<ul>\n<li>Dependency Updates.</li>\n<li>Support for <a href=\"https://github.com/browserless/chrome/commit/0903795e936b93a511ec04f7ae35c03397682905\">playwright proxies</a>.</li>\n<li>Fixes an issue with larger headers potentially causing load-balancers to crash and fail.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.43.0...v1.44.0\">v1.44.0</a></h1>\n<p><strong>Potentially Breaking</strong></p>\n<ul>\n<li><code>PROXY_HOST</code> and <code>PROXY_PORT</code> are now replaced with a single <code>PROXY_URL</code> param, eg: <code>https://www.mybrowserless.com/optional/paths</code>. When set, browserless uses this fully-qualified URL to build out links <em>back</em> to its internal debugger and sessions. Useful when you&#39;re instance is behind a proxy or load-balancer of some kind.</li>\n</ul>\n<hr>\n<ul>\n<li>Dependency Updates.</li>\n<li>Use recent Node 14 (browserless-base 1.7.0).</li>\n<li>New <code>rejectResourceTypes</code> property on most APIs (content, screenshot, pdf, etc.).</li>\n<li>Allow serving of <code>file://</code> protocols when explicitly enabled (default is off due to security concerns). Set <code>ALLOW_FILE_PROTOCOL=true</code> in your env params.</li>\n<li>The <code>/pressure</code> API now takes into account CPU/Memory consumption, and adds a &quot;reason&quot; property for why the machine might be not available.</li>\n<li>Fixes an issue where playwright couldn&#39;t download files.</li>\n<li>You can now filter /sessions calls with a <code>trackingId</code> parameter.</li>\n<li><code>detached</code> functions now return a <code>trackingId</code> when present.</li>\n<li>More types, tests, and utility consolidation.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.42.0...v1.43.0\">v1.43.0</a></h1>\n<ul>\n<li>Dependency Updates.</li>\n<li>Fixes an issue where --user-data-dirs aren&#39;t deleted properly, potentially filling disks.</li>\n<li>Changes CPU/Memory checks to be user-based and not the entire OS.</li>\n<li>Adds tests for the user-data-dir issue.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.41.0...v1.42.0\">v1.42.0</a></h1>\n<ul>\n<li>Dependency Updates.</li>\n<li>Move to Node 14!</li>\n<li>Use <code>esModuleInterop</code> for imports.</li>\n<li>Remove <code>page.waitFor</code> in favor of downstream methods.</li>\n<li>Adds new <code>?stealth</code> parameter for API calls (see puppeteer-extra-stealth-plugin).</li>\n<li>New <code>DEFAULT_STEALTH</code> param for making stealth calls by default.</li>\n<li>Fixes <code>ignoreDefaultArgs</code> in chrome stable.</li>\n<li>Ensure temp user-data-dirs are always cleaned up.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.40.2...v1.41.0\">v1.41.0</a></h1>\n<ul>\n<li>Dependency Updates.</li>\n<li>New <code>SESSION_CHECK_FAIL_URL</code> webhook for when pre-session checks fail.</li>\n<li>Health checks now take the last two CPU/Memory samples to determine if a failure (5 minutes).</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.40.1...v1.40.2\">v1.40.2</a></h1>\n<ul>\n<li>Dependency Updates.</li>\n<li>Fix potentially unhandled stream error events when closing chrome.</li>\n<li>Bump puppeteer to 5.4.1 for major 5.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.40.0...v1.40.1\">v1.40.1</a></h1>\n<ul>\n<li>Dependency Updates</li>\n<li>New <code>SOCKET_CLOSE_METHOD</code> for better load-balancing behavior when under load.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.39.0...v1.40.0\">v1.40.0</a></h1>\n<ul>\n<li>Dependency Updates</li>\n<li>Support for playwright 1.4.0 and greater. <a href=\"https://github.com/microsoft/playwright/issues/4054\">See more here</a>.</li>\n<li>New <code>PRE_REQUEST_HEALTH_CHECK</code> env variable to check CPU/Memory prior to running a session. Set <code>MAX_CPU_PERCENT</code> or <code>MAX_MEMORY_PERCENT</code> for setting these thresholds. Responds with a <code>503</code> HTTP code if CPU/Memory are high on any inbound session (API, puppeteer or webdriver).</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.38.0...v1.39.0\">v1.39.0</a></h1>\n<ul>\n<li>Dependency Updates</li>\n<li>Fixes a crash due to <code>browser.close</code> streams not completing properly.</li>\n<li>Adds a <code>dumpio</code> query-string parameter for launching with puppeteer.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.37.2...v1.38.0\">v1.38.0</a></h1>\n<ul>\n<li>Dependency Updates</li>\n<li>Fixes a memory leak when browsers don&#39;t close properly.</li>\n<li>Adds a <code>/heapdump</code> route for capturing heap dumps. Turn on by setting <code>ENABLE_HEAP_DUMP=true</code> in your docker env.</li>\n<li><code>emulateMedia</code> fixes on the pdf route.</li>\n<li>CodeQL implemented.</li>\n<li>README fixes.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.37.1...v1.37.2\">v1.37.2</a></h1>\n<ul>\n<li>Dependency Updates</li>\n<li>Fixes an issue where the webserver can crash after rejecting a request.</li>\n<li>Fixes deployment script not waiting for zip files to be finished unzipped.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.37.0...v1.37.1\">1.37.1</a></h1>\n<ul>\n<li>Dependency Updates</li>\n<li>Fixes an issue in webdriver not starting properly.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.36.0...v1.37.0\">1.37.0</a></h1>\n<p><strong>Potentially Breaking</strong></p>\n<ul>\n<li>Due to stability issues, puppeteer version 3.x.x and 4.x.x now use chromium revision <code>782078</code>. See our <code>package.json</code> for details.</li>\n</ul>\n<hr>\n<ul>\n<li>Dependency Updates</li>\n<li>README Updates</li>\n<li>Fixes an issue for secured containers using prometheus (plus tests).</li>\n<li>Support for puppeteer <code>5.2.1</code></li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.35.0...v1.36.0\">1.36.0</a></h1>\n<ul>\n<li>Dependency Updates</li>\n<li>Drops support for puppeteer <code>2.0.0</code> and <code>3.0.4</code>, please use <code>2.1.1</code> and <code>3.3.0</code> for those revisions.</li>\n<li>Adds support for puppeteer <code>5.0.0</code>.</li>\n<li>Bug-fix with the server randomly closing with an uncaught error event thrown from inside underlying socket connection.</li>\n<li>Adds back in <code>--disable-dev-shm-usage</code> to default arguments for better SHM performance.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.34.0...v1.35.0\">1.35.0</a></h1>\n<ul>\n<li>Dependency Updates</li>\n<li>New <code>maxTime</code>, <code>minTime</code>, <code>meanTime</code> and <code>totalTime</code> of all sessions for a given period in /stats.</li>\n<li>Bugfix on CPU/Memory triggering health failure webhooks.</li>\n<li>Fix issues in websocket errors by awaiting browser.close (or 5 seconds, whichever is quickest).</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.33.1...v1.34.0\">v1.34.0</a></h1>\n<p><strong>Potentially Breaking</strong></p>\n<ul>\n<li>screencast API no longer supports <code>audio</code> or the <code>setPreferences</code> function in order to offer a better video experience. In order to set the width/height, simply set a page width height to what you&#39;d like.</li>\n<li><code>chrome-stable</code> will now use <code>puppeteer@3.1.0</code> for better compatibility.</li>\n</ul>\n<hr>\n<ul>\n<li>Dependency updates.</li>\n<li>Drops puppeteer version <code>1.20.0</code> and below.</li>\n<li>Move <code>browserless/base</code> to <code>v1.5.0</code>.</li>\n<li>Puppeteer support for <code>3.3.0</code> (3.2.x and 3.1.x have the same chromium revision).</li>\n<li>Fixes <code>trackingId</code> on pre-booted sessions.</li>\n<li><code>about:blank</code> pages now are returned in the <code>/sessions</code> API for transparency of open sessions/browsers.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.33.0...v1.33.1\">1.33.1</a></h1>\n<ul>\n<li>Dependency updates.</li>\n<li>Fix socket errors from accidentally firing error webhooks.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.32.0...v1.33.0\">1.33.0</a></h1>\n<ul>\n<li>Drops support for puppeteer 1.17.x and 1.18.x</li>\n<li>Support for puppeteer 3.0.x</li>\n<li>Dependency updates</li>\n<li>Fix reject stat firing on debugger pages not being found</li>\n<li>Consolidates more types.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.31.1...v1.32.0\">1.32.0</a></h1>\n<ul>\n<li>Dependency Updates.</li>\n<li>Adds roboto fonts.</li>\n<li>Updates <code>pressure</code> API to take account of running browsers in the <code>running</code> count.</li>\n<li>Adds <code>maxConcurrent</code>, <code>maxQueued</code>, <code>cpu</code> and <code>memory</code> to pressure.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.31.0...v1.31.1\">1.31.1</a></h1>\n<ul>\n<li>Dependency Updates.</li>\n<li>Fixes a small issue where XVFB doesn&#39;t start properly during an automated restart.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.30.0...v1.31.0\">1.31.0</a></h1>\n<ul>\n<li>Dependency Updates.</li>\n<li>Allows <code>trackingId</code> on uploaded files to save in the appropriate tracking-ID folder.</li>\n<li>New <code>userAgent</code> param for setting user-agent in API requests.</li>\n<li>Fixes an issue where chrome wasn&#39;t being closed in rare cases.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.29.1...v1.30.0\">1.30.0</a></h1>\n<ul>\n<li>Dependency Updates.</li>\n<li>Updates to Node 13 for speed and memory improvements.</li>\n<li>browserless/<a href=\"mailto:base@1.4.0\">base@1.4.0</a></li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.29.0...v1.29.1\">1.29.1</a></h1>\n<ul>\n<li>Dependency Updates.</li>\n<li>Fixes how deploy script determines errors when running child commands.</li>\n<li>Fixes issues when many selenium sessions can potentially fill up disk space.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.28.0...v1.29.0\">1.29.0</a></h1>\n<ul>\n<li>Dependency updates.</li>\n<li>Uses <code>pipe</code>&#39;s for most API calls and other internal endpoints for faster/better throughput. Works only for <code>headless</code> API/puppeteer calls.</li>\n<li>Allows custom lighthouse configs via POST <code>config</code> property.</li>\n<li>Patches vm2.</li>\n<li>Before hooks no longer end requests forcefully -- external hooks must manually end the request/sockets themselves.</li>\n<li>Properly passes socket errors to the error handler/webhook</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.27.0...v1.28.0\">1.28.0</a></h1>\n<ul>\n<li>Dependency updates.</li>\n<li>Sets a system-default font of Ubuntu for most sites that use <code>system-ui</code> in their font declarations.</li>\n<li>Fixes health-check failure webhooks.</li>\n<li>New <code>PROXY_HOST</code>, <code>PROXY_PORT</code> and <code>PROXY_SSL</code> for external load-balancers. <a href=\"https://www.browserless.io/docs/docker.html#using-a-proxy\">See docsite for more info</a>.</li>\n<li>Moves over to GH actions over Travis for CI.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.26.1...v1.27.0\">1.27.0</a></h1>\n<ul>\n<li>Dependency updates.</li>\n<li>New <code>manipulate</code> params for screenshots, allowing for resizing, flipping and more.</li>\n<li>Better tracking of chrome-process for cleanup of zombied sessions.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.26.0...v1.26.1\">1.26.1</a></h1>\n<ul>\n<li>Dependency updates.</li>\n<li>Added <code>git</code> as a dependency in dockerfile for git-based npm dependencies to work.</li>\n<li>Fixed an issue in <code>start.sh</code> so that errors bubble up properly and close the process.</li>\n<li>Bumps <code>browserless/base</code> to <code>1.2.0</code>.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.25.0...v1.26.0\">1.26.0</a></h1>\n<ul>\n<li>Dependency updates.</li>\n<li>Dropping pre-push hooks for speed.</li>\n<li>Consolidate all interfaces/types to a types.d.ts file.</li>\n<li>Fixes an issue where numerous chrome instances launch when prebooting.</li>\n<li>Fixes an issue where incoming requests don&#39;t use the pre-booted chrome instance.</li>\n<li>Uses <code>page.setViewport</code> when <code>--window-size</code> is set in params to help with screenshots not appearing properly (chromedriver only).</li>\n<li></li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.24.0...v1.25.0\">1.25.0</a></h1>\n<ul>\n<li>Dependency updates.</li>\n<li>Stricter build-time arguments for chromium and chromedriver assets.</li>\n<li>Better XVFB functionality.</li>\n<li>New parameters for most API&#39;s, <code>addScriptTag</code> and <code>addStyleTag</code>, accepting an array of scripts/styles respectively.</li>\n<li>Drop support for <code>puppeteer@1.17.0</code>.</li>\n<li>Proper support for parsing <code>ignoreDefaultArgs</code> query-parameters.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.23.1...v1.24.0\">1.24.0</a></h1>\n<ul>\n<li>Dependency updates.</li>\n<li>Bugfix on our debugger&#39;s play button being off-center.</li>\n<li>Fixes driver.close() calls not cleaning the browser.</li>\n<li>New <code>/GET</code> option for most our APIs. Stringify your JSON and add a ?body=YOUR-JSON with a /GET call to most of our functions! Requires <code>ENABLE_API_GET=true</code> in you docker env variables.</li>\n<li>WebSocket (Socket) exception handling and logging.</li>\n<li>More integration and unit tests added.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.23.0...v1.23.1\">1.23.1</a></h1>\n<ul>\n<li>Fixes an issue in chromedriver where commands would hang.</li>\n<li>Fixes an issue in chromedriver sessions not being removed properly.</li>\n<li>Fixes and pins the base image so that headful sessions work again.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.22.0...v1.23.0\">1.23.0</a></h1>\n<ul>\n<li>Dependency updates.</li>\n<li>Use <code>apt-get</code> to install <code>dumb-init</code>.</li>\n<li>Add a LANG arg in docker.</li>\n<li>New <code>setJavaScriptEnabled</code> property for REST APIs.</li>\n<li>Fixes an issue with <code>waitFor</code> functions in REST API calls.</li>\n<li>Fixes issues when PREBOOT_CHROME and KEEPALIVE are true.</li>\n<li>Updates protocol and host information in ad-blocking.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.21.0...v1.22.0\">1.22.0</a></h1>\n<ul>\n<li>Dependency updates.</li>\n<li>Removal of unnecessary &#39;--disable-dev-shm-usage&#39;</li>\n<li>Squelching of chromedriver&#39;s verbose args unless <code>DEBUG=*</code> is set.</li>\n<li>New <code>/kill/${id}</code> route for remotely killing a certain browser.</li>\n<li>Allowing of sub-child routes in workspaces.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.20.0...v1.21.0\">1.21.0</a></h1>\n<ul>\n<li>Dependency updates.</li>\n<li>New <code>viewport</code> property option for PDF endpoint.</li>\n<li>The <code>/stats</code> endpoint now runs in a separate process meaning it can be parallelized.</li>\n<li>Fixed a bug where hardware monitoring can cause the container to restart/crash.</li>\n<li>Fixes an issue with the file-chooser API not working in puppeteer.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.19.0...v1.20.0\">1.20.0</a></h1>\n<ul>\n<li>Dependency updates.</li>\n<li>New <code>/scrape</code> API!</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.18.0...v1.19.0\">1.19.0</a></h1>\n<ul>\n<li>Dependency updates.</li>\n<li>Fixes chrome-stable&#39;s binary chromedriver.</li>\n<li>Move over to Node 12.</li>\n<li>Bugfix on width/height in the screencast API.</li>\n<li>Support for <a href=\"mailto:puppeteer@2.0.0\">puppeteer@2.0.0</a>.</li>\n<li>Fixed issues with the devtools JS files missing.</li>\n<li>Adds support for blacklisting routes in Docker.</li>\n<li>Consolidates hooks into a hooks module.</li>\n<li>Allows Selenium to specify download-paths and pausing via preferences.</li>\n<li>Fixes an issue in certain JSON-based CDP libraries.</li>\n<li>Function API&#39;s can now run incognito mode with a new Docker param.</li>\n<li></li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.17.0...v1.18.0\">1.18.0</a></h1>\n<ul>\n<li>Dependency updates</li>\n<li>Better <code>IS_DOCKER</code> check for kubernetes.</li>\n<li>Updates to README.md, spelling fixes and Slack link.</li>\n<li>Fixes to debugger and larger code bodies.</li>\n<li>Removal of analytics in debugger.</li>\n<li>Screencast improvements and adding ability to set new options.</li>\n<li>New <code>waitFor</code> property in our APIs (content, pdf and screenshot).</li>\n<li>Don&#39;t allow file requests on the debugger for security reasons.</li>\n<li>Better metrics monitoring.</li>\n<li><code>singleRun</code> mode in docker.</li>\n<li>New prometheus support!</li>\n<li>Fixing issues with keeping chrome alive (only closing once TTL is met).</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.16.0...v1.17.0\">1.17.0</a></h1>\n<ul>\n<li>Dependency updates</li>\n<li>Splitting docker images into two repositories for faster builds and pulls</li>\n<li>Adding in external routing capabilities</li>\n<li>New error hook</li>\n<li>More/better types</li>\n<li>Updating <code>deviceScaleFactor</code> in API&#39;s for more granular control.</li>\n<li>Better chromedriver failure messages.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.15.0...v1.16.0\">1.16.0</a></h1>\n<ul>\n<li>Adding <code>ffmpeg</code> to the docker dependency list.</li>\n<li>Add <code>timecut</code> as a dependency for recording.</li>\n<li>Better logs on chrome PID&#39;s and closing forcefully.</li>\n<li>Fixed <code>DEFAULT_CHROME</code> =&gt; <code>DEFAULT_HEADLESS</code>.</li>\n<li>Fixed a bug where <code>xvfb</code> doesn&#39;t start in time.</li>\n<li>Use <code>SIGKILL</code> for killing chromedriver.</li>\n<li><code>/json/version</code> now returns a <code>webSocketDebuggerUrl</code>.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.14.1...v1.15.0\">1.15.0</a></h1>\n<ul>\n<li>New <code>page</code> and <code>browser</code> hooks for docker images that <code>FROM</code> browserless.</li>\n<li><code>bluebird</code> added as a module for <code>function</code> and other endpoints.</li>\n<li>More dependency updates.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.14.0...v1.14.1\">1.14.1</a></h1>\n<ul>\n<li>Bugfix when running multiple &quot;headfull&quot; sessions.</li>\n<li>Dependency updates.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.13.0...v1.14.0\">1.14.0</a></h1>\n<ul>\n<li>New <code>WORKSPACE_DELETE_EXPIRED</code> and <code>WORKSPACE_EXPIRE_DAYS</code> to auto-cleanup workspace dirs.</li>\n<li>README.md cleanup now that HTTPS is no longer required.</li>\n<li>Support for <code>~</code> in docker env parameters.</li>\n<li>More alignment with how chromedriver and puppeteer sessions get cleaned up.</li>\n<li><code>/session</code> API now returns <code>browserWSEndpoint</code> and <code>browserId</code> properties for having multiple debuggers connected.</li>\n<li>Support for reconnecting(!!). When a <code>?keepalive=KEEP-ALIVE-IN-MS</code> is seen in the <code>puppeteer.connect</code> call we keep the browser active for that many ms after the debugger disconnects.</li>\n<li>New <code>/kill/all</code> route which closes <em>all</em> actively running sessions.</li>\n<li>New internal scheduler module, making future things like cron-based jobs a possibility.</li>\n<li>Better internal types.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.12.0...v1.13.0\">1.13.0</a></h1>\n<ul>\n<li>A minor refactor to consolidate calls to <code>url.parse</code> for performance gains.</li>\n<li>Introduces a per-session based timeout that overrides the global timeout.</li>\n<li>Consolidates authorization checks to remove duplication.</li>\n<li>Moves more types into their backing modules in order to better consolidate files.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.11.0...v1.12.0\">1.12.0</a></h1>\n<ul>\n<li>Set&#39;s a non-conflicting <code>WORKSPACE_DIR</code> and <code>DEFAULT_USER_DATA_DIR</code> in docker by default.</li>\n<li>Drops support for puppeteer <code>1.15.0</code> and adds <code>1.19.0</code>.</li>\n<li>Web-based debugger now sends cookies for docker deployments that are secure.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.10.0...v1.11.0\">1.11.0</a></h1>\n<ul>\n<li>Live debugger is now self-hosted, no more enforced https though it&#39;s still recommended.</li>\n<li>Consolidated build steps.</li>\n<li>Using the same chromedriver binary that matches the puppeteer&#39;s bundled chromium.</li>\n<li>Introducing <code>trackingId</code> workflows.</li>\n<li>Fixing unused export&#39;s, removing extraneous internal methods.</li>\n<li><code>/workspace</code> API now returns sub-files and scopes sessions by <code>trackingId</code> when present.</li>\n<li>Support for <code>/json/new</code> protocol.</li>\n<li>Dependency updates.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.9.0...v1.10.0\">1.10.0</a></h1>\n<ul>\n<li>Dropped support for puppeteer <code>1.9.0 =&gt; 1.14.0</code>.</li>\n<li>Added support for puppeteer <code>1.16.0 =&gt; 1.18.0</code>.</li>\n<li>A version of chromedriver is now installed to perfectly match the version of puppeteer&#39;s chromium.</li>\n<li>In dev, chromedriver now uses the puppeteer version of chromium.</li>\n<li>Defaulted most ENV-variables in docker to sensible defaults.</li>\n<li>New <code>rotate</code> feature for PDF endpoint: <code>{ rotate: 90 }</code> =&gt; rotate left 90 degrees.</li>\n<li>Support for <code>browserless.token</code> in the docker image.</li>\n<li>puppeteer integration now returns semantic HTTP codes for certain errors (<code>400</code>, <code>403</code> and <code>429</code>).</li>\n<li>Support for chromedriver&#39;s move to the W3C spec &#39;goog:chromeOptions&#39;.</li>\n<li>The debugger now filters out <code>about:blank</code> pages, and includes sessions by Selenium.</li>\n<li>Workspace support for selenium-based integrations.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.8.0...v1.9.0\">1.9.0</a></h1>\n<ul>\n<li>Better handling of browser/socket closing in puppeteer integrations.</li>\n<li>Numerous screencast fixes.</li>\n<li>Moved all GH links to new repo location.</li>\n<li>Dep updates.</li>\n</ul>\n<h1><a href=\"https://github.com/browserless/chrome/compare/v1.7.0...v1.8.0\">1.8.0</a></h1>\n<ul>\n<li>Better windows dev experience.</li>\n<li>Indian font support.</li>\n<li>Video capture now supports audio and browser width/height.</li>\n<li>Dependency updates.</li>\n<li>DEFAULT env variables for launching pre-booted Chrome.</li>\n</ul>\n<h1>1.7.0</h1>\n<ul>\n<li>Dep updates</li>\n<li>New <code>?blockAds</code> query-parameter for disabling 3rd-party ad calls.</li>\n</ul>\n<h1>1.6.0</h1>\n<ul>\n<li>New <code>authenticate</code> and <code>setExtraHTTPHeaders</code> params for the <code>content</code>, <code>pdf</code>, and <code>screenshot</code> APIs. Useful for using proxies in our REST APIs.</li>\n<li>Fixed a bunch of bugs inside of the webdriver integration, making it more REST-ful.</li>\n<li>Updated dependencies inside of Chromedriver.</li>\n<li>New <code>DISABLE_AUTO_SET_DOWNLOAD_BEHAVIOR</code> for mitigating errors in puppeteer &lt; 1.15.0.</li>\n<li>Bumped Puppeteer to 1.15.0.</li>\n</ul>\n<h1>1.5.0</h1>\n<ul>\n<li>New <code>/session</code> API (and accompanying routes) for display/viewing active sesions in a remote debugger(!).</li>\n<li>New <code>?pause</code> query-param for pausing sessions prior to running them (useful for the live debug viewer).</li>\n<li>The browserless debugger now exposes links to these debug pages via the sidebar.</li>\n<li>New Debugger page can be disabled via the <code>ENABLE_DEBUG_VIEWER=false</code> environment variable flag.</li>\n<li>Move to use <code>node@10</code>.</li>\n<li>No more <code>no-implicit-any</code>&#39;s inside the codebase.</li>\n</ul>\n<h1>1.4.0</h1>\n<ul>\n<li>During connection, we now set the download dir of REST and puppeteer sessions. Cloud users and docker users no longer have to manually set this field, and the <code>/workspace</code> API references it as well!</li>\n</ul>\n<h1>1.3.1</h1>\n<h1>Fixes</h1>\n<ul>\n<li>New deploy.js file to do deployments &quot;on-prem&quot;</li>\n<li>Updated new builds for puppeteer 1.12.2 and 1.13.0</li>\n<li>Fixes an issues in CORS handling</li>\n</ul>\n<h1>1.3.0</h1>\n<h1>Minor changes</h1>\n<ul>\n<li>The <code>screenshot</code>, <code>function</code>, <code>pdf</code>, and <code>content</code> API&#39;s now accept new content-types for easier POSTing of small payloads (see docsite).</li>\n<li>The <code>screencast</code> API can now start/stop recording programmatically via a <code>startScreencast</code> and <code>stopScreencast</code> params (see docsite).</li>\n<li>New <code>external</code> dir for injecting custom <code>before</code> and <code>after</code> hooks in external docker builds.</li>\n<li>A new <code>timeout</code> query-option for session-based timeouts vs using the global one.</li>\n<li>New <code>requestInterceptors</code> for injection custom request behavior.</li>\n</ul>\n<h1>Fixes</h1>\n<ul>\n<li>Numerous default fixes in the APIs.</li>\n<li>Stray consoles removed :)</li>\n<li>Consolidated download behavior in <code>screencast</code> and <code>download</code> APIs</li>\n</ul>\n<h1>1.2.0</h1>\n<h1>Minor Changes</h1>\n<ul>\n<li>New <code>requestInterceptors</code> for the /screenshot API, <a href=\"https://github.com/browserless/chrome/pull/119\">allowing you to mock data in response to a request</a>.</li>\n<li>Code debugger now transmits code over-the-wire via cookies to avoid URL max-length issues.</li>\n<li>Now supports cookie-based authentication via a <code>browserless_token=TOKEN;</code> cookie.</li>\n</ul>\n<h1>Fixes</h1>\n<ul>\n<li><a href=\"https://github.com/browserless/chrome/issues/118\">Comments in the debugger won&#39;t break it.</a></li>\n<li>Requests that are rejected due to auth reasons aren&#39;t logged in stats.</li>\n</ul>\n<h1>1.1.0</h1>\n<p>With 1.1.0 we offer a refined way of dealing with both downloads and uploads. Both use-cases are tightly coupled to the file-system, and can leave you scratching your head as to what&#39;s going one. For more information and detailed documentation, please refer to our doc-site at <a href=\"https://www.browserless.io/\">https://www.browserless.io/</a></p>\n<h2>Minor Changes</h2>\n<ul>\n<li>New <code>WORKSPACE_DIR</code> variable for controlling where browserless stores files and uploads.</li>\n<li>New <code>/workspace</code> API for doing RESTful operations on the downloads/uploads file-system.</li>\n<li>New <code>/download</code> API for running a puppeteer-script, and responding with the resulting downloaded file.</li>\n</ul>\n<h2>Internal Changes</h2>\n<ul>\n<li>Moved routes out of the browserless module and into their own file/module.</li>\n<li>Renamed the <code>browserless-web-service</code> module to just <code>browserless</code> for simplicity.</li>\n<li>Moved the <code>DOWNLOAD_DIR</code> to <code>WORKSPACE_DIR</code> since it handles both uploads and downloads.</li>\n</ul>\n<h1>1.0.0</h1>\n<p>🥁 -- Stable version 1.0 is here! While this doesn&#39;t include major functionality changes, it <em>does</em> change how the docker builds are generated going forward. The versioning will now contain two pieces of crucial information: the version of the <em>browserless</em> service + the version of Chrome under-the-hood. For instance <code>1.2.3-puppeteer-1.10.0</code> is browserless at <code>1.2.3</code>, exposing puppeteer at <code>1.10.0</code>.</p>\n<p>Similar to how NodeJS itself does docker releases, we&#39;ll now provide releases in 3 distinct ways:</p>\n<ul>\n<li>An <em>immutable</em>, pinned version release: <code>1.0.0-puppeteer-1.11.0</code></li>\n<li>A mutable minor version release: <code>1.1-puppeteer-1.12.0</code></li>\n<li>A mutable major version release: <code>1-puppeteer-1.9.0</code></li>\n</ul>\n<p>For production deployments, we recommend using <em>pinned</em> version releases as they won&#39;t change once released. The mutable minor/major releases will receive on-going updates whenever we do changes that are bug-fixes or feature release. Even with the best intentions it&#39;s possible that instability can be introduced with these mutable images, hence why recommend the pinned version releases.</p>\n<p>Finally, we&#39;ll continue to ship support for the last 5 minor versions of Puppeteer + the Google Chrome (stable). Old images will remain, but newer versions of browserless won&#39;t be included.</p>\n<p>We&#39;ll continue to keep this changelog up-to-date anytime we do docker releases.</p>\n",
1091
1101
  "title": "Browserless",
1092
- "version": "2.2.0-beta-8",
1102
+ "version": "2.2.0",
1093
1103
  "x-logo": {
1094
1104
  "altText": "browserless logo",
1095
1105
  "url": "./docs/browserless-logo-inline.svg"
@@ -1097,7 +1107,7 @@
1097
1107
  },
1098
1108
  "openapi": "3.0.0",
1099
1109
  "paths": {
1100
- "/content": {
1110
+ "/chrome/content": {
1101
1111
  "post": {
1102
1112
  "definitions": {},
1103
1113
  "description": "A JSON-based API. Given a \"url\" or \"html\" field, runs and returns HTML content after the page has loaded and JavaScript has parsed.",
@@ -1370,13 +1380,13 @@
1370
1380
  "message": "HTTP/1.1 500 Internal Server Error"
1371
1381
  }
1372
1382
  },
1373
- "summary": "/content",
1383
+ "summary": "/chrome/content",
1374
1384
  "tags": [
1375
1385
  "Browser REST APIs"
1376
1386
  ]
1377
1387
  }
1378
1388
  },
1379
- "/download": {
1389
+ "/chrome/download": {
1380
1390
  "post": {
1381
1391
  "definitions": {},
1382
1392
  "description": "A JSON or JavaScript content-type API for returning files Chrome has downloaded during\nthe execution of puppeteer code, which is ran inside context of the browser.\nBrowserless sets up a blank page, a fresh download directory, injects your puppeteer code, and then executes it.\nYou can load external libraries via the \"import\" syntax, and import ESM-style modules\nthat are written for execution inside of the browser. Once your script is finished, any\ndownloaded files from Chromium are returned back with the appropriate content-type header.",
@@ -1486,13 +1496,13 @@
1486
1496
  "message": "HTTP/1.1 500 Internal Server Error"
1487
1497
  }
1488
1498
  },
1489
- "summary": "/download",
1499
+ "summary": "/chrome/download",
1490
1500
  "tags": [
1491
1501
  "Browser REST APIs"
1492
1502
  ]
1493
1503
  }
1494
1504
  },
1495
- "/function": {
1505
+ "/chrome/function": {
1496
1506
  "post": {
1497
1507
  "definitions": {},
1498
1508
  "description": "A JSON or JavaScript content-type API for running puppeteer code in the browser's context.\nBrowserless sets up a blank page, injects your puppeteer code, and runs it.\nYou can optionally load external libraries via the \"import\" module that are meant for browser usage.\nValues returned from the function are checked and an appropriate content-type and response is sent back\nto your HTTP call.",
@@ -1602,7 +1612,7 @@
1602
1612
  "message": "HTTP/1.1 500 Internal Server Error"
1603
1613
  }
1604
1614
  },
1605
- "summary": "/function",
1615
+ "summary": "/chrome/function",
1606
1616
  "tags": [
1607
1617
  "Browser REST APIs"
1608
1618
  ]
@@ -1611,7 +1621,7 @@
1611
1621
  "/json/list": {
1612
1622
  "get": {
1613
1623
  "definitions": {},
1614
- "description": "Returns a JSON payload that acts as a pass-through to the DevTools /json/list HTTP API in Chromium.\nBrowserless mocks this payload so that remote clients can connect to the underlying \"webSocketDebuggerUrl\"\nwhich will cause Browserless to start the browser and proxy that request into a blank page.",
1624
+ "description": "Returns a JSON payload that acts as a pass-through to the DevTools /json/list HTTP API in Chromium and Chrome.\nBrowserless crafts this payload so that remote clients can connect to the underlying \"webSocketDebuggerUrl\"\nproperly, excluding any API tokens in that URL. If under authentication be sure to include your authorization.",
1615
1625
  "parameters": [],
1616
1626
  "requestBody": {
1617
1627
  "content": {}
@@ -1706,7 +1716,9 @@
1706
1716
  "message": "HTTP/1.1 500 Internal Server Error"
1707
1717
  }
1708
1718
  },
1709
- "summary": "/json/list",
1719
+ "summary": [
1720
+ "/json/list"
1721
+ ],
1710
1722
  "tags": [
1711
1723
  "Browser REST APIs"
1712
1724
  ]
@@ -1715,7 +1727,7 @@
1715
1727
  "/json/new": {
1716
1728
  "put": {
1717
1729
  "definitions": {},
1718
- "description": "Returns a JSON payload that acts as a pass-through to the DevTools /json/list HTTP API in Chromium.\nBrowserless mocks this payload so that remote clients can connect to the underlying \"webSocketDebuggerUrl\"\nwhich will cause Browserless to start the browser and proxy that request into a blank page.",
1730
+ "description": "Returns a JSON payload that acts as a pass-through to the DevTools /json/new HTTP API in Chromium.\nBrowserless mocks this payload so that remote clients can connect to the underlying \"webSocketDebuggerUrl\"\nwhich will cause Browserless to start the browser and proxy that request into a blank page.",
1719
1731
  "parameters": [],
1720
1732
  "requestBody": {
1721
1733
  "content": {}
@@ -1802,7 +1814,9 @@
1802
1814
  "message": "HTTP/1.1 500 Internal Server Error"
1803
1815
  }
1804
1816
  },
1805
- "summary": "/json/new",
1817
+ "summary": [
1818
+ "/json/new"
1819
+ ],
1806
1820
  "tags": [
1807
1821
  "Browser REST APIs"
1808
1822
  ]
@@ -1811,7 +1825,7 @@
1811
1825
  "/json/protocol": {
1812
1826
  "get": {
1813
1827
  "definitions": {},
1814
- "description": "Returns Protocol JSON meta-data that Chrome comes with.",
1828
+ "description": "Returns Protocol JSON meta-data that Chrome and Chromium come with.",
1815
1829
  "parameters": [],
1816
1830
  "requestBody": {
1817
1831
  "content": {}
@@ -1860,7 +1874,9 @@
1860
1874
  "message": "HTTP/1.1 500 Internal Server Error"
1861
1875
  }
1862
1876
  },
1863
- "summary": "/json/protocol",
1877
+ "summary": [
1878
+ "/json/protocol"
1879
+ ],
1864
1880
  "tags": [
1865
1881
  "Browser REST APIs"
1866
1882
  ]
@@ -1869,7 +1885,7 @@
1869
1885
  "/json/version": {
1870
1886
  "get": {
1871
1887
  "definitions": {},
1872
- "description": "Returns a JSON payload that acts as a pass-through to the DevTools /json/version protocol in Chrome.",
1888
+ "description": "Returns a JSON payload that acts as a pass-through to the DevTools /json/version protocol in Chrome and Chromium.",
1873
1889
  "parameters": [],
1874
1890
  "requestBody": {
1875
1891
  "content": {}
@@ -1881,36 +1897,43 @@
1881
1897
  "schema": {
1882
1898
  "type": "object",
1883
1899
  "properties": {
1884
- "Browser": {
1900
+ "description": {
1901
+ "description": "The description of the target. Generally the page's title.",
1885
1902
  "type": "string"
1886
1903
  },
1887
- "Debugger-Version": {
1904
+ "devtoolsFrontendUrl": {
1905
+ "description": "The fully-qualified URL of the Devtools inspector app.",
1888
1906
  "type": "string"
1889
1907
  },
1890
- "Protocol-Version": {
1908
+ "id": {
1909
+ "description": "A Unique Id for the underlying target.",
1891
1910
  "type": "string"
1892
1911
  },
1893
- "User-Agent": {
1912
+ "title": {
1913
+ "description": "The title of the target. For pages this is the page's title.",
1894
1914
  "type": "string"
1895
1915
  },
1896
- "V8-Version": {
1916
+ "type": {
1917
+ "description": "The type of target, generally \"page\" or \"background_page\".",
1897
1918
  "type": "string"
1898
1919
  },
1899
- "WebKit-Version": {
1920
+ "url": {
1921
+ "description": "The current URL the target is consuming or visiting.",
1900
1922
  "type": "string"
1901
1923
  },
1902
1924
  "webSocketDebuggerUrl": {
1925
+ "description": "The target or page's WebSocket Debugger URL. Primarily used for legacy\nlibraries to connect and inspect or remote automate this target.",
1903
1926
  "type": "string"
1904
1927
  }
1905
1928
  },
1906
1929
  "additionalProperties": false,
1907
1930
  "required": [
1908
- "Browser",
1909
- "Debugger-Version",
1910
- "Protocol-Version",
1911
- "User-Agent",
1912
- "V8-Version",
1913
- "WebKit-Version",
1931
+ "description",
1932
+ "devtoolsFrontendUrl",
1933
+ "id",
1934
+ "title",
1935
+ "type",
1936
+ "url",
1914
1937
  "webSocketDebuggerUrl"
1915
1938
  ],
1916
1939
  "$schema": "http://json-schema.org/draft-07/schema#"
@@ -1949,13 +1972,15 @@
1949
1972
  "message": "HTTP/1.1 500 Internal Server Error"
1950
1973
  }
1951
1974
  },
1952
- "summary": "/json/version",
1975
+ "summary": [
1976
+ "/json/version"
1977
+ ],
1953
1978
  "tags": [
1954
1979
  "Browser REST APIs"
1955
1980
  ]
1956
1981
  }
1957
1982
  },
1958
- "/pdf": {
1983
+ "/chrome/pdf": {
1959
1984
  "post": {
1960
1985
  "definitions": {},
1961
1986
  "description": "A JSON-based API for getting a PDF binary from either a supplied\n\"url\" or \"html\" payload in your request. Many options exist for\ninjecting cookies, request interceptors, user-agents and waiting for\nselectors, timers and more.",
@@ -2234,13 +2259,13 @@
2234
2259
  "message": "HTTP/1.1 500 Internal Server Error"
2235
2260
  }
2236
2261
  },
2237
- "summary": "/pdf",
2262
+ "summary": "/chrome/pdf",
2238
2263
  "tags": [
2239
2264
  "Browser REST APIs"
2240
2265
  ]
2241
2266
  }
2242
2267
  },
2243
- "/performance": {
2268
+ "/chrome/performance": {
2244
2269
  "post": {
2245
2270
  "definitions": {},
2246
2271
  "description": "Run lighthouse performance audits with a supplied \"url\" in your JSON payload.",
@@ -2366,13 +2391,13 @@
2366
2391
  "message": "HTTP/1.1 500 Internal Server Error"
2367
2392
  }
2368
2393
  },
2369
- "summary": "/performance",
2394
+ "summary": "/chrome/performance",
2370
2395
  "tags": [
2371
2396
  "Browser REST APIs"
2372
2397
  ]
2373
2398
  }
2374
2399
  },
2375
- "/scrape": {
2400
+ "/chrome/scrape": {
2376
2401
  "post": {
2377
2402
  "definitions": {},
2378
2403
  "description": "A JSON-based API that returns text, html, and meta-data from a given list of selectors.\nDebugging information is available by sending in the appropriate flags in the \"debugOpts\"\nproperty. Responds with an array of JSON objects.",
@@ -2957,13 +2982,13 @@
2957
2982
  "message": "HTTP/1.1 500 Internal Server Error"
2958
2983
  }
2959
2984
  },
2960
- "summary": "/scrape",
2985
+ "summary": "/chrome/scrape",
2961
2986
  "tags": [
2962
2987
  "Browser REST APIs"
2963
2988
  ]
2964
2989
  }
2965
2990
  },
2966
- "/screenshot": {
2991
+ "/chrome/screenshot": {
2967
2992
  "post": {
2968
2993
  "definitions": {},
2969
2994
  "description": "A JSON-based API for getting a screenshot binary from either a supplied\n\"url\" or \"html\" payload in your request. Many options exist including\ncookies, user-agents, setting timers and network mocks.",
@@ -3253,7 +3278,7 @@
3253
3278
  "message": "HTTP/1.1 500 Internal Server Error"
3254
3279
  }
3255
3280
  },
3256
- "summary": "/screenshot",
3281
+ "summary": "/chrome/screenshot",
3257
3282
  "tags": [
3258
3283
  "Browser REST APIs"
3259
3284
  ]
@@ -3262,7 +3287,7 @@
3262
3287
  "/devtools/browser/*": {
3263
3288
  "get": {
3264
3289
  "definitions": {},
3265
- "description": "Connect to an already-running Chromium with a library like puppeteer, or others, that work over chrome-devtools-protocol.",
3290
+ "description": "Connect to an already-running Chromium process with a library like\npuppeteer, or others, that work over chrome-devtools-protocol. Chromium\nmust already be launched in order to not return a 404.",
3266
3291
  "parameters": [
3267
3292
  {
3268
3293
  "in": "query",
@@ -3350,13 +3375,15 @@
3350
3375
  "message": "HTTP/1.1 500 Internal Server Error"
3351
3376
  }
3352
3377
  },
3353
- "summary": "/devtools/browser/*",
3378
+ "summary": [
3379
+ "/devtools/browser/*"
3380
+ ],
3354
3381
  "tags": [
3355
3382
  "Browser WebSocket APIs"
3356
3383
  ]
3357
3384
  }
3358
3385
  },
3359
- "?(/)": {
3386
+ "/chrome": {
3360
3387
  "get": {
3361
3388
  "definitions": {},
3362
3389
  "description": "Launch and connect to Chromium with a library like puppeteer or others that work over chrome-devtools-protocol.",
@@ -3447,7 +3474,7 @@
3447
3474
  "message": "HTTP/1.1 500 Internal Server Error"
3448
3475
  }
3449
3476
  },
3450
- "summary": "?(/)",
3477
+ "summary": "/chrome",
3451
3478
  "tags": [
3452
3479
  "Browser WebSocket APIs"
3453
3480
  ]
@@ -3456,7 +3483,7 @@
3456
3483
  "/devtools/page/*": {
3457
3484
  "get": {
3458
3485
  "definitions": {},
3459
- "description": "Connect to Chromium with a library like chrome-remote-interface or others that work over JSON chrome-devtools-protocol.",
3486
+ "description": "Connect to an existing page in Chromium with a library like\nchrome-remote-interface or others that work the page websocketDebugger\nURL. You can get this unique URL by calling the /json/list API\nor by finding the page's unique ID from your library of choice.",
3460
3487
  "parameters": [
3461
3488
  {
3462
3489
  "in": "query",
@@ -3544,13 +3571,15 @@
3544
3571
  "message": "HTTP/1.1 500 Internal Server Error"
3545
3572
  }
3546
3573
  },
3547
- "summary": "/devtools/page/*",
3574
+ "summary": [
3575
+ "/devtools/page/*"
3576
+ ],
3548
3577
  "tags": [
3549
3578
  "Browser WebSocket APIs"
3550
3579
  ]
3551
3580
  }
3552
3581
  },
3553
- "/playwright/chromium": {
3582
+ "/chrome/playwright": {
3554
3583
  "get": {
3555
3584
  "definitions": {},
3556
3585
  "description": "Connect to Chromium with any playwright style library.",
@@ -3641,16 +3670,16 @@
3641
3670
  "message": "HTTP/1.1 500 Internal Server Error"
3642
3671
  }
3643
3672
  },
3644
- "summary": "/playwright/chromium",
3673
+ "summary": "/chrome/playwright",
3645
3674
  "tags": [
3646
3675
  "Browser WebSocket APIs"
3647
3676
  ]
3648
3677
  }
3649
3678
  },
3650
- "/playwright/firefox": {
3651
- "get": {
3679
+ "/content /chromium/content": {
3680
+ "post": {
3652
3681
  "definitions": {},
3653
- "description": "Connect to Firefox with any playwright-compliant library.",
3682
+ "description": "A JSON-based API. Given a \"url\" or \"html\" field, runs and returns HTML content after the page has loaded and JavaScript has parsed.",
3654
3683
  "parameters": [
3655
3684
  {
3656
3685
  "in": "query",
@@ -3664,10 +3693,9 @@
3664
3693
  "in": "query",
3665
3694
  "name": "launch",
3666
3695
  "schema": {
3667
- "description": "Launch options, which can be either an object\nof puppeteer.launch options or playwright.launchServer\noptions, depending on the API. Must be either JSON\nobject, or a base64-encoded JSON object.",
3668
3696
  "anyOf": [
3669
3697
  {
3670
- "$ref": "#/definitions/BrowserServerOptions"
3698
+ "$ref": "#/definitions/CDPLaunchOptions"
3671
3699
  },
3672
3700
  {
3673
3701
  "type": "string"
@@ -3701,11 +3729,194 @@
3701
3729
  }
3702
3730
  ],
3703
3731
  "requestBody": {
3704
- "content": {}
3732
+ "content": {
3733
+ "application/json": {
3734
+ "schema": {
3735
+ "properties": {
3736
+ "addScriptTag": {
3737
+ "type": "array",
3738
+ "items": {
3739
+ "$ref": "#/definitions/FrameAddScriptTagOptions"
3740
+ }
3741
+ },
3742
+ "addStyleTag": {
3743
+ "type": "array",
3744
+ "items": {
3745
+ "$ref": "#/definitions/FrameAddStyleTagOptions"
3746
+ }
3747
+ },
3748
+ "authenticate": {
3749
+ "$ref": "#/definitions/Credentials"
3750
+ },
3751
+ "bestAttempt": {
3752
+ "description": "When bestAttempt is set to true, browserless attempt to proceed\nwhen \"awaited\" events fail or timeout. This includes things like\ngoto, waitForSelector, and more.",
3753
+ "type": "boolean"
3754
+ },
3755
+ "cookies": {
3756
+ "type": "array",
3757
+ "items": {
3758
+ "$ref": "#/definitions/CookieParam"
3759
+ }
3760
+ },
3761
+ "emulateMediaType": {
3762
+ "type": "string"
3763
+ },
3764
+ "gotoOptions": {
3765
+ "$ref": "#/definitions/GoToOptions"
3766
+ },
3767
+ "html": {
3768
+ "type": "string"
3769
+ },
3770
+ "rejectRequestPattern": {
3771
+ "type": "array",
3772
+ "items": {
3773
+ "type": "string"
3774
+ }
3775
+ },
3776
+ "rejectResourceTypes": {
3777
+ "type": "array",
3778
+ "items": {
3779
+ "enum": [
3780
+ "cspviolationreport",
3781
+ "document",
3782
+ "eventsource",
3783
+ "fetch",
3784
+ "font",
3785
+ "image",
3786
+ "manifest",
3787
+ "media",
3788
+ "other",
3789
+ "ping",
3790
+ "prefetch",
3791
+ "preflight",
3792
+ "script",
3793
+ "signedexchange",
3794
+ "stylesheet",
3795
+ "texttrack",
3796
+ "websocket",
3797
+ "xhr"
3798
+ ],
3799
+ "type": "string"
3800
+ }
3801
+ },
3802
+ "requestInterceptors": {
3803
+ "type": "array",
3804
+ "items": {
3805
+ "description": "An array of patterns (using `req.url().match(r.pattern)` to match) and their\ncorresponding responses to use in order to fulfill those requests.",
3806
+ "type": "object",
3807
+ "properties": {
3808
+ "pattern": {
3809
+ "description": "An array of patterns (using `req.url().match(r.pattern)` to match) and their\ncorresponding responses to use in order to fulfill those requests.",
3810
+ "type": "string"
3811
+ },
3812
+ "response": {
3813
+ "$ref": "#/definitions/Partial<ResponseForRequest>"
3814
+ }
3815
+ },
3816
+ "additionalProperties": false,
3817
+ "required": [
3818
+ "pattern",
3819
+ "response"
3820
+ ]
3821
+ }
3822
+ },
3823
+ "setExtraHTTPHeaders": {
3824
+ "$ref": "#/definitions/Record<string,string>"
3825
+ },
3826
+ "setJavaScriptEnabled": {
3827
+ "description": "Whether or not to allow JavaScript to run on the page.",
3828
+ "type": "boolean"
3829
+ },
3830
+ "url": {
3831
+ "type": "string"
3832
+ },
3833
+ "userAgent": {
3834
+ "type": "string"
3835
+ },
3836
+ "viewport": {
3837
+ "$ref": "#/definitions/Viewport"
3838
+ },
3839
+ "waitForEvent": {
3840
+ "type": "object",
3841
+ "properties": {
3842
+ "event": {
3843
+ "type": "string"
3844
+ },
3845
+ "timeout": {
3846
+ "type": "number"
3847
+ }
3848
+ },
3849
+ "additionalProperties": false,
3850
+ "required": [
3851
+ "event"
3852
+ ]
3853
+ },
3854
+ "waitForFunction": {
3855
+ "type": "object",
3856
+ "properties": {
3857
+ "fn": {
3858
+ "description": "The function, or statement, to be evaluated in browser context",
3859
+ "type": "string"
3860
+ },
3861
+ "polling": {
3862
+ "description": "An interval at which the pageFunction is executed, defaults to raf.\nIf polling is a number, then it is treated as an interval in milliseconds\nat which the function would be executed. If polling is a string,\nthen it can be one of the following values: \"raf\" or \"mutation\"",
3863
+ "type": [
3864
+ "string",
3865
+ "number"
3866
+ ]
3867
+ },
3868
+ "timeout": {
3869
+ "description": "Maximum time to wait for in milliseconds. Defaults to 30000 (30 seconds).\nPass 0 to disable timeout.",
3870
+ "type": "number"
3871
+ }
3872
+ },
3873
+ "additionalProperties": false,
3874
+ "required": [
3875
+ "fn"
3876
+ ]
3877
+ },
3878
+ "waitForSelector": {
3879
+ "type": "object",
3880
+ "properties": {
3881
+ "hidden": {
3882
+ "type": "boolean"
3883
+ },
3884
+ "selector": {
3885
+ "type": "string"
3886
+ },
3887
+ "timeout": {
3888
+ "type": "number"
3889
+ },
3890
+ "visible": {
3891
+ "type": "boolean"
3892
+ }
3893
+ },
3894
+ "additionalProperties": false,
3895
+ "required": [
3896
+ "selector"
3897
+ ]
3898
+ },
3899
+ "waitForTimeout": {
3900
+ "type": "number"
3901
+ }
3902
+ },
3903
+ "type": "object"
3904
+ }
3905
+ }
3906
+ }
3705
3907
  },
3706
3908
  "responses": {
3707
- "101": {
3708
- "description": "Indicates successful WebSocket upgrade."
3909
+ "200": {
3910
+ "content": {
3911
+ "text/html": {
3912
+ "schema": {
3913
+ "description": "An HTML payload of the website or HTML after JavaScript\nparsing and execution.",
3914
+ "type": "string",
3915
+ "$schema": "http://json-schema.org/draft-07/schema#"
3916
+ }
3917
+ }
3918
+ },
3919
+ "description": "An HTML payload of the website or HTML after JavaScript\nparsing and execution."
3709
3920
  },
3710
3921
  "400": {
3711
3922
  "code": 400,
@@ -3738,128 +3949,2081 @@
3738
3949
  "message": "HTTP/1.1 500 Internal Server Error"
3739
3950
  }
3740
3951
  },
3741
- "summary": "/playwright/firefox",
3952
+ "summary": "/content /chromium/content",
3742
3953
  "tags": [
3743
- "Browser WebSocket APIs"
3954
+ "Browser REST APIs"
3744
3955
  ]
3745
3956
  }
3746
3957
  },
3747
- "/config": {
3748
- "get": {
3958
+ "/download /chromium/download": {
3959
+ "post": {
3749
3960
  "definitions": {},
3750
- "description": "Returns a JSON payload of the current system configuration.",
3751
- "parameters": [],
3752
- "requestBody": {
3753
- "content": {}
3754
- },
3755
- "responses": {
3756
- "200": {
3757
- "content": {
3758
- "application/json": {
3759
- "schema": {
3760
- "type": "object",
3761
- "properties": {
3762
- "allowCORS": {
3763
- "type": "boolean"
3764
- },
3765
- "allowFileProtocol": {
3766
- "type": "boolean"
3767
- },
3961
+ "description": "A JSON or JavaScript content-type API for returning files Chrome has downloaded during\nthe execution of puppeteer code, which is ran inside context of the browser.\nBrowserless sets up a blank page, a fresh download directory, injects your puppeteer code, and then executes it.\nYou can load external libraries via the \"import\" syntax, and import ESM-style modules\nthat are written for execution inside of the browser. Once your script is finished, any\ndownloaded files from Chromium are returned back with the appropriate content-type header.",
3962
+ "parameters": [
3963
+ {
3964
+ "in": "query",
3965
+ "name": "blockAds",
3966
+ "schema": {
3967
+ "description": "Whether or nor to load ad-blocking extensions for the session.\nThis currently uses uBlock Origin and may cause certain sites\nto not load properly.",
3968
+ "type": "boolean"
3969
+ }
3970
+ },
3971
+ {
3972
+ "in": "query",
3973
+ "name": "launch",
3974
+ "schema": {
3975
+ "description": "Launch options, which can be either an object\nof puppeteer.launch options or playwright.launchServer\noptions, depending on the API. Must be either JSON\nobject, or a base64-encoded JSON object.",
3976
+ "anyOf": [
3977
+ {
3978
+ "$ref": "#/definitions/CDPLaunchOptions"
3979
+ },
3980
+ {
3981
+ "type": "string"
3982
+ }
3983
+ ]
3984
+ }
3985
+ },
3986
+ {
3987
+ "in": "query",
3988
+ "name": "record",
3989
+ "schema": {
3990
+ "description": "Whether or nor to record the session. The browser will run\nin \"head-full\" mode, and recording is started and closed\nvia the embedded browserless API. Please refer to the \"Recording\"\nsection in the live documentation site for more details.",
3991
+ "type": "boolean"
3992
+ }
3993
+ },
3994
+ {
3995
+ "in": "query",
3996
+ "name": "timeout",
3997
+ "schema": {
3998
+ "description": "Override the system-level timeout for this request.\nAccepts a value in milliseconds.",
3999
+ "type": "number"
4000
+ }
4001
+ },
4002
+ {
4003
+ "in": "query",
4004
+ "name": "token",
4005
+ "schema": {
4006
+ "description": "The authorization token",
4007
+ "type": "string"
4008
+ }
4009
+ }
4010
+ ],
4011
+ "requestBody": {
4012
+ "content": {
4013
+ "application/json": {
4014
+ "schema": {
4015
+ "$ref": "#/definitions/JSONSchema"
4016
+ }
4017
+ },
4018
+ "application/javascript": {
4019
+ "schema": {
4020
+ "type": "string"
4021
+ }
4022
+ }
4023
+ }
4024
+ },
4025
+ "responses": {
4026
+ "200": {
4027
+ "content": {
4028
+ "*/*": {
4029
+ "schema": {
4030
+ "description": "Responses are determined by the returned value of the downloads\nthemselves, so there isn't a static response type for this API.",
4031
+ "$schema": "http://json-schema.org/draft-07/schema#"
4032
+ }
4033
+ }
4034
+ },
4035
+ "description": "Responses are determined by the returned value of the downloads\nthemselves, so there isn't a static response type for this API."
4036
+ },
4037
+ "400": {
4038
+ "code": 400,
4039
+ "description": "The request contains errors or didn't properly encode content.",
4040
+ "message": "HTTP/1.1 400 Bad Request"
4041
+ },
4042
+ "401": {
4043
+ "code": 401,
4044
+ "description": "The request is missing, or contains bad, authorization credentials.",
4045
+ "message": "HTTP/1.1 401 Unauthorized"
4046
+ },
4047
+ "404": {
4048
+ "code": 404,
4049
+ "description": "Resource couldn't be found.",
4050
+ "message": "HTTP/1.1 404 Not Found"
4051
+ },
4052
+ "408": {
4053
+ "code": 408,
4054
+ "description": "The request took has taken too long to process.",
4055
+ "message": "HTTP/1.1 408 Request Timeout"
4056
+ },
4057
+ "429": {
4058
+ "code": 429,
4059
+ "description": "Too many requests are currently being processed.",
4060
+ "message": "HTTP/1.1 429 Too Many Requests"
4061
+ },
4062
+ "500": {
4063
+ "code": 500,
4064
+ "description": "An internal error occurred when handling the request.",
4065
+ "message": "HTTP/1.1 500 Internal Server Error"
4066
+ }
4067
+ },
4068
+ "summary": "/download /chromium/download",
4069
+ "tags": [
4070
+ "Browser REST APIs"
4071
+ ]
4072
+ }
4073
+ },
4074
+ "/function /chromium/function": {
4075
+ "post": {
4076
+ "definitions": {},
4077
+ "description": "A JSON or JavaScript content-type API for running puppeteer code in the browser's context.\nBrowserless sets up a blank page, injects your puppeteer code, and runs it.\nYou can optionally load external libraries via the \"import\" module that are meant for browser usage.\nValues returned from the function are checked and an appropriate content-type and response is sent back\nto your HTTP call.",
4078
+ "parameters": [
4079
+ {
4080
+ "in": "query",
4081
+ "name": "blockAds",
4082
+ "schema": {
4083
+ "description": "Whether or nor to load ad-blocking extensions for the session.\nThis currently uses uBlock Origin and may cause certain sites\nto not load properly.",
4084
+ "type": "boolean"
4085
+ }
4086
+ },
4087
+ {
4088
+ "in": "query",
4089
+ "name": "launch",
4090
+ "schema": {
4091
+ "description": "Launch options, which can be either an object\nof puppeteer.launch options or playwright.launchServer\noptions, depending on the API. Must be either JSON\nobject, or a base64-encoded JSON object.",
4092
+ "anyOf": [
4093
+ {
4094
+ "$ref": "#/definitions/CDPLaunchOptions"
4095
+ },
4096
+ {
4097
+ "type": "string"
4098
+ }
4099
+ ]
4100
+ }
4101
+ },
4102
+ {
4103
+ "in": "query",
4104
+ "name": "record",
4105
+ "schema": {
4106
+ "description": "Whether or nor to record the session. The browser will run\nin \"head-full\" mode, and recording is started and closed\nvia the embedded browserless API. Please refer to the \"Recording\"\nsection in the live documentation site for more details.",
4107
+ "type": "boolean"
4108
+ }
4109
+ },
4110
+ {
4111
+ "in": "query",
4112
+ "name": "timeout",
4113
+ "schema": {
4114
+ "description": "Override the system-level timeout for this request.\nAccepts a value in milliseconds.",
4115
+ "type": "number"
4116
+ }
4117
+ },
4118
+ {
4119
+ "in": "query",
4120
+ "name": "token",
4121
+ "schema": {
4122
+ "description": "The authorization token",
4123
+ "type": "string"
4124
+ }
4125
+ }
4126
+ ],
4127
+ "requestBody": {
4128
+ "content": {
4129
+ "application/json": {
4130
+ "schema": {
4131
+ "$ref": "#/definitions/JSONSchema"
4132
+ }
4133
+ },
4134
+ "application/javascript": {
4135
+ "schema": {
4136
+ "type": "string"
4137
+ }
4138
+ }
4139
+ }
4140
+ },
4141
+ "responses": {
4142
+ "200": {
4143
+ "content": {
4144
+ "*/*": {
4145
+ "schema": {
4146
+ "description": "Responses are determined by the returned value of the function\nitself. Binary responses (PDF's, screenshots) are returned back\nas binary data, and primitive JavaScript values are returned back\nby type (HTML data is \"text/html\", Objects are \"application/json\")",
4147
+ "$schema": "http://json-schema.org/draft-07/schema#"
4148
+ }
4149
+ }
4150
+ },
4151
+ "description": "Responses are determined by the returned value of the function\nitself. Binary responses (PDF's, screenshots) are returned back\nas binary data, and primitive JavaScript values are returned back\nby type (HTML data is \"text/html\", Objects are \"application/json\")"
4152
+ },
4153
+ "400": {
4154
+ "code": 400,
4155
+ "description": "The request contains errors or didn't properly encode content.",
4156
+ "message": "HTTP/1.1 400 Bad Request"
4157
+ },
4158
+ "401": {
4159
+ "code": 401,
4160
+ "description": "The request is missing, or contains bad, authorization credentials.",
4161
+ "message": "HTTP/1.1 401 Unauthorized"
4162
+ },
4163
+ "404": {
4164
+ "code": 404,
4165
+ "description": "Resource couldn't be found.",
4166
+ "message": "HTTP/1.1 404 Not Found"
4167
+ },
4168
+ "408": {
4169
+ "code": 408,
4170
+ "description": "The request took has taken too long to process.",
4171
+ "message": "HTTP/1.1 408 Request Timeout"
4172
+ },
4173
+ "429": {
4174
+ "code": 429,
4175
+ "description": "Too many requests are currently being processed.",
4176
+ "message": "HTTP/1.1 429 Too Many Requests"
4177
+ },
4178
+ "500": {
4179
+ "code": 500,
4180
+ "description": "An internal error occurred when handling the request.",
4181
+ "message": "HTTP/1.1 500 Internal Server Error"
4182
+ }
4183
+ },
4184
+ "summary": "/function /chromium/function",
4185
+ "tags": [
4186
+ "Browser REST APIs"
4187
+ ]
4188
+ }
4189
+ },
4190
+ "/pdf /chromium/pdf": {
4191
+ "post": {
4192
+ "definitions": {},
4193
+ "description": "A JSON-based API for getting a PDF binary from either a supplied\n\"url\" or \"html\" payload in your request. Many options exist for\ninjecting cookies, request interceptors, user-agents and waiting for\nselectors, timers and more.",
4194
+ "parameters": [
4195
+ {
4196
+ "in": "query",
4197
+ "name": "blockAds",
4198
+ "schema": {
4199
+ "description": "Whether or nor to load ad-blocking extensions for the session.\nThis currently uses uBlock Origin and may cause certain sites\nto not load properly.",
4200
+ "type": "boolean"
4201
+ }
4202
+ },
4203
+ {
4204
+ "in": "query",
4205
+ "name": "launch",
4206
+ "schema": {
4207
+ "description": "Launch options, which can be either an object\nof puppeteer.launch options or playwright.launchServer\noptions, depending on the API. Must be either JSON\nobject, or a base64-encoded JSON object.",
4208
+ "anyOf": [
4209
+ {
4210
+ "$ref": "#/definitions/CDPLaunchOptions"
4211
+ },
4212
+ {
4213
+ "type": "string"
4214
+ }
4215
+ ]
4216
+ }
4217
+ },
4218
+ {
4219
+ "in": "query",
4220
+ "name": "record",
4221
+ "schema": {
4222
+ "description": "Whether or nor to record the session. The browser will run\nin \"head-full\" mode, and recording is started and closed\nvia the embedded browserless API. Please refer to the \"Recording\"\nsection in the live documentation site for more details.",
4223
+ "type": "boolean"
4224
+ }
4225
+ },
4226
+ {
4227
+ "in": "query",
4228
+ "name": "timeout",
4229
+ "schema": {
4230
+ "description": "Override the system-level timeout for this request.\nAccepts a value in milliseconds.",
4231
+ "type": "number"
4232
+ }
4233
+ },
4234
+ {
4235
+ "in": "query",
4236
+ "name": "token",
4237
+ "schema": {
4238
+ "description": "The authorization token",
4239
+ "type": "string"
4240
+ }
4241
+ }
4242
+ ],
4243
+ "requestBody": {
4244
+ "content": {
4245
+ "application/json": {
4246
+ "schema": {
4247
+ "properties": {
4248
+ "addScriptTag": {
4249
+ "type": "array",
4250
+ "items": {
4251
+ "$ref": "#/definitions/FrameAddScriptTagOptions"
4252
+ }
4253
+ },
4254
+ "addStyleTag": {
4255
+ "type": "array",
4256
+ "items": {
4257
+ "$ref": "#/definitions/FrameAddStyleTagOptions"
4258
+ }
4259
+ },
4260
+ "authenticate": {
4261
+ "$ref": "#/definitions/Credentials"
4262
+ },
4263
+ "bestAttempt": {
4264
+ "description": "When bestAttempt is set to true, browserless attempt to proceed\nwhen \"awaited\" events fail or timeout. This includes things like\ngoto, waitForSelector, and more.",
4265
+ "type": "boolean"
4266
+ },
4267
+ "blockModals": {
4268
+ "type": "boolean"
4269
+ },
4270
+ "cookies": {
4271
+ "type": "array",
4272
+ "items": {
4273
+ "$ref": "#/definitions/CookieParam"
4274
+ }
4275
+ },
4276
+ "emulateMediaType": {
4277
+ "type": "string"
4278
+ },
4279
+ "gotoOptions": {
4280
+ "$ref": "#/definitions/GoToOptions"
4281
+ },
4282
+ "html": {
4283
+ "type": "string"
4284
+ },
4285
+ "options": {
4286
+ "$ref": "#/definitions/PDFOptions"
4287
+ },
4288
+ "rejectRequestPattern": {
4289
+ "type": "array",
4290
+ "items": {
4291
+ "type": "string"
4292
+ }
4293
+ },
4294
+ "rejectResourceTypes": {
4295
+ "type": "array",
4296
+ "items": {
4297
+ "enum": [
4298
+ "cspviolationreport",
4299
+ "document",
4300
+ "eventsource",
4301
+ "fetch",
4302
+ "font",
4303
+ "image",
4304
+ "manifest",
4305
+ "media",
4306
+ "other",
4307
+ "ping",
4308
+ "prefetch",
4309
+ "preflight",
4310
+ "script",
4311
+ "signedexchange",
4312
+ "stylesheet",
4313
+ "texttrack",
4314
+ "websocket",
4315
+ "xhr"
4316
+ ],
4317
+ "type": "string"
4318
+ }
4319
+ },
4320
+ "requestInterceptors": {
4321
+ "type": "array",
4322
+ "items": {
4323
+ "description": "An array of patterns (using `req.url().match(r.pattern)` to match) and their\ncorresponding responses to use in order to fulfill those requests.",
4324
+ "type": "object",
4325
+ "properties": {
4326
+ "pattern": {
4327
+ "description": "An array of patterns (using `req.url().match(r.pattern)` to match) and their\ncorresponding responses to use in order to fulfill those requests.",
4328
+ "type": "string"
4329
+ },
4330
+ "response": {
4331
+ "$ref": "#/definitions/Partial<ResponseForRequest>"
4332
+ }
4333
+ },
4334
+ "additionalProperties": false,
4335
+ "required": [
4336
+ "pattern",
4337
+ "response"
4338
+ ]
4339
+ }
4340
+ },
4341
+ "setExtraHTTPHeaders": {
4342
+ "$ref": "#/definitions/Record<string,string>"
4343
+ },
4344
+ "setJavaScriptEnabled": {
4345
+ "type": "boolean"
4346
+ },
4347
+ "url": {
4348
+ "type": "string"
4349
+ },
4350
+ "userAgent": {
4351
+ "type": "string"
4352
+ },
4353
+ "viewport": {
4354
+ "$ref": "#/definitions/Viewport"
4355
+ },
4356
+ "waitForEvent": {
4357
+ "type": "object",
4358
+ "properties": {
4359
+ "event": {
4360
+ "type": "string"
4361
+ },
4362
+ "timeout": {
4363
+ "type": "number"
4364
+ }
4365
+ },
4366
+ "additionalProperties": false,
4367
+ "required": [
4368
+ "event"
4369
+ ]
4370
+ },
4371
+ "waitForFunction": {
4372
+ "type": "object",
4373
+ "properties": {
4374
+ "fn": {
4375
+ "description": "The function, or statement, to be evaluated in browser context",
4376
+ "type": "string"
4377
+ },
4378
+ "polling": {
4379
+ "description": "An interval at which the pageFunction is executed, defaults to raf.\nIf polling is a number, then it is treated as an interval in milliseconds\nat which the function would be executed. If polling is a string,\nthen it can be one of the following values: \"raf\" or \"mutation\"",
4380
+ "type": [
4381
+ "string",
4382
+ "number"
4383
+ ]
4384
+ },
4385
+ "timeout": {
4386
+ "description": "Maximum time to wait for in milliseconds. Defaults to 30000 (30 seconds).\nPass 0 to disable timeout.",
4387
+ "type": "number"
4388
+ }
4389
+ },
4390
+ "additionalProperties": false,
4391
+ "required": [
4392
+ "fn"
4393
+ ]
4394
+ },
4395
+ "waitForSelector": {
4396
+ "type": "object",
4397
+ "properties": {
4398
+ "hidden": {
4399
+ "type": "boolean"
4400
+ },
4401
+ "selector": {
4402
+ "type": "string"
4403
+ },
4404
+ "timeout": {
4405
+ "type": "number"
4406
+ },
4407
+ "visible": {
4408
+ "type": "boolean"
4409
+ }
4410
+ },
4411
+ "additionalProperties": false,
4412
+ "required": [
4413
+ "selector"
4414
+ ]
4415
+ },
4416
+ "waitForTimeout": {
4417
+ "type": "number"
4418
+ }
4419
+ },
4420
+ "type": "object"
4421
+ }
4422
+ }
4423
+ }
4424
+ },
4425
+ "responses": {
4426
+ "200": {
4427
+ "content": {
4428
+ "application/pdf": {
4429
+ "schema": {
4430
+ "description": "Responds with an application/pdf content-type and a binary PDF",
4431
+ "type": "string",
4432
+ "$schema": "http://json-schema.org/draft-07/schema#"
4433
+ }
4434
+ }
4435
+ },
4436
+ "description": "Responds with an application/pdf content-type and a binary PDF"
4437
+ },
4438
+ "400": {
4439
+ "code": 400,
4440
+ "description": "The request contains errors or didn't properly encode content.",
4441
+ "message": "HTTP/1.1 400 Bad Request"
4442
+ },
4443
+ "401": {
4444
+ "code": 401,
4445
+ "description": "The request is missing, or contains bad, authorization credentials.",
4446
+ "message": "HTTP/1.1 401 Unauthorized"
4447
+ },
4448
+ "404": {
4449
+ "code": 404,
4450
+ "description": "Resource couldn't be found.",
4451
+ "message": "HTTP/1.1 404 Not Found"
4452
+ },
4453
+ "408": {
4454
+ "code": 408,
4455
+ "description": "The request took has taken too long to process.",
4456
+ "message": "HTTP/1.1 408 Request Timeout"
4457
+ },
4458
+ "429": {
4459
+ "code": 429,
4460
+ "description": "Too many requests are currently being processed.",
4461
+ "message": "HTTP/1.1 429 Too Many Requests"
4462
+ },
4463
+ "500": {
4464
+ "code": 500,
4465
+ "description": "An internal error occurred when handling the request.",
4466
+ "message": "HTTP/1.1 500 Internal Server Error"
4467
+ }
4468
+ },
4469
+ "summary": "/pdf /chromium/pdf",
4470
+ "tags": [
4471
+ "Browser REST APIs"
4472
+ ]
4473
+ }
4474
+ },
4475
+ "/performance /chromium/performance": {
4476
+ "post": {
4477
+ "definitions": {},
4478
+ "description": "Run lighthouse performance audits with a supplied \"url\" in your JSON payload.",
4479
+ "parameters": [
4480
+ {
4481
+ "in": "query",
4482
+ "name": "blockAds",
4483
+ "schema": {
4484
+ "description": "Whether or nor to load ad-blocking extensions for the session.\nThis currently uses uBlock Origin and may cause certain sites\nto not load properly.",
4485
+ "type": "boolean"
4486
+ }
4487
+ },
4488
+ {
4489
+ "in": "query",
4490
+ "name": "launch",
4491
+ "schema": {
4492
+ "description": "Launch options, which can be either an object\nof puppeteer.launch options or playwright.launchServer\noptions, depending on the API. Must be either JSON\nobject, or a base64-encoded JSON object.",
4493
+ "anyOf": [
4494
+ {
4495
+ "$ref": "#/definitions/CDPLaunchOptions"
4496
+ },
4497
+ {
4498
+ "type": "string"
4499
+ }
4500
+ ]
4501
+ }
4502
+ },
4503
+ {
4504
+ "in": "query",
4505
+ "name": "record",
4506
+ "schema": {
4507
+ "description": "Whether or nor to record the session. The browser will run\nin \"head-full\" mode, and recording is started and closed\nvia the embedded browserless API. Please refer to the \"Recording\"\nsection in the live documentation site for more details.",
4508
+ "type": "boolean"
4509
+ }
4510
+ },
4511
+ {
4512
+ "in": "query",
4513
+ "name": "timeout",
4514
+ "schema": {
4515
+ "description": "Override the system-level timeout for this request.\nAccepts a value in milliseconds.",
4516
+ "type": "number"
4517
+ }
4518
+ },
4519
+ {
4520
+ "in": "query",
4521
+ "name": "token",
4522
+ "schema": {
4523
+ "description": "The authorization token",
4524
+ "type": "string"
4525
+ }
4526
+ }
4527
+ ],
4528
+ "requestBody": {
4529
+ "content": {
4530
+ "application/json": {
4531
+ "schema": {
4532
+ "properties": {
4533
+ "budgets": {
4534
+ "type": "array",
4535
+ "items": {
4536
+ "type": "object",
4537
+ "properties": {},
4538
+ "additionalProperties": true
4539
+ }
4540
+ },
4541
+ "config": {
4542
+ "type": "object",
4543
+ "properties": {},
4544
+ "additionalProperties": true
4545
+ },
4546
+ "url": {
4547
+ "type": "string"
4548
+ }
4549
+ },
4550
+ "type": "object"
4551
+ }
4552
+ }
4553
+ }
4554
+ },
4555
+ "responses": {
4556
+ "200": {
4557
+ "content": {
4558
+ "application/json": {
4559
+ "schema": {
4560
+ "description": "The response of the lighthouse stats. Response objects are\ndetermined by the type of budgets and config in the POST\nJSON body",
4561
+ "type": "object",
4562
+ "properties": {},
4563
+ "additionalProperties": true,
4564
+ "$schema": "http://json-schema.org/draft-07/schema#"
4565
+ }
4566
+ }
4567
+ },
4568
+ "description": "The response of the lighthouse stats. Response objects are\ndetermined by the type of budgets and config in the POST\nJSON body"
4569
+ },
4570
+ "400": {
4571
+ "code": 400,
4572
+ "description": "The request contains errors or didn't properly encode content.",
4573
+ "message": "HTTP/1.1 400 Bad Request"
4574
+ },
4575
+ "401": {
4576
+ "code": 401,
4577
+ "description": "The request is missing, or contains bad, authorization credentials.",
4578
+ "message": "HTTP/1.1 401 Unauthorized"
4579
+ },
4580
+ "404": {
4581
+ "code": 404,
4582
+ "description": "Resource couldn't be found.",
4583
+ "message": "HTTP/1.1 404 Not Found"
4584
+ },
4585
+ "408": {
4586
+ "code": 408,
4587
+ "description": "The request took has taken too long to process.",
4588
+ "message": "HTTP/1.1 408 Request Timeout"
4589
+ },
4590
+ "429": {
4591
+ "code": 429,
4592
+ "description": "Too many requests are currently being processed.",
4593
+ "message": "HTTP/1.1 429 Too Many Requests"
4594
+ },
4595
+ "500": {
4596
+ "code": 500,
4597
+ "description": "An internal error occurred when handling the request.",
4598
+ "message": "HTTP/1.1 500 Internal Server Error"
4599
+ }
4600
+ },
4601
+ "summary": "/performance /chromium/performance",
4602
+ "tags": [
4603
+ "Browser REST APIs"
4604
+ ]
4605
+ }
4606
+ },
4607
+ "/scrape /chromium/scrape": {
4608
+ "post": {
4609
+ "definitions": {},
4610
+ "description": "A JSON-based API that returns text, html, and meta-data from a given list of selectors.\nDebugging information is available by sending in the appropriate flags in the \"debugOpts\"\nproperty. Responds with an array of JSON objects.",
4611
+ "parameters": [
4612
+ {
4613
+ "in": "query",
4614
+ "name": "blockAds",
4615
+ "schema": {
4616
+ "description": "Whether or nor to load ad-blocking extensions for the session.\nThis currently uses uBlock Origin and may cause certain sites\nto not load properly.",
4617
+ "type": "boolean"
4618
+ }
4619
+ },
4620
+ {
4621
+ "in": "query",
4622
+ "name": "launch",
4623
+ "schema": {
4624
+ "anyOf": [
4625
+ {
4626
+ "$ref": "#/definitions/CDPLaunchOptions"
4627
+ },
4628
+ {
4629
+ "type": "string"
4630
+ }
4631
+ ]
4632
+ }
4633
+ },
4634
+ {
4635
+ "in": "query",
4636
+ "name": "record",
4637
+ "schema": {
4638
+ "description": "Whether or nor to record the session. The browser will run\nin \"head-full\" mode, and recording is started and closed\nvia the embedded browserless API. Please refer to the \"Recording\"\nsection in the live documentation site for more details.",
4639
+ "type": "boolean"
4640
+ }
4641
+ },
4642
+ {
4643
+ "in": "query",
4644
+ "name": "timeout",
4645
+ "schema": {
4646
+ "description": "Override the system-level timeout for this request.\nAccepts a value in milliseconds.",
4647
+ "type": "number"
4648
+ }
4649
+ },
4650
+ {
4651
+ "in": "query",
4652
+ "name": "token",
4653
+ "schema": {
4654
+ "description": "The authorization token",
4655
+ "type": "string"
4656
+ }
4657
+ }
4658
+ ],
4659
+ "requestBody": {
4660
+ "content": {
4661
+ "application/json": {
4662
+ "schema": {
4663
+ "properties": {
4664
+ "addScriptTag": {
4665
+ "type": "array",
4666
+ "items": {
4667
+ "$ref": "#/definitions/FrameAddScriptTagOptions"
4668
+ }
4669
+ },
4670
+ "addStyleTag": {
4671
+ "type": "array",
4672
+ "items": {
4673
+ "$ref": "#/definitions/FrameAddStyleTagOptions"
4674
+ }
4675
+ },
4676
+ "authenticate": {
4677
+ "$ref": "#/definitions/Credentials"
4678
+ },
4679
+ "bestAttempt": {
4680
+ "description": "When bestAttempt is set to true, browserless attempt to proceed\nwhen \"awaited\" events fail or timeout. This includes things like\ngoto, waitForSelector, and more.",
4681
+ "type": "boolean"
4682
+ },
4683
+ "cookies": {
4684
+ "type": "array",
4685
+ "items": {
4686
+ "$ref": "#/definitions/CookieParam"
4687
+ }
4688
+ },
4689
+ "debugOpts": {
4690
+ "$ref": "#/definitions/ScrapeDebugOptions"
4691
+ },
4692
+ "elements": {
4693
+ "type": "array",
4694
+ "items": {
4695
+ "$ref": "#/definitions/ScrapeElementSelector"
4696
+ }
4697
+ },
4698
+ "emulateMediaType": {
4699
+ "type": "string"
4700
+ },
4701
+ "gotoOptions": {
4702
+ "$ref": "#/definitions/GoToOptions"
4703
+ },
4704
+ "html": {
4705
+ "type": "string"
4706
+ },
4707
+ "rejectRequestPattern": {
4708
+ "type": "array",
4709
+ "items": {
4710
+ "type": "string"
4711
+ }
4712
+ },
4713
+ "rejectResourceTypes": {
4714
+ "type": "array",
4715
+ "items": {
4716
+ "enum": [
4717
+ "cspviolationreport",
4718
+ "document",
4719
+ "eventsource",
4720
+ "fetch",
4721
+ "font",
4722
+ "image",
4723
+ "manifest",
4724
+ "media",
4725
+ "other",
4726
+ "ping",
4727
+ "prefetch",
4728
+ "preflight",
4729
+ "script",
4730
+ "signedexchange",
4731
+ "stylesheet",
4732
+ "texttrack",
4733
+ "websocket",
4734
+ "xhr"
4735
+ ],
4736
+ "type": "string"
4737
+ }
4738
+ },
4739
+ "requestInterceptors": {
4740
+ "type": "array",
4741
+ "items": {
4742
+ "description": "An array of patterns (using `req.url().match(r.pattern)` to match) and their\ncorresponding responses to use in order to fulfill those requests.",
4743
+ "type": "object",
4744
+ "properties": {
4745
+ "pattern": {
4746
+ "description": "An array of patterns (using `req.url().match(r.pattern)` to match) and their\ncorresponding responses to use in order to fulfill those requests.",
4747
+ "type": "string"
4748
+ },
4749
+ "response": {
4750
+ "$ref": "#/definitions/Partial<ResponseForRequest>"
4751
+ }
4752
+ },
4753
+ "additionalProperties": false,
4754
+ "required": [
4755
+ "pattern",
4756
+ "response"
4757
+ ]
4758
+ }
4759
+ },
4760
+ "setExtraHTTPHeaders": {
4761
+ "$ref": "#/definitions/Record<string,string>"
4762
+ },
4763
+ "setJavaScriptEnabled": {
4764
+ "type": "boolean"
4765
+ },
4766
+ "url": {
4767
+ "type": "string"
4768
+ },
4769
+ "userAgent": {
4770
+ "type": "string"
4771
+ },
4772
+ "viewport": {
4773
+ "$ref": "#/definitions/Viewport"
4774
+ },
4775
+ "waitForEvent": {
4776
+ "type": "object",
4777
+ "properties": {
4778
+ "event": {
4779
+ "type": "string"
4780
+ },
4781
+ "timeout": {
4782
+ "type": "number"
4783
+ }
4784
+ },
4785
+ "additionalProperties": false,
4786
+ "required": [
4787
+ "event"
4788
+ ]
4789
+ },
4790
+ "waitForFunction": {
4791
+ "type": "object",
4792
+ "properties": {
4793
+ "fn": {
4794
+ "description": "The function, or statement, to be evaluated in browser context",
4795
+ "type": "string"
4796
+ },
4797
+ "polling": {
4798
+ "description": "An interval at which the pageFunction is executed, defaults to raf.\nIf polling is a number, then it is treated as an interval in milliseconds\nat which the function would be executed. If polling is a string,\nthen it can be one of the following values: \"raf\" or \"mutation\"",
4799
+ "type": [
4800
+ "string",
4801
+ "number"
4802
+ ]
4803
+ },
4804
+ "timeout": {
4805
+ "description": "Maximum time to wait for in milliseconds. Defaults to 30000 (30 seconds).\nPass 0 to disable timeout.",
4806
+ "type": "number"
4807
+ }
4808
+ },
4809
+ "additionalProperties": false,
4810
+ "required": [
4811
+ "fn"
4812
+ ]
4813
+ },
4814
+ "waitForSelector": {
4815
+ "type": "object",
4816
+ "properties": {
4817
+ "hidden": {
4818
+ "type": "boolean"
4819
+ },
4820
+ "selector": {
4821
+ "type": "string"
4822
+ },
4823
+ "timeout": {
4824
+ "type": "number"
4825
+ },
4826
+ "visible": {
4827
+ "type": "boolean"
4828
+ }
4829
+ },
4830
+ "additionalProperties": false,
4831
+ "required": [
4832
+ "selector"
4833
+ ]
4834
+ },
4835
+ "waitForTimeout": {
4836
+ "type": "number"
4837
+ }
4838
+ },
4839
+ "type": "object"
4840
+ }
4841
+ }
4842
+ }
4843
+ },
4844
+ "responses": {
4845
+ "200": {
4846
+ "content": {
4847
+ "application/json": {
4848
+ "schema": {
4849
+ "description": "The JSON response body",
4850
+ "type": "object",
4851
+ "properties": {
4852
+ "data": {
4853
+ "anyOf": [
4854
+ {
4855
+ "type": "array",
4856
+ "items": {
4857
+ "type": "object",
4858
+ "properties": {
4859
+ "results": {
4860
+ "type": "array",
4861
+ "items": {
4862
+ "type": "object",
4863
+ "properties": {
4864
+ "attributes": {
4865
+ "description": "A list of HTML attributes of the element",
4866
+ "type": "array",
4867
+ "items": {
4868
+ "type": "object",
4869
+ "properties": {
4870
+ "name": {
4871
+ "description": "The name of the HTML attribute for the element",
4872
+ "type": "string"
4873
+ },
4874
+ "value": {
4875
+ "description": "The value of the HTML attribute for the element",
4876
+ "type": "string"
4877
+ }
4878
+ },
4879
+ "additionalProperties": false,
4880
+ "required": [
4881
+ "name",
4882
+ "value"
4883
+ ]
4884
+ }
4885
+ },
4886
+ "height": {
4887
+ "description": "The height the element",
4888
+ "type": "number"
4889
+ },
4890
+ "html": {
4891
+ "description": "The HTML the element",
4892
+ "type": "string"
4893
+ },
4894
+ "left": {
4895
+ "description": "The amount of pixels from the left of the page",
4896
+ "type": "number"
4897
+ },
4898
+ "text": {
4899
+ "description": "The text the element",
4900
+ "type": "string"
4901
+ },
4902
+ "top": {
4903
+ "description": "The amount of pixels from the top of the page",
4904
+ "type": "number"
4905
+ },
4906
+ "width": {
4907
+ "description": "The width the element",
4908
+ "type": "number"
4909
+ }
4910
+ },
4911
+ "additionalProperties": false,
4912
+ "required": [
4913
+ "attributes",
4914
+ "height",
4915
+ "html",
4916
+ "left",
4917
+ "text",
4918
+ "top",
4919
+ "width"
4920
+ ]
4921
+ }
4922
+ },
4923
+ "selector": {
4924
+ "description": "The DOM selector of the element",
4925
+ "type": "string"
4926
+ }
4927
+ },
4928
+ "additionalProperties": false,
4929
+ "required": [
4930
+ "results",
4931
+ "selector"
4932
+ ]
4933
+ }
4934
+ },
4935
+ {
4936
+ "type": "null"
4937
+ }
4938
+ ]
4939
+ },
4940
+ "debug": {
4941
+ "description": "When debugOpts options are present, results are here",
4942
+ "anyOf": [
4943
+ {
4944
+ "type": "object",
4945
+ "properties": {
4946
+ "console": {
4947
+ "description": "A list of console messages from the browser",
4948
+ "type": "array",
4949
+ "items": {
4950
+ "type": "string"
4951
+ }
4952
+ },
4953
+ "cookies": {
4954
+ "description": "List of cookies for the site or null",
4955
+ "anyOf": [
4956
+ {
4957
+ "type": "array",
4958
+ "items": {
4959
+ "$ref": "#/definitions/Cookie"
4960
+ }
4961
+ },
4962
+ {
4963
+ "type": "null"
4964
+ }
4965
+ ]
4966
+ },
4967
+ "html": {
4968
+ "description": "The HTML string of the website or null",
4969
+ "type": [
4970
+ "null",
4971
+ "string"
4972
+ ]
4973
+ },
4974
+ "network": {
4975
+ "type": "object",
4976
+ "properties": {
4977
+ "inbound": {
4978
+ "type": "array",
4979
+ "items": {
4980
+ "$ref": "#/definitions/InBoundRequest"
4981
+ }
4982
+ },
4983
+ "outbound": {
4984
+ "type": "array",
4985
+ "items": {
4986
+ "$ref": "#/definitions/OutBoundRequest"
4987
+ }
4988
+ }
4989
+ },
4990
+ "additionalProperties": false,
4991
+ "required": [
4992
+ "inbound",
4993
+ "outbound"
4994
+ ]
4995
+ },
4996
+ "screenshot": {
4997
+ "description": "A base64-encoded string of the site or null",
4998
+ "type": [
4999
+ "null",
5000
+ "string"
5001
+ ]
5002
+ }
5003
+ },
5004
+ "additionalProperties": false,
5005
+ "required": [
5006
+ "console",
5007
+ "cookies",
5008
+ "html",
5009
+ "network",
5010
+ "screenshot"
5011
+ ]
5012
+ },
5013
+ {
5014
+ "type": "null"
5015
+ }
5016
+ ]
5017
+ }
5018
+ },
5019
+ "additionalProperties": false,
5020
+ "required": [
5021
+ "data",
5022
+ "debug"
5023
+ ],
5024
+ "definitions": {
5025
+ "Cookie": {
5026
+ "description": "Represents a cookie object.",
5027
+ "type": "object",
5028
+ "properties": {
5029
+ "name": {
5030
+ "description": "Cookie name.",
5031
+ "type": "string"
5032
+ },
5033
+ "value": {
5034
+ "description": "Cookie value.",
5035
+ "type": "string"
5036
+ },
5037
+ "domain": {
5038
+ "description": "Cookie domain.",
5039
+ "type": "string"
5040
+ },
5041
+ "path": {
5042
+ "description": "Cookie path.",
5043
+ "type": "string"
5044
+ },
5045
+ "expires": {
5046
+ "description": "Cookie expiration date as the number of seconds since the UNIX epoch. Set to `-1` for\nsession cookies",
5047
+ "type": "number"
5048
+ },
5049
+ "size": {
5050
+ "description": "Cookie size.",
5051
+ "type": "number"
5052
+ },
5053
+ "httpOnly": {
5054
+ "description": "True if cookie is http-only.",
5055
+ "type": "boolean"
5056
+ },
5057
+ "secure": {
5058
+ "description": "True if cookie is secure.",
5059
+ "type": "boolean"
5060
+ },
5061
+ "session": {
5062
+ "description": "True in case of session cookie.",
5063
+ "type": "boolean"
5064
+ },
5065
+ "sameSite": {
5066
+ "description": "Cookie SameSite type.",
5067
+ "enum": [
5068
+ "Lax",
5069
+ "None",
5070
+ "Strict"
5071
+ ],
5072
+ "type": "string"
5073
+ },
5074
+ "priority": {
5075
+ "description": "Cookie Priority. Supported only in Chrome.",
5076
+ "enum": [
5077
+ "High",
5078
+ "Low",
5079
+ "Medium"
5080
+ ],
5081
+ "type": "string"
5082
+ },
5083
+ "sameParty": {
5084
+ "description": "True if cookie is SameParty. Supported only in Chrome.",
5085
+ "type": "boolean"
5086
+ },
5087
+ "sourceScheme": {
5088
+ "description": "Cookie source scheme type. Supported only in Chrome.",
5089
+ "enum": [
5090
+ "NonSecure",
5091
+ "Secure",
5092
+ "Unset"
5093
+ ],
5094
+ "type": "string"
5095
+ },
5096
+ "partitionKey": {
5097
+ "description": "Cookie partition key. The site of the top-level URL the browser was visiting at the\nstart of the request to the endpoint that set the cookie. Supported only in Chrome.",
5098
+ "type": "string"
5099
+ },
5100
+ "partitionKeyOpaque": {
5101
+ "description": "True if cookie partition key is opaque. Supported only in Chrome.",
5102
+ "type": "boolean"
5103
+ }
5104
+ },
5105
+ "additionalProperties": false,
5106
+ "required": [
5107
+ "domain",
5108
+ "expires",
5109
+ "httpOnly",
5110
+ "name",
5111
+ "path",
5112
+ "secure",
5113
+ "session",
5114
+ "size",
5115
+ "value"
5116
+ ]
5117
+ },
5118
+ "InBoundRequest": {
5119
+ "type": "object",
5120
+ "properties": {
5121
+ "headers": {},
5122
+ "status": {
5123
+ "type": "number"
5124
+ },
5125
+ "url": {
5126
+ "type": "string"
5127
+ }
5128
+ },
5129
+ "additionalProperties": false,
5130
+ "required": [
5131
+ "headers",
5132
+ "status",
5133
+ "url"
5134
+ ]
5135
+ },
5136
+ "OutBoundRequest": {
5137
+ "type": "object",
5138
+ "properties": {
5139
+ "headers": {},
5140
+ "method": {
5141
+ "type": "string"
5142
+ },
5143
+ "url": {
5144
+ "type": "string"
5145
+ }
5146
+ },
5147
+ "additionalProperties": false,
5148
+ "required": [
5149
+ "headers",
5150
+ "method",
5151
+ "url"
5152
+ ]
5153
+ }
5154
+ },
5155
+ "$schema": "http://json-schema.org/draft-07/schema#"
5156
+ }
5157
+ }
5158
+ },
5159
+ "description": "The JSON response body"
5160
+ },
5161
+ "400": {
5162
+ "code": 400,
5163
+ "description": "The request contains errors or didn't properly encode content.",
5164
+ "message": "HTTP/1.1 400 Bad Request"
5165
+ },
5166
+ "401": {
5167
+ "code": 401,
5168
+ "description": "The request is missing, or contains bad, authorization credentials.",
5169
+ "message": "HTTP/1.1 401 Unauthorized"
5170
+ },
5171
+ "404": {
5172
+ "code": 404,
5173
+ "description": "Resource couldn't be found.",
5174
+ "message": "HTTP/1.1 404 Not Found"
5175
+ },
5176
+ "408": {
5177
+ "code": 408,
5178
+ "description": "The request took has taken too long to process.",
5179
+ "message": "HTTP/1.1 408 Request Timeout"
5180
+ },
5181
+ "429": {
5182
+ "code": 429,
5183
+ "description": "Too many requests are currently being processed.",
5184
+ "message": "HTTP/1.1 429 Too Many Requests"
5185
+ },
5186
+ "500": {
5187
+ "code": 500,
5188
+ "description": "An internal error occurred when handling the request.",
5189
+ "message": "HTTP/1.1 500 Internal Server Error"
5190
+ }
5191
+ },
5192
+ "summary": "/scrape /chromium/scrape",
5193
+ "tags": [
5194
+ "Browser REST APIs"
5195
+ ]
5196
+ }
5197
+ },
5198
+ "/screenshot /chromium/screenshot": {
5199
+ "post": {
5200
+ "definitions": {},
5201
+ "description": "A JSON-based API for getting a screenshot binary from either a supplied\n\"url\" or \"html\" payload in your request. Many options exist including\ncookies, user-agents, setting timers and network mocks.",
5202
+ "parameters": [
5203
+ {
5204
+ "in": "query",
5205
+ "name": "blockAds",
5206
+ "schema": {
5207
+ "description": "Whether or nor to load ad-blocking extensions for the session.\nThis currently uses uBlock Origin and may cause certain sites\nto not load properly.",
5208
+ "type": "boolean"
5209
+ }
5210
+ },
5211
+ {
5212
+ "in": "query",
5213
+ "name": "launch",
5214
+ "schema": {
5215
+ "description": "Launch options, which can be either an object\nof puppeteer.launch options or playwright.launchServer\noptions, depending on the API. Must be either JSON\nobject, or a base64-encoded JSON object.",
5216
+ "anyOf": [
5217
+ {
5218
+ "$ref": "#/definitions/CDPLaunchOptions"
5219
+ },
5220
+ {
5221
+ "type": "string"
5222
+ }
5223
+ ]
5224
+ }
5225
+ },
5226
+ {
5227
+ "in": "query",
5228
+ "name": "record",
5229
+ "schema": {
5230
+ "description": "Whether or nor to record the session. The browser will run\nin \"head-full\" mode, and recording is started and closed\nvia the embedded browserless API. Please refer to the \"Recording\"\nsection in the live documentation site for more details.",
5231
+ "type": "boolean"
5232
+ }
5233
+ },
5234
+ {
5235
+ "in": "query",
5236
+ "name": "timeout",
5237
+ "schema": {
5238
+ "description": "Override the system-level timeout for this request.\nAccepts a value in milliseconds.",
5239
+ "type": "number"
5240
+ }
5241
+ },
5242
+ {
5243
+ "in": "query",
5244
+ "name": "token",
5245
+ "schema": {
5246
+ "description": "The authorization token",
5247
+ "type": "string"
5248
+ }
5249
+ }
5250
+ ],
5251
+ "requestBody": {
5252
+ "content": {
5253
+ "application/json": {
5254
+ "schema": {
5255
+ "properties": {
5256
+ "addScriptTag": {
5257
+ "type": "array",
5258
+ "items": {
5259
+ "$ref": "#/definitions/FrameAddScriptTagOptions"
5260
+ }
5261
+ },
5262
+ "addStyleTag": {
5263
+ "type": "array",
5264
+ "items": {
5265
+ "$ref": "#/definitions/FrameAddStyleTagOptions"
5266
+ }
5267
+ },
5268
+ "authenticate": {
5269
+ "$ref": "#/definitions/Credentials"
5270
+ },
5271
+ "bestAttempt": {
5272
+ "description": "When bestAttempt is set to true, browserless attempt to proceed\nwhen \"awaited\" events fail or timeout. This includes things like\ngoto, waitForSelector, and more.",
5273
+ "type": "boolean"
5274
+ },
5275
+ "cookies": {
5276
+ "type": "array",
5277
+ "items": {
5278
+ "$ref": "#/definitions/CookieParam"
5279
+ }
5280
+ },
5281
+ "emulateMediaType": {
5282
+ "type": "string"
5283
+ },
5284
+ "gotoOptions": {
5285
+ "$ref": "#/definitions/GoToOptions"
5286
+ },
5287
+ "html": {
5288
+ "type": "string"
5289
+ },
5290
+ "options": {
5291
+ "$ref": "#/definitions/ScreenshotOptions"
5292
+ },
5293
+ "rejectRequestPattern": {
5294
+ "type": "array",
5295
+ "items": {
5296
+ "type": "string"
5297
+ }
5298
+ },
5299
+ "rejectResourceTypes": {
5300
+ "type": "array",
5301
+ "items": {
5302
+ "enum": [
5303
+ "cspviolationreport",
5304
+ "document",
5305
+ "eventsource",
5306
+ "fetch",
5307
+ "font",
5308
+ "image",
5309
+ "manifest",
5310
+ "media",
5311
+ "other",
5312
+ "ping",
5313
+ "prefetch",
5314
+ "preflight",
5315
+ "script",
5316
+ "signedexchange",
5317
+ "stylesheet",
5318
+ "texttrack",
5319
+ "websocket",
5320
+ "xhr"
5321
+ ],
5322
+ "type": "string"
5323
+ }
5324
+ },
5325
+ "requestInterceptors": {
5326
+ "type": "array",
5327
+ "items": {
5328
+ "description": "An array of patterns (using `req.url().match(r.pattern)` to match) and their\ncorresponding responses to use in order to fulfill those requests.",
5329
+ "type": "object",
5330
+ "properties": {
5331
+ "pattern": {
5332
+ "description": "An array of patterns (using `req.url().match(r.pattern)` to match) and their\ncorresponding responses to use in order to fulfill those requests.",
5333
+ "type": "string"
5334
+ },
5335
+ "response": {
5336
+ "$ref": "#/definitions/Partial<ResponseForRequest>"
5337
+ }
5338
+ },
5339
+ "additionalProperties": false,
5340
+ "required": [
5341
+ "pattern",
5342
+ "response"
5343
+ ]
5344
+ }
5345
+ },
5346
+ "scrollPage": {
5347
+ "type": "boolean"
5348
+ },
5349
+ "selector": {
5350
+ "type": "string"
5351
+ },
5352
+ "setExtraHTTPHeaders": {
5353
+ "$ref": "#/definitions/Record<string,string>"
5354
+ },
5355
+ "setJavaScriptEnabled": {
5356
+ "type": "boolean"
5357
+ },
5358
+ "url": {
5359
+ "type": "string"
5360
+ },
5361
+ "userAgent": {
5362
+ "type": "string"
5363
+ },
5364
+ "viewport": {
5365
+ "$ref": "#/definitions/Viewport"
5366
+ },
5367
+ "waitForEvent": {
5368
+ "type": "object",
5369
+ "properties": {
5370
+ "event": {
5371
+ "type": "string"
5372
+ },
5373
+ "timeout": {
5374
+ "type": "number"
5375
+ }
5376
+ },
5377
+ "additionalProperties": false,
5378
+ "required": [
5379
+ "event"
5380
+ ]
5381
+ },
5382
+ "waitForFunction": {
5383
+ "type": "object",
5384
+ "properties": {
5385
+ "fn": {
5386
+ "description": "The function, or statement, to be evaluated in browser context",
5387
+ "type": "string"
5388
+ },
5389
+ "polling": {
5390
+ "description": "An interval at which the pageFunction is executed, defaults to raf.\nIf polling is a number, then it is treated as an interval in milliseconds\nat which the function would be executed. If polling is a string,\nthen it can be one of the following values: \"raf\" or \"mutation\"",
5391
+ "type": [
5392
+ "string",
5393
+ "number"
5394
+ ]
5395
+ },
5396
+ "timeout": {
5397
+ "description": "Maximum time to wait for in milliseconds. Defaults to 30000 (30 seconds).\nPass 0 to disable timeout.",
5398
+ "type": "number"
5399
+ }
5400
+ },
5401
+ "additionalProperties": false,
5402
+ "required": [
5403
+ "fn"
5404
+ ]
5405
+ },
5406
+ "waitForSelector": {
5407
+ "type": "object",
5408
+ "properties": {
5409
+ "hidden": {
5410
+ "type": "boolean"
5411
+ },
5412
+ "selector": {
5413
+ "type": "string"
5414
+ },
5415
+ "timeout": {
5416
+ "type": "number"
5417
+ },
5418
+ "visible": {
5419
+ "type": "boolean"
5420
+ }
5421
+ },
5422
+ "additionalProperties": false,
5423
+ "required": [
5424
+ "selector"
5425
+ ]
5426
+ },
5427
+ "waitForTimeout": {
5428
+ "type": "number"
5429
+ }
5430
+ },
5431
+ "type": "object"
5432
+ }
5433
+ }
5434
+ }
5435
+ },
5436
+ "responses": {
5437
+ "200": {
5438
+ "content": {
5439
+ "image/png": {
5440
+ "schema": {
5441
+ "type": "text"
5442
+ }
5443
+ },
5444
+ "image/jpeg": {
5445
+ "schema": {
5446
+ "type": "text"
5447
+ }
5448
+ },
5449
+ "text/plain": {
5450
+ "schema": {
5451
+ "type": "text"
5452
+ }
5453
+ }
5454
+ },
5455
+ "description": "Response can either be a text/plain base64 encoded body\nor a binary stream with png/jpeg as a content-type"
5456
+ },
5457
+ "400": {
5458
+ "code": 400,
5459
+ "description": "The request contains errors or didn't properly encode content.",
5460
+ "message": "HTTP/1.1 400 Bad Request"
5461
+ },
5462
+ "401": {
5463
+ "code": 401,
5464
+ "description": "The request is missing, or contains bad, authorization credentials.",
5465
+ "message": "HTTP/1.1 401 Unauthorized"
5466
+ },
5467
+ "404": {
5468
+ "code": 404,
5469
+ "description": "Resource couldn't be found.",
5470
+ "message": "HTTP/1.1 404 Not Found"
5471
+ },
5472
+ "408": {
5473
+ "code": 408,
5474
+ "description": "The request took has taken too long to process.",
5475
+ "message": "HTTP/1.1 408 Request Timeout"
5476
+ },
5477
+ "429": {
5478
+ "code": 429,
5479
+ "description": "Too many requests are currently being processed.",
5480
+ "message": "HTTP/1.1 429 Too Many Requests"
5481
+ },
5482
+ "500": {
5483
+ "code": 500,
5484
+ "description": "An internal error occurred when handling the request.",
5485
+ "message": "HTTP/1.1 500 Internal Server Error"
5486
+ }
5487
+ },
5488
+ "summary": "/screenshot /chromium/screenshot",
5489
+ "tags": [
5490
+ "Browser REST APIs"
5491
+ ]
5492
+ }
5493
+ },
5494
+ "?(/) /chromium": {
5495
+ "get": {
5496
+ "definitions": {},
5497
+ "description": "Launch and connect to Chromium with a library like puppeteer or others that work over chrome-devtools-protocol.",
5498
+ "parameters": [
5499
+ {
5500
+ "in": "query",
5501
+ "name": "blockAds",
5502
+ "schema": {
5503
+ "description": "Whether or nor to load ad-blocking extensions for the session.\nThis currently uses uBlock Origin and may cause certain sites\nto not load properly.",
5504
+ "type": "boolean"
5505
+ }
5506
+ },
5507
+ {
5508
+ "in": "query",
5509
+ "name": "launch",
5510
+ "schema": {
5511
+ "description": "Launch options, which can be either an object\nof puppeteer.launch options or playwright.launchServer\noptions, depending on the API. Must be either JSON\nobject, or a base64-encoded JSON object.",
5512
+ "anyOf": [
5513
+ {
5514
+ "$ref": "#/definitions/CDPLaunchOptions"
5515
+ },
5516
+ {
5517
+ "type": "string"
5518
+ }
5519
+ ]
5520
+ }
5521
+ },
5522
+ {
5523
+ "in": "query",
5524
+ "name": "record",
5525
+ "schema": {
5526
+ "description": "Whether or nor to record the session. The browser will run\nin \"head-full\" mode, and recording is started and closed\nvia the embedded browserless API. Please refer to the \"Recording\"\nsection in the live documentation site for more details.",
5527
+ "type": "boolean"
5528
+ }
5529
+ },
5530
+ {
5531
+ "in": "query",
5532
+ "name": "timeout",
5533
+ "schema": {
5534
+ "description": "Override the system-level timeout for this request.\nAccepts a value in milliseconds.",
5535
+ "type": "number"
5536
+ }
5537
+ },
5538
+ {
5539
+ "in": "query",
5540
+ "name": "token",
5541
+ "schema": {
5542
+ "description": "The authorization token",
5543
+ "type": "string"
5544
+ }
5545
+ }
5546
+ ],
5547
+ "requestBody": {
5548
+ "content": {}
5549
+ },
5550
+ "responses": {
5551
+ "101": {
5552
+ "description": "Indicates successful WebSocket upgrade."
5553
+ },
5554
+ "400": {
5555
+ "code": 400,
5556
+ "description": "The request contains errors or didn't properly encode content.",
5557
+ "message": "HTTP/1.1 400 Bad Request"
5558
+ },
5559
+ "401": {
5560
+ "code": 401,
5561
+ "description": "The request is missing, or contains bad, authorization credentials.",
5562
+ "message": "HTTP/1.1 401 Unauthorized"
5563
+ },
5564
+ "404": {
5565
+ "code": 404,
5566
+ "description": "Resource couldn't be found.",
5567
+ "message": "HTTP/1.1 404 Not Found"
5568
+ },
5569
+ "408": {
5570
+ "code": 408,
5571
+ "description": "The request took has taken too long to process.",
5572
+ "message": "HTTP/1.1 408 Request Timeout"
5573
+ },
5574
+ "429": {
5575
+ "code": 429,
5576
+ "description": "Too many requests are currently being processed.",
5577
+ "message": "HTTP/1.1 429 Too Many Requests"
5578
+ },
5579
+ "500": {
5580
+ "code": 500,
5581
+ "description": "An internal error occurred when handling the request.",
5582
+ "message": "HTTP/1.1 500 Internal Server Error"
5583
+ }
5584
+ },
5585
+ "summary": "?(/) /chromium",
5586
+ "tags": [
5587
+ "Browser WebSocket APIs"
5588
+ ]
5589
+ }
5590
+ },
5591
+ "/playwright/chromium /chromium/playwright": {
5592
+ "get": {
5593
+ "definitions": {},
5594
+ "description": "Connect to Chromium with any playwright style library.",
5595
+ "parameters": [
5596
+ {
5597
+ "in": "query",
5598
+ "name": "blockAds",
5599
+ "schema": {
5600
+ "description": "Whether or nor to load ad-blocking extensions for the session.\nThis currently uses uBlock Origin and may cause certain sites\nto not load properly.",
5601
+ "type": "boolean"
5602
+ }
5603
+ },
5604
+ {
5605
+ "in": "query",
5606
+ "name": "launch",
5607
+ "schema": {
5608
+ "description": "Launch options, which can be either an object\nof puppeteer.launch options or playwright.launchServer\noptions, depending on the API. Must be either JSON\nobject, or a base64-encoded JSON object.",
5609
+ "anyOf": [
5610
+ {
5611
+ "$ref": "#/definitions/BrowserServerOptions"
5612
+ },
5613
+ {
5614
+ "type": "string"
5615
+ }
5616
+ ]
5617
+ }
5618
+ },
5619
+ {
5620
+ "in": "query",
5621
+ "name": "record",
5622
+ "schema": {
5623
+ "description": "Whether or nor to record the session. The browser will run\nin \"head-full\" mode, and recording is started and closed\nvia the embedded browserless API. Please refer to the \"Recording\"\nsection in the live documentation site for more details.",
5624
+ "type": "boolean"
5625
+ }
5626
+ },
5627
+ {
5628
+ "in": "query",
5629
+ "name": "timeout",
5630
+ "schema": {
5631
+ "description": "Override the system-level timeout for this request.\nAccepts a value in milliseconds.",
5632
+ "type": "number"
5633
+ }
5634
+ },
5635
+ {
5636
+ "in": "query",
5637
+ "name": "token",
5638
+ "schema": {
5639
+ "description": "The authorization token",
5640
+ "type": "string"
5641
+ }
5642
+ }
5643
+ ],
5644
+ "requestBody": {
5645
+ "content": {}
5646
+ },
5647
+ "responses": {
5648
+ "101": {
5649
+ "description": "Indicates successful WebSocket upgrade."
5650
+ },
5651
+ "400": {
5652
+ "code": 400,
5653
+ "description": "The request contains errors or didn't properly encode content.",
5654
+ "message": "HTTP/1.1 400 Bad Request"
5655
+ },
5656
+ "401": {
5657
+ "code": 401,
5658
+ "description": "The request is missing, or contains bad, authorization credentials.",
5659
+ "message": "HTTP/1.1 401 Unauthorized"
5660
+ },
5661
+ "404": {
5662
+ "code": 404,
5663
+ "description": "Resource couldn't be found.",
5664
+ "message": "HTTP/1.1 404 Not Found"
5665
+ },
5666
+ "408": {
5667
+ "code": 408,
5668
+ "description": "The request took has taken too long to process.",
5669
+ "message": "HTTP/1.1 408 Request Timeout"
5670
+ },
5671
+ "429": {
5672
+ "code": 429,
5673
+ "description": "Too many requests are currently being processed.",
5674
+ "message": "HTTP/1.1 429 Too Many Requests"
5675
+ },
5676
+ "500": {
5677
+ "code": 500,
5678
+ "description": "An internal error occurred when handling the request.",
5679
+ "message": "HTTP/1.1 500 Internal Server Error"
5680
+ }
5681
+ },
5682
+ "summary": "/playwright/chromium /chromium/playwright",
5683
+ "tags": [
5684
+ "Browser WebSocket APIs"
5685
+ ]
5686
+ }
5687
+ },
5688
+ "/playwright/firefox /firefox/playwright": {
5689
+ "get": {
5690
+ "definitions": {},
5691
+ "description": "Connect to Firefox with any playwright-compliant library.",
5692
+ "parameters": [
5693
+ {
5694
+ "in": "query",
5695
+ "name": "blockAds",
5696
+ "schema": {
5697
+ "description": "Whether or nor to load ad-blocking extensions for the session.\nThis currently uses uBlock Origin and may cause certain sites\nto not load properly.",
5698
+ "type": "boolean"
5699
+ }
5700
+ },
5701
+ {
5702
+ "in": "query",
5703
+ "name": "launch",
5704
+ "schema": {
5705
+ "description": "Launch options, which can be either an object\nof puppeteer.launch options or playwright.launchServer\noptions, depending on the API. Must be either JSON\nobject, or a base64-encoded JSON object.",
5706
+ "anyOf": [
5707
+ {
5708
+ "$ref": "#/definitions/BrowserServerOptions"
5709
+ },
5710
+ {
5711
+ "type": "string"
5712
+ }
5713
+ ]
5714
+ }
5715
+ },
5716
+ {
5717
+ "in": "query",
5718
+ "name": "record",
5719
+ "schema": {
5720
+ "description": "Whether or nor to record the session. The browser will run\nin \"head-full\" mode, and recording is started and closed\nvia the embedded browserless API. Please refer to the \"Recording\"\nsection in the live documentation site for more details.",
5721
+ "type": "boolean"
5722
+ }
5723
+ },
5724
+ {
5725
+ "in": "query",
5726
+ "name": "timeout",
5727
+ "schema": {
5728
+ "description": "Override the system-level timeout for this request.\nAccepts a value in milliseconds.",
5729
+ "type": "number"
5730
+ }
5731
+ },
5732
+ {
5733
+ "in": "query",
5734
+ "name": "token",
5735
+ "schema": {
5736
+ "description": "The authorization token",
5737
+ "type": "string"
5738
+ }
5739
+ }
5740
+ ],
5741
+ "requestBody": {
5742
+ "content": {}
5743
+ },
5744
+ "responses": {
5745
+ "101": {
5746
+ "description": "Indicates successful WebSocket upgrade."
5747
+ },
5748
+ "400": {
5749
+ "code": 400,
5750
+ "description": "The request contains errors or didn't properly encode content.",
5751
+ "message": "HTTP/1.1 400 Bad Request"
5752
+ },
5753
+ "401": {
5754
+ "code": 401,
5755
+ "description": "The request is missing, or contains bad, authorization credentials.",
5756
+ "message": "HTTP/1.1 401 Unauthorized"
5757
+ },
5758
+ "404": {
5759
+ "code": 404,
5760
+ "description": "Resource couldn't be found.",
5761
+ "message": "HTTP/1.1 404 Not Found"
5762
+ },
5763
+ "408": {
5764
+ "code": 408,
5765
+ "description": "The request took has taken too long to process.",
5766
+ "message": "HTTP/1.1 408 Request Timeout"
5767
+ },
5768
+ "429": {
5769
+ "code": 429,
5770
+ "description": "Too many requests are currently being processed.",
5771
+ "message": "HTTP/1.1 429 Too Many Requests"
5772
+ },
5773
+ "500": {
5774
+ "code": 500,
5775
+ "description": "An internal error occurred when handling the request.",
5776
+ "message": "HTTP/1.1 500 Internal Server Error"
5777
+ }
5778
+ },
5779
+ "summary": "/playwright/firefox /firefox/playwright",
5780
+ "tags": [
5781
+ "Browser WebSocket APIs"
5782
+ ]
5783
+ }
5784
+ },
5785
+ "/config": {
5786
+ "get": {
5787
+ "definitions": {},
5788
+ "description": "Returns a JSON payload of the current system configuration.",
5789
+ "parameters": [],
5790
+ "requestBody": {
5791
+ "content": {}
5792
+ },
5793
+ "responses": {
5794
+ "200": {
5795
+ "content": {
5796
+ "application/json": {
5797
+ "schema": {
5798
+ "type": "object",
5799
+ "properties": {
5800
+ "allowCORS": {
5801
+ "type": "boolean"
5802
+ },
5803
+ "allowFileProtocol": {
5804
+ "type": "boolean"
5805
+ },
3768
5806
  "allowGetCalls": {
3769
5807
  "type": "boolean"
3770
5808
  },
3771
5809
  "concurrent": {
3772
5810
  "type": "number"
3773
5811
  },
3774
- "data": {
3775
- "type": "string"
3776
- },
3777
- "debug": {
3778
- "type": "string"
3779
- },
3780
- "errorAlertURL": {
3781
- "type": [
3782
- "null",
3783
- "string"
3784
- ]
3785
- },
3786
- "healthFailureURL": {
3787
- "type": [
3788
- "null",
3789
- "string"
3790
- ]
5812
+ "data": {
5813
+ "type": "string"
5814
+ },
5815
+ "debug": {
5816
+ "type": "string"
5817
+ },
5818
+ "errorAlertURL": {
5819
+ "type": [
5820
+ "null",
5821
+ "string"
5822
+ ]
5823
+ },
5824
+ "healthFailureURL": {
5825
+ "type": [
5826
+ "null",
5827
+ "string"
5828
+ ]
5829
+ },
5830
+ "host": {
5831
+ "type": "string"
5832
+ },
5833
+ "maxCPU": {
5834
+ "type": "number"
5835
+ },
5836
+ "maxMemory": {
5837
+ "type": "number"
5838
+ },
5839
+ "metricsJSONPath": {
5840
+ "type": "string"
5841
+ },
5842
+ "port": {
5843
+ "type": "number"
5844
+ },
5845
+ "queued": {
5846
+ "type": "number"
5847
+ },
5848
+ "queuedAlertURL": {
5849
+ "type": [
5850
+ "null",
5851
+ "string"
5852
+ ]
5853
+ },
5854
+ "rejectAlertURL": {
5855
+ "type": [
5856
+ "null",
5857
+ "string"
5858
+ ]
5859
+ },
5860
+ "retries": {
5861
+ "type": "number"
5862
+ },
5863
+ "timeout": {
5864
+ "type": "number"
5865
+ },
5866
+ "timeoutAlertURL": {
5867
+ "type": [
5868
+ "null",
5869
+ "string"
5870
+ ]
5871
+ },
5872
+ "token": {
5873
+ "type": [
5874
+ "null",
5875
+ "string"
5876
+ ]
5877
+ }
5878
+ },
5879
+ "additionalProperties": false,
5880
+ "required": [
5881
+ "allowCORS",
5882
+ "allowFileProtocol",
5883
+ "allowGetCalls",
5884
+ "concurrent",
5885
+ "data",
5886
+ "debug",
5887
+ "errorAlertURL",
5888
+ "healthFailureURL",
5889
+ "host",
5890
+ "maxCPU",
5891
+ "maxMemory",
5892
+ "metricsJSONPath",
5893
+ "port",
5894
+ "queued",
5895
+ "queuedAlertURL",
5896
+ "rejectAlertURL",
5897
+ "retries",
5898
+ "timeout",
5899
+ "timeoutAlertURL",
5900
+ "token"
5901
+ ],
5902
+ "$schema": "http://json-schema.org/draft-07/schema#"
5903
+ }
5904
+ }
5905
+ }
5906
+ },
5907
+ "400": {
5908
+ "code": 400,
5909
+ "description": "The request contains errors or didn't properly encode content.",
5910
+ "message": "HTTP/1.1 400 Bad Request"
5911
+ },
5912
+ "401": {
5913
+ "code": 401,
5914
+ "description": "The request is missing, or contains bad, authorization credentials.",
5915
+ "message": "HTTP/1.1 401 Unauthorized"
5916
+ },
5917
+ "404": {
5918
+ "code": 404,
5919
+ "description": "Resource couldn't be found.",
5920
+ "message": "HTTP/1.1 404 Not Found"
5921
+ },
5922
+ "408": {
5923
+ "code": 408,
5924
+ "description": "The request took has taken too long to process.",
5925
+ "message": "HTTP/1.1 408 Request Timeout"
5926
+ },
5927
+ "429": {
5928
+ "code": 429,
5929
+ "description": "Too many requests are currently being processed.",
5930
+ "message": "HTTP/1.1 429 Too Many Requests"
5931
+ },
5932
+ "500": {
5933
+ "code": 500,
5934
+ "description": "An internal error occurred when handling the request.",
5935
+ "message": "HTTP/1.1 500 Internal Server Error"
5936
+ }
5937
+ },
5938
+ "summary": [
5939
+ "/config"
5940
+ ],
5941
+ "tags": [
5942
+ "Management REST APIs"
5943
+ ]
5944
+ }
5945
+ },
5946
+ "/metrics/total": {
5947
+ "get": {
5948
+ "definitions": {},
5949
+ "description": "Gets total metric details summed from the time the server started.",
5950
+ "parameters": [],
5951
+ "requestBody": {
5952
+ "content": {}
5953
+ },
5954
+ "responses": {
5955
+ "200": {
5956
+ "content": {
5957
+ "application/json": {
5958
+ "schema": {
5959
+ "type": "object",
5960
+ "properties": {
5961
+ "error": {
5962
+ "type": "number"
5963
+ },
5964
+ "estimatedMonthlyUnits": {
5965
+ "type": "number"
3791
5966
  },
3792
- "host": {
3793
- "type": "string"
5967
+ "maxConcurrent": {
5968
+ "type": "number"
3794
5969
  },
3795
- "maxCPU": {
5970
+ "maxTime": {
3796
5971
  "type": "number"
3797
5972
  },
3798
- "maxMemory": {
5973
+ "meanTime": {
3799
5974
  "type": "number"
3800
5975
  },
3801
- "metricsJSONPath": {
3802
- "type": "string"
5976
+ "minTime": {
5977
+ "type": "number"
3803
5978
  },
3804
- "port": {
5979
+ "minutesOfMetricsAvailable": {
3805
5980
  "type": "number"
3806
5981
  },
3807
5982
  "queued": {
3808
5983
  "type": "number"
3809
5984
  },
3810
- "queuedAlertURL": {
3811
- "type": [
3812
- "null",
3813
- "string"
3814
- ]
5985
+ "rejected": {
5986
+ "type": "number"
3815
5987
  },
3816
- "rejectAlertURL": {
3817
- "type": [
3818
- "null",
3819
- "string"
3820
- ]
5988
+ "sessionTimes": {
5989
+ "type": "array",
5990
+ "items": {
5991
+ "type": "number"
5992
+ }
3821
5993
  },
3822
- "retries": {
5994
+ "successful": {
3823
5995
  "type": "number"
3824
5996
  },
3825
- "timeout": {
5997
+ "timedout": {
3826
5998
  "type": "number"
3827
5999
  },
3828
- "timeoutAlertURL": {
3829
- "type": [
3830
- "null",
3831
- "string"
3832
- ]
6000
+ "totalTime": {
6001
+ "type": "number"
3833
6002
  },
3834
- "token": {
3835
- "type": [
3836
- "null",
3837
- "string"
3838
- ]
6003
+ "unhealthy": {
6004
+ "type": "number"
6005
+ },
6006
+ "units": {
6007
+ "type": "number"
3839
6008
  }
3840
6009
  },
3841
6010
  "additionalProperties": false,
3842
6011
  "required": [
3843
- "allowCORS",
3844
- "allowFileProtocol",
3845
- "allowGetCalls",
3846
- "concurrent",
3847
- "data",
3848
- "debug",
3849
- "errorAlertURL",
3850
- "healthFailureURL",
3851
- "host",
3852
- "maxCPU",
3853
- "maxMemory",
3854
- "metricsJSONPath",
3855
- "port",
6012
+ "error",
6013
+ "estimatedMonthlyUnits",
6014
+ "maxConcurrent",
6015
+ "maxTime",
6016
+ "meanTime",
6017
+ "minTime",
6018
+ "minutesOfMetricsAvailable",
3856
6019
  "queued",
3857
- "queuedAlertURL",
3858
- "rejectAlertURL",
3859
- "retries",
3860
- "timeout",
3861
- "timeoutAlertURL",
3862
- "token"
6020
+ "rejected",
6021
+ "sessionTimes",
6022
+ "successful",
6023
+ "timedout",
6024
+ "totalTime",
6025
+ "unhealthy",
6026
+ "units"
3863
6027
  ],
3864
6028
  "$schema": "http://json-schema.org/draft-07/schema#"
3865
6029
  }
@@ -3897,7 +6061,9 @@
3897
6061
  "message": "HTTP/1.1 500 Internal Server Error"
3898
6062
  }
3899
6063
  },
3900
- "summary": "/config",
6064
+ "summary": [
6065
+ "/metrics/total"
6066
+ ],
3901
6067
  "tags": [
3902
6068
  "Management REST APIs"
3903
6069
  ]
@@ -4043,131 +6209,9 @@
4043
6209
  "message": "HTTP/1.1 500 Internal Server Error"
4044
6210
  }
4045
6211
  },
4046
- "summary": "/metrics",
4047
- "tags": [
4048
- "Management REST APIs"
4049
- ]
4050
- }
4051
- },
4052
- "/metrics/total": {
4053
- "get": {
4054
- "definitions": {},
4055
- "description": "Gets total metric details summed from the time the server started.",
4056
- "parameters": [],
4057
- "requestBody": {
4058
- "content": {}
4059
- },
4060
- "responses": {
4061
- "200": {
4062
- "content": {
4063
- "application/json": {
4064
- "schema": {
4065
- "type": "object",
4066
- "properties": {
4067
- "error": {
4068
- "type": "number"
4069
- },
4070
- "estimatedMonthlyUnits": {
4071
- "type": "number"
4072
- },
4073
- "maxConcurrent": {
4074
- "type": "number"
4075
- },
4076
- "maxTime": {
4077
- "type": "number"
4078
- },
4079
- "meanTime": {
4080
- "type": "number"
4081
- },
4082
- "minTime": {
4083
- "type": "number"
4084
- },
4085
- "minutesOfMetricsAvailable": {
4086
- "type": "number"
4087
- },
4088
- "queued": {
4089
- "type": "number"
4090
- },
4091
- "rejected": {
4092
- "type": "number"
4093
- },
4094
- "sessionTimes": {
4095
- "type": "array",
4096
- "items": {
4097
- "type": "number"
4098
- }
4099
- },
4100
- "successful": {
4101
- "type": "number"
4102
- },
4103
- "timedout": {
4104
- "type": "number"
4105
- },
4106
- "totalTime": {
4107
- "type": "number"
4108
- },
4109
- "unhealthy": {
4110
- "type": "number"
4111
- },
4112
- "units": {
4113
- "type": "number"
4114
- }
4115
- },
4116
- "additionalProperties": false,
4117
- "required": [
4118
- "error",
4119
- "estimatedMonthlyUnits",
4120
- "maxConcurrent",
4121
- "maxTime",
4122
- "meanTime",
4123
- "minTime",
4124
- "minutesOfMetricsAvailable",
4125
- "queued",
4126
- "rejected",
4127
- "sessionTimes",
4128
- "successful",
4129
- "timedout",
4130
- "totalTime",
4131
- "unhealthy",
4132
- "units"
4133
- ],
4134
- "$schema": "http://json-schema.org/draft-07/schema#"
4135
- }
4136
- }
4137
- }
4138
- },
4139
- "400": {
4140
- "code": 400,
4141
- "description": "The request contains errors or didn't properly encode content.",
4142
- "message": "HTTP/1.1 400 Bad Request"
4143
- },
4144
- "401": {
4145
- "code": 401,
4146
- "description": "The request is missing, or contains bad, authorization credentials.",
4147
- "message": "HTTP/1.1 401 Unauthorized"
4148
- },
4149
- "404": {
4150
- "code": 404,
4151
- "description": "Resource couldn't be found.",
4152
- "message": "HTTP/1.1 404 Not Found"
4153
- },
4154
- "408": {
4155
- "code": 408,
4156
- "description": "The request took has taken too long to process.",
4157
- "message": "HTTP/1.1 408 Request Timeout"
4158
- },
4159
- "429": {
4160
- "code": 429,
4161
- "description": "Too many requests are currently being processed.",
4162
- "message": "HTTP/1.1 429 Too Many Requests"
4163
- },
4164
- "500": {
4165
- "code": 500,
4166
- "description": "An internal error occurred when handling the request.",
4167
- "message": "HTTP/1.1 500 Internal Server Error"
4168
- }
4169
- },
4170
- "summary": "/metrics/total",
6212
+ "summary": [
6213
+ "/metrics"
6214
+ ],
4171
6215
  "tags": [
4172
6216
  "Management REST APIs"
4173
6217
  ]
@@ -4229,7 +6273,17 @@
4229
6273
  "type": "number"
4230
6274
  },
4231
6275
  "routePath": {
4232
- "type": "string"
6276
+ "anyOf": [
6277
+ {
6278
+ "type": "array",
6279
+ "items": {
6280
+ "type": "string"
6281
+ }
6282
+ },
6283
+ {
6284
+ "type": "string"
6285
+ }
6286
+ ]
4233
6287
  },
4234
6288
  "startedOn": {
4235
6289
  "type": "number"
@@ -4444,7 +6498,9 @@
4444
6498
  "message": "HTTP/1.1 500 Internal Server Error"
4445
6499
  }
4446
6500
  },
4447
- "summary": "/sessions",
6501
+ "summary": [
6502
+ "/sessions"
6503
+ ],
4448
6504
  "tags": [
4449
6505
  "Management REST APIs"
4450
6506
  ]
@@ -4490,13 +6546,15 @@
4490
6546
  "message": "HTTP/1.1 500 Internal Server Error"
4491
6547
  }
4492
6548
  },
4493
- "summary": "/",
6549
+ "summary": [
6550
+ "/"
6551
+ ],
4494
6552
  "tags": [
4495
6553
  "Management REST APIs"
4496
6554
  ]
4497
6555
  }
4498
6556
  },
4499
- "/playwright/webkit": {
6557
+ "/playwright/webkit /webkit/playwright": {
4500
6558
  "get": {
4501
6559
  "definitions": {},
4502
6560
  "description": "Connect to Webkit with any playwright-compliant library.",
@@ -4587,7 +6645,7 @@
4587
6645
  "message": "HTTP/1.1 500 Internal Server Error"
4588
6646
  }
4589
6647
  },
4590
- "summary": "/playwright/webkit",
6648
+ "summary": "/playwright/webkit /webkit/playwright",
4591
6649
  "tags": [
4592
6650
  "Browser WebSocket APIs"
4593
6651
  ]