replicas-cli 0.2.13 → 0.2.14
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/commands/claude-auth.d.ts +2 -0
- package/dist/commands/claude-auth.d.ts.map +1 -0
- package/dist/commands/claude-auth.js +43 -0
- package/dist/commands/claude-auth.js.map +1 -0
- package/dist/commands/dev-sync.d.ts +2 -0
- package/dist/commands/dev-sync.d.ts.map +1 -0
- package/dist/commands/dev-sync.js +78 -0
- package/dist/commands/dev-sync.js.map +1 -0
- package/dist/index.js +34 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/claude-oauth.d.ts +10 -0
- package/dist/lib/claude-oauth.d.ts.map +1 -0
- package/dist/lib/claude-oauth.js +131 -0
- package/dist/lib/claude-oauth.js.map +1 -0
- package/package.json +1 -1
- package/dist/commands/use-codex.d.ts +0 -6
- package/dist/commands/use-codex.d.ts.map +0 -1
- package/dist/commands/use-codex.js +0 -58
- package/dist/commands/use-codex.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-auth.d.ts","sourceRoot":"","sources":["../../src/commands/claude-auth.ts"],"names":[],"mappings":"AAIA,wBAAsB,iBAAiB,kBA4CtC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.claudeAuthCommand = claudeAuthCommand;
|
|
7
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
8
|
+
const api_1 = require("../lib/api");
|
|
9
|
+
const claude_oauth_1 = require("../lib/claude-oauth");
|
|
10
|
+
async function claudeAuthCommand() {
|
|
11
|
+
console.log(chalk_1.default.cyan('Authenticating with Claude Code...\n'));
|
|
12
|
+
try {
|
|
13
|
+
const tokens = await (0, claude_oauth_1.runClaudeOAuthFlow)();
|
|
14
|
+
console.log(chalk_1.default.gray('\nUploading credentials to Replicas...'));
|
|
15
|
+
const response = await (0, api_1.authenticatedFetch)('/v1/claude/credentials', {
|
|
16
|
+
method: 'POST',
|
|
17
|
+
body: {
|
|
18
|
+
access_token: tokens.accessToken,
|
|
19
|
+
refresh_token: tokens.refreshToken,
|
|
20
|
+
token_type: tokens.tokenType,
|
|
21
|
+
scope: tokens.scope,
|
|
22
|
+
expires_at: tokens.expiresAt,
|
|
23
|
+
refresh_token_expires_at: tokens.refreshTokenExpiresAt,
|
|
24
|
+
},
|
|
25
|
+
});
|
|
26
|
+
if (!response.success) {
|
|
27
|
+
throw new Error(response.error || 'Failed to upload Claude credentials to Replicas');
|
|
28
|
+
}
|
|
29
|
+
console.log(chalk_1.default.green('\n✓ Claude authentication complete!'));
|
|
30
|
+
if (response.email) {
|
|
31
|
+
console.log(chalk_1.default.gray(` Account: ${response.email}`));
|
|
32
|
+
}
|
|
33
|
+
if (response.planType) {
|
|
34
|
+
console.log(chalk_1.default.gray(` Plan: ${response.planType}`));
|
|
35
|
+
}
|
|
36
|
+
console.log(chalk_1.default.gray('\nYou can now use Claude Code in your workspaces.\n'));
|
|
37
|
+
}
|
|
38
|
+
catch (error) {
|
|
39
|
+
console.log(chalk_1.default.red('\n✗ Error:'), error instanceof Error ? error.message : error);
|
|
40
|
+
process.exit(1);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=claude-auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-auth.js","sourceRoot":"","sources":["../../src/commands/claude-auth.ts"],"names":[],"mappings":";;;;;AAIA,8CA4CC;AAhDD,kDAA0B;AAC1B,oCAAgD;AAChD,sDAAyD;AAElD,KAAK,UAAU,iBAAiB;IACrC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC,CAAC;IAEhE,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,IAAA,iCAAkB,GAAE,CAAC;QAE1C,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC,CAAC;QAElE,MAAM,QAAQ,GAAG,MAAM,IAAA,wBAAkB,EAMvC,wBAAwB,EACxB;YACE,MAAM,EAAE,MAAM;YACd,IAAI,EAAE;gBACJ,YAAY,EAAE,MAAM,CAAC,WAAW;gBAChC,aAAa,EAAE,MAAM,CAAC,YAAY;gBAClC,UAAU,EAAE,MAAM,CAAC,SAAS;gBAC5B,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,UAAU,EAAE,MAAM,CAAC,SAAS;gBAC5B,wBAAwB,EAAE,MAAM,CAAC,qBAAqB;aACvD;SACF,CACF,CAAC;QAEF,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,IAAI,iDAAiD,CAAC,CAAC;QACvF,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC,CAAC;QAChE,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;YACnB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,cAAc,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAC1D,CAAC;QACD,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;YACtB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,WAAW,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QAC1D,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAC,CAAC;IACjF,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACrF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dev-sync.d.ts","sourceRoot":"","sources":["../../src/commands/dev-sync.ts"],"names":[],"mappings":"AAMA,wBAAsB,cAAc,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA2EzE"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.devSyncCommand = devSyncCommand;
|
|
7
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
8
|
+
const child_process_1 = require("child_process");
|
|
9
|
+
const path_1 = __importDefault(require("path"));
|
|
10
|
+
const config_1 = require("../lib/config");
|
|
11
|
+
const workspace_connection_1 = require("../lib/workspace-connection");
|
|
12
|
+
async function devSyncCommand(workspaceName) {
|
|
13
|
+
if (!(0, config_1.isAuthenticated)()) {
|
|
14
|
+
console.log(chalk_1.default.red('Not logged in. Please run "replicas login" first.'));
|
|
15
|
+
process.exit(1);
|
|
16
|
+
}
|
|
17
|
+
try {
|
|
18
|
+
const { workspace, sshKeyPath } = await (0, workspace_connection_1.prepareWorkspaceConnection)(workspaceName, {});
|
|
19
|
+
if (!workspace.ipv4_address) {
|
|
20
|
+
throw new Error('Workspace does not have an IP address');
|
|
21
|
+
}
|
|
22
|
+
console.log(chalk_1.default.blue(`\nSyncing engine to ${workspace.name}...`));
|
|
23
|
+
// Path to dev-sync.sh script in engine/scripts/
|
|
24
|
+
// From cli/dist/commands/ -> ../../../engine/scripts/
|
|
25
|
+
const scriptPath = path_1.default.resolve(__dirname, '../../../engine/scripts/dev-sync.sh');
|
|
26
|
+
// Spawn the dev-sync script
|
|
27
|
+
const devSync = (0, child_process_1.spawn)(scriptPath, [
|
|
28
|
+
'--ip',
|
|
29
|
+
workspace.ipv4_address,
|
|
30
|
+
'--key',
|
|
31
|
+
sshKeyPath,
|
|
32
|
+
], {
|
|
33
|
+
stdio: 'inherit',
|
|
34
|
+
shell: true,
|
|
35
|
+
});
|
|
36
|
+
// Wait for the script to complete
|
|
37
|
+
await new Promise((resolve, reject) => {
|
|
38
|
+
devSync.on('close', (code) => {
|
|
39
|
+
if (code === 0) {
|
|
40
|
+
resolve();
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
reject(new Error(`dev-sync script exited with code ${code}`));
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
devSync.on('error', (error) => {
|
|
47
|
+
reject(error);
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
console.log(chalk_1.default.green('\n✓ Engine synced successfully.\n'));
|
|
51
|
+
console.log(chalk_1.default.blue('Viewing logs (Ctrl+C to exit)...\n'));
|
|
52
|
+
// Follow logs after sync
|
|
53
|
+
const logs = (0, child_process_1.spawn)('ssh', [
|
|
54
|
+
'-i',
|
|
55
|
+
sshKeyPath,
|
|
56
|
+
`ubuntu@${workspace.ipv4_address}`,
|
|
57
|
+
'sudo journalctl -fu replicas-engine',
|
|
58
|
+
], {
|
|
59
|
+
stdio: 'inherit',
|
|
60
|
+
});
|
|
61
|
+
// Handle Ctrl+C gracefully
|
|
62
|
+
process.on('SIGINT', () => {
|
|
63
|
+
logs.kill('SIGTERM');
|
|
64
|
+
console.log(chalk_1.default.green('\n\n✓ Disconnected from logs.\n'));
|
|
65
|
+
process.exit(0);
|
|
66
|
+
});
|
|
67
|
+
await new Promise((resolve) => {
|
|
68
|
+
logs.on('close', () => {
|
|
69
|
+
resolve();
|
|
70
|
+
});
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
catch (error) {
|
|
74
|
+
console.error(chalk_1.default.red(`\nError: ${error instanceof Error ? error.message : 'Unknown error'}`));
|
|
75
|
+
process.exit(1);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=dev-sync.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dev-sync.js","sourceRoot":"","sources":["../../src/commands/dev-sync.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -16,11 +16,13 @@ const org_1 = require("./commands/org");
|
|
|
16
16
|
const config_1 = require("./commands/config");
|
|
17
17
|
const tools_1 = require("./commands/tools");
|
|
18
18
|
const codex_auth_1 = require("./commands/codex-auth");
|
|
19
|
+
const claude_auth_1 = require("./commands/claude-auth");
|
|
20
|
+
const dev_sync_1 = require("./commands/dev-sync");
|
|
19
21
|
const program = new commander_1.Command();
|
|
20
22
|
program
|
|
21
23
|
.name('replicas')
|
|
22
24
|
.description('CLI for managing Replicas workspaces')
|
|
23
|
-
.version('0.2.
|
|
25
|
+
.version('0.2.14');
|
|
24
26
|
program
|
|
25
27
|
.command('login')
|
|
26
28
|
.description('Authenticate with your Replicas account')
|
|
@@ -91,6 +93,20 @@ program
|
|
|
91
93
|
process.exit(1);
|
|
92
94
|
}
|
|
93
95
|
});
|
|
96
|
+
program
|
|
97
|
+
.command('claude-auth')
|
|
98
|
+
.description('Authenticate Replicas with your Claude Code credentials')
|
|
99
|
+
.action(async () => {
|
|
100
|
+
try {
|
|
101
|
+
await (0, claude_auth_1.claudeAuthCommand)();
|
|
102
|
+
}
|
|
103
|
+
catch (error) {
|
|
104
|
+
if (error instanceof Error) {
|
|
105
|
+
console.error(chalk_1.default.red(`\n✗ ${error.message}\n`));
|
|
106
|
+
}
|
|
107
|
+
process.exit(1);
|
|
108
|
+
}
|
|
109
|
+
});
|
|
94
110
|
// Organization commands
|
|
95
111
|
const org = program
|
|
96
112
|
.command('org')
|
|
@@ -153,6 +169,23 @@ program
|
|
|
153
169
|
process.exit(1);
|
|
154
170
|
}
|
|
155
171
|
});
|
|
172
|
+
// Dev-sync command (only available if ENABLE_DEV_SYNC_COMMAND is set)
|
|
173
|
+
if (process.env.ENABLE_DEV_SYNC_COMMAND === 'true') {
|
|
174
|
+
program
|
|
175
|
+
.command('dev-sync <workspace-name>')
|
|
176
|
+
.description('[Dev] Sync local engine to workspace VM')
|
|
177
|
+
.action(async (workspaceName) => {
|
|
178
|
+
try {
|
|
179
|
+
await (0, dev_sync_1.devSyncCommand)(workspaceName);
|
|
180
|
+
}
|
|
181
|
+
catch (error) {
|
|
182
|
+
if (error instanceof Error) {
|
|
183
|
+
console.error(chalk_1.default.red(`\n✗ ${error.message}\n`));
|
|
184
|
+
}
|
|
185
|
+
process.exit(1);
|
|
186
|
+
}
|
|
187
|
+
});
|
|
188
|
+
}
|
|
156
189
|
// Config commands
|
|
157
190
|
const config = program
|
|
158
191
|
.command('config')
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;AAEA,yBAAuB;AACvB,yCAAoC;AACpC,kDAA0B;AAC1B,4CAAgD;AAChD,8CAAkD;AAClD,8CAAkD;AAClD,gDAAoD;AACpD,0CAA8C;AAC9C,wCAA8D;AAC9D,8CAA0F;AAC1F,4CAAgD;AAChD,sDAAyD;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export interface ClaudeTokens {
|
|
2
|
+
accessToken: string;
|
|
3
|
+
refreshToken: string;
|
|
4
|
+
tokenType: string;
|
|
5
|
+
scope?: string;
|
|
6
|
+
expiresAt: string;
|
|
7
|
+
refreshTokenExpiresAt?: string;
|
|
8
|
+
}
|
|
9
|
+
export declare function runClaudeOAuthFlow(): Promise<ClaudeTokens>;
|
|
10
|
+
//# sourceMappingURL=claude-oauth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-oauth.d.ts","sourceRoot":"","sources":["../../src/lib/claude-oauth.ts"],"names":[],"mappings":"AAYA,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAChC;AAiHD,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,YAAY,CAAC,CAkChE"}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.runClaudeOAuthFlow = runClaudeOAuthFlow;
|
|
7
|
+
const open_1 = __importDefault(require("open"));
|
|
8
|
+
const readline_1 = __importDefault(require("readline"));
|
|
9
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
10
|
+
const pkce_1 = require("./pkce");
|
|
11
|
+
const DEFAULT_CLIENT_ID = '9d1c250a-e61b-44d9-88ed-5944d1962f5e';
|
|
12
|
+
const CLAUDE_CLIENT_ID = process.env.CLAUDE_OAUTH_CLIENT_ID || DEFAULT_CLIENT_ID;
|
|
13
|
+
const AUTHORIZATION_ENDPOINT = 'https://claude.ai/oauth/authorize';
|
|
14
|
+
const TOKEN_ENDPOINT = 'https://console.anthropic.com/v1/oauth/token';
|
|
15
|
+
const REDIRECT_URI = 'https://console.anthropic.com/oauth/code/callback';
|
|
16
|
+
const SCOPES = 'org:create_api_key user:profile user:inference';
|
|
17
|
+
function buildAuthorizationUrl(codeChallenge, state) {
|
|
18
|
+
const params = new URLSearchParams({
|
|
19
|
+
code: 'true',
|
|
20
|
+
client_id: CLAUDE_CLIENT_ID,
|
|
21
|
+
response_type: 'code',
|
|
22
|
+
redirect_uri: REDIRECT_URI,
|
|
23
|
+
scope: SCOPES,
|
|
24
|
+
code_challenge: codeChallenge,
|
|
25
|
+
code_challenge_method: 'S256',
|
|
26
|
+
state,
|
|
27
|
+
});
|
|
28
|
+
return `${AUTHORIZATION_ENDPOINT}?${params.toString()}`;
|
|
29
|
+
}
|
|
30
|
+
async function promptForAuthorizationCode(instruction) {
|
|
31
|
+
const rl = readline_1.default.createInterface({
|
|
32
|
+
input: process.stdin,
|
|
33
|
+
output: process.stdout,
|
|
34
|
+
});
|
|
35
|
+
return new Promise((resolve) => {
|
|
36
|
+
rl.question(instruction, (answer) => {
|
|
37
|
+
rl.close();
|
|
38
|
+
resolve(answer.trim());
|
|
39
|
+
});
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
function parseUserInput(input) {
|
|
43
|
+
if (!input.includes('#') && !input.includes('code=')) {
|
|
44
|
+
return { code: input };
|
|
45
|
+
}
|
|
46
|
+
if (input.startsWith('http://') || input.startsWith('https://')) {
|
|
47
|
+
try {
|
|
48
|
+
const url = new URL(input);
|
|
49
|
+
const fragment = url.hash.startsWith('#') ? url.hash.slice(1) : url.hash;
|
|
50
|
+
const params = new URLSearchParams(fragment);
|
|
51
|
+
const code = params.get('code') ?? undefined;
|
|
52
|
+
const state = params.get('state') ?? undefined;
|
|
53
|
+
if (code) {
|
|
54
|
+
return { code, state };
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
// fall through to split handling
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
const [code, state] = input.split('#');
|
|
62
|
+
return { code, state };
|
|
63
|
+
}
|
|
64
|
+
async function exchangeCodeForTokens(code, state, expectedState, codeVerifier) {
|
|
65
|
+
if (state && state !== expectedState) {
|
|
66
|
+
throw new Error('State mismatch detected. Please restart the authentication flow.');
|
|
67
|
+
}
|
|
68
|
+
const payload = {
|
|
69
|
+
code,
|
|
70
|
+
state: state ?? expectedState,
|
|
71
|
+
grant_type: 'authorization_code',
|
|
72
|
+
client_id: CLAUDE_CLIENT_ID,
|
|
73
|
+
redirect_uri: REDIRECT_URI,
|
|
74
|
+
code_verifier: codeVerifier,
|
|
75
|
+
};
|
|
76
|
+
const response = await fetch(TOKEN_ENDPOINT, {
|
|
77
|
+
method: 'POST',
|
|
78
|
+
headers: {
|
|
79
|
+
'Content-Type': 'application/json',
|
|
80
|
+
},
|
|
81
|
+
body: JSON.stringify(payload),
|
|
82
|
+
});
|
|
83
|
+
if (!response.ok) {
|
|
84
|
+
const text = await response.text();
|
|
85
|
+
throw new Error(`Failed to exchange authorization code: ${response.status} ${text}`);
|
|
86
|
+
}
|
|
87
|
+
const data = await response.json();
|
|
88
|
+
const now = Date.now();
|
|
89
|
+
const expiresAt = new Date(now + data.expires_in * 1000).toISOString();
|
|
90
|
+
const refreshTokenExpiresAt = data.refresh_token_expires_in
|
|
91
|
+
? new Date(now + data.refresh_token_expires_in * 1000).toISOString()
|
|
92
|
+
: undefined;
|
|
93
|
+
return {
|
|
94
|
+
accessToken: data.access_token,
|
|
95
|
+
refreshToken: data.refresh_token,
|
|
96
|
+
tokenType: data.token_type,
|
|
97
|
+
scope: data.scope,
|
|
98
|
+
expiresAt,
|
|
99
|
+
refreshTokenExpiresAt,
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
async function runClaudeOAuthFlow() {
|
|
103
|
+
const pkce = (0, pkce_1.generatePkceCodes)();
|
|
104
|
+
const state = (0, pkce_1.generateState)();
|
|
105
|
+
const authUrl = buildAuthorizationUrl(pkce.codeChallenge, state);
|
|
106
|
+
console.log(chalk_1.default.gray('We will open your browser so you can authenticate with Claude Code.'));
|
|
107
|
+
console.log(chalk_1.default.gray('If the browser does not open automatically, use the URL below:\n'));
|
|
108
|
+
console.log(authUrl);
|
|
109
|
+
console.log();
|
|
110
|
+
try {
|
|
111
|
+
await (0, open_1.default)(authUrl);
|
|
112
|
+
}
|
|
113
|
+
catch {
|
|
114
|
+
console.warn(chalk_1.default.yellow('Failed to open browser automatically. Please copy and open the URL manually.'));
|
|
115
|
+
}
|
|
116
|
+
console.log(chalk_1.default.cyan('After completing authentication, copy the code shown on the success page.'));
|
|
117
|
+
console.log(chalk_1.default.cyan('You can paste either the full URL, or a value formatted as CODE#STATE.\n'));
|
|
118
|
+
const userInput = await promptForAuthorizationCode('Paste the authorization code (or URL) here: ');
|
|
119
|
+
if (!userInput) {
|
|
120
|
+
throw new Error('No authorization code provided.');
|
|
121
|
+
}
|
|
122
|
+
const { code, state: returnedState } = parseUserInput(userInput);
|
|
123
|
+
if (!code) {
|
|
124
|
+
throw new Error('Unable to parse authorization code. Please try again.');
|
|
125
|
+
}
|
|
126
|
+
console.log(chalk_1.default.gray('\nExchanging authorization code for tokens...'));
|
|
127
|
+
const tokens = await exchangeCodeForTokens(code, returnedState, state, pkce.codeVerifier);
|
|
128
|
+
console.log(chalk_1.default.green('✓ Successfully obtained Claude credentials'));
|
|
129
|
+
return tokens;
|
|
130
|
+
}
|
|
131
|
+
//# sourceMappingURL=claude-oauth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-oauth.js","sourceRoot":"","sources":["../../src/lib/claude-oauth.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"use-codex.d.ts","sourceRoot":"","sources":["../../src/commands/use-codex.ts"],"names":[],"mappings":"AAOA;;;GAGG;AACH,wBAAsB,eAAe,kBAgDpC"}
|
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.useCodexCommand = useCodexCommand;
|
|
7
|
-
const chalk_1 = __importDefault(require("chalk"));
|
|
8
|
-
const http_1 = __importDefault(require("http"));
|
|
9
|
-
const url_1 = __importDefault(require("url"));
|
|
10
|
-
const PORT = 1455;
|
|
11
|
-
const CALLBACK_PATH = '/auth/callback';
|
|
12
|
-
/**
|
|
13
|
-
* Start OAuth proxy server for Codex authentication
|
|
14
|
-
* This server receives OAuth callbacks from OpenAI and proxies them to the Replicas web app
|
|
15
|
-
*/
|
|
16
|
-
async function useCodexCommand() {
|
|
17
|
-
console.log(chalk_1.default.cyan('\n╭─────────────────────────────────────────╮'));
|
|
18
|
-
console.log(chalk_1.default.cyan('│') + ' ' + chalk_1.default.bold('Codex OAuth Proxy Server') + ' ' + chalk_1.default.cyan('│'));
|
|
19
|
-
console.log(chalk_1.default.cyan('╰─────────────────────────────────────────╯\n'));
|
|
20
|
-
console.log(chalk_1.default.gray('Starting OAuth proxy server for Codex...\n'));
|
|
21
|
-
const server = http_1.default.createServer((req, res) => {
|
|
22
|
-
const parsedUrl = url_1.default.parse(req.url || '', true);
|
|
23
|
-
if (parsedUrl.pathname === CALLBACK_PATH) {
|
|
24
|
-
// Extract query parameters
|
|
25
|
-
const queryParams = parsedUrl.query;
|
|
26
|
-
const queryString = Object.keys(queryParams)
|
|
27
|
-
.map(key => `${key}=${encodeURIComponent(String(queryParams[key]))}`)
|
|
28
|
-
.join('&');
|
|
29
|
-
// Redirect to Replicas web app callback
|
|
30
|
-
const redirectUrl = `http://localhost:3000/api/codex/oauth/callback?${queryString}`;
|
|
31
|
-
console.log(chalk_1.default.green('✓') + ' Received OAuth callback');
|
|
32
|
-
console.log(chalk_1.default.gray(` Redirecting to: ${redirectUrl}\n`));
|
|
33
|
-
res.writeHead(302, {
|
|
34
|
-
'Location': redirectUrl,
|
|
35
|
-
});
|
|
36
|
-
res.end();
|
|
37
|
-
}
|
|
38
|
-
else {
|
|
39
|
-
res.writeHead(404);
|
|
40
|
-
res.end('Not Found');
|
|
41
|
-
}
|
|
42
|
-
});
|
|
43
|
-
server.listen(PORT, () => {
|
|
44
|
-
console.log(chalk_1.default.green('✓') + ` Server listening on ${chalk_1.default.bold(`http://localhost:${PORT}`)}`);
|
|
45
|
-
console.log(chalk_1.default.gray(` Waiting for OAuth callbacks from OpenAI...\n`));
|
|
46
|
-
console.log(chalk_1.default.yellow('ℹ') + ' You can now click ' + chalk_1.default.bold('Connect') + ' in the Replicas web app');
|
|
47
|
-
console.log(chalk_1.default.gray(' Press Ctrl+C to stop the server\n'));
|
|
48
|
-
});
|
|
49
|
-
// Handle shutdown gracefully
|
|
50
|
-
process.on('SIGINT', () => {
|
|
51
|
-
console.log(chalk_1.default.yellow('\n\n✓ Shutting down OAuth proxy server...'));
|
|
52
|
-
server.close(() => {
|
|
53
|
-
console.log(chalk_1.default.green('✓ Server stopped\n'));
|
|
54
|
-
process.exit(0);
|
|
55
|
-
});
|
|
56
|
-
});
|
|
57
|
-
}
|
|
58
|
-
//# sourceMappingURL=use-codex.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"use-codex.js","sourceRoot":"","sources":["../../src/commands/use-codex.ts"],"names":[],"mappings":";;;;;AAWA,0CAgDC;AA3DD,kDAA0B;AAC1B,gDAAwB;AACxB,8CAAsB;AAEtB,MAAM,IAAI,GAAG,IAAI,CAAC;AAClB,MAAM,aAAa,GAAG,gBAAgB,CAAC;AAEvC;;;GAGG;AACI,KAAK,UAAU,eAAe;IACnC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC,CAAC;IACzE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,eAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,GAAG,SAAS,GAAG,eAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3G,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC,CAAC;IAEzE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC,CAAC;IAEtE,MAAM,MAAM,GAAG,cAAI,CAAC,YAAY,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QAC5C,MAAM,SAAS,GAAG,aAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC;QAEjD,IAAI,SAAS,CAAC,QAAQ,KAAK,aAAa,EAAE,CAAC;YACzC,2BAA2B;YAC3B,MAAM,WAAW,GAAG,SAAS,CAAC,KAAK,CAAC;YACpC,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC;iBACzC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,IAAI,kBAAkB,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;iBACpE,IAAI,CAAC,GAAG,CAAC,CAAC;YAEb,wCAAwC;YACxC,MAAM,WAAW,GAAG,kDAAkD,WAAW,EAAE,CAAC;YAEpF,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,0BAA0B,CAAC,CAAC;YAC3D,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,qBAAqB,WAAW,IAAI,CAAC,CAAC,CAAC;YAE9D,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE;gBACjB,UAAU,EAAE,WAAW;aACxB,CAAC,CAAC;YACH,GAAG,CAAC,GAAG,EAAE,CAAC;QACZ,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;YACnB,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QACvB,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE;QACvB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,wBAAwB,eAAK,CAAC,IAAI,CAAC,oBAAoB,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;QACjG,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC,CAAC;QAC1E,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,sBAAsB,GAAG,eAAK,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,0BAA0B,CAAC,CAAC;QAC7G,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;IAEH,6BAA6B;IAC7B,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;QACxB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,2CAA2C,CAAC,CAAC,CAAC;QACvE,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE;YAChB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC,CAAC;YAC/C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
|