@brightdata/cli 0.1.4 → 0.1.5

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 (76) hide show
  1. package/README.md +354 -0
  2. package/dist/__tests__/browser/connection.test.d.ts +2 -0
  3. package/dist/__tests__/browser/connection.test.d.ts.map +1 -0
  4. package/dist/__tests__/browser/connection.test.js +168 -0
  5. package/dist/__tests__/browser/connection.test.js.map +1 -0
  6. package/dist/__tests__/browser/daemon.test.d.ts +2 -0
  7. package/dist/__tests__/browser/daemon.test.d.ts.map +1 -0
  8. package/dist/__tests__/browser/daemon.test.js +586 -0
  9. package/dist/__tests__/browser/daemon.test.js.map +1 -0
  10. package/dist/__tests__/browser/entrypoint.test.d.ts +2 -0
  11. package/dist/__tests__/browser/entrypoint.test.d.ts.map +1 -0
  12. package/dist/__tests__/browser/entrypoint.test.js +53 -0
  13. package/dist/__tests__/browser/entrypoint.test.js.map +1 -0
  14. package/dist/__tests__/browser/ipc.test.d.ts +2 -0
  15. package/dist/__tests__/browser/ipc.test.d.ts.map +1 -0
  16. package/dist/__tests__/browser/ipc.test.js +199 -0
  17. package/dist/__tests__/browser/ipc.test.js.map +1 -0
  18. package/dist/__tests__/browser/lifecycle.test.d.ts +2 -0
  19. package/dist/__tests__/browser/lifecycle.test.d.ts.map +1 -0
  20. package/dist/__tests__/browser/lifecycle.test.js +176 -0
  21. package/dist/__tests__/browser/lifecycle.test.js.map +1 -0
  22. package/dist/__tests__/browser/snapshot.test.d.ts +2 -0
  23. package/dist/__tests__/browser/snapshot.test.d.ts.map +1 -0
  24. package/dist/__tests__/browser/snapshot.test.js +202 -0
  25. package/dist/__tests__/browser/snapshot.test.js.map +1 -0
  26. package/dist/__tests__/commands/browser.test.d.ts +2 -0
  27. package/dist/__tests__/commands/browser.test.d.ts.map +1 -0
  28. package/dist/__tests__/commands/browser.test.js +431 -0
  29. package/dist/__tests__/commands/browser.test.js.map +1 -0
  30. package/dist/__tests__/utils/browser-credentials.test.d.ts +2 -0
  31. package/dist/__tests__/utils/browser-credentials.test.d.ts.map +1 -0
  32. package/dist/__tests__/utils/browser-credentials.test.js +81 -0
  33. package/dist/__tests__/utils/browser-credentials.test.js.map +1 -0
  34. package/dist/browser/connection.d.ts +24 -0
  35. package/dist/browser/connection.d.ts.map +1 -0
  36. package/dist/browser/connection.js +55 -0
  37. package/dist/browser/connection.js.map +1 -0
  38. package/dist/browser/daemon.d.ts +130 -0
  39. package/dist/browser/daemon.d.ts.map +1 -0
  40. package/dist/browser/daemon.js +645 -0
  41. package/dist/browser/daemon.js.map +1 -0
  42. package/dist/browser/entrypoint.d.ts +20 -0
  43. package/dist/browser/entrypoint.d.ts.map +1 -0
  44. package/dist/browser/entrypoint.js +46 -0
  45. package/dist/browser/entrypoint.js.map +1 -0
  46. package/dist/browser/interaction.d.ts +32 -0
  47. package/dist/browser/interaction.d.ts.map +1 -0
  48. package/dist/browser/interaction.js +215 -0
  49. package/dist/browser/interaction.js.map +1 -0
  50. package/dist/browser/ipc.d.ts +52 -0
  51. package/dist/browser/ipc.d.ts.map +1 -0
  52. package/dist/browser/ipc.js +254 -0
  53. package/dist/browser/ipc.js.map +1 -0
  54. package/dist/browser/lifecycle.d.ts +31 -0
  55. package/dist/browser/lifecycle.d.ts.map +1 -0
  56. package/dist/browser/lifecycle.js +202 -0
  57. package/dist/browser/lifecycle.js.map +1 -0
  58. package/dist/browser/screenshot.d.ts +19 -0
  59. package/dist/browser/screenshot.d.ts.map +1 -0
  60. package/dist/browser/screenshot.js +44 -0
  61. package/dist/browser/screenshot.js.map +1 -0
  62. package/dist/browser/snapshot.d.ts +48 -0
  63. package/dist/browser/snapshot.d.ts.map +1 -0
  64. package/dist/browser/snapshot.js +490 -0
  65. package/dist/browser/snapshot.js.map +1 -0
  66. package/dist/commands/browser.d.ts +62 -0
  67. package/dist/commands/browser.d.ts.map +1 -0
  68. package/dist/commands/browser.js +615 -0
  69. package/dist/commands/browser.js.map +1 -0
  70. package/dist/index.js +39 -25
  71. package/dist/index.js.map +1 -1
  72. package/dist/utils/browser-credentials.d.ts +5 -0
  73. package/dist/utils/browser-credentials.d.ts.map +1 -0
  74. package/dist/utils/browser-credentials.js +53 -0
  75. package/dist/utils/browser-credentials.js.map +1 -0
  76. package/package.json +2 -1
package/dist/index.js CHANGED
@@ -5,6 +5,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  };
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
7
  const commander_1 = require("commander");
8
+ const entrypoint_1 = require("./browser/entrypoint");
8
9
  const login_1 = require("./commands/login");
9
10
  const logout_1 = require("./commands/logout");
10
11
  const scrape_1 = require("./commands/scrape");
@@ -17,31 +18,44 @@ const init_1 = require("./commands/init");
17
18
  const version_1 = require("./commands/version");
18
19
  const skill_1 = require("./commands/skill");
19
20
  const budget_1 = require("./commands/budget");
21
+ const browser_1 = require("./commands/browser");
20
22
  const add_mcp_1 = require("./commands/add-mcp");
21
23
  const package_json_1 = __importDefault(require("../package.json"));
22
- const program = new commander_1.Command();
23
- const add_command = new commander_1.Command('add')
24
- .description('Add Bright Data integrations to supported coding agents')
25
- .addCommand(add_mcp_1.add_mcp_command);
26
- program
27
- .name('brightdata')
28
- .description('Command-line interface for Bright Data. Scrape, search, '
29
- + 'extract structured data, and automate browsers from your terminal.')
30
- .version(package_json_1.default.version, '-v, --version')
31
- .option('-k, --api-key <key>', 'Bright Data API key (overrides env/config)')
32
- .option('--timing', 'Show request timing');
33
- program.addCommand(login_1.login_command);
34
- program.addCommand(logout_1.logout_command);
35
- program.addCommand(scrape_1.scrape_command);
36
- program.addCommand(search_1.search_command);
37
- program.addCommand(dataset_1.pipelines_command);
38
- program.addCommand(status_1.status_command);
39
- program.addCommand(zones_1.zones_command);
40
- program.addCommand(config_1.config_command);
41
- program.addCommand(init_1.init_command);
42
- program.addCommand(version_1.version_command);
43
- program.addCommand(skill_1.skill_command);
44
- program.addCommand(budget_1.budget_command);
45
- program.addCommand(add_command);
46
- program.parse(process.argv);
24
+ const build_program = () => {
25
+ const program = new commander_1.Command();
26
+ const add_command = new commander_1.Command('add')
27
+ .description('Add Bright Data integrations to supported coding agents')
28
+ .addCommand(add_mcp_1.add_mcp_command);
29
+ program
30
+ .name('brightdata')
31
+ .description('Command-line interface for Bright Data. Scrape, search, '
32
+ + 'extract structured data, and automate browsers from your terminal.')
33
+ .version(package_json_1.default.version, '-v, --version')
34
+ .option('-k, --api-key <key>', 'Bright Data API key (overrides env/config)')
35
+ .option('--timing', 'Show request timing');
36
+ program.addCommand(login_1.login_command);
37
+ program.addCommand(logout_1.logout_command);
38
+ program.addCommand(scrape_1.scrape_command);
39
+ program.addCommand(search_1.search_command);
40
+ program.addCommand(dataset_1.pipelines_command);
41
+ program.addCommand(status_1.status_command);
42
+ program.addCommand(zones_1.zones_command);
43
+ program.addCommand(config_1.config_command);
44
+ program.addCommand(init_1.init_command);
45
+ program.addCommand(version_1.version_command);
46
+ program.addCommand(skill_1.skill_command);
47
+ program.addCommand(budget_1.budget_command);
48
+ program.addCommand(browser_1.browser_command);
49
+ program.addCommand(add_command);
50
+ return program;
51
+ };
52
+ const main = async () => {
53
+ if (await (0, entrypoint_1.maybe_run_browser_daemon)())
54
+ return;
55
+ build_program().parse(process.argv);
56
+ };
57
+ void main().catch(error => {
58
+ console.error(error);
59
+ process.exit(1);
60
+ });
47
61
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;AACA,yCAAkC;AAClC,4CAA+C;AAC/C,8CAAiD;AACjD,8CAAiD;AACjD,8CAAiD;AACjD,gDAAqD;AACrD,8CAAiD;AACjD,4CAA+C;AAC/C,8CAAiD;AACjD,0CAA6C;AAC7C,gDAAmD;AACnD,4CAA+C;AAC/C,8CAAiD;AACjD,gDAAmD;AACnD,mEAA0C;AAE1C,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAC9B,MAAM,WAAW,GAAG,IAAI,mBAAO,CAAC,KAAK,CAAC;KACjC,WAAW,CAAC,yDAAyD,CAAC;KACtE,UAAU,CAAC,yBAAe,CAAC,CAAC;AAEjC,OAAO;KACF,IAAI,CAAC,YAAY,CAAC;KAClB,WAAW,CACR,0DAA0D;MACzD,oEAAoE,CACxE;KACA,OAAO,CAAC,sBAAW,CAAC,OAAO,EAAE,eAAe,CAAC;KAC7C,MAAM,CAAC,qBAAqB,EAAE,4CAA4C,CAAC;KAC3E,MAAM,CAAC,UAAU,EAAE,qBAAqB,CAAC,CAAC;AAE/C,OAAO,CAAC,UAAU,CAAC,qBAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,uBAAc,CAAC,CAAC;AACnC,OAAO,CAAC,UAAU,CAAC,uBAAc,CAAC,CAAC;AACnC,OAAO,CAAC,UAAU,CAAC,uBAAc,CAAC,CAAC;AACnC,OAAO,CAAC,UAAU,CAAC,2BAAiB,CAAC,CAAC;AACtC,OAAO,CAAC,UAAU,CAAC,uBAAc,CAAC,CAAC;AACnC,OAAO,CAAC,UAAU,CAAC,qBAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,uBAAc,CAAC,CAAC;AACnC,OAAO,CAAC,UAAU,CAAC,mBAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,yBAAe,CAAC,CAAC;AACpC,OAAO,CAAC,UAAU,CAAC,qBAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,uBAAc,CAAC,CAAC;AACnC,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAEhC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;AACA,yCAAkC;AAClC,qDAA8D;AAC9D,4CAA+C;AAC/C,8CAAiD;AACjD,8CAAiD;AACjD,8CAAiD;AACjD,gDAAqD;AACrD,8CAAiD;AACjD,4CAA+C;AAC/C,8CAAiD;AACjD,0CAA6C;AAC7C,gDAAmD;AACnD,4CAA+C;AAC/C,8CAAiD;AACjD,gDAAmD;AACnD,gDAAmD;AACnD,mEAA0C;AAE1C,MAAM,aAAa,GAAG,GAAE,EAAE;IACtB,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;IAC9B,MAAM,WAAW,GAAG,IAAI,mBAAO,CAAC,KAAK,CAAC;SACjC,WAAW,CAAC,yDAAyD,CAAC;SACtE,UAAU,CAAC,yBAAe,CAAC,CAAC;IAEjC,OAAO;SACF,IAAI,CAAC,YAAY,CAAC;SAClB,WAAW,CACR,0DAA0D;UACzD,oEAAoE,CACxE;SACA,OAAO,CAAC,sBAAW,CAAC,OAAO,EAAE,eAAe,CAAC;SAC7C,MAAM,CAAC,qBAAqB,EAAE,4CAA4C,CAAC;SAC3E,MAAM,CAAC,UAAU,EAAE,qBAAqB,CAAC,CAAC;IAE/C,OAAO,CAAC,UAAU,CAAC,qBAAa,CAAC,CAAC;IAClC,OAAO,CAAC,UAAU,CAAC,uBAAc,CAAC,CAAC;IACnC,OAAO,CAAC,UAAU,CAAC,uBAAc,CAAC,CAAC;IACnC,OAAO,CAAC,UAAU,CAAC,uBAAc,CAAC,CAAC;IACnC,OAAO,CAAC,UAAU,CAAC,2BAAiB,CAAC,CAAC;IACtC,OAAO,CAAC,UAAU,CAAC,uBAAc,CAAC,CAAC;IACnC,OAAO,CAAC,UAAU,CAAC,qBAAa,CAAC,CAAC;IAClC,OAAO,CAAC,UAAU,CAAC,uBAAc,CAAC,CAAC;IACnC,OAAO,CAAC,UAAU,CAAC,mBAAY,CAAC,CAAC;IACjC,OAAO,CAAC,UAAU,CAAC,yBAAe,CAAC,CAAC;IACpC,OAAO,CAAC,UAAU,CAAC,qBAAa,CAAC,CAAC;IAClC,OAAO,CAAC,UAAU,CAAC,uBAAc,CAAC,CAAC;IACnC,OAAO,CAAC,UAAU,CAAC,yBAAe,CAAC,CAAC;IACpC,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;IAEhC,OAAO,OAAO,CAAC;AACnB,CAAC,CAAC;AAEF,MAAM,IAAI,GAAG,KAAK,IAAE,EAAE;IAClB,IAAI,MAAM,IAAA,qCAAwB,GAAE;QAChC,OAAO;IACX,aAAa,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACxC,CAAC,CAAC;AAEF,KAAK,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAA,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACrB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,5 @@
1
+ declare const DEFAULT_BROWSER_ZONE = "cli_browser";
2
+ declare const ensure_browser_zone: (api_key: string, zone?: string) => Promise<void>;
3
+ declare const get_cdp_endpoint: (api_key: string, zone: string, country?: string) => Promise<string>;
4
+ export { DEFAULT_BROWSER_ZONE, ensure_browser_zone, get_cdp_endpoint };
5
+ //# sourceMappingURL=browser-credentials.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser-credentials.d.ts","sourceRoot":"","sources":["../../src/utils/browser-credentials.ts"],"names":[],"mappings":"AAEA,QAAA,MAAM,oBAAoB,gBAAgB,CAAC;AA+B3C,QAAA,MAAM,mBAAmB,GACrB,SAAS,MAAM,EACf,aAA2B,KAC5B,OAAO,CAAC,IAAI,CAad,CAAC;AAEF,QAAA,MAAM,gBAAgB,GAClB,SAAS,MAAM,EACf,MAAM,MAAM,EACZ,UAAU,MAAM,KACjB,OAAO,CAAC,MAAM,CA6BhB,CAAC;AAEF,OAAO,EAAC,oBAAoB,EAAE,mBAAmB,EAAE,gBAAgB,EAAC,CAAC"}
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.get_cdp_endpoint = exports.ensure_browser_zone = exports.DEFAULT_BROWSER_ZONE = void 0;
4
+ const client_1 = require("./client");
5
+ const DEFAULT_BROWSER_ZONE = 'cli_browser';
6
+ exports.DEFAULT_BROWSER_ZONE = DEFAULT_BROWSER_ZONE;
7
+ const normalize_zone = (zone) => {
8
+ const normalized = zone.trim();
9
+ if (!normalized)
10
+ throw new Error('Browser zone cannot be empty.');
11
+ return normalized;
12
+ };
13
+ const normalize_country = (country) => {
14
+ const normalized = country?.trim().toLowerCase();
15
+ if (!normalized)
16
+ return undefined;
17
+ if (!/^[a-z]{2}$/.test(normalized))
18
+ throw new Error('Browser country must be a 2-letter ISO code.');
19
+ return normalized;
20
+ };
21
+ const ensure_browser_zone = async (api_key, zone = DEFAULT_BROWSER_ZONE) => {
22
+ const normalized_zone = normalize_zone(zone);
23
+ const zones = await (0, client_1.get)(api_key, '/zone/get_active_zones');
24
+ const has_browser_zone = zones.some(z => z.name == normalized_zone && z.type == 'browser_api');
25
+ if (has_browser_zone)
26
+ return;
27
+ await (0, client_1.post)(api_key, '/zone', {
28
+ zone: { name: normalized_zone, type: 'browser_api' },
29
+ plan: { type: 'browser_api' },
30
+ });
31
+ };
32
+ exports.ensure_browser_zone = ensure_browser_zone;
33
+ const get_cdp_endpoint = async (api_key, zone, country) => {
34
+ const normalized_zone = normalize_zone(zone);
35
+ const normalized_country = normalize_country(country);
36
+ const { customer } = await (0, client_1.get)(api_key, '/status');
37
+ if (!customer) {
38
+ throw new Error('Could not resolve Bright Data customer ID from /status.');
39
+ }
40
+ const endpoint = `/zone/passwords?zone=${encodeURIComponent(normalized_zone)}`;
41
+ const { passwords } = await (0, client_1.get)(api_key, endpoint);
42
+ const password = passwords?.[0];
43
+ if (!password) {
44
+ throw new Error(`No browser password found for zone "${normalized_zone}".`);
45
+ }
46
+ const country_suffix = normalized_country
47
+ ? `-country-${normalized_country}`
48
+ : '';
49
+ return `wss://brd-customer-${customer}-zone-${normalized_zone}`
50
+ + `${country_suffix}:${password}@brd.superproxy.io:9222`;
51
+ };
52
+ exports.get_cdp_endpoint = get_cdp_endpoint;
53
+ //# sourceMappingURL=browser-credentials.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser-credentials.js","sourceRoot":"","sources":["../../src/utils/browser-credentials.ts"],"names":[],"mappings":";;;AAAA,qCAAmC;AAEnC,MAAM,oBAAoB,GAAG,aAAa,CAAC;AAoFnC,oDAAoB;AArE5B,MAAM,cAAc,GAAG,CAAC,IAAY,EAAS,EAAE;IAC3C,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAC/B,IAAI,CAAC,UAAU;QACX,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;IACrD,OAAO,UAAU,CAAC;AACtB,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CAAC,OAAgB,EAAmB,EAAE;IAC5D,MAAM,UAAU,GAAG,OAAO,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACjD,IAAI,CAAC,UAAU;QACX,OAAO,SAAS,CAAC;IACrB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;IACpE,OAAO,UAAU,CAAC;AACtB,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG,KAAK,EAC7B,OAAe,EACf,IAAI,GAAG,oBAAoB,EACf,EAAE;IACd,MAAM,eAAe,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;IAC7C,MAAM,KAAK,GAAG,MAAM,IAAA,YAAG,EAAiB,OAAO,EAAE,wBAAwB,CAAC,CAAC;IAC3E,MAAM,gBAAgB,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAA,EAAE,CACnC,CAAC,CAAC,IAAI,IAAI,eAAe,IAAI,CAAC,CAAC,IAAI,IAAI,aAAa,CACvD,CAAC;IACF,IAAI,gBAAgB;QAChB,OAAO;IAEX,MAAM,IAAA,aAAI,EAAC,OAAO,EAAE,OAAO,EAAE;QACzB,IAAI,EAAE,EAAC,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,aAAa,EAAC;QAClD,IAAI,EAAE,EAAC,IAAI,EAAE,aAAa,EAAC;KAC9B,CAAC,CAAC;AACP,CAAC,CAAC;AAqC4B,kDAAmB;AAnCjD,MAAM,gBAAgB,GAAG,KAAK,EAC1B,OAAe,EACf,IAAY,EACZ,OAAgB,EACF,EAAE;IAChB,MAAM,eAAe,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;IAC7C,MAAM,kBAAkB,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAEtD,MAAM,EAAC,QAAQ,EAAC,GAAG,MAAM,IAAA,YAAG,EAAkB,OAAO,EAAE,SAAS,CAAC,CAAC;IAClE,IAAI,CAAC,QAAQ,EACb,CAAC;QACG,MAAM,IAAI,KAAK,CACX,yDAAyD,CAC5D,CAAC;IACN,CAAC;IAED,MAAM,QAAQ,GAAG,wBAAwB,kBAAkB,CACvD,eAAe,CAClB,EAAE,CAAC;IACJ,MAAM,EAAC,SAAS,EAAC,GAAG,MAAM,IAAA,YAAG,EAA0B,OAAO,EAAE,QAAQ,CAAC,CAAC;IAC1E,MAAM,QAAQ,GAAG,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC;IAChC,IAAI,CAAC,QAAQ,EACb,CAAC;QACG,MAAM,IAAI,KAAK,CACX,uCAAuC,eAAe,IAAI,CAC7D,CAAC;IACN,CAAC;IAED,MAAM,cAAc,GAAG,kBAAkB;QACrC,CAAC,CAAC,YAAY,kBAAkB,EAAE;QAClC,CAAC,CAAC,EAAE,CAAC;IACT,OAAO,sBAAsB,QAAQ,SAAS,eAAe,EAAE;UACzD,GAAG,cAAc,IAAI,QAAQ,yBAAyB,CAAC;AACjE,CAAC,CAAC;AAEiD,4CAAgB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@brightdata/cli",
3
- "version": "0.1.4",
3
+ "version": "0.1.5",
4
4
  "description": "Command-line interface for Bright Data. Scrape, search, extract structured data, and automate browsers directly from your terminal.",
5
5
  "main": "dist/index.js",
6
6
  "bin": {
@@ -60,6 +60,7 @@
60
60
  "commander": "^14.0.2",
61
61
  "open": "^11.0.0",
62
62
  "picocolors": "^1.1.1",
63
+ "playwright-core": "^1.58.2",
63
64
  "xdg-basedir": "^5.1.0"
64
65
  }
65
66
  }