|
5 | 5 | const http = require('http'); |
6 | 6 | const tls = require('tls'); |
7 | 7 | const { EventEmitter } = require('events'); |
8 | | -const { normalizeApiTarget, deriveCopilotApiTarget, normalizeBasePath, buildUpstreamPath, proxyWebSocket } = require('./server'); |
| 8 | +const { normalizeApiTarget, deriveCopilotApiTarget, normalizeBasePath, buildUpstreamPath, proxyWebSocket, resolveCopilotAuthToken } = require('./server'); |
9 | 9 |
|
10 | 10 | describe('normalizeApiTarget', () => { |
11 | 11 | it('should strip https:// prefix', () => { |
@@ -620,3 +620,43 @@ describe('proxyWebSocket', () => { |
620 | 620 | }); |
621 | 621 | }); |
622 | 622 |
|
| 623 | +describe('resolveCopilotAuthToken', () => { |
| 624 | + it('should return COPILOT_GITHUB_TOKEN when only it is set', () => { |
| 625 | + expect(resolveCopilotAuthToken({ COPILOT_GITHUB_TOKEN: 'gho_abc123' })).toBe('gho_abc123'); |
| 626 | + }); |
| 627 | + |
| 628 | + it('should return COPILOT_API_KEY when only it is set', () => { |
| 629 | + expect(resolveCopilotAuthToken({ COPILOT_API_KEY: 'sk-byok-key' })).toBe('sk-byok-key'); |
| 630 | + }); |
| 631 | + |
| 632 | + it('should prefer COPILOT_GITHUB_TOKEN over COPILOT_API_KEY when both are set', () => { |
| 633 | + expect(resolveCopilotAuthToken({ |
| 634 | + COPILOT_GITHUB_TOKEN: 'gho_abc123', |
| 635 | + COPILOT_API_KEY: 'sk-byok-key', |
| 636 | + })).toBe('gho_abc123'); |
| 637 | + }); |
| 638 | + |
| 639 | + it('should return undefined when neither is set', () => { |
| 640 | + expect(resolveCopilotAuthToken({})).toBeUndefined(); |
| 641 | + }); |
| 642 | + |
| 643 | + it('should return undefined for empty strings', () => { |
| 644 | + expect(resolveCopilotAuthToken({ COPILOT_GITHUB_TOKEN: '', COPILOT_API_KEY: '' })).toBeUndefined(); |
| 645 | + }); |
| 646 | + |
| 647 | + it('should return undefined for whitespace-only values', () => { |
| 648 | + expect(resolveCopilotAuthToken({ COPILOT_GITHUB_TOKEN: ' ', COPILOT_API_KEY: ' \n' })).toBeUndefined(); |
| 649 | + }); |
| 650 | + |
| 651 | + it('should trim whitespace from token values', () => { |
| 652 | + expect(resolveCopilotAuthToken({ COPILOT_API_KEY: ' sk-byok-key ' })).toBe('sk-byok-key'); |
| 653 | + }); |
| 654 | + |
| 655 | + it('should fall back to COPILOT_API_KEY when COPILOT_GITHUB_TOKEN is whitespace-only', () => { |
| 656 | + expect(resolveCopilotAuthToken({ |
| 657 | + COPILOT_GITHUB_TOKEN: ' ', |
| 658 | + COPILOT_API_KEY: 'sk-byok-key', |
| 659 | + })).toBe('sk-byok-key'); |
| 660 | + }); |
| 661 | +}); |
| 662 | + |
0 commit comments