@crawlee-cloud/cli 0.2.1 ā 0.8.5
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/README.md +51 -7
- package/dist/bin.js +0 -0
- package/dist/commands/call.d.ts.map +1 -1
- package/dist/commands/call.js +24 -8
- package/dist/commands/call.js.map +1 -1
- package/dist/commands/info.d.ts +14 -0
- package/dist/commands/info.d.ts.map +1 -0
- package/dist/commands/info.js +98 -0
- package/dist/commands/info.js.map +1 -0
- package/dist/commands/list.d.ts +8 -0
- package/dist/commands/list.d.ts.map +1 -0
- package/dist/commands/list.js +141 -0
- package/dist/commands/list.js.map +1 -0
- package/dist/commands/login.d.ts.map +1 -1
- package/dist/commands/login.js +8 -6
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/profile.d.ts +17 -0
- package/dist/commands/profile.d.ts.map +1 -0
- package/dist/commands/profile.js +70 -0
- package/dist/commands/profile.js.map +1 -0
- package/dist/commands/push.d.ts +8 -0
- package/dist/commands/push.d.ts.map +1 -1
- package/dist/commands/push.js +272 -46
- package/dist/commands/push.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -1
- package/dist/utils/config.d.ts +59 -6
- package/dist/utils/config.d.ts.map +1 -1
- package/dist/utils/config.js +134 -21
- package/dist/utils/config.js.map +1 -1
- package/package.json +5 -3
- package/dist/commands/create.d.ts +0 -9
- package/dist/commands/create.d.ts.map +0 -1
- package/dist/commands/create.js +0 -70
- package/dist/commands/create.js.map +0 -1
package/README.md
CHANGED
|
@@ -26,11 +26,17 @@ crc <command> [options]
|
|
|
26
26
|
|
|
27
27
|
### Commands
|
|
28
28
|
|
|
29
|
-
- `login` - Login to your Crawlee Cloud account
|
|
29
|
+
- `login` - Login to your Crawlee Cloud account (supports `--profile` for multi-environment setups)
|
|
30
|
+
- `info` - Show the active profile, API URL, server status, and authenticated user
|
|
31
|
+
- `profile` - Manage saved login profiles (`list`, `use`, `rm`)
|
|
32
|
+
- `init` - Scaffold a new Actor project from an Apify template
|
|
30
33
|
- `push` - Deploy an Actor to the cloud
|
|
31
|
-
- `run` -
|
|
32
|
-
- `call` - Run an Actor
|
|
34
|
+
- `run` - Run an Actor locally
|
|
35
|
+
- `call` - Run an Actor on the platform (with optional `--wait`)
|
|
36
|
+
- `list` - List actors and runs
|
|
33
37
|
- `logs` - Stream logs from a running Actor
|
|
38
|
+
- `status` - Check the status of a run
|
|
39
|
+
- `dev` - Run an Actor locally with hot reload
|
|
34
40
|
|
|
35
41
|
## Example
|
|
36
42
|
|
|
@@ -56,12 +62,50 @@ crc login --url https://your-server.com
|
|
|
56
62
|
|
|
57
63
|
You'll be prompted for your API token. Credentials are stored in `~/.crawlee-cloud/config.json`.
|
|
58
64
|
|
|
65
|
+
### Profiles (multi-environment)
|
|
66
|
+
|
|
67
|
+
Switch between local, staging, and production with named profiles. Each profile holds its own API URL + token.
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
# Save credentials under a named profile
|
|
71
|
+
crc login --profile local --url http://localhost:3000 --token <T>
|
|
72
|
+
crc login --profile staging --url https://crc.staging.com --token <T>
|
|
73
|
+
crc login --profile prod --url https://crc.prod.com --token <T>
|
|
74
|
+
|
|
75
|
+
# List all profiles (active marked with *)
|
|
76
|
+
crc profile list
|
|
77
|
+
|
|
78
|
+
# Switch the active profile
|
|
79
|
+
crc profile use staging
|
|
80
|
+
|
|
81
|
+
# Remove a profile
|
|
82
|
+
crc profile rm staging
|
|
83
|
+
|
|
84
|
+
# Check what's currently active and reachable
|
|
85
|
+
crc info
|
|
86
|
+
crc info --json # for scripts / CI healthchecks
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
For per-invocation overrides without changing the active profile, use the `CRAWLEE_CLOUD_PROFILE` env var:
|
|
90
|
+
|
|
91
|
+
```bash
|
|
92
|
+
CRAWLEE_CLOUD_PROFILE=prod crc push # one-off push to prod, no `profile use` needed
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
`crc info` exits non-zero if the server is unreachable or the token is invalid, which makes it suitable as a CI gate before `crc push`:
|
|
96
|
+
|
|
97
|
+
```bash
|
|
98
|
+
crc info --json >/dev/null && crc push
|
|
99
|
+
```
|
|
100
|
+
|
|
59
101
|
### Environment Variables
|
|
60
102
|
|
|
61
|
-
| Variable
|
|
62
|
-
|
|
|
63
|
-
| `CRAWLEE_CLOUD_API_URL`
|
|
64
|
-
| `CRAWLEE_CLOUD_TOKEN`
|
|
103
|
+
| Variable | Description |
|
|
104
|
+
| ---------------------------- | --------------------------------------------------------------- |
|
|
105
|
+
| `CRAWLEE_CLOUD_API_URL` | Override the active profile's API base URL |
|
|
106
|
+
| `CRAWLEE_CLOUD_TOKEN` | Override the active profile's API token |
|
|
107
|
+
| `CRAWLEE_CLOUD_PROFILE` | Override the active profile name for this invocation |
|
|
108
|
+
| `CRAWLEE_CLOUD_REGISTRY_URL` | Docker registry URL used by `crc push` for image push, optional |
|
|
65
109
|
|
|
66
110
|
## Documentation
|
|
67
111
|
|
package/dist/bin.js
CHANGED
|
File without changes
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"call.d.ts","sourceRoot":"","sources":["../../src/commands/call.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"call.d.ts","sourceRoot":"","sources":["../../src/commands/call.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAkBpC,eAAO,MAAM,WAAW,SA2HpB,CAAC"}
|
package/dist/commands/call.js
CHANGED
|
@@ -8,14 +8,27 @@ import chalk from 'chalk';
|
|
|
8
8
|
import ora from 'ora';
|
|
9
9
|
import fs from 'fs-extra';
|
|
10
10
|
import { getConfig } from '../utils/config.js';
|
|
11
|
+
/**
|
|
12
|
+
* Collector for -e KEY=VALUE options (can be used multiple times)
|
|
13
|
+
*/
|
|
14
|
+
function collectEnvVars(value, previous) {
|
|
15
|
+
const [key, ...valueParts] = value.split('=');
|
|
16
|
+
if (!key || valueParts.length === 0) {
|
|
17
|
+
console.error(chalk.red(`Invalid env var format: ${value}. Use KEY=VALUE`));
|
|
18
|
+
process.exit(1);
|
|
19
|
+
}
|
|
20
|
+
return { ...previous, [key]: valueParts.join('=') };
|
|
21
|
+
}
|
|
11
22
|
export const callCommand = new Command('call')
|
|
12
23
|
.description('Call a remote Actor')
|
|
13
24
|
.argument('<actor>', 'Actor name or ID')
|
|
14
25
|
.option('-i, --input <json>', 'Input JSON or path to JSON file')
|
|
26
|
+
.option('-e, --env <KEY=VALUE>', 'Environment variable (can be used multiple times)', collectEnvVars, {})
|
|
15
27
|
.option('-w, --wait', 'Wait for run to finish', false)
|
|
16
28
|
.option('-t, --timeout <seconds>', 'Timeout in seconds', '3600')
|
|
17
29
|
.option('-m, --memory <mb>', 'Memory in MB', '1024')
|
|
18
|
-
.action(async (actor,
|
|
30
|
+
.action(async (actor, cmdOptions) => {
|
|
31
|
+
const options = cmdOptions;
|
|
19
32
|
console.log(chalk.bold(`\nš Calling Actor: ${actor}\n`));
|
|
20
33
|
const config = await getConfig();
|
|
21
34
|
if (!config.token) {
|
|
@@ -36,6 +49,8 @@ export const callCommand = new Command('call')
|
|
|
36
49
|
process.exit(1);
|
|
37
50
|
}
|
|
38
51
|
}
|
|
52
|
+
// Get env vars from -e flags
|
|
53
|
+
const envVars = Object.keys(options.env).length > 0 ? options.env : undefined;
|
|
39
54
|
const spinner = ora('Starting Actor run...').start();
|
|
40
55
|
try {
|
|
41
56
|
// Start the run
|
|
@@ -43,19 +58,20 @@ export const callCommand = new Command('call')
|
|
|
43
58
|
method: 'POST',
|
|
44
59
|
headers: {
|
|
45
60
|
'Content-Type': 'application/json',
|
|
46
|
-
|
|
61
|
+
Authorization: `Bearer ${config.token}`,
|
|
47
62
|
},
|
|
48
63
|
body: JSON.stringify({
|
|
49
64
|
input: inputData,
|
|
50
65
|
timeout: parseInt(options.timeout, 10),
|
|
51
66
|
memory: parseInt(options.memory, 10),
|
|
67
|
+
envVars,
|
|
52
68
|
}),
|
|
53
69
|
});
|
|
54
70
|
if (!response.ok) {
|
|
55
|
-
const errorData = await response.json().catch(() => ({}));
|
|
71
|
+
const errorData = (await response.json().catch(() => ({})));
|
|
56
72
|
throw new Error(errorData.error?.message || `API error: ${response.status}`);
|
|
57
73
|
}
|
|
58
|
-
const result = await response.json();
|
|
74
|
+
const result = (await response.json());
|
|
59
75
|
const runId = result.data.id;
|
|
60
76
|
spinner.succeed(`Run started: ${runId}`);
|
|
61
77
|
if (options.wait) {
|
|
@@ -65,9 +81,9 @@ export const callCommand = new Command('call')
|
|
|
65
81
|
while (status === 'RUNNING' || status === 'READY') {
|
|
66
82
|
await sleep(2000);
|
|
67
83
|
const statusResponse = await fetch(`${config.apiBaseUrl}/v2/actor-runs/${runId}`, {
|
|
68
|
-
headers: {
|
|
84
|
+
headers: { Authorization: `Bearer ${config.token}` },
|
|
69
85
|
});
|
|
70
|
-
const statusResult = await statusResponse.json();
|
|
86
|
+
const statusResult = (await statusResponse.json());
|
|
71
87
|
status = statusResult.data.status;
|
|
72
88
|
process.stdout.write('.');
|
|
73
89
|
}
|
|
@@ -75,7 +91,7 @@ export const callCommand = new Command('call')
|
|
|
75
91
|
if (status === 'SUCCEEDED') {
|
|
76
92
|
console.log(chalk.green(`\nā
Run completed successfully\n`));
|
|
77
93
|
// Fetch and display output
|
|
78
|
-
const outputResponse = await fetch(`${config.apiBaseUrl}/v2/actor-runs/${runId}/key-value-store/records/OUTPUT`, { headers: {
|
|
94
|
+
const outputResponse = await fetch(`${config.apiBaseUrl}/v2/actor-runs/${runId}/key-value-store/records/OUTPUT`, { headers: { Authorization: `Bearer ${config.token}` } });
|
|
79
95
|
if (outputResponse.ok) {
|
|
80
96
|
const output = await outputResponse.json();
|
|
81
97
|
console.log(chalk.dim('Output:'));
|
|
@@ -98,6 +114,6 @@ export const callCommand = new Command('call')
|
|
|
98
114
|
}
|
|
99
115
|
});
|
|
100
116
|
function sleep(ms) {
|
|
101
|
-
return new Promise(resolve => setTimeout(resolve, ms));
|
|
117
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
102
118
|
}
|
|
103
119
|
//# sourceMappingURL=call.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"call.js","sourceRoot":"","sources":["../../src/commands/call.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE/C,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC;KAC3C,WAAW,CAAC,qBAAqB,CAAC;KAClC,QAAQ,CAAC,SAAS,EAAE,kBAAkB,CAAC;KACvC,MAAM,CAAC,oBAAoB,EAAE,iCAAiC,CAAC;KAC/D,MAAM,CAAC,YAAY,EAAE,wBAAwB,EAAE,KAAK,CAAC;KACrD,MAAM,CAAC,yBAAyB,EAAE,oBAAoB,EAAE,MAAM,CAAC;KAC/D,MAAM,CAAC,mBAAmB,EAAE,cAAc,EAAE,MAAM,CAAC;KACnD,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"call.js","sourceRoot":"","sources":["../../src/commands/call.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `crawlee-cloud info` command.
|
|
3
|
+
*
|
|
4
|
+
* The "where am I?" command. Prints the active profile, the API URL, the
|
|
5
|
+
* authenticated user, and a quick reachability check on the server.
|
|
6
|
+
*
|
|
7
|
+
* Output is intentionally short ā operators run this when context-switching
|
|
8
|
+
* between environments and want a one-line "did that `profile use` actually
|
|
9
|
+
* change what I think it changed?" answer. We avoid pulling in heavy data
|
|
10
|
+
* (recent runs, build counts, etc.) so this command stays sub-100ms.
|
|
11
|
+
*/
|
|
12
|
+
import { Command } from 'commander';
|
|
13
|
+
export declare const infoCommand: Command;
|
|
14
|
+
//# sourceMappingURL=info.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"info.d.ts","sourceRoot":"","sources":["../../src/commands/info.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAiBpC,eAAO,MAAM,WAAW,SAyGpB,CAAC"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `crawlee-cloud info` command.
|
|
3
|
+
*
|
|
4
|
+
* The "where am I?" command. Prints the active profile, the API URL, the
|
|
5
|
+
* authenticated user, and a quick reachability check on the server.
|
|
6
|
+
*
|
|
7
|
+
* Output is intentionally short ā operators run this when context-switching
|
|
8
|
+
* between environments and want a one-line "did that `profile use` actually
|
|
9
|
+
* change what I think it changed?" answer. We avoid pulling in heavy data
|
|
10
|
+
* (recent runs, build counts, etc.) so this command stays sub-100ms.
|
|
11
|
+
*/
|
|
12
|
+
import { Command } from 'commander';
|
|
13
|
+
import chalk from 'chalk';
|
|
14
|
+
import { getConfig, getActiveProfileName } from '../utils/config.js';
|
|
15
|
+
export const infoCommand = new Command('info')
|
|
16
|
+
.description('Show the active profile, API URL, user, and server status')
|
|
17
|
+
.option('-j, --json', 'Output as JSON (for piping into scripts)')
|
|
18
|
+
.action(async (options) => {
|
|
19
|
+
const profile = await getActiveProfileName();
|
|
20
|
+
const config = await getConfig();
|
|
21
|
+
// Two parallel HEAD-ish calls so a slow server doesn't make us wait
|
|
22
|
+
// for both serially. /health is unauthenticated; /v2/auth/me is
|
|
23
|
+
// authenticated and tells us who the token belongs to.
|
|
24
|
+
const start = Date.now();
|
|
25
|
+
const [healthRes, meRes] = await Promise.allSettled([
|
|
26
|
+
fetch(`${config.apiBaseUrl}/health`),
|
|
27
|
+
config.token
|
|
28
|
+
? fetch(`${config.apiBaseUrl}/v2/auth/me`, {
|
|
29
|
+
headers: { Authorization: `Bearer ${config.token}` },
|
|
30
|
+
})
|
|
31
|
+
: Promise.reject(new Error('no token')),
|
|
32
|
+
]);
|
|
33
|
+
const latencyMs = Date.now() - start;
|
|
34
|
+
let serverVersion;
|
|
35
|
+
let serverReachable = false;
|
|
36
|
+
if (healthRes.status === 'fulfilled' && healthRes.value.ok) {
|
|
37
|
+
serverReachable = true;
|
|
38
|
+
const health = (await healthRes.value.json());
|
|
39
|
+
serverVersion = health.version;
|
|
40
|
+
}
|
|
41
|
+
let user = null;
|
|
42
|
+
let authValid = false;
|
|
43
|
+
if (meRes.status === 'fulfilled' && meRes.value.ok) {
|
|
44
|
+
authValid = true;
|
|
45
|
+
const body = (await meRes.value.json());
|
|
46
|
+
user = { email: body.data.email, role: body.data.role };
|
|
47
|
+
}
|
|
48
|
+
const tokenPreview = config.token ? `${config.token.slice(0, 12)}...` : '(not set)';
|
|
49
|
+
if (options.json) {
|
|
50
|
+
// Stable, scriptable shape. We omit the full token ā the preview is
|
|
51
|
+
// enough for "is this the right token?" checks without leaking it
|
|
52
|
+
// into shell history / log files.
|
|
53
|
+
console.log(JSON.stringify({
|
|
54
|
+
profile,
|
|
55
|
+
apiBaseUrl: config.apiBaseUrl,
|
|
56
|
+
tokenPreview,
|
|
57
|
+
serverReachable,
|
|
58
|
+
serverVersion,
|
|
59
|
+
authValid,
|
|
60
|
+
user,
|
|
61
|
+
latencyMs,
|
|
62
|
+
}, null, 2));
|
|
63
|
+
// Both output formats share the same exit-code contract ā an
|
|
64
|
+
// unreachable server or invalid token must exit non-zero so
|
|
65
|
+
// `crc info --json >/dev/null && crc push` works as a CI gate.
|
|
66
|
+
// Doing the check here (instead of `return`-ing early) keeps
|
|
67
|
+
// human + JSON in lockstep.
|
|
68
|
+
if (!serverReachable || !authValid)
|
|
69
|
+
process.exit(1);
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
// Human-readable output. The label column is right-padded to a fixed
|
|
73
|
+
// width so values line up ā operators scan this fast, alignment helps.
|
|
74
|
+
const PAD = 11;
|
|
75
|
+
const row = (k, v) => ` ${chalk.dim(k.padEnd(PAD))} ${v}`;
|
|
76
|
+
console.log();
|
|
77
|
+
console.log(row('Profile:', chalk.green(profile) + chalk.dim(' (active)')));
|
|
78
|
+
console.log(row('API:', config.apiBaseUrl));
|
|
79
|
+
console.log(row('Server:', serverReachable
|
|
80
|
+
? chalk.green(`v${serverVersion ?? 'unknown'}`) + chalk.dim(` reachable, ${latencyMs}ms`)
|
|
81
|
+
: chalk.red('unreachable')));
|
|
82
|
+
console.log(row('Auth:', authValid
|
|
83
|
+
? chalk.green('valid')
|
|
84
|
+
: config.token
|
|
85
|
+
? chalk.red('invalid token')
|
|
86
|
+
: chalk.yellow('no token (run `crc login`)')));
|
|
87
|
+
if (user) {
|
|
88
|
+
console.log(row('User:', user.email + (user.role ? chalk.dim(` (${user.role})`) : '')));
|
|
89
|
+
}
|
|
90
|
+
console.log(row('Token:', chalk.dim(tokenPreview)));
|
|
91
|
+
console.log();
|
|
92
|
+
// Exit non-zero if anything is wrong ā useful in CI healthchecks
|
|
93
|
+
// (`crc info >/dev/null && do-other-stuff`).
|
|
94
|
+
if (!serverReachable || !authValid) {
|
|
95
|
+
process.exit(1);
|
|
96
|
+
}
|
|
97
|
+
});
|
|
98
|
+
//# sourceMappingURL=info.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"info.js","sourceRoot":"","sources":["../../src/commands/info.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAmDpC,eAAO,MAAM,WAAW,SA+HpB,CAAC"}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `crawlee-cloud list` command
|
|
3
|
+
*
|
|
4
|
+
* List actors and runs on the platform.
|
|
5
|
+
*/
|
|
6
|
+
import { Command } from 'commander';
|
|
7
|
+
import chalk from 'chalk';
|
|
8
|
+
import { getConfig } from '../utils/config.js';
|
|
9
|
+
function timeAgo(dateStr) {
|
|
10
|
+
const diff = Date.now() - new Date(dateStr).getTime();
|
|
11
|
+
const mins = Math.floor(diff / 60000);
|
|
12
|
+
if (mins < 1)
|
|
13
|
+
return 'just now';
|
|
14
|
+
if (mins < 60)
|
|
15
|
+
return `${String(mins)}m ago`;
|
|
16
|
+
const hours = Math.floor(mins / 60);
|
|
17
|
+
if (hours < 24)
|
|
18
|
+
return `${String(hours)}h ago`;
|
|
19
|
+
const days = Math.floor(hours / 24);
|
|
20
|
+
return `${String(days)}d ago`;
|
|
21
|
+
}
|
|
22
|
+
function statusColor(status) {
|
|
23
|
+
switch (status) {
|
|
24
|
+
case 'SUCCEEDED':
|
|
25
|
+
return chalk.green(status);
|
|
26
|
+
case 'FAILED':
|
|
27
|
+
return chalk.red(status);
|
|
28
|
+
case 'RUNNING':
|
|
29
|
+
return chalk.yellow(status);
|
|
30
|
+
case 'READY':
|
|
31
|
+
return chalk.cyan(status);
|
|
32
|
+
case 'TIMED-OUT':
|
|
33
|
+
return chalk.red(status);
|
|
34
|
+
case 'ABORTED':
|
|
35
|
+
return chalk.gray(status);
|
|
36
|
+
default:
|
|
37
|
+
return status;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
export const listCommand = new Command('list')
|
|
41
|
+
.alias('ls')
|
|
42
|
+
.description('List actors and recent runs')
|
|
43
|
+
.option('-a, --actors', 'List actors only')
|
|
44
|
+
.option('-r, --runs', 'List recent runs only')
|
|
45
|
+
.option('-n, --limit <number>', 'Max items to show', '20')
|
|
46
|
+
.option('-j, --json', 'Output as JSON')
|
|
47
|
+
.action(async (options) => {
|
|
48
|
+
const config = await getConfig();
|
|
49
|
+
const showActors = options.actors || (!options.actors && !options.runs);
|
|
50
|
+
const showRuns = options.runs || (!options.actors && !options.runs);
|
|
51
|
+
const limit = parseInt(options.limit, 10);
|
|
52
|
+
try {
|
|
53
|
+
if (showActors) {
|
|
54
|
+
const res = await fetch(`${config.apiBaseUrl}/v2/acts?limit=${String(limit)}`, {
|
|
55
|
+
headers: { Authorization: `Bearer ${config.token}` },
|
|
56
|
+
});
|
|
57
|
+
if (!res.ok) {
|
|
58
|
+
const err = await res.json().catch(() => ({}));
|
|
59
|
+
throw new Error(err.error?.message || `HTTP ${String(res.status)}`);
|
|
60
|
+
}
|
|
61
|
+
const data = (await res.json());
|
|
62
|
+
// Fetch recent runs to show last run per actor
|
|
63
|
+
const runsRes = await fetch(`${config.apiBaseUrl}/v2/actor-runs?limit=200`, {
|
|
64
|
+
headers: { Authorization: `Bearer ${config.token}` },
|
|
65
|
+
});
|
|
66
|
+
const runsData = runsRes.ok
|
|
67
|
+
? (await runsRes.json())
|
|
68
|
+
: { data: { items: [] } };
|
|
69
|
+
// Build map: actorId ā most recent run
|
|
70
|
+
const lastRunMap = new Map();
|
|
71
|
+
for (const run of runsData.data.items) {
|
|
72
|
+
if (!lastRunMap.has(run.actId)) {
|
|
73
|
+
lastRunMap.set(run.actId, run);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
if (options.json) {
|
|
77
|
+
console.log(JSON.stringify(data.data.items, null, 2));
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
console.log(chalk.bold(`\nActors (${String(data.data.total)})\n`));
|
|
81
|
+
if (data.data.items.length === 0) {
|
|
82
|
+
console.log(chalk.dim(' No actors found. Push one with: crawlee-cloud push'));
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
console.log(chalk.dim(` ${'NAME'.padEnd(35)} ${'DEPLOYED'.padEnd(12)} ${'LAST RUN'.padEnd(20)} ID`));
|
|
86
|
+
for (const actor of data.data.items) {
|
|
87
|
+
const deployed = timeAgo(actor.modifiedAt);
|
|
88
|
+
const lastRun = lastRunMap.get(actor.id);
|
|
89
|
+
const lastRunStr = lastRun
|
|
90
|
+
? `${statusColor(lastRun.status)} ${timeAgo(lastRun.finishedAt || lastRun.createdAt)}`
|
|
91
|
+
: chalk.dim('never');
|
|
92
|
+
console.log(` ${actor.name.padEnd(35)} ${deployed.padEnd(12)} ${lastRunStr.padEnd(29)} ${chalk.dim(actor.id)}`);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
console.log();
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
if (showRuns) {
|
|
99
|
+
const res = await fetch(`${config.apiBaseUrl}/v2/actor-runs?limit=${String(limit)}`, {
|
|
100
|
+
headers: { Authorization: `Bearer ${config.token}` },
|
|
101
|
+
});
|
|
102
|
+
if (!res.ok) {
|
|
103
|
+
const err = await res.json().catch(() => ({}));
|
|
104
|
+
throw new Error(err.error?.message || `HTTP ${String(res.status)}`);
|
|
105
|
+
}
|
|
106
|
+
const data = (await res.json());
|
|
107
|
+
// Fetch actor names for display
|
|
108
|
+
const actorRes = await fetch(`${config.apiBaseUrl}/v2/acts?limit=200`, {
|
|
109
|
+
headers: { Authorization: `Bearer ${config.token}` },
|
|
110
|
+
});
|
|
111
|
+
const actorData = actorRes.ok
|
|
112
|
+
? (await actorRes.json())
|
|
113
|
+
: { data: { items: [] } };
|
|
114
|
+
const actorMap = new Map(actorData.data.items.map((a) => [a.id, a.name]));
|
|
115
|
+
if (options.json) {
|
|
116
|
+
console.log(JSON.stringify(data.data.items, null, 2));
|
|
117
|
+
}
|
|
118
|
+
else {
|
|
119
|
+
console.log(chalk.bold(`\nRuns (${String(data.data.total)} total, showing ${String(data.data.items.length)})\n`));
|
|
120
|
+
if (data.data.items.length === 0) {
|
|
121
|
+
console.log(chalk.dim(' No runs found. Start one with: crawlee-cloud call <actor>'));
|
|
122
|
+
}
|
|
123
|
+
else {
|
|
124
|
+
console.log(chalk.dim(` ${'STATUS'.padEnd(12)} ${'ACTOR'.padEnd(30)} ${'WHEN'.padEnd(12)} ID`));
|
|
125
|
+
for (const run of data.data.items) {
|
|
126
|
+
const actorName = actorMap.get(run.actId) || run.actId;
|
|
127
|
+
const when = timeAgo(run.finishedAt || run.startedAt || run.createdAt);
|
|
128
|
+
console.log(` ${statusColor(run.status).padEnd(21)} ${actorName.padEnd(30)} ${when.padEnd(12)} ${chalk.dim(run.id)}`);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
console.log();
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
catch (err) {
|
|
136
|
+
console.error(chalk.red(`\nError: ${err.message}`));
|
|
137
|
+
console.log(chalk.dim(`\nMake sure you're logged in: crawlee-cloud login`));
|
|
138
|
+
process.exit(1);
|
|
139
|
+
}
|
|
140
|
+
});
|
|
141
|
+
//# sourceMappingURL=list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAsBpC,eAAO,MAAM,YAAY,SAkFrB,CAAC"}
|
package/dist/commands/login.js
CHANGED
|
@@ -11,6 +11,7 @@ export const loginCommand = new Command('login')
|
|
|
11
11
|
.description('Authenticate with Crawlee Cloud')
|
|
12
12
|
.option('-t, --token <token>', 'API token')
|
|
13
13
|
.option('-u, --url <url>', 'API base URL')
|
|
14
|
+
.option('-p, --profile <name>', 'Profile name to save under. Use to manage multiple environments (e.g. local / prod).')
|
|
14
15
|
.action(async (options) => {
|
|
15
16
|
console.log(chalk.bold('\nš Login to Crawlee Cloud\n'));
|
|
16
17
|
const existingConfig = await getConfig();
|
|
@@ -50,12 +51,13 @@ export const loginCommand = new Command('login')
|
|
|
50
51
|
const userData = (await authResponse.json());
|
|
51
52
|
console.log(chalk.green(`ā
Connected to Crawlee Cloud v${health.version ?? '1.0.0'}`));
|
|
52
53
|
console.log(chalk.dim(` Authenticated as: ${userData.data.email}`));
|
|
53
|
-
// Save config only after successful validation
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
});
|
|
58
|
-
|
|
54
|
+
// Save config only after successful validation. When --profile is
|
|
55
|
+
// passed, save into that named profile AND make it active so the
|
|
56
|
+
// user can immediately run subsequent commands against it without
|
|
57
|
+
// an extra `profile use` step.
|
|
58
|
+
await saveConfig({ apiBaseUrl, token }, { profile: options.profile, setActive: true });
|
|
59
|
+
const profileName = options.profile ?? 'default';
|
|
60
|
+
console.log(chalk.dim(`\nSaved to profile "${profileName}" in ~/.crawlee-cloud/config.json`));
|
|
59
61
|
console.log(chalk.green('\nā
Login successful!\n'));
|
|
60
62
|
}
|
|
61
63
|
catch (err) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `crawlee-cloud profile` command.
|
|
3
|
+
*
|
|
4
|
+
* Switch / list / remove named profiles. A profile is a stored API URL +
|
|
5
|
+
* token pair; one is active at a time. See utils/config.ts for the
|
|
6
|
+
* persisted shape and resolution rules.
|
|
7
|
+
*
|
|
8
|
+
* Subcommands:
|
|
9
|
+
* crc profile list # show all profiles, mark active
|
|
10
|
+
* crc profile use <name> # switch active profile
|
|
11
|
+
* crc profile rm <name> # delete a profile
|
|
12
|
+
*
|
|
13
|
+
* Use `crc login --profile <name>` to create a new profile.
|
|
14
|
+
*/
|
|
15
|
+
import { Command } from 'commander';
|
|
16
|
+
export declare const profileCommand: Command;
|
|
17
|
+
//# sourceMappingURL=profile.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profile.d.ts","sourceRoot":"","sources":["../../src/commands/profile.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,eAAO,MAAM,cAAc,SAKxB,CAAC"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `crawlee-cloud profile` command.
|
|
3
|
+
*
|
|
4
|
+
* Switch / list / remove named profiles. A profile is a stored API URL +
|
|
5
|
+
* token pair; one is active at a time. See utils/config.ts for the
|
|
6
|
+
* persisted shape and resolution rules.
|
|
7
|
+
*
|
|
8
|
+
* Subcommands:
|
|
9
|
+
* crc profile list # show all profiles, mark active
|
|
10
|
+
* crc profile use <name> # switch active profile
|
|
11
|
+
* crc profile rm <name> # delete a profile
|
|
12
|
+
*
|
|
13
|
+
* Use `crc login --profile <name>` to create a new profile.
|
|
14
|
+
*/
|
|
15
|
+
import { Command } from 'commander';
|
|
16
|
+
import chalk from 'chalk';
|
|
17
|
+
import { listProfiles, useProfile, removeProfile } from '../utils/config.js';
|
|
18
|
+
export const profileCommand = new Command('profile')
|
|
19
|
+
.description('Manage saved login profiles (multiple environments / accounts)')
|
|
20
|
+
.addHelpText('after', '\nCreate a profile with `crc login --profile <name>`. Use `crc info` to see the active profile.');
|
|
21
|
+
profileCommand
|
|
22
|
+
.command('list')
|
|
23
|
+
.alias('ls')
|
|
24
|
+
.description('List all profiles. The active one is marked.')
|
|
25
|
+
.action(async () => {
|
|
26
|
+
const profiles = await listProfiles();
|
|
27
|
+
if (profiles.length === 0) {
|
|
28
|
+
console.log(chalk.dim('No profiles configured. Run `crc login` to create one.'));
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
// Two-column-ish layout: marker + name + url + token preview.
|
|
32
|
+
// We don't pull in `table` here because the formatting is so simple
|
|
33
|
+
// it'd be overkill for a four-column print.
|
|
34
|
+
const namePad = Math.max(...profiles.map((p) => p.name.length), 7);
|
|
35
|
+
for (const p of profiles) {
|
|
36
|
+
const marker = p.active ? chalk.green('* ') : ' ';
|
|
37
|
+
const name = (p.active ? chalk.green : chalk.white)(p.name.padEnd(namePad));
|
|
38
|
+
console.log(`${marker}${name} ${chalk.dim(p.apiBaseUrl)} ${chalk.dim(p.tokenPreview)}`);
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
profileCommand
|
|
42
|
+
.command('use')
|
|
43
|
+
.description('Set the active profile')
|
|
44
|
+
.argument('<name>', 'Profile name to switch to')
|
|
45
|
+
.action(async (name) => {
|
|
46
|
+
try {
|
|
47
|
+
await useProfile(name);
|
|
48
|
+
console.log(chalk.green(`ā
Active profile is now "${name}"`));
|
|
49
|
+
}
|
|
50
|
+
catch (err) {
|
|
51
|
+
console.error(chalk.red(`ā ${err.message}`));
|
|
52
|
+
process.exit(1);
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
profileCommand
|
|
56
|
+
.command('rm')
|
|
57
|
+
.alias('remove')
|
|
58
|
+
.description('Remove a saved profile')
|
|
59
|
+
.argument('<name>', 'Profile name to remove')
|
|
60
|
+
.action(async (name) => {
|
|
61
|
+
try {
|
|
62
|
+
await removeProfile(name);
|
|
63
|
+
console.log(chalk.green(`ā
Removed profile "${name}"`));
|
|
64
|
+
}
|
|
65
|
+
catch (err) {
|
|
66
|
+
console.error(chalk.red(`ā ${err.message}`));
|
|
67
|
+
process.exit(1);
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
//# sourceMappingURL=profile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profile.js","sourceRoot":"","sources":["../../src/commands/profile.ts"],"names":[],"mappings":"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"}
|