@fold-run/cli 0.1.3 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/dist/commands/completions.d.ts +1 -0
  2. package/dist/commands/completions.js +195 -0
  3. package/dist/commands/completions.js.map +1 -0
  4. package/dist/commands/config.d.ts +4 -0
  5. package/dist/commands/config.js +75 -0
  6. package/dist/commands/config.js.map +1 -0
  7. package/dist/commands/deploy.d.ts +1 -0
  8. package/dist/commands/deploy.js +35 -2
  9. package/dist/commands/deploy.js.map +1 -1
  10. package/dist/commands/dev.d.ts +1 -0
  11. package/dist/commands/dev.js +41 -21
  12. package/dist/commands/dev.js.map +1 -1
  13. package/dist/commands/doctor.d.ts +1 -0
  14. package/dist/commands/doctor.js +138 -0
  15. package/dist/commands/doctor.js.map +1 -0
  16. package/dist/commands/domains.d.ts +11 -0
  17. package/dist/commands/domains.js +111 -0
  18. package/dist/commands/domains.js.map +1 -0
  19. package/dist/commands/init.d.ts +1 -0
  20. package/dist/commands/init.js +104 -6
  21. package/dist/commands/init.js.map +1 -1
  22. package/dist/commands/invoke.d.ts +9 -0
  23. package/dist/commands/invoke.js +89 -0
  24. package/dist/commands/invoke.js.map +1 -0
  25. package/dist/commands/link.d.ts +4 -0
  26. package/dist/commands/link.js +77 -0
  27. package/dist/commands/link.js.map +1 -0
  28. package/dist/commands/logs.js +31 -1
  29. package/dist/commands/logs.js.map +1 -1
  30. package/dist/commands/whoami.d.ts +1 -0
  31. package/dist/commands/whoami.js +39 -0
  32. package/dist/commands/whoami.js.map +1 -0
  33. package/dist/index.js +72 -29
  34. package/dist/index.js.map +1 -1
  35. package/dist/lib/api.d.ts +1 -0
  36. package/dist/lib/api.js +30 -0
  37. package/dist/lib/api.js.map +1 -1
  38. package/dist/lib/bundler.js +124 -18
  39. package/dist/lib/bundler.js.map +1 -1
  40. package/dist/lib/colorize.d.ts +5 -0
  41. package/dist/lib/colorize.js +28 -0
  42. package/dist/lib/colorize.js.map +1 -0
  43. package/dist/lib/prompt.d.ts +22 -0
  44. package/dist/lib/prompt.js +146 -0
  45. package/dist/lib/prompt.js.map +1 -1
  46. package/package.json +10 -11
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ export declare function domainsListCommand(opts: {
2
+ tenant?: string;
3
+ }): Promise<void>;
4
+ export declare function domainsAddCommand(hostname: string, opts: {
5
+ tenant?: string;
6
+ functionId?: string;
7
+ }): Promise<void>;
8
+ export declare function domainsRemoveCommand(domainId: string, opts: {
9
+ yes?: boolean;
10
+ }): Promise<void>;
11
+ export declare function domainsVerifyCommand(domainId: string): Promise<void>;
@@ -0,0 +1,111 @@
1
+ import { apiFetch } from '../lib/api.js';
2
+ import { requireConfig } from '../lib/config.js';
3
+ import { output } from '../lib/output.js';
4
+ import { confirm } from '../lib/prompt.js';
5
+ import { createSpinner } from '../lib/spinner.js';
6
+ export async function domainsListCommand(opts) {
7
+ const config = requireConfig();
8
+ const tenantId = opts.tenant ?? config.tenantId;
9
+ if (!tenantId) {
10
+ console.error('No tenant ID. Use --tenant or set one during `fold login`.');
11
+ process.exit(1);
12
+ }
13
+ const result = (await apiFetch(config, `/domains?tenant_id=${tenantId}`));
14
+ output(result.domains, () => {
15
+ if (!result.domains.length) {
16
+ console.log('No custom domains configured.');
17
+ return;
18
+ }
19
+ console.log(`Domains for ${tenantId}:\n`);
20
+ for (const d of result.domains) {
21
+ const statusIcon = d.verified ? '\x1b[32m✓\x1b[0m' : '\x1b[33m●\x1b[0m';
22
+ const target = d.function_name ? ` → ${d.function_name}` : '';
23
+ console.log(` ${statusIcon} ${d.hostname}${target}`);
24
+ console.log(` ID: ${d.id}`);
25
+ console.log(` Status: ${d.status}`);
26
+ console.log(` Verified: ${d.verified ? 'yes' : 'no'}`);
27
+ console.log('');
28
+ }
29
+ });
30
+ }
31
+ export async function domainsAddCommand(hostname, opts) {
32
+ const config = requireConfig();
33
+ const tenantId = opts.tenant ?? config.tenantId;
34
+ if (!tenantId) {
35
+ console.error('No tenant ID. Use --tenant or set one during `fold login`.');
36
+ process.exit(1);
37
+ }
38
+ const spinner = createSpinner(`Adding ${hostname}...`);
39
+ try {
40
+ const body = { tenant_id: tenantId, hostname };
41
+ if (opts.functionId)
42
+ body.function_id = opts.functionId;
43
+ const result = (await apiFetch(config, '/domains', { body }));
44
+ spinner.success(`Added ${hostname}`);
45
+ output(result, () => {
46
+ console.log(`\nDomain added: ${result.hostname}`);
47
+ console.log(` ID: ${result.id}`);
48
+ console.log(` Status: ${result.status}`);
49
+ if (!result.verified) {
50
+ console.log(`\nTo verify ownership, add this DNS record:\n`);
51
+ console.log(` Type: CNAME`);
52
+ console.log(` Name: ${hostname}`);
53
+ console.log(` Value: ${tenantId}.fold.run`);
54
+ if (result.txt_record) {
55
+ console.log(`\n Or TXT verification:`);
56
+ console.log(` Type: TXT`);
57
+ console.log(` Name: _fold-verify.${hostname}`);
58
+ console.log(` Value: ${result.txt_record}`);
59
+ }
60
+ console.log(`\nThen run: fold domains verify ${result.id}`);
61
+ }
62
+ });
63
+ }
64
+ catch (err) {
65
+ spinner.fail(`Failed to add domain: ${err}`);
66
+ process.exit(1);
67
+ }
68
+ }
69
+ export async function domainsRemoveCommand(domainId, opts) {
70
+ const config = requireConfig();
71
+ if (!opts.yes) {
72
+ const ok = await confirm(`Remove domain ${domainId}?`);
73
+ if (!ok) {
74
+ console.log('Aborted.');
75
+ return;
76
+ }
77
+ }
78
+ const spinner = createSpinner('Removing domain...');
79
+ try {
80
+ await apiFetch(config, `/domains/${domainId}`, { method: 'DELETE' });
81
+ spinner.success('Domain removed');
82
+ }
83
+ catch (err) {
84
+ spinner.fail(`Failed to remove domain: ${err}`);
85
+ process.exit(1);
86
+ }
87
+ }
88
+ export async function domainsVerifyCommand(domainId) {
89
+ const config = requireConfig();
90
+ const spinner = createSpinner('Checking DNS records...');
91
+ try {
92
+ const result = (await apiFetch(config, `/domains/${domainId}/verify`, {
93
+ method: 'POST',
94
+ }));
95
+ if (result.verified) {
96
+ spinner.success(`Domain verified: ${result.hostname}`);
97
+ }
98
+ else {
99
+ spinner.fail(`DNS not yet propagated for ${result.hostname}`);
100
+ console.log('\nMake sure you have the correct DNS records:');
101
+ console.log(` CNAME ${result.hostname} → *.fold.run`);
102
+ console.log('\nDNS propagation can take up to 24 hours. Try again later.');
103
+ }
104
+ output(result, () => { });
105
+ }
106
+ catch (err) {
107
+ spinner.fail(`Verification failed: ${err}`);
108
+ process.exit(1);
109
+ }
110
+ }
111
+ //# sourceMappingURL=domains.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"domains.js","sourceRoot":"","sources":["../../src/commands/domains.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
1
  export declare function initCommand(opts: {
2
2
  name?: string;
3
+ yes?: boolean;
3
4
  }): Promise<void>;
@@ -1,7 +1,56 @@
1
1
  import { execSync } from 'node:child_process';
2
2
  import { existsSync, mkdirSync, writeFileSync } from 'node:fs';
3
3
  import { join, resolve } from 'node:path';
4
- const FUNCTION_TEMPLATE = `import { defineHandler } from '@fold-run/runtime';
4
+ import { loadConfig } from '../lib/config.js';
5
+ import { ask, multiSelect, select } from '../lib/prompt.js';
6
+ // ── Templates per trigger type ────────────────────────────────────
7
+ const TEMPLATES = {
8
+ http: `import { defineHandler } from '@fold-run/runtime';
9
+
10
+ export default defineHandler(async (ctx) => {
11
+ const url = new URL(ctx.request.url);
12
+
13
+ if (url.pathname === '/') {
14
+ return ctx.json({ message: 'Hello from fold.run!' });
15
+ }
16
+
17
+ return ctx.json({ error: 'Not found' }, 404);
18
+ });
19
+ `,
20
+ cron: `import { defineHandler } from '@fold-run/runtime';
21
+
22
+ export default defineHandler(async (ctx) => {
23
+ // This function runs on a schedule (fold schedules create <id> "*/5 * * * *")
24
+ console.log('Scheduled run at', new Date().toISOString());
25
+
26
+ return ctx.json({ ok: true });
27
+ });
28
+ `,
29
+ webhook: `import { defineHandler } from '@fold-run/runtime';
30
+
31
+ export default defineHandler(async (ctx) => {
32
+ // Parse the incoming webhook payload
33
+ const payload = await ctx.request.json();
34
+ console.log('Webhook received:', JSON.stringify(payload));
35
+
36
+ // Process the webhook here...
37
+
38
+ return ctx.json({ received: true });
39
+ });
40
+ `,
41
+ queue: `import { defineHandler } from '@fold-run/runtime';
42
+
43
+ export default defineHandler(async (ctx) => {
44
+ // Process queue messages
45
+ const message = await ctx.request.json();
46
+ console.log('Queue message:', JSON.stringify(message));
47
+
48
+ return ctx.json({ processed: true });
49
+ });
50
+ `,
51
+ };
52
+ // Default template with KV demo
53
+ const DEFAULT_TEMPLATE = `import { defineHandler } from '@fold-run/runtime';
5
54
 
6
55
  export default defineHandler(async (ctx) => {
7
56
  const url = new URL(ctx.request.url);
@@ -65,7 +114,7 @@ function detectPackageManager(dir) {
65
114
  }
66
115
  export async function initCommand(opts) {
67
116
  const dir = resolve(opts.name ?? '.');
68
- const name = opts.name ?? dir.split('/').pop() ?? 'my-function';
117
+ let name = opts.name ?? dir.split('/').pop() ?? 'my-function';
69
118
  if (opts.name && !existsSync(dir)) {
70
119
  mkdirSync(dir, { recursive: true });
71
120
  }
@@ -77,9 +126,53 @@ export async function initCommand(opts) {
77
126
  console.error(`${functionPath} already exists. Aborting.`);
78
127
  process.exit(1);
79
128
  }
129
+ // Interactive mode: prompt for project settings
130
+ const interactive = !opts.yes && process.stdout.isTTY;
131
+ let trigger = 'http';
132
+ let bindings = [];
133
+ let tenantId;
134
+ if (interactive) {
135
+ console.log('\n\x1b[1mfold init\x1b[0m — Create a new fold.run project\n');
136
+ // Project name
137
+ name = await ask('Project name', name);
138
+ // Trigger type
139
+ trigger = await select('Trigger type:', [
140
+ { label: 'HTTP — respond to HTTP requests (default)', value: 'http' },
141
+ { label: 'Cron — run on a schedule', value: 'cron' },
142
+ { label: 'Webhook — process incoming webhooks', value: 'webhook' },
143
+ { label: 'Queue — consume queue messages', value: 'queue' },
144
+ ]);
145
+ // Bindings
146
+ bindings = await multiSelect('Bindings (platform resources to use):', [
147
+ { label: 'KV — key-value store', value: 'kv' },
148
+ { label: 'Storage — file/blob storage', value: 'storage' },
149
+ { label: 'DB — SQL database', value: 'db' },
150
+ { label: 'AI — inference models', value: 'ai' },
151
+ { label: 'Queue — message queue', value: 'queue' },
152
+ ]);
153
+ // Tenant ID
154
+ const config = loadConfig();
155
+ const defaultTenant = config?.tenantId;
156
+ const tenantAnswer = await ask('Tenant ID (optional)', defaultTenant);
157
+ if (tenantAnswer)
158
+ tenantId = tenantAnswer;
159
+ console.log('');
160
+ }
161
+ // Select template based on trigger
162
+ const template = TEMPLATES[trigger] ?? DEFAULT_TEMPLATE;
80
163
  // Write source files
81
- writeFileSync(functionPath, FUNCTION_TEMPLATE);
82
- writeFileSync(configPath, `${JSON.stringify({ name, entrypoint: 'function.ts', intent: { bindings: [] } }, null, 2)}\n`);
164
+ writeFileSync(functionPath, template);
165
+ const manifest = {
166
+ name,
167
+ entrypoint: 'function.ts',
168
+ intent: {
169
+ trigger,
170
+ bindings,
171
+ },
172
+ };
173
+ if (tenantId)
174
+ manifest.tenant_id = tenantId;
175
+ writeFileSync(configPath, `${JSON.stringify(manifest, null, 2)}\n`);
83
176
  // Scaffold package.json if none exists
84
177
  if (!existsSync(pkgPath)) {
85
178
  writeFileSync(pkgPath, `${JSON.stringify({
@@ -112,12 +205,17 @@ export async function initCommand(opts) {
112
205
  catch {
113
206
  console.warn(`\nCould not run '${installCmd}'. Run it manually to get type hints.`);
114
207
  }
115
- console.log(`\nInitialized ${name}:`);
208
+ console.log(`\nInitialized \x1b[1m${name}\x1b[0m:`);
116
209
  console.log(` ${functionPath}`);
117
210
  console.log(` ${configPath}`);
118
211
  console.log(` ${gitignorePath}`);
212
+ if (bindings.length > 0) {
213
+ console.log(` Bindings: ${bindings.join(', ')}`);
214
+ }
119
215
  console.log(`\nNext steps:`);
120
- console.log(` fold login`);
216
+ if (!tenantId) {
217
+ console.log(` fold login`);
218
+ }
121
219
  console.log(` fold dev # local dev server`);
122
220
  console.log(` fold deploy # deploy to fold.run`);
123
221
  }
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export declare function invokeCommand(functionName: string, opts: {
2
+ tenant?: string;
3
+ data?: string;
4
+ file?: string;
5
+ method?: string;
6
+ path?: string;
7
+ header?: string[];
8
+ stream?: boolean;
9
+ }): Promise<void>;
@@ -0,0 +1,89 @@
1
+ import { readFileSync } from 'node:fs';
2
+ import { apiFetch } from '../lib/api.js';
3
+ import { requireConfig } from '../lib/config.js';
4
+ import { output } from '../lib/output.js';
5
+ import { createSpinner } from '../lib/spinner.js';
6
+ export async function invokeCommand(functionName, opts) {
7
+ const config = requireConfig();
8
+ const tenantId = opts.tenant ?? config.tenantId;
9
+ if (!tenantId) {
10
+ console.error('No tenant ID. Use --tenant or set one during `fold login`.');
11
+ process.exit(1);
12
+ }
13
+ // Resolve request body
14
+ let body;
15
+ if (opts.file) {
16
+ try {
17
+ body = readFileSync(opts.file, 'utf-8');
18
+ }
19
+ catch {
20
+ console.error(`Could not read file: ${opts.file}`);
21
+ process.exit(1);
22
+ }
23
+ }
24
+ else if (opts.data) {
25
+ body = opts.data;
26
+ }
27
+ // Build custom headers
28
+ const headers = {};
29
+ if (opts.header) {
30
+ for (const h of opts.header) {
31
+ const sep = h.indexOf(':');
32
+ if (sep === -1) {
33
+ console.error(`Invalid header format: "${h}" (expected "Key: Value")`);
34
+ process.exit(1);
35
+ }
36
+ headers[h.slice(0, sep).trim()] = h.slice(sep + 1).trim();
37
+ }
38
+ }
39
+ const subpath = opts.path ? (opts.path.startsWith('/') ? opts.path : `/${opts.path}`) : '/';
40
+ const method = opts.method?.toUpperCase() ?? (body ? 'POST' : 'GET');
41
+ const spinner = createSpinner(`Invoking ${functionName}${subpath}...`);
42
+ try {
43
+ const result = (await apiFetch(config, '/invoke', {
44
+ body: {
45
+ tenant_id: tenantId,
46
+ function_name: functionName,
47
+ method,
48
+ path: subpath,
49
+ headers,
50
+ body,
51
+ },
52
+ timeout: 60_000,
53
+ }));
54
+ spinner.success(`${method} ${functionName}${subpath} → ${result.status}`);
55
+ // Stream mode: print body line by line
56
+ if (opts.stream && typeof result.body === 'string') {
57
+ output(result, () => {
58
+ process.stdout.write(result.body);
59
+ if (result.activation_id) {
60
+ console.log(`\n\x1b[90mactivation: ${result.activation_id}${result.duration_ms ? ` (${result.duration_ms}ms)` : ''}\x1b[0m`);
61
+ }
62
+ });
63
+ return;
64
+ }
65
+ output(result, () => {
66
+ // Print response body
67
+ if (typeof result.body === 'object' && result.body !== null) {
68
+ console.log(JSON.stringify(result.body, null, 2));
69
+ }
70
+ else if (result.body !== undefined && result.body !== null) {
71
+ console.log(String(result.body));
72
+ }
73
+ // Print metadata footer
74
+ if (result.activation_id || result.duration_ms) {
75
+ const parts = [];
76
+ if (result.activation_id)
77
+ parts.push(`activation: ${result.activation_id}`);
78
+ if (result.duration_ms)
79
+ parts.push(`${result.duration_ms}ms`);
80
+ console.log(`\x1b[90m${parts.join(' · ')}\x1b[0m`);
81
+ }
82
+ });
83
+ }
84
+ catch (err) {
85
+ spinner.fail(`Invoke failed: ${err}`);
86
+ process.exit(1);
87
+ }
88
+ }
89
+ //# sourceMappingURL=invoke.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invoke.js","sourceRoot":"","sources":["../../src/commands/invoke.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export declare function linkCommand(opts: {
2
+ tenant?: string;
3
+ yes?: boolean;
4
+ }): Promise<void>;
@@ -0,0 +1,77 @@
1
+ import { existsSync, writeFileSync } from 'node:fs';
2
+ import { resolve } from 'node:path';
3
+ import { apiFetch } from '../lib/api.js';
4
+ import { requireConfig } from '../lib/config.js';
5
+ import { confirm, select } from '../lib/prompt.js';
6
+ import { createSpinner } from '../lib/spinner.js';
7
+ export async function linkCommand(opts) {
8
+ const config = requireConfig();
9
+ const tenantId = opts.tenant ?? config.tenantId;
10
+ if (!tenantId) {
11
+ console.error('No tenant ID. Use --tenant or set one during `fold login`.');
12
+ process.exit(1);
13
+ }
14
+ const manifestPath = resolve('fold.json');
15
+ if (existsSync(manifestPath) && !opts.yes) {
16
+ const overwrite = await confirm('fold.json already exists. Overwrite?');
17
+ if (!overwrite) {
18
+ console.log('Aborted.');
19
+ return;
20
+ }
21
+ }
22
+ // Fetch deployed functions
23
+ const spinner = createSpinner('Fetching deployed functions...');
24
+ let functions;
25
+ try {
26
+ const result = (await apiFetch(config, `/functions?tenant_id=${tenantId}`));
27
+ functions = result.functions;
28
+ spinner.stop();
29
+ }
30
+ catch (err) {
31
+ spinner.fail(`Failed to fetch functions: ${err}`);
32
+ process.exit(1);
33
+ }
34
+ if (functions.length === 0) {
35
+ console.log('No functions deployed. Deploy one first with `fold deploy <file>`.');
36
+ return;
37
+ }
38
+ // Let user pick a function
39
+ const selected = await select('Select a function to link:', functions.map((fn) => ({
40
+ label: `${fn.name} (v${fn.version}) [${fn.status}]`,
41
+ value: fn.id,
42
+ })));
43
+ const fn = functions.find((f) => f.id === selected);
44
+ if (!fn) {
45
+ console.error('Function not found.');
46
+ process.exit(1);
47
+ }
48
+ // Detect entrypoint
49
+ const entrypoint = detectEntrypoint();
50
+ // Write fold.json
51
+ const manifest = {
52
+ name: fn.name,
53
+ tenant_id: tenantId,
54
+ intent: { bindings: [] },
55
+ };
56
+ if (entrypoint) {
57
+ manifest.entrypoint = entrypoint;
58
+ }
59
+ writeFileSync(manifestPath, `${JSON.stringify(manifest, null, 2)}\n`);
60
+ console.log(`\nLinked to \x1b[1m${fn.name}\x1b[0m (${fn.id})`);
61
+ console.log(` URL: ${fn.url}`);
62
+ console.log(` Version: ${fn.version}`);
63
+ if (entrypoint) {
64
+ console.log(` Entry: ${entrypoint}`);
65
+ }
66
+ console.log(`\nWrote fold.json. Run \`fold deploy\` to push changes.`);
67
+ }
68
+ /** Try to detect an entrypoint file in the current directory. */
69
+ function detectEntrypoint() {
70
+ const candidates = ['function.ts', 'index.ts', 'main.ts', 'handler.ts', 'function.js', 'index.js', 'main.js'];
71
+ for (const name of candidates) {
72
+ if (existsSync(resolve(name)))
73
+ return name;
74
+ }
75
+ return null;
76
+ }
77
+ //# sourceMappingURL=link.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"link.js","sourceRoot":"","sources":["../../src/commands/link.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import { apiFetch } from '../lib/api.js';
2
+ import { colorizeJson } from '../lib/colorize.js';
2
3
  import { requireConfig } from '../lib/config.js';
3
4
  import { isJsonMode } from '../lib/output.js';
4
5
  export async function logsCommand(opts) {
@@ -41,6 +42,18 @@ export async function logsCommand(opts) {
41
42
  }
42
43
  }
43
44
  }
45
+ /** Try to colorize a string as JSON. Returns the original string if not valid JSON. */
46
+ function tryColorizeJson(str) {
47
+ try {
48
+ // Re-format + colorize if it's valid JSON
49
+ const parsed = JSON.parse(str);
50
+ const formatted = JSON.stringify(parsed, null, 2);
51
+ return colorizeJson(formatted);
52
+ }
53
+ catch {
54
+ return str;
55
+ }
56
+ }
44
57
  function printActivations(activations, verbose) {
45
58
  for (const a of activations) {
46
59
  const time = new Date(a.triggered_at).toISOString();
@@ -64,11 +77,28 @@ function printActivations(activations, verbose) {
64
77
  // ignore malformed headers
65
78
  }
66
79
  }
80
+ if (a.response_body) {
81
+ const indented = tryColorizeJson(a.response_body)
82
+ .split('\n')
83
+ .map((l) => ` ${l}`)
84
+ .join('\n');
85
+ console.log(indented);
86
+ }
67
87
  if (a.logs) {
68
88
  try {
69
89
  const logEntries = JSON.parse(a.logs);
70
90
  for (const entry of logEntries) {
71
- console.log(` \x1b[90m${entry}\x1b[0m`);
91
+ // Colorize JSON log entries, leave plain text as gray
92
+ if (entry.trimStart().startsWith('{') || entry.trimStart().startsWith('[')) {
93
+ const indented = tryColorizeJson(entry)
94
+ .split('\n')
95
+ .map((l) => ` ${l}`)
96
+ .join('\n');
97
+ console.log(indented);
98
+ }
99
+ else {
100
+ console.log(` \x1b[90m${entry}\x1b[0m`);
101
+ }
72
102
  }
73
103
  }
74
104
  catch {
@@ -1 +1 @@
1
- {"version":3,"file":"logs.js","sourceRoot":"","sources":["../../src/commands/logs.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"logs.js","sourceRoot":"","sources":["../../src/commands/logs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare function whoamiCommand(): void;
@@ -0,0 +1,39 @@
1
+ import { loadConfig } from '../lib/config.js';
2
+ import { output } from '../lib/output.js';
3
+ export function whoamiCommand() {
4
+ const config = loadConfig();
5
+ if (!config) {
6
+ output({ logged_in: false }, () => {
7
+ console.log('Not logged in. Run `fold login` first.');
8
+ });
9
+ return;
10
+ }
11
+ const data = {
12
+ logged_in: true,
13
+ api_url: config.apiUrl,
14
+ };
15
+ if (config.tenantId)
16
+ data.tenant_id = config.tenantId;
17
+ try {
18
+ const payload = JSON.parse(Buffer.from(config.token.split('.')[1], 'base64url').toString());
19
+ if (payload.role)
20
+ data.role = payload.role;
21
+ if (payload.tenant_id)
22
+ data.jwt_tenant_id = payload.tenant_id;
23
+ }
24
+ catch {
25
+ // Not a JWT — that's fine
26
+ }
27
+ output(data, () => {
28
+ console.log(`API: ${data.api_url}`);
29
+ if (data.tenant_id)
30
+ console.log(`Tenant: ${data.tenant_id}`);
31
+ if (data.role)
32
+ console.log(`Role: ${data.role}`);
33
+ if (data.jwt_tenant_id)
34
+ console.log(`JWT tenant: ${data.jwt_tenant_id}`);
35
+ if (!data.role && !data.jwt_tenant_id)
36
+ console.log('Token: (not a JWT)');
37
+ });
38
+ }
39
+ //# sourceMappingURL=whoami.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"whoami.js","sourceRoot":"","sources":["../../src/commands/whoami.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAU1C,MAAM,UAAU,aAAa;IAC3B,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAE5B,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE;YAChC,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;QACxD,CAAC,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IAED,MAAM,IAAI,GAAe;QACvB,SAAS,EAAE,IAAI;QACf,OAAO,EAAE,MAAM,CAAC,MAAM;KACvB,CAAC;IACF,IAAI,MAAM,CAAC,QAAQ;QAAE,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC;IAEtD,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC5F,IAAI,OAAO,CAAC,IAAI;YAAE,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;QAC3C,IAAI,OAAO,CAAC,SAAS;YAAE,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,SAAS,CAAC;IAChE,CAAC;IAAC,MAAM,CAAC;QACP,0BAA0B;IAC5B,CAAC;IAED,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE;QAChB,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;QACvC,IAAI,IAAI,CAAC,SAAS;YAAE,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;QAC7D,IAAI,IAAI,CAAC,IAAI;YAAE,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QACnD,IAAI,IAAI,CAAC,aAAa;YAAE,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;QACzE,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,aAAa;YAAE,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;IAC3E,CAAC,CAAC,CAAC;AACL,CAAC"}