@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.
- package/bin/thinksoft.js +2 -0
- package/dist/commands/apps.d.ts +4 -0
- package/dist/commands/apps.d.ts.map +1 -0
- package/dist/commands/apps.js +86 -0
- package/dist/commands/apps.js.map +1 -0
- package/dist/commands/create.d.ts +6 -0
- package/dist/commands/create.js +95 -0
- package/dist/commands/create.js.map +1 -0
- package/dist/commands/deploy.d.ts +9 -0
- package/dist/commands/deploy.js +195 -0
- package/dist/commands/deploy.js.map +1 -0
- package/dist/commands/init.d.ts +10 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +158 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/login.d.ts +8 -0
- package/dist/commands/login.d.ts.map +1 -0
- package/dist/commands/login.js +146 -0
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/open.d.ts +8 -0
- package/dist/commands/open.js +66 -0
- package/dist/commands/open.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +70 -0
- package/dist/index.js.map +1 -0
- package/dist/utils/api.d.ts +26 -0
- package/dist/utils/api.d.ts.map +1 -0
- package/dist/utils/api.js +152 -0
- package/dist/utils/api.js.map +1 -0
- package/dist/utils/config.d.ts +33 -0
- package/dist/utils/config.d.ts.map +1 -0
- package/dist/utils/config.js +136 -0
- package/dist/utils/config.js.map +1 -0
- package/dist/utils/logger.d.ts +12 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +74 -0
- package/dist/utils/logger.js.map +1 -0
- package/package.json +47 -0
package/bin/thinksoft.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"apps.d.ts","sourceRoot":"","sources":["../../src/commands/apps.ts"],"names":[],"mappings":"AAAA;;GAEG;AAQH,wBAAsB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CA+C1C"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Apps command - list user's apps
|
|
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.apps = apps;
|
|
43
|
+
const ora_1 = __importDefault(require("ora"));
|
|
44
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
45
|
+
const api = __importStar(require("../utils/api"));
|
|
46
|
+
const config = __importStar(require("../utils/config"));
|
|
47
|
+
const logger = __importStar(require("../utils/logger"));
|
|
48
|
+
async function apps() {
|
|
49
|
+
if (!config.isLoggedIn()) {
|
|
50
|
+
logger.error('Not logged in');
|
|
51
|
+
logger.info('Use "thinksoft login" to authenticate');
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
const spinner = (0, ora_1.default)('Fetching apps...').start();
|
|
55
|
+
const result = await api.listApps();
|
|
56
|
+
if (result.error) {
|
|
57
|
+
spinner.fail('Failed to fetch apps');
|
|
58
|
+
logger.error(result.error);
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
const appList = result.data || [];
|
|
62
|
+
if (appList.length === 0) {
|
|
63
|
+
spinner.succeed('No apps found');
|
|
64
|
+
logger.newLine();
|
|
65
|
+
logger.info('Create your first app with: thinksoft create "Your app description"');
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
spinner.succeed(`Found ${appList.length} app(s)`);
|
|
69
|
+
logger.newLine();
|
|
70
|
+
// Build table
|
|
71
|
+
const rows = [
|
|
72
|
+
['App ID', 'Name', 'Type', 'URL']
|
|
73
|
+
];
|
|
74
|
+
appList.forEach((app) => {
|
|
75
|
+
rows.push([
|
|
76
|
+
chalk_1.default.cyan(app.short_id || app.app_id),
|
|
77
|
+
app.name || 'Untitled',
|
|
78
|
+
app.app_type || 'workapp',
|
|
79
|
+
chalk_1.default.gray(`${(app.short_id || app.app_id).toLowerCase()}.thinksoftai.com`)
|
|
80
|
+
]);
|
|
81
|
+
});
|
|
82
|
+
logger.table(rows);
|
|
83
|
+
logger.newLine();
|
|
84
|
+
logger.info('Admin UI: thinksoftai.com/app/{app-id}');
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=apps.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"apps.js","sourceRoot":"","sources":["../../src/commands/apps.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAQH,oBA+CC;AArDD,8CAAqB;AACrB,kDAAyB;AACzB,kDAAmC;AACnC,wDAAyC;AACzC,wDAAyC;AAElC,KAAK,UAAU,IAAI;IACxB,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,CAAC;QACzB,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,CAAA;QAC7B,MAAM,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAA;QACpD,OAAM;IACR,CAAC;IAED,MAAM,OAAO,GAAG,IAAA,aAAG,EAAC,kBAAkB,CAAC,CAAC,KAAK,EAAE,CAAA;IAE/C,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,QAAQ,EAAE,CAAA;IAEnC,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,OAAO,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAA;QACpC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QAC1B,OAAM;IACR,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,IAAI,EAAE,CAAA;IAEjC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC,CAAA;QAChC,MAAM,CAAC,OAAO,EAAE,CAAA;QAChB,MAAM,CAAC,IAAI,CAAC,qEAAqE,CAAC,CAAA;QAClF,OAAM;IACR,CAAC;IAED,OAAO,CAAC,OAAO,CAAC,SAAS,OAAO,CAAC,MAAM,SAAS,CAAC,CAAA;IACjD,MAAM,CAAC,OAAO,EAAE,CAAA;IAEhB,cAAc;IACd,MAAM,IAAI,GAAe;QACvB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;KAClC,CAAA;IAED,OAAO,CAAC,OAAO,CAAC,CAAC,GAAQ,EAAE,EAAE;QAC3B,IAAI,CAAC,IAAI,CAAC;YACR,eAAK,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,MAAM,CAAC;YACtC,GAAG,CAAC,IAAI,IAAI,UAAU;YACtB,GAAG,CAAC,QAAQ,IAAI,SAAS;YACzB,eAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,kBAAkB,CAAC;SAC5E,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IAElB,MAAM,CAAC,OAAO,EAAE,CAAA;IAChB,MAAM,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAA;AACvD,CAAC"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Create command - create a new app with AI
|
|
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.create = create;
|
|
43
|
+
const ora_1 = __importDefault(require("ora"));
|
|
44
|
+
const api = __importStar(require("../utils/api"));
|
|
45
|
+
const config = __importStar(require("../utils/config"));
|
|
46
|
+
const logger = __importStar(require("../utils/logger"));
|
|
47
|
+
async function create(description, options) {
|
|
48
|
+
if (!config.isLoggedIn()) {
|
|
49
|
+
logger.error('Not logged in');
|
|
50
|
+
logger.info('Use "thinksoft login" to authenticate');
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
if (!description || !description.trim()) {
|
|
54
|
+
logger.error('App description is required');
|
|
55
|
+
logger.info('Usage: thinksoft create "Your app description"');
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
const appType = options.type || 'workapp';
|
|
59
|
+
logger.header('Create App with AI');
|
|
60
|
+
logger.keyValue('Description', description);
|
|
61
|
+
logger.keyValue('Type', appType);
|
|
62
|
+
logger.newLine();
|
|
63
|
+
const spinner = (0, ora_1.default)('Creating app with AI... (this may take 20-30 seconds)').start();
|
|
64
|
+
const result = await api.createApp(description, appType);
|
|
65
|
+
if (result.error) {
|
|
66
|
+
spinner.fail('Failed to create app');
|
|
67
|
+
logger.error(result.error);
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
const app = result.app;
|
|
71
|
+
if (!app) {
|
|
72
|
+
spinner.fail('Failed to create app');
|
|
73
|
+
logger.error('No app data returned');
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
spinner.succeed('App created successfully!');
|
|
77
|
+
logger.newLine();
|
|
78
|
+
logger.keyValue('Name', app.name);
|
|
79
|
+
logger.keyValue('App ID', app.app_id || app.short_id);
|
|
80
|
+
logger.keyValue('Description', app.description || '');
|
|
81
|
+
logger.newLine();
|
|
82
|
+
logger.keyValue('Admin UI', app.url || `https://thinksoftai.com/app/${app.app_id || app.short_id}`);
|
|
83
|
+
logger.keyValue('Deploy URL', `https://${(app.app_id || app.short_id).toLowerCase()}.thinksoftai.com`);
|
|
84
|
+
if (app.tables && app.tables.length > 0) {
|
|
85
|
+
logger.newLine();
|
|
86
|
+
logger.info(`Tables created: ${app.tables.map((t) => t.name).join(', ')}`);
|
|
87
|
+
}
|
|
88
|
+
logger.newLine();
|
|
89
|
+
logger.info('Next steps:');
|
|
90
|
+
logger.log(' 1. Create your frontend project');
|
|
91
|
+
logger.log(` 2. Run: thinksoft init --app ${app.app_id || app.short_id}`);
|
|
92
|
+
logger.log(' 3. Build your project: npm run build');
|
|
93
|
+
logger.log(' 4. Deploy: thinksoft deploy');
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=create.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Deploy command - deploy frontend to 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.deploy = deploy;
|
|
43
|
+
const fs = __importStar(require("fs"));
|
|
44
|
+
const path = __importStar(require("path"));
|
|
45
|
+
const ora_1 = __importDefault(require("ora"));
|
|
46
|
+
const archiver_1 = __importDefault(require("archiver"));
|
|
47
|
+
const config = __importStar(require("../utils/config"));
|
|
48
|
+
const logger = __importStar(require("../utils/logger"));
|
|
49
|
+
const BASE_URL = 'https://thinksoftai.com/api/v1';
|
|
50
|
+
async function deploy(options) {
|
|
51
|
+
if (!config.isLoggedIn()) {
|
|
52
|
+
logger.error('Not logged in');
|
|
53
|
+
logger.info('Use "thinksoft login" to authenticate');
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
// Get project config or use CLI options
|
|
57
|
+
const projectConfig = config.getProjectConfig();
|
|
58
|
+
const appId = options.app || projectConfig?.appId;
|
|
59
|
+
const outputDir = options.dir || projectConfig?.outputDir || 'dist';
|
|
60
|
+
if (!appId) {
|
|
61
|
+
logger.error('No app ID specified');
|
|
62
|
+
logger.info('Either run "thinksoft init" first, or use --app flag');
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
// Validate output directory exists
|
|
66
|
+
const fullPath = path.resolve(process.cwd(), outputDir);
|
|
67
|
+
if (!fs.existsSync(fullPath)) {
|
|
68
|
+
logger.error(`Output directory not found: ${outputDir}`);
|
|
69
|
+
logger.info('Make sure to build your project first (e.g., npm run build)');
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
// Check if directory has files
|
|
73
|
+
const files = fs.readdirSync(fullPath);
|
|
74
|
+
if (files.length === 0) {
|
|
75
|
+
logger.error(`Output directory is empty: ${outputDir}`);
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
logger.header('Deploy to ThinkSoft');
|
|
79
|
+
logger.keyValue('App ID', appId);
|
|
80
|
+
logger.keyValue('Directory', outputDir);
|
|
81
|
+
logger.keyValue('Files', `${files.length} items`);
|
|
82
|
+
logger.newLine();
|
|
83
|
+
// Create zip file
|
|
84
|
+
const spinner = (0, ora_1.default)('Packaging files...').start();
|
|
85
|
+
let zipBuffer;
|
|
86
|
+
try {
|
|
87
|
+
zipBuffer = await createZipBuffer(fullPath);
|
|
88
|
+
spinner.text = `Packaged ${formatBytes(zipBuffer.length)}`;
|
|
89
|
+
}
|
|
90
|
+
catch (err) {
|
|
91
|
+
spinner.fail('Failed to package files');
|
|
92
|
+
logger.error(err.message);
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
// Upload to API
|
|
96
|
+
spinner.text = 'Uploading...';
|
|
97
|
+
try {
|
|
98
|
+
// Ensure valid token
|
|
99
|
+
const token = config.getToken();
|
|
100
|
+
if (!token) {
|
|
101
|
+
spinner.fail('Authentication required');
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
// Check if token expired and refresh if needed
|
|
105
|
+
if (config.isTokenExpired()) {
|
|
106
|
+
spinner.text = 'Refreshing token...';
|
|
107
|
+
const refreshToken = config.getRefreshToken();
|
|
108
|
+
if (refreshToken) {
|
|
109
|
+
const refreshResponse = await fetch(`${BASE_URL}/_cli/auth/refresh`, {
|
|
110
|
+
method: 'POST',
|
|
111
|
+
headers: { 'Content-Type': 'application/json' },
|
|
112
|
+
body: JSON.stringify({ refresh_token: refreshToken })
|
|
113
|
+
});
|
|
114
|
+
if (refreshResponse.ok) {
|
|
115
|
+
const refreshData = await refreshResponse.json();
|
|
116
|
+
if (refreshData.token) {
|
|
117
|
+
config.saveAuth({
|
|
118
|
+
token: refreshData.token,
|
|
119
|
+
refreshToken: refreshData.refresh_token,
|
|
120
|
+
expiresIn: refreshData.expires_in,
|
|
121
|
+
user: refreshData.user
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
const currentToken = config.getToken();
|
|
128
|
+
// Create form data with zip file
|
|
129
|
+
const formData = new FormData();
|
|
130
|
+
const blob = new Blob([zipBuffer], { type: 'application/zip' });
|
|
131
|
+
formData.append('file', blob, 'deploy.zip');
|
|
132
|
+
spinner.text = 'Deploying...';
|
|
133
|
+
const response = await fetch(`${BASE_URL}/apps/${appId}/deploy`, {
|
|
134
|
+
method: 'POST',
|
|
135
|
+
headers: {
|
|
136
|
+
'Authorization': `Bearer ${currentToken}`
|
|
137
|
+
},
|
|
138
|
+
body: formData
|
|
139
|
+
});
|
|
140
|
+
const result = await response.json();
|
|
141
|
+
if (!response.ok) {
|
|
142
|
+
spinner.fail('Deployment failed');
|
|
143
|
+
logger.error(result.error || 'Unknown error');
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
spinner.succeed('Deployed successfully!');
|
|
147
|
+
logger.newLine();
|
|
148
|
+
const deployUrl = result.url || `https://${appId.toLowerCase()}.thinksoftai.com`;
|
|
149
|
+
logger.keyValue('URL', deployUrl);
|
|
150
|
+
if (result.version) {
|
|
151
|
+
logger.keyValue('Version', result.version);
|
|
152
|
+
}
|
|
153
|
+
logger.newLine();
|
|
154
|
+
logger.success(`Your app is live at ${deployUrl}`);
|
|
155
|
+
}
|
|
156
|
+
catch (err) {
|
|
157
|
+
spinner.fail('Deployment failed');
|
|
158
|
+
logger.error(err.message);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Create a zip buffer from directory
|
|
163
|
+
*/
|
|
164
|
+
async function createZipBuffer(dirPath) {
|
|
165
|
+
return new Promise((resolve, reject) => {
|
|
166
|
+
const chunks = [];
|
|
167
|
+
const archive = (0, archiver_1.default)('zip', {
|
|
168
|
+
zlib: { level: 9 }
|
|
169
|
+
});
|
|
170
|
+
archive.on('data', (chunk) => {
|
|
171
|
+
chunks.push(chunk);
|
|
172
|
+
});
|
|
173
|
+
archive.on('end', () => {
|
|
174
|
+
resolve(Buffer.concat(chunks));
|
|
175
|
+
});
|
|
176
|
+
archive.on('error', (err) => {
|
|
177
|
+
reject(err);
|
|
178
|
+
});
|
|
179
|
+
// Add directory contents
|
|
180
|
+
archive.directory(dirPath, false);
|
|
181
|
+
archive.finalize();
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Format bytes to human readable
|
|
186
|
+
*/
|
|
187
|
+
function formatBytes(bytes) {
|
|
188
|
+
if (bytes === 0)
|
|
189
|
+
return '0 B';
|
|
190
|
+
const k = 1024;
|
|
191
|
+
const sizes = ['B', 'KB', 'MB', 'GB'];
|
|
192
|
+
const i = Math.floor(Math.log(bytes) / Math.log(k));
|
|
193
|
+
return `${parseFloat((bytes / Math.pow(k, i)).toFixed(2))} ${sizes[i]}`;
|
|
194
|
+
}
|
|
195
|
+
//# sourceMappingURL=deploy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deploy.js","sourceRoot":"","sources":["../../src/commands/deploy.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA;;GAEG;AAUH,UAAU,WAAW;IACnB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,GAAG,CAAC,EAAE,OAAO,CAAA;CACd;AAED,wBAAsB,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CA4H9D"}
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Init command - initialize project with thinksoft.json
|
|
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.init = init;
|
|
43
|
+
const inquirer_1 = __importDefault(require("inquirer"));
|
|
44
|
+
const ora_1 = __importDefault(require("ora"));
|
|
45
|
+
const fs = __importStar(require("fs"));
|
|
46
|
+
const path = __importStar(require("path"));
|
|
47
|
+
const api = __importStar(require("../utils/api"));
|
|
48
|
+
const config = __importStar(require("../utils/config"));
|
|
49
|
+
const logger = __importStar(require("../utils/logger"));
|
|
50
|
+
async function init(options) {
|
|
51
|
+
if (!config.isLoggedIn()) {
|
|
52
|
+
logger.error('Not logged in');
|
|
53
|
+
logger.info('Use "thinksoft login" to authenticate');
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
// Check if already initialized
|
|
57
|
+
if (config.projectConfigExists() && !options.yes) {
|
|
58
|
+
const { overwrite } = await inquirer_1.default.prompt([
|
|
59
|
+
{
|
|
60
|
+
type: 'confirm',
|
|
61
|
+
name: 'overwrite',
|
|
62
|
+
message: 'thinksoft.json already exists. Overwrite?',
|
|
63
|
+
default: false
|
|
64
|
+
}
|
|
65
|
+
]);
|
|
66
|
+
if (!overwrite) {
|
|
67
|
+
logger.info('Aborted');
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
logger.header('Initialize ThinkSoft Project');
|
|
72
|
+
let appId = options.app;
|
|
73
|
+
let outputDir = options.dir || 'dist';
|
|
74
|
+
// If no app provided, fetch and let user select
|
|
75
|
+
if (!appId) {
|
|
76
|
+
const spinner = (0, ora_1.default)('Fetching your apps...').start();
|
|
77
|
+
const result = await api.listApps();
|
|
78
|
+
if (result.error) {
|
|
79
|
+
spinner.fail('Failed to fetch apps');
|
|
80
|
+
logger.error(result.error);
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
const appList = result.data || [];
|
|
84
|
+
spinner.stop();
|
|
85
|
+
if (appList.length === 0) {
|
|
86
|
+
logger.warning('No apps found');
|
|
87
|
+
logger.info('Create an app first: thinksoft create "Your app description"');
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
const { selectedApp } = await inquirer_1.default.prompt([
|
|
91
|
+
{
|
|
92
|
+
type: 'list',
|
|
93
|
+
name: 'selectedApp',
|
|
94
|
+
message: 'Select an app:',
|
|
95
|
+
choices: appList.map((app) => ({
|
|
96
|
+
name: `${app.name} (${app.short_id || app.app_id})`,
|
|
97
|
+
value: app.short_id || app.app_id
|
|
98
|
+
}))
|
|
99
|
+
}
|
|
100
|
+
]);
|
|
101
|
+
appId = selectedApp;
|
|
102
|
+
}
|
|
103
|
+
// Ask for output directory
|
|
104
|
+
if (!options.dir) {
|
|
105
|
+
// Try to detect common build directories
|
|
106
|
+
const commonDirs = ['dist', 'build', 'out', '.next', 'public'];
|
|
107
|
+
const existingDirs = commonDirs.filter(d => fs.existsSync(path.join(process.cwd(), d)));
|
|
108
|
+
const { dir } = await inquirer_1.default.prompt([
|
|
109
|
+
{
|
|
110
|
+
type: 'input',
|
|
111
|
+
name: 'dir',
|
|
112
|
+
message: 'Output directory (build folder):',
|
|
113
|
+
default: existingDirs[0] || 'dist',
|
|
114
|
+
validate: (input) => {
|
|
115
|
+
if (!input.trim())
|
|
116
|
+
return 'Directory is required';
|
|
117
|
+
return true;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
]);
|
|
121
|
+
outputDir = dir;
|
|
122
|
+
}
|
|
123
|
+
// Ask for framework (optional)
|
|
124
|
+
const { framework } = await inquirer_1.default.prompt([
|
|
125
|
+
{
|
|
126
|
+
type: 'list',
|
|
127
|
+
name: 'framework',
|
|
128
|
+
message: 'Framework (optional):',
|
|
129
|
+
choices: [
|
|
130
|
+
{ name: 'React', value: 'react' },
|
|
131
|
+
{ name: 'Vue', value: 'vue' },
|
|
132
|
+
{ name: 'Next.js', value: 'nextjs' },
|
|
133
|
+
{ name: 'Svelte', value: 'svelte' },
|
|
134
|
+
{ name: 'Other / None', value: '' }
|
|
135
|
+
]
|
|
136
|
+
}
|
|
137
|
+
]);
|
|
138
|
+
// Save config
|
|
139
|
+
const projectConfig = {
|
|
140
|
+
appId: appId,
|
|
141
|
+
outputDir,
|
|
142
|
+
...(framework && { framework })
|
|
143
|
+
};
|
|
144
|
+
config.saveProjectConfig(projectConfig);
|
|
145
|
+
logger.newLine();
|
|
146
|
+
logger.success('Created thinksoft.json');
|
|
147
|
+
logger.newLine();
|
|
148
|
+
logger.keyValue('App ID', appId);
|
|
149
|
+
logger.keyValue('Output Directory', outputDir);
|
|
150
|
+
if (framework) {
|
|
151
|
+
logger.keyValue('Framework', framework);
|
|
152
|
+
}
|
|
153
|
+
logger.newLine();
|
|
154
|
+
logger.info('Next steps:');
|
|
155
|
+
logger.log(' 1. Build your project: npm run build');
|
|
156
|
+
logger.log(' 2. Deploy: thinksoft deploy');
|
|
157
|
+
}
|
|
158
|
+
//# sourceMappingURL=init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgBH,oBA4HC;AA1ID,wDAA+B;AAC/B,8CAAqB;AACrB,uCAAwB;AACxB,2CAA4B;AAC5B,kDAAmC;AACnC,wDAAyC;AACzC,wDAAyC;AAQlC,KAAK,UAAU,IAAI,CAAC,OAAoB;IAC7C,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,CAAC;QACzB,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,CAAA;QAC7B,MAAM,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAA;QACpD,OAAM;IACR,CAAC;IAED,+BAA+B;IAC/B,IAAI,MAAM,CAAC,mBAAmB,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;QACjD,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,kBAAQ,CAAC,MAAM,CAAC;YAC1C;gBACE,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,WAAW;gBACjB,OAAO,EAAE,2CAA2C;gBACpD,OAAO,EAAE,KAAK;aACf;SACF,CAAC,CAAA;QAEF,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;YACtB,OAAM;QACR,CAAC;IACH,CAAC;IAED,MAAM,CAAC,MAAM,CAAC,8BAA8B,CAAC,CAAA;IAE7C,IAAI,KAAK,GAAG,OAAO,CAAC,GAAG,CAAA;IACvB,IAAI,SAAS,GAAG,OAAO,CAAC,GAAG,IAAI,MAAM,CAAA;IAErC,gDAAgD;IAChD,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,OAAO,GAAG,IAAA,aAAG,EAAC,uBAAuB,CAAC,CAAC,KAAK,EAAE,CAAA;QACpD,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,QAAQ,EAAE,CAAA;QAEnC,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACjB,OAAO,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAA;YACpC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;YAC1B,OAAM;QACR,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,IAAI,EAAE,CAAA;QACjC,OAAO,CAAC,IAAI,EAAE,CAAA;QAEd,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,CAAA;YAC/B,MAAM,CAAC,IAAI,CAAC,8DAA8D,CAAC,CAAA;YAC3E,OAAM;QACR,CAAC;QAED,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,kBAAQ,CAAC,MAAM,CAAC;YAC5C;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,aAAa;gBACnB,OAAO,EAAE,gBAAgB;gBACzB,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,GAAQ,EAAE,EAAE,CAAC,CAAC;oBAClC,IAAI,EAAE,GAAG,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,MAAM,GAAG;oBACnD,KAAK,EAAE,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,MAAM;iBAClC,CAAC,CAAC;aACJ;SACF,CAAC,CAAA;QAEF,KAAK,GAAG,WAAW,CAAA;IACrB,CAAC;IAED,2BAA2B;IAC3B,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;QACjB,yCAAyC;QACzC,MAAM,UAAU,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAA;QAC9D,MAAM,YAAY,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;QAEvF,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,kBAAQ,CAAC,MAAM,CAAC;YACpC;gBACE,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,KAAK;gBACX,OAAO,EAAE,kCAAkC;gBAC3C,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,IAAI,MAAM;gBAClC,QAAQ,EAAE,CAAC,KAAa,EAAE,EAAE;oBAC1B,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;wBAAE,OAAO,uBAAuB,CAAA;oBACjD,OAAO,IAAI,CAAA;gBACb,CAAC;aACF;SACF,CAAC,CAAA;QAEF,SAAS,GAAG,GAAG,CAAA;IACjB,CAAC;IAED,+BAA+B;IAC/B,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,kBAAQ,CAAC,MAAM,CAAC;QAC1C;YACE,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,WAAW;YACjB,OAAO,EAAE,uBAAuB;YAChC,OAAO,EAAE;gBACP,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE;gBACjC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;gBAC7B,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE;gBACpC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE;gBACnC,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,EAAE,EAAE;aACpC;SACF;KACF,CAAC,CAAA;IAEF,cAAc;IACd,MAAM,aAAa,GAAG;QACpB,KAAK,EAAE,KAAM;QACb,SAAS;QACT,GAAG,CAAC,SAAS,IAAI,EAAE,SAAS,EAAE,CAAC;KAChC,CAAA;IAED,MAAM,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAA;IAEvC,MAAM,CAAC,OAAO,EAAE,CAAA;IAChB,MAAM,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAA;IACxC,MAAM,CAAC,OAAO,EAAE,CAAA;IAChB,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,KAAM,CAAC,CAAA;IACjC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,EAAE,SAAS,CAAC,CAAA;IAC9C,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,SAAS,CAAC,CAAA;IACzC,CAAC;IAED,MAAM,CAAC,OAAO,EAAE,CAAA;IAChB,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;IAC1B,MAAM,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAA;IACpD,MAAM,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAA;AAC7C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AAAA;;GAEG;AAQH,wBAAsB,KAAK,CAAC,OAAO,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA+EtE;AAED,wBAAsB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAS5C;AAED,wBAAsB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAuB5C"}
|