@mindbricks/mbx 1.0.9 → 1.0.11
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 +29 -0
- package/dist/api.d.ts +15 -0
- package/dist/api.d.ts.map +1 -0
- package/dist/api.js +73 -0
- package/dist/api.js.map +1 -0
- package/dist/cli.js +26 -4
- package/dist/cli.js.map +1 -1
- package/dist/commands.d.ts +11 -0
- package/dist/commands.d.ts.map +1 -1
- package/dist/commands.js +290 -147
- package/dist/commands.js.map +1 -1
- package/dist/config.d.ts +5 -4
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +2 -1
- package/dist/config.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/storage.d.ts +3 -0
- package/dist/storage.d.ts.map +1 -1
- package/dist/storage.js +28 -1
- package/dist/storage.js.map +1 -1
- package/dist/types.d.ts +4 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +9 -0
- package/dist/types.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -37,13 +37,42 @@ mbx export myproject --zip # Downloads as ZIP file (no extraction)
|
|
|
37
37
|
mbx export myproject -o ./downloads -z # Downloads as ZIP to specified directory
|
|
38
38
|
```
|
|
39
39
|
|
|
40
|
+
### Pull Service Update
|
|
41
|
+
Update a service with the latest version from Mindbricks:
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
mbx pull
|
|
45
|
+
|
|
46
|
+
# Can also specify a path
|
|
47
|
+
mbx pull ./path/to/service
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
The `pull` command requires a `.mindbricks.json` file in the service directory with the following structure:
|
|
51
|
+
|
|
52
|
+
```json
|
|
53
|
+
{
|
|
54
|
+
"projectShortname": "your-project",
|
|
55
|
+
"projectCodename": "your-codename",
|
|
56
|
+
"serviceName": "your-service"
|
|
57
|
+
}
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
### Logout
|
|
61
|
+
Log out and remove stored credentials:
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
mbx logout
|
|
65
|
+
```
|
|
66
|
+
|
|
40
67
|
## Commands
|
|
41
68
|
|
|
42
69
|
| Command | Description |
|
|
43
70
|
|---------|-------------|
|
|
44
71
|
| `mbx login` | Authenticate with your Mindbricks account |
|
|
72
|
+
| `mbx logout` | Log out and remove stored credentials |
|
|
45
73
|
| `mbx whoami` | Display current authenticated user information |
|
|
46
74
|
| `mbx export <shortname>` | Export a project to local directory |
|
|
75
|
+
| `mbx pull` | Pull latest service update (run from within a service directory) |
|
|
47
76
|
|
|
48
77
|
## Options
|
|
49
78
|
|
package/dist/api.d.ts
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { StoredToken } from './types';
|
|
2
|
+
import { TokenStorage } from './storage';
|
|
3
|
+
export interface DownloadResult {
|
|
4
|
+
data: Buffer;
|
|
5
|
+
filename: string;
|
|
6
|
+
size: number;
|
|
7
|
+
}
|
|
8
|
+
export declare class ApiClient {
|
|
9
|
+
private storage;
|
|
10
|
+
constructor(storage: TokenStorage);
|
|
11
|
+
getAuthenticatedToken(): StoredToken;
|
|
12
|
+
downloadProject(projectShortname: string, endpoint?: string): Promise<DownloadResult>;
|
|
13
|
+
private handleAxiosError;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=api.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAY,MAAM,SAAS,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAGzC,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,qBAAa,SAAS;IACpB,OAAO,CAAC,OAAO,CAAe;gBAElB,OAAO,EAAE,YAAY;IAIjC,qBAAqB,IAAI,WAAW;IAS9B,eAAe,CAAC,gBAAgB,EAAE,MAAM,EAAE,QAAQ,GAAE,MAA+B,GAAG,OAAO,CAAC,cAAc,CAAC;IAgCnH,OAAO,CAAC,gBAAgB;CAgBzB"}
|
package/dist/api.js
ADDED
|
@@ -0,0 +1,73 @@
|
|
|
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
|
+
const axios_1 = __importDefault(require("axios"));
|
|
8
|
+
const types_1 = require("./types");
|
|
9
|
+
const config_1 = require("./config");
|
|
10
|
+
class ApiClient {
|
|
11
|
+
constructor(storage) {
|
|
12
|
+
this.storage = storage;
|
|
13
|
+
}
|
|
14
|
+
getAuthenticatedToken() {
|
|
15
|
+
const validationError = this.storage.validateToken();
|
|
16
|
+
if (validationError) {
|
|
17
|
+
const message = config_1.MESSAGES[validationError] || config_1.MESSAGES.TOKEN_ERROR;
|
|
18
|
+
throw new types_1.CliError(message);
|
|
19
|
+
}
|
|
20
|
+
return this.storage.getToken();
|
|
21
|
+
}
|
|
22
|
+
async downloadProject(projectShortname, endpoint = config_1.CONFIG.EXPORT_ENDPOINT) {
|
|
23
|
+
const token = this.getAuthenticatedToken();
|
|
24
|
+
const downloadUrl = `${config_1.CONFIG.API_BASE_URL}${endpoint}/${projectShortname}/download`;
|
|
25
|
+
try {
|
|
26
|
+
const response = await axios_1.default.get(downloadUrl, {
|
|
27
|
+
headers: {
|
|
28
|
+
'Authorization': `Bearer ${token.accessToken}`,
|
|
29
|
+
},
|
|
30
|
+
responseType: 'arraybuffer',
|
|
31
|
+
timeout: 300000,
|
|
32
|
+
});
|
|
33
|
+
let filename = `${projectShortname}.zip`;
|
|
34
|
+
const contentDisposition = response.headers['content-disposition'];
|
|
35
|
+
if (contentDisposition) {
|
|
36
|
+
const filenameMatch = contentDisposition.match(/filename="?([^"]+)"?/);
|
|
37
|
+
if (filenameMatch) {
|
|
38
|
+
filename = filenameMatch[1];
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return {
|
|
42
|
+
data: response.data,
|
|
43
|
+
filename,
|
|
44
|
+
size: response.data.length,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
catch (error) {
|
|
48
|
+
throw this.handleAxiosError(error, projectShortname);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
handleAxiosError(error, context) {
|
|
52
|
+
if (axios_1.default.isAxiosError(error)) {
|
|
53
|
+
if (error.response?.status === 401) {
|
|
54
|
+
return new types_1.CliError(config_1.MESSAGES.TOKEN_INVALID);
|
|
55
|
+
}
|
|
56
|
+
else if (error.response?.status === 403) {
|
|
57
|
+
return new types_1.CliError(`You do not have permission to access project: ${context}`);
|
|
58
|
+
}
|
|
59
|
+
else if (error.response?.status === 404) {
|
|
60
|
+
return new types_1.CliError(`Project not found: ${context}. Please check the project shortname.`);
|
|
61
|
+
}
|
|
62
|
+
else if (error.code === 'ECONNABORTED') {
|
|
63
|
+
return new types_1.CliError('Download timeout. The project may be too large or connection is slow.');
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
return new types_1.CliError(error.response?.data?.message || error.message);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
return new types_1.CliError(error instanceof Error ? error.message : 'Unknown error');
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
exports.ApiClient = ApiClient;
|
|
73
|
+
//# sourceMappingURL=api.js.map
|
package/dist/api.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.js
CHANGED
|
@@ -3,11 +3,27 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
4
|
const commander_1 = require("commander");
|
|
5
5
|
const commands_1 = require("./commands");
|
|
6
|
+
const types_1 = require("./types");
|
|
6
7
|
const fs_1 = require("fs");
|
|
7
8
|
const path_1 = require("path");
|
|
8
9
|
const packageJson = JSON.parse((0, fs_1.readFileSync)((0, path_1.join)(__dirname, '../package.json'), 'utf-8'));
|
|
9
10
|
const program = new commander_1.Command();
|
|
10
11
|
const handler = new commands_1.CommandHandler();
|
|
12
|
+
async function runCommand(fn) {
|
|
13
|
+
try {
|
|
14
|
+
await fn();
|
|
15
|
+
}
|
|
16
|
+
catch (error) {
|
|
17
|
+
if (error instanceof types_1.CliError) {
|
|
18
|
+
console.error(`\n❌ ${error.message || 'An error occurred'}`);
|
|
19
|
+
process.exit(error.exitCode);
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
console.error(`\n❌ ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
23
|
+
process.exit(1);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
11
27
|
program
|
|
12
28
|
.name('mbx')
|
|
13
29
|
.description('Mindbricks CLI - Command line tools for Mindbricks platform')
|
|
@@ -16,19 +32,19 @@ program
|
|
|
16
32
|
.command('login')
|
|
17
33
|
.description('Authenticate with your account')
|
|
18
34
|
.action(async () => {
|
|
19
|
-
await handler.handleLogin();
|
|
35
|
+
await runCommand(() => handler.handleLogin());
|
|
20
36
|
});
|
|
21
37
|
program
|
|
22
38
|
.command('whoami')
|
|
23
39
|
.description('Display current authenticated user information')
|
|
24
40
|
.action(async () => {
|
|
25
|
-
await handler.handleWhoami();
|
|
41
|
+
await runCommand(() => handler.handleWhoami());
|
|
26
42
|
});
|
|
27
43
|
program
|
|
28
44
|
.command('logout')
|
|
29
45
|
.description('Logout and remove stored credentials')
|
|
30
46
|
.action(async () => {
|
|
31
|
-
await handler.handleLogout();
|
|
47
|
+
await runCommand(() => handler.handleLogout());
|
|
32
48
|
});
|
|
33
49
|
program
|
|
34
50
|
.command('export <projectId>')
|
|
@@ -36,7 +52,13 @@ program
|
|
|
36
52
|
.option('-o, --output <path>', 'Output directory path', '.')
|
|
37
53
|
.option('-z, --zip', 'Keep as zip file (default: auto-extract to folder)')
|
|
38
54
|
.action(async (projectId, options) => {
|
|
39
|
-
await handler.handleExport(projectId, options.output, options.zip || false);
|
|
55
|
+
await runCommand(() => handler.handleExport(projectId, options.output, options.zip || false));
|
|
56
|
+
});
|
|
57
|
+
program
|
|
58
|
+
.command('pull [servicePath]')
|
|
59
|
+
.description('Pull latest updates for a service (reads .mindbricks.json for project/service info)')
|
|
60
|
+
.action(async (servicePath) => {
|
|
61
|
+
await runCommand(() => handler.handlePull(servicePath));
|
|
40
62
|
});
|
|
41
63
|
program.parse(process.argv);
|
|
42
64
|
if (!process.argv.slice(2).length) {
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;;AAEA,yCAAoC;AACpC,yCAA4C;AAC5C,2BAAkC;AAClC,+BAA4B;AAE5B,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAC5B,IAAA,iBAAY,EAAC,IAAA,WAAI,EAAC,SAAS,EAAE,iBAAiB,CAAC,EAAE,OAAO,CAAC,CAC1D,CAAC;AAEF,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAC9B,MAAM,OAAO,GAAG,IAAI,yBAAc,EAAE,CAAC;AAErC,OAAO;KACJ,IAAI,CAAC,KAAK,CAAC;KACX,WAAW,CAAC,6DAA6D,CAAC;KAC1E,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;AAEhC,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,gCAAgC,CAAC;KAC7C,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,MAAM,OAAO,CAAC,WAAW,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/commands.d.ts
CHANGED
|
@@ -1,10 +1,21 @@
|
|
|
1
1
|
export declare class CommandHandler {
|
|
2
2
|
private authService;
|
|
3
3
|
private storage;
|
|
4
|
+
private apiClient;
|
|
4
5
|
constructor();
|
|
5
6
|
handleLogin(): Promise<void>;
|
|
6
7
|
handleWhoami(): Promise<void>;
|
|
7
8
|
handleLogout(): Promise<void>;
|
|
8
9
|
handleExport(projectShortname: string, outputPath: string, keepZip?: boolean): Promise<void>;
|
|
10
|
+
handlePull(inputPath?: string): Promise<void>;
|
|
11
|
+
private extractAndCleanup;
|
|
12
|
+
private findMindbricksFile;
|
|
13
|
+
private readMindbricksMetadata;
|
|
14
|
+
private validateExtractedService;
|
|
15
|
+
private backupCurrentVersion;
|
|
16
|
+
private replaceWithNewVersion;
|
|
17
|
+
private cleanupTempFiles;
|
|
18
|
+
private restoreFromBackup;
|
|
19
|
+
private safeRemove;
|
|
9
20
|
}
|
|
10
21
|
//# sourceMappingURL=commands.d.ts.map
|
package/dist/commands.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../src/commands.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../src/commands.ts"],"names":[],"mappings":"AAqBA,qBAAa,cAAc;IACzB,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,OAAO,CAAe;IAC9B,OAAO,CAAC,SAAS,CAAY;;IAQvB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IA2C5B,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAkB7B,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IA8B7B,YAAY,CAAC,gBAAgB,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,GAAE,OAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IA6BnG,UAAU,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;YAgFrC,iBAAiB;IAoB/B,OAAO,CAAC,kBAAkB;YAeZ,sBAAsB;YAiCtB,wBAAwB;YASxB,oBAAoB;YA0BpB,qBAAqB;YAoCrB,gBAAgB;YAMhB,iBAAiB;YA0BjB,UAAU;CAczB"}
|
package/dist/commands.js
CHANGED
|
@@ -38,190 +38,333 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
38
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
39
|
exports.CommandHandler = void 0;
|
|
40
40
|
const prompts_1 = __importDefault(require("prompts"));
|
|
41
|
-
const axios_1 = __importDefault(require("axios"));
|
|
42
41
|
const fs = __importStar(require("fs"));
|
|
43
42
|
const path = __importStar(require("path"));
|
|
44
43
|
const extract_zip_1 = __importDefault(require("extract-zip"));
|
|
45
44
|
const auth_1 = require("./auth");
|
|
46
45
|
const storage_1 = require("./storage");
|
|
46
|
+
const api_1 = require("./api");
|
|
47
|
+
const types_1 = require("./types");
|
|
47
48
|
const config_1 = require("./config");
|
|
48
49
|
class CommandHandler {
|
|
49
50
|
constructor() {
|
|
50
51
|
this.authService = new auth_1.AuthService();
|
|
51
52
|
this.storage = new storage_1.TokenStorage();
|
|
53
|
+
this.apiClient = new api_1.ApiClient(this.storage);
|
|
52
54
|
}
|
|
53
55
|
async handleLogin() {
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
return 'Please enter a valid email address';
|
|
68
|
-
}
|
|
69
|
-
return true;
|
|
56
|
+
console.log('🔐 Authentication\n');
|
|
57
|
+
const credentials = await (0, prompts_1.default)([
|
|
58
|
+
{
|
|
59
|
+
type: 'text',
|
|
60
|
+
name: 'username',
|
|
61
|
+
message: 'Email:',
|
|
62
|
+
validate: (value) => {
|
|
63
|
+
if (!value || value.trim().length === 0) {
|
|
64
|
+
return 'Email is required';
|
|
65
|
+
}
|
|
66
|
+
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
|
|
67
|
+
if (!emailRegex.test(value)) {
|
|
68
|
+
return 'Please enter a valid email address';
|
|
70
69
|
}
|
|
71
|
-
|
|
72
|
-
{
|
|
73
|
-
type: 'password',
|
|
74
|
-
name: 'password',
|
|
75
|
-
message: 'Password:',
|
|
76
|
-
validate: (value) => value && value.length > 0 ? true : 'Password is required'
|
|
70
|
+
return true;
|
|
77
71
|
}
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
console.log(`👤 Logged in as: ${tokenData.fullname} (${tokenData.email})`);
|
|
89
|
-
console.log(`📁 Token saved to: ${this.storage.getTokenPath()}`);
|
|
90
|
-
}
|
|
91
|
-
catch (error) {
|
|
92
|
-
console.error(`\n${config_1.MESSAGES.LOGIN_FAILED}`);
|
|
93
|
-
console.error(` ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
94
|
-
process.exit(1);
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
type: 'password',
|
|
75
|
+
name: 'password',
|
|
76
|
+
message: 'Password:',
|
|
77
|
+
validate: (value) => value && value.length > 0 ? true : 'Password is required'
|
|
78
|
+
}
|
|
79
|
+
]);
|
|
80
|
+
if (!credentials.username || !credentials.password) {
|
|
81
|
+
throw new types_1.CliError('Login cancelled', 0);
|
|
95
82
|
}
|
|
83
|
+
console.log('\n⏳ Authenticating...');
|
|
84
|
+
const response = await this.authService.login(credentials);
|
|
85
|
+
const tokenData = this.authService.prepareTokenForStorage(response);
|
|
86
|
+
this.storage.saveToken(tokenData);
|
|
87
|
+
console.log(`\n${config_1.MESSAGES.LOGIN_SUCCESS}`);
|
|
88
|
+
console.log(`👤 Logged in as: ${tokenData.fullname} (${tokenData.email})`);
|
|
89
|
+
console.log(`📁 Token saved to: ${this.storage.getTokenPath()}`);
|
|
96
90
|
}
|
|
97
91
|
async handleWhoami() {
|
|
92
|
+
const token = this.storage.getToken();
|
|
93
|
+
if (!token) {
|
|
94
|
+
console.log(`ℹ️ ${config_1.MESSAGES.NO_TOKEN}`);
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
console.log('\n📋 Current Authentication Status\n');
|
|
98
|
+
console.log(` Name: ${token.fullname}`);
|
|
99
|
+
console.log(` Email: ${token.email}`);
|
|
100
|
+
console.log(` User ID: ${token.userId}`);
|
|
101
|
+
console.log(` Role: ${token.roleId}`);
|
|
102
|
+
console.log(` Session ID: ${token.sessionId}`);
|
|
103
|
+
console.log(` Logged in: ${new Date(token.loginAt).toLocaleString()}`);
|
|
104
|
+
console.log(`\n Token file: ${this.storage.getTokenPath()}`);
|
|
105
|
+
}
|
|
106
|
+
async handleLogout() {
|
|
107
|
+
const token = this.storage.getToken();
|
|
108
|
+
if (!token) {
|
|
109
|
+
console.log('ℹ️ You are not currently logged in.');
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
const { confirm } = await (0, prompts_1.default)({
|
|
113
|
+
type: 'confirm',
|
|
114
|
+
name: 'confirm',
|
|
115
|
+
message: 'Are you sure you want to logout?',
|
|
116
|
+
initial: true
|
|
117
|
+
});
|
|
118
|
+
if (!confirm) {
|
|
119
|
+
console.log('Logout cancelled.');
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
const deleted = this.storage.deleteToken();
|
|
123
|
+
if (deleted) {
|
|
124
|
+
console.log('\n✅ Logged out successfully');
|
|
125
|
+
console.log(` Credentials removed from: ${this.storage.getTokenPath()}`);
|
|
126
|
+
}
|
|
127
|
+
else {
|
|
128
|
+
console.log('⚠️ No credentials found to remove');
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
async handleExport(projectShortname, outputPath, keepZip = false) {
|
|
132
|
+
console.log('📦 Exporting project...\n');
|
|
133
|
+
const token = this.apiClient.getAuthenticatedToken();
|
|
134
|
+
console.log(` Project: ${projectShortname}`);
|
|
135
|
+
console.log(` User: ${token.fullname}`);
|
|
136
|
+
console.log(`\n⏳ Downloading project archive...`);
|
|
137
|
+
const result = await this.apiClient.downloadProject(projectShortname, config_1.CONFIG.EXPORT_ENDPOINT);
|
|
138
|
+
const outputDir = path.resolve(outputPath);
|
|
139
|
+
await fs.promises.mkdir(outputDir, { recursive: true });
|
|
140
|
+
const filePath = path.join(outputDir, result.filename);
|
|
141
|
+
await fs.promises.writeFile(filePath, result.data);
|
|
142
|
+
const fileSizeMB = (result.size / (1024 * 1024)).toFixed(2);
|
|
143
|
+
console.log('\n✓ Download completed successfully!');
|
|
144
|
+
console.log(` File: ${result.filename}`);
|
|
145
|
+
console.log(` Size: ${fileSizeMB} MB`);
|
|
146
|
+
console.log(` Location: ${filePath}`);
|
|
147
|
+
if (!keepZip) {
|
|
148
|
+
await this.extractAndCleanup(filePath, outputDir, projectShortname);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
async handlePull(inputPath) {
|
|
152
|
+
console.log('🔄 Pulling latest service update...\n');
|
|
153
|
+
let startPath;
|
|
154
|
+
try {
|
|
155
|
+
startPath = inputPath ? path.resolve(inputPath) : process.cwd();
|
|
156
|
+
}
|
|
157
|
+
catch {
|
|
158
|
+
throw new types_1.CliError(`Cannot determine current directory.\n` +
|
|
159
|
+
` The directory may have been deleted by a previous pull.\n` +
|
|
160
|
+
` Please run: cd .. && cd <service-directory> && mbx pull`);
|
|
161
|
+
}
|
|
162
|
+
const { metadata, servicePath } = await this.readMindbricksMetadata(startPath);
|
|
163
|
+
const { projectShortname, projectCodename, serviceName } = metadata;
|
|
164
|
+
const { confirm } = await (0, prompts_1.default)({
|
|
165
|
+
type: 'confirm',
|
|
166
|
+
name: 'confirm',
|
|
167
|
+
message: `This will overwrite all files in the ${serviceName} service. Continue?`,
|
|
168
|
+
initial: false
|
|
169
|
+
});
|
|
170
|
+
if (!confirm) {
|
|
171
|
+
console.log('Pull cancelled.');
|
|
172
|
+
return;
|
|
173
|
+
}
|
|
174
|
+
console.log(`\n⏳ Downloading latest service version...`);
|
|
175
|
+
const result = await this.apiClient.downloadProject(projectShortname, config_1.CONFIG.PULL_ENDPOINT);
|
|
176
|
+
const fileSizeMB = (result.size / (1024 * 1024)).toFixed(2);
|
|
177
|
+
console.log(` Downloaded: ${fileSizeMB} MB`);
|
|
178
|
+
const tempZipPath = path.join(servicePath, `.${serviceName}_temp.zip`);
|
|
179
|
+
const tempExtractPath = path.join(servicePath, `.${serviceName}_temp_extract`);
|
|
180
|
+
let backupPath = null;
|
|
181
|
+
let updateSucceeded = false;
|
|
98
182
|
try {
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
console.log('
|
|
105
|
-
|
|
106
|
-
console.log(
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
console.log(
|
|
110
|
-
console.log(`
|
|
111
|
-
console.log(
|
|
183
|
+
await fs.promises.writeFile(tempZipPath, result.data);
|
|
184
|
+
console.log('\n⏳ Extracting update...');
|
|
185
|
+
await (0, extract_zip_1.default)(tempZipPath, { dir: tempExtractPath });
|
|
186
|
+
const extractedServicePath = path.join(tempExtractPath, projectCodename, serviceName);
|
|
187
|
+
await this.validateExtractedService(extractedServicePath);
|
|
188
|
+
console.log('⏳ Backing up current version...');
|
|
189
|
+
backupPath = await this.backupCurrentVersion(servicePath, serviceName);
|
|
190
|
+
console.log('\n⏳ Replacing with new version...');
|
|
191
|
+
await this.replaceWithNewVersion(servicePath, extractedServicePath, serviceName);
|
|
192
|
+
updateSucceeded = true;
|
|
193
|
+
console.log('\n✅ Service updated successfully!');
|
|
194
|
+
console.log(` Service: ${serviceName}`);
|
|
195
|
+
console.log(` Location: ${servicePath}`);
|
|
112
196
|
}
|
|
113
197
|
catch (error) {
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
198
|
+
if (backupPath && fs.existsSync(backupPath)) {
|
|
199
|
+
console.log('\n⚠️ Update failed, restoring from backup...');
|
|
200
|
+
try {
|
|
201
|
+
await this.restoreFromBackup(servicePath, backupPath, serviceName);
|
|
202
|
+
console.log('✅ Restored previous version from backup');
|
|
203
|
+
}
|
|
204
|
+
catch (restoreError) {
|
|
205
|
+
console.error('❌ Failed to restore from backup');
|
|
206
|
+
console.error(` Backup location: ${backupPath}`);
|
|
207
|
+
console.error(' Please manually restore your files from the backup directory');
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
throw error;
|
|
211
|
+
}
|
|
212
|
+
finally {
|
|
213
|
+
await this.cleanupTempFiles(tempZipPath, tempExtractPath);
|
|
214
|
+
if (updateSucceeded && backupPath) {
|
|
215
|
+
await this.safeRemove(backupPath);
|
|
216
|
+
}
|
|
117
217
|
}
|
|
118
218
|
}
|
|
119
|
-
async
|
|
219
|
+
async extractAndCleanup(zipPath, outputDir, projectShortname) {
|
|
220
|
+
console.log('\n⏳ Extracting archive...');
|
|
221
|
+
const extractPath = path.join(outputDir, projectShortname);
|
|
120
222
|
try {
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
223
|
+
await (0, extract_zip_1.default)(zipPath, { dir: extractPath });
|
|
224
|
+
console.log('\n✓ Extraction completed successfully!');
|
|
225
|
+
console.log(` Extracted: ${extractPath}`);
|
|
226
|
+
await fs.promises.unlink(zipPath);
|
|
227
|
+
console.log(` Cleaned up: ${path.basename(zipPath)}`);
|
|
228
|
+
}
|
|
229
|
+
catch (extractError) {
|
|
230
|
+
console.error('\n⚠️ Extraction failed, but zip file is still available');
|
|
231
|
+
console.error(` ${extractError instanceof Error ? extractError.message : 'Unknown error'}`);
|
|
232
|
+
console.log(` Zip file: ${zipPath}`);
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
findMindbricksFile(startPath) {
|
|
236
|
+
let currentPath = path.resolve(startPath);
|
|
237
|
+
const root = path.parse(currentPath).root;
|
|
238
|
+
while (currentPath !== root) {
|
|
239
|
+
const metadataPath = path.join(currentPath, '.mindbricks.json');
|
|
240
|
+
if (fs.existsSync(metadataPath)) {
|
|
241
|
+
return metadataPath;
|
|
125
242
|
}
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
243
|
+
currentPath = path.dirname(currentPath);
|
|
244
|
+
}
|
|
245
|
+
return null;
|
|
246
|
+
}
|
|
247
|
+
async readMindbricksMetadata(targetPath) {
|
|
248
|
+
const metadataPath = this.findMindbricksFile(targetPath);
|
|
249
|
+
if (!metadataPath) {
|
|
250
|
+
throw new types_1.CliError(`No .mindbricks.json found.\n` +
|
|
251
|
+
` This command must be run from within a service directory.\n` +
|
|
252
|
+
` Searched from: ${targetPath}`);
|
|
253
|
+
}
|
|
254
|
+
const servicePath = path.dirname(metadataPath);
|
|
255
|
+
const metadataContent = await fs.promises.readFile(metadataPath, 'utf-8');
|
|
256
|
+
const metadata = JSON.parse(metadataContent);
|
|
257
|
+
if (!metadata.projectShortname || !metadata.serviceName) {
|
|
258
|
+
throw new types_1.CliError(`Invalid metadata file.\n` +
|
|
259
|
+
` The .mindbricks.json file must contain "projectShortname" and "serviceName"`);
|
|
260
|
+
}
|
|
261
|
+
if (!metadata.projectCodename) {
|
|
262
|
+
throw new types_1.CliError(`Invalid metadata file.\n` +
|
|
263
|
+
` The .mindbricks.json file must contain "projectCodename"`);
|
|
264
|
+
}
|
|
265
|
+
return { metadata: metadata, servicePath };
|
|
266
|
+
}
|
|
267
|
+
async validateExtractedService(extractedServicePath) {
|
|
268
|
+
if (!fs.existsSync(extractedServicePath)) {
|
|
269
|
+
throw new types_1.CliError(`Service not found in downloaded project.\n` +
|
|
270
|
+
` Expected: ${extractedServicePath}`);
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
async backupCurrentVersion(targetPath, serviceName) {
|
|
274
|
+
const backupPath = path.join(targetPath, `.backup_${Date.now()}`);
|
|
275
|
+
await fs.promises.mkdir(backupPath, { recursive: true });
|
|
276
|
+
const items = await fs.promises.readdir(targetPath);
|
|
277
|
+
const excludePatterns = ['.mindbricks.json', '.backup_', `.${serviceName}_temp`];
|
|
278
|
+
for (const item of items) {
|
|
279
|
+
if (excludePatterns.some(pattern => item === pattern || item.startsWith(pattern))) {
|
|
280
|
+
continue;
|
|
281
|
+
}
|
|
282
|
+
const sourcePath = path.join(targetPath, item);
|
|
283
|
+
const destPath = path.join(backupPath, item);
|
|
284
|
+
const stat = await fs.promises.lstat(sourcePath);
|
|
285
|
+
if (stat.isDirectory()) {
|
|
286
|
+
await fs.promises.cp(sourcePath, destPath, { recursive: true });
|
|
130
287
|
}
|
|
131
288
|
else {
|
|
132
|
-
|
|
289
|
+
await fs.promises.copyFile(sourcePath, destPath);
|
|
133
290
|
}
|
|
134
291
|
}
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
292
|
+
return backupPath;
|
|
293
|
+
}
|
|
294
|
+
async replaceWithNewVersion(targetPath, extractedServicePath, serviceName) {
|
|
295
|
+
const items = await fs.promises.readdir(targetPath);
|
|
296
|
+
const excludePatterns = ['.mindbricks.json', '.backup_', `.${serviceName}_temp`];
|
|
297
|
+
for (const item of items) {
|
|
298
|
+
if (excludePatterns.some(pattern => item === pattern || item.startsWith(pattern))) {
|
|
299
|
+
continue;
|
|
300
|
+
}
|
|
301
|
+
const itemPath = path.join(targetPath, item);
|
|
302
|
+
const stat = await fs.promises.lstat(itemPath);
|
|
303
|
+
if (stat.isDirectory()) {
|
|
304
|
+
await fs.promises.rm(itemPath, { recursive: true, force: true });
|
|
305
|
+
}
|
|
306
|
+
else {
|
|
307
|
+
await fs.promises.unlink(itemPath);
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
const newItems = await fs.promises.readdir(extractedServicePath);
|
|
311
|
+
for (const item of newItems) {
|
|
312
|
+
if (item === '.mindbricks.json') {
|
|
313
|
+
continue;
|
|
314
|
+
}
|
|
315
|
+
const sourcePath = path.join(extractedServicePath, item);
|
|
316
|
+
const destPath = path.join(targetPath, item);
|
|
317
|
+
const stat = await fs.promises.lstat(sourcePath);
|
|
318
|
+
if (stat.isDirectory()) {
|
|
319
|
+
await fs.promises.cp(sourcePath, destPath, { recursive: true });
|
|
320
|
+
}
|
|
321
|
+
else {
|
|
322
|
+
await fs.promises.copyFile(sourcePath, destPath);
|
|
323
|
+
}
|
|
139
324
|
}
|
|
140
325
|
}
|
|
141
|
-
async
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
process.exit(1);
|
|
153
|
-
}
|
|
154
|
-
console.log(` Project: ${projectShortname}`);
|
|
155
|
-
console.log(` User: ${token.fullname}`);
|
|
156
|
-
console.log(`\n⏳ Downloading project archive...`);
|
|
157
|
-
const downloadUrl = `${config_1.CONFIG.API_BASE_URL}${config_1.CONFIG.EXPORT_ENDPOINT}/${projectShortname}/download`;
|
|
158
|
-
const response = await axios_1.default.get(downloadUrl, {
|
|
159
|
-
headers: {
|
|
160
|
-
'Authorization': `Bearer ${token.accessToken}`,
|
|
161
|
-
},
|
|
162
|
-
responseType: 'arraybuffer',
|
|
163
|
-
timeout: 300000,
|
|
164
|
-
});
|
|
165
|
-
let filename = `${projectShortname}.zip`;
|
|
166
|
-
const contentDisposition = response.headers['content-disposition'];
|
|
167
|
-
if (contentDisposition) {
|
|
168
|
-
const filenameMatch = contentDisposition.match(/filename="?([^"]+)"?/);
|
|
169
|
-
if (filenameMatch) {
|
|
170
|
-
filename = filenameMatch[1];
|
|
171
|
-
}
|
|
326
|
+
async cleanupTempFiles(...paths) {
|
|
327
|
+
for (const tempPath of paths) {
|
|
328
|
+
await this.safeRemove(tempPath);
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
async restoreFromBackup(targetPath, backupPath, serviceName) {
|
|
332
|
+
const items = await fs.promises.readdir(targetPath);
|
|
333
|
+
const excludePatterns = ['.mindbricks.json', '.backup_', `.${serviceName}_temp`];
|
|
334
|
+
for (const item of items) {
|
|
335
|
+
if (excludePatterns.some(pattern => item === pattern || item.startsWith(pattern))) {
|
|
336
|
+
continue;
|
|
172
337
|
}
|
|
173
|
-
const
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
const
|
|
180
|
-
const
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
console.log('\n⏳ Extracting archive...');
|
|
187
|
-
const extractPath = path.join(outputDir, projectShortname);
|
|
188
|
-
try {
|
|
189
|
-
await (0, extract_zip_1.default)(filePath, { dir: extractPath });
|
|
190
|
-
console.log('\n✓ Extraction completed successfully!');
|
|
191
|
-
console.log(` Extracted: ${extractPath}`);
|
|
192
|
-
fs.unlinkSync(filePath);
|
|
193
|
-
console.log(` Cleaned up: ${filename}`);
|
|
194
|
-
}
|
|
195
|
-
catch (extractError) {
|
|
196
|
-
console.error('\n⚠️ Extraction failed, but zip file is still available');
|
|
197
|
-
console.error(` ${extractError instanceof Error ? extractError.message : 'Unknown error'}`);
|
|
198
|
-
console.log(` Zip file: ${filePath}`);
|
|
199
|
-
}
|
|
338
|
+
const itemPath = path.join(targetPath, item);
|
|
339
|
+
await this.safeRemove(itemPath);
|
|
340
|
+
}
|
|
341
|
+
const backupItems = await fs.promises.readdir(backupPath);
|
|
342
|
+
for (const item of backupItems) {
|
|
343
|
+
const sourcePath = path.join(backupPath, item);
|
|
344
|
+
const destPath = path.join(targetPath, item);
|
|
345
|
+
const stat = await fs.promises.lstat(sourcePath);
|
|
346
|
+
if (stat.isDirectory()) {
|
|
347
|
+
await fs.promises.cp(sourcePath, destPath, { recursive: true });
|
|
348
|
+
}
|
|
349
|
+
else {
|
|
350
|
+
await fs.promises.copyFile(sourcePath, destPath);
|
|
200
351
|
}
|
|
201
352
|
}
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
console.error(' You do not have permission to export this project');
|
|
210
|
-
}
|
|
211
|
-
else if (error.response?.status === 404) {
|
|
212
|
-
console.error(' Project not found. Please check the project shortname.');
|
|
213
|
-
}
|
|
214
|
-
else if (error.code === 'ECONNABORTED') {
|
|
215
|
-
console.error(' Download timeout. The project may be too large or connection is slow.');
|
|
353
|
+
}
|
|
354
|
+
async safeRemove(filePath) {
|
|
355
|
+
try {
|
|
356
|
+
if (fs.existsSync(filePath)) {
|
|
357
|
+
const stat = await fs.promises.lstat(filePath);
|
|
358
|
+
if (stat.isDirectory()) {
|
|
359
|
+
await fs.promises.rm(filePath, { recursive: true, force: true });
|
|
216
360
|
}
|
|
217
361
|
else {
|
|
218
|
-
|
|
362
|
+
await fs.promises.unlink(filePath);
|
|
219
363
|
}
|
|
220
364
|
}
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
}
|
|
224
|
-
process.exit(1);
|
|
365
|
+
}
|
|
366
|
+
catch (error) {
|
|
367
|
+
console.warn(`⚠️ Warning: Failed to cleanup ${filePath}`);
|
|
225
368
|
}
|
|
226
369
|
}
|
|
227
370
|
}
|
package/dist/commands.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../src/commands.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../src/commands.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
export declare const CONFIG: {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
2
|
+
API_BASE_URL: string;
|
|
3
|
+
LOGIN_ENDPOINT: string;
|
|
4
|
+
EXPORT_ENDPOINT: string;
|
|
5
|
+
PULL_ENDPOINT: string;
|
|
6
|
+
TOKEN_FILE_NAME: string;
|
|
6
7
|
};
|
|
7
8
|
export declare const MESSAGES: {
|
|
8
9
|
readonly LOGIN_SUCCESS: "✓ Successfully logged in!";
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,MAAM;;;;;;CAMlB,CAAC;AAEF,eAAO,MAAM,QAAQ;;;;;;;;;;CAUX,CAAC"}
|
package/dist/config.js
CHANGED
|
@@ -2,9 +2,10 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.MESSAGES = exports.CONFIG = void 0;
|
|
4
4
|
exports.CONFIG = {
|
|
5
|
-
API_BASE_URL: 'https://app.mindbricks.com',
|
|
5
|
+
API_BASE_URL: process.env.MBX_API_URL || 'https://app.mindbricks.com',
|
|
6
6
|
LOGIN_ENDPOINT: '/api/mindbrix-auth/login',
|
|
7
7
|
EXPORT_ENDPOINT: '/api/repository/takeout/projects',
|
|
8
|
+
PULL_ENDPOINT: '/api/repository/takeout/projects',
|
|
8
9
|
TOKEN_FILE_NAME: '.mbx-token.json',
|
|
9
10
|
};
|
|
10
11
|
exports.MESSAGES = {
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":";;;AAAa,QAAA,MAAM,GAAG;IACpB,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,4BAA4B;IACrE,cAAc,EAAE,0BAA0B;IAC1C,eAAe,EAAE,kCAAkC;IACnD,aAAa,EAAE,kCAAkC;IACjD,eAAe,EAAE,iBAAiB;CACnC,CAAC;AAEW,QAAA,QAAQ,GAAG;IACtB,aAAa,EAAE,2BAA2B;IAC1C,YAAY,EAAE,gBAAgB;IAC9B,cAAc,EAAE,2BAA2B;IAC3C,QAAQ,EAAE,0CAA0C;IACpD,WAAW,EAAE,4BAA4B;IACzC,mBAAmB,EAAE,6BAA6B;IAClD,aAAa,EAAE,2DAA2D;IAC1E,aAAa,EAAE,uEAAuE;IACtF,WAAW,EAAE,sEAAsE;CAC3E,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export { AuthService } from './auth';
|
|
2
2
|
export { TokenStorage } from './storage';
|
|
3
|
+
export { ApiClient } from './api';
|
|
3
4
|
export { CommandHandler } from './commands';
|
|
4
5
|
export * from './types';
|
|
5
|
-
export { CONFIG } from './config';
|
|
6
|
+
export { CONFIG, MESSAGES } from './config';
|
|
6
7
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,cAAc,SAAS,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClC,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,cAAc,SAAS,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -14,14 +14,17 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
exports.CONFIG = exports.CommandHandler = exports.TokenStorage = exports.AuthService = void 0;
|
|
17
|
+
exports.MESSAGES = exports.CONFIG = exports.CommandHandler = exports.ApiClient = exports.TokenStorage = exports.AuthService = void 0;
|
|
18
18
|
var auth_1 = require("./auth");
|
|
19
19
|
Object.defineProperty(exports, "AuthService", { enumerable: true, get: function () { return auth_1.AuthService; } });
|
|
20
20
|
var storage_1 = require("./storage");
|
|
21
21
|
Object.defineProperty(exports, "TokenStorage", { enumerable: true, get: function () { return storage_1.TokenStorage; } });
|
|
22
|
+
var api_1 = require("./api");
|
|
23
|
+
Object.defineProperty(exports, "ApiClient", { enumerable: true, get: function () { return api_1.ApiClient; } });
|
|
22
24
|
var commands_1 = require("./commands");
|
|
23
25
|
Object.defineProperty(exports, "CommandHandler", { enumerable: true, get: function () { return commands_1.CommandHandler; } });
|
|
24
26
|
__exportStar(require("./types"), exports);
|
|
25
27
|
var config_1 = require("./config");
|
|
26
28
|
Object.defineProperty(exports, "CONFIG", { enumerable: true, get: function () { return config_1.CONFIG; } });
|
|
29
|
+
Object.defineProperty(exports, "MESSAGES", { enumerable: true, get: function () { return config_1.MESSAGES; } });
|
|
27
30
|
//# 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,+BAAqC;AAA5B,mGAAA,WAAW,OAAA;AACpB,qCAAyC;AAAhC,uGAAA,YAAY,OAAA;AACrB,uCAA4C;AAAnC,0GAAA,cAAc,OAAA;AACvB,0CAAwB;AACxB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AACA,+BAAqC;AAA5B,mGAAA,WAAW,OAAA;AACpB,qCAAyC;AAAhC,uGAAA,YAAY,OAAA;AACrB,6BAAkC;AAAzB,gGAAA,SAAS,OAAA;AAClB,uCAA4C;AAAnC,0GAAA,cAAc,OAAA;AACvB,0CAAwB;AACxB,mCAA4C;AAAnC,gGAAA,MAAM,OAAA;AAAE,kGAAA,QAAQ,OAAA"}
|
package/dist/storage.d.ts
CHANGED
|
@@ -3,8 +3,11 @@ export declare class TokenStorage {
|
|
|
3
3
|
private tokenPath;
|
|
4
4
|
constructor();
|
|
5
5
|
saveToken(token: StoredToken): void;
|
|
6
|
+
saveTokenAsync(token: StoredToken): Promise<void>;
|
|
6
7
|
getToken(): StoredToken | null;
|
|
8
|
+
getTokenAsync(): Promise<StoredToken | null>;
|
|
7
9
|
deleteToken(): boolean;
|
|
10
|
+
deleteTokenAsync(): Promise<boolean>;
|
|
8
11
|
hasToken(): boolean;
|
|
9
12
|
getTokenPath(): string;
|
|
10
13
|
validateToken(): string | null;
|
package/dist/storage.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAKtC,qBAAa,YAAY;IACvB,OAAO,CAAC,SAAS,CAAS;;IAO1B,SAAS,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI;
|
|
1
|
+
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAKtC,qBAAa,YAAY;IACvB,OAAO,CAAC,SAAS,CAAS;;IAO1B,SAAS,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI;IAS7B,cAAc,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IASvD,QAAQ,IAAI,WAAW,GAAG,IAAI;IAYxB,aAAa,IAAI,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IASlD,WAAW,IAAI,OAAO;IAYhB,gBAAgB,IAAI,OAAO,CAAC,OAAO,CAAC;IAS1C,QAAQ,IAAI,OAAO;IAKnB,YAAY,IAAI,MAAM;IAItB,aAAa,IAAI,MAAM,GAAG,IAAI;IAyB9B,aAAa,IAAI,WAAW;CAO7B"}
|
package/dist/storage.js
CHANGED
|
@@ -45,7 +45,16 @@ class TokenStorage {
|
|
|
45
45
|
saveToken(token) {
|
|
46
46
|
try {
|
|
47
47
|
const tokenData = JSON.stringify(token, null, 2);
|
|
48
|
-
fs.writeFileSync(this.tokenPath, tokenData, 'utf-8');
|
|
48
|
+
fs.writeFileSync(this.tokenPath, tokenData, { encoding: 'utf-8', mode: 0o600 });
|
|
49
|
+
}
|
|
50
|
+
catch (error) {
|
|
51
|
+
throw new Error(`Failed to save token: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
async saveTokenAsync(token) {
|
|
55
|
+
try {
|
|
56
|
+
const tokenData = JSON.stringify(token, null, 2);
|
|
57
|
+
await fs.promises.writeFile(this.tokenPath, tokenData, { encoding: 'utf-8', mode: 0o600 });
|
|
49
58
|
}
|
|
50
59
|
catch (error) {
|
|
51
60
|
throw new Error(`Failed to save token: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
@@ -63,6 +72,15 @@ class TokenStorage {
|
|
|
63
72
|
return null;
|
|
64
73
|
}
|
|
65
74
|
}
|
|
75
|
+
async getTokenAsync() {
|
|
76
|
+
try {
|
|
77
|
+
const tokenData = await fs.promises.readFile(this.tokenPath, 'utf-8');
|
|
78
|
+
return JSON.parse(tokenData);
|
|
79
|
+
}
|
|
80
|
+
catch (error) {
|
|
81
|
+
return null;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
66
84
|
deleteToken() {
|
|
67
85
|
try {
|
|
68
86
|
if (fs.existsSync(this.tokenPath)) {
|
|
@@ -75,6 +93,15 @@ class TokenStorage {
|
|
|
75
93
|
return false;
|
|
76
94
|
}
|
|
77
95
|
}
|
|
96
|
+
async deleteTokenAsync() {
|
|
97
|
+
try {
|
|
98
|
+
await fs.promises.unlink(this.tokenPath);
|
|
99
|
+
return true;
|
|
100
|
+
}
|
|
101
|
+
catch (error) {
|
|
102
|
+
return false;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
78
105
|
hasToken() {
|
|
79
106
|
return fs.existsSync(this.tokenPath);
|
|
80
107
|
}
|
package/dist/storage.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage.js","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAAyB;AACzB,2CAA6B;AAC7B,uCAAyB;AAEzB,qCAAkC;AAIlC,MAAa,YAAY;IAGvB;QACE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,eAAM,CAAC,eAAe,CAAC,CAAC;IACnE,CAAC;IAGD,SAAS,CAAC,KAAkB;QAC1B,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YACjD,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"storage.js","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AACA,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,cAAc,EAAE,OAAO,CAAC;IACxB,aAAa,EAAE,OAAO,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE;QACR,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,QAAQ,EAAE;QACR,GAAG,EAAE,MAAM,CAAC;QACZ,GAAG,EAAE,MAAM,CAAC;KACb,CAAC;IACF,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE;QACL,UAAU,EAAE,MAAM,CAAC;QACnB,EAAE,EAAE,MAAM,CAAC;QACX,SAAS,EAAE,MAAM,CAAC;QAClB,WAAW,EAAE,MAAM,CAAC;QACpB,cAAc,EAAE,MAAM,CAAC;QACvB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;QAC5B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;QACrB,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AACA,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,cAAc,EAAE,OAAO,CAAC;IACxB,aAAa,EAAE,OAAO,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE;QACR,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,QAAQ,EAAE;QACR,GAAG,EAAE,MAAM,CAAC;QACZ,GAAG,EAAE,MAAM,CAAC;KACb,CAAC;IACF,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE;QACL,UAAU,EAAE,MAAM,CAAC;QACnB,EAAE,EAAE,MAAM,CAAC;QACX,SAAS,EAAE,MAAM,CAAC;QAClB,WAAW,EAAE,MAAM,CAAC;QACpB,cAAc,EAAE,MAAM,CAAC;QACvB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;QAC5B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;QACrB,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,QAAS,SAAQ,KAAK;aAGf,QAAQ,EAAE,MAAM;gBADhC,OAAO,EAAE,MAAM,EACC,QAAQ,GAAE,MAAU;CAKvC"}
|
package/dist/types.js
CHANGED
|
@@ -1,3 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CliError = void 0;
|
|
4
|
+
class CliError extends Error {
|
|
5
|
+
constructor(message, exitCode = 1) {
|
|
6
|
+
super(message);
|
|
7
|
+
this.exitCode = exitCode;
|
|
8
|
+
this.name = 'CliError';
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
exports.CliError = CliError;
|
|
3
12
|
//# sourceMappingURL=types.js.map
|
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";;;AAuEA,MAAa,QAAS,SAAQ,KAAK;IACjC,YACE,OAAe,EACC,WAAmB,CAAC;QAEpC,KAAK,CAAC,OAAO,CAAC,CAAC;QAFC,aAAQ,GAAR,QAAQ,CAAY;QAGpC,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;IACzB,CAAC;CACF;AARD,4BAQC"}
|