@auxiora/providers 1.0.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 (88) hide show
  1. package/LICENSE +191 -0
  2. package/dist/anthropic.d.ts +82 -0
  3. package/dist/anthropic.d.ts.map +1 -0
  4. package/dist/anthropic.js +618 -0
  5. package/dist/anthropic.js.map +1 -0
  6. package/dist/claude-code-tools.d.ts +29 -0
  7. package/dist/claude-code-tools.d.ts.map +1 -0
  8. package/dist/claude-code-tools.js +221 -0
  9. package/dist/claude-code-tools.js.map +1 -0
  10. package/dist/claude-oauth.d.ts +86 -0
  11. package/dist/claude-oauth.d.ts.map +1 -0
  12. package/dist/claude-oauth.js +318 -0
  13. package/dist/claude-oauth.js.map +1 -0
  14. package/dist/cohere.d.ts +18 -0
  15. package/dist/cohere.d.ts.map +1 -0
  16. package/dist/cohere.js +163 -0
  17. package/dist/cohere.js.map +1 -0
  18. package/dist/deepseek.d.ts +18 -0
  19. package/dist/deepseek.d.ts.map +1 -0
  20. package/dist/deepseek.js +164 -0
  21. package/dist/deepseek.js.map +1 -0
  22. package/dist/factory.d.ts +19 -0
  23. package/dist/factory.d.ts.map +1 -0
  24. package/dist/factory.js +108 -0
  25. package/dist/factory.js.map +1 -0
  26. package/dist/google.d.ts +18 -0
  27. package/dist/google.d.ts.map +1 -0
  28. package/dist/google.js +141 -0
  29. package/dist/google.js.map +1 -0
  30. package/dist/groq.d.ts +18 -0
  31. package/dist/groq.d.ts.map +1 -0
  32. package/dist/groq.js +186 -0
  33. package/dist/groq.js.map +1 -0
  34. package/dist/index.d.ts +15 -0
  35. package/dist/index.d.ts.map +1 -0
  36. package/dist/index.js +14 -0
  37. package/dist/index.js.map +1 -0
  38. package/dist/ollama.d.ts +18 -0
  39. package/dist/ollama.d.ts.map +1 -0
  40. package/dist/ollama.js +141 -0
  41. package/dist/ollama.js.map +1 -0
  42. package/dist/openai-compatible.d.ts +20 -0
  43. package/dist/openai-compatible.d.ts.map +1 -0
  44. package/dist/openai-compatible.js +112 -0
  45. package/dist/openai-compatible.js.map +1 -0
  46. package/dist/openai.d.ts +20 -0
  47. package/dist/openai.d.ts.map +1 -0
  48. package/dist/openai.js +259 -0
  49. package/dist/openai.js.map +1 -0
  50. package/dist/replicate.d.ts +20 -0
  51. package/dist/replicate.d.ts.map +1 -0
  52. package/dist/replicate.js +186 -0
  53. package/dist/replicate.js.map +1 -0
  54. package/dist/thinking-levels.d.ts +16 -0
  55. package/dist/thinking-levels.d.ts.map +1 -0
  56. package/dist/thinking-levels.js +34 -0
  57. package/dist/thinking-levels.js.map +1 -0
  58. package/dist/types.d.ts +157 -0
  59. package/dist/types.d.ts.map +1 -0
  60. package/dist/types.js +2 -0
  61. package/dist/types.js.map +1 -0
  62. package/dist/xai.d.ts +18 -0
  63. package/dist/xai.d.ts.map +1 -0
  64. package/dist/xai.js +164 -0
  65. package/dist/xai.js.map +1 -0
  66. package/package.json +30 -0
  67. package/src/anthropic.ts +691 -0
  68. package/src/claude-code-tools.ts +233 -0
  69. package/src/claude-oauth.ts +410 -0
  70. package/src/cohere.ts +242 -0
  71. package/src/deepseek.ts +241 -0
  72. package/src/factory.ts +142 -0
  73. package/src/google.ts +176 -0
  74. package/src/groq.ts +263 -0
  75. package/src/index.ts +44 -0
  76. package/src/ollama.ts +194 -0
  77. package/src/openai-compatible.ts +154 -0
  78. package/src/openai.ts +307 -0
  79. package/src/replicate.ts +247 -0
  80. package/src/thinking-levels.ts +37 -0
  81. package/src/types.ts +171 -0
  82. package/src/xai.ts +241 -0
  83. package/tests/adapters.test.ts +185 -0
  84. package/tests/claude-oauth.test.ts +45 -0
  85. package/tests/new-providers.test.ts +732 -0
  86. package/tests/thinking-levels.test.ts +82 -0
  87. package/tsconfig.json +8 -0
  88. package/tsconfig.tsbuildinfo +1 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-code-tools.d.ts","sourceRoot":"","sources":["../src/claude-code-tools.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE;QACZ,IAAI,EAAE,QAAQ,CAAC;QACf,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACpC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;KACrB,CAAC;CACH;AAED;;GAEG;AACH,eAAO,MAAM,sBAAsB,wLAgBzB,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,iBAAiB,EAAE,cAAc,EAiL7C,CAAC;AAEF;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAQzD"}
@@ -0,0 +1,221 @@
1
+ /**
2
+ * Claude Code tool definitions for OAuth token compatibility.
3
+ *
4
+ * OAuth tokens from Claude Pro/Max are restricted to Claude Code usage.
5
+ * By sending Claude Code's tools with requests, we can use these tokens.
6
+ */
7
+ /**
8
+ * Claude Code tool names in canonical casing.
9
+ */
10
+ export const CLAUDE_CODE_TOOL_NAMES = [
11
+ 'Read',
12
+ 'Write',
13
+ 'Edit',
14
+ 'Bash',
15
+ 'Grep',
16
+ 'Glob',
17
+ 'AskUserQuestion',
18
+ 'EnterPlanMode',
19
+ 'ExitPlanMode',
20
+ 'NotebookEdit',
21
+ 'Skill',
22
+ 'Task',
23
+ 'TaskOutput',
24
+ 'WebFetch',
25
+ 'WebSearch',
26
+ ];
27
+ /**
28
+ * Minimal Claude Code tool definitions.
29
+ * These are simplified versions - just enough for the API to accept the request.
30
+ */
31
+ export const CLAUDE_CODE_TOOLS = [
32
+ {
33
+ name: 'Read',
34
+ description: 'Read a file from the filesystem',
35
+ input_schema: {
36
+ type: 'object',
37
+ properties: {
38
+ file_path: { type: 'string', description: 'The path to the file to read' },
39
+ offset: { type: 'number', description: 'Line offset to start reading from' },
40
+ limit: { type: 'number', description: 'Maximum number of lines to read' },
41
+ },
42
+ required: ['file_path'],
43
+ },
44
+ },
45
+ {
46
+ name: 'Write',
47
+ description: 'Write content to a file',
48
+ input_schema: {
49
+ type: 'object',
50
+ properties: {
51
+ file_path: { type: 'string', description: 'The path to write to' },
52
+ content: { type: 'string', description: 'The content to write' },
53
+ },
54
+ required: ['file_path', 'content'],
55
+ },
56
+ },
57
+ {
58
+ name: 'Edit',
59
+ description: 'Edit a file by replacing text',
60
+ input_schema: {
61
+ type: 'object',
62
+ properties: {
63
+ file_path: { type: 'string', description: 'The path to the file' },
64
+ old_string: { type: 'string', description: 'The text to replace' },
65
+ new_string: { type: 'string', description: 'The replacement text' },
66
+ },
67
+ required: ['file_path', 'old_string', 'new_string'],
68
+ },
69
+ },
70
+ {
71
+ name: 'Bash',
72
+ description: 'Execute a bash command',
73
+ input_schema: {
74
+ type: 'object',
75
+ properties: {
76
+ command: { type: 'string', description: 'The command to execute' },
77
+ timeout: { type: 'number', description: 'Timeout in milliseconds' },
78
+ },
79
+ required: ['command'],
80
+ },
81
+ },
82
+ {
83
+ name: 'Grep',
84
+ description: 'Search for patterns in files',
85
+ input_schema: {
86
+ type: 'object',
87
+ properties: {
88
+ pattern: { type: 'string', description: 'The regex pattern to search for' },
89
+ path: { type: 'string', description: 'The directory to search in' },
90
+ glob: { type: 'string', description: 'File glob pattern' },
91
+ },
92
+ required: ['pattern'],
93
+ },
94
+ },
95
+ {
96
+ name: 'Glob',
97
+ description: 'Find files matching a pattern',
98
+ input_schema: {
99
+ type: 'object',
100
+ properties: {
101
+ pattern: { type: 'string', description: 'The glob pattern' },
102
+ path: { type: 'string', description: 'The base directory' },
103
+ },
104
+ required: ['pattern'],
105
+ },
106
+ },
107
+ {
108
+ name: 'AskUserQuestion',
109
+ description: 'Ask the user a question',
110
+ input_schema: {
111
+ type: 'object',
112
+ properties: {
113
+ question: { type: 'string', description: 'The question to ask' },
114
+ },
115
+ required: ['question'],
116
+ },
117
+ },
118
+ {
119
+ name: 'EnterPlanMode',
120
+ description: 'Enter planning mode',
121
+ input_schema: {
122
+ type: 'object',
123
+ properties: {},
124
+ },
125
+ },
126
+ {
127
+ name: 'ExitPlanMode',
128
+ description: 'Exit planning mode',
129
+ input_schema: {
130
+ type: 'object',
131
+ properties: {},
132
+ },
133
+ },
134
+ {
135
+ name: 'NotebookEdit',
136
+ description: 'Edit a Jupyter notebook cell',
137
+ input_schema: {
138
+ type: 'object',
139
+ properties: {
140
+ notebook_path: { type: 'string', description: 'Path to the notebook' },
141
+ cell_number: { type: 'number', description: 'Cell number to edit' },
142
+ new_source: { type: 'string', description: 'New cell content' },
143
+ },
144
+ required: ['notebook_path', 'new_source'],
145
+ },
146
+ },
147
+ {
148
+ name: 'Skill',
149
+ description: 'Execute a skill',
150
+ input_schema: {
151
+ type: 'object',
152
+ properties: {
153
+ skill: { type: 'string', description: 'The skill to execute' },
154
+ args: { type: 'string', description: 'Arguments for the skill' },
155
+ },
156
+ required: ['skill'],
157
+ },
158
+ },
159
+ {
160
+ name: 'Task',
161
+ description: 'Launch a task agent',
162
+ input_schema: {
163
+ type: 'object',
164
+ properties: {
165
+ description: { type: 'string', description: 'Task description' },
166
+ prompt: { type: 'string', description: 'The task prompt' },
167
+ subagent_type: { type: 'string', description: 'Type of subagent' },
168
+ },
169
+ required: ['description', 'prompt', 'subagent_type'],
170
+ },
171
+ },
172
+ {
173
+ name: 'TaskOutput',
174
+ description: 'Get output from a background task',
175
+ input_schema: {
176
+ type: 'object',
177
+ properties: {
178
+ task_id: { type: 'string', description: 'The task ID' },
179
+ block: { type: 'boolean', description: 'Whether to wait for completion' },
180
+ timeout: { type: 'number', description: 'Timeout in milliseconds' },
181
+ },
182
+ required: ['task_id'],
183
+ },
184
+ },
185
+ {
186
+ name: 'WebFetch',
187
+ description: 'Fetch content from a URL',
188
+ input_schema: {
189
+ type: 'object',
190
+ properties: {
191
+ url: { type: 'string', description: 'The URL to fetch' },
192
+ prompt: { type: 'string', description: 'Prompt for processing the content' },
193
+ },
194
+ required: ['url', 'prompt'],
195
+ },
196
+ },
197
+ {
198
+ name: 'WebSearch',
199
+ description: 'Search the web',
200
+ input_schema: {
201
+ type: 'object',
202
+ properties: {
203
+ query: { type: 'string', description: 'The search query' },
204
+ },
205
+ required: ['query'],
206
+ },
207
+ },
208
+ ];
209
+ /**
210
+ * Convert a tool name to Claude Code canonical casing.
211
+ */
212
+ export function toClaudeCodeToolName(name) {
213
+ const lower = name.toLowerCase();
214
+ for (const ccName of CLAUDE_CODE_TOOL_NAMES) {
215
+ if (ccName.toLowerCase() === lower) {
216
+ return ccName;
217
+ }
218
+ }
219
+ return name;
220
+ }
221
+ //# sourceMappingURL=claude-code-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-code-tools.js","sourceRoot":"","sources":["../src/claude-code-tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,86 @@
1
+ /**
2
+ * Claude OAuth credential handling.
3
+ *
4
+ * Supports two modes:
5
+ * 1. Setup tokens (sk-ant-oat01-*) - Used directly as API keys
6
+ * 2. OAuth credentials from Claude CLI - Access token + refresh token
7
+ */
8
+ export interface ClaudeOAuthCredentials {
9
+ type: 'oauth' | 'token';
10
+ accessToken: string;
11
+ refreshToken?: string;
12
+ expiresAt?: number;
13
+ }
14
+ export interface TokenRefreshResult {
15
+ accessToken: string;
16
+ refreshToken: string;
17
+ expiresAt: number;
18
+ }
19
+ /**
20
+ * Check if a token is a setup token (sk-ant-oat01-*).
21
+ */
22
+ export declare function isSetupToken(token: string): boolean;
23
+ /**
24
+ * Validate a setup token format.
25
+ */
26
+ export declare function validateSetupToken(token: string): string | undefined;
27
+ /**
28
+ * Get the path to Claude CLI credentials file.
29
+ */
30
+ export declare function getClaudeCredentialsPath(homeDir?: string): string;
31
+ /**
32
+ * Read OAuth credentials from Claude CLI's credentials file.
33
+ */
34
+ export declare function readClaudeCliCredentials(homeDir?: string): ClaudeOAuthCredentials | null;
35
+ /**
36
+ * Check if OAuth credentials are expired.
37
+ */
38
+ export declare function isCredentialsExpired(credentials: ClaudeOAuthCredentials): boolean;
39
+ /**
40
+ * Refresh an OAuth token using the refresh token.
41
+ * Uses the Claude Code CLI's OAuth client by default.
42
+ * For tokens obtained via the dashboard PKCE flow, use refreshPKCEOAuthToken instead.
43
+ */
44
+ export declare function refreshOAuthToken(refreshToken: string): Promise<TokenRefreshResult>;
45
+ /**
46
+ * Refresh an OAuth token obtained via the dashboard's PKCE flow.
47
+ * Uses the same client ID and endpoint that issued the original token.
48
+ * Omits scope — the server uses the originally granted scopes.
49
+ */
50
+ export declare function refreshPKCEOAuthToken(refreshToken: string): Promise<TokenRefreshResult>;
51
+ /**
52
+ * Write updated credentials back to Claude CLI credentials file.
53
+ */
54
+ export declare function writeClaudeCliCredentials(credentials: TokenRefreshResult, homeDir?: string): boolean;
55
+ /**
56
+ * Get a valid access token, refreshing if necessary.
57
+ * Returns the access token to use for API calls.
58
+ */
59
+ export declare function getValidAccessToken(credentials: ClaudeOAuthCredentials, homeDir?: string): Promise<string>;
60
+ export declare function generatePKCE(): {
61
+ verifier: string;
62
+ challenge: string;
63
+ };
64
+ export declare function buildAuthorizationUrl(codeChallenge: string, state: string): string;
65
+ export declare function exchangeCodeForTokens(code: string, codeVerifier: string, state: string): Promise<TokenRefreshResult>;
66
+ /**
67
+ * Resolve an Anthropic API key from various sources.
68
+ *
69
+ * Priority:
70
+ * 1. Provided oauthToken (if it's a setup token, use directly)
71
+ * 2. Provided oauthToken (if it's an access token)
72
+ * 3. Claude CLI credentials file
73
+ * 4. Provided apiKey
74
+ *
75
+ * Returns the API key to use with the Anthropic SDK.
76
+ */
77
+ export declare function resolveAnthropicApiKey(options: {
78
+ apiKey?: string;
79
+ oauthToken?: string;
80
+ useCliCredentials?: boolean;
81
+ homeDir?: string;
82
+ }): Promise<{
83
+ apiKey: string;
84
+ mode: 'api-key' | 'setup-token' | 'oauth';
85
+ }>;
86
+ //# sourceMappingURL=claude-oauth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-oauth.d.ts","sourceRoot":"","sources":["../src/claude-oauth.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAuBH,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAMnD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAYpE;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAGjE;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,sBAAsB,GAAG,IAAI,CA6CxF;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,sBAAsB,GAAG,OAAO,CAMjF;AAED;;;;GAIG;AACH,wBAAsB,iBAAiB,CACrC,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,kBAAkB,CAAC,CAM7B;AAED;;;;GAIG;AACH,wBAAsB,qBAAqB,CACzC,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,kBAAkB,CAAC,CAK7B;AAqDD;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,WAAW,EAAE,kBAAkB,EAC/B,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CA4BT;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,WAAW,EAAE,sBAAsB,EACnC,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,CAAC,CAoBjB;AASD,wBAAgB,YAAY,IAAI;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAItE;AAED,wBAAgB,qBAAqB,CAAC,aAAa,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAWlF;AAED,wBAAsB,qBAAqB,CACzC,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,kBAAkB,CAAC,CAqC7B;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,sBAAsB,CAAC,OAAO,EAAE;IACpD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,GAAG,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,SAAS,GAAG,aAAa,GAAG,OAAO,CAAA;CAAE,CAAC,CAwCzE"}
@@ -0,0 +1,318 @@
1
+ /**
2
+ * Claude OAuth credential handling.
3
+ *
4
+ * Supports two modes:
5
+ * 1. Setup tokens (sk-ant-oat01-*) - Used directly as API keys
6
+ * 2. OAuth credentials from Claude CLI - Access token + refresh token
7
+ */
8
+ import { createHash, randomBytes } from 'node:crypto';
9
+ import fs from 'node:fs';
10
+ import path from 'node:path';
11
+ import os from 'node:os';
12
+ // Setup token prefix from Claude CLI
13
+ const ANTHROPIC_SETUP_TOKEN_PREFIX = 'sk-ant-oat01-';
14
+ const ANTHROPIC_SETUP_TOKEN_MIN_LENGTH = 80;
15
+ // Claude CLI credentials file location
16
+ const CLAUDE_CLI_CREDENTIALS_RELATIVE_PATH = '.claude/.credentials.json';
17
+ // Token refresh endpoint (must match real Claude Code)
18
+ const ANTHROPIC_TOKEN_REFRESH_URL = 'https://platform.claude.com/v1/oauth/token';
19
+ // OAuth client ID from Claude Code
20
+ const CLAUDE_CODE_CLIENT_ID = '22422756-60c9-4084-8eb7-27705fd5cf9a';
21
+ // Required OAuth scopes
22
+ const CLAUDE_CODE_SCOPES = 'user:inference user:profile user:sessions:claude_code user:mcp_servers';
23
+ /**
24
+ * Check if a token is a setup token (sk-ant-oat01-*).
25
+ */
26
+ export function isSetupToken(token) {
27
+ const trimmed = token.trim();
28
+ return (trimmed.startsWith(ANTHROPIC_SETUP_TOKEN_PREFIX) &&
29
+ trimmed.length >= ANTHROPIC_SETUP_TOKEN_MIN_LENGTH);
30
+ }
31
+ /**
32
+ * Validate a setup token format.
33
+ */
34
+ export function validateSetupToken(token) {
35
+ const trimmed = token.trim();
36
+ if (!trimmed) {
37
+ return 'Token is required';
38
+ }
39
+ if (!trimmed.startsWith(ANTHROPIC_SETUP_TOKEN_PREFIX)) {
40
+ return `Expected token starting with ${ANTHROPIC_SETUP_TOKEN_PREFIX}`;
41
+ }
42
+ if (trimmed.length < ANTHROPIC_SETUP_TOKEN_MIN_LENGTH) {
43
+ return 'Token looks too short; use the full setup-token';
44
+ }
45
+ return undefined;
46
+ }
47
+ /**
48
+ * Get the path to Claude CLI credentials file.
49
+ */
50
+ export function getClaudeCredentialsPath(homeDir) {
51
+ const baseDir = homeDir ?? os.homedir();
52
+ return path.join(baseDir, CLAUDE_CLI_CREDENTIALS_RELATIVE_PATH);
53
+ }
54
+ /**
55
+ * Read OAuth credentials from Claude CLI's credentials file.
56
+ */
57
+ export function readClaudeCliCredentials(homeDir) {
58
+ const credPath = getClaudeCredentialsPath(homeDir);
59
+ try {
60
+ if (!fs.existsSync(credPath)) {
61
+ return null;
62
+ }
63
+ const content = fs.readFileSync(credPath, 'utf-8');
64
+ const data = JSON.parse(content);
65
+ const claudeOauth = data.claudeAiOauth;
66
+ if (!claudeOauth || typeof claudeOauth !== 'object') {
67
+ return null;
68
+ }
69
+ const accessToken = claudeOauth.accessToken;
70
+ const refreshToken = claudeOauth.refreshToken;
71
+ const expiresAt = claudeOauth.expiresAt;
72
+ if (typeof accessToken !== 'string' || !accessToken) {
73
+ return null;
74
+ }
75
+ if (typeof expiresAt !== 'number' || expiresAt <= 0) {
76
+ return null;
77
+ }
78
+ if (typeof refreshToken === 'string' && refreshToken) {
79
+ return {
80
+ type: 'oauth',
81
+ accessToken,
82
+ refreshToken,
83
+ expiresAt,
84
+ };
85
+ }
86
+ // Token without refresh - treat as simple token
87
+ return {
88
+ type: 'token',
89
+ accessToken,
90
+ expiresAt,
91
+ };
92
+ }
93
+ catch {
94
+ return null;
95
+ }
96
+ }
97
+ /**
98
+ * Check if OAuth credentials are expired.
99
+ */
100
+ export function isCredentialsExpired(credentials) {
101
+ if (!credentials.expiresAt) {
102
+ return false;
103
+ }
104
+ // Consider expired if less than 5 minutes remaining
105
+ return Date.now() >= credentials.expiresAt - 5 * 60 * 1000;
106
+ }
107
+ /**
108
+ * Refresh an OAuth token using the refresh token.
109
+ * Uses the Claude Code CLI's OAuth client by default.
110
+ * For tokens obtained via the dashboard PKCE flow, use refreshPKCEOAuthToken instead.
111
+ */
112
+ export async function refreshOAuthToken(refreshToken) {
113
+ return doTokenRefresh(refreshToken, {
114
+ clientId: CLAUDE_CODE_CLIENT_ID,
115
+ tokenUrl: ANTHROPIC_TOKEN_REFRESH_URL,
116
+ scope: CLAUDE_CODE_SCOPES,
117
+ });
118
+ }
119
+ /**
120
+ * Refresh an OAuth token obtained via the dashboard's PKCE flow.
121
+ * Uses the same client ID and endpoint that issued the original token.
122
+ * Omits scope — the server uses the originally granted scopes.
123
+ */
124
+ export async function refreshPKCEOAuthToken(refreshToken) {
125
+ return doTokenRefresh(refreshToken, {
126
+ clientId: CLAUDE_OAUTH_CLIENT_ID,
127
+ tokenUrl: CLAUDE_OAUTH_TOKEN_URL,
128
+ });
129
+ }
130
+ /**
131
+ * Internal: perform a token refresh against the given OAuth endpoint.
132
+ */
133
+ async function doTokenRefresh(refreshToken, opts) {
134
+ const body = new URLSearchParams({
135
+ grant_type: 'refresh_token',
136
+ refresh_token: refreshToken,
137
+ client_id: opts.clientId,
138
+ });
139
+ if (opts.scope) {
140
+ body.set('scope', opts.scope);
141
+ }
142
+ const response = await fetch(opts.tokenUrl, {
143
+ method: 'POST',
144
+ headers: {
145
+ 'Content-Type': 'application/x-www-form-urlencoded',
146
+ },
147
+ body: body.toString(),
148
+ });
149
+ if (!response.ok) {
150
+ const text = await response.text();
151
+ throw new Error(`Token refresh failed: ${response.status} ${text}`);
152
+ }
153
+ const data = (await response.json());
154
+ const accessToken = data.access_token;
155
+ const newRefreshToken = data.refresh_token;
156
+ const expiresIn = data.expires_in;
157
+ if (typeof accessToken !== 'string' || !accessToken) {
158
+ throw new Error('Invalid token refresh response: missing access_token');
159
+ }
160
+ const expiresAt = typeof expiresIn === 'number'
161
+ ? Date.now() + expiresIn * 1000
162
+ : Date.now() + 3600 * 1000; // Default 1 hour
163
+ return {
164
+ accessToken,
165
+ refreshToken: typeof newRefreshToken === 'string' ? newRefreshToken : refreshToken,
166
+ expiresAt,
167
+ };
168
+ }
169
+ /**
170
+ * Write updated credentials back to Claude CLI credentials file.
171
+ */
172
+ export function writeClaudeCliCredentials(credentials, homeDir) {
173
+ const credPath = getClaudeCredentialsPath(homeDir);
174
+ try {
175
+ if (!fs.existsSync(credPath)) {
176
+ return false;
177
+ }
178
+ const content = fs.readFileSync(credPath, 'utf-8');
179
+ const data = JSON.parse(content);
180
+ const existingOauth = data.claudeAiOauth;
181
+ if (!existingOauth || typeof existingOauth !== 'object') {
182
+ return false;
183
+ }
184
+ data.claudeAiOauth = {
185
+ ...existingOauth,
186
+ accessToken: credentials.accessToken,
187
+ refreshToken: credentials.refreshToken,
188
+ expiresAt: credentials.expiresAt,
189
+ };
190
+ fs.writeFileSync(credPath, JSON.stringify(data, null, 2));
191
+ return true;
192
+ }
193
+ catch {
194
+ return false;
195
+ }
196
+ }
197
+ /**
198
+ * Get a valid access token, refreshing if necessary.
199
+ * Returns the access token to use for API calls.
200
+ */
201
+ export async function getValidAccessToken(credentials, homeDir) {
202
+ // If not expired, return current token
203
+ if (!isCredentialsExpired(credentials)) {
204
+ return credentials.accessToken;
205
+ }
206
+ // If no refresh token, can't refresh
207
+ if (!credentials.refreshToken) {
208
+ throw new Error('OAuth token expired and no refresh token available. Please re-authenticate with `claude setup-token`.');
209
+ }
210
+ // Refresh the token
211
+ const refreshed = await refreshOAuthToken(credentials.refreshToken);
212
+ // Try to write back to credentials file
213
+ writeClaudeCliCredentials(refreshed, homeDir);
214
+ return refreshed.accessToken;
215
+ }
216
+ // OAuth PKCE constants
217
+ const CLAUDE_OAUTH_CLIENT_ID = '9d1c250a-e61b-44d9-88ed-5944d1962f5e';
218
+ const CLAUDE_OAUTH_AUTH_URL = 'https://claude.ai/oauth/authorize';
219
+ const CLAUDE_OAUTH_TOKEN_URL = 'https://console.anthropic.com/v1/oauth/token';
220
+ const CLAUDE_OAUTH_REDIRECT_URI = 'https://console.anthropic.com/oauth/code/callback';
221
+ const CLAUDE_OAUTH_SCOPES = 'org:create_api_key user:profile user:inference';
222
+ export function generatePKCE() {
223
+ const verifier = randomBytes(64).toString('base64url');
224
+ const challenge = createHash('sha256').update(verifier).digest('base64url');
225
+ return { verifier, challenge };
226
+ }
227
+ export function buildAuthorizationUrl(codeChallenge, state) {
228
+ const params = new URLSearchParams({
229
+ response_type: 'code',
230
+ client_id: CLAUDE_OAUTH_CLIENT_ID,
231
+ redirect_uri: CLAUDE_OAUTH_REDIRECT_URI,
232
+ scope: CLAUDE_OAUTH_SCOPES,
233
+ code_challenge: codeChallenge,
234
+ code_challenge_method: 'S256',
235
+ state,
236
+ });
237
+ return `${CLAUDE_OAUTH_AUTH_URL}?${params.toString()}`;
238
+ }
239
+ export async function exchangeCodeForTokens(code, codeVerifier, state) {
240
+ const response = await fetch(CLAUDE_OAUTH_TOKEN_URL, {
241
+ method: 'POST',
242
+ headers: { 'Content-Type': 'application/json' },
243
+ body: JSON.stringify({
244
+ grant_type: 'authorization_code',
245
+ code,
246
+ state,
247
+ client_id: CLAUDE_OAUTH_CLIENT_ID,
248
+ redirect_uri: CLAUDE_OAUTH_REDIRECT_URI,
249
+ code_verifier: codeVerifier,
250
+ }),
251
+ });
252
+ if (!response.ok) {
253
+ const text = await response.text();
254
+ throw new Error(`Token exchange failed: ${response.status} ${text}`);
255
+ }
256
+ const data = (await response.json());
257
+ const accessToken = data.access_token;
258
+ const refreshToken = data.refresh_token;
259
+ const expiresIn = data.expires_in;
260
+ if (typeof accessToken !== 'string' || !accessToken) {
261
+ throw new Error('Invalid token response: missing access_token');
262
+ }
263
+ const expiresAt = typeof expiresIn === 'number'
264
+ ? Date.now() + expiresIn * 1000
265
+ : Date.now() + 3600 * 1000;
266
+ return {
267
+ accessToken,
268
+ refreshToken: typeof refreshToken === 'string' ? refreshToken : '',
269
+ expiresAt,
270
+ };
271
+ }
272
+ /**
273
+ * Resolve an Anthropic API key from various sources.
274
+ *
275
+ * Priority:
276
+ * 1. Provided oauthToken (if it's a setup token, use directly)
277
+ * 2. Provided oauthToken (if it's an access token)
278
+ * 3. Claude CLI credentials file
279
+ * 4. Provided apiKey
280
+ *
281
+ * Returns the API key to use with the Anthropic SDK.
282
+ */
283
+ export async function resolveAnthropicApiKey(options) {
284
+ // Check for setup token first (sk-ant-oat01-*)
285
+ if (options.oauthToken && isSetupToken(options.oauthToken)) {
286
+ return {
287
+ apiKey: options.oauthToken.trim(),
288
+ mode: 'setup-token',
289
+ };
290
+ }
291
+ // Check for OAuth token (access token from Claude CLI)
292
+ if (options.oauthToken && !isSetupToken(options.oauthToken)) {
293
+ return {
294
+ apiKey: options.oauthToken.trim(),
295
+ mode: 'oauth',
296
+ };
297
+ }
298
+ // Try Claude CLI credentials if enabled
299
+ if (options.useCliCredentials !== false) {
300
+ const cliCreds = readClaudeCliCredentials(options.homeDir);
301
+ if (cliCreds) {
302
+ const token = await getValidAccessToken(cliCreds, options.homeDir);
303
+ return {
304
+ apiKey: token,
305
+ mode: cliCreds.type === 'oauth' ? 'oauth' : 'setup-token',
306
+ };
307
+ }
308
+ }
309
+ // Fall back to regular API key
310
+ if (options.apiKey) {
311
+ return {
312
+ apiKey: options.apiKey.trim(),
313
+ mode: 'api-key',
314
+ };
315
+ }
316
+ throw new Error('No Anthropic credentials found. Provide an apiKey, oauthToken, or authenticate with `claude setup-token`.');
317
+ }
318
+ //# sourceMappingURL=claude-oauth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-oauth.js","sourceRoot":"","sources":["../src/claude-oauth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import type { Provider, ProviderMetadata, ChatMessage, CompletionOptions, CompletionResult, StreamChunk } from './types.js';
2
+ export interface CohereProviderOptions {
3
+ apiKey: string;
4
+ model?: string;
5
+ maxTokens?: number;
6
+ }
7
+ export declare class CohereProvider implements Provider {
8
+ name: string;
9
+ metadata: ProviderMetadata;
10
+ private apiKey;
11
+ private defaultModel;
12
+ private defaultMaxTokens;
13
+ constructor(options: CohereProviderOptions);
14
+ complete(messages: ChatMessage[], options?: CompletionOptions): Promise<CompletionResult>;
15
+ stream(messages: ChatMessage[], options?: CompletionOptions): AsyncGenerator<StreamChunk, void, unknown>;
16
+ private prepareMessages;
17
+ }
18
+ //# sourceMappingURL=cohere.d.ts.map