@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
package/dist/prereqs.js
ADDED
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Prerequisite Checks for CIG Installation
|
|
4
|
+
*
|
|
5
|
+
* Validates system requirements:
|
|
6
|
+
* - Docker Engine installed and daemon running
|
|
7
|
+
* - Docker Compose v2.0 or later
|
|
8
|
+
* - At least 4 GB free memory
|
|
9
|
+
* - At least 10 GB free disk space
|
|
10
|
+
* - Required ports available (3000, 7474, 7687, 8000, 8080)
|
|
11
|
+
*
|
|
12
|
+
* Requirement 7: CLI Install Flow (Prerequisite Checks)
|
|
13
|
+
*/
|
|
14
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
15
|
+
if (k2 === undefined) k2 = k;
|
|
16
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
17
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
18
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
19
|
+
}
|
|
20
|
+
Object.defineProperty(o, k2, desc);
|
|
21
|
+
}) : (function(o, m, k, k2) {
|
|
22
|
+
if (k2 === undefined) k2 = k;
|
|
23
|
+
o[k2] = m[k];
|
|
24
|
+
}));
|
|
25
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
26
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
27
|
+
}) : function(o, v) {
|
|
28
|
+
o["default"] = v;
|
|
29
|
+
});
|
|
30
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
31
|
+
var ownKeys = function(o) {
|
|
32
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
33
|
+
var ar = [];
|
|
34
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
35
|
+
return ar;
|
|
36
|
+
};
|
|
37
|
+
return ownKeys(o);
|
|
38
|
+
};
|
|
39
|
+
return function (mod) {
|
|
40
|
+
if (mod && mod.__esModule) return mod;
|
|
41
|
+
var result = {};
|
|
42
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
43
|
+
__setModuleDefault(result, mod);
|
|
44
|
+
return result;
|
|
45
|
+
};
|
|
46
|
+
})();
|
|
47
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
48
|
+
exports.setFreeMemProvider = setFreeMemProvider;
|
|
49
|
+
exports.resetFreeMemProvider = resetFreeMemProvider;
|
|
50
|
+
exports.checkDockerEngine = checkDockerEngine;
|
|
51
|
+
exports.checkDockerCompose = checkDockerCompose;
|
|
52
|
+
exports.checkMemory = checkMemory;
|
|
53
|
+
exports.checkDiskSpace = checkDiskSpace;
|
|
54
|
+
exports.checkPorts = checkPorts;
|
|
55
|
+
exports.runAllChecks = runAllChecks;
|
|
56
|
+
const child_process_1 = require("child_process");
|
|
57
|
+
const os = __importStar(require("os"));
|
|
58
|
+
const net = __importStar(require("net"));
|
|
59
|
+
const util_1 = require("util");
|
|
60
|
+
const exec = (0, util_1.promisify)(require('child_process').exec);
|
|
61
|
+
// Allow injection for testing
|
|
62
|
+
let getFreeMem = () => os.freemem();
|
|
63
|
+
function setFreeMemProvider(provider) {
|
|
64
|
+
getFreeMem = provider;
|
|
65
|
+
}
|
|
66
|
+
function resetFreeMemProvider() {
|
|
67
|
+
getFreeMem = () => os.freemem();
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Check if Docker Engine is installed and the daemon is running.
|
|
71
|
+
* Runs `docker ps` to verify both installation and daemon status.
|
|
72
|
+
*/
|
|
73
|
+
async function checkDockerEngine() {
|
|
74
|
+
try {
|
|
75
|
+
(0, child_process_1.execSync)('docker ps', { stdio: 'pipe' });
|
|
76
|
+
return {
|
|
77
|
+
passed: true,
|
|
78
|
+
message: 'Docker Engine is installed and running',
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
catch (err) {
|
|
82
|
+
return {
|
|
83
|
+
passed: false,
|
|
84
|
+
message: 'Docker Engine is not installed or daemon is not running',
|
|
85
|
+
remediation: 'Install Docker Desktop or Docker Engine from https://docs.docker.com/get-docker/ and ensure the daemon is running.',
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Check if Docker Compose v2.0 or later is available.
|
|
91
|
+
* Runs `docker compose version` and parses the version.
|
|
92
|
+
*/
|
|
93
|
+
async function checkDockerCompose() {
|
|
94
|
+
try {
|
|
95
|
+
const output = (0, child_process_1.execSync)('docker compose version', { encoding: 'utf-8' });
|
|
96
|
+
// Output format: "Docker Compose version v2.x.x"
|
|
97
|
+
const versionMatch = output.match(/v(\d+)\.(\d+)\.(\d+)/);
|
|
98
|
+
if (!versionMatch) {
|
|
99
|
+
return {
|
|
100
|
+
passed: false,
|
|
101
|
+
message: 'Docker Compose version could not be determined',
|
|
102
|
+
remediation: 'Ensure Docker Compose v2.0 or later is installed.',
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
const [, major] = versionMatch;
|
|
106
|
+
const majorVersion = parseInt(major, 10);
|
|
107
|
+
if (majorVersion < 2) {
|
|
108
|
+
return {
|
|
109
|
+
passed: false,
|
|
110
|
+
message: `Docker Compose v${majorVersion} is installed, but v2.0 or later is required`,
|
|
111
|
+
remediation: 'Upgrade Docker Compose to v2.0 or later from https://docs.docker.com/compose/install/',
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
return {
|
|
115
|
+
passed: true,
|
|
116
|
+
message: `Docker Compose v${majorVersion} is installed`,
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
catch (err) {
|
|
120
|
+
return {
|
|
121
|
+
passed: false,
|
|
122
|
+
message: 'Docker Compose is not installed or not accessible',
|
|
123
|
+
remediation: 'Install Docker Compose v2.0 or later from https://docs.docker.com/compose/install/',
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Check if at least 4 GB of free memory is available.
|
|
129
|
+
* Uses getFreeMem() to get the system free memory in bytes.
|
|
130
|
+
*/
|
|
131
|
+
async function checkMemory() {
|
|
132
|
+
const freeMemBytes = getFreeMem();
|
|
133
|
+
const freeMemGb = freeMemBytes / (1024 * 1024 * 1024);
|
|
134
|
+
const requiredGb = 4;
|
|
135
|
+
if (freeMemGb >= requiredGb) {
|
|
136
|
+
return {
|
|
137
|
+
passed: true,
|
|
138
|
+
message: `${freeMemGb.toFixed(2)} GB of free memory available`,
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
return {
|
|
142
|
+
passed: false,
|
|
143
|
+
message: `Only ${freeMemGb.toFixed(2)} GB of free memory available, but ${requiredGb} GB is required`,
|
|
144
|
+
remediation: 'Close other applications to free up memory, or add more RAM to your system.',
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Check if at least 10 GB of free disk space is available in the home directory.
|
|
149
|
+
* Uses `df` command to check disk space.
|
|
150
|
+
*/
|
|
151
|
+
async function checkDiskSpace() {
|
|
152
|
+
try {
|
|
153
|
+
const homeDir = os.homedir();
|
|
154
|
+
const output = (0, child_process_1.execSync)(`df -B1 "${homeDir}"`, { encoding: 'utf-8' });
|
|
155
|
+
const lines = output.trim().split('\n');
|
|
156
|
+
if (lines.length < 2) {
|
|
157
|
+
return {
|
|
158
|
+
passed: false,
|
|
159
|
+
message: 'Could not determine disk space',
|
|
160
|
+
remediation: 'Ensure the home directory is accessible and has sufficient space.',
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
// Parse the second line (first is header)
|
|
164
|
+
const parts = lines[1].split(/\s+/);
|
|
165
|
+
const availableBytes = parseInt(parts[3], 10);
|
|
166
|
+
const availableGb = availableBytes / (1024 * 1024 * 1024);
|
|
167
|
+
const requiredGb = 10;
|
|
168
|
+
if (availableGb >= requiredGb) {
|
|
169
|
+
return {
|
|
170
|
+
passed: true,
|
|
171
|
+
message: `${availableGb.toFixed(2)} GB of free disk space available`,
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
return {
|
|
175
|
+
passed: false,
|
|
176
|
+
message: `Only ${availableGb.toFixed(2)} GB of free disk space available, but ${requiredGb} GB is required`,
|
|
177
|
+
remediation: 'Free up disk space by removing unnecessary files, or expand your storage.',
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
catch (err) {
|
|
181
|
+
return {
|
|
182
|
+
passed: false,
|
|
183
|
+
message: 'Could not determine disk space',
|
|
184
|
+
remediation: 'Ensure the home directory is accessible and has sufficient space.',
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Check if a specific port is available (not in use).
|
|
190
|
+
* Attempts to bind to the port; if successful, the port is available.
|
|
191
|
+
*/
|
|
192
|
+
function isPortAvailable(port) {
|
|
193
|
+
return new Promise((resolve) => {
|
|
194
|
+
const server = net.createServer();
|
|
195
|
+
server.once('error', () => {
|
|
196
|
+
resolve(false);
|
|
197
|
+
});
|
|
198
|
+
server.once('listening', () => {
|
|
199
|
+
server.close();
|
|
200
|
+
resolve(true);
|
|
201
|
+
});
|
|
202
|
+
server.listen(port, '127.0.0.1');
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Check if required ports (3000, 7474, 7687, 8000, 8080) are available.
|
|
207
|
+
*/
|
|
208
|
+
async function checkPorts() {
|
|
209
|
+
const requiredPorts = [3000, 7474, 7687, 8000, 8080];
|
|
210
|
+
const unavailablePorts = [];
|
|
211
|
+
for (const port of requiredPorts) {
|
|
212
|
+
const available = await isPortAvailable(port);
|
|
213
|
+
if (!available) {
|
|
214
|
+
unavailablePorts.push(port);
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
if (unavailablePorts.length === 0) {
|
|
218
|
+
return {
|
|
219
|
+
passed: true,
|
|
220
|
+
message: `All required ports are available: ${requiredPorts.join(', ')}`,
|
|
221
|
+
};
|
|
222
|
+
}
|
|
223
|
+
return {
|
|
224
|
+
passed: false,
|
|
225
|
+
message: `The following ports are in use: ${unavailablePorts.join(', ')}`,
|
|
226
|
+
remediation: `Stop the services using these ports or configure CIG to use different ports. Use 'lsof -i :PORT' to identify the process using each port.`,
|
|
227
|
+
};
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Run all prerequisite checks and return results.
|
|
231
|
+
*/
|
|
232
|
+
async function runAllChecks() {
|
|
233
|
+
const results = await Promise.all([
|
|
234
|
+
checkDockerEngine(),
|
|
235
|
+
checkDockerCompose(),
|
|
236
|
+
checkMemory(),
|
|
237
|
+
checkDiskSpace(),
|
|
238
|
+
checkPorts(),
|
|
239
|
+
]);
|
|
240
|
+
return results;
|
|
241
|
+
}
|
|
242
|
+
//# sourceMappingURL=prereqs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prereqs.js","sourceRoot":"","sources":["../src/prereqs.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { CliSecretStore } from '../stores/cli-secret-store.js';
|
|
2
|
+
export interface ApiClientOptions {
|
|
3
|
+
baseUrl: string;
|
|
4
|
+
secretStore?: CliSecretStore;
|
|
5
|
+
accessToken?: string;
|
|
6
|
+
}
|
|
7
|
+
interface RequestOptions {
|
|
8
|
+
headers?: Record<string, string>;
|
|
9
|
+
body?: unknown;
|
|
10
|
+
}
|
|
11
|
+
export declare class ApiClient {
|
|
12
|
+
private readonly baseUrl;
|
|
13
|
+
private readonly secretStore?;
|
|
14
|
+
private accessToken?;
|
|
15
|
+
constructor(options: ApiClientOptions);
|
|
16
|
+
setAccessToken(token: string | undefined): void;
|
|
17
|
+
get<T>(path: string, options?: RequestOptions): Promise<T>;
|
|
18
|
+
post<T>(path: string, body?: unknown, options?: RequestOptions): Promise<T>;
|
|
19
|
+
delete<T>(path: string, options?: RequestOptions): Promise<T>;
|
|
20
|
+
private buildHeaders;
|
|
21
|
+
private handleResponse;
|
|
22
|
+
}
|
|
23
|
+
export {};
|
|
24
|
+
//# sourceMappingURL=api-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-client.d.ts","sourceRoot":"","sources":["../../src/services/api-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAE/D,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,cAAc,CAAC;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,UAAU,cAAc;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAiB;IAC9C,OAAO,CAAC,WAAW,CAAC,CAAS;gBAEjB,OAAO,EAAE,gBAAgB;IAMrC,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IAIzC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,CAAC,CAAC;IAS9D,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,CAAC,CAAC;IAU/E,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,CAAC,CAAC;IASvE,OAAO,CAAC,YAAY;YAYN,cAAc;CAoB7B"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ApiClient = void 0;
|
|
4
|
+
class ApiClient {
|
|
5
|
+
baseUrl;
|
|
6
|
+
secretStore;
|
|
7
|
+
accessToken;
|
|
8
|
+
constructor(options) {
|
|
9
|
+
this.baseUrl = options.baseUrl.replace(/\/+$/, '');
|
|
10
|
+
this.secretStore = options.secretStore;
|
|
11
|
+
this.accessToken = options.accessToken;
|
|
12
|
+
}
|
|
13
|
+
setAccessToken(token) {
|
|
14
|
+
this.accessToken = token;
|
|
15
|
+
}
|
|
16
|
+
async get(path, options = {}) {
|
|
17
|
+
const response = await fetch(`${this.baseUrl}${path}`, {
|
|
18
|
+
method: 'GET',
|
|
19
|
+
headers: this.buildHeaders(options.headers),
|
|
20
|
+
});
|
|
21
|
+
return this.handleResponse(response);
|
|
22
|
+
}
|
|
23
|
+
async post(path, body, options = {}) {
|
|
24
|
+
const response = await fetch(`${this.baseUrl}${path}`, {
|
|
25
|
+
method: 'POST',
|
|
26
|
+
headers: this.buildHeaders(options.headers),
|
|
27
|
+
body: body === undefined ? undefined : JSON.stringify(body),
|
|
28
|
+
});
|
|
29
|
+
return this.handleResponse(response);
|
|
30
|
+
}
|
|
31
|
+
async delete(path, options = {}) {
|
|
32
|
+
const response = await fetch(`${this.baseUrl}${path}`, {
|
|
33
|
+
method: 'DELETE',
|
|
34
|
+
headers: this.buildHeaders(options.headers),
|
|
35
|
+
});
|
|
36
|
+
return this.handleResponse(response);
|
|
37
|
+
}
|
|
38
|
+
buildHeaders(headers) {
|
|
39
|
+
const resolvedToken = this.accessToken ??
|
|
40
|
+
this.secretStore?.get('auth.tokens')?.accessToken;
|
|
41
|
+
return {
|
|
42
|
+
'Content-Type': 'application/json',
|
|
43
|
+
...(resolvedToken ? { Authorization: `Bearer ${resolvedToken}` } : {}),
|
|
44
|
+
...headers,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
async handleResponse(response) {
|
|
48
|
+
if (!response.ok) {
|
|
49
|
+
let errorMessage = `${response.status} ${response.statusText}`;
|
|
50
|
+
try {
|
|
51
|
+
const data = (await response.json());
|
|
52
|
+
errorMessage = data.error ?? errorMessage;
|
|
53
|
+
}
|
|
54
|
+
catch {
|
|
55
|
+
// Ignore JSON parse failures and keep the HTTP error text.
|
|
56
|
+
}
|
|
57
|
+
throw new Error(errorMessage);
|
|
58
|
+
}
|
|
59
|
+
if (response.status === 204) {
|
|
60
|
+
return undefined;
|
|
61
|
+
}
|
|
62
|
+
return (await response.json());
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
exports.ApiClient = ApiClient;
|
|
66
|
+
//# sourceMappingURL=api-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-client.js","sourceRoot":"","sources":["../../src/services/api-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { InstallMode, InstallProfile, NodeConfig } from '../types/runtime.js';
|
|
2
|
+
export interface InstallPlannerOptions {
|
|
3
|
+
mode: InstallMode;
|
|
4
|
+
profile: InstallProfile;
|
|
5
|
+
apiUrl: string;
|
|
6
|
+
controlPlaneUrl?: string;
|
|
7
|
+
}
|
|
8
|
+
export interface InstallPlan {
|
|
9
|
+
mode: InstallMode;
|
|
10
|
+
profile: InstallProfile;
|
|
11
|
+
installDir: string;
|
|
12
|
+
dashboardUrl: string;
|
|
13
|
+
nodeConfig: NodeConfig;
|
|
14
|
+
}
|
|
15
|
+
export declare class InstallPlanner {
|
|
16
|
+
createPlan(options: InstallPlannerOptions): InstallPlan;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=install-planner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install-planner.d.ts","sourceRoot":"","sources":["../../src/services/install-planner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAG9E,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,WAAW,CAAC;IAClB,OAAO,EAAE,cAAc,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,WAAW,CAAC;IAClB,OAAO,EAAE,cAAc,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,UAAU,CAAC;CACxB;AAED,qBAAa,cAAc;IACzB,UAAU,CAAC,OAAO,EAAE,qBAAqB,GAAG,WAAW;CAyBxD"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.InstallPlanner = void 0;
|
|
4
|
+
const paths_js_1 = require("../storage/paths.js");
|
|
5
|
+
class InstallPlanner {
|
|
6
|
+
createPlan(options) {
|
|
7
|
+
const paths = (0, paths_js_1.resolveCliPaths)();
|
|
8
|
+
const nodeConfig = {
|
|
9
|
+
mode: options.mode,
|
|
10
|
+
profile: options.profile,
|
|
11
|
+
controlPlaneUrl: options.mode === 'managed'
|
|
12
|
+
? (options.controlPlaneUrl ?? options.apiUrl)
|
|
13
|
+
: 'http://127.0.0.1:8080',
|
|
14
|
+
localApiUrl: options.mode === 'self-hosted' ? 'http://127.0.0.1:8080' : undefined,
|
|
15
|
+
heartbeatIntervalSeconds: 60,
|
|
16
|
+
commandPollIntervalSeconds: 30,
|
|
17
|
+
reconciliationIntervalSeconds: 900,
|
|
18
|
+
discoveryProviders: options.mode === 'self-hosted' ? ['local', 'docker'] : ['local'],
|
|
19
|
+
approvedPermissionTiers: ['tier0'],
|
|
20
|
+
connectorManifests: [],
|
|
21
|
+
};
|
|
22
|
+
return {
|
|
23
|
+
mode: options.mode,
|
|
24
|
+
profile: options.profile,
|
|
25
|
+
installDir: paths.installDir,
|
|
26
|
+
dashboardUrl: options.mode === 'self-hosted' ? 'http://127.0.0.1:3000' : options.apiUrl,
|
|
27
|
+
nodeConfig,
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
exports.InstallPlanner = InstallPlanner;
|
|
32
|
+
//# sourceMappingURL=install-planner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install-planner.js","sourceRoot":"","sources":["../../src/services/install-planner.ts"],"names":[],"mappings":";;;AACA,kDAAsD;AAiBtD,MAAa,cAAc;IACzB,UAAU,CAAC,OAA8B;QACvC,MAAM,KAAK,GAAG,IAAA,0BAAe,GAAE,CAAC;QAChC,MAAM,UAAU,GAAe;YAC7B,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,eAAe,EAAE,OAAO,CAAC,IAAI,KAAK,SAAS;gBACzC,CAAC,CAAC,CAAC,OAAO,CAAC,eAAe,IAAI,OAAO,CAAC,MAAM,CAAC;gBAC7C,CAAC,CAAC,uBAAuB;YAC3B,WAAW,EAAE,OAAO,CAAC,IAAI,KAAK,aAAa,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,SAAS;YACjF,wBAAwB,EAAE,EAAE;YAC5B,0BAA0B,EAAE,EAAE;YAC9B,6BAA6B,EAAE,GAAG;YAClC,kBAAkB,EAAE,OAAO,CAAC,IAAI,KAAK,aAAa,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;YACpF,uBAAuB,EAAE,CAAC,OAAO,CAAC;YAClC,kBAAkB,EAAE,EAAE;SACvB,CAAC;QAEF,OAAO;YACL,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,YAAY,EAAE,OAAO,CAAC,IAAI,KAAK,aAAa,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM;YACvF,UAAU;SACX,CAAC;IACJ,CAAC;CACF;AA1BD,wCA0BC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { NodeConfig, NodeIdentity } from '../types/runtime.js';
|
|
2
|
+
export interface NodeBundleInstallerResult {
|
|
3
|
+
configPath: string;
|
|
4
|
+
identityPath: string;
|
|
5
|
+
systemdUnitPath: string;
|
|
6
|
+
}
|
|
7
|
+
export declare class NodeBundleInstaller {
|
|
8
|
+
private readonly installRoot;
|
|
9
|
+
constructor(installRoot: string);
|
|
10
|
+
writeBundle(config: NodeConfig, identity: NodeIdentity): NodeBundleInstallerResult;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=node-bundle-installer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node-bundle-installer.d.ts","sourceRoot":"","sources":["../../src/services/node-bundle-installer.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAG/D,MAAM,WAAW,yBAAyB;IACxC,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,qBAAa,mBAAmB;IAClB,OAAO,CAAC,QAAQ,CAAC,WAAW;gBAAX,WAAW,EAAE,MAAM;IAEhD,WAAW,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,YAAY,GAAG,yBAAyB;CAwBnF"}
|
|
@@ -0,0 +1,65 @@
|
|
|
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.NodeBundleInstaller = void 0;
|
|
37
|
+
const fs = __importStar(require("node:fs"));
|
|
38
|
+
const path = __importStar(require("node:path"));
|
|
39
|
+
const systemd_js_1 = require("../utils/systemd.js");
|
|
40
|
+
class NodeBundleInstaller {
|
|
41
|
+
installRoot;
|
|
42
|
+
constructor(installRoot) {
|
|
43
|
+
this.installRoot = installRoot;
|
|
44
|
+
}
|
|
45
|
+
writeBundle(config, identity) {
|
|
46
|
+
const runtimeDir = path.join(this.installRoot, 'node-runtime');
|
|
47
|
+
const configPath = path.join(runtimeDir, 'config.json');
|
|
48
|
+
const identityPath = path.join(runtimeDir, 'identity.json');
|
|
49
|
+
const systemdUnitPath = path.join(runtimeDir, 'cig-node.service');
|
|
50
|
+
fs.mkdirSync(runtimeDir, { recursive: true, mode: 0o700 });
|
|
51
|
+
fs.writeFileSync(configPath, JSON.stringify(config, null, 2), { mode: 0o600 });
|
|
52
|
+
fs.writeFileSync(identityPath, JSON.stringify(identity, null, 2), { mode: 0o600 });
|
|
53
|
+
fs.writeFileSync(systemdUnitPath, (0, systemd_js_1.renderSystemdUnit)({
|
|
54
|
+
workingDirectory: runtimeDir,
|
|
55
|
+
execStart: '/usr/bin/env cig-node',
|
|
56
|
+
}), { mode: 0o644 });
|
|
57
|
+
return {
|
|
58
|
+
configPath,
|
|
59
|
+
identityPath,
|
|
60
|
+
systemdUnitPath,
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
exports.NodeBundleInstaller = NodeBundleInstaller;
|
|
65
|
+
//# sourceMappingURL=node-bundle-installer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node-bundle-installer.js","sourceRoot":"","sources":["../../src/services/node-bundle-installer.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,4CAA8B;AAC9B,gDAAkC;AAElC,oDAAwD;AAQxD,MAAa,mBAAmB;IACD;IAA7B,YAA6B,WAAmB;QAAnB,gBAAW,GAAX,WAAW,CAAQ;IAAG,CAAC;IAEpD,WAAW,CAAC,MAAkB,EAAE,QAAsB;QACpD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;QAC/D,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;QACxD,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC;QAC5D,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,kBAAkB,CAAC,CAAC;QAElE,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAC3D,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAC/E,EAAE,CAAC,aAAa,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QACnF,EAAE,CAAC,aAAa,CACd,eAAe,EACf,IAAA,8BAAiB,EAAC;YAChB,gBAAgB,EAAE,UAAU;YAC5B,SAAS,EAAE,uBAAuB;SACnC,CAAC,EACF,EAAE,IAAI,EAAE,KAAK,EAAE,CAChB,CAAC;QAEF,OAAO;YACL,UAAU;YACV,YAAY;YACZ,eAAe;SAChB,CAAC;IACJ,CAAC;CACF;AA3BD,kDA2BC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remote-executor.d.ts","sourceRoot":"","sources":["../../src/services/remote-executor.ts"],"names":[],"mappings":"AAAA,qBAAa,cAAc;IACzB,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,MAAM;IAIzF,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM;CAGhE"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RemoteExecutor = void 0;
|
|
4
|
+
class RemoteExecutor {
|
|
5
|
+
buildCopyCommand(sourcePath, remoteHost, destinationPath) {
|
|
6
|
+
return `scp -r ${sourcePath} ${remoteHost}:${destinationPath}`;
|
|
7
|
+
}
|
|
8
|
+
buildRemoteCommand(remoteHost, command) {
|
|
9
|
+
return `ssh ${remoteHost} '${command.replace(/'/g, "'\"'\"'")}'`;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
exports.RemoteExecutor = RemoteExecutor;
|
|
13
|
+
//# sourceMappingURL=remote-executor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remote-executor.js","sourceRoot":"","sources":["../../src/services/remote-executor.ts"],"names":[],"mappings":";;;AAAA,MAAa,cAAc;IACzB,gBAAgB,CAAC,UAAkB,EAAE,UAAkB,EAAE,eAAuB;QAC9E,OAAO,UAAU,UAAU,IAAI,UAAU,IAAI,eAAe,EAAE,CAAC;IACjE,CAAC;IAED,kBAAkB,CAAC,UAAkB,EAAE,OAAe;QACpD,OAAO,OAAO,UAAU,KAAK,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,GAAG,CAAC;IACnE,CAAC;CACF;AARD,wCAQC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export interface CliPathOptions {
|
|
2
|
+
homeDir?: string;
|
|
3
|
+
configDir?: string;
|
|
4
|
+
installDir?: string;
|
|
5
|
+
}
|
|
6
|
+
export interface CliPaths {
|
|
7
|
+
homeDir: string;
|
|
8
|
+
configDir: string;
|
|
9
|
+
credentialsFile: string;
|
|
10
|
+
secretsFile: string;
|
|
11
|
+
profilesFile: string;
|
|
12
|
+
stateFile: string;
|
|
13
|
+
installDir: string;
|
|
14
|
+
}
|
|
15
|
+
export declare function resolveCliPaths(options?: CliPathOptions): CliPaths;
|
|
16
|
+
//# sourceMappingURL=paths.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../src/storage/paths.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,cAAc;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,eAAe,CAAC,OAAO,GAAE,cAAmB,GAAG,QAAQ,CAgBtE"}
|
|
@@ -0,0 +1,54 @@
|
|
|
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.resolveCliPaths = resolveCliPaths;
|
|
37
|
+
const os = __importStar(require("node:os"));
|
|
38
|
+
const path = __importStar(require("node:path"));
|
|
39
|
+
function resolveCliPaths(options = {}) {
|
|
40
|
+
const homeDir = options.homeDir ?? os.homedir();
|
|
41
|
+
const configDir = options.configDir ??
|
|
42
|
+
path.join(process.env['XDG_CONFIG_HOME'] ?? path.join(homeDir, '.config'), 'cig');
|
|
43
|
+
const installDir = options.installDir ?? path.join(homeDir, '.cig', 'install');
|
|
44
|
+
return {
|
|
45
|
+
homeDir,
|
|
46
|
+
configDir,
|
|
47
|
+
credentialsFile: path.join(configDir, 'credentials.json'),
|
|
48
|
+
secretsFile: path.join(configDir, 'secrets.json'),
|
|
49
|
+
profilesFile: path.join(configDir, 'profiles.json'),
|
|
50
|
+
stateFile: path.join(configDir, 'state.json'),
|
|
51
|
+
installDir,
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=paths.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/storage/paths.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmBA,0CAgBC;AAnCD,4CAA8B;AAC9B,gDAAkC;AAkBlC,SAAgB,eAAe,CAAC,UAA0B,EAAE;IAC1D,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;IAChD,MAAM,SAAS,GACb,OAAO,CAAC,SAAS;QACjB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,EAAE,KAAK,CAAC,CAAC;IACpF,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;IAE/E,OAAO;QACL,OAAO;QACP,SAAS;QACT,eAAe,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,kBAAkB,CAAC;QACzD,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC;QACjD,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,eAAe,CAAC;QACnD,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC;QAC7C,UAAU;KACX,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { CliPathOptions } from '../storage/paths.js';
|
|
2
|
+
export interface CliSecretStoreOptions {
|
|
3
|
+
paths?: CliPathOptions;
|
|
4
|
+
encryptionSeed?: string;
|
|
5
|
+
}
|
|
6
|
+
export declare class CliSecretStore {
|
|
7
|
+
private readonly filePath;
|
|
8
|
+
private readonly configDir;
|
|
9
|
+
private readonly encryptionKey;
|
|
10
|
+
constructor(options?: CliSecretStoreOptions);
|
|
11
|
+
set<T>(key: string, value: T): void;
|
|
12
|
+
get<T>(key: string): T | null;
|
|
13
|
+
delete(key: string): void;
|
|
14
|
+
clear(): void;
|
|
15
|
+
private readFile;
|
|
16
|
+
private writeFile;
|
|
17
|
+
private encrypt;
|
|
18
|
+
private decrypt;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=cli-secret-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-secret-store.d.ts","sourceRoot":"","sources":["../../src/stores/cli-secret-store.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,cAAc,EAAmB,MAAM,qBAAqB,CAAC;AAYtE,MAAM,WAAW,qBAAqB;IACpC,KAAK,CAAC,EAAE,cAAc,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;gBAE3B,OAAO,GAAE,qBAA0B;IAQ/C,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI;IAMnC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,IAAI;IAU7B,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAMzB,KAAK,IAAI,IAAI;IAMb,OAAO,CAAC,QAAQ;IAQhB,OAAO,CAAC,SAAS;IAKjB,OAAO,CAAC,OAAO;IAWf,OAAO,CAAC,OAAO;CAahB"}
|