@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
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Login command - authenticate with 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.login = login;
|
|
43
|
+
exports.logout = logout;
|
|
44
|
+
exports.whoami = whoami;
|
|
45
|
+
const inquirer_1 = __importDefault(require("inquirer"));
|
|
46
|
+
const ora_1 = __importDefault(require("ora"));
|
|
47
|
+
const api = __importStar(require("../utils/api"));
|
|
48
|
+
const config = __importStar(require("../utils/config"));
|
|
49
|
+
const logger = __importStar(require("../utils/logger"));
|
|
50
|
+
async function login(options) {
|
|
51
|
+
// Check if already logged in
|
|
52
|
+
if (config.isLoggedIn()) {
|
|
53
|
+
const user = config.getUser();
|
|
54
|
+
logger.warning(`Already logged in as ${user?.email}`);
|
|
55
|
+
logger.info('Use "thinksoft logout" to logout first');
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
// If token provided via CLI, use it directly
|
|
59
|
+
if (options.token) {
|
|
60
|
+
if (!options.token.startsWith('ts_')) {
|
|
61
|
+
logger.error('Invalid API key format. Should start with "ts_"');
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
config.saveAuth({ token: options.token });
|
|
65
|
+
logger.success('Logged in with API key');
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
// Interactive OTP login
|
|
69
|
+
logger.header('ThinkSoft Login');
|
|
70
|
+
logger.log('Login with your email address (OTP will be sent)');
|
|
71
|
+
logger.newLine();
|
|
72
|
+
const { email } = await inquirer_1.default.prompt([
|
|
73
|
+
{
|
|
74
|
+
type: 'input',
|
|
75
|
+
name: 'email',
|
|
76
|
+
message: 'Email:',
|
|
77
|
+
validate: (input) => {
|
|
78
|
+
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
|
|
79
|
+
return emailRegex.test(input) || 'Please enter a valid email';
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
]);
|
|
83
|
+
// Send OTP
|
|
84
|
+
const spinner = (0, ora_1.default)('Sending OTP...').start();
|
|
85
|
+
// Use a global app context for CLI auth
|
|
86
|
+
const sendResult = await api.sendOtp(email, '_cli');
|
|
87
|
+
if (sendResult.error) {
|
|
88
|
+
spinner.fail('Failed to send OTP');
|
|
89
|
+
logger.error(sendResult.error);
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
spinner.succeed('OTP sent to your email');
|
|
93
|
+
// Get OTP
|
|
94
|
+
const { otp } = await inquirer_1.default.prompt([
|
|
95
|
+
{
|
|
96
|
+
type: 'input',
|
|
97
|
+
name: 'otp',
|
|
98
|
+
message: 'Enter OTP:',
|
|
99
|
+
validate: (input) => {
|
|
100
|
+
return /^\d{6}$/.test(input) || 'OTP must be 6 digits';
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
]);
|
|
104
|
+
// Verify OTP
|
|
105
|
+
const verifySpinner = (0, ora_1.default)('Verifying...').start();
|
|
106
|
+
const verifyResult = await api.verifyOtp(email, otp, '_cli');
|
|
107
|
+
if (verifyResult.error) {
|
|
108
|
+
verifySpinner.fail('Verification failed');
|
|
109
|
+
logger.error(verifyResult.error);
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
verifySpinner.succeed('Logged in successfully!');
|
|
113
|
+
logger.newLine();
|
|
114
|
+
logger.keyValue('Email', email);
|
|
115
|
+
logger.keyValue('Config', config.getConfigPath());
|
|
116
|
+
}
|
|
117
|
+
async function logout() {
|
|
118
|
+
if (!config.isLoggedIn()) {
|
|
119
|
+
logger.warning('Not logged in');
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
const user = config.getUser();
|
|
123
|
+
config.clearAuth();
|
|
124
|
+
logger.success(`Logged out from ${user?.email || 'ThinkSoft'}`);
|
|
125
|
+
}
|
|
126
|
+
async function whoami() {
|
|
127
|
+
if (!config.isLoggedIn()) {
|
|
128
|
+
logger.warning('Not logged in');
|
|
129
|
+
logger.info('Use "thinksoft login" to authenticate');
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
const user = config.getUser();
|
|
133
|
+
if (!user) {
|
|
134
|
+
logger.warning('Logged in but user info not available');
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
logger.header('Current User');
|
|
138
|
+
logger.keyValue('Email', user.email);
|
|
139
|
+
logger.keyValue('User ID', user.id);
|
|
140
|
+
logger.keyValue('Config', config.getConfigPath());
|
|
141
|
+
if (config.isTokenExpired()) {
|
|
142
|
+
logger.newLine();
|
|
143
|
+
logger.warning('Token expired - will auto-refresh on next request');
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
//# sourceMappingURL=login.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Open command - open app in browser
|
|
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.openApp = openApp;
|
|
43
|
+
const open_1 = __importDefault(require("open"));
|
|
44
|
+
const config = __importStar(require("../utils/config"));
|
|
45
|
+
const logger = __importStar(require("../utils/logger"));
|
|
46
|
+
async function openApp(appId, options) {
|
|
47
|
+
// Get app ID from argument or project config
|
|
48
|
+
const projectConfig = config.getProjectConfig();
|
|
49
|
+
const targetAppId = appId || projectConfig?.appId;
|
|
50
|
+
if (!targetAppId) {
|
|
51
|
+
logger.error('No app ID specified');
|
|
52
|
+
logger.info('Either provide an app ID or run from a project with thinksoft.json');
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
let url;
|
|
56
|
+
if (options.admin) {
|
|
57
|
+
url = `https://thinksoftai.com/app/${targetAppId}`;
|
|
58
|
+
logger.info(`Opening admin UI: ${url}`);
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
url = `https://${targetAppId.toLowerCase()}.thinksoftai.com`;
|
|
62
|
+
logger.info(`Opening app: ${url}`);
|
|
63
|
+
}
|
|
64
|
+
await (0, open_1.default)(url);
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=open.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"open.js","sourceRoot":"","sources":["../../src/commands/open.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAUH,0BAsBC;AA9BD,gDAAuB;AACvB,wDAAyC;AACzC,wDAAyC;AAMlC,KAAK,UAAU,OAAO,CAAC,KAAyB,EAAE,OAAoB;IAC3E,6CAA6C;IAC7C,MAAM,aAAa,GAAG,MAAM,CAAC,gBAAgB,EAAE,CAAA;IAC/C,MAAM,WAAW,GAAG,KAAK,IAAI,aAAa,EAAE,KAAK,CAAA;IAEjD,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,MAAM,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAA;QACnC,MAAM,CAAC,IAAI,CAAC,oEAAoE,CAAC,CAAA;QACjF,OAAM;IACR,CAAC;IAED,IAAI,GAAW,CAAA;IAEf,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QAClB,GAAG,GAAG,+BAA+B,WAAW,EAAE,CAAA;QAClD,MAAM,CAAC,IAAI,CAAC,qBAAqB,GAAG,EAAE,CAAC,CAAA;IACzC,CAAC;SAAM,CAAC;QACN,GAAG,GAAG,WAAW,WAAW,CAAC,WAAW,EAAE,kBAAkB,CAAA;QAC5D,MAAM,CAAC,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC,CAAA;IACpC,CAAC;IAED,MAAM,IAAA,cAAI,EAAC,GAAG,CAAC,CAAA;AACjB,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;GAGG"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
/**
|
|
4
|
+
* ThinkSoft CLI
|
|
5
|
+
* Deploy apps to ThinkSoft platform
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
const commander_1 = require("commander");
|
|
9
|
+
const login_1 = require("./commands/login");
|
|
10
|
+
const apps_1 = require("./commands/apps");
|
|
11
|
+
const init_1 = require("./commands/init");
|
|
12
|
+
const create_1 = require("./commands/create");
|
|
13
|
+
const deploy_1 = require("./commands/deploy");
|
|
14
|
+
const open_1 = require("./commands/open");
|
|
15
|
+
const program = new commander_1.Command();
|
|
16
|
+
program
|
|
17
|
+
.name('thinksoft')
|
|
18
|
+
.description('ThinkSoft CLI - Deploy apps to ThinkSoft platform')
|
|
19
|
+
.version('1.0.0');
|
|
20
|
+
// Login command
|
|
21
|
+
program
|
|
22
|
+
.command('login')
|
|
23
|
+
.description('Authenticate with ThinkSoft')
|
|
24
|
+
.option('-t, --token <token>', 'API key (ts_secret_xxx)')
|
|
25
|
+
.action(login_1.login);
|
|
26
|
+
// Logout command
|
|
27
|
+
program
|
|
28
|
+
.command('logout')
|
|
29
|
+
.description('Clear stored credentials')
|
|
30
|
+
.action(login_1.logout);
|
|
31
|
+
// Whoami command
|
|
32
|
+
program
|
|
33
|
+
.command('whoami')
|
|
34
|
+
.description('Show current logged in user')
|
|
35
|
+
.action(login_1.whoami);
|
|
36
|
+
// Apps command
|
|
37
|
+
program
|
|
38
|
+
.command('apps')
|
|
39
|
+
.description('List your apps')
|
|
40
|
+
.action(apps_1.apps);
|
|
41
|
+
// Create command
|
|
42
|
+
program
|
|
43
|
+
.command('create <description>')
|
|
44
|
+
.description('Create a new app with AI')
|
|
45
|
+
.option('-t, --type <type>', 'App type: workapp or storeapp', 'workapp')
|
|
46
|
+
.action(create_1.create);
|
|
47
|
+
// Init command
|
|
48
|
+
program
|
|
49
|
+
.command('init')
|
|
50
|
+
.description('Initialize project with thinksoft.json')
|
|
51
|
+
.option('-a, --app <appId>', 'App ID to link')
|
|
52
|
+
.option('-d, --dir <directory>', 'Output directory (default: dist)')
|
|
53
|
+
.option('-y, --yes', 'Skip confirmation prompts')
|
|
54
|
+
.action(init_1.init);
|
|
55
|
+
// Deploy command
|
|
56
|
+
program
|
|
57
|
+
.command('deploy')
|
|
58
|
+
.description('Deploy frontend to ThinkSoft')
|
|
59
|
+
.option('-a, --app <appId>', 'App ID to deploy to')
|
|
60
|
+
.option('-d, --dir <directory>', 'Directory to deploy (default: from thinksoft.json or dist)')
|
|
61
|
+
.action(deploy_1.deploy);
|
|
62
|
+
// Open command
|
|
63
|
+
program
|
|
64
|
+
.command('open [appId]')
|
|
65
|
+
.description('Open app in browser')
|
|
66
|
+
.option('--admin', 'Open admin UI instead of deployed app')
|
|
67
|
+
.action(open_1.openApp);
|
|
68
|
+
// Parse arguments
|
|
69
|
+
program.parse();
|
|
70
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;AACA;;;GAGG;;AAEH,yCAAmC;AACnC,4CAAwD;AACxD,0CAAsC;AACtC,0CAAsC;AACtC,8CAA0C;AAC1C,8CAA0C;AAC1C,0CAAyC;AAEzC,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAA;AAE7B,OAAO;KACJ,IAAI,CAAC,WAAW,CAAC;KACjB,WAAW,CAAC,mDAAmD,CAAC;KAChE,OAAO,CAAC,OAAO,CAAC,CAAA;AAEnB,gBAAgB;AAChB,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,6BAA6B,CAAC;KAC1C,MAAM,CAAC,qBAAqB,EAAE,yBAAyB,CAAC;KACxD,MAAM,CAAC,aAAK,CAAC,CAAA;AAEhB,iBAAiB;AACjB,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,0BAA0B,CAAC;KACvC,MAAM,CAAC,cAAM,CAAC,CAAA;AAEjB,iBAAiB;AACjB,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,6BAA6B,CAAC;KAC1C,MAAM,CAAC,cAAM,CAAC,CAAA;AAEjB,eAAe;AACf,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,gBAAgB,CAAC;KAC7B,MAAM,CAAC,WAAI,CAAC,CAAA;AAEf,iBAAiB;AACjB,OAAO;KACJ,OAAO,CAAC,sBAAsB,CAAC;KAC/B,WAAW,CAAC,0BAA0B,CAAC;KACvC,MAAM,CAAC,mBAAmB,EAAE,+BAA+B,EAAE,SAAS,CAAC;KACvE,MAAM,CAAC,eAAM,CAAC,CAAA;AAEjB,eAAe;AACf,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,wCAAwC,CAAC;KACrD,MAAM,CAAC,mBAAmB,EAAE,gBAAgB,CAAC;KAC7C,MAAM,CAAC,uBAAuB,EAAE,kCAAkC,CAAC;KACnE,MAAM,CAAC,WAAW,EAAE,2BAA2B,CAAC;KAChD,MAAM,CAAC,WAAI,CAAC,CAAA;AAEf,iBAAiB;AACjB,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,8BAA8B,CAAC;KAC3C,MAAM,CAAC,mBAAmB,EAAE,qBAAqB,CAAC;KAClD,MAAM,CAAC,uBAAuB,EAAE,4DAA4D,CAAC;KAC7F,MAAM,CAAC,eAAM,CAAC,CAAA;AAEjB,eAAe;AACf,OAAO;KACJ,OAAO,CAAC,cAAc,CAAC;KACvB,WAAW,CAAC,qBAAqB,CAAC;KAClC,MAAM,CAAC,SAAS,EAAE,uCAAuC,CAAC;KAC1D,MAAM,CAAC,cAAO,CAAC,CAAA;AAElB,kBAAkB;AAClB,OAAO,CAAC,KAAK,EAAE,CAAA"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* API utility - makes requests to ThinkSoft API
|
|
3
|
+
*/
|
|
4
|
+
interface ApiResponse<T = any> {
|
|
5
|
+
success?: boolean;
|
|
6
|
+
data?: T;
|
|
7
|
+
error?: string;
|
|
8
|
+
token?: string;
|
|
9
|
+
refresh_token?: string;
|
|
10
|
+
expires_in?: number;
|
|
11
|
+
user?: {
|
|
12
|
+
id: string;
|
|
13
|
+
email: string;
|
|
14
|
+
};
|
|
15
|
+
message?: string;
|
|
16
|
+
}
|
|
17
|
+
export declare function request<T = any>(path: string, options?: {
|
|
18
|
+
method?: 'GET' | 'POST' | 'PUT' | 'DELETE';
|
|
19
|
+
body?: any;
|
|
20
|
+
requiresAuth?: boolean;
|
|
21
|
+
}): Promise<ApiResponse<T>>;
|
|
22
|
+
export declare function sendOtp(email: string, appId?: string): Promise<ApiResponse>;
|
|
23
|
+
export declare function verifyOtp(email: string, otp: string, appId?: string): Promise<ApiResponse>;
|
|
24
|
+
export declare function listApps(): Promise<ApiResponse<any[]>>;
|
|
25
|
+
export declare function createApp(prompt: string, type?: string): Promise<ApiResponse>;
|
|
26
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/utils/api.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,UAAU,WAAW,CAAC,CAAC,GAAG,GAAG;IAC3B,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,IAAI,CAAC,EAAE,CAAC,CAAA;IACR,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,IAAI,CAAC,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAA;IACpC,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AA4CD,wBAAsB,OAAO,CAAC,CAAC,GAAG,GAAG,EACnC,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE;IACP,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,CAAA;IAC1C,IAAI,CAAC,EAAE,GAAG,CAAA;IACV,YAAY,CAAC,EAAE,OAAO,CAAA;CAClB,GACL,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAuCzB;AAGD,wBAAsB,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,GAAE,MAAkB,GAAG,OAAO,CAAC,WAAW,CAAC,CAM5F;AAED,wBAAsB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,GAAE,MAAkB,GAAG,OAAO,CAAC,WAAW,CAAC,CAiB3G;AAGD,wBAAsB,QAAQ,IAAI,OAAO,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC,CAE5D;AAED,wBAAsB,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,GAAE,MAAkB,GAAG,OAAO,CAAC,WAAW,CAAC,CAK9F"}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* API utility - makes requests to ThinkSoft API
|
|
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
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.request = request;
|
|
40
|
+
exports.sendOtp = sendOtp;
|
|
41
|
+
exports.verifyOtp = verifyOtp;
|
|
42
|
+
exports.listApps = listApps;
|
|
43
|
+
exports.createApp = createApp;
|
|
44
|
+
const config = __importStar(require("./config"));
|
|
45
|
+
const BASE_URL = 'https://thinksoftai.com/api/v1';
|
|
46
|
+
async function refreshToken() {
|
|
47
|
+
const refreshToken = config.getRefreshToken();
|
|
48
|
+
if (!refreshToken)
|
|
49
|
+
return false;
|
|
50
|
+
try {
|
|
51
|
+
// Use a dummy appId for auth refresh - the API handles it
|
|
52
|
+
const response = await fetch(`${BASE_URL}/auth/refresh`, {
|
|
53
|
+
method: 'POST',
|
|
54
|
+
headers: { 'Content-Type': 'application/json' },
|
|
55
|
+
body: JSON.stringify({ refresh_token: refreshToken })
|
|
56
|
+
});
|
|
57
|
+
if (!response.ok) {
|
|
58
|
+
config.clearAuth();
|
|
59
|
+
return false;
|
|
60
|
+
}
|
|
61
|
+
const data = await response.json();
|
|
62
|
+
if (data.token) {
|
|
63
|
+
config.saveAuth({
|
|
64
|
+
token: data.token,
|
|
65
|
+
refreshToken: data.refresh_token,
|
|
66
|
+
expiresIn: data.expires_in,
|
|
67
|
+
user: data.user
|
|
68
|
+
});
|
|
69
|
+
return true;
|
|
70
|
+
}
|
|
71
|
+
return false;
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
return false;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
async function ensureValidToken() {
|
|
78
|
+
if (!config.isLoggedIn())
|
|
79
|
+
return false;
|
|
80
|
+
if (!config.isTokenExpired())
|
|
81
|
+
return true;
|
|
82
|
+
return refreshToken();
|
|
83
|
+
}
|
|
84
|
+
async function request(path, options = {}) {
|
|
85
|
+
const { method = 'GET', body, requiresAuth = true } = options;
|
|
86
|
+
// Auto-refresh if needed
|
|
87
|
+
if (requiresAuth) {
|
|
88
|
+
const isValid = await ensureValidToken();
|
|
89
|
+
if (!isValid) {
|
|
90
|
+
return { error: 'Session expired. Please login again.' };
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
const headers = {
|
|
94
|
+
'Content-Type': 'application/json'
|
|
95
|
+
};
|
|
96
|
+
if (requiresAuth) {
|
|
97
|
+
const token = config.getToken();
|
|
98
|
+
if (token) {
|
|
99
|
+
headers['Authorization'] = `Bearer ${token}`;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
try {
|
|
103
|
+
const response = await fetch(`${BASE_URL}${path}`, {
|
|
104
|
+
method,
|
|
105
|
+
headers,
|
|
106
|
+
body: body ? JSON.stringify(body) : undefined
|
|
107
|
+
});
|
|
108
|
+
const data = await response.json();
|
|
109
|
+
if (!response.ok) {
|
|
110
|
+
return { error: data.error || `Request failed with status ${response.status}` };
|
|
111
|
+
}
|
|
112
|
+
return data;
|
|
113
|
+
}
|
|
114
|
+
catch (error) {
|
|
115
|
+
return { error: error.message || 'Network error' };
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
// Auth APIs
|
|
119
|
+
async function sendOtp(email, appId = '_global') {
|
|
120
|
+
return request(`/${appId}/auth/send-otp`, {
|
|
121
|
+
method: 'POST',
|
|
122
|
+
body: { email },
|
|
123
|
+
requiresAuth: false
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
async function verifyOtp(email, otp, appId = '_global') {
|
|
127
|
+
const result = await request(`/${appId}/auth/verify-otp`, {
|
|
128
|
+
method: 'POST',
|
|
129
|
+
body: { email, otp },
|
|
130
|
+
requiresAuth: false
|
|
131
|
+
});
|
|
132
|
+
if (result.token) {
|
|
133
|
+
config.saveAuth({
|
|
134
|
+
token: result.token,
|
|
135
|
+
refreshToken: result.refresh_token,
|
|
136
|
+
expiresIn: result.expires_in,
|
|
137
|
+
user: result.user
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
return result;
|
|
141
|
+
}
|
|
142
|
+
// App APIs
|
|
143
|
+
async function listApps() {
|
|
144
|
+
return request('/apps', { method: 'GET' });
|
|
145
|
+
}
|
|
146
|
+
async function createApp(prompt, type = 'workapp') {
|
|
147
|
+
return request('/apps/create', {
|
|
148
|
+
method: 'POST',
|
|
149
|
+
body: { prompt, type }
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
//# sourceMappingURL=api.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/utils/api.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Config utility - manages CLI configuration stored in ~/.thinksoft/
|
|
3
|
+
*/
|
|
4
|
+
interface ProjectConfig {
|
|
5
|
+
appId: string;
|
|
6
|
+
name?: string;
|
|
7
|
+
outputDir: string;
|
|
8
|
+
framework?: string;
|
|
9
|
+
}
|
|
10
|
+
export declare function getToken(): string | undefined;
|
|
11
|
+
export declare function getRefreshToken(): string | undefined;
|
|
12
|
+
export declare function getUser(): {
|
|
13
|
+
id: string;
|
|
14
|
+
email: string;
|
|
15
|
+
} | undefined;
|
|
16
|
+
export declare function getExpiresAt(): number | undefined;
|
|
17
|
+
export declare function isLoggedIn(): boolean;
|
|
18
|
+
export declare function isTokenExpired(bufferSeconds?: number): boolean;
|
|
19
|
+
export declare function saveAuth(data: {
|
|
20
|
+
token: string;
|
|
21
|
+
refreshToken?: string;
|
|
22
|
+
expiresIn?: number;
|
|
23
|
+
user?: {
|
|
24
|
+
id: string;
|
|
25
|
+
email: string;
|
|
26
|
+
};
|
|
27
|
+
}): void;
|
|
28
|
+
export declare function clearAuth(): void;
|
|
29
|
+
export declare function getConfigPath(): string;
|
|
30
|
+
export declare function getProjectConfig(): ProjectConfig | null;
|
|
31
|
+
export declare function saveProjectConfig(config: ProjectConfig): void;
|
|
32
|
+
export declare function projectConfigExists(): boolean;
|
|
33
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAcH,UAAU,aAAa;IACrB,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAmBD,wBAAgB,QAAQ,IAAI,MAAM,GAAG,SAAS,CAE7C;AAED,wBAAgB,eAAe,IAAI,MAAM,GAAG,SAAS,CAEpD;AAED,wBAAgB,OAAO,IAAI;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAEnE;AAED,wBAAgB,YAAY,IAAI,MAAM,GAAG,SAAS,CAEjD;AAED,wBAAgB,UAAU,IAAI,OAAO,CAEpC;AAED,wBAAgB,cAAc,CAAC,aAAa,GAAE,MAAY,GAAG,OAAO,CAKnE;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE;IAC7B,KAAK,EAAE,MAAM,CAAA;IACb,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,IAAI,CAAC,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAA;CACrC,GAAG,IAAI,CAeP;AAED,wBAAgB,SAAS,IAAI,IAAI,CAEhC;AAED,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAQD,wBAAgB,gBAAgB,IAAI,aAAa,GAAG,IAAI,CAavD;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAG7D;AAED,wBAAgB,mBAAmB,IAAI,OAAO,CAE7C"}
|