@rool-dev/cli 0.1.9 → 0.1.10-dev.930dc5c

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 (52) hide show
  1. package/README.md +42 -10
  2. package/dist/app.d.ts +3 -0
  3. package/dist/app.d.ts.map +1 -0
  4. package/dist/app.js +138 -0
  5. package/dist/app.js.map +1 -0
  6. package/dist/chat.d.ts +2 -1
  7. package/dist/chat.d.ts.map +1 -1
  8. package/dist/chat.js +42 -35
  9. package/dist/chat.js.map +1 -1
  10. package/dist/client.d.ts +5 -0
  11. package/dist/client.d.ts.map +1 -0
  12. package/dist/client.js +16 -0
  13. package/dist/client.js.map +1 -0
  14. package/dist/constants.d.ts +5 -0
  15. package/dist/constants.d.ts.map +1 -0
  16. package/dist/constants.js +8 -0
  17. package/dist/constants.js.map +1 -0
  18. package/dist/format.d.ts +1 -0
  19. package/dist/format.d.ts.map +1 -1
  20. package/dist/format.js +7 -0
  21. package/dist/format.js.map +1 -1
  22. package/dist/index.js +4 -52
  23. package/dist/index.js.map +1 -1
  24. package/dist/logout.d.ts +2 -1
  25. package/dist/logout.d.ts.map +1 -1
  26. package/dist/logout.js +22 -22
  27. package/dist/logout.js.map +1 -1
  28. package/dist/media.d.ts +2 -1
  29. package/dist/media.d.ts.map +1 -1
  30. package/dist/media.js +59 -98
  31. package/dist/media.js.map +1 -1
  32. package/dist/program.d.ts +3 -0
  33. package/dist/program.d.ts.map +1 -0
  34. package/dist/program.js +23 -0
  35. package/dist/program.js.map +1 -0
  36. package/dist/space.d.ts +2 -1
  37. package/dist/space.d.ts.map +1 -1
  38. package/dist/space.js +79 -98
  39. package/dist/space.js.map +1 -1
  40. package/dist/user.d.ts +2 -1
  41. package/dist/user.d.ts.map +1 -1
  42. package/dist/user.js +24 -25
  43. package/dist/user.js.map +1 -1
  44. package/package.json +5 -2
  45. package/dist/args.d.ts +0 -12
  46. package/dist/args.d.ts.map +0 -1
  47. package/dist/args.js +0 -49
  48. package/dist/args.js.map +0 -1
  49. package/dist/publish.d.ts +0 -2
  50. package/dist/publish.d.ts.map +0 -1
  51. package/dist/publish.js +0 -195
  52. package/dist/publish.js.map +0 -1
package/dist/media.js CHANGED
@@ -1,9 +1,9 @@
1
1
  import { execSync } from 'node:child_process';
2
2
  import * as fs from 'node:fs';
3
3
  import * as path from 'node:path';
4
- import { RoolClient } from '@rool-dev/sdk';
5
- import { NodeAuthProvider } from '@rool-dev/sdk/node';
6
- import { parseArgs, printCommonOptions } from './args.js';
4
+ import { getClient } from './client.js';
5
+ import { formatBytes } from './format.js';
6
+ import { DEFAULT_API_URL, DEFAULT_SPACE_NAME } from './constants.js';
7
7
  function getContentType(filePath) {
8
8
  try {
9
9
  return execSync(`file --mime-type -b "${filePath}"`, { encoding: 'utf-8' }).trim();
@@ -12,101 +12,62 @@ function getContentType(filePath) {
12
12
  return 'application/octet-stream';
13
13
  }
14
14
  }
15
- function formatSize(bytes) {
16
- if (bytes < 1024)
17
- return `${bytes} B`;
18
- if (bytes < 1024 * 1024)
19
- return `${(bytes / 1024).toFixed(1)} KB`;
20
- return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;
21
- }
22
- function printUsage() {
23
- console.error('Usage: rool media upload <file> [options]');
24
- console.error('');
25
- console.error('Upload a file to a space and create an object with the media URL.');
26
- console.error('');
27
- console.error('Options:');
28
- console.error(' -m, --message <text> Optional comment/description');
29
- printCommonOptions();
30
- console.error('');
31
- console.error('Examples:');
32
- console.error(' rool media upload photo.jpg');
33
- console.error(' rool media upload report.pdf -m "Q4 sales report"');
34
- console.error(' rool media upload logo.png -s "My Project"');
35
- }
36
- async function getClient(apiUrl) {
37
- const authProvider = new NodeAuthProvider();
38
- const client = new RoolClient({ baseUrl: apiUrl, authProvider });
39
- if (!await client.isAuthenticated()) {
40
- console.log('Opening browser to authenticate...');
41
- await client.login('Rool CLI');
42
- }
43
- return client;
44
- }
45
- async function getSpace(client, spaceName) {
46
- const spaces = await client.listSpaces();
47
- const spaceInfo = spaces.find(s => s.name === spaceName);
48
- if (spaceInfo) {
49
- return client.openSpace(spaceInfo.id);
50
- }
51
- else {
52
- return client.createSpace(spaceName);
53
- }
54
- }
55
- async function uploadMedia(args) {
56
- const { space: spaceName, url: apiUrl, message, rest } = parseArgs(args);
57
- const filePath = rest[0];
58
- if (!filePath) {
59
- printUsage();
60
- process.exit(1);
61
- }
62
- if (!fs.existsSync(filePath)) {
63
- console.error(`File not found: ${filePath}`);
64
- process.exit(1);
65
- }
66
- const stats = fs.statSync(filePath);
67
- if (!stats.isFile()) {
68
- console.error(`Not a file: ${filePath}`);
69
- process.exit(1);
70
- }
71
- const filename = path.basename(filePath);
72
- const contentType = getContentType(filePath);
73
- const size = stats.size;
74
- const client = await getClient(apiUrl);
75
- const space = await getSpace(client, spaceName);
76
- try {
77
- const fileBuffer = fs.readFileSync(filePath);
78
- const blob = new Blob([fileBuffer], { type: contentType });
79
- console.log(`Uploading ${filename} (${formatSize(size)})...`);
80
- const url = await space.uploadMedia(blob);
81
- const objectData = {
82
- type: 'file',
83
- url,
84
- filename,
85
- contentType,
86
- size,
87
- uploadedAt: new Date().toISOString(),
88
- };
89
- if (message) {
90
- objectData.comment = message;
15
+ export function registerMedia(program) {
16
+ const media = program
17
+ .command('media')
18
+ .description('Manage media files');
19
+ media
20
+ .command('upload')
21
+ .description('Upload a file to a space and create an object with the media URL')
22
+ .argument('<file>', 'file to upload')
23
+ .option('-m, --message <text>', 'optional comment/description')
24
+ .option('-s, --space <name>', 'space name', DEFAULT_SPACE_NAME)
25
+ .option('-u, --url <url>', 'API URL', DEFAULT_API_URL)
26
+ .action(async (filePath, opts) => {
27
+ if (!fs.existsSync(filePath)) {
28
+ console.error(`File not found: ${filePath}`);
29
+ process.exit(1);
91
30
  }
92
- const { object } = await space.createObject({ data: objectData });
93
- console.log(`Uploaded: ${filename} (${formatSize(size)})`);
94
- console.log(`Created object: ${object.id}`);
95
- console.log(`URL: ${url}`);
96
- }
97
- finally {
98
- space.close();
99
- client.destroy();
100
- }
101
- }
102
- export async function media(args) {
103
- const [subcommand, ...subargs] = args;
104
- if (subcommand === 'upload') {
105
- await uploadMedia(subargs);
106
- }
107
- else {
108
- printUsage();
109
- process.exit(1);
110
- }
31
+ const stats = fs.statSync(filePath);
32
+ if (!stats.isFile()) {
33
+ console.error(`Not a file: ${filePath}`);
34
+ process.exit(1);
35
+ }
36
+ const filename = path.basename(filePath);
37
+ const contentType = getContentType(filePath);
38
+ const size = stats.size;
39
+ const client = await getClient(opts.url);
40
+ // Find or create space by name
41
+ const spaces = await client.listSpaces();
42
+ const spaceInfo = spaces.find(s => s.name === opts.space);
43
+ const space = spaceInfo
44
+ ? await client.openSpace(spaceInfo.id)
45
+ : await client.createSpace(opts.space);
46
+ try {
47
+ const fileBuffer = fs.readFileSync(filePath);
48
+ const blob = new Blob([fileBuffer], { type: contentType });
49
+ console.log(`Uploading ${filename} (${formatBytes(size)})...`);
50
+ const url = await space.uploadMedia(blob);
51
+ const objectData = {
52
+ type: 'file',
53
+ url,
54
+ filename,
55
+ contentType,
56
+ size,
57
+ uploadedAt: new Date().toISOString(),
58
+ };
59
+ if (opts.message) {
60
+ objectData.comment = opts.message;
61
+ }
62
+ const { object } = await space.createObject({ data: objectData });
63
+ console.log(`Uploaded: ${filename} (${formatBytes(size)})`);
64
+ console.log(`Created object: ${object.id}`);
65
+ console.log(`URL: ${url}`);
66
+ }
67
+ finally {
68
+ space.close();
69
+ client.destroy();
70
+ }
71
+ });
111
72
  }
112
73
  //# sourceMappingURL=media.js.map
package/dist/media.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"media.js","sourceRoot":"","sources":["../src/media.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"media.js","sourceRoot":"","sources":["../src/media.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function createProgram(): Command;
3
+ //# sourceMappingURL=program.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"program.d.ts","sourceRoot":"","sources":["../src/program.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASpC,wBAAgB,aAAa,IAAI,OAAO,CAgBvC"}
@@ -0,0 +1,23 @@
1
+ import { Command } from 'commander';
2
+ import { VERSION } from './constants.js';
3
+ import { registerChat } from './chat.js';
4
+ import { registerMedia } from './media.js';
5
+ import { registerSpace } from './space.js';
6
+ import { registerApp } from './app.js';
7
+ import { registerUser } from './user.js';
8
+ import { registerLogout } from './logout.js';
9
+ export function createProgram() {
10
+ const program = new Command();
11
+ program
12
+ .name('rool')
13
+ .version(VERSION)
14
+ .description('Command-line interface for the Rool platform');
15
+ registerChat(program);
16
+ registerMedia(program);
17
+ registerSpace(program);
18
+ registerApp(program);
19
+ registerUser(program);
20
+ registerLogout(program);
21
+ return program;
22
+ }
23
+ //# sourceMappingURL=program.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"program.js","sourceRoot":"","sources":["../src/program.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,MAAM,UAAU,aAAa;IAC3B,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAE9B,OAAO;SACJ,IAAI,CAAC,MAAM,CAAC;SACZ,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,8CAA8C,CAAC,CAAC;IAE/D,YAAY,CAAC,OAAO,CAAC,CAAC;IACtB,aAAa,CAAC,OAAO,CAAC,CAAC;IACvB,aAAa,CAAC,OAAO,CAAC,CAAC;IACvB,WAAW,CAAC,OAAO,CAAC,CAAC;IACrB,YAAY,CAAC,OAAO,CAAC,CAAC;IACtB,cAAc,CAAC,OAAO,CAAC,CAAC;IAExB,OAAO,OAAO,CAAC;AACjB,CAAC"}
package/dist/space.d.ts CHANGED
@@ -1,2 +1,3 @@
1
- export declare function space(args: string[]): Promise<void>;
1
+ import { type Command } from 'commander';
2
+ export declare function registerSpace(program: Command): void;
2
3
  //# sourceMappingURL=space.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"space.d.ts","sourceRoot":"","sources":["../src/space.ts"],"names":[],"mappings":"AAkGA,wBAAsB,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAyCzD"}
1
+ {"version":3,"file":"space.d.ts","sourceRoot":"","sources":["../src/space.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,WAAW,CAAC;AAkBzC,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA0EpD"}
package/dist/space.js CHANGED
@@ -1,20 +1,7 @@
1
1
  import * as readline from 'node:readline';
2
- import { RoolClient } from '@rool-dev/sdk';
3
- import { NodeAuthProvider } from '@rool-dev/sdk/node';
4
- import { parseArgs } from './args.js';
5
- function printUsage() {
6
- console.error('Usage: rool space <command> [options]');
7
- console.error('');
8
- console.error('Commands:');
9
- console.error(' list List all spaces');
10
- console.error(' create <name> Create a new space');
11
- console.error(' delete <name> [-y] Delete a space');
12
- console.error('');
13
- console.error('Options:');
14
- console.error(' -u, --url <url> API URL (default: https://api.rool.dev)');
15
- console.error(' -y, --yes Skip confirmation prompt');
16
- }
17
- async function confirm(message) {
2
+ import { getClient } from './client.js';
3
+ import { DEFAULT_API_URL } from './constants.js';
4
+ function confirm(message) {
18
5
  const rl = readline.createInterface({
19
6
  input: process.stdin,
20
7
  output: process.stdout,
@@ -26,96 +13,90 @@ async function confirm(message) {
26
13
  });
27
14
  });
28
15
  }
29
- async function getClient(apiUrl) {
30
- const authProvider = new NodeAuthProvider();
31
- const client = new RoolClient({ baseUrl: apiUrl, authProvider });
32
- if (!await client.isAuthenticated()) {
33
- console.log('Opening browser to authenticate...');
34
- await client.login("Rool CLI");
35
- }
36
- return client;
37
- }
38
- async function listSpaces(apiUrl) {
39
- const client = await getClient(apiUrl);
40
- const list = await client.listSpaces();
41
- if (list.length === 0) {
42
- console.log('No spaces found.');
43
- }
44
- else {
45
- for (const s of list) {
46
- console.log(`${s.id} ${s.name} (${s.role})`);
16
+ export function registerSpace(program) {
17
+ const space = program
18
+ .command('space')
19
+ .description('Manage spaces (list, create, delete)');
20
+ // "rool spaces" alias for "rool space list"
21
+ program
22
+ .command('spaces', { hidden: true })
23
+ .description('List all spaces (alias for "space list")')
24
+ .option('-u, --url <url>', 'API URL', DEFAULT_API_URL)
25
+ .action(async (opts) => {
26
+ await listSpaces(opts.url);
27
+ });
28
+ space
29
+ .command('list')
30
+ .description('List all spaces')
31
+ .option('-u, --url <url>', 'API URL', DEFAULT_API_URL)
32
+ .action(async (opts) => {
33
+ await listSpaces(opts.url);
34
+ });
35
+ space
36
+ .command('create')
37
+ .description('Create a new space')
38
+ .argument('<name>', 'space name')
39
+ .option('-u, --url <url>', 'API URL', DEFAULT_API_URL)
40
+ .action(async (name, opts) => {
41
+ const client = await getClient(opts.url);
42
+ try {
43
+ const newSpace = await client.createSpace(name);
44
+ console.log(`Created space: ${newSpace.id} ${newSpace.name}`);
45
+ newSpace.close();
47
46
  }
48
- }
49
- client.destroy();
50
- }
51
- async function createSpace(apiUrl, name) {
52
- const client = await getClient(apiUrl);
53
- const newSpace = await client.createSpace(name);
54
- console.log(`Created space: ${newSpace.id} ${newSpace.name}`);
55
- newSpace.close();
56
- client.destroy();
57
- }
58
- async function deleteSpace(apiUrl, name, skipConfirm) {
59
- const client = await getClient(apiUrl);
60
- const list = await client.listSpaces();
61
- const spaceInfo = list.find(s => s.name === name);
62
- if (!spaceInfo) {
63
- console.error(`Space not found: "${name}"`);
64
- client.destroy();
65
- process.exit(1);
66
- }
67
- if (spaceInfo.role !== 'owner') {
68
- console.error(`Cannot delete space: you are not the owner (role: ${spaceInfo.role})`);
69
- client.destroy();
70
- process.exit(1);
71
- }
72
- if (!skipConfirm) {
73
- const confirmed = await confirm(`Delete space "${name}" (${spaceInfo.id})? This cannot be undone.`);
74
- if (!confirmed) {
75
- console.log('Cancelled.');
47
+ finally {
76
48
  client.destroy();
77
- return;
78
49
  }
79
- }
80
- await client.deleteSpace(spaceInfo.id);
81
- console.log(`Deleted space: ${name}`);
82
- client.destroy();
83
- }
84
- export async function space(args) {
85
- const { url: apiUrl, rest } = parseArgs(args);
86
- const [subcommand, ...subargs] = rest;
87
- // Check for -y/--yes flag in remaining args
88
- const yesIndex = subargs.findIndex(a => a === '-y' || a === '--yes');
89
- const skipConfirm = yesIndex !== -1;
90
- if (skipConfirm) {
91
- subargs.splice(yesIndex, 1);
92
- }
93
- switch (subcommand) {
94
- case 'list':
95
- case undefined:
96
- await listSpaces(apiUrl);
97
- break;
98
- case 'create': {
99
- const name = subargs.join(' ');
100
- if (!name) {
101
- console.error('Usage: rool space create <name>');
50
+ });
51
+ space
52
+ .command('delete')
53
+ .description('Delete a space')
54
+ .argument('<name>', 'space name')
55
+ .option('-y, --yes', 'skip confirmation prompt')
56
+ .option('-u, --url <url>', 'API URL', DEFAULT_API_URL)
57
+ .action(async (name, opts) => {
58
+ const client = await getClient(opts.url);
59
+ try {
60
+ const list = await client.listSpaces();
61
+ const spaceInfo = list.find(s => s.name === name);
62
+ if (!spaceInfo) {
63
+ console.error(`Space not found: "${name}"`);
102
64
  process.exit(1);
103
65
  }
104
- await createSpace(apiUrl, name);
105
- break;
106
- }
107
- case 'delete': {
108
- const name = subargs.join(' ');
109
- if (!name) {
110
- console.error('Usage: rool space delete <name> [-y]');
66
+ if (spaceInfo.role !== 'owner') {
67
+ console.error(`Cannot delete space: you are not the owner (role: ${spaceInfo.role})`);
111
68
  process.exit(1);
112
69
  }
113
- await deleteSpace(apiUrl, name, skipConfirm);
114
- break;
70
+ if (!opts.yes) {
71
+ const confirmed = await confirm(`Delete space "${name}" (${spaceInfo.id})? This cannot be undone.`);
72
+ if (!confirmed) {
73
+ console.log('Cancelled.');
74
+ return;
75
+ }
76
+ }
77
+ await client.deleteSpace(spaceInfo.id);
78
+ console.log(`Deleted space: ${name}`);
79
+ }
80
+ finally {
81
+ client.destroy();
115
82
  }
116
- default:
117
- printUsage();
118
- process.exit(1);
83
+ });
84
+ }
85
+ async function listSpaces(apiUrl) {
86
+ const client = await getClient(apiUrl);
87
+ try {
88
+ const list = await client.listSpaces();
89
+ if (list.length === 0) {
90
+ console.log('No spaces found.');
91
+ }
92
+ else {
93
+ for (const s of list) {
94
+ console.log(`${s.id} ${s.name} (${s.role})`);
95
+ }
96
+ }
97
+ }
98
+ finally {
99
+ client.destroy();
119
100
  }
120
101
  }
121
102
  //# sourceMappingURL=space.js.map
package/dist/space.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"space.js","sourceRoot":"","sources":["../src/space.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"space.js","sourceRoot":"","sources":["../src/space.ts"],"names":[],"mappings":"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"}
package/dist/user.d.ts CHANGED
@@ -1,2 +1,3 @@
1
- export declare function user(args: string[]): Promise<void>;
1
+ import { type Command } from 'commander';
2
+ export declare function registerUser(program: Command): void;
2
3
  //# sourceMappingURL=user.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"user.d.ts","sourceRoot":"","sources":["../src/user.ts"],"names":[],"mappings":"AAIA,wBAAsB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA4BxD"}
1
+ {"version":3,"file":"user.d.ts","sourceRoot":"","sources":["../src/user.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,WAAW,CAAC;AAIzC,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAuBnD"}
package/dist/user.js CHANGED
@@ -1,27 +1,26 @@
1
- import { RoolClient } from '@rool-dev/sdk';
2
- import { NodeAuthProvider } from '@rool-dev/sdk/node';
3
- import { parseArgs } from './args.js';
4
- export async function user(args) {
5
- const { url: apiUrl, rest } = parseArgs(args);
6
- if (rest.length > 0) {
7
- console.error('Usage: rool user [options]');
8
- console.error('');
9
- console.error('Options:');
10
- console.error(' -u, --url <url> API URL (default: https://api.rool.dev)');
11
- process.exit(1);
12
- }
13
- const authProvider = new NodeAuthProvider();
14
- const client = new RoolClient({ baseUrl: apiUrl, authProvider });
15
- if (!await client.isAuthenticated()) {
16
- console.log('Not logged in.');
17
- client.destroy();
18
- process.exit(1);
19
- }
20
- const currentUser = await client.getCurrentUser();
21
- console.log(`Email: ${currentUser.email}`);
22
- console.log(`Name: ${currentUser.name ?? '(not set)'}`);
23
- console.log(`Plan: ${currentUser.plan}`);
24
- console.log(`Credits: ${currentUser.creditsBalance}`);
25
- client.destroy();
1
+ import { getClient } from './client.js';
2
+ import { DEFAULT_API_URL } from './constants.js';
3
+ export function registerUser(program) {
4
+ program
5
+ .command('user')
6
+ .description('Show current user info')
7
+ .option('-u, --url <url>', 'API URL', DEFAULT_API_URL)
8
+ .action(async (opts) => {
9
+ const client = await getClient(opts.url, { autoLogin: false });
10
+ try {
11
+ if (!await client.isAuthenticated()) {
12
+ console.log('Not logged in.');
13
+ process.exit(1);
14
+ }
15
+ const currentUser = await client.getCurrentUser();
16
+ console.log(`Email: ${currentUser.email}`);
17
+ console.log(`Name: ${currentUser.name ?? '(not set)'}`);
18
+ console.log(`Plan: ${currentUser.plan}`);
19
+ console.log(`Credits: ${currentUser.creditsBalance}`);
20
+ }
21
+ finally {
22
+ client.destroy();
23
+ }
24
+ });
26
25
  }
27
26
  //# sourceMappingURL=user.js.map
package/dist/user.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"user.js","sourceRoot":"","sources":["../src/user.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,IAAc;IACvC,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAE9C,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAC5C,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAClB,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAC1B,OAAO,CAAC,KAAK,CAAC,8DAA8D,CAAC,CAAC;QAC9E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,YAAY,GAAG,IAAI,gBAAgB,EAAE,CAAC;IAC5C,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC;IAEjE,IAAI,CAAC,MAAM,MAAM,CAAC,eAAe,EAAE,EAAE,CAAC;QACpC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;QAC9B,MAAM,CAAC,OAAO,EAAE,CAAC;QACjB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC,cAAc,EAAE,CAAC;IAElD,OAAO,CAAC,GAAG,CAAC,YAAY,WAAW,CAAC,KAAK,EAAE,CAAC,CAAC;IAC7C,OAAO,CAAC,GAAG,CAAC,YAAY,WAAW,CAAC,IAAI,IAAI,WAAW,EAAE,CAAC,CAAC;IAC3D,OAAO,CAAC,GAAG,CAAC,YAAY,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;IAC5C,OAAO,CAAC,GAAG,CAAC,YAAY,WAAW,CAAC,cAAc,EAAE,CAAC,CAAC;IAEtD,MAAM,CAAC,OAAO,EAAE,CAAC;AACnB,CAAC"}
1
+ {"version":3,"file":"user.js","sourceRoot":"","sources":["../src/user.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEjD,MAAM,UAAU,YAAY,CAAC,OAAgB;IAC3C,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,wBAAwB,CAAC;SACrC,MAAM,CAAC,iBAAiB,EAAE,SAAS,EAAE,eAAe,CAAC;SACrD,MAAM,CAAC,KAAK,EAAE,IAAqB,EAAE,EAAE;QACtC,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;QAC/D,IAAI,CAAC;YACH,IAAI,CAAC,MAAM,MAAM,CAAC,eAAe,EAAE,EAAE,CAAC;gBACpC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;gBAC9B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YAED,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC,cAAc,EAAE,CAAC;YAElD,OAAO,CAAC,GAAG,CAAC,YAAY,WAAW,CAAC,KAAK,EAAE,CAAC,CAAC;YAC7C,OAAO,CAAC,GAAG,CAAC,YAAY,WAAW,CAAC,IAAI,IAAI,WAAW,EAAE,CAAC,CAAC;YAC3D,OAAO,CAAC,GAAG,CAAC,YAAY,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;YAC5C,OAAO,CAAC,GAAG,CAAC,YAAY,WAAW,CAAC,cAAc,EAAE,CAAC,CAAC;QACxD,CAAC;gBAAS,CAAC;YACT,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rool-dev/cli",
3
- "version": "0.1.9",
3
+ "version": "0.1.10-dev.930dc5c",
4
4
  "description": "Command-line interface for working with Rool Spaces",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -34,20 +34,23 @@
34
34
  "license": "MIT",
35
35
  "dependencies": {
36
36
  "archiver": "^7.0.1",
37
+ "commander": "^14.0.3",
37
38
  "marked": "^15.0.12",
38
39
  "marked-terminal": "^7.3.0",
39
- "@rool-dev/sdk": "0.1.10"
40
+ "@rool-dev/sdk": "0.1.11"
40
41
  },
41
42
  "devDependencies": {
42
43
  "@types/archiver": "^7.0.0",
43
44
  "@types/marked-terminal": "^6.1.1",
44
45
  "@types/node": "^25.0.2",
46
+ "tsx": "^4.21.0",
45
47
  "typescript": "^5.9.3"
46
48
  },
47
49
  "scripts": {
48
50
  "build": "tsc",
49
51
  "dev": "tsc --watch",
50
52
  "typecheck": "tsc --noEmit",
53
+ "generate-readme": "tsc && tsx scripts/generate-readme.ts",
51
54
  "clean": "rm -rf dist"
52
55
  }
53
56
  }
package/dist/args.d.ts DELETED
@@ -1,12 +0,0 @@
1
- export interface CommonArgs {
2
- space: string;
3
- conversation: string;
4
- url: string;
5
- message: string | undefined;
6
- }
7
- export interface ParsedArgs extends CommonArgs {
8
- rest: string[];
9
- }
10
- export declare function parseArgs(args: string[]): ParsedArgs;
11
- export declare function printCommonOptions(): void;
12
- //# sourceMappingURL=args.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"args.d.ts","sourceRoot":"","sources":["../src/args.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;CAC7B;AAED,MAAM,WAAW,UAAW,SAAQ,UAAU;IAC5C,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAaD,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,CA6BpD;AAED,wBAAgB,kBAAkB,IAAI,IAAI,CAKzC"}