@mindbricks/mbx 1.0.5 → 1.0.6
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 +51 -2
- package/dist/cli.js +7 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands.d.ts +1 -0
- package/dist/commands.d.ts.map +1 -1
- package/dist/commands.js +106 -0
- package/dist/commands.js.map +1 -1
- package/dist/config.d.ts +5 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +5 -1
- package/dist/config.js.map +1 -1
- package/dist/storage.d.ts +3 -1
- package/dist/storage.d.ts.map +1 -1
- package/dist/storage.js +29 -2
- package/dist/storage.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# @mindbricks/mbx
|
|
2
2
|
|
|
3
|
-
CLI tool for
|
|
3
|
+
Official CLI tool for the Mindbricks platform. Authenticate and manage your Mindbricks projects from the command line.
|
|
4
4
|
|
|
5
5
|
## Installation
|
|
6
6
|
|
|
@@ -8,10 +8,59 @@ CLI tool for authenticating with the Mindbricks platform
|
|
|
8
8
|
npm install -g @mindbricks/mbx
|
|
9
9
|
```
|
|
10
10
|
|
|
11
|
+
## Quick Start
|
|
12
|
+
|
|
13
|
+
### Login
|
|
14
|
+
Authenticate with your Mindbricks account:
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
mbx login
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
### Check Authentication Status
|
|
21
|
+
View your current logged-in user:
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
mbx whoami
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
### Export Project
|
|
28
|
+
Download a project as a ZIP file:
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
mbx export <project-shortname>
|
|
32
|
+
|
|
33
|
+
# Examples:
|
|
34
|
+
mbx export myproject # Exports to current directory
|
|
35
|
+
mbx export myproject -o ./downloads # Exports to specified directory
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## Commands
|
|
39
|
+
|
|
40
|
+
| Command | Description |
|
|
41
|
+
|---------|-------------|
|
|
42
|
+
| `mbx login` | Authenticate with your Mindbricks account |
|
|
43
|
+
| `mbx whoami` | Display current authenticated user information |
|
|
44
|
+
| `mbx export <shortname>` | Export a project to local directory |
|
|
45
|
+
|
|
46
|
+
## Options
|
|
47
|
+
|
|
48
|
+
### Export Options
|
|
49
|
+
|
|
50
|
+
- `-o, --output <path>` - Specify output directory (default: current directory)
|
|
51
|
+
|
|
52
|
+
## Authentication
|
|
53
|
+
|
|
54
|
+
The CLI stores your authentication token in `~/.mbx-token.json`. This file is automatically created when you login and is used for all authenticated requests.
|
|
55
|
+
|
|
56
|
+
## Requirements
|
|
57
|
+
|
|
58
|
+
- Node.js >= 16.0.0
|
|
59
|
+
|
|
11
60
|
## License
|
|
12
61
|
|
|
13
62
|
MIT
|
|
14
63
|
|
|
15
64
|
## Support
|
|
16
65
|
|
|
17
|
-
For issues and questions, please visit https://mindbricks.com/support
|
|
66
|
+
For issues and questions, please visit [https://mindbricks.com/support](https://mindbricks.com/support)
|
package/dist/cli.js
CHANGED
|
@@ -21,6 +21,13 @@ program
|
|
|
21
21
|
.action(async () => {
|
|
22
22
|
await handler.handleWhoami();
|
|
23
23
|
});
|
|
24
|
+
program
|
|
25
|
+
.command('export <projectId>')
|
|
26
|
+
.description('Export a project to local directory')
|
|
27
|
+
.option('-o, --output <path>', 'Output directory path', '.')
|
|
28
|
+
.action(async (projectId, options) => {
|
|
29
|
+
await handler.handleExport(projectId, options.output);
|
|
30
|
+
});
|
|
24
31
|
program.parse(process.argv);
|
|
25
32
|
if (!process.argv.slice(2).length) {
|
|
26
33
|
program.outputHelp();
|
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;AAE5C,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,OAAO,CAAC,CAAC;AAEpB,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,gCAAgC,CAAC;KAC7C,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,MAAM,OAAO,CAAC,WAAW,EAAE,CAAC;AAC9B,CAAC,CAAC,CAAC;AAGL,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,gDAAgD,CAAC;KAC7D,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,MAAM,OAAO,CAAC,YAAY,EAAE,CAAC;AAC/B,CAAC,CAAC,CAAC;AAEL,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAE5B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAClC,OAAO,CAAC,UAAU,EAAE,CAAC;AACvB,CAAC"}
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;;AAEA,yCAAoC;AACpC,yCAA4C;AAE5C,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,OAAO,CAAC,CAAC;AAEpB,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,gCAAgC,CAAC;KAC7C,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,MAAM,OAAO,CAAC,WAAW,EAAE,CAAC;AAC9B,CAAC,CAAC,CAAC;AAGL,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,gDAAgD,CAAC;KAC7D,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,MAAM,OAAO,CAAC,YAAY,EAAE,CAAC;AAC/B,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,oBAAoB,CAAC;KAC7B,WAAW,CAAC,qCAAqC,CAAC;KAClD,MAAM,CAAC,qBAAqB,EAAE,uBAAuB,EAAE,GAAG,CAAC;KAC3D,MAAM,CAAC,KAAK,EAAE,SAAiB,EAAE,OAA2B,EAAE,EAAE;IAC/D,MAAM,OAAO,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;AACxD,CAAC,CAAC,CAAC;AAEL,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAE5B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAClC,OAAO,CAAC,UAAU,EAAE,CAAC;AACvB,CAAC"}
|
package/dist/commands.d.ts
CHANGED
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":"AASA,qBAAa,cAAc;IACzB,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,OAAO,CAAe;;IAQxB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IAmD5B,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAwB7B,YAAY,CAAC,gBAAgB,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CA2EhF"}
|
package/dist/commands.js
CHANGED
|
@@ -1,10 +1,46 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
2
35
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
36
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
37
|
};
|
|
5
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
39
|
exports.CommandHandler = void 0;
|
|
7
40
|
const prompts_1 = __importDefault(require("prompts"));
|
|
41
|
+
const axios_1 = __importDefault(require("axios"));
|
|
42
|
+
const fs = __importStar(require("fs"));
|
|
43
|
+
const path = __importStar(require("path"));
|
|
8
44
|
const auth_1 = require("./auth");
|
|
9
45
|
const storage_1 = require("./storage");
|
|
10
46
|
const config_1 = require("./config");
|
|
@@ -79,6 +115,76 @@ class CommandHandler {
|
|
|
79
115
|
process.exit(1);
|
|
80
116
|
}
|
|
81
117
|
}
|
|
118
|
+
async handleExport(projectShortname, outputPath) {
|
|
119
|
+
try {
|
|
120
|
+
console.log('📦 Exporting project...\n');
|
|
121
|
+
let token;
|
|
122
|
+
try {
|
|
123
|
+
token = this.storage.getValidToken();
|
|
124
|
+
}
|
|
125
|
+
catch (error) {
|
|
126
|
+
const errorMsg = error instanceof Error ? error.message : 'TOKEN_ERROR';
|
|
127
|
+
const message = config_1.MESSAGES[errorMsg];
|
|
128
|
+
console.error(`\n${message}`);
|
|
129
|
+
process.exit(1);
|
|
130
|
+
}
|
|
131
|
+
console.log(` Project: ${projectShortname}`);
|
|
132
|
+
console.log(` User: ${token.fullname}`);
|
|
133
|
+
console.log(`\n⏳ Downloading project archive...`);
|
|
134
|
+
const downloadUrl = `${config_1.CONFIG.API_BASE_URL}${config_1.CONFIG.EXPORT_ENDPOINT}/${projectShortname}/download`;
|
|
135
|
+
const response = await axios_1.default.get(downloadUrl, {
|
|
136
|
+
headers: {
|
|
137
|
+
'Authorization': `Bearer ${token.accessToken}`,
|
|
138
|
+
},
|
|
139
|
+
responseType: 'arraybuffer',
|
|
140
|
+
timeout: 300000,
|
|
141
|
+
});
|
|
142
|
+
let filename = `${projectShortname}.zip`;
|
|
143
|
+
const contentDisposition = response.headers['content-disposition'];
|
|
144
|
+
if (contentDisposition) {
|
|
145
|
+
const filenameMatch = contentDisposition.match(/filename="?([^"]+)"?/);
|
|
146
|
+
if (filenameMatch) {
|
|
147
|
+
filename = filenameMatch[1];
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
const outputDir = path.resolve(outputPath);
|
|
151
|
+
if (!fs.existsSync(outputDir)) {
|
|
152
|
+
fs.mkdirSync(outputDir, { recursive: true });
|
|
153
|
+
}
|
|
154
|
+
const filePath = path.join(outputDir, filename);
|
|
155
|
+
fs.writeFileSync(filePath, response.data);
|
|
156
|
+
const stats = fs.statSync(filePath);
|
|
157
|
+
const fileSizeMB = (stats.size / (1024 * 1024)).toFixed(2);
|
|
158
|
+
console.log('\n✓ Export completed successfully!');
|
|
159
|
+
console.log(` File: ${filename}`);
|
|
160
|
+
console.log(` Size: ${fileSizeMB} MB`);
|
|
161
|
+
console.log(` Location: ${filePath}`);
|
|
162
|
+
}
|
|
163
|
+
catch (error) {
|
|
164
|
+
console.error('\n❌ Export failed');
|
|
165
|
+
if (axios_1.default.isAxiosError(error)) {
|
|
166
|
+
if (error.response?.status === 401) {
|
|
167
|
+
console.error(` ${config_1.MESSAGES.TOKEN_INVALID}`);
|
|
168
|
+
}
|
|
169
|
+
else if (error.response?.status === 403) {
|
|
170
|
+
console.error(' You do not have permission to export this project');
|
|
171
|
+
}
|
|
172
|
+
else if (error.response?.status === 404) {
|
|
173
|
+
console.error(' Project not found. Please check the project shortname.');
|
|
174
|
+
}
|
|
175
|
+
else if (error.code === 'ECONNABORTED') {
|
|
176
|
+
console.error(' Download timeout. The project may be too large or connection is slow.');
|
|
177
|
+
}
|
|
178
|
+
else {
|
|
179
|
+
console.error(` ${error.response?.data?.message || error.message}`);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
else {
|
|
183
|
+
console.error(` ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
184
|
+
}
|
|
185
|
+
process.exit(1);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
82
188
|
}
|
|
83
189
|
exports.CommandHandler = CommandHandler;
|
|
84
190
|
//# sourceMappingURL=commands.js.map
|
package/dist/commands.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../src/commands.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../src/commands.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
export declare const CONFIG: {
|
|
2
2
|
readonly API_BASE_URL: "https://app.mindbricks.com";
|
|
3
3
|
readonly LOGIN_ENDPOINT: "/api/mindbrix-auth/login";
|
|
4
|
-
readonly
|
|
4
|
+
readonly EXPORT_ENDPOINT: "/api/repository/takeout/projects";
|
|
5
|
+
readonly TOKEN_FILE_NAME: ".mbx-token.json";
|
|
5
6
|
};
|
|
6
7
|
export declare const MESSAGES: {
|
|
7
8
|
readonly LOGIN_SUCCESS: "✓ Successfully logged in!";
|
|
@@ -10,5 +11,8 @@ export declare const MESSAGES: {
|
|
|
10
11
|
readonly NO_TOKEN: "Not authenticated. Please run: mbx login";
|
|
11
12
|
readonly TOKEN_SAVED: "✓ Token saved successfully";
|
|
12
13
|
readonly INVALID_CREDENTIALS: "✗ Invalid email or password";
|
|
14
|
+
readonly TOKEN_EXPIRED: "✗ Your session has expired. Please login again: mbx login";
|
|
15
|
+
readonly TOKEN_INVALID: "✗ Your authentication token is invalid. Please login again: mbx login";
|
|
16
|
+
readonly TOKEN_ERROR: "✗ Unable to read authentication token. Please login again: mbx login";
|
|
13
17
|
};
|
|
14
18
|
//# sourceMappingURL=config.d.ts.map
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,MAAM
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,MAAM;;;;;CAKT,CAAC;AAEX,eAAO,MAAM,QAAQ;;;;;;;;;;CAUX,CAAC"}
|
package/dist/config.js
CHANGED
|
@@ -4,7 +4,8 @@ exports.MESSAGES = exports.CONFIG = void 0;
|
|
|
4
4
|
exports.CONFIG = {
|
|
5
5
|
API_BASE_URL: 'https://app.mindbricks.com',
|
|
6
6
|
LOGIN_ENDPOINT: '/api/mindbrix-auth/login',
|
|
7
|
-
|
|
7
|
+
EXPORT_ENDPOINT: '/api/repository/takeout/projects',
|
|
8
|
+
TOKEN_FILE_NAME: '.mbx-token.json',
|
|
8
9
|
};
|
|
9
10
|
exports.MESSAGES = {
|
|
10
11
|
LOGIN_SUCCESS: '✓ Successfully logged in!',
|
|
@@ -13,5 +14,8 @@ exports.MESSAGES = {
|
|
|
13
14
|
NO_TOKEN: 'Not authenticated. Please run: mbx login',
|
|
14
15
|
TOKEN_SAVED: '✓ Token saved successfully',
|
|
15
16
|
INVALID_CREDENTIALS: '✗ Invalid email or password',
|
|
17
|
+
TOKEN_EXPIRED: '✗ Your session has expired. Please login again: mbx login',
|
|
18
|
+
TOKEN_INVALID: '✗ Your authentication token is invalid. Please login again: mbx login',
|
|
19
|
+
TOKEN_ERROR: '✗ Unable to read authentication token. Please login again: mbx login',
|
|
16
20
|
};
|
|
17
21
|
//# sourceMappingURL=config.js.map
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":";;;AAEa,QAAA,MAAM,GAAG;IACpB,YAAY,EAAE,4BAA4B;IAC1C,cAAc,EAAE,0BAA0B;IAC1C,eAAe,EAAE,
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":";;;AAEa,QAAA,MAAM,GAAG;IACpB,YAAY,EAAE,4BAA4B;IAC1C,cAAc,EAAE,0BAA0B;IAC1C,eAAe,EAAE,kCAAkC;IACnD,eAAe,EAAE,iBAAiB;CAC1B,CAAC;AAEE,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/storage.d.ts
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import { StoredToken } from './types';
|
|
2
2
|
export declare class TokenStorage {
|
|
3
3
|
private tokenPath;
|
|
4
|
-
constructor(
|
|
4
|
+
constructor();
|
|
5
5
|
saveToken(token: StoredToken): void;
|
|
6
6
|
getToken(): StoredToken | null;
|
|
7
7
|
deleteToken(): boolean;
|
|
8
8
|
hasToken(): boolean;
|
|
9
9
|
getTokenPath(): string;
|
|
10
|
+
validateToken(): string | null;
|
|
11
|
+
getValidToken(): StoredToken;
|
|
10
12
|
}
|
|
11
13
|
//# sourceMappingURL=storage.d.ts.map
|
package/dist/storage.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"
|
|
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;IAUnC,QAAQ,IAAI,WAAW,GAAG,IAAI;IAa9B,WAAW,IAAI,OAAO;IAatB,QAAQ,IAAI,OAAO;IAKnB,YAAY,IAAI,MAAM;IAItB,aAAa,IAAI,MAAM,GAAG,IAAI;IAyB9B,aAAa,IAAI,WAAW;CAO7B"}
|
package/dist/storage.js
CHANGED
|
@@ -36,10 +36,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
36
36
|
exports.TokenStorage = void 0;
|
|
37
37
|
const fs = __importStar(require("fs"));
|
|
38
38
|
const path = __importStar(require("path"));
|
|
39
|
+
const os = __importStar(require("os"));
|
|
39
40
|
const config_1 = require("./config");
|
|
40
41
|
class TokenStorage {
|
|
41
|
-
constructor(
|
|
42
|
-
this.tokenPath = path.join(
|
|
42
|
+
constructor() {
|
|
43
|
+
this.tokenPath = path.join(os.homedir(), config_1.CONFIG.TOKEN_FILE_NAME);
|
|
43
44
|
}
|
|
44
45
|
saveToken(token) {
|
|
45
46
|
try {
|
|
@@ -80,6 +81,32 @@ class TokenStorage {
|
|
|
80
81
|
getTokenPath() {
|
|
81
82
|
return this.tokenPath;
|
|
82
83
|
}
|
|
84
|
+
validateToken() {
|
|
85
|
+
if (!this.hasToken()) {
|
|
86
|
+
return 'NO_TOKEN';
|
|
87
|
+
}
|
|
88
|
+
const token = this.getToken();
|
|
89
|
+
if (!token) {
|
|
90
|
+
return 'TOKEN_ERROR';
|
|
91
|
+
}
|
|
92
|
+
if (!token.accessToken || !token.sessionId || !token.userId) {
|
|
93
|
+
return 'TOKEN_INVALID';
|
|
94
|
+
}
|
|
95
|
+
if (token.expiresAt) {
|
|
96
|
+
const expiryDate = new Date(token.expiresAt);
|
|
97
|
+
if (expiryDate < new Date()) {
|
|
98
|
+
return 'TOKEN_EXPIRED';
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
return null;
|
|
102
|
+
}
|
|
103
|
+
getValidToken() {
|
|
104
|
+
const validationError = this.validateToken();
|
|
105
|
+
if (validationError) {
|
|
106
|
+
throw new Error(validationError);
|
|
107
|
+
}
|
|
108
|
+
return this.getToken();
|
|
109
|
+
}
|
|
83
110
|
}
|
|
84
111
|
exports.TokenStorage = TokenStorage;
|
|
85
112
|
//# sourceMappingURL=storage.js.map
|
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;
|
|
1
|
+
{"version":3,"file":"storage.js","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"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"}
|