@thinksoftai/cli 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/bin/thinksoft.js +2 -0
  2. package/dist/commands/apps.d.ts +4 -0
  3. package/dist/commands/apps.d.ts.map +1 -0
  4. package/dist/commands/apps.js +86 -0
  5. package/dist/commands/apps.js.map +1 -0
  6. package/dist/commands/create.d.ts +6 -0
  7. package/dist/commands/create.js +95 -0
  8. package/dist/commands/create.js.map +1 -0
  9. package/dist/commands/deploy.d.ts +9 -0
  10. package/dist/commands/deploy.js +195 -0
  11. package/dist/commands/deploy.js.map +1 -0
  12. package/dist/commands/init.d.ts +10 -0
  13. package/dist/commands/init.d.ts.map +1 -0
  14. package/dist/commands/init.js +158 -0
  15. package/dist/commands/init.js.map +1 -0
  16. package/dist/commands/login.d.ts +8 -0
  17. package/dist/commands/login.d.ts.map +1 -0
  18. package/dist/commands/login.js +146 -0
  19. package/dist/commands/login.js.map +1 -0
  20. package/dist/commands/open.d.ts +8 -0
  21. package/dist/commands/open.js +66 -0
  22. package/dist/commands/open.js.map +1 -0
  23. package/dist/index.d.ts +6 -0
  24. package/dist/index.d.ts.map +1 -0
  25. package/dist/index.js +70 -0
  26. package/dist/index.js.map +1 -0
  27. package/dist/utils/api.d.ts +26 -0
  28. package/dist/utils/api.d.ts.map +1 -0
  29. package/dist/utils/api.js +152 -0
  30. package/dist/utils/api.js.map +1 -0
  31. package/dist/utils/config.d.ts +33 -0
  32. package/dist/utils/config.d.ts.map +1 -0
  33. package/dist/utils/config.js +136 -0
  34. package/dist/utils/config.js.map +1 -0
  35. package/dist/utils/logger.d.ts +12 -0
  36. package/dist/utils/logger.d.ts.map +1 -0
  37. package/dist/utils/logger.js +74 -0
  38. package/dist/utils/logger.js.map +1 -0
  39. package/package.json +47 -0
@@ -0,0 +1,136 @@
1
+ "use strict";
2
+ /**
3
+ * Config utility - manages CLI configuration stored in ~/.thinksoft/
4
+ */
5
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ var desc = Object.getOwnPropertyDescriptor(m, k);
8
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
9
+ desc = { enumerable: true, get: function() { return m[k]; } };
10
+ }
11
+ Object.defineProperty(o, k2, desc);
12
+ }) : (function(o, m, k, k2) {
13
+ if (k2 === undefined) k2 = k;
14
+ o[k2] = m[k];
15
+ }));
16
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
17
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
18
+ }) : function(o, v) {
19
+ o["default"] = v;
20
+ });
21
+ var __importStar = (this && this.__importStar) || (function () {
22
+ var ownKeys = function(o) {
23
+ ownKeys = Object.getOwnPropertyNames || function (o) {
24
+ var ar = [];
25
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
26
+ return ar;
27
+ };
28
+ return ownKeys(o);
29
+ };
30
+ return function (mod) {
31
+ if (mod && mod.__esModule) return mod;
32
+ var result = {};
33
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
34
+ __setModuleDefault(result, mod);
35
+ return result;
36
+ };
37
+ })();
38
+ var __importDefault = (this && this.__importDefault) || function (mod) {
39
+ return (mod && mod.__esModule) ? mod : { "default": mod };
40
+ };
41
+ Object.defineProperty(exports, "__esModule", { value: true });
42
+ exports.getToken = getToken;
43
+ exports.getRefreshToken = getRefreshToken;
44
+ exports.getUser = getUser;
45
+ exports.getExpiresAt = getExpiresAt;
46
+ exports.isLoggedIn = isLoggedIn;
47
+ exports.isTokenExpired = isTokenExpired;
48
+ exports.saveAuth = saveAuth;
49
+ exports.clearAuth = clearAuth;
50
+ exports.getConfigPath = getConfigPath;
51
+ exports.getProjectConfig = getProjectConfig;
52
+ exports.saveProjectConfig = saveProjectConfig;
53
+ exports.projectConfigExists = projectConfigExists;
54
+ const conf_1 = __importDefault(require("conf"));
55
+ // Global config stored in ~/.thinksoft/
56
+ const config = new conf_1.default({
57
+ projectName: 'thinksoft',
58
+ schema: {
59
+ token: { type: 'string' },
60
+ refreshToken: { type: 'string' },
61
+ expiresAt: { type: 'number' },
62
+ user: {
63
+ type: 'object',
64
+ properties: {
65
+ id: { type: 'string' },
66
+ email: { type: 'string' }
67
+ }
68
+ }
69
+ }
70
+ });
71
+ function getToken() {
72
+ return config.get('token');
73
+ }
74
+ function getRefreshToken() {
75
+ return config.get('refreshToken');
76
+ }
77
+ function getUser() {
78
+ return config.get('user');
79
+ }
80
+ function getExpiresAt() {
81
+ return config.get('expiresAt');
82
+ }
83
+ function isLoggedIn() {
84
+ return !!config.get('token');
85
+ }
86
+ function isTokenExpired(bufferSeconds = 300) {
87
+ const expiresAt = config.get('expiresAt');
88
+ if (!expiresAt)
89
+ return true;
90
+ const now = Math.floor(Date.now() / 1000);
91
+ return now >= (expiresAt - bufferSeconds);
92
+ }
93
+ function saveAuth(data) {
94
+ config.set('token', data.token);
95
+ if (data.refreshToken) {
96
+ config.set('refreshToken', data.refreshToken);
97
+ }
98
+ if (data.expiresIn) {
99
+ const expiresAt = Math.floor(Date.now() / 1000) + data.expiresIn;
100
+ config.set('expiresAt', expiresAt);
101
+ }
102
+ if (data.user) {
103
+ config.set('user', data.user);
104
+ }
105
+ }
106
+ function clearAuth() {
107
+ config.clear();
108
+ }
109
+ function getConfigPath() {
110
+ return config.path;
111
+ }
112
+ // Project config (thinksoft.json in current directory)
113
+ const fs = __importStar(require("fs"));
114
+ const path = __importStar(require("path"));
115
+ const PROJECT_CONFIG_FILE = 'thinksoft.json';
116
+ function getProjectConfig() {
117
+ const configPath = path.join(process.cwd(), PROJECT_CONFIG_FILE);
118
+ if (!fs.existsSync(configPath)) {
119
+ return null;
120
+ }
121
+ try {
122
+ const content = fs.readFileSync(configPath, 'utf-8');
123
+ return JSON.parse(content);
124
+ }
125
+ catch {
126
+ return null;
127
+ }
128
+ }
129
+ function saveProjectConfig(config) {
130
+ const configPath = path.join(process.cwd(), PROJECT_CONFIG_FILE);
131
+ fs.writeFileSync(configPath, JSON.stringify(config, null, 2));
132
+ }
133
+ function projectConfigExists() {
134
+ return fs.existsSync(path.join(process.cwd(), PROJECT_CONFIG_FILE));
135
+ }
136
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Logger utility - styled console output
3
+ */
4
+ export declare function success(message: string): void;
5
+ export declare function error(message: string): void;
6
+ export declare function warning(message: string): void;
7
+ export declare function info(message: string): void;
8
+ export declare function log(message: string): void;
9
+ export declare function newLine(): void;
10
+ export declare function header(title: string): void;
11
+ export declare function keyValue(key: string, value: string): void;
12
+ export declare function table(rows: string[][]): void;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE7C;AAED,wBAAgB,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE3C;AAED,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE7C;AAED,wBAAgB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE1C;AAED,wBAAgB,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAEzC;AAED,wBAAgB,OAAO,IAAI,IAAI,CAE9B;AAED,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAI1C;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAEzD;AAED,wBAAgB,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,CAyB5C"}
@@ -0,0 +1,74 @@
1
+ "use strict";
2
+ /**
3
+ * Logger utility - styled console output
4
+ */
5
+ var __importDefault = (this && this.__importDefault) || function (mod) {
6
+ return (mod && mod.__esModule) ? mod : { "default": mod };
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.success = success;
10
+ exports.error = error;
11
+ exports.warning = warning;
12
+ exports.info = info;
13
+ exports.log = log;
14
+ exports.newLine = newLine;
15
+ exports.header = header;
16
+ exports.keyValue = keyValue;
17
+ exports.table = table;
18
+ const chalk_1 = __importDefault(require("chalk"));
19
+ function success(message) {
20
+ console.log(chalk_1.default.green('✓'), message);
21
+ }
22
+ function error(message) {
23
+ console.log(chalk_1.default.red('✗'), message);
24
+ }
25
+ function warning(message) {
26
+ console.log(chalk_1.default.yellow('!'), message);
27
+ }
28
+ function info(message) {
29
+ console.log(chalk_1.default.blue('ℹ'), message);
30
+ }
31
+ function log(message) {
32
+ console.log(message);
33
+ }
34
+ function newLine() {
35
+ console.log();
36
+ }
37
+ function header(title) {
38
+ console.log();
39
+ console.log(chalk_1.default.bold.cyan(title));
40
+ console.log(chalk_1.default.gray('─'.repeat(40)));
41
+ }
42
+ function keyValue(key, value) {
43
+ console.log(` ${chalk_1.default.gray(key + ':')} ${value}`);
44
+ }
45
+ function table(rows) {
46
+ // Calculate column widths
47
+ const colWidths = [];
48
+ rows.forEach(row => {
49
+ row.forEach((cell, i) => {
50
+ const len = stripAnsi(cell).length;
51
+ colWidths[i] = Math.max(colWidths[i] || 0, len);
52
+ });
53
+ });
54
+ // Print rows
55
+ rows.forEach((row, rowIndex) => {
56
+ const cells = row.map((cell, i) => {
57
+ const padding = colWidths[i] - stripAnsi(cell).length;
58
+ return cell + ' '.repeat(padding);
59
+ });
60
+ if (rowIndex === 0) {
61
+ // Header
62
+ console.log(chalk_1.default.bold(cells.join(' ')));
63
+ console.log(chalk_1.default.gray(colWidths.map(w => '─'.repeat(w)).join(' ')));
64
+ }
65
+ else {
66
+ console.log(cells.join(' '));
67
+ }
68
+ });
69
+ }
70
+ // Simple ANSI strip for length calculation
71
+ function stripAnsi(str) {
72
+ return str.replace(/\x1b\[[0-9;]*m/g, '');
73
+ }
74
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;AAIH,0BAEC;AAED,sBAEC;AAED,0BAEC;AAED,oBAEC;AAED,kBAEC;AAED,0BAEC;AAED,wBAIC;AAED,4BAEC;AAED,sBAyBC;AA7DD,kDAAyB;AAEzB,SAAgB,OAAO,CAAC,OAAe;IACrC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAA;AACxC,CAAC;AAED,SAAgB,KAAK,CAAC,OAAe;IACnC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAA;AACtC,CAAC;AAED,SAAgB,OAAO,CAAC,OAAe;IACrC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAA;AACzC,CAAC;AAED,SAAgB,IAAI,CAAC,OAAe;IAClC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAA;AACvC,CAAC;AAED,SAAgB,GAAG,CAAC,OAAe;IACjC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;AACtB,CAAC;AAED,SAAgB,OAAO;IACrB,OAAO,CAAC,GAAG,EAAE,CAAA;AACf,CAAC;AAED,SAAgB,MAAM,CAAC,KAAa;IAClC,OAAO,CAAC,GAAG,EAAE,CAAA;IACb,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAA;IACnC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;AACzC,CAAC;AAED,SAAgB,QAAQ,CAAC,GAAW,EAAE,KAAa;IACjD,OAAO,CAAC,GAAG,CAAC,KAAK,eAAK,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,IAAI,KAAK,EAAE,CAAC,CAAA;AACpD,CAAC;AAED,SAAgB,KAAK,CAAC,IAAgB;IACpC,0BAA0B;IAC1B,MAAM,SAAS,GAAa,EAAE,CAAA;IAC9B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;QACjB,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;YACtB,MAAM,GAAG,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,MAAM,CAAA;YAClC,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAA;QACjD,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,aAAa;IACb,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE;QAC7B,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;YAChC,MAAM,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,MAAM,CAAA;YACrD,OAAO,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;QACnC,CAAC,CAAC,CAAA;QAEF,IAAI,QAAQ,KAAK,CAAC,EAAE,CAAC;YACnB,SAAS;YACT,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;YACzC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACvE,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;QAC/B,CAAC;IACH,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,2CAA2C;AAC3C,SAAS,SAAS,CAAC,GAAW;IAC5B,OAAO,GAAG,CAAC,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAA;AAC3C,CAAC"}
package/package.json ADDED
@@ -0,0 +1,47 @@
1
+ {
2
+ "name": "@thinksoftai/cli",
3
+ "version": "1.0.0",
4
+ "description": "ThinkSoft CLI - Deploy apps to ThinkSoft platform",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "bin": {
8
+ "thinksoft": "./bin/thinksoft.js"
9
+ },
10
+ "files": [
11
+ "dist",
12
+ "bin"
13
+ ],
14
+ "scripts": {
15
+ "build": "tsc",
16
+ "dev": "tsc -w",
17
+ "prepublishOnly": "npm run build"
18
+ },
19
+ "keywords": [
20
+ "thinksoft",
21
+ "cli",
22
+ "deploy",
23
+ "hosting"
24
+ ],
25
+ "author": "ThinkSoft",
26
+ "license": "MIT",
27
+ "dependencies": {
28
+ "commander": "^11.1.0",
29
+ "inquirer": "^8.2.6",
30
+ "chalk": "^4.1.2",
31
+ "ora": "^5.4.1",
32
+ "conf": "^10.2.0",
33
+ "open": "^8.4.2",
34
+ "form-data": "^4.0.0",
35
+ "archiver": "^6.0.1",
36
+ "glob": "^10.3.10"
37
+ },
38
+ "devDependencies": {
39
+ "@types/node": "^20.10.0",
40
+ "@types/inquirer": "^9.0.7",
41
+ "@types/archiver": "^6.0.2",
42
+ "typescript": "^5.3.3"
43
+ },
44
+ "engines": {
45
+ "node": ">=18.0.0"
46
+ }
47
+ }