decoupled-cli 2.0.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 (55) hide show
  1. package/README.md +416 -0
  2. package/bin/decoupled-cli +3 -0
  3. package/dist/commands/auth.d.ts +3 -0
  4. package/dist/commands/auth.d.ts.map +1 -0
  5. package/dist/commands/auth.js +386 -0
  6. package/dist/commands/auth.js.map +1 -0
  7. package/dist/commands/config.d.ts +3 -0
  8. package/dist/commands/config.d.ts.map +1 -0
  9. package/dist/commands/config.js +84 -0
  10. package/dist/commands/config.js.map +1 -0
  11. package/dist/commands/content.d.ts +3 -0
  12. package/dist/commands/content.d.ts.map +1 -0
  13. package/dist/commands/content.js +199 -0
  14. package/dist/commands/content.js.map +1 -0
  15. package/dist/commands/download.d.ts +4 -0
  16. package/dist/commands/download.d.ts.map +1 -0
  17. package/dist/commands/download.js +127 -0
  18. package/dist/commands/download.js.map +1 -0
  19. package/dist/commands/health.d.ts +3 -0
  20. package/dist/commands/health.d.ts.map +1 -0
  21. package/dist/commands/health.js +28 -0
  22. package/dist/commands/health.js.map +1 -0
  23. package/dist/commands/org.d.ts +3 -0
  24. package/dist/commands/org.d.ts.map +1 -0
  25. package/dist/commands/org.js +73 -0
  26. package/dist/commands/org.js.map +1 -0
  27. package/dist/commands/spaces.d.ts +3 -0
  28. package/dist/commands/spaces.d.ts.map +1 -0
  29. package/dist/commands/spaces.js +613 -0
  30. package/dist/commands/spaces.js.map +1 -0
  31. package/dist/commands/tokens.d.ts +3 -0
  32. package/dist/commands/tokens.d.ts.map +1 -0
  33. package/dist/commands/tokens.js +90 -0
  34. package/dist/commands/tokens.js.map +1 -0
  35. package/dist/commands/usage.d.ts +3 -0
  36. package/dist/commands/usage.d.ts.map +1 -0
  37. package/dist/commands/usage.js +104 -0
  38. package/dist/commands/usage.js.map +1 -0
  39. package/dist/index.d.ts +3 -0
  40. package/dist/index.d.ts.map +1 -0
  41. package/dist/index.js +49 -0
  42. package/dist/index.js.map +1 -0
  43. package/dist/lib/api.d.ts +40 -0
  44. package/dist/lib/api.d.ts.map +1 -0
  45. package/dist/lib/api.js +162 -0
  46. package/dist/lib/api.js.map +1 -0
  47. package/dist/lib/config.d.ts +63 -0
  48. package/dist/lib/config.d.ts.map +1 -0
  49. package/dist/lib/config.js +317 -0
  50. package/dist/lib/config.js.map +1 -0
  51. package/examples/.cursorrules +189 -0
  52. package/examples/CLAUDE.md +1080 -0
  53. package/examples/GEMINI.md +1056 -0
  54. package/examples/content-import-sample.json +114 -0
  55. package/package.json +55 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokens.d.ts","sourceRoot":"","sources":["../../src/commands/tokens.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,eAAO,MAAM,aAAa,SACS,CAAC"}
@@ -0,0 +1,90 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.tokensCommand = void 0;
7
+ const commander_1 = require("commander");
8
+ const chalk_1 = __importDefault(require("chalk"));
9
+ const cli_table3_1 = __importDefault(require("cli-table3"));
10
+ const api_1 = require("../lib/api");
11
+ exports.tokensCommand = new commander_1.Command('tokens')
12
+ .description('Manage API tokens');
13
+ exports.tokensCommand
14
+ .command('list')
15
+ .description('List all tokens')
16
+ .option('--detailed', 'show detailed information')
17
+ .option('--json', 'output as JSON')
18
+ .action(async (options) => {
19
+ try {
20
+ const client = await (0, api_1.createApiClient)();
21
+ const tokens = await client.getTokens();
22
+ if (options.json) {
23
+ console.log(JSON.stringify(tokens, null, 2));
24
+ }
25
+ else {
26
+ console.log(chalk_1.default.bold('\nšŸ”‘ API Tokens'));
27
+ console.log('─────────────');
28
+ if (tokens.tokens && tokens.tokens.length > 0) {
29
+ const table = new cli_table3_1.default({
30
+ head: [
31
+ chalk_1.default.cyan('ID'),
32
+ chalk_1.default.cyan('Name'),
33
+ chalk_1.default.cyan('Status'),
34
+ chalk_1.default.cyan('Expires'),
35
+ chalk_1.default.cyan('Created')
36
+ ],
37
+ style: {
38
+ head: [],
39
+ border: []
40
+ }
41
+ });
42
+ tokens.tokens.forEach((token) => {
43
+ const statusColor = token.isActive ? chalk_1.default.green : chalk_1.default.red;
44
+ const status = token.isActive ? 'Active' : 'Inactive';
45
+ const expires = token.expiresAt ? new Date(token.expiresAt).toLocaleDateString() : 'Never';
46
+ const created = new Date(token.createdAt).toLocaleDateString();
47
+ table.push([
48
+ token.id.toString(),
49
+ token.name,
50
+ statusColor(status),
51
+ expires,
52
+ created
53
+ ]);
54
+ });
55
+ console.log(table.toString());
56
+ }
57
+ else {
58
+ console.log(chalk_1.default.gray('No tokens found. Note: Token-based authentication cannot list tokens for security reasons.'));
59
+ }
60
+ }
61
+ }
62
+ catch (error) {
63
+ if (error instanceof Error && (error.message.includes('Token-based authentication cannot manage tokens') ||
64
+ error.message.includes('Insufficient permissions for this operation'))) {
65
+ console.log(chalk_1.default.yellow('āš ļø Token-based authentication cannot list tokens for security reasons.'));
66
+ console.log(chalk_1.default.gray('Use session-based authentication in the web interface to manage tokens.'));
67
+ }
68
+ else {
69
+ console.error(chalk_1.default.red('āŒ Failed to list tokens:'), error instanceof Error ? error.message : String(error));
70
+ process.exit(1);
71
+ }
72
+ }
73
+ });
74
+ exports.tokensCommand
75
+ .command('create <name>')
76
+ .description('Create a new token')
77
+ .option('--preset <preset>', 'permission preset (read-only, spaces-manager, full-access)')
78
+ .option('--permissions <permissions>', 'custom permissions (comma-separated)')
79
+ .option('--expires <date>', 'expiration date (YYYY-MM-DD)')
80
+ .action(async (name, options) => {
81
+ try {
82
+ console.log(chalk_1.default.yellow('āš ļø Token creation is only available through session-based authentication.'));
83
+ console.log(chalk_1.default.gray('Please use the web interface to create new tokens for security reasons.'));
84
+ }
85
+ catch (error) {
86
+ console.error(chalk_1.default.red('āŒ Failed to create token:'), error instanceof Error ? error.message : String(error));
87
+ process.exit(1);
88
+ }
89
+ });
90
+ //# sourceMappingURL=tokens.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokens.js","sourceRoot":"","sources":["../../src/commands/tokens.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const usageCommand: Command;
3
+ //# sourceMappingURL=usage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usage.d.ts","sourceRoot":"","sources":["../../src/commands/usage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,eAAO,MAAM,YAAY,SAgErB,CAAC"}
@@ -0,0 +1,104 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.usageCommand = void 0;
7
+ const commander_1 = require("commander");
8
+ const chalk_1 = __importDefault(require("chalk"));
9
+ const cli_table3_1 = __importDefault(require("cli-table3"));
10
+ const api_1 = require("../lib/api");
11
+ exports.usageCommand = new commander_1.Command('usage')
12
+ .description('View usage statistics')
13
+ .option('--breakdown', 'show usage breakdown by space')
14
+ .option('--json', 'output as JSON')
15
+ .action(async (options) => {
16
+ try {
17
+ const client = await (0, api_1.createApiClient)();
18
+ const usage = await client.getUsage();
19
+ if (options.json) {
20
+ console.log(JSON.stringify(usage, null, 2));
21
+ }
22
+ else {
23
+ console.log(chalk_1.default.bold('\nšŸ“Š Organization Usage'));
24
+ console.log('─────────────────────');
25
+ if (usage.organizationUsage) {
26
+ const orgUsage = usage.organizationUsage;
27
+ console.log(`Content Types: ${chalk_1.default.cyan(orgUsage.content_types || 0)}`);
28
+ console.log(`Entities: ${chalk_1.default.cyan(orgUsage.entities?.total || 0)}`);
29
+ console.log(`Storage: ${chalk_1.default.cyan(`${orgUsage.storage?.total_mb || 0} MB`)}`);
30
+ console.log(`Bandwidth: ${chalk_1.default.cyan(`${orgUsage.bandwidth?.monthly_gb || 0} GB`)}`);
31
+ console.log(`API Requests: ${chalk_1.default.cyan(orgUsage.api_requests?.total_monthly || 0)}`);
32
+ console.log(`Users: ${chalk_1.default.cyan(orgUsage.users || 0)}`);
33
+ if (options.breakdown && usage.spaceUsage) {
34
+ console.log(chalk_1.default.bold('\nšŸ“¦ Usage by Space'));
35
+ console.log('─────────────────');
36
+ const table = new cli_table3_1.default({
37
+ head: [
38
+ chalk_1.default.cyan('Space'),
39
+ chalk_1.default.cyan('Content Types'),
40
+ chalk_1.default.cyan('Entities'),
41
+ chalk_1.default.cyan('Storage (MB)'),
42
+ chalk_1.default.cyan('Bandwidth (GB)'),
43
+ chalk_1.default.cyan('Users')
44
+ ],
45
+ style: {
46
+ head: [],
47
+ border: []
48
+ }
49
+ });
50
+ usage.spaceUsage.forEach((space) => {
51
+ table.push([
52
+ space.spaceName,
53
+ space.usage.content_types || 0,
54
+ space.usage.entities?.total || 0,
55
+ space.usage.storage?.total_mb || 0,
56
+ space.usage.bandwidth?.monthly_gb || 0,
57
+ space.usage.users || 0
58
+ ]);
59
+ });
60
+ console.log(table.toString());
61
+ }
62
+ }
63
+ else {
64
+ console.log(chalk_1.default.gray('No usage data available.'));
65
+ }
66
+ }
67
+ }
68
+ catch (error) {
69
+ console.error(chalk_1.default.red('āŒ Failed to get usage:'), error instanceof Error ? error.message : String(error));
70
+ process.exit(1);
71
+ }
72
+ });
73
+ exports.usageCommand
74
+ .command('space <id>')
75
+ .description('View usage for a specific space')
76
+ .option('--history', 'show usage history')
77
+ .option('--json', 'output as JSON')
78
+ .action(async (id, options) => {
79
+ try {
80
+ const client = await (0, api_1.createApiClient)();
81
+ const usage = await client.getSpaceUsage(parseInt(id));
82
+ if (options.json) {
83
+ console.log(JSON.stringify(usage, null, 2));
84
+ }
85
+ else {
86
+ console.log(chalk_1.default.bold(`\nšŸ“Š Space Usage (ID: ${id})`));
87
+ console.log('──────────────────────');
88
+ if (usage.usage) {
89
+ console.log(`Storage: ${chalk_1.default.cyan(usage.usage.storage || '0 MB')}`);
90
+ console.log(`Bandwidth: ${chalk_1.default.cyan(usage.usage.bandwidth || '0 MB')}`);
91
+ console.log(`Compute Hours: ${chalk_1.default.cyan(usage.usage.computeHours || '0 hours')}`);
92
+ console.log(`Last Updated: ${chalk_1.default.gray(usage.usage.lastUpdated ? new Date(usage.usage.lastUpdated).toLocaleString() : 'N/A')}`);
93
+ }
94
+ else {
95
+ console.log(chalk_1.default.gray('No usage data available for this space.'));
96
+ }
97
+ }
98
+ }
99
+ catch (error) {
100
+ console.error(chalk_1.default.red('āŒ Failed to get space usage:'), error instanceof Error ? error.message : String(error));
101
+ process.exit(1);
102
+ }
103
+ });
104
+ //# sourceMappingURL=usage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usage.js","sourceRoot":"","sources":["../../src/commands/usage.ts"],"names":[],"mappings":";;;;;;AAAA,yCAAoC;AACpC,kDAA0B;AAC1B,4DAA+B;AAC/B,oCAA6C;AAEhC,QAAA,YAAY,GAAG,IAAI,mBAAO,CAAC,OAAO,CAAC;KAC7C,WAAW,CAAC,uBAAuB,CAAC;KACpC,MAAM,CAAC,aAAa,EAAE,+BAA+B,CAAC;KACtD,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;KAClC,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,IAAA,qBAAe,GAAE,CAAC;QACvC,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,QAAQ,EAAE,CAAC;QAEtC,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC9C,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC;YACnD,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;YAErC,IAAI,KAAK,CAAC,iBAAiB,EAAE,CAAC;gBAC5B,MAAM,QAAQ,GAAG,KAAK,CAAC,iBAAiB,CAAC;gBACzC,OAAO,CAAC,GAAG,CAAC,kBAAkB,eAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;gBACzE,OAAO,CAAC,GAAG,CAAC,aAAa,eAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,KAAK,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;gBACtE,OAAO,CAAC,GAAG,CAAC,YAAY,eAAK,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,OAAO,EAAE,QAAQ,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBAC/E,OAAO,CAAC,GAAG,CAAC,cAAc,eAAK,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,SAAS,EAAE,UAAU,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBACrF,OAAO,CAAC,GAAG,CAAC,iBAAiB,eAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,aAAa,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;gBACtF,OAAO,CAAC,GAAG,CAAC,UAAU,eAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;gBAEzD,IAAI,OAAO,CAAC,SAAS,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;oBAC1C,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC;oBAC/C,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;oBAEjC,MAAM,KAAK,GAAG,IAAI,oBAAK,CAAC;wBACtB,IAAI,EAAE;4BACJ,eAAK,CAAC,IAAI,CAAC,OAAO,CAAC;4BACnB,eAAK,CAAC,IAAI,CAAC,eAAe,CAAC;4BAC3B,eAAK,CAAC,IAAI,CAAC,UAAU,CAAC;4BACtB,eAAK,CAAC,IAAI,CAAC,cAAc,CAAC;4BAC1B,eAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC;4BAC5B,eAAK,CAAC,IAAI,CAAC,OAAO,CAAC;yBACpB;wBACD,KAAK,EAAE;4BACL,IAAI,EAAE,EAAE;4BACR,MAAM,EAAE,EAAE;yBACX;qBACF,CAAC,CAAC;oBAEH,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,KAAU,EAAE,EAAE;wBACtC,KAAK,CAAC,IAAI,CAAC;4BACT,KAAK,CAAC,SAAS;4BACf,KAAK,CAAC,KAAK,CAAC,aAAa,IAAI,CAAC;4BAC9B,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,IAAI,CAAC;4BAChC,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,QAAQ,IAAI,CAAC;4BAClC,KAAK,CAAC,KAAK,CAAC,SAAS,EAAE,UAAU,IAAI,CAAC;4BACtC,KAAK,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC;yBACvB,CAAC,CAAC;oBACL,CAAC,CAAC,CAAC;oBAEH,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;gBAChC,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC,CAAC;YACtD,CAAC;QACH,CAAC;IACH,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,wBAAwB,CAAC,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAC3G,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,oBAAY;KACT,OAAO,CAAC,YAAY,CAAC;KACrB,WAAW,CAAC,iCAAiC,CAAC;KAC9C,MAAM,CAAC,WAAW,EAAE,oBAAoB,CAAC;KACzC,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;KAClC,MAAM,CAAC,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE;IAC5B,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,IAAA,qBAAe,GAAE,CAAC;QACvC,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;QAEvD,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC9C,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,yBAAyB,EAAE,GAAG,CAAC,CAAC,CAAC;YACxD,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;YAEtC,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;gBAChB,OAAO,CAAC,GAAG,CAAC,YAAY,eAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,IAAI,MAAM,CAAC,EAAE,CAAC,CAAC;gBACrE,OAAO,CAAC,GAAG,CAAC,cAAc,eAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,IAAI,MAAM,CAAC,EAAE,CAAC,CAAC;gBACzE,OAAO,CAAC,GAAG,CAAC,kBAAkB,eAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,IAAI,SAAS,CAAC,EAAE,CAAC,CAAC;gBACnF,OAAO,CAAC,GAAG,CAAC,iBAAiB,eAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACnI,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC,CAAC;YACrE,CAAC;QACH,CAAC;IACH,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,8BAA8B,CAAC,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACjH,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,49 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ var __importDefault = (this && this.__importDefault) || function (mod) {
4
+ return (mod && mod.__esModule) ? mod : { "default": mod };
5
+ };
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ const commander_1 = require("commander");
8
+ const chalk_1 = __importDefault(require("chalk"));
9
+ const auth_1 = require("./commands/auth");
10
+ const spaces_1 = require("./commands/spaces");
11
+ const usage_1 = require("./commands/usage");
12
+ const org_1 = require("./commands/org");
13
+ const health_1 = require("./commands/health");
14
+ const config_1 = require("./commands/config");
15
+ const download_1 = require("./commands/download");
16
+ const content_1 = require("./commands/content");
17
+ const program = new commander_1.Command();
18
+ program
19
+ .name('dcloud')
20
+ .description('CLI for DrupalCloud API management')
21
+ .version('1.0.0')
22
+ .option('--profile <name>', 'use specific profile')
23
+ .option('--json', 'output as JSON')
24
+ .option('--quiet', 'suppress non-essential output')
25
+ .option('--verbose', 'show detailed output')
26
+ .option('--no-color', 'disable colored output')
27
+ .option('--timeout <seconds>', 'request timeout', '30');
28
+ // Add commands
29
+ program.addCommand(auth_1.authCommand);
30
+ program.addCommand(spaces_1.spacesCommand);
31
+ program.addCommand(usage_1.usageCommand);
32
+ program.addCommand(org_1.orgCommand);
33
+ program.addCommand(health_1.healthCommand);
34
+ program.addCommand(config_1.configCommand);
35
+ program.addCommand(download_1.downloadCommand);
36
+ program.addCommand(content_1.contentCommand);
37
+ // Handle unknown commands
38
+ program.on('command:*', () => {
39
+ console.error(chalk_1.default.red(`Invalid command: ${program.args.join(' ')}`));
40
+ console.log('See --help for a list of available commands.');
41
+ process.exit(1);
42
+ });
43
+ // Parse command line arguments
44
+ program.parse();
45
+ // If no command provided, show help
46
+ if (!process.argv.slice(2).length) {
47
+ program.outputHelp();
48
+ }
49
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;AAEA,yCAAoC;AACpC,kDAA0B;AAC1B,0CAA8C;AAC9C,8CAAkD;AAClD,4CAAgD;AAChD,wCAA4C;AAC5C,8CAAkD;AAClD,8CAAkD;AAClD,kDAAsD;AACtD,gDAAoD;AAEpD,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,QAAQ,CAAC;KACd,WAAW,CAAC,oCAAoC,CAAC;KACjD,OAAO,CAAC,OAAO,CAAC;KAChB,MAAM,CAAC,kBAAkB,EAAE,sBAAsB,CAAC;KAClD,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;KAClC,MAAM,CAAC,SAAS,EAAE,+BAA+B,CAAC;KAClD,MAAM,CAAC,WAAW,EAAE,sBAAsB,CAAC;KAC3C,MAAM,CAAC,YAAY,EAAE,wBAAwB,CAAC;KAC9C,MAAM,CAAC,qBAAqB,EAAE,iBAAiB,EAAE,IAAI,CAAC,CAAC;AAE1D,eAAe;AACf,OAAO,CAAC,UAAU,CAAC,kBAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,sBAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,oBAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,gBAAU,CAAC,CAAC;AAC/B,OAAO,CAAC,UAAU,CAAC,sBAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,sBAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,0BAAe,CAAC,CAAC;AACpC,OAAO,CAAC,UAAU,CAAC,wBAAc,CAAC,CAAC;AAEnC,0BAA0B;AAC1B,OAAO,CAAC,EAAE,CAAC,WAAW,EAAE,GAAG,EAAE;IAC3B,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,oBAAoB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IACvE,OAAO,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC;IAC5D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AAEH,+BAA+B;AAC/B,OAAO,CAAC,KAAK,EAAE,CAAC;AAEhB,oCAAoC;AACpC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAClC,OAAO,CAAC,UAAU,EAAE,CAAC;AACvB,CAAC"}
@@ -0,0 +1,40 @@
1
+ import { AxiosInstance } from 'axios';
2
+ export declare class ApiClient {
3
+ client: AxiosInstance;
4
+ private baseUrl;
5
+ private token;
6
+ constructor(baseUrl: string, token: string, timeout?: number, isOAuth?: boolean);
7
+ getSpaces(archived?: boolean): Promise<any>;
8
+ getSpace(id: number): Promise<any>;
9
+ createSpace(data: {
10
+ name: string;
11
+ type: string;
12
+ template: string;
13
+ description?: string;
14
+ }): Promise<any>;
15
+ updateSpace(id: number, data: {
16
+ name?: string;
17
+ type?: string;
18
+ }): Promise<any>;
19
+ deleteSpace(id: number): Promise<void>;
20
+ cloneSpace(id: number, data: {
21
+ name: string;
22
+ type?: string;
23
+ }): Promise<any>;
24
+ archiveSpace(id: number): Promise<void>;
25
+ unarchiveSpace(id: number): Promise<void>;
26
+ getSpaceStatus(id: number): Promise<any>;
27
+ getSpaceLoginLink(id: number): Promise<any>;
28
+ retrySpaceCreation(id: number): Promise<void>;
29
+ refreshSpaceUsage(id: number): Promise<void>;
30
+ getUsage(): Promise<any>;
31
+ getSpaceUsage(id: number): Promise<any>;
32
+ getOrganization(): Promise<any>;
33
+ getUsers(): Promise<any>;
34
+ inviteUser(email: string, role: string): Promise<any>;
35
+ healthCheck(): Promise<any>;
36
+ importContent(spaceId: number, importData: any, preview?: boolean): Promise<any>;
37
+ testAuth(): Promise<any>;
38
+ }
39
+ export declare function createApiClient(profileName?: string): Promise<ApiClient>;
40
+ //# sourceMappingURL=api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/lib/api.ts"],"names":[],"mappings":"AAAA,OAAc,EAAE,aAAa,EAAsB,MAAM,OAAO,CAAC;AAIjE,qBAAa,SAAS;IACb,MAAM,EAAE,aAAa,CAAC;IAC7B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,KAAK,CAAS;gBAEV,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,SAAQ,EAAE,OAAO,UAAQ;IA2CtE,SAAS,CAAC,QAAQ,UAAQ,GAAG,OAAO,CAAC,GAAG,CAAC;IAMzC,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAKlC,WAAW,CAAC,IAAI,EAAE;QACtB,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,MAAM,CAAC;QACjB,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,GAAG,OAAO,CAAC,GAAG,CAAC;IAKV,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,GAAG,CAAC;IAK7E,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAItC,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,GAAG,CAAC;IAK3E,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIvC,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIzC,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAKxC,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAK3C,kBAAkB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI7C,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAK5C,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC;IAKxB,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAQvC,eAAe,IAAI,OAAO,CAAC,GAAG,CAAC;IAK/B,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC;IAKxB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAMrD,WAAW,IAAI,OAAO,CAAC,GAAG,CAAC;IAM3B,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,OAAO,GAAE,OAAe,GAAG,OAAO,CAAC,GAAG,CAAC;IAkBvF,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC;CAQ/B;AAED,wBAAsB,eAAe,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAiB9E"}
@@ -0,0 +1,162 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.ApiClient = void 0;
7
+ exports.createApiClient = createApiClient;
8
+ const axios_1 = __importDefault(require("axios"));
9
+ const config_1 = require("./config");
10
+ class ApiClient {
11
+ constructor(baseUrl, token, timeout = 30000, isOAuth = false) {
12
+ this.baseUrl = baseUrl;
13
+ this.token = token;
14
+ // Skip authorization headers for .ddev.site domains to avoid OAuth module conflicts
15
+ const isDdev = baseUrl.includes('.ddev.site');
16
+ const authHeaders = isDdev ? {} : isOAuth ?
17
+ { 'Authorization': `Bearer ${token}` } :
18
+ { 'Authorization': `Bearer ${token}` }; // Both use Bearer for now, but keeping structure for future
19
+ this.client = axios_1.default.create({
20
+ baseURL: baseUrl,
21
+ timeout,
22
+ headers: {
23
+ ...authHeaders,
24
+ 'Content-Type': 'application/json',
25
+ 'User-Agent': 'decoupled-cli/1.0.0'
26
+ }
27
+ });
28
+ // Add response interceptor for error handling
29
+ this.client.interceptors.response.use((response) => response, (error) => {
30
+ if (error.response?.status === 401) {
31
+ throw new Error('Authentication failed. Please check your token or run "decoupled-cli auth login"');
32
+ }
33
+ if (error.response?.status === 403) {
34
+ throw new Error('Insufficient permissions for this operation');
35
+ }
36
+ // Don't transform 501 errors - let individual methods handle them
37
+ if (error.response?.status === 501) {
38
+ throw error;
39
+ }
40
+ if (error.response?.data?.error) {
41
+ throw new Error(error.response.data.error);
42
+ }
43
+ throw error;
44
+ });
45
+ }
46
+ // Spaces endpoints
47
+ async getSpaces(archived = false) {
48
+ const params = archived ? { archived: 'true' } : {};
49
+ const response = await this.client.get('/api/spaces', { params });
50
+ return response.data;
51
+ }
52
+ async getSpace(id) {
53
+ const response = await this.client.get(`/api/spaces/${id}`);
54
+ return response.data;
55
+ }
56
+ async createSpace(data) {
57
+ const response = await this.client.post('/api/spaces', data);
58
+ return response.data;
59
+ }
60
+ async updateSpace(id, data) {
61
+ const response = await this.client.patch(`/api/spaces/${id}`, data);
62
+ return response.data;
63
+ }
64
+ async deleteSpace(id) {
65
+ await this.client.delete(`/api/spaces/${id}`);
66
+ }
67
+ async cloneSpace(id, data) {
68
+ const response = await this.client.post(`/api/spaces/${id}/clone`, data);
69
+ return response.data;
70
+ }
71
+ async archiveSpace(id) {
72
+ await this.client.post(`/api/spaces/${id}/archive`);
73
+ }
74
+ async unarchiveSpace(id) {
75
+ await this.client.post(`/api/spaces/${id}/unarchive`);
76
+ }
77
+ async getSpaceStatus(id) {
78
+ const response = await this.client.get(`/api/spaces/${id}/check-ready`);
79
+ return response.data;
80
+ }
81
+ async getSpaceLoginLink(id) {
82
+ const response = await this.client.get(`/api/spaces/${id}/one-time-login`);
83
+ return response.data;
84
+ }
85
+ async retrySpaceCreation(id) {
86
+ await this.client.post(`/api/spaces/${id}/retry-creation`);
87
+ }
88
+ async refreshSpaceUsage(id) {
89
+ await this.client.post(`/api/spaces/${id}/refresh-usage`);
90
+ }
91
+ // Usage endpoints
92
+ async getUsage() {
93
+ const response = await this.client.get('/api/usage');
94
+ return response.data;
95
+ }
96
+ async getSpaceUsage(id) {
97
+ const response = await this.client.get(`/api/spaces/${id}/usage`);
98
+ return response.data;
99
+ }
100
+ // Organization endpoints
101
+ async getOrganization() {
102
+ const response = await this.client.get('/api/organization');
103
+ return response.data;
104
+ }
105
+ async getUsers() {
106
+ const response = await this.client.get('/api/users');
107
+ return response.data;
108
+ }
109
+ async inviteUser(email, role) {
110
+ const response = await this.client.post('/api/users/invite', { email, role });
111
+ return response.data;
112
+ }
113
+ // Health endpoint
114
+ async healthCheck() {
115
+ const response = await this.client.get('/api/health');
116
+ return response.data;
117
+ }
118
+ // Content import endpoint
119
+ async importContent(spaceId, importData, preview = false) {
120
+ try {
121
+ const response = await this.client.post(`/api/spaces/${spaceId}/content-import${preview ? '?preview=true' : ''}`, importData);
122
+ return response.data;
123
+ }
124
+ catch (error) {
125
+ console.log('šŸ”„ CLI caught error:', error.message);
126
+ console.log('šŸ”„ CLI error response:', error.response?.status, error.response?.statusText);
127
+ console.log('šŸ”„ CLI error data:', error.response?.data);
128
+ // For content import, we want to handle 501 (Not Implemented) as a valid response
129
+ if (error.response?.status === 501) {
130
+ return error.response.data;
131
+ }
132
+ throw error;
133
+ }
134
+ }
135
+ // Test authentication
136
+ async testAuth() {
137
+ try {
138
+ const response = await this.client.get('/api/spaces');
139
+ return { success: true, data: response.data };
140
+ }
141
+ catch (error) {
142
+ return { success: false, error: error instanceof Error ? error.message : String(error) };
143
+ }
144
+ }
145
+ }
146
+ exports.ApiClient = ApiClient;
147
+ async function createApiClient(profileName) {
148
+ const config = config_1.configManager.getConfig();
149
+ const profile = profileName
150
+ ? config.profiles[profileName]
151
+ : config_1.configManager.getCurrentProfile();
152
+ if (!profile) {
153
+ throw new Error(`Profile not found. Run "decoupled-cli auth login" first.`);
154
+ }
155
+ const token = await config_1.configManager.getToken(profileName || config.currentProfile);
156
+ if (!token) {
157
+ throw new Error(`No authentication token found. Run "decoupled-cli auth login" first.`);
158
+ }
159
+ const isOAuth = profile.useOAuth || false;
160
+ return new ApiClient(profile.baseUrl, token, config.settings.timeout * 1000, isOAuth);
161
+ }
162
+ //# sourceMappingURL=api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/lib/api.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,63 @@
1
+ export interface Profile {
2
+ baseUrl: string;
3
+ tokenHash?: string;
4
+ useOAuth?: boolean;
5
+ }
6
+ export interface Config {
7
+ currentProfile: string;
8
+ profiles: Record<string, Profile>;
9
+ settings: {
10
+ output: 'table' | 'json' | 'yaml';
11
+ timeout: number;
12
+ color: boolean;
13
+ };
14
+ defaultSpace?: number;
15
+ }
16
+ export declare class ConfigManager {
17
+ private config;
18
+ constructor();
19
+ private loadConfig;
20
+ private ensureConfigDir;
21
+ private saveConfig;
22
+ getConfig(): Config;
23
+ getCurrentProfile(): Profile | null;
24
+ setProfile(name: string, profile: Profile): void;
25
+ setCurrentProfile(name: string): void;
26
+ deleteProfile(name: string): void;
27
+ setSetting<K extends keyof Config['settings']>(key: K, value: Config['settings'][K]): void;
28
+ storeToken(profileName: string, token: string): Promise<void>;
29
+ getToken(profileName?: string): Promise<string | null>;
30
+ deleteToken(profileName: string): Promise<void>;
31
+ listProfiles(): string[];
32
+ getConfigPath(): string;
33
+ setDefaultSpace(spaceId: number): void;
34
+ getDefaultSpace(): number | undefined;
35
+ clearDefaultSpace(): void;
36
+ resetConfig(): Promise<void>;
37
+ /**
38
+ * Load .env.local file if it exists.
39
+ */
40
+ private loadEnvFile;
41
+ /**
42
+ * Get OAuth token by performing client credentials flow.
43
+ */
44
+ private getOAuthTokenFromEnv;
45
+ /**
46
+ * Check if OAuth credentials are available in environment.
47
+ */
48
+ hasOAuthCredentials(): boolean;
49
+ /**
50
+ * Get Drupal base URL from environment.
51
+ */
52
+ getDrupalBaseUrl(): string | null;
53
+ /**
54
+ * Set profile to use OAuth authentication.
55
+ */
56
+ setProfileOAuth(profileName: string, useOAuth: boolean): void;
57
+ /**
58
+ * Check if current profile uses OAuth authentication.
59
+ */
60
+ isCurrentProfileOAuth(): boolean;
61
+ }
62
+ export declare const configManager: ConfigManager;
63
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAmBA,MAAM,WAAW,OAAO;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,MAAM;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,QAAQ,EAAE;QACR,MAAM,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;QAClC,OAAO,EAAE,MAAM,CAAC;QAChB,KAAK,EAAE,OAAO,CAAC;KAChB,CAAC;IACF,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAgBD,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAS;;IAOvB,OAAO,CAAC,UAAU;IAgBlB,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,UAAU;IAKX,SAAS,IAAI,MAAM;IAInB,iBAAiB,IAAI,OAAO,GAAG,IAAI;IAInC,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI;IAKhD,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAQrC,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAQjC,UAAU,CAAC,CAAC,SAAS,MAAM,MAAM,CAAC,UAAU,CAAC,EAClD,GAAG,EAAE,CAAC,EACN,KAAK,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAC3B,IAAI;IAKM,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAoB7D,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IA0CtD,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBrD,YAAY,IAAI,MAAM,EAAE;IAIxB,aAAa,IAAI,MAAM;IAIvB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAKtC,eAAe,IAAI,MAAM,GAAG,SAAS;IAIrC,iBAAiB,IAAI,IAAI;IAKnB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IA0BzC;;OAEG;IACH,OAAO,CAAC,WAAW;IAOnB;;OAEG;YACW,oBAAoB;IAuClC;;OAEG;IACI,mBAAmB,IAAI,OAAO;IAMrC;;OAEG;IACI,gBAAgB,IAAI,MAAM,GAAG,IAAI;IAIxC;;OAEG;IACI,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,IAAI;IAQpE;;OAEG;IACI,qBAAqB,IAAI,OAAO;CAIxC;AAED,eAAO,MAAM,aAAa,eAAsB,CAAC"}