@browserless.io/browserless 2.12.0-beta-3 → 2.12.0-beta-6

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 (199) hide show
  1. package/build/browserless.d.ts +3 -3
  2. package/build/browserless.js +6 -6
  3. package/build/browsers/chromium.cdp.d.ts +13 -13
  4. package/build/browsers/chromium.cdp.js +79 -67
  5. package/build/browsers/chromium.playwright.d.ts +12 -12
  6. package/build/browsers/chromium.playwright.js +44 -36
  7. package/build/browsers/firefox.playwright.d.ts +12 -12
  8. package/build/browsers/firefox.playwright.js +44 -36
  9. package/build/browsers/index.d.ts +17 -16
  10. package/build/browsers/index.js +63 -42
  11. package/build/browsers/webkit.playwright.d.ts +12 -12
  12. package/build/browsers/webkit.playwright.js +47 -39
  13. package/build/config.d.ts +65 -63
  14. package/build/config.js +162 -102
  15. package/build/file-system.d.ts +4 -4
  16. package/build/file-system.js +8 -8
  17. package/build/hooks.d.ts +2 -2
  18. package/build/hooks.js +4 -4
  19. package/build/limiter.d.ts +4 -4
  20. package/build/limiter.js +10 -10
  21. package/build/logger.d.ts +6 -6
  22. package/build/logger.js +12 -12
  23. package/build/metrics.d.ts +12 -12
  24. package/build/metrics.js +23 -23
  25. package/build/monitoring.d.ts +4 -4
  26. package/build/monitoring.js +8 -8
  27. package/build/router.d.ts +8 -8
  28. package/build/router.js +74 -70
  29. package/build/routes/chrome/http/pdf.post.body.json +8 -8
  30. package/build/routes/chrome/http/scrape.post.body.json +8 -8
  31. package/build/routes/chrome/http/screenshot.post.body.json +8 -8
  32. package/build/routes/chromium/http/content.post.body.json +8 -8
  33. package/build/routes/chromium/http/pdf.post.body.json +8 -8
  34. package/build/routes/chromium/http/scrape.post.body.json +8 -8
  35. package/build/routes/chromium/http/screenshot.post.body.json +8 -8
  36. package/build/routes/firefox/ws/playwright.d.ts +1 -1
  37. package/build/routes/firefox/ws/playwright.js +2 -2
  38. package/build/routes/management/http/active.get.d.ts +1 -1
  39. package/build/routes/management/http/active.get.js +3 -1
  40. package/build/routes/management/http/config.get.d.ts +1 -1
  41. package/build/routes/management/http/config.get.js +2 -2
  42. package/build/routes/management/http/metrics-total.get.d.ts +1 -1
  43. package/build/routes/management/http/metrics-total.get.js +2 -2
  44. package/build/routes/management/http/metrics.get.d.ts +1 -1
  45. package/build/routes/management/http/metrics.get.js +2 -2
  46. package/build/routes/management/http/pressure.get.d.ts +1 -1
  47. package/build/routes/management/http/pressure.get.js +2 -2
  48. package/build/routes/management/http/sessions.get.d.ts +1 -1
  49. package/build/routes/management/http/sessions.get.js +2 -2
  50. package/build/routes/management/http/static.get.d.ts +1 -1
  51. package/build/routes/management/http/static.get.js +2 -2
  52. package/build/routes/webkit/ws/playwright.d.ts +1 -1
  53. package/build/routes/webkit/ws/playwright.js +2 -2
  54. package/build/server.d.ts +5 -5
  55. package/build/server.js +11 -11
  56. package/build/shared/browser.ws.d.ts +1 -1
  57. package/build/shared/browser.ws.js +3 -1
  58. package/build/shared/chromium.playwright.ws.d.ts +1 -1
  59. package/build/shared/chromium.playwright.ws.js +2 -2
  60. package/build/shared/chromium.ws.d.ts +1 -1
  61. package/build/shared/chromium.ws.js +3 -1
  62. package/build/shared/content.http.d.ts +1 -1
  63. package/build/shared/content.http.js +2 -2
  64. package/build/shared/download.http.d.ts +1 -1
  65. package/build/shared/download.http.js +60 -58
  66. package/build/shared/function.http.d.ts +1 -1
  67. package/build/shared/function.http.js +2 -2
  68. package/build/shared/json-list.http.d.ts +1 -1
  69. package/build/shared/json-list.http.js +2 -2
  70. package/build/shared/json-new.http.d.ts +1 -1
  71. package/build/shared/json-new.http.js +2 -2
  72. package/build/shared/json-protocol.http.d.ts +1 -1
  73. package/build/shared/json-protocol.http.js +2 -2
  74. package/build/shared/json-version.http.d.ts +1 -1
  75. package/build/shared/json-version.http.js +2 -2
  76. package/build/shared/page.ws.d.ts +1 -1
  77. package/build/shared/page.ws.js +3 -1
  78. package/build/shared/pdf.http.d.ts +1 -1
  79. package/build/shared/pdf.http.js +2 -2
  80. package/build/shared/performance.http.d.ts +1 -1
  81. package/build/shared/performance.http.js +2 -2
  82. package/build/shared/scrape.http.d.ts +1 -1
  83. package/build/shared/scrape.http.js +2 -2
  84. package/build/shared/screenshot.http.d.ts +1 -1
  85. package/build/shared/screenshot.http.js +2 -2
  86. package/build/shared/utils/function/client.d.ts +1 -1
  87. package/build/shared/utils/function/client.js +3 -1
  88. package/build/shim.d.ts +1 -1
  89. package/build/shim.js +2 -2
  90. package/build/token.d.ts +3 -3
  91. package/build/token.js +6 -6
  92. package/build/types.d.ts +5 -5
  93. package/build/webhooks.d.ts +2 -2
  94. package/build/webhooks.js +4 -4
  95. package/extensions/ublock/_locales/eu/messages.json +4 -4
  96. package/extensions/ublock/_locales/hi/messages.json +5 -5
  97. package/extensions/ublock/_locales/kn/messages.json +11 -11
  98. package/extensions/ublock/_locales/nb/messages.json +2 -2
  99. package/extensions/ublock/_locales/no/messages.json +2 -2
  100. package/extensions/ublock/_locales/ro/messages.json +1 -1
  101. package/extensions/ublock/_locales/sv/messages.json +1 -1
  102. package/extensions/ublock/_locales/zh_CN/messages.json +2 -2
  103. package/extensions/ublock/assets/assets.json +3 -8
  104. package/extensions/ublock/assets/resources/scriptlets.js +128 -31
  105. package/extensions/ublock/assets/thirdparties/easylist/easylist.txt +4870 -3560
  106. package/extensions/ublock/assets/thirdparties/easylist/easyprivacy.txt +662 -173
  107. package/extensions/ublock/assets/thirdparties/pgl.yoyo.org/as/serverlist +10 -42
  108. package/extensions/ublock/assets/thirdparties/publicsuffix.org/list/effective_tld_names.dat +241 -80
  109. package/extensions/ublock/assets/thirdparties/urlhaus-filter/urlhaus-filter-online.txt +2093 -1224
  110. package/extensions/ublock/assets/ublock/badlists.txt +2 -0
  111. package/extensions/ublock/assets/ublock/badware.min.txt +408 -287
  112. package/extensions/ublock/assets/ublock/filters.min.txt +947 -645
  113. package/extensions/ublock/assets/ublock/privacy.min.txt +43 -8
  114. package/extensions/ublock/assets/ublock/quick-fixes.min.txt +55 -93
  115. package/extensions/ublock/assets/ublock/unbreak.min.txt +52 -19
  116. package/extensions/ublock/css/1p-filters.css +2 -0
  117. package/extensions/ublock/css/codemirror.css +2 -2
  118. package/extensions/ublock/css/dashboard.css +2 -5
  119. package/extensions/ublock/css/epicker-ui.css +3 -3
  120. package/extensions/ublock/css/fa-icons.css +3 -0
  121. package/extensions/ublock/css/logger-ui-inspector.css +1 -0
  122. package/extensions/ublock/css/logger-ui.css +44 -32
  123. package/extensions/ublock/img/fontawesome/fontawesome-defs.svg +1 -0
  124. package/extensions/ublock/js/3p-filters.js +4 -5
  125. package/extensions/ublock/js/biditrie.js +16 -11
  126. package/extensions/ublock/js/cachestorage.js +37 -37
  127. package/extensions/ublock/js/contentscript-extra.js +0 -2
  128. package/extensions/ublock/js/contentscript.js +1 -6
  129. package/extensions/ublock/js/epicker-ui.js +28 -36
  130. package/extensions/ublock/js/fa-icons.js +1 -0
  131. package/extensions/ublock/js/hntrie.js +19 -13
  132. package/extensions/ublock/js/logger-ui-inspector.js +6 -13
  133. package/extensions/ublock/js/logger-ui.js +264 -264
  134. package/extensions/ublock/js/s14e-serializer.js +267 -264
  135. package/extensions/ublock/js/scriptlet-filtering.js +12 -18
  136. package/extensions/ublock/js/scriptlets/dom-inspector.js +1 -5
  137. package/extensions/ublock/js/scriptlets/epicker.js +53 -59
  138. package/extensions/ublock/js/start.js +0 -8
  139. package/extensions/ublock/js/storage.js +2 -9
  140. package/extensions/ublock/js/vapi-background.js +19 -20
  141. package/extensions/ublock/js/vapi-common.js +2 -7
  142. package/extensions/ublock/js/vapi.js +0 -4
  143. package/extensions/ublock/js/webext.js +23 -15
  144. package/extensions/ublock/logger-ui.html +24 -15
  145. package/extensions/ublock/manifest.json +2 -3
  146. package/package.json +4 -4
  147. package/src/browserless.ts +6 -6
  148. package/src/browsers/chromium.cdp.ts +35 -25
  149. package/src/browsers/chromium.playwright.ts +30 -23
  150. package/src/browsers/firefox.playwright.ts +30 -24
  151. package/src/browsers/index.ts +81 -50
  152. package/src/browsers/webkit.playwright.ts +33 -26
  153. package/src/config.ts +166 -104
  154. package/src/file-system.ts +9 -9
  155. package/src/hooks.ts +4 -4
  156. package/src/limiter.ts +12 -12
  157. package/src/logger.ts +12 -12
  158. package/src/metrics.ts +23 -23
  159. package/src/monitoring.ts +9 -9
  160. package/src/router.ts +31 -31
  161. package/src/routes/chrome/tests/websocket.spec.ts +2 -2
  162. package/src/routes/chromium/tests/websocket.spec.ts +2 -2
  163. package/src/routes/firefox/tests/websocket.spec.ts +2 -4
  164. package/src/routes/firefox/ws/playwright.ts +3 -3
  165. package/src/routes/management/http/active.get.ts +3 -2
  166. package/src/routes/management/http/config.get.ts +2 -2
  167. package/src/routes/management/http/metrics-total.get.ts +2 -2
  168. package/src/routes/management/http/metrics.get.ts +2 -2
  169. package/src/routes/management/http/pressure.get.ts +2 -2
  170. package/src/routes/management/http/sessions.get.ts +2 -2
  171. package/src/routes/management/http/static.get.ts +3 -3
  172. package/src/routes/webkit/tests/websocket.spec.ts +2 -3
  173. package/src/routes/webkit/ws/playwright.ts +3 -3
  174. package/src/server.ts +14 -16
  175. package/src/shared/browser.ws.ts +4 -2
  176. package/src/shared/chromium.playwright.ws.ts +3 -3
  177. package/src/shared/chromium.ws.ts +4 -2
  178. package/src/shared/content.http.ts +3 -3
  179. package/src/shared/download.http.ts +4 -3
  180. package/src/shared/function.http.ts +3 -3
  181. package/src/shared/json-list.http.ts +2 -2
  182. package/src/shared/json-new.http.ts +2 -2
  183. package/src/shared/json-protocol.http.ts +2 -6
  184. package/src/shared/json-version.http.ts +2 -6
  185. package/src/shared/page.ws.ts +4 -2
  186. package/src/shared/pdf.http.ts +3 -3
  187. package/src/shared/performance.http.ts +3 -3
  188. package/src/shared/scrape.http.ts +3 -3
  189. package/src/shared/screenshot.http.ts +3 -3
  190. package/src/shared/utils/function/client.ts +3 -1
  191. package/src/shim.ts +2 -2
  192. package/src/token.ts +7 -7
  193. package/src/types.ts +8 -8
  194. package/src/utils.ts +1 -1
  195. package/src/webhooks.ts +4 -4
  196. package/static/docs/swagger.json +1 -1
  197. package/static/docs/swagger.min.json +1 -1
  198. package/static/function/client.js +3 -1
  199. package/static/function/index.html +3 -1
@@ -19,10 +19,6 @@
19
19
  Home: https://github.com/gorhill/uBlock
20
20
  */
21
21
 
22
- /* globals browser */
23
-
24
- 'use strict';
25
-
26
22
  /******************************************************************************/
27
23
  /******************************************************************************/
28
24
 
@@ -31,7 +27,7 @@
31
27
  /******************************************************************************/
32
28
 
33
29
  if ( typeof vAPI !== 'object' ) { return; }
34
- if ( typeof vAPI === null ) { return; }
30
+ if ( vAPI === null ) { return; }
35
31
  if ( vAPI.domFilterer instanceof Object === false ) { return; }
36
32
 
37
33
  if ( vAPI.inspectorFrame ) { return; }
@@ -19,19 +19,12 @@
19
19
  Home: https://github.com/gorhill/uBlock
20
20
  */
21
21
 
22
- /* global CSS */
23
-
24
- 'use strict';
25
-
26
- /******************************************************************************/
27
- /******************************************************************************/
28
-
29
22
  (async ( ) => {
30
23
 
31
24
  /******************************************************************************/
32
25
 
33
26
  if ( typeof vAPI !== 'object' ) { return; }
34
- if ( typeof vAPI === null ) { return; }
27
+ if ( vAPI === null ) { return; }
35
28
 
36
29
  if ( vAPI.pickerFrame ) { return; }
37
30
  vAPI.pickerFrame = true;
@@ -902,6 +895,7 @@ const onOptimizeCandidates = function(details) {
902
895
  if ( r !== 0 ) { return r; }
903
896
  return a.selector.length - b.selector.length;
904
897
  });
898
+
905
899
  pickerFramePort.postMessage({
906
900
  what: 'candidatesOptimized',
907
901
  candidates: results.map(a => a.selector),
@@ -1163,59 +1157,59 @@ vAPI.shutdown.add(quitPicker);
1163
1157
 
1164
1158
  const onDialogMessage = function(msg) {
1165
1159
  switch ( msg.what ) {
1166
- case 'start':
1167
- startPicker();
1168
- if ( pickerFramePort === null ) { break; }
1169
- if ( targetElements.length === 0 ) {
1170
- highlightElements([], true);
1171
- }
1172
- break;
1173
- case 'optimizeCandidates':
1174
- onOptimizeCandidates(msg);
1175
- break;
1176
- case 'dialogCreate':
1177
- filterToDOMInterface.queryAll(msg);
1178
- filterToDOMInterface.preview(true, true);
1179
- quitPicker();
1180
- break;
1181
- case 'dialogSetFilter': {
1182
- const resultset = filterToDOMInterface.queryAll(msg) || [];
1183
- highlightElements(resultset.map(a => a.elem), true);
1184
- if ( msg.filter === '!' ) { break; }
1185
- pickerFramePort.postMessage({
1186
- what: 'resultsetDetails',
1187
- count: resultset.length,
1188
- opt: resultset.length !== 0 ? resultset[0].opt : undefined,
1189
- });
1190
- break;
1160
+ case 'start':
1161
+ startPicker();
1162
+ if ( pickerFramePort === null ) { break; }
1163
+ if ( targetElements.length === 0 ) {
1164
+ highlightElements([], true);
1191
1165
  }
1192
- case 'quitPicker':
1193
- filterToDOMInterface.preview(false);
1166
+ break;
1167
+ case 'optimizeCandidates':
1168
+ onOptimizeCandidates(msg);
1169
+ break;
1170
+ case 'dialogCreate':
1171
+ filterToDOMInterface.queryAll(msg);
1172
+ filterToDOMInterface.preview(true, true);
1173
+ quitPicker();
1174
+ break;
1175
+ case 'dialogSetFilter': {
1176
+ const resultset = filterToDOMInterface.queryAll(msg) || [];
1177
+ highlightElements(resultset.map(a => a.elem), true);
1178
+ if ( msg.filter === '!' ) { break; }
1179
+ pickerFramePort.postMessage({
1180
+ what: 'resultsetDetails',
1181
+ count: resultset.length,
1182
+ opt: resultset.length !== 0 ? resultset[0].opt : undefined,
1183
+ });
1184
+ break;
1185
+ }
1186
+ case 'quitPicker':
1187
+ filterToDOMInterface.preview(false);
1188
+ quitPicker();
1189
+ break;
1190
+ case 'highlightElementAtPoint':
1191
+ highlightElementAtPoint(msg.mx, msg.my);
1192
+ break;
1193
+ case 'unhighlight':
1194
+ highlightElements([]);
1195
+ break;
1196
+ case 'filterElementAtPoint':
1197
+ filterElementAtPoint(msg.mx, msg.my, msg.broad);
1198
+ break;
1199
+ case 'zapElementAtPoint':
1200
+ zapElementAtPoint(msg.mx, msg.my, msg.options);
1201
+ if ( msg.options.highlight !== true && msg.options.stay !== true ) {
1194
1202
  quitPicker();
1195
- break;
1196
- case 'highlightElementAtPoint':
1197
- highlightElementAtPoint(msg.mx, msg.my);
1198
- break;
1199
- case 'unhighlight':
1200
- highlightElements([]);
1201
- break;
1202
- case 'filterElementAtPoint':
1203
- filterElementAtPoint(msg.mx, msg.my, msg.broad);
1204
- break;
1205
- case 'zapElementAtPoint':
1206
- zapElementAtPoint(msg.mx, msg.my, msg.options);
1207
- if ( msg.options.highlight !== true && msg.options.stay !== true ) {
1208
- quitPicker();
1209
- }
1210
- break;
1211
- case 'togglePreview':
1212
- filterToDOMInterface.preview(msg.state);
1213
- if ( msg.state === false ) {
1214
- highlightElements(targetElements, true);
1215
- }
1216
- break;
1217
- default:
1218
- break;
1203
+ }
1204
+ break;
1205
+ case 'togglePreview':
1206
+ filterToDOMInterface.preview(msg.state);
1207
+ if ( msg.state === false ) {
1208
+ highlightElements(targetElements, true);
1209
+ }
1210
+ break;
1211
+ default:
1212
+ break;
1219
1213
  }
1220
1214
  };
1221
1215
 
@@ -45,7 +45,6 @@ import { filteringBehaviorChanged } from './broadcast.js';
45
45
  import cacheStorage from './cachestorage.js';
46
46
  import { ubolog } from './console.js';
47
47
  import contextMenu from './contextmenu.js';
48
- import lz4Codec from './lz4.js';
49
48
  import { redirectEngine } from './redirect-engine.js';
50
49
  import staticFilteringReverseLookup from './reverselookup.js';
51
50
  import staticExtFilteringEngine from './static-ext-filtering.js';
@@ -490,13 +489,6 @@ await initializeTabs();
490
489
  // Start network observers.
491
490
  webRequest.start();
492
491
 
493
- // Ensure that the resources allocated for decompression purpose (likely
494
- // large buffers) are garbage-collectable immediately after launch.
495
- // Otherwise I have observed that it may take quite a while before the
496
- // garbage collection of these resources kicks in. Relinquishing as soon
497
- // as possible ensure minimal memory usage baseline.
498
- lz4Codec.relinquish();
499
-
500
492
  // Force an update of the context menu according to the currently
501
493
  // active tab.
502
494
  contextMenu.update();
@@ -38,7 +38,6 @@ import cosmeticFilteringEngine from './cosmetic-filtering.js';
38
38
  import { hostnameFromURI } from './uri-utils.js';
39
39
  import io from './assets.js';
40
40
  import logger from './logger.js';
41
- import lz4Codec from './lz4.js';
42
41
  import publicSuffixList from '../lib/publicsuffixlist/publicsuffixlist.js';
43
42
  import punycode from '../lib/punycode.js';
44
43
  import { redirectEngine } from './redirect-engine.js';
@@ -605,14 +604,10 @@ onBroadcast(msg => {
605
604
  this.hiddenSettings.autoCommentFilterTemplate.indexOf('{{') !== -1
606
605
  ) {
607
606
  const d = new Date();
608
- // Date in YYYY-MM-DD format - https://stackoverflow.com/a/50130338
609
- const ISO8601Date = new Date(d.getTime() +
610
- (d.getTimezoneOffset()*60000)).toISOString().split('T')[0];
611
607
  const url = new URL(options.docURL);
612
- comment =
613
- '! ' +
608
+ comment = '! ' +
614
609
  this.hiddenSettings.autoCommentFilterTemplate
615
- .replace('{{date}}', ISO8601Date)
610
+ .replace('{{date}}', d.toLocaleDateString(undefined, { dateStyle: 'medium' }))
616
611
  .replace('{{time}}', d.toLocaleTimeString())
617
612
  .replace('{{hostname}}', url.hostname)
618
613
  .replace('{{origin}}', url.origin)
@@ -932,7 +927,6 @@ onBroadcast(msg => {
932
927
  });
933
928
 
934
929
  µb.selfieManager.destroy();
935
- lz4Codec.relinquish();
936
930
  µb.compiledFormatChanged = false;
937
931
 
938
932
  loadingPromise = undefined;
@@ -1328,7 +1322,6 @@ onBroadcast(msg => {
1328
1322
  staticNetFilteringEngine.toSelfie()
1329
1323
  ),
1330
1324
  ]);
1331
- lz4Codec.relinquish();
1332
1325
  µb.selfieIsInvalid = false;
1333
1326
  ubolog('Filtering engine selfie created');
1334
1327
  };
@@ -22,14 +22,10 @@
22
22
 
23
23
  // For background page
24
24
 
25
- /* globals browser */
26
-
27
- 'use strict';
28
-
29
25
  /******************************************************************************/
30
26
 
31
- import webext from './webext.js';
32
27
  import { ubolog } from './console.js';
28
+ import webext from './webext.js';
33
29
 
34
30
  /******************************************************************************/
35
31
 
@@ -47,6 +43,9 @@ if ( vAPI.canWASM === false ) {
47
43
 
48
44
  vAPI.supportsUserStylesheets = vAPI.webextFlavor.soup.has('user_stylesheet');
49
45
 
46
+ const hasOwnProperty = (o, p) =>
47
+ Object.prototype.hasOwnProperty.call(o, p);
48
+
50
49
  /******************************************************************************/
51
50
 
52
51
  vAPI.app = {
@@ -191,9 +190,9 @@ vAPI.browserSettings = (( ) => {
191
190
 
192
191
  set: function(details) {
193
192
  for ( const setting in details ) {
194
- if ( details.hasOwnProperty(setting) === false ) { continue; }
193
+ if ( hasOwnProperty(details, setting) === false ) { continue; }
195
194
  switch ( setting ) {
196
- case 'prefetching':
195
+ case 'prefetching': {
197
196
  const enabled = !!details[setting];
198
197
  if ( enabled ) {
199
198
  bp.network.networkPredictionEnabled.clear({
@@ -209,9 +208,9 @@ vAPI.browserSettings = (( ) => {
209
208
  vAPI.prefetching(enabled);
210
209
  }
211
210
  break;
212
-
213
- case 'hyperlinkAuditing':
214
- if ( !!details[setting] ) {
211
+ }
212
+ case 'hyperlinkAuditing': {
213
+ if ( details[setting] ) {
215
214
  bp.websites.hyperlinkAuditingEnabled.clear({
216
215
  scope: 'regular',
217
216
  });
@@ -222,7 +221,7 @@ vAPI.browserSettings = (( ) => {
222
221
  });
223
222
  }
224
223
  break;
225
-
224
+ }
226
225
  case 'webrtcIPAddress': {
227
226
  // https://github.com/uBlockOrigin/uBlock-issues/issues/1928
228
227
  // https://www.reddit.com/r/uBlockOrigin/comments/sl7p74/
@@ -314,7 +313,7 @@ vAPI.Tabs = class {
314
313
  }
315
314
  this.onRemovedHandler(tabId, details);
316
315
  });
317
- }
316
+ }
318
317
 
319
318
  async executeScript(...args) {
320
319
  let result;
@@ -869,8 +868,8 @@ if ( webext.browserAction instanceof Object ) {
869
868
  const hasUnprocessedRequest = vAPI.net && vAPI.net.hasUnprocessedRequest(tabId);
870
869
  const { parts, state } = details;
871
870
  const { badge, color } = hasUnprocessedRequest
872
- ? { badge: '!', color: '#FC0' }
873
- : details;
871
+ ? { badge: '!', color: '#FC0' }
872
+ : details;
874
873
 
875
874
  if ( browserAction.setIcon !== undefined ) {
876
875
  if ( parts === undefined || (parts & 0b0001) !== 0 ) {
@@ -1029,7 +1028,7 @@ vAPI.messaging = {
1029
1028
  });
1030
1029
  break;
1031
1030
  }
1032
- case 'userCSS':
1031
+ case 'userCSS': {
1033
1032
  if ( tabId === undefined ) { break; }
1034
1033
  const promises = [];
1035
1034
  if ( msg.add ) {
@@ -1060,6 +1059,9 @@ vAPI.messaging = {
1060
1059
  });
1061
1060
  break;
1062
1061
  }
1062
+ default:
1063
+ break;
1064
+ }
1063
1065
  },
1064
1066
 
1065
1067
  // Use a wrapper to avoid closure and to allow reuse.
@@ -1217,7 +1219,7 @@ vAPI.Net = class {
1217
1219
  {
1218
1220
  const wrrt = browser.webRequest.ResourceType;
1219
1221
  for ( const typeKey in wrrt ) {
1220
- if ( wrrt.hasOwnProperty(typeKey) ) {
1222
+ if ( hasOwnProperty(wrrt, typeKey) ) {
1221
1223
  this.validTypes.add(wrrt[typeKey]);
1222
1224
  }
1223
1225
  }
@@ -1520,10 +1522,7 @@ vAPI.localStorage = {
1520
1522
  if ( this.cache instanceof Promise ) { return this.cache; }
1521
1523
  if ( this.cache instanceof Object ) { return this.cache; }
1522
1524
  this.cache = vAPI.storage.get('localStorage').then(bin => {
1523
- this.cache = bin instanceof Object &&
1524
- bin.localStorage instanceof Object
1525
- ? bin.localStorage
1526
- : {};
1525
+ this.cache = bin && bin.localStorage || {};
1527
1526
  });
1528
1527
  return this.cache;
1529
1528
  },
@@ -22,19 +22,14 @@
22
22
 
23
23
  // For background page or non-background pages
24
24
 
25
- /* global browser */
26
-
27
- 'use strict';
28
-
29
- /******************************************************************************/
30
25
  /******************************************************************************/
31
26
 
32
27
  vAPI.T0 = Date.now();
33
28
 
34
- /******************************************************************************/
35
-
36
29
  vAPI.setTimeout = vAPI.setTimeout || self.setTimeout.bind(self);
37
30
 
31
+ /******************************************************************************/
32
+
38
33
  vAPI.defer = {
39
34
  create(callback) {
40
35
  return new this.Client(callback);
@@ -19,10 +19,6 @@
19
19
  Home: https://github.com/gorhill/uBlock
20
20
  */
21
21
 
22
- 'use strict';
23
-
24
- /* global HTMLDocument, XMLDocument */
25
-
26
22
  // For background page, auxiliary pages, and content scripts.
27
23
 
28
24
  /******************************************************************************/
@@ -24,29 +24,37 @@
24
24
 
25
25
  const promisifyNoFail = function(thisArg, fnName, outFn = r => r) {
26
26
  const fn = thisArg[fnName];
27
- return function() {
27
+ return function(...args) {
28
28
  return new Promise(resolve => {
29
- fn.call(thisArg, ...arguments, function() {
30
- if ( chrome.runtime.lastError instanceof Object ) {
31
- void chrome.runtime.lastError.message;
32
- }
33
- resolve(outFn(...arguments));
34
- });
29
+ try {
30
+ fn.call(thisArg, ...args, function(...args) {
31
+ void chrome.runtime.lastError;
32
+ resolve(outFn(...args));
33
+ });
34
+ } catch(ex) {
35
+ console.error(ex);
36
+ resolve(outFn());
37
+ }
35
38
  });
36
39
  };
37
40
  };
38
41
 
39
42
  const promisify = function(thisArg, fnName) {
40
43
  const fn = thisArg[fnName];
41
- return function() {
44
+ return function(...args) {
42
45
  return new Promise((resolve, reject) => {
43
- fn.call(thisArg, ...arguments, function() {
44
- const lastError = chrome.runtime.lastError;
45
- if ( lastError instanceof Object ) {
46
- return reject(lastError.message);
47
- }
48
- resolve(...arguments);
49
- });
46
+ try {
47
+ fn.call(thisArg, ...args, function(...args) {
48
+ const lastError = chrome.runtime.lastError;
49
+ if ( lastError instanceof Object ) {
50
+ return reject(lastError.message);
51
+ }
52
+ resolve(...args);
53
+ });
54
+ } catch(ex) {
55
+ console.error(ex);
56
+ resolve();
57
+ }
50
58
  });
51
59
  };
52
60
  };
@@ -20,13 +20,16 @@
20
20
  <option value="0" data-i18n="logAll">
21
21
  <option value="-1" data-i18n="logBehindTheScene">
22
22
  <option value="_" data-i18n="loggerCurrentTab">
23
- </select>
23
+ </select>&ensp;
24
24
  <button id="refresh" class="iconified notext disabled needdom" data-i18n-title="loggerReloadTip" type="button"><span class="fa-icon">refresh</span><span class="hover"></span></button>
25
25
  <button id="showdom" class="iconified notext disabled needdom" data-i18n-title="loggerDomInspectorTip" type="button"><span class="fa-icon">code</span><span class="hover"></span></button>
26
26
  <button id="showpopup" class="iconified notext disabled needdom" data-i18n-title="loggerPopupPanelTip" type="button"><span class="fa-icon"><svg><use href="/img/ublock-defs.svg#ubo-solid"></use></svg></span><span class="hover"></span></button>
27
27
  </div>
28
28
  <div>
29
- <a id="info" class="button fa-icon" href="https://github.com/gorhill/uBlock/wiki/The-logger" target="_blank" data-i18n-title="loggerInfoTip">info-circle</a>
29
+ <button class="logConsole iconified notext" title="Show/hide console" type="button"><span class="fa-icon">terminal</span><span class="hover"></span></button>
30
+ </div>
31
+ <div>
32
+ <a class="wikilink fa-icon" href="https://github.com/gorhill/uBlock/wiki/The-logger" target="_blank" data-i18n-title="loggerInfoTip">book</a>
30
33
  </div>
31
34
  </div>
32
35
 
@@ -51,7 +54,7 @@
51
54
  <button class="iconified notext vCompactToggler"><span class="fa-icon">double-angle-up</span><span class="hover"></span></button>
52
55
  <button id="clean" class="iconified notext disabled"><span class="fa-icon">times</span><span class="hover"></span></button>
53
56
  <button id="clear" class="iconified notext disabled" data-i18n-title="loggerClearTip"><span class="fa-icon">eraser</span><span class="hover"></span></button>
54
- <button id="pause" class="iconified notext"><span class="fa-icon" data-i18n-title="loggerPauseTip">pause-circle-o</span><span class="fa-icon" data-i18n-title="loggerUnpauseTip">play-circle-o</span><span class="hover"></span></button>
57
+ <button id="pause" class="iconified notext"><span class="fa-icon" data-i18n-title="loggerPauseTip">pause-circle-o</span><span class="fa-icon" data-i18n-title="loggerUnpauseTip">play-circle-o</span><span class="hover"></span></button>&ensp;
55
58
  <span id="filterExprGroup">
56
59
  <button id="filterButton" class="iconified notext" data-i18n-title="loggerRowFiltererButtonTip"><span class="fa-icon">filter</span><span class="hover"></span></button>
57
60
  <span id="filterInput">
@@ -83,9 +86,6 @@
83
86
  </span>
84
87
  </span>
85
88
  </div>
86
- <div>
87
- <button id="logLevel" class="iconified notext" title="Toggle verbose mode" type="button"><span class="fa-icon">volume-up</span><span class="hover"></span></button>
88
- </div>
89
89
  <div>
90
90
  <button id="loggerStats" class="iconified notext" style="display: none;"><span class="fa-icon">bar-chart</span><span class="hover"></span></button>
91
91
  <button id="loggerExport" class="iconified notext"><span class="fa-icon">clipboard</span><span class="hover"></span></button>
@@ -104,7 +104,18 @@
104
104
  </div>
105
105
  </div>
106
106
  </div>
107
- <div class="entryTools" style="right:10%;top:20%"></div>
107
+ </div>
108
+ <div class="entryTools inspector"></div>
109
+ <div id="infoInspector" class="inspector">
110
+ <div class="permatoolbar">
111
+ <div>
112
+ <button id="clearConsole" class="iconified notext"><span class="fa-icon">eraser</span><span class="hover"></span></button>
113
+ <button id="logLevel" class="iconified notext" title="Toggle verbose mode" type="button"><span class="fa-icon">volume-up</span><span class="hover"></span></button>&ensp;
114
+ <input type="search" placeholder="Filter output" spellcheck="false">
115
+ </div>
116
+ </div>
117
+ <div class="vscrollable">
118
+ </div>
108
119
  </div>
109
120
  <iframe id="popupContainer"></iframe>
110
121
  </div>
@@ -120,17 +131,15 @@
120
131
  <div id="logEntryTemplate"><div class="fields"><span></span>&#8203;<span></span>&#8203;<span></span>&#8203;<span></span>&#8203;<span></span>&#8203;<span></span>&#8203;<span></span>&#8203;<span></span></div></div>
121
132
 
122
133
  <div class="netFilteringDialog" data-pane="details">
123
- <div class="dialogControls">
124
- <div class="moveBand"></div>
125
- <div class="closeButton"><svg viewBox="0 0 64 64"><path d="M 16 16 L 48 48 M 16 48 L 48 16" /></div>
126
- </div>
127
134
  <div class="hide preview"><span>click to preview</span></div>
128
135
  <div class="headers">
129
- &ensp;
130
- <span class="header details" data-pane="details" data-i18n="loggerEntryDetailsHeader"></span>
131
- <span class="header dynamic" data-pane="dynamic" data-i18n="loggerURLFilteringHeader"></span>
132
- <span class="header static" data-pane="static" data-i18n="loggerStaticFilteringHeader"></span>
136
+ <span>
137
+ <span class="header details" data-pane="details" data-i18n="loggerEntryDetailsHeader"></span>
138
+ <span class="header dynamic" data-pane="dynamic" data-i18n="loggerURLFilteringHeader"></span>
139
+ <span class="header static" data-pane="static" data-i18n="loggerStaticFilteringHeader"></span>
140
+ </span>
133
141
  <span class="tools"><span class="fa-icon picker">eye-dropper</span><span class="fa-icon reload">refresh</span></span>
142
+ <span class="closeButton"><svg viewBox="0 0 64 64"><path d="M 16 16 L 48 48 M 16 48 L 48 16" /></span>
134
143
  </div>
135
144
  <div class="panes">
136
145
  <div class="pane details" data-pane="details">
@@ -61,8 +61,7 @@
61
61
  "https://filterlists.com/*",
62
62
  "https://forums.lanik.us/*",
63
63
  "https://github.com/*",
64
- "https://*.github.io/*",
65
- "https://*.letsblock.it/*"
64
+ "https://*.github.io/*"
66
65
  ],
67
66
  "run_at": "document_idle"
68
67
  },
@@ -112,7 +111,7 @@
112
111
  "storage": {
113
112
  "managed_schema": "managed_storage.json"
114
113
  },
115
- "version": "1.57.2",
114
+ "version": "1.58.0",
116
115
  "web_accessible_resources": [
117
116
  "/web_accessible_resources/*"
118
117
  ]
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@browserless.io/browserless",
3
- "version": "2.12.0-beta-3",
3
+ "version": "2.12.0-beta-6",
4
4
  "license": "SSPL",
5
5
  "description": "The browserless platform",
6
6
  "author": "browserless.io",
@@ -57,7 +57,7 @@
57
57
  "gradient-string": "^2.0.0",
58
58
  "http-proxy": "^1.18.1",
59
59
  "lighthouse": "^12.0.0",
60
- "micromatch": "^4.0.4",
60
+ "micromatch": "^4.0.7",
61
61
  "playwright-1.40": "npm:playwright-core@1.40.1",
62
62
  "playwright-1.41": "npm:playwright-core@1.41.2",
63
63
  "playwright-1.42": "npm:playwright-core@1.42.1",
@@ -79,8 +79,8 @@
79
79
  "@types/mocha": "^10.0.6",
80
80
  "@types/node": "^20.12.12",
81
81
  "@types/sinon": "^17.0.3",
82
- "@typescript-eslint/eslint-plugin": "^7.9.0",
83
- "@typescript-eslint/parser": "^7.9.0",
82
+ "@typescript-eslint/eslint-plugin": "^7.10.0",
83
+ "@typescript-eslint/parser": "^7.10.0",
84
84
  "assert": "^2.0.0",
85
85
  "chai": "^5.1.1",
86
86
  "cross-env": "^7.0.3",
@@ -119,15 +119,15 @@ export class Browserless extends EventEmitter {
119
119
  new Router(this.config, this.browserManager, this.limiter, this.Logger);
120
120
  }
121
121
 
122
- protected loadPwVersions = async (): Promise<void> => {
122
+ protected async loadPwVersions(): Promise<void> {
123
123
  const { playwrightVersions } = JSON.parse(
124
124
  (await fs.readFile('package.json')).toString(),
125
125
  );
126
126
 
127
127
  this.config.setPwVersions(playwrightVersions);
128
- };
128
+ }
129
129
 
130
- protected saveMetrics = async (): Promise<void> => {
130
+ protected async saveMetrics(): Promise<void> {
131
131
  const metricsPath = this.config.getMetricsJSONPath();
132
132
  const { cpu, memory } = await this.monitoring.getMachineStats();
133
133
  const metrics = await this.metrics.get();
@@ -163,9 +163,9 @@ export class Browserless extends EventEmitter {
163
163
  false,
164
164
  );
165
165
  }
166
- };
166
+ }
167
167
 
168
- public setMetricsSaveInterval = (interval: number) => {
168
+ public setMetricsSaveInterval(interval: number) {
169
169
  if (interval <= 0) {
170
170
  return console.warn(
171
171
  `Interval value of "${interval}" must be greater than 1. Ignoring`,
@@ -178,7 +178,7 @@ export class Browserless extends EventEmitter {
178
178
  this.saveMetrics,
179
179
  this.metricsSaveInterval,
180
180
  );
181
- };
181
+ }
182
182
 
183
183
  protected routeIsDisabled(route: routeInstances) {
184
184
  return this.disabledRouteNames.some((name) => name === route.name);