replicas-cli 0.1.0 → 0.2.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/dist/commands/code.d.ts +4 -0
- package/dist/commands/code.d.ts.map +1 -0
- package/dist/commands/code.js +67 -0
- package/dist/commands/code.js.map +1 -0
- package/dist/commands/config.d.ts +4 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +74 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/connect.d.ts.map +1 -1
- package/dist/commands/connect.js +6 -111
- package/dist/commands/connect.js.map +1 -1
- package/dist/index.js +64 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/config.d.ts +2 -0
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +14 -0
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/ssh-config.d.ts +12 -0
- package/dist/lib/ssh-config.d.ts.map +1 -0
- package/dist/lib/ssh-config.js +149 -0
- package/dist/lib/ssh-config.js.map +1 -0
- package/dist/lib/workspace-connection.d.ts +11 -0
- package/dist/lib/workspace-connection.d.ts.map +1 -0
- package/dist/lib/workspace-connection.js +127 -0
- package/dist/lib/workspace-connection.js.map +1 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"code.d.ts","sourceRoot":"","sources":["../../src/commands/code.ts"],"names":[],"mappings":"AAMA,wBAAsB,WAAW,CAAC,aAAa,EAAE,MAAM,EAAE,OAAO,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAqEnG"}
|
|
@@ -0,0 +1,67 @@
|
|
|
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.codeCommand = codeCommand;
|
|
7
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
8
|
+
const child_process_1 = require("child_process");
|
|
9
|
+
const config_1 = require("../lib/config");
|
|
10
|
+
const workspace_connection_1 = require("../lib/workspace-connection");
|
|
11
|
+
const ssh_config_1 = require("../lib/ssh-config");
|
|
12
|
+
async function codeCommand(workspaceName, options) {
|
|
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, portMappings, repoName } = await (0, workspace_connection_1.prepareWorkspaceConnection)(workspaceName, options);
|
|
19
|
+
const hostAlias = (0, ssh_config_1.getWorkspaceHostAlias)(workspace.name);
|
|
20
|
+
console.log(chalk_1.default.blue('\nConfiguring SSH connection...'));
|
|
21
|
+
(0, ssh_config_1.addOrUpdateSSHConfigEntry)({
|
|
22
|
+
host: hostAlias,
|
|
23
|
+
hostname: workspace.ipv4_address,
|
|
24
|
+
user: 'ubuntu',
|
|
25
|
+
identityFile: sshKeyPath,
|
|
26
|
+
portForwards: portMappings,
|
|
27
|
+
});
|
|
28
|
+
console.log(chalk_1.default.green(`✓ SSH config entry created: ${hostAlias}`));
|
|
29
|
+
const remotePath = repoName
|
|
30
|
+
? `/home/ubuntu/workspaces/${repoName}`
|
|
31
|
+
: '/home/ubuntu';
|
|
32
|
+
const ideCommand = (0, config_1.getIdeCommand)();
|
|
33
|
+
const fullCommand = `${ideCommand} --remote ssh-remote+${hostAlias} ${remotePath}`;
|
|
34
|
+
console.log(chalk_1.default.blue(`\nOpening ${ideCommand} for workspace ${workspace.name}...`));
|
|
35
|
+
console.log(chalk_1.default.gray(`Command: ${fullCommand}`));
|
|
36
|
+
if (portMappings.size > 0) {
|
|
37
|
+
console.log(chalk_1.default.cyan('\nPort forwarding configured:'));
|
|
38
|
+
for (const [remotePort, localPort] of portMappings) {
|
|
39
|
+
console.log(chalk_1.default.cyan(` • localhost:${localPort} → workspace:${remotePort}`));
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
const ide = (0, child_process_1.spawn)(ideCommand, [
|
|
43
|
+
'--remote',
|
|
44
|
+
`ssh-remote+${hostAlias}`,
|
|
45
|
+
remotePath
|
|
46
|
+
], {
|
|
47
|
+
stdio: 'inherit',
|
|
48
|
+
detached: false,
|
|
49
|
+
});
|
|
50
|
+
ide.on('error', (error) => {
|
|
51
|
+
console.error(chalk_1.default.red(`\nFailed to launch ${ideCommand}: ${error.message}`));
|
|
52
|
+
console.log(chalk_1.default.yellow(`\nMake sure ${ideCommand} is installed and available in your PATH.`));
|
|
53
|
+
console.log(chalk_1.default.gray(`You can configure a different IDE with: replicas config set ide <command>`));
|
|
54
|
+
process.exit(1);
|
|
55
|
+
});
|
|
56
|
+
ide.on('close', (code) => {
|
|
57
|
+
if (code === 0) {
|
|
58
|
+
console.log(chalk_1.default.green(`\n✓ ${ideCommand} closed successfully.\n`));
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
catch (error) {
|
|
63
|
+
console.error(chalk_1.default.red(`\nError: ${error instanceof Error ? error.message : 'Unknown error'}`));
|
|
64
|
+
process.exit(1);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=code.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"code.js","sourceRoot":"","sources":["../../src/commands/code.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAGA,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAmBjE;AAED,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAmBhF;AAED,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAqBvD"}
|
|
@@ -0,0 +1,74 @@
|
|
|
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.configGetCommand = configGetCommand;
|
|
7
|
+
exports.configSetCommand = configSetCommand;
|
|
8
|
+
exports.configListCommand = configListCommand;
|
|
9
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
10
|
+
const config_1 = require("../lib/config");
|
|
11
|
+
async function configGetCommand(key) {
|
|
12
|
+
if (!(0, config_1.isAuthenticated)()) {
|
|
13
|
+
console.log(chalk_1.default.red('Not logged in. Please run "replicas login" first.'));
|
|
14
|
+
process.exit(1);
|
|
15
|
+
}
|
|
16
|
+
try {
|
|
17
|
+
if (key === 'ide') {
|
|
18
|
+
const ideCommand = (0, config_1.getIdeCommand)();
|
|
19
|
+
console.log(chalk_1.default.green(`\nIDE command: ${ideCommand}\n`));
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
console.log(chalk_1.default.red(`Unknown config key: ${key}`));
|
|
23
|
+
console.log(chalk_1.default.gray('Available keys: ide'));
|
|
24
|
+
process.exit(1);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
catch (error) {
|
|
28
|
+
console.error(chalk_1.default.red(`Error: ${error instanceof Error ? error.message : 'Unknown error'}`));
|
|
29
|
+
process.exit(1);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
async function configSetCommand(key, value) {
|
|
33
|
+
if (!(0, config_1.isAuthenticated)()) {
|
|
34
|
+
console.log(chalk_1.default.red('Not logged in. Please run "replicas login" first.'));
|
|
35
|
+
process.exit(1);
|
|
36
|
+
}
|
|
37
|
+
try {
|
|
38
|
+
if (key === 'ide') {
|
|
39
|
+
(0, config_1.setIdeCommand)(value);
|
|
40
|
+
console.log(chalk_1.default.green(`\n✓ IDE command set to: ${value}\n`));
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
console.log(chalk_1.default.red(`Unknown config key: ${key}`));
|
|
44
|
+
console.log(chalk_1.default.gray('Available keys: ide'));
|
|
45
|
+
process.exit(1);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
catch (error) {
|
|
49
|
+
console.error(chalk_1.default.red(`Error: ${error instanceof Error ? error.message : 'Unknown error'}`));
|
|
50
|
+
process.exit(1);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
async function configListCommand() {
|
|
54
|
+
if (!(0, config_1.isAuthenticated)()) {
|
|
55
|
+
console.log(chalk_1.default.red('Not logged in. Please run "replicas login" first.'));
|
|
56
|
+
process.exit(1);
|
|
57
|
+
}
|
|
58
|
+
try {
|
|
59
|
+
const config = (0, config_1.readConfig)();
|
|
60
|
+
if (!config) {
|
|
61
|
+
console.log(chalk_1.default.red('No config found. Please login first.'));
|
|
62
|
+
process.exit(1);
|
|
63
|
+
}
|
|
64
|
+
console.log(chalk_1.default.green('\nCurrent configuration:'));
|
|
65
|
+
console.log(chalk_1.default.gray(` Organization ID: ${config.organization_id || '(not set)'}`));
|
|
66
|
+
console.log(chalk_1.default.gray(` IDE command: ${config.ide_command || 'code (default)'}`));
|
|
67
|
+
console.log();
|
|
68
|
+
}
|
|
69
|
+
catch (error) {
|
|
70
|
+
console.error(chalk_1.default.red(`Error: ${error instanceof Error ? error.message : 'Unknown error'}`));
|
|
71
|
+
process.exit(1);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connect.d.ts","sourceRoot":"","sources":["../../src/commands/connect.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"connect.d.ts","sourceRoot":"","sources":["../../src/commands/connect.ts"],"names":[],"mappings":"AAKA,wBAAsB,cAAc,CAAC,aAAa,EAAE,MAAM,EAAE,OAAO,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAsCtG"}
|
package/dist/commands/connect.js
CHANGED
|
@@ -5,127 +5,22 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.connectCommand = connectCommand;
|
|
7
7
|
const chalk_1 = __importDefault(require("chalk"));
|
|
8
|
-
const prompts_1 = __importDefault(require("prompts"));
|
|
9
|
-
const path_1 = __importDefault(require("path"));
|
|
10
|
-
const fs_1 = __importDefault(require("fs"));
|
|
11
8
|
const config_1 = require("../lib/config");
|
|
12
|
-
const api_1 = require("../lib/api");
|
|
13
9
|
const ssh_1 = require("../lib/ssh");
|
|
14
|
-
const
|
|
15
|
-
const replicas_config_1 = require("../lib/replicas-config");
|
|
16
|
-
const ports_1 = require("../lib/ports");
|
|
10
|
+
const workspace_connection_1 = require("../lib/workspace-connection");
|
|
17
11
|
async function connectCommand(workspaceName, options) {
|
|
18
12
|
if (!(0, config_1.isAuthenticated)()) {
|
|
19
13
|
console.log(chalk_1.default.red('Not logged in. Please run "replicas login" first.'));
|
|
20
14
|
process.exit(1);
|
|
21
15
|
}
|
|
22
|
-
const orgId = (0, config_1.getOrganizationId)();
|
|
23
|
-
if (!orgId) {
|
|
24
|
-
console.log(chalk_1.default.red('No organization selected. Please run "replicas org switch" first.'));
|
|
25
|
-
process.exit(1);
|
|
26
|
-
}
|
|
27
16
|
try {
|
|
28
|
-
|
|
29
|
-
console.log(chalk_1.default.blue(`\
|
|
30
|
-
|
|
31
|
-
if (response.workspaces.length === 0) {
|
|
32
|
-
console.log(chalk_1.default.red(`No workspaces found with name matching "${workspaceName}".`));
|
|
33
|
-
process.exit(1);
|
|
34
|
-
}
|
|
35
|
-
// Step 2: If multiple workspaces, prompt user to select one
|
|
36
|
-
let selectedWorkspace;
|
|
37
|
-
if (response.workspaces.length === 1) {
|
|
38
|
-
selectedWorkspace = response.workspaces[0];
|
|
39
|
-
}
|
|
40
|
-
else {
|
|
41
|
-
console.log(chalk_1.default.yellow(`\nFound ${response.workspaces.length} workspaces matching "${workspaceName}":`));
|
|
42
|
-
const selectResponse = await (0, prompts_1.default)({
|
|
43
|
-
type: 'select',
|
|
44
|
-
name: 'workspaceId',
|
|
45
|
-
message: 'Select a workspace:',
|
|
46
|
-
choices: response.workspaces.map(ws => ({
|
|
47
|
-
title: `${ws.name} (${ws.status || 'unknown'})`,
|
|
48
|
-
value: ws.id,
|
|
49
|
-
description: `IP: ${ws.ipv4_address || 'N/A'} | Instance: ${ws.instance_type || 'N/A'}`,
|
|
50
|
-
})),
|
|
51
|
-
});
|
|
52
|
-
if (!selectResponse.workspaceId) {
|
|
53
|
-
console.log(chalk_1.default.yellow('\nCancelled.'));
|
|
54
|
-
return;
|
|
55
|
-
}
|
|
56
|
-
selectedWorkspace = response.workspaces.find(ws => ws.id === selectResponse.workspaceId);
|
|
57
|
-
}
|
|
58
|
-
console.log(chalk_1.default.green(`\n✓ Selected workspace: ${selectedWorkspace.name}`));
|
|
59
|
-
console.log(chalk_1.default.gray(` IP: ${selectedWorkspace.ipv4_address}`));
|
|
60
|
-
console.log(chalk_1.default.gray(` Status: ${selectedWorkspace.status || 'unknown'}`));
|
|
61
|
-
if (!selectedWorkspace.ipv4_address) {
|
|
62
|
-
console.log(chalk_1.default.red('\nWorkspace does not have an IP address. It may not be running yet.'));
|
|
63
|
-
process.exit(1);
|
|
64
|
-
}
|
|
65
|
-
// Step 3: Get SSH key
|
|
66
|
-
console.log(chalk_1.default.blue('\nRetrieving SSH key...'));
|
|
67
|
-
const privateKey = await (0, ssh_1.getSSHKey)(selectedWorkspace.ssh_key_id);
|
|
68
|
-
// Write key to a temporary file for SSH
|
|
69
|
-
const keyPath = path_1.default.join(config_1.CONFIG_DIR, 'keys', `${selectedWorkspace.ssh_key_id}.pem`);
|
|
70
|
-
fs_1.default.writeFileSync(keyPath, privateKey, { mode: 0o600 });
|
|
71
|
-
console.log(chalk_1.default.green('✓ SSH key ready'));
|
|
72
|
-
// Step 4: Handle --copy flag
|
|
73
|
-
if (options.copy) {
|
|
74
|
-
if (!(0, git_1.isInsideGitRepo)()) {
|
|
75
|
-
console.log(chalk_1.default.yellow('\nWarning: Not inside a git repository. Skipping file copy.'));
|
|
76
|
-
}
|
|
77
|
-
else {
|
|
78
|
-
const repoName = (0, git_1.getGitRepoName)();
|
|
79
|
-
const replicasConfig = (0, replicas_config_1.readReplicasConfig)();
|
|
80
|
-
if (!replicasConfig || !replicasConfig.copy || replicasConfig.copy.length === 0) {
|
|
81
|
-
console.log(chalk_1.default.yellow('\nNo files to copy (replicas.json not found or empty).'));
|
|
82
|
-
}
|
|
83
|
-
else {
|
|
84
|
-
console.log(chalk_1.default.blue(`\nCopying files to workspace (repo: ${repoName})...`));
|
|
85
|
-
const { valid, invalid } = (0, replicas_config_1.validateCopyFiles)(replicasConfig.copy);
|
|
86
|
-
if (invalid.length > 0) {
|
|
87
|
-
console.log(chalk_1.default.yellow(`\nWarning: ${invalid.length} file(s) not found locally:`));
|
|
88
|
-
invalid.forEach(file => console.log(chalk_1.default.gray(` - ${file}`)));
|
|
89
|
-
}
|
|
90
|
-
for (const file of valid) {
|
|
91
|
-
const localPath = (0, replicas_config_1.getAbsoluteCopyPath)(file);
|
|
92
|
-
const remotePath = `/home/ubuntu/workspaces/${repoName}/${file}`;
|
|
93
|
-
console.log(chalk_1.default.gray(` Copying ${file}...`));
|
|
94
|
-
try {
|
|
95
|
-
// Create remote directory first
|
|
96
|
-
await (0, ssh_1.scpCopyFile)(keyPath, localPath, remotePath, selectedWorkspace.ipv4_address);
|
|
97
|
-
console.log(chalk_1.default.green(` ✓ ${file}`));
|
|
98
|
-
}
|
|
99
|
-
catch (error) {
|
|
100
|
-
console.log(chalk_1.default.red(` ✗ Failed to copy ${file}: ${error instanceof Error ? error.message : 'Unknown error'}`));
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
console.log(chalk_1.default.green(`\n✓ File copy complete (${valid.length} files)`));
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
// Step 5: Handle port forwarding
|
|
108
|
-
const portMappings = new Map();
|
|
109
|
-
if ((0, git_1.isInsideGitRepo)()) {
|
|
110
|
-
const replicasConfig = (0, replicas_config_1.readReplicasConfig)();
|
|
111
|
-
if (replicasConfig && replicasConfig.ports && replicasConfig.ports.length > 0) {
|
|
112
|
-
console.log(chalk_1.default.blue('\nSetting up port forwarding...'));
|
|
113
|
-
const mappings = await (0, ports_1.mapPortsToLocal)(replicasConfig.ports);
|
|
114
|
-
for (const [remotePort, localPort] of mappings) {
|
|
115
|
-
portMappings.set(remotePort, localPort);
|
|
116
|
-
console.log(chalk_1.default.gray(` Forwarding localhost:${localPort} -> workspace:${remotePort}`));
|
|
117
|
-
}
|
|
118
|
-
console.log(chalk_1.default.green('✓ Port forwarding configured'));
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
// Step 6: Connect via SSH
|
|
122
|
-
console.log(chalk_1.default.blue(`\nConnecting to ${selectedWorkspace.name}...`));
|
|
123
|
-
// Build display command
|
|
124
|
-
let sshCommand = `ssh -i ${keyPath}`;
|
|
17
|
+
const { workspace, sshKeyPath, portMappings } = await (0, workspace_connection_1.prepareWorkspaceConnection)(workspaceName, options);
|
|
18
|
+
console.log(chalk_1.default.blue(`\nConnecting to ${workspace.name}...`));
|
|
19
|
+
let sshCommand = `ssh -i ${sshKeyPath}`;
|
|
125
20
|
for (const [remotePort, localPort] of portMappings) {
|
|
126
21
|
sshCommand += ` -L ${localPort}:localhost:${remotePort}`;
|
|
127
22
|
}
|
|
128
|
-
sshCommand += ` ubuntu@${
|
|
23
|
+
sshCommand += ` ubuntu@${workspace.ipv4_address}`;
|
|
129
24
|
console.log(chalk_1.default.gray(`SSH command: ${sshCommand}`));
|
|
130
25
|
if (portMappings.size > 0) {
|
|
131
26
|
console.log(chalk_1.default.cyan('\nPort forwarding active:'));
|
|
@@ -134,7 +29,7 @@ async function connectCommand(workspaceName, options) {
|
|
|
134
29
|
}
|
|
135
30
|
}
|
|
136
31
|
console.log(chalk_1.default.gray('\nPress Ctrl+D to disconnect.\n'));
|
|
137
|
-
await (0, ssh_1.connectSSH)(
|
|
32
|
+
await (0, ssh_1.connectSSH)(sshKeyPath, workspace.ipv4_address, portMappings);
|
|
138
33
|
console.log(chalk_1.default.green('\n✓ Disconnected from workspace.\n'));
|
|
139
34
|
}
|
|
140
35
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connect.js","sourceRoot":"","sources":["../../src/commands/connect.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"connect.js","sourceRoot":"","sources":["../../src/commands/connect.ts"],"names":[],"mappings":";;;;;AAKA,wCAsCC;AA3CD,kDAA0B;AAC1B,0CAAgD;AAChD,oCAAwC;AACxC,sEAAyE;AAElE,KAAK,UAAU,cAAc,CAAC,aAAqB,EAAE,OAA2B;IACrF,IAAI,CAAC,IAAA,wBAAe,GAAE,EAAE,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC,CAAC;QAC5E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,CAAC;QACH,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,YAAY,EAAE,GAAG,MAAM,IAAA,iDAA0B,EAC9E,aAAa,EACb,OAAO,CACR,CAAC;QAEF,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,mBAAmB,SAAS,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC;QAEhE,IAAI,UAAU,GAAG,UAAU,UAAU,EAAE,CAAC;QACxC,KAAK,MAAM,CAAC,UAAU,EAAE,SAAS,CAAC,IAAI,YAAY,EAAE,CAAC;YACnD,UAAU,IAAI,OAAO,SAAS,cAAc,UAAU,EAAE,CAAC;QAC3D,CAAC;QACD,UAAU,IAAI,WAAW,SAAS,CAAC,YAAY,EAAE,CAAC;QAElD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,gBAAgB,UAAU,EAAE,CAAC,CAAC,CAAC;QAEtD,IAAI,YAAY,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YAC1B,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC,CAAC;YACrD,KAAK,MAAM,CAAC,UAAU,EAAE,SAAS,CAAC,IAAI,YAAY,EAAE,CAAC;gBACnD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,iBAAiB,SAAS,gBAAgB,UAAU,EAAE,CAAC,CAAC,CAAC;YAClF,CAAC;QACH,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC,CAAC;QAE3D,MAAM,IAAA,gBAAU,EAAC,UAAU,EAAE,SAAS,CAAC,YAAa,EAAE,YAAY,CAAC,CAAC;QAEpE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC,CAAC;IACjE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,YAAY,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC;QACjG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -11,7 +11,9 @@ const login_1 = require("./commands/login");
|
|
|
11
11
|
const logout_1 = require("./commands/logout");
|
|
12
12
|
const whoami_1 = require("./commands/whoami");
|
|
13
13
|
const connect_1 = require("./commands/connect");
|
|
14
|
+
const code_1 = require("./commands/code");
|
|
14
15
|
const org_1 = require("./commands/org");
|
|
16
|
+
const config_1 = require("./commands/config");
|
|
15
17
|
const program = new commander_1.Command();
|
|
16
18
|
program
|
|
17
19
|
.name('replicas')
|
|
@@ -105,5 +107,67 @@ program
|
|
|
105
107
|
process.exit(1);
|
|
106
108
|
}
|
|
107
109
|
});
|
|
110
|
+
// Code command
|
|
111
|
+
program
|
|
112
|
+
.command('code <workspace-name>')
|
|
113
|
+
.description('Open a workspace in VSCode/Cursor via Remote SSH')
|
|
114
|
+
.option('-c, --copy', 'Copy files from replicas.json to the workspace')
|
|
115
|
+
.action(async (workspaceName, options) => {
|
|
116
|
+
try {
|
|
117
|
+
await (0, code_1.codeCommand)(workspaceName, options);
|
|
118
|
+
}
|
|
119
|
+
catch (error) {
|
|
120
|
+
if (error instanceof Error) {
|
|
121
|
+
console.error(chalk_1.default.red(`\n✗ ${error.message}\n`));
|
|
122
|
+
}
|
|
123
|
+
process.exit(1);
|
|
124
|
+
}
|
|
125
|
+
});
|
|
126
|
+
// Config commands
|
|
127
|
+
const config = program
|
|
128
|
+
.command('config')
|
|
129
|
+
.description('Manage CLI configuration');
|
|
130
|
+
config
|
|
131
|
+
.command('get <key>')
|
|
132
|
+
.description('Get a configuration value')
|
|
133
|
+
.action(async (key) => {
|
|
134
|
+
try {
|
|
135
|
+
await (0, config_1.configGetCommand)(key);
|
|
136
|
+
}
|
|
137
|
+
catch (error) {
|
|
138
|
+
if (error instanceof Error) {
|
|
139
|
+
console.error(chalk_1.default.red(`\n✗ ${error.message}\n`));
|
|
140
|
+
}
|
|
141
|
+
process.exit(1);
|
|
142
|
+
}
|
|
143
|
+
});
|
|
144
|
+
config
|
|
145
|
+
.command('set <key> <value>')
|
|
146
|
+
.description('Set a configuration value')
|
|
147
|
+
.action(async (key, value) => {
|
|
148
|
+
try {
|
|
149
|
+
await (0, config_1.configSetCommand)(key, value);
|
|
150
|
+
}
|
|
151
|
+
catch (error) {
|
|
152
|
+
if (error instanceof Error) {
|
|
153
|
+
console.error(chalk_1.default.red(`\n✗ ${error.message}\n`));
|
|
154
|
+
}
|
|
155
|
+
process.exit(1);
|
|
156
|
+
}
|
|
157
|
+
});
|
|
158
|
+
config
|
|
159
|
+
.command('list')
|
|
160
|
+
.description('List all configuration values')
|
|
161
|
+
.action(async () => {
|
|
162
|
+
try {
|
|
163
|
+
await (0, config_1.configListCommand)();
|
|
164
|
+
}
|
|
165
|
+
catch (error) {
|
|
166
|
+
if (error instanceof Error) {
|
|
167
|
+
console.error(chalk_1.default.red(`\n✗ ${error.message}\n`));
|
|
168
|
+
}
|
|
169
|
+
process.exit(1);
|
|
170
|
+
}
|
|
171
|
+
});
|
|
108
172
|
program.parse();
|
|
109
173
|
//# sourceMappingURL=index.js.map
|
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,wCAA8D;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/config.d.ts
CHANGED
|
@@ -6,5 +6,7 @@ export declare function deleteConfig(): void;
|
|
|
6
6
|
export declare function isAuthenticated(): boolean;
|
|
7
7
|
export declare function setOrganizationId(organizationId: string): void;
|
|
8
8
|
export declare function getOrganizationId(): string | null;
|
|
9
|
+
export declare function setIdeCommand(ideCommand: string): void;
|
|
10
|
+
export declare function getIdeCommand(): string;
|
|
9
11
|
export { CONFIG_DIR };
|
|
10
12
|
//# sourceMappingURL=config.d.ts.map
|
package/dist/lib/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,QAAA,MAAM,UAAU,QAAuC,CAAC;AASxD,wBAAgB,UAAU,IAAI,MAAM,GAAG,IAAI,CAY1C;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAWhD;AAED,wBAAgB,YAAY,IAAI,IAAI,CAInC;AAED,wBAAgB,eAAe,IAAI,OAAO,CAGzC;AAED,wBAAgB,iBAAiB,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI,CAQ9D;AAED,wBAAgB,iBAAiB,IAAI,MAAM,GAAG,IAAI,CAGjD;AAED,OAAO,EAAE,UAAU,EAAE,CAAC"}
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,QAAA,MAAM,UAAU,QAAuC,CAAC;AASxD,wBAAgB,UAAU,IAAI,MAAM,GAAG,IAAI,CAY1C;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAWhD;AAED,wBAAgB,YAAY,IAAI,IAAI,CAInC;AAED,wBAAgB,eAAe,IAAI,OAAO,CAGzC;AAED,wBAAgB,iBAAiB,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI,CAQ9D;AAED,wBAAgB,iBAAiB,IAAI,MAAM,GAAG,IAAI,CAGjD;AAED,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAQtD;AAED,wBAAgB,aAAa,IAAI,MAAM,CAGtC;AAED,OAAO,EAAE,UAAU,EAAE,CAAC"}
|
package/dist/lib/config.js
CHANGED
|
@@ -10,6 +10,8 @@ exports.deleteConfig = deleteConfig;
|
|
|
10
10
|
exports.isAuthenticated = isAuthenticated;
|
|
11
11
|
exports.setOrganizationId = setOrganizationId;
|
|
12
12
|
exports.getOrganizationId = getOrganizationId;
|
|
13
|
+
exports.setIdeCommand = setIdeCommand;
|
|
14
|
+
exports.getIdeCommand = getIdeCommand;
|
|
13
15
|
const fs_1 = __importDefault(require("fs"));
|
|
14
16
|
const path_1 = __importDefault(require("path"));
|
|
15
17
|
const os_1 = __importDefault(require("os"));
|
|
@@ -67,4 +69,16 @@ function getOrganizationId() {
|
|
|
67
69
|
const config = readConfig();
|
|
68
70
|
return config?.organization_id || null;
|
|
69
71
|
}
|
|
72
|
+
function setIdeCommand(ideCommand) {
|
|
73
|
+
const config = readConfig();
|
|
74
|
+
if (!config) {
|
|
75
|
+
throw new Error('No config file found. Please login first.');
|
|
76
|
+
}
|
|
77
|
+
config.ide_command = ideCommand;
|
|
78
|
+
writeConfig(config);
|
|
79
|
+
}
|
|
80
|
+
function getIdeCommand() {
|
|
81
|
+
const config = readConfig();
|
|
82
|
+
return config?.ide_command || 'code';
|
|
83
|
+
}
|
|
70
84
|
//# sourceMappingURL=config.js.map
|
package/dist/lib/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":";;;;;;AAcA,gCAYC;AAED,kCAWC;AAED,oCAIC;AAED,0CAGC;AAED,8CAQC;AAED,8CAGC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
interface SSHConfigEntry {
|
|
2
|
+
host: string;
|
|
3
|
+
hostname: string;
|
|
4
|
+
user: string;
|
|
5
|
+
identityFile: string;
|
|
6
|
+
portForwards?: Map<number, number>;
|
|
7
|
+
}
|
|
8
|
+
export declare function removeSSHConfigEntry(host: string): void;
|
|
9
|
+
export declare function addOrUpdateSSHConfigEntry(entry: SSHConfigEntry): void;
|
|
10
|
+
export declare function getWorkspaceHostAlias(workspaceName: string): string;
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=ssh-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ssh-config.d.ts","sourceRoot":"","sources":["../../src/lib/ssh-config.ts"],"names":[],"mappings":"AAQA,UAAU,cAAc;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACpC;AAsED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAuCvD;AAED,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI,CAkDrE;AAED,wBAAgB,qBAAqB,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAEnE"}
|
|
@@ -0,0 +1,149 @@
|
|
|
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.removeSSHConfigEntry = removeSSHConfigEntry;
|
|
7
|
+
exports.addOrUpdateSSHConfigEntry = addOrUpdateSSHConfigEntry;
|
|
8
|
+
exports.getWorkspaceHostAlias = getWorkspaceHostAlias;
|
|
9
|
+
const fs_1 = __importDefault(require("fs"));
|
|
10
|
+
const path_1 = __importDefault(require("path"));
|
|
11
|
+
const os_1 = __importDefault(require("os"));
|
|
12
|
+
const SSH_CONFIG_PATH = path_1.default.join(os_1.default.homedir(), '.ssh', 'config');
|
|
13
|
+
const REPLICAS_MARKER_START = '# === REPLICAS CLI MANAGED ENTRY START ===';
|
|
14
|
+
const REPLICAS_MARKER_END = '# === REPLICAS CLI MANAGED ENTRY END ===';
|
|
15
|
+
function ensureSSHDir() {
|
|
16
|
+
const sshDir = path_1.default.join(os_1.default.homedir(), '.ssh');
|
|
17
|
+
if (!fs_1.default.existsSync(sshDir)) {
|
|
18
|
+
fs_1.default.mkdirSync(sshDir, { recursive: true, mode: 0o700 });
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
function readSSHConfig() {
|
|
22
|
+
ensureSSHDir();
|
|
23
|
+
if (!fs_1.default.existsSync(SSH_CONFIG_PATH)) {
|
|
24
|
+
return '';
|
|
25
|
+
}
|
|
26
|
+
return fs_1.default.readFileSync(SSH_CONFIG_PATH, 'utf-8');
|
|
27
|
+
}
|
|
28
|
+
function writeSSHConfig(content) {
|
|
29
|
+
ensureSSHDir();
|
|
30
|
+
fs_1.default.writeFileSync(SSH_CONFIG_PATH, content, { mode: 0o600 });
|
|
31
|
+
}
|
|
32
|
+
function generateConfigBlock(entry) {
|
|
33
|
+
const lines = [
|
|
34
|
+
REPLICAS_MARKER_START,
|
|
35
|
+
`Host ${entry.host}`,
|
|
36
|
+
` HostName ${entry.hostname}`,
|
|
37
|
+
` User ${entry.user}`,
|
|
38
|
+
` IdentityFile ${entry.identityFile}`,
|
|
39
|
+
` StrictHostKeyChecking no`,
|
|
40
|
+
` UserKnownHostsFile /dev/null`,
|
|
41
|
+
];
|
|
42
|
+
if (entry.portForwards && entry.portForwards.size > 0) {
|
|
43
|
+
for (const [localPort, remotePort] of entry.portForwards) {
|
|
44
|
+
lines.push(` LocalForward ${localPort} localhost:${remotePort}`);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
lines.push(REPLICAS_MARKER_END);
|
|
48
|
+
return lines.join('\n');
|
|
49
|
+
}
|
|
50
|
+
function removeReplicasEntries(config) {
|
|
51
|
+
const lines = config.split('\n');
|
|
52
|
+
const result = [];
|
|
53
|
+
let inReplicasBlock = false;
|
|
54
|
+
for (const line of lines) {
|
|
55
|
+
if (line.trim() === REPLICAS_MARKER_START) {
|
|
56
|
+
inReplicasBlock = true;
|
|
57
|
+
continue;
|
|
58
|
+
}
|
|
59
|
+
if (line.trim() === REPLICAS_MARKER_END) {
|
|
60
|
+
inReplicasBlock = false;
|
|
61
|
+
continue;
|
|
62
|
+
}
|
|
63
|
+
if (!inReplicasBlock) {
|
|
64
|
+
result.push(line);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return result.join('\n');
|
|
68
|
+
}
|
|
69
|
+
function removeSSHConfigEntry(host) {
|
|
70
|
+
const config = readSSHConfig();
|
|
71
|
+
const lines = config.split('\n');
|
|
72
|
+
const result = [];
|
|
73
|
+
let inReplicasBlock = false;
|
|
74
|
+
let inTargetBlock = false;
|
|
75
|
+
for (const line of lines) {
|
|
76
|
+
if (line.trim() === REPLICAS_MARKER_START) {
|
|
77
|
+
inReplicasBlock = true;
|
|
78
|
+
const nextLines = lines.slice(lines.indexOf(line) + 1, lines.indexOf(line) + 3);
|
|
79
|
+
const hostLine = nextLines.find(l => l.trim().startsWith('Host '));
|
|
80
|
+
if (hostLine && hostLine.includes(host)) {
|
|
81
|
+
inTargetBlock = true;
|
|
82
|
+
continue;
|
|
83
|
+
}
|
|
84
|
+
result.push(line);
|
|
85
|
+
continue;
|
|
86
|
+
}
|
|
87
|
+
if (line.trim() === REPLICAS_MARKER_END) {
|
|
88
|
+
if (inTargetBlock) {
|
|
89
|
+
inTargetBlock = false;
|
|
90
|
+
inReplicasBlock = false;
|
|
91
|
+
continue;
|
|
92
|
+
}
|
|
93
|
+
inReplicasBlock = false;
|
|
94
|
+
result.push(line);
|
|
95
|
+
continue;
|
|
96
|
+
}
|
|
97
|
+
if (inTargetBlock) {
|
|
98
|
+
continue;
|
|
99
|
+
}
|
|
100
|
+
result.push(line);
|
|
101
|
+
}
|
|
102
|
+
writeSSHConfig(result.join('\n').trim() + '\n');
|
|
103
|
+
}
|
|
104
|
+
function addOrUpdateSSHConfigEntry(entry) {
|
|
105
|
+
let config = readSSHConfig();
|
|
106
|
+
const lines = config.split('\n');
|
|
107
|
+
const result = [];
|
|
108
|
+
let inReplicasBlock = false;
|
|
109
|
+
let inTargetBlock = false;
|
|
110
|
+
for (const line of lines) {
|
|
111
|
+
if (line.trim() === REPLICAS_MARKER_START) {
|
|
112
|
+
inReplicasBlock = true;
|
|
113
|
+
const nextLines = lines.slice(lines.indexOf(line) + 1, lines.indexOf(line) + 3);
|
|
114
|
+
const hostLine = nextLines.find(l => l.trim().startsWith('Host '));
|
|
115
|
+
if (hostLine && hostLine.includes(entry.host)) {
|
|
116
|
+
inTargetBlock = true;
|
|
117
|
+
continue;
|
|
118
|
+
}
|
|
119
|
+
result.push(line);
|
|
120
|
+
continue;
|
|
121
|
+
}
|
|
122
|
+
if (line.trim() === REPLICAS_MARKER_END) {
|
|
123
|
+
if (inTargetBlock) {
|
|
124
|
+
inTargetBlock = false;
|
|
125
|
+
inReplicasBlock = false;
|
|
126
|
+
continue;
|
|
127
|
+
}
|
|
128
|
+
inReplicasBlock = false;
|
|
129
|
+
result.push(line);
|
|
130
|
+
continue;
|
|
131
|
+
}
|
|
132
|
+
if (inTargetBlock) {
|
|
133
|
+
continue;
|
|
134
|
+
}
|
|
135
|
+
result.push(line);
|
|
136
|
+
}
|
|
137
|
+
config = result.join('\n');
|
|
138
|
+
const newEntry = generateConfigBlock(entry);
|
|
139
|
+
let finalConfig = config.trim();
|
|
140
|
+
if (finalConfig.length > 0) {
|
|
141
|
+
finalConfig += '\n\n';
|
|
142
|
+
}
|
|
143
|
+
finalConfig += newEntry + '\n';
|
|
144
|
+
writeSSHConfig(finalConfig);
|
|
145
|
+
}
|
|
146
|
+
function getWorkspaceHostAlias(workspaceName) {
|
|
147
|
+
return `replicas-${workspaceName.toLowerCase().replace(/[^a-z0-9-]/g, '-')}`;
|
|
148
|
+
}
|
|
149
|
+
//# sourceMappingURL=ssh-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ssh-config.js","sourceRoot":"","sources":["../../src/lib/ssh-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Workspace } from '../types';
|
|
2
|
+
export interface WorkspaceConnectionInfo {
|
|
3
|
+
workspace: Workspace;
|
|
4
|
+
sshKeyPath: string;
|
|
5
|
+
portMappings: Map<number, number>;
|
|
6
|
+
repoName: string | null;
|
|
7
|
+
}
|
|
8
|
+
export declare function prepareWorkspaceConnection(workspaceName: string, options: {
|
|
9
|
+
copy?: boolean;
|
|
10
|
+
}): Promise<WorkspaceConnectionInfo>;
|
|
11
|
+
//# sourceMappingURL=workspace-connection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace-connection.d.ts","sourceRoot":"","sources":["../../src/lib/workspace-connection.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAcrC,MAAM,WAAW,uBAAuB;IACtC,SAAS,EAAE,SAAS,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,wBAAsB,0BAA0B,CAC9C,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GAC1B,OAAO,CAAC,uBAAuB,CAAC,CAuIlC"}
|
|
@@ -0,0 +1,127 @@
|
|
|
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.prepareWorkspaceConnection = prepareWorkspaceConnection;
|
|
7
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
8
|
+
const prompts_1 = __importDefault(require("prompts"));
|
|
9
|
+
const path_1 = __importDefault(require("path"));
|
|
10
|
+
const fs_1 = __importDefault(require("fs"));
|
|
11
|
+
const config_1 = require("./config");
|
|
12
|
+
const api_1 = require("./api");
|
|
13
|
+
const ssh_1 = require("./ssh");
|
|
14
|
+
const git_1 = require("./git");
|
|
15
|
+
const replicas_config_1 = require("./replicas-config");
|
|
16
|
+
const ports_1 = require("./ports");
|
|
17
|
+
async function prepareWorkspaceConnection(workspaceName, options) {
|
|
18
|
+
const orgId = (0, config_1.getOrganizationId)();
|
|
19
|
+
if (!orgId) {
|
|
20
|
+
throw new Error('No organization selected. Please run "replicas org switch" first.');
|
|
21
|
+
}
|
|
22
|
+
// Step 1: Query workspaces by name
|
|
23
|
+
console.log(chalk_1.default.blue(`\nSearching for workspace: ${workspaceName}...`));
|
|
24
|
+
const response = await (0, api_1.orgAuthenticatedFetch)(`/api/workspaces?name=${encodeURIComponent(workspaceName)}`);
|
|
25
|
+
if (response.workspaces.length === 0) {
|
|
26
|
+
throw new Error(`No workspaces found with name matching "${workspaceName}".`);
|
|
27
|
+
}
|
|
28
|
+
// Step 2: If multiple workspaces, prompt user to select one
|
|
29
|
+
let selectedWorkspace;
|
|
30
|
+
if (response.workspaces.length === 1) {
|
|
31
|
+
selectedWorkspace = response.workspaces[0];
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
console.log(chalk_1.default.yellow(`\nFound ${response.workspaces.length} workspaces matching "${workspaceName}":`));
|
|
35
|
+
const selectResponse = await (0, prompts_1.default)({
|
|
36
|
+
type: 'select',
|
|
37
|
+
name: 'workspaceId',
|
|
38
|
+
message: 'Select a workspace:',
|
|
39
|
+
choices: response.workspaces.map(ws => ({
|
|
40
|
+
title: `${ws.name} (${ws.status || 'unknown'})`,
|
|
41
|
+
value: ws.id,
|
|
42
|
+
description: `IP: ${ws.ipv4_address || 'N/A'} | Instance: ${ws.instance_type || 'N/A'}`,
|
|
43
|
+
})),
|
|
44
|
+
});
|
|
45
|
+
if (!selectResponse.workspaceId) {
|
|
46
|
+
throw new Error('Workspace selection cancelled.');
|
|
47
|
+
}
|
|
48
|
+
selectedWorkspace = response.workspaces.find(ws => ws.id === selectResponse.workspaceId);
|
|
49
|
+
}
|
|
50
|
+
console.log(chalk_1.default.green(`\n✓ Selected workspace: ${selectedWorkspace.name}`));
|
|
51
|
+
console.log(chalk_1.default.gray(` IP: ${selectedWorkspace.ipv4_address}`));
|
|
52
|
+
console.log(chalk_1.default.gray(` Status: ${selectedWorkspace.status || 'unknown'}`));
|
|
53
|
+
if (!selectedWorkspace.ipv4_address) {
|
|
54
|
+
throw new Error('Workspace does not have an IP address. It may not be running yet.');
|
|
55
|
+
}
|
|
56
|
+
// Step 3: Get SSH key
|
|
57
|
+
console.log(chalk_1.default.blue('\nRetrieving SSH key...'));
|
|
58
|
+
const privateKey = await (0, ssh_1.getSSHKey)(selectedWorkspace.ssh_key_id);
|
|
59
|
+
// Write key to a temporary file for SSH
|
|
60
|
+
const keyPath = path_1.default.join(config_1.CONFIG_DIR, 'keys', `${selectedWorkspace.ssh_key_id}.pem`);
|
|
61
|
+
fs_1.default.writeFileSync(keyPath, privateKey, { mode: 0o600 });
|
|
62
|
+
console.log(chalk_1.default.green('✓ SSH key ready'));
|
|
63
|
+
// Step 4: Handle --copy flag
|
|
64
|
+
let repoName = null;
|
|
65
|
+
if (options.copy) {
|
|
66
|
+
if (!(0, git_1.isInsideGitRepo)()) {
|
|
67
|
+
console.log(chalk_1.default.yellow('\nWarning: Not inside a git repository. Skipping file copy.'));
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
repoName = (0, git_1.getGitRepoName)();
|
|
71
|
+
const replicasConfig = (0, replicas_config_1.readReplicasConfig)();
|
|
72
|
+
if (!replicasConfig || !replicasConfig.copy || replicasConfig.copy.length === 0) {
|
|
73
|
+
console.log(chalk_1.default.yellow('\nNo files to copy (replicas.json not found or empty).'));
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
console.log(chalk_1.default.blue(`\nCopying files to workspace (repo: ${repoName})...`));
|
|
77
|
+
const { valid, invalid } = (0, replicas_config_1.validateCopyFiles)(replicasConfig.copy);
|
|
78
|
+
if (invalid.length > 0) {
|
|
79
|
+
console.log(chalk_1.default.yellow(`\nWarning: ${invalid.length} file(s) not found locally:`));
|
|
80
|
+
invalid.forEach(file => console.log(chalk_1.default.gray(` - ${file}`)));
|
|
81
|
+
}
|
|
82
|
+
for (const file of valid) {
|
|
83
|
+
const localPath = (0, replicas_config_1.getAbsoluteCopyPath)(file);
|
|
84
|
+
const remotePath = `/home/ubuntu/workspaces/${repoName}/${file}`;
|
|
85
|
+
console.log(chalk_1.default.gray(` Copying ${file}...`));
|
|
86
|
+
try {
|
|
87
|
+
await (0, ssh_1.scpCopyFile)(keyPath, localPath, remotePath, selectedWorkspace.ipv4_address);
|
|
88
|
+
console.log(chalk_1.default.green(` ✓ ${file}`));
|
|
89
|
+
}
|
|
90
|
+
catch (error) {
|
|
91
|
+
console.log(chalk_1.default.red(` ✗ Failed to copy ${file}: ${error instanceof Error ? error.message : 'Unknown error'}`));
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
console.log(chalk_1.default.green(`\n✓ File copy complete (${valid.length} files)`));
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
if (!repoName && (0, git_1.isInsideGitRepo)()) {
|
|
99
|
+
try {
|
|
100
|
+
repoName = (0, git_1.getGitRepoName)();
|
|
101
|
+
}
|
|
102
|
+
catch {
|
|
103
|
+
// Ignore errors, repo name is optional
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
// Step 5: Handle port forwarding
|
|
107
|
+
const portMappings = new Map();
|
|
108
|
+
if ((0, git_1.isInsideGitRepo)()) {
|
|
109
|
+
const replicasConfig = (0, replicas_config_1.readReplicasConfig)();
|
|
110
|
+
if (replicasConfig && replicasConfig.ports && replicasConfig.ports.length > 0) {
|
|
111
|
+
console.log(chalk_1.default.blue('\nSetting up port forwarding...'));
|
|
112
|
+
const mappings = await (0, ports_1.mapPortsToLocal)(replicasConfig.ports);
|
|
113
|
+
for (const [remotePort, localPort] of mappings) {
|
|
114
|
+
portMappings.set(remotePort, localPort);
|
|
115
|
+
console.log(chalk_1.default.gray(` Forwarding localhost:${localPort} -> workspace:${remotePort}`));
|
|
116
|
+
}
|
|
117
|
+
console.log(chalk_1.default.green('✓ Port forwarding configured'));
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
return {
|
|
121
|
+
workspace: selectedWorkspace,
|
|
122
|
+
sshKeyPath: keyPath,
|
|
123
|
+
portMappings,
|
|
124
|
+
repoName,
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
//# sourceMappingURL=workspace-connection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace-connection.js","sourceRoot":"","sources":["../../src/lib/workspace-connection.ts"],"names":[],"mappings":"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"}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,MAAM;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,MAAM;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,IAAI;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,MAAM,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,MAAM;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,eAAe,EAAE,MAAM,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,qBAAqB,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;CAClB"}
|