@aristanetworks/eos-mcp-server 0.6.1-beta
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/CHANGELOG.md +56 -0
- package/LICENSE +203 -0
- package/README.md +652 -0
- package/dist/cli.d.ts +16 -0
- package/dist/cli.js +188 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/printServerInfo.d.ts +2 -0
- package/dist/commands/printServerInfo.js +14 -0
- package/dist/commands/printServerInfo.js.map +1 -0
- package/dist/commands/probe.d.ts +2 -0
- package/dist/commands/probe.js +26 -0
- package/dist/commands/probe.js.map +1 -0
- package/dist/commands/validateInventory.d.ts +9 -0
- package/dist/commands/validateInventory.js +59 -0
- package/dist/commands/validateInventory.js.map +1 -0
- package/dist/config/loadConfig.d.ts +3 -0
- package/dist/config/loadConfig.js +84 -0
- package/dist/config/loadConfig.js.map +1 -0
- package/dist/config/schema.d.ts +151 -0
- package/dist/config/schema.js +54 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/configuration/getRunningConfig.d.ts +24 -0
- package/dist/configuration/getRunningConfig.js +38 -0
- package/dist/configuration/getRunningConfig.js.map +1 -0
- package/dist/connection/eosDeviceReader.d.ts +18 -0
- package/dist/connection/eosDeviceReader.js +13 -0
- package/dist/connection/eosDeviceReader.js.map +1 -0
- package/dist/connection/resolveConnection.d.ts +4 -0
- package/dist/connection/resolveConnection.js +58 -0
- package/dist/connection/resolveConnection.js.map +1 -0
- package/dist/connection/validateStartupConnections.d.ts +4 -0
- package/dist/connection/validateStartupConnections.js +28 -0
- package/dist/connection/validateStartupConnections.js.map +1 -0
- package/dist/core/errors.d.ts +8 -0
- package/dist/core/errors.js +22 -0
- package/dist/core/errors.js.map +1 -0
- package/dist/core/version.d.ts +2 -0
- package/dist/core/version.js +7 -0
- package/dist/core/version.js.map +1 -0
- package/dist/eapi/client.d.ts +8 -0
- package/dist/eapi/client.js +159 -0
- package/dist/eapi/client.js.map +1 -0
- package/dist/eapi/commands.d.ts +2 -0
- package/dist/eapi/commands.js +25 -0
- package/dist/eapi/commands.js.map +1 -0
- package/dist/eapi/transport.d.ts +21 -0
- package/dist/eapi/transport.js +143 -0
- package/dist/eapi/transport.js.map +1 -0
- package/dist/eapi/types.d.ts +49 -0
- package/dist/eapi/types.js +15 -0
- package/dist/eapi/types.js.map +1 -0
- package/dist/facts/getFacts.d.ts +33 -0
- package/dist/facts/getFacts.js +50 -0
- package/dist/facts/getFacts.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +66 -0
- package/dist/index.js.map +1 -0
- package/dist/inventory/buildModel.d.ts +3 -0
- package/dist/inventory/buildModel.js +79 -0
- package/dist/inventory/buildModel.js.map +1 -0
- package/dist/inventory/effectiveVars.d.ts +2 -0
- package/dist/inventory/effectiveVars.js +52 -0
- package/dist/inventory/effectiveVars.js.map +1 -0
- package/dist/inventory/graph.d.ts +6 -0
- package/dist/inventory/graph.js +81 -0
- package/dist/inventory/graph.js.map +1 -0
- package/dist/inventory/internalTypes.d.ts +17 -0
- package/dist/inventory/internalTypes.js +2 -0
- package/dist/inventory/internalTypes.js.map +1 -0
- package/dist/inventory/internalUtils.d.ts +10 -0
- package/dist/inventory/internalUtils.js +68 -0
- package/dist/inventory/internalUtils.js.map +1 -0
- package/dist/inventory/listInventoryView.d.ts +23 -0
- package/dist/inventory/listInventoryView.js +22 -0
- package/dist/inventory/listInventoryView.js.map +1 -0
- package/dist/inventory/loadInventory.d.ts +4 -0
- package/dist/inventory/loadInventory.js +87 -0
- package/dist/inventory/loadInventory.js.map +1 -0
- package/dist/inventory/normalize.d.ts +4 -0
- package/dist/inventory/normalize.js +251 -0
- package/dist/inventory/normalize.js.map +1 -0
- package/dist/inventory/parse.d.ts +6 -0
- package/dist/inventory/parse.js +31 -0
- package/dist/inventory/parse.js.map +1 -0
- package/dist/inventory/policy.d.ts +11 -0
- package/dist/inventory/policy.js +27 -0
- package/dist/inventory/policy.js.map +1 -0
- package/dist/inventory/resolveTarget.d.ts +14 -0
- package/dist/inventory/resolveTarget.js +55 -0
- package/dist/inventory/resolveTarget.js.map +1 -0
- package/dist/inventory/types.d.ts +50 -0
- package/dist/inventory/types.js +2 -0
- package/dist/inventory/types.js.map +1 -0
- package/dist/inventory/validateNormalized.d.ts +2 -0
- package/dist/inventory/validateNormalized.js +64 -0
- package/dist/inventory/validateNormalized.js.map +1 -0
- package/dist/inventory/varValidation.d.ts +2 -0
- package/dist/inventory/varValidation.js +60 -0
- package/dist/inventory/varValidation.js.map +1 -0
- package/dist/inventory/writePolicy.d.ts +2 -0
- package/dist/inventory/writePolicy.js +36 -0
- package/dist/inventory/writePolicy.js.map +1 -0
- package/dist/logging/loggingQuery.d.ts +15 -0
- package/dist/logging/loggingQuery.js +38 -0
- package/dist/logging/loggingQuery.js.map +1 -0
- package/dist/logging/showLogging.d.ts +28 -0
- package/dist/logging/showLogging.js +37 -0
- package/dist/logging/showLogging.js.map +1 -0
- package/dist/mcp/createServer.d.ts +3 -0
- package/dist/mcp/createServer.js +82 -0
- package/dist/mcp/createServer.js.map +1 -0
- package/dist/mcp/toolResult.d.ts +7 -0
- package/dist/mcp/toolResult.js +13 -0
- package/dist/mcp/toolResult.js.map +1 -0
- package/dist/mcp/tools/getFacts.d.ts +21 -0
- package/dist/mcp/tools/getFacts.js +17 -0
- package/dist/mcp/tools/getFacts.js.map +1 -0
- package/dist/mcp/tools/getRunningConfig.d.ts +21 -0
- package/dist/mcp/tools/getRunningConfig.js +17 -0
- package/dist/mcp/tools/getRunningConfig.js.map +1 -0
- package/dist/mcp/tools/getServerInfo.d.ts +10 -0
- package/dist/mcp/tools/getServerInfo.js +9 -0
- package/dist/mcp/tools/getServerInfo.js.map +1 -0
- package/dist/mcp/tools/listInventory.d.ts +16 -0
- package/dist/mcp/tools/listInventory.js +15 -0
- package/dist/mcp/tools/listInventory.js.map +1 -0
- package/dist/mcp/tools/probeDevices.d.ts +21 -0
- package/dist/mcp/tools/probeDevices.js +14 -0
- package/dist/mcp/tools/probeDevices.js.map +1 -0
- package/dist/mcp/tools/runShow.d.ts +30 -0
- package/dist/mcp/tools/runShow.js +34 -0
- package/dist/mcp/tools/runShow.js.map +1 -0
- package/dist/mcp/tools/showLogging.d.ts +24 -0
- package/dist/mcp/tools/showLogging.js +20 -0
- package/dist/mcp/tools/showLogging.js.map +1 -0
- package/dist/operations/readExecution.d.ts +57 -0
- package/dist/operations/readExecution.js +132 -0
- package/dist/operations/readExecution.js.map +1 -0
- package/dist/probe/probeDevices.d.ts +24 -0
- package/dist/probe/probeDevices.js +24 -0
- package/dist/probe/probeDevices.js.map +1 -0
- package/dist/serverInfo/buildServerInfo.d.ts +2 -0
- package/dist/serverInfo/buildServerInfo.js +49 -0
- package/dist/serverInfo/buildServerInfo.js.map +1 -0
- package/dist/serverInfo/types.d.ts +46 -0
- package/dist/serverInfo/types.js +2 -0
- package/dist/serverInfo/types.js.map +1 -0
- package/dist/show/runShow.d.ts +29 -0
- package/dist/show/runShow.js +40 -0
- package/dist/show/runShow.js.map +1 -0
- package/dist/utils/json.d.ts +1 -0
- package/dist/utils/json.js +4 -0
- package/dist/utils/json.js.map +1 -0
- package/dist/utils/path.d.ts +2 -0
- package/dist/utils/path.js +14 -0
- package/dist/utils/path.js.map +1 -0
- package/dist/utils/value.d.ts +6 -0
- package/dist/utils/value.js +28 -0
- package/dist/utils/value.js.map +1 -0
- package/docs/CHECKPOINT.md +46 -0
- package/docs/CODE_WALKTHROUGH.md +112 -0
- package/docs/DESIGN.md +56 -0
- package/docs/DEVELOPMENT.md +72 -0
- package/docs/EXAMPLES.md +178 -0
- package/docs/IMPLEMENTATION_PLAN.md +32 -0
- package/docs/QUICKSTART.md +152 -0
- package/example-inventories/canonical-fabric.yaml +45 -0
- package/example-inventories/multi-password.yaml +35 -0
- package/example-inventories/simplified-lab.yaml +33 -0
- package/package.json +57 -0
package/dist/cli.js
ADDED
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
import { AppError } from "./core/errors.js";
|
|
2
|
+
import { APP_NAME, APP_VERSION } from "./core/version.js";
|
|
3
|
+
const COMMAND_NAMES = new Set(["serve", "validate-inventory", "print-server-info", "probe"]);
|
|
4
|
+
const OPTION_NAMES = new Set([
|
|
5
|
+
"--help",
|
|
6
|
+
"-h",
|
|
7
|
+
"--version",
|
|
8
|
+
"-V",
|
|
9
|
+
"--config",
|
|
10
|
+
"--inventory",
|
|
11
|
+
"--actor",
|
|
12
|
+
"--json",
|
|
13
|
+
"--inventory-only",
|
|
14
|
+
"--target"
|
|
15
|
+
]);
|
|
16
|
+
const COMMAND_OPTIONS = {
|
|
17
|
+
"serve": new Set([
|
|
18
|
+
"--help",
|
|
19
|
+
"-h",
|
|
20
|
+
"--version",
|
|
21
|
+
"-V",
|
|
22
|
+
"--config",
|
|
23
|
+
"--inventory",
|
|
24
|
+
"--actor"
|
|
25
|
+
]),
|
|
26
|
+
"validate-inventory": new Set(["--help", "-h", "--version", "-V", "--config", "--inventory", "--inventory-only", "--json"]),
|
|
27
|
+
"print-server-info": new Set(["--help", "-h", "--version", "-V", "--config", "--inventory", "--json"]),
|
|
28
|
+
"probe": new Set(["--help", "-h", "--version", "-V", "--config", "--inventory", "--target", "--json"])
|
|
29
|
+
};
|
|
30
|
+
export function parseCliArgs(argv) {
|
|
31
|
+
let command = "serve";
|
|
32
|
+
let index = 0;
|
|
33
|
+
const first = argv[0];
|
|
34
|
+
if (first === "--help" || first === "-h") {
|
|
35
|
+
return { command, help: true };
|
|
36
|
+
}
|
|
37
|
+
if (first === "--version" || first === "-V") {
|
|
38
|
+
return { command, version: true };
|
|
39
|
+
}
|
|
40
|
+
let explicitCommand = false;
|
|
41
|
+
if (first !== undefined && COMMAND_NAMES.has(first)) {
|
|
42
|
+
command = first;
|
|
43
|
+
explicitCommand = true;
|
|
44
|
+
index = 1;
|
|
45
|
+
}
|
|
46
|
+
const options = { command, ...(explicitCommand ? { explicitCommand: true } : {}) };
|
|
47
|
+
while (index < argv.length) {
|
|
48
|
+
const arg = argv[index];
|
|
49
|
+
if (arg !== undefined && OPTION_NAMES.has(arg)) {
|
|
50
|
+
assertOptionAllowed(command, arg);
|
|
51
|
+
}
|
|
52
|
+
switch (arg) {
|
|
53
|
+
case "--help":
|
|
54
|
+
case "-h":
|
|
55
|
+
options.help = true;
|
|
56
|
+
return options;
|
|
57
|
+
case "--version":
|
|
58
|
+
case "-V":
|
|
59
|
+
options.version = true;
|
|
60
|
+
return options;
|
|
61
|
+
case "--config": {
|
|
62
|
+
const value = argv[index + 1];
|
|
63
|
+
if (!value) {
|
|
64
|
+
throw new AppError("cli_missing_value", "Missing value for --config");
|
|
65
|
+
}
|
|
66
|
+
options.configPath = value;
|
|
67
|
+
index += 2;
|
|
68
|
+
break;
|
|
69
|
+
}
|
|
70
|
+
case "--inventory": {
|
|
71
|
+
const value = argv[index + 1];
|
|
72
|
+
if (!value) {
|
|
73
|
+
throw new AppError("cli_missing_value", "Missing value for --inventory");
|
|
74
|
+
}
|
|
75
|
+
options.inventoryPath = value;
|
|
76
|
+
index += 2;
|
|
77
|
+
break;
|
|
78
|
+
}
|
|
79
|
+
case "--actor": {
|
|
80
|
+
const value = argv[index + 1];
|
|
81
|
+
if (!value) {
|
|
82
|
+
throw new AppError("cli_missing_value", "Missing value for --actor");
|
|
83
|
+
}
|
|
84
|
+
options.actor = value;
|
|
85
|
+
index += 2;
|
|
86
|
+
break;
|
|
87
|
+
}
|
|
88
|
+
case "--json":
|
|
89
|
+
options.json = true;
|
|
90
|
+
index += 1;
|
|
91
|
+
break;
|
|
92
|
+
case "--inventory-only":
|
|
93
|
+
options.inventoryOnly = true;
|
|
94
|
+
index += 1;
|
|
95
|
+
break;
|
|
96
|
+
case "--target": {
|
|
97
|
+
const value = argv[index + 1];
|
|
98
|
+
if (!value) {
|
|
99
|
+
throw new AppError("cli_missing_value", "Missing value for --target");
|
|
100
|
+
}
|
|
101
|
+
options.target = value;
|
|
102
|
+
index += 2;
|
|
103
|
+
break;
|
|
104
|
+
}
|
|
105
|
+
default:
|
|
106
|
+
throw new AppError("cli_unknown_argument", `Unknown argument: ${arg}`);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
return options;
|
|
110
|
+
}
|
|
111
|
+
function assertOptionAllowed(command, option) {
|
|
112
|
+
if (!COMMAND_OPTIONS[command].has(option)) {
|
|
113
|
+
throw new AppError("cli_option_not_allowed", `Option ${option} is not valid for command ${command}`);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
const VERSION_BANNER = `${APP_NAME} v${APP_VERSION}`;
|
|
117
|
+
const HELP_TOP = `${VERSION_BANNER}
|
|
118
|
+
MCP server for Arista EOS eAPI (JSON-RPC over HTTPS)
|
|
119
|
+
|
|
120
|
+
Usage: ${APP_NAME} [command] [options]
|
|
121
|
+
|
|
122
|
+
Commands:
|
|
123
|
+
serve Start the MCP server over stdio (default)
|
|
124
|
+
validate-inventory Validate an inventory file
|
|
125
|
+
print-server-info Print server runtime/config summary
|
|
126
|
+
probe Probe device readiness for a target
|
|
127
|
+
|
|
128
|
+
Global options:
|
|
129
|
+
--config <path> Path to server config YAML file
|
|
130
|
+
--inventory <path> Path to inventory YAML file
|
|
131
|
+
-h, --help Show this help message
|
|
132
|
+
-V, --version Show version number
|
|
133
|
+
|
|
134
|
+
Run '${APP_NAME} <command> --help' for command-specific options.`;
|
|
135
|
+
const HELP_SERVE = `Usage: ${APP_NAME} serve [options]
|
|
136
|
+
|
|
137
|
+
Start the MCP server over stdio.
|
|
138
|
+
|
|
139
|
+
Options:
|
|
140
|
+
--config <path> Path to server config YAML file
|
|
141
|
+
--inventory <path> Path to inventory YAML file
|
|
142
|
+
--actor <name> Actor label for audit logging
|
|
143
|
+
-h, --help Show this help message`;
|
|
144
|
+
const HELP_VALIDATE_INVENTORY = `Usage: ${APP_NAME} validate-inventory [options]
|
|
145
|
+
|
|
146
|
+
Validate an inventory file. Performs structural parsing, effective
|
|
147
|
+
inventory validation, and startup-style connection checks by default.
|
|
148
|
+
|
|
149
|
+
Options:
|
|
150
|
+
--config <path> Path to server config YAML file
|
|
151
|
+
--inventory <path> Path to inventory YAML file
|
|
152
|
+
--inventory-only Skip startup connection checks
|
|
153
|
+
--json Output results as JSON
|
|
154
|
+
-h, --help Show this help message`;
|
|
155
|
+
const HELP_PRINT_SERVER_INFO = `Usage: ${APP_NAME} print-server-info [options]
|
|
156
|
+
|
|
157
|
+
Print a sanitized summary of server runtime configuration.
|
|
158
|
+
|
|
159
|
+
Options:
|
|
160
|
+
--config <path> Path to server config YAML file
|
|
161
|
+
--inventory <path> Path to inventory YAML file
|
|
162
|
+
--json Output as JSON
|
|
163
|
+
-h, --help Show this help message`;
|
|
164
|
+
const HELP_PROBE = `Usage: ${APP_NAME} probe [options]
|
|
165
|
+
|
|
166
|
+
Probe device readiness for a host or group target. Tests connectivity,
|
|
167
|
+
authentication, and harmless command execution.
|
|
168
|
+
|
|
169
|
+
Options:
|
|
170
|
+
--config <path> Path to server config YAML file
|
|
171
|
+
--inventory <path> Path to inventory YAML file
|
|
172
|
+
--target <name> Host or group name to probe (required)
|
|
173
|
+
--json Output as JSON
|
|
174
|
+
-h, --help Show this help message`;
|
|
175
|
+
const COMMAND_HELP = {
|
|
176
|
+
"serve": HELP_SERVE,
|
|
177
|
+
"validate-inventory": HELP_VALIDATE_INVENTORY,
|
|
178
|
+
"print-server-info": HELP_PRINT_SERVER_INFO,
|
|
179
|
+
"probe": HELP_PROBE
|
|
180
|
+
};
|
|
181
|
+
export function printHelp(cli) {
|
|
182
|
+
const helpText = cli.explicitCommand ? COMMAND_HELP[cli.command] : HELP_TOP;
|
|
183
|
+
console.log(helpText);
|
|
184
|
+
}
|
|
185
|
+
export function printVersion() {
|
|
186
|
+
console.log(VERSION_BANNER);
|
|
187
|
+
}
|
|
188
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { buildServerInfo } from "../serverInfo/buildServerInfo.js";
|
|
2
|
+
import { prettyJson } from "../utils/json.js";
|
|
3
|
+
export function printServerInfo(runtimeContext, asJson) {
|
|
4
|
+
const info = buildServerInfo(runtimeContext);
|
|
5
|
+
if (asJson) {
|
|
6
|
+
console.log(prettyJson(info));
|
|
7
|
+
return;
|
|
8
|
+
}
|
|
9
|
+
console.log(`Server: ${info.server_name} ${info.server_version}`);
|
|
10
|
+
console.log(`Mode: ${info.runtime_mode}`);
|
|
11
|
+
console.log(`Inventory: ${info.inventory.basename ?? "(none)"}`);
|
|
12
|
+
console.log(`Read timeout (ms): ${info.limits.read_timeout_ms}`);
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=printServerInfo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"printServerInfo.js","sourceRoot":"","sources":["../../src/commands/printServerInfo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAEnE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,MAAM,UAAU,eAAe,CAAC,cAAoC,EAAE,MAAe;IACnF,MAAM,IAAI,GAAG,eAAe,CAAC,cAAc,CAAC,CAAC;IAE7C,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;QAC9B,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;IAClE,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;IAC1C,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,CAAC,SAAS,CAAC,QAAQ,IAAI,QAAQ,EAAE,CAAC,CAAC;IACjE,OAAO,CAAC,GAAG,CAAC,sBAAsB,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC,CAAC;AACnE,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { EapiDeviceReader } from "../connection/eosDeviceReader.js";
|
|
2
|
+
import { EapiClient } from "../eapi/client.js";
|
|
3
|
+
import { loadInventoryModel } from "../inventory/loadInventory.js";
|
|
4
|
+
import { probeDevices } from "../probe/probeDevices.js";
|
|
5
|
+
import { AppError } from "../core/errors.js";
|
|
6
|
+
import { prettyJson } from "../utils/json.js";
|
|
7
|
+
export async function runProbe(config, target, asJson) {
|
|
8
|
+
if (!config.inventoryPath) {
|
|
9
|
+
throw new AppError("cli_missing_inventory", "probe requires an inventory path via --inventory or config file");
|
|
10
|
+
}
|
|
11
|
+
const model = await loadInventoryModel(config.inventoryPath);
|
|
12
|
+
const result = await probeDevices(model, config, { target, include_raw: false }, new EapiDeviceReader(config, new EapiClient()));
|
|
13
|
+
if (asJson) {
|
|
14
|
+
console.log(prettyJson(result));
|
|
15
|
+
}
|
|
16
|
+
else {
|
|
17
|
+
console.log(`Probe target: ${result.target}`);
|
|
18
|
+
console.log(`Devices: ${result.summary.success_count}/${result.summary.total_count} succeeded`);
|
|
19
|
+
for (const entry of result.results) {
|
|
20
|
+
const suffix = entry.status === "success" ? "" : ` - ${entry.message ?? entry.error_code ?? "failed"}`;
|
|
21
|
+
console.log(`- ${entry.inventory_hostname}: ${entry.status}${suffix}`);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
return result.summary.failed_count === 0 ? 0 : 1;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=probe.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"probe.js","sourceRoot":"","sources":["../../src/commands/probe.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE7C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,MAA4B,EAAE,MAAc,EAAE,MAAe;IAC1F,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;QAC1B,MAAM,IAAI,QAAQ,CAAC,uBAAuB,EAAE,iEAAiE,CAAC,CAAC;IACjH,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,kBAAkB,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IAC7D,MAAM,MAAM,GAAG,MAAM,YAAY,CAC/B,KAAK,EACL,MAAM,EACN,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,EAC9B,IAAI,gBAAgB,CAAC,MAAM,EAAE,IAAI,UAAU,EAAE,CAAC,CAC/C,CAAC;IAEF,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;IAClC,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,iBAAiB,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QAC9C,OAAO,CAAC,GAAG,CAAC,YAAY,MAAM,CAAC,OAAO,CAAC,aAAa,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,YAAY,CAAC,CAAC;QAEhG,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnC,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,UAAU,IAAI,QAAQ,EAAE,CAAC;YACvG,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,kBAAkB,KAAK,KAAK,CAAC,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC;QACzE,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC,OAAO,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACnD,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { ResolvedServerConfig } from "../config/schema.js";
|
|
2
|
+
import type { InventoryValidationResult } from "../inventory/types.js";
|
|
3
|
+
export declare function buildValidateInventoryResult(config: ResolvedServerConfig, options: {
|
|
4
|
+
inventoryOnly: boolean;
|
|
5
|
+
}): Promise<InventoryValidationResult>;
|
|
6
|
+
export declare function runValidateInventory(config: ResolvedServerConfig, options: {
|
|
7
|
+
asJson: boolean;
|
|
8
|
+
inventoryOnly: boolean;
|
|
9
|
+
}): Promise<number>;
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { AppError } from "../core/errors.js";
|
|
2
|
+
import { collectStartupConnectionValidationErrors } from "../connection/validateStartupConnections.js";
|
|
3
|
+
import { loadInventoryModel, validateInventory } from "../inventory/loadInventory.js";
|
|
4
|
+
import { prettyJson } from "../utils/json.js";
|
|
5
|
+
export async function buildValidateInventoryResult(config, options) {
|
|
6
|
+
if (!config.inventoryPath) {
|
|
7
|
+
throw new AppError("inventory_path_missing", "validate-inventory requires an inventory path via --inventory or config file");
|
|
8
|
+
}
|
|
9
|
+
const inventoryPath = config.inventoryPath;
|
|
10
|
+
const inventoryResult = await validateInventory(inventoryPath);
|
|
11
|
+
if (!inventoryResult.ok) {
|
|
12
|
+
return {
|
|
13
|
+
...inventoryResult,
|
|
14
|
+
notes: options.inventoryOnly
|
|
15
|
+
? [...inventoryResult.notes, "Inventory-only mode skips startup connection validation."]
|
|
16
|
+
: [...inventoryResult.notes, "Effective validation stopped before startup connection checks due to inventory errors."]
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
if (options.inventoryOnly) {
|
|
20
|
+
return {
|
|
21
|
+
...inventoryResult,
|
|
22
|
+
notes: [...inventoryResult.notes, "Inventory-only mode skips startup connection validation."]
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
const model = await loadInventoryModel(inventoryPath);
|
|
26
|
+
const startupErrors = collectStartupConnectionValidationErrors(config, model);
|
|
27
|
+
return {
|
|
28
|
+
...inventoryResult,
|
|
29
|
+
ok: startupErrors.length === 0,
|
|
30
|
+
errors: [...inventoryResult.errors, ...startupErrors],
|
|
31
|
+
notes: [...inventoryResult.notes, "Effective validation included startup connection checks for EOS-eligible hosts."]
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
export async function runValidateInventory(config, options) {
|
|
35
|
+
const result = await buildValidateInventoryResult(config, { inventoryOnly: options.inventoryOnly });
|
|
36
|
+
if (options.asJson) {
|
|
37
|
+
console.log(prettyJson(result));
|
|
38
|
+
}
|
|
39
|
+
else if (result.ok) {
|
|
40
|
+
console.log(`Inventory valid: ${result.summary?.basename ?? config.inventoryPath ?? "(unknown)"}`);
|
|
41
|
+
console.log(`Schema: ${result.schemaKind}`);
|
|
42
|
+
console.log(`Hosts: ${result.summary?.totalHostCount ?? 0}`);
|
|
43
|
+
console.log(`Groups: ${result.summary?.totalGroupCount ?? 0}`);
|
|
44
|
+
for (const note of result.notes) {
|
|
45
|
+
console.log(`Note: ${note}`);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
console.error("Inventory validation failed:");
|
|
50
|
+
for (const error of result.errors) {
|
|
51
|
+
console.error(`- [${error.code}] ${error.message}`);
|
|
52
|
+
}
|
|
53
|
+
for (const note of result.notes) {
|
|
54
|
+
console.error(`Note: ${note}`);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return result.ok ? 0 : 1;
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=validateInventory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validateInventory.js","sourceRoot":"","sources":["../../src/commands/validateInventory.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import fs from "node:fs/promises";
|
|
2
|
+
import { parseDocument } from "yaml";
|
|
3
|
+
import { ZodError } from "zod";
|
|
4
|
+
import { AppError } from "../core/errors.js";
|
|
5
|
+
import { resolvePathFromConfig, resolvePathFromCwd } from "../utils/path.js";
|
|
6
|
+
import { resolvedServerConfigSchema, serverConfigFileSchema } from "./schema.js";
|
|
7
|
+
export async function loadServerConfig(options) {
|
|
8
|
+
let fileConfig = {};
|
|
9
|
+
let resolvedConfigPath;
|
|
10
|
+
if (options.configPath) {
|
|
11
|
+
resolvedConfigPath = resolvePathFromCwd(options.configPath);
|
|
12
|
+
const text = await readConfigFile(resolvedConfigPath);
|
|
13
|
+
const doc = parseDocument(text, { uniqueKeys: true, merge: true, prettyErrors: true });
|
|
14
|
+
if (doc.errors.length > 0) {
|
|
15
|
+
throw new AppError("config_invalid_yaml", `Invalid server config YAML: ${doc.errors.map((error) => error.message).join("; ")}`);
|
|
16
|
+
}
|
|
17
|
+
const raw = doc.toJS();
|
|
18
|
+
fileConfig = parseConfigSchema(() => serverConfigFileSchema.parse(raw), "config_schema_invalid");
|
|
19
|
+
}
|
|
20
|
+
const merged = {
|
|
21
|
+
configPath: resolvedConfigPath,
|
|
22
|
+
inventoryPath: resolveMaybePath(fileConfig.inventory, resolvedConfigPath),
|
|
23
|
+
actor: fileConfig.actor,
|
|
24
|
+
logFile: resolveMaybePath(fileConfig.logFile, resolvedConfigPath),
|
|
25
|
+
caFile: resolveMaybePath(fileConfig.caFile, resolvedConfigPath),
|
|
26
|
+
readTimeoutMs: fileConfig.readTimeoutMs,
|
|
27
|
+
overallOperationTimeoutMs: fileConfig.overallOperationTimeoutMs,
|
|
28
|
+
deviceConcurrency: fileConfig.deviceConcurrency,
|
|
29
|
+
maxReadTargets: fileConfig.maxReadTargets,
|
|
30
|
+
maxShowCommandsPerRequest: fileConfig.maxShowCommandsPerRequest,
|
|
31
|
+
maxLoggingMessagesPerRequest: fileConfig.maxLoggingMessagesPerRequest,
|
|
32
|
+
maxResponseSizeBytes: fileConfig.maxResponseSizeBytes,
|
|
33
|
+
eapiVersion: fileConfig.eapiVersion,
|
|
34
|
+
secretEnvPrefixes: fileConfig.secretEnvPrefixes,
|
|
35
|
+
defaultConnection: fileConfig.defaultConnection
|
|
36
|
+
};
|
|
37
|
+
if (options.inventoryPath) {
|
|
38
|
+
merged.inventoryPath = resolvePathFromCwd(options.inventoryPath);
|
|
39
|
+
}
|
|
40
|
+
if (options.actor !== undefined) {
|
|
41
|
+
merged.actor = options.actor;
|
|
42
|
+
}
|
|
43
|
+
return parseConfigSchema(() => resolvedServerConfigSchema.parse(merged), "config_resolved_invalid");
|
|
44
|
+
}
|
|
45
|
+
async function readConfigFile(configPath) {
|
|
46
|
+
try {
|
|
47
|
+
return await fs.readFile(configPath, "utf8");
|
|
48
|
+
}
|
|
49
|
+
catch (error) {
|
|
50
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
51
|
+
throw new AppError("config_read_failed", `Failed to read server config ${configPath}: ${message}`, { configPath });
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
function resolveMaybePath(value, configPath) {
|
|
55
|
+
if (!value) {
|
|
56
|
+
return undefined;
|
|
57
|
+
}
|
|
58
|
+
if (!configPath) {
|
|
59
|
+
return resolvePathFromCwd(value);
|
|
60
|
+
}
|
|
61
|
+
return resolvePathFromConfig(configPath, value);
|
|
62
|
+
}
|
|
63
|
+
function parseConfigSchema(parse, code) {
|
|
64
|
+
try {
|
|
65
|
+
return parse();
|
|
66
|
+
}
|
|
67
|
+
catch (error) {
|
|
68
|
+
if (error instanceof ZodError) {
|
|
69
|
+
throw new AppError(code, `Invalid server config: ${formatZodIssues(error)}`, {
|
|
70
|
+
issues: error.issues
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
throw error;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
function formatZodIssues(error) {
|
|
77
|
+
return error.issues
|
|
78
|
+
.map((issue) => {
|
|
79
|
+
const path = issue.path.length > 0 ? `${issue.path.join(".")}: ` : "";
|
|
80
|
+
return `${path}${issue.message}`;
|
|
81
|
+
})
|
|
82
|
+
.join("; ");
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=loadConfig.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loadConfig.js","sourceRoot":"","sources":["../../src/config/loadConfig.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export declare const serverConfigFileSchema: z.ZodObject<{
|
|
3
|
+
version: z.ZodOptional<z.ZodLiteral<1>>;
|
|
4
|
+
inventory: z.ZodOptional<z.ZodString>;
|
|
5
|
+
actor: z.ZodOptional<z.ZodString>;
|
|
6
|
+
logFile: z.ZodOptional<z.ZodString>;
|
|
7
|
+
caFile: z.ZodOptional<z.ZodString>;
|
|
8
|
+
readTimeoutMs: z.ZodOptional<z.ZodNumber>;
|
|
9
|
+
overallOperationTimeoutMs: z.ZodOptional<z.ZodNumber>;
|
|
10
|
+
deviceConcurrency: z.ZodOptional<z.ZodNumber>;
|
|
11
|
+
maxReadTargets: z.ZodOptional<z.ZodNumber>;
|
|
12
|
+
maxShowCommandsPerRequest: z.ZodOptional<z.ZodNumber>;
|
|
13
|
+
maxLoggingMessagesPerRequest: z.ZodOptional<z.ZodNumber>;
|
|
14
|
+
maxResponseSizeBytes: z.ZodOptional<z.ZodNumber>;
|
|
15
|
+
eapiVersion: z.ZodOptional<z.ZodUnion<[z.ZodLiteral<1>, z.ZodLiteral<"latest">]>>;
|
|
16
|
+
secretEnvPrefixes: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
17
|
+
defaultConnection: z.ZodOptional<z.ZodObject<{
|
|
18
|
+
ansibleUser: z.ZodOptional<z.ZodString>;
|
|
19
|
+
ansibleHttpapiPort: z.ZodOptional<z.ZodNumber>;
|
|
20
|
+
mcpValidateCerts: z.ZodOptional<z.ZodBoolean>;
|
|
21
|
+
mcpPasswordEnv: z.ZodOptional<z.ZodString>;
|
|
22
|
+
}, "strip", z.ZodTypeAny, {
|
|
23
|
+
ansibleUser?: string | undefined;
|
|
24
|
+
ansibleHttpapiPort?: number | undefined;
|
|
25
|
+
mcpValidateCerts?: boolean | undefined;
|
|
26
|
+
mcpPasswordEnv?: string | undefined;
|
|
27
|
+
}, {
|
|
28
|
+
ansibleUser?: string | undefined;
|
|
29
|
+
ansibleHttpapiPort?: number | undefined;
|
|
30
|
+
mcpValidateCerts?: boolean | undefined;
|
|
31
|
+
mcpPasswordEnv?: string | undefined;
|
|
32
|
+
}>>;
|
|
33
|
+
}, "strict", z.ZodTypeAny, {
|
|
34
|
+
version?: 1 | undefined;
|
|
35
|
+
inventory?: string | undefined;
|
|
36
|
+
actor?: string | undefined;
|
|
37
|
+
logFile?: string | undefined;
|
|
38
|
+
caFile?: string | undefined;
|
|
39
|
+
readTimeoutMs?: number | undefined;
|
|
40
|
+
overallOperationTimeoutMs?: number | undefined;
|
|
41
|
+
deviceConcurrency?: number | undefined;
|
|
42
|
+
maxReadTargets?: number | undefined;
|
|
43
|
+
maxShowCommandsPerRequest?: number | undefined;
|
|
44
|
+
maxLoggingMessagesPerRequest?: number | undefined;
|
|
45
|
+
maxResponseSizeBytes?: number | undefined;
|
|
46
|
+
eapiVersion?: 1 | "latest" | undefined;
|
|
47
|
+
secretEnvPrefixes?: string[] | undefined;
|
|
48
|
+
defaultConnection?: {
|
|
49
|
+
ansibleUser?: string | undefined;
|
|
50
|
+
ansibleHttpapiPort?: number | undefined;
|
|
51
|
+
mcpValidateCerts?: boolean | undefined;
|
|
52
|
+
mcpPasswordEnv?: string | undefined;
|
|
53
|
+
} | undefined;
|
|
54
|
+
}, {
|
|
55
|
+
version?: 1 | undefined;
|
|
56
|
+
inventory?: string | undefined;
|
|
57
|
+
actor?: string | undefined;
|
|
58
|
+
logFile?: string | undefined;
|
|
59
|
+
caFile?: string | undefined;
|
|
60
|
+
readTimeoutMs?: number | undefined;
|
|
61
|
+
overallOperationTimeoutMs?: number | undefined;
|
|
62
|
+
deviceConcurrency?: number | undefined;
|
|
63
|
+
maxReadTargets?: number | undefined;
|
|
64
|
+
maxShowCommandsPerRequest?: number | undefined;
|
|
65
|
+
maxLoggingMessagesPerRequest?: number | undefined;
|
|
66
|
+
maxResponseSizeBytes?: number | undefined;
|
|
67
|
+
eapiVersion?: 1 | "latest" | undefined;
|
|
68
|
+
secretEnvPrefixes?: string[] | undefined;
|
|
69
|
+
defaultConnection?: {
|
|
70
|
+
ansibleUser?: string | undefined;
|
|
71
|
+
ansibleHttpapiPort?: number | undefined;
|
|
72
|
+
mcpValidateCerts?: boolean | undefined;
|
|
73
|
+
mcpPasswordEnv?: string | undefined;
|
|
74
|
+
} | undefined;
|
|
75
|
+
}>;
|
|
76
|
+
export declare const resolvedServerConfigSchema: z.ZodObject<{
|
|
77
|
+
configPath: z.ZodOptional<z.ZodString>;
|
|
78
|
+
inventoryPath: z.ZodOptional<z.ZodString>;
|
|
79
|
+
actor: z.ZodOptional<z.ZodString>;
|
|
80
|
+
logFile: z.ZodOptional<z.ZodString>;
|
|
81
|
+
caFile: z.ZodOptional<z.ZodString>;
|
|
82
|
+
readTimeoutMs: z.ZodDefault<z.ZodNumber>;
|
|
83
|
+
overallOperationTimeoutMs: z.ZodOptional<z.ZodNumber>;
|
|
84
|
+
deviceConcurrency: z.ZodDefault<z.ZodNumber>;
|
|
85
|
+
maxReadTargets: z.ZodDefault<z.ZodNumber>;
|
|
86
|
+
maxShowCommandsPerRequest: z.ZodDefault<z.ZodNumber>;
|
|
87
|
+
maxLoggingMessagesPerRequest: z.ZodDefault<z.ZodNumber>;
|
|
88
|
+
maxResponseSizeBytes: z.ZodDefault<z.ZodNumber>;
|
|
89
|
+
eapiVersion: z.ZodDefault<z.ZodUnion<[z.ZodLiteral<1>, z.ZodLiteral<"latest">]>>;
|
|
90
|
+
secretEnvPrefixes: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
|
|
91
|
+
defaultConnection: z.ZodDefault<z.ZodObject<{
|
|
92
|
+
ansibleUser: z.ZodOptional<z.ZodString>;
|
|
93
|
+
ansibleHttpapiPort: z.ZodOptional<z.ZodNumber>;
|
|
94
|
+
mcpValidateCerts: z.ZodOptional<z.ZodBoolean>;
|
|
95
|
+
mcpPasswordEnv: z.ZodOptional<z.ZodString>;
|
|
96
|
+
}, "strip", z.ZodTypeAny, {
|
|
97
|
+
ansibleUser?: string | undefined;
|
|
98
|
+
ansibleHttpapiPort?: number | undefined;
|
|
99
|
+
mcpValidateCerts?: boolean | undefined;
|
|
100
|
+
mcpPasswordEnv?: string | undefined;
|
|
101
|
+
}, {
|
|
102
|
+
ansibleUser?: string | undefined;
|
|
103
|
+
ansibleHttpapiPort?: number | undefined;
|
|
104
|
+
mcpValidateCerts?: boolean | undefined;
|
|
105
|
+
mcpPasswordEnv?: string | undefined;
|
|
106
|
+
}>>;
|
|
107
|
+
}, "strip", z.ZodTypeAny, {
|
|
108
|
+
readTimeoutMs: number;
|
|
109
|
+
deviceConcurrency: number;
|
|
110
|
+
maxReadTargets: number;
|
|
111
|
+
maxShowCommandsPerRequest: number;
|
|
112
|
+
maxLoggingMessagesPerRequest: number;
|
|
113
|
+
maxResponseSizeBytes: number;
|
|
114
|
+
eapiVersion: 1 | "latest";
|
|
115
|
+
secretEnvPrefixes: string[];
|
|
116
|
+
defaultConnection: {
|
|
117
|
+
ansibleUser?: string | undefined;
|
|
118
|
+
ansibleHttpapiPort?: number | undefined;
|
|
119
|
+
mcpValidateCerts?: boolean | undefined;
|
|
120
|
+
mcpPasswordEnv?: string | undefined;
|
|
121
|
+
};
|
|
122
|
+
actor?: string | undefined;
|
|
123
|
+
logFile?: string | undefined;
|
|
124
|
+
caFile?: string | undefined;
|
|
125
|
+
overallOperationTimeoutMs?: number | undefined;
|
|
126
|
+
configPath?: string | undefined;
|
|
127
|
+
inventoryPath?: string | undefined;
|
|
128
|
+
}, {
|
|
129
|
+
actor?: string | undefined;
|
|
130
|
+
logFile?: string | undefined;
|
|
131
|
+
caFile?: string | undefined;
|
|
132
|
+
readTimeoutMs?: number | undefined;
|
|
133
|
+
overallOperationTimeoutMs?: number | undefined;
|
|
134
|
+
deviceConcurrency?: number | undefined;
|
|
135
|
+
maxReadTargets?: number | undefined;
|
|
136
|
+
maxShowCommandsPerRequest?: number | undefined;
|
|
137
|
+
maxLoggingMessagesPerRequest?: number | undefined;
|
|
138
|
+
maxResponseSizeBytes?: number | undefined;
|
|
139
|
+
eapiVersion?: 1 | "latest" | undefined;
|
|
140
|
+
secretEnvPrefixes?: string[] | undefined;
|
|
141
|
+
defaultConnection?: {
|
|
142
|
+
ansibleUser?: string | undefined;
|
|
143
|
+
ansibleHttpapiPort?: number | undefined;
|
|
144
|
+
mcpValidateCerts?: boolean | undefined;
|
|
145
|
+
mcpPasswordEnv?: string | undefined;
|
|
146
|
+
} | undefined;
|
|
147
|
+
configPath?: string | undefined;
|
|
148
|
+
inventoryPath?: string | undefined;
|
|
149
|
+
}>;
|
|
150
|
+
export type ServerConfigFile = z.infer<typeof serverConfigFileSchema>;
|
|
151
|
+
export type ResolvedServerConfig = z.infer<typeof resolvedServerConfigSchema>;
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
const eapiVersionSchema = z.union([z.literal(1), z.literal("latest")]);
|
|
3
|
+
export const serverConfigFileSchema = z
|
|
4
|
+
.object({
|
|
5
|
+
version: z.literal(1).optional(),
|
|
6
|
+
inventory: z.string().min(1).optional(),
|
|
7
|
+
actor: z.string().min(1).optional(),
|
|
8
|
+
logFile: z.string().min(1).optional(),
|
|
9
|
+
caFile: z.string().min(1).optional(),
|
|
10
|
+
readTimeoutMs: z.number().int().positive().optional(),
|
|
11
|
+
overallOperationTimeoutMs: z.number().int().positive().optional(),
|
|
12
|
+
deviceConcurrency: z.number().int().positive().optional(),
|
|
13
|
+
maxReadTargets: z.number().int().positive().optional(),
|
|
14
|
+
maxShowCommandsPerRequest: z.number().int().positive().optional(),
|
|
15
|
+
maxLoggingMessagesPerRequest: z.number().int().positive().max(9999).optional(),
|
|
16
|
+
maxResponseSizeBytes: z.number().int().positive().optional(),
|
|
17
|
+
eapiVersion: eapiVersionSchema.optional(),
|
|
18
|
+
secretEnvPrefixes: z.array(z.string().min(1)).optional(),
|
|
19
|
+
defaultConnection: z
|
|
20
|
+
.object({
|
|
21
|
+
ansibleUser: z.string().min(1).optional(),
|
|
22
|
+
ansibleHttpapiPort: z.number().int().positive().optional(),
|
|
23
|
+
mcpValidateCerts: z.boolean().optional(),
|
|
24
|
+
mcpPasswordEnv: z.string().min(1).optional()
|
|
25
|
+
})
|
|
26
|
+
.optional()
|
|
27
|
+
})
|
|
28
|
+
.strict();
|
|
29
|
+
export const resolvedServerConfigSchema = z
|
|
30
|
+
.object({
|
|
31
|
+
configPath: z.string().min(1).optional(),
|
|
32
|
+
inventoryPath: z.string().min(1).optional(),
|
|
33
|
+
actor: z.string().min(1).optional(),
|
|
34
|
+
logFile: z.string().min(1).optional(),
|
|
35
|
+
caFile: z.string().min(1).optional(),
|
|
36
|
+
readTimeoutMs: z.number().int().positive().default(10_000),
|
|
37
|
+
overallOperationTimeoutMs: z.number().int().positive().optional(),
|
|
38
|
+
deviceConcurrency: z.number().int().positive().default(5),
|
|
39
|
+
maxReadTargets: z.number().int().positive().default(50),
|
|
40
|
+
maxShowCommandsPerRequest: z.number().int().positive().default(5),
|
|
41
|
+
maxLoggingMessagesPerRequest: z.number().int().positive().max(9999).default(1000),
|
|
42
|
+
maxResponseSizeBytes: z.number().int().positive().default(1_048_576),
|
|
43
|
+
eapiVersion: eapiVersionSchema.default("latest"),
|
|
44
|
+
secretEnvPrefixes: z.array(z.string().min(1)).default(["EOS_MCP_"]),
|
|
45
|
+
defaultConnection: z
|
|
46
|
+
.object({
|
|
47
|
+
ansibleUser: z.string().min(1).optional(),
|
|
48
|
+
ansibleHttpapiPort: z.number().int().positive().optional(),
|
|
49
|
+
mcpValidateCerts: z.boolean().optional(),
|
|
50
|
+
mcpPasswordEnv: z.string().min(1).optional()
|
|
51
|
+
})
|
|
52
|
+
.default({})
|
|
53
|
+
});
|
|
54
|
+
//# sourceMappingURL=schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"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"}
|