@simplens/onboard 1.0.0 → 1.0.2
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/README.md +331 -214
- package/dist/__tests__/env-config.test.d.ts +2 -0
- package/dist/__tests__/env-config.test.d.ts.map +1 -0
- package/dist/__tests__/env-config.test.js +23 -0
- package/dist/__tests__/env-config.test.js.map +1 -0
- package/dist/__tests__/infra-prompts.test.d.ts +2 -0
- package/dist/__tests__/infra-prompts.test.d.ts.map +1 -0
- package/dist/__tests__/infra-prompts.test.js +43 -0
- package/dist/__tests__/infra-prompts.test.js.map +1 -0
- package/dist/__tests__/infra.test.d.ts +2 -0
- package/dist/__tests__/infra.test.d.ts.map +1 -0
- package/dist/__tests__/infra.test.js +14 -0
- package/dist/__tests__/infra.test.js.map +1 -0
- package/dist/__tests__/nginx.test.d.ts +2 -0
- package/dist/__tests__/nginx.test.d.ts.map +1 -0
- package/dist/__tests__/nginx.test.js +16 -0
- package/dist/__tests__/nginx.test.js.map +1 -0
- package/dist/env-config.d.ts +27 -12
- package/dist/env-config.d.ts.map +1 -1
- package/dist/env-config.js +258 -141
- package/dist/env-config.js.map +1 -1
- package/dist/index.js +341 -71
- package/dist/index.js.map +1 -1
- package/dist/infra.d.ts +17 -14
- package/dist/infra.d.ts.map +1 -1
- package/dist/infra.js +265 -176
- package/dist/infra.js.map +1 -1
- package/dist/plugins.d.ts +5 -10
- package/dist/plugins.d.ts.map +1 -1
- package/dist/plugins.js +75 -44
- package/dist/plugins.js.map +1 -1
- package/dist/services.d.ts +1 -23
- package/dist/services.d.ts.map +1 -1
- package/dist/services.js +47 -62
- package/dist/services.js.map +1 -1
- package/dist/templates.d.ts +3 -2
- package/dist/templates.d.ts.map +1 -1
- package/dist/templates.js +203 -198
- package/dist/templates.js.map +1 -1
- package/dist/types/domain.d.ts +2 -0
- package/dist/types/domain.d.ts.map +1 -1
- package/dist/ui.d.ts +45 -0
- package/dist/ui.d.ts.map +1 -0
- package/dist/ui.js +93 -0
- package/dist/ui.js.map +1 -0
- package/dist/utils/logger.d.ts +1 -0
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +32 -7
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils.d.ts +8 -0
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +66 -2
- package/dist/utils.js.map +1 -1
- package/dist/validators.d.ts +1 -52
- package/dist/validators.d.ts.map +1 -1
- package/dist/validators.js +10 -57
- package/dist/validators.js.map +1 -1
- package/package.json +3 -5
- package/src/__tests__/env-config.test.ts +28 -0
- package/src/__tests__/errors.test.ts +187 -187
- package/src/__tests__/infra-prompts.test.ts +54 -0
- package/src/__tests__/infra.test.ts +15 -0
- package/src/__tests__/utils.test.ts +142 -142
- package/src/__tests__/validators.test.ts +195 -195
- package/src/config/constants.ts +86 -86
- package/src/config/index.ts +1 -1
- package/src/env-config.ts +455 -320
- package/src/index.ts +534 -203
- package/src/infra.ts +404 -300
- package/src/plugins.ts +221 -190
- package/src/services.ts +175 -190
- package/src/templates.ts +209 -203
- package/src/types/domain.ts +129 -127
- package/src/types/errors.ts +173 -173
- package/src/types/index.ts +2 -2
- package/src/ui.ts +91 -0
- package/src/utils/index.ts +1 -1
- package/src/utils/logger.ts +144 -118
- package/src/utils.ts +183 -105
- package/src/validators.ts +145 -192
- package/tsconfig.json +18 -18
- package/vitest.config.ts +22 -20
package/dist/index.js
CHANGED
|
@@ -1,58 +1,221 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { Command } from 'commander';
|
|
3
3
|
import path from 'path';
|
|
4
|
-
import
|
|
5
|
-
import {
|
|
4
|
+
import { displayBanner, logSuccess, initLogger, logDebug, printStepHeader, printCommandHints, logWarning, } from './utils.js';
|
|
5
|
+
import { text, confirm, select } from '@clack/prompts';
|
|
6
|
+
import { intro, outro, handleCancel, log, note } from './ui.js';
|
|
6
7
|
import { validatePrerequisites } from './validators.js';
|
|
7
|
-
import {
|
|
8
|
-
import { promptEnvVariables, generateEnvFile, appendPluginEnv, } from './env-config.js';
|
|
9
|
-
import { fetchAvailablePlugins, promptPluginSelection, generatePluginConfig, parseConfigCredentials, promptPluginCredentials, } from './plugins.js';
|
|
8
|
+
import { promptInfraServicesWithBasePath, generateInfraCompose, writeAppCompose, generateNginxConfig, } from './infra.js';
|
|
9
|
+
import { promptEnvVariables, generateEnvFile, appendPluginEnv, promptBasePath, normalizeBasePath, validateBasePath, DEFAULT_BASE_PATH, } from './env-config.js';
|
|
10
|
+
import { fetchAvailablePlugins, promptPluginSelection, generatePluginConfig, parseConfigCredentials, promptPluginCredentials, generateDefaultPluginCredentials, } from './plugins.js';
|
|
10
11
|
import { promptStartServices, startInfraServices, waitForInfraHealth, startAppServices, displayServiceStatus, } from './services.js';
|
|
11
12
|
const program = new Command();
|
|
12
13
|
program
|
|
13
14
|
.name('@simplens/onboard')
|
|
14
15
|
.description('A CLI tool to setup a SimpleNS instance on your machine/server')
|
|
15
16
|
.version('1.0.0')
|
|
16
|
-
.option('--
|
|
17
|
+
.option('--full', 'Non-interactive mode - all options must be provided via CLI')
|
|
18
|
+
.option('--infra [services...]', 'Infrastructure services (mongo, kafka, kafka-ui, redis, nginx, loki, grafana)')
|
|
17
19
|
.option('--env <mode>', 'Environment setup mode: "default" or "interactive"')
|
|
18
20
|
.option('--dir <path>', 'Target directory for setup')
|
|
19
|
-
.
|
|
20
|
-
|
|
21
|
+
.option('--base-path <path>', 'Dashboard BASE_PATH (example: /dashboard, default: root)')
|
|
22
|
+
.option('--plugin [plugins...]', 'Plugins to install (e.g., @simplens/mock @simplens/nodemailer-gmail)')
|
|
23
|
+
.option('--no-output', 'Suppress all console output (silent mode)');
|
|
24
|
+
function printStep(step, total, title) {
|
|
25
|
+
printStepHeader(step, total, title);
|
|
26
|
+
}
|
|
27
|
+
function shouldAutoEnableNginx(basePath) {
|
|
28
|
+
return normalizeBasePath(basePath) !== DEFAULT_BASE_PATH;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Valid infrastructure services
|
|
32
|
+
*/
|
|
33
|
+
const VALID_INFRA_SERVICES = ['mongo', 'kafka', 'kafka-ui', 'redis', 'nginx', 'loki', 'grafana'];
|
|
34
|
+
/**
|
|
35
|
+
* Validate infrastructure service names
|
|
36
|
+
*/
|
|
37
|
+
function validateInfraServices(services) {
|
|
38
|
+
const invalid = services.filter(s => !VALID_INFRA_SERVICES.includes(s));
|
|
39
|
+
return { valid: invalid.length === 0, invalid };
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Validate plugin names (must start with @simplens/ or be a valid npm package)
|
|
43
|
+
*/
|
|
44
|
+
function validatePlugins(plugins) {
|
|
45
|
+
const invalid = plugins.filter(p => {
|
|
46
|
+
// Must start with @ or be a valid npm package name
|
|
47
|
+
return !p.match(/^(@[\w-]+\/[\w-]+|[\w-]+)$/);
|
|
48
|
+
});
|
|
49
|
+
return { valid: invalid.length === 0, invalid };
|
|
50
|
+
}
|
|
51
|
+
function showSetupSummary(setupOptions, targetDir, autoNginx) {
|
|
52
|
+
const basePathLabel = setupOptions.basePath || '(root)';
|
|
53
|
+
const infraLabel = setupOptions.infra
|
|
54
|
+
? `enabled (${setupOptions.infraServices.join(', ')})`
|
|
55
|
+
: 'disabled';
|
|
56
|
+
const pluginsLabel = setupOptions.plugins.length > 0
|
|
57
|
+
? setupOptions.plugins.join(', ')
|
|
58
|
+
: 'none';
|
|
59
|
+
const summaryLines = [
|
|
60
|
+
`Target directory : ${targetDir}`,
|
|
61
|
+
`Infrastructure : ${infraLabel}`,
|
|
62
|
+
`Environment mode : ${setupOptions.envMode}`,
|
|
63
|
+
`BASE_PATH : ${basePathLabel}`,
|
|
64
|
+
`Plugins : ${pluginsLabel}`,
|
|
65
|
+
`Nginx auto-include : ${autoNginx ? 'enabled (BASE_PATH is non-default)' : 'disabled'}`,
|
|
66
|
+
].join('\n');
|
|
67
|
+
note(summaryLines, 'Setup Summary');
|
|
68
|
+
}
|
|
21
69
|
/**
|
|
22
70
|
* Prompt for setup options if not provided via CLI args
|
|
71
|
+
* In --full mode, all required options must be provided via CLI
|
|
23
72
|
*/
|
|
24
|
-
async function promptSetupOptions() {
|
|
25
|
-
const
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
}
|
|
33
|
-
{
|
|
34
|
-
|
|
35
|
-
|
|
73
|
+
async function promptSetupOptions(options) {
|
|
74
|
+
const isFullMode = options.full === true;
|
|
75
|
+
// --- Validate --full mode requirements ---
|
|
76
|
+
if (isFullMode) {
|
|
77
|
+
const errors = [];
|
|
78
|
+
// --env is required in full mode
|
|
79
|
+
if (!options.env) {
|
|
80
|
+
errors.push('--env <mode> is required in --full mode (use \"default\" or \"interactive\")');
|
|
81
|
+
}
|
|
82
|
+
else if (options.env !== 'default' && options.env !== 'interactive') {
|
|
83
|
+
errors.push('--env must be either \"default\" or \"interactive\"');
|
|
84
|
+
}
|
|
85
|
+
// Validate --base-path if provided
|
|
86
|
+
if (options.basePath) {
|
|
87
|
+
const validation = validateBasePath(normalizeBasePath(options.basePath));
|
|
88
|
+
if (validation !== true) {
|
|
89
|
+
errors.push(`Invalid --base-path: ${validation}`);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
// Validate --infra services if provided
|
|
93
|
+
if (options.infra && Array.isArray(options.infra)) {
|
|
94
|
+
const { valid, invalid } = validateInfraServices(options.infra);
|
|
95
|
+
if (!valid) {
|
|
96
|
+
errors.push(`Invalid infrastructure services: ${invalid.join(', ')}. ` +
|
|
97
|
+
`Valid options: ${VALID_INFRA_SERVICES.join(', ')}`);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
// Validate --plugin if provided
|
|
101
|
+
if (options.plugin && Array.isArray(options.plugin)) {
|
|
102
|
+
const { valid, invalid } = validatePlugins(options.plugin);
|
|
103
|
+
if (!valid) {
|
|
104
|
+
errors.push(`Invalid plugin names: ${invalid.join(', ')}`);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
if (errors.length > 0) {
|
|
108
|
+
console.error('\\n❌ Validation errors in --full mode:\\n');
|
|
109
|
+
errors.forEach(err => console.error(` • ${err}`));
|
|
110
|
+
console.error('\\nRun with --help to see usage examples.\\n');
|
|
111
|
+
process.exit(1);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
// --- BASE_PATH ---
|
|
115
|
+
let basePathValue;
|
|
116
|
+
const cliBasePath = typeof options.basePath === 'string'
|
|
117
|
+
? normalizeBasePath(options.basePath)
|
|
118
|
+
: undefined;
|
|
119
|
+
if (cliBasePath !== undefined) {
|
|
120
|
+
const validation = validateBasePath(cliBasePath);
|
|
121
|
+
if (validation !== true) {
|
|
122
|
+
throw new Error(`Invalid --base-path value: ${validation}`);
|
|
123
|
+
}
|
|
124
|
+
basePathValue = cliBasePath;
|
|
125
|
+
}
|
|
126
|
+
else if (isFullMode) {
|
|
127
|
+
basePathValue = DEFAULT_BASE_PATH; // Default to root in full mode
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
basePathValue = await promptBasePath(DEFAULT_BASE_PATH);
|
|
131
|
+
}
|
|
132
|
+
// --- Infra flag and services ---
|
|
133
|
+
let infraValue;
|
|
134
|
+
let infraServices = [];
|
|
135
|
+
if (Array.isArray(options.infra) && options.infra.length > 0) {
|
|
136
|
+
// --infra with services provided
|
|
137
|
+
infraValue = true;
|
|
138
|
+
infraServices = options.infra;
|
|
139
|
+
}
|
|
140
|
+
else if (options.infra === true) {
|
|
141
|
+
// --infra flag without services (backward compatibility - prompt for services)
|
|
142
|
+
infraValue = true;
|
|
143
|
+
if (isFullMode) {
|
|
144
|
+
// In full mode, empty --infra means no services selected (error)
|
|
145
|
+
console.error('\\n❌ In --full mode, --infra requires service names.\\n');
|
|
146
|
+
console.error('Example: --infra mongo kafka redis\\n');
|
|
147
|
+
process.exit(1);
|
|
148
|
+
}
|
|
149
|
+
// Not in full mode, will prompt later
|
|
150
|
+
}
|
|
151
|
+
else {
|
|
152
|
+
// No --infra flag provided
|
|
153
|
+
if (isFullMode) {
|
|
154
|
+
infraValue = false; // Default to no infrastructure in full mode
|
|
155
|
+
}
|
|
156
|
+
else {
|
|
157
|
+
const result = await confirm({
|
|
158
|
+
message: 'Do you want to setup infrastructure services (MongoDB, Kafka, Redis, etc.)?',
|
|
159
|
+
initialValue: true,
|
|
160
|
+
withGuide: true,
|
|
161
|
+
});
|
|
162
|
+
handleCancel(result);
|
|
163
|
+
infraValue = result;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
// --- Env mode ---
|
|
167
|
+
let envModeValue;
|
|
168
|
+
if (options.env) {
|
|
169
|
+
envModeValue = options.env;
|
|
170
|
+
}
|
|
171
|
+
else if (isFullMode) {
|
|
172
|
+
// Already validated above, this shouldn't happen
|
|
173
|
+
envModeValue = 'default';
|
|
174
|
+
}
|
|
175
|
+
else {
|
|
176
|
+
const result = await select({
|
|
36
177
|
message: 'Select environment configuration mode:',
|
|
37
|
-
|
|
38
|
-
{
|
|
39
|
-
{
|
|
178
|
+
options: [
|
|
179
|
+
{ value: 'default', label: 'Default', hint: 'use preset values, prompt only for critical' },
|
|
180
|
+
{ value: 'interactive', label: 'Interactive', hint: 'prompt for all variables' },
|
|
40
181
|
],
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
182
|
+
initialValue: 'default',
|
|
183
|
+
withGuide: true,
|
|
184
|
+
});
|
|
185
|
+
handleCancel(result);
|
|
186
|
+
envModeValue = result;
|
|
187
|
+
}
|
|
188
|
+
// --- Target directory ---
|
|
189
|
+
let targetDirValue;
|
|
190
|
+
if (options.dir) {
|
|
191
|
+
targetDirValue = options.dir;
|
|
192
|
+
}
|
|
193
|
+
else if (isFullMode) {
|
|
194
|
+
targetDirValue = process.cwd(); // Default to current directory in full mode
|
|
195
|
+
}
|
|
196
|
+
else {
|
|
197
|
+
const result = await text({
|
|
47
198
|
message: 'Target directory for setup:',
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
199
|
+
defaultValue: process.cwd(),
|
|
200
|
+
initialValue: process.cwd(),
|
|
201
|
+
withGuide: true,
|
|
202
|
+
});
|
|
203
|
+
handleCancel(result);
|
|
204
|
+
targetDirValue = result;
|
|
205
|
+
}
|
|
206
|
+
// --- Plugins ---
|
|
207
|
+
let pluginsValue = [];
|
|
208
|
+
if (Array.isArray(options.plugin) && options.plugin.length > 0) {
|
|
209
|
+
pluginsValue = options.plugin;
|
|
210
|
+
}
|
|
211
|
+
// If not provided and not in full mode, will prompt later in the main workflow
|
|
52
212
|
return {
|
|
53
|
-
infra:
|
|
54
|
-
|
|
55
|
-
|
|
213
|
+
infra: infraValue,
|
|
214
|
+
infraServices: infraServices,
|
|
215
|
+
envMode: envModeValue || 'default',
|
|
216
|
+
targetDir: targetDirValue || process.cwd(),
|
|
217
|
+
basePath: basePathValue,
|
|
218
|
+
plugins: pluginsValue,
|
|
56
219
|
};
|
|
57
220
|
}
|
|
58
221
|
/**
|
|
@@ -60,61 +223,127 @@ async function promptSetupOptions() {
|
|
|
60
223
|
*/
|
|
61
224
|
async function main() {
|
|
62
225
|
try {
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
const
|
|
226
|
+
const totalSteps = 6;
|
|
227
|
+
// Parse command line arguments FIRST
|
|
228
|
+
program.parse(process.argv);
|
|
229
|
+
const options = program.opts();
|
|
230
|
+
// Initialize logger based on CLI flags (before any output)
|
|
67
231
|
initLogger({
|
|
68
|
-
verbose:
|
|
69
|
-
debug:
|
|
70
|
-
|
|
232
|
+
verbose: options.verbose || false,
|
|
233
|
+
debug: options.debug || false,
|
|
234
|
+
silent: !options.output, // --no-output sets options.output to false
|
|
235
|
+
logFile: options.debug ? path.join(process.cwd(), 'onboard-debug.log') : undefined,
|
|
71
236
|
});
|
|
237
|
+
// Display banner (after logger is initialized)
|
|
238
|
+
displayBanner();
|
|
239
|
+
// Clack intro
|
|
240
|
+
intro('SimpleNS Onboard');
|
|
72
241
|
logDebug('Logger initialized');
|
|
73
|
-
logDebug(`CLI options: ${JSON.stringify(
|
|
242
|
+
logDebug(`CLI options: ${JSON.stringify(options)}`);
|
|
74
243
|
// Prompt for setup options if not provided
|
|
75
|
-
const setupOptions = await promptSetupOptions();
|
|
244
|
+
const setupOptions = await promptSetupOptions(options);
|
|
76
245
|
// Get target directory
|
|
77
246
|
const targetDir = path.resolve(setupOptions.targetDir);
|
|
78
|
-
|
|
247
|
+
const autoEnableNginx = shouldAutoEnableNginx(setupOptions.basePath);
|
|
79
248
|
logDebug(`Resolved target directory: ${targetDir}`);
|
|
249
|
+
showSetupSummary(setupOptions, targetDir, autoEnableNginx);
|
|
80
250
|
// Step 1: Validate prerequisites
|
|
251
|
+
log.step('Step 1/6 — Prerequisites Validation');
|
|
81
252
|
await validatePrerequisites();
|
|
82
253
|
// Step 2: Infrastructure setup (if --infra flag is provided)
|
|
254
|
+
log.step('Step 2/6 — Infrastructure Setup');
|
|
83
255
|
let selectedInfraServices = [];
|
|
84
|
-
let infraHost = 'host.docker.internal';
|
|
85
256
|
if (setupOptions.infra) {
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
257
|
+
// Use pre-provided services from CLI, or prompt for them
|
|
258
|
+
if (setupOptions.infraServices.length > 0) {
|
|
259
|
+
selectedInfraServices = setupOptions.infraServices;
|
|
260
|
+
log.info(`Using infrastructure services: ${selectedInfraServices.join(', ')}`);
|
|
261
|
+
}
|
|
262
|
+
else {
|
|
263
|
+
// Prompt for services (interactive mode)
|
|
264
|
+
if (!autoEnableNginx) {
|
|
265
|
+
log.info('BASE_PATH is empty, nginx reverse proxy is disabled.');
|
|
266
|
+
selectedInfraServices = await promptInfraServicesWithBasePath({ allowNginx: false });
|
|
267
|
+
}
|
|
268
|
+
else {
|
|
269
|
+
selectedInfraServices = await promptInfraServicesWithBasePath({ allowNginx: true });
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
if (autoEnableNginx && !selectedInfraServices.includes('nginx')) {
|
|
273
|
+
selectedInfraServices.push('nginx');
|
|
274
|
+
log.info('BASE_PATH is non-default, so nginx was added automatically.');
|
|
275
|
+
}
|
|
276
|
+
await generateInfraCompose(targetDir, selectedInfraServices);
|
|
89
277
|
}
|
|
90
278
|
else {
|
|
91
|
-
|
|
279
|
+
log.info('Skipping infrastructure setup (use --infra to enable).');
|
|
92
280
|
}
|
|
93
|
-
// Always write app docker-compose
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
281
|
+
// Step 3: Always write app docker-compose
|
|
282
|
+
log.step('Step 3/6 — Application Compose Setup');
|
|
283
|
+
const includeNginxInAppCompose = autoEnableNginx && !selectedInfraServices.includes('nginx');
|
|
284
|
+
if (includeNginxInAppCompose) {
|
|
285
|
+
log.info('Including nginx in docker-compose.yaml because BASE_PATH is non-default.');
|
|
286
|
+
}
|
|
287
|
+
await writeAppCompose(targetDir, { includeNginx: includeNginxInAppCompose });
|
|
288
|
+
// Step 4: Environment configuration
|
|
289
|
+
log.step('Step 4/6 — Environment Configuration');
|
|
98
290
|
const envMode = setupOptions.envMode;
|
|
99
|
-
const envVars = await promptEnvVariables(envMode, selectedInfraServices,
|
|
291
|
+
const envVars = await promptEnvVariables(envMode, selectedInfraServices, setupOptions.basePath, options.full || false);
|
|
100
292
|
await generateEnvFile(targetDir, envVars);
|
|
101
|
-
//
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
293
|
+
// In full mode, notify user about auto-generated credentials
|
|
294
|
+
if (options.full) {
|
|
295
|
+
logWarning('⚠️ Auto-generated credentials in .env file. ' +
|
|
296
|
+
'Please update NS_API_KEY, AUTH_SECRET, and ADMIN_PASSWORD before deploying to production!');
|
|
297
|
+
}
|
|
298
|
+
// Generate nginx.conf whenever nginx is active in either compose file
|
|
299
|
+
const nginxEnabled = selectedInfraServices.includes('nginx') || includeNginxInAppCompose;
|
|
300
|
+
if (nginxEnabled) {
|
|
301
|
+
await generateNginxConfig(targetDir, setupOptions.basePath);
|
|
302
|
+
}
|
|
303
|
+
// Step 5: Plugin installation
|
|
304
|
+
log.step('Step 5/6 — Plugin Installation');
|
|
305
|
+
let selectedPlugins = [];
|
|
306
|
+
let pluginCredentialKeys = [];
|
|
307
|
+
// Use pre-provided plugins from CLI, or prompt for them
|
|
308
|
+
if (setupOptions.plugins.length > 0) {
|
|
309
|
+
selectedPlugins = setupOptions.plugins;
|
|
310
|
+
log.info(`Using plugins: ${selectedPlugins.join(', ')}`);
|
|
311
|
+
}
|
|
312
|
+
else if (!options.full) {
|
|
313
|
+
// Only prompt in interactive mode
|
|
314
|
+
const availablePlugins = await fetchAvailablePlugins();
|
|
315
|
+
selectedPlugins = await promptPluginSelection(availablePlugins);
|
|
316
|
+
}
|
|
105
317
|
if (selectedPlugins.length > 0) {
|
|
106
318
|
await generatePluginConfig(targetDir, selectedPlugins);
|
|
107
319
|
// Extract and prompt for plugin credentials
|
|
108
320
|
const configPath = path.join(targetDir, 'simplens.config.yaml');
|
|
109
321
|
const credentialKeys = await parseConfigCredentials(configPath);
|
|
322
|
+
pluginCredentialKeys = credentialKeys; // Store for later use
|
|
110
323
|
if (credentialKeys.length > 0) {
|
|
111
|
-
|
|
112
|
-
|
|
324
|
+
if (options.full) {
|
|
325
|
+
// In full mode, auto-generate placeholder credentials
|
|
326
|
+
const pluginCreds = generateDefaultPluginCredentials(credentialKeys);
|
|
327
|
+
await appendPluginEnv(targetDir, pluginCreds);
|
|
328
|
+
logWarning(`⚠️ Auto-generated placeholder plugin credentials. ` +
|
|
329
|
+
`Please update these in .env file: ${credentialKeys.join(', ')}`);
|
|
330
|
+
}
|
|
331
|
+
else {
|
|
332
|
+
const pluginCreds = await promptPluginCredentials(credentialKeys);
|
|
333
|
+
await appendPluginEnv(targetDir, pluginCreds);
|
|
334
|
+
}
|
|
113
335
|
}
|
|
114
336
|
}
|
|
115
|
-
// Step
|
|
116
|
-
|
|
117
|
-
|
|
337
|
+
// Step 6: Service orchestration
|
|
338
|
+
log.step('Step 6/6 — Service Orchestration');
|
|
339
|
+
let shouldStart = false;
|
|
340
|
+
if (options.full) {
|
|
341
|
+
// In full mode, don't auto-start services, just show commands
|
|
342
|
+
log.info('In --full mode, services are not auto-started.');
|
|
343
|
+
}
|
|
344
|
+
else {
|
|
345
|
+
shouldStart = await promptStartServices();
|
|
346
|
+
}
|
|
118
347
|
if (shouldStart) {
|
|
119
348
|
// Start infra services first (if --infra was used)
|
|
120
349
|
if (setupOptions.infra && selectedInfraServices.length > 0) {
|
|
@@ -127,19 +356,60 @@ async function main() {
|
|
|
127
356
|
await displayServiceStatus();
|
|
128
357
|
}
|
|
129
358
|
else {
|
|
130
|
-
|
|
359
|
+
log.info('Services not started. You can start them later with:');
|
|
360
|
+
const commands = [];
|
|
131
361
|
if (setupOptions.infra) {
|
|
132
|
-
|
|
362
|
+
commands.push('docker-compose -f docker-compose.infra.yaml up -d');
|
|
133
363
|
}
|
|
134
|
-
|
|
364
|
+
commands.push('docker-compose up -d');
|
|
365
|
+
printCommandHints('Manual startup commands', commands);
|
|
135
366
|
}
|
|
136
367
|
// Final success message
|
|
137
|
-
logSuccess('
|
|
368
|
+
logSuccess('SimpleNS onboarding completed successfully.');
|
|
369
|
+
// In full mode, show a comprehensive security warning
|
|
370
|
+
if (options.full) {
|
|
371
|
+
const credentialWarnings = [
|
|
372
|
+
' • NS_API_KEY - API authentication key',
|
|
373
|
+
' • AUTH_SECRET - Session secret for dashboard',
|
|
374
|
+
' • ADMIN_PASSWORD - Dashboard admin password',
|
|
375
|
+
];
|
|
376
|
+
if (pluginCredentialKeys.length > 0) {
|
|
377
|
+
credentialWarnings.push(` • Plugin credentials: ${pluginCredentialKeys.join(', ')}`);
|
|
378
|
+
}
|
|
379
|
+
note('⚠️ IMPORTANT: Auto-generated credentials were used for non-interactive setup.\n' +
|
|
380
|
+
'\n' +
|
|
381
|
+
'Please update the following in your .env file before production use:\n' +
|
|
382
|
+
credentialWarnings.join('\n') +
|
|
383
|
+
'\n\n' +
|
|
384
|
+
'Default credentials are NOT secure for production environments.', 'Security Notice');
|
|
385
|
+
}
|
|
386
|
+
// Display access information
|
|
387
|
+
if (nginxEnabled) {
|
|
388
|
+
if (setupOptions.basePath) {
|
|
389
|
+
note(`Dashboard : http://localhost${setupOptions.basePath}\nAPI : http://localhost/api/notification/`, 'Service Access');
|
|
390
|
+
}
|
|
391
|
+
else {
|
|
392
|
+
note('Dashboard : http://localhost\nAPI : http://localhost/api/notification/', 'Service Access');
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
else {
|
|
396
|
+
note('Dashboard : http://localhost:3002\nAPI : http://localhost:3000', 'Service Access');
|
|
397
|
+
}
|
|
398
|
+
// Clack outro
|
|
399
|
+
outro('Setup complete — happy notifying! 🚀');
|
|
138
400
|
}
|
|
139
401
|
catch (error) {
|
|
140
402
|
// Import at top of file
|
|
141
403
|
const { formatErrorForUser } = await import('./types/errors.js');
|
|
142
|
-
|
|
404
|
+
const { getLoggerConfig } = await import('./utils/logger.js');
|
|
405
|
+
// Always log errors to stderr, even in silent mode
|
|
406
|
+
if (!getLoggerConfig().silent) {
|
|
407
|
+
console.log('\n' + formatErrorForUser(error));
|
|
408
|
+
}
|
|
409
|
+
else {
|
|
410
|
+
// In silent mode, write to stderr
|
|
411
|
+
console.error(formatErrorForUser(error));
|
|
412
|
+
}
|
|
143
413
|
// Log full error to stderr for debugging
|
|
144
414
|
if (process.env.DEBUG) {
|
|
145
415
|
console.error('\nFull error details:');
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/infra.d.ts
CHANGED
|
@@ -1,31 +1,34 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Prompts user to select which infrastructure services to deploy.
|
|
3
|
-
* Services include MongoDB, Kafka, Redis, Loki, and Grafana.
|
|
4
3
|
*
|
|
5
4
|
* @returns Array of selected service IDs (e.g., ['mongo', 'kafka', 'redis'])
|
|
6
5
|
* @throws Error if no services are selected
|
|
7
|
-
*
|
|
8
|
-
* @example
|
|
9
|
-
* ```ts
|
|
10
|
-
* const services = await promptInfraServices();
|
|
11
|
-
* // Returns: ['mongo', 'kafka', 'kafka-ui', 'redis']
|
|
12
|
-
* ```
|
|
13
6
|
*/
|
|
14
7
|
export declare function promptInfraServices(): Promise<string[]>;
|
|
15
8
|
/**
|
|
16
|
-
*
|
|
9
|
+
* Prompts infrastructure services with optional nginx availability.
|
|
10
|
+
* If nginx is disabled, it is removed from choices and from result safety-check.
|
|
17
11
|
*/
|
|
18
|
-
export declare function
|
|
12
|
+
export declare function promptInfraServicesWithBasePath(options: {
|
|
13
|
+
allowNginx: boolean;
|
|
14
|
+
}): Promise<string[]>;
|
|
19
15
|
/**
|
|
20
|
-
*
|
|
16
|
+
* Generate and write docker-compose.infra.yaml
|
|
21
17
|
*/
|
|
22
|
-
export declare function
|
|
18
|
+
export declare function generateInfraCompose(targetDir: string, selectedServices: string[]): Promise<void>;
|
|
23
19
|
/**
|
|
24
|
-
*
|
|
20
|
+
* Build app docker-compose content.
|
|
21
|
+
* Optionally inject nginx reverse-proxy service before the volumes section.
|
|
25
22
|
*/
|
|
26
|
-
export declare function
|
|
23
|
+
export declare function buildAppComposeContent(includeNginx: boolean): string;
|
|
27
24
|
/**
|
|
28
25
|
* Write app docker-compose.yaml
|
|
29
26
|
*/
|
|
30
|
-
export declare function writeAppCompose(targetDir: string
|
|
27
|
+
export declare function writeAppCompose(targetDir: string, options?: {
|
|
28
|
+
includeNginx?: boolean;
|
|
29
|
+
}): Promise<void>;
|
|
30
|
+
/**
|
|
31
|
+
* Generate nginx.conf based on basePath configuration
|
|
32
|
+
*/
|
|
33
|
+
export declare function generateNginxConfig(targetDir: string, basePath: string): Promise<void>;
|
|
31
34
|
//# sourceMappingURL=infra.d.ts.map
|
package/dist/infra.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"infra.d.ts","sourceRoot":"","sources":["../src/infra.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"infra.d.ts","sourceRoot":"","sources":["../src/infra.ts"],"names":[],"mappings":"AAiBA;;;;;GAKG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAE7D;AAED;;;GAGG;AACH,wBAAsB,+BAA+B,CAAC,OAAO,EAAE;IAC3D,UAAU,EAAE,OAAO,CAAC;CACvB,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CA6BpB;AAuLD;;GAEG;AACH,wBAAsB,oBAAoB,CACtC,SAAS,EAAE,MAAM,EACjB,gBAAgB,EAAE,MAAM,EAAE,GAC3B,OAAO,CAAC,IAAI,CAAC,CAWf;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,YAAY,EAAE,OAAO,GAAG,MAAM,CAWpE;AAED;;GAEG;AACH,wBAAsB,eAAe,CACjC,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE;IAAE,YAAY,CAAC,EAAE,OAAO,CAAA;CAAO,GACzC,OAAO,CAAC,IAAI,CAAC,CAOf;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CACrC,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC,CAqGf"}
|