@convext/cli 0.3.2 → 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/dist/api.js +30 -47
- package/dist/api.js.map +1 -1
- package/dist/cli.js +45 -50
- package/dist/cli.js.map +1 -1
- package/dist/commands/check.js +26 -32
- package/dist/commands/check.js.map +1 -1
- package/dist/commands/init.js +72 -78
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/login.js +46 -53
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/mcp.js +80 -87
- package/dist/commands/mcp.js.map +1 -1
- package/dist/commands/sync.js +73 -79
- package/dist/commands/sync.js.map +1 -1
- package/dist/config.js +14 -20
- package/dist/config.js.map +1 -1
- package/dist/index.js +6 -25
- package/dist/index.js.map +1 -1
- package/dist/utils/fileManager.js +13 -17
- package/dist/utils/fileManager.js.map +1 -1
- package/dist/utils/prompts.js +10 -16
- package/dist/utils/prompts.js.map +1 -1
- package/dist/utils/scanner.js +30 -33
- package/dist/utils/scanner.js.map +1 -1
- package/dist/utils/versionCheck.d.ts.map +1 -1
- package/dist/utils/versionCheck.js +32 -27
- package/dist/utils/versionCheck.js.map +1 -1
- package/package.json +2 -1
package/dist/commands/init.js
CHANGED
|
@@ -1,23 +1,17 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
const node_path_1 = require("node:path");
|
|
9
|
-
const chalk_1 = __importDefault(require("chalk"));
|
|
10
|
-
const ora_1 = __importDefault(require("ora"));
|
|
11
|
-
const api_js_1 = require("../api.js");
|
|
12
|
-
const scanner_js_1 = require("../utils/scanner.js");
|
|
13
|
-
const prompts_js_1 = require("../utils/prompts.js");
|
|
1
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
2
|
+
import { basename, join } from "node:path";
|
|
3
|
+
import chalk from "chalk";
|
|
4
|
+
import ora from "ora";
|
|
5
|
+
import { registerProject, getRuleSets, getOrganizations, getProjects } from "../api.js";
|
|
6
|
+
import { scanRepository } from "../utils/scanner.js";
|
|
7
|
+
import { promptInput, promptConfirm, promptSelect } from "../utils/prompts.js";
|
|
14
8
|
function detectProjectName() {
|
|
15
9
|
const cwd = process.cwd();
|
|
16
10
|
// Try package.json
|
|
17
|
-
const packageJsonPath =
|
|
18
|
-
if (
|
|
11
|
+
const packageJsonPath = join(cwd, "package.json");
|
|
12
|
+
if (existsSync(packageJsonPath)) {
|
|
19
13
|
try {
|
|
20
|
-
const pkg = JSON.parse(
|
|
14
|
+
const pkg = JSON.parse(readFileSync(packageJsonPath, "utf-8"));
|
|
21
15
|
if (pkg.name)
|
|
22
16
|
return pkg.name;
|
|
23
17
|
}
|
|
@@ -26,15 +20,15 @@ function detectProjectName() {
|
|
|
26
20
|
}
|
|
27
21
|
}
|
|
28
22
|
// Try Gemfile (look for gem name)
|
|
29
|
-
const gemspecFiles = [
|
|
23
|
+
const gemspecFiles = [join(cwd, "*.gemspec")];
|
|
30
24
|
for (const pattern of gemspecFiles) {
|
|
31
25
|
// Simple detection - fall back to directory name
|
|
32
26
|
}
|
|
33
27
|
// Try pyproject.toml
|
|
34
|
-
const pyprojectPath =
|
|
35
|
-
if (
|
|
28
|
+
const pyprojectPath = join(cwd, "pyproject.toml");
|
|
29
|
+
if (existsSync(pyprojectPath)) {
|
|
36
30
|
try {
|
|
37
|
-
const content =
|
|
31
|
+
const content = readFileSync(pyprojectPath, "utf-8");
|
|
38
32
|
const nameMatch = content.match(/name\s*=\s*["']([^"']+)["']/);
|
|
39
33
|
if (nameMatch)
|
|
40
34
|
return nameMatch[1];
|
|
@@ -44,16 +38,16 @@ function detectProjectName() {
|
|
|
44
38
|
}
|
|
45
39
|
}
|
|
46
40
|
// Fall back to directory name
|
|
47
|
-
return
|
|
41
|
+
return basename(cwd);
|
|
48
42
|
}
|
|
49
43
|
function detectRepoUrl() {
|
|
50
44
|
const cwd = process.cwd();
|
|
51
|
-
const gitConfigPath =
|
|
52
|
-
if (!
|
|
45
|
+
const gitConfigPath = join(cwd, ".git/config");
|
|
46
|
+
if (!existsSync(gitConfigPath)) {
|
|
53
47
|
return undefined;
|
|
54
48
|
}
|
|
55
49
|
try {
|
|
56
|
-
const content =
|
|
50
|
+
const content = readFileSync(gitConfigPath, "utf-8");
|
|
57
51
|
const urlMatch = content.match(/url\s*=\s*(.+)/);
|
|
58
52
|
if (urlMatch) {
|
|
59
53
|
let url = urlMatch[1].trim();
|
|
@@ -75,10 +69,10 @@ function detectRepoUrl() {
|
|
|
75
69
|
function detectProjectDescription() {
|
|
76
70
|
const cwd = process.cwd();
|
|
77
71
|
// Try package.json
|
|
78
|
-
const packageJsonPath =
|
|
79
|
-
if (
|
|
72
|
+
const packageJsonPath = join(cwd, "package.json");
|
|
73
|
+
if (existsSync(packageJsonPath)) {
|
|
80
74
|
try {
|
|
81
|
-
const pkg = JSON.parse(
|
|
75
|
+
const pkg = JSON.parse(readFileSync(packageJsonPath, "utf-8"));
|
|
82
76
|
if (pkg.description)
|
|
83
77
|
return pkg.description;
|
|
84
78
|
}
|
|
@@ -88,10 +82,10 @@ function detectProjectDescription() {
|
|
|
88
82
|
}
|
|
89
83
|
// Try README first line
|
|
90
84
|
for (const readme of ["README.md", "README.rst", "README.txt", "README"]) {
|
|
91
|
-
const readmePath =
|
|
92
|
-
if (
|
|
85
|
+
const readmePath = join(cwd, readme);
|
|
86
|
+
if (existsSync(readmePath)) {
|
|
93
87
|
try {
|
|
94
|
-
const content =
|
|
88
|
+
const content = readFileSync(readmePath, "utf-8");
|
|
95
89
|
const lines = content.split("\n").filter((l) => l.trim() && !l.startsWith("#"));
|
|
96
90
|
if (lines[0]) {
|
|
97
91
|
return lines[0].slice(0, 200);
|
|
@@ -104,21 +98,21 @@ function detectProjectDescription() {
|
|
|
104
98
|
}
|
|
105
99
|
return undefined;
|
|
106
100
|
}
|
|
107
|
-
async function initCommand(options) {
|
|
108
|
-
const spinner = (
|
|
101
|
+
export async function initCommand(options) {
|
|
102
|
+
const spinner = ora("Scanning repository...").start();
|
|
109
103
|
try {
|
|
110
104
|
// Step 1: Scan repository
|
|
111
|
-
const insights =
|
|
105
|
+
const insights = scanRepository();
|
|
112
106
|
const detectedRepoUrl = options.repoUrl || detectRepoUrl();
|
|
113
107
|
spinner.succeed("Scanned repository");
|
|
114
|
-
console.log("\n" +
|
|
108
|
+
console.log("\n" + chalk.bold("Detected Stack:"));
|
|
115
109
|
logInsight("Languages", insights.languages);
|
|
116
110
|
logInsight("Frameworks", insights.frameworks);
|
|
117
111
|
logInsight("Package Managers", insights.packageManagers);
|
|
118
112
|
logInsight("Testing", insights.testing);
|
|
119
113
|
logInsight("Linters", insights.linters);
|
|
120
114
|
if (insights.aiFiles.length > 0) {
|
|
121
|
-
console.log(
|
|
115
|
+
console.log(chalk.yellow(`\nExisting AI context files:\n - ${insights.aiFiles.join("\n - ")}`));
|
|
122
116
|
}
|
|
123
117
|
// Step 2: Fetch organizations and projects
|
|
124
118
|
spinner.start("Fetching your workspaces and projects...");
|
|
@@ -126,8 +120,8 @@ async function initCommand(options) {
|
|
|
126
120
|
let projects = [];
|
|
127
121
|
try {
|
|
128
122
|
const [orgsResult, projectsResult] = await Promise.all([
|
|
129
|
-
|
|
130
|
-
|
|
123
|
+
getOrganizations(),
|
|
124
|
+
getProjects(),
|
|
131
125
|
]);
|
|
132
126
|
organizations = orgsResult.organizations;
|
|
133
127
|
projects = projectsResult.projects;
|
|
@@ -139,29 +133,29 @@ async function initCommand(options) {
|
|
|
139
133
|
}
|
|
140
134
|
// Step 3: Show organizations
|
|
141
135
|
if (organizations.length === 0) {
|
|
142
|
-
console.log(
|
|
136
|
+
console.log(chalk.yellow("\nNo workspaces found. Please create one in the Convext web interface first."));
|
|
143
137
|
return;
|
|
144
138
|
}
|
|
145
|
-
console.log("\n" +
|
|
139
|
+
console.log("\n" + chalk.bold("Your Workspaces:"));
|
|
146
140
|
organizations.forEach((org, idx) => {
|
|
147
|
-
console.log(` ${idx + 1}. ${
|
|
141
|
+
console.log(` ${idx + 1}. ${chalk.cyan(org.name)} ${chalk.gray(`(${org.projects_count} projects)`)}`);
|
|
148
142
|
});
|
|
149
143
|
// Step 4: Check for matching project by repo URL
|
|
150
144
|
const matchingProject = detectedRepoUrl
|
|
151
145
|
? projects.find(p => p.repo_url === detectedRepoUrl)
|
|
152
146
|
: undefined;
|
|
153
147
|
if (matchingProject) {
|
|
154
|
-
console.log("\n" +
|
|
155
|
-
console.log(` ${
|
|
156
|
-
if (await
|
|
148
|
+
console.log("\n" + chalk.green("✓ Found existing project for this repository:"));
|
|
149
|
+
console.log(` ${chalk.cyan(matchingProject.name)} ${chalk.gray(`(${matchingProject.organization_name || 'No org'})`)}`);
|
|
150
|
+
if (await promptConfirm("Link to this project?", true)) {
|
|
157
151
|
await writeProjectConfig(matchingProject.id, matchingProject.name, detectedRepoUrl);
|
|
158
|
-
console.log(
|
|
152
|
+
console.log(chalk.green("\n✓ Linked to existing project"));
|
|
159
153
|
return;
|
|
160
154
|
}
|
|
161
155
|
}
|
|
162
156
|
// Step 5: Show existing projects grouped by org
|
|
163
157
|
if (projects.length > 0) {
|
|
164
|
-
console.log("\n" +
|
|
158
|
+
console.log("\n" + chalk.bold("Existing Projects:"));
|
|
165
159
|
// Group projects by organization
|
|
166
160
|
const projectsByOrg = new Map();
|
|
167
161
|
for (const proj of projects) {
|
|
@@ -173,41 +167,41 @@ async function initCommand(options) {
|
|
|
173
167
|
}
|
|
174
168
|
// Display grouped
|
|
175
169
|
for (const [orgName, orgProjects] of projectsByOrg) {
|
|
176
|
-
console.log(
|
|
170
|
+
console.log(chalk.gray(`\n ${orgName}:`));
|
|
177
171
|
for (const proj of orgProjects) {
|
|
178
|
-
console.log(` • ${
|
|
172
|
+
console.log(` • ${chalk.cyan(proj.name)}`);
|
|
179
173
|
}
|
|
180
174
|
}
|
|
181
175
|
}
|
|
182
176
|
const actionOptions = [
|
|
183
|
-
{ label:
|
|
177
|
+
{ label: chalk.green("+ Create new project"), value: { type: "create" } },
|
|
184
178
|
...projects.map(proj => ({
|
|
185
179
|
label: `Link to: ${proj.name}${proj.organization_name ? ` (${proj.organization_name})` : ""}`,
|
|
186
180
|
value: { type: "link", project: proj },
|
|
187
181
|
})),
|
|
188
182
|
];
|
|
189
|
-
const action = await
|
|
183
|
+
const action = await promptSelect("\nWhat would you like to do?", actionOptions, 0);
|
|
190
184
|
if (action.type === "link") {
|
|
191
185
|
await writeProjectConfig(action.project.id, action.project.name, action.project.repo_url);
|
|
192
|
-
console.log(
|
|
186
|
+
console.log(chalk.green(`\n✓ Linked to project: ${action.project.name}`));
|
|
193
187
|
return;
|
|
194
188
|
}
|
|
195
189
|
// Step 7: Create new project
|
|
196
|
-
console.log("\n" +
|
|
190
|
+
console.log("\n" + chalk.bold("Create New Project"));
|
|
197
191
|
const detectedName = options.name || detectProjectName();
|
|
198
192
|
const detectedDescription = options.description || detectProjectDescription();
|
|
199
|
-
const finalName = (await
|
|
200
|
-
const finalRepoUrl = (await
|
|
201
|
-
const finalDescription = (await
|
|
193
|
+
const finalName = (await promptInput("Project name", detectedName)).trim() || detectedName;
|
|
194
|
+
const finalRepoUrl = (await promptInput("Repository URL", detectedRepoUrl)).trim() || detectedRepoUrl;
|
|
195
|
+
const finalDescription = (await promptInput("Description (optional)", detectedDescription)).trim() || detectedDescription;
|
|
202
196
|
// Select organization
|
|
203
197
|
let orgSlug = options.organization;
|
|
204
198
|
if (!orgSlug) {
|
|
205
199
|
if (organizations.length === 1) {
|
|
206
200
|
orgSlug = organizations[0].slug;
|
|
207
|
-
console.log(
|
|
201
|
+
console.log(chalk.gray(`\nUsing workspace: ${organizations[0].name}`));
|
|
208
202
|
}
|
|
209
203
|
else {
|
|
210
|
-
const selectedOrg = await
|
|
204
|
+
const selectedOrg = await promptSelect("Select a workspace:", organizations.map(org => ({
|
|
211
205
|
label: `${org.name} (${org.projects_count} projects)`,
|
|
212
206
|
value: org,
|
|
213
207
|
})), 0);
|
|
@@ -215,21 +209,21 @@ async function initCommand(options) {
|
|
|
215
209
|
}
|
|
216
210
|
}
|
|
217
211
|
spinner.start("Creating project...");
|
|
218
|
-
const result = await
|
|
212
|
+
const result = await registerProject(finalName, finalRepoUrl, finalDescription, orgSlug);
|
|
219
213
|
spinner.succeed(`Project created with ID: ${result.project_id}`);
|
|
220
214
|
await writeProjectConfig(result.project_id, finalName, finalRepoUrl);
|
|
221
215
|
summarizeProject(result.project_id, finalName, finalRepoUrl, finalDescription);
|
|
222
216
|
await showRulesetSummary();
|
|
223
|
-
console.log("\n" +
|
|
217
|
+
console.log("\n" + chalk.bold("Next Steps:"));
|
|
224
218
|
console.log(` 1. Assign rule sets in the Convext web interface.`);
|
|
225
|
-
console.log(` 2. Run ${
|
|
226
|
-
console.log(` 3. Commit ${
|
|
227
|
-
console.log("\n" +
|
|
219
|
+
console.log(` 2. Run ${chalk.cyan("convext sync")} to generate AI context files.`);
|
|
220
|
+
console.log(` 3. Commit ${chalk.cyan(".convext/")} directory and generated files.`);
|
|
221
|
+
console.log("\n" + chalk.green("✓ Project initialized successfully"));
|
|
228
222
|
}
|
|
229
223
|
catch (error) {
|
|
230
224
|
spinner.fail("Initialization failed");
|
|
231
225
|
if (error instanceof Error) {
|
|
232
|
-
console.error(
|
|
226
|
+
console.error(chalk.red(`Error: ${error.message}`));
|
|
233
227
|
}
|
|
234
228
|
process.exit(1);
|
|
235
229
|
}
|
|
@@ -237,16 +231,16 @@ async function initCommand(options) {
|
|
|
237
231
|
function logInsight(label, values) {
|
|
238
232
|
const data = Array.from(values);
|
|
239
233
|
if (data.length === 0) {
|
|
240
|
-
console.log(` ${label}: ${
|
|
234
|
+
console.log(` ${label}: ${chalk.gray("none detected")}`);
|
|
241
235
|
}
|
|
242
236
|
else {
|
|
243
|
-
console.log(` ${label}: ${
|
|
237
|
+
console.log(` ${label}: ${chalk.cyan(data.join(", "))}`);
|
|
244
238
|
}
|
|
245
239
|
}
|
|
246
240
|
async function writeProjectConfig(projectId, name, repoUrl) {
|
|
247
241
|
const cwd = process.cwd();
|
|
248
|
-
const convextDir =
|
|
249
|
-
const localConfigPath =
|
|
242
|
+
const convextDir = join(cwd, ".convext");
|
|
243
|
+
const localConfigPath = join(convextDir, "config.json");
|
|
250
244
|
const { writeFileSync, mkdirSync, existsSync } = await import("node:fs");
|
|
251
245
|
if (!existsSync(convextDir)) {
|
|
252
246
|
mkdirSync(convextDir, { recursive: true });
|
|
@@ -260,35 +254,35 @@ async function writeProjectConfig(projectId, name, repoUrl) {
|
|
|
260
254
|
writeFileSync(localConfigPath, JSON.stringify(localConfig, null, 2));
|
|
261
255
|
}
|
|
262
256
|
function summarizeProject(projectId, name, repoUrl, description) {
|
|
263
|
-
console.log("\n" +
|
|
264
|
-
console.log(` Name: ${
|
|
265
|
-
console.log(` Project ID: ${
|
|
257
|
+
console.log("\n" + chalk.bold("Project Configuration:"));
|
|
258
|
+
console.log(` Name: ${chalk.cyan(name)}`);
|
|
259
|
+
console.log(` Project ID: ${chalk.cyan(projectId)}`);
|
|
266
260
|
if (repoUrl) {
|
|
267
|
-
console.log(` Repository: ${
|
|
261
|
+
console.log(` Repository: ${chalk.cyan(repoUrl)}`);
|
|
268
262
|
}
|
|
269
263
|
if (description) {
|
|
270
|
-
console.log(` Description: ${
|
|
264
|
+
console.log(` Description: ${chalk.gray(description.slice(0, 60))}${description.length > 60 ? "..." : ""}`);
|
|
271
265
|
}
|
|
272
266
|
}
|
|
273
267
|
async function showRulesetSummary() {
|
|
274
|
-
console.log("\n" +
|
|
268
|
+
console.log("\n" + chalk.bold("Available Rulesets:"));
|
|
275
269
|
try {
|
|
276
|
-
const { rulesets } = await
|
|
270
|
+
const { rulesets } = await getRuleSets();
|
|
277
271
|
if (rulesets.length > 0) {
|
|
278
272
|
for (const rs of rulesets.slice(0, 5)) {
|
|
279
|
-
console.log(` • ${
|
|
273
|
+
console.log(` • ${chalk.cyan(rs.name)} - ${rs.rules_count} rules, ${rs.standards_count} standards`);
|
|
280
274
|
}
|
|
281
275
|
if (rulesets.length > 5) {
|
|
282
|
-
console.log(
|
|
276
|
+
console.log(chalk.gray(` ... and ${rulesets.length - 5} more`));
|
|
283
277
|
}
|
|
284
|
-
console.log(
|
|
278
|
+
console.log(chalk.gray("\n Assign rule sets via the Code Charter web interface before syncing."));
|
|
285
279
|
}
|
|
286
280
|
else {
|
|
287
|
-
console.log(
|
|
281
|
+
console.log(chalk.gray(" No rulesets available"));
|
|
288
282
|
}
|
|
289
283
|
}
|
|
290
284
|
catch {
|
|
291
|
-
console.log(
|
|
285
|
+
console.log(chalk.gray(" Could not fetch rulesets"));
|
|
292
286
|
}
|
|
293
287
|
}
|
|
294
288
|
//# sourceMappingURL=init.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/login.js
CHANGED
|
@@ -1,17 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
};
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
const node_http_1 = require("node:http");
|
|
9
|
-
const node_crypto_1 = require("node:crypto");
|
|
10
|
-
const node_os_1 = require("node:os");
|
|
11
|
-
const node_child_process_1 = require("node:child_process");
|
|
12
|
-
const chalk_1 = __importDefault(require("chalk"));
|
|
13
|
-
const ora_1 = __importDefault(require("ora"));
|
|
14
|
-
const config_js_1 = require("../config.js");
|
|
1
|
+
import { createServer } from "node:http";
|
|
2
|
+
import { randomBytes, createHash } from "node:crypto";
|
|
3
|
+
import { platform } from "node:os";
|
|
4
|
+
import { exec } from "node:child_process";
|
|
5
|
+
import chalk from "chalk";
|
|
6
|
+
import ora from "ora";
|
|
7
|
+
import { getApiUrl, saveConfig, loadConfig } from "../config.js";
|
|
15
8
|
// OAuth configuration
|
|
16
9
|
const OAUTH_CLIENT_ID = process.env.CONVEXT_OAUTH_CLIENT_ID || "convext-cli";
|
|
17
10
|
const CALLBACK_PORT = 9876;
|
|
@@ -20,15 +13,15 @@ const CALLBACK_PATH = "/callback";
|
|
|
20
13
|
* Generate PKCE code verifier and challenge
|
|
21
14
|
*/
|
|
22
15
|
function generatePKCE() {
|
|
23
|
-
const verifier =
|
|
24
|
-
const challenge =
|
|
16
|
+
const verifier = randomBytes(32).toString("base64url");
|
|
17
|
+
const challenge = createHash("sha256").update(verifier).digest("base64url");
|
|
25
18
|
return { verifier, challenge };
|
|
26
19
|
}
|
|
27
20
|
/**
|
|
28
21
|
* Generate random state for CSRF protection
|
|
29
22
|
*/
|
|
30
23
|
function generateState() {
|
|
31
|
-
return
|
|
24
|
+
return randomBytes(16).toString("hex");
|
|
32
25
|
}
|
|
33
26
|
/**
|
|
34
27
|
* Check if we can open a browser
|
|
@@ -39,7 +32,7 @@ function canOpenBrowser() {
|
|
|
39
32
|
return false;
|
|
40
33
|
}
|
|
41
34
|
// Check for display on Linux
|
|
42
|
-
if (
|
|
35
|
+
if (platform() === "linux" && !process.env.DISPLAY && !process.env.WAYLAND_DISPLAY) {
|
|
43
36
|
return false;
|
|
44
37
|
}
|
|
45
38
|
// Check if running in CI
|
|
@@ -58,7 +51,7 @@ function canOpenBrowser() {
|
|
|
58
51
|
function openBrowser(url) {
|
|
59
52
|
return new Promise((resolve, reject) => {
|
|
60
53
|
let command;
|
|
61
|
-
switch (
|
|
54
|
+
switch (platform()) {
|
|
62
55
|
case "darwin":
|
|
63
56
|
command = `open "${url}"`;
|
|
64
57
|
break;
|
|
@@ -68,7 +61,7 @@ function openBrowser(url) {
|
|
|
68
61
|
default:
|
|
69
62
|
command = `xdg-open "${url}"`;
|
|
70
63
|
}
|
|
71
|
-
|
|
64
|
+
exec(command, (error) => {
|
|
72
65
|
if (error) {
|
|
73
66
|
reject(error);
|
|
74
67
|
}
|
|
@@ -83,7 +76,7 @@ function openBrowser(url) {
|
|
|
83
76
|
*/
|
|
84
77
|
function startCallbackServer(expectedState, codeVerifier) {
|
|
85
78
|
return new Promise((resolve, reject) => {
|
|
86
|
-
const server =
|
|
79
|
+
const server = createServer(async (req, res) => {
|
|
87
80
|
const url = new URL(req.url || "/", `http://localhost:${CALLBACK_PORT}`);
|
|
88
81
|
if (url.pathname !== CALLBACK_PATH) {
|
|
89
82
|
res.writeHead(404);
|
|
@@ -187,7 +180,7 @@ function startCallbackServer(expectedState, codeVerifier) {
|
|
|
187
180
|
* Exchange authorization code for tokens
|
|
188
181
|
*/
|
|
189
182
|
async function exchangeCodeForTokens(code, codeVerifier) {
|
|
190
|
-
const apiUrl =
|
|
183
|
+
const apiUrl = getApiUrl();
|
|
191
184
|
const redirectUri = `http://localhost:${CALLBACK_PORT}${CALLBACK_PATH}`;
|
|
192
185
|
const response = await fetch(`${apiUrl}/oauth/token`, {
|
|
193
186
|
method: "POST",
|
|
@@ -212,7 +205,7 @@ async function exchangeCodeForTokens(code, codeVerifier) {
|
|
|
212
205
|
* PKCE OAuth flow - opens browser for authentication
|
|
213
206
|
*/
|
|
214
207
|
async function pkceFlow() {
|
|
215
|
-
const apiUrl =
|
|
208
|
+
const apiUrl = getApiUrl();
|
|
216
209
|
const { verifier, challenge } = generatePKCE();
|
|
217
210
|
const state = generateState();
|
|
218
211
|
const redirectUri = `http://localhost:${CALLBACK_PORT}${CALLBACK_PATH}`;
|
|
@@ -226,24 +219,24 @@ async function pkceFlow() {
|
|
|
226
219
|
authUrl.searchParams.set("code_challenge_method", "S256");
|
|
227
220
|
// Start callback server first
|
|
228
221
|
const tokenPromise = startCallbackServer(state, verifier);
|
|
229
|
-
console.log(
|
|
222
|
+
console.log(chalk.cyan("\nOpening browser for authentication...\n"));
|
|
230
223
|
try {
|
|
231
224
|
await openBrowser(authUrl.toString());
|
|
232
225
|
}
|
|
233
226
|
catch {
|
|
234
|
-
console.log(
|
|
235
|
-
console.log(
|
|
236
|
-
console.log(
|
|
227
|
+
console.log(chalk.yellow("Could not open browser automatically."));
|
|
228
|
+
console.log(chalk.gray("Please open this URL manually:\n"));
|
|
229
|
+
console.log(chalk.cyan(authUrl.toString()));
|
|
237
230
|
console.log();
|
|
238
231
|
}
|
|
239
|
-
console.log(
|
|
232
|
+
console.log(chalk.gray("Waiting for authentication...\n"));
|
|
240
233
|
return tokenPromise;
|
|
241
234
|
}
|
|
242
235
|
/**
|
|
243
236
|
* Request device code from server
|
|
244
237
|
*/
|
|
245
238
|
async function requestDeviceCode() {
|
|
246
|
-
const apiUrl =
|
|
239
|
+
const apiUrl = getApiUrl();
|
|
247
240
|
const response = await fetch(`${apiUrl}/oauth/authorize_device`, {
|
|
248
241
|
method: "POST",
|
|
249
242
|
headers: { "Content-Type": "application/x-www-form-urlencoded" },
|
|
@@ -264,7 +257,7 @@ async function requestDeviceCode() {
|
|
|
264
257
|
* Poll for device authorization completion
|
|
265
258
|
*/
|
|
266
259
|
async function pollForDeviceAuthorization(deviceCode, interval, expiresIn) {
|
|
267
|
-
const apiUrl =
|
|
260
|
+
const apiUrl = getApiUrl();
|
|
268
261
|
const startTime = Date.now();
|
|
269
262
|
const expiresAt = startTime + expiresIn * 1000;
|
|
270
263
|
while (Date.now() < expiresAt) {
|
|
@@ -305,7 +298,7 @@ async function pollForDeviceAuthorization(deviceCode, interval, expiresIn) {
|
|
|
305
298
|
* Device authorization flow - for headless environments
|
|
306
299
|
*/
|
|
307
300
|
async function deviceFlow() {
|
|
308
|
-
const spinner = (
|
|
301
|
+
const spinner = ora("Requesting device code...").start();
|
|
309
302
|
let deviceCodeResponse;
|
|
310
303
|
try {
|
|
311
304
|
deviceCodeResponse = await requestDeviceCode();
|
|
@@ -316,14 +309,14 @@ async function deviceFlow() {
|
|
|
316
309
|
throw error;
|
|
317
310
|
}
|
|
318
311
|
const { device_code, user_code, verification_uri, verification_uri_complete, interval, expires_in } = deviceCodeResponse;
|
|
319
|
-
console.log("\n" +
|
|
320
|
-
console.log(
|
|
312
|
+
console.log("\n" + chalk.bold("To authenticate, visit:"));
|
|
313
|
+
console.log(chalk.cyan(` ${verification_uri_complete || verification_uri}`));
|
|
321
314
|
console.log();
|
|
322
|
-
console.log(
|
|
323
|
-
console.log(
|
|
315
|
+
console.log(chalk.bold("And enter this code:"));
|
|
316
|
+
console.log(chalk.yellow.bold(` ${user_code}`));
|
|
324
317
|
console.log();
|
|
325
|
-
console.log(
|
|
326
|
-
const pollSpinner = (
|
|
318
|
+
console.log(chalk.gray(`Code expires in ${Math.floor(expires_in / 60)} minutes\n`));
|
|
319
|
+
const pollSpinner = ora("Waiting for authorization...").start();
|
|
327
320
|
try {
|
|
328
321
|
const tokens = await pollForDeviceAuthorization(device_code, interval, expires_in);
|
|
329
322
|
pollSpinner.succeed("Authorized!");
|
|
@@ -339,11 +332,11 @@ async function deviceFlow() {
|
|
|
339
332
|
*/
|
|
340
333
|
function saveTokens(tokens) {
|
|
341
334
|
const expiresAt = new Date((tokens.created_at + tokens.expires_in) * 1000).toISOString();
|
|
342
|
-
|
|
335
|
+
saveConfig({
|
|
343
336
|
apiToken: tokens.access_token,
|
|
344
337
|
});
|
|
345
338
|
// Save additional OAuth data in separate credentials file
|
|
346
|
-
const config =
|
|
339
|
+
const config = loadConfig();
|
|
347
340
|
const credentialsPath = `${process.env.HOME}/.convext/credentials.json`;
|
|
348
341
|
const credentials = {
|
|
349
342
|
access_token: tokens.access_token,
|
|
@@ -363,20 +356,20 @@ function saveTokens(tokens) {
|
|
|
363
356
|
/**
|
|
364
357
|
* Main login command
|
|
365
358
|
*/
|
|
366
|
-
async function loginCommand(options = {}) {
|
|
367
|
-
const apiUrl =
|
|
359
|
+
export async function loginCommand(options = {}) {
|
|
360
|
+
const apiUrl = getApiUrl();
|
|
368
361
|
// Check if already logged in
|
|
369
|
-
const config =
|
|
362
|
+
const config = loadConfig();
|
|
370
363
|
if (config.apiToken && !options.device) {
|
|
371
|
-
console.log(
|
|
364
|
+
console.log(chalk.yellow("Already logged in. Use 'convext logout' first to re-authenticate."));
|
|
372
365
|
return;
|
|
373
366
|
}
|
|
374
|
-
console.log(
|
|
367
|
+
console.log(chalk.bold(`Logging in to ${apiUrl}...\n`));
|
|
375
368
|
try {
|
|
376
369
|
let tokens;
|
|
377
370
|
if (options.device || !canOpenBrowser()) {
|
|
378
371
|
if (!options.device && !canOpenBrowser()) {
|
|
379
|
-
console.log(
|
|
372
|
+
console.log(chalk.gray("Browser not available, using device flow...\n"));
|
|
380
373
|
}
|
|
381
374
|
tokens = await deviceFlow();
|
|
382
375
|
}
|
|
@@ -388,7 +381,7 @@ async function loginCommand(options = {}) {
|
|
|
388
381
|
// If PKCE fails (e.g., browser couldn't open), fall back to device flow
|
|
389
382
|
if (error.message?.includes("Could not open browser") ||
|
|
390
383
|
error.message?.includes("EADDRINUSE")) {
|
|
391
|
-
console.log(
|
|
384
|
+
console.log(chalk.yellow("\nBrowser flow failed, falling back to device flow...\n"));
|
|
392
385
|
tokens = await deviceFlow();
|
|
393
386
|
}
|
|
394
387
|
else {
|
|
@@ -397,13 +390,13 @@ async function loginCommand(options = {}) {
|
|
|
397
390
|
}
|
|
398
391
|
}
|
|
399
392
|
saveTokens(tokens);
|
|
400
|
-
console.log(
|
|
401
|
-
console.log(
|
|
393
|
+
console.log(chalk.green("\n✓ Successfully logged in!"));
|
|
394
|
+
console.log(chalk.gray("\nRun 'convext whoami' to verify your identity."));
|
|
402
395
|
}
|
|
403
396
|
catch (error) {
|
|
404
|
-
console.error(
|
|
397
|
+
console.error(chalk.red("\n✗ Login failed"));
|
|
405
398
|
if (error instanceof Error) {
|
|
406
|
-
console.error(
|
|
399
|
+
console.error(chalk.gray(` ${error.message}`));
|
|
407
400
|
}
|
|
408
401
|
process.exit(1);
|
|
409
402
|
}
|
|
@@ -411,15 +404,15 @@ async function loginCommand(options = {}) {
|
|
|
411
404
|
/**
|
|
412
405
|
* Logout command - clear stored credentials
|
|
413
406
|
*/
|
|
414
|
-
async function logoutCommand() {
|
|
407
|
+
export async function logoutCommand() {
|
|
415
408
|
const { existsSync, unlinkSync } = require("node:fs");
|
|
416
409
|
// Clear API token from config
|
|
417
|
-
|
|
410
|
+
saveConfig({ apiToken: undefined });
|
|
418
411
|
// Remove credentials file
|
|
419
412
|
const credentialsPath = `${process.env.HOME}/.convext/credentials.json`;
|
|
420
413
|
if (existsSync(credentialsPath)) {
|
|
421
414
|
unlinkSync(credentialsPath);
|
|
422
415
|
}
|
|
423
|
-
console.log(
|
|
416
|
+
console.log(chalk.green("✓ Logged out successfully"));
|
|
424
417
|
}
|
|
425
418
|
//# sourceMappingURL=login.js.map
|