@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.
- package/README.md +410 -1
- package/dist/__tests__/browser/connection.test.d.ts +2 -0
- package/dist/__tests__/browser/connection.test.d.ts.map +1 -0
- package/dist/__tests__/browser/connection.test.js +168 -0
- package/dist/__tests__/browser/connection.test.js.map +1 -0
- package/dist/__tests__/browser/daemon.test.d.ts +2 -0
- package/dist/__tests__/browser/daemon.test.d.ts.map +1 -0
- package/dist/__tests__/browser/daemon.test.js +586 -0
- package/dist/__tests__/browser/daemon.test.js.map +1 -0
- package/dist/__tests__/browser/entrypoint.test.d.ts +2 -0
- package/dist/__tests__/browser/entrypoint.test.d.ts.map +1 -0
- package/dist/__tests__/browser/entrypoint.test.js +53 -0
- package/dist/__tests__/browser/entrypoint.test.js.map +1 -0
- package/dist/__tests__/browser/ipc.test.d.ts +2 -0
- package/dist/__tests__/browser/ipc.test.d.ts.map +1 -0
- package/dist/__tests__/browser/ipc.test.js +199 -0
- package/dist/__tests__/browser/ipc.test.js.map +1 -0
- package/dist/__tests__/browser/lifecycle.test.d.ts +2 -0
- package/dist/__tests__/browser/lifecycle.test.d.ts.map +1 -0
- package/dist/__tests__/browser/lifecycle.test.js +176 -0
- package/dist/__tests__/browser/lifecycle.test.js.map +1 -0
- package/dist/__tests__/browser/snapshot.test.d.ts +2 -0
- package/dist/__tests__/browser/snapshot.test.d.ts.map +1 -0
- package/dist/__tests__/browser/snapshot.test.js +202 -0
- package/dist/__tests__/browser/snapshot.test.js.map +1 -0
- package/dist/__tests__/commands/add-mcp.test.d.ts +2 -0
- package/dist/__tests__/commands/add-mcp.test.d.ts.map +1 -0
- package/dist/__tests__/commands/add-mcp.test.js +138 -0
- package/dist/__tests__/commands/add-mcp.test.js.map +1 -0
- package/dist/__tests__/commands/browser.test.d.ts +2 -0
- package/dist/__tests__/commands/browser.test.d.ts.map +1 -0
- package/dist/__tests__/commands/browser.test.js +431 -0
- package/dist/__tests__/commands/browser.test.js.map +1 -0
- package/dist/__tests__/utils/browser-credentials.test.d.ts +2 -0
- package/dist/__tests__/utils/browser-credentials.test.d.ts.map +1 -0
- package/dist/__tests__/utils/browser-credentials.test.js +81 -0
- package/dist/__tests__/utils/browser-credentials.test.js.map +1 -0
- package/dist/__tests__/utils/mcp-config.test.d.ts +2 -0
- package/dist/__tests__/utils/mcp-config.test.d.ts.map +1 -0
- package/dist/__tests__/utils/mcp-config.test.js +154 -0
- package/dist/__tests__/utils/mcp-config.test.js.map +1 -0
- package/dist/browser/connection.d.ts +24 -0
- package/dist/browser/connection.d.ts.map +1 -0
- package/dist/browser/connection.js +55 -0
- package/dist/browser/connection.js.map +1 -0
- package/dist/browser/daemon.d.ts +130 -0
- package/dist/browser/daemon.d.ts.map +1 -0
- package/dist/browser/daemon.js +645 -0
- package/dist/browser/daemon.js.map +1 -0
- package/dist/browser/entrypoint.d.ts +20 -0
- package/dist/browser/entrypoint.d.ts.map +1 -0
- package/dist/browser/entrypoint.js +46 -0
- package/dist/browser/entrypoint.js.map +1 -0
- package/dist/browser/interaction.d.ts +32 -0
- package/dist/browser/interaction.d.ts.map +1 -0
- package/dist/browser/interaction.js +215 -0
- package/dist/browser/interaction.js.map +1 -0
- package/dist/browser/ipc.d.ts +52 -0
- package/dist/browser/ipc.d.ts.map +1 -0
- package/dist/browser/ipc.js +254 -0
- package/dist/browser/ipc.js.map +1 -0
- package/dist/browser/lifecycle.d.ts +31 -0
- package/dist/browser/lifecycle.d.ts.map +1 -0
- package/dist/browser/lifecycle.js +202 -0
- package/dist/browser/lifecycle.js.map +1 -0
- package/dist/browser/screenshot.d.ts +19 -0
- package/dist/browser/screenshot.d.ts.map +1 -0
- package/dist/browser/screenshot.js +44 -0
- package/dist/browser/screenshot.js.map +1 -0
- package/dist/browser/snapshot.d.ts +48 -0
- package/dist/browser/snapshot.d.ts.map +1 -0
- package/dist/browser/snapshot.js +490 -0
- package/dist/browser/snapshot.js.map +1 -0
- package/dist/commands/add-mcp.d.ts +18 -0
- package/dist/commands/add-mcp.d.ts.map +1 -0
- package/dist/commands/add-mcp.js +196 -0
- package/dist/commands/add-mcp.js.map +1 -0
- package/dist/commands/browser.d.ts +62 -0
- package/dist/commands/browser.d.ts.map +1 -0
- package/dist/commands/browser.js +615 -0
- package/dist/commands/browser.js.map +1 -0
- package/dist/index.js +40 -21
- package/dist/index.js.map +1 -1
- package/dist/utils/browser-credentials.d.ts +5 -0
- package/dist/utils/browser-credentials.d.ts.map +1 -0
- package/dist/utils/browser-credentials.js +53 -0
- package/dist/utils/browser-credentials.js.map +1 -0
- package/dist/utils/mcp-config.d.ts +15 -0
- package/dist/utils/mcp-config.d.ts.map +1 -0
- package/dist/utils/mcp-config.js +87 -0
- package/dist/utils/mcp-config.js.map +1 -0
- 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
|
|
22
|
-
program
|
|
23
|
-
.
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
program.addCommand(
|
|
34
|
-
program.addCommand(
|
|
35
|
-
program.addCommand(
|
|
36
|
-
program.addCommand(
|
|
37
|
-
program.addCommand(
|
|
38
|
-
program.addCommand(
|
|
39
|
-
program.addCommand(
|
|
40
|
-
program.addCommand(
|
|
41
|
-
program.
|
|
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;
|
|
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":";;;;;;AAAA,4CAAoB;AACpB,4CAAoB;AACpB,gDAAwB;AAQxB,MAAM,wBAAyB,SAAQ,KAAK;IACxC,SAAS,CAAS;IAElB,YAAY,SAAiB,EAAE,MAAc;QAEzC,KAAK,CAAC,kBAAkB,GAAC,SAAS,GAAC,IAAI,GAAC,MAAM,CAAC,CAAC;QAChD,IAAI,CAAC,IAAI,GAAG,0BAA0B,CAAC;QACvC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC/B,CAAC;CACJ;AAgGG,4DAAwB;AA9F5B,MAAM,eAAe,GAAG,CAAC,KAAc,EAAuB,EAAE,CAC5D,OAAO,KAAK,IAAI,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAExE,MAAM,mBAAmB,GAAG,CAAC,OAAe,EAAC,EAAE,CAAA,CAAC;IAC5C,OAAO,EAAE,KAAK;IACd,IAAI,EAAE,CAAC,iBAAiB,CAAC;IACzB,GAAG,EAAE;QACD,SAAS,EAAE,OAAO;KACrB;CACJ,CAAC,CAAC;AAEH,MAAM,gBAAgB,GAAG,CACrB,SAAiB,EACjB,OAAuB,EAAE,EACf,EAAE;IACZ,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,SAAS,CAAC;QACzB,OAAO,EAAE,CAAC;IAEd,MAAM,GAAG,GAAG,YAAE,CAAC,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;IACtD,IAAI,CAAC,GAAG;QACJ,OAAO,EAAE,CAAC;IAEd,IAAI,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAY,CAAC;QAC1C,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;QACtD,OAAO,MAAM,CAAC;IAClB,CAAC;IAAC,OAAM,KAAK,EAAE,CAAC;QACZ,IAAI,IAAI,CAAC,iBAAiB;YACtB,OAAO,EAAE,CAAC;QACd,MAAM,MAAM,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;QACxE,MAAM,IAAI,wBAAwB,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAC1D,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CACtB,SAAiB,EACjB,OAAe,EACf,OAAuB,EAAE,EAC5B,EAAE;IACC,MAAM,OAAO,GAAG,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAClD,MAAM,WAAW,GAAG,eAAe,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QACtD,CAAC,CAAC,OAAO,CAAC,YAAY,CAAgB;QACtC,CAAC,CAAC,EAAE,CAAC;IACT,MAAM,IAAI,GAAG;QACT,GAAG,OAAO;QACV,UAAU,EAAE;YACR,GAAG,WAAW;YACd,aAAa,EAAE,mBAAmB,CAAC,OAAO,CAAC;SAC9C;KACJ,CAAC;IACF,MAAM,GAAG,GAAG,cAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAEpC,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,GAAG,CAAC;QACnB,YAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAC,SAAS,EAAE,IAAI,EAAC,CAAC,CAAC;IAEzC,YAAE,CAAC,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,GAAC,IAAI,EAAE;QAC5D,IAAI,EAAE,KAAK;KACd,CAAC,CAAC;IACH,YAAE,CAAC,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;AACnC,CAAC,CAAC;AAmCE,8CAAiB;AAjCrB,MAAM,qBAAqB,GAAG,CAC1B,OAAe,EACf,KAAgB,EAChB,OAAuB,EAAE,EAC5B,EAAE;IACC,MAAM,SAAS,GAAG,KAAK,IAAI,SAAS;QAChC,CAAC,CAAC,cAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,eAAe,CAAC;QACtD,CAAC,CAAC,cAAI,CAAC,IAAI,CAAC,YAAE,CAAC,OAAO,EAAE,EAAE,cAAc,CAAC,CAAC;IAC9C,iBAAiB,CAAC,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;AAChD,CAAC,CAAC;AAyBE,sDAAqB;AAvBzB,MAAM,gBAAgB,GAAG,CACrB,OAAe,EACf,KAAgB,EAChB,OAAuB,EAAE,EAC5B,EAAE;IACC,MAAM,SAAS,GAAG,KAAK,IAAI,SAAS;QAChC,CAAC,CAAC,cAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,UAAU,CAAC;QACjD,CAAC,CAAC,cAAI,CAAC,IAAI,CAAC,YAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;IACrD,iBAAiB,CAAC,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;AAChD,CAAC,CAAC;AAeE,4CAAgB;AAbpB,MAAM,eAAe,GAAG,CACpB,OAAe,EACf,OAAuB,EAAE,EAC5B,EAAE;IACC,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE;WAC7C,cAAI,CAAC,IAAI,CAAC,YAAE,CAAC,OAAO,EAAE,EAAE,QAAQ,CAAC,CAAC;IACzC,iBAAiB,CAAC,cAAI,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;AACxE,CAAC,CAAC;AAOE,0CAAe"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@brightdata/cli",
|
|
3
|
-
"version": "0.1.
|
|
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
|
}
|