replicas-cli 0.2.25 → 0.2.27
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/index.js +2873 -313
- package/package.json +4 -3
- package/dist/commands/claude-auth.d.ts +0 -5
- package/dist/commands/claude-auth.d.ts.map +0 -1
- package/dist/commands/claude-auth.js +0 -52
- package/dist/commands/claude-auth.js.map +0 -1
- package/dist/commands/code.d.ts +0 -4
- package/dist/commands/code.d.ts.map +0 -1
- package/dist/commands/code.js +0 -67
- package/dist/commands/code.js.map +0 -1
- package/dist/commands/codex-auth.d.ts +0 -5
- package/dist/commands/codex-auth.d.ts.map +0 -1
- package/dist/commands/codex-auth.js +0 -52
- package/dist/commands/codex-auth.js.map +0 -1
- package/dist/commands/config.d.ts +0 -4
- package/dist/commands/config.d.ts.map +0 -1
- package/dist/commands/config.js +0 -74
- package/dist/commands/config.js.map +0 -1
- package/dist/commands/connect.d.ts +0 -4
- package/dist/commands/connect.d.ts.map +0 -1
- package/dist/commands/connect.js +0 -40
- package/dist/commands/connect.js.map +0 -1
- package/dist/commands/dev-sync.d.ts +0 -2
- package/dist/commands/dev-sync.d.ts.map +0 -1
- package/dist/commands/dev-sync.js +0 -78
- package/dist/commands/dev-sync.js.map +0 -1
- package/dist/commands/init.d.ts +0 -4
- package/dist/commands/init.d.ts.map +0 -1
- package/dist/commands/init.js +0 -45
- package/dist/commands/init.js.map +0 -1
- package/dist/commands/login.d.ts +0 -2
- package/dist/commands/login.d.ts.map +0 -1
- package/dist/commands/login.js +0 -203
- package/dist/commands/login.js.map +0 -1
- package/dist/commands/logout.d.ts +0 -2
- package/dist/commands/logout.d.ts.map +0 -1
- package/dist/commands/logout.js +0 -17
- package/dist/commands/logout.js.map +0 -1
- package/dist/commands/org.d.ts +0 -3
- package/dist/commands/org.d.ts.map +0 -1
- package/dist/commands/org.js +0 -83
- package/dist/commands/org.js.map +0 -1
- package/dist/commands/replica.d.ts +0 -23
- package/dist/commands/replica.d.ts.map +0 -1
- package/dist/commands/replica.js +0 -448
- package/dist/commands/replica.js.map +0 -1
- package/dist/commands/repositories.d.ts +0 -2
- package/dist/commands/repositories.d.ts.map +0 -1
- package/dist/commands/repositories.js +0 -41
- package/dist/commands/repositories.js.map +0 -1
- package/dist/commands/tools.d.ts +0 -2
- package/dist/commands/tools.d.ts.map +0 -1
- package/dist/commands/tools.js +0 -70
- package/dist/commands/tools.js.map +0 -1
- package/dist/commands/whoami.d.ts +0 -2
- package/dist/commands/whoami.d.ts.map +0 -1
- package/dist/commands/whoami.js +0 -31
- package/dist/commands/whoami.js.map +0 -1
- package/dist/index.d.ts +0 -4
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/lib/api.d.ts +0 -7
- package/dist/lib/api.d.ts.map +0 -1
- package/dist/lib/api.js +0 -81
- package/dist/lib/api.js.map +0 -1
- package/dist/lib/auth.d.ts +0 -4
- package/dist/lib/auth.d.ts.map +0 -1
- package/dist/lib/auth.js +0 -62
- package/dist/lib/auth.js.map +0 -1
- package/dist/lib/claude-oauth.d.ts +0 -10
- package/dist/lib/claude-oauth.d.ts.map +0 -1
- package/dist/lib/claude-oauth.js +0 -131
- package/dist/lib/claude-oauth.js.map +0 -1
- package/dist/lib/codex-oauth.d.ts +0 -11
- package/dist/lib/codex-oauth.d.ts.map +0 -1
- package/dist/lib/codex-oauth.js +0 -183
- package/dist/lib/codex-oauth.js.map +0 -1
- package/dist/lib/config.d.ts +0 -12
- package/dist/lib/config.d.ts.map +0 -1
- package/dist/lib/config.js +0 -84
- package/dist/lib/config.js.map +0 -1
- package/dist/lib/git.d.ts +0 -4
- package/dist/lib/git.d.ts.map +0 -1
- package/dist/lib/git.js +0 -39
- package/dist/lib/git.js.map +0 -1
- package/dist/lib/organization.d.ts +0 -5
- package/dist/lib/organization.d.ts.map +0 -1
- package/dist/lib/organization.js +0 -29
- package/dist/lib/organization.js.map +0 -1
- package/dist/lib/pkce.d.ts +0 -14
- package/dist/lib/pkce.d.ts.map +0 -1
- package/dist/lib/pkce.js +0 -37
- package/dist/lib/pkce.js.map +0 -1
- package/dist/lib/ports.d.ts +0 -3
- package/dist/lib/ports.d.ts.map +0 -1
- package/dist/lib/ports.js +0 -44
- package/dist/lib/ports.js.map +0 -1
- package/dist/lib/replicas-config.d.ts +0 -8
- package/dist/lib/replicas-config.d.ts.map +0 -1
- package/dist/lib/replicas-config.js +0 -64
- package/dist/lib/replicas-config.js.map +0 -1
- package/dist/lib/ssh-config.d.ts +0 -12
- package/dist/lib/ssh-config.d.ts.map +0 -1
- package/dist/lib/ssh-config.js +0 -122
- package/dist/lib/ssh-config.js.map +0 -1
- package/dist/lib/ssh.d.ts +0 -5
- package/dist/lib/ssh.d.ts.map +0 -1
- package/dist/lib/ssh.js +0 -82
- package/dist/lib/ssh.js.map +0 -1
- package/dist/lib/supabase.d.ts +0 -5
- package/dist/lib/supabase.d.ts.map +0 -1
- package/dist/lib/supabase.js +0 -15
- package/dist/lib/supabase.js.map +0 -1
- package/dist/lib/version-check.d.ts +0 -2
- package/dist/lib/version-check.d.ts.map +0 -1
- package/dist/lib/version-check.js +0 -44
- package/dist/lib/version-check.js.map +0 -1
- package/dist/lib/workspace-connection.d.ts +0 -11
- package/dist/lib/workspace-connection.d.ts.map +0 -1
- package/dist/lib/workspace-connection.js +0 -132
- package/dist/lib/workspace-connection.js.map +0 -1
- package/dist/types/index.d.ts +0 -52
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/index.js +0 -3
- package/dist/types/index.js.map +0 -1
package/dist/lib/config.js
DELETED
|
@@ -1,84 +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.CONFIG_DIR = void 0;
|
|
7
|
-
exports.readConfig = readConfig;
|
|
8
|
-
exports.writeConfig = writeConfig;
|
|
9
|
-
exports.deleteConfig = deleteConfig;
|
|
10
|
-
exports.isAuthenticated = isAuthenticated;
|
|
11
|
-
exports.setOrganizationId = setOrganizationId;
|
|
12
|
-
exports.getOrganizationId = getOrganizationId;
|
|
13
|
-
exports.setIdeCommand = setIdeCommand;
|
|
14
|
-
exports.getIdeCommand = getIdeCommand;
|
|
15
|
-
const fs_1 = __importDefault(require("fs"));
|
|
16
|
-
const path_1 = __importDefault(require("path"));
|
|
17
|
-
const os_1 = __importDefault(require("os"));
|
|
18
|
-
const CONFIG_DIR = path_1.default.join(os_1.default.homedir(), '.replicas');
|
|
19
|
-
exports.CONFIG_DIR = CONFIG_DIR;
|
|
20
|
-
const CONFIG_FILE = path_1.default.join(CONFIG_DIR, 'config.json');
|
|
21
|
-
function ensureConfigDir() {
|
|
22
|
-
if (!fs_1.default.existsSync(CONFIG_DIR)) {
|
|
23
|
-
fs_1.default.mkdirSync(CONFIG_DIR, { recursive: true, mode: 0o700 });
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
function readConfig() {
|
|
27
|
-
if (!fs_1.default.existsSync(CONFIG_FILE)) {
|
|
28
|
-
return null;
|
|
29
|
-
}
|
|
30
|
-
try {
|
|
31
|
-
const data = fs_1.default.readFileSync(CONFIG_FILE, 'utf-8');
|
|
32
|
-
return JSON.parse(data);
|
|
33
|
-
}
|
|
34
|
-
catch (error) {
|
|
35
|
-
console.error('Error reading config file:', error);
|
|
36
|
-
return null;
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
function writeConfig(config) {
|
|
40
|
-
ensureConfigDir();
|
|
41
|
-
try {
|
|
42
|
-
fs_1.default.writeFileSync(CONFIG_FILE, JSON.stringify(config, null, 2), {
|
|
43
|
-
mode: 0o600, // Only owner can read/write
|
|
44
|
-
});
|
|
45
|
-
}
|
|
46
|
-
catch (error) {
|
|
47
|
-
console.error('Error writing config file:', error);
|
|
48
|
-
throw error;
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
function deleteConfig() {
|
|
52
|
-
if (fs_1.default.existsSync(CONFIG_FILE)) {
|
|
53
|
-
fs_1.default.unlinkSync(CONFIG_FILE);
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
function isAuthenticated() {
|
|
57
|
-
const config = readConfig();
|
|
58
|
-
return config !== null && !!config.access_token;
|
|
59
|
-
}
|
|
60
|
-
function setOrganizationId(organizationId) {
|
|
61
|
-
const config = readConfig();
|
|
62
|
-
if (!config) {
|
|
63
|
-
throw new Error('No config file found. Please login first.');
|
|
64
|
-
}
|
|
65
|
-
config.organization_id = organizationId;
|
|
66
|
-
writeConfig(config);
|
|
67
|
-
}
|
|
68
|
-
function getOrganizationId() {
|
|
69
|
-
const config = readConfig();
|
|
70
|
-
return config?.organization_id || null;
|
|
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
|
-
}
|
|
84
|
-
//# sourceMappingURL=config.js.map
|
package/dist/lib/config.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/git.d.ts
DELETED
package/dist/lib/git.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../../src/lib/git.ts"],"names":[],"mappings":"AAGA,wBAAgB,UAAU,IAAI,MAAM,CAUnC;AAED,wBAAgB,cAAc,IAAI,MAAM,CAGvC;AAED,wBAAgB,eAAe,IAAI,OAAO,CAUzC"}
|
package/dist/lib/git.js
DELETED
|
@@ -1,39 +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.getGitRoot = getGitRoot;
|
|
7
|
-
exports.getGitRepoName = getGitRepoName;
|
|
8
|
-
exports.isInsideGitRepo = isInsideGitRepo;
|
|
9
|
-
const child_process_1 = require("child_process");
|
|
10
|
-
const path_1 = __importDefault(require("path"));
|
|
11
|
-
function getGitRoot() {
|
|
12
|
-
try {
|
|
13
|
-
const root = (0, child_process_1.execSync)('git rev-parse --show-toplevel', {
|
|
14
|
-
encoding: 'utf-8',
|
|
15
|
-
stdio: ['pipe', 'pipe', 'pipe'],
|
|
16
|
-
}).trim();
|
|
17
|
-
return root;
|
|
18
|
-
}
|
|
19
|
-
catch (error) {
|
|
20
|
-
throw new Error('Not inside a git repository');
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
function getGitRepoName() {
|
|
24
|
-
const root = getGitRoot();
|
|
25
|
-
return path_1.default.basename(root);
|
|
26
|
-
}
|
|
27
|
-
function isInsideGitRepo() {
|
|
28
|
-
try {
|
|
29
|
-
(0, child_process_1.execSync)('git rev-parse --is-inside-work-tree', {
|
|
30
|
-
encoding: 'utf-8',
|
|
31
|
-
stdio: ['pipe', 'pipe', 'pipe'],
|
|
32
|
-
});
|
|
33
|
-
return true;
|
|
34
|
-
}
|
|
35
|
-
catch {
|
|
36
|
-
return false;
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
//# sourceMappingURL=git.js.map
|
package/dist/lib/git.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"git.js","sourceRoot":"","sources":["../../src/lib/git.ts"],"names":[],"mappings":";;;;;AAGA,gCAUC;AAED,wCAGC;AAED,0CAUC;AA9BD,iDAAyC;AACzC,gDAAwB;AAExB,SAAgB,UAAU;IACxB,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,IAAA,wBAAQ,EAAC,+BAA+B,EAAE;YACrD,QAAQ,EAAE,OAAO;YACjB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;SAChC,CAAC,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;IACjD,CAAC;AACH,CAAC;AAED,SAAgB,cAAc;IAC5B,MAAM,IAAI,GAAG,UAAU,EAAE,CAAC;IAC1B,OAAO,cAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC7B,CAAC;AAED,SAAgB,eAAe;IAC7B,IAAI,CAAC;QACH,IAAA,wBAAQ,EAAC,qCAAqC,EAAE;YAC9C,QAAQ,EAAE,OAAO;YACjB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;SAChC,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import { Organization } from '../types';
|
|
2
|
-
export declare function fetchOrganizations(): Promise<Organization[]>;
|
|
3
|
-
export declare function setActiveOrganization(organizationId: string): Promise<void>;
|
|
4
|
-
export declare function ensureOrganization(): Promise<string>;
|
|
5
|
-
//# sourceMappingURL=organization.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"organization.d.ts","sourceRoot":"","sources":["../../src/lib/organization.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAQxC,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC,CAKlE;AAED,wBAAsB,qBAAqB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CASjF;AAED,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,MAAM,CAAC,CAW1D"}
|
package/dist/lib/organization.js
DELETED
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.fetchOrganizations = fetchOrganizations;
|
|
4
|
-
exports.setActiveOrganization = setActiveOrganization;
|
|
5
|
-
exports.ensureOrganization = ensureOrganization;
|
|
6
|
-
const api_1 = require("./api");
|
|
7
|
-
const config_1 = require("./config");
|
|
8
|
-
async function fetchOrganizations() {
|
|
9
|
-
const response = await (0, api_1.authenticatedFetch)('/v1/user/organizations');
|
|
10
|
-
return response.organizations;
|
|
11
|
-
}
|
|
12
|
-
async function setActiveOrganization(organizationId) {
|
|
13
|
-
const organizations = await fetchOrganizations();
|
|
14
|
-
const organization = organizations.find(org => org.id === organizationId);
|
|
15
|
-
if (!organization) {
|
|
16
|
-
throw new Error(`Organization with ID ${organizationId} not found or you don't have access to it.`);
|
|
17
|
-
}
|
|
18
|
-
(0, config_1.setOrganizationId)(organizationId);
|
|
19
|
-
}
|
|
20
|
-
async function ensureOrganization() {
|
|
21
|
-
const organizations = await fetchOrganizations();
|
|
22
|
-
if (organizations.length === 0) {
|
|
23
|
-
throw new Error('You are not a member of any organization. Please contact support.');
|
|
24
|
-
}
|
|
25
|
-
const defaultOrg = organizations[0];
|
|
26
|
-
(0, config_1.setOrganizationId)(defaultOrg.id);
|
|
27
|
-
return defaultOrg.id;
|
|
28
|
-
}
|
|
29
|
-
//# sourceMappingURL=organization.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"organization.js","sourceRoot":"","sources":["../../src/lib/organization.ts"],"names":[],"mappings":";;AAQA,gDAKC;AAED,sDASC;AAED,gDAWC;AApCD,+BAA2C;AAC3C,qCAAwE;AAMjE,KAAK,UAAU,kBAAkB;IACtC,MAAM,QAAQ,GAAG,MAAM,IAAA,wBAAkB,EACvC,wBAAwB,CACzB,CAAC;IACF,OAAO,QAAQ,CAAC,aAAa,CAAC;AAChC,CAAC;AAEM,KAAK,UAAU,qBAAqB,CAAC,cAAsB;IAChE,MAAM,aAAa,GAAG,MAAM,kBAAkB,EAAE,CAAC;IACjD,MAAM,YAAY,GAAG,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,cAAc,CAAC,CAAC;IAE1E,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,wBAAwB,cAAc,4CAA4C,CAAC,CAAC;IACtG,CAAC;IAED,IAAA,0BAAuB,EAAC,cAAc,CAAC,CAAC;AAC1C,CAAC;AAEM,KAAK,UAAU,kBAAkB;IACtC,MAAM,aAAa,GAAG,MAAM,kBAAkB,EAAE,CAAC;IAEjD,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CAAC,mEAAmE,CAAC,CAAC;IACvF,CAAC;IAED,MAAM,UAAU,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;IACpC,IAAA,0BAAuB,EAAC,UAAU,CAAC,EAAE,CAAC,CAAC;IAEvC,OAAO,UAAU,CAAC,EAAE,CAAC;AACvB,CAAC"}
|
package/dist/lib/pkce.d.ts
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
export interface PkceCodes {
|
|
2
|
-
codeVerifier: string;
|
|
3
|
-
codeChallenge: string;
|
|
4
|
-
}
|
|
5
|
-
/**
|
|
6
|
-
* Generate PKCE (Proof Key for Code Exchange) codes for OAuth flow
|
|
7
|
-
* Implements RFC 7636 for enhanced security
|
|
8
|
-
*/
|
|
9
|
-
export declare function generatePkceCodes(): PkceCodes;
|
|
10
|
-
/**
|
|
11
|
-
* Generate random state for OAuth flow
|
|
12
|
-
*/
|
|
13
|
-
export declare function generateState(): string;
|
|
14
|
-
//# sourceMappingURL=pkce.d.ts.map
|
package/dist/lib/pkce.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pkce.d.ts","sourceRoot":"","sources":["../../src/lib/pkce.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,SAAS;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,SAAS,CAsB7C;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAEtC"}
|
package/dist/lib/pkce.js
DELETED
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.generatePkceCodes = generatePkceCodes;
|
|
4
|
-
exports.generateState = generateState;
|
|
5
|
-
const crypto_1 = require("crypto");
|
|
6
|
-
/**
|
|
7
|
-
* Generate PKCE (Proof Key for Code Exchange) codes for OAuth flow
|
|
8
|
-
* Implements RFC 7636 for enhanced security
|
|
9
|
-
*/
|
|
10
|
-
function generatePkceCodes() {
|
|
11
|
-
// Generate 32 random bytes for code verifier
|
|
12
|
-
const verifierBytes = (0, crypto_1.randomBytes)(32);
|
|
13
|
-
const codeVerifier = verifierBytes
|
|
14
|
-
.toString('base64')
|
|
15
|
-
.replace(/\+/g, '-')
|
|
16
|
-
.replace(/\//g, '_')
|
|
17
|
-
.replace(/=+$/, '');
|
|
18
|
-
// Create SHA256 hash for code challenge
|
|
19
|
-
const hash = (0, crypto_1.createHash)('sha256');
|
|
20
|
-
hash.update(codeVerifier);
|
|
21
|
-
const codeChallenge = hash
|
|
22
|
-
.digest('base64')
|
|
23
|
-
.replace(/\+/g, '-')
|
|
24
|
-
.replace(/\//g, '_')
|
|
25
|
-
.replace(/=+$/, '');
|
|
26
|
-
return {
|
|
27
|
-
codeVerifier,
|
|
28
|
-
codeChallenge,
|
|
29
|
-
};
|
|
30
|
-
}
|
|
31
|
-
/**
|
|
32
|
-
* Generate random state for OAuth flow
|
|
33
|
-
*/
|
|
34
|
-
function generateState() {
|
|
35
|
-
return (0, crypto_1.randomBytes)(16).toString('hex');
|
|
36
|
-
}
|
|
37
|
-
//# sourceMappingURL=pkce.js.map
|
package/dist/lib/pkce.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pkce.js","sourceRoot":"","sources":["../../src/lib/pkce.ts"],"names":[],"mappings":";;AAWA,8CAsBC;AAKD,sCAEC;AAxCD,mCAAiD;AAOjD;;;GAGG;AACH,SAAgB,iBAAiB;IAC/B,6CAA6C;IAC7C,MAAM,aAAa,GAAG,IAAA,oBAAW,EAAC,EAAE,CAAC,CAAC;IACtC,MAAM,YAAY,GAAG,aAAa;SAC/B,QAAQ,CAAC,QAAQ,CAAC;SAClB,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;SACnB,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;SACnB,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAEtB,wCAAwC;IACxC,MAAM,IAAI,GAAG,IAAA,mBAAU,EAAC,QAAQ,CAAC,CAAC;IAClC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IAC1B,MAAM,aAAa,GAAG,IAAI;SACvB,MAAM,CAAC,QAAQ,CAAC;SAChB,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;SACnB,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;SACnB,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAEtB,OAAO;QACL,YAAY;QACZ,aAAa;KACd,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAgB,aAAa;IAC3B,OAAO,IAAA,oBAAW,EAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACzC,CAAC"}
|
package/dist/lib/ports.d.ts
DELETED
package/dist/lib/ports.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ports.d.ts","sourceRoot":"","sources":["../../src/lib/ports.ts"],"names":[],"mappings":"AAqBA,wBAAsB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAe5E;AAED,wBAAsB,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CASzF"}
|
package/dist/lib/ports.js
DELETED
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.findAvailablePort = findAvailablePort;
|
|
4
|
-
exports.mapPortsToLocal = mapPortsToLocal;
|
|
5
|
-
const child_process_1 = require("child_process");
|
|
6
|
-
async function isPortAvailable(port) {
|
|
7
|
-
try {
|
|
8
|
-
// Use lsof to check if anything is listening on this port
|
|
9
|
-
// -i :PORT - show network files on this port
|
|
10
|
-
// -P - show port numbers (not service names)
|
|
11
|
-
// -n - don't resolve hostnames
|
|
12
|
-
(0, child_process_1.execSync)(`lsof -i :${port} -P -n | grep LISTEN`, {
|
|
13
|
-
encoding: 'utf-8',
|
|
14
|
-
stdio: ['pipe', 'pipe', 'pipe'],
|
|
15
|
-
});
|
|
16
|
-
return false;
|
|
17
|
-
}
|
|
18
|
-
catch (error) {
|
|
19
|
-
// lsof returns exit code 1 if nothing found, which throws an error
|
|
20
|
-
// This means the port is available
|
|
21
|
-
return true;
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
async function findAvailablePort(desiredPort) {
|
|
25
|
-
const baseHundred = Math.floor(desiredPort / 100) * 100;
|
|
26
|
-
const maxPort = desiredPort >= baseHundred && desiredPort < baseHundred + 100
|
|
27
|
-
? baseHundred + 99
|
|
28
|
-
: desiredPort + 100;
|
|
29
|
-
for (let port = desiredPort; port <= maxPort; port++) {
|
|
30
|
-
if (await isPortAvailable(port)) {
|
|
31
|
-
return port;
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
throw new Error(`Could not find available port in range ${desiredPort}-${maxPort}`);
|
|
35
|
-
}
|
|
36
|
-
async function mapPortsToLocal(remotePorts) {
|
|
37
|
-
const portMap = new Map();
|
|
38
|
-
for (const remotePort of remotePorts) {
|
|
39
|
-
const localPort = await findAvailablePort(remotePort);
|
|
40
|
-
portMap.set(remotePort, localPort);
|
|
41
|
-
}
|
|
42
|
-
return portMap;
|
|
43
|
-
}
|
|
44
|
-
//# sourceMappingURL=ports.js.map
|
package/dist/lib/ports.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ports.js","sourceRoot":"","sources":["../../src/lib/ports.ts"],"names":[],"mappings":";;AAqBA,8CAeC;AAED,0CASC;AA/CD,iDAAyC;AAEzC,KAAK,UAAU,eAAe,CAAC,IAAY;IACzC,IAAI,CAAC;QACH,0DAA0D;QAC1D,6CAA6C;QAC7C,6CAA6C;QAC7C,+BAA+B;QAC/B,IAAA,wBAAQ,EAAC,YAAY,IAAI,sBAAsB,EAAE;YAC/C,QAAQ,EAAE,OAAO;YACjB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;SAChC,CAAC,CAAC;QAEH,OAAO,KAAK,CAAC;IACf,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,mEAAmE;QACnE,mCAAmC;QACnC,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAEM,KAAK,UAAU,iBAAiB,CAAC,WAAmB;IACzD,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;IACxD,MAAM,OAAO,GAAG,WAAW,IAAI,WAAW,IAAI,WAAW,GAAG,WAAW,GAAG,GAAG;QAC3E,CAAC,CAAC,WAAW,GAAG,EAAE;QAClB,CAAC,CAAC,WAAW,GAAG,GAAG,CAAC;IAEtB,KAAK,IAAI,IAAI,GAAG,WAAW,EAAE,IAAI,IAAI,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC;QACrD,IAAI,MAAM,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC;YAChC,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,MAAM,IAAI,KAAK,CACb,0CAA0C,WAAW,IAAI,OAAO,EAAE,CACnE,CAAC;AACJ,CAAC;AAEM,KAAK,UAAU,eAAe,CAAC,WAAqB;IACzD,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;IAE1C,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;QACrC,MAAM,SAAS,GAAG,MAAM,iBAAiB,CAAC,UAAU,CAAC,CAAC;QACtD,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;IACrC,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import { ReplicasConfig } from '../types';
|
|
2
|
-
export declare function readReplicasConfig(): ReplicasConfig | null;
|
|
3
|
-
export declare function validateCopyFiles(copyFiles: string[]): {
|
|
4
|
-
valid: string[];
|
|
5
|
-
invalid: string[];
|
|
6
|
-
};
|
|
7
|
-
export declare function getAbsoluteCopyPath(relativePath: string): string;
|
|
8
|
-
//# sourceMappingURL=replicas-config.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"replicas-config.d.ts","sourceRoot":"","sources":["../../src/lib/replicas-config.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAG1C,wBAAgB,kBAAkB,IAAI,cAAc,GAAG,IAAI,CAuC1D;AAED,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG;IAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CAe7F;AAED,wBAAgB,mBAAmB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAGhE"}
|
|
@@ -1,64 +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.readReplicasConfig = readReplicasConfig;
|
|
7
|
-
exports.validateCopyFiles = validateCopyFiles;
|
|
8
|
-
exports.getAbsoluteCopyPath = getAbsoluteCopyPath;
|
|
9
|
-
const fs_1 = __importDefault(require("fs"));
|
|
10
|
-
const path_1 = __importDefault(require("path"));
|
|
11
|
-
const git_1 = require("./git");
|
|
12
|
-
function readReplicasConfig() {
|
|
13
|
-
try {
|
|
14
|
-
const gitRoot = (0, git_1.getGitRoot)();
|
|
15
|
-
const configPath = path_1.default.join(gitRoot, 'replicas.json');
|
|
16
|
-
if (!fs_1.default.existsSync(configPath)) {
|
|
17
|
-
return null;
|
|
18
|
-
}
|
|
19
|
-
const data = fs_1.default.readFileSync(configPath, 'utf-8');
|
|
20
|
-
const config = JSON.parse(data);
|
|
21
|
-
if (config.copy && !Array.isArray(config.copy)) {
|
|
22
|
-
throw new Error('Invalid replicas.json: "copy" must be an array of file paths');
|
|
23
|
-
}
|
|
24
|
-
if (config.ports && !Array.isArray(config.ports)) {
|
|
25
|
-
throw new Error('Invalid replicas.json: "ports" must be an array of port numbers');
|
|
26
|
-
}
|
|
27
|
-
if (config.ports && !config.ports.every(p => typeof p === 'number')) {
|
|
28
|
-
throw new Error('Invalid replicas.json: all ports must be numbers');
|
|
29
|
-
}
|
|
30
|
-
if (config.organizationId && typeof config.organizationId !== 'string') {
|
|
31
|
-
throw new Error('Invalid replicas.json: "organizationId" must be a string');
|
|
32
|
-
}
|
|
33
|
-
if (config.systemPrompt && typeof config.systemPrompt !== 'string') {
|
|
34
|
-
throw new Error('Invalid replicas.json: "systemPrompt" must be a string');
|
|
35
|
-
}
|
|
36
|
-
return config;
|
|
37
|
-
}
|
|
38
|
-
catch (error) {
|
|
39
|
-
if (error instanceof Error) {
|
|
40
|
-
throw error;
|
|
41
|
-
}
|
|
42
|
-
throw new Error('Failed to read replicas.json');
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
function validateCopyFiles(copyFiles) {
|
|
46
|
-
const gitRoot = (0, git_1.getGitRoot)();
|
|
47
|
-
const valid = [];
|
|
48
|
-
const invalid = [];
|
|
49
|
-
for (const file of copyFiles) {
|
|
50
|
-
const fullPath = path_1.default.join(gitRoot, file);
|
|
51
|
-
if (fs_1.default.existsSync(fullPath)) {
|
|
52
|
-
valid.push(file);
|
|
53
|
-
}
|
|
54
|
-
else {
|
|
55
|
-
invalid.push(file);
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
return { valid, invalid };
|
|
59
|
-
}
|
|
60
|
-
function getAbsoluteCopyPath(relativePath) {
|
|
61
|
-
const gitRoot = (0, git_1.getGitRoot)();
|
|
62
|
-
return path_1.default.join(gitRoot, relativePath);
|
|
63
|
-
}
|
|
64
|
-
//# sourceMappingURL=replicas-config.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"replicas-config.js","sourceRoot":"","sources":["../../src/lib/replicas-config.ts"],"names":[],"mappings":";;;;;AAKA,gDAuCC;AAED,8CAeC;AAED,kDAGC;AAlED,4CAAoB;AACpB,gDAAwB;AAExB,+BAAmC;AAEnC,SAAgB,kBAAkB;IAChC,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAA,gBAAU,GAAE,CAAC;QAC7B,MAAM,UAAU,GAAG,cAAI,CAAC,IAAI,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;QAEvD,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC/B,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,IAAI,GAAG,YAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAClD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAmB,CAAC;QAElD,IAAI,MAAM,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YAC/C,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAC;QAClF,CAAC;QAED,IAAI,MAAM,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;YACjD,MAAM,IAAI,KAAK,CAAC,iEAAiE,CAAC,CAAC;QACrF,CAAC;QAED,IAAI,MAAM,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,EAAE,CAAC;YACpE,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;QACtE,CAAC;QAED,IAAI,MAAM,CAAC,cAAc,IAAI,OAAO,MAAM,CAAC,cAAc,KAAK,QAAQ,EAAE,CAAC;YACvE,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;QAC9E,CAAC;QAED,IAAI,MAAM,CAAC,YAAY,IAAI,OAAO,MAAM,CAAC,YAAY,KAAK,QAAQ,EAAE,CAAC;YACnE,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;QAC5E,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC3B,MAAM,KAAK,CAAC;QACd,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;IAClD,CAAC;AACH,CAAC;AAED,SAAgB,iBAAiB,CAAC,SAAmB;IACnD,MAAM,OAAO,GAAG,IAAA,gBAAU,GAAE,CAAC;IAC7B,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;QAC7B,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAC1C,IAAI,YAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5B,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnB,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrB,CAAC;IACH,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;AAC5B,CAAC;AAED,SAAgB,mBAAmB,CAAC,YAAoB;IACtD,MAAM,OAAO,GAAG,IAAA,gBAAU,GAAE,CAAC;IAC7B,OAAO,cAAI,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;AAC1C,CAAC"}
|
package/dist/lib/ssh-config.d.ts
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
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;AA8CD,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAmCvD;AAED,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI,CA8CrE;AAED,wBAAgB,qBAAqB,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAEnE"}
|
package/dist/lib/ssh-config.js
DELETED
|
@@ -1,122 +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.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 removeSSHConfigEntry(host) {
|
|
51
|
-
const config = readSSHConfig();
|
|
52
|
-
const lines = config.split('\n');
|
|
53
|
-
const result = [];
|
|
54
|
-
let inTargetBlock = false;
|
|
55
|
-
for (const line of lines) {
|
|
56
|
-
if (line.trim() === REPLICAS_MARKER_START) {
|
|
57
|
-
const nextLines = lines.slice(lines.indexOf(line) + 1, lines.indexOf(line) + 3);
|
|
58
|
-
const hostLine = nextLines.find(l => l.trim().startsWith('Host '));
|
|
59
|
-
if (hostLine && hostLine.includes(host)) {
|
|
60
|
-
inTargetBlock = true;
|
|
61
|
-
continue;
|
|
62
|
-
}
|
|
63
|
-
result.push(line);
|
|
64
|
-
continue;
|
|
65
|
-
}
|
|
66
|
-
if (line.trim() === REPLICAS_MARKER_END) {
|
|
67
|
-
if (inTargetBlock) {
|
|
68
|
-
inTargetBlock = false;
|
|
69
|
-
continue;
|
|
70
|
-
}
|
|
71
|
-
result.push(line);
|
|
72
|
-
continue;
|
|
73
|
-
}
|
|
74
|
-
if (inTargetBlock) {
|
|
75
|
-
continue;
|
|
76
|
-
}
|
|
77
|
-
result.push(line);
|
|
78
|
-
}
|
|
79
|
-
writeSSHConfig(result.join('\n').trim() + '\n');
|
|
80
|
-
}
|
|
81
|
-
function addOrUpdateSSHConfigEntry(entry) {
|
|
82
|
-
let config = readSSHConfig();
|
|
83
|
-
const lines = config.split('\n');
|
|
84
|
-
const result = [];
|
|
85
|
-
let inTargetBlock = false;
|
|
86
|
-
for (const line of lines) {
|
|
87
|
-
if (line.trim() === REPLICAS_MARKER_START) {
|
|
88
|
-
const nextLines = lines.slice(lines.indexOf(line) + 1, lines.indexOf(line) + 3);
|
|
89
|
-
const hostLine = nextLines.find(l => l.trim().startsWith('Host '));
|
|
90
|
-
if (hostLine && hostLine.includes(entry.host)) {
|
|
91
|
-
inTargetBlock = true;
|
|
92
|
-
continue;
|
|
93
|
-
}
|
|
94
|
-
result.push(line);
|
|
95
|
-
continue;
|
|
96
|
-
}
|
|
97
|
-
if (line.trim() === REPLICAS_MARKER_END) {
|
|
98
|
-
if (inTargetBlock) {
|
|
99
|
-
inTargetBlock = false;
|
|
100
|
-
continue;
|
|
101
|
-
}
|
|
102
|
-
result.push(line);
|
|
103
|
-
continue;
|
|
104
|
-
}
|
|
105
|
-
if (inTargetBlock) {
|
|
106
|
-
continue;
|
|
107
|
-
}
|
|
108
|
-
result.push(line);
|
|
109
|
-
}
|
|
110
|
-
config = result.join('\n');
|
|
111
|
-
const newEntry = generateConfigBlock(entry);
|
|
112
|
-
let finalConfig = config.trim();
|
|
113
|
-
if (finalConfig.length > 0) {
|
|
114
|
-
finalConfig += '\n\n';
|
|
115
|
-
}
|
|
116
|
-
finalConfig += newEntry + '\n';
|
|
117
|
-
writeSSHConfig(finalConfig);
|
|
118
|
-
}
|
|
119
|
-
function getWorkspaceHostAlias(workspaceName) {
|
|
120
|
-
return `replicas-${workspaceName.toLowerCase().replace(/[^a-z0-9-]/g, '-')}`;
|
|
121
|
-
}
|
|
122
|
-
//# sourceMappingURL=ssh-config.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ssh-config.js","sourceRoot":"","sources":["../../src/lib/ssh-config.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/ssh.d.ts
DELETED
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
export declare function hasSSHKeyLocally(sshKeyId: string): boolean;
|
|
2
|
-
export declare function getSSHKey(sshKeyId: string): Promise<string>;
|
|
3
|
-
export declare function scpCopyFile(privateKeyPath: string, localPath: string, remotePath: string, remoteHost: string): Promise<void>;
|
|
4
|
-
export declare function connectSSH(privateKeyPath: string, remoteHost: string, portMappings: Map<number, number>): Promise<void>;
|
|
5
|
-
//# sourceMappingURL=ssh.d.ts.map
|
package/dist/lib/ssh.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ssh.d.ts","sourceRoot":"","sources":["../../src/lib/ssh.ts"],"names":[],"mappings":"AAwBA,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAE1D;AAED,wBAAsB,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAmBjE;AAED,wBAAsB,WAAW,CAC/B,cAAc,EAAE,MAAM,EACtB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC,CAsBf;AAED,wBAAsB,UAAU,CAC9B,cAAc,EAAE,MAAM,EACtB,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAChC,OAAO,CAAC,IAAI,CAAC,CAwBf"}
|
package/dist/lib/ssh.js
DELETED
|
@@ -1,82 +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.hasSSHKeyLocally = hasSSHKeyLocally;
|
|
7
|
-
exports.getSSHKey = getSSHKey;
|
|
8
|
-
exports.scpCopyFile = scpCopyFile;
|
|
9
|
-
exports.connectSSH = connectSSH;
|
|
10
|
-
const fs_1 = __importDefault(require("fs"));
|
|
11
|
-
const path_1 = __importDefault(require("path"));
|
|
12
|
-
const child_process_1 = require("child_process");
|
|
13
|
-
const api_1 = require("./api");
|
|
14
|
-
const config_1 = require("./config");
|
|
15
|
-
const SSH_KEYS_DIR = path_1.default.join(config_1.CONFIG_DIR, 'keys');
|
|
16
|
-
function ensureSSHKeysDir() {
|
|
17
|
-
if (!fs_1.default.existsSync(SSH_KEYS_DIR)) {
|
|
18
|
-
fs_1.default.mkdirSync(SSH_KEYS_DIR, { recursive: true, mode: 0o700 });
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
function getSSHKeyPath(sshKeyId) {
|
|
22
|
-
return path_1.default.join(SSH_KEYS_DIR, `${sshKeyId}.pem`);
|
|
23
|
-
}
|
|
24
|
-
function hasSSHKeyLocally(sshKeyId) {
|
|
25
|
-
return fs_1.default.existsSync(getSSHKeyPath(sshKeyId));
|
|
26
|
-
}
|
|
27
|
-
async function getSSHKey(sshKeyId) {
|
|
28
|
-
const keyPath = getSSHKeyPath(sshKeyId);
|
|
29
|
-
if (fs_1.default.existsSync(keyPath)) {
|
|
30
|
-
return fs_1.default.readFileSync(keyPath, 'utf-8');
|
|
31
|
-
}
|
|
32
|
-
const response = await (0, api_1.orgAuthenticatedFetch)(`/v1/keys/${sshKeyId}?includePrivateKey=true`);
|
|
33
|
-
if (!response.privateKey) {
|
|
34
|
-
throw new Error('Failed to retrieve private key from server');
|
|
35
|
-
}
|
|
36
|
-
ensureSSHKeysDir();
|
|
37
|
-
fs_1.default.writeFileSync(keyPath, response.privateKey, { mode: 0o600 });
|
|
38
|
-
return response.privateKey;
|
|
39
|
-
}
|
|
40
|
-
async function scpCopyFile(privateKeyPath, localPath, remotePath, remoteHost) {
|
|
41
|
-
return new Promise((resolve, reject) => {
|
|
42
|
-
const scp = (0, child_process_1.spawn)('scp', [
|
|
43
|
-
'-i', privateKeyPath,
|
|
44
|
-
'-o', 'StrictHostKeyChecking=no',
|
|
45
|
-
'-o', 'UserKnownHostsFile=/dev/null',
|
|
46
|
-
localPath,
|
|
47
|
-
`ubuntu@${remoteHost}:${remotePath}`,
|
|
48
|
-
], {
|
|
49
|
-
stdio: 'inherit',
|
|
50
|
-
});
|
|
51
|
-
scp.on('close', (code) => {
|
|
52
|
-
if (code === 0) {
|
|
53
|
-
resolve();
|
|
54
|
-
}
|
|
55
|
-
else {
|
|
56
|
-
reject(new Error(`scp failed with exit code ${code}`));
|
|
57
|
-
}
|
|
58
|
-
});
|
|
59
|
-
scp.on('error', reject);
|
|
60
|
-
});
|
|
61
|
-
}
|
|
62
|
-
async function connectSSH(privateKeyPath, remoteHost, portMappings) {
|
|
63
|
-
return new Promise((resolve, reject) => {
|
|
64
|
-
const sshArgs = [
|
|
65
|
-
'-i', privateKeyPath,
|
|
66
|
-
'-o', 'StrictHostKeyChecking=no',
|
|
67
|
-
'-o', 'UserKnownHostsFile=/dev/null',
|
|
68
|
-
];
|
|
69
|
-
for (const [remotePort, localPort] of portMappings) {
|
|
70
|
-
sshArgs.push('-L', `${localPort}:localhost:${remotePort}`);
|
|
71
|
-
}
|
|
72
|
-
sshArgs.push(`ubuntu@${remoteHost}`);
|
|
73
|
-
const ssh = (0, child_process_1.spawn)('ssh', sshArgs, {
|
|
74
|
-
stdio: 'inherit',
|
|
75
|
-
});
|
|
76
|
-
ssh.on('close', (code) => {
|
|
77
|
-
resolve();
|
|
78
|
-
});
|
|
79
|
-
ssh.on('error', reject);
|
|
80
|
-
});
|
|
81
|
-
}
|
|
82
|
-
//# sourceMappingURL=ssh.js.map
|
package/dist/lib/ssh.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ssh.js","sourceRoot":"","sources":["../../src/lib/ssh.ts"],"names":[],"mappings":";;;;;AAwBA,4CAEC;AAED,8BAmBC;AAED,kCA2BC;AAED,gCA4BC;AA1GD,4CAAoB;AACpB,gDAAwB;AACxB,iDAAsC;AAEtC,+BAA8C;AAC9C,qCAAsC;AAEtC,MAAM,YAAY,GAAG,cAAI,CAAC,IAAI,CAAC,mBAAU,EAAE,MAAM,CAAC,CAAC;AAOnD,SAAS,gBAAgB;IACvB,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QACjC,YAAE,CAAC,SAAS,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC/D,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,QAAgB;IACrC,OAAO,cAAI,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,QAAQ,MAAM,CAAC,CAAC;AACpD,CAAC;AAED,SAAgB,gBAAgB,CAAC,QAAgB;IAC/C,OAAO,YAAE,CAAC,UAAU,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC;AAChD,CAAC;AAEM,KAAK,UAAU,SAAS,CAAC,QAAgB;IAC9C,MAAM,OAAO,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;IAExC,IAAI,YAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3B,OAAO,YAAE,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC3C,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,IAAA,2BAAqB,EAC1C,YAAY,QAAQ,yBAAyB,CAC9C,CAAC;IAEF,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAChE,CAAC;IAED,gBAAgB,EAAE,CAAC;IACnB,YAAE,CAAC,aAAa,CAAC,OAAO,EAAE,QAAQ,CAAC,UAAU,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAEhE,OAAO,QAAQ,CAAC,UAAU,CAAC;AAC7B,CAAC;AAEM,KAAK,UAAU,WAAW,CAC/B,cAAsB,EACtB,SAAiB,EACjB,UAAkB,EAClB,UAAkB;IAElB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,GAAG,GAAG,IAAA,qBAAK,EAAC,KAAK,EAAE;YACvB,IAAI,EAAE,cAAc;YACpB,IAAI,EAAE,0BAA0B;YAChC,IAAI,EAAE,8BAA8B;YACpC,SAAS;YACT,UAAU,UAAU,IAAI,UAAU,EAAE;SACrC,EAAE;YACD,KAAK,EAAE,SAAS;SACjB,CAAC,CAAC;QAEH,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;YACvB,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;gBACf,OAAO,EAAE,CAAC;YACZ,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,IAAI,KAAK,CAAC,6BAA6B,IAAI,EAAE,CAAC,CAAC,CAAC;YACzD,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;AACL,CAAC;AAEM,KAAK,UAAU,UAAU,CAC9B,cAAsB,EACtB,UAAkB,EAClB,YAAiC;IAEjC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,OAAO,GAAG;YACd,IAAI,EAAE,cAAc;YACpB,IAAI,EAAE,0BAA0B;YAChC,IAAI,EAAE,8BAA8B;SACrC,CAAC;QAEF,KAAK,MAAM,CAAC,UAAU,EAAE,SAAS,CAAC,IAAI,YAAY,EAAE,CAAC;YACnD,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,SAAS,cAAc,UAAU,EAAE,CAAC,CAAC;QAC7D,CAAC;QAED,OAAO,CAAC,IAAI,CAAC,UAAU,UAAU,EAAE,CAAC,CAAC;QAErC,MAAM,GAAG,GAAG,IAAA,qBAAK,EAAC,KAAK,EAAE,OAAO,EAAE;YAChC,KAAK,EAAE,SAAS;SACjB,CAAC,CAAC;QAEH,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;YACvB,OAAO,EAAE,CAAC;QACZ,CAAC,CAAC,CAAC;QAEH,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;AACL,CAAC"}
|