cmssy-cli 0.9.0 ā 0.10.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.
- package/README.md +63 -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,11 @@ 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
|
+
1. Run `cmssy workspaces` to list all your workspaces
|
|
60
|
+
2. Copy the ID (MongoDB ObjectId format: 24-character hex string)
|
|
61
|
+
3. Add to `.env` as `CMSSY_WORKSPACE_ID`
|
|
62
|
+
|
|
58
63
|
Run `cmssy configure` for interactive setup.
|
|
59
64
|
|
|
60
65
|
## Commands
|
|
@@ -199,7 +204,7 @@ cmssy publish hero --marketplace
|
|
|
199
204
|
cmssy publish --all --marketplace --patch
|
|
200
205
|
|
|
201
206
|
# Publish to workspace (private, instant)
|
|
202
|
-
cmssy publish hero --workspace
|
|
207
|
+
cmssy publish hero --workspace 507f1f77bcf86cd799439011
|
|
203
208
|
cmssy publish --all --workspace
|
|
204
209
|
cmssy publish pricing --workspace --minor
|
|
205
210
|
|
|
@@ -280,7 +285,7 @@ cmssy upload hero-1.0.0 pricing-2.1.0
|
|
|
280
285
|
cmssy upload --all
|
|
281
286
|
|
|
282
287
|
# Specify workspace ID
|
|
283
|
-
cmssy upload --all --workspace
|
|
288
|
+
cmssy upload --all --workspace 507f1f77bcf86cd799439011
|
|
284
289
|
```
|
|
285
290
|
|
|
286
291
|
**Requirements:**
|
|
@@ -310,7 +315,7 @@ Pull blocks from Cmssy marketplace to local project.
|
|
|
310
315
|
**Example:**
|
|
311
316
|
```bash
|
|
312
317
|
cmssy sync @vendor/blocks.hero
|
|
313
|
-
cmssy sync @vendor/blocks.hero --workspace
|
|
318
|
+
cmssy sync @vendor/blocks.hero --workspace 507f1f77bcf86cd799439011
|
|
314
319
|
```
|
|
315
320
|
|
|
316
321
|
---
|
|
@@ -339,6 +344,47 @@ cmssy migrate
|
|
|
339
344
|
|
|
340
345
|
---
|
|
341
346
|
|
|
347
|
+
### List Workspaces
|
|
348
|
+
|
|
349
|
+
```bash
|
|
350
|
+
cmssy workspaces
|
|
351
|
+
```
|
|
352
|
+
|
|
353
|
+
List all workspaces you have access to and get their IDs.
|
|
354
|
+
|
|
355
|
+
**Example:**
|
|
356
|
+
```bash
|
|
357
|
+
cmssy workspaces
|
|
358
|
+
```
|
|
359
|
+
|
|
360
|
+
**Output:**
|
|
361
|
+
```
|
|
362
|
+
š Your Workspaces (2):
|
|
363
|
+
|
|
364
|
+
Acme Corporation
|
|
365
|
+
Slug: acme-corp
|
|
366
|
+
ID: 507f1f77bcf86cd799439011
|
|
367
|
+
Role: owner
|
|
368
|
+
|
|
369
|
+
Team Project
|
|
370
|
+
Slug: team-project
|
|
371
|
+
ID: 673e4f3b2e8d9c1a4b5f6e8d
|
|
372
|
+
Role: member
|
|
373
|
+
|
|
374
|
+
š” Tip: Copy the ID above and add to .env:
|
|
375
|
+
CMSSY_WORKSPACE_ID=507f1f77bcf86cd799439011
|
|
376
|
+
```
|
|
377
|
+
|
|
378
|
+
**Use this command to:**
|
|
379
|
+
- Find your workspace IDs for publishing
|
|
380
|
+
- See your role in each workspace
|
|
381
|
+
- Copy workspace ID to `.env` for CLI usage
|
|
382
|
+
|
|
383
|
+
**Requirements:**
|
|
384
|
+
- API token must be configured (run `cmssy configure` first)
|
|
385
|
+
|
|
386
|
+
---
|
|
387
|
+
|
|
342
388
|
## Project Structure
|
|
343
389
|
|
|
344
390
|
```
|
|
@@ -435,7 +481,7 @@ For teams with private block libraries:
|
|
|
435
481
|
cmssy build
|
|
436
482
|
|
|
437
483
|
# 2. Publish to workspace
|
|
438
|
-
cmssy publish --all --workspace
|
|
484
|
+
cmssy publish --all --workspace 507f1f77bcf86cd799439011 --patch
|
|
439
485
|
|
|
440
486
|
# 3. Instantly available in your workspace
|
|
441
487
|
```
|
|
@@ -461,7 +507,7 @@ For manual distribution or custom upload:
|
|
|
461
507
|
cmssy package --all
|
|
462
508
|
|
|
463
509
|
# 2. Option A: Upload via CLI
|
|
464
|
-
cmssy upload --all --workspace
|
|
510
|
+
cmssy upload --all --workspace 507f1f77bcf86cd799439011
|
|
465
511
|
|
|
466
512
|
# 2. Option B: Upload manually
|
|
467
513
|
# - Go to http://localhost:3000/workspace/cmssy/resources/add-external
|
|
@@ -481,7 +527,7 @@ cmssy upload --all --workspace ws_abc123
|
|
|
481
527
|
|----------|----------|-------------|---------|
|
|
482
528
|
| `CMSSY_API_URL` | Yes (for publish/upload) | Cmssy API GraphQL endpoint | `https://api.cmssy.io/graphql` |
|
|
483
529
|
| `CMSSY_API_TOKEN` | Yes (for publish/upload) | API authentication token | `cmssy_abc123...` |
|
|
484
|
-
| `CMSSY_WORKSPACE_ID` | No | Default workspace ID | `
|
|
530
|
+
| `CMSSY_WORKSPACE_ID` | No | Default workspace ID (MongoDB ObjectId) | `507f1f77bcf86cd799439011` |
|
|
485
531
|
|
|
486
532
|
## Requirements
|
|
487
533
|
|
|
@@ -529,7 +575,10 @@ cmssy create block cta
|
|
|
529
575
|
|
|
530
576
|
# Configure API with workspace
|
|
531
577
|
cmssy configure
|
|
532
|
-
|
|
578
|
+
|
|
579
|
+
# List workspaces and get workspace ID
|
|
580
|
+
cmssy workspaces
|
|
581
|
+
# Copy workspace ID and add to .env: CMSSY_WORKSPACE_ID=507f1f77bcf86cd799439011
|
|
533
582
|
|
|
534
583
|
# Develop and test
|
|
535
584
|
cmssy dev
|
|
@@ -550,7 +599,7 @@ cmssy package --all
|
|
|
550
599
|
# Distribute ZIP files
|
|
551
600
|
# - Upload manually to Cmssy workspace UI
|
|
552
601
|
# - Or use upload command:
|
|
553
|
-
cmssy upload --all --workspace
|
|
602
|
+
cmssy upload --all --workspace 507f1f77bcf86cd799439011
|
|
554
603
|
|
|
555
604
|
# Or share packages/hero-1.0.0.zip with team
|
|
556
605
|
```
|
|
@@ -563,7 +612,10 @@ cmssy upload --all --workspace ws_abc123
|
|
|
563
612
|
Run `cmssy configure` or manually add `CMSSY_API_TOKEN` to `.env`
|
|
564
613
|
|
|
565
614
|
### "Workspace ID required"
|
|
566
|
-
|
|
615
|
+
1. Run `cmssy workspaces` to list your workspaces
|
|
616
|
+
2. Copy the workspace ID (24-character hex string like `507f1f77bcf86cd799439011`)
|
|
617
|
+
3. Add to `.env`: `CMSSY_WORKSPACE_ID=507f1f77bcf86cd799439011`
|
|
618
|
+
4. Or use `--workspace 507f1f77bcf86cd799439011` flag in commands
|
|
567
619
|
|
|
568
620
|
### "Specify publish target"
|
|
569
621
|
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.0");
|
|
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":";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;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE7D,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,OAAO,CAAC;KACb,WAAW,CACV,qEAAqE,CACtE;KACA,OAAO,CAAC,QAAQ,CAAC,CAAC;AAErB,aAAa;AACb,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,gCAAgC,CAAC;KAC7C,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;KAClC,MAAM,CACL,6BAA6B,EAC7B,0CAA0C,EAC1C,OAAO,CACR;KACA,MAAM,CAAC,WAAW,CAAC,CAAC;AAEvB,eAAe;AACf,MAAM,MAAM,GAAG,OAAO;KACnB,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,gCAAgC,CAAC,CAAC;AAEjD,MAAM;KACH,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,oBAAoB,CAAC;KACjC,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC;KAChC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;AAE/B,MAAM;KACH,OAAO,CAAC,UAAU,CAAC;KACnB,WAAW,CAAC,4BAA4B,CAAC;KACzC,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAAC;KACnC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;AAE9B,cAAc;AACd,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,gCAAgC,CAAC;KAC7C,MAAM,CAAC,yBAAyB,EAAE,kBAAkB,CAAC;KACrD,MAAM,CAAC,YAAY,CAAC,CAAC;AAExB,YAAY;AACZ,OAAO;KACJ,OAAO,CAAC,KAAK,CAAC;KACd,WAAW,CAAC,uCAAuC,CAAC;KACpD,MAAM,CAAC,mBAAmB,EAAE,aAAa,EAAE,MAAM,CAAC;KAClD,MAAM,CAAC,UAAU,CAAC,CAAC;AAEtB,kBAAkB;AAClB,OAAO;KACJ,OAAO,CAAC,WAAW,CAAC;KACpB,WAAW,CAAC,iCAAiC,CAAC;KAC9C,MAAM,CAAC,iBAAiB,EAAE,eAAe,EAAE,8BAA8B,CAAC;KAC1E,MAAM,CAAC,gBAAgB,CAAC,CAAC;AAE5B,gBAAgB;AAChB,OAAO;KACJ,OAAO,CAAC,uBAAuB,CAAC;KAChC,WAAW,CAAC,sDAAsD,CAAC;KACnE,MAAM,CAAC,mBAAmB,EAAE,iDAAiD,CAAC;KAC9E,MAAM,CAAC,sBAAsB,EAAE,2CAA2C,CAAC;KAC3E,MAAM,CAAC,OAAO,EAAE,kCAAkC,CAAC;KACnD,MAAM,CAAC,SAAS,EAAE,qCAAqC,CAAC;KACxD,MAAM,CAAC,SAAS,EAAE,qCAAqC,CAAC;KACxD,MAAM,CAAC,SAAS,EAAE,qCAAqC,CAAC;KACxD,MAAM,CAAC,WAAW,EAAE,mDAAmD,CAAC;KACxE,MAAM,CAAC,cAAc,CAAC,CAAC;AAE1B,aAAa;AACb,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,qDAAqD,CAAC;KAClE,QAAQ,CAAC,WAAW,EAAE,kDAAkD,CAAC;KACzE,MAAM,CAAC,kBAAkB,EAAE,2BAA2B,CAAC;KACvD,MAAM,CAAC,WAAW,CAAC,CAAC;AAEvB,gBAAgB;AAChB,OAAO;KACJ,OAAO,CAAC,sBAAsB,CAAC;KAC/B,WAAW,CAAC,4DAA4D,CAAC;KACzE,MAAM,CAAC,cAAc,CAAC,CAAC;AAE1B,gBAAgB;AAChB,OAAO;KACJ,OAAO,CAAC,uBAAuB,CAAC;KAChC,WAAW,CAAC,yCAAyC,CAAC;KACtD,MAAM,CAAC,OAAO,EAAE,kCAAkC,CAAC;KACnD,MAAM,CAAC,oBAAoB,EAAE,kBAAkB,EAAE,UAAU,CAAC;KAC5D,MAAM,CAAC,cAAc,CAAC,CAAC;AAE1B,eAAe;AACf,OAAO;KACJ,OAAO,CAAC,mBAAmB,CAAC;KAC5B,WAAW,CAAC,wCAAwC,CAAC;KACrD,MAAM,CAAC,sBAAsB,EAAE,2BAA2B,CAAC;KAC3D,MAAM,CAAC,OAAO,EAAE,6CAA6C,CAAC;KAC9D,MAAM,CAAC,aAAa,CAAC,CAAC;AAEzB,mBAAmB;AACnB,OAAO;KACJ,OAAO,CAAC,YAAY,CAAC;KACrB,WAAW,CAAC,4CAA4C,CAAC;KACzD,MAAM,CAAC,iBAAiB,CAAC,CAAC;AAE7B,OAAO,CAAC,KAAK,EAAE,CAAC"}
|
|
@@ -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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"}
|