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.
- package/README.md +416 -0
- package/bin/decoupled-cli +3 -0
- package/dist/commands/auth.d.ts +3 -0
- package/dist/commands/auth.d.ts.map +1 -0
- package/dist/commands/auth.js +386 -0
- package/dist/commands/auth.js.map +1 -0
- package/dist/commands/config.d.ts +3 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +84 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/content.d.ts +3 -0
- package/dist/commands/content.d.ts.map +1 -0
- package/dist/commands/content.js +199 -0
- package/dist/commands/content.js.map +1 -0
- package/dist/commands/download.d.ts +4 -0
- package/dist/commands/download.d.ts.map +1 -0
- package/dist/commands/download.js +127 -0
- package/dist/commands/download.js.map +1 -0
- package/dist/commands/health.d.ts +3 -0
- package/dist/commands/health.d.ts.map +1 -0
- package/dist/commands/health.js +28 -0
- package/dist/commands/health.js.map +1 -0
- package/dist/commands/org.d.ts +3 -0
- package/dist/commands/org.d.ts.map +1 -0
- package/dist/commands/org.js +73 -0
- package/dist/commands/org.js.map +1 -0
- package/dist/commands/spaces.d.ts +3 -0
- package/dist/commands/spaces.d.ts.map +1 -0
- package/dist/commands/spaces.js +613 -0
- package/dist/commands/spaces.js.map +1 -0
- package/dist/commands/tokens.d.ts +3 -0
- package/dist/commands/tokens.d.ts.map +1 -0
- package/dist/commands/tokens.js +90 -0
- package/dist/commands/tokens.js.map +1 -0
- package/dist/commands/usage.d.ts +3 -0
- package/dist/commands/usage.d.ts.map +1 -0
- package/dist/commands/usage.js +104 -0
- package/dist/commands/usage.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +49 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/api.d.ts +40 -0
- package/dist/lib/api.d.ts.map +1 -0
- package/dist/lib/api.js +162 -0
- package/dist/lib/api.js.map +1 -0
- package/dist/lib/config.d.ts +63 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +317 -0
- package/dist/lib/config.js.map +1 -0
- package/examples/.cursorrules +189 -0
- package/examples/CLAUDE.md +1080 -0
- package/examples/GEMINI.md +1056 -0
- package/examples/content-import-sample.json +114 -0
- 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 @@
|
|
|
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":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -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"}
|
package/dist/lib/api.js
ADDED
|
@@ -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"}
|