@brightdata/cli 0.1.3 → 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 (92) hide show
  1. package/README.md +410 -1
  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/add-mcp.test.d.ts +2 -0
  27. package/dist/__tests__/commands/add-mcp.test.d.ts.map +1 -0
  28. package/dist/__tests__/commands/add-mcp.test.js +138 -0
  29. package/dist/__tests__/commands/add-mcp.test.js.map +1 -0
  30. package/dist/__tests__/commands/browser.test.d.ts +2 -0
  31. package/dist/__tests__/commands/browser.test.d.ts.map +1 -0
  32. package/dist/__tests__/commands/browser.test.js +431 -0
  33. package/dist/__tests__/commands/browser.test.js.map +1 -0
  34. package/dist/__tests__/utils/browser-credentials.test.d.ts +2 -0
  35. package/dist/__tests__/utils/browser-credentials.test.d.ts.map +1 -0
  36. package/dist/__tests__/utils/browser-credentials.test.js +81 -0
  37. package/dist/__tests__/utils/browser-credentials.test.js.map +1 -0
  38. package/dist/__tests__/utils/mcp-config.test.d.ts +2 -0
  39. package/dist/__tests__/utils/mcp-config.test.d.ts.map +1 -0
  40. package/dist/__tests__/utils/mcp-config.test.js +154 -0
  41. package/dist/__tests__/utils/mcp-config.test.js.map +1 -0
  42. package/dist/browser/connection.d.ts +24 -0
  43. package/dist/browser/connection.d.ts.map +1 -0
  44. package/dist/browser/connection.js +55 -0
  45. package/dist/browser/connection.js.map +1 -0
  46. package/dist/browser/daemon.d.ts +130 -0
  47. package/dist/browser/daemon.d.ts.map +1 -0
  48. package/dist/browser/daemon.js +645 -0
  49. package/dist/browser/daemon.js.map +1 -0
  50. package/dist/browser/entrypoint.d.ts +20 -0
  51. package/dist/browser/entrypoint.d.ts.map +1 -0
  52. package/dist/browser/entrypoint.js +46 -0
  53. package/dist/browser/entrypoint.js.map +1 -0
  54. package/dist/browser/interaction.d.ts +32 -0
  55. package/dist/browser/interaction.d.ts.map +1 -0
  56. package/dist/browser/interaction.js +215 -0
  57. package/dist/browser/interaction.js.map +1 -0
  58. package/dist/browser/ipc.d.ts +52 -0
  59. package/dist/browser/ipc.d.ts.map +1 -0
  60. package/dist/browser/ipc.js +254 -0
  61. package/dist/browser/ipc.js.map +1 -0
  62. package/dist/browser/lifecycle.d.ts +31 -0
  63. package/dist/browser/lifecycle.d.ts.map +1 -0
  64. package/dist/browser/lifecycle.js +202 -0
  65. package/dist/browser/lifecycle.js.map +1 -0
  66. package/dist/browser/screenshot.d.ts +19 -0
  67. package/dist/browser/screenshot.d.ts.map +1 -0
  68. package/dist/browser/screenshot.js +44 -0
  69. package/dist/browser/screenshot.js.map +1 -0
  70. package/dist/browser/snapshot.d.ts +48 -0
  71. package/dist/browser/snapshot.d.ts.map +1 -0
  72. package/dist/browser/snapshot.js +490 -0
  73. package/dist/browser/snapshot.js.map +1 -0
  74. package/dist/commands/add-mcp.d.ts +18 -0
  75. package/dist/commands/add-mcp.d.ts.map +1 -0
  76. package/dist/commands/add-mcp.js +196 -0
  77. package/dist/commands/add-mcp.js.map +1 -0
  78. package/dist/commands/browser.d.ts +62 -0
  79. package/dist/commands/browser.d.ts.map +1 -0
  80. package/dist/commands/browser.js +615 -0
  81. package/dist/commands/browser.js.map +1 -0
  82. package/dist/index.js +40 -21
  83. package/dist/index.js.map +1 -1
  84. package/dist/utils/browser-credentials.d.ts +5 -0
  85. package/dist/utils/browser-credentials.d.ts.map +1 -0
  86. package/dist/utils/browser-credentials.js +53 -0
  87. package/dist/utils/browser-credentials.js.map +1 -0
  88. package/dist/utils/mcp-config.d.ts +15 -0
  89. package/dist/utils/mcp-config.d.ts.map +1 -0
  90. package/dist/utils/mcp-config.js +87 -0
  91. package/dist/utils/mcp-config.js.map +1 -0
  92. 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,26 +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");
22
+ const add_mcp_1 = require("./commands/add-mcp");
20
23
  const package_json_1 = __importDefault(require("../package.json"));
21
- const program = new commander_1.Command();
22
- program
23
- .name('brightdata')
24
- .description('Command-line interface for Bright Data. Scrape, search, '
25
- + 'extract structured data, and automate browsers from your terminal.')
26
- .version(package_json_1.default.version, '-v, --version')
27
- .option('-k, --api-key <key>', 'Bright Data API key (overrides env/config)')
28
- .option('--timing', 'Show request timing');
29
- program.addCommand(login_1.login_command);
30
- program.addCommand(logout_1.logout_command);
31
- program.addCommand(scrape_1.scrape_command);
32
- program.addCommand(search_1.search_command);
33
- program.addCommand(dataset_1.pipelines_command);
34
- program.addCommand(status_1.status_command);
35
- program.addCommand(zones_1.zones_command);
36
- program.addCommand(config_1.config_command);
37
- program.addCommand(init_1.init_command);
38
- program.addCommand(version_1.version_command);
39
- program.addCommand(skill_1.skill_command);
40
- program.addCommand(budget_1.budget_command);
41
- 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
+ });
42
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,mEAA0C;AAE1C,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,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;AAGnC,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"}
@@ -0,0 +1,15 @@
1
+ type Mcp_scope = 'global' | 'project';
2
+ type Mcp_write_opts = {
3
+ overwrite_invalid?: boolean;
4
+ };
5
+ declare class Invalid_mcp_config_error extends Error {
6
+ file_path: string;
7
+ constructor(file_path: string, reason: string);
8
+ }
9
+ declare const upsert_mcp_config: (file_path: string, api_key: string, opts?: Mcp_write_opts) => void;
10
+ declare const write_claude_code_mcp: (api_key: string, scope: Mcp_scope, opts?: Mcp_write_opts) => void;
11
+ declare const write_cursor_mcp: (api_key: string, scope: Mcp_scope, opts?: Mcp_write_opts) => void;
12
+ declare const write_codex_mcp: (api_key: string, opts?: Mcp_write_opts) => void;
13
+ export { Invalid_mcp_config_error, upsert_mcp_config, write_claude_code_mcp, write_cursor_mcp, write_codex_mcp, };
14
+ export type { Mcp_scope, Mcp_write_opts };
15
+ //# sourceMappingURL=mcp-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-config.d.ts","sourceRoot":"","sources":["../../src/utils/mcp-config.ts"],"names":[],"mappings":"AAIA,KAAK,SAAS,GAAG,QAAQ,GAAC,SAAS,CAAC;AACpC,KAAK,cAAc,GAAG;IAClB,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC/B,CAAC;AAGF,cAAM,wBAAyB,SAAQ,KAAK;IACxC,SAAS,EAAE,MAAM,CAAC;gBAEN,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;CAMhD;AAqCD,QAAA,MAAM,iBAAiB,GACnB,WAAW,MAAM,EACjB,SAAS,MAAM,EACf,OAAM,cAAmB,SAsB5B,CAAC;AAEF,QAAA,MAAM,qBAAqB,GACvB,SAAS,MAAM,EACf,OAAO,SAAS,EAChB,OAAM,cAAmB,SAM5B,CAAC;AAEF,QAAA,MAAM,gBAAgB,GAClB,SAAS,MAAM,EACf,OAAO,SAAS,EAChB,OAAM,cAAmB,SAM5B,CAAC;AAEF,QAAA,MAAM,eAAe,GACjB,SAAS,MAAM,EACf,OAAM,cAAmB,SAK5B,CAAC;AAEF,OAAO,EACH,wBAAwB,EACxB,iBAAiB,EACjB,qBAAqB,EACrB,gBAAgB,EAChB,eAAe,GAClB,CAAC;AACF,YAAY,EAAC,SAAS,EAAE,cAAc,EAAC,CAAC"}
@@ -0,0 +1,87 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.write_codex_mcp = exports.write_cursor_mcp = exports.write_claude_code_mcp = exports.upsert_mcp_config = exports.Invalid_mcp_config_error = void 0;
7
+ const fs_1 = __importDefault(require("fs"));
8
+ const os_1 = __importDefault(require("os"));
9
+ const path_1 = __importDefault(require("path"));
10
+ class Invalid_mcp_config_error extends Error {
11
+ file_path;
12
+ constructor(file_path, reason) {
13
+ super('Invalid JSON in ' + file_path + ': ' + reason);
14
+ this.name = 'Invalid_mcp_config_error';
15
+ this.file_path = file_path;
16
+ }
17
+ }
18
+ exports.Invalid_mcp_config_error = Invalid_mcp_config_error;
19
+ const is_plain_object = (value) => typeof value == 'object' && value !== null && !Array.isArray(value);
20
+ const get_bright_data_mcp = (api_key) => ({
21
+ command: 'npx',
22
+ args: ['@brightdata/mcp'],
23
+ env: {
24
+ API_TOKEN: api_key,
25
+ },
26
+ });
27
+ const load_json_object = (file_path, opts = {}) => {
28
+ if (!fs_1.default.existsSync(file_path))
29
+ return {};
30
+ const raw = fs_1.default.readFileSync(file_path, 'utf8').trim();
31
+ if (!raw)
32
+ return {};
33
+ try {
34
+ const parsed = JSON.parse(raw);
35
+ if (!is_plain_object(parsed))
36
+ throw new Error('Expected top-level JSON object');
37
+ return parsed;
38
+ }
39
+ catch (error) {
40
+ if (opts.overwrite_invalid)
41
+ return {};
42
+ const reason = error instanceof Error ? error.message : 'Unknown error';
43
+ throw new Invalid_mcp_config_error(file_path, reason);
44
+ }
45
+ };
46
+ const upsert_mcp_config = (file_path, api_key, opts = {}) => {
47
+ const current = load_json_object(file_path, opts);
48
+ const mcp_servers = is_plain_object(current['mcpServers'])
49
+ ? current['mcpServers']
50
+ : {};
51
+ const next = {
52
+ ...current,
53
+ mcpServers: {
54
+ ...mcp_servers,
55
+ 'bright-data': get_bright_data_mcp(api_key),
56
+ },
57
+ };
58
+ const dir = path_1.default.dirname(file_path);
59
+ if (!fs_1.default.existsSync(dir))
60
+ fs_1.default.mkdirSync(dir, { recursive: true });
61
+ fs_1.default.writeFileSync(file_path, JSON.stringify(next, null, 4) + '\n', {
62
+ mode: 0o600,
63
+ });
64
+ fs_1.default.chmodSync(file_path, 0o600);
65
+ };
66
+ exports.upsert_mcp_config = upsert_mcp_config;
67
+ const write_claude_code_mcp = (api_key, scope, opts = {}) => {
68
+ const file_path = scope == 'project'
69
+ ? path_1.default.join(process.cwd(), '.claude', 'settings.json')
70
+ : path_1.default.join(os_1.default.homedir(), '.claude.json');
71
+ upsert_mcp_config(file_path, api_key, opts);
72
+ };
73
+ exports.write_claude_code_mcp = write_claude_code_mcp;
74
+ const write_cursor_mcp = (api_key, scope, opts = {}) => {
75
+ const file_path = scope == 'project'
76
+ ? path_1.default.join(process.cwd(), '.cursor', 'mcp.json')
77
+ : path_1.default.join(os_1.default.homedir(), '.cursor', 'mcp.json');
78
+ upsert_mcp_config(file_path, api_key, opts);
79
+ };
80
+ exports.write_cursor_mcp = write_cursor_mcp;
81
+ const write_codex_mcp = (api_key, opts = {}) => {
82
+ const codex_home = process.env['CODEX_HOME']?.trim()
83
+ || path_1.default.join(os_1.default.homedir(), '.codex');
84
+ upsert_mcp_config(path_1.default.join(codex_home, 'mcp.json'), api_key, opts);
85
+ };
86
+ exports.write_codex_mcp = write_codex_mcp;
87
+ //# sourceMappingURL=mcp-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-config.js","sourceRoot":"","sources":["../../src/utils/mcp-config.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@brightdata/cli",
3
- "version": "0.1.3",
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
  }