@crawlee-cloud/cli 0.1.6 ā 0.2.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.
- package/dist/commands/dev.d.ts +8 -0
- package/dist/commands/dev.d.ts.map +1 -0
- package/dist/commands/dev.js +118 -0
- package/dist/commands/dev.js.map +1 -0
- package/dist/commands/init.d.ts +9 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +230 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/logs.d.ts.map +1 -1
- package/dist/commands/logs.js +85 -33
- package/dist/commands/logs.js.map +1 -1
- package/dist/commands/status.d.ts +8 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +123 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -5
- package/dist/index.js.map +1 -1
- package/package.json +9 -5
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dev.d.ts","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAYpC,eAAO,MAAM,UAAU,SA+HnB,CAAC"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `crawlee-cloud dev` command
|
|
3
|
+
*
|
|
4
|
+
* Runs an Actor in development mode with hot reload.
|
|
5
|
+
*/
|
|
6
|
+
import { Command } from 'commander';
|
|
7
|
+
import chalk from 'chalk';
|
|
8
|
+
import path from 'path';
|
|
9
|
+
import fs from 'fs-extra';
|
|
10
|
+
import { spawn } from 'child_process';
|
|
11
|
+
import chokidar from 'chokidar';
|
|
12
|
+
import dotenv from 'dotenv';
|
|
13
|
+
export const devCommand = new Command('dev')
|
|
14
|
+
.description('Run Actor in development mode with hot reload')
|
|
15
|
+
.option('-w, --watch', 'Enable file watching and auto-restart', false)
|
|
16
|
+
.action(async (options) => {
|
|
17
|
+
console.log(chalk.bold('\nš„ Starting development mode\n'));
|
|
18
|
+
const cwd = process.cwd();
|
|
19
|
+
// Check if we're in an Actor directory
|
|
20
|
+
const packageJsonPath = path.join(cwd, 'package.json');
|
|
21
|
+
const requirementsPath = path.join(cwd, 'requirements.txt');
|
|
22
|
+
const isPython = (await fs.pathExists(requirementsPath)) && !(await fs.pathExists(packageJsonPath));
|
|
23
|
+
if (!(await fs.pathExists(packageJsonPath)) && !isPython) {
|
|
24
|
+
console.log(chalk.red('ā No package.json or requirements.txt found'));
|
|
25
|
+
console.log(chalk.dim('Are you in an Actor directory?'));
|
|
26
|
+
process.exit(1);
|
|
27
|
+
}
|
|
28
|
+
// Load .env if exists
|
|
29
|
+
const envPath = path.join(cwd, '.env');
|
|
30
|
+
if (await fs.pathExists(envPath)) {
|
|
31
|
+
dotenv.config({ path: envPath });
|
|
32
|
+
}
|
|
33
|
+
// Set up storage directory
|
|
34
|
+
const storageDir = path.join(cwd, 'storage');
|
|
35
|
+
await fs.ensureDir(path.join(storageDir, 'key_value_stores', 'default'));
|
|
36
|
+
await fs.ensureDir(path.join(storageDir, 'datasets', 'default'));
|
|
37
|
+
await fs.ensureDir(path.join(storageDir, 'request_queues', 'default'));
|
|
38
|
+
// Environment for the Actor
|
|
39
|
+
const env = {
|
|
40
|
+
...process.env,
|
|
41
|
+
APIFY_LOCAL_STORAGE_DIR: storageDir,
|
|
42
|
+
APIFY_HEADLESS: '1',
|
|
43
|
+
CRAWLEE_STORAGE_DIR: storageDir,
|
|
44
|
+
};
|
|
45
|
+
let child = null;
|
|
46
|
+
let isRestarting = false;
|
|
47
|
+
const startActor = () => {
|
|
48
|
+
if (child) {
|
|
49
|
+
isRestarting = true;
|
|
50
|
+
child.kill();
|
|
51
|
+
}
|
|
52
|
+
// Small delay before restart
|
|
53
|
+
setTimeout(() => {
|
|
54
|
+
const timestamp = new Date().toLocaleTimeString();
|
|
55
|
+
console.log(chalk.dim(`[${timestamp}]`), chalk.cyan('Starting Actor...'));
|
|
56
|
+
console.log(chalk.dim('ā'.repeat(50)));
|
|
57
|
+
// Cross-platform command detection
|
|
58
|
+
const isWindows = process.platform === 'win32';
|
|
59
|
+
const pythonCmd = isWindows ? 'python' : 'python3';
|
|
60
|
+
const npmCmd = isWindows ? 'npm.cmd' : 'npm';
|
|
61
|
+
const cmd = isPython ? pythonCmd : npmCmd;
|
|
62
|
+
const args = isPython ? ['-m', 'src'] : ['start'];
|
|
63
|
+
child = spawn(cmd, args, {
|
|
64
|
+
cwd,
|
|
65
|
+
env,
|
|
66
|
+
stdio: 'inherit',
|
|
67
|
+
shell: true,
|
|
68
|
+
});
|
|
69
|
+
child.on('exit', (code) => {
|
|
70
|
+
if (!isRestarting) {
|
|
71
|
+
console.log(chalk.dim('ā'.repeat(50)));
|
|
72
|
+
if (code === 0) {
|
|
73
|
+
console.log(chalk.green('\nā
Actor finished'));
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
console.log(chalk.yellow(`\nā ļø Actor exited with code ${String(code ?? 'unknown')}`));
|
|
77
|
+
}
|
|
78
|
+
if (options.watch) {
|
|
79
|
+
console.log(chalk.dim('\nWatching for changes... (Ctrl+C to exit)\n'));
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
isRestarting = false;
|
|
83
|
+
});
|
|
84
|
+
}, isRestarting ? 500 : 0);
|
|
85
|
+
};
|
|
86
|
+
// Start Actor
|
|
87
|
+
startActor();
|
|
88
|
+
// Watch for changes
|
|
89
|
+
if (options.watch) {
|
|
90
|
+
const watchPaths = isPython
|
|
91
|
+
? ['src/**/*.py', '*.py']
|
|
92
|
+
: ['src/**/*.ts', 'src/**/*.js', '*.ts', '*.js'];
|
|
93
|
+
const watcher = chokidar.watch(watchPaths, {
|
|
94
|
+
cwd,
|
|
95
|
+
ignored: ['node_modules', 'storage', 'dist', '.git', '__pycache__'],
|
|
96
|
+
ignoreInitial: true,
|
|
97
|
+
});
|
|
98
|
+
watcher.on('change', (filePath) => {
|
|
99
|
+
const timestamp = new Date().toLocaleTimeString();
|
|
100
|
+
console.log(chalk.dim(`\n[${timestamp}]`), chalk.yellow(`File changed: ${filePath}`));
|
|
101
|
+
startActor();
|
|
102
|
+
});
|
|
103
|
+
watcher.on('add', (filePath) => {
|
|
104
|
+
const timestamp = new Date().toLocaleTimeString();
|
|
105
|
+
console.log(chalk.dim(`\n[${timestamp}]`), chalk.yellow(`File added: ${filePath}`));
|
|
106
|
+
startActor();
|
|
107
|
+
});
|
|
108
|
+
// Handle Ctrl+C
|
|
109
|
+
process.on('SIGINT', () => {
|
|
110
|
+
console.log(chalk.dim('\n\nShutting down...\n'));
|
|
111
|
+
void watcher.close();
|
|
112
|
+
if (child)
|
|
113
|
+
child.kill();
|
|
114
|
+
process.exit(0);
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
});
|
|
118
|
+
//# sourceMappingURL=dev.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dev.js","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `crawlee-cloud init` command
|
|
3
|
+
*
|
|
4
|
+
* Scaffolds new Actor projects using official Apify templates.
|
|
5
|
+
* Templates are fetched from: https://github.com/apify/actor-templates
|
|
6
|
+
*/
|
|
7
|
+
import { Command } from 'commander';
|
|
8
|
+
export declare const initCommand: Command;
|
|
9
|
+
//# sourceMappingURL=init.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAoCpC,eAAO,MAAM,WAAW,SAsPpB,CAAC"}
|
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `crawlee-cloud init` command
|
|
3
|
+
*
|
|
4
|
+
* Scaffolds new Actor projects using official Apify templates.
|
|
5
|
+
* Templates are fetched from: https://github.com/apify/actor-templates
|
|
6
|
+
*/
|
|
7
|
+
import { Command } from 'commander';
|
|
8
|
+
import chalk from 'chalk';
|
|
9
|
+
import ora from 'ora';
|
|
10
|
+
import inquirer from 'inquirer';
|
|
11
|
+
import path from 'path';
|
|
12
|
+
import fs from 'fs-extra';
|
|
13
|
+
import AdmZip from 'adm-zip';
|
|
14
|
+
const MANIFEST_URL = 'https://raw.githubusercontent.com/apify/actor-templates/master/templates/manifest.json';
|
|
15
|
+
export const initCommand = new Command('init')
|
|
16
|
+
.description('Create a new Actor project from template (uses official Apify templates)')
|
|
17
|
+
.argument('[name]', 'Name of the Actor project')
|
|
18
|
+
.option('-t, --template <template>', 'Template ID (e.g., ts-crawlee-cheerio)')
|
|
19
|
+
.option('-l, --list', 'List available templates')
|
|
20
|
+
.action(async (nameArg, options) => {
|
|
21
|
+
console.log(chalk.bold('\nš Create a new Actor project\n'));
|
|
22
|
+
// Fetch templates manifest
|
|
23
|
+
const fetchSpinner = ora('Fetching available templates...').start();
|
|
24
|
+
let manifest;
|
|
25
|
+
try {
|
|
26
|
+
const response = await fetch(MANIFEST_URL);
|
|
27
|
+
if (!response.ok) {
|
|
28
|
+
throw new Error(`Failed to fetch templates: ${String(response.status)}`);
|
|
29
|
+
}
|
|
30
|
+
manifest = (await response.json());
|
|
31
|
+
fetchSpinner.succeed(`Found ${String(manifest.templates.length)} templates`);
|
|
32
|
+
}
|
|
33
|
+
catch (err) {
|
|
34
|
+
fetchSpinner.fail('Failed to fetch templates');
|
|
35
|
+
console.error(err);
|
|
36
|
+
process.exit(1);
|
|
37
|
+
}
|
|
38
|
+
// List mode
|
|
39
|
+
if (options.list === true) {
|
|
40
|
+
console.log(chalk.dim('\nAvailable templates:\n'));
|
|
41
|
+
const categories = [...new Set(manifest.templates.map((t) => t.category))];
|
|
42
|
+
for (const category of categories) {
|
|
43
|
+
console.log(chalk.bold.cyan(` ${category.toUpperCase()}`));
|
|
44
|
+
const categoryTemplates = manifest.templates.filter((t) => t.category === category);
|
|
45
|
+
for (const t of categoryTemplates) {
|
|
46
|
+
console.log(chalk.white(` ${t.id}`));
|
|
47
|
+
const desc = t.description ? t.description.slice(0, 60) : '';
|
|
48
|
+
console.log(chalk.dim(` ${t.label} - ${desc}...`));
|
|
49
|
+
}
|
|
50
|
+
console.log();
|
|
51
|
+
}
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
// Get project name
|
|
55
|
+
let projectName = nameArg ?? '';
|
|
56
|
+
if (!projectName) {
|
|
57
|
+
const answer = await inquirer.prompt([
|
|
58
|
+
{
|
|
59
|
+
type: 'input',
|
|
60
|
+
name: 'name',
|
|
61
|
+
message: 'Actor name:',
|
|
62
|
+
default: 'my-actor',
|
|
63
|
+
validate: (input) => {
|
|
64
|
+
if (!/^[a-z0-9-]+$/.test(input)) {
|
|
65
|
+
return 'Name must contain only lowercase letters, numbers, and hyphens';
|
|
66
|
+
}
|
|
67
|
+
return true;
|
|
68
|
+
},
|
|
69
|
+
},
|
|
70
|
+
]);
|
|
71
|
+
projectName = answer.name;
|
|
72
|
+
}
|
|
73
|
+
// Check if directory exists
|
|
74
|
+
const targetDir = path.resolve(process.cwd(), projectName);
|
|
75
|
+
if (await fs.pathExists(targetDir)) {
|
|
76
|
+
console.log(chalk.red(`ā Directory "${projectName}" already exists`));
|
|
77
|
+
process.exit(1);
|
|
78
|
+
}
|
|
79
|
+
// Get template
|
|
80
|
+
let template;
|
|
81
|
+
if (options.template) {
|
|
82
|
+
template = manifest.templates.find((t) => t.id === options.template);
|
|
83
|
+
if (!template) {
|
|
84
|
+
console.log(chalk.red(`ā Template "${options.template}" not found`));
|
|
85
|
+
console.log(chalk.dim('Run `crc init --list` to see available templates'));
|
|
86
|
+
process.exit(1);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
// Group templates by category for selection
|
|
91
|
+
const choices = manifest.templates
|
|
92
|
+
.filter((t) => t.category === 'javascript' || t.category === 'typescript' || t.category === 'python')
|
|
93
|
+
.map((t) => ({
|
|
94
|
+
name: `${t.label} ${chalk.dim(`(${t.id})`)}`,
|
|
95
|
+
value: t.id,
|
|
96
|
+
short: t.id,
|
|
97
|
+
}));
|
|
98
|
+
const answer = await inquirer.prompt([
|
|
99
|
+
{
|
|
100
|
+
type: 'list',
|
|
101
|
+
name: 'templateId',
|
|
102
|
+
message: 'Select a template:',
|
|
103
|
+
choices: [
|
|
104
|
+
new inquirer.Separator(chalk.bold('āāā TypeScript āāā')),
|
|
105
|
+
...choices.filter((c) => c.value.startsWith('ts-')),
|
|
106
|
+
new inquirer.Separator(chalk.bold('āāā JavaScript āāā')),
|
|
107
|
+
...choices.filter((c) => c.value.startsWith('js-')),
|
|
108
|
+
new inquirer.Separator(chalk.bold('āāā Python āāā')),
|
|
109
|
+
...choices.filter((c) => c.value.startsWith('python-')),
|
|
110
|
+
],
|
|
111
|
+
pageSize: 15,
|
|
112
|
+
},
|
|
113
|
+
]);
|
|
114
|
+
template = manifest.templates.find((t) => t.id === answer.templateId);
|
|
115
|
+
}
|
|
116
|
+
if (!template) {
|
|
117
|
+
console.log(chalk.red('ā No template selected'));
|
|
118
|
+
process.exit(1);
|
|
119
|
+
}
|
|
120
|
+
console.log(chalk.dim(`\nTemplate: ${template.label}`));
|
|
121
|
+
console.log(chalk.dim(`Category: ${template.category}`));
|
|
122
|
+
console.log();
|
|
123
|
+
// Download and extract template
|
|
124
|
+
const downloadSpinner = ora('Downloading template...').start();
|
|
125
|
+
try {
|
|
126
|
+
const response = await fetch(template.archiveUrl);
|
|
127
|
+
if (!response.ok) {
|
|
128
|
+
throw new Error(`Failed to download: ${String(response.status)}`);
|
|
129
|
+
}
|
|
130
|
+
const arrayBuffer = await response.arrayBuffer();
|
|
131
|
+
const buffer = Buffer.from(arrayBuffer);
|
|
132
|
+
downloadSpinner.text = 'Extracting template...';
|
|
133
|
+
const zip = new AdmZip(buffer);
|
|
134
|
+
// Create target directory
|
|
135
|
+
await fs.ensureDir(targetDir);
|
|
136
|
+
// Extract files
|
|
137
|
+
const entries = zip.getEntries();
|
|
138
|
+
// Detect if zip has a common top-level directory wrapper
|
|
139
|
+
const fileEntries = entries.filter((e) => !e.isDirectory);
|
|
140
|
+
const firstParts = fileEntries
|
|
141
|
+
.map((e) => e.entryName.split('/')[0])
|
|
142
|
+
.filter((p) => !!p);
|
|
143
|
+
const uniqueFirstParts = [...new Set(firstParts)];
|
|
144
|
+
// If all files share same first path component and it's not a dotfile/known folder, strip it
|
|
145
|
+
const firstPart = uniqueFirstParts[0];
|
|
146
|
+
const hasTopLevelWrapper = uniqueFirstParts.length === 1 &&
|
|
147
|
+
firstPart !== undefined &&
|
|
148
|
+
!firstPart.startsWith('.') &&
|
|
149
|
+
firstPart !== 'src' &&
|
|
150
|
+
!firstPart.includes('.');
|
|
151
|
+
for (const entry of entries) {
|
|
152
|
+
if (entry.isDirectory)
|
|
153
|
+
continue;
|
|
154
|
+
const entryPath = entry.entryName;
|
|
155
|
+
let relativePath = entryPath;
|
|
156
|
+
// Only strip top-level directory if there's a wrapper folder
|
|
157
|
+
if (hasTopLevelWrapper) {
|
|
158
|
+
const pathParts = entryPath.split('/');
|
|
159
|
+
relativePath = pathParts.slice(1).join('/');
|
|
160
|
+
}
|
|
161
|
+
if (!relativePath)
|
|
162
|
+
continue;
|
|
163
|
+
const targetPath = path.join(targetDir, relativePath);
|
|
164
|
+
await fs.ensureDir(path.dirname(targetPath));
|
|
165
|
+
await fs.writeFile(targetPath, entry.getData());
|
|
166
|
+
}
|
|
167
|
+
downloadSpinner.succeed('Template extracted');
|
|
168
|
+
}
|
|
169
|
+
catch (err) {
|
|
170
|
+
downloadSpinner.fail('Failed to download template');
|
|
171
|
+
console.error(err);
|
|
172
|
+
process.exit(1);
|
|
173
|
+
}
|
|
174
|
+
// Update actor.json with project name
|
|
175
|
+
const actorJsonPath = path.join(targetDir, '.actor', 'actor.json');
|
|
176
|
+
if (await fs.pathExists(actorJsonPath)) {
|
|
177
|
+
try {
|
|
178
|
+
const actorJson = (await fs.readJson(actorJsonPath));
|
|
179
|
+
actorJson.name = projectName;
|
|
180
|
+
actorJson.title = projectName
|
|
181
|
+
.split('-')
|
|
182
|
+
.map((w) => w.charAt(0).toUpperCase() + w.slice(1))
|
|
183
|
+
.join(' ');
|
|
184
|
+
await fs.writeJson(actorJsonPath, actorJson, { spaces: 4 });
|
|
185
|
+
}
|
|
186
|
+
catch {
|
|
187
|
+
// Ignore if actor.json update fails
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
// Install dependencies
|
|
191
|
+
const isPython = template.category === 'python';
|
|
192
|
+
const installSpinner = ora('Installing dependencies...').start();
|
|
193
|
+
try {
|
|
194
|
+
const { spawn } = await import('child_process');
|
|
195
|
+
// Cross-platform command detection
|
|
196
|
+
const isWindows = process.platform === 'win32';
|
|
197
|
+
const pythonCmd = isWindows ? 'python' : 'python3';
|
|
198
|
+
const npmCmd = isWindows ? 'npm.cmd' : 'npm';
|
|
199
|
+
await new Promise((resolve, reject) => {
|
|
200
|
+
const cmd = isPython ? pythonCmd : npmCmd;
|
|
201
|
+
const args = isPython ? ['-m', 'pip', 'install', '-r', 'requirements.txt'] : ['install'];
|
|
202
|
+
const child = spawn(cmd, args, {
|
|
203
|
+
cwd: targetDir,
|
|
204
|
+
stdio: 'pipe',
|
|
205
|
+
shell: true,
|
|
206
|
+
});
|
|
207
|
+
child.on('exit', (code) => {
|
|
208
|
+
if (code === 0)
|
|
209
|
+
resolve();
|
|
210
|
+
else
|
|
211
|
+
reject(new Error(`Install failed with code ${String(code)}`));
|
|
212
|
+
});
|
|
213
|
+
child.on('error', reject);
|
|
214
|
+
});
|
|
215
|
+
installSpinner.succeed('Dependencies installed');
|
|
216
|
+
}
|
|
217
|
+
catch {
|
|
218
|
+
installSpinner.warn('Could not install dependencies (run manually)');
|
|
219
|
+
}
|
|
220
|
+
// Success message
|
|
221
|
+
console.log(chalk.green(`\nā
Actor "${projectName}" created successfully!\n`));
|
|
222
|
+
console.log(chalk.bold('Next steps:'));
|
|
223
|
+
console.log(chalk.cyan(` cd ${projectName}`));
|
|
224
|
+
console.log(chalk.cyan(' crc run # Run locally'));
|
|
225
|
+
console.log(chalk.cyan(' crc push # Push to Crawlee Cloud'));
|
|
226
|
+
console.log();
|
|
227
|
+
console.log(chalk.dim('Template from: github.com/apify/actor-templates'));
|
|
228
|
+
console.log();
|
|
229
|
+
});
|
|
230
|
+
//# sourceMappingURL=init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logs.d.ts","sourceRoot":"","sources":["../../src/commands/logs.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"logs.d.ts","sourceRoot":"","sources":["../../src/commands/logs.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA+BpC,eAAO,MAAM,WAAW,SAiHpB,CAAC"}
|
package/dist/commands/logs.js
CHANGED
|
@@ -10,6 +10,7 @@ export const logsCommand = new Command('logs')
|
|
|
10
10
|
.description('View logs for a run')
|
|
11
11
|
.argument('<run-id>', 'Run ID')
|
|
12
12
|
.option('-f, --follow', 'Follow logs in real-time', false)
|
|
13
|
+
.option('-l, --limit <lines>', 'Number of log lines to show', '1000')
|
|
13
14
|
.action(async (runId, options) => {
|
|
14
15
|
console.log(chalk.bold(`\nš Logs for run: ${runId}\n`));
|
|
15
16
|
const config = await getConfig();
|
|
@@ -20,53 +21,75 @@ export const logsCommand = new Command('logs')
|
|
|
20
21
|
try {
|
|
21
22
|
// Get run info
|
|
22
23
|
const runResponse = await fetch(`${config.apiBaseUrl}/v2/actor-runs/${runId}`, {
|
|
23
|
-
headers: {
|
|
24
|
+
headers: { Authorization: `Bearer ${config.token}` },
|
|
24
25
|
});
|
|
25
26
|
if (!runResponse.ok) {
|
|
26
27
|
console.log(chalk.red(`ā Run not found: ${runId}`));
|
|
27
28
|
process.exit(1);
|
|
28
29
|
}
|
|
29
|
-
const
|
|
30
|
-
|
|
31
|
-
console.log(chalk.dim(`
|
|
32
|
-
console.log(chalk.dim(`
|
|
33
|
-
|
|
34
|
-
|
|
30
|
+
const runResult = (await runResponse.json());
|
|
31
|
+
const run = runResult.data;
|
|
32
|
+
console.log(chalk.dim(`Actor: ${run.actId}`));
|
|
33
|
+
console.log(chalk.dim(`Status: ${formatStatus(run.status)}`));
|
|
34
|
+
console.log(chalk.dim(`Started: ${new Date(run.startedAt).toLocaleString()}`));
|
|
35
|
+
if (run.finishedAt) {
|
|
36
|
+
console.log(chalk.dim(`Finished: ${new Date(run.finishedAt).toLocaleString()}`));
|
|
35
37
|
}
|
|
36
38
|
console.log(chalk.dim('ā'.repeat(60)));
|
|
37
39
|
console.log();
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
40
|
+
// Fetch logs from API
|
|
41
|
+
const fetchLogs = async (offset = 0) => {
|
|
42
|
+
const logsResponse = await fetch(`${config.apiBaseUrl}/v2/actor-runs/${runId}/logs?limit=${options.limit}&offset=${String(offset)}`, { headers: { Authorization: `Bearer ${config.token}` } });
|
|
43
|
+
if (!logsResponse.ok) {
|
|
44
|
+
return [];
|
|
45
|
+
}
|
|
46
|
+
const logsResult = (await logsResponse.json());
|
|
47
|
+
return logsResult.data.items;
|
|
48
|
+
};
|
|
49
|
+
// Print logs
|
|
50
|
+
const printLog = (entry) => {
|
|
51
|
+
const time = new Date(entry.timestamp).toLocaleTimeString();
|
|
52
|
+
const level = formatLevel(entry.level);
|
|
53
|
+
console.log(`${chalk.dim(time)} ${level} ${entry.message}`);
|
|
54
|
+
};
|
|
55
|
+
const logs = await fetchLogs();
|
|
56
|
+
if (logs.length === 0) {
|
|
57
|
+
console.log(chalk.dim('No logs available yet.'));
|
|
58
|
+
// Check if run failed without logs - show helpful message
|
|
59
|
+
if (run.status === 'FAILED') {
|
|
60
|
+
console.log();
|
|
61
|
+
console.log(chalk.yellow('š” Run failed but no logs were captured.'));
|
|
62
|
+
console.log(chalk.dim(' Check runner container logs with:'));
|
|
63
|
+
console.log(chalk.dim(' docker compose logs runner'));
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
logs.forEach(printLog);
|
|
68
|
+
}
|
|
69
|
+
// Follow mode
|
|
70
|
+
if (options.follow && (run.status === 'RUNNING' || run.status === 'READY')) {
|
|
71
|
+
console.log(chalk.dim('\nFollowing logs... (Ctrl+C to stop)\n'));
|
|
72
|
+
let lastCount = logs.length;
|
|
73
|
+
let isRunning = true;
|
|
74
|
+
while (isRunning) {
|
|
42
75
|
await sleep(2000);
|
|
76
|
+
// Check run status
|
|
43
77
|
const statusResponse = await fetch(`${config.apiBaseUrl}/v2/actor-runs/${runId}`, {
|
|
44
|
-
headers: {
|
|
78
|
+
headers: { Authorization: `Bearer ${config.token}` },
|
|
45
79
|
});
|
|
46
|
-
const statusResult = await statusResponse.json();
|
|
80
|
+
const statusResult = (await statusResponse.json());
|
|
81
|
+
// Fetch new logs
|
|
82
|
+
const newLogs = await fetchLogs(lastCount);
|
|
83
|
+
newLogs.forEach(printLog);
|
|
84
|
+
lastCount += newLogs.length;
|
|
47
85
|
if (statusResult.data.status !== 'RUNNING' && statusResult.data.status !== 'READY') {
|
|
48
|
-
console.log(chalk.dim(`\nRun finished with status: ${statusResult.data.status}`));
|
|
49
|
-
|
|
86
|
+
console.log(chalk.dim(`\nRun finished with status: ${formatStatus(statusResult.data.status)}`));
|
|
87
|
+
isRunning = false;
|
|
50
88
|
}
|
|
51
89
|
}
|
|
52
90
|
}
|
|
53
|
-
else {
|
|
54
|
-
|
|
55
|
-
// In production, would fetch actual container logs
|
|
56
|
-
console.log(chalk.dim('(Real-time logs not yet implemented - checking run status)'));
|
|
57
|
-
console.log();
|
|
58
|
-
if (run.data.status === 'SUCCEEDED') {
|
|
59
|
-
console.log(chalk.green('Run completed successfully'));
|
|
60
|
-
}
|
|
61
|
-
else if (run.data.status === 'FAILED') {
|
|
62
|
-
console.log(chalk.red('Run failed'));
|
|
63
|
-
}
|
|
64
|
-
else if (run.data.status === 'RUNNING') {
|
|
65
|
-
console.log(chalk.yellow('Run is still in progress'));
|
|
66
|
-
}
|
|
67
|
-
else {
|
|
68
|
-
console.log(chalk.dim(`Status: ${run.data.status}`));
|
|
69
|
-
}
|
|
91
|
+
else if (run.status === 'RUNNING') {
|
|
92
|
+
console.log(chalk.dim('\nRun is still in progress. Use -f to follow logs.'));
|
|
70
93
|
}
|
|
71
94
|
console.log();
|
|
72
95
|
}
|
|
@@ -75,7 +98,36 @@ export const logsCommand = new Command('logs')
|
|
|
75
98
|
process.exit(1);
|
|
76
99
|
}
|
|
77
100
|
});
|
|
101
|
+
function formatLevel(level) {
|
|
102
|
+
switch (level.toUpperCase()) {
|
|
103
|
+
case 'ERROR':
|
|
104
|
+
return chalk.red('ERR');
|
|
105
|
+
case 'WARN':
|
|
106
|
+
case 'WARNING':
|
|
107
|
+
return chalk.yellow('WRN');
|
|
108
|
+
case 'INFO':
|
|
109
|
+
return chalk.blue('INF');
|
|
110
|
+
case 'DEBUG':
|
|
111
|
+
return chalk.dim('DBG');
|
|
112
|
+
default:
|
|
113
|
+
return chalk.dim(level.slice(0, 3).toUpperCase());
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
function formatStatus(status) {
|
|
117
|
+
switch (status) {
|
|
118
|
+
case 'SUCCEEDED':
|
|
119
|
+
return chalk.green('ā SUCCEEDED');
|
|
120
|
+
case 'FAILED':
|
|
121
|
+
return chalk.red('ā FAILED');
|
|
122
|
+
case 'RUNNING':
|
|
123
|
+
return chalk.cyan('ā³ RUNNING');
|
|
124
|
+
case 'READY':
|
|
125
|
+
return chalk.dim('READY');
|
|
126
|
+
default:
|
|
127
|
+
return status;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
78
130
|
function sleep(ms) {
|
|
79
|
-
return new Promise(resolve => setTimeout(resolve, ms));
|
|
131
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
80
132
|
}
|
|
81
133
|
//# sourceMappingURL=logs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logs.js","sourceRoot":"","sources":["../../src/commands/logs.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"logs.js","sourceRoot":"","sources":["../../src/commands/logs.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAkDpC,eAAO,MAAM,aAAa,SA4GtB,CAAC"}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `crawlee-cloud status` command
|
|
3
|
+
*
|
|
4
|
+
* Check the status of a run.
|
|
5
|
+
*/
|
|
6
|
+
import { Command } from 'commander';
|
|
7
|
+
import chalk from 'chalk';
|
|
8
|
+
import ora from 'ora';
|
|
9
|
+
import { getConfig } from '../utils/config.js';
|
|
10
|
+
function formatDuration(ms) {
|
|
11
|
+
if (ms < 1000)
|
|
12
|
+
return `${String(ms)}ms`;
|
|
13
|
+
if (ms < 60000)
|
|
14
|
+
return `${(ms / 1000).toFixed(1)}s`;
|
|
15
|
+
const mins = Math.floor(ms / 60000);
|
|
16
|
+
const secs = Math.floor((ms % 60000) / 1000);
|
|
17
|
+
return `${String(mins)}m ${String(secs)}s`;
|
|
18
|
+
}
|
|
19
|
+
function formatStatus(status) {
|
|
20
|
+
const statusMap = {
|
|
21
|
+
READY: chalk.dim('READY'),
|
|
22
|
+
RUNNING: chalk.cyan('ā³ RUNNING'),
|
|
23
|
+
SUCCEEDED: chalk.green('ā SUCCEEDED'),
|
|
24
|
+
FAILED: chalk.red('ā FAILED'),
|
|
25
|
+
ABORTING: chalk.yellow('āø ABORTING'),
|
|
26
|
+
ABORTED: chalk.gray('ā¹ ABORTED'),
|
|
27
|
+
'TIMING-OUT': chalk.yellow('ā° TIMING-OUT'),
|
|
28
|
+
'TIMED-OUT': chalk.red('ā° TIMED-OUT'),
|
|
29
|
+
};
|
|
30
|
+
return statusMap[status] ?? status;
|
|
31
|
+
}
|
|
32
|
+
export const statusCommand = new Command('status')
|
|
33
|
+
.description('Check the status of a run')
|
|
34
|
+
.argument('<run-id>', 'Run ID to check')
|
|
35
|
+
.option('-w, --watch', 'Watch for updates')
|
|
36
|
+
.option('-i, --interval <seconds>', 'Watch interval in seconds', '5')
|
|
37
|
+
.action(async (runId, options) => {
|
|
38
|
+
const config = await getConfig();
|
|
39
|
+
const fetchStatus = async () => {
|
|
40
|
+
try {
|
|
41
|
+
const response = await fetch(`${config.apiBaseUrl}/v2/actor-runs/${runId}`, {
|
|
42
|
+
headers: {
|
|
43
|
+
Authorization: `Bearer ${config.token}`,
|
|
44
|
+
},
|
|
45
|
+
});
|
|
46
|
+
if (!response.ok) {
|
|
47
|
+
if (response.status === 404) {
|
|
48
|
+
console.log(chalk.red(`ā Run "${runId}" not found`));
|
|
49
|
+
return null;
|
|
50
|
+
}
|
|
51
|
+
throw new Error(`API error: ${String(response.status)}`);
|
|
52
|
+
}
|
|
53
|
+
const json = (await response.json());
|
|
54
|
+
return json.data;
|
|
55
|
+
}
|
|
56
|
+
catch (err) {
|
|
57
|
+
console.log(chalk.red('ā Failed to fetch run status'));
|
|
58
|
+
console.error(err);
|
|
59
|
+
return null;
|
|
60
|
+
}
|
|
61
|
+
};
|
|
62
|
+
const displayStatus = (run) => {
|
|
63
|
+
console.clear();
|
|
64
|
+
console.log(chalk.bold('\nš Run Status\n'));
|
|
65
|
+
console.log(chalk.dim('Run ID: '), run.id);
|
|
66
|
+
console.log(chalk.dim('Actor: '), run.actId);
|
|
67
|
+
console.log(chalk.dim('Status: '), formatStatus(run.status));
|
|
68
|
+
console.log(chalk.dim('Started: '), new Date(run.startedAt).toLocaleString());
|
|
69
|
+
if (run.finishedAt) {
|
|
70
|
+
console.log(chalk.dim('Finished: '), new Date(run.finishedAt).toLocaleString());
|
|
71
|
+
}
|
|
72
|
+
if (run.stats?.durationMillis) {
|
|
73
|
+
console.log(chalk.dim('Duration: '), formatDuration(run.stats.durationMillis));
|
|
74
|
+
}
|
|
75
|
+
if (run.stats && (run.stats.requestsTotal ?? run.stats.requestsFinished)) {
|
|
76
|
+
console.log();
|
|
77
|
+
console.log(chalk.bold('Requests:'));
|
|
78
|
+
console.log(chalk.dim(' Total: '), String(run.stats.requestsTotal ?? 0));
|
|
79
|
+
console.log(chalk.dim(' Finished: '), chalk.green(String(run.stats.requestsFinished ?? 0)));
|
|
80
|
+
console.log(chalk.dim(' Failed: '), chalk.red(String(run.stats.requestsFailed ?? 0)));
|
|
81
|
+
}
|
|
82
|
+
if (run.options) {
|
|
83
|
+
console.log();
|
|
84
|
+
console.log(chalk.bold('Resources:'));
|
|
85
|
+
if (run.options.memoryMbytes) {
|
|
86
|
+
console.log(chalk.dim(' Memory: '), `${String(run.options.memoryMbytes)} MB`);
|
|
87
|
+
}
|
|
88
|
+
if (run.options.timeoutSecs) {
|
|
89
|
+
console.log(chalk.dim(' Timeout: '), `${String(run.options.timeoutSecs)}s`);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
console.log();
|
|
93
|
+
};
|
|
94
|
+
if (options.watch === true) {
|
|
95
|
+
const intervalSecs = options.interval ?? '5';
|
|
96
|
+
const intervalMs = parseInt(intervalSecs, 10) * 1000;
|
|
97
|
+
console.log(chalk.dim(`Watching run status (every ${intervalSecs}s, Ctrl+C to exit)...\n`));
|
|
98
|
+
const check = async () => {
|
|
99
|
+
const run = await fetchStatus();
|
|
100
|
+
if (!run) {
|
|
101
|
+
process.exit(1);
|
|
102
|
+
}
|
|
103
|
+
displayStatus(run);
|
|
104
|
+
// Stop watching if run is finished
|
|
105
|
+
if (['SUCCEEDED', 'FAILED', 'ABORTED', 'TIMED-OUT'].includes(run.status)) {
|
|
106
|
+
console.log(chalk.dim('Run finished. Stopping watch.'));
|
|
107
|
+
process.exit(run.status === 'SUCCEEDED' ? 0 : 1);
|
|
108
|
+
}
|
|
109
|
+
};
|
|
110
|
+
await check();
|
|
111
|
+
setInterval(() => void check(), intervalMs);
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
const spinner = ora('Fetching run status...').start();
|
|
115
|
+
const run = await fetchStatus();
|
|
116
|
+
spinner.stop();
|
|
117
|
+
if (!run) {
|
|
118
|
+
process.exit(1);
|
|
119
|
+
}
|
|
120
|
+
displayStatus(run);
|
|
121
|
+
}
|
|
122
|
+
});
|
|
123
|
+
//# sourceMappingURL=status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -2,14 +2,14 @@
|
|
|
2
2
|
* Crawlee Cloud CLI
|
|
3
3
|
*
|
|
4
4
|
* Commands:
|
|
5
|
+
* init Create new Actor from template
|
|
5
6
|
* run Run Actor locally
|
|
7
|
+
* dev Run Actor with hot reload
|
|
6
8
|
* push Push Actor to platform
|
|
7
9
|
* call <actor> Call a remote Actor
|
|
8
10
|
* logs <run-id> View run logs
|
|
11
|
+
* status <run-id> Check run status
|
|
9
12
|
* login Authenticate with platform
|
|
10
|
-
*
|
|
11
|
-
* Note: To create a new Actor, use `apify create` (official Apify CLI)
|
|
12
|
-
* for 100% compatibility with both Apify Cloud and Crawlee Cloud.
|
|
13
13
|
*/
|
|
14
14
|
import { Command } from 'commander';
|
|
15
15
|
export declare const program: Command;
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUpC,eAAO,MAAM,OAAO,SAAgB,CAAC;AAiBrC,OAAO,EAAE,OAAO,IAAI,GAAG,EAAE,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -2,31 +2,38 @@
|
|
|
2
2
|
* Crawlee Cloud CLI
|
|
3
3
|
*
|
|
4
4
|
* Commands:
|
|
5
|
+
* init Create new Actor from template
|
|
5
6
|
* run Run Actor locally
|
|
7
|
+
* dev Run Actor with hot reload
|
|
6
8
|
* push Push Actor to platform
|
|
7
9
|
* call <actor> Call a remote Actor
|
|
8
10
|
* logs <run-id> View run logs
|
|
11
|
+
* status <run-id> Check run status
|
|
9
12
|
* login Authenticate with platform
|
|
10
|
-
*
|
|
11
|
-
* Note: To create a new Actor, use `apify create` (official Apify CLI)
|
|
12
|
-
* for 100% compatibility with both Apify Cloud and Crawlee Cloud.
|
|
13
13
|
*/
|
|
14
14
|
import { Command } from 'commander';
|
|
15
|
+
import { initCommand } from './commands/init.js';
|
|
15
16
|
import { runCommand } from './commands/run.js';
|
|
17
|
+
import { devCommand } from './commands/dev.js';
|
|
16
18
|
import { pushCommand } from './commands/push.js';
|
|
17
19
|
import { callCommand } from './commands/call.js';
|
|
18
20
|
import { logsCommand } from './commands/logs.js';
|
|
21
|
+
import { statusCommand } from './commands/status.js';
|
|
19
22
|
import { loginCommand } from './commands/login.js';
|
|
20
23
|
export const program = new Command();
|
|
21
24
|
program
|
|
22
25
|
.name('crawlee-cloud')
|
|
23
|
-
.description('CLI for Crawlee Cloud - run and deploy Actors
|
|
24
|
-
.version('0.
|
|
26
|
+
.description('CLI for Crawlee Cloud - create, run, and deploy Actors')
|
|
27
|
+
.version('0.2.0');
|
|
25
28
|
// Register commands
|
|
29
|
+
program.addCommand(initCommand);
|
|
26
30
|
program.addCommand(runCommand);
|
|
31
|
+
program.addCommand(devCommand);
|
|
27
32
|
program.addCommand(pushCommand);
|
|
28
33
|
program.addCommand(callCommand);
|
|
29
34
|
program.addCommand(logsCommand);
|
|
35
|
+
program.addCommand(statusCommand);
|
|
30
36
|
program.addCommand(loginCommand);
|
|
31
37
|
export { program as cli };
|
|
38
|
+
// v0.2.1 trigger
|
|
32
39
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,MAAM,CAAC,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAErC,OAAO;KACJ,IAAI,CAAC,eAAe,CAAC;KACrB,WAAW,CAAC,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,MAAM,CAAC,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAErC,OAAO;KACJ,IAAI,CAAC,eAAe,CAAC;KACrB,WAAW,CAAC,wDAAwD,CAAC;KACrE,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,oBAAoB;AACpB,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;AAC/B,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;AAC/B,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AAEjC,OAAO,EAAE,OAAO,IAAI,GAAG,EAAE,CAAC;AAE1B,iBAAiB"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@crawlee-cloud/cli",
|
|
3
|
-
"version": "0.1
|
|
3
|
+
"version": "0.2.1",
|
|
4
4
|
"description": "CLI for Crawlee Cloud - run and deploy Actors",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -23,14 +23,18 @@
|
|
|
23
23
|
],
|
|
24
24
|
"license": "MIT",
|
|
25
25
|
"dependencies": {
|
|
26
|
-
"
|
|
26
|
+
"adm-zip": "^0.5.16",
|
|
27
27
|
"chalk": "^5.3.0",
|
|
28
|
-
"
|
|
29
|
-
"
|
|
28
|
+
"chokidar": "^5.0.0",
|
|
29
|
+
"commander": "^12.1.0",
|
|
30
|
+
"dotenv": "^16.4.7",
|
|
30
31
|
"fs-extra": "^11.2.0",
|
|
31
|
-
"
|
|
32
|
+
"inquirer": "^12.1.0",
|
|
33
|
+
"ora": "^8.1.1",
|
|
34
|
+
"table": "^6.9.0"
|
|
32
35
|
},
|
|
33
36
|
"devDependencies": {
|
|
37
|
+
"@types/adm-zip": "^0.5.7",
|
|
34
38
|
"@types/fs-extra": "^11.0.4",
|
|
35
39
|
"@types/node": "^20.10.0",
|
|
36
40
|
"tsx": "^4.7.0",
|