@vybestack/llxprt-code 0.1.18-nightly.250808.f9b79d74 → 0.1.18-nightly.250811.b0db22c6

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 (194) hide show
  1. package/dist/package.json +5 -3
  2. package/dist/src/auth/gemini-oauth-provider.d.ts +15 -0
  3. package/dist/src/auth/gemini-oauth-provider.js +33 -0
  4. package/dist/src/auth/gemini-oauth-provider.js.map +1 -0
  5. package/dist/src/auth/oauth-manager.d.ts +103 -0
  6. package/dist/src/auth/oauth-manager.js +326 -0
  7. package/dist/src/auth/oauth-manager.js.map +1 -0
  8. package/dist/src/auth/oauth-manager.spec.d.ts +6 -0
  9. package/dist/src/auth/oauth-manager.spec.js +523 -0
  10. package/dist/src/auth/oauth-manager.spec.js.map +1 -0
  11. package/dist/src/auth/qwen-oauth-provider.d.ts +14 -0
  12. package/dist/src/auth/qwen-oauth-provider.js +75 -0
  13. package/dist/src/auth/qwen-oauth-provider.js.map +1 -0
  14. package/dist/src/auth/types.d.ts +7 -0
  15. package/dist/src/auth/types.js +7 -0
  16. package/dist/src/auth/types.js.map +1 -0
  17. package/dist/src/config/auth.js +9 -0
  18. package/dist/src/config/auth.js.map +1 -1
  19. package/dist/src/config/config.js +93 -43
  20. package/dist/src/config/config.js.map +1 -1
  21. package/dist/src/config/keyBindings.d.ts +66 -0
  22. package/dist/src/config/keyBindings.js +136 -0
  23. package/dist/src/config/keyBindings.js.map +1 -0
  24. package/dist/src/config/settings.d.ts +3 -59
  25. package/dist/src/config/settings.js +17 -1
  26. package/dist/src/config/settings.js.map +1 -1
  27. package/dist/src/config/settingsSchema.d.ts +587 -0
  28. package/dist/src/config/settingsSchema.js +565 -0
  29. package/dist/src/config/settingsSchema.js.map +1 -0
  30. package/dist/src/gemini.js +12 -109
  31. package/dist/src/gemini.js.map +1 -1
  32. package/dist/src/generated/git-commit.d.ts +1 -1
  33. package/dist/src/generated/git-commit.js +1 -1
  34. package/dist/src/nonInteractiveCli.js +0 -1
  35. package/dist/src/nonInteractiveCli.js.map +1 -1
  36. package/dist/src/providers/logging/git-stats-service-impl.d.ts +19 -0
  37. package/dist/src/providers/logging/git-stats-service-impl.js +25 -0
  38. package/dist/src/providers/logging/git-stats-service-impl.js.map +1 -0
  39. package/dist/src/providers/logging/git-stats.d.ts +43 -0
  40. package/dist/src/providers/logging/git-stats.js +137 -0
  41. package/dist/src/providers/logging/git-stats.js.map +1 -0
  42. package/dist/src/providers/providerManagerInstance.js +39 -4
  43. package/dist/src/providers/providerManagerInstance.js.map +1 -1
  44. package/dist/src/services/BuiltinCommandLoader.js +4 -0
  45. package/dist/src/services/BuiltinCommandLoader.js.map +1 -1
  46. package/dist/src/services/todo-continuation/todoContinuationService.d.ts +172 -0
  47. package/dist/src/services/todo-continuation/todoContinuationService.js +387 -0
  48. package/dist/src/services/todo-continuation/todoContinuationService.js.map +1 -0
  49. package/dist/src/services/todo-continuation/todoContinuationService.spec.d.ts +6 -0
  50. package/dist/src/services/todo-continuation/todoContinuationService.spec.js +385 -0
  51. package/dist/src/services/todo-continuation/todoContinuationService.spec.js.map +1 -0
  52. package/dist/src/ui/App.js +76 -26
  53. package/dist/src/ui/App.js.map +1 -1
  54. package/dist/src/ui/colors.d.ts +5 -0
  55. package/dist/src/ui/colors.js +51 -0
  56. package/dist/src/ui/colors.js.map +1 -1
  57. package/dist/src/ui/commands/authCommand.d.ts +11 -1
  58. package/dist/src/ui/commands/authCommand.js +143 -48
  59. package/dist/src/ui/commands/authCommand.js.map +1 -1
  60. package/dist/src/ui/commands/chatCommand.js +16 -0
  61. package/dist/src/ui/commands/chatCommand.js.map +1 -1
  62. package/dist/src/ui/commands/ideCommand.js +67 -31
  63. package/dist/src/ui/commands/ideCommand.js.map +1 -1
  64. package/dist/src/ui/commands/keyfileCommand.js +15 -12
  65. package/dist/src/ui/commands/keyfileCommand.js.map +1 -1
  66. package/dist/src/ui/commands/loggingCommand.d.ts +15 -0
  67. package/dist/src/ui/commands/loggingCommand.js +421 -0
  68. package/dist/src/ui/commands/loggingCommand.js.map +1 -0
  69. package/dist/src/ui/commands/privacyCommand.d.ts +3 -0
  70. package/dist/src/ui/commands/privacyCommand.js +6 -3
  71. package/dist/src/ui/commands/privacyCommand.js.map +1 -1
  72. package/dist/src/ui/commands/settingsCommand.d.ts +7 -0
  73. package/dist/src/ui/commands/settingsCommand.js +16 -0
  74. package/dist/src/ui/commands/settingsCommand.js.map +1 -0
  75. package/dist/src/ui/commands/setupGithubCommand.js +21 -2
  76. package/dist/src/ui/commands/setupGithubCommand.js.map +1 -1
  77. package/dist/src/ui/commands/types.d.ts +14 -2
  78. package/dist/src/ui/commands/types.js.map +1 -1
  79. package/dist/src/ui/components/AuthDialog.js +13 -56
  80. package/dist/src/ui/components/AuthDialog.js.map +1 -1
  81. package/dist/src/ui/components/AuthInProgress.js +3 -3
  82. package/dist/src/ui/components/AuthInProgress.js.map +1 -1
  83. package/dist/src/ui/components/ContextUsageDisplay.d.ts +10 -0
  84. package/dist/src/ui/components/ContextUsageDisplay.js +27 -0
  85. package/dist/src/ui/components/ContextUsageDisplay.js.map +1 -0
  86. package/dist/src/ui/components/FolderTrustDialog.d.ts +16 -0
  87. package/dist/src/ui/components/FolderTrustDialog.js +38 -0
  88. package/dist/src/ui/components/FolderTrustDialog.js.map +1 -0
  89. package/dist/src/ui/components/Footer.js +132 -15
  90. package/dist/src/ui/components/Footer.js.map +1 -1
  91. package/dist/src/ui/components/InputPrompt.d.ts +1 -0
  92. package/dist/src/ui/components/InputPrompt.js +87 -31
  93. package/dist/src/ui/components/InputPrompt.js.map +1 -1
  94. package/dist/src/ui/components/LoggingDialog.d.ts +37 -0
  95. package/dist/src/ui/components/LoggingDialog.js +155 -0
  96. package/dist/src/ui/components/LoggingDialog.js.map +1 -0
  97. package/dist/src/ui/components/MemoryUsageDisplay.js +6 -4
  98. package/dist/src/ui/components/MemoryUsageDisplay.js.map +1 -1
  99. package/dist/src/ui/components/ProviderDialog.js +100 -26
  100. package/dist/src/ui/components/ProviderDialog.js.map +1 -1
  101. package/dist/src/ui/components/ProviderModelDialog.js +99 -27
  102. package/dist/src/ui/components/ProviderModelDialog.js.map +1 -1
  103. package/dist/src/ui/components/SettingsDialog.d.ts +14 -0
  104. package/dist/src/ui/components/SettingsDialog.js +247 -0
  105. package/dist/src/ui/components/SettingsDialog.js.map +1 -0
  106. package/dist/src/ui/components/ThemeDialog.js +4 -15
  107. package/dist/src/ui/components/ThemeDialog.js.map +1 -1
  108. package/dist/src/ui/components/TodoPanel.js +93 -18
  109. package/dist/src/ui/components/TodoPanel.js.map +1 -1
  110. package/dist/src/ui/components/messages/ToolConfirmationMessage.js +85 -7
  111. package/dist/src/ui/components/messages/ToolConfirmationMessage.js.map +1 -1
  112. package/dist/src/ui/contexts/SettingsContext.d.ts +9 -0
  113. package/dist/src/ui/contexts/SettingsContext.js +15 -0
  114. package/dist/src/ui/contexts/SettingsContext.js.map +1 -0
  115. package/dist/src/ui/hooks/atCommandProcessor.js +21 -0
  116. package/dist/src/ui/hooks/atCommandProcessor.js.map +1 -1
  117. package/dist/src/ui/hooks/slashCommandProcessor.d.ts +6 -2
  118. package/dist/src/ui/hooks/slashCommandProcessor.js +142 -113
  119. package/dist/src/ui/hooks/slashCommandProcessor.js.map +1 -1
  120. package/dist/src/ui/hooks/useAtCompletion.js +1 -1
  121. package/dist/src/ui/hooks/useAuthCommand.js +14 -0
  122. package/dist/src/ui/hooks/useAuthCommand.js.map +1 -1
  123. package/dist/src/ui/hooks/useConsoleMessages.js +7 -0
  124. package/dist/src/ui/hooks/useConsoleMessages.js.map +1 -1
  125. package/dist/src/ui/hooks/useFolderTrust.d.ts +11 -0
  126. package/dist/src/ui/hooks/useFolderTrust.js +22 -0
  127. package/dist/src/ui/hooks/useFolderTrust.js.map +1 -0
  128. package/dist/src/ui/hooks/useGeminiStream.js +14 -3
  129. package/dist/src/ui/hooks/useGeminiStream.js.map +1 -1
  130. package/dist/src/ui/hooks/useResponsive.d.ts +14 -0
  131. package/dist/src/ui/hooks/useResponsive.js +19 -0
  132. package/dist/src/ui/hooks/useResponsive.js.map +1 -0
  133. package/dist/src/ui/hooks/useSettingsCommand.d.ts +10 -0
  134. package/dist/src/ui/hooks/useSettingsCommand.js +21 -0
  135. package/dist/src/ui/hooks/useSettingsCommand.js.map +1 -0
  136. package/dist/src/ui/hooks/useTodoContinuation.d.ts +31 -0
  137. package/dist/src/ui/hooks/useTodoContinuation.js +148 -0
  138. package/dist/src/ui/hooks/useTodoContinuation.js.map +1 -0
  139. package/dist/src/ui/hooks/useTodoContinuation.spec.d.ts +6 -0
  140. package/dist/src/ui/hooks/useTodoContinuation.spec.js +378 -0
  141. package/dist/src/ui/hooks/useTodoContinuation.spec.js.map +1 -0
  142. package/dist/src/ui/keyMatchers.d.ts +26 -0
  143. package/dist/src/ui/keyMatchers.js +68 -0
  144. package/dist/src/ui/keyMatchers.js.map +1 -0
  145. package/dist/src/ui/privacy/PrivacyNotice.js +10 -4
  146. package/dist/src/ui/privacy/PrivacyNotice.js.map +1 -1
  147. package/dist/src/ui/themes/semantic-resolver.d.ts +12 -0
  148. package/dist/src/ui/themes/semantic-resolver.js +32 -0
  149. package/dist/src/ui/themes/semantic-resolver.js.map +1 -0
  150. package/dist/src/ui/themes/semantic-tokens.d.ts +52 -0
  151. package/dist/src/ui/themes/semantic-tokens.js +7 -0
  152. package/dist/src/ui/themes/semantic-tokens.js.map +1 -0
  153. package/dist/src/ui/themes/theme-compat.d.ts +34 -0
  154. package/dist/src/ui/themes/theme-compat.js +65 -0
  155. package/dist/src/ui/themes/theme-compat.js.map +1 -0
  156. package/dist/src/ui/themes/theme-manager.d.ts +8 -0
  157. package/dist/src/ui/themes/theme-manager.js +18 -0
  158. package/dist/src/ui/themes/theme-manager.js.map +1 -1
  159. package/dist/src/ui/utils/CodeColorizer.d.ts +2 -1
  160. package/dist/src/ui/utils/CodeColorizer.js +4 -3
  161. package/dist/src/ui/utils/CodeColorizer.js.map +1 -1
  162. package/dist/src/ui/utils/MarkdownDisplay.js +4 -2
  163. package/dist/src/ui/utils/MarkdownDisplay.js.map +1 -1
  164. package/dist/src/ui/utils/commandUtils.d.ts +1 -0
  165. package/dist/src/ui/utils/commandUtils.js +22 -1
  166. package/dist/src/ui/utils/commandUtils.js.map +1 -1
  167. package/dist/src/ui/utils/responsive.d.ts +16 -0
  168. package/dist/src/ui/utils/responsive.js +111 -0
  169. package/dist/src/ui/utils/responsive.js.map +1 -0
  170. package/dist/src/utils/cleanup.d.ts +2 -2
  171. package/dist/src/utils/cleanup.js +2 -2
  172. package/dist/src/utils/cleanup.js.map +1 -1
  173. package/dist/src/utils/dialogScopeUtils.d.ts +31 -0
  174. package/dist/src/utils/dialogScopeUtils.js +48 -0
  175. package/dist/src/utils/dialogScopeUtils.js.map +1 -0
  176. package/dist/src/utils/gitUtils.d.ts +9 -0
  177. package/dist/src/utils/gitUtils.js +17 -0
  178. package/dist/src/utils/gitUtils.js.map +1 -1
  179. package/dist/src/utils/privacy/ConversationDataRedactor.d.ts +75 -0
  180. package/dist/src/utils/privacy/ConversationDataRedactor.js +412 -0
  181. package/dist/src/utils/privacy/ConversationDataRedactor.js.map +1 -0
  182. package/dist/src/utils/privacy/PrivacyManager.d.ts +58 -0
  183. package/dist/src/utils/privacy/PrivacyManager.js +133 -0
  184. package/dist/src/utils/privacy/PrivacyManager.js.map +1 -0
  185. package/dist/src/utils/sandbox.js +10 -0
  186. package/dist/src/utils/sandbox.js.map +1 -1
  187. package/dist/src/utils/settingsUtils.d.ts +126 -0
  188. package/dist/src/utils/settingsUtils.js +327 -0
  189. package/dist/src/utils/settingsUtils.js.map +1 -0
  190. package/dist/tsconfig.tsbuildinfo +1 -1
  191. package/package.json +5 -3
  192. package/dist/src/ui/components/IDEContextDetailDisplay.d.ts +0 -12
  193. package/dist/src/ui/components/IDEContextDetailDisplay.js +0 -17
  194. package/dist/src/ui/components/IDEContextDetailDisplay.js.map +0 -1
package/dist/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vybestack/llxprt-code",
3
- "version": "0.1.18-nightly.250808.f9b79d74",
3
+ "version": "0.1.18-nightly.250811.b0db22c6",
4
4
  "description": "LLxprt Code",
5
5
  "repository": {
6
6
  "type": "git",
@@ -33,15 +33,16 @@
33
33
  "dist"
34
34
  ],
35
35
  "config": {
36
- "sandboxImageUri": "ghcr.io/acoliver/llxprt-code/sandbox:0.1.18-nightly.250808.f9b79d74"
36
+ "sandboxImageUri": "ghcr.io/acoliver/llxprt-code/sandbox:0.1.18-nightly.250811.b0db22c6"
37
37
  },
38
38
  "dependencies": {
39
39
  "@anthropic-ai/sdk": "^0.55.1",
40
40
  "@dqbd/tiktoken": "^1.0.21",
41
41
  "@google/genai": "1.9.0",
42
42
  "@iarna/toml": "^2.2.5",
43
+ "@modelcontextprotocol/sdk": "^1.15.1",
43
44
  "@types/update-notifier": "^6.0.8",
44
- "@vybestack/llxprt-code-core": "0.1.18-nightly.250808.f9b79d74",
45
+ "@vybestack/llxprt-code-core": "0.1.18-nightly.250811.b0db22c6",
45
46
  "chalk": "^5.3.0",
46
47
  "command-exists": "^1.2.9",
47
48
  "diff": "^7.0.0",
@@ -64,6 +65,7 @@
64
65
  "string-width": "^7.1.0",
65
66
  "strip-ansi": "^7.1.0",
66
67
  "strip-json-comments": "^3.1.1",
68
+ "undici": "^7.10.0",
67
69
  "update-notifier": "^7.3.1",
68
70
  "yargs": "^17.7.2",
69
71
  "zod": "^3.23.8"
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Gemini OAuth Provider Implementation
3
+ *
4
+ * Note: This is a placeholder that signals to use the existing Gemini OAuth flow.
5
+ * The actual OAuth is handled by the GeminiProvider itself using LOGIN_WITH_GOOGLE.
6
+ */
7
+ import { OAuthProvider } from './oauth-manager.js';
8
+ import { OAuthToken } from '@vybestack/llxprt-code-core';
9
+ export declare class GeminiOAuthProvider implements OAuthProvider {
10
+ name: string;
11
+ private currentToken;
12
+ initiateAuth(): Promise<void>;
13
+ getToken(): Promise<OAuthToken | null>;
14
+ refreshIfNeeded(): Promise<OAuthToken | null>;
15
+ }
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Gemini OAuth Provider Implementation
3
+ *
4
+ * Note: This is a placeholder that signals to use the existing Gemini OAuth flow.
5
+ * The actual OAuth is handled by the GeminiProvider itself using LOGIN_WITH_GOOGLE.
6
+ */
7
+ export class GeminiOAuthProvider {
8
+ name = 'gemini';
9
+ currentToken = null;
10
+ async initiateAuth() {
11
+ // Signal that the existing LOGIN_WITH_GOOGLE flow should be used
12
+ // The GeminiProvider will handle this through its own OAuth mechanism
13
+ throw new Error('USE_EXISTING_GEMINI_OAUTH');
14
+ }
15
+ async getToken() {
16
+ return this.currentToken;
17
+ }
18
+ async refreshIfNeeded() {
19
+ if (!this.currentToken) {
20
+ return null;
21
+ }
22
+ // Check if token needs refresh (30 second buffer)
23
+ const now = Date.now() / 1000;
24
+ const expiresAt = this.currentToken.expiry;
25
+ if (expiresAt && expiresAt - now < 30) {
26
+ // Token expires soon, refresh it
27
+ // TODO: Implement Gemini token refresh
28
+ console.log('Gemini token refresh needed');
29
+ }
30
+ return this.currentToken;
31
+ }
32
+ }
33
+ //# sourceMappingURL=gemini-oauth-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gemini-oauth-provider.js","sourceRoot":"","sources":["../../../src/auth/gemini-oauth-provider.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,MAAM,OAAO,mBAAmB;IAC9B,IAAI,GAAG,QAAQ,CAAC;IACR,YAAY,GAAsB,IAAI,CAAC;IAE/C,KAAK,CAAC,YAAY;QAChB,iEAAiE;QACjE,sEAAsE;QACtE,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;IAC/C,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,eAAe;QACnB,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YACvB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,kDAAkD;QAClD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;QAC9B,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;QAE3C,IAAI,SAAS,IAAI,SAAS,GAAG,GAAG,GAAG,EAAE,EAAE,CAAC;YACtC,iCAAiC;YACjC,uCAAuC;YACvC,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;QAC7C,CAAC;QAED,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;CACF"}
@@ -0,0 +1,103 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Vybestack LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { OAuthToken, AuthStatus, TokenStore } from './types.js';
7
+ import { LoadedSettings } from '../config/settings.js';
8
+ /**
9
+ * Interface for OAuth provider abstraction
10
+ * Each provider (e.g., Google, Qwen) implements this interface
11
+ */
12
+ export interface OAuthProvider {
13
+ /** Provider name (e.g., 'gemini', 'qwen') */
14
+ name: string;
15
+ /**
16
+ * Initiate OAuth authentication flow
17
+ * This starts the device flow or opens browser for auth
18
+ */
19
+ initiateAuth(): Promise<void>;
20
+ /**
21
+ * Get current OAuth token for this provider
22
+ * @returns OAuth token if available, null otherwise
23
+ */
24
+ getToken(): Promise<OAuthToken | null>;
25
+ /**
26
+ * Refresh token if it's expired or about to expire
27
+ * @returns Refreshed token or null if refresh failed
28
+ */
29
+ refreshIfNeeded(): Promise<OAuthToken | null>;
30
+ }
31
+ /**
32
+ * OAuth Manager coordinates multiple OAuth providers
33
+ * Provides unified interface for authentication across providers
34
+ */
35
+ export declare class OAuthManager {
36
+ private providers;
37
+ private tokenStore;
38
+ private settings?;
39
+ constructor(tokenStore: TokenStore, settings?: LoadedSettings);
40
+ /**
41
+ * Register an OAuth provider with the manager
42
+ * @param provider - The OAuth provider to register
43
+ */
44
+ registerProvider(provider: OAuthProvider): void;
45
+ /**
46
+ * Authenticate with a specific provider
47
+ * @param providerName - Name of the provider to authenticate with
48
+ */
49
+ authenticate(providerName: string): Promise<void>;
50
+ /**
51
+ * Get authentication status for all registered providers
52
+ * @returns Array of authentication status for each provider
53
+ */
54
+ getAuthStatus(): Promise<AuthStatus[]>;
55
+ /**
56
+ * Check if authenticated with a specific provider (required by precedence resolver)
57
+ * @param providerName - Name of the provider
58
+ * @returns True if authenticated, false otherwise
59
+ */
60
+ isAuthenticated(providerName: string): Promise<boolean>;
61
+ /**
62
+ * Get OAuth token for a specific provider
63
+ * Compatible with precedence resolver - returns access token string
64
+ * @param providerName - Name of the provider
65
+ * @returns Access token string if available, null otherwise
66
+ */
67
+ getToken(providerName: string): Promise<string | null>;
68
+ /**
69
+ * Get OAuth token object for a specific provider
70
+ * @param providerName - Name of the provider
71
+ * @returns OAuth token if available, null otherwise
72
+ */
73
+ getOAuthToken(providerName: string): Promise<OAuthToken | null>;
74
+ /**
75
+ * Get list of all registered provider names
76
+ * @returns Array of provider names
77
+ */
78
+ getSupportedProviders(): string[];
79
+ /**
80
+ * Toggle OAuth enablement for a provider
81
+ * @param providerName - Name of the provider
82
+ * @returns New enablement state (true if enabled, false if disabled)
83
+ */
84
+ toggleOAuthEnabled(providerName: string): Promise<boolean>;
85
+ /**
86
+ * Check if OAuth is enabled for a provider
87
+ * @param providerName - Name of the provider
88
+ * @returns True if OAuth is enabled, false otherwise
89
+ */
90
+ isOAuthEnabled(providerName: string): boolean;
91
+ /**
92
+ * Check for higher priority authentication methods
93
+ * @param providerName - Name of the provider to check
94
+ * @returns String describing higher priority auth method, null if none
95
+ */
96
+ getHigherPriorityAuth(providerName: string): Promise<string | null>;
97
+ /**
98
+ * Check if a URL is compatible with Qwen OAuth
99
+ * @param url - The base URL to check
100
+ * @returns True if compatible, false otherwise
101
+ */
102
+ private isQwenCompatibleUrl;
103
+ }
@@ -0,0 +1,326 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Vybestack LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { SettingScope } from '../config/settings.js';
7
+ /**
8
+ * OAuth Manager coordinates multiple OAuth providers
9
+ * Provides unified interface for authentication across providers
10
+ */
11
+ export class OAuthManager {
12
+ providers;
13
+ tokenStore;
14
+ settings;
15
+ constructor(tokenStore, settings) {
16
+ this.providers = new Map();
17
+ this.tokenStore = tokenStore;
18
+ this.settings = settings;
19
+ }
20
+ /**
21
+ * Register an OAuth provider with the manager
22
+ * @param provider - The OAuth provider to register
23
+ */
24
+ registerProvider(provider) {
25
+ if (!provider) {
26
+ throw new Error('Provider cannot be null or undefined');
27
+ }
28
+ if (!provider.name || typeof provider.name !== 'string') {
29
+ throw new Error('Provider must have a valid name');
30
+ }
31
+ // Validate provider has required methods
32
+ if (typeof provider.initiateAuth !== 'function') {
33
+ throw new Error('Provider must implement initiateAuth method');
34
+ }
35
+ if (typeof provider.getToken !== 'function') {
36
+ throw new Error('Provider must implement getToken method');
37
+ }
38
+ if (typeof provider.refreshIfNeeded !== 'function') {
39
+ throw new Error('Provider must implement refreshIfNeeded method');
40
+ }
41
+ this.providers.set(provider.name, provider);
42
+ }
43
+ /**
44
+ * Authenticate with a specific provider
45
+ * @param providerName - Name of the provider to authenticate with
46
+ */
47
+ async authenticate(providerName) {
48
+ if (!providerName || typeof providerName !== 'string') {
49
+ throw new Error('Provider name must be a non-empty string');
50
+ }
51
+ const provider = this.providers.get(providerName);
52
+ if (!provider) {
53
+ throw new Error(`Unknown provider: ${providerName}`);
54
+ }
55
+ try {
56
+ // 1. Initiate authentication with the provider
57
+ await provider.initiateAuth();
58
+ // 2. Get token from provider after successful auth
59
+ const providerToken = await provider.getToken();
60
+ if (!providerToken) {
61
+ throw new Error('Authentication completed but no token was returned');
62
+ }
63
+ // 3. Store token using tokenStore
64
+ await this.tokenStore.saveToken(providerName, providerToken);
65
+ }
66
+ catch (error) {
67
+ // Propagate provider authentication errors
68
+ if (error instanceof Error) {
69
+ throw error;
70
+ }
71
+ throw new Error(`Authentication failed for provider ${providerName}: ${String(error)}`);
72
+ }
73
+ }
74
+ /**
75
+ * Get authentication status for all registered providers
76
+ * @returns Array of authentication status for each provider
77
+ */
78
+ async getAuthStatus() {
79
+ const statuses = [];
80
+ // Get all registered providers and check their status
81
+ for (const [providerName, _provider] of this.providers) {
82
+ try {
83
+ const token = await this.tokenStore.getToken(providerName);
84
+ const oauthEnabled = this.isOAuthEnabled(providerName);
85
+ if (token) {
86
+ // Provider is authenticated, calculate time until expiry
87
+ const now = Date.now();
88
+ const expiresIn = Math.max(0, Math.floor((token.expiry - now) / 1000)); // seconds
89
+ statuses.push({
90
+ provider: providerName,
91
+ authenticated: true,
92
+ authType: 'oauth',
93
+ expiresIn,
94
+ oauthEnabled,
95
+ });
96
+ }
97
+ else {
98
+ // Provider is not authenticated
99
+ statuses.push({
100
+ provider: providerName,
101
+ authenticated: false,
102
+ authType: 'none',
103
+ oauthEnabled,
104
+ });
105
+ }
106
+ }
107
+ catch (_error) {
108
+ // If we can't get token status, consider it unauthenticated
109
+ const oauthEnabled = this.isOAuthEnabled(providerName);
110
+ statuses.push({
111
+ provider: providerName,
112
+ authenticated: false,
113
+ authType: 'none',
114
+ oauthEnabled,
115
+ });
116
+ }
117
+ }
118
+ return statuses;
119
+ }
120
+ /**
121
+ * Check if authenticated with a specific provider (required by precedence resolver)
122
+ * @param providerName - Name of the provider
123
+ * @returns True if authenticated, false otherwise
124
+ */
125
+ async isAuthenticated(providerName) {
126
+ // Special handling for Gemini - check if OAuth is enabled and working
127
+ if (providerName === 'gemini' && this.isOAuthEnabled('gemini')) {
128
+ // For Gemini, if OAuth is enabled, we assume it's authenticated
129
+ // since the actual auth is handled by LOGIN_WITH_GOOGLE
130
+ return true;
131
+ }
132
+ const token = await this.getOAuthToken(providerName);
133
+ return token !== null;
134
+ }
135
+ /**
136
+ * Get OAuth token for a specific provider
137
+ * Compatible with precedence resolver - returns access token string
138
+ * @param providerName - Name of the provider
139
+ * @returns Access token string if available, null otherwise
140
+ */
141
+ async getToken(providerName) {
142
+ // Check if OAuth is enabled for this provider
143
+ if (!this.isOAuthEnabled(providerName)) {
144
+ return null;
145
+ }
146
+ const token = await this.getOAuthToken(providerName);
147
+ // Special handling for different providers
148
+ if (providerName === 'gemini') {
149
+ if (token) {
150
+ return token.access_token;
151
+ }
152
+ // Return a special token that signals to use LOGIN_WITH_GOOGLE
153
+ return 'USE_LOGIN_WITH_GOOGLE';
154
+ }
155
+ // For Qwen, return the OAuth token to be used as API key
156
+ if (providerName === 'qwen' && token) {
157
+ return token.access_token;
158
+ }
159
+ if (token) {
160
+ return token.access_token;
161
+ }
162
+ // For other providers, trigger OAuth flow
163
+ try {
164
+ await this.authenticate(providerName);
165
+ const newToken = await this.getOAuthToken(providerName);
166
+ // Return the access token without any prefix - OAuth Bearer tokens should be used as-is
167
+ return newToken ? newToken.access_token : null;
168
+ }
169
+ catch (error) {
170
+ // Re-throw the error so it's not silently swallowed
171
+ console.error(`OAuth authentication failed for ${providerName}:`, error);
172
+ throw error;
173
+ }
174
+ }
175
+ /**
176
+ * Get OAuth token object for a specific provider
177
+ * @param providerName - Name of the provider
178
+ * @returns OAuth token if available, null otherwise
179
+ */
180
+ async getOAuthToken(providerName) {
181
+ if (!providerName || typeof providerName !== 'string') {
182
+ throw new Error('Provider name must be a non-empty string');
183
+ }
184
+ const provider = this.providers.get(providerName);
185
+ if (!provider) {
186
+ throw new Error(`Unknown provider: ${providerName}`);
187
+ }
188
+ try {
189
+ // 1. Try to get token from store
190
+ const token = await this.tokenStore.getToken(providerName);
191
+ if (!token) {
192
+ return null;
193
+ }
194
+ // 2. Check if token expires within 30 seconds (30000ms)
195
+ const now = Date.now();
196
+ const thirtySecondsFromNow = now + 30000;
197
+ if (token.expiry <= thirtySecondsFromNow) {
198
+ // 3. Token is expired or about to expire, try refresh
199
+ try {
200
+ const refreshedToken = await provider.refreshIfNeeded();
201
+ if (refreshedToken) {
202
+ // 4. Update stored token if refreshed
203
+ await this.tokenStore.saveToken(providerName, refreshedToken);
204
+ return refreshedToken;
205
+ }
206
+ else {
207
+ // Refresh failed, return null
208
+ return null;
209
+ }
210
+ }
211
+ catch (_error) {
212
+ // Token refresh failure: Return null, no logging
213
+ return null;
214
+ }
215
+ }
216
+ // 5. Return valid token
217
+ return token;
218
+ }
219
+ catch (error) {
220
+ // For unknown provider or other critical errors, throw
221
+ if (error instanceof Error &&
222
+ error.message.includes('Unknown provider')) {
223
+ throw error;
224
+ }
225
+ // For other errors, return null
226
+ return null;
227
+ }
228
+ }
229
+ /**
230
+ * Get list of all registered provider names
231
+ * @returns Array of provider names
232
+ */
233
+ getSupportedProviders() {
234
+ return Array.from(this.providers.keys()).sort();
235
+ }
236
+ /**
237
+ * Toggle OAuth enablement for a provider
238
+ * @param providerName - Name of the provider
239
+ * @returns New enablement state (true if enabled, false if disabled)
240
+ */
241
+ async toggleOAuthEnabled(providerName) {
242
+ if (!providerName || typeof providerName !== 'string') {
243
+ throw new Error('Provider name must be a non-empty string');
244
+ }
245
+ const provider = this.providers.get(providerName);
246
+ if (!provider) {
247
+ throw new Error(`Unknown provider: ${providerName}`);
248
+ }
249
+ if (!this.settings) {
250
+ throw new Error('Settings are required to toggle OAuth enablement');
251
+ }
252
+ const currentlyEnabled = this.isOAuthEnabled(providerName);
253
+ const newState = !currentlyEnabled;
254
+ // Get current OAuth enabled providers or initialize empty object
255
+ const oauthEnabledProviders = this.settings.merged.oauthEnabledProviders || {};
256
+ oauthEnabledProviders[providerName] = newState;
257
+ // Save the updated configuration
258
+ this.settings.setValue(SettingScope.User, 'oauthEnabledProviders', oauthEnabledProviders);
259
+ return newState;
260
+ }
261
+ /**
262
+ * Check if OAuth is enabled for a provider
263
+ * @param providerName - Name of the provider
264
+ * @returns True if OAuth is enabled, false otherwise
265
+ */
266
+ isOAuthEnabled(providerName) {
267
+ if (!this.settings) {
268
+ // Default to false if no settings available
269
+ return false;
270
+ }
271
+ const oauthEnabledProviders = this.settings.merged.oauthEnabledProviders || {};
272
+ return oauthEnabledProviders[providerName] ?? false;
273
+ }
274
+ /**
275
+ * Check for higher priority authentication methods
276
+ * @param providerName - Name of the provider to check
277
+ * @returns String describing higher priority auth method, null if none
278
+ */
279
+ async getHigherPriorityAuth(providerName) {
280
+ if (!this.settings) {
281
+ return null;
282
+ }
283
+ const merged = this.settings.merged;
284
+ // Check for API keys (highest priority)
285
+ if (merged.providerApiKeys && merged.providerApiKeys[providerName]) {
286
+ return 'API Key';
287
+ }
288
+ // Check for keyfiles (second highest priority)
289
+ if (merged.providerKeyfiles && merged.providerKeyfiles[providerName]) {
290
+ return 'Keyfile';
291
+ }
292
+ // Check for environment variables
293
+ const envKeyName = `${providerName.toUpperCase()}_API_KEY`;
294
+ if (process.env[envKeyName]) {
295
+ return 'Environment Variable';
296
+ }
297
+ // For OpenAI-based providers, check if baseURL is compatible
298
+ if (providerName === 'qwen') {
299
+ const baseUrls = merged.providerBaseUrls || {};
300
+ const openaiBaseUrl = baseUrls['openai'];
301
+ if (openaiBaseUrl && !this.isQwenCompatibleUrl(openaiBaseUrl)) {
302
+ return 'OpenAI BaseURL Mismatch';
303
+ }
304
+ }
305
+ return null;
306
+ }
307
+ /**
308
+ * Check if a URL is compatible with Qwen OAuth
309
+ * @param url - The base URL to check
310
+ * @returns True if compatible, false otherwise
311
+ */
312
+ isQwenCompatibleUrl(url) {
313
+ if (!url)
314
+ return true; // Default OpenAI endpoint is compatible
315
+ // Qwen-compatible URLs
316
+ const qwenDomains = ['dashscope.aliyuncs.com', 'qwen.com', 'api.qwen.com'];
317
+ try {
318
+ const urlObj = new URL(url);
319
+ return qwenDomains.some((domain) => urlObj.hostname.includes(domain));
320
+ }
321
+ catch {
322
+ return false; // Invalid URL format
323
+ }
324
+ }
325
+ }
326
+ //# sourceMappingURL=oauth-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oauth-manager.js","sourceRoot":"","sources":["../../../src/auth/oauth-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Vybestack LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ export {};