@browserless.io/browserless 2.12.0-beta-2 → 2.12.0-beta-4

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 (102) hide show
  1. package/build/browserless.d.ts +1 -0
  2. package/build/browserless.js +6 -0
  3. package/build/browsers/chromium.cdp.d.ts +1 -1
  4. package/build/browsers/chromium.cdp.js +2 -2
  5. package/build/browsers/chromium.playwright.d.ts +2 -2
  6. package/build/browsers/chromium.playwright.js +7 -5
  7. package/build/browsers/firefox.playwright.d.ts +2 -2
  8. package/build/browsers/firefox.playwright.js +7 -5
  9. package/build/browsers/index.d.ts +3 -2
  10. package/build/browsers/index.js +40 -16
  11. package/build/browsers/webkit.playwright.d.ts +2 -2
  12. package/build/browsers/webkit.playwright.js +7 -5
  13. package/build/config.d.ts +11 -0
  14. package/build/config.js +16 -0
  15. package/build/routes/chrome/http/content.post.body.json +8 -8
  16. package/build/routes/chrome/http/pdf.post.body.json +8 -8
  17. package/build/routes/chrome/http/scrape.post.body.json +8 -8
  18. package/build/routes/chrome/http/screenshot.post.body.json +8 -8
  19. package/build/routes/chrome/tests/websocket.spec.js +18 -3
  20. package/build/routes/chromium/http/content.post.body.json +8 -8
  21. package/build/routes/chromium/http/pdf.post.body.json +8 -8
  22. package/build/routes/chromium/http/scrape.post.body.json +8 -8
  23. package/build/routes/chromium/http/screenshot.post.body.json +8 -8
  24. package/build/routes/chromium/tests/websocket.spec.js +18 -0
  25. package/build/routes/firefox/tests/websocket.spec.js +18 -1
  26. package/build/routes/webkit/tests/websocket.spec.js +18 -0
  27. package/build/types.d.ts +1 -1
  28. package/build/utils.d.ts +9 -0
  29. package/build/utils.js +9 -0
  30. package/docker/chromium/Dockerfile +2 -1
  31. package/docker/firefox/Dockerfile +2 -1
  32. package/docker/multi/Dockerfile +1 -1
  33. package/docker/webkit/Dockerfile +2 -1
  34. package/extensions/ublock/_locales/eu/messages.json +4 -4
  35. package/extensions/ublock/_locales/hi/messages.json +5 -5
  36. package/extensions/ublock/_locales/kn/messages.json +11 -11
  37. package/extensions/ublock/_locales/nb/messages.json +2 -2
  38. package/extensions/ublock/_locales/no/messages.json +2 -2
  39. package/extensions/ublock/_locales/ro/messages.json +1 -1
  40. package/extensions/ublock/_locales/sv/messages.json +1 -1
  41. package/extensions/ublock/_locales/zh_CN/messages.json +2 -2
  42. package/extensions/ublock/assets/assets.json +3 -8
  43. package/extensions/ublock/assets/resources/scriptlets.js +128 -31
  44. package/extensions/ublock/assets/thirdparties/easylist/easylist.txt +4870 -3560
  45. package/extensions/ublock/assets/thirdparties/easylist/easyprivacy.txt +662 -173
  46. package/extensions/ublock/assets/thirdparties/pgl.yoyo.org/as/serverlist +10 -42
  47. package/extensions/ublock/assets/thirdparties/publicsuffix.org/list/effective_tld_names.dat +241 -80
  48. package/extensions/ublock/assets/thirdparties/urlhaus-filter/urlhaus-filter-online.txt +2093 -1224
  49. package/extensions/ublock/assets/ublock/badlists.txt +2 -0
  50. package/extensions/ublock/assets/ublock/badware.min.txt +408 -287
  51. package/extensions/ublock/assets/ublock/filters.min.txt +947 -645
  52. package/extensions/ublock/assets/ublock/privacy.min.txt +43 -8
  53. package/extensions/ublock/assets/ublock/quick-fixes.min.txt +55 -93
  54. package/extensions/ublock/assets/ublock/unbreak.min.txt +52 -19
  55. package/extensions/ublock/css/1p-filters.css +2 -0
  56. package/extensions/ublock/css/codemirror.css +2 -2
  57. package/extensions/ublock/css/dashboard.css +2 -5
  58. package/extensions/ublock/css/epicker-ui.css +3 -3
  59. package/extensions/ublock/css/fa-icons.css +3 -0
  60. package/extensions/ublock/css/logger-ui-inspector.css +1 -0
  61. package/extensions/ublock/css/logger-ui.css +44 -32
  62. package/extensions/ublock/img/fontawesome/fontawesome-defs.svg +1 -0
  63. package/extensions/ublock/js/3p-filters.js +4 -5
  64. package/extensions/ublock/js/biditrie.js +16 -11
  65. package/extensions/ublock/js/cachestorage.js +37 -37
  66. package/extensions/ublock/js/contentscript-extra.js +0 -2
  67. package/extensions/ublock/js/contentscript.js +1 -6
  68. package/extensions/ublock/js/epicker-ui.js +28 -36
  69. package/extensions/ublock/js/fa-icons.js +1 -0
  70. package/extensions/ublock/js/hntrie.js +19 -13
  71. package/extensions/ublock/js/logger-ui-inspector.js +6 -13
  72. package/extensions/ublock/js/logger-ui.js +264 -264
  73. package/extensions/ublock/js/s14e-serializer.js +267 -264
  74. package/extensions/ublock/js/scriptlet-filtering.js +12 -18
  75. package/extensions/ublock/js/scriptlets/dom-inspector.js +1 -5
  76. package/extensions/ublock/js/scriptlets/epicker.js +53 -59
  77. package/extensions/ublock/js/start.js +0 -8
  78. package/extensions/ublock/js/storage.js +2 -9
  79. package/extensions/ublock/js/vapi-background.js +19 -20
  80. package/extensions/ublock/js/vapi-common.js +2 -7
  81. package/extensions/ublock/js/vapi.js +0 -4
  82. package/extensions/ublock/js/webext.js +23 -15
  83. package/extensions/ublock/logger-ui.html +24 -15
  84. package/extensions/ublock/manifest.json +2 -3
  85. package/package.json +18 -6
  86. package/src/browserless.ts +11 -0
  87. package/src/browsers/chromium.cdp.ts +2 -2
  88. package/src/browsers/chromium.playwright.ts +8 -4
  89. package/src/browsers/firefox.playwright.ts +8 -5
  90. package/src/browsers/index.ts +53 -18
  91. package/src/browsers/webkit.playwright.ts +8 -4
  92. package/src/config.ts +20 -0
  93. package/src/routes/chrome/tests/websocket.spec.ts +25 -4
  94. package/src/routes/chromium/tests/websocket.spec.ts +25 -0
  95. package/src/routes/firefox/tests/websocket.spec.ts +25 -1
  96. package/src/routes/webkit/tests/websocket.spec.ts +25 -0
  97. package/src/types.ts +1 -1
  98. package/src/utils.ts +9 -0
  99. package/static/docs/swagger.json +9 -9
  100. package/static/docs/swagger.min.json +9 -9
  101. package/static/function/client.js +95 -136
  102. package/static/function/index.html +95 -136
@@ -4,9 +4,6 @@ import { deleteAsync } from 'del';
4
4
  import { expect } from 'chai';
5
5
  import puppeteer from 'puppeteer-core';
6
6
  describe('Chrome WebSocket API', function () {
7
- // Server shutdown can take a few seconds
8
- // and so can these tests :/
9
- this.timeout(10000);
10
7
  let browserless;
11
8
  const start = ({ config = new Config(), metrics = new Metrics(), } = {}) => {
12
9
  browserless = new Browserless({ config, metrics });
@@ -345,6 +342,24 @@ describe('Chrome WebSocket API', function () {
345
342
  expect(results.rejected).to.equal(0);
346
343
  expect(results.queued).to.equal(0);
347
344
  });
345
+ it('runs multiple versions of playwright', async () => {
346
+ const config = new Config();
347
+ config.setToken('browserless');
348
+ const metrics = new Metrics();
349
+ await start({ config, metrics });
350
+ const pwVersions = Object.keys(config.getPwVersions());
351
+ for (const version of pwVersions) {
352
+ const pw = await import(config.getPwVersions()[version]);
353
+ const browser = await pw.chromium.connect(`ws://localhost:3000/chrome/playwright?token=browserless`);
354
+ await browser.close();
355
+ await sleep(100);
356
+ }
357
+ const results = metrics.get();
358
+ expect(results.timedout).to.equal(0);
359
+ expect(results.successful).to.equal(pwVersions.length);
360
+ expect(results.rejected).to.equal(0);
361
+ expect(results.queued).to.equal(0);
362
+ });
348
363
  it('rejects playwright without tokens', async () => {
349
364
  const config = new Config();
350
365
  config.setToken('browserless');
@@ -394,14 +394,14 @@
394
394
  "length": {
395
395
  "type": "number"
396
396
  },
397
- "__@toStringTag@153015": {
397
+ "__@toStringTag@121117": {
398
398
  "type": "string",
399
399
  "const": "Uint8Array"
400
400
  }
401
401
  },
402
402
  "required": [
403
403
  "BYTES_PER_ELEMENT",
404
- "__@toStringTag@153015",
404
+ "__@toStringTag@121117",
405
405
  "buffer",
406
406
  "byteLength",
407
407
  "byteOffset",
@@ -436,13 +436,13 @@
436
436
  "byteLength": {
437
437
  "type": "number"
438
438
  },
439
- "__@toStringTag@153015": {
439
+ "__@toStringTag@121117": {
440
440
  "type": "string"
441
441
  }
442
442
  },
443
443
  "additionalProperties": false,
444
444
  "required": [
445
- "__@toStringTag@153015",
445
+ "__@toStringTag@121117",
446
446
  "byteLength"
447
447
  ]
448
448
  },
@@ -452,18 +452,18 @@
452
452
  "byteLength": {
453
453
  "type": "number"
454
454
  },
455
- "__@species@153116": {
455
+ "__@species@121218": {
456
456
  "$ref": "#/definitions/SharedArrayBuffer"
457
457
  },
458
- "__@toStringTag@153015": {
458
+ "__@toStringTag@121117": {
459
459
  "type": "string",
460
460
  "const": "SharedArrayBuffer"
461
461
  }
462
462
  },
463
463
  "additionalProperties": false,
464
464
  "required": [
465
- "__@species@153116",
466
- "__@toStringTag@153015",
465
+ "__@species@121218",
466
+ "__@toStringTag@121117",
467
467
  "byteLength"
468
468
  ]
469
469
  },
@@ -535,14 +535,14 @@
535
535
  "length": {
536
536
  "type": "number"
537
537
  },
538
- "__@toStringTag@207459": {
538
+ "__@toStringTag@197611": {
539
539
  "type": "string",
540
540
  "const": "Uint8Array"
541
541
  }
542
542
  },
543
543
  "required": [
544
544
  "BYTES_PER_ELEMENT",
545
- "__@toStringTag@207459",
545
+ "__@toStringTag@197611",
546
546
  "buffer",
547
547
  "byteLength",
548
548
  "byteOffset",
@@ -577,13 +577,13 @@
577
577
  "byteLength": {
578
578
  "type": "number"
579
579
  },
580
- "__@toStringTag@207459": {
580
+ "__@toStringTag@197611": {
581
581
  "type": "string"
582
582
  }
583
583
  },
584
584
  "additionalProperties": false,
585
585
  "required": [
586
- "__@toStringTag@207459",
586
+ "__@toStringTag@197611",
587
587
  "byteLength"
588
588
  ]
589
589
  },
@@ -593,18 +593,18 @@
593
593
  "byteLength": {
594
594
  "type": "number"
595
595
  },
596
- "__@species@207560": {
596
+ "__@species@197712": {
597
597
  "$ref": "#/definitions/SharedArrayBuffer"
598
598
  },
599
- "__@toStringTag@207459": {
599
+ "__@toStringTag@197611": {
600
600
  "type": "string",
601
601
  "const": "SharedArrayBuffer"
602
602
  }
603
603
  },
604
604
  "additionalProperties": false,
605
605
  "required": [
606
- "__@species@207560",
607
- "__@toStringTag@207459",
606
+ "__@species@197712",
607
+ "__@toStringTag@197611",
608
608
  "byteLength"
609
609
  ]
610
610
  },
@@ -441,14 +441,14 @@
441
441
  "length": {
442
442
  "type": "number"
443
443
  },
444
- "__@toStringTag@240522": {
444
+ "__@toStringTag@230602": {
445
445
  "type": "string",
446
446
  "const": "Uint8Array"
447
447
  }
448
448
  },
449
449
  "required": [
450
450
  "BYTES_PER_ELEMENT",
451
- "__@toStringTag@240522",
451
+ "__@toStringTag@230602",
452
452
  "buffer",
453
453
  "byteLength",
454
454
  "byteOffset",
@@ -483,13 +483,13 @@
483
483
  "byteLength": {
484
484
  "type": "number"
485
485
  },
486
- "__@toStringTag@240522": {
486
+ "__@toStringTag@230602": {
487
487
  "type": "string"
488
488
  }
489
489
  },
490
490
  "additionalProperties": false,
491
491
  "required": [
492
- "__@toStringTag@240522",
492
+ "__@toStringTag@230602",
493
493
  "byteLength"
494
494
  ]
495
495
  },
@@ -499,18 +499,18 @@
499
499
  "byteLength": {
500
500
  "type": "number"
501
501
  },
502
- "__@species@240623": {
502
+ "__@species@230703": {
503
503
  "$ref": "#/definitions/SharedArrayBuffer"
504
504
  },
505
- "__@toStringTag@240522": {
505
+ "__@toStringTag@230602": {
506
506
  "type": "string",
507
507
  "const": "SharedArrayBuffer"
508
508
  }
509
509
  },
510
510
  "additionalProperties": false,
511
511
  "required": [
512
- "__@species@240623",
513
- "__@toStringTag@240522",
512
+ "__@species@230703",
513
+ "__@toStringTag@230602",
514
514
  "byteLength"
515
515
  ]
516
516
  },
@@ -484,14 +484,14 @@
484
484
  "length": {
485
485
  "type": "number"
486
486
  },
487
- "__@toStringTag@229416": {
487
+ "__@toStringTag@241842": {
488
488
  "type": "string",
489
489
  "const": "Uint8Array"
490
490
  }
491
491
  },
492
492
  "required": [
493
493
  "BYTES_PER_ELEMENT",
494
- "__@toStringTag@229416",
494
+ "__@toStringTag@241842",
495
495
  "buffer",
496
496
  "byteLength",
497
497
  "byteOffset",
@@ -526,13 +526,13 @@
526
526
  "byteLength": {
527
527
  "type": "number"
528
528
  },
529
- "__@toStringTag@229416": {
529
+ "__@toStringTag@241842": {
530
530
  "type": "string"
531
531
  }
532
532
  },
533
533
  "additionalProperties": false,
534
534
  "required": [
535
- "__@toStringTag@229416",
535
+ "__@toStringTag@241842",
536
536
  "byteLength"
537
537
  ]
538
538
  },
@@ -542,18 +542,18 @@
542
542
  "byteLength": {
543
543
  "type": "number"
544
544
  },
545
- "__@species@229517": {
545
+ "__@species@241943": {
546
546
  "$ref": "#/definitions/SharedArrayBuffer"
547
547
  },
548
- "__@toStringTag@229416": {
548
+ "__@toStringTag@241842": {
549
549
  "type": "string",
550
550
  "const": "SharedArrayBuffer"
551
551
  }
552
552
  },
553
553
  "additionalProperties": false,
554
554
  "required": [
555
- "__@species@229517",
556
- "__@toStringTag@229416",
555
+ "__@species@241943",
556
+ "__@toStringTag@241842",
557
557
  "byteLength"
558
558
  ]
559
559
  },
@@ -345,6 +345,24 @@ describe('Chromium WebSocket API', function () {
345
345
  expect(results.rejected).to.equal(0);
346
346
  expect(results.queued).to.equal(0);
347
347
  });
348
+ it('runs multiple versions of playwright', async () => {
349
+ const config = new Config();
350
+ config.setToken('browserless');
351
+ const metrics = new Metrics();
352
+ await start({ config, metrics });
353
+ const pwVersions = Object.keys(config.getPwVersions());
354
+ for (const version of pwVersions) {
355
+ const pw = await import(config.getPwVersions()[version]);
356
+ const browser = await pw.chromium.connect(`ws://localhost:3000/playwright/chromium?token=browserless`);
357
+ await browser.close();
358
+ await sleep(100);
359
+ }
360
+ const results = metrics.get();
361
+ expect(results.timedout).to.equal(0);
362
+ expect(results.successful).to.equal(pwVersions.length);
363
+ expect(results.rejected).to.equal(0);
364
+ expect(results.queued).to.equal(0);
365
+ });
348
366
  it('rejects playwright without tokens', async () => {
349
367
  const config = new Config();
350
368
  config.setToken('browserless');
@@ -4,7 +4,6 @@ import { firefox } from 'playwright-core';
4
4
  describe('Firefox Websocket API', function () {
5
5
  // Server shutdown can take a few seconds
6
6
  // and so can these tests :/
7
- this.timeout(5000);
8
7
  let browserless;
9
8
  const start = ({ config = new Config(), metrics = new Metrics(), } = {}) => {
10
9
  browserless = new Browserless({ config, metrics });
@@ -21,6 +20,24 @@ describe('Firefox Websocket API', function () {
21
20
  const browser = await firefox.connect(`ws://localhost:3000/playwright/firefox?token=browserless`);
22
21
  await browser.close();
23
22
  });
23
+ it('runs multiple versions of playwright', async () => {
24
+ const config = new Config();
25
+ config.setToken('browserless');
26
+ const metrics = new Metrics();
27
+ await start({ config, metrics });
28
+ const pwVersions = Object.keys(config.getPwVersions());
29
+ for (const version of pwVersions) {
30
+ const pw = await import(config.getPwVersions()[version]);
31
+ const browser = await pw.firefox.connect(`ws://localhost:3000/playwright/firefox?token=browserless`);
32
+ await browser.close();
33
+ await sleep(100);
34
+ }
35
+ const results = metrics.get();
36
+ expect(results.timedout).to.equal(0);
37
+ expect(results.successful).to.equal(pwVersions.length);
38
+ expect(results.rejected).to.equal(0);
39
+ expect(results.queued).to.equal(0);
40
+ });
24
41
  it('rejects playwright requests', async () => {
25
42
  const config = new Config();
26
43
  config.setToken('browserless');
@@ -21,6 +21,24 @@ describe('Webkit Websocket API', function () {
21
21
  const browser = await webkit.connect(`ws://localhost:3000/playwright/webkit?token=browserless`);
22
22
  await browser.close();
23
23
  });
24
+ it('runs multiple versions of playwright', async () => {
25
+ const config = new Config();
26
+ config.setToken('browserless');
27
+ const metrics = new Metrics();
28
+ await start({ config, metrics });
29
+ const pwVersions = Object.keys(config.getPwVersions());
30
+ for (const version of pwVersions) {
31
+ const pw = await import(config.getPwVersions()[version]);
32
+ const browser = await pw.webkit.connect(`ws://localhost:3000/playwright/webkit?token=browserless`);
33
+ await browser.close();
34
+ await sleep(100);
35
+ }
36
+ const results = metrics.get();
37
+ expect(results.timedout).to.equal(0);
38
+ expect(results.successful).to.equal(pwVersions.length);
39
+ expect(results.rejected).to.equal(0);
40
+ expect(results.queued).to.equal(0);
41
+ });
24
42
  it('rejects playwright requests', async () => {
25
43
  const config = new Config();
26
44
  config.setToken('browserless');
package/build/types.d.ts CHANGED
@@ -274,7 +274,7 @@ export interface BrowserServerOptions {
274
274
  tracesDir?: string;
275
275
  }
276
276
  export interface BrowserlessSession {
277
- id: string | null;
277
+ id: string;
278
278
  initialConnectURL: string;
279
279
  isTempDataDir: boolean;
280
280
  launchOptions: CDPLaunchOptions | BrowserServerOptions;
package/build/utils.d.ts CHANGED
@@ -7,6 +7,15 @@ import { Duplex } from 'stream';
7
7
  import { Page } from 'puppeteer-core';
8
8
  import { ServerResponse } from 'http';
9
9
  import debug from 'debug';
10
+ /**
11
+ * RegEx to match the Playwright version from the innitial request header.
12
+ *
13
+ * @example
14
+ * const userAgent = "Playwright/1.43.1 (x64; windows 10.0) node/20.11";
15
+ * userAgent.match(pwVersionRegex);
16
+ * // ["Playwright/1.43", "1.43"]
17
+ */
18
+ export declare const pwVersionRegex: RegExp;
10
19
  export declare const buildDir: string;
11
20
  export declare const tsExtension = ".d.ts";
12
21
  export declare const jsonExtension = ".json";
package/build/utils.js CHANGED
@@ -21,6 +21,15 @@ const getAuthHeaderToken = (header) => {
21
21
  }
22
22
  return null;
23
23
  };
24
+ /**
25
+ * RegEx to match the Playwright version from the innitial request header.
26
+ *
27
+ * @example
28
+ * const userAgent = "Playwright/1.43.1 (x64; windows 10.0) node/20.11";
29
+ * userAgent.match(pwVersionRegex);
30
+ * // ["Playwright/1.43", "1.43"]
31
+ */
32
+ export const pwVersionRegex = /Playwright\/(\d+\.\d+)/;
24
33
  export const buildDir = path.join(path.resolve(), 'build');
25
34
  export const tsExtension = '.d.ts';
26
35
  export const jsonExtension = '.json';
@@ -26,7 +26,8 @@ RUN echo "ttf-mscorefonts-installer msttcorefonts/accepted-mscorefonts-eula sele
26
26
  fonts-ubuntu \
27
27
  fonts-wqy-zenhei
28
28
 
29
- RUN ./node_modules/.bin/playwright-core install --with-deps chromium &&\
29
+ RUN npx --yes playwright install chromium &&\
30
+ npx --yes playwright install-deps chromium &&\
30
31
  npm run build &&\
31
32
  npm run build:function &&\
32
33
  npm prune production &&\
@@ -26,7 +26,8 @@ RUN echo "ttf-mscorefonts-installer msttcorefonts/accepted-mscorefonts-eula sele
26
26
  fonts-ubuntu \
27
27
  fonts-wqy-zenhei
28
28
 
29
- RUN ./node_modules/.bin/playwright-core install --with-deps firefox &&\
29
+ RUN npx --yes playwright install firefox &&\
30
+ npx --yes playwright install-deps firefox &&\
30
31
  npm run build &&\
31
32
  npm prune production &&\
32
33
  chown -R blessuser:blessuser $APP_DIR &&\
@@ -34,7 +34,7 @@ RUN if [ "$TARGETPLATFORM" = "linux/amd64" ]; then \
34
34
  rm -rf ./src/routes/chrome; \
35
35
  fi
36
36
 
37
- RUN ./node_modules/.bin/playwright-core install --with-deps chromium firefox webkit &&\
37
+ RUN npx --yes playwright install --with-deps chromium firefox webkit &&\
38
38
  npm run build &&\
39
39
  npm run build:function &&\
40
40
  npm prune production &&\
@@ -27,7 +27,8 @@ RUN echo "ttf-mscorefonts-installer msttcorefonts/accepted-mscorefonts-eula sele
27
27
  fonts-ubuntu \
28
28
  fonts-wqy-zenhei
29
29
 
30
- RUN ./node_modules/.bin/playwright-core install --with-deps webkit &&\
30
+ RUN npx --yes playwright install webkit &&\
31
+ npx --yes playwright install-deps webkit &&\
31
32
  npm run build &&\
32
33
  npm prune production &&\
33
34
  chown -R blessuser:blessuser $APP_DIR &&\
@@ -56,7 +56,7 @@
56
56
  "description": "appears as tab name in dashboard"
57
57
  },
58
58
  "supportPageName": {
59
- "message": "Laguntza",
59
+ "message": "Soportea",
60
60
  "description": "appears as tab name in dashboard"
61
61
  },
62
62
  "assetViewerPageName": {
@@ -484,11 +484,11 @@
484
484
  "description": "Filter lists section name"
485
485
  },
486
486
  "3pGroupSocial": {
487
- "message": "Social widgets",
487
+ "message": "Widgets Sozialak",
488
488
  "description": "Filter lists section name"
489
489
  },
490
490
  "3pGroupCookies": {
491
- "message": "Cookie notices",
491
+ "message": "Cookie oharrak",
492
492
  "description": "Filter lists section name"
493
493
  },
494
494
  "3pGroupAnnoyances": {
@@ -544,7 +544,7 @@
544
544
  "description": "Label for the checkbox use to enable/disable 'My filters' list"
545
545
  },
546
546
  "1pTrustMyFiltersLabel": {
547
- "message": "Allow custom filters requiring trust",
547
+ "message": "Konfiantza behar duten iragazki pertsonalizatuak baimendu",
548
548
  "description": "Label for the checkbox use to trust the content of 'My filters' list"
549
549
  },
550
550
  "1pImport": {
@@ -548,7 +548,7 @@
548
548
  "description": "Label for the checkbox use to trust the content of 'My filters' list"
549
549
  },
550
550
  "1pImport": {
551
- "message": "इम्पोर्ट करें और जोड़ें",
551
+ "message": "इम्पोर्ट करें और जोड़ें...",
552
552
  "description": "Button in the 'My filters' pane"
553
553
  },
554
554
  "1pExport": {
@@ -612,7 +612,7 @@
612
612
  "description": "English: dynamic rule syntax and full documentation."
613
613
  },
614
614
  "rulesSort": {
615
- "message": "क्रम में लगाये",
615
+ "message": "क्रम में लगाये:",
616
616
  "description": "English: label for sort option."
617
617
  },
618
618
  "rulesSortByType": {
@@ -620,7 +620,7 @@
620
620
  "description": "English: a sort option for list of rules."
621
621
  },
622
622
  "rulesSortBySource": {
623
- "message": "स्रोत",
623
+ "message": "मूल",
624
624
  "description": "English: a sort option for list of rules."
625
625
  },
626
626
  "rulesSortByDestination": {
@@ -632,11 +632,11 @@
632
632
  "description": "A concise description of the 'Trusted sites' pane."
633
633
  },
634
634
  "whitelistImport": {
635
- "message": "इम्पोर्ट करें और जोड़ें",
635
+ "message": "इम्पोर्ट करें और जोड़ें...",
636
636
  "description": "Button in the 'Trusted sites' pane"
637
637
  },
638
638
  "whitelistExport": {
639
- "message": "निर्यात करें",
639
+ "message": "निर्यात करें...",
640
640
  "description": "Button in the 'Trusted sites' pane"
641
641
  },
642
642
  "whitelistExportFilename": {
@@ -76,7 +76,7 @@
76
76
  "description": "Message to be read by screen readers"
77
77
  },
78
78
  "popupPowerSwitchInfo2": {
79
- "message": "Click to enable uBlock₀ for this site.",
79
+ "message": " ಸೈಟ್‌ಗಾಗಿ uBlock₀ ಸಕ್ರಿಯಗೊಳಿಸಲು ಕ್ಲಿಕ್ ಮಾಡಿ.",
80
80
  "description": "Message to be read by screen readers"
81
81
  },
82
82
  "popupBlockedRequestPrompt": {
@@ -128,7 +128,7 @@
128
128
  "description": "Tooltip used for the logger icon in the panel"
129
129
  },
130
130
  "popupTipReport": {
131
- "message": "Report an issue on this website",
131
+ "message": "ublock origin ಗೆ ಸಂಬಂಧಿಸಿದ ವೆಬ್‌ಸೈಟ್‌ನಲ್ಲಿ ಸಮಸ್ಯೆಯನ್ನು ವರದಿ ಮಾಡಿ",
132
132
  "description": "Tooltip used for the 'chat' icon in the panel"
133
133
  },
134
134
  "popupTipNoPopups": {
@@ -180,7 +180,7 @@
180
180
  "description": "Tooltip for the no-remote-fonts per-site switch"
181
181
  },
182
182
  "popupTipNoScripting1": {
183
- "message": "Click to disable JavaScript on this site",
183
+ "message": " ಸೈಟ್‌ನಲ್ಲಿ ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ ಅನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲು ಕ್ಲಿಕ್ ಮಾಡಿ",
184
184
  "description": "Tooltip for the no-scripting per-site switch"
185
185
  },
186
186
  "popupTipNoScripting2": {
@@ -388,7 +388,7 @@
388
388
  "description": ""
389
389
  },
390
390
  "settingsNoScriptingPrompt": {
391
- "message": "Disable JavaScript",
391
+ "message": "ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ ಅನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿ",
392
392
  "description": "The default state for the per-site no-scripting switch"
393
393
  },
394
394
  "settingsNoCSPReportsPrompt": {
@@ -424,7 +424,7 @@
424
424
  "description": "Appears at the top of the _3rd-party filters_ pane"
425
425
  },
426
426
  "3pListsOfBlockedHostsPerListStats": {
427
- "message": "{{used}} used out of {{total}}",
427
+ "message": "{{total}} ರಿಂದ {{used}} ಬಳಸಲುಗುವುತಿದೆ ",
428
428
  "description": "Appears aside each filter list in the _3rd-party filters_ pane"
429
429
  },
430
430
  "3pAutoUpdatePrompt1": {
@@ -520,7 +520,7 @@
520
520
  "description": "used as a tooltip for the out-of-date icon beside a list"
521
521
  },
522
522
  "3pViewContent": {
523
- "message": "view content",
523
+ "message": "ವಿಷಯವನ್ನು ವೀಕ್ಷಿಸಿ",
524
524
  "description": "used as a tooltip for eye icon beside a list"
525
525
  },
526
526
  "3pLastUpdate": {
@@ -552,7 +552,7 @@
552
552
  "description": "Button in the 'My filters' pane"
553
553
  },
554
554
  "1pExport": {
555
- "message": "ರಫ್ತು",
555
+ "message": "ರಫ್ತು...",
556
556
  "description": "Button in the 'My filters' pane"
557
557
  },
558
558
  "1pExportFilename": {
@@ -580,7 +580,7 @@
580
580
  "description": "This will persist temporary rules"
581
581
  },
582
582
  "rulesEdit": {
583
- "message": "ಸಂಪಾದಿಸಿ",
583
+ "message": "ತಿದ್ದಿ ",
584
584
  "description": "Will enable manual-edit mode (textarea)"
585
585
  },
586
586
  "rulesEditSave": {
@@ -660,7 +660,7 @@
660
660
  "description": "English: URL"
661
661
  },
662
662
  "logRequestsHeaderFilter": {
663
- "message": "Filter",
663
+ "message": "ಫಿಲ್ಟರ್",
664
664
  "description": "English: Filter"
665
665
  },
666
666
  "logAll": {
@@ -716,7 +716,7 @@
716
716
  "description": "Tooltip for the button to bring up logger output filtering options"
717
717
  },
718
718
  "loggerRowFiltererBuiltinNot": {
719
- "message": "Not",
719
+ "message": "ಅಲ್ಲದ ",
720
720
  "description": "A keyword in the built-in row filtering expression"
721
721
  },
722
722
  "loggerRowFiltererBuiltinEventful": {
@@ -780,7 +780,7 @@
780
780
  "description": "Label to identify the URL of an entry"
781
781
  },
782
782
  "loggerURLFilteringHeader": {
783
- "message": "URL rule",
783
+ "message": "URL ನಿಯಮ ",
784
784
  "description": "Small header to identify the dynamic URL filtering section"
785
785
  },
786
786
  "loggerURLFilteringContextLabel": {
@@ -540,11 +540,11 @@
540
540
  "description": "Warning against copy-pasting filters from random sources"
541
541
  },
542
542
  "1pEnableMyFiltersLabel": {
543
- "message": "Enable my custom filters",
543
+ "message": "Aktiver mine egendefinerte filtre",
544
544
  "description": "Label for the checkbox use to enable/disable 'My filters' list"
545
545
  },
546
546
  "1pTrustMyFiltersLabel": {
547
- "message": "Allow custom filters requiring trust",
547
+ "message": "Tillat egendefinerte filtre som krever tiltro",
548
548
  "description": "Label for the checkbox use to trust the content of 'My filters' list"
549
549
  },
550
550
  "1pImport": {
@@ -540,11 +540,11 @@
540
540
  "description": "Warning against copy-pasting filters from random sources"
541
541
  },
542
542
  "1pEnableMyFiltersLabel": {
543
- "message": "Enable my custom filters",
543
+ "message": "Aktiver mine egendefinerte filtre",
544
544
  "description": "Label for the checkbox use to enable/disable 'My filters' list"
545
545
  },
546
546
  "1pTrustMyFiltersLabel": {
547
- "message": "Allow custom filters requiring trust",
547
+ "message": "Tillat egendefinerte filtre som krever tiltro",
548
548
  "description": "Label for the checkbox use to trust the content of 'My filters' list"
549
549
  },
550
550
  "1pImport": {
@@ -484,7 +484,7 @@
484
484
  "description": "Filter lists section name"
485
485
  },
486
486
  "3pGroupSocial": {
487
- "message": "Social widgets",
487
+ "message": "Widget-uri sociale",
488
488
  "description": "Filter lists section name"
489
489
  },
490
490
  "3pGroupCookies": {
@@ -104,7 +104,7 @@
104
104
  "description": "For the new mobile-friendly popup design"
105
105
  },
106
106
  "popupBlockedSinceInstall_v2": {
107
- "message": "Blockerat sedan installationen",
107
+ "message": "Blockerat sedan installation",
108
108
  "description": "For the new mobile-friendly popup design"
109
109
  },
110
110
  "popupDomainsConnected_v2": {