firecrawl-cli 0.0.6 → 1.0.0-beta.1

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.
@@ -0,0 +1,81 @@
1
+ "use strict";
2
+ /**
3
+ * Login command implementation
4
+ * Handles both manual API key entry and browser-based authentication
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.handleLoginCommand = handleLoginCommand;
8
+ const credentials_1 = require("../utils/credentials");
9
+ const config_1 = require("../utils/config");
10
+ const auth_1 = require("../utils/auth");
11
+ const DEFAULT_API_URL = 'https://api.firecrawl.dev';
12
+ const WEB_URL = 'https://firecrawl.dev';
13
+ /**
14
+ * Main login command handler
15
+ */
16
+ async function handleLoginCommand(options = {}) {
17
+ const apiUrl = options.apiUrl?.replace(/\/$/, '') || DEFAULT_API_URL;
18
+ const webUrl = options.webUrl?.replace(/\/$/, '') || WEB_URL;
19
+ // If already authenticated, let them know
20
+ if ((0, auth_1.isAuthenticated)() && !options.apiKey && !options.method) {
21
+ console.log('You are already logged in.');
22
+ console.log(`Credentials stored at: ${(0, credentials_1.getConfigDirectoryPath)()}`);
23
+ console.log('\nTo login with a different account, run:');
24
+ console.log(' firecrawl logout');
25
+ console.log(' firecrawl login');
26
+ return;
27
+ }
28
+ // If API key provided directly, save it
29
+ if (options.apiKey) {
30
+ if (!options.apiKey.startsWith('fc-')) {
31
+ console.error('Error: Invalid API key format. API keys should start with "fc-"');
32
+ process.exit(1);
33
+ }
34
+ try {
35
+ (0, credentials_1.saveCredentials)({
36
+ apiKey: options.apiKey,
37
+ apiUrl: apiUrl,
38
+ });
39
+ console.log('✓ Login successful!');
40
+ (0, config_1.updateConfig)({
41
+ apiKey: options.apiKey,
42
+ apiUrl: apiUrl,
43
+ });
44
+ }
45
+ catch (error) {
46
+ console.error('Error saving credentials:', error instanceof Error ? error.message : 'Unknown error');
47
+ process.exit(1);
48
+ }
49
+ return;
50
+ }
51
+ try {
52
+ let result;
53
+ if (options.method === 'manual') {
54
+ result = await (0, auth_1.manualLogin)();
55
+ }
56
+ else if (options.method === 'browser') {
57
+ result = await (0, auth_1.browserLogin)(webUrl);
58
+ }
59
+ else {
60
+ result = await (0, auth_1.interactiveLogin)(webUrl);
61
+ }
62
+ // Save credentials
63
+ (0, credentials_1.saveCredentials)({
64
+ apiKey: result.apiKey,
65
+ apiUrl: result.apiUrl || apiUrl,
66
+ });
67
+ console.log('\n✓ Login successful!');
68
+ if (result.teamName) {
69
+ console.log(` Team: ${result.teamName}`);
70
+ }
71
+ (0, config_1.updateConfig)({
72
+ apiKey: result.apiKey,
73
+ apiUrl: result.apiUrl || apiUrl,
74
+ });
75
+ }
76
+ catch (error) {
77
+ console.error('\nError:', error instanceof Error ? error.message : 'Unknown error');
78
+ process.exit(1);
79
+ }
80
+ }
81
+ //# sourceMappingURL=login.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Logout command implementation
3
+ * Clears stored credentials
4
+ */
5
+ /**
6
+ * Main logout command handler
7
+ */
8
+ export declare function handleLogoutCommand(): Promise<void>;
9
+ //# sourceMappingURL=logout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logout.d.ts","sourceRoot":"","sources":["../../src/commands/logout.ts"],"names":[],"mappings":"AAAA;;;GAGG;AASH;;GAEG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC,CAwBzD"}
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ /**
3
+ * Logout command implementation
4
+ * Clears stored credentials
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.handleLogoutCommand = handleLogoutCommand;
8
+ const credentials_1 = require("../utils/credentials");
9
+ const config_1 = require("../utils/config");
10
+ /**
11
+ * Main logout command handler
12
+ */
13
+ async function handleLogoutCommand() {
14
+ const credentials = (0, credentials_1.loadCredentials)();
15
+ if (!credentials || !credentials.apiKey) {
16
+ console.log('No credentials found. You are not logged in.');
17
+ return;
18
+ }
19
+ try {
20
+ (0, credentials_1.deleteCredentials)();
21
+ // Clear the global config
22
+ (0, config_1.updateConfig)({
23
+ apiKey: '',
24
+ apiUrl: '',
25
+ });
26
+ console.log('✓ Logged out successfully');
27
+ }
28
+ catch (error) {
29
+ console.error('Error logging out:', error instanceof Error ? error.message : 'Unknown error');
30
+ process.exit(1);
31
+ }
32
+ }
33
+ //# sourceMappingURL=logout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logout.js","sourceRoot":"","sources":["../../src/commands/logout.ts"],"names":[],"mappings":";AAAA;;;GAGG;;AAYH,kDAwBC;AAlCD,sDAI8B;AAC9B,4CAA+C;AAE/C;;GAEG;AACI,KAAK,UAAU,mBAAmB;IACvC,MAAM,WAAW,GAAG,IAAA,6BAAe,GAAE,CAAC;IAEtC,IAAI,CAAC,WAAW,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC;QACxC,OAAO,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC;QAC5D,OAAO;IACT,CAAC;IAED,IAAI,CAAC;QACH,IAAA,+BAAiB,GAAE,CAAC;QACpB,0BAA0B;QAC1B,IAAA,qBAAY,EAAC;YACX,MAAM,EAAE,EAAE;YACV,MAAM,EAAE,EAAE;SACX,CAAC,CAAC;QAEH,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;IAC3C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CACX,oBAAoB,EACpB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CACzD,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Search command implementation
3
+ */
4
+ import type { SearchOptions, SearchResult } from '../types/search';
5
+ /**
6
+ * Execute search command
7
+ */
8
+ export declare function executeSearch(options: SearchOptions): Promise<SearchResult>;
9
+ /**
10
+ * Handle search command output
11
+ */
12
+ export declare function handleSearchCommand(options: SearchOptions): Promise<void>;
13
+ //# sourceMappingURL=search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/commands/search.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EACV,aAAa,EACb,YAAY,EAKb,MAAM,iBAAiB,CAAC;AAIzB;;GAEG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,YAAY,CAAC,CAmHvB;AA+FD;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,IAAI,CAAC,CAoDf"}
@@ -0,0 +1,241 @@
1
+ "use strict";
2
+ /**
3
+ * Search command implementation
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.executeSearch = executeSearch;
7
+ exports.handleSearchCommand = handleSearchCommand;
8
+ const client_1 = require("../utils/client");
9
+ const output_1 = require("../utils/output");
10
+ /**
11
+ * Execute search command
12
+ */
13
+ async function executeSearch(options) {
14
+ try {
15
+ const app = (0, client_1.getClient)({ apiKey: options.apiKey });
16
+ // Build search options for the SDK
17
+ const searchParams = {
18
+ limit: options.limit,
19
+ };
20
+ // Add sources if specified
21
+ if (options.sources && options.sources.length > 0) {
22
+ searchParams.sources = options.sources.map((source) => ({
23
+ type: source,
24
+ }));
25
+ }
26
+ // Add categories if specified
27
+ if (options.categories && options.categories.length > 0) {
28
+ searchParams.categories = options.categories.map((category) => ({
29
+ type: category,
30
+ }));
31
+ }
32
+ // Add time-based search parameter
33
+ if (options.tbs) {
34
+ searchParams.tbs = options.tbs;
35
+ }
36
+ // Add location parameter
37
+ if (options.location) {
38
+ searchParams.location = options.location;
39
+ }
40
+ // Add country parameter
41
+ if (options.country) {
42
+ searchParams.country = options.country;
43
+ }
44
+ // Add timeout parameter
45
+ if (options.timeout !== undefined) {
46
+ searchParams.timeout = options.timeout;
47
+ }
48
+ // Add ignoreInvalidURLs parameter
49
+ if (options.ignoreInvalidUrls !== undefined) {
50
+ searchParams.ignoreInvalidURLs = options.ignoreInvalidUrls;
51
+ }
52
+ // Add scrape options if scraping is enabled
53
+ if (options.scrape) {
54
+ const scrapeOptions = {};
55
+ // Add formats
56
+ if (options.scrapeFormats && options.scrapeFormats.length > 0) {
57
+ scrapeOptions.formats = options.scrapeFormats.map((format) => ({
58
+ type: format,
59
+ }));
60
+ }
61
+ else {
62
+ // Default to markdown if scraping is enabled but no formats specified
63
+ scrapeOptions.formats = [{ type: 'markdown' }];
64
+ }
65
+ // Add onlyMainContent if specified
66
+ if (options.onlyMainContent !== undefined) {
67
+ scrapeOptions.onlyMainContent = options.onlyMainContent;
68
+ }
69
+ searchParams.scrapeOptions = scrapeOptions;
70
+ }
71
+ // Execute search
72
+ const result = await app.search(options.query, searchParams);
73
+ // Handle the response - the SDK returns the data directly or wrapped
74
+ const data = {};
75
+ // Check if result has the expected structure
76
+ if (result) {
77
+ // Handle web results
78
+ if (result.web || result.data?.web) {
79
+ data.web = (result.web ||
80
+ result.data?.web);
81
+ }
82
+ // Handle image results
83
+ if (result.images || result.data?.images) {
84
+ data.images = (result.images ||
85
+ result.data?.images);
86
+ }
87
+ // Handle news results
88
+ if (result.news || result.data?.news) {
89
+ data.news = (result.news ||
90
+ result.data?.news);
91
+ }
92
+ // If result is an array (legacy format), treat as web results
93
+ if (Array.isArray(result)) {
94
+ data.web = result;
95
+ }
96
+ }
97
+ return {
98
+ success: true,
99
+ data,
100
+ warning: result?.warning,
101
+ id: result?.id,
102
+ creditsUsed: result?.creditsUsed,
103
+ };
104
+ }
105
+ catch (error) {
106
+ return {
107
+ success: false,
108
+ error: error instanceof Error ? error.message : 'Unknown error occurred',
109
+ };
110
+ }
111
+ }
112
+ /**
113
+ * Format search data in human-readable way
114
+ */
115
+ function formatSearchReadable(data, options) {
116
+ const lines = [];
117
+ // Format web results
118
+ if (data.web && data.web.length > 0) {
119
+ if (options.sources && options.sources.length > 1) {
120
+ lines.push('=== Web Results ===');
121
+ lines.push('');
122
+ }
123
+ for (const result of data.web) {
124
+ lines.push(`${result.title || 'Untitled'}`);
125
+ lines.push(` URL: ${result.url}`);
126
+ if (result.description) {
127
+ lines.push(` ${result.description}`);
128
+ }
129
+ if (result.category) {
130
+ lines.push(` Category: ${result.category}`);
131
+ }
132
+ if (result.markdown) {
133
+ lines.push('');
134
+ lines.push(' --- Content ---');
135
+ // Indent markdown content
136
+ const indentedMarkdown = result.markdown
137
+ .split('\n')
138
+ .map((line) => ` ${line}`)
139
+ .join('\n');
140
+ lines.push(indentedMarkdown);
141
+ lines.push(' --- End Content ---');
142
+ }
143
+ lines.push('');
144
+ }
145
+ }
146
+ // Format image results
147
+ if (data.images && data.images.length > 0) {
148
+ if (lines.length > 0) {
149
+ lines.push('');
150
+ }
151
+ lines.push('=== Image Results ===');
152
+ lines.push('');
153
+ for (const result of data.images) {
154
+ lines.push(`${result.title || 'Untitled'}`);
155
+ lines.push(` Image URL: ${result.imageUrl}`);
156
+ lines.push(` Source: ${result.url}`);
157
+ if (result.imageWidth && result.imageHeight) {
158
+ lines.push(` Size: ${result.imageWidth}x${result.imageHeight}`);
159
+ }
160
+ lines.push('');
161
+ }
162
+ }
163
+ // Format news results
164
+ if (data.news && data.news.length > 0) {
165
+ if (lines.length > 0) {
166
+ lines.push('');
167
+ }
168
+ lines.push('=== News Results ===');
169
+ lines.push('');
170
+ for (const result of data.news) {
171
+ lines.push(`${result.title || 'Untitled'}`);
172
+ lines.push(` URL: ${result.url}`);
173
+ if (result.date) {
174
+ lines.push(` Date: ${result.date}`);
175
+ }
176
+ if (result.snippet) {
177
+ lines.push(` ${result.snippet}`);
178
+ }
179
+ if (result.markdown) {
180
+ lines.push('');
181
+ lines.push(' --- Content ---');
182
+ const indentedMarkdown = result.markdown
183
+ .split('\n')
184
+ .map((line) => ` ${line}`)
185
+ .join('\n');
186
+ lines.push(indentedMarkdown);
187
+ lines.push(' --- End Content ---');
188
+ }
189
+ lines.push('');
190
+ }
191
+ }
192
+ return lines.join('\n');
193
+ }
194
+ /**
195
+ * Handle search command output
196
+ */
197
+ async function handleSearchCommand(options) {
198
+ const result = await executeSearch(options);
199
+ if (!result.success) {
200
+ console.error('Error:', result.error);
201
+ process.exit(1);
202
+ }
203
+ if (!result.data) {
204
+ return;
205
+ }
206
+ // Check if there are any results
207
+ const hasResults = (result.data.web && result.data.web.length > 0) ||
208
+ (result.data.images && result.data.images.length > 0) ||
209
+ (result.data.news && result.data.news.length > 0);
210
+ if (!hasResults) {
211
+ console.log('No results found.');
212
+ return;
213
+ }
214
+ let outputContent;
215
+ // Use JSON format if --json or --pretty flag is set
216
+ // --pretty implies JSON output
217
+ if (options.json || options.pretty) {
218
+ const jsonOutput = {
219
+ success: true,
220
+ data: result.data,
221
+ };
222
+ if (result.warning) {
223
+ jsonOutput.warning = result.warning;
224
+ }
225
+ if (result.id) {
226
+ jsonOutput.id = result.id;
227
+ }
228
+ if (result.creditsUsed !== undefined) {
229
+ jsonOutput.creditsUsed = result.creditsUsed;
230
+ }
231
+ outputContent = options.pretty
232
+ ? JSON.stringify(jsonOutput, null, 2)
233
+ : JSON.stringify(jsonOutput);
234
+ }
235
+ else {
236
+ // Default to human-readable format
237
+ outputContent = formatSearchReadable(result.data, options);
238
+ }
239
+ (0, output_1.writeOutput)(outputContent, options.output, !!options.output);
240
+ }
241
+ //# sourceMappingURL=search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/commands/search.ts"],"names":[],"mappings":"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"}