@mexty/cli 1.6.0 → 1.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/GITHUB_OAUTH_SETUP.md +247 -0
  2. package/dist/commands/create.d.ts +9 -0
  3. package/dist/commands/create.d.ts.map +1 -0
  4. package/dist/commands/create.js +130 -0
  5. package/dist/commands/create.js.map +1 -0
  6. package/dist/commands/delete.d.ts +2 -0
  7. package/dist/commands/delete.d.ts.map +1 -0
  8. package/dist/commands/delete.js +59 -0
  9. package/dist/commands/delete.js.map +1 -0
  10. package/dist/commands/github-disconnect.d.ts +2 -0
  11. package/dist/commands/github-disconnect.d.ts.map +1 -0
  12. package/dist/commands/github-disconnect.js +73 -0
  13. package/dist/commands/github-disconnect.js.map +1 -0
  14. package/dist/commands/github-login.d.ts +2 -0
  15. package/dist/commands/github-login.d.ts.map +1 -0
  16. package/dist/commands/github-login.js +100 -0
  17. package/dist/commands/github-login.js.map +1 -0
  18. package/dist/commands/login.d.ts +2 -0
  19. package/dist/commands/login.d.ts.map +1 -0
  20. package/dist/commands/login.js +90 -0
  21. package/dist/commands/login.js.map +1 -0
  22. package/dist/commands/publish.d.ts +6 -0
  23. package/dist/commands/publish.d.ts.map +1 -0
  24. package/dist/commands/publish.js +176 -0
  25. package/dist/commands/publish.js.map +1 -0
  26. package/dist/commands/save.d.ts +2 -0
  27. package/dist/commands/save.d.ts.map +1 -0
  28. package/dist/commands/save.js +162 -0
  29. package/dist/commands/save.js.map +1 -0
  30. package/dist/commands/update-git-url.d.ts +2 -0
  31. package/dist/commands/update-git-url.d.ts.map +1 -0
  32. package/dist/commands/update-git-url.js +153 -0
  33. package/dist/commands/update-git-url.js.map +1 -0
  34. package/dist/index.d.ts +3 -0
  35. package/dist/index.d.ts.map +1 -0
  36. package/dist/index.js +119 -0
  37. package/dist/index.js.map +1 -0
  38. package/dist/utils/api.d.ts +117 -0
  39. package/dist/utils/api.d.ts.map +1 -0
  40. package/dist/utils/api.js +202 -0
  41. package/dist/utils/api.js.map +1 -0
  42. package/dist/utils/auth.d.ts +4 -0
  43. package/dist/utils/auth.d.ts.map +1 -0
  44. package/dist/utils/auth.js +27 -0
  45. package/dist/utils/auth.js.map +1 -0
  46. package/dist/utils/git.d.ts +47 -0
  47. package/dist/utils/git.d.ts.map +1 -0
  48. package/dist/utils/git.js +224 -0
  49. package/dist/utils/git.js.map +1 -0
  50. package/package.json +2 -1
  51. package/src/commands/github-disconnect.ts +80 -0
  52. package/src/commands/github-login.ts +107 -0
  53. package/src/index.ts +37 -0
  54. package/src/utils/api.ts +21 -0
  55. package/src/utils/git.ts +60 -2
@@ -0,0 +1,247 @@
1
+ # GitHub OAuth Setup Guide
2
+
3
+ This guide explains how to set up and use GitHub OAuth authentication in the MEXTY CLI to enable access to private block repositories.
4
+
5
+ ## Overview
6
+
7
+ The GitHub OAuth integration allows users to:
8
+ - Clone private block repositories owned by their organization
9
+ - Access blocks they've purchased or have permission to view
10
+ - Seamlessly authenticate without manual token management
11
+
12
+ ## Backend Setup
13
+
14
+ ### 1. Register a GitHub OAuth App
15
+
16
+ 1. Go to https://github.com/settings/developers
17
+ 2. Click "New OAuth App"
18
+ 3. Fill in the details:
19
+ - **Application name**: MEXTY CLI
20
+ - **Homepage URL**: https://mexty.ai
21
+ - **Authorization callback URL**:
22
+ - Production: `https://api.mexty.ai/api/auth/github/callback`
23
+ - Development: `http://localhost:3001/api/auth/github/callback`
24
+ 4. Click "Register application"
25
+ 5. Note your **Client ID** and generate a **Client Secret**
26
+
27
+ ### 2. Configure Environment Variables
28
+
29
+ Add these to your backend `.env` file:
30
+
31
+ ```bash
32
+ # GitHub OAuth Configuration
33
+
34
+ ```
35
+
36
+ For development:
37
+ ```bash
38
+ GITHUB_REDIRECT_URI=http://localhost:3001/api/auth/github/callback
39
+ ```
40
+
41
+ ### 3. Database Migration
42
+
43
+ The User model has been updated with the following fields:
44
+ - `githubAccessToken` (encrypted, select: false)
45
+ - `githubUsername`
46
+ - `githubId`
47
+ - `githubTokenExpiresAt`
48
+
49
+ No migration script is needed as these fields are optional and will be populated when users connect GitHub.
50
+
51
+ ## CLI Setup
52
+
53
+ ### 1. Install Dependencies
54
+
55
+ The CLI needs the `open` package to launch the browser for OAuth:
56
+
57
+ ```bash
58
+ cd mexty-cli
59
+ npm install open@^8.4.2
60
+ ```
61
+
62
+ Update `package.json`:
63
+ ```json
64
+ {
65
+ "dependencies": {
66
+ "open": "^8.4.2"
67
+ }
68
+ }
69
+ ```
70
+
71
+ ### 2. Build the CLI
72
+
73
+ ```bash
74
+ npm run build
75
+ ```
76
+
77
+ ## Usage
78
+
79
+ ### Connect GitHub Account
80
+
81
+ ```bash
82
+ mexty github-login
83
+ ```
84
+
85
+ This will:
86
+ 1. Request an OAuth URL from the backend
87
+ 2. Open your browser to GitHub authorization page
88
+ 3. Redirect back to the backend after authorization
89
+ 4. Store your GitHub access token securely
90
+ 5. Poll for connection status and confirm success
91
+
92
+ ### Check GitHub Status
93
+
94
+ ```bash
95
+ mexty github-status
96
+ ```
97
+
98
+ Shows whether GitHub is connected and displays your GitHub username.
99
+
100
+ ### Disconnect GitHub
101
+
102
+ ```bash
103
+ mexty github-disconnect
104
+ ```
105
+
106
+ Removes your GitHub access token from the system.
107
+
108
+ ### Clone Private Repositories
109
+
110
+ Once GitHub is connected, the `mexty create` command will automatically use your GitHub token to clone private repositories:
111
+
112
+ ```bash
113
+ mexty create "My Private Block"
114
+ ```
115
+
116
+ The CLI will:
117
+ 1. Create the block on the backend
118
+ 2. Check if GitHub is connected
119
+ 3. Inject your GitHub token into the clone URL
120
+ 4. Clone the private repository
121
+
122
+ ## API Endpoints
123
+
124
+ ### Backend Routes
125
+
126
+ All routes are under `/api/auth`:
127
+
128
+ - `GET /github/url` - Get GitHub OAuth authorization URL (requires auth)
129
+ - `GET /github/callback` - GitHub OAuth callback (public)
130
+ - `GET /github/status` - Check GitHub connection status (requires auth)
131
+ - `GET /github/token` - Get GitHub access token for CLI (requires auth)
132
+ - `POST /github/disconnect` - Disconnect GitHub account (requires auth)
133
+
134
+ ### Security Considerations
135
+
136
+ 1. **Token Storage**: GitHub tokens are stored in the database with `select: false` to prevent accidental exposure
137
+ 2. **State Validation**: OAuth state parameter includes user ID and timestamp to prevent CSRF attacks
138
+ 3. **Token Scope**: Requests only `repo` scope for repository access
139
+ 4. **Expiration**: Tokens are marked as expiring after 1 year (configurable)
140
+ 5. **HTTPS Only**: In production, cookies are secure and HTTPS-only
141
+
142
+ ## Error Handling
143
+
144
+ ### Common Errors
145
+
146
+ 1. **"GitHub not connected"**
147
+ - Solution: Run `mexty github-login`
148
+
149
+ 2. **"Authentication required"**
150
+ - Solution: Run `mexty login` first
151
+
152
+ 3. **"GitHub OAuth is not configured on the server"**
153
+ - Solution: Admin needs to set up GitHub OAuth app and add credentials to backend
154
+
155
+ 4. **"Repository not found"**
156
+ - Could be a private repository - ensure GitHub is connected
157
+ - Could be an incorrect URL
158
+ - User might not have access to the repository
159
+
160
+ ## Flow Diagram
161
+
162
+ ```
163
+ ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā” ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā” ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”
164
+ │ CLI │ │ Backend │ │ GitHub │
165
+ ā””ā”€ā”€ā”€ā”€ā”¬ā”€ā”€ā”€ā”€ā”˜ ā””ā”€ā”€ā”€ā”€ā”¬ā”€ā”€ā”€ā”€ā”˜ ā””ā”€ā”€ā”€ā”€ā”¬ā”€ā”€ā”€ā”€ā”˜
166
+ │ │ │
167
+ │ mexty github-login │ │
168
+ ā”œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€> │
169
+ │ │ │
170
+ │ GET /api/auth/github/url │ │
171
+ │<─────────────────────────────┤ │
172
+ │ │ │
173
+ │ Open browser with URL │ │
174
+ │──────────────────────────────┼─────────────────────────────>│
175
+ │ │ │
176
+ │ │ GET /callback?code=xxx │
177
+ │ │<─────────────────────────────┤
178
+ │ │ │
179
+ │ │ POST /oauth/access_token │
180
+ │ │─────────────────────────────>│
181
+ │ │ │
182
+ │ │ access_token │
183
+ │ │<─────────────────────────────┤
184
+ │ │ │
185
+ │ │ Store token in DB │
186
+ │ │ │
187
+ │ Poll: GET /api/auth/github/status │
188
+ │<─────────────────────────────┤ │
189
+ │ │ │
190
+ │ connected: true │ │
191
+ │──────────────────────────────┤ │
192
+ │ │ │
193
+ │ āœ… Success! │ │
194
+ │ │ │
195
+ ```
196
+
197
+ ## Development Tips
198
+
199
+ ### Testing Locally
200
+
201
+ 1. Start backend: `npm run dev`
202
+ 2. Use ngrok for callback URL:
203
+ ```bash
204
+ ngrok http 3001
205
+ ```
206
+ 3. Update GitHub OAuth app callback URL to ngrok URL
207
+ 4. Set `GITHUB_REDIRECT_URI` in `.env` to ngrok URL
208
+
209
+ ### Debugging
210
+
211
+ Enable verbose logging:
212
+ ```bash
213
+ DEBUG=* mexty github-login
214
+ ```
215
+
216
+ Check stored auth data:
217
+ ```bash
218
+ cat ~/.mext/auth.json
219
+ ```
220
+
221
+ ## Troubleshooting
222
+
223
+ ### Token Expired
224
+ If you see "GitHub token expired":
225
+ ```bash
226
+ mexty github-disconnect
227
+ mexty github-login
228
+ ```
229
+
230
+ ### Browser Not Opening
231
+ If the browser doesn't open automatically, copy the URL from the terminal and paste it into your browser.
232
+
233
+ ### Multiple GitHub Accounts
234
+ Each MEXTY user account can connect one GitHub account at a time. To switch:
235
+ ```bash
236
+ mexty github-disconnect
237
+ mexty github-login
238
+ ```
239
+
240
+ ## Future Enhancements
241
+
242
+ - [ ] Support for GitLab and Bitbucket
243
+ - [ ] Fine-grained token permissions
244
+ - [ ] Token refresh mechanism
245
+ - [ ] Multiple GitHub account support per user
246
+ - [ ] Organization-level GitHub integration
247
+
@@ -0,0 +1,9 @@
1
+ interface CreateOptions {
2
+ description?: string;
3
+ type?: string;
4
+ name?: string;
5
+ category?: string;
6
+ }
7
+ export declare function createCommand(subcommand?: string, options?: CreateOptions): Promise<void>;
8
+ export {};
9
+ //# sourceMappingURL=create.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"AAOA,UAAU,aAAa;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAwBD,wBAAsB,aAAa,CACjC,UAAU,CAAC,EAAE,MAAM,EACnB,OAAO,GAAE,aAAkB,GAC1B,OAAO,CAAC,IAAI,CAAC,CA+If"}
@@ -0,0 +1,130 @@
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.createCommand = createCommand;
7
+ const chalk_1 = __importDefault(require("chalk"));
8
+ const path_1 = __importDefault(require("path"));
9
+ const api_1 = require("../utils/api");
10
+ const git_1 = require("../utils/git");
11
+ const readline_1 = require("readline");
12
+ const auth_1 = require("../utils/auth");
13
+ // Simple prompt function to replace inquirer
14
+ async function prompt(question, defaultValue) {
15
+ return new Promise((resolve) => {
16
+ const rl = (0, readline_1.createInterface)({
17
+ input: process.stdin,
18
+ output: process.stdout,
19
+ });
20
+ const promptText = defaultValue
21
+ ? `${question} (${defaultValue}): `
22
+ : `${question}: `;
23
+ rl.question(promptText, (answer) => {
24
+ rl.close();
25
+ resolve(answer.trim() || defaultValue || "");
26
+ });
27
+ });
28
+ }
29
+ async function createCommand(subcommand, options = {}) {
30
+ try {
31
+ // Check authentication first
32
+ (0, auth_1.requireAuthentication)();
33
+ const user = (0, auth_1.getAuthenticatedUser)();
34
+ // Handle both old and new syntax
35
+ let blockName;
36
+ let blockDescription;
37
+ let blockType;
38
+ if (subcommand === "block") {
39
+ // New syntax: mexty create block --name "..." --description "..." --category "..."
40
+ if (!options.name) {
41
+ console.error(chalk_1.default.red('āŒ --name is required when using "mexty create block"'));
42
+ console.log(chalk_1.default.yellow(' Usage: mexty create block --name "Block Name" --description "Description" --category "category"'));
43
+ process.exit(1);
44
+ }
45
+ blockName = options.name;
46
+ blockDescription = options.description || `Custom block: ${blockName}`;
47
+ blockType = options.category || options.type || "custom";
48
+ }
49
+ else {
50
+ // Old syntax: mexty create "Block Name" --description "..." --type "..."
51
+ if (!subcommand) {
52
+ console.error(chalk_1.default.red("āŒ Block name is required"));
53
+ console.log(chalk_1.default.yellow(' Usage: mexty create "Block Name" [options]'));
54
+ console.log(chalk_1.default.yellow(' Or: mexty create block --name "Block Name" [options]'));
55
+ process.exit(1);
56
+ }
57
+ blockName = subcommand;
58
+ blockDescription = options.description || `Custom block: ${blockName}`;
59
+ blockType = options.type || "custom";
60
+ }
61
+ console.log(chalk_1.default.blue(`šŸš€ Creating new block: ${blockName}`));
62
+ console.log(chalk_1.default.gray(` User: ${user?.fullName || user?.email || "Unknown"}`));
63
+ console.log(chalk_1.default.gray(` Category: ${blockType}`));
64
+ // Prepare block data
65
+ const blockData = {
66
+ blockType: blockType,
67
+ title: blockName,
68
+ description: blockDescription,
69
+ allowedBrickTypes: ["text", "image", "video", "code", "quiz"], // Default allowed types
70
+ scope: ["user-store"], // Default scope for CLI-created blocks
71
+ content: [],
72
+ };
73
+ console.log(chalk_1.default.yellow("šŸ“” Creating block on server..."));
74
+ // Create the block
75
+ const block = await api_1.apiClient.createBlock(blockData);
76
+ console.log(chalk_1.default.green(`āœ… Block created successfully!`));
77
+ console.log(chalk_1.default.gray(` Block ID: ${block.id || block._id}`));
78
+ console.log(chalk_1.default.gray(` Block Type: ${block.blockType || block._doc?.blockType}`));
79
+ // Add the block to user's structure
80
+ console.log(chalk_1.default.yellow("šŸ“š Adding block to your library..."));
81
+ try {
82
+ await api_1.apiClient.addBlockToStructure(block.id || block._id);
83
+ console.log(chalk_1.default.green(`āœ… Block added to your library!`));
84
+ }
85
+ catch (structureError) {
86
+ console.warn(chalk_1.default.yellow(`āš ļø Block created but couldn't add to library: ${structureError.message}`));
87
+ console.log(chalk_1.default.gray(" The block is still accessible via the API"));
88
+ }
89
+ // Handle both plain objects and Mongoose documents
90
+ const gitUrl = block.gitUrl || block._doc?.gitUrl;
91
+ if (gitUrl) {
92
+ console.log(chalk_1.default.gray(` GitHub URL: ${gitUrl}`));
93
+ // Clone the repository
94
+ const repoName = git_1.GitManager.extractRepoName(gitUrl);
95
+ const targetDir = path_1.default.join(process.cwd(), repoName);
96
+ console.log(chalk_1.default.yellow(`šŸ“¦ Cloning repository to ./${repoName}...`));
97
+ try {
98
+ const gitManager = new git_1.GitManager();
99
+ await gitManager.cloneRepository(gitUrl, targetDir);
100
+ console.log(chalk_1.default.green(`šŸŽ‰ Block created and repository cloned successfully!`));
101
+ console.log(chalk_1.default.blue(`\nNext steps:`));
102
+ console.log(chalk_1.default.gray(` 1. cd ${repoName}`));
103
+ console.log(chalk_1.default.gray(` 2. Make your changes`));
104
+ console.log(chalk_1.default.gray(` 3. mexty save`));
105
+ // Change to the cloned directory
106
+ try {
107
+ process.chdir(targetDir);
108
+ console.log(chalk_1.default.green(`šŸ“ Changed to directory: ${repoName}`));
109
+ }
110
+ catch (chdirError) {
111
+ console.warn(chalk_1.default.yellow(`āš ļø Could not change to directory: ${chdirError.message}`));
112
+ console.log(chalk_1.default.gray(` Please manually run: cd ${repoName}`));
113
+ }
114
+ }
115
+ catch (cloneError) {
116
+ console.error(chalk_1.default.red(`āŒ Failed to clone repository: ${cloneError.message}`));
117
+ console.log(chalk_1.default.yellow(`You can manually clone it later:`));
118
+ console.log(chalk_1.default.gray(` git clone ${gitUrl}`));
119
+ }
120
+ }
121
+ else {
122
+ console.log(chalk_1.default.yellow("āš ļø No GitHub repository was created (GitHub not configured)"));
123
+ }
124
+ }
125
+ catch (error) {
126
+ console.error(chalk_1.default.red(`āŒ Failed to create block: ${error.message}`));
127
+ process.exit(1);
128
+ }
129
+ }
130
+ //# 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,2 @@
1
+ export declare function deleteCommand(blockId: string): Promise<void>;
2
+ //# sourceMappingURL=delete.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete.d.ts","sourceRoot":"","sources":["../../src/commands/delete.ts"],"names":[],"mappings":"AAoBA,wBAAsB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA0ClE"}
@@ -0,0 +1,59 @@
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.deleteCommand = deleteCommand;
7
+ const chalk_1 = __importDefault(require("chalk"));
8
+ const api_1 = require("../utils/api");
9
+ const readline_1 = require("readline");
10
+ const auth_1 = require("../utils/auth");
11
+ // Simple confirmation function
12
+ async function confirm(question) {
13
+ return new Promise((resolve) => {
14
+ const rl = (0, readline_1.createInterface)({
15
+ input: process.stdin,
16
+ output: process.stdout
17
+ });
18
+ rl.question(`${question} (y/N): `, (answer) => {
19
+ rl.close();
20
+ resolve(answer.toLowerCase().trim() === 'y' || answer.toLowerCase().trim() === 'yes');
21
+ });
22
+ });
23
+ }
24
+ async function deleteCommand(blockId) {
25
+ try {
26
+ // Check authentication first
27
+ (0, auth_1.requireAuthentication)();
28
+ const user = (0, auth_1.getAuthenticatedUser)();
29
+ console.log(chalk_1.default.blue(`šŸ—‘ļø Deleting block: ${blockId}`));
30
+ console.log(chalk_1.default.gray(` User: ${user?.fullName || user?.email || 'Unknown'}`));
31
+ // Get block info first
32
+ console.log(chalk_1.default.yellow('šŸ“” Fetching block information...'));
33
+ const block = await api_1.apiClient.getBlock(blockId);
34
+ console.log(chalk_1.default.gray(` Title: ${block.title}`));
35
+ console.log(chalk_1.default.gray(` Description: ${block.description}`));
36
+ if (block.gitUrl) {
37
+ console.log(chalk_1.default.gray(` GitHub URL: ${block.gitUrl}`));
38
+ }
39
+ // Confirm deletion
40
+ const confirmed = await confirm(chalk_1.default.red('Are you sure you want to delete this block? This action cannot be undone.'));
41
+ if (!confirmed) {
42
+ console.log(chalk_1.default.yellow('🚫 Deletion cancelled.'));
43
+ return;
44
+ }
45
+ // Delete the block
46
+ console.log(chalk_1.default.yellow('šŸ“” Deleting block on server...'));
47
+ await api_1.apiClient.deleteBlock(blockId);
48
+ console.log(chalk_1.default.green(`āœ… Block deleted successfully!`));
49
+ if (block.gitUrl) {
50
+ console.log(chalk_1.default.yellow('āš ļø Note: The GitHub repository still exists and needs to be deleted manually if desired.'));
51
+ console.log(chalk_1.default.gray(` Repository: ${block.gitUrl}`));
52
+ }
53
+ }
54
+ catch (error) {
55
+ console.error(chalk_1.default.red(`āŒ Failed to delete block: ${error.message}`));
56
+ process.exit(1);
57
+ }
58
+ }
59
+ //# sourceMappingURL=delete.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete.js","sourceRoot":"","sources":["../../src/commands/delete.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function githubDisconnectCommand(): Promise<void>;
2
+ //# sourceMappingURL=github-disconnect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github-disconnect.d.ts","sourceRoot":"","sources":["../../src/commands/github-disconnect.ts"],"names":[],"mappings":"AAoBA,wBAAsB,uBAAuB,IAAI,OAAO,CAAC,IAAI,CAAC,CA0D7D"}
@@ -0,0 +1,73 @@
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.githubDisconnectCommand = githubDisconnectCommand;
7
+ const chalk_1 = __importDefault(require("chalk"));
8
+ const readline_1 = require("readline");
9
+ const api_1 = require("../utils/api");
10
+ const auth_1 = require("../utils/auth");
11
+ // Simple prompt function
12
+ async function prompt(question) {
13
+ return new Promise((resolve) => {
14
+ const rl = (0, readline_1.createInterface)({
15
+ input: process.stdin,
16
+ output: process.stdout
17
+ });
18
+ rl.question(question, (answer) => {
19
+ rl.close();
20
+ resolve(answer.trim());
21
+ });
22
+ });
23
+ }
24
+ async function githubDisconnectCommand() {
25
+ try {
26
+ // Check authentication first
27
+ (0, auth_1.requireAuthentication)();
28
+ console.log(chalk_1.default.blue('šŸ”“ Disconnect GitHub Account'));
29
+ console.log(chalk_1.default.gray(' Remove GitHub access from your MEXTY account\n'));
30
+ // Check if connected
31
+ try {
32
+ const status = await api_1.apiClient.getGitHubStatus();
33
+ if (!status.connected) {
34
+ console.log(chalk_1.default.yellow('ā„¹ļø GitHub is not connected'));
35
+ console.log(chalk_1.default.gray(' Nothing to disconnect\n'));
36
+ console.log(chalk_1.default.blue('To connect GitHub, run: mexty github-login'));
37
+ return;
38
+ }
39
+ console.log(chalk_1.default.yellow('āš ļø Current GitHub connection:'));
40
+ console.log(chalk_1.default.gray(` Username: ${status.githubUsername}\n`));
41
+ // Confirm disconnection
42
+ const confirm = await prompt('Are you sure you want to disconnect GitHub? (y/N): ');
43
+ if (confirm.toLowerCase() !== 'y' && confirm.toLowerCase() !== 'yes') {
44
+ console.log(chalk_1.default.gray('Cancelled'));
45
+ return;
46
+ }
47
+ console.log(chalk_1.default.yellow('\nšŸ”„ Disconnecting GitHub...'));
48
+ // Disconnect
49
+ const result = await api_1.apiClient.disconnectGitHub();
50
+ if (result.success) {
51
+ console.log(chalk_1.default.green(`\nāœ… ${result.message}`));
52
+ console.log(chalk_1.default.gray(' You will no longer be able to clone private repositories'));
53
+ console.log(chalk_1.default.blue('\nTo reconnect, run: mexty github-login'));
54
+ }
55
+ else {
56
+ console.error(chalk_1.default.red(`\nāŒ ${result.message}`));
57
+ process.exit(1);
58
+ }
59
+ }
60
+ catch (error) {
61
+ console.error(chalk_1.default.red(`āŒ Failed to disconnect GitHub: ${error.message}`));
62
+ process.exit(1);
63
+ }
64
+ }
65
+ catch (error) {
66
+ console.error(chalk_1.default.red(`āŒ GitHub disconnect failed: ${error.message}`));
67
+ if (error.response?.status === 401) {
68
+ console.log(chalk_1.default.yellow(' Please login first: mexty login'));
69
+ }
70
+ process.exit(1);
71
+ }
72
+ }
73
+ //# sourceMappingURL=github-disconnect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github-disconnect.js","sourceRoot":"","sources":["../../src/commands/github-disconnect.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function githubLoginCommand(): Promise<void>;
2
+ //# sourceMappingURL=github-login.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github-login.d.ts","sourceRoot":"","sources":["../../src/commands/github-login.ts"],"names":[],"mappings":"AASA,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC,CAgGxD"}