@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.
@@ -1,23 +1,17 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.initCommand = initCommand;
7
- const node_fs_1 = require("node:fs");
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 = (0, node_path_1.join)(cwd, "package.json");
18
- if ((0, node_fs_1.existsSync)(packageJsonPath)) {
11
+ const packageJsonPath = join(cwd, "package.json");
12
+ if (existsSync(packageJsonPath)) {
19
13
  try {
20
- const pkg = JSON.parse((0, node_fs_1.readFileSync)(packageJsonPath, "utf-8"));
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 = [(0, node_path_1.join)(cwd, "*.gemspec")];
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 = (0, node_path_1.join)(cwd, "pyproject.toml");
35
- if ((0, node_fs_1.existsSync)(pyprojectPath)) {
28
+ const pyprojectPath = join(cwd, "pyproject.toml");
29
+ if (existsSync(pyprojectPath)) {
36
30
  try {
37
- const content = (0, node_fs_1.readFileSync)(pyprojectPath, "utf-8");
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 (0, node_path_1.basename)(cwd);
41
+ return basename(cwd);
48
42
  }
49
43
  function detectRepoUrl() {
50
44
  const cwd = process.cwd();
51
- const gitConfigPath = (0, node_path_1.join)(cwd, ".git/config");
52
- if (!(0, node_fs_1.existsSync)(gitConfigPath)) {
45
+ const gitConfigPath = join(cwd, ".git/config");
46
+ if (!existsSync(gitConfigPath)) {
53
47
  return undefined;
54
48
  }
55
49
  try {
56
- const content = (0, node_fs_1.readFileSync)(gitConfigPath, "utf-8");
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 = (0, node_path_1.join)(cwd, "package.json");
79
- if ((0, node_fs_1.existsSync)(packageJsonPath)) {
72
+ const packageJsonPath = join(cwd, "package.json");
73
+ if (existsSync(packageJsonPath)) {
80
74
  try {
81
- const pkg = JSON.parse((0, node_fs_1.readFileSync)(packageJsonPath, "utf-8"));
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 = (0, node_path_1.join)(cwd, readme);
92
- if ((0, node_fs_1.existsSync)(readmePath)) {
85
+ const readmePath = join(cwd, readme);
86
+ if (existsSync(readmePath)) {
93
87
  try {
94
- const content = (0, node_fs_1.readFileSync)(readmePath, "utf-8");
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 = (0, ora_1.default)("Scanning repository...").start();
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 = (0, scanner_js_1.scanRepository)();
105
+ const insights = scanRepository();
112
106
  const detectedRepoUrl = options.repoUrl || detectRepoUrl();
113
107
  spinner.succeed("Scanned repository");
114
- console.log("\n" + chalk_1.default.bold("Detected Stack:"));
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(chalk_1.default.yellow(`\nExisting AI context files:\n - ${insights.aiFiles.join("\n - ")}`));
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
- (0, api_js_1.getOrganizations)(),
130
- (0, api_js_1.getProjects)(),
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(chalk_1.default.yellow("\nNo workspaces found. Please create one in the Convext web interface first."));
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" + chalk_1.default.bold("Your Workspaces:"));
139
+ console.log("\n" + chalk.bold("Your Workspaces:"));
146
140
  organizations.forEach((org, idx) => {
147
- console.log(` ${idx + 1}. ${chalk_1.default.cyan(org.name)} ${chalk_1.default.gray(`(${org.projects_count} projects)`)}`);
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" + chalk_1.default.green("✓ Found existing project for this repository:"));
155
- console.log(` ${chalk_1.default.cyan(matchingProject.name)} ${chalk_1.default.gray(`(${matchingProject.organization_name || 'No org'})`)}`);
156
- if (await (0, prompts_js_1.promptConfirm)("Link to this project?", true)) {
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(chalk_1.default.green("\n✓ Linked to existing project"));
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" + chalk_1.default.bold("Existing Projects:"));
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(chalk_1.default.gray(`\n ${orgName}:`));
170
+ console.log(chalk.gray(`\n ${orgName}:`));
177
171
  for (const proj of orgProjects) {
178
- console.log(` • ${chalk_1.default.cyan(proj.name)}`);
172
+ console.log(` • ${chalk.cyan(proj.name)}`);
179
173
  }
180
174
  }
181
175
  }
182
176
  const actionOptions = [
183
- { label: chalk_1.default.green("+ Create new project"), value: { type: "create" } },
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 (0, prompts_js_1.promptSelect)("\nWhat would you like to do?", actionOptions, 0);
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(chalk_1.default.green(`\n✓ Linked to project: ${action.project.name}`));
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" + chalk_1.default.bold("Create New Project"));
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 (0, prompts_js_1.promptInput)("Project name", detectedName)).trim() || detectedName;
200
- const finalRepoUrl = (await (0, prompts_js_1.promptInput)("Repository URL", detectedRepoUrl)).trim() || detectedRepoUrl;
201
- const finalDescription = (await (0, prompts_js_1.promptInput)("Description (optional)", detectedDescription)).trim() || detectedDescription;
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(chalk_1.default.gray(`\nUsing workspace: ${organizations[0].name}`));
201
+ console.log(chalk.gray(`\nUsing workspace: ${organizations[0].name}`));
208
202
  }
209
203
  else {
210
- const selectedOrg = await (0, prompts_js_1.promptSelect)("Select a workspace:", organizations.map(org => ({
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 (0, api_js_1.registerProject)(finalName, finalRepoUrl, finalDescription, orgSlug);
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" + chalk_1.default.bold("Next Steps:"));
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 ${chalk_1.default.cyan("convext sync")} to generate AI context files.`);
226
- console.log(` 3. Commit ${chalk_1.default.cyan(".convext/")} directory and generated files.`);
227
- console.log("\n" + chalk_1.default.green("✓ Project initialized successfully"));
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(chalk_1.default.red(`Error: ${error.message}`));
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}: ${chalk_1.default.gray("none detected")}`);
234
+ console.log(` ${label}: ${chalk.gray("none detected")}`);
241
235
  }
242
236
  else {
243
- console.log(` ${label}: ${chalk_1.default.cyan(data.join(", "))}`);
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 = (0, node_path_1.join)(cwd, ".convext");
249
- const localConfigPath = (0, node_path_1.join)(convextDir, "config.json");
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" + chalk_1.default.bold("Project Configuration:"));
264
- console.log(` Name: ${chalk_1.default.cyan(name)}`);
265
- console.log(` Project ID: ${chalk_1.default.cyan(projectId)}`);
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: ${chalk_1.default.cyan(repoUrl)}`);
261
+ console.log(` Repository: ${chalk.cyan(repoUrl)}`);
268
262
  }
269
263
  if (description) {
270
- console.log(` Description: ${chalk_1.default.gray(description.slice(0, 60))}${description.length > 60 ? "..." : ""}`);
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" + chalk_1.default.bold("Available Rulesets:"));
268
+ console.log("\n" + chalk.bold("Available Rulesets:"));
275
269
  try {
276
- const { rulesets } = await (0, api_js_1.getRuleSets)();
270
+ const { rulesets } = await getRuleSets();
277
271
  if (rulesets.length > 0) {
278
272
  for (const rs of rulesets.slice(0, 5)) {
279
- console.log(` • ${chalk_1.default.cyan(rs.name)} - ${rs.rules_count} rules, ${rs.standards_count} standards`);
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(chalk_1.default.gray(` ... and ${rulesets.length - 5} more`));
276
+ console.log(chalk.gray(` ... and ${rulesets.length - 5} more`));
283
277
  }
284
- console.log(chalk_1.default.gray("\n Assign rule sets via the Code Charter web interface before syncing."));
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(chalk_1.default.gray(" No rulesets available"));
281
+ console.log(chalk.gray(" No rulesets available"));
288
282
  }
289
283
  }
290
284
  catch {
291
- console.log(chalk_1.default.gray(" Could not fetch rulesets"));
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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"}
@@ -1,17 +1,10 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.loginCommand = loginCommand;
7
- exports.logoutCommand = logoutCommand;
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 = (0, node_crypto_1.randomBytes)(32).toString("base64url");
24
- const challenge = (0, node_crypto_1.createHash)("sha256").update(verifier).digest("base64url");
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 (0, node_crypto_1.randomBytes)(16).toString("hex");
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 ((0, node_os_1.platform)() === "linux" && !process.env.DISPLAY && !process.env.WAYLAND_DISPLAY) {
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 ((0, node_os_1.platform)()) {
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
- (0, node_child_process_1.exec)(command, (error) => {
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 = (0, node_http_1.createServer)(async (req, res) => {
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 = (0, config_js_1.getApiUrl)();
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 = (0, config_js_1.getApiUrl)();
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(chalk_1.default.cyan("\nOpening browser for authentication...\n"));
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(chalk_1.default.yellow("Could not open browser automatically."));
235
- console.log(chalk_1.default.gray("Please open this URL manually:\n"));
236
- console.log(chalk_1.default.cyan(authUrl.toString()));
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(chalk_1.default.gray("Waiting for authentication...\n"));
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 = (0, config_js_1.getApiUrl)();
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 = (0, config_js_1.getApiUrl)();
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 = (0, ora_1.default)("Requesting device code...").start();
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" + chalk_1.default.bold("To authenticate, visit:"));
320
- console.log(chalk_1.default.cyan(` ${verification_uri_complete || verification_uri}`));
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(chalk_1.default.bold("And enter this code:"));
323
- console.log(chalk_1.default.yellow.bold(` ${user_code}`));
315
+ console.log(chalk.bold("And enter this code:"));
316
+ console.log(chalk.yellow.bold(` ${user_code}`));
324
317
  console.log();
325
- console.log(chalk_1.default.gray(`Code expires in ${Math.floor(expires_in / 60)} minutes\n`));
326
- const pollSpinner = (0, ora_1.default)("Waiting for authorization...").start();
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
- (0, config_js_1.saveConfig)({
335
+ saveConfig({
343
336
  apiToken: tokens.access_token,
344
337
  });
345
338
  // Save additional OAuth data in separate credentials file
346
- const config = (0, config_js_1.loadConfig)();
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 = (0, config_js_1.getApiUrl)();
359
+ export async function loginCommand(options = {}) {
360
+ const apiUrl = getApiUrl();
368
361
  // Check if already logged in
369
- const config = (0, config_js_1.loadConfig)();
362
+ const config = loadConfig();
370
363
  if (config.apiToken && !options.device) {
371
- console.log(chalk_1.default.yellow("Already logged in. Use 'convext logout' first to re-authenticate."));
364
+ console.log(chalk.yellow("Already logged in. Use 'convext logout' first to re-authenticate."));
372
365
  return;
373
366
  }
374
- console.log(chalk_1.default.bold(`Logging in to ${apiUrl}...\n`));
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(chalk_1.default.gray("Browser not available, using device flow...\n"));
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(chalk_1.default.yellow("\nBrowser flow failed, falling back to device flow...\n"));
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(chalk_1.default.green("\n✓ Successfully logged in!"));
401
- console.log(chalk_1.default.gray("\nRun 'convext whoami' to verify your identity."));
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(chalk_1.default.red("\n✗ Login failed"));
397
+ console.error(chalk.red("\n✗ Login failed"));
405
398
  if (error instanceof Error) {
406
- console.error(chalk_1.default.gray(` ${error.message}`));
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
- (0, config_js_1.saveConfig)({ apiToken: undefined });
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(chalk_1.default.green("✓ Logged out successfully"));
416
+ console.log(chalk.green("✓ Logged out successfully"));
424
417
  }
425
418
  //# sourceMappingURL=login.js.map