@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,177 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const vitest_1 = require("vitest");
4
+ const mocks = vitest_1.vi.hoisted(() => ({
5
+ skills: [
6
+ {
7
+ name: 'search',
8
+ description: 'Search Google and get structured JSON results',
9
+ skillMdUrl: 'https://raw.githubusercontent.com/brightdata/skills/'
10
+ + 'main/skills/search/SKILL.md',
11
+ githubPath: 'brightdata/skills/search',
12
+ repoPath: 'skills/search',
13
+ },
14
+ ],
15
+ agents: {
16
+ amp: {
17
+ displayName: 'Amp',
18
+ skillsDir: '.agents/skills',
19
+ },
20
+ codex: {
21
+ displayName: 'Codex',
22
+ skillsDir: '.agents/skills',
23
+ },
24
+ },
25
+ start: vitest_1.vi.fn(),
26
+ stop: vitest_1.vi.fn(),
27
+ fail: vitest_1.vi.fn((msg) => { throw new Error(`fail:${msg}`); }),
28
+ info: vitest_1.vi.fn(),
29
+ red: vitest_1.vi.fn((msg) => msg),
30
+ green: vitest_1.vi.fn((msg) => msg),
31
+ dim: vitest_1.vi.fn((msg) => msg),
32
+ detectInstalledAgents: vitest_1.vi.fn(),
33
+ getUniversalAgents: vitest_1.vi.fn(),
34
+ isUniversalAgent: vitest_1.vi.fn(),
35
+ searchMultiselect: vitest_1.vi.fn(),
36
+ installSkillForAgent: vitest_1.vi.fn(),
37
+ fetch: vitest_1.vi.fn(),
38
+ }));
39
+ vitest_1.vi.mock('../../utils/output', () => ({
40
+ fail: mocks.fail,
41
+ info: mocks.info,
42
+ red: mocks.red,
43
+ green: mocks.green,
44
+ dim: mocks.dim,
45
+ }));
46
+ vitest_1.vi.mock('../../utils/spinner', () => ({
47
+ start: mocks.start,
48
+ }));
49
+ vitest_1.vi.mock('../../utils/skill-installer/brightdata-skills', () => ({
50
+ BRIGHTDATA_SKILLS: mocks.skills,
51
+ }));
52
+ vitest_1.vi.mock('../../utils/skill-installer/agents', () => ({
53
+ agents: mocks.agents,
54
+ detectInstalledAgents: mocks.detectInstalledAgents,
55
+ getUniversalAgents: mocks.getUniversalAgents,
56
+ isUniversalAgent: mocks.isUniversalAgent,
57
+ }));
58
+ vitest_1.vi.mock('../../utils/skill-installer/prompts/search-multiselect', () => ({
59
+ searchMultiselect: mocks.searchMultiselect,
60
+ cancelSymbol: Symbol('cancel'),
61
+ }));
62
+ vitest_1.vi.mock('../../utils/skill-installer/installer', () => ({
63
+ installSkillForAgent: mocks.installSkillForAgent,
64
+ }));
65
+ const skill_add_1 = require("../../commands/skill-add");
66
+ const json_response = (body) => ({
67
+ ok: true,
68
+ status: 200,
69
+ statusText: 'OK',
70
+ json: vitest_1.vi.fn().mockResolvedValue(body),
71
+ text: vitest_1.vi.fn().mockResolvedValue(JSON.stringify(body)),
72
+ });
73
+ const text_response = (body) => ({
74
+ ok: true,
75
+ status: 200,
76
+ statusText: 'OK',
77
+ json: vitest_1.vi.fn().mockResolvedValue(body),
78
+ text: vitest_1.vi.fn().mockResolvedValue(body),
79
+ });
80
+ (0, vitest_1.describe)('commands/skill-add', () => {
81
+ (0, vitest_1.beforeEach)(() => {
82
+ vitest_1.vi.clearAllMocks();
83
+ vitest_1.vi.stubGlobal('fetch', mocks.fetch);
84
+ mocks.start.mockReturnValue({ stop: mocks.stop });
85
+ mocks.detectInstalledAgents.mockResolvedValue(['codex']);
86
+ mocks.getUniversalAgents.mockReturnValue(['amp']);
87
+ mocks.isUniversalAgent.mockImplementation((agent) => agent == 'amp');
88
+ mocks.installSkillForAgent.mockResolvedValue({
89
+ success: true,
90
+ path: '/tmp/.agents/skills/search',
91
+ mode: 'symlink',
92
+ });
93
+ });
94
+ (0, vitest_1.afterEach)(() => {
95
+ vitest_1.vi.restoreAllMocks();
96
+ vitest_1.vi.unstubAllGlobals();
97
+ });
98
+ (0, vitest_1.it)('fails early when the requested skill name is invalid', async () => {
99
+ await (0, vitest_1.expect)((0, skill_add_1.run_skill_add)('missing-skill'))
100
+ .rejects.toThrow('fail:Unknown skill "missing-skill".\n'
101
+ + ' Available skills: search');
102
+ (0, vitest_1.expect)(mocks.detectInstalledAgents).not.toHaveBeenCalled();
103
+ (0, vitest_1.expect)(mocks.fetch).not.toHaveBeenCalled();
104
+ });
105
+ (0, vitest_1.it)('fetches nested skill files and prints one success line per skill', async () => {
106
+ let stderr = '';
107
+ vitest_1.vi.spyOn(process.stderr, 'write').mockImplementation(text => {
108
+ stderr += String(text);
109
+ return true;
110
+ });
111
+ mocks.fetch
112
+ .mockResolvedValueOnce(json_response([
113
+ {
114
+ type: 'file',
115
+ name: 'SKILL.md',
116
+ path: 'skills/search/SKILL.md',
117
+ download_url: 'https://example.com/search/SKILL.md',
118
+ },
119
+ {
120
+ type: 'dir',
121
+ name: 'scripts',
122
+ path: 'skills/search/scripts',
123
+ },
124
+ ]))
125
+ .mockResolvedValueOnce(text_response('# Search skill'))
126
+ .mockResolvedValueOnce(json_response([
127
+ {
128
+ type: 'file',
129
+ name: 'search.sh',
130
+ path: 'skills/search/scripts/search.sh',
131
+ download_url: 'https://example.com/search/scripts/'
132
+ + 'search.sh',
133
+ },
134
+ ]))
135
+ .mockResolvedValueOnce(text_response('#!/bin/bash\necho test\n'));
136
+ await (0, skill_add_1.run_skill_add)('search');
137
+ (0, vitest_1.expect)(mocks.installSkillForAgent).toHaveBeenCalledTimes(2);
138
+ (0, vitest_1.expect)(mocks.installSkillForAgent).toHaveBeenNthCalledWith(1, {
139
+ name: 'search',
140
+ files: {
141
+ 'SKILL.md': '# Search skill',
142
+ 'scripts/search.sh': '#!/bin/bash\necho test\n',
143
+ },
144
+ }, 'amp');
145
+ (0, vitest_1.expect)(mocks.installSkillForAgent).toHaveBeenNthCalledWith(2, {
146
+ name: 'search',
147
+ files: {
148
+ 'SKILL.md': '# Search skill',
149
+ 'scripts/search.sh': '#!/bin/bash\necho test\n',
150
+ },
151
+ }, 'codex');
152
+ (0, vitest_1.expect)(stderr.match(/✓ Installed search/g)?.length).toBe(1);
153
+ (0, vitest_1.expect)(stderr).toContain('Summary: 2 installations across 1 skill and 2 agents.');
154
+ });
155
+ (0, vitest_1.it)('prints fetch details when skill download fails', async () => {
156
+ let stderr = '';
157
+ vitest_1.vi.spyOn(process.stderr, 'write').mockImplementation(text => {
158
+ stderr += String(text);
159
+ return true;
160
+ });
161
+ const error = new Error('fetch failed');
162
+ error.cause = {
163
+ code: 'ETIMEDOUT',
164
+ message: 'connect timeout',
165
+ };
166
+ mocks.fetch.mockRejectedValue(error);
167
+ await (0, skill_add_1.run_skill_add)('search');
168
+ (0, vitest_1.expect)(mocks.installSkillForAgent).not.toHaveBeenCalled();
169
+ (0, vitest_1.expect)(stderr).toContain("Could not fetch skill 'search'.");
170
+ (0, vitest_1.expect)(stderr).toContain('URL: https://raw.githubusercontent.com/brightdata/skills/'
171
+ + 'main/skills/search/SKILL.md');
172
+ (0, vitest_1.expect)(stderr).toContain('Details: fetch failed | ETIMEDOUT | connect timeout');
173
+ (0, vitest_1.expect)(stderr).toContain("✗ search: Could not fetch skill 'search'. fetch failed "
174
+ + '| ETIMEDOUT | connect timeout');
175
+ });
176
+ });
177
+ //# sourceMappingURL=skill-add.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-add.test.js","sourceRoot":"","sources":["../../../src/__tests__/commands/skill-add.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=skill.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/commands/skill.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const vitest_1 = require("vitest");
4
+ const mocks = vitest_1.vi.hoisted(() => ({
5
+ skills: [
6
+ {
7
+ name: 'search',
8
+ description: 'Search Google and get structured JSON results',
9
+ skillMdUrl: 'https://example.com/search/SKILL.md',
10
+ githubPath: 'brightdata/skills/search',
11
+ repoPath: 'skills/search',
12
+ },
13
+ {
14
+ name: 'bright-data-mcp',
15
+ description: 'Orchestrate Bright Data MCP tools',
16
+ skillMdUrl: 'https://example.com/mcp/SKILL.md',
17
+ githubPath: 'brightdata/skills/bright-data-mcp',
18
+ repoPath: 'skills/bright-data-mcp',
19
+ },
20
+ ],
21
+ run_skill_add: vitest_1.vi.fn(),
22
+ dim: vitest_1.vi.fn((msg) => msg),
23
+ green: vitest_1.vi.fn((msg) => msg),
24
+ }));
25
+ vitest_1.vi.mock('../../commands/skill-add', () => ({
26
+ run_skill_add: mocks.run_skill_add,
27
+ }));
28
+ vitest_1.vi.mock('../../utils/skill-installer/brightdata-skills', () => ({
29
+ BRIGHTDATA_SKILLS: mocks.skills,
30
+ }));
31
+ vitest_1.vi.mock('../../utils/output', () => ({
32
+ dim: mocks.dim,
33
+ green: mocks.green,
34
+ }));
35
+ const skill_1 = require("../../commands/skill");
36
+ (0, vitest_1.describe)('commands/skill list', () => {
37
+ (0, vitest_1.beforeEach)(() => {
38
+ vitest_1.vi.clearAllMocks();
39
+ });
40
+ (0, vitest_1.afterEach)(() => {
41
+ vitest_1.vi.restoreAllMocks();
42
+ });
43
+ (0, vitest_1.it)('prints aligned Bright Data skills and install hint', () => {
44
+ let output = '';
45
+ vitest_1.vi.spyOn(process.stdout, 'write').mockImplementation(text => {
46
+ output += String(text);
47
+ return true;
48
+ });
49
+ (0, skill_1.handle_skill_list)();
50
+ (0, vitest_1.expect)(output).toBe('Available Bright Data Skills\n\n'
51
+ + ' search Search Google and get structured JSON '
52
+ + 'results\n'
53
+ + ' bright-data-mcp Orchestrate Bright Data MCP tools\n'
54
+ + '\n'
55
+ + 'Install a skill: brightdata skill add <name>\n');
56
+ });
57
+ });
58
+ //# sourceMappingURL=skill.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill.test.js","sourceRoot":"","sources":["../../../src/__tests__/commands/skill.test.ts"],"names":[],"mappings":";;AAAA,mCAAsE;AAEtE,MAAM,KAAK,GAAG,WAAE,CAAC,OAAO,CAAC,GAAE,EAAE,CAAA,CAAC;IAC1B,MAAM,EAAE;QACJ;YACI,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,+CAA+C;YAC5D,UAAU,EAAE,qCAAqC;YACjD,UAAU,EAAE,0BAA0B;YACtC,QAAQ,EAAE,eAAe;SAC5B;QACD;YACI,IAAI,EAAE,iBAAiB;YACvB,WAAW,EAAE,mCAAmC;YAChD,UAAU,EAAE,kCAAkC;YAC9C,UAAU,EAAE,mCAAmC;YAC/C,QAAQ,EAAE,wBAAwB;SACrC;KACJ;IACD,aAAa,EAAE,WAAE,CAAC,EAAE,EAAE;IACtB,GAAG,EAAE,WAAE,CAAC,EAAE,CAAC,CAAC,GAAW,EAAC,EAAE,CAAA,GAAG,CAAC;IAC9B,KAAK,EAAE,WAAE,CAAC,EAAE,CAAC,CAAC,GAAW,EAAC,EAAE,CAAA,GAAG,CAAC;CACnC,CAAC,CAAC,CAAA;AAEH,WAAE,CAAC,IAAI,CAAC,0BAA0B,EAAE,GAAE,EAAE,CAAA,CAAC;IACrC,aAAa,EAAE,KAAK,CAAC,aAAa;CACrC,CAAC,CAAC,CAAA;AAEH,WAAE,CAAC,IAAI,CAAC,+CAA+C,EAAE,GAAE,EAAE,CAAA,CAAC;IAC1D,iBAAiB,EAAE,KAAK,CAAC,MAAM;CAClC,CAAC,CAAC,CAAA;AAEH,WAAE,CAAC,IAAI,CAAC,oBAAoB,EAAE,GAAE,EAAE,CAAA,CAAC;IAC/B,GAAG,EAAE,KAAK,CAAC,GAAG;IACd,KAAK,EAAE,KAAK,CAAC,KAAK;CACrB,CAAC,CAAC,CAAA;AAEH,gDAAsD;AAEtD,IAAA,iBAAQ,EAAC,qBAAqB,EAAE,GAAE,EAAE;IAChC,IAAA,mBAAU,EAAC,GAAE,EAAE;QACX,WAAE,CAAC,aAAa,EAAE,CAAA;IACtB,CAAC,CAAC,CAAA;IAEF,IAAA,kBAAS,EAAC,GAAE,EAAE;QACV,WAAE,CAAC,eAAe,EAAE,CAAA;IACxB,CAAC,CAAC,CAAA;IAEF,IAAA,WAAE,EAAC,oDAAoD,EAAE,GAAE,EAAE;QACzD,IAAI,MAAM,GAAG,EAAE,CAAA;QACf,WAAE,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,kBAAkB,CAAC,IAAI,CAAA,EAAE;YACvD,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,CAAA;YACtB,OAAO,IAAI,CAAA;QACf,CAAC,CAAC,CAAA;QAEF,IAAA,yBAAiB,GAAE,CAAA;QAEnB,IAAA,eAAM,EAAC,MAAM,CAAC,CAAC,IAAI,CACf,kCAAkC;cACjC,2DAA2D;cAC3D,WAAW;cACX,wDAAwD;cACxD,IAAI;cACJ,iDAAiD,CACrD,CAAA;IACL,CAAC,CAAC,CAAA;AACN,CAAC,CAAC,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=status.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/commands/status.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,71 @@
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
+ dim: vitest_1.vi.fn((msg) => msg),
11
+ fail: vitest_1.vi.fn((msg) => { throw new Error(`fail:${msg}`); }),
12
+ parse_timeout: vitest_1.vi.fn(),
13
+ poll_until: vitest_1.vi.fn(),
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
+ print: mocks.print,
26
+ dim: mocks.dim,
27
+ fail: mocks.fail,
28
+ }));
29
+ vitest_1.vi.mock('../../utils/polling', () => ({
30
+ parse_timeout: mocks.parse_timeout,
31
+ poll_until: mocks.poll_until,
32
+ }));
33
+ const status_1 = require("../../commands/status");
34
+ (0, vitest_1.describe)('commands/status', () => {
35
+ (0, vitest_1.beforeEach)(() => {
36
+ vitest_1.vi.clearAllMocks();
37
+ mocks.ensure_authenticated.mockReturnValue('api_key');
38
+ mocks.start.mockReturnValue({ stop: mocks.stop });
39
+ });
40
+ (0, vitest_1.it)('prints one-shot status when --wait is not used', async () => {
41
+ mocks.get.mockResolvedValue({ status: 'ready', snapshot_id: 's1' });
42
+ await (0, status_1.handle_status)('s1', {});
43
+ (0, vitest_1.expect)(mocks.ensure_authenticated).toHaveBeenCalledWith(undefined);
44
+ (0, vitest_1.expect)(mocks.get).toHaveBeenCalledWith('api_key', '/datasets/v3/progress/s1', { timing: undefined });
45
+ (0, vitest_1.expect)(mocks.print).toHaveBeenCalledWith({ status: 'ready', snapshot_id: 's1' }, { json: undefined, pretty: undefined, output: undefined });
46
+ (0, vitest_1.expect)(mocks.poll_until).not.toHaveBeenCalled();
47
+ });
48
+ (0, vitest_1.it)('uses shared polling utility when --wait is enabled', async () => {
49
+ mocks.get.mockResolvedValueOnce({ status: 'running' });
50
+ mocks.parse_timeout.mockReturnValue(4);
51
+ mocks.poll_until.mockResolvedValue({
52
+ result: { status: 'ready', snapshot_id: 's2' },
53
+ attempts: 2,
54
+ last_status: 'ready',
55
+ });
56
+ await (0, status_1.handle_status)('s2', { wait: true, timeout: '4' });
57
+ (0, vitest_1.expect)(mocks.parse_timeout).toHaveBeenCalledWith('4');
58
+ (0, vitest_1.expect)(mocks.poll_until).toHaveBeenCalledTimes(1);
59
+ const poll_args = mocks.poll_until.mock.calls[0][0];
60
+ (0, vitest_1.expect)(poll_args.timeout_seconds).toBe(3);
61
+ (0, vitest_1.expect)(mocks.print).toHaveBeenCalledWith({ status: 'ready', snapshot_id: 's2' }, { json: undefined, pretty: undefined, output: undefined });
62
+ });
63
+ (0, vitest_1.it)('skips polling when first status is already complete', async () => {
64
+ mocks.get.mockResolvedValueOnce({ status: 'ready' });
65
+ mocks.parse_timeout.mockReturnValue(5);
66
+ await (0, status_1.handle_status)('s3', { wait: true, timeout: '5' });
67
+ (0, vitest_1.expect)(mocks.poll_until).not.toHaveBeenCalled();
68
+ (0, vitest_1.expect)(mocks.print).toHaveBeenCalledWith({ status: 'ready' }, { json: undefined, pretty: undefined, output: undefined });
69
+ });
70
+ });
71
+ //# sourceMappingURL=status.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.test.js","sourceRoot":"","sources":["../../../src/__tests__/commands/status.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=version.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/commands/version.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,41 @@
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
+ const fs_1 = __importDefault(require("fs"));
7
+ const os_1 = __importDefault(require("os"));
8
+ const path_1 = __importDefault(require("path"));
9
+ const vitest_1 = require("vitest");
10
+ const package_json_1 = __importDefault(require("../../../package.json"));
11
+ const version_1 = require("../../commands/version");
12
+ (0, vitest_1.describe)('commands/version', () => {
13
+ (0, vitest_1.afterEach)(() => {
14
+ vitest_1.vi.restoreAllMocks();
15
+ });
16
+ (0, vitest_1.it)('returns expected version info shape', () => {
17
+ const info = (0, version_1.get_version_info)();
18
+ (0, vitest_1.expect)(info.name).toBe(package_json_1.default.name);
19
+ (0, vitest_1.expect)(info.version).toBe(package_json_1.default.version);
20
+ (0, vitest_1.expect)(info.node).toBe(process.version);
21
+ (0, vitest_1.expect)(info.platform.length > 0).toBe(true);
22
+ (0, vitest_1.expect)(info.arch.length > 0).toBe(true);
23
+ });
24
+ (0, vitest_1.it)('prints short version string by default', () => {
25
+ const write = vitest_1.vi.spyOn(process.stdout, 'write')
26
+ .mockImplementation(() => true);
27
+ (0, version_1.handle_version)({});
28
+ (0, vitest_1.expect)(write).toHaveBeenCalledWith(`${package_json_1.default.name} v${package_json_1.default.version}\n`);
29
+ });
30
+ (0, vitest_1.it)('writes json version info to output file', () => {
31
+ const stamp = `${Date.now()}-${Math.random()}`;
32
+ const out_file = path_1.default.join(os_1.default.tmpdir(), `bd-version-${stamp}.json`);
33
+ (0, version_1.handle_version)({ json: true, output: out_file });
34
+ const data = JSON.parse(fs_1.default.readFileSync(out_file, 'utf8'));
35
+ fs_1.default.unlinkSync(out_file);
36
+ (0, vitest_1.expect)(data.name).toBe(package_json_1.default.name);
37
+ (0, vitest_1.expect)(data.version).toBe(package_json_1.default.version);
38
+ (0, vitest_1.expect)(data.node).toBe(process.version);
39
+ });
40
+ });
41
+ //# sourceMappingURL=version.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.test.js","sourceRoot":"","sources":["../../../src/__tests__/commands/version.test.ts"],"names":[],"mappings":";;;;;AAAA,4CAAoB;AACpB,4CAAoB;AACpB,gDAAwB;AACxB,mCAA2D;AAC3D,yEAAgD;AAChD,oDAAwE;AAExE,IAAA,iBAAQ,EAAC,kBAAkB,EAAE,GAAE,EAAE;IAC7B,IAAA,kBAAS,EAAC,GAAE,EAAE;QACV,WAAE,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,qCAAqC,EAAE,GAAE,EAAE;QAC1C,MAAM,IAAI,GAAG,IAAA,0BAAgB,GAAE,CAAC;QAChC,IAAA,eAAM,EAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,sBAAW,CAAC,IAAI,CAAC,CAAC;QACzC,IAAA,eAAM,EAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,sBAAW,CAAC,OAAO,CAAC,CAAC;QAC/C,IAAA,eAAM,EAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACxC,IAAA,eAAM,EAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5C,IAAA,eAAM,EAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,wCAAwC,EAAE,GAAE,EAAE;QAC7C,MAAM,KAAK,GAAG,WAAE,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC;aAC1C,kBAAkB,CAAC,GAAE,EAAE,CAAA,IAAI,CAAC,CAAC;QAClC,IAAA,wBAAc,EAAC,EAAE,CAAC,CAAC;QACnB,IAAA,eAAM,EAAC,KAAK,CAAC,CAAC,oBAAoB,CAC9B,GAAG,sBAAW,CAAC,IAAI,KAAK,sBAAW,CAAC,OAAO,IAAI,CAClD,CAAC;IACN,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,yCAAyC,EAAE,GAAE,EAAE;QAC9C,MAAM,KAAK,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;QAC/C,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,YAAE,CAAC,MAAM,EAAE,EAAE,cAAc,KAAK,OAAO,CAAC,CAAC;QACpE,IAAA,wBAAc,EAAC,EAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAC,CAAC,CAAC;QAC/C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,YAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAIxD,CAAC;QACF,YAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QACxB,IAAA,eAAM,EAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,sBAAW,CAAC,IAAI,CAAC,CAAC;QACzC,IAAA,eAAM,EAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,sBAAW,CAAC,OAAO,CAAC,CAAC;QAC/C,IAAA,eAAM,EAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=browser_auth.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser_auth.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/utils/browser_auth.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const vitest_1 = require("vitest");
4
+ const browser_auth_1 = require("../../utils/browser_auth");
5
+ (0, vitest_1.describe)('utils/browser_auth', () => {
6
+ (0, vitest_1.it)('omits customer_id from the authorize URL when not provided', () => {
7
+ const url = (0, browser_auth_1.build_authorize_url)({
8
+ redirect_uri: 'http://127.0.0.1:3000/callback',
9
+ state: 'state_123',
10
+ code_challenge: 'challenge_123',
11
+ });
12
+ (0, vitest_1.expect)(url.searchParams.get('redirect_uri'))
13
+ .toBe('http://127.0.0.1:3000/callback');
14
+ (0, vitest_1.expect)(url.searchParams.get('state')).toBe('state_123');
15
+ (0, vitest_1.expect)(url.searchParams.get('code_challenge')).toBe('challenge_123');
16
+ (0, vitest_1.expect)(url.searchParams.get('code_challenge_method')).toBe('S256');
17
+ (0, vitest_1.expect)(url.searchParams.has('customer_id')).toBe(false);
18
+ });
19
+ (0, vitest_1.it)('includes a trimmed customer_id in the authorize URL when provided', () => {
20
+ const url = (0, browser_auth_1.build_authorize_url)({
21
+ redirect_uri: 'http://127.0.0.1:3000/callback',
22
+ state: 'state_123',
23
+ code_challenge: 'challenge_123',
24
+ customer_id: ' hl_123 ',
25
+ });
26
+ (0, vitest_1.expect)(url.searchParams.get('customer_id')).toBe('hl_123');
27
+ });
28
+ (0, vitest_1.it)('omits customer_id from the device start body when not provided', () => {
29
+ (0, vitest_1.expect)((0, browser_auth_1.build_device_start_body)(undefined)).toEqual({});
30
+ (0, vitest_1.expect)((0, browser_auth_1.build_device_start_body)(' ')).toEqual({});
31
+ });
32
+ (0, vitest_1.it)('includes a trimmed customer_id in the device start body when provided', () => {
33
+ (0, vitest_1.expect)((0, browser_auth_1.build_device_start_body)(' hl_123 ')).toEqual({
34
+ customer_id: 'hl_123',
35
+ });
36
+ });
37
+ });
38
+ //# sourceMappingURL=browser_auth.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser_auth.test.js","sourceRoot":"","sources":["../../../src/__tests__/utils/browser_auth.test.ts"],"names":[],"mappings":";;AAAA,mCAA4C;AAC5C,2DAGkC;AAElC,IAAA,iBAAQ,EAAC,oBAAoB,EAAE,GAAE,EAAE;IAC/B,IAAA,WAAE,EAAC,4DAA4D,EAAE,GAAE,EAAE;QACjE,MAAM,GAAG,GAAG,IAAA,kCAAmB,EAAC;YAC5B,YAAY,EAAE,gCAAgC;YAC9C,KAAK,EAAE,WAAW;YAClB,cAAc,EAAE,eAAe;SAClC,CAAC,CAAC;QAEH,IAAA,eAAM,EAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;aACvC,IAAI,CAAC,gCAAgC,CAAC,CAAC;QAC5C,IAAA,eAAM,EAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACxD,IAAA,eAAM,EAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QACrE,IAAA,eAAM,EAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACnE,IAAA,eAAM,EAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,mEAAmE,EAAE,GAAE,EAAE;QACxE,MAAM,GAAG,GAAG,IAAA,kCAAmB,EAAC;YAC5B,YAAY,EAAE,gCAAgC;YAC9C,KAAK,EAAE,WAAW;YAClB,cAAc,EAAE,eAAe;YAC/B,WAAW,EAAE,UAAU;SAC1B,CAAC,CAAC;QAEH,IAAA,eAAM,EAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,gEAAgE,EAAE,GAAE,EAAE;QACrE,IAAA,eAAM,EAAC,IAAA,sCAAuB,EAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACvD,IAAA,eAAM,EAAC,IAAA,sCAAuB,EAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,uEAAuE,EAAE,GAAE,EAAE;QAC5E,IAAA,eAAM,EAAC,IAAA,sCAAuB,EAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC;YAChD,WAAW,EAAE,QAAQ;SACxB,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=config.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/utils/config.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,58 @@
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
+ const fs_1 = __importDefault(require("fs"));
7
+ const os_1 = __importDefault(require("os"));
8
+ const path_1 = __importDefault(require("path"));
9
+ const vitest_1 = require("vitest");
10
+ const config_1 = require("../../utils/config");
11
+ const mk_tmp_home = () => {
12
+ const stamp = `${Date.now()}-${Math.random()}`;
13
+ return path_1.default.join(os_1.default.tmpdir(), `brightdata-cli-tests-${stamp}`);
14
+ };
15
+ (0, vitest_1.describe)('utils/config', () => {
16
+ let original_home = '';
17
+ let tmp_home = '';
18
+ (0, vitest_1.beforeEach)(() => {
19
+ original_home = process.env['HOME'] ?? '';
20
+ tmp_home = mk_tmp_home();
21
+ fs_1.default.mkdirSync(tmp_home, { recursive: true });
22
+ process.env['HOME'] = tmp_home;
23
+ delete process.env['BRIGHTDATA_API_KEY'];
24
+ delete process.env['TEST_ZONE_ENV'];
25
+ });
26
+ (0, vitest_1.afterEach)(() => {
27
+ process.env['HOME'] = original_home;
28
+ fs_1.default.rmSync(tmp_home, { recursive: true, force: true });
29
+ });
30
+ (0, vitest_1.it)('loads defaults when config does not exist', () => {
31
+ (0, vitest_1.expect)((0, config_1.load)()).toEqual(config_1.DEFAULTS);
32
+ });
33
+ (0, vitest_1.it)('persists values with set/get', () => {
34
+ (0, config_1.set)('default_zone_unlocker', 'cli_unlocker');
35
+ (0, config_1.set)('default_zone_serp', 'cli_serp');
36
+ (0, config_1.set)('default_format', 'json');
37
+ (0, vitest_1.expect)((0, config_1.get)('default_zone_unlocker')).toBe('cli_unlocker');
38
+ (0, vitest_1.expect)((0, config_1.get)('default_zone_serp')).toBe('cli_serp');
39
+ (0, vitest_1.expect)((0, config_1.get)('default_format')).toBe('json');
40
+ });
41
+ (0, vitest_1.it)('resolves value by cli then env then config', () => {
42
+ (0, config_1.set)('default_zone_unlocker', 'from_config');
43
+ process.env['TEST_ZONE_ENV'] = 'from_env';
44
+ (0, vitest_1.expect)((0, config_1.resolve)('from_cli', 'TEST_ZONE_ENV', 'default_zone_unlocker'))
45
+ .toBe('from_cli');
46
+ (0, vitest_1.expect)((0, config_1.resolve)(undefined, 'TEST_ZONE_ENV', 'default_zone_unlocker'))
47
+ .toBe('from_env');
48
+ delete process.env['TEST_ZONE_ENV'];
49
+ (0, vitest_1.expect)((0, config_1.resolve)(undefined, 'TEST_ZONE_ENV', 'default_zone_unlocker'))
50
+ .toBe('from_config');
51
+ });
52
+ (0, vitest_1.it)('resolve_api_key uses cli first, then env', () => {
53
+ process.env['BRIGHTDATA_API_KEY'] = 'from_env_key';
54
+ (0, vitest_1.expect)((0, config_1.resolve_api_key)('from_cli_key')).toBe('from_cli_key');
55
+ (0, vitest_1.expect)((0, config_1.resolve_api_key)(undefined)).toBe('from_env_key');
56
+ });
57
+ });
58
+ //# sourceMappingURL=config.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.test.js","sourceRoot":"","sources":["../../../src/__tests__/utils/config.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=polling.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"polling.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/utils/polling.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const vitest_1 = require("vitest");
4
+ const polling_1 = require("../../utils/polling");
5
+ (0, vitest_1.describe)('utils/polling.parse_timeout', () => {
6
+ (0, vitest_1.it)('parses explicit timeout and floors decimals', () => {
7
+ (0, vitest_1.expect)((0, polling_1.parse_timeout)('12.9')).toBe(12);
8
+ });
9
+ (0, vitest_1.it)('uses env value when timeout is not provided', () => {
10
+ process.env['BRIGHTDATA_POLLING_TIMEOUT'] = '9';
11
+ (0, vitest_1.expect)((0, polling_1.parse_timeout)(undefined)).toBe(9);
12
+ delete process.env['BRIGHTDATA_POLLING_TIMEOUT'];
13
+ });
14
+ (0, vitest_1.it)('throws on invalid timeout', () => {
15
+ (0, vitest_1.expect)(() => (0, polling_1.parse_timeout)('0')).toThrow('Invalid timeout "0"');
16
+ });
17
+ });
18
+ (0, vitest_1.describe)('utils/polling.poll_until', () => {
19
+ (0, vitest_1.it)('returns immediately when status is not running', async () => {
20
+ const fetch_once = vitest_1.vi.fn()
21
+ .mockResolvedValue({ status: 'ready', rows: 3 });
22
+ const result = await (0, polling_1.poll_until)({
23
+ timeout_seconds: 5,
24
+ fetch_once,
25
+ get_status: (r) => r.status,
26
+ running_statuses: ['running'],
27
+ interval_ms: 0,
28
+ });
29
+ (0, vitest_1.expect)(fetch_once).toHaveBeenCalledTimes(1);
30
+ (0, vitest_1.expect)(result.attempts).toBe(1);
31
+ (0, vitest_1.expect)(result.result).toEqual({ status: 'ready', rows: 3 });
32
+ });
33
+ (0, vitest_1.it)('polls until status is ready and reports running attempts', async () => {
34
+ const fetch_once = vitest_1.vi.fn()
35
+ .mockResolvedValueOnce({ status: 'running' })
36
+ .mockResolvedValueOnce({ status: 'building' })
37
+ .mockResolvedValueOnce({ status: 'ready', rows: 10 });
38
+ const on_running = vitest_1.vi.fn();
39
+ const result = await (0, polling_1.poll_until)({
40
+ timeout_seconds: 5,
41
+ fetch_once,
42
+ get_status: (r) => r.status,
43
+ running_statuses: ['running', 'building'],
44
+ interval_ms: 0,
45
+ on_running,
46
+ });
47
+ (0, vitest_1.expect)(fetch_once).toHaveBeenCalledTimes(3);
48
+ (0, vitest_1.expect)(on_running).toHaveBeenCalledTimes(2);
49
+ (0, vitest_1.expect)(result.attempts).toBe(3);
50
+ (0, vitest_1.expect)(result.last_status).toBe('ready');
51
+ });
52
+ (0, vitest_1.it)('throws timeout error when status never completes', async () => {
53
+ const fetch_once = vitest_1.vi.fn()
54
+ .mockResolvedValue({ status: 'running' });
55
+ await (0, vitest_1.expect)((0, polling_1.poll_until)({
56
+ timeout_seconds: 2,
57
+ fetch_once,
58
+ get_status: (r) => r.status,
59
+ running_statuses: ['running'],
60
+ interval_ms: 0,
61
+ timeout_label: 'data',
62
+ })).rejects.toThrow('Timeout after 2 seconds waiting for data.');
63
+ });
64
+ });
65
+ //# sourceMappingURL=polling.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"polling.test.js","sourceRoot":"","sources":["../../../src/__tests__/utils/polling.test.ts"],"names":[],"mappings":";;AAAA,mCAAgD;AAChD,iDAA8D;AAO9D,IAAA,iBAAQ,EAAC,6BAA6B,EAAE,GAAE,EAAE;IACxC,IAAA,WAAE,EAAC,6CAA6C,EAAE,GAAE,EAAE;QAClD,IAAA,eAAM,EAAC,IAAA,uBAAa,EAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,6CAA6C,EAAE,GAAE,EAAE;QAClD,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,GAAG,GAAG,CAAC;QAChD,IAAA,eAAM,EAAC,IAAA,uBAAa,EAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACzC,OAAO,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,2BAA2B,EAAE,GAAE,EAAE;QAChC,IAAA,eAAM,EAAC,GAAE,EAAE,CAAA,IAAA,uBAAa,EAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC;AAEH,IAAA,iBAAQ,EAAC,0BAA0B,EAAE,GAAE,EAAE;IACrC,IAAA,WAAE,EAAC,gDAAgD,EAAE,KAAK,IAAE,EAAE;QAC1D,MAAM,UAAU,GAAG,WAAE,CAAC,EAAE,EAA4B;aAC/C,iBAAiB,CAAC,EAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,EAAC,CAAC,CAAC;QACnD,MAAM,MAAM,GAAG,MAAM,IAAA,oBAAU,EAAY;YACvC,eAAe,EAAE,CAAC;YAClB,UAAU;YACV,UAAU,EAAE,CAAC,CAAY,EAAC,EAAE,CAAA,CAAC,CAAC,MAAM;YACpC,gBAAgB,EAAE,CAAC,SAAS,CAAC;YAC7B,WAAW,EAAE,CAAC;SACjB,CAAC,CAAC;QACH,IAAA,eAAM,EAAC,UAAU,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QAC5C,IAAA,eAAM,EAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAChC,IAAA,eAAM,EAAC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,EAAC,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,0DAA0D,EAAE,KAAK,IAAE,EAAE;QACpE,MAAM,UAAU,GAAG,WAAE,CAAC,EAAE,EAA4B;aAC/C,qBAAqB,CAAC,EAAC,MAAM,EAAE,SAAS,EAAC,CAAC;aAC1C,qBAAqB,CAAC,EAAC,MAAM,EAAE,UAAU,EAAC,CAAC;aAC3C,qBAAqB,CAAC,EAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAC,CAAC,CAAC;QACxD,MAAM,UAAU,GAAG,WAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,MAAM,IAAA,oBAAU,EAAY;YACvC,eAAe,EAAE,CAAC;YAClB,UAAU;YACV,UAAU,EAAE,CAAC,CAAY,EAAC,EAAE,CAAA,CAAC,CAAC,MAAM;YACpC,gBAAgB,EAAE,CAAC,SAAS,EAAE,UAAU,CAAC;YACzC,WAAW,EAAE,CAAC;YACd,UAAU;SACb,CAAC,CAAC;QACH,IAAA,eAAM,EAAC,UAAU,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QAC5C,IAAA,eAAM,EAAC,UAAU,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QAC5C,IAAA,eAAM,EAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAChC,IAAA,eAAM,EAAC,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,kDAAkD,EAAE,KAAK,IAAE,EAAE;QAC5D,MAAM,UAAU,GAAG,WAAE,CAAC,EAAE,EAA4B;aAC/C,iBAAiB,CAAC,EAAC,MAAM,EAAE,SAAS,EAAC,CAAC,CAAC;QAC5C,MAAM,IAAA,eAAM,EAAC,IAAA,oBAAU,EAAY;YAC/B,eAAe,EAAE,CAAC;YAClB,UAAU;YACV,UAAU,EAAE,CAAC,CAAY,EAAC,EAAE,CAAA,CAAC,CAAC,MAAM;YACpC,gBAAgB,EAAE,CAAC,SAAS,CAAC;YAC7B,WAAW,EAAE,CAAC;YACd,aAAa,EAAE,MAAM;SACxB,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,2CAA2C,CAAC,CAAC;IACrE,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { Command } from 'commander';
2
+ type Budget_opts = {
3
+ from?: string;
4
+ to?: string;
5
+ json?: boolean;
6
+ pretty?: boolean;
7
+ timing?: boolean;
8
+ apiKey?: string;
9
+ };
10
+ declare const handle_budget_balance: (opts: Budget_opts) => Promise<void>;
11
+ declare const handle_budget_zones: (opts: Budget_opts) => Promise<void>;
12
+ declare const handle_budget_zone: (name: string, opts: Budget_opts) => Promise<void>;
13
+ declare const budget_command: Command;
14
+ export { budget_command, handle_budget_balance, handle_budget_zones, handle_budget_zone, };
15
+ //# sourceMappingURL=budget.d.ts.map