@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/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Rool CLI
2
2
 
3
- Command-line interface for the [Rool](https://api.rool.dev) platform.
3
+ Command-line interface for the [Rool](https://rool.dev) platform.
4
4
 
5
5
  ## Installation
6
6
 
@@ -18,24 +18,36 @@ rool <command> [options]
18
18
 
19
19
  | Command | Description |
20
20
  |---------|-------------|
21
- | `chat <prompt>` | Send a prompt to a space |
22
- | `chat` | Interactive chat mode |
23
- | `media upload <file>` | Upload a file and create an object with the media URL |
21
+ | `chat [prompt]` | Chat with a space (interactive if no prompt) |
22
+ | `media upload <file>` | Upload a file to a space and create an object with the media URL |
24
23
  | `space list` | List all spaces |
25
24
  | `space create <name>` | Create a new space |
26
25
  | `space delete <name>` | Delete a space |
26
+ | `app publish <app-id> <path>` | Publish a directory as an app |
27
+ | `app list` | List published apps |
28
+ | `app unpublish <app-id>` | Unpublish an app |
29
+ | `app slug [new-slug]` | Show or set your user slug |
27
30
  | `user` | Show current user info |
28
31
  | `logout` | Log out |
29
32
 
30
- ### Options
33
+ ### Global Options
31
34
 
32
35
  | Option | Description |
33
36
  |--------|-------------|
34
- | `-s, --space <name>` | Space name (default: "Rool CLI") |
35
- | `-c, --conversation <id>` | Conversation ID (default: "rool-dev") |
36
- | `-u, --url <url>` | API URL (default: https://api.rool.dev) |
37
- | `-m, --message <text>` | Comment/description (for media upload) |
38
- | `-y, --yes` | Skip confirmation prompts |
37
+ | `-V, --version` | Show version number |
38
+ | `-h, --help` | Show help for any command |
39
+
40
+ ### Command Options
41
+
42
+ | Option | Description | Default | Used by |
43
+ |--------|-------------|---------|---------|
44
+ | `-s, --space <name>` | space name | `Rool CLI` | `chat`, `media upload` |
45
+ | `-c, --conversation <id>` | conversation ID | `rool-dev` | `chat` |
46
+ | `-u, --url <url>` | API URL | `https://api.rool.dev` | all |
47
+ | `-m, --message <text>` | optional comment/description | | `media upload` |
48
+ | `-y, --yes` | skip confirmation prompt | | `space delete` |
49
+ | `-n, --name <name>` | app display name (defaults to app-id) | | `app publish` |
50
+ | `--no-spa` | disable SPA routing (404s will not serve index.html) | | `app publish` |
39
51
 
40
52
  ### Examples
41
53
 
@@ -70,6 +82,22 @@ rool media upload report.pdf -m "Q4 sales report"
70
82
  # Upload to a specific space
71
83
  rool media upload logo.png -s "My Project"
72
84
 
85
+ # Publish a directory as an app
86
+ rool app publish my-app ./dist
87
+
88
+ # Publish with a custom name
89
+ rool app publish my-app ./dist -n "My App"
90
+
91
+ # List published apps
92
+ rool app list
93
+
94
+ # Unpublish an app
95
+ rool app unpublish my-app
96
+
97
+ # Show or set your user slug
98
+ rool app slug
99
+ rool app slug my-slug
100
+
73
101
  # Show user info
74
102
  rool user
75
103
 
@@ -81,6 +109,10 @@ rool logout
81
109
 
82
110
  On first use, the CLI opens your browser to authenticate. Credentials are stored in `~/.config/rool/`.
83
111
 
112
+ ## Version
113
+
114
+ Current version: `0.1.9`. Use `rool --version` to check your installed version.
115
+
84
116
  ## License
85
117
 
86
118
  MIT - see [LICENSE](../../LICENSE) for details.
package/dist/app.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ import { type Command } from 'commander';
2
+ export declare function registerApp(program: Command): void;
3
+ //# sourceMappingURL=app.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,WAAW,CAAC;AAmBzC,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA6HlD"}
package/dist/app.js ADDED
@@ -0,0 +1,138 @@
1
+ import * as fs from 'node:fs';
2
+ import * as path from 'node:path';
3
+ import archiver from 'archiver';
4
+ import { getClient } from './client.js';
5
+ import { formatBytes } from './format.js';
6
+ import { DEFAULT_API_URL } from './constants.js';
7
+ async function zipDirectory(dirPath) {
8
+ return new Promise((resolve, reject) => {
9
+ const archive = archiver('zip', { zlib: { level: 9 } });
10
+ const chunks = [];
11
+ archive.on('data', (chunk) => chunks.push(chunk));
12
+ archive.on('end', () => resolve(Buffer.concat(chunks)));
13
+ archive.on('error', reject);
14
+ archive.directory(dirPath, false);
15
+ archive.finalize();
16
+ });
17
+ }
18
+ export function registerApp(program) {
19
+ const app = program
20
+ .command('app')
21
+ .description('Publish and manage apps');
22
+ app
23
+ .command('publish')
24
+ .description('Publish a directory as an app')
25
+ .argument('<app-id>', 'unique app identifier')
26
+ .argument('<path>', 'directory to publish')
27
+ .option('-n, --name <name>', 'app display name (defaults to app-id)')
28
+ .option('--no-spa', 'disable SPA routing (404s will not serve index.html)')
29
+ .option('-u, --url <url>', 'API URL', DEFAULT_API_URL)
30
+ .action(async (appId, dirPath, opts) => {
31
+ // Validate directory exists
32
+ const resolvedPath = path.resolve(dirPath);
33
+ if (!fs.existsSync(resolvedPath)) {
34
+ console.error(`Directory not found: ${resolvedPath}`);
35
+ process.exit(1);
36
+ }
37
+ const stat = fs.statSync(resolvedPath);
38
+ if (!stat.isDirectory()) {
39
+ console.error(`Not a directory: ${resolvedPath}`);
40
+ process.exit(1);
41
+ }
42
+ // Check for index.html
43
+ const indexPath = path.join(resolvedPath, 'index.html');
44
+ if (!fs.existsSync(indexPath)) {
45
+ console.error(`No index.html found in ${resolvedPath}`);
46
+ console.error('The directory must contain an index.html file at the root.');
47
+ process.exit(1);
48
+ }
49
+ console.log(`Packaging ${resolvedPath}...`);
50
+ const zipBuffer = await zipDirectory(resolvedPath);
51
+ console.log(`Bundle size: ${formatBytes(zipBuffer.length)}`);
52
+ const client = await getClient(opts.url);
53
+ try {
54
+ console.log(`Publishing ${appId}...`);
55
+ const blob = new Blob([new Uint8Array(zipBuffer)], { type: 'application/zip' });
56
+ const result = await client.publishApp(appId, { name: opts.name ?? appId, bundle: blob, spa: opts.spa });
57
+ console.log('');
58
+ console.log(`Published: ${result.name}`);
59
+ console.log(`URL: ${result.url}`);
60
+ console.log(`Size: ${formatBytes(result.sizeBytes)}`);
61
+ console.log(`SPA routing: ${result.spa ? 'enabled' : 'disabled'}`);
62
+ }
63
+ finally {
64
+ client.destroy();
65
+ }
66
+ });
67
+ app
68
+ .command('list')
69
+ .description('List published apps')
70
+ .option('-u, --url <url>', 'API URL', DEFAULT_API_URL)
71
+ .action(async (opts) => {
72
+ const client = await getClient(opts.url);
73
+ try {
74
+ const apps = await client.listApps();
75
+ if (apps.length === 0) {
76
+ console.log('No published apps.');
77
+ }
78
+ else {
79
+ console.log('Published apps:');
80
+ console.log('');
81
+ for (const a of apps) {
82
+ console.log(` ${a.appId}`);
83
+ console.log(` Name: ${a.name}`);
84
+ console.log(` URL: ${a.url}`);
85
+ console.log(` Size: ${formatBytes(a.sizeBytes)}`);
86
+ console.log(` SPA: ${a.spa ? 'yes' : 'no'}`);
87
+ console.log(` Updated: ${new Date(a.updatedAt).toLocaleString()}`);
88
+ console.log('');
89
+ }
90
+ }
91
+ }
92
+ finally {
93
+ client.destroy();
94
+ }
95
+ });
96
+ app
97
+ .command('unpublish')
98
+ .description('Unpublish an app')
99
+ .argument('<app-id>', 'app to unpublish')
100
+ .option('-u, --url <url>', 'API URL', DEFAULT_API_URL)
101
+ .action(async (appId, opts) => {
102
+ const client = await getClient(opts.url);
103
+ try {
104
+ const a = await client.getAppInfo(appId);
105
+ if (!a) {
106
+ console.error(`App not found: ${appId}`);
107
+ process.exit(1);
108
+ }
109
+ await client.unpublishApp(appId);
110
+ console.log(`Unpublished: ${appId}`);
111
+ }
112
+ finally {
113
+ client.destroy();
114
+ }
115
+ });
116
+ app
117
+ .command('slug')
118
+ .description('Show or set your user slug')
119
+ .argument('[new-slug]', 'new slug to set')
120
+ .option('-u, --url <url>', 'API URL', DEFAULT_API_URL)
121
+ .action(async (newSlug, opts) => {
122
+ const client = await getClient(opts.url);
123
+ try {
124
+ const user = await client.getCurrentUser();
125
+ if (newSlug) {
126
+ await client.setSlug(newSlug);
127
+ console.log(`Slug updated to: ${newSlug}`);
128
+ }
129
+ else {
130
+ console.log(`Your slug: ${user.slug}`);
131
+ }
132
+ }
133
+ finally {
134
+ client.destroy();
135
+ }
136
+ });
137
+ }
138
+ //# sourceMappingURL=app.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"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"}
package/dist/chat.d.ts CHANGED
@@ -1,2 +1,3 @@
1
- export declare function chat(args: string[]): Promise<void>;
1
+ import { type Command } from 'commander';
2
+ export declare function registerChat(program: Command): void;
2
3
  //# sourceMappingURL=chat.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../src/chat.ts"],"names":[],"mappings":"AAMA,wBAAsB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAiCxD"}
1
+ {"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../src/chat.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,WAAW,CAAC;AAMzC,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAoCnD"}
package/dist/chat.js CHANGED
@@ -1,42 +1,49 @@
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';
2
+ import { getClient } from './client.js';
5
3
  import { formatMarkdown } from './format.js';
6
- export async function chat(args) {
7
- const { space: spaceName, conversation: conversationId, url: apiUrl, rest } = parseArgs(args);
8
- const prompt = rest.join(' ');
9
- const authProvider = new NodeAuthProvider();
10
- const client = new RoolClient({ baseUrl: apiUrl, authProvider });
11
- // Login if needed (NodeAuthProvider opens browser and awaits callback)
12
- if (!await client.isAuthenticated()) {
13
- console.log('Opening browser to authenticate...');
14
- await client.login("Rool CLI");
15
- }
16
- // Find or create space by name
17
- const spaces = await client.listSpaces();
18
- const spaceInfo = spaces.find(s => s.name === spaceName);
19
- let space;
20
- if (spaceInfo) {
21
- space = await client.openSpace(spaceInfo.id, { conversationId });
22
- }
23
- else {
24
- space = await client.createSpace(spaceName, { conversationId });
25
- }
26
- if (prompt) {
27
- // One-shot mode
28
- await sendPrompt(space, prompt);
29
- space.close();
30
- client.destroy();
31
- }
32
- else {
33
- // Interactive mode
34
- await interactiveMode(space, client);
35
- }
4
+ import { DEFAULT_API_URL, DEFAULT_SPACE_NAME, DEFAULT_CONVERSATION_ID } from './constants.js';
5
+ export function registerChat(program) {
6
+ program
7
+ .command('chat')
8
+ .description('Chat with a space (interactive if no prompt)')
9
+ .argument('[prompt...]', 'prompt to send')
10
+ .option('-s, --space <name>', 'space name', DEFAULT_SPACE_NAME)
11
+ .option('-c, --conversation <id>', 'conversation ID', DEFAULT_CONVERSATION_ID)
12
+ .option('-u, --url <url>', 'API URL', DEFAULT_API_URL)
13
+ .action(async (promptWords, opts) => {
14
+ const prompt = promptWords.join(' ');
15
+ const client = await getClient(opts.url);
16
+ // Find or create space by name
17
+ const spaces = await client.listSpaces();
18
+ const spaceInfo = spaces.find(s => s.name === opts.space);
19
+ let space;
20
+ if (spaceInfo) {
21
+ space = await client.openSpace(spaceInfo.id, { conversationId: opts.conversation });
22
+ }
23
+ else {
24
+ space = await client.createSpace(opts.space, { conversationId: opts.conversation });
25
+ }
26
+ if (prompt) {
27
+ // One-shot mode
28
+ try {
29
+ await sendPrompt(space, prompt);
30
+ }
31
+ finally {
32
+ space.close();
33
+ client.destroy();
34
+ }
35
+ }
36
+ else {
37
+ // Interactive mode
38
+ await interactiveMode(space, client);
39
+ }
40
+ });
36
41
  }
37
42
  function clearStatusLine() {
38
- process.stdout.clearLine(0);
39
- process.stdout.cursorTo(0);
43
+ if (process.stdout.isTTY) {
44
+ process.stdout.clearLine(0);
45
+ process.stdout.cursorTo(0);
46
+ }
40
47
  }
41
48
  async function sendPrompt(space, prompt) {
42
49
  // Subscribe to progress updates
package/dist/chat.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"chat.js","sourceRoot":"","sources":["../src/chat.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"chat.js","sourceRoot":"","sources":["../src/chat.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import { RoolClient } from '@rool-dev/sdk';
2
+ export declare function getClient(apiUrl: string, options?: {
3
+ autoLogin?: boolean;
4
+ }): Promise<RoolClient>;
5
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAK3C,wBAAsB,SAAS,CAC7B,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE;IAAE,SAAS,CAAC,EAAE,OAAO,CAAA;CAAE,GAChC,OAAO,CAAC,UAAU,CAAC,CAarB"}
package/dist/client.js ADDED
@@ -0,0 +1,16 @@
1
+ import { RoolClient } from '@rool-dev/sdk';
2
+ import { NodeAuthProvider } from '@rool-dev/sdk/node';
3
+ const APP_NAME = 'Rool CLI';
4
+ export async function getClient(apiUrl, options) {
5
+ const authProvider = new NodeAuthProvider();
6
+ const client = new RoolClient({ baseUrl: apiUrl, authProvider });
7
+ if (!await client.isAuthenticated()) {
8
+ if (options?.autoLogin === false) {
9
+ return client;
10
+ }
11
+ console.log('Opening browser to authenticate...');
12
+ await client.login(APP_NAME);
13
+ }
14
+ return client;
15
+ }
16
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD,MAAM,QAAQ,GAAG,UAAU,CAAC;AAE5B,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,MAAc,EACd,OAAiC;IAEjC,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,IAAI,OAAO,EAAE,SAAS,KAAK,KAAK,EAAE,CAAC;YACjC,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;QAClD,MAAM,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC/B,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,5 @@
1
+ export declare const VERSION: string;
2
+ export declare const DEFAULT_API_URL = "https://api.rool.dev";
3
+ export declare const DEFAULT_SPACE_NAME = "Rool CLI";
4
+ export declare const DEFAULT_CONVERSATION_ID = "rool-dev";
5
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,OAAO,QAAc,CAAC;AACnC,eAAO,MAAM,eAAe,yBAAyB,CAAC;AACtD,eAAO,MAAM,kBAAkB,aAAa,CAAC;AAC7C,eAAO,MAAM,uBAAuB,aAAa,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { createRequire } from 'node:module';
2
+ const require = createRequire(import.meta.url);
3
+ const pkg = require('../package.json');
4
+ export const VERSION = pkg.version;
5
+ export const DEFAULT_API_URL = 'https://api.rool.dev';
6
+ export const DEFAULT_SPACE_NAME = 'Rool CLI';
7
+ export const DEFAULT_CONVERSATION_ID = 'rool-dev';
8
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,GAAG,GAAG,OAAO,CAAC,iBAAiB,CAAwB,CAAC;AAE9D,MAAM,CAAC,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;AACnC,MAAM,CAAC,MAAM,eAAe,GAAG,sBAAsB,CAAC;AACtD,MAAM,CAAC,MAAM,kBAAkB,GAAG,UAAU,CAAC;AAC7C,MAAM,CAAC,MAAM,uBAAuB,GAAG,UAAU,CAAC"}
package/dist/format.d.ts CHANGED
@@ -1,2 +1,3 @@
1
1
  export declare function formatMarkdown(text: string): string;
2
+ export declare function formatBytes(bytes: number): string;
2
3
  //# sourceMappingURL=format.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../src/format.ts"],"names":[],"mappings":"AAKA,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEnD"}
1
+ {"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../src/format.ts"],"names":[],"mappings":"AAKA,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAIjD"}
package/dist/format.js CHANGED
@@ -4,4 +4,11 @@ marked.use(markedTerminal());
4
4
  export function formatMarkdown(text) {
5
5
  return marked.parse(text);
6
6
  }
7
+ export function formatBytes(bytes) {
8
+ if (bytes < 1024)
9
+ return `${bytes} B`;
10
+ if (bytes < 1024 * 1024)
11
+ return `${(bytes / 1024).toFixed(1)} KB`;
12
+ return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;
13
+ }
7
14
  //# sourceMappingURL=format.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"format.js","sourceRoot":"","sources":["../src/format.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAwB,MAAM,QAAQ,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEjD,MAAM,CAAC,GAAG,CAAC,cAAc,EAAqB,CAAC,CAAC;AAEhD,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,OAAO,MAAM,CAAC,KAAK,CAAC,IAAI,CAAW,CAAC;AACtC,CAAC"}
1
+ {"version":3,"file":"format.js","sourceRoot":"","sources":["../src/format.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAwB,MAAM,QAAQ,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEjD,MAAM,CAAC,GAAG,CAAC,cAAc,EAAqB,CAAC,CAAC;AAEhD,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,OAAO,MAAM,CAAC,KAAK,CAAC,IAAI,CAAW,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,KAAa;IACvC,IAAI,KAAK,GAAG,IAAI;QAAE,OAAO,GAAG,KAAK,IAAI,CAAC;IACtC,IAAI,KAAK,GAAG,IAAI,GAAG,IAAI;QAAE,OAAO,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;IAClE,OAAO,GAAG,CAAC,KAAK,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;AACpD,CAAC"}
package/dist/index.js CHANGED
@@ -1,56 +1,8 @@
1
1
  #!/usr/bin/env node
2
- import { chat } from './chat.js';
3
- import { media } from './media.js';
4
- import { space } from './space.js';
5
- import { publish } from './publish.js';
6
- import { user } from './user.js';
7
- import { logout } from './logout.js';
8
- import { printCommonOptions } from './args.js';
9
- function printUsage() {
10
- console.error('Usage: rool <command> [options]');
11
- console.error('');
12
- console.error('Commands:');
13
- console.error(' chat [prompt] Chat with a space (interactive if no prompt)');
14
- console.error(' media upload <file> Upload a file to a space');
15
- console.error(' space <subcommand> Manage spaces (list, create, delete)');
16
- console.error(' publish <subcommand> Publish apps (list, unpublish, slug)');
17
- console.error(' user Show current user info');
18
- console.error(' logout Log out');
19
- console.error('');
20
- printCommonOptions();
21
- }
22
- async function main() {
23
- const [command, ...args] = process.argv.slice(2);
24
- switch (command) {
25
- case 'chat':
26
- await chat(args);
27
- break;
28
- case 'media':
29
- await media(args);
30
- break;
31
- case 'space':
32
- await space(args);
33
- break;
34
- case 'spaces':
35
- // Alias: "rool spaces" = "rool space list"
36
- await space(['list', ...args]);
37
- break;
38
- case 'publish':
39
- await publish(args);
40
- break;
41
- case 'user':
42
- await user(args);
43
- break;
44
- case 'logout':
45
- await logout(args);
46
- break;
47
- default:
48
- printUsage();
49
- process.exit(1);
50
- }
51
- }
52
- main().catch(err => {
53
- console.error(err.message);
2
+ import { createProgram } from './program.js';
3
+ const program = createProgram();
4
+ program.parseAsync().catch(err => {
5
+ console.error(err instanceof Error ? err.message : err);
54
6
  process.exit(1);
55
7
  });
56
8
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAE/C,SAAS,UAAU;IACjB,OAAO,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;IACjD,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAClB,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IAC3B,OAAO,CAAC,KAAK,CAAC,qEAAqE,CAAC,CAAC;IACrF,OAAO,CAAC,KAAK,CAAC,iDAAiD,CAAC,CAAC;IACjE,OAAO,CAAC,KAAK,CAAC,6DAA6D,CAAC,CAAC;IAC7E,OAAO,CAAC,KAAK,CAAC,6DAA6D,CAAC,CAAC;IAC7E,OAAO,CAAC,KAAK,CAAC,+CAA+C,CAAC,CAAC;IAC/D,OAAO,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;IAChD,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAClB,kBAAkB,EAAE,CAAC;AACvB,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,MAAM,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAEjD,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,MAAM;YACT,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC;YACjB,MAAM;QACR,KAAK,OAAO;YACV,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC;YAClB,MAAM;QACR,KAAK,OAAO;YACV,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC;YAClB,MAAM;QACR,KAAK,QAAQ;YACX,2CAA2C;YAC3C,MAAM,KAAK,CAAC,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;YAC/B,MAAM;QACR,KAAK,SAAS;YACZ,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;YACpB,MAAM;QACR,KAAK,MAAM;YACT,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC;YACjB,MAAM;QACR,KAAK,QAAQ;YACX,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;YACnB,MAAM;QACR;YACE,UAAU,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;IACjB,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC3B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C,MAAM,OAAO,GAAG,aAAa,EAAE,CAAC;AAEhC,OAAO,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;IAC/B,OAAO,CAAC,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACxD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
package/dist/logout.d.ts CHANGED
@@ -1,2 +1,3 @@
1
- export declare function logout(args: string[]): Promise<void>;
1
+ import { type Command } from 'commander';
2
+ export declare function registerLogout(program: Command): void;
2
3
  //# sourceMappingURL=logout.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"logout.d.ts","sourceRoot":"","sources":["../src/logout.ts"],"names":[],"mappings":"AAIA,wBAAsB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAsB1D"}
1
+ {"version":3,"file":"logout.d.ts","sourceRoot":"","sources":["../src/logout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,WAAW,CAAC;AAIzC,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAkBrD"}
package/dist/logout.js CHANGED
@@ -1,24 +1,24 @@
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 logout(args) {
5
- const { url: apiUrl, rest } = parseArgs(args);
6
- if (rest.length > 0) {
7
- console.error('Usage: rool logout [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
- }
18
- else {
19
- client.logout();
20
- console.log('Logged out.');
21
- }
22
- client.destroy();
1
+ import { getClient } from './client.js';
2
+ import { DEFAULT_API_URL } from './constants.js';
3
+ export function registerLogout(program) {
4
+ program
5
+ .command('logout')
6
+ .description('Log out')
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
+ }
14
+ else {
15
+ client.logout();
16
+ console.log('Logged out.');
17
+ }
18
+ }
19
+ finally {
20
+ client.destroy();
21
+ }
22
+ });
23
23
  }
24
24
  //# sourceMappingURL=logout.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"logout.js","sourceRoot":"","sources":["../src/logout.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,MAAM,CAAC,IAAc;IACzC,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,8BAA8B,CAAC,CAAC;QAC9C,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;IAChC,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,MAAM,EAAE,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IAC7B,CAAC;IAED,MAAM,CAAC,OAAO,EAAE,CAAC;AACnB,CAAC"}
1
+ {"version":3,"file":"logout.js","sourceRoot":"","sources":["../src/logout.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEjD,MAAM,UAAU,cAAc,CAAC,OAAgB;IAC7C,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,SAAS,CAAC;SACtB,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;YAChC,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,MAAM,EAAE,CAAC;gBAChB,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC;gBAAS,CAAC;YACT,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
package/dist/media.d.ts CHANGED
@@ -1,2 +1,3 @@
1
- export declare function media(args: string[]): Promise<void>;
1
+ import { type Command } from 'commander';
2
+ export declare function registerMedia(program: Command): void;
2
3
  //# sourceMappingURL=media.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"media.d.ts","sourceRoot":"","sources":["../src/media.ts"],"names":[],"mappings":"AAqHA,wBAAsB,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CASzD"}
1
+ {"version":3,"file":"media.d.ts","sourceRoot":"","sources":["../src/media.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,WAAW,CAAC;AAazC,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAmEpD"}