cmssy-cli 0.9.0 ā 0.10.1
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 +79 -11
- package/dist/cli.js +7 -1
- package/dist/cli.js.map +1 -1
- package/dist/commands/workspaces.d.ts +2 -0
- package/dist/commands/workspaces.d.ts.map +1 -0
- package/dist/commands/workspaces.js +62 -0
- package/dist/commands/workspaces.js.map +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -45,8 +45,8 @@ Create a `.env` file in your project root with the following variables:
|
|
|
45
45
|
CMSSY_API_URL=https://api.cmssy.io/graphql
|
|
46
46
|
CMSSY_API_TOKEN=your_api_token_here
|
|
47
47
|
|
|
48
|
-
# Optional - default workspace ID for publishing
|
|
49
|
-
CMSSY_WORKSPACE_ID=
|
|
48
|
+
# Optional - default workspace ID for publishing (MongoDB ObjectId)
|
|
49
|
+
CMSSY_WORKSPACE_ID=507f1f77bcf86cd799439011
|
|
50
50
|
```
|
|
51
51
|
|
|
52
52
|
**How to get API Token:**
|
|
@@ -55,6 +55,19 @@ CMSSY_WORKSPACE_ID=ws_abc123
|
|
|
55
55
|
3. Create a new token with `marketplace:publish` or `workspace:write` scope
|
|
56
56
|
4. Copy the token to your `.env` file
|
|
57
57
|
|
|
58
|
+
**How to get Workspace ID:**
|
|
59
|
+
|
|
60
|
+
**Option 1: From Cmssy UI (Easiest)**
|
|
61
|
+
1. Go to your workspace Settings ā General
|
|
62
|
+
2. Find "Workspace Information" section at the top
|
|
63
|
+
3. Click the copy button next to Workspace ID
|
|
64
|
+
4. Add to `.env` as `CMSSY_WORKSPACE_ID`
|
|
65
|
+
|
|
66
|
+
**Option 2: Using CLI**
|
|
67
|
+
1. Run `cmssy workspaces` to list all your workspaces
|
|
68
|
+
2. Copy the ID (MongoDB ObjectId format: 24-character hex string)
|
|
69
|
+
3. Add to `.env` as `CMSSY_WORKSPACE_ID`
|
|
70
|
+
|
|
58
71
|
Run `cmssy configure` for interactive setup.
|
|
59
72
|
|
|
60
73
|
## Commands
|
|
@@ -199,7 +212,7 @@ cmssy publish hero --marketplace
|
|
|
199
212
|
cmssy publish --all --marketplace --patch
|
|
200
213
|
|
|
201
214
|
# Publish to workspace (private, instant)
|
|
202
|
-
cmssy publish hero --workspace
|
|
215
|
+
cmssy publish hero --workspace 507f1f77bcf86cd799439011
|
|
203
216
|
cmssy publish --all --workspace
|
|
204
217
|
cmssy publish pricing --workspace --minor
|
|
205
218
|
|
|
@@ -280,7 +293,7 @@ cmssy upload hero-1.0.0 pricing-2.1.0
|
|
|
280
293
|
cmssy upload --all
|
|
281
294
|
|
|
282
295
|
# Specify workspace ID
|
|
283
|
-
cmssy upload --all --workspace
|
|
296
|
+
cmssy upload --all --workspace 507f1f77bcf86cd799439011
|
|
284
297
|
```
|
|
285
298
|
|
|
286
299
|
**Requirements:**
|
|
@@ -310,7 +323,7 @@ Pull blocks from Cmssy marketplace to local project.
|
|
|
310
323
|
**Example:**
|
|
311
324
|
```bash
|
|
312
325
|
cmssy sync @vendor/blocks.hero
|
|
313
|
-
cmssy sync @vendor/blocks.hero --workspace
|
|
326
|
+
cmssy sync @vendor/blocks.hero --workspace 507f1f77bcf86cd799439011
|
|
314
327
|
```
|
|
315
328
|
|
|
316
329
|
---
|
|
@@ -339,6 +352,47 @@ cmssy migrate
|
|
|
339
352
|
|
|
340
353
|
---
|
|
341
354
|
|
|
355
|
+
### List Workspaces
|
|
356
|
+
|
|
357
|
+
```bash
|
|
358
|
+
cmssy workspaces
|
|
359
|
+
```
|
|
360
|
+
|
|
361
|
+
List all workspaces you have access to and get their IDs.
|
|
362
|
+
|
|
363
|
+
**Example:**
|
|
364
|
+
```bash
|
|
365
|
+
cmssy workspaces
|
|
366
|
+
```
|
|
367
|
+
|
|
368
|
+
**Output:**
|
|
369
|
+
```
|
|
370
|
+
š Your Workspaces (2):
|
|
371
|
+
|
|
372
|
+
Acme Corporation
|
|
373
|
+
Slug: acme-corp
|
|
374
|
+
ID: 507f1f77bcf86cd799439011
|
|
375
|
+
Role: owner
|
|
376
|
+
|
|
377
|
+
Team Project
|
|
378
|
+
Slug: team-project
|
|
379
|
+
ID: 673e4f3b2e8d9c1a4b5f6e8d
|
|
380
|
+
Role: member
|
|
381
|
+
|
|
382
|
+
š” Tip: Copy the ID above and add to .env:
|
|
383
|
+
CMSSY_WORKSPACE_ID=507f1f77bcf86cd799439011
|
|
384
|
+
```
|
|
385
|
+
|
|
386
|
+
**Use this command to:**
|
|
387
|
+
- Find your workspace IDs for publishing
|
|
388
|
+
- See your role in each workspace
|
|
389
|
+
- Copy workspace ID to `.env` for CLI usage
|
|
390
|
+
|
|
391
|
+
**Requirements:**
|
|
392
|
+
- API token must be configured (run `cmssy configure` first)
|
|
393
|
+
|
|
394
|
+
---
|
|
395
|
+
|
|
342
396
|
## Project Structure
|
|
343
397
|
|
|
344
398
|
```
|
|
@@ -435,7 +489,7 @@ For teams with private block libraries:
|
|
|
435
489
|
cmssy build
|
|
436
490
|
|
|
437
491
|
# 2. Publish to workspace
|
|
438
|
-
cmssy publish --all --workspace
|
|
492
|
+
cmssy publish --all --workspace 507f1f77bcf86cd799439011 --patch
|
|
439
493
|
|
|
440
494
|
# 3. Instantly available in your workspace
|
|
441
495
|
```
|
|
@@ -461,7 +515,7 @@ For manual distribution or custom upload:
|
|
|
461
515
|
cmssy package --all
|
|
462
516
|
|
|
463
517
|
# 2. Option A: Upload via CLI
|
|
464
|
-
cmssy upload --all --workspace
|
|
518
|
+
cmssy upload --all --workspace 507f1f77bcf86cd799439011
|
|
465
519
|
|
|
466
520
|
# 2. Option B: Upload manually
|
|
467
521
|
# - Go to http://localhost:3000/workspace/cmssy/resources/add-external
|
|
@@ -481,7 +535,7 @@ cmssy upload --all --workspace ws_abc123
|
|
|
481
535
|
|----------|----------|-------------|---------|
|
|
482
536
|
| `CMSSY_API_URL` | Yes (for publish/upload) | Cmssy API GraphQL endpoint | `https://api.cmssy.io/graphql` |
|
|
483
537
|
| `CMSSY_API_TOKEN` | Yes (for publish/upload) | API authentication token | `cmssy_abc123...` |
|
|
484
|
-
| `CMSSY_WORKSPACE_ID` | No | Default workspace ID | `
|
|
538
|
+
| `CMSSY_WORKSPACE_ID` | No | Default workspace ID (MongoDB ObjectId) | `507f1f77bcf86cd799439011` |
|
|
485
539
|
|
|
486
540
|
## Requirements
|
|
487
541
|
|
|
@@ -529,7 +583,10 @@ cmssy create block cta
|
|
|
529
583
|
|
|
530
584
|
# Configure API with workspace
|
|
531
585
|
cmssy configure
|
|
532
|
-
|
|
586
|
+
|
|
587
|
+
# List workspaces and get workspace ID
|
|
588
|
+
cmssy workspaces
|
|
589
|
+
# Copy workspace ID and add to .env: CMSSY_WORKSPACE_ID=507f1f77bcf86cd799439011
|
|
533
590
|
|
|
534
591
|
# Develop and test
|
|
535
592
|
cmssy dev
|
|
@@ -550,7 +607,7 @@ cmssy package --all
|
|
|
550
607
|
# Distribute ZIP files
|
|
551
608
|
# - Upload manually to Cmssy workspace UI
|
|
552
609
|
# - Or use upload command:
|
|
553
|
-
cmssy upload --all --workspace
|
|
610
|
+
cmssy upload --all --workspace 507f1f77bcf86cd799439011
|
|
554
611
|
|
|
555
612
|
# Or share packages/hero-1.0.0.zip with team
|
|
556
613
|
```
|
|
@@ -563,7 +620,18 @@ cmssy upload --all --workspace ws_abc123
|
|
|
563
620
|
Run `cmssy configure` or manually add `CMSSY_API_TOKEN` to `.env`
|
|
564
621
|
|
|
565
622
|
### "Workspace ID required"
|
|
566
|
-
|
|
623
|
+
**Option 1: From UI**
|
|
624
|
+
1. Go to Workspace Settings ā General
|
|
625
|
+
2. Copy workspace ID using the copy button
|
|
626
|
+
3. Add to `.env`: `CMSSY_WORKSPACE_ID=507f1f77bcf86cd799439011`
|
|
627
|
+
|
|
628
|
+
**Option 2: From CLI**
|
|
629
|
+
1. Run `cmssy workspaces` to list your workspaces
|
|
630
|
+
2. Copy the workspace ID (24-character hex string like `507f1f77bcf86cd799439011`)
|
|
631
|
+
3. Add to `.env`: `CMSSY_WORKSPACE_ID=507f1f77bcf86cd799439011`
|
|
632
|
+
|
|
633
|
+
**Option 3: Use flag**
|
|
634
|
+
- Use `--workspace 507f1f77bcf86cd799439011` flag in commands
|
|
567
635
|
|
|
568
636
|
### "Specify publish target"
|
|
569
637
|
Must use either `--marketplace` OR `--workspace` when publishing
|
package/dist/cli.js
CHANGED
|
@@ -10,11 +10,12 @@ import { migrateCommand } from "./commands/migrate.js";
|
|
|
10
10
|
import { publishCommand } from "./commands/publish.js";
|
|
11
11
|
import { packageCommand } from "./commands/package.js";
|
|
12
12
|
import { uploadCommand } from "./commands/upload.js";
|
|
13
|
+
import { workspacesCommand } from "./commands/workspaces.js";
|
|
13
14
|
const program = new Command();
|
|
14
15
|
program
|
|
15
16
|
.name("cmssy")
|
|
16
17
|
.description("Unified CLI for building and publishing blocks to Cmssy marketplace")
|
|
17
|
-
.version("0.
|
|
18
|
+
.version("0.10.1");
|
|
18
19
|
// cmssy init
|
|
19
20
|
program
|
|
20
21
|
.command("init")
|
|
@@ -92,5 +93,10 @@ program
|
|
|
92
93
|
.option("-w, --workspace <id>", "Workspace ID to upload to")
|
|
93
94
|
.option("--all", "Upload all packages from packages directory")
|
|
94
95
|
.action(uploadCommand);
|
|
96
|
+
// cmssy workspaces
|
|
97
|
+
program
|
|
98
|
+
.command("workspaces")
|
|
99
|
+
.description("List your workspaces and get workspace IDs")
|
|
100
|
+
.action(workspacesCommand);
|
|
95
101
|
program.parse();
|
|
96
102
|
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspaces.d.ts","sourceRoot":"","sources":["../../src/commands/workspaces.ts"],"names":[],"mappings":"AAsBA,wBAAsB,iBAAiB,kBAkEtC"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import chalk from "chalk";
|
|
2
|
+
import { loadConfig } from "../utils/config.js";
|
|
3
|
+
import { GraphQLClient } from "graphql-request";
|
|
4
|
+
const MY_WORKSPACES_QUERY = `
|
|
5
|
+
query MyWorkspaces {
|
|
6
|
+
myWorkspaces {
|
|
7
|
+
id
|
|
8
|
+
slug
|
|
9
|
+
name
|
|
10
|
+
myRole
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
`;
|
|
14
|
+
export async function workspacesCommand() {
|
|
15
|
+
const config = loadConfig();
|
|
16
|
+
if (!config.apiToken) {
|
|
17
|
+
console.error(chalk.red("ā API token not configured. Run:") +
|
|
18
|
+
chalk.white("\n cmssy configure"));
|
|
19
|
+
process.exit(1);
|
|
20
|
+
}
|
|
21
|
+
try {
|
|
22
|
+
const client = new GraphQLClient(config.apiUrl, {
|
|
23
|
+
headers: {
|
|
24
|
+
"Content-Type": "application/json",
|
|
25
|
+
Authorization: `Bearer ${config.apiToken}`,
|
|
26
|
+
},
|
|
27
|
+
});
|
|
28
|
+
const data = await client.request(MY_WORKSPACES_QUERY);
|
|
29
|
+
const workspaces = data.myWorkspaces || [];
|
|
30
|
+
if (workspaces.length === 0) {
|
|
31
|
+
console.log(chalk.yellow("\nā No workspaces found"));
|
|
32
|
+
console.log(chalk.gray("Create a workspace at https://cmssy.io or ask for an invitation"));
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
console.log(chalk.blue(`\nš Your Workspaces (${workspaces.length}):\n`));
|
|
36
|
+
for (const workspace of workspaces) {
|
|
37
|
+
const roleColor = workspace.myRole === "owner"
|
|
38
|
+
? chalk.green
|
|
39
|
+
: workspace.myRole === "admin"
|
|
40
|
+
? chalk.blue
|
|
41
|
+
: chalk.gray;
|
|
42
|
+
console.log(chalk.white.bold(workspace.name));
|
|
43
|
+
console.log(chalk.gray(` Slug: ${workspace.slug}`));
|
|
44
|
+
console.log(chalk.cyan(` ID: ${workspace.id}`));
|
|
45
|
+
console.log(roleColor(` Role: ${workspace.myRole}`));
|
|
46
|
+
console.log();
|
|
47
|
+
}
|
|
48
|
+
console.log(chalk.gray("š” Tip: Copy the ID above and add to .env:"));
|
|
49
|
+
console.log(chalk.white(` CMSSY_WORKSPACE_ID=${workspaces[0].id}`));
|
|
50
|
+
console.log();
|
|
51
|
+
}
|
|
52
|
+
catch (error) {
|
|
53
|
+
console.error(chalk.red(`ā Failed to fetch workspaces: ${error.message}`));
|
|
54
|
+
if (error.response?.errors) {
|
|
55
|
+
for (const err of error.response.errors) {
|
|
56
|
+
console.error(chalk.red(` - ${err.message}`));
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
process.exit(1);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=workspaces.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspaces.js","sourceRoot":"","sources":["../../src/commands/workspaces.ts"],"names":[],"mappings":"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"}
|