@vybestack/llxprt-code-core 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.
- package/dist/index.d.ts +3 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/src/auth/auth-integration.spec.d.ts +6 -0
- package/dist/src/auth/auth-integration.spec.js +384 -0
- package/dist/src/auth/auth-integration.spec.js.map +1 -0
- package/dist/src/auth/precedence.d.ts +55 -0
- package/dist/src/auth/precedence.js +211 -0
- package/dist/src/auth/precedence.js.map +1 -0
- package/dist/src/auth/precedence.test.d.ts +6 -0
- package/dist/src/auth/precedence.test.js +374 -0
- package/dist/src/auth/precedence.test.js.map +1 -0
- package/dist/src/auth/qwen-device-flow.d.ts +45 -0
- package/dist/src/auth/qwen-device-flow.js +179 -0
- package/dist/src/auth/qwen-device-flow.js.map +1 -0
- package/dist/src/auth/qwen-device-flow.spec.d.ts +6 -0
- package/dist/src/auth/qwen-device-flow.spec.js +793 -0
- package/dist/src/auth/qwen-device-flow.spec.js.map +1 -0
- package/dist/src/auth/token-store.d.ts +66 -0
- package/dist/src/auth/token-store.js +147 -0
- package/dist/src/auth/token-store.js.map +1 -0
- package/dist/src/auth/token-store.spec.d.ts +6 -0
- package/dist/src/auth/token-store.spec.js +405 -0
- package/dist/src/auth/token-store.spec.js.map +1 -0
- package/dist/src/auth/types.d.ts +130 -0
- package/dist/src/auth/types.js +60 -0
- package/dist/src/auth/types.js.map +1 -0
- package/dist/src/code_assist/converter.d.ts +2 -1
- package/dist/src/code_assist/converter.js +1 -1
- package/dist/src/code_assist/converter.js.map +1 -1
- package/dist/src/code_assist/converter.test.js +48 -1
- package/dist/src/code_assist/converter.test.js.map +1 -1
- package/dist/src/code_assist/oauth2.js +2 -1
- package/dist/src/code_assist/oauth2.js.map +1 -1
- package/dist/src/code_assist/server.test.js +4 -1
- package/dist/src/code_assist/server.test.js.map +1 -1
- package/dist/src/config/config.d.ts +71 -2
- package/dist/src/config/config.ephemeral.test.d.ts +6 -0
- package/dist/src/config/config.ephemeral.test.js +152 -0
- package/dist/src/config/config.ephemeral.test.js.map +1 -0
- package/dist/src/config/config.js +117 -2
- package/dist/src/config/config.js.map +1 -1
- package/dist/src/config/config.test.js +8 -0
- package/dist/src/config/config.test.js.map +1 -1
- package/dist/src/config/endpoints.d.ts +60 -0
- package/dist/src/config/endpoints.js +126 -0
- package/dist/src/config/endpoints.js.map +1 -0
- package/dist/src/config/endpoints.test.d.ts +6 -0
- package/dist/src/config/endpoints.test.js +196 -0
- package/dist/src/config/endpoints.test.js.map +1 -0
- package/dist/src/core/client.js +16 -16
- package/dist/src/core/client.js.map +1 -1
- package/dist/src/core/client.test.js +13 -7
- package/dist/src/core/client.test.js.map +1 -1
- package/dist/src/core/contentGenerator.d.ts +3 -1
- package/dist/src/core/contentGenerator.js +2 -0
- package/dist/src/core/contentGenerator.js.map +1 -1
- package/dist/src/core/logger.d.ts +1 -0
- package/dist/src/core/logger.js +18 -0
- package/dist/src/core/logger.js.map +1 -1
- package/dist/src/core/logger.test.js +29 -0
- package/dist/src/core/logger.test.js.map +1 -1
- package/dist/src/core/loggingContentGenerator.d.ts +24 -0
- package/dist/src/core/loggingContentGenerator.js +89 -0
- package/dist/src/core/loggingContentGenerator.js.map +1 -0
- package/dist/src/core/nonInteractiveToolExecutor.js +17 -0
- package/dist/src/core/nonInteractiveToolExecutor.js.map +1 -1
- package/dist/src/core/subagent.js +12 -10
- package/dist/src/core/subagent.js.map +1 -1
- package/dist/src/core/subagent.test.js +8 -17
- package/dist/src/core/subagent.test.js.map +1 -1
- package/dist/src/ide/ide-client.d.ts +2 -2
- package/dist/src/ide/ide-client.js +56 -18
- package/dist/src/ide/ide-client.js.map +1 -1
- package/dist/src/index.d.ts +5 -0
- package/dist/src/index.js +7 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/integration-tests/oauth-integration.spec.d.ts +6 -0
- package/dist/src/integration-tests/oauth-integration.spec.js +518 -0
- package/dist/src/integration-tests/oauth-integration.spec.js.map +1 -0
- package/dist/src/integration-tests/oauth-simple-test.spec.d.ts +1 -0
- package/dist/src/integration-tests/oauth-simple-test.spec.js +88 -0
- package/dist/src/integration-tests/oauth-simple-test.spec.js.map +1 -0
- package/dist/src/providers/BaseProvider.d.ts +98 -0
- package/dist/src/providers/BaseProvider.js +180 -0
- package/dist/src/providers/BaseProvider.js.map +1 -0
- package/dist/src/providers/BaseProvider.test.d.ts +6 -0
- package/dist/src/providers/BaseProvider.test.js +472 -0
- package/dist/src/providers/BaseProvider.test.js.map +1 -0
- package/dist/src/providers/IProviderManager.d.ts +5 -0
- package/dist/src/providers/LoggingProviderWrapper.d.ts +53 -0
- package/dist/src/providers/LoggingProviderWrapper.js +347 -0
- package/dist/src/providers/LoggingProviderWrapper.js.map +1 -0
- package/dist/src/providers/ProviderManager.d.ts +20 -0
- package/dist/src/providers/ProviderManager.js +214 -1
- package/dist/src/providers/ProviderManager.js.map +1 -1
- package/dist/src/providers/gemini/GeminiProvider.d.ts +12 -7
- package/dist/src/providers/gemini/GeminiProvider.js +130 -147
- package/dist/src/providers/gemini/GeminiProvider.js.map +1 -1
- package/dist/src/providers/integration/multi-provider.integration.test.js +18 -2
- package/dist/src/providers/integration/multi-provider.integration.test.js.map +1 -1
- package/dist/src/providers/logging/ProviderContentExtractor.d.ts +27 -0
- package/dist/src/providers/logging/ProviderContentExtractor.js +198 -0
- package/dist/src/providers/logging/ProviderContentExtractor.js.map +1 -0
- package/dist/src/providers/logging/ProviderPerformanceTracker.d.ts +43 -0
- package/dist/src/providers/logging/ProviderPerformanceTracker.js +98 -0
- package/dist/src/providers/logging/ProviderPerformanceTracker.js.map +1 -0
- package/dist/src/providers/openai/OpenAIProvider.d.ts +21 -6
- package/dist/src/providers/openai/OpenAIProvider.js +173 -27
- package/dist/src/providers/openai/OpenAIProvider.js.map +1 -1
- package/dist/src/providers/openai/OpenAIProvider.test.js +3 -2
- package/dist/src/providers/openai/OpenAIProvider.test.js.map +1 -1
- package/dist/src/providers/openai/openai-oauth.spec.d.ts +16 -0
- package/dist/src/providers/openai/openai-oauth.spec.js +544 -0
- package/dist/src/providers/openai/openai-oauth.spec.js.map +1 -0
- package/dist/src/providers/types.d.ts +47 -0
- package/dist/src/services/git-stats-service.d.ts +32 -0
- package/dist/src/services/git-stats-service.js +22 -0
- package/dist/src/services/git-stats-service.js.map +1 -0
- package/dist/src/services/loopDetectionService.js +10 -6
- package/dist/src/services/loopDetectionService.js.map +1 -1
- package/dist/src/services/loopDetectionService.test.js +139 -0
- package/dist/src/services/loopDetectionService.test.js.map +1 -1
- package/dist/src/services/shellExecutionService.js +44 -8
- package/dist/src/services/shellExecutionService.js.map +1 -1
- package/dist/src/storage/ConversationFileWriter.d.ts +16 -0
- package/dist/src/storage/ConversationFileWriter.js +69 -0
- package/dist/src/storage/ConversationFileWriter.js.map +1 -0
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.d.ts +8 -0
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.js +56 -3
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.js.map +1 -1
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.d.ts +6 -0
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js +187 -0
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js.map +1 -0
- package/dist/src/telemetry/clearcut-logger/event-metadata-key.d.ts +5 -1
- package/dist/src/telemetry/clearcut-logger/event-metadata-key.js +11 -0
- package/dist/src/telemetry/clearcut-logger/event-metadata-key.js.map +1 -1
- package/dist/src/telemetry/constants.d.ts +5 -0
- package/dist/src/telemetry/constants.js +5 -0
- package/dist/src/telemetry/constants.js.map +1 -1
- package/dist/src/telemetry/loggers.d.ts +5 -1
- package/dist/src/telemetry/loggers.js +87 -1
- package/dist/src/telemetry/loggers.js.map +1 -1
- package/dist/src/telemetry/loggers.test.js +2 -1
- package/dist/src/telemetry/loggers.test.js.map +1 -1
- package/dist/src/telemetry/metrics.d.ts +2 -1
- package/dist/src/telemetry/metrics.js +7 -1
- package/dist/src/telemetry/metrics.js.map +1 -1
- package/dist/src/telemetry/metrics.test.js +50 -0
- package/dist/src/telemetry/metrics.test.js.map +1 -1
- package/dist/src/telemetry/tool-call-decision.d.ts +13 -0
- package/dist/src/telemetry/tool-call-decision.js +29 -0
- package/dist/src/telemetry/tool-call-decision.js.map +1 -0
- package/dist/src/telemetry/types.d.ts +56 -1
- package/dist/src/telemetry/types.js +123 -0
- package/dist/src/telemetry/types.js.map +1 -1
- package/dist/src/telemetry/uiTelemetry.d.ts +2 -1
- package/dist/src/telemetry/uiTelemetry.js +1 -1
- package/dist/src/telemetry/uiTelemetry.js.map +1 -1
- package/dist/src/telemetry/uiTelemetry.test.js +2 -1
- package/dist/src/telemetry/uiTelemetry.test.js.map +1 -1
- package/dist/src/tools/diffOptions.d.ts +2 -0
- package/dist/src/tools/diffOptions.js +28 -0
- package/dist/src/tools/diffOptions.js.map +1 -1
- package/dist/src/tools/diffOptions.test.d.ts +6 -0
- package/dist/src/tools/diffOptions.test.js +119 -0
- package/dist/src/tools/diffOptions.test.js.map +1 -0
- package/dist/src/tools/edit.d.ts +8 -32
- package/dist/src/tools/edit.js +153 -136
- package/dist/src/tools/edit.js.map +1 -1
- package/dist/src/tools/edit.test.js +77 -51
- package/dist/src/tools/edit.test.js.map +1 -1
- package/dist/src/tools/glob.d.ts +3 -10
- package/dist/src/tools/glob.js +97 -99
- package/dist/src/tools/glob.js.map +1 -1
- package/dist/src/tools/glob.test.js +37 -26
- package/dist/src/tools/glob.test.js.map +1 -1
- package/dist/src/tools/grep.d.ts +3 -35
- package/dist/src/tools/grep.js +117 -88
- package/dist/src/tools/grep.js.map +1 -1
- package/dist/src/tools/grep.test.js +36 -22
- package/dist/src/tools/grep.test.js.map +1 -1
- package/dist/src/tools/mcp-client.d.ts +4 -3
- package/dist/src/tools/mcp-client.js +23 -6
- package/dist/src/tools/mcp-client.js.map +1 -1
- package/dist/src/tools/mcp-client.test.js +44 -2
- package/dist/src/tools/mcp-client.test.js.map +1 -1
- package/dist/src/tools/read-file.js +37 -9
- package/dist/src/tools/read-file.js.map +1 -1
- package/dist/src/tools/read-file.test.js +8 -2
- package/dist/src/tools/read-file.test.js.map +1 -1
- package/dist/src/tools/shell.test.js +17 -0
- package/dist/src/tools/shell.test.js.map +1 -1
- package/dist/src/tools/todo-pause.d.ts +22 -0
- package/dist/src/tools/todo-pause.js +93 -0
- package/dist/src/tools/todo-pause.js.map +1 -0
- package/dist/src/tools/todo-pause.spec.d.ts +6 -0
- package/dist/src/tools/todo-pause.spec.js +287 -0
- package/dist/src/tools/todo-pause.spec.js.map +1 -0
- package/dist/src/tools/tool-error.d.ts +4 -0
- package/dist/src/tools/tool-error.js +4 -0
- package/dist/src/tools/tool-error.js.map +1 -1
- package/dist/src/tools/tool-registry.js +3 -3
- package/dist/src/tools/tool-registry.js.map +1 -1
- package/dist/src/tools/tool-registry.test.js +2 -2
- package/dist/src/tools/tool-registry.test.js.map +1 -1
- package/dist/src/tools/tools.d.ts +18 -0
- package/dist/src/tools/tools.js +15 -0
- package/dist/src/tools/tools.js.map +1 -1
- package/dist/src/tools/web-search.test.js +1 -0
- package/dist/src/tools/web-search.test.js.map +1 -1
- package/dist/src/tools/write-file.d.ts +4 -0
- package/dist/src/tools/write-file.js +90 -16
- package/dist/src/tools/write-file.js.map +1 -1
- package/dist/src/tools/write-file.test.js +5 -4
- package/dist/src/tools/write-file.test.js.map +1 -1
- package/dist/src/types/modelParams.d.ts +2 -0
- package/dist/src/utils/environmentContext.js +1 -1
- package/dist/src/utils/errors.d.ts +3 -0
- package/dist/src/utils/errors.js +6 -0
- package/dist/src/utils/errors.js.map +1 -1
- package/dist/src/utils/fileUtils.d.ts +7 -0
- package/dist/src/utils/fileUtils.js +9 -0
- package/dist/src/utils/fileUtils.js.map +1 -1
- package/dist/src/utils/filesearch/fileSearch.d.ts +1 -0
- package/dist/src/utils/filesearch/fileSearch.js +27 -19
- package/dist/src/utils/filesearch/fileSearch.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Vybestack LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { DeviceCodeResponse, OAuthToken } from './types.js';
|
|
7
|
+
/**
|
|
8
|
+
* Configuration for Qwen device flow authentication
|
|
9
|
+
*/
|
|
10
|
+
export interface DeviceFlowConfig {
|
|
11
|
+
clientId: string;
|
|
12
|
+
authorizationEndpoint: string;
|
|
13
|
+
tokenEndpoint: string;
|
|
14
|
+
scopes: string[];
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Qwen OAuth device flow implementation
|
|
18
|
+
*/
|
|
19
|
+
export declare class QwenDeviceFlow {
|
|
20
|
+
private config;
|
|
21
|
+
private pkceVerifier;
|
|
22
|
+
constructor(config: DeviceFlowConfig);
|
|
23
|
+
/**
|
|
24
|
+
* Initiates the device authorization flow
|
|
25
|
+
* @returns Promise resolving to device code response
|
|
26
|
+
*/
|
|
27
|
+
initiateDeviceFlow(): Promise<DeviceCodeResponse>;
|
|
28
|
+
/**
|
|
29
|
+
* Polls the authorization server for an access token
|
|
30
|
+
* @param deviceCode Device code from initiation response
|
|
31
|
+
* @returns Promise resolving to OAuth token
|
|
32
|
+
*/
|
|
33
|
+
pollForToken(deviceCode: string): Promise<OAuthToken>;
|
|
34
|
+
/**
|
|
35
|
+
* Refreshes an expired access token
|
|
36
|
+
* @param refreshToken Valid refresh token
|
|
37
|
+
* @returns Promise resolving to new OAuth token
|
|
38
|
+
*/
|
|
39
|
+
refreshToken(refreshToken: string): Promise<OAuthToken>;
|
|
40
|
+
/**
|
|
41
|
+
* Generates PKCE code verifier and challenge
|
|
42
|
+
* @returns Object containing verifier and challenge strings
|
|
43
|
+
*/
|
|
44
|
+
private generatePKCE;
|
|
45
|
+
}
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Vybestack LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { randomBytes, createHash } from 'crypto';
|
|
7
|
+
import { DeviceCodeResponseSchema, TokenResponseSchema, } from './types.js';
|
|
8
|
+
/**
|
|
9
|
+
* Qwen OAuth device flow implementation
|
|
10
|
+
*/
|
|
11
|
+
export class QwenDeviceFlow {
|
|
12
|
+
config;
|
|
13
|
+
pkceVerifier = '';
|
|
14
|
+
constructor(config) {
|
|
15
|
+
this.config = config;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Initiates the device authorization flow
|
|
19
|
+
* @returns Promise resolving to device code response
|
|
20
|
+
*/
|
|
21
|
+
async initiateDeviceFlow() {
|
|
22
|
+
// Generate PKCE parameters
|
|
23
|
+
const pkce = this.generatePKCE();
|
|
24
|
+
this.pkceVerifier = pkce.verifier;
|
|
25
|
+
// Prepare request parameters
|
|
26
|
+
const params = new URLSearchParams({
|
|
27
|
+
client_id: this.config.clientId,
|
|
28
|
+
code_challenge: pkce.challenge,
|
|
29
|
+
code_challenge_method: 'S256',
|
|
30
|
+
});
|
|
31
|
+
// Only add scope if it's not empty
|
|
32
|
+
if (this.config.scopes && this.config.scopes.length > 0) {
|
|
33
|
+
params.append('scope', this.config.scopes.join(' '));
|
|
34
|
+
}
|
|
35
|
+
// Make HTTP request
|
|
36
|
+
const response = await fetch(this.config.authorizationEndpoint, {
|
|
37
|
+
method: 'POST',
|
|
38
|
+
headers: {
|
|
39
|
+
'Content-Type': 'application/x-www-form-urlencoded',
|
|
40
|
+
Accept: 'application/json',
|
|
41
|
+
},
|
|
42
|
+
body: params.toString(),
|
|
43
|
+
});
|
|
44
|
+
if (!response.ok) {
|
|
45
|
+
throw new Error(`HTTP ${response.status}: ${response.statusText}`);
|
|
46
|
+
}
|
|
47
|
+
const data = await response.json();
|
|
48
|
+
// Validate response with Zod schema
|
|
49
|
+
const validatedResponse = DeviceCodeResponseSchema.parse(data);
|
|
50
|
+
return validatedResponse;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Polls the authorization server for an access token
|
|
54
|
+
* @param deviceCode Device code from initiation response
|
|
55
|
+
* @returns Promise resolving to OAuth token
|
|
56
|
+
*/
|
|
57
|
+
async pollForToken(deviceCode) {
|
|
58
|
+
const maxDuration = 15 * 60 * 1000; // 15 minutes in milliseconds
|
|
59
|
+
const startTime = Date.now();
|
|
60
|
+
let interval = 5000; // Start with 5 seconds
|
|
61
|
+
while (Date.now() - startTime < maxDuration) {
|
|
62
|
+
const params = new URLSearchParams({
|
|
63
|
+
grant_type: 'urn:ietf:params:oauth:grant-type:device_code',
|
|
64
|
+
device_code: deviceCode,
|
|
65
|
+
client_id: this.config.clientId,
|
|
66
|
+
code_verifier: this.pkceVerifier,
|
|
67
|
+
});
|
|
68
|
+
try {
|
|
69
|
+
const response = await fetch(this.config.tokenEndpoint, {
|
|
70
|
+
method: 'POST',
|
|
71
|
+
headers: {
|
|
72
|
+
'Content-Type': 'application/x-www-form-urlencoded',
|
|
73
|
+
Accept: 'application/json',
|
|
74
|
+
},
|
|
75
|
+
body: params.toString(),
|
|
76
|
+
});
|
|
77
|
+
if (response.ok) {
|
|
78
|
+
const data = await response.json();
|
|
79
|
+
// Validate response with Zod schema
|
|
80
|
+
const validatedResponse = TokenResponseSchema.parse(data);
|
|
81
|
+
// Calculate expiry timestamp
|
|
82
|
+
const now = Math.floor(Date.now() / 1000);
|
|
83
|
+
const expiresIn = validatedResponse.expires_in || 3600; // Default to 1 hour if not provided
|
|
84
|
+
const expiry = now + expiresIn;
|
|
85
|
+
return {
|
|
86
|
+
access_token: validatedResponse.access_token,
|
|
87
|
+
token_type: 'Bearer',
|
|
88
|
+
expiry,
|
|
89
|
+
refresh_token: validatedResponse.refresh_token,
|
|
90
|
+
scope: validatedResponse.scope || undefined, // Convert null to undefined
|
|
91
|
+
resource_url: validatedResponse.resource_url, // Include the API endpoint from Qwen
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
// Handle error responses
|
|
95
|
+
const errorData = await response.json();
|
|
96
|
+
if (errorData.error === 'authorization_pending') {
|
|
97
|
+
// Continue polling - wait for the interval before next attempt
|
|
98
|
+
await new Promise((resolve) => setTimeout(resolve, interval));
|
|
99
|
+
continue;
|
|
100
|
+
}
|
|
101
|
+
else if (errorData.error === 'slow_down') {
|
|
102
|
+
// Increase polling interval by 5 seconds and continue
|
|
103
|
+
interval += 5000;
|
|
104
|
+
await new Promise((resolve) => setTimeout(resolve, interval));
|
|
105
|
+
continue;
|
|
106
|
+
}
|
|
107
|
+
else if (errorData.error === 'access_denied') {
|
|
108
|
+
throw new Error('access_denied');
|
|
109
|
+
}
|
|
110
|
+
else if (errorData.error === 'expired_token') {
|
|
111
|
+
throw new Error('expired_token');
|
|
112
|
+
}
|
|
113
|
+
throw new Error(`HTTP ${response.status}: ${response.statusText}`);
|
|
114
|
+
}
|
|
115
|
+
catch (error) {
|
|
116
|
+
// For network errors, apply exponential backoff
|
|
117
|
+
if (error instanceof Error && error.message.includes('fetch failed')) {
|
|
118
|
+
interval = Math.min(interval * 1.5, 60000); // Max 60 seconds
|
|
119
|
+
await new Promise((resolve) => setTimeout(resolve, interval));
|
|
120
|
+
continue;
|
|
121
|
+
}
|
|
122
|
+
// Re-throw other errors (like access_denied, expired_token)
|
|
123
|
+
throw error;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
// If we reach here, we've exceeded the maximum polling duration
|
|
127
|
+
throw new Error('Polling timeout exceeded');
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Refreshes an expired access token
|
|
131
|
+
* @param refreshToken Valid refresh token
|
|
132
|
+
* @returns Promise resolving to new OAuth token
|
|
133
|
+
*/
|
|
134
|
+
async refreshToken(refreshToken) {
|
|
135
|
+
const params = new URLSearchParams({
|
|
136
|
+
grant_type: 'refresh_token',
|
|
137
|
+
refresh_token: refreshToken,
|
|
138
|
+
client_id: this.config.clientId,
|
|
139
|
+
});
|
|
140
|
+
const response = await fetch(this.config.tokenEndpoint, {
|
|
141
|
+
method: 'POST',
|
|
142
|
+
headers: {
|
|
143
|
+
'Content-Type': 'application/x-www-form-urlencoded',
|
|
144
|
+
Accept: 'application/json',
|
|
145
|
+
},
|
|
146
|
+
body: params.toString(),
|
|
147
|
+
});
|
|
148
|
+
if (!response.ok) {
|
|
149
|
+
throw new Error(`HTTP ${response.status}: ${response.statusText}`);
|
|
150
|
+
}
|
|
151
|
+
const data = await response.json();
|
|
152
|
+
// Validate response with Zod schema
|
|
153
|
+
const validatedResponse = TokenResponseSchema.parse(data);
|
|
154
|
+
// Calculate expiry timestamp with 30-second buffer
|
|
155
|
+
const now = Math.floor(Date.now() / 1000);
|
|
156
|
+
const expiresIn = validatedResponse.expires_in || 3600; // Default to 1 hour if not provided
|
|
157
|
+
const expiry = now + expiresIn - 30; // 30-second buffer
|
|
158
|
+
return {
|
|
159
|
+
access_token: validatedResponse.access_token,
|
|
160
|
+
token_type: 'Bearer',
|
|
161
|
+
expiry,
|
|
162
|
+
refresh_token: validatedResponse.refresh_token || refreshToken, // Use new refresh token if provided, otherwise keep the old one
|
|
163
|
+
scope: validatedResponse.scope || undefined, // Convert null to undefined
|
|
164
|
+
resource_url: validatedResponse.resource_url, // Include the API endpoint from Qwen
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Generates PKCE code verifier and challenge
|
|
169
|
+
* @returns Object containing verifier and challenge strings
|
|
170
|
+
*/
|
|
171
|
+
generatePKCE() {
|
|
172
|
+
// Generate 32 random bytes for verifier
|
|
173
|
+
const verifier = randomBytes(32).toString('base64url');
|
|
174
|
+
// Create SHA-256 hash of verifier for challenge
|
|
175
|
+
const challenge = createHash('sha256').update(verifier).digest('base64url');
|
|
176
|
+
return { verifier, challenge };
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
//# sourceMappingURL=qwen-device-flow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"qwen-device-flow.js","sourceRoot":"","sources":["../../../src/auth/qwen-device-flow.ts"],"names":[],"mappings":"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"}
|