@kaitranntt/ccs 7.42.0-dev.1 → 7.43.0-dev.1

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.
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Cursor IDE Authentication Handler
3
+ *
4
+ * Handles token import and authentication for Cursor IDE integration.
5
+ * Supports auto-detection from Cursor's SQLite database.
6
+ *
7
+ * Token Location:
8
+ * - Linux: ~/.config/Cursor/User/globalStorage/state.vscdb
9
+ * - macOS: ~/Library/Application Support/Cursor/User/globalStorage/state.vscdb
10
+ * - Windows: %APPDATA%\Cursor\User\globalStorage\state.vscdb
11
+ *
12
+ * Database Keys:
13
+ * - cursorAuth/accessToken: Access token
14
+ * - storage.serviceMachineId: Machine ID for checksum
15
+ */
16
+ import type { CursorCredentials, CursorAuthStatus, AutoDetectResult } from './types';
17
+ /**
18
+ * Get platform-specific path to Cursor's state.vscdb
19
+ */
20
+ export declare function getTokenStoragePath(): string;
21
+ /**
22
+ * Auto-detect tokens from Cursor's SQLite database
23
+ */
24
+ export declare function autoDetectTokens(): AutoDetectResult;
25
+ /**
26
+ * Validate token and machine ID format
27
+ */
28
+ export declare function validateToken(accessToken: string, machineId: string): boolean;
29
+ /**
30
+ * Extract user info from token if possible
31
+ * Cursor tokens may contain encoded user info as JWT
32
+ */
33
+ export declare function extractUserInfo(accessToken: string): {
34
+ email?: string;
35
+ userId?: string;
36
+ exp?: number;
37
+ } | null;
38
+ /**
39
+ * Get path to credentials file
40
+ */
41
+ export declare function getCredentialsPath(): string;
42
+ /**
43
+ * Save credentials to CCS config directory
44
+ */
45
+ export declare function saveCredentials(credentials: CursorCredentials): void;
46
+ /**
47
+ * Load credentials from CCS config directory
48
+ */
49
+ export declare function loadCredentials(): CursorCredentials | null;
50
+ /**
51
+ * Check authentication status
52
+ */
53
+ export declare function checkAuthStatus(): CursorAuthStatus;
54
+ /**
55
+ * Delete credentials file
56
+ */
57
+ export declare function deleteCredentials(): boolean;
58
+ //# sourceMappingURL=cursor-auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cursor-auth.d.ts","sourceRoot":"","sources":["../../src/cursor/cursor-auth.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAMH,OAAO,KAAK,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAGrF;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAqB5C;AAyBD;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,gBAAgB,CA4CnD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAsB7E;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,WAAW,EAAE,MAAM,GAClB;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAiC1D;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,iBAAiB,GAAG,IAAI,CAcpE;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,iBAAiB,GAAG,IAAI,CAqC1D;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,gBAAgB,CAyClD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAO3C"}
@@ -0,0 +1,295 @@
1
+ "use strict";
2
+ /**
3
+ * Cursor IDE Authentication Handler
4
+ *
5
+ * Handles token import and authentication for Cursor IDE integration.
6
+ * Supports auto-detection from Cursor's SQLite database.
7
+ *
8
+ * Token Location:
9
+ * - Linux: ~/.config/Cursor/User/globalStorage/state.vscdb
10
+ * - macOS: ~/Library/Application Support/Cursor/User/globalStorage/state.vscdb
11
+ * - Windows: %APPDATA%\Cursor\User\globalStorage\state.vscdb
12
+ *
13
+ * Database Keys:
14
+ * - cursorAuth/accessToken: Access token
15
+ * - storage.serviceMachineId: Machine ID for checksum
16
+ */
17
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
18
+ if (k2 === undefined) k2 = k;
19
+ var desc = Object.getOwnPropertyDescriptor(m, k);
20
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
21
+ desc = { enumerable: true, get: function() { return m[k]; } };
22
+ }
23
+ Object.defineProperty(o, k2, desc);
24
+ }) : (function(o, m, k, k2) {
25
+ if (k2 === undefined) k2 = k;
26
+ o[k2] = m[k];
27
+ }));
28
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
29
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
30
+ }) : function(o, v) {
31
+ o["default"] = v;
32
+ });
33
+ var __importStar = (this && this.__importStar) || function (mod) {
34
+ if (mod && mod.__esModule) return mod;
35
+ var result = {};
36
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
37
+ __setModuleDefault(result, mod);
38
+ return result;
39
+ };
40
+ Object.defineProperty(exports, "__esModule", { value: true });
41
+ exports.deleteCredentials = exports.checkAuthStatus = exports.loadCredentials = exports.saveCredentials = exports.getCredentialsPath = exports.extractUserInfo = exports.validateToken = exports.autoDetectTokens = exports.getTokenStoragePath = void 0;
42
+ const child_process_1 = require("child_process");
43
+ const fs = __importStar(require("fs"));
44
+ const path = __importStar(require("path"));
45
+ const os = __importStar(require("os"));
46
+ const config_manager_1 = require("../utils/config-manager");
47
+ /**
48
+ * Get platform-specific path to Cursor's state.vscdb
49
+ */
50
+ function getTokenStoragePath() {
51
+ const platform = process.platform;
52
+ const home = os.homedir();
53
+ if (platform === 'win32') {
54
+ const appData = process.env.APPDATA || path.join(home, 'AppData', 'Roaming');
55
+ return path.join(appData, 'Cursor', 'User', 'globalStorage', 'state.vscdb');
56
+ }
57
+ else if (platform === 'darwin') {
58
+ return path.join(home, 'Library', 'Application Support', 'Cursor', 'User', 'globalStorage', 'state.vscdb');
59
+ }
60
+ else {
61
+ // Linux
62
+ return path.join(home, '.config', 'Cursor', 'User', 'globalStorage', 'state.vscdb');
63
+ }
64
+ }
65
+ exports.getTokenStoragePath = getTokenStoragePath;
66
+ /**
67
+ * Query Cursor's SQLite database using sqlite3 CLI
68
+ */
69
+ function queryStateDb(dbPath, key) {
70
+ try {
71
+ // Escape single quotes to prevent SQL injection
72
+ const sanitizedKey = key.replace(/'/g, "''");
73
+ const result = (0, child_process_1.execFileSync)('sqlite3', [dbPath, `SELECT value FROM itemTable WHERE key='${sanitizedKey}'`], { encoding: 'utf8', timeout: 5000, stdio: ['pipe', 'pipe', 'ignore'] }).trim();
74
+ return result || null;
75
+ }
76
+ catch (err) {
77
+ // Check if sqlite3 is not installed
78
+ if (err.code === 'ENOENT') {
79
+ // sqlite3 not found - could log this if needed
80
+ return null;
81
+ }
82
+ return null;
83
+ }
84
+ }
85
+ /**
86
+ * Auto-detect tokens from Cursor's SQLite database
87
+ */
88
+ function autoDetectTokens() {
89
+ // sqlite3 CLI is not bundled with Windows
90
+ if (process.platform === 'win32') {
91
+ return {
92
+ found: false,
93
+ error: 'Auto-detection is not supported on Windows. Please import tokens manually using ccs cursor auth --manual.',
94
+ };
95
+ }
96
+ const dbPath = getTokenStoragePath();
97
+ // Check if database exists
98
+ if (!fs.existsSync(dbPath)) {
99
+ return {
100
+ found: false,
101
+ error: 'Cursor state database not found. Make sure Cursor IDE is installed and you are logged in.',
102
+ };
103
+ }
104
+ // Try to query access token
105
+ const accessToken = queryStateDb(dbPath, 'cursorAuth/accessToken');
106
+ if (!accessToken) {
107
+ return {
108
+ found: false,
109
+ error: 'Access token not found in database. Please log in to Cursor IDE first.',
110
+ };
111
+ }
112
+ // Try to query machine ID
113
+ const machineId = queryStateDb(dbPath, 'storage.serviceMachineId');
114
+ if (!machineId) {
115
+ return {
116
+ found: false,
117
+ error: 'Machine ID not found in database.',
118
+ };
119
+ }
120
+ return {
121
+ found: true,
122
+ accessToken,
123
+ machineId,
124
+ };
125
+ }
126
+ exports.autoDetectTokens = autoDetectTokens;
127
+ /**
128
+ * Validate token and machine ID format
129
+ */
130
+ function validateToken(accessToken, machineId) {
131
+ // Basic validation
132
+ if (!accessToken || typeof accessToken !== 'string') {
133
+ return false;
134
+ }
135
+ if (!machineId || typeof machineId !== 'string') {
136
+ return false;
137
+ }
138
+ // Token format validation (Cursor tokens are typically long strings)
139
+ if (accessToken.length < 50) {
140
+ return false;
141
+ }
142
+ // Machine ID format validation (UUID without hyphens = exactly 32 hex chars)
143
+ const hexRegex = /^[a-f0-9]{32}$/i;
144
+ if (!hexRegex.test(machineId.replace(/-/g, ''))) {
145
+ return false;
146
+ }
147
+ return true;
148
+ }
149
+ exports.validateToken = validateToken;
150
+ /**
151
+ * Extract user info from token if possible
152
+ * Cursor tokens may contain encoded user info as JWT
153
+ */
154
+ function extractUserInfo(accessToken) {
155
+ try {
156
+ // Try to decode as JWT
157
+ const parts = accessToken.split('.');
158
+ if (parts.length === 3) {
159
+ let payload = parts[1];
160
+ // Add padding if needed
161
+ while (payload.length % 4) {
162
+ payload += '=';
163
+ }
164
+ const decoded = JSON.parse(Buffer.from(payload.replace(/-/g, '+').replace(/_/g, '/'), 'base64').toString());
165
+ const email = typeof decoded.email === 'string' ? decoded.email : undefined;
166
+ const userId = typeof decoded.sub === 'string'
167
+ ? decoded.sub
168
+ : typeof decoded.user_id === 'string'
169
+ ? decoded.user_id
170
+ : undefined;
171
+ const exp = typeof decoded.exp === 'number' ? decoded.exp : undefined;
172
+ // If all claims are undefined, treat as if JWT parsing failed
173
+ if (!email && !userId && exp === undefined)
174
+ return null;
175
+ return { email, userId, exp };
176
+ }
177
+ }
178
+ catch {
179
+ // Token is not a JWT, that's okay
180
+ }
181
+ return null;
182
+ }
183
+ exports.extractUserInfo = extractUserInfo;
184
+ /**
185
+ * Get path to credentials file
186
+ */
187
+ function getCredentialsPath() {
188
+ return path.join((0, config_manager_1.getCcsDir)(), 'cursor', 'credentials.json');
189
+ }
190
+ exports.getCredentialsPath = getCredentialsPath;
191
+ /**
192
+ * Save credentials to CCS config directory
193
+ */
194
+ function saveCredentials(credentials) {
195
+ const credPath = getCredentialsPath();
196
+ const dir = path.dirname(credPath);
197
+ // Ensure directory exists with restrictive permissions
198
+ if (!fs.existsSync(dir)) {
199
+ fs.mkdirSync(dir, { recursive: true, mode: 0o700 });
200
+ }
201
+ // Write credentials with restrictive permissions
202
+ fs.writeFileSync(credPath, JSON.stringify(credentials, null, 2), {
203
+ encoding: 'utf8',
204
+ mode: 0o600,
205
+ });
206
+ }
207
+ exports.saveCredentials = saveCredentials;
208
+ /**
209
+ * Load credentials from CCS config directory
210
+ */
211
+ function loadCredentials() {
212
+ const credPath = getCredentialsPath();
213
+ if (!fs.existsSync(credPath)) {
214
+ return null;
215
+ }
216
+ try {
217
+ const raw = fs.readFileSync(credPath, 'utf8');
218
+ const parsed = JSON.parse(raw);
219
+ // Basic validation
220
+ if (typeof parsed === 'object' &&
221
+ parsed !== null &&
222
+ 'accessToken' in parsed &&
223
+ 'machineId' in parsed &&
224
+ 'authMethod' in parsed &&
225
+ 'importedAt' in parsed) {
226
+ // Type validation
227
+ if (typeof parsed.accessToken !== 'string' ||
228
+ typeof parsed.machineId !== 'string' ||
229
+ typeof parsed.importedAt !== 'string' ||
230
+ (parsed.authMethod !== 'auto-detect' && parsed.authMethod !== 'manual')) {
231
+ return null;
232
+ }
233
+ return parsed;
234
+ }
235
+ return null;
236
+ }
237
+ catch {
238
+ return null;
239
+ }
240
+ }
241
+ exports.loadCredentials = loadCredentials;
242
+ /**
243
+ * Check authentication status
244
+ */
245
+ function checkAuthStatus() {
246
+ const credentials = loadCredentials();
247
+ if (!credentials) {
248
+ return { authenticated: false };
249
+ }
250
+ // Validate credentials are still valid format
251
+ if (!validateToken(credentials.accessToken, credentials.machineId)) {
252
+ return { authenticated: false };
253
+ }
254
+ // Try to get token expiry from JWT exp claim
255
+ let tokenAge;
256
+ let expired = false;
257
+ const userInfo = extractUserInfo(credentials.accessToken);
258
+ if (userInfo?.exp) {
259
+ // Use JWT exp claim for expiry detection
260
+ const now = Math.floor(Date.now() / 1000);
261
+ expired = now >= userInfo.exp;
262
+ }
263
+ // Always use importedAt for tokenAge (more reliable than reverse-engineering JWT lifetime)
264
+ const TOKEN_EXPIRY_HOURS = 24;
265
+ const importedDate = new Date(credentials.importedAt);
266
+ if (!isNaN(importedDate.getTime())) {
267
+ const now = new Date();
268
+ tokenAge = Math.floor((now.getTime() - importedDate.getTime()) / (1000 * 60 * 60));
269
+ // Only set expired from importedAt if JWT exp was not available
270
+ if (userInfo?.exp === undefined) {
271
+ expired = tokenAge >= TOKEN_EXPIRY_HOURS;
272
+ }
273
+ }
274
+ return {
275
+ authenticated: true,
276
+ credentials,
277
+ tokenAge,
278
+ expired,
279
+ };
280
+ }
281
+ exports.checkAuthStatus = checkAuthStatus;
282
+ /**
283
+ * Delete credentials file
284
+ */
285
+ function deleteCredentials() {
286
+ try {
287
+ fs.unlinkSync(getCredentialsPath());
288
+ return true;
289
+ }
290
+ catch {
291
+ return false;
292
+ }
293
+ }
294
+ exports.deleteCredentials = deleteCredentials;
295
+ //# sourceMappingURL=cursor-auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cursor-auth.js","sourceRoot":"","sources":["../../src/cursor/cursor-auth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Cursor IDE Type Definitions
3
+ *
4
+ * TypeScript interfaces for the Cursor auth module.
5
+ */
6
+ /**
7
+ * Cursor authentication credentials
8
+ */
9
+ export interface CursorCredentials {
10
+ /** Access token from Cursor IDE */
11
+ accessToken: string;
12
+ /** Machine ID for checksum generation */
13
+ machineId: string;
14
+ /** User email (if available from token) */
15
+ email?: string;
16
+ /** User ID (if available from token) */
17
+ userId?: string;
18
+ /** How credentials were obtained */
19
+ authMethod: 'auto-detect' | 'manual';
20
+ /** ISO datetime when credentials were imported */
21
+ importedAt: string;
22
+ }
23
+ /**
24
+ * Cursor authentication status
25
+ */
26
+ export interface CursorAuthStatus {
27
+ /** Whether user is authenticated */
28
+ authenticated: boolean;
29
+ /** Current credentials (if authenticated) */
30
+ credentials?: CursorCredentials;
31
+ /** Hours since credentials were imported (if available) */
32
+ tokenAge?: number;
33
+ /** Whether token has expired (>24 hours old) */
34
+ expired?: boolean;
35
+ }
36
+ /**
37
+ * Auto-detection result
38
+ */
39
+ export interface AutoDetectResult {
40
+ /** Whether tokens were found */
41
+ found: boolean;
42
+ /** Access token (if found) */
43
+ accessToken?: string;
44
+ /** Machine ID (if found) */
45
+ machineId?: string;
46
+ /** Error message (if detection failed) */
47
+ error?: string;
48
+ }
49
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/cursor/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,mCAAmC;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,yCAAyC;IACzC,SAAS,EAAE,MAAM,CAAC;IAClB,2CAA2C;IAC3C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,wCAAwC;IACxC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oCAAoC;IACpC,UAAU,EAAE,aAAa,GAAG,QAAQ,CAAC;IACrC,kDAAkD;IAClD,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,oCAAoC;IACpC,aAAa,EAAE,OAAO,CAAC;IACvB,6CAA6C;IAC7C,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAChC,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gDAAgD;IAChD,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,gCAAgC;IAChC,KAAK,EAAE,OAAO,CAAC;IACf,8BAA8B;IAC9B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,4BAA4B;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0CAA0C;IAC1C,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB"}
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ /**
3
+ * Cursor IDE Type Definitions
4
+ *
5
+ * TypeScript interfaces for the Cursor auth module.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/cursor/types.ts"],"names":[],"mappings":";AAAA;;;;GAIG"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kaitranntt/ccs",
3
- "version": "7.42.0-dev.1",
3
+ "version": "7.43.0-dev.1",
4
4
  "description": "Claude Code Switch - Instant profile switching between Claude Sonnet 4.5 and GLM 4.6",
5
5
  "keywords": [
6
6
  "cli",