@brightdata/cli 0.1.0

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 (170) hide show
  1. package/README.md +624 -0
  2. package/dist/__tests__/commands/budget.test.d.ts +2 -0
  3. package/dist/__tests__/commands/budget.test.d.ts.map +1 -0
  4. package/dist/__tests__/commands/budget.test.js +199 -0
  5. package/dist/__tests__/commands/budget.test.js.map +1 -0
  6. package/dist/__tests__/commands/dataset.test.d.ts +2 -0
  7. package/dist/__tests__/commands/dataset.test.d.ts.map +1 -0
  8. package/dist/__tests__/commands/dataset.test.js +22 -0
  9. package/dist/__tests__/commands/dataset.test.js.map +1 -0
  10. package/dist/__tests__/commands/login.test.d.ts +2 -0
  11. package/dist/__tests__/commands/login.test.d.ts.map +1 -0
  12. package/dist/__tests__/commands/login.test.js +123 -0
  13. package/dist/__tests__/commands/login.test.js.map +1 -0
  14. package/dist/__tests__/commands/scrape.test.d.ts +2 -0
  15. package/dist/__tests__/commands/scrape.test.d.ts.map +1 -0
  16. package/dist/__tests__/commands/scrape.test.js +73 -0
  17. package/dist/__tests__/commands/scrape.test.js.map +1 -0
  18. package/dist/__tests__/commands/search.test.d.ts +2 -0
  19. package/dist/__tests__/commands/search.test.d.ts.map +1 -0
  20. package/dist/__tests__/commands/search.test.js +95 -0
  21. package/dist/__tests__/commands/search.test.js.map +1 -0
  22. package/dist/__tests__/commands/skill-add.test.d.ts +2 -0
  23. package/dist/__tests__/commands/skill-add.test.d.ts.map +1 -0
  24. package/dist/__tests__/commands/skill-add.test.js +177 -0
  25. package/dist/__tests__/commands/skill-add.test.js.map +1 -0
  26. package/dist/__tests__/commands/skill.test.d.ts +2 -0
  27. package/dist/__tests__/commands/skill.test.d.ts.map +1 -0
  28. package/dist/__tests__/commands/skill.test.js +58 -0
  29. package/dist/__tests__/commands/skill.test.js.map +1 -0
  30. package/dist/__tests__/commands/status.test.d.ts +2 -0
  31. package/dist/__tests__/commands/status.test.d.ts.map +1 -0
  32. package/dist/__tests__/commands/status.test.js +71 -0
  33. package/dist/__tests__/commands/status.test.js.map +1 -0
  34. package/dist/__tests__/commands/version.test.d.ts +2 -0
  35. package/dist/__tests__/commands/version.test.d.ts.map +1 -0
  36. package/dist/__tests__/commands/version.test.js +41 -0
  37. package/dist/__tests__/commands/version.test.js.map +1 -0
  38. package/dist/__tests__/utils/browser_auth.test.d.ts +2 -0
  39. package/dist/__tests__/utils/browser_auth.test.d.ts.map +1 -0
  40. package/dist/__tests__/utils/browser_auth.test.js +38 -0
  41. package/dist/__tests__/utils/browser_auth.test.js.map +1 -0
  42. package/dist/__tests__/utils/config.test.d.ts +2 -0
  43. package/dist/__tests__/utils/config.test.d.ts.map +1 -0
  44. package/dist/__tests__/utils/config.test.js +58 -0
  45. package/dist/__tests__/utils/config.test.js.map +1 -0
  46. package/dist/__tests__/utils/polling.test.d.ts +2 -0
  47. package/dist/__tests__/utils/polling.test.d.ts.map +1 -0
  48. package/dist/__tests__/utils/polling.test.js +65 -0
  49. package/dist/__tests__/utils/polling.test.js.map +1 -0
  50. package/dist/commands/budget.d.ts +15 -0
  51. package/dist/commands/budget.d.ts.map +1 -0
  52. package/dist/commands/budget.js +217 -0
  53. package/dist/commands/budget.js.map +1 -0
  54. package/dist/commands/config.d.ts +12 -0
  55. package/dist/commands/config.d.ts.map +1 -0
  56. package/dist/commands/config.js +60 -0
  57. package/dist/commands/config.js.map +1 -0
  58. package/dist/commands/dataset.d.ts +6 -0
  59. package/dist/commands/dataset.d.ts.map +1 -0
  60. package/dist/commands/dataset.js +250 -0
  61. package/dist/commands/dataset.js.map +1 -0
  62. package/dist/commands/init.d.ts +9 -0
  63. package/dist/commands/init.d.ts.map +1 -0
  64. package/dist/commands/init.js +247 -0
  65. package/dist/commands/init.js.map +1 -0
  66. package/dist/commands/login.d.ts +10 -0
  67. package/dist/commands/login.d.ts.map +1 -0
  68. package/dist/commands/login.js +98 -0
  69. package/dist/commands/login.js.map +1 -0
  70. package/dist/commands/logout.d.ts +5 -0
  71. package/dist/commands/logout.d.ts.map +1 -0
  72. package/dist/commands/logout.js +20 -0
  73. package/dist/commands/logout.js.map +1 -0
  74. package/dist/commands/scrape.d.ts +6 -0
  75. package/dist/commands/scrape.d.ts.map +1 -0
  76. package/dist/commands/scrape.js +79 -0
  77. package/dist/commands/scrape.js.map +1 -0
  78. package/dist/commands/search.d.ts +6 -0
  79. package/dist/commands/search.d.ts.map +1 -0
  80. package/dist/commands/search.js +179 -0
  81. package/dist/commands/search.js.map +1 -0
  82. package/dist/commands/skill-add.d.ts +3 -0
  83. package/dist/commands/skill-add.d.ts.map +1 -0
  84. package/dist/commands/skill-add.js +285 -0
  85. package/dist/commands/skill-add.js.map +1 -0
  86. package/dist/commands/skill.d.ts +5 -0
  87. package/dist/commands/skill.d.ts.map +1 -0
  88. package/dist/commands/skill.js +31 -0
  89. package/dist/commands/skill.js.map +1 -0
  90. package/dist/commands/status.d.ts +14 -0
  91. package/dist/commands/status.d.ts.map +1 -0
  92. package/dist/commands/status.js +99 -0
  93. package/dist/commands/status.js.map +1 -0
  94. package/dist/commands/version.d.ts +18 -0
  95. package/dist/commands/version.d.ts.map +1 -0
  96. package/dist/commands/version.js +35 -0
  97. package/dist/commands/version.js.map +1 -0
  98. package/dist/commands/zones.d.ts +13 -0
  99. package/dist/commands/zones.d.ts.map +1 -0
  100. package/dist/commands/zones.js +70 -0
  101. package/dist/commands/zones.js.map +1 -0
  102. package/dist/index.d.ts +3 -0
  103. package/dist/index.d.ts.map +1 -0
  104. package/dist/index.js +42 -0
  105. package/dist/index.js.map +1 -0
  106. package/dist/types/dataset.d.ts +19 -0
  107. package/dist/types/dataset.d.ts.map +1 -0
  108. package/dist/types/dataset.js +3 -0
  109. package/dist/types/dataset.js.map +1 -0
  110. package/dist/types/scrape.d.ts +31 -0
  111. package/dist/types/scrape.d.ts.map +1 -0
  112. package/dist/types/scrape.js +3 -0
  113. package/dist/types/scrape.js.map +1 -0
  114. package/dist/types/search.d.ts +47 -0
  115. package/dist/types/search.d.ts.map +1 -0
  116. package/dist/types/search.js +3 -0
  117. package/dist/types/search.js.map +1 -0
  118. package/dist/utils/auth.d.ts +6 -0
  119. package/dist/utils/auth.d.ts.map +1 -0
  120. package/dist/utils/auth.js +44 -0
  121. package/dist/utils/auth.js.map +1 -0
  122. package/dist/utils/auth_pages.d.ts +3 -0
  123. package/dist/utils/auth_pages.d.ts.map +1 -0
  124. package/dist/utils/auth_pages.js +316 -0
  125. package/dist/utils/auth_pages.js.map +1 -0
  126. package/dist/utils/browser_auth.d.ts +21 -0
  127. package/dist/utils/browser_auth.d.ts.map +1 -0
  128. package/dist/utils/browser_auth.js +290 -0
  129. package/dist/utils/browser_auth.js.map +1 -0
  130. package/dist/utils/client.d.ts +17 -0
  131. package/dist/utils/client.d.ts.map +1 -0
  132. package/dist/utils/client.js +95 -0
  133. package/dist/utils/client.js.map +1 -0
  134. package/dist/utils/config.d.ts +16 -0
  135. package/dist/utils/config.d.ts.map +1 -0
  136. package/dist/utils/config.js +65 -0
  137. package/dist/utils/config.js.map +1 -0
  138. package/dist/utils/credentials.d.ts +11 -0
  139. package/dist/utils/credentials.d.ts.map +1 -0
  140. package/dist/utils/credentials.js +52 -0
  141. package/dist/utils/credentials.js.map +1 -0
  142. package/dist/utils/output.d.ts +23 -0
  143. package/dist/utils/output.d.ts.map +1 -0
  144. package/dist/utils/output.js +89 -0
  145. package/dist/utils/output.js.map +1 -0
  146. package/dist/utils/polling.d.ts +26 -0
  147. package/dist/utils/polling.d.ts.map +1 -0
  148. package/dist/utils/polling.js +46 -0
  149. package/dist/utils/polling.js.map +1 -0
  150. package/dist/utils/skill-installer/agents.d.ts +19 -0
  151. package/dist/utils/skill-installer/agents.d.ts.map +1 -0
  152. package/dist/utils/skill-installer/agents.js +345 -0
  153. package/dist/utils/skill-installer/agents.js.map +1 -0
  154. package/dist/utils/skill-installer/brightdata-skills.d.ts +11 -0
  155. package/dist/utils/skill-installer/brightdata-skills.d.ts.map +1 -0
  156. package/dist/utils/skill-installer/brightdata-skills.js +52 -0
  157. package/dist/utils/skill-installer/brightdata-skills.js.map +1 -0
  158. package/dist/utils/skill-installer/installer.d.ts +34 -0
  159. package/dist/utils/skill-installer/installer.d.ts.map +1 -0
  160. package/dist/utils/skill-installer/installer.js +240 -0
  161. package/dist/utils/skill-installer/installer.js.map +1 -0
  162. package/dist/utils/skill-installer/prompts/search-multiselect.d.ts +22 -0
  163. package/dist/utils/skill-installer/prompts/search-multiselect.d.ts.map +1 -0
  164. package/dist/utils/skill-installer/prompts/search-multiselect.js +251 -0
  165. package/dist/utils/skill-installer/prompts/search-multiselect.js.map +1 -0
  166. package/dist/utils/spinner.d.ts +7 -0
  167. package/dist/utils/spinner.d.ts.map +1 -0
  168. package/dist/utils/spinner.js +27 -0
  169. package/dist/utils/spinner.js.map +1 -0
  170. package/package.json +65 -0
@@ -0,0 +1,240 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getCanonicalPath = exports.getInstallPath = exports.isSkillInstalled = exports.installSkillForAgent = void 0;
4
+ const promises_1 = require("fs/promises");
5
+ const os_1 = require("os");
6
+ const path_1 = require("path");
7
+ const agents_1 = require("./agents");
8
+ const AGENTS_DIR = '.agents';
9
+ const SKILLS_SUBDIR = 'skills';
10
+ const sanitizeName = (name) => {
11
+ const sanitized = name
12
+ .toLowerCase()
13
+ .replace(/[^a-z0-9._]+/g, '-')
14
+ .replace(/^[.\-]+|[.\-]+$/g, '');
15
+ return sanitized.substring(0, 255) || 'unnamed-skill';
16
+ };
17
+ const isPathSafe = (base_path, target_path) => {
18
+ const normalized_base = (0, path_1.normalize)((0, path_1.resolve)(base_path));
19
+ const normalized_target = (0, path_1.normalize)((0, path_1.resolve)(target_path));
20
+ return normalized_target.startsWith(normalized_base + path_1.sep)
21
+ || normalized_target == normalized_base;
22
+ };
23
+ const getCanonicalSkillsDir = (global, cwd) => {
24
+ const base_dir = global ? (0, os_1.homedir)() : cwd || process.cwd();
25
+ return (0, path_1.join)(base_dir, AGENTS_DIR, SKILLS_SUBDIR);
26
+ };
27
+ const getAgentBaseDir = (agent_type, global, cwd) => {
28
+ if ((0, agents_1.isUniversalAgent)(agent_type))
29
+ return getCanonicalSkillsDir(global, cwd);
30
+ const agent = agents_1.agents[agent_type];
31
+ const base_dir = global ? (0, os_1.homedir)() : cwd || process.cwd();
32
+ if (global) {
33
+ if (agent.globalSkillsDir === undefined)
34
+ return (0, path_1.join)(base_dir, agent.skillsDir);
35
+ return agent.globalSkillsDir;
36
+ }
37
+ return (0, path_1.join)(base_dir, agent.skillsDir);
38
+ };
39
+ const cleanAndCreateDirectory = async (path) => {
40
+ try {
41
+ await (0, promises_1.rm)(path, { recursive: true, force: true });
42
+ }
43
+ catch (_e) { }
44
+ await (0, promises_1.mkdir)(path, { recursive: true });
45
+ };
46
+ const resolveSymlinkTarget = (link_path, link_target) => (0, path_1.resolve)((0, path_1.dirname)(link_path), link_target);
47
+ const resolveParentSymlinks = async (path) => {
48
+ const resolved = (0, path_1.resolve)(path);
49
+ const dir = (0, path_1.dirname)(resolved);
50
+ const base = (0, path_1.basename)(resolved);
51
+ try {
52
+ const real_dir = await (0, promises_1.realpath)(dir);
53
+ return (0, path_1.join)(real_dir, base);
54
+ }
55
+ catch (_e) {
56
+ return resolved;
57
+ }
58
+ };
59
+ const createSymlink = async (target, link_path) => {
60
+ try {
61
+ const resolved_target = (0, path_1.resolve)(target);
62
+ const resolved_link_path = (0, path_1.resolve)(link_path);
63
+ const [real_target, real_link_path] = await Promise.all([
64
+ (0, promises_1.realpath)(resolved_target).catch(() => resolved_target),
65
+ (0, promises_1.realpath)(resolved_link_path).catch(() => resolved_link_path),
66
+ ]);
67
+ if (real_target == real_link_path)
68
+ return true;
69
+ const [real_target_with_parents, real_link_with_parents] = await Promise.all([
70
+ resolveParentSymlinks(target),
71
+ resolveParentSymlinks(link_path),
72
+ ]);
73
+ if (real_target_with_parents == real_link_with_parents)
74
+ return true;
75
+ try {
76
+ const stats = await (0, promises_1.lstat)(link_path);
77
+ if (stats.isSymbolicLink()) {
78
+ const existing_target = await (0, promises_1.readlink)(link_path);
79
+ if (resolveSymlinkTarget(link_path, existing_target)
80
+ == resolved_target) {
81
+ return true;
82
+ }
83
+ await (0, promises_1.rm)(link_path);
84
+ }
85
+ else
86
+ await (0, promises_1.rm)(link_path, { recursive: true });
87
+ }
88
+ catch (err) {
89
+ if (err && typeof err == 'object' && 'code' in err
90
+ && err.code == 'ELOOP') {
91
+ try {
92
+ await (0, promises_1.rm)(link_path, { force: true });
93
+ }
94
+ catch (_e) { }
95
+ }
96
+ }
97
+ const link_dir = (0, path_1.dirname)(link_path);
98
+ await (0, promises_1.mkdir)(link_dir, { recursive: true });
99
+ const real_link_dir = await resolveParentSymlinks(link_dir);
100
+ const relative_path = (0, path_1.relative)(real_link_dir, target);
101
+ const symlink_type = (0, os_1.platform)() == 'win32' ? 'junction' : undefined;
102
+ await (0, promises_1.symlink)(relative_path, link_path, symlink_type);
103
+ return true;
104
+ }
105
+ catch (_e) {
106
+ return false;
107
+ }
108
+ };
109
+ const writeSkillFiles = async (target_dir, files) => {
110
+ await (0, promises_1.mkdir)(target_dir, { recursive: true });
111
+ for (const [file_path, content] of Object.entries(files)) {
112
+ const full_path = (0, path_1.join)(target_dir, file_path);
113
+ if (!isPathSafe(target_dir, full_path))
114
+ continue;
115
+ const parent_dir = (0, path_1.dirname)(full_path);
116
+ if (parent_dir != target_dir)
117
+ await (0, promises_1.mkdir)(parent_dir, { recursive: true });
118
+ await (0, promises_1.writeFile)(full_path, content, 'utf8');
119
+ }
120
+ };
121
+ const installSkillForAgent = async (skill, agent_type, options = {}) => {
122
+ const agent = agents_1.agents[agent_type];
123
+ const is_global = options.global ?? false;
124
+ const cwd = options.cwd || process.cwd();
125
+ const install_mode = options.mode ?? 'symlink';
126
+ if (is_global && agent.globalSkillsDir === undefined) {
127
+ return {
128
+ success: false,
129
+ path: '',
130
+ mode: install_mode,
131
+ error: `${agent.displayName} does not support `
132
+ + `global skill installation`,
133
+ };
134
+ }
135
+ const raw_skill_name = skill.name || (0, path_1.basename)(skill.name);
136
+ const skill_name = sanitizeName(raw_skill_name);
137
+ const canonical_base = getCanonicalSkillsDir(is_global, cwd);
138
+ const canonical_dir = (0, path_1.join)(canonical_base, skill_name);
139
+ const agent_base = getAgentBaseDir(agent_type, is_global, cwd);
140
+ const agent_dir = (0, path_1.join)(agent_base, skill_name);
141
+ if (!isPathSafe(canonical_base, canonical_dir)) {
142
+ return {
143
+ success: false,
144
+ path: agent_dir,
145
+ mode: install_mode,
146
+ error: 'Invalid skill name: potential path traversal detected',
147
+ };
148
+ }
149
+ if (!isPathSafe(agent_base, agent_dir)) {
150
+ return {
151
+ success: false,
152
+ path: agent_dir,
153
+ mode: install_mode,
154
+ error: 'Invalid skill name: potential path traversal detected',
155
+ };
156
+ }
157
+ try {
158
+ if (install_mode == 'copy') {
159
+ await cleanAndCreateDirectory(agent_dir);
160
+ await writeSkillFiles(agent_dir, skill.files);
161
+ return {
162
+ success: true,
163
+ path: agent_dir,
164
+ mode: 'copy',
165
+ };
166
+ }
167
+ await cleanAndCreateDirectory(canonical_dir);
168
+ await writeSkillFiles(canonical_dir, skill.files);
169
+ if (is_global && (0, agents_1.isUniversalAgent)(agent_type)) {
170
+ return {
171
+ success: true,
172
+ path: canonical_dir,
173
+ canonicalPath: canonical_dir,
174
+ mode: 'symlink',
175
+ };
176
+ }
177
+ const symlink_created = await createSymlink(canonical_dir, agent_dir);
178
+ if (!symlink_created) {
179
+ await cleanAndCreateDirectory(agent_dir);
180
+ await writeSkillFiles(agent_dir, skill.files);
181
+ return {
182
+ success: true,
183
+ path: agent_dir,
184
+ canonicalPath: canonical_dir,
185
+ mode: 'symlink',
186
+ symlinkFailed: true,
187
+ };
188
+ }
189
+ return {
190
+ success: true,
191
+ path: agent_dir,
192
+ canonicalPath: canonical_dir,
193
+ mode: 'symlink',
194
+ };
195
+ }
196
+ catch (error) {
197
+ return {
198
+ success: false,
199
+ path: agent_dir,
200
+ mode: install_mode,
201
+ error: error instanceof Error ? error.message : 'Unknown error',
202
+ };
203
+ }
204
+ };
205
+ exports.installSkillForAgent = installSkillForAgent;
206
+ const isSkillInstalled = async (skill_name, agent_type, options = {}) => {
207
+ const agent = agents_1.agents[agent_type];
208
+ const sanitized = sanitizeName(skill_name);
209
+ if (options.global && agent.globalSkillsDir === undefined)
210
+ return false;
211
+ const target_base = getAgentBaseDir(agent_type, options.global ?? false, options.cwd);
212
+ const skill_dir = (0, path_1.join)(target_base, sanitized);
213
+ if (!isPathSafe(target_base, skill_dir))
214
+ return false;
215
+ try {
216
+ await (0, promises_1.access)(skill_dir);
217
+ return true;
218
+ }
219
+ catch (_e) {
220
+ return false;
221
+ }
222
+ };
223
+ exports.isSkillInstalled = isSkillInstalled;
224
+ const getInstallPath = (skill_name, agent_type, options = {}) => {
225
+ const target_base = getAgentBaseDir(agent_type, options.global ?? false, options.cwd);
226
+ const install_path = (0, path_1.join)(target_base, sanitizeName(skill_name));
227
+ if (!isPathSafe(target_base, install_path))
228
+ throw new Error('Invalid skill name: potential path traversal detected');
229
+ return install_path;
230
+ };
231
+ exports.getInstallPath = getInstallPath;
232
+ const getCanonicalPath = (skill_name, options = {}) => {
233
+ const canonical_base = getCanonicalSkillsDir(options.global ?? false, options.cwd);
234
+ const canonical_path = (0, path_1.join)(canonical_base, sanitizeName(skill_name));
235
+ if (!isPathSafe(canonical_base, canonical_path))
236
+ throw new Error('Invalid skill name: potential path traversal detected');
237
+ return canonical_path;
238
+ };
239
+ exports.getCanonicalPath = getCanonicalPath;
240
+ //# sourceMappingURL=installer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"installer.js","sourceRoot":"","sources":["../../../src/utils/skill-installer/installer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ type Search_item<T> = {
2
+ value: T;
3
+ label: string;
4
+ hint?: string;
5
+ };
6
+ type Locked_section<T> = {
7
+ title: string;
8
+ items: Search_item<T>[];
9
+ };
10
+ type Search_multiselect_options<T> = {
11
+ message: string;
12
+ items: Search_item<T>[];
13
+ maxVisible?: number;
14
+ initialSelected?: T[];
15
+ required?: boolean;
16
+ lockedSection?: Locked_section<T>;
17
+ };
18
+ declare const cancelSymbol: unique symbol;
19
+ declare const searchMultiselect: <T>(options: Search_multiselect_options<T>) => Promise<T[] | symbol>;
20
+ export { searchMultiselect, cancelSymbol };
21
+ export type { Search_item, Locked_section, Search_multiselect_options, };
22
+ //# sourceMappingURL=search-multiselect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-multiselect.d.ts","sourceRoot":"","sources":["../../../../src/utils/skill-installer/prompts/search-multiselect.ts"],"names":[],"mappings":"AAwBA,KAAK,WAAW,CAAC,CAAC,IAAI;IAClB,KAAK,EAAE,CAAC,CAAC;IACT,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACjB,CAAA;AAED,KAAK,cAAc,CAAC,CAAC,IAAI;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;CAC3B,CAAA;AAED,KAAK,0BAA0B,CAAC,CAAC,IAAI;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,CAAC,EAAE,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,aAAa,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC;CACrC,CAAA;AAWD,QAAA,MAAM,YAAY,eAAmB,CAAA;AAmBrC,QAAA,MAAM,iBAAiB,GAAS,CAAC,EAC7B,SAAS,0BAA0B,CAAC,CAAC,CAAC,KACvC,OAAO,CAAC,CAAC,EAAE,GAAC,MAAM,CA4NnB,CAAA;AAEF,OAAO,EAAC,iBAAiB,EAAE,YAAY,EAAC,CAAA;AACxC,YAAY,EACR,WAAW,EACX,cAAc,EACd,0BAA0B,GAC7B,CAAA"}
@@ -0,0 +1,251 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.cancelSymbol = exports.searchMultiselect = void 0;
37
+ const readline = __importStar(require("readline"));
38
+ const stream_1 = require("stream");
39
+ const is_tty = process.stdout.isTTY === true;
40
+ const ansi = (code, text) => is_tty ? `\x1b[${code}m${text}\x1b[0m` : text;
41
+ const bold = (text) => ansi('1', text);
42
+ const dim = (text) => ansi('2', text);
43
+ const underline = (text) => ansi('4', text);
44
+ const inverse = (text) => ansi('7', text);
45
+ const strikethrough = (text) => ansi('9', text);
46
+ const red = (text) => ansi('31', text);
47
+ const green = (text) => ansi('32', text);
48
+ const cyan = (text) => ansi('36', text);
49
+ const silent_output = new stream_1.Writable({
50
+ write(_chunk, _encoding, callback) {
51
+ callback();
52
+ },
53
+ });
54
+ const S_STEP_ACTIVE = green('◆');
55
+ const S_STEP_CANCEL = red('■');
56
+ const S_STEP_SUBMIT = green('◇');
57
+ const S_RADIO_ACTIVE = green('●');
58
+ const S_RADIO_INACTIVE = dim('○');
59
+ const S_BULLET = green('•');
60
+ const S_BAR = dim('│');
61
+ const S_BAR_H = dim('─');
62
+ const cancelSymbol = Symbol('cancel');
63
+ exports.cancelSymbol = cancelSymbol;
64
+ const filter_item = (item, query) => {
65
+ if (!query)
66
+ return true;
67
+ const lower_query = query.toLowerCase();
68
+ return item.label.toLowerCase().includes(lower_query)
69
+ || String(item.value).toLowerCase().includes(lower_query);
70
+ };
71
+ const clear_render = (height) => {
72
+ if (height <= 0)
73
+ return;
74
+ process.stdout.write(`\x1b[${height}A`);
75
+ for (let i = 0; i < height; i++)
76
+ process.stdout.write('\x1b[2K\x1b[1B');
77
+ process.stdout.write(`\x1b[${height}A`);
78
+ };
79
+ const searchMultiselect = async (options) => new Promise(resolve => {
80
+ const { message, items, maxVisible = 8, initialSelected = [], required = false, lockedSection, } = options;
81
+ const rl = readline.createInterface({
82
+ input: process.stdin,
83
+ output: silent_output,
84
+ terminal: false,
85
+ });
86
+ if (process.stdin.isTTY)
87
+ process.stdin.setRawMode(true);
88
+ readline.emitKeypressEvents(process.stdin, rl);
89
+ let query = '';
90
+ let cursor = 0;
91
+ let last_render_height = 0;
92
+ const selected = new Set(initialSelected);
93
+ const locked_values = lockedSection
94
+ ? lockedSection.items.map(item => item.value)
95
+ : [];
96
+ const get_filtered = () => {
97
+ return items.filter(item => filter_item(item, query));
98
+ };
99
+ const render = (state = 'active') => {
100
+ clear_render(last_render_height);
101
+ const lines = [];
102
+ const filtered = get_filtered();
103
+ const icon = state == 'active' ? S_STEP_ACTIVE :
104
+ state == 'cancel' ? S_STEP_CANCEL : S_STEP_SUBMIT;
105
+ lines.push(`${icon} ${bold(message)}`);
106
+ if (state == 'active') {
107
+ if (lockedSection && lockedSection.items.length > 0) {
108
+ lines.push(`${S_BAR}`);
109
+ lines.push(`${S_BAR} ${S_BAR_H}${S_BAR_H} `
110
+ + `${bold(lockedSection.title)} `
111
+ + `${dim('── always included')} `
112
+ + `${S_BAR_H.repeat(12)}`);
113
+ for (const item of lockedSection.items)
114
+ lines.push(`${S_BAR} ${S_BULLET} ${bold(item.label)}`);
115
+ lines.push(`${S_BAR}`);
116
+ lines.push(`${S_BAR} ${S_BAR_H}${S_BAR_H} `
117
+ + `${bold('Additional agents')} `
118
+ + `${S_BAR_H.repeat(29)}`);
119
+ }
120
+ lines.push(`${S_BAR} ${dim('Search:')} ${query}${inverse(' ')}`);
121
+ lines.push(`${S_BAR} ${dim('↑↓ move, space select, enter confirm')}`);
122
+ lines.push(`${S_BAR}`);
123
+ const visible_start = Math.max(0, Math.min(cursor - Math.floor(maxVisible / 2), filtered.length - maxVisible));
124
+ const visible_end = Math.min(filtered.length, visible_start + maxVisible);
125
+ const visible_items = filtered.slice(visible_start, visible_end);
126
+ if (!filtered.length)
127
+ lines.push(`${S_BAR} ${dim('No matches found')}`);
128
+ else {
129
+ for (let i = 0; i < visible_items.length; i++) {
130
+ const item = visible_items[i];
131
+ const actual_index = visible_start + i;
132
+ const is_selected = selected.has(item.value);
133
+ const is_cursor = actual_index == cursor;
134
+ const radio = is_selected ? S_RADIO_ACTIVE :
135
+ S_RADIO_INACTIVE;
136
+ const label = is_cursor ? underline(item.label) :
137
+ item.label;
138
+ const hint = item.hint ? dim(` (${item.hint})`) : '';
139
+ const prefix = is_cursor ? cyan('❯') : ' ';
140
+ lines.push(`${S_BAR} ${prefix} ${radio} ${label}${hint}`);
141
+ }
142
+ const hidden_before = visible_start;
143
+ const hidden_after = filtered.length - visible_end;
144
+ if (hidden_before > 0 || hidden_after > 0) {
145
+ const parts = [];
146
+ if (hidden_before > 0)
147
+ parts.push(`↑ ${hidden_before} more`);
148
+ if (hidden_after > 0)
149
+ parts.push(`↓ ${hidden_after} more`);
150
+ lines.push(`${S_BAR} ${dim(parts.join(' '))}`);
151
+ }
152
+ }
153
+ lines.push(`${S_BAR}`);
154
+ const all_selected_labels = [
155
+ ...(lockedSection
156
+ ? lockedSection.items.map(item => item.label)
157
+ : []),
158
+ ...items.filter(item => selected.has(item.value))
159
+ .map(item => item.label),
160
+ ];
161
+ if (!all_selected_labels.length)
162
+ lines.push(`${S_BAR} ${dim('Selected: (none)')}`);
163
+ else {
164
+ const summary = all_selected_labels.length <= 3
165
+ ? all_selected_labels.join(', ')
166
+ : `${all_selected_labels.slice(0, 3).join(', ')} `
167
+ + `+${all_selected_labels.length - 3} more`;
168
+ lines.push(`${S_BAR} ${green('Selected:')} ${summary}`);
169
+ }
170
+ lines.push(`${dim('└')}`);
171
+ }
172
+ else if (state == 'submit') {
173
+ const all_selected_labels = [
174
+ ...(lockedSection
175
+ ? lockedSection.items.map(item => item.label)
176
+ : []),
177
+ ...items.filter(item => selected.has(item.value))
178
+ .map(item => item.label),
179
+ ];
180
+ lines.push(`${S_BAR} ${dim(all_selected_labels.join(', '))}`);
181
+ }
182
+ else
183
+ lines.push(`${S_BAR} ${strikethrough(dim('Cancelled'))}`);
184
+ process.stdout.write(lines.join('\n') + '\n');
185
+ last_render_height = lines.length;
186
+ };
187
+ const cleanup = () => {
188
+ process.stdin.removeListener('keypress', keypress_handler);
189
+ if (process.stdin.isTTY)
190
+ process.stdin.setRawMode(false);
191
+ rl.close();
192
+ };
193
+ const submit = () => {
194
+ if (required && !selected.size && !locked_values.length)
195
+ return;
196
+ render('submit');
197
+ cleanup();
198
+ resolve([...locked_values, ...Array.from(selected)]);
199
+ };
200
+ const cancel = () => {
201
+ render('cancel');
202
+ cleanup();
203
+ resolve(cancelSymbol);
204
+ };
205
+ const keypress_handler = (_str, key) => {
206
+ if (!key)
207
+ return;
208
+ const filtered = get_filtered();
209
+ if (key.name == 'return')
210
+ return submit();
211
+ if (key.name == 'escape' || key.ctrl && key.name == 'c')
212
+ return cancel();
213
+ if (key.name == 'up') {
214
+ cursor = Math.max(0, cursor - 1);
215
+ render();
216
+ return;
217
+ }
218
+ if (key.name == 'down') {
219
+ cursor = Math.min(filtered.length - 1, cursor + 1);
220
+ render();
221
+ return;
222
+ }
223
+ if (key.name == 'space') {
224
+ const item = filtered[cursor];
225
+ if (item) {
226
+ if (selected.has(item.value))
227
+ selected.delete(item.value);
228
+ else
229
+ selected.add(item.value);
230
+ }
231
+ render();
232
+ return;
233
+ }
234
+ if (key.name == 'backspace') {
235
+ query = query.slice(0, -1);
236
+ cursor = 0;
237
+ render();
238
+ return;
239
+ }
240
+ if (key.sequence && !key.ctrl && !key.meta
241
+ && key.sequence.length == 1) {
242
+ query += key.sequence;
243
+ cursor = 0;
244
+ render();
245
+ }
246
+ };
247
+ process.stdin.on('keypress', keypress_handler);
248
+ render();
249
+ });
250
+ exports.searchMultiselect = searchMultiselect;
251
+ //# sourceMappingURL=search-multiselect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-multiselect.js","sourceRoot":"","sources":["../../../../src/utils/skill-installer/prompts/search-multiselect.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ type Spinner = {
2
+ stop: (final_msg?: string) => void;
3
+ };
4
+ declare const start: (msg: string) => Spinner;
5
+ export { start };
6
+ export type { Spinner };
7
+ //# sourceMappingURL=spinner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spinner.d.ts","sourceRoot":"","sources":["../../src/utils/spinner.ts"],"names":[],"mappings":"AAKA,KAAK,OAAO,GAAG;IACX,IAAI,EAAE,CAAC,SAAS,CAAC,EAAE,MAAM,KAAG,IAAI,CAAC;CACpC,CAAC;AAEF,QAAA,MAAM,KAAK,GAAI,KAAK,MAAM,KAAG,OAmB5B,CAAC;AAEF,OAAO,EAAC,KAAK,EAAC,CAAC;AACf,YAAY,EAAC,OAAO,EAAC,CAAC"}
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.start = void 0;
4
+ const output_1 = require("./output");
5
+ const FRAMES = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'];
6
+ const INTERVAL_MS = 80;
7
+ const start = (msg) => {
8
+ if (!output_1.is_tty) {
9
+ process.stderr.write(msg + '\n');
10
+ return { stop: () => { } };
11
+ }
12
+ let frame = 0;
13
+ const timer = setInterval(() => {
14
+ process.stderr.write(`\r\x1b[36m${FRAMES[frame % FRAMES.length]}` +
15
+ `\x1b[0m ${msg}`);
16
+ frame++;
17
+ }, INTERVAL_MS);
18
+ const stop = (final_msg) => {
19
+ clearInterval(timer);
20
+ process.stderr.write('\r\x1b[2K');
21
+ if (final_msg)
22
+ process.stderr.write(final_msg + '\n');
23
+ };
24
+ return { stop };
25
+ };
26
+ exports.start = start;
27
+ //# sourceMappingURL=spinner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spinner.js","sourceRoot":"","sources":["../../src/utils/spinner.ts"],"names":[],"mappings":";;;AAAA,qCAAgC;AAEhC,MAAM,MAAM,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAClE,MAAM,WAAW,GAAG,EAAE,CAAC;AAMvB,MAAM,KAAK,GAAG,CAAC,GAAW,EAAU,EAAE;IAClC,IAAI,CAAC,eAAM,EACX,CAAC;QACG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAC,IAAI,CAAC,CAAC;QAC/B,OAAO,EAAC,IAAI,EAAE,GAAE,EAAE,GAAC,CAAC,EAAC,CAAC;IAC1B,CAAC;IACD,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,MAAM,KAAK,GAAG,WAAW,CAAC,GAAE,EAAE;QAC1B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE;YAC7D,WAAW,GAAG,EAAE,CAAC,CAAC;QACtB,KAAK,EAAE,CAAC;IACZ,CAAC,EAAE,WAAW,CAAC,CAAC;IAChB,MAAM,IAAI,GAAG,CAAC,SAAkB,EAAC,EAAE;QAC/B,aAAa,CAAC,KAAK,CAAC,CAAC;QACrB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAClC,IAAI,SAAS;YACT,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,GAAC,IAAI,CAAC,CAAC;IAC7C,CAAC,CAAC;IACF,OAAO,EAAC,IAAI,EAAC,CAAC;AAClB,CAAC,CAAC;AAEM,sBAAK"}
package/package.json ADDED
@@ -0,0 +1,65 @@
1
+ {
2
+ "name": "@brightdata/cli",
3
+ "version": "0.1.0",
4
+ "description": "Command-line interface for Bright Data. Scrape, search, extract structured data, and automate browsers directly from your terminal.",
5
+ "main": "dist/index.js",
6
+ "bin": {
7
+ "brightdata": "dist/index.js",
8
+ "bdata": "dist/index.js"
9
+ },
10
+ "scripts": {
11
+ "build": "tsc",
12
+ "dev": "tsc --watch",
13
+ "start": "node dist/index.js",
14
+ "clean": "rm -rf dist",
15
+ "prepublishOnly": "pnpm run build",
16
+ "type-check": "tsc --noEmit",
17
+ "test:watch": "vitest",
18
+ "test": "vitest run",
19
+ "publish-beta": "npm publish --tag beta",
20
+ "publish-prod": "npm publish --access public"
21
+ },
22
+ "keywords": [
23
+ "brightdata",
24
+ "bright-data",
25
+ "cli",
26
+ "web-scraping",
27
+ "scraper",
28
+ "serp",
29
+ "data-extraction",
30
+ "proxy",
31
+ "unlocker",
32
+ "dataset"
33
+ ],
34
+ "author": "Bright Data",
35
+ "license": "ISC",
36
+ "repository": {
37
+ "type": "git",
38
+ "url": "git+https://github.com/brightdata/brightdata-cli.git"
39
+ },
40
+ "bugs": {
41
+ "url": "https://github.com/brightdata/brightdata-cli/issues"
42
+ },
43
+ "homepage": "https://brightdata.com",
44
+ "engines": {
45
+ "node": ">=18.0.0"
46
+ },
47
+ "files": [
48
+ "dist",
49
+ "README.md"
50
+ ],
51
+ "packageManager": "pnpm@10.12.1",
52
+ "devDependencies": {
53
+ "@types/node": "^20.0.0",
54
+ "typescript": "^5.0.0",
55
+ "vitest": "^4.0.0"
56
+ },
57
+ "dependencies": {
58
+ "@clack/prompts": "^1.1.0",
59
+ "@inquirer/prompts": "^8.2.1",
60
+ "commander": "^14.0.2",
61
+ "open": "^11.0.0",
62
+ "picocolors": "^1.1.1",
63
+ "xdg-basedir": "^5.1.0"
64
+ }
65
+ }