claude-gateway 2.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.
- package/CHANGELOG.md +329 -0
- package/LICENSE +21 -0
- package/README.md +272 -0
- package/dist/cli.d.ts +13 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +409 -0
- package/dist/cli.js.map +1 -0
- package/dist/client.d.ts +30 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +106 -0
- package/dist/client.js.map +1 -0
- package/dist/oauth.d.ts +44 -0
- package/dist/oauth.d.ts.map +1 -0
- package/dist/oauth.js +135 -0
- package/dist/oauth.js.map +1 -0
- package/dist/router/logger.d.ts +19 -0
- package/dist/router/logger.d.ts.map +1 -0
- package/dist/router/logger.js +104 -0
- package/dist/router/logger.js.map +1 -0
- package/dist/router/middleware.d.ts +9 -0
- package/dist/router/middleware.d.ts.map +1 -0
- package/dist/router/middleware.js +46 -0
- package/dist/router/middleware.js.map +1 -0
- package/dist/router/models.d.ts +11 -0
- package/dist/router/models.d.ts.map +1 -0
- package/dist/router/models.js +61 -0
- package/dist/router/models.js.map +1 -0
- package/dist/router/server.d.ts +14 -0
- package/dist/router/server.d.ts.map +1 -0
- package/dist/router/server.js +423 -0
- package/dist/router/server.js.map +1 -0
- package/dist/router/translator.d.ts +33 -0
- package/dist/router/translator.d.ts.map +1 -0
- package/dist/router/translator.js +302 -0
- package/dist/router/translator.js.map +1 -0
- package/dist/token-manager.d.ts +32 -0
- package/dist/token-manager.d.ts.map +1 -0
- package/dist/token-manager.js +79 -0
- package/dist/token-manager.js.map +1 -0
- package/dist/types.d.ts +247 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +12 -0
- package/dist/types.js.map +1 -0
- package/package.json +75 -0
package/dist/cli.js
ADDED
|
@@ -0,0 +1,409 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* EDUCATIONAL AND ENTERTAINMENT PURPOSES ONLY
|
|
4
|
+
*
|
|
5
|
+
* This software is provided for educational, research, and entertainment purposes only.
|
|
6
|
+
* It is not affiliated with, endorsed by, or sponsored by Anthropic PBC.
|
|
7
|
+
* Use at your own risk. No warranties provided. Users are solely responsible for
|
|
8
|
+
* ensuring compliance with Anthropic's Terms of Service and all applicable laws.
|
|
9
|
+
*
|
|
10
|
+
* Copyright (c) 2025 - Licensed under MIT License
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* Unified CLI Entry Point with Subcommands
|
|
14
|
+
*/
|
|
15
|
+
import readline from 'readline';
|
|
16
|
+
import { readFileSync } from 'fs';
|
|
17
|
+
import { fileURLToPath } from 'url';
|
|
18
|
+
import { dirname, join } from 'path';
|
|
19
|
+
import { startOAuthFlow, exchangeCodeForTokens, refreshAccessToken } from './oauth.js';
|
|
20
|
+
import { loadTokens, saveTokens, isTokenExpired, deleteTokens } from './token-manager.js';
|
|
21
|
+
import { testMaxPlanValidation } from './client.js';
|
|
22
|
+
import { logger } from './router/logger.js';
|
|
23
|
+
import { startServer } from './router/server.js';
|
|
24
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
25
|
+
const __dirname = dirname(__filename);
|
|
26
|
+
const packageJson = JSON.parse(readFileSync(join(__dirname, '../package.json'), 'utf-8'));
|
|
27
|
+
// Readline interface - created on demand
|
|
28
|
+
let rl = null;
|
|
29
|
+
function getReadline() {
|
|
30
|
+
if (!rl) {
|
|
31
|
+
rl = readline.createInterface({
|
|
32
|
+
input: process.stdin,
|
|
33
|
+
output: process.stdout,
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
return rl;
|
|
37
|
+
}
|
|
38
|
+
function closeReadline() {
|
|
39
|
+
if (rl) {
|
|
40
|
+
rl.close();
|
|
41
|
+
rl = null;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
function question(prompt) {
|
|
45
|
+
return new Promise((resolve) => {
|
|
46
|
+
getReadline().question(prompt, resolve);
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
function parseArgs() {
|
|
50
|
+
const args = process.argv.slice(2);
|
|
51
|
+
const config = {
|
|
52
|
+
command: null,
|
|
53
|
+
port: 45554,
|
|
54
|
+
showHelp: false,
|
|
55
|
+
showVersion: false,
|
|
56
|
+
};
|
|
57
|
+
// First non-flag argument is the command
|
|
58
|
+
for (let i = 0; i < args.length; i++) {
|
|
59
|
+
const arg = args[i];
|
|
60
|
+
// Check for flags first
|
|
61
|
+
if (arg === '--version' || arg === '-v') {
|
|
62
|
+
config.showVersion = true;
|
|
63
|
+
}
|
|
64
|
+
else if (arg === '--help' || arg === '-h') {
|
|
65
|
+
config.showHelp = true;
|
|
66
|
+
}
|
|
67
|
+
else if (arg === '--quiet' || arg === '-q') {
|
|
68
|
+
logger.setLevel('quiet');
|
|
69
|
+
}
|
|
70
|
+
else if (arg === '--minimal' || arg === '-m') {
|
|
71
|
+
logger.setLevel('minimal');
|
|
72
|
+
}
|
|
73
|
+
else if (arg === '--verbose' || arg === '-V') {
|
|
74
|
+
logger.setLevel('maximum');
|
|
75
|
+
}
|
|
76
|
+
else if (arg === '--port' || arg === '-p') {
|
|
77
|
+
const portValue = args[i + 1];
|
|
78
|
+
if (portValue && !portValue.startsWith('-')) {
|
|
79
|
+
config.port = parseInt(portValue);
|
|
80
|
+
i++; // Skip next arg since we consumed it
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
else if (!arg.startsWith('-') && config.command === null) {
|
|
84
|
+
// First non-flag argument is the command
|
|
85
|
+
config.command = arg;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
return config;
|
|
89
|
+
}
|
|
90
|
+
function showHelp(command) {
|
|
91
|
+
if (command === 'start') {
|
|
92
|
+
console.log(`
|
|
93
|
+
claude-gateway start - Start the gateway server
|
|
94
|
+
|
|
95
|
+
Usage:
|
|
96
|
+
claude-gateway start [options]
|
|
97
|
+
|
|
98
|
+
Options:
|
|
99
|
+
-p, --port PORT Port to listen on (default: 45554)
|
|
100
|
+
-q, --quiet Quiet mode - no request logging
|
|
101
|
+
-m, --minimal Minimal logging - one line per request
|
|
102
|
+
-V, --verbose Maximum logging - full request/response bodies
|
|
103
|
+
-h, --help Show this help message
|
|
104
|
+
|
|
105
|
+
Examples:
|
|
106
|
+
claude-gateway start
|
|
107
|
+
claude-gateway start --port 8080
|
|
108
|
+
claude-gateway start --minimal
|
|
109
|
+
claude-gateway start -p 8080 --verbose
|
|
110
|
+
`);
|
|
111
|
+
}
|
|
112
|
+
else if (command === 'login') {
|
|
113
|
+
console.log(`
|
|
114
|
+
claude-gateway login - Authenticate with Claude Code
|
|
115
|
+
|
|
116
|
+
Usage:
|
|
117
|
+
claude-gateway login
|
|
118
|
+
|
|
119
|
+
This will start the OAuth flow to authenticate with your Claude Code
|
|
120
|
+
subscription. Your browser will open to authorize the application.
|
|
121
|
+
`);
|
|
122
|
+
}
|
|
123
|
+
else if (command === 'refresh') {
|
|
124
|
+
console.log(`
|
|
125
|
+
claude-gateway refresh - Refresh OAuth access token
|
|
126
|
+
|
|
127
|
+
Usage:
|
|
128
|
+
claude-gateway refresh
|
|
129
|
+
|
|
130
|
+
Manually refresh your OAuth access token. Normally this happens automatically,
|
|
131
|
+
but you can use this command to force a refresh.
|
|
132
|
+
`);
|
|
133
|
+
}
|
|
134
|
+
else if (command === 'logout') {
|
|
135
|
+
console.log(`
|
|
136
|
+
claude-gateway logout - Delete stored OAuth tokens
|
|
137
|
+
|
|
138
|
+
Usage:
|
|
139
|
+
claude-gateway logout
|
|
140
|
+
|
|
141
|
+
This will delete your stored OAuth tokens.
|
|
142
|
+
You will need to re-authenticate to use the gateway again.
|
|
143
|
+
`);
|
|
144
|
+
}
|
|
145
|
+
else if (command === 'status') {
|
|
146
|
+
console.log(`
|
|
147
|
+
claude-gateway status - Show authentication status
|
|
148
|
+
|
|
149
|
+
Usage:
|
|
150
|
+
claude-gateway status
|
|
151
|
+
|
|
152
|
+
Displays information about your current authentication status, including
|
|
153
|
+
whether you're authenticated, token expiration time, and scope.
|
|
154
|
+
`);
|
|
155
|
+
}
|
|
156
|
+
else if (command === 'test') {
|
|
157
|
+
console.log(`
|
|
158
|
+
claude-gateway test - Test Claude Code validation
|
|
159
|
+
|
|
160
|
+
Usage:
|
|
161
|
+
claude-gateway test
|
|
162
|
+
|
|
163
|
+
Sends a test request without the required system prompt to prove that
|
|
164
|
+
your OAuth token is from a Claude Code subscription and is restricted
|
|
165
|
+
to Claude Code usage only.
|
|
166
|
+
`);
|
|
167
|
+
}
|
|
168
|
+
else {
|
|
169
|
+
// General help
|
|
170
|
+
console.log(`
|
|
171
|
+
Claude Gateway v${packageJson.version}
|
|
172
|
+
|
|
173
|
+
OpenAI-compatible gateway for Claude Code subscription.
|
|
174
|
+
Use your Claude subscription with any OpenAI-compatible tool.
|
|
175
|
+
|
|
176
|
+
Usage:
|
|
177
|
+
claude-gateway <command> [options]
|
|
178
|
+
|
|
179
|
+
Commands:
|
|
180
|
+
start Start the gateway server (default port: 45554)
|
|
181
|
+
login Authenticate with Claude Code
|
|
182
|
+
refresh Refresh OAuth access token
|
|
183
|
+
status Show authentication status
|
|
184
|
+
logout Delete stored OAuth tokens
|
|
185
|
+
test Test Claude Code validation
|
|
186
|
+
|
|
187
|
+
Global Options:
|
|
188
|
+
-h, --help Show help for a command
|
|
189
|
+
-v, --version Show version number
|
|
190
|
+
|
|
191
|
+
Examples:
|
|
192
|
+
claude-gateway start
|
|
193
|
+
claude-gateway start --port 8080 --verbose
|
|
194
|
+
claude-gateway login
|
|
195
|
+
claude-gateway status
|
|
196
|
+
|
|
197
|
+
Get help for a specific command:
|
|
198
|
+
claude-gateway start --help
|
|
199
|
+
claude-gateway login --help
|
|
200
|
+
|
|
201
|
+
More info: https://gitlab.com/soapbox-pub/claude-gateway
|
|
202
|
+
`);
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
// ============================================================================
|
|
206
|
+
// COMMAND HANDLERS
|
|
207
|
+
// ============================================================================
|
|
208
|
+
async function handleStatus() {
|
|
209
|
+
console.log('\n' + '='.repeat(70));
|
|
210
|
+
console.log('AUTHENTICATION STATUS');
|
|
211
|
+
console.log('='.repeat(70));
|
|
212
|
+
const tokens = await loadTokens();
|
|
213
|
+
if (!tokens) {
|
|
214
|
+
console.log('❌ Not authenticated');
|
|
215
|
+
console.log(' Run: claude-gateway login\n');
|
|
216
|
+
process.exit(1);
|
|
217
|
+
}
|
|
218
|
+
const expired = isTokenExpired(tokens);
|
|
219
|
+
const expiresIn = tokens.expires_at
|
|
220
|
+
? Math.floor((tokens.expires_at - Date.now()) / 1000 / 60)
|
|
221
|
+
: 0;
|
|
222
|
+
console.log('✅ Authenticated');
|
|
223
|
+
console.log(` Scope: ${tokens.scope}`);
|
|
224
|
+
console.log(` Status: ${expired ? '⚠️ EXPIRED' : '✓ Valid'}`);
|
|
225
|
+
if (!expired && expiresIn > 0) {
|
|
226
|
+
console.log(` Expires in: ${expiresIn} minutes`);
|
|
227
|
+
}
|
|
228
|
+
console.log('');
|
|
229
|
+
}
|
|
230
|
+
async function handleAuth() {
|
|
231
|
+
console.log('\n' + '='.repeat(70));
|
|
232
|
+
console.log('AUTHENTICATE WITH ANTHROPIC MAX PLAN');
|
|
233
|
+
console.log('='.repeat(70));
|
|
234
|
+
console.log('\nStarting OAuth flow...');
|
|
235
|
+
console.log('Your browser will open to authorize this application.\n');
|
|
236
|
+
try {
|
|
237
|
+
const { code, verifier, state } = await startOAuthFlow(question);
|
|
238
|
+
console.log('\n✅ Authorization received');
|
|
239
|
+
console.log('🔄 Exchanging for tokens...\n');
|
|
240
|
+
const tokens = await exchangeCodeForTokens(code, verifier, state);
|
|
241
|
+
await saveTokens(tokens);
|
|
242
|
+
console.log('✅ Tokens saved to .oauth-tokens.json');
|
|
243
|
+
console.log('✅ Authentication successful!\n');
|
|
244
|
+
console.log('Token details:');
|
|
245
|
+
console.log(` Scope: ${tokens.scope}`);
|
|
246
|
+
console.log(` Expires in: ${Math.floor(tokens.expires_in / 3600)} hours`);
|
|
247
|
+
console.log('');
|
|
248
|
+
closeReadline();
|
|
249
|
+
}
|
|
250
|
+
catch (error) {
|
|
251
|
+
console.error('\n❌ Authentication failed:', error instanceof Error ? error.message : error);
|
|
252
|
+
console.log('');
|
|
253
|
+
closeReadline();
|
|
254
|
+
process.exit(1);
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
async function handleRefresh() {
|
|
258
|
+
console.log('\n' + '='.repeat(70));
|
|
259
|
+
console.log('REFRESH TOKEN');
|
|
260
|
+
console.log('='.repeat(70));
|
|
261
|
+
const tokens = await loadTokens();
|
|
262
|
+
if (!tokens) {
|
|
263
|
+
console.log('\n❌ No tokens found. Please authenticate first.');
|
|
264
|
+
console.log(' Run: claude-gateway login\n');
|
|
265
|
+
closeReadline();
|
|
266
|
+
process.exit(1);
|
|
267
|
+
}
|
|
268
|
+
try {
|
|
269
|
+
console.log('\n🔄 Refreshing access token...\n');
|
|
270
|
+
const newTokens = await refreshAccessToken(tokens.refresh_token);
|
|
271
|
+
// Preserve refresh token if not returned
|
|
272
|
+
if (!newTokens.refresh_token) {
|
|
273
|
+
newTokens.refresh_token = tokens.refresh_token;
|
|
274
|
+
}
|
|
275
|
+
await saveTokens(newTokens);
|
|
276
|
+
console.log('✅ Token refreshed successfully!\n');
|
|
277
|
+
console.log('New token details:');
|
|
278
|
+
console.log(` Expires in: ${Math.floor(newTokens.expires_in / 3600)} hours`);
|
|
279
|
+
console.log('');
|
|
280
|
+
closeReadline();
|
|
281
|
+
}
|
|
282
|
+
catch (error) {
|
|
283
|
+
console.error('\n❌ Token refresh failed:', error instanceof Error ? error.message : error);
|
|
284
|
+
console.log('\nYou may need to re-authenticate.');
|
|
285
|
+
console.log(' Run: claude-gateway login\n');
|
|
286
|
+
closeReadline();
|
|
287
|
+
process.exit(1);
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
async function handleLogout() {
|
|
291
|
+
console.log('\n' + '='.repeat(70));
|
|
292
|
+
console.log('LOGOUT');
|
|
293
|
+
console.log('='.repeat(70));
|
|
294
|
+
const tokens = await loadTokens();
|
|
295
|
+
if (!tokens) {
|
|
296
|
+
console.log('\n❌ Not currently authenticated.\n');
|
|
297
|
+
closeReadline();
|
|
298
|
+
return;
|
|
299
|
+
}
|
|
300
|
+
console.log('\n⚠️ This will delete your stored tokens.');
|
|
301
|
+
const confirm = await question('Are you sure? (y/N): ');
|
|
302
|
+
if (confirm.toLowerCase() === 'y') {
|
|
303
|
+
try {
|
|
304
|
+
await deleteTokens();
|
|
305
|
+
console.log('\n✅ Logged out successfully.\n');
|
|
306
|
+
}
|
|
307
|
+
catch (error) {
|
|
308
|
+
console.error('\n❌ Error deleting tokens:', error instanceof Error ? error.message : error);
|
|
309
|
+
console.log('');
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
else {
|
|
313
|
+
console.log('\n❌ Logout cancelled.\n');
|
|
314
|
+
}
|
|
315
|
+
closeReadline();
|
|
316
|
+
}
|
|
317
|
+
async function handleTest() {
|
|
318
|
+
console.log('\n' + '='.repeat(70));
|
|
319
|
+
console.log('PROOF OF MAX PLAN - Validation Test');
|
|
320
|
+
console.log('='.repeat(70));
|
|
321
|
+
console.log('\nThis test intentionally sends a request WITHOUT the required');
|
|
322
|
+
console.log('"Claude Code" system prompt to prove MAX plan enforcement.\n');
|
|
323
|
+
const tokens = await loadTokens();
|
|
324
|
+
if (!tokens) {
|
|
325
|
+
console.log('❌ No tokens found. Please authenticate first.');
|
|
326
|
+
console.log(' Run: claude-gateway login\n');
|
|
327
|
+
closeReadline();
|
|
328
|
+
process.exit(1);
|
|
329
|
+
}
|
|
330
|
+
try {
|
|
331
|
+
console.log('🔄 Sending test request (intentionally invalid)...\n');
|
|
332
|
+
const result = await testMaxPlanValidation(tokens.access_token);
|
|
333
|
+
if (!result.success && result.statusCode === 400) {
|
|
334
|
+
console.log('✅ MAX PLAN VALIDATION CONFIRMED!\n');
|
|
335
|
+
console.log('='.repeat(70));
|
|
336
|
+
console.log('Anthropic rejected the request with:');
|
|
337
|
+
console.log('='.repeat(70));
|
|
338
|
+
console.log(`Status Code: ${result.statusCode}`);
|
|
339
|
+
console.log(`Request ID: ${result.requestId}`);
|
|
340
|
+
console.log('\nError Details:');
|
|
341
|
+
console.log(JSON.stringify(result.error, null, 2));
|
|
342
|
+
console.log('\n' + '='.repeat(70));
|
|
343
|
+
console.log('This proves your OAuth token is from a Claude MAX subscription');
|
|
344
|
+
console.log('and is restricted to Claude Code usage only.');
|
|
345
|
+
console.log('='.repeat(70) + '\n');
|
|
346
|
+
}
|
|
347
|
+
else {
|
|
348
|
+
console.log('⚠️ Unexpected result:\n');
|
|
349
|
+
console.log(JSON.stringify(result, null, 2));
|
|
350
|
+
console.log('');
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
catch (error) {
|
|
354
|
+
console.error('\n❌ Error during test:', error instanceof Error ? error.message : error);
|
|
355
|
+
console.log('');
|
|
356
|
+
}
|
|
357
|
+
closeReadline();
|
|
358
|
+
}
|
|
359
|
+
// ============================================================================
|
|
360
|
+
// MAIN ENTRY POINT
|
|
361
|
+
// ============================================================================
|
|
362
|
+
async function main() {
|
|
363
|
+
const config = parseArgs();
|
|
364
|
+
if (config.showVersion) {
|
|
365
|
+
console.log(`v${packageJson.version}`);
|
|
366
|
+
process.exit(0);
|
|
367
|
+
}
|
|
368
|
+
if (config.showHelp) {
|
|
369
|
+
showHelp(config.command || undefined);
|
|
370
|
+
process.exit(0);
|
|
371
|
+
}
|
|
372
|
+
// If no command provided, show help
|
|
373
|
+
if (!config.command) {
|
|
374
|
+
showHelp();
|
|
375
|
+
process.exit(0);
|
|
376
|
+
}
|
|
377
|
+
// Execute the appropriate command
|
|
378
|
+
switch (config.command) {
|
|
379
|
+
case 'start':
|
|
380
|
+
await startServer(config.port, question, closeReadline);
|
|
381
|
+
break;
|
|
382
|
+
case 'login':
|
|
383
|
+
case 'authenticate':
|
|
384
|
+
await handleAuth();
|
|
385
|
+
break;
|
|
386
|
+
case 'refresh':
|
|
387
|
+
await handleRefresh();
|
|
388
|
+
break;
|
|
389
|
+
case 'status':
|
|
390
|
+
await handleStatus();
|
|
391
|
+
break;
|
|
392
|
+
case 'logout':
|
|
393
|
+
await handleLogout();
|
|
394
|
+
break;
|
|
395
|
+
case 'test':
|
|
396
|
+
await handleTest();
|
|
397
|
+
break;
|
|
398
|
+
default:
|
|
399
|
+
console.error(`\n❌ Unknown command: ${config.command}\n`);
|
|
400
|
+
showHelp();
|
|
401
|
+
process.exit(1);
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
main().catch((error) => {
|
|
405
|
+
console.error('Fatal error:', error);
|
|
406
|
+
closeReadline();
|
|
407
|
+
process.exit(1);
|
|
408
|
+
});
|
|
409
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA;;;;;;;;;GASG;AAEH;;GAEG;AAEH,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AACvF,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC1F,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AACtC,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,iBAAiB,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;AAE1F,yCAAyC;AACzC,IAAI,EAAE,GAA8B,IAAI,CAAC;AAEzC,SAAS,WAAW;IAClB,IAAI,CAAC,EAAE,EAAE,CAAC;QACR,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC;YAC5B,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,MAAM,EAAE,OAAO,CAAC,MAAM;SACvB,CAAC,CAAC;IACL,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,aAAa;IACpB,IAAI,EAAE,EAAE,CAAC;QACP,EAAE,CAAC,KAAK,EAAE,CAAC;QACX,EAAE,GAAG,IAAI,CAAC;IACZ,CAAC;AACH,CAAC;AAED,SAAS,QAAQ,CAAC,MAAc;IAC9B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;AACL,CAAC;AAaD,SAAS,SAAS;IAChB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAEnC,MAAM,MAAM,GAAc;QACxB,OAAO,EAAE,IAAI;QACb,IAAI,EAAE,KAAK;QACX,QAAQ,EAAE,KAAK;QACf,WAAW,EAAE,KAAK;KACnB,CAAC;IAEF,yCAAyC;IACzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAEpB,wBAAwB;QACxB,IAAI,GAAG,KAAK,WAAW,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YACxC,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC;QAC5B,CAAC;aAAM,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YAC5C,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC;QACzB,CAAC;aAAM,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YAC7C,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAC3B,CAAC;aAAM,IAAI,GAAG,KAAK,WAAW,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YAC/C,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QAC7B,CAAC;aAAM,IAAI,GAAG,KAAK,WAAW,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YAC/C,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QAC7B,CAAC;aAAM,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YAC5C,MAAM,SAAS,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAC9B,IAAI,SAAS,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC5C,MAAM,CAAC,IAAI,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;gBAClC,CAAC,EAAE,CAAC,CAAC,qCAAqC;YAC5C,CAAC;QACH,CAAC;aAAM,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;YAC3D,yCAAyC;YACzC,MAAM,CAAC,OAAO,GAAG,GAAG,CAAC;QACvB,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,QAAQ,CAAC,OAAgB;IAChC,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;CAkBf,CAAC,CAAC;IACD,CAAC;SAAM,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC;;;;;;;;CAQf,CAAC,CAAC;IACD,CAAC;SAAM,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QACjC,OAAO,CAAC,GAAG,CAAC;;;;;;;;CAQf,CAAC,CAAC;IACD,CAAC;SAAM,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;QAChC,OAAO,CAAC,GAAG,CAAC;;;;;;;;CAQf,CAAC,CAAC;IACD,CAAC;SAAM,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;QAChC,OAAO,CAAC,GAAG,CAAC;;;;;;;;CAQf,CAAC,CAAC;IACD,CAAC;SAAM,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;QAC9B,OAAO,CAAC,GAAG,CAAC;;;;;;;;;CASf,CAAC,CAAC;IACD,CAAC;SAAM,CAAC;QACN,eAAe;QACf,OAAO,CAAC,GAAG,CAAC;kBACE,WAAW,CAAC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+BpC,CAAC,CAAC;IACD,CAAC;AACH,CAAC;AAED,+EAA+E;AAC/E,mBAAmB;AACnB,+EAA+E;AAE/E,KAAK,UAAU,YAAY;IACzB,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IACnC,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;IACrC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IAE5B,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAC;IAElC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;QACnC,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;QAC9C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,OAAO,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IACvC,MAAM,SAAS,GAAG,MAAM,CAAC,UAAU;QACjC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI,GAAG,EAAE,CAAC;QAC1D,CAAC,CAAC,CAAC,CAAC;IAEN,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IAC/B,OAAO,CAAC,GAAG,CAAC,aAAa,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;IACzC,OAAO,CAAC,GAAG,CAAC,cAAc,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;IACjE,IAAI,CAAC,OAAO,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;QAC9B,OAAO,CAAC,GAAG,CAAC,kBAAkB,SAAS,UAAU,CAAC,CAAC;IACrD,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC;AAED,KAAK,UAAU,UAAU;IACvB,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IACnC,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;IACpD,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5B,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;IACxC,OAAO,CAAC,GAAG,CAAC,yDAAyD,CAAC,CAAC;IAEvE,IAAI,CAAC;QACH,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,MAAM,cAAc,CAAC,QAAQ,CAAC,CAAC;QACjE,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;QAC1C,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;QAE7C,MAAM,MAAM,GAAG,MAAM,qBAAqB,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;QAClE,MAAM,UAAU,CAAC,MAAM,CAAC,CAAC;QAEzB,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;QACpD,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;QAC9C,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;QAC9B,OAAO,CAAC,GAAG,CAAC,YAAY,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;QACxC,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC3E,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEhB,aAAa,EAAE,CAAC;IAClB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,4BAA4B,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QAC5F,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,aAAa,EAAE,CAAC;QAChB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,KAAK,UAAU,aAAa;IAC1B,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IACnC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IAC7B,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IAE5B,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAC;IAElC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC;QAC/D,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;QAC9C,aAAa,EAAE,CAAC;QAChB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;QAEjD,MAAM,SAAS,GAAG,MAAM,kBAAkB,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;QAEjE,yCAAyC;QACzC,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,CAAC;YAC7B,SAAS,CAAC,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;QACjD,CAAC;QAED,MAAM,UAAU,CAAC,SAAS,CAAC,CAAC;QAE5B,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;QACjD,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;QAClC,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC9E,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEhB,aAAa,EAAE,CAAC;IAClB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QAC3F,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;QAClD,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;QAC9C,aAAa,EAAE,CAAC;QAChB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,KAAK,UAAU,YAAY;IACzB,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IACnC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACtB,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IAE5B,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAC;IAElC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;QAClD,aAAa,EAAE,CAAC;QAChB,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;IAC1D,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,uBAAuB,CAAC,CAAC;IAExD,IAAI,OAAO,CAAC,WAAW,EAAE,KAAK,GAAG,EAAE,CAAC;QAClC,IAAI,CAAC;YACH,MAAM,YAAY,EAAE,CAAC;YACrB,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;QAChD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,4BAA4B,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;YAC5F,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;IACzC,CAAC;IAED,aAAa,EAAE,CAAC;AAClB,CAAC;AAED,KAAK,UAAU,UAAU;IACvB,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IACnC,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;IACnD,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5B,OAAO,CAAC,GAAG,CAAC,gEAAgE,CAAC,CAAC;IAC9E,OAAO,CAAC,GAAG,CAAC,8DAA8D,CAAC,CAAC;IAE5E,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAC;IAElC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;QAC7D,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;QAC9C,aAAa,EAAE,CAAC;QAChB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,sDAAsD,CAAC,CAAC;QAEpE,MAAM,MAAM,GAAG,MAAM,qBAAqB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QAEhE,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,UAAU,KAAK,GAAG,EAAE,CAAC;YACjD,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;YAClD,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;YAC5B,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;YACpD,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;YAC5B,OAAO,CAAC,GAAG,CAAC,gBAAgB,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;YACjD,OAAO,CAAC,GAAG,CAAC,gBAAgB,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;YAChD,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;YAChC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YACnD,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;YACnC,OAAO,CAAC,GAAG,CAAC,gEAAgE,CAAC,CAAC;YAC9E,OAAO,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC;YAC5D,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;QACrC,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;YACxC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAC7C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACxF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;IAED,aAAa,EAAE,CAAC;AAClB,CAAC;AAED,+EAA+E;AAC/E,mBAAmB;AACnB,+EAA+E;AAE/E,KAAK,UAAU,IAAI;IACjB,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAE3B,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,IAAI,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC;QACvC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QACpB,QAAQ,CAAC,MAAM,CAAC,OAAO,IAAI,SAAS,CAAC,CAAC;QACtC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,oCAAoC;IACpC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,QAAQ,EAAE,CAAC;QACX,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,kCAAkC;IAClC,QAAQ,MAAM,CAAC,OAAO,EAAE,CAAC;QACvB,KAAK,OAAO;YACV,MAAM,WAAW,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;YACxD,MAAM;QAER,KAAK,OAAO,CAAC;QACb,KAAK,cAAc;YACjB,MAAM,UAAU,EAAE,CAAC;YACnB,MAAM;QAER,KAAK,SAAS;YACZ,MAAM,aAAa,EAAE,CAAC;YACtB,MAAM;QAER,KAAK,QAAQ;YACX,MAAM,YAAY,EAAE,CAAC;YACrB,MAAM;QAER,KAAK,QAAQ;YACX,MAAM,YAAY,EAAE,CAAC;YACrB,MAAM;QAER,KAAK,MAAM;YACT,MAAM,UAAU,EAAE,CAAC;YACnB,MAAM;QAER;YACE,OAAO,CAAC,KAAK,CAAC,wBAAwB,MAAM,CAAC,OAAO,IAAI,CAAC,CAAC;YAC1D,QAAQ,EAAE,CAAC;YACX,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;IACrC,aAAa,EAAE,CAAC;IAChB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
package/dist/client.d.ts
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* EDUCATIONAL AND ENTERTAINMENT PURPOSES ONLY
|
|
3
|
+
*
|
|
4
|
+
* This software is provided for educational, research, and entertainment purposes only.
|
|
5
|
+
* It is not affiliated with, endorsed by, or sponsored by Anthropic PBC.
|
|
6
|
+
* Use at your own risk. No warranties provided. Users are solely responsible for
|
|
7
|
+
* ensuring compliance with Anthropic's Terms of Service and all applicable laws.
|
|
8
|
+
*
|
|
9
|
+
* Copyright (c) 2025 - Licensed under MIT License
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* Anthropic API client with OAuth MAX plan support
|
|
13
|
+
*/
|
|
14
|
+
import type { AnthropicRequest, AnthropicResponse } from './types.js';
|
|
15
|
+
/**
|
|
16
|
+
* Make a request to Anthropic API with OAuth token
|
|
17
|
+
*/
|
|
18
|
+
export declare function makeAnthropicRequest(accessToken: string, request: AnthropicRequest): Promise<AnthropicResponse>;
|
|
19
|
+
/**
|
|
20
|
+
* Test function that INTENTIONALLY violates Claude Code requirements
|
|
21
|
+
* to prove MAX plan enforcement
|
|
22
|
+
* Returns the error response from Anthropic
|
|
23
|
+
*/
|
|
24
|
+
export declare function testMaxPlanValidation(accessToken: string): Promise<{
|
|
25
|
+
success: boolean;
|
|
26
|
+
error?: unknown;
|
|
27
|
+
statusCode?: number;
|
|
28
|
+
requestId?: string;
|
|
29
|
+
}>;
|
|
30
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH;;GAEG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,iBAAiB,EAAiB,MAAM,YAAY,CAAC;AAgBrF;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,iBAAiB,CAAC,CA4B5B;AAED;;;;GAIG;AACH,wBAAsB,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC;IACxE,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC,CAqDD"}
|
package/dist/client.js
ADDED
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* EDUCATIONAL AND ENTERTAINMENT PURPOSES ONLY
|
|
3
|
+
*
|
|
4
|
+
* This software is provided for educational, research, and entertainment purposes only.
|
|
5
|
+
* It is not affiliated with, endorsed by, or sponsored by Anthropic PBC.
|
|
6
|
+
* Use at your own risk. No warranties provided. Users are solely responsible for
|
|
7
|
+
* ensuring compliance with Anthropic's Terms of Service and all applicable laws.
|
|
8
|
+
*
|
|
9
|
+
* Copyright (c) 2025 - Licensed under MIT License
|
|
10
|
+
*/
|
|
11
|
+
const API_URL = 'https://api.anthropic.com/v1/messages';
|
|
12
|
+
const ANTHROPIC_VERSION = '2023-06-01';
|
|
13
|
+
const ANTHROPIC_BETA = 'oauth-2025-04-20,claude-code-20250219,interleaved-thinking-2025-05-14,fine-grained-tool-streaming-2025-05-14';
|
|
14
|
+
/**
|
|
15
|
+
* CRITICAL: System prompt required for OAuth with Sonnet/Opus
|
|
16
|
+
* This MUST be the first element in the system array
|
|
17
|
+
*/
|
|
18
|
+
const REQUIRED_SYSTEM_PROMPT = {
|
|
19
|
+
type: 'text',
|
|
20
|
+
text: "You are Claude Code, Anthropic's official CLI for Claude.",
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* Make a request to Anthropic API with OAuth token
|
|
24
|
+
*/
|
|
25
|
+
export async function makeAnthropicRequest(accessToken, request) {
|
|
26
|
+
// CRITICAL: Ensure system prompt starts with required phrase
|
|
27
|
+
const system = request.system || [];
|
|
28
|
+
const systemWithRequired = [REQUIRED_SYSTEM_PROMPT, ...system];
|
|
29
|
+
// Build the request body
|
|
30
|
+
const body = {
|
|
31
|
+
...request,
|
|
32
|
+
system: systemWithRequired,
|
|
33
|
+
};
|
|
34
|
+
const response = await fetch(API_URL, {
|
|
35
|
+
method: 'POST',
|
|
36
|
+
headers: {
|
|
37
|
+
Authorization: `Bearer ${accessToken}`,
|
|
38
|
+
'Content-Type': 'application/json',
|
|
39
|
+
'anthropic-version': ANTHROPIC_VERSION,
|
|
40
|
+
'anthropic-beta': ANTHROPIC_BETA,
|
|
41
|
+
},
|
|
42
|
+
body: JSON.stringify(body),
|
|
43
|
+
});
|
|
44
|
+
if (!response.ok) {
|
|
45
|
+
const error = await response.text();
|
|
46
|
+
throw new Error(`API request failed (${response.status}): ${error}`);
|
|
47
|
+
}
|
|
48
|
+
return (await response.json());
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Test function that INTENTIONALLY violates Claude Code requirements
|
|
52
|
+
* to prove MAX plan enforcement
|
|
53
|
+
* Returns the error response from Anthropic
|
|
54
|
+
*/
|
|
55
|
+
export async function testMaxPlanValidation(accessToken) {
|
|
56
|
+
// Intentionally use WRONG system prompt to trigger validation error
|
|
57
|
+
const invalidRequest = {
|
|
58
|
+
model: 'claude-sonnet-4-5',
|
|
59
|
+
max_tokens: 100,
|
|
60
|
+
system: [
|
|
61
|
+
{
|
|
62
|
+
type: 'text',
|
|
63
|
+
text: 'You are a helpful assistant.', // WRONG - should be Claude Code
|
|
64
|
+
},
|
|
65
|
+
],
|
|
66
|
+
messages: [
|
|
67
|
+
{
|
|
68
|
+
role: 'user',
|
|
69
|
+
content: 'Hello',
|
|
70
|
+
},
|
|
71
|
+
],
|
|
72
|
+
};
|
|
73
|
+
try {
|
|
74
|
+
const response = await fetch(API_URL, {
|
|
75
|
+
method: 'POST',
|
|
76
|
+
headers: {
|
|
77
|
+
Authorization: `Bearer ${accessToken}`,
|
|
78
|
+
'Content-Type': 'application/json',
|
|
79
|
+
'anthropic-version': ANTHROPIC_VERSION,
|
|
80
|
+
'anthropic-beta': ANTHROPIC_BETA,
|
|
81
|
+
},
|
|
82
|
+
body: JSON.stringify(invalidRequest),
|
|
83
|
+
});
|
|
84
|
+
const data = (await response.json());
|
|
85
|
+
if (!response.ok) {
|
|
86
|
+
return {
|
|
87
|
+
success: false,
|
|
88
|
+
error: data,
|
|
89
|
+
statusCode: response.status,
|
|
90
|
+
requestId: data.request_id,
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
// If it somehow succeeded, that's unexpected
|
|
94
|
+
return {
|
|
95
|
+
success: true,
|
|
96
|
+
error: 'Unexpected: Request succeeded without Claude Code system prompt',
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
catch (error) {
|
|
100
|
+
return {
|
|
101
|
+
success: false,
|
|
102
|
+
error: error instanceof Error ? error.message : String(error),
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/oauth.d.ts
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* EDUCATIONAL AND ENTERTAINMENT PURPOSES ONLY
|
|
3
|
+
*
|
|
4
|
+
* This software is provided for educational, research, and entertainment purposes only.
|
|
5
|
+
* It is not affiliated with, endorsed by, or sponsored by Anthropic PBC.
|
|
6
|
+
* Use at your own risk. No warranties provided. Users are solely responsible for
|
|
7
|
+
* ensuring compliance with Anthropic's Terms of Service and all applicable laws.
|
|
8
|
+
*
|
|
9
|
+
* Copyright (c) 2025 - Licensed under MIT License
|
|
10
|
+
*/
|
|
11
|
+
import type { OAuthTokens, OAuthConfig } from './types.js';
|
|
12
|
+
export declare const OAUTH_CONFIG: OAuthConfig;
|
|
13
|
+
/**
|
|
14
|
+
* Generate PKCE code verifier and challenge
|
|
15
|
+
*/
|
|
16
|
+
export declare function generatePKCE(): {
|
|
17
|
+
verifier: string;
|
|
18
|
+
challenge: string;
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* Generate random state for CSRF protection
|
|
22
|
+
*/
|
|
23
|
+
export declare function generateState(): string;
|
|
24
|
+
/**
|
|
25
|
+
* Build authorization URL for OAuth flow
|
|
26
|
+
*/
|
|
27
|
+
export declare function getAuthorizationUrl(codeChallenge: string, state: string): string;
|
|
28
|
+
/**
|
|
29
|
+
* Exchange authorization code for tokens
|
|
30
|
+
*/
|
|
31
|
+
export declare function exchangeCodeForTokens(code: string, codeVerifier: string, state: string): Promise<OAuthTokens>;
|
|
32
|
+
/**
|
|
33
|
+
* Refresh access token using refresh token
|
|
34
|
+
*/
|
|
35
|
+
export declare function refreshAccessToken(refreshToken: string): Promise<OAuthTokens>;
|
|
36
|
+
/**
|
|
37
|
+
* Start OAuth flow - user manually copies code from redirect
|
|
38
|
+
*/
|
|
39
|
+
export declare function startOAuthFlow(askQuestion: (prompt: string) => Promise<string>): Promise<{
|
|
40
|
+
code: string;
|
|
41
|
+
verifier: string;
|
|
42
|
+
state: string;
|
|
43
|
+
}>;
|
|
44
|
+
//# sourceMappingURL=oauth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oauth.d.ts","sourceRoot":"","sources":["../src/oauth.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAQH,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE3D,eAAO,MAAM,YAAY,EAAE,WAM1B,CAAC;AAEF;;GAEG;AACH,wBAAgB,YAAY,IAAI;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAKtE;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,aAAa,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAYhF;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,WAAW,CAAC,CA6BtB;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CA0BnF;AAED;;GAEG;AACH,wBAAsB,cAAc,CAClC,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,GAC/C,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAiC5D"}
|