@ibm/ibmi-mcp-server 0.3.2 → 0.4.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.
Files changed (128) hide show
  1. package/dist/cli/commands/columns.d.ts +7 -0
  2. package/dist/cli/commands/columns.d.ts.map +1 -0
  3. package/dist/cli/commands/columns.js +29 -0
  4. package/dist/cli/commands/columns.js.map +1 -0
  5. package/dist/cli/commands/completion.d.ts +10 -0
  6. package/dist/cli/commands/completion.d.ts.map +1 -0
  7. package/dist/cli/commands/completion.js +225 -0
  8. package/dist/cli/commands/completion.js.map +1 -0
  9. package/dist/cli/commands/related.d.ts +7 -0
  10. package/dist/cli/commands/related.d.ts.map +1 -0
  11. package/dist/cli/commands/related.js +32 -0
  12. package/dist/cli/commands/related.js.map +1 -0
  13. package/dist/cli/commands/schemas.d.ts +7 -0
  14. package/dist/cli/commands/schemas.d.ts.map +1 -0
  15. package/dist/cli/commands/schemas.js +49 -0
  16. package/dist/cli/commands/schemas.js.map +1 -0
  17. package/dist/cli/commands/sql.d.ts +8 -0
  18. package/dist/cli/commands/sql.d.ts.map +1 -0
  19. package/dist/cli/commands/sql.js +106 -0
  20. package/dist/cli/commands/sql.js.map +1 -0
  21. package/dist/cli/commands/system.d.ts +11 -0
  22. package/dist/cli/commands/system.d.ts.map +1 -0
  23. package/dist/cli/commands/system.js +263 -0
  24. package/dist/cli/commands/system.js.map +1 -0
  25. package/dist/cli/commands/tables.d.ts +7 -0
  26. package/dist/cli/commands/tables.d.ts.map +1 -0
  27. package/dist/cli/commands/tables.js +48 -0
  28. package/dist/cli/commands/tables.js.map +1 -0
  29. package/dist/cli/commands/tool.d.ts +18 -0
  30. package/dist/cli/commands/tool.d.ts.map +1 -0
  31. package/dist/cli/commands/tool.js +194 -0
  32. package/dist/cli/commands/tool.js.map +1 -0
  33. package/dist/cli/commands/tools-list.d.ts +20 -0
  34. package/dist/cli/commands/tools-list.d.ts.map +1 -0
  35. package/dist/cli/commands/tools-list.js +209 -0
  36. package/dist/cli/commands/tools-list.js.map +1 -0
  37. package/dist/cli/commands/validate.d.ts +7 -0
  38. package/dist/cli/commands/validate.d.ts.map +1 -0
  39. package/dist/cli/commands/validate.js +77 -0
  40. package/dist/cli/commands/validate.js.map +1 -0
  41. package/dist/cli/config/credentials.d.ts +21 -0
  42. package/dist/cli/config/credentials.d.ts.map +1 -0
  43. package/dist/cli/config/credentials.js +96 -0
  44. package/dist/cli/config/credentials.js.map +1 -0
  45. package/dist/cli/config/index.d.ts +10 -0
  46. package/dist/cli/config/index.d.ts.map +1 -0
  47. package/dist/cli/config/index.js +9 -0
  48. package/dist/cli/config/index.js.map +1 -0
  49. package/dist/cli/config/loader.d.ts +36 -0
  50. package/dist/cli/config/loader.d.ts.map +1 -0
  51. package/dist/cli/config/loader.js +206 -0
  52. package/dist/cli/config/loader.js.map +1 -0
  53. package/dist/cli/config/resolver.d.ts +26 -0
  54. package/dist/cli/config/resolver.d.ts.map +1 -0
  55. package/dist/cli/config/resolver.js +102 -0
  56. package/dist/cli/config/resolver.js.map +1 -0
  57. package/dist/cli/config/schema.d.ts +128 -0
  58. package/dist/cli/config/schema.d.ts.map +1 -0
  59. package/dist/cli/config/schema.js +37 -0
  60. package/dist/cli/config/schema.js.map +1 -0
  61. package/dist/cli/config/types.d.ts +59 -0
  62. package/dist/cli/config/types.d.ts.map +1 -0
  63. package/dist/cli/config/types.js +6 -0
  64. package/dist/cli/config/types.js.map +1 -0
  65. package/dist/cli/formatters/output.d.ts +60 -0
  66. package/dist/cli/formatters/output.d.ts.map +1 -0
  67. package/dist/cli/formatters/output.js +190 -0
  68. package/dist/cli/formatters/output.js.map +1 -0
  69. package/dist/cli/index.d.ts +13 -0
  70. package/dist/cli/index.d.ts.map +1 -0
  71. package/dist/cli/index.js +98 -0
  72. package/dist/cli/index.js.map +1 -0
  73. package/dist/cli/utils/command-helpers.d.ts +47 -0
  74. package/dist/cli/utils/command-helpers.d.ts.map +1 -0
  75. package/dist/cli/utils/command-helpers.js +211 -0
  76. package/dist/cli/utils/command-helpers.js.map +1 -0
  77. package/dist/cli/utils/connection.d.ts +20 -0
  78. package/dist/cli/utils/connection.d.ts.map +1 -0
  79. package/dist/cli/utils/connection.js +37 -0
  80. package/dist/cli/utils/connection.js.map +1 -0
  81. package/dist/cli/utils/exit-codes.d.ts +48 -0
  82. package/dist/cli/utils/exit-codes.d.ts.map +1 -0
  83. package/dist/cli/utils/exit-codes.js +111 -0
  84. package/dist/cli/utils/exit-codes.js.map +1 -0
  85. package/dist/cli/utils/yaml-loader.d.ts +69 -0
  86. package/dist/cli/utils/yaml-loader.d.ts.map +1 -0
  87. package/dist/cli/utils/yaml-loader.js +135 -0
  88. package/dist/cli/utils/yaml-loader.js.map +1 -0
  89. package/dist/cli/utils/yaml-to-commander.d.ts +26 -0
  90. package/dist/cli/utils/yaml-to-commander.d.ts.map +1 -0
  91. package/dist/cli/utils/yaml-to-commander.js +156 -0
  92. package/dist/cli/utils/yaml-to-commander.js.map +1 -0
  93. package/dist/config/index.d.ts +1 -0
  94. package/dist/config/index.d.ts.map +1 -1
  95. package/dist/config/index.js +9 -10
  96. package/dist/config/index.js.map +1 -1
  97. package/dist/ibmi-mcp-server/tools/executeSql.tool.d.ts.map +1 -1
  98. package/dist/ibmi-mcp-server/tools/executeSql.tool.js +6 -2
  99. package/dist/ibmi-mcp-server/tools/executeSql.tool.js.map +1 -1
  100. package/dist/ibmi-mcp-server/tools/generateSql.tool.js +1 -1
  101. package/dist/ibmi-mcp-server/tools/generateSql.tool.js.map +1 -1
  102. package/dist/ibmi-mcp-server/tools/getRelatedObjects.tool.d.ts +93 -0
  103. package/dist/ibmi-mcp-server/tools/getRelatedObjects.tool.d.ts.map +1 -0
  104. package/dist/ibmi-mcp-server/tools/getRelatedObjects.tool.js +198 -0
  105. package/dist/ibmi-mcp-server/tools/getRelatedObjects.tool.js.map +1 -0
  106. package/dist/ibmi-mcp-server/tools/getTableColumns.tool.d.ts +87 -0
  107. package/dist/ibmi-mcp-server/tools/getTableColumns.tool.d.ts.map +1 -0
  108. package/dist/ibmi-mcp-server/tools/getTableColumns.tool.js +163 -0
  109. package/dist/ibmi-mcp-server/tools/getTableColumns.tool.js.map +1 -0
  110. package/dist/ibmi-mcp-server/tools/index.d.ts +175 -0
  111. package/dist/ibmi-mcp-server/tools/index.d.ts.map +1 -1
  112. package/dist/ibmi-mcp-server/tools/index.js +27 -1
  113. package/dist/ibmi-mcp-server/tools/index.js.map +1 -1
  114. package/dist/ibmi-mcp-server/tools/listSchemas.tool.d.ts +107 -0
  115. package/dist/ibmi-mcp-server/tools/listSchemas.tool.d.ts.map +1 -0
  116. package/dist/ibmi-mcp-server/tools/listSchemas.tool.js +195 -0
  117. package/dist/ibmi-mcp-server/tools/listSchemas.tool.js.map +1 -0
  118. package/dist/ibmi-mcp-server/tools/listTablesInSchema.tool.d.ts +107 -0
  119. package/dist/ibmi-mcp-server/tools/listTablesInSchema.tool.d.ts.map +1 -0
  120. package/dist/ibmi-mcp-server/tools/listTablesInSchema.tool.js +198 -0
  121. package/dist/ibmi-mcp-server/tools/listTablesInSchema.tool.js.map +1 -0
  122. package/dist/ibmi-mcp-server/tools/validateQuery.tool.d.ts +229 -0
  123. package/dist/ibmi-mcp-server/tools/validateQuery.tool.d.ts.map +1 -0
  124. package/dist/ibmi-mcp-server/tools/validateQuery.tool.js +401 -0
  125. package/dist/ibmi-mcp-server/tools/validateQuery.tool.js.map +1 -0
  126. package/dist/ibmi-mcp-server/utils/security/sqlSecurityValidator.js +1 -1
  127. package/dist/ibmi-mcp-server/utils/security/sqlSecurityValidator.js.map +1 -1
  128. package/package.json +6 -4
@@ -0,0 +1,209 @@
1
+ /**
2
+ * @fileoverview Discovery commands for YAML-defined tools.
3
+ *
4
+ * - `ibmi tools` — List all available tools
5
+ * - `ibmi tools show <name>` — Show detailed info for a single tool
6
+ * - `ibmi toolsets` — List all toolsets
7
+ *
8
+ * These are read-only commands that parse YAML files without connecting to a system.
9
+ * @module cli/commands/tools-list
10
+ */
11
+ import { loadYamlTools, buildToolsetMap, } from "../utils/yaml-loader.js";
12
+ import { getFormat } from "../utils/command-helpers.js";
13
+ import { renderOutput, renderError, renderMessage, } from "../formatters/output.js";
14
+ import { ExitCode } from "../utils/exit-codes.js";
15
+ /**
16
+ * Resolve the --tools paths from command options.
17
+ * Falls back to the default tools/ directory relative to the package root.
18
+ */
19
+ function resolveToolsPaths(cmd) {
20
+ const opts = cmd.optsWithGlobals();
21
+ const toolsOpt = opts["tools"];
22
+ if (toolsOpt) {
23
+ return toolsOpt.split(",").map((p) => p.trim());
24
+ }
25
+ return [];
26
+ }
27
+ /**
28
+ * Load YAML tools config from CLI options, with error handling.
29
+ */
30
+ function loadToolsConfig(cmd) {
31
+ const paths = resolveToolsPaths(cmd);
32
+ if (paths.length === 0) {
33
+ process.stderr.write("No tools path specified. Use --tools <path> to specify YAML tool file(s) or directory.\n");
34
+ return null;
35
+ }
36
+ return loadYamlTools(paths);
37
+ }
38
+ /**
39
+ * Register `ibmi tools` — list available YAML tools.
40
+ */
41
+ export function registerToolsCommand(program) {
42
+ const toolsCmd = program
43
+ .command("tools")
44
+ .description("List available YAML-defined tools")
45
+ .option("--toolset <name>", "Filter by toolset name");
46
+ // ibmi tools (default: list all)
47
+ toolsCmd.action((opts, cmd) => {
48
+ const format = getFormat(cmd);
49
+ try {
50
+ const config = loadToolsConfig(cmd);
51
+ if (!config) {
52
+ process.exitCode = ExitCode.USAGE;
53
+ return;
54
+ }
55
+ const toolsetMap = buildToolsetMap(config.toolsets);
56
+ const toolsetFilter = opts["toolset"];
57
+ const rows = [];
58
+ for (const [name, tool] of Object.entries(config.tools)) {
59
+ if (tool.enabled === false)
60
+ continue;
61
+ const toolsets = toolsetMap.get(name) ?? [];
62
+ // Filter by toolset if specified
63
+ if (toolsetFilter && !toolsets.includes(toolsetFilter))
64
+ continue;
65
+ rows.push({
66
+ TOOL: name,
67
+ TOOLSET: toolsets.join(", ") || "-",
68
+ DESCRIPTION: tool.description,
69
+ PARAMS: tool.parameters.length,
70
+ READ_ONLY: tool.security?.readOnly ?? tool.annotations?.["readOnlyHint"] ?? true,
71
+ });
72
+ }
73
+ if (rows.length === 0) {
74
+ renderMessage(toolsetFilter
75
+ ? `No tools found in toolset '${toolsetFilter}'.`
76
+ : "No tools found.", format);
77
+ return;
78
+ }
79
+ renderOutput(rows, format, { rowCount: rows.length });
80
+ }
81
+ catch (err) {
82
+ renderError(err instanceof Error ? err : new Error(String(err)), format);
83
+ process.exitCode = ExitCode.GENERAL;
84
+ }
85
+ });
86
+ // ibmi tools show <name>
87
+ toolsCmd
88
+ .command("show <name>")
89
+ .description("Show detailed information for a tool")
90
+ .action((name, _opts, cmd) => {
91
+ const format = getFormat(cmd);
92
+ try {
93
+ const config = loadToolsConfig(cmd);
94
+ if (!config) {
95
+ process.exitCode = ExitCode.USAGE;
96
+ return;
97
+ }
98
+ const tool = config.tools[name];
99
+ if (!tool) {
100
+ renderError(new Error(`Tool '${name}' not found. Use 'ibmi tools --tools <path>' to list available tools.`), format);
101
+ process.exitCode = ExitCode.USAGE;
102
+ return;
103
+ }
104
+ const toolsetMap = buildToolsetMap(config.toolsets);
105
+ const toolsets = toolsetMap.get(name) ?? [];
106
+ if (format === "json") {
107
+ // JSON: output structured data
108
+ renderOutput([
109
+ {
110
+ name,
111
+ description: tool.description,
112
+ source: tool.source,
113
+ toolsets,
114
+ readOnly: tool.security?.readOnly ?? true,
115
+ parameters: tool.parameters,
116
+ sql: tool.statement ?? null,
117
+ },
118
+ ], format, { rowCount: 1 });
119
+ }
120
+ else {
121
+ // Human-readable detail view
122
+ const lines = [];
123
+ lines.push(`Tool: ${name}`);
124
+ lines.push(`Description: ${tool.description}`);
125
+ lines.push(`Source: ${tool.source}`);
126
+ if (toolsets.length > 0) {
127
+ lines.push(`Toolsets: ${toolsets.join(", ")}`);
128
+ }
129
+ lines.push(`Read-only: ${tool.security?.readOnly ?? tool.annotations?.["readOnlyHint"] ?? true}`);
130
+ lines.push("");
131
+ // Parameters
132
+ if (tool.parameters.length > 0) {
133
+ lines.push("Parameters:");
134
+ for (const p of tool.parameters) {
135
+ lines.push(formatParameter(p));
136
+ }
137
+ }
138
+ else {
139
+ lines.push("Parameters: (none)");
140
+ }
141
+ lines.push("");
142
+ // SQL
143
+ if (tool.statement) {
144
+ lines.push("SQL:");
145
+ lines.push(tool.statement.trim());
146
+ }
147
+ process.stdout.write(lines.join("\n") + "\n");
148
+ }
149
+ }
150
+ catch (err) {
151
+ renderError(err instanceof Error ? err : new Error(String(err)), format);
152
+ process.exitCode = ExitCode.GENERAL;
153
+ }
154
+ });
155
+ }
156
+ /**
157
+ * Format a parameter for human-readable display.
158
+ */
159
+ function formatParameter(p) {
160
+ const parts = [];
161
+ parts.push(` --${p.name.replace(/_/g, "-")}`);
162
+ parts.push(`(${p.type})`);
163
+ if (p.required)
164
+ parts.push("[required]");
165
+ if (p.default !== undefined)
166
+ parts.push(`default: ${JSON.stringify(p.default)}`);
167
+ if (p.enum && p.enum.length > 0) {
168
+ parts.push(`choices: ${p.enum.join(", ")}`);
169
+ }
170
+ if (p.description)
171
+ parts.push(`— ${p.description}`);
172
+ return parts.join(" ");
173
+ }
174
+ /**
175
+ * Register `ibmi toolsets` — list available toolsets.
176
+ */
177
+ export function registerToolsetsCommand(program) {
178
+ program
179
+ .command("toolsets")
180
+ .description("List available toolsets")
181
+ .action((_opts, cmd) => {
182
+ const format = getFormat(cmd);
183
+ try {
184
+ const config = loadToolsConfig(cmd);
185
+ if (!config) {
186
+ process.exitCode = ExitCode.USAGE;
187
+ return;
188
+ }
189
+ const rows = [];
190
+ for (const [name, ts] of Object.entries(config.toolsets)) {
191
+ rows.push({
192
+ TOOLSET: name,
193
+ TOOLS: ts.tools.length,
194
+ DESCRIPTION: ts.description ?? ts.title ?? "-",
195
+ });
196
+ }
197
+ if (rows.length === 0) {
198
+ renderMessage("No toolsets found.", format);
199
+ return;
200
+ }
201
+ renderOutput(rows, format, { rowCount: rows.length });
202
+ }
203
+ catch (err) {
204
+ renderError(err instanceof Error ? err : new Error(String(err)), format);
205
+ process.exitCode = ExitCode.GENERAL;
206
+ }
207
+ });
208
+ }
209
+ //# sourceMappingURL=tools-list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools-list.js","sourceRoot":"","sources":["../../../src/cli/commands/tools-list.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @fileoverview `ibmi validate "<sql>"` command — validate SQL syntax and object references.
3
+ * @module cli/commands/validate
4
+ */
5
+ import { Command } from "commander";
6
+ export declare function registerValidateCommand(program: Command): void;
7
+ //# sourceMappingURL=validate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/validate.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAwF9D"}
@@ -0,0 +1,77 @@
1
+ /**
2
+ * @fileoverview `ibmi validate "<sql>"` command — validate SQL syntax and object references.
3
+ * @module cli/commands/validate
4
+ */
5
+ import { withConnection } from "../utils/command-helpers.js";
6
+ export function registerValidateCommand(program) {
7
+ program
8
+ .command("validate <sql>")
9
+ .description("Validate SQL syntax and verify referenced objects exist")
10
+ .action(async (sql, _opts, cmd) => {
11
+ await withConnection(cmd, "validate_query", async (_resolved, ctx) => {
12
+ const { validateQueryLogic } = await import("../../ibmi-mcp-server/tools/validateQuery.tool.js");
13
+ const result = await validateQueryLogic({ sql_statement: sql }, ctx, {});
14
+ if (!result.success) {
15
+ throw new Error(result.error?.message ?? "Failed to validate query");
16
+ }
17
+ // Build a summary view for CLI output
18
+ const summary = [];
19
+ // Parse results summary
20
+ if (result.data && result.data.length > 0) {
21
+ const stmtTypes = [
22
+ ...new Set(result.data
23
+ .map((r) => r.SQL_STATEMENT_TYPE)
24
+ .filter(Boolean)),
25
+ ];
26
+ summary.push({
27
+ CHECK: "Syntax",
28
+ STATUS: "PASS",
29
+ DETAILS: stmtTypes.length > 0
30
+ ? `Statement type: ${stmtTypes.join(", ")}`
31
+ : "Parsed successfully",
32
+ });
33
+ }
34
+ else {
35
+ summary.push({
36
+ CHECK: "Syntax",
37
+ STATUS: "FAIL",
38
+ DETAILS: "Statement could not be parsed (syntax error)",
39
+ });
40
+ }
41
+ // Object validation summary
42
+ const ov = result.objectValidation;
43
+ if (ov) {
44
+ summary.push({
45
+ CHECK: "Tables",
46
+ STATUS: ov.tables.invalid.length === 0 ? "PASS" : "FAIL",
47
+ DETAILS: ov.tables.invalid.length === 0
48
+ ? `${ov.tables.valid.length} table(s) verified`
49
+ : `Not found: ${ov.tables.invalid.join(", ")}`,
50
+ });
51
+ if (ov.columns.valid.length > 0 || ov.columns.invalid.length > 0) {
52
+ summary.push({
53
+ CHECK: "Columns",
54
+ STATUS: ov.columns.invalid.length === 0 ? "PASS" : "WARN",
55
+ DETAILS: ov.columns.invalid.length === 0
56
+ ? `${ov.columns.valid.length} column(s) verified`
57
+ : `Not verified: ${ov.columns.invalid.join(", ")}`,
58
+ });
59
+ }
60
+ if (ov.routines.valid.length > 0 || ov.routines.invalid.length > 0) {
61
+ summary.push({
62
+ CHECK: "Routines",
63
+ STATUS: ov.routines.invalid.length === 0 ? "PASS" : "WARN",
64
+ DETAILS: ov.routines.invalid.length === 0
65
+ ? `${ov.routines.valid.length} routine(s) verified`
66
+ : `Not verified: ${ov.routines.invalid.join(", ")}`,
67
+ });
68
+ }
69
+ }
70
+ return {
71
+ data: summary,
72
+ meta: { rowCount: summary.length },
73
+ };
74
+ });
75
+ });
76
+ }
77
+ //# sourceMappingURL=validate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../../src/cli/commands/validate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * @fileoverview Credential management for the IBM i CLI.
3
+ * Handles environment variable expansion in config values and interactive password prompting.
4
+ * @module cli/config/credentials
5
+ */
6
+ /**
7
+ * Expand ${ENV_VAR} references in a string value.
8
+ * Returns the original string if no env var pattern is found or the var is not set.
9
+ */
10
+ export declare function expandEnvVars(value: string): string;
11
+ /**
12
+ * Prompt the user for a password interactively (hidden input).
13
+ * Returns the entered password string.
14
+ */
15
+ export declare function promptPassword(prompt: string): Promise<string>;
16
+ /**
17
+ * Resolve the password for a system config.
18
+ * Priority: config password (with env expansion) → interactive prompt.
19
+ */
20
+ export declare function resolvePassword(systemName: string, configPassword: string | undefined, user: string, host: string): Promise<string>;
21
+ //# sourceMappingURL=credentials.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credentials.d.ts","sourceRoot":"","sources":["../../../src/cli/config/credentials.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAQnD;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAkDpE;AAED;;;GAGG;AACH,wBAAsB,eAAe,CACnC,UAAU,EAAE,MAAM,EAClB,cAAc,EAAE,MAAM,GAAG,SAAS,EAClC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,MAAM,CAAC,CAkBjB"}
@@ -0,0 +1,96 @@
1
+ /**
2
+ * @fileoverview Credential management for the IBM i CLI.
3
+ * Handles environment variable expansion in config values and interactive password prompting.
4
+ * @module cli/config/credentials
5
+ */
6
+ import * as readline from "readline";
7
+ /**
8
+ * Expand ${ENV_VAR} references in a string value.
9
+ * Returns the original string if no env var pattern is found or the var is not set.
10
+ */
11
+ export function expandEnvVars(value) {
12
+ return value.replace(/\$\{([^}]+)\}/g, (_match, varName) => {
13
+ const envValue = process.env[varName];
14
+ if (envValue === undefined) {
15
+ return _match; // Leave unexpanded if not set
16
+ }
17
+ return envValue;
18
+ });
19
+ }
20
+ /**
21
+ * Prompt the user for a password interactively (hidden input).
22
+ * Returns the entered password string.
23
+ */
24
+ export async function promptPassword(prompt) {
25
+ return new Promise((resolve, reject) => {
26
+ const rl = readline.createInterface({
27
+ input: process.stdin,
28
+ output: process.stderr, // Use stderr so it doesn't interfere with piped output
29
+ terminal: true,
30
+ });
31
+ // Disable echoing for password entry
32
+ if (process.stdin.isTTY) {
33
+ process.stderr.write(prompt);
34
+ const stdin = process.stdin;
35
+ const wasRaw = stdin.isRaw;
36
+ stdin.setRawMode(true);
37
+ let password = "";
38
+ const onData = (char) => {
39
+ const c = char.toString("utf8");
40
+ if (c === "\n" || c === "\r") {
41
+ stdin.setRawMode(wasRaw ?? false);
42
+ stdin.removeListener("data", onData);
43
+ process.stderr.write("\n");
44
+ rl.close();
45
+ resolve(password);
46
+ }
47
+ else if (c === "\u0003") {
48
+ // Ctrl+C — throw to let withConnection's finally block run cleanup
49
+ stdin.setRawMode(wasRaw ?? false);
50
+ stdin.removeListener("data", onData);
51
+ process.stderr.write("\n");
52
+ rl.close();
53
+ reject(new Error("Cancelled"));
54
+ return;
55
+ }
56
+ else if (c === "\u007f" || c === "\b") {
57
+ // Backspace
58
+ if (password.length > 0) {
59
+ password = password.slice(0, -1);
60
+ }
61
+ }
62
+ else {
63
+ password += c;
64
+ }
65
+ };
66
+ stdin.on("data", onData);
67
+ }
68
+ else {
69
+ // Non-interactive: read a line
70
+ rl.question(prompt, (answer) => {
71
+ rl.close();
72
+ resolve(answer);
73
+ });
74
+ }
75
+ });
76
+ }
77
+ /**
78
+ * Resolve the password for a system config.
79
+ * Priority: config password (with env expansion) → interactive prompt.
80
+ */
81
+ export async function resolvePassword(systemName, configPassword, user, host) {
82
+ if (configPassword) {
83
+ const expanded = expandEnvVars(configPassword);
84
+ // If expansion resolved to a non-empty value, use it
85
+ if (expanded && !expanded.includes("${")) {
86
+ return expanded;
87
+ }
88
+ }
89
+ // Fall back to interactive prompt
90
+ if (!process.stdin.isTTY) {
91
+ throw new Error(`No password configured for system "${systemName}" and stdin is not a terminal. ` +
92
+ `Set the password in config or via environment variable.`);
93
+ }
94
+ return promptPassword(`Password for ${user}@${host} [${systemName}]: `);
95
+ }
96
+ //# sourceMappingURL=credentials.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credentials.js","sourceRoot":"","sources":["../../../src/cli/config/credentials.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * @fileoverview Barrel export for CLI configuration modules.
3
+ * @module cli/config
4
+ */
5
+ export { CliConfigSchema, SystemConfigSchema, validateConfig } from "./schema.js";
6
+ export { loadConfig, saveUserConfig, upsertSystem, removeSystem, setDefaultSystem, getProjectConfigPath, getUserConfigPath, } from "./loader.js";
7
+ export { resolveSystem } from "./resolver.js";
8
+ export { expandEnvVars, promptPassword, resolvePassword, } from "./credentials.js";
9
+ export type { CliConfig, SystemConfig, ResolvedSystem, OutputFormat, GlobalOptions, } from "./types.js";
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cli/config/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClF,OAAO,EACL,UAAU,EACV,cAAc,EACd,YAAY,EACZ,YAAY,EACZ,gBAAgB,EAChB,oBAAoB,EACpB,iBAAiB,GAClB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EACL,aAAa,EACb,cAAc,EACd,eAAe,GAChB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EACV,SAAS,EACT,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,aAAa,GACd,MAAM,YAAY,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * @fileoverview Barrel export for CLI configuration modules.
3
+ * @module cli/config
4
+ */
5
+ export { CliConfigSchema, SystemConfigSchema, validateConfig } from "./schema.js";
6
+ export { loadConfig, saveUserConfig, upsertSystem, removeSystem, setDefaultSystem, getProjectConfigPath, getUserConfigPath, } from "./loader.js";
7
+ export { resolveSystem } from "./resolver.js";
8
+ export { expandEnvVars, promptPassword, resolvePassword, } from "./credentials.js";
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/config/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClF,OAAO,EACL,UAAU,EACV,cAAc,EACd,YAAY,EACZ,YAAY,EACZ,gBAAgB,EAChB,oBAAoB,EACpB,iBAAiB,GAClB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EACL,aAAa,EACb,cAAc,EACd,eAAe,GAChB,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * @fileoverview Configuration file loader for the IBM i CLI.
3
+ * Finds and parses .ibmi/config.yaml from project and user directories,
4
+ * merging them with project-level taking precedence.
5
+ * @module cli/config/loader
6
+ */
7
+ import type { CliConfig, SystemConfig } from "./types.js";
8
+ /** Get the project-level config file path (nearest .ibmi/config.yaml walking up from cwd). */
9
+ export declare function getProjectConfigPath(): string;
10
+ /** Get the user-level config file path. */
11
+ export declare function getUserConfigPath(): string;
12
+ /**
13
+ * Load the full CLI configuration by merging user-level and project-level configs.
14
+ * Project-level config takes precedence over user-level.
15
+ *
16
+ * @returns The merged, validated, and env-expanded configuration.
17
+ */
18
+ export declare function loadConfig(): CliConfig;
19
+ /**
20
+ * Save a config to the user-level config file.
21
+ */
22
+ export declare function saveUserConfig(config: CliConfig): void;
23
+ /**
24
+ * Add or update a system in the user config.
25
+ */
26
+ export declare function upsertSystem(name: string, system: SystemConfig): void;
27
+ /**
28
+ * Remove a system from the user config.
29
+ * @returns true if the system existed and was removed.
30
+ */
31
+ export declare function removeSystem(name: string): boolean;
32
+ /**
33
+ * Set the default system in the user config.
34
+ */
35
+ export declare function setDefaultSystem(name: string): void;
36
+ //# sourceMappingURL=loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../../src/cli/config/loader.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAgC1D,8FAA8F;AAC9F,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C;AAED,2CAA2C;AAC3C,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAkED;;;;;GAKG;AACH,wBAAgB,UAAU,IAAI,SAAS,CAsBtC;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAatD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,YAAY,GACnB,IAAI,CAgBN;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAsBlD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAkBnD"}