@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,199 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const vitest_1 = require("vitest");
4
+ const mocks = vitest_1.vi.hoisted(() => ({
5
+ ensure_authenticated: vitest_1.vi.fn(),
6
+ get: vitest_1.vi.fn(),
7
+ stop: vitest_1.vi.fn(),
8
+ start: vitest_1.vi.fn(),
9
+ print: vitest_1.vi.fn(),
10
+ print_table: vitest_1.vi.fn(),
11
+ dim: vitest_1.vi.fn((msg) => msg),
12
+ green: vitest_1.vi.fn((msg) => msg),
13
+ yellow: vitest_1.vi.fn((msg) => msg),
14
+ }));
15
+ vitest_1.vi.mock('../../utils/auth', () => ({
16
+ ensure_authenticated: mocks.ensure_authenticated,
17
+ }));
18
+ vitest_1.vi.mock('../../utils/client', () => ({
19
+ get: mocks.get,
20
+ }));
21
+ vitest_1.vi.mock('../../utils/spinner', () => ({
22
+ start: mocks.start,
23
+ }));
24
+ vitest_1.vi.mock('../../utils/output', () => ({
25
+ dim: mocks.dim,
26
+ green: mocks.green,
27
+ print: mocks.print,
28
+ print_table: mocks.print_table,
29
+ yellow: mocks.yellow,
30
+ }));
31
+ const budget_1 = require("../../commands/budget");
32
+ (0, vitest_1.describe)('commands/budget', () => {
33
+ (0, vitest_1.beforeEach)(() => {
34
+ vitest_1.vi.clearAllMocks();
35
+ mocks.ensure_authenticated.mockReturnValue('api_key');
36
+ mocks.start.mockReturnValue({ stop: mocks.stop });
37
+ });
38
+ (0, vitest_1.afterEach)(() => {
39
+ vitest_1.vi.restoreAllMocks();
40
+ });
41
+ (0, vitest_1.it)('prints a human-readable balance summary by default', async () => {
42
+ let output = '';
43
+ vitest_1.vi.spyOn(process.stdout, 'write').mockImplementation(text => {
44
+ output += String(text);
45
+ return true;
46
+ });
47
+ mocks.get.mockResolvedValue({
48
+ balance: 456,
49
+ pending_balance: 123,
50
+ });
51
+ await (0, budget_1.handle_budget_balance)({});
52
+ (0, vitest_1.expect)(mocks.ensure_authenticated).toHaveBeenCalledWith(undefined);
53
+ (0, vitest_1.expect)(mocks.get).toHaveBeenCalledWith('api_key', '/customer/balance', { timing: undefined });
54
+ (0, vitest_1.expect)(mocks.green).toHaveBeenCalledWith('$456.00');
55
+ (0, vitest_1.expect)(mocks.print).not.toHaveBeenCalled();
56
+ (0, vitest_1.expect)(output).toBe('Balance $456.00\n'
57
+ + 'Pending charge $123.00\n');
58
+ });
59
+ (0, vitest_1.it)('prints balance JSON when --json is used', async () => {
60
+ mocks.get.mockResolvedValue({
61
+ balance: 10,
62
+ pending_balance: 1.5,
63
+ });
64
+ await (0, budget_1.handle_budget_balance)({ json: true });
65
+ (0, vitest_1.expect)(mocks.print).toHaveBeenCalledWith({ balance: 10, pending_balance: 1.5 }, { json: true, pretty: undefined });
66
+ });
67
+ (0, vitest_1.it)('prints a dimmed message when no active zones exist', async () => {
68
+ const console_log = vitest_1.vi.spyOn(console, 'log').mockImplementation(() => { });
69
+ mocks.get.mockResolvedValue([]);
70
+ await (0, budget_1.handle_budget_zones)({});
71
+ (0, vitest_1.expect)(mocks.get).toHaveBeenCalledWith('api_key', '/zone/get_active_zones', { timing: undefined });
72
+ (0, vitest_1.expect)(console_log).toHaveBeenCalledWith('No active zones found.');
73
+ (0, vitest_1.expect)(mocks.print_table).not.toHaveBeenCalled();
74
+ });
75
+ (0, vitest_1.it)('aggregates zone costs and prints a table with totals', async () => {
76
+ mocks.get
77
+ .mockResolvedValueOnce([
78
+ { name: 'zone-a' },
79
+ { name: 'zone-b' },
80
+ ])
81
+ .mockResolvedValueOnce({
82
+ this_month: {
83
+ back_m1: { bw: 1024, cost: 1.25 },
84
+ back_m2: { bw: 512, cost: 0.75 },
85
+ },
86
+ prior_month: {
87
+ back_m1: { bw: 1024 ** 2, cost: 2 },
88
+ },
89
+ })
90
+ .mockResolvedValueOnce({
91
+ this_month: {
92
+ back_m1: { bw: 2048, cost: 3.5 },
93
+ },
94
+ });
95
+ await (0, budget_1.handle_budget_zones)({
96
+ from: '2026-03-01',
97
+ to: '2026-03-31',
98
+ });
99
+ (0, vitest_1.expect)(mocks.get).toHaveBeenNthCalledWith(1, 'api_key', '/zone/get_active_zones', { timing: undefined });
100
+ (0, vitest_1.expect)(mocks.get).toHaveBeenNthCalledWith(2, 'api_key', '/zone/cost?zone=zone-a&from=2026-03-01&to=2026-03-31', { timing: undefined });
101
+ (0, vitest_1.expect)(mocks.get).toHaveBeenNthCalledWith(3, 'api_key', '/zone/cost?zone=zone-b&from=2026-03-01&to=2026-03-31', { timing: undefined });
102
+ (0, vitest_1.expect)(mocks.print_table).toHaveBeenCalledWith([
103
+ {
104
+ zone: 'zone-a',
105
+ 'cost ($)': '$4.00',
106
+ bandwidth: '1.0 MB',
107
+ },
108
+ {
109
+ zone: 'zone-b',
110
+ 'cost ($)': '$3.50',
111
+ bandwidth: '2.0 KB',
112
+ },
113
+ {
114
+ zone: 'TOTAL',
115
+ 'cost ($)': '$7.50',
116
+ bandwidth: '1.0 MB',
117
+ },
118
+ ], ['zone', 'cost ($)', 'bandwidth']);
119
+ });
120
+ (0, vitest_1.it)('prints aggregated zone rows as JSON when requested', async () => {
121
+ mocks.get
122
+ .mockResolvedValueOnce([{ name: 'zone-a' }])
123
+ .mockResolvedValueOnce({
124
+ this_month: {
125
+ back_m1: { bw: 500, cost: 2.25 },
126
+ },
127
+ });
128
+ await (0, budget_1.handle_budget_zones)({ pretty: true });
129
+ (0, vitest_1.expect)(mocks.print).toHaveBeenCalledWith([
130
+ {
131
+ zone: 'zone-a',
132
+ cost: 2.25,
133
+ bw: 500,
134
+ },
135
+ ], { json: undefined, pretty: true });
136
+ });
137
+ (0, vitest_1.it)('prints a human-readable zone detail view', async () => {
138
+ let output = '';
139
+ vitest_1.vi.spyOn(process.stdout, 'write').mockImplementation(text => {
140
+ output += String(text);
141
+ return true;
142
+ });
143
+ mocks.get
144
+ .mockResolvedValueOnce({
145
+ plan: {
146
+ product: 'dc',
147
+ type: 'static',
148
+ bandwidth: 'unlimited',
149
+ },
150
+ })
151
+ .mockResolvedValueOnce({
152
+ this_month: {
153
+ back_m1: { bw: 2048, cost: 12.34 },
154
+ },
155
+ });
156
+ await (0, budget_1.handle_budget_zone)('my-zone', {});
157
+ (0, vitest_1.expect)(mocks.get).toHaveBeenNthCalledWith(1, 'api_key', '/zone?zone=my-zone', { timing: undefined });
158
+ (0, vitest_1.expect)(mocks.get).toHaveBeenNthCalledWith(2, 'api_key', '/zone/cost?zone=my-zone', { timing: undefined });
159
+ (0, vitest_1.expect)(output).toMatch(/Zone:\s+my-zone/);
160
+ (0, vitest_1.expect)(output).toMatch(/Type:\s+dc \/ static/);
161
+ (0, vitest_1.expect)(output).toMatch(/Plan bandwidth:\s+unlimited/);
162
+ (0, vitest_1.expect)(output).toMatch(/Cost \(this month\):\s+\$12\.34/);
163
+ (0, vitest_1.expect)(output).toMatch(/Bandwidth used:\s+2\.0 KB/);
164
+ });
165
+ (0, vitest_1.it)('prints zone detail JSON when requested', async () => {
166
+ mocks.get
167
+ .mockResolvedValueOnce({
168
+ plan: {
169
+ product: 'res',
170
+ bandwidth: 'metered',
171
+ },
172
+ })
173
+ .mockResolvedValueOnce({
174
+ this_month: {
175
+ back_m1: { bw: 4096, cost: 9.5 },
176
+ },
177
+ });
178
+ await (0, budget_1.handle_budget_zone)('zone-json', { json: true });
179
+ (0, vitest_1.expect)(mocks.print).toHaveBeenCalledWith({
180
+ zone: 'zone-json',
181
+ info: {
182
+ plan: {
183
+ product: 'res',
184
+ bandwidth: 'metered',
185
+ },
186
+ },
187
+ cost: {
188
+ this_month: {
189
+ back_m1: { bw: 4096, cost: 9.5 },
190
+ },
191
+ },
192
+ totals: {
193
+ bw: 4096,
194
+ cost: 9.5,
195
+ },
196
+ }, { json: true, pretty: undefined });
197
+ });
198
+ });
199
+ //# sourceMappingURL=budget.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"budget.test.js","sourceRoot":"","sources":["../../../src/__tests__/commands/budget.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=dataset.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dataset.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/commands/dataset.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const vitest_1 = require("vitest");
4
+ const dataset_1 = require("../../commands/dataset");
5
+ (0, vitest_1.describe)('commands/pipelines list', () => {
6
+ (0, vitest_1.afterEach)(() => {
7
+ vitest_1.vi.restoreAllMocks();
8
+ });
9
+ (0, vitest_1.it)('prints available pipeline dataset types', async () => {
10
+ let output = '';
11
+ const write = vitest_1.vi.spyOn(process.stdout, 'write').mockImplementation(text => {
12
+ output += String(text);
13
+ return true;
14
+ });
15
+ await (0, dataset_1.handle_pipelines)('list', [], {});
16
+ (0, vitest_1.expect)(write).toHaveBeenCalled();
17
+ (0, vitest_1.expect)(output.includes('amazon_product')).toBe(true);
18
+ (0, vitest_1.expect)(output.includes('linkedin_person_profile')).toBe(true);
19
+ (0, vitest_1.expect)(output.includes('youtube_comments')).toBe(true);
20
+ });
21
+ });
22
+ //# sourceMappingURL=dataset.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dataset.test.js","sourceRoot":"","sources":["../../../src/__tests__/commands/dataset.test.ts"],"names":[],"mappings":";;AAAA,mCAA2D;AAC3D,oDAAwD;AAExD,IAAA,iBAAQ,EAAC,yBAAyB,EAAE,GAAE,EAAE;IACpC,IAAA,kBAAS,EAAC,GAAE,EAAE;QACV,WAAE,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,yCAAyC,EAAE,KAAK,IAAE,EAAE;QACnD,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,MAAM,KAAK,GAAG,WAAE,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,kBAAkB,CAC9D,IAAI,CAAA,EAAE;YACF,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC;YACvB,OAAO,IAAI,CAAC;QAChB,CAAC,CACJ,CAAC;QACF,MAAM,IAAA,0BAAgB,EAAC,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QACvC,IAAA,eAAM,EAAC,KAAK,CAAC,CAAC,gBAAgB,EAAE,CAAC;QACjC,IAAA,eAAM,EAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrD,IAAA,eAAM,EAAC,MAAM,CAAC,QAAQ,CAAC,yBAAyB,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9D,IAAA,eAAM,EAAC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=login.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/commands/login.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,123 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const vitest_1 = require("vitest");
4
+ const mocks = vitest_1.vi.hoisted(() => ({
5
+ save: vitest_1.vi.fn(),
6
+ validate_key: vitest_1.vi.fn(),
7
+ mask_key: vitest_1.vi.fn((key) => `masked:${key}`),
8
+ get_config: vitest_1.vi.fn(),
9
+ set_config: vitest_1.vi.fn(),
10
+ client_get: vitest_1.vi.fn(),
11
+ client_post: vitest_1.vi.fn(),
12
+ loopback_flow: vitest_1.vi.fn(),
13
+ device_flow: vitest_1.vi.fn(),
14
+ }));
15
+ vitest_1.vi.mock('../../utils/credentials', () => ({
16
+ save: mocks.save,
17
+ }));
18
+ vitest_1.vi.mock('../../utils/auth', () => ({
19
+ validate_key: mocks.validate_key,
20
+ mask_key: mocks.mask_key,
21
+ }));
22
+ vitest_1.vi.mock('../../utils/config', () => ({
23
+ get: mocks.get_config,
24
+ set: mocks.set_config,
25
+ }));
26
+ vitest_1.vi.mock('../../utils/client', () => ({
27
+ get: mocks.client_get,
28
+ post: mocks.client_post,
29
+ }));
30
+ vitest_1.vi.mock('../../utils/browser_auth', () => ({
31
+ loopback_flow: mocks.loopback_flow,
32
+ device_flow: mocks.device_flow,
33
+ }));
34
+ const login_1 = require("../../commands/login");
35
+ (0, vitest_1.describe)('commands/login', () => {
36
+ const original_customer_id = process.env['BRIGHTDATA_CUSTOMER_ID'];
37
+ (0, vitest_1.beforeEach)(() => {
38
+ vitest_1.vi.clearAllMocks();
39
+ if (original_customer_id === undefined)
40
+ delete process.env['BRIGHTDATA_CUSTOMER_ID'];
41
+ else
42
+ process.env['BRIGHTDATA_CUSTOMER_ID'] = original_customer_id;
43
+ mocks.mask_key.mockImplementation((key) => `masked:${key}`);
44
+ mocks.get_config.mockReturnValue(undefined);
45
+ mocks.client_get.mockResolvedValue([
46
+ { name: 'cli_unlocker', type: 'unblocker' },
47
+ { name: 'cli_browser', type: 'browser_api' },
48
+ ]);
49
+ mocks.validate_key.mockResolvedValue(true);
50
+ mocks.loopback_flow.mockResolvedValue('oauth_key');
51
+ mocks.device_flow.mockResolvedValue('device_key');
52
+ vitest_1.vi.spyOn(console, 'error').mockImplementation(() => undefined);
53
+ });
54
+ (0, vitest_1.afterEach)(() => {
55
+ vitest_1.vi.restoreAllMocks();
56
+ if (original_customer_id === undefined)
57
+ delete process.env['BRIGHTDATA_CUSTOMER_ID'];
58
+ else
59
+ process.env['BRIGHTDATA_CUSTOMER_ID'] = original_customer_id;
60
+ });
61
+ (0, vitest_1.it)('uses loopback flow by default and saves the returned key', async () => {
62
+ await (0, login_1.handle_login)({});
63
+ (0, vitest_1.expect)(mocks.loopback_flow).toHaveBeenCalledWith({
64
+ customer_id: undefined,
65
+ });
66
+ (0, vitest_1.expect)(mocks.device_flow).not.toHaveBeenCalled();
67
+ (0, vitest_1.expect)(mocks.validate_key).not.toHaveBeenCalled();
68
+ (0, vitest_1.expect)(mocks.save).toHaveBeenCalledWith({ api_key: 'oauth_key' });
69
+ (0, vitest_1.expect)(mocks.client_get).toHaveBeenCalledWith('oauth_key', '/zone/get_active_zones');
70
+ (0, vitest_1.expect)(mocks.client_post).not.toHaveBeenCalled();
71
+ (0, vitest_1.expect)(mocks.set_config).toHaveBeenCalledWith('default_zone_unlocker', 'cli_unlocker');
72
+ });
73
+ (0, vitest_1.it)('uses device flow without requiring a customer id and creates missing zones', async () => {
74
+ mocks.get_config.mockReturnValue('existing_zone');
75
+ mocks.client_get.mockResolvedValue([]);
76
+ await (0, login_1.handle_login)({ device: true });
77
+ (0, vitest_1.expect)(mocks.device_flow).toHaveBeenCalledWith({
78
+ customer_id: undefined,
79
+ });
80
+ (0, vitest_1.expect)(mocks.loopback_flow).not.toHaveBeenCalled();
81
+ (0, vitest_1.expect)(mocks.client_post).toHaveBeenNthCalledWith(1, 'device_key', '/zone', {
82
+ zone: { name: 'cli_unlocker', type: 'unblocker' },
83
+ plan: { type: 'unblocker' },
84
+ });
85
+ (0, vitest_1.expect)(mocks.client_post).toHaveBeenNthCalledWith(2, 'device_key', '/zone', {
86
+ zone: { name: 'cli_browser', type: 'browser_api' },
87
+ plan: { type: 'browser_api' },
88
+ });
89
+ (0, vitest_1.expect)(mocks.set_config).not.toHaveBeenCalled();
90
+ });
91
+ (0, vitest_1.it)('validates a direct API key before saving it', async () => {
92
+ await (0, login_1.handle_login)({ apiKey: ' raw_api_key ' });
93
+ (0, vitest_1.expect)(mocks.validate_key).toHaveBeenCalledWith('raw_api_key');
94
+ (0, vitest_1.expect)(mocks.loopback_flow).not.toHaveBeenCalled();
95
+ (0, vitest_1.expect)(mocks.device_flow).not.toHaveBeenCalled();
96
+ (0, vitest_1.expect)(mocks.save).toHaveBeenCalledWith({ api_key: 'raw_api_key' });
97
+ (0, vitest_1.expect)(mocks.client_get).toHaveBeenCalledWith('raw_api_key', '/zone/get_active_zones');
98
+ });
99
+ (0, vitest_1.it)('forwards an optional customer id from the flag', async () => {
100
+ await (0, login_1.handle_login)({ customerId: ' hl_prompt ' });
101
+ (0, vitest_1.expect)(mocks.loopback_flow).toHaveBeenCalledWith({
102
+ customer_id: 'hl_prompt',
103
+ });
104
+ });
105
+ (0, vitest_1.it)('forwards an optional customer id from the environment', async () => {
106
+ process.env['BRIGHTDATA_CUSTOMER_ID'] = ' hl_env ';
107
+ await (0, login_1.handle_login)({});
108
+ (0, vitest_1.expect)(mocks.loopback_flow).toHaveBeenCalledWith({
109
+ customer_id: 'hl_env',
110
+ });
111
+ });
112
+ (0, vitest_1.it)('exits when a direct API key is invalid', async () => {
113
+ mocks.validate_key.mockResolvedValue(false);
114
+ vitest_1.vi.spyOn(process, 'exit').mockImplementation(((code) => {
115
+ throw new Error(`exit:${code}`);
116
+ }));
117
+ await (0, vitest_1.expect)((0, login_1.handle_login)({ apiKey: 'bad_key' }))
118
+ .rejects.toThrow('exit:1');
119
+ (0, vitest_1.expect)(mocks.save).not.toHaveBeenCalled();
120
+ (0, vitest_1.expect)(mocks.client_get).not.toHaveBeenCalled();
121
+ });
122
+ });
123
+ //# sourceMappingURL=login.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login.test.js","sourceRoot":"","sources":["../../../src/__tests__/commands/login.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=scrape.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scrape.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/commands/scrape.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const vitest_1 = require("vitest");
4
+ const mocks = vitest_1.vi.hoisted(() => ({
5
+ post: vitest_1.vi.fn(),
6
+ ensure_authenticated: vitest_1.vi.fn(),
7
+ resolve: vitest_1.vi.fn(),
8
+ stop: vitest_1.vi.fn(),
9
+ start: vitest_1.vi.fn(),
10
+ print: vitest_1.vi.fn(),
11
+ success: vitest_1.vi.fn(),
12
+ fail: vitest_1.vi.fn((msg) => { throw new Error(`fail:${msg}`); }),
13
+ }));
14
+ vitest_1.vi.mock('../../utils/client', () => ({
15
+ post: mocks.post,
16
+ }));
17
+ vitest_1.vi.mock('../../utils/auth', () => ({
18
+ ensure_authenticated: mocks.ensure_authenticated,
19
+ }));
20
+ vitest_1.vi.mock('../../utils/config', () => ({
21
+ resolve: mocks.resolve,
22
+ }));
23
+ vitest_1.vi.mock('../../utils/spinner', () => ({
24
+ start: mocks.start,
25
+ }));
26
+ vitest_1.vi.mock('../../utils/output', () => ({
27
+ print: mocks.print,
28
+ success: mocks.success,
29
+ fail: mocks.fail,
30
+ }));
31
+ const scrape_1 = require("../../commands/scrape");
32
+ (0, vitest_1.describe)('commands/scrape', () => {
33
+ (0, vitest_1.beforeEach)(() => {
34
+ vitest_1.vi.clearAllMocks();
35
+ mocks.ensure_authenticated.mockReturnValue('api_key');
36
+ mocks.resolve.mockReturnValue('cli_unlocker');
37
+ mocks.start.mockReturnValue({ stop: mocks.stop });
38
+ });
39
+ (0, vitest_1.it)('fails when no zone is resolved', async () => {
40
+ mocks.resolve.mockReturnValue(undefined);
41
+ await (0, vitest_1.expect)((0, scrape_1.handle_scrape)('https://example.com', {}))
42
+ .rejects.toThrow('fail:No Web Unlocker zone specified.');
43
+ (0, vitest_1.expect)(mocks.post).not.toHaveBeenCalled();
44
+ });
45
+ (0, vitest_1.it)('submits markdown scrape request by default and prints text response', async () => {
46
+ mocks.post.mockResolvedValue('# hello');
47
+ await (0, scrape_1.handle_scrape)('https://example.com', {});
48
+ (0, vitest_1.expect)(mocks.post).toHaveBeenCalledWith('api_key', '/request', {
49
+ zone: 'cli_unlocker',
50
+ url: 'https://example.com',
51
+ format: 'raw',
52
+ data_format: 'markdown',
53
+ }, { timing: undefined });
54
+ (0, vitest_1.expect)(mocks.print).toHaveBeenCalledWith('# hello', { json: undefined, pretty: undefined, output: undefined });
55
+ });
56
+ (0, vitest_1.it)('submits json scrape request and prints json response', async () => {
57
+ mocks.post.mockResolvedValue({ status: 200, body: '{}', headers: {} });
58
+ await (0, scrape_1.handle_scrape)('https://example.com', { format: 'json' });
59
+ (0, vitest_1.expect)(mocks.post).toHaveBeenCalledWith('api_key', '/request', {
60
+ zone: 'cli_unlocker',
61
+ url: 'https://example.com',
62
+ format: 'json',
63
+ }, { timing: undefined });
64
+ (0, vitest_1.expect)(mocks.print).toHaveBeenCalledWith({ status: 200, body: '{}', headers: {} }, { json: undefined, pretty: undefined, output: undefined });
65
+ });
66
+ (0, vitest_1.it)('handles async scrape mode with success message', async () => {
67
+ mocks.post.mockResolvedValue({ response_id: 'resp_123' });
68
+ await (0, scrape_1.handle_scrape)('https://example.com', { async: true });
69
+ (0, vitest_1.expect)(mocks.success).toHaveBeenCalledWith('Async job submitted. Response ID: resp_123');
70
+ (0, vitest_1.expect)(mocks.print).not.toHaveBeenCalled();
71
+ });
72
+ });
73
+ //# sourceMappingURL=scrape.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scrape.test.js","sourceRoot":"","sources":["../../../src/__tests__/commands/scrape.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=search.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/commands/search.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,95 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const vitest_1 = require("vitest");
4
+ const mocks = vitest_1.vi.hoisted(() => ({
5
+ post: vitest_1.vi.fn(),
6
+ ensure_authenticated: vitest_1.vi.fn(),
7
+ resolve: vitest_1.vi.fn(),
8
+ stop: vitest_1.vi.fn(),
9
+ start: vitest_1.vi.fn(),
10
+ print: vitest_1.vi.fn(),
11
+ print_table: vitest_1.vi.fn(),
12
+ fail: vitest_1.vi.fn((msg) => { throw new Error(`fail:${msg}`); }),
13
+ dim: vitest_1.vi.fn((msg) => msg),
14
+ }));
15
+ vitest_1.vi.mock('../../utils/client', () => ({
16
+ post: mocks.post,
17
+ }));
18
+ vitest_1.vi.mock('../../utils/auth', () => ({
19
+ ensure_authenticated: mocks.ensure_authenticated,
20
+ }));
21
+ vitest_1.vi.mock('../../utils/config', () => ({
22
+ resolve: mocks.resolve,
23
+ }));
24
+ vitest_1.vi.mock('../../utils/spinner', () => ({
25
+ start: mocks.start,
26
+ }));
27
+ vitest_1.vi.mock('../../utils/output', () => ({
28
+ print: mocks.print,
29
+ print_table: mocks.print_table,
30
+ fail: mocks.fail,
31
+ dim: mocks.dim,
32
+ }));
33
+ const search_1 = require("../../commands/search");
34
+ (0, vitest_1.describe)('commands/search', () => {
35
+ (0, vitest_1.beforeEach)(() => {
36
+ vitest_1.vi.clearAllMocks();
37
+ mocks.ensure_authenticated.mockReturnValue('api_key');
38
+ mocks.resolve.mockReturnValue('cli_serp');
39
+ mocks.start.mockReturnValue({ stop: mocks.stop });
40
+ });
41
+ (0, vitest_1.it)('fails when no zone is resolved', async () => {
42
+ mocks.resolve.mockReturnValue(undefined);
43
+ await (0, vitest_1.expect)((0, search_1.handle_search)('hello', {}))
44
+ .rejects.toThrow('fail:No zone specified.');
45
+ (0, vitest_1.expect)(mocks.post).not.toHaveBeenCalled();
46
+ });
47
+ (0, vitest_1.it)('renders google default output as table', async () => {
48
+ mocks.post.mockResolvedValue({
49
+ organic: [
50
+ {
51
+ rank: 1,
52
+ title: 'Result One',
53
+ link: 'https://example.com/one',
54
+ description: 'Description',
55
+ },
56
+ ],
57
+ });
58
+ await (0, search_1.handle_search)('hello world', {});
59
+ (0, vitest_1.expect)(mocks.post).toHaveBeenCalledWith('api_key', '/request', {
60
+ zone: 'cli_serp',
61
+ url: 'https://www.google.com/search?q=hello+world&brd_json=1',
62
+ format: 'raw',
63
+ }, { timing: undefined });
64
+ (0, vitest_1.expect)(mocks.print_table).toHaveBeenCalledTimes(1);
65
+ (0, vitest_1.expect)(mocks.print).not.toHaveBeenCalled();
66
+ });
67
+ (0, vitest_1.it)('prints markdown when google output file is provided', async () => {
68
+ mocks.post.mockResolvedValue({
69
+ general: { search_engine: 'google', results_cnt: 1000 },
70
+ organic: [
71
+ {
72
+ rank: 1,
73
+ title: 'Title',
74
+ link: 'https://example.com',
75
+ description: 'Desc',
76
+ },
77
+ ],
78
+ });
79
+ await (0, search_1.handle_search)('query', { output: 'out.md' });
80
+ (0, vitest_1.expect)(mocks.print).toHaveBeenCalledTimes(1);
81
+ const printed = mocks.print.mock.calls[0][0];
82
+ (0, vitest_1.expect)(printed.includes('# google results for "query"')).toBe(true);
83
+ });
84
+ (0, vitest_1.it)('prints raw result for non-google engines', async () => {
85
+ mocks.post.mockResolvedValue('raw bing markdown');
86
+ await (0, search_1.handle_search)('query', { engine: 'bing' });
87
+ (0, vitest_1.expect)(mocks.print).toHaveBeenCalledWith('raw bing markdown', { json: undefined, pretty: undefined, output: undefined });
88
+ });
89
+ (0, vitest_1.it)('prints json result when --json is used', async () => {
90
+ mocks.post.mockResolvedValue({ organic: [] });
91
+ await (0, search_1.handle_search)('query', { json: true });
92
+ (0, vitest_1.expect)(mocks.print).toHaveBeenCalledWith({ organic: [] }, { json: true, pretty: undefined, output: undefined });
93
+ });
94
+ });
95
+ //# sourceMappingURL=search.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.test.js","sourceRoot":"","sources":["../../../src/__tests__/commands/search.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=skill-add.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-add.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/commands/skill-add.test.ts"],"names":[],"mappings":""}