@cig-technology/cli 0.1.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/LICENSE +21 -0
- package/README.md +42 -0
- package/dist/commands/bootstrap-reset.d.ts +14 -0
- package/dist/commands/bootstrap-reset.d.ts.map +1 -0
- package/dist/commands/bootstrap-reset.js +93 -0
- package/dist/commands/bootstrap-reset.js.map +1 -0
- package/dist/commands/bootstrap.d.ts +18 -0
- package/dist/commands/bootstrap.d.ts.map +1 -0
- package/dist/commands/bootstrap.js +106 -0
- package/dist/commands/bootstrap.js.map +1 -0
- package/dist/commands/connect.d.ts +4 -0
- package/dist/commands/connect.d.ts.map +1 -0
- package/dist/commands/connect.js +46 -0
- package/dist/commands/connect.js.map +1 -0
- package/dist/commands/doctor.d.ts +11 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +57 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/enroll.d.ts +7 -0
- package/dist/commands/enroll.d.ts.map +1 -0
- package/dist/commands/enroll.js +13 -0
- package/dist/commands/enroll.js.map +1 -0
- package/dist/commands/enrollment.d.ts +12 -0
- package/dist/commands/enrollment.d.ts.map +1 -0
- package/dist/commands/enrollment.js +106 -0
- package/dist/commands/enrollment.js.map +1 -0
- package/dist/commands/install.d.ts +2 -0
- package/dist/commands/install.d.ts.map +1 -0
- package/dist/commands/install.js +219 -0
- package/dist/commands/install.js.map +1 -0
- package/dist/commands/login.d.ts +14 -0
- package/dist/commands/login.d.ts.map +1 -0
- package/dist/commands/login.js +120 -0
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/logout.d.ts +10 -0
- package/dist/commands/logout.d.ts.map +1 -0
- package/dist/commands/logout.js +38 -0
- package/dist/commands/logout.js.map +1 -0
- package/dist/commands/open.d.ts +2 -0
- package/dist/commands/open.d.ts.map +1 -0
- package/dist/commands/open.js +17 -0
- package/dist/commands/open.js.map +1 -0
- package/dist/commands/permissions.d.ts +2 -0
- package/dist/commands/permissions.d.ts.map +1 -0
- package/dist/commands/permissions.js +17 -0
- package/dist/commands/permissions.js.map +1 -0
- package/dist/commands/status.d.ts +2 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +31 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/uninstall.d.ts +2 -0
- package/dist/commands/uninstall.d.ts.map +1 -0
- package/dist/commands/uninstall.js +61 -0
- package/dist/commands/uninstall.js.map +1 -0
- package/dist/commands/upgrade.d.ts +2 -0
- package/dist/commands/upgrade.d.ts.map +1 -0
- package/dist/commands/upgrade.js +14 -0
- package/dist/commands/upgrade.js.map +1 -0
- package/dist/compose-generator.d.ts +23 -0
- package/dist/compose-generator.d.ts.map +1 -0
- package/dist/compose-generator.js +214 -0
- package/dist/compose-generator.js.map +1 -0
- package/dist/credentials.d.ts +69 -0
- package/dist/credentials.d.ts.map +1 -0
- package/dist/credentials.js +178 -0
- package/dist/credentials.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +151 -0
- package/dist/index.js.map +1 -0
- package/dist/managers/state-manager.d.ts +25 -0
- package/dist/managers/state-manager.d.ts.map +1 -0
- package/dist/managers/state-manager.js +76 -0
- package/dist/managers/state-manager.js.map +1 -0
- package/dist/platform.d.ts +20 -0
- package/dist/platform.d.ts.map +1 -0
- package/dist/platform.js +95 -0
- package/dist/platform.js.map +1 -0
- package/dist/prereqs.d.ts +48 -0
- package/dist/prereqs.d.ts.map +1 -0
- package/dist/prereqs.js +242 -0
- package/dist/prereqs.js.map +1 -0
- package/dist/services/api-client.d.ts +24 -0
- package/dist/services/api-client.d.ts.map +1 -0
- package/dist/services/api-client.js +66 -0
- package/dist/services/api-client.js.map +1 -0
- package/dist/services/install-planner.d.ts +18 -0
- package/dist/services/install-planner.d.ts.map +1 -0
- package/dist/services/install-planner.js +32 -0
- package/dist/services/install-planner.js.map +1 -0
- package/dist/services/node-bundle-installer.d.ts +12 -0
- package/dist/services/node-bundle-installer.d.ts.map +1 -0
- package/dist/services/node-bundle-installer.js +65 -0
- package/dist/services/node-bundle-installer.js.map +1 -0
- package/dist/services/remote-executor.d.ts +5 -0
- package/dist/services/remote-executor.d.ts.map +1 -0
- package/dist/services/remote-executor.js +13 -0
- package/dist/services/remote-executor.js.map +1 -0
- package/dist/storage/paths.d.ts +16 -0
- package/dist/storage/paths.d.ts.map +1 -0
- package/dist/storage/paths.js +54 -0
- package/dist/storage/paths.js.map +1 -0
- package/dist/stores/cli-secret-store.d.ts +20 -0
- package/dist/stores/cli-secret-store.d.ts.map +1 -0
- package/dist/stores/cli-secret-store.js +105 -0
- package/dist/stores/cli-secret-store.js.map +1 -0
- package/dist/stores/connection-profile-store.d.ts +15 -0
- package/dist/stores/connection-profile-store.d.ts.map +1 -0
- package/dist/stores/connection-profile-store.js +104 -0
- package/dist/stores/connection-profile-store.js.map +1 -0
- package/dist/types/runtime.d.ts +46 -0
- package/dist/types/runtime.d.ts.map +1 -0
- package/dist/types/runtime.js +3 -0
- package/dist/types/runtime.js.map +1 -0
- package/dist/utils/crypto.d.ts +6 -0
- package/dist/utils/crypto.d.ts.map +1 -0
- package/dist/utils/crypto.js +54 -0
- package/dist/utils/crypto.js.map +1 -0
- package/dist/utils/systemd.d.ts +8 -0
- package/dist/utils/systemd.d.ts.map +1 -0
- package/dist/utils/systemd.js +24 -0
- package/dist/utils/systemd.js.map +1 -0
- package/dist/version.d.ts +2 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +5 -0
- package/dist/version.js.map +1 -0
- package/dist/wizard.d.ts +14 -0
- package/dist/wizard.d.ts.map +1 -0
- package/dist/wizard.js +154 -0
- package/dist/wizard.js.map +1 -0
- package/package.json +60 -0
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.install = install;
|
|
37
|
+
const fs = __importStar(require("node:fs"));
|
|
38
|
+
const node_child_process_1 = require("node:child_process");
|
|
39
|
+
const readline = __importStar(require("node:readline"));
|
|
40
|
+
const prereqs_js_1 = require("../prereqs.js");
|
|
41
|
+
const compose_generator_js_1 = require("../compose-generator.js");
|
|
42
|
+
const credentials_js_1 = require("../credentials.js");
|
|
43
|
+
const enrollment_js_1 = require("./enrollment.js");
|
|
44
|
+
const bootstrap_js_1 = require("./bootstrap.js");
|
|
45
|
+
const state_manager_js_1 = require("../managers/state-manager.js");
|
|
46
|
+
const install_planner_js_1 = require("../services/install-planner.js");
|
|
47
|
+
const node_bundle_installer_js_1 = require("../services/node-bundle-installer.js");
|
|
48
|
+
const connection_profile_store_js_1 = require("../stores/connection-profile-store.js");
|
|
49
|
+
const version_js_1 = require("../version.js");
|
|
50
|
+
async function promptChoice(question, options) {
|
|
51
|
+
const rl = readline.createInterface({
|
|
52
|
+
input: process.stdin,
|
|
53
|
+
output: process.stdout,
|
|
54
|
+
});
|
|
55
|
+
return new Promise((resolve) => {
|
|
56
|
+
console.log(`\n${question}`);
|
|
57
|
+
options.forEach((option, index) => {
|
|
58
|
+
console.log(` ${index + 1}. ${option}`);
|
|
59
|
+
});
|
|
60
|
+
rl.question(`Enter your choice (1-${options.length}): `, (answer) => {
|
|
61
|
+
rl.close();
|
|
62
|
+
const selectedIndex = parseInt(answer, 10) - 1;
|
|
63
|
+
if (selectedIndex < 0 || selectedIndex >= options.length) {
|
|
64
|
+
console.error('Invalid selection');
|
|
65
|
+
process.exit(1);
|
|
66
|
+
}
|
|
67
|
+
resolve(options[selectedIndex]);
|
|
68
|
+
});
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
async function displayProfileDetails(profile) {
|
|
72
|
+
const servicesByProfile = {
|
|
73
|
+
core: ['API', 'Dashboard', 'Neo4j', 'Discovery', 'Cartography', 'cig-node'],
|
|
74
|
+
full: ['API', 'Dashboard', 'Neo4j', 'Discovery', 'Cartography', 'cig-node', 'Chatbot', 'Agents'],
|
|
75
|
+
};
|
|
76
|
+
console.log(`\n${profile.toUpperCase()} profile services:`);
|
|
77
|
+
servicesByProfile[profile].forEach((service) => console.log(` - ${service}`));
|
|
78
|
+
}
|
|
79
|
+
async function pollHealthChecks(manifest, timeoutMs = 300_000) {
|
|
80
|
+
const healthEndpoints = {
|
|
81
|
+
api: 'http://127.0.0.1:8000/api/v1/health',
|
|
82
|
+
dashboard: 'http://127.0.0.1:3000',
|
|
83
|
+
discovery: 'http://127.0.0.1:8080/health',
|
|
84
|
+
};
|
|
85
|
+
const deadline = Date.now() + timeoutMs;
|
|
86
|
+
while (Date.now() < deadline) {
|
|
87
|
+
let healthy = true;
|
|
88
|
+
for (const service of manifest.services) {
|
|
89
|
+
const endpoint = healthEndpoints[service];
|
|
90
|
+
if (!endpoint) {
|
|
91
|
+
continue;
|
|
92
|
+
}
|
|
93
|
+
try {
|
|
94
|
+
const response = await fetch(endpoint);
|
|
95
|
+
if (!response.ok) {
|
|
96
|
+
healthy = false;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
catch {
|
|
100
|
+
healthy = false;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
if (healthy) {
|
|
104
|
+
return true;
|
|
105
|
+
}
|
|
106
|
+
await new Promise((resolve) => setTimeout(resolve, 5_000));
|
|
107
|
+
}
|
|
108
|
+
return false;
|
|
109
|
+
}
|
|
110
|
+
async function rollback(installDir) {
|
|
111
|
+
try {
|
|
112
|
+
(0, node_child_process_1.execSync)('docker compose down', { cwd: installDir, stdio: 'pipe' });
|
|
113
|
+
}
|
|
114
|
+
catch {
|
|
115
|
+
// Best effort only.
|
|
116
|
+
}
|
|
117
|
+
for (const fileName of ['docker-compose.yml', '.env']) {
|
|
118
|
+
const filePath = `${installDir}/${fileName}`;
|
|
119
|
+
if (fs.existsSync(filePath)) {
|
|
120
|
+
fs.unlinkSync(filePath);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
async function install(apiUrl = 'http://localhost:8000', mode, profile) {
|
|
125
|
+
const credentialManager = new credentials_js_1.CredentialManager();
|
|
126
|
+
const stateManager = new state_manager_js_1.StateManager();
|
|
127
|
+
const planner = new install_planner_js_1.InstallPlanner();
|
|
128
|
+
const profileStore = new connection_profile_store_js_1.ConnectionProfileStore();
|
|
129
|
+
console.log('\nCIG installation');
|
|
130
|
+
const prereqResults = await (0, prereqs_js_1.runAllChecks)();
|
|
131
|
+
const failedChecks = prereqResults.filter((result) => !result.passed);
|
|
132
|
+
if (failedChecks.length > 0) {
|
|
133
|
+
failedChecks.forEach((result) => {
|
|
134
|
+
console.error(`✗ ${result.message}`);
|
|
135
|
+
if (result.remediation) {
|
|
136
|
+
console.error(` ${result.remediation}`);
|
|
137
|
+
}
|
|
138
|
+
});
|
|
139
|
+
process.exit(1);
|
|
140
|
+
}
|
|
141
|
+
if (!mode) {
|
|
142
|
+
mode = (await promptChoice('Select installation mode:', ['managed', 'self-hosted']));
|
|
143
|
+
}
|
|
144
|
+
if (!profile) {
|
|
145
|
+
profile = (await promptChoice('Select installation profile:', ['core', 'full']));
|
|
146
|
+
}
|
|
147
|
+
await displayProfileDetails(profile);
|
|
148
|
+
const plan = planner.createPlan({ mode, profile, apiUrl });
|
|
149
|
+
const installDir = plan.installDir;
|
|
150
|
+
fs.mkdirSync(installDir, { recursive: true, mode: 0o700 });
|
|
151
|
+
let manifest;
|
|
152
|
+
let identity = credentialManager.loadIdentity();
|
|
153
|
+
if (mode === 'managed') {
|
|
154
|
+
const result = await (0, enrollment_js_1.enrollmentFlow)({ apiUrl, profile });
|
|
155
|
+
manifest = result.manifest;
|
|
156
|
+
identity = result.identity;
|
|
157
|
+
}
|
|
158
|
+
else {
|
|
159
|
+
manifest = await (0, bootstrap_js_1.bootstrapFlow)();
|
|
160
|
+
}
|
|
161
|
+
manifest.profile = profile;
|
|
162
|
+
await (0, compose_generator_js_1.generateCompose)(manifest, installDir);
|
|
163
|
+
if (identity) {
|
|
164
|
+
const bundleInstaller = new node_bundle_installer_js_1.NodeBundleInstaller(installDir);
|
|
165
|
+
bundleInstaller.writeBundle(plan.nodeConfig, {
|
|
166
|
+
nodeId: identity.targetId,
|
|
167
|
+
publicKey: identity.publicKey,
|
|
168
|
+
privateKey: identity.privateKey,
|
|
169
|
+
enrolledAt: identity.enrolledAt,
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
if (mode === 'self-hosted') {
|
|
173
|
+
try {
|
|
174
|
+
(0, node_child_process_1.execSync)('docker compose up -d', { cwd: installDir, stdio: 'inherit' });
|
|
175
|
+
}
|
|
176
|
+
catch (error) {
|
|
177
|
+
await rollback(installDir);
|
|
178
|
+
throw error;
|
|
179
|
+
}
|
|
180
|
+
const healthChecksPassed = await pollHealthChecks(manifest);
|
|
181
|
+
if (!healthChecksPassed) {
|
|
182
|
+
await rollback(installDir);
|
|
183
|
+
throw new Error('Timed out waiting for self-hosted services to become healthy');
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
else {
|
|
187
|
+
console.log('Managed mode staged the node runtime bundle only. Install it on the target host via SSH/systemd.');
|
|
188
|
+
}
|
|
189
|
+
await stateManager.save({
|
|
190
|
+
version: version_js_1.CLI_VERSION,
|
|
191
|
+
mode,
|
|
192
|
+
profile,
|
|
193
|
+
installDir,
|
|
194
|
+
installedAt: new Date().toISOString(),
|
|
195
|
+
status: mode === 'self-hosted' ? 'ready' : 'stopped',
|
|
196
|
+
services: manifest.services.map((service) => ({
|
|
197
|
+
name: service,
|
|
198
|
+
status: mode === 'self-hosted' ? 'running' : 'stopped',
|
|
199
|
+
})),
|
|
200
|
+
});
|
|
201
|
+
const now = new Date().toISOString();
|
|
202
|
+
profileStore.save({
|
|
203
|
+
id: mode === 'self-hosted' ? 'self-hosted-local' : 'managed-cloud',
|
|
204
|
+
name: mode === 'self-hosted' ? 'Self-hosted Local' : 'Managed Cloud',
|
|
205
|
+
type: mode === 'self-hosted' ? 'self-hosted' : 'managed-cloud',
|
|
206
|
+
apiUrl,
|
|
207
|
+
authMode: mode,
|
|
208
|
+
dashboardUrl: mode === 'self-hosted' ? 'http://127.0.0.1:3000' : apiUrl,
|
|
209
|
+
createdAt: now,
|
|
210
|
+
updatedAt: now,
|
|
211
|
+
isDefault: true,
|
|
212
|
+
});
|
|
213
|
+
profileStore.setDefault(mode === 'self-hosted' ? 'self-hosted-local' : 'managed-cloud');
|
|
214
|
+
console.log(`✓ Installation assets written to ${installDir}`);
|
|
215
|
+
if (mode === 'self-hosted') {
|
|
216
|
+
console.log('Open http://127.0.0.1:3000 to complete bootstrap.');
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
//# sourceMappingURL=install.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Device Authorization Login Command
|
|
3
|
+
*
|
|
4
|
+
* Implements RFC 8628 device authorization grant flow:
|
|
5
|
+
* 1. POST to /auth/device/authorize to get device_code, user_code, verification_uri
|
|
6
|
+
* 2. Display user_code and verification_uri prominently
|
|
7
|
+
* 3. Poll /auth/device/poll at 5s intervals with exponential backoff on slow_down
|
|
8
|
+
* 4. On approval, store tokens via CredentialManager
|
|
9
|
+
* 5. On denial or expiry, display error and exit(1)
|
|
10
|
+
*
|
|
11
|
+
* Requirement 3: CLI Device Authorization Login Flow
|
|
12
|
+
*/
|
|
13
|
+
export declare function login(apiUrl: string): Promise<void>;
|
|
14
|
+
//# sourceMappingURL=login.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAqBH,wBAAsB,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAgHzD"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Device Authorization Login Command
|
|
4
|
+
*
|
|
5
|
+
* Implements RFC 8628 device authorization grant flow:
|
|
6
|
+
* 1. POST to /auth/device/authorize to get device_code, user_code, verification_uri
|
|
7
|
+
* 2. Display user_code and verification_uri prominently
|
|
8
|
+
* 3. Poll /auth/device/poll at 5s intervals with exponential backoff on slow_down
|
|
9
|
+
* 4. On approval, store tokens via CredentialManager
|
|
10
|
+
* 5. On denial or expiry, display error and exit(1)
|
|
11
|
+
*
|
|
12
|
+
* Requirement 3: CLI Device Authorization Login Flow
|
|
13
|
+
*/
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.login = login;
|
|
16
|
+
const credentials_js_1 = require("../credentials.js");
|
|
17
|
+
const api_client_js_1 = require("../services/api-client.js");
|
|
18
|
+
const connection_profile_store_js_1 = require("../stores/connection-profile-store.js");
|
|
19
|
+
async function login(apiUrl) {
|
|
20
|
+
const credentialManager = new credentials_js_1.CredentialManager();
|
|
21
|
+
const apiClient = new api_client_js_1.ApiClient({ baseUrl: apiUrl });
|
|
22
|
+
const profileStore = new connection_profile_store_js_1.ConnectionProfileStore();
|
|
23
|
+
// Step 1: POST to /auth/device/authorize
|
|
24
|
+
console.log('Initiating device authorization...');
|
|
25
|
+
let authorizeResponse;
|
|
26
|
+
try {
|
|
27
|
+
authorizeResponse = await apiClient.post('/api/v1/auth/device/authorize');
|
|
28
|
+
}
|
|
29
|
+
catch (err) {
|
|
30
|
+
console.error('Failed to initiate device authorization:', err instanceof Error ? err.message : String(err));
|
|
31
|
+
process.exit(1);
|
|
32
|
+
}
|
|
33
|
+
// Step 2: Display user_code and verification_uri prominently
|
|
34
|
+
console.log('\n╔════════════════════════════════════════════════════════════╗');
|
|
35
|
+
console.log('║ Device Authorization ║');
|
|
36
|
+
console.log('╠════════════════════════════════════════════════════════════╣');
|
|
37
|
+
console.log(`║ User Code: ${authorizeResponse.user_code.padEnd(42)}║`);
|
|
38
|
+
console.log(`║ Verification URL: ${authorizeResponse.verification_uri.padEnd(42)}║`);
|
|
39
|
+
console.log('║ ║');
|
|
40
|
+
console.log('║ 1. Visit the URL above in your browser ║');
|
|
41
|
+
console.log('║ 2. Enter the user code when prompted ║');
|
|
42
|
+
console.log('║ 3. Approve the device authorization ║');
|
|
43
|
+
console.log('║ ║');
|
|
44
|
+
console.log('║ Waiting for approval... ║');
|
|
45
|
+
console.log('╚════════════════════════════════════════════════════════════╝\n');
|
|
46
|
+
// Step 3: Poll /auth/device/poll with exponential backoff
|
|
47
|
+
const deviceCode = authorizeResponse.device_code;
|
|
48
|
+
const expiresAt = Date.now() + authorizeResponse.expires_in * 1000;
|
|
49
|
+
let pollIntervalMs = 5000; // Start at 5 seconds
|
|
50
|
+
const maxPollIntervalMs = 30000; // Max 30 seconds
|
|
51
|
+
while (Date.now() < expiresAt) {
|
|
52
|
+
await new Promise((resolve) => setTimeout(resolve, pollIntervalMs));
|
|
53
|
+
let pollResponse;
|
|
54
|
+
try {
|
|
55
|
+
pollResponse = await apiClient.post('/api/v1/auth/device/poll', {
|
|
56
|
+
device_code: deviceCode,
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
catch (err) {
|
|
60
|
+
console.error('Poll error:', err instanceof Error ? err.message : String(err));
|
|
61
|
+
process.exit(1);
|
|
62
|
+
}
|
|
63
|
+
// Handle slow_down: increase poll interval with exponential backoff
|
|
64
|
+
if (pollResponse.status === 'slow_down') {
|
|
65
|
+
pollIntervalMs = Math.min(pollIntervalMs + 5000, maxPollIntervalMs);
|
|
66
|
+
continue;
|
|
67
|
+
}
|
|
68
|
+
// Handle approved: store tokens and exit successfully
|
|
69
|
+
if (pollResponse.status === 'approved') {
|
|
70
|
+
if (!pollResponse.access_token || !pollResponse.refresh_token) {
|
|
71
|
+
console.error('Approval response missing tokens');
|
|
72
|
+
process.exit(1);
|
|
73
|
+
}
|
|
74
|
+
const tokens = {
|
|
75
|
+
accessToken: pollResponse.access_token,
|
|
76
|
+
refreshToken: pollResponse.refresh_token,
|
|
77
|
+
expiresAt: Date.now() + 3600000, // Assume 1 hour expiry
|
|
78
|
+
refreshExpiresAt: Date.now() + 86400000, // Assume 24 hour refresh expiry
|
|
79
|
+
};
|
|
80
|
+
try {
|
|
81
|
+
credentialManager.saveTokens(tokens);
|
|
82
|
+
const now = new Date().toISOString();
|
|
83
|
+
const profile = {
|
|
84
|
+
id: 'managed-cloud',
|
|
85
|
+
name: 'Managed Cloud',
|
|
86
|
+
type: 'managed-cloud',
|
|
87
|
+
apiUrl,
|
|
88
|
+
authMode: 'managed',
|
|
89
|
+
dashboardUrl: apiUrl.replace(':8000', ':3000'),
|
|
90
|
+
createdAt: now,
|
|
91
|
+
updatedAt: now,
|
|
92
|
+
isDefault: true,
|
|
93
|
+
};
|
|
94
|
+
profileStore.save(profile);
|
|
95
|
+
profileStore.setDefault(profile.id);
|
|
96
|
+
console.log('✓ Login successful! Tokens stored securely.');
|
|
97
|
+
process.exit(0);
|
|
98
|
+
}
|
|
99
|
+
catch (err) {
|
|
100
|
+
console.error('Failed to store tokens:', err instanceof Error ? err.message : String(err));
|
|
101
|
+
process.exit(1);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
// Handle denied: display error and exit
|
|
105
|
+
if (pollResponse.status === 'denied') {
|
|
106
|
+
console.error('✗ Device authorization denied.');
|
|
107
|
+
process.exit(1);
|
|
108
|
+
}
|
|
109
|
+
// Handle expired: display error and exit
|
|
110
|
+
if (pollResponse.status === 'expired') {
|
|
111
|
+
console.error('✗ Device code expired. Please run `cig login` again.');
|
|
112
|
+
process.exit(1);
|
|
113
|
+
}
|
|
114
|
+
// Status is pending, continue polling
|
|
115
|
+
}
|
|
116
|
+
// Timeout: device code expired
|
|
117
|
+
console.error('✗ Device code expired. Please run `cig login` again.');
|
|
118
|
+
process.exit(1);
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=login.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Logout Command
|
|
3
|
+
*
|
|
4
|
+
* Clears all stored tokens and identity via CredentialManager,
|
|
5
|
+
* and POSTs to /auth/logout (best-effort, doesn't fail if it fails).
|
|
6
|
+
*
|
|
7
|
+
* Requirement 3: CLI Device Authorization Login Flow
|
|
8
|
+
*/
|
|
9
|
+
export declare function logout(apiUrl: string): Promise<void>;
|
|
10
|
+
//# sourceMappingURL=logout.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logout.d.ts","sourceRoot":"","sources":["../../src/commands/logout.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,wBAAsB,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAyB1D"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Logout Command
|
|
4
|
+
*
|
|
5
|
+
* Clears all stored tokens and identity via CredentialManager,
|
|
6
|
+
* and POSTs to /auth/logout (best-effort, doesn't fail if it fails).
|
|
7
|
+
*
|
|
8
|
+
* Requirement 3: CLI Device Authorization Login Flow
|
|
9
|
+
*/
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
exports.logout = logout;
|
|
12
|
+
const credentials_js_1 = require("../credentials.js");
|
|
13
|
+
const api_client_js_1 = require("../services/api-client.js");
|
|
14
|
+
async function logout(apiUrl) {
|
|
15
|
+
const credentialManager = new credentials_js_1.CredentialManager();
|
|
16
|
+
const apiClient = new api_client_js_1.ApiClient({ baseUrl: apiUrl, accessToken: credentialManager.loadTokens()?.accessToken });
|
|
17
|
+
// Load tokens to get access token for logout request
|
|
18
|
+
const tokens = credentialManager.loadTokens();
|
|
19
|
+
// Clear all stored credentials
|
|
20
|
+
try {
|
|
21
|
+
credentialManager.clearAll();
|
|
22
|
+
console.log('✓ Credentials cleared.');
|
|
23
|
+
}
|
|
24
|
+
catch (err) {
|
|
25
|
+
console.error('Warning: Failed to clear credentials:', err instanceof Error ? err.message : String(err));
|
|
26
|
+
}
|
|
27
|
+
// POST to /auth/logout (best-effort)
|
|
28
|
+
if (tokens?.accessToken) {
|
|
29
|
+
try {
|
|
30
|
+
await apiClient.post('/api/v1/auth/logout');
|
|
31
|
+
}
|
|
32
|
+
catch (err) {
|
|
33
|
+
console.warn('Logout request failed (credentials already cleared locally):', err instanceof Error ? err.message : String(err));
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
console.log('✓ Logout complete.');
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=logout.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logout.js","sourceRoot":"","sources":["../../src/commands/logout.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;AAKH,wBAyBC;AA5BD,sDAAsD;AACtD,6DAAsD;AAE/C,KAAK,UAAU,MAAM,CAAC,MAAc;IACzC,MAAM,iBAAiB,GAAG,IAAI,kCAAiB,EAAE,CAAC;IAClD,MAAM,SAAS,GAAG,IAAI,yBAAS,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,iBAAiB,CAAC,UAAU,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC;IAE/G,qDAAqD;IACrD,MAAM,MAAM,GAAG,iBAAiB,CAAC,UAAU,EAAE,CAAC;IAE9C,+BAA+B;IAC/B,IAAI,CAAC;QACH,iBAAiB,CAAC,QAAQ,EAAE,CAAC;QAC7B,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;IACxC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,uCAAuC,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3G,CAAC;IAED,qCAAqC;IACrC,IAAI,MAAM,EAAE,WAAW,EAAE,CAAC;QACxB,IAAI,CAAC;YACH,MAAM,SAAS,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QAC9C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CAAC,8DAA8D,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QACjI,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;AACpC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"open.d.ts","sourceRoot":"","sources":["../../src/commands/open.ts"],"names":[],"mappings":"AAGA,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAanD"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.openDashboard = openDashboard;
|
|
4
|
+
const state_manager_js_1 = require("../managers/state-manager.js");
|
|
5
|
+
const connection_profile_store_js_1 = require("../stores/connection-profile-store.js");
|
|
6
|
+
async function openDashboard() {
|
|
7
|
+
const stateManager = new state_manager_js_1.StateManager();
|
|
8
|
+
const profileStore = new connection_profile_store_js_1.ConnectionProfileStore();
|
|
9
|
+
const state = await stateManager.load();
|
|
10
|
+
const profile = profileStore.getDefault();
|
|
11
|
+
const url = (state?.mode === 'self-hosted' ? 'http://127.0.0.1:3000' : undefined) ??
|
|
12
|
+
profile?.dashboardUrl ??
|
|
13
|
+
profile?.apiUrl ??
|
|
14
|
+
'http://127.0.0.1:3000';
|
|
15
|
+
console.log(url);
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=open.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"open.js","sourceRoot":"","sources":["../../src/commands/open.ts"],"names":[],"mappings":";;AAGA,sCAaC;AAhBD,mEAA4D;AAC5D,uFAA+E;AAExE,KAAK,UAAU,aAAa;IACjC,MAAM,YAAY,GAAG,IAAI,+BAAY,EAAE,CAAC;IACxC,MAAM,YAAY,GAAG,IAAI,oDAAsB,EAAE,CAAC;IAClD,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,IAAI,EAAE,CAAC;IACxC,MAAM,OAAO,GAAG,YAAY,CAAC,UAAU,EAAE,CAAC;IAE1C,MAAM,GAAG,GACP,CAAC,KAAK,EAAE,IAAI,KAAK,aAAa,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,SAAS,CAAC;QACrE,OAAO,EAAE,YAAY;QACrB,OAAO,EAAE,MAAM;QACf,uBAAuB,CAAC;IAE1B,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACnB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"permissions.d.ts","sourceRoot":"","sources":["../../src/commands/permissions.ts"],"names":[],"mappings":"AAUA,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAKjD"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.permissions = permissions;
|
|
4
|
+
const TIERS = [
|
|
5
|
+
{ tier: 'tier0', summary: 'Host bootstrap and runtime installation' },
|
|
6
|
+
{ tier: 'tier1', summary: 'Base infrastructure discovery' },
|
|
7
|
+
{ tier: 'tier2', summary: 'Expanded infra metadata, cost, logs, events' },
|
|
8
|
+
{ tier: 'tier3', summary: 'Sensitive connector access' },
|
|
9
|
+
{ tier: 'tier4', summary: 'Mutating actions and remediation' },
|
|
10
|
+
];
|
|
11
|
+
async function permissions() {
|
|
12
|
+
console.log('CIG permission tiers');
|
|
13
|
+
TIERS.forEach(({ tier, summary }) => {
|
|
14
|
+
console.log(` - ${tier}: ${summary}`);
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=permissions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"permissions.js","sourceRoot":"","sources":["../../src/commands/permissions.ts"],"names":[],"mappings":";;AAUA,kCAKC;AAbD,MAAM,KAAK,GAAqD;IAC9D,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,yCAAyC,EAAE;IACrE,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,+BAA+B,EAAE;IAC3D,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,6CAA6C,EAAE;IACzE,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,4BAA4B,EAAE;IACxD,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,kCAAkC,EAAE;CAC/D,CAAC;AAEK,KAAK,UAAU,WAAW;IAC/B,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;IACpC,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE;QAClC,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,KAAK,OAAO,EAAE,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAGA,wBAAsB,MAAM,CAAC,MAAM,UAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CA2B1D"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.status = status;
|
|
4
|
+
const state_manager_js_1 = require("../managers/state-manager.js");
|
|
5
|
+
const connection_profile_store_js_1 = require("../stores/connection-profile-store.js");
|
|
6
|
+
async function status(asJson = false) {
|
|
7
|
+
const stateManager = new state_manager_js_1.StateManager();
|
|
8
|
+
const profileStore = new connection_profile_store_js_1.ConnectionProfileStore();
|
|
9
|
+
const state = await stateManager.load();
|
|
10
|
+
const profile = profileStore.getDefault();
|
|
11
|
+
const payload = {
|
|
12
|
+
installation: state,
|
|
13
|
+
connectionProfile: profile,
|
|
14
|
+
};
|
|
15
|
+
if (asJson) {
|
|
16
|
+
console.log(JSON.stringify(payload, null, 2));
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
console.log('CIG status');
|
|
20
|
+
console.log(` Install state: ${state?.status ?? 'not_installed'}`);
|
|
21
|
+
console.log(` Install mode: ${state?.mode ?? 'n/a'}`);
|
|
22
|
+
console.log(` Install dir: ${state?.installDir ?? 'n/a'}`);
|
|
23
|
+
console.log(` Connection profile: ${profile?.name ?? 'none'}`);
|
|
24
|
+
if (state?.services?.length) {
|
|
25
|
+
console.log(' Services:');
|
|
26
|
+
state.services.forEach((service) => {
|
|
27
|
+
console.log(` - ${service.name}: ${service.status}`);
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":";;AAGA,wBA2BC;AA9BD,mEAA4D;AAC5D,uFAA+E;AAExE,KAAK,UAAU,MAAM,CAAC,MAAM,GAAG,KAAK;IACzC,MAAM,YAAY,GAAG,IAAI,+BAAY,EAAE,CAAC;IACxC,MAAM,YAAY,GAAG,IAAI,oDAAsB,EAAE,CAAC;IAClD,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,IAAI,EAAE,CAAC;IACxC,MAAM,OAAO,GAAG,YAAY,CAAC,UAAU,EAAE,CAAC;IAE1C,MAAM,OAAO,GAAG;QACd,YAAY,EAAE,KAAK;QACnB,iBAAiB,EAAE,OAAO;KAC3B,CAAC;IAEF,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC9C,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IAC1B,OAAO,CAAC,GAAG,CAAC,oBAAoB,KAAK,EAAE,MAAM,IAAI,eAAe,EAAE,CAAC,CAAC;IACpE,OAAO,CAAC,GAAG,CAAC,mBAAmB,KAAK,EAAE,IAAI,IAAI,KAAK,EAAE,CAAC,CAAC;IACvD,OAAO,CAAC,GAAG,CAAC,kBAAkB,KAAK,EAAE,UAAU,IAAI,KAAK,EAAE,CAAC,CAAC;IAC5D,OAAO,CAAC,GAAG,CAAC,yBAAyB,OAAO,EAAE,IAAI,IAAI,MAAM,EAAE,CAAC,CAAC;IAChE,IAAI,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAC3B,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YACjC,OAAO,CAAC,GAAG,CAAC,SAAS,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QAC1D,CAAC,CAAC,CAAC;IACL,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"uninstall.d.ts","sourceRoot":"","sources":["../../src/commands/uninstall.ts"],"names":[],"mappings":"AAIA,wBAAsB,SAAS,CAAC,SAAS,UAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAuBhE"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.uninstall = uninstall;
|
|
37
|
+
const node_child_process_1 = require("node:child_process");
|
|
38
|
+
const fs = __importStar(require("node:fs"));
|
|
39
|
+
const state_manager_js_1 = require("../managers/state-manager.js");
|
|
40
|
+
async function uninstall(purgeData = false) {
|
|
41
|
+
const stateManager = new state_manager_js_1.StateManager();
|
|
42
|
+
const state = await stateManager.load();
|
|
43
|
+
if (!state) {
|
|
44
|
+
console.log('No installation state found.');
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
if (state.mode === 'self-hosted') {
|
|
48
|
+
try {
|
|
49
|
+
(0, node_child_process_1.execSync)('docker compose down', { cwd: state.installDir, stdio: 'inherit' });
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
// Best effort.
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
if (purgeData && fs.existsSync(state.installDir)) {
|
|
56
|
+
fs.rmSync(state.installDir, { recursive: true, force: true });
|
|
57
|
+
}
|
|
58
|
+
await stateManager.delete();
|
|
59
|
+
console.log('✓ Uninstalled CIG runtime metadata.');
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=uninstall.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"uninstall.js","sourceRoot":"","sources":["../../src/commands/uninstall.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,8BAuBC;AA3BD,2DAA8C;AAC9C,4CAA8B;AAC9B,mEAA4D;AAErD,KAAK,UAAU,SAAS,CAAC,SAAS,GAAG,KAAK;IAC/C,MAAM,YAAY,GAAG,IAAI,+BAAY,EAAE,CAAC;IACxC,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,IAAI,EAAE,CAAC;IAExC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;QAC5C,OAAO;IACT,CAAC;IAED,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;QACjC,IAAI,CAAC;YACH,IAAA,6BAAQ,EAAC,qBAAqB,EAAE,EAAE,GAAG,EAAE,KAAK,CAAC,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QAC/E,CAAC;QAAC,MAAM,CAAC;YACP,eAAe;QACjB,CAAC;IACH,CAAC;IAED,IAAI,SAAS,IAAI,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;QACjD,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAChE,CAAC;IAED,MAAM,YAAY,CAAC,MAAM,EAAE,CAAC;IAC5B,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;AACrD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upgrade.d.ts","sourceRoot":"","sources":["../../src/commands/upgrade.ts"],"names":[],"mappings":"AAEA,wBAAsB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAU7C"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.upgrade = upgrade;
|
|
4
|
+
const state_manager_js_1 = require("../managers/state-manager.js");
|
|
5
|
+
async function upgrade() {
|
|
6
|
+
const stateManager = new state_manager_js_1.StateManager();
|
|
7
|
+
const state = await stateManager.load();
|
|
8
|
+
if (!state) {
|
|
9
|
+
throw new Error('No existing installation found. Run `cig install` first.');
|
|
10
|
+
}
|
|
11
|
+
await stateManager.update({ status: 'stopped' });
|
|
12
|
+
console.log('Prepared the installation for a runtime upgrade. Bundle rollout is not yet automated.');
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=upgrade.js.map
|