@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 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` - Start an Actor run
32
- - `call` - Run an Actor and wait for it to finish
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 | Description |
62
- | ----------------------- | --------------------- |
63
- | `CRAWLEE_CLOUD_API_URL` | Override API base URL |
64
- | `CRAWLEE_CLOUD_TOKEN` | Override API 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;AAMpC,eAAO,MAAM,WAAW,SAyGpB,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"}
@@ -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, options) => {
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
- 'Authorization': `Bearer ${config.token}`,
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: { 'Authorization': `Bearer ${config.token}` },
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: { 'Authorization': `Bearer ${config.token}` } });
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":"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"}
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,8 @@
1
+ /**
2
+ * `crawlee-cloud list` command
3
+ *
4
+ * List actors and runs on the platform.
5
+ */
6
+ import { Command } from 'commander';
7
+ export declare const listCommand: Command;
8
+ //# sourceMappingURL=list.d.ts.map
@@ -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;AAqBpC,eAAO,MAAM,YAAY,SA6ErB,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"}
@@ -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
- await saveConfig({
55
- apiBaseUrl,
56
- token,
57
- });
58
- console.log(chalk.dim('\nCredentials saved to ~/.crawlee-cloud/config.json'));
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":"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"}
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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"}