llng-mcp 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (114) hide show
  1. package/.github/workflows/ci.yml +77 -0
  2. package/.prettierrc +7 -0
  3. package/LICENSE +661 -0
  4. package/README.md +502 -0
  5. package/dist/__tests__/api-transport.test.d.ts +1 -0
  6. package/dist/__tests__/api-transport.test.js +577 -0
  7. package/dist/__tests__/api-transport.test.js.map +1 -0
  8. package/dist/__tests__/config.test.d.ts +1 -0
  9. package/dist/__tests__/config.test.js +472 -0
  10. package/dist/__tests__/config.test.js.map +1 -0
  11. package/dist/__tests__/integration/api-mode.test.d.ts +1 -0
  12. package/dist/__tests__/integration/api-mode.test.js +199 -0
  13. package/dist/__tests__/integration/api-mode.test.js.map +1 -0
  14. package/dist/__tests__/integration/oidc-rp.test.d.ts +1 -0
  15. package/dist/__tests__/integration/oidc-rp.test.js +120 -0
  16. package/dist/__tests__/integration/oidc-rp.test.js.map +1 -0
  17. package/dist/__tests__/integration/ssh-mode.test.d.ts +1 -0
  18. package/dist/__tests__/integration/ssh-mode.test.js +101 -0
  19. package/dist/__tests__/integration/ssh-mode.test.js.map +1 -0
  20. package/dist/__tests__/k8s-transport.test.d.ts +1 -0
  21. package/dist/__tests__/k8s-transport.test.js +254 -0
  22. package/dist/__tests__/k8s-transport.test.js.map +1 -0
  23. package/dist/__tests__/oidc-tools.test.d.ts +1 -0
  24. package/dist/__tests__/oidc-tools.test.js +457 -0
  25. package/dist/__tests__/oidc-tools.test.js.map +1 -0
  26. package/dist/__tests__/registry.test.d.ts +1 -0
  27. package/dist/__tests__/registry.test.js +96 -0
  28. package/dist/__tests__/registry.test.js.map +1 -0
  29. package/dist/__tests__/ssh-transport.test.d.ts +1 -0
  30. package/dist/__tests__/ssh-transport.test.js +618 -0
  31. package/dist/__tests__/ssh-transport.test.js.map +1 -0
  32. package/dist/__tests__/tools.test.d.ts +1 -0
  33. package/dist/__tests__/tools.test.js +525 -0
  34. package/dist/__tests__/tools.test.js.map +1 -0
  35. package/dist/config.d.ts +65 -0
  36. package/dist/config.js +506 -0
  37. package/dist/config.js.map +1 -0
  38. package/dist/index.d.ts +2 -0
  39. package/dist/index.js +42 -0
  40. package/dist/index.js.map +1 -0
  41. package/dist/resources/documentation.d.ts +5 -0
  42. package/dist/resources/documentation.js +56 -0
  43. package/dist/resources/documentation.js.map +1 -0
  44. package/dist/tools/cli-utilities.d.ts +3 -0
  45. package/dist/tools/cli-utilities.js +187 -0
  46. package/dist/tools/cli-utilities.js.map +1 -0
  47. package/dist/tools/config.d.ts +6 -0
  48. package/dist/tools/config.js +326 -0
  49. package/dist/tools/config.js.map +1 -0
  50. package/dist/tools/consents.d.ts +3 -0
  51. package/dist/tools/consents.js +39 -0
  52. package/dist/tools/consents.js.map +1 -0
  53. package/dist/tools/instances.d.ts +3 -0
  54. package/dist/tools/instances.js +14 -0
  55. package/dist/tools/instances.js.map +1 -0
  56. package/dist/tools/oidc-rp.d.ts +6 -0
  57. package/dist/tools/oidc-rp.js +246 -0
  58. package/dist/tools/oidc-rp.js.map +1 -0
  59. package/dist/tools/oidc.d.ts +3 -0
  60. package/dist/tools/oidc.js +343 -0
  61. package/dist/tools/oidc.js.map +1 -0
  62. package/dist/tools/secondfactors.d.ts +3 -0
  63. package/dist/tools/secondfactors.js +62 -0
  64. package/dist/tools/secondfactors.js.map +1 -0
  65. package/dist/tools/sessions.d.ts +6 -0
  66. package/dist/tools/sessions.js +300 -0
  67. package/dist/tools/sessions.js.map +1 -0
  68. package/dist/transport/api.d.ts +35 -0
  69. package/dist/transport/api.js +327 -0
  70. package/dist/transport/api.js.map +1 -0
  71. package/dist/transport/interface.d.ts +50 -0
  72. package/dist/transport/interface.js +2 -0
  73. package/dist/transport/interface.js.map +1 -0
  74. package/dist/transport/k8s.d.ts +41 -0
  75. package/dist/transport/k8s.js +303 -0
  76. package/dist/transport/k8s.js.map +1 -0
  77. package/dist/transport/registry.d.ts +20 -0
  78. package/dist/transport/registry.js +91 -0
  79. package/dist/transport/registry.js.map +1 -0
  80. package/dist/transport/ssh.d.ts +37 -0
  81. package/dist/transport/ssh.js +353 -0
  82. package/dist/transport/ssh.js.map +1 -0
  83. package/docker-compose.test.yml +16 -0
  84. package/eslint.config.js +21 -0
  85. package/package.json +38 -0
  86. package/src/__tests__/api-transport.test.ts +746 -0
  87. package/src/__tests__/config.test.ts +587 -0
  88. package/src/__tests__/integration/api-mode.test.ts +229 -0
  89. package/src/__tests__/integration/oidc-rp.test.ts +138 -0
  90. package/src/__tests__/integration/ssh-mode.test.ts +113 -0
  91. package/src/__tests__/k8s-transport.test.ts +342 -0
  92. package/src/__tests__/oidc-tools.test.ts +554 -0
  93. package/src/__tests__/registry.test.ts +110 -0
  94. package/src/__tests__/ssh-transport.test.ts +805 -0
  95. package/src/__tests__/tools.test.ts +735 -0
  96. package/src/config.ts +605 -0
  97. package/src/index.ts +48 -0
  98. package/src/resources/documentation.ts +65 -0
  99. package/src/tools/cli-utilities.ts +207 -0
  100. package/src/tools/config.ts +382 -0
  101. package/src/tools/consents.ts +50 -0
  102. package/src/tools/instances.ts +21 -0
  103. package/src/tools/oidc-rp.ts +299 -0
  104. package/src/tools/oidc.ts +434 -0
  105. package/src/tools/secondfactors.ts +78 -0
  106. package/src/tools/sessions.ts +342 -0
  107. package/src/transport/api.ts +429 -0
  108. package/src/transport/interface.ts +58 -0
  109. package/src/transport/k8s.ts +367 -0
  110. package/src/transport/registry.ts +105 -0
  111. package/src/transport/ssh.ts +430 -0
  112. package/tsconfig.json +16 -0
  113. package/vitest.config.ts +8 -0
  114. package/vitest.integration.config.ts +9 -0
@@ -0,0 +1,254 @@
1
+ import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
2
+ import { K8sTransport } from "../transport/k8s.js";
3
+ import * as child_process from "child_process";
4
+ import { EventEmitter } from "events";
5
+ vi.mock("child_process");
6
+ class MockChildProcess extends EventEmitter {
7
+ stdin = {
8
+ write: vi.fn(),
9
+ end: vi.fn(),
10
+ };
11
+ stdout = new EventEmitter();
12
+ stderr = new EventEmitter();
13
+ constructor() {
14
+ super();
15
+ }
16
+ }
17
+ function mockSpawn(stdout, stderr = "", exitCode = 0) {
18
+ const proc = new MockChildProcess();
19
+ process.nextTick(() => {
20
+ if (stdout) {
21
+ proc.stdout.emit("data", Buffer.from(stdout));
22
+ }
23
+ if (stderr) {
24
+ proc.stderr.emit("data", Buffer.from(stderr));
25
+ }
26
+ proc.emit("close", exitCode);
27
+ });
28
+ return proc;
29
+ }
30
+ describe("K8sTransport", () => {
31
+ const defaultConfig = {
32
+ context: "my-cluster",
33
+ namespace: "auth",
34
+ deployment: "lemonldap-ng",
35
+ };
36
+ let spawnCalls = [];
37
+ let spawnCallIndex = 0;
38
+ const setupSpawnMock = (...responses) => {
39
+ spawnCallIndex = 0;
40
+ vi.mocked(child_process.spawn).mockImplementation((cmd, args) => {
41
+ spawnCalls.push({ cmd, args: args ? [...args] : [] });
42
+ const resp = responses[spawnCallIndex] || responses[responses.length - 1];
43
+ spawnCallIndex++;
44
+ return mockSpawn(resp.stdout, "", resp.exitCode ?? 0);
45
+ });
46
+ };
47
+ beforeEach(() => {
48
+ vi.resetAllMocks();
49
+ spawnCalls = [];
50
+ spawnCallIndex = 0;
51
+ });
52
+ afterEach(() => {
53
+ spawnCalls = [];
54
+ });
55
+ describe("Pod resolution", () => {
56
+ it("resolves pod name using default label selector", async () => {
57
+ setupSpawnMock({ stdout: "lemonldap-ng-abc123" }, { stdout: "Num : 42\nAuthor : admin\nDate : 2025-01-30" });
58
+ const transport = new K8sTransport(defaultConfig);
59
+ await transport.configInfo();
60
+ // First call: get pods
61
+ expect(spawnCalls[0].cmd).toBe("kubectl");
62
+ expect(spawnCalls[0].args).toEqual([
63
+ "-n",
64
+ "auth",
65
+ "--context",
66
+ "my-cluster",
67
+ "get",
68
+ "pods",
69
+ "-l",
70
+ "app.kubernetes.io/name=lemonldap-ng",
71
+ "-o",
72
+ "jsonpath={.items[0].metadata.name}",
73
+ ]);
74
+ // Second call: exec
75
+ expect(spawnCalls[1].cmd).toBe("kubectl");
76
+ expect(spawnCalls[1].args).toContain("exec");
77
+ expect(spawnCalls[1].args).toContain("lemonldap-ng-abc123");
78
+ });
79
+ it("caches pod name across calls", async () => {
80
+ setupSpawnMock({ stdout: "lemonldap-ng-abc123" }, { stdout: "Num : 42\nAuthor : admin\nDate : 2025-01-30" }, { stdout: JSON.stringify({ domain: "example.com" }) });
81
+ const transport = new K8sTransport(defaultConfig);
82
+ await transport.configInfo();
83
+ await transport.configGet(["domain"]);
84
+ // Pod resolution should only happen once (first call)
85
+ const getPodsCalls = spawnCalls.filter((c) => c.args.includes("get") && c.args.includes("pods"));
86
+ expect(getPodsCalls).toHaveLength(1);
87
+ });
88
+ it("uses custom podSelector", async () => {
89
+ const config = {
90
+ ...defaultConfig,
91
+ podSelector: "app=llng,tier=auth",
92
+ };
93
+ setupSpawnMock({ stdout: "llng-pod-xyz" }, { stdout: "Num : 1\nAuthor : admin\nDate : 2025-01-30" });
94
+ const transport = new K8sTransport(config);
95
+ await transport.configInfo();
96
+ expect(spawnCalls[0].args).toContain("app=llng,tier=auth");
97
+ });
98
+ it("throws when no pod found", async () => {
99
+ setupSpawnMock({ stdout: "" });
100
+ const transport = new K8sTransport(defaultConfig);
101
+ await expect(transport.configInfo()).rejects.toThrow("No pod found for selector");
102
+ });
103
+ });
104
+ describe("Command execution", () => {
105
+ it("builds correct exec command with context, namespace, and container", async () => {
106
+ const config = {
107
+ ...defaultConfig,
108
+ container: "sso",
109
+ };
110
+ setupSpawnMock({ stdout: "llng-pod-123" }, { stdout: "Num : 42\nAuthor : admin\nDate : 2025-01-30" });
111
+ const transport = new K8sTransport(config);
112
+ await transport.configInfo();
113
+ const execCall = spawnCalls[1];
114
+ expect(execCall.args).toEqual([
115
+ "--context",
116
+ "my-cluster",
117
+ "-n",
118
+ "auth",
119
+ "exec",
120
+ "llng-pod-123",
121
+ "-c",
122
+ "sso",
123
+ "--",
124
+ "/usr/share/lemonldap-ng/bin/lemonldap-ng-cli",
125
+ "info",
126
+ ]);
127
+ });
128
+ it("exec without container omits -c flag", async () => {
129
+ setupSpawnMock({ stdout: "llng-pod-123" }, { stdout: "Num : 42\nAuthor : admin\nDate : 2025-01-30" });
130
+ const transport = new K8sTransport(defaultConfig);
131
+ await transport.configInfo();
132
+ const execCall = spawnCalls[1];
133
+ expect(execCall.args).not.toContain("-c");
134
+ });
135
+ it("works without context", async () => {
136
+ const config = {
137
+ namespace: "auth",
138
+ deployment: "lemonldap-ng",
139
+ };
140
+ setupSpawnMock({ stdout: "llng-pod-123" }, { stdout: "Num : 42\nAuthor : admin\nDate : 2025-01-30" });
141
+ const transport = new K8sTransport(config);
142
+ await transport.configInfo();
143
+ expect(spawnCalls[0].args).not.toContain("--context");
144
+ expect(spawnCalls[1].args).not.toContain("--context");
145
+ });
146
+ });
147
+ describe("binPrefix", () => {
148
+ it("custom binPrefix resolves paths", async () => {
149
+ const config = {
150
+ ...defaultConfig,
151
+ binPrefix: "/opt/llng/bin",
152
+ };
153
+ setupSpawnMock({ stdout: "llng-pod-123" }, { stdout: "Num : 42\nAuthor : admin\nDate : 2025-01-30" });
154
+ const transport = new K8sTransport(config);
155
+ await transport.configInfo();
156
+ const execCall = spawnCalls[1];
157
+ expect(execCall.args).toContain("/opt/llng/bin/lemonldap-ng-cli");
158
+ });
159
+ });
160
+ describe("CLI methods", () => {
161
+ it("configGet passes keys", async () => {
162
+ setupSpawnMock({ stdout: "llng-pod-123" }, { stdout: JSON.stringify({ domain: "example.com", portal: "https://portal.example.com" }) });
163
+ const transport = new K8sTransport(defaultConfig);
164
+ const result = await transport.configGet(["domain", "portal"]);
165
+ expect(result).toEqual({ domain: "example.com", portal: "https://portal.example.com" });
166
+ });
167
+ it("configSet passes key-value pairs", async () => {
168
+ setupSpawnMock({ stdout: "llng-pod-123" }, { stdout: "" });
169
+ const transport = new K8sTransport(defaultConfig);
170
+ await transport.configSet({ domain: "example.com" }, "Update");
171
+ const execCall = spawnCalls[1];
172
+ expect(execCall.args).toContain("set");
173
+ expect(execCall.args).toContain("-yes");
174
+ expect(execCall.args).toContain("domain");
175
+ expect(execCall.args).toContain("example.com");
176
+ expect(execCall.args).toContain("-log");
177
+ expect(execCall.args).toContain("Update");
178
+ });
179
+ it("sessionSearch builds correct args", async () => {
180
+ setupSpawnMock({ stdout: "llng-pod-123" }, { stdout: '[{"id": "s1"}]' });
181
+ const transport = new K8sTransport(defaultConfig);
182
+ const result = await transport.sessionSearch({ where: { uid: "john" } });
183
+ expect(result).toEqual([{ id: "s1" }]);
184
+ });
185
+ it("unsupported methods throw", async () => {
186
+ const transport = new K8sTransport(defaultConfig);
187
+ await expect(transport.secondFactorsGet("user")).rejects.toThrow("Use API mode");
188
+ await expect(transport.consentsGet("user")).rejects.toThrow("Use API mode");
189
+ });
190
+ it("sessionSetKey uses execSessions with setKey command", async () => {
191
+ setupSpawnMock({ stdout: "llng-pod-123" }, { stdout: "" });
192
+ const transport = new K8sTransport(defaultConfig);
193
+ await transport.sessionSetKey("sid1", { uid: "jane" });
194
+ const execCall = spawnCalls[1];
195
+ expect(execCall.args).toContain("setKey");
196
+ });
197
+ it("sessionDelKey uses execSessions with delKey command", async () => {
198
+ setupSpawnMock({ stdout: "llng-pod-123" }, { stdout: "" });
199
+ const transport = new K8sTransport(defaultConfig);
200
+ await transport.sessionDelKey("sid1", ["key1"]);
201
+ const execCall = spawnCalls[1];
202
+ expect(execCall.args).toContain("delKey");
203
+ });
204
+ });
205
+ describe("stdin methods", () => {
206
+ it("configRestore passes JSON via stdin", async () => {
207
+ let stdinContent = "";
208
+ let callIdx = 0;
209
+ vi.mocked(child_process.spawn).mockImplementation((cmd, args) => {
210
+ spawnCalls.push({ cmd, args: args ? [...args] : [] });
211
+ const proc = new MockChildProcess();
212
+ if (callIdx === 1) {
213
+ proc.stdin.write = vi.fn((data) => {
214
+ stdinContent += data;
215
+ return true;
216
+ });
217
+ }
218
+ callIdx++;
219
+ process.nextTick(() => {
220
+ if (callIdx === 1) {
221
+ proc.stdout.emit("data", Buffer.from("llng-pod-123"));
222
+ }
223
+ proc.emit("close", 0);
224
+ });
225
+ return proc;
226
+ });
227
+ const transport = new K8sTransport(defaultConfig);
228
+ const json = '{"domain": "example.com"}';
229
+ await transport.configRestore(json);
230
+ expect(stdinContent).toBe(json);
231
+ // The exec call should include -i flag for stdin
232
+ const execCall = spawnCalls[1];
233
+ expect(execCall.args).toContain("-i");
234
+ expect(execCall.args).toContain("restore");
235
+ });
236
+ });
237
+ describe("execScript", () => {
238
+ it("executes script with default binPrefix", async () => {
239
+ setupSpawnMock({ stdout: "lemonldap-ng-abc123" }, { stdout: "Keys rotated successfully" });
240
+ const transport = new K8sTransport(defaultConfig);
241
+ const result = await transport.execScript("rotateOidcKeys", []);
242
+ // First call is pod resolution
243
+ expect(spawnCalls[0].cmd).toBe("kubectl");
244
+ expect(spawnCalls[0].args).toContain("get");
245
+ expect(spawnCalls[0].args).toContain("pods");
246
+ // Second call is the exec with the script
247
+ expect(spawnCalls[1].cmd).toBe("kubectl");
248
+ expect(spawnCalls[1].args).toContain("exec");
249
+ expect(spawnCalls[1].args).toContain("/usr/share/lemonldap-ng/bin/rotateOidcKeys");
250
+ expect(result).toBe("Keys rotated successfully");
251
+ });
252
+ });
253
+ });
254
+ //# sourceMappingURL=k8s-transport.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"k8s-transport.test.js","sourceRoot":"","sources":["../../src/__tests__/k8s-transport.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};