@sirrlock/mcp 0.1.0 → 1.0.1

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.
@@ -0,0 +1,558 @@
1
+ "use strict";
2
+ /**
3
+ * Unit tests for MCP tool handlers.
4
+ *
5
+ * Uses a mock HTTP server so tests run without a real sirrd instance.
6
+ * Assertions cover: HTTP method, path, request body, response formatting,
7
+ * 404 handling (returns text, not error), non-2xx handling (returns Error:).
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ const globals_1 = require("@jest/globals");
11
+ const http_1 = require("http");
12
+ const child_process_1 = require("child_process");
13
+ const readline_1 = require("readline");
14
+ class MockServer {
15
+ constructor(port) {
16
+ this.responseQueue = [];
17
+ this.lastRequest = null;
18
+ this.port = port;
19
+ this.url = `http://127.0.0.1:${port}`;
20
+ this.server = (0, http_1.createServer)(async (req, res) => {
21
+ const chunks = [];
22
+ for await (const chunk of req)
23
+ chunks.push(chunk);
24
+ const raw = Buffer.concat(chunks).toString();
25
+ let body = null;
26
+ try {
27
+ body = JSON.parse(raw);
28
+ }
29
+ catch {
30
+ body = raw || null;
31
+ }
32
+ this.lastRequest = { method: req.method, path: req.url, body };
33
+ const next = this.responseQueue.shift() ?? { status: 200, body: {} };
34
+ const ct = next.contentType ?? "application/json";
35
+ res.writeHead(next.status, { "Content-Type": ct });
36
+ res.end(ct === "application/json" ? JSON.stringify(next.body) : String(next.body));
37
+ });
38
+ }
39
+ start() {
40
+ return new Promise((resolve) => this.server.listen(this.port, "127.0.0.1", resolve));
41
+ }
42
+ stop() {
43
+ return new Promise((resolve, reject) => this.server.close((err) => (err ? reject(err) : resolve())));
44
+ }
45
+ /** Enqueue a JSON response to be served for the next request. */
46
+ next(status, body) {
47
+ this.responseQueue.push({ status, body });
48
+ return this;
49
+ }
50
+ /** Enqueue a plain-text response (simulates rate-limiter / proxy errors). */
51
+ nextText(status, text) {
52
+ this.responseQueue.push({ status, body: text, contentType: "text/plain" });
53
+ return this;
54
+ }
55
+ clearQueue() {
56
+ this.responseQueue = [];
57
+ }
58
+ }
59
+ class McpClient {
60
+ constructor(proc) {
61
+ this.proc = proc;
62
+ this.pending = new Map();
63
+ this.nextId = 1;
64
+ this.rl = (0, readline_1.createInterface)({ input: proc.stdout });
65
+ this.rl.on("line", (line) => {
66
+ if (!line.trim())
67
+ return;
68
+ const msg = JSON.parse(line);
69
+ if (msg.id != null) {
70
+ const resolve = this.pending.get(msg.id);
71
+ if (resolve) {
72
+ this.pending.delete(msg.id);
73
+ resolve(msg);
74
+ }
75
+ }
76
+ });
77
+ }
78
+ close() { this.rl.close(); this.proc.kill(); }
79
+ rpc(method, params) {
80
+ const id = this.nextId++;
81
+ return new Promise((resolve) => {
82
+ this.pending.set(id, resolve);
83
+ this.proc.stdin.write(JSON.stringify({ jsonrpc: "2.0", id, method, params }) + "\n");
84
+ });
85
+ }
86
+ async initialize() {
87
+ await this.rpc("initialize", {
88
+ protocolVersion: "2024-11-05",
89
+ capabilities: {},
90
+ clientInfo: { name: "unit-test", version: "1" },
91
+ });
92
+ }
93
+ async call(tool, args = {}) {
94
+ const resp = await this.rpc("tools/call", { name: tool, arguments: args });
95
+ if (resp.error)
96
+ throw new Error(`MCP error: ${resp.error.message}`);
97
+ return resp.result?.content?.[0]?.text ?? "";
98
+ }
99
+ }
100
+ // ── Fixtures ──────────────────────────────────────────────────────────────────
101
+ const MOCK_PORT = 19082;
102
+ const TOKEN = "unit-test-token";
103
+ const MCP_BIN = `${__dirname}/../dist/index.js`;
104
+ let mock;
105
+ let client;
106
+ let mcpProc;
107
+ (0, globals_1.beforeAll)(async () => {
108
+ mock = new MockServer(MOCK_PORT);
109
+ await mock.start();
110
+ mcpProc = (0, child_process_1.spawn)("node", [MCP_BIN], {
111
+ env: { ...process.env, SIRR_SERVER: mock.url, SIRR_TOKEN: TOKEN },
112
+ stdio: ["pipe", "pipe", "pipe"],
113
+ });
114
+ mcpProc.stderr.on("data", (d) => {
115
+ const msg = d.toString();
116
+ if (!msg.includes("[sirr-mcp] Warning"))
117
+ process.stderr.write(msg);
118
+ });
119
+ client = new McpClient(mcpProc);
120
+ await client.initialize();
121
+ }, 15000);
122
+ (0, globals_1.afterAll)(async () => {
123
+ client?.close();
124
+ await mock?.stop();
125
+ });
126
+ (0, globals_1.afterEach)(() => {
127
+ mock.clearQueue();
128
+ });
129
+ // ── check_secret ─────────────────────────────────────────────────────────────
130
+ (0, globals_1.describe)("check_secret", () => {
131
+ (0, globals_1.it)("HEAD /secrets/{key} — active secret returns metadata without consuming a read", async () => {
132
+ const future = Math.floor(Date.now() / 1000) + 3600;
133
+ mock.next(200, {});
134
+ // Mock server doesn't send response headers naturally, but we test the path/method
135
+ const text = await client.call("check_secret", { key: "MY_KEY" });
136
+ (0, globals_1.expect)(mock.lastRequest?.method).toBe("HEAD");
137
+ (0, globals_1.expect)(mock.lastRequest?.path).toBe("/secrets/MY_KEY");
138
+ // 200 with no X-Sirr-Status header defaults to "active"
139
+ (0, globals_1.expect)(text).toContain("active");
140
+ });
141
+ (0, globals_1.it)("404 → not found message", async () => {
142
+ mock.next(404, {});
143
+ const text = await client.call("check_secret", { key: "GONE" });
144
+ (0, globals_1.expect)(text).toContain("not found");
145
+ (0, globals_1.expect)(text).not.toContain("Error:");
146
+ });
147
+ (0, globals_1.it)("410 → sealed message", async () => {
148
+ mock.next(410, {});
149
+ const text = await client.call("check_secret", { key: "SEALED" });
150
+ (0, globals_1.expect)(text).toContain("sealed");
151
+ (0, globals_1.expect)(text).not.toContain("Error:");
152
+ });
153
+ });
154
+ // ── get_secret ────────────────────────────────────────────────────────────────
155
+ (0, globals_1.describe)("get_secret", () => {
156
+ (0, globals_1.it)("GET /secrets/{key} and returns value", async () => {
157
+ mock.next(200, { value: "supersecret" });
158
+ const text = await client.call("get_secret", { key: "MY_KEY" });
159
+ (0, globals_1.expect)(mock.lastRequest?.method).toBe("GET");
160
+ (0, globals_1.expect)(mock.lastRequest?.path).toBe("/secrets/MY_KEY");
161
+ (0, globals_1.expect)(text).toBe("supersecret");
162
+ });
163
+ (0, globals_1.it)("404 → not-found message, not an error", async () => {
164
+ mock.next(404, { error: "not found" });
165
+ const text = await client.call("get_secret", { key: "MISSING" });
166
+ (0, globals_1.expect)(text).toContain("not found");
167
+ (0, globals_1.expect)(text).not.toContain("Error:");
168
+ });
169
+ (0, globals_1.it)("410 → not-found message (burned secret)", async () => {
170
+ mock.next(410, { error: "gone" });
171
+ const text = await client.call("get_secret", { key: "BURNED" });
172
+ (0, globals_1.expect)(text).toContain("not found");
173
+ (0, globals_1.expect)(text).not.toContain("Error:");
174
+ });
175
+ (0, globals_1.it)("403 → Error: in output", async () => {
176
+ mock.next(403, { error: "forbidden" });
177
+ const text = await client.call("get_secret", { key: "DENIED" });
178
+ (0, globals_1.expect)(text).toContain("Error:");
179
+ (0, globals_1.expect)(text).toContain("403");
180
+ });
181
+ });
182
+ // ── push_secret ───────────────────────────────────────────────────────────────
183
+ (0, globals_1.describe)("push_secret", () => {
184
+ (0, globals_1.it)("POST /secrets with key and value", async () => {
185
+ mock.next(201, { key: "FOO" });
186
+ await client.call("push_secret", { key: "FOO", value: "bar" });
187
+ (0, globals_1.expect)(mock.lastRequest?.method).toBe("POST");
188
+ (0, globals_1.expect)(mock.lastRequest?.path).toBe("/secrets");
189
+ (0, globals_1.expect)((mock.lastRequest?.body)["key"]).toBe("FOO");
190
+ (0, globals_1.expect)((mock.lastRequest?.body)["value"]).toBe("bar");
191
+ });
192
+ (0, globals_1.it)("reports TTL in output when ttl_seconds provided", async () => {
193
+ mock.next(201, { key: "TTL_KEY" });
194
+ const text = await client.call("push_secret", { key: "TTL_KEY", value: "v", ttl_seconds: 3600 });
195
+ (0, globals_1.expect)(text).toContain("1h");
196
+ });
197
+ (0, globals_1.it)("reports burn limit in output when max_reads provided", async () => {
198
+ mock.next(201, { key: "BURN_KEY" });
199
+ const text = await client.call("push_secret", { key: "BURN_KEY", value: "v", max_reads: 1 });
200
+ (0, globals_1.expect)(text).toContain("1 read(s)");
201
+ });
202
+ (0, globals_1.it)("does not send null for omitted optional fields", async () => {
203
+ mock.next(201, { key: "BARE" });
204
+ await client.call("push_secret", { key: "BARE", value: "v" });
205
+ const body = mock.lastRequest?.body;
206
+ (0, globals_1.expect)(body["ttl_seconds"]).toBeUndefined();
207
+ (0, globals_1.expect)(body["max_reads"]).toBeUndefined();
208
+ });
209
+ (0, globals_1.it)("sends delete=false for seal-on-burn behavior", async () => {
210
+ mock.next(201, { key: "SEAL" });
211
+ const text = await client.call("push_secret", { key: "SEAL", value: "v", max_reads: 3, delete: false });
212
+ (0, globals_1.expect)((mock.lastRequest?.body)["delete"]).toBe(false);
213
+ (0, globals_1.expect)(text).toContain("Sealed on burn");
214
+ });
215
+ });
216
+ // ── patch_secret ──────────────────────────────────────────────────────────────
217
+ (0, globals_1.describe)("patch_secret", () => {
218
+ (0, globals_1.it)("PATCH /secrets/{key} with body", async () => {
219
+ mock.next(200, { key: "FOO", read_count: 0, max_reads: 5, expires_at: null });
220
+ await client.call("patch_secret", { key: "FOO", max_reads: 5 });
221
+ (0, globals_1.expect)(mock.lastRequest?.method).toBe("PATCH");
222
+ (0, globals_1.expect)(mock.lastRequest?.path).toBe("/secrets/FOO");
223
+ (0, globals_1.expect)((mock.lastRequest?.body)["max_reads"]).toBe(5);
224
+ });
225
+ (0, globals_1.it)("only sends provided fields", async () => {
226
+ mock.next(200, { key: "FOO", read_count: 0, max_reads: null, expires_at: null });
227
+ await client.call("patch_secret", { key: "FOO", ttl_seconds: 7200 });
228
+ const body = mock.lastRequest?.body;
229
+ (0, globals_1.expect)(body["ttl_seconds"]).toBe(7200);
230
+ (0, globals_1.expect)(body["max_reads"]).toBeUndefined();
231
+ (0, globals_1.expect)(body["value"]).toBeUndefined();
232
+ });
233
+ (0, globals_1.it)("formats response with expiry and max_reads", async () => {
234
+ const future = Math.floor(Date.now() / 1000) + 7200;
235
+ mock.next(200, { key: "FOO", read_count: 1, max_reads: 5, expires_at: future });
236
+ const text = await client.call("patch_secret", { key: "FOO" });
237
+ (0, globals_1.expect)(text).toContain("FOO");
238
+ (0, globals_1.expect)(text).toContain("2h");
239
+ (0, globals_1.expect)(text).toContain("Max reads: 5 (1 used)");
240
+ });
241
+ });
242
+ // ── list_secrets ──────────────────────────────────────────────────────────────
243
+ (0, globals_1.describe)("list_secrets", () => {
244
+ (0, globals_1.it)("GET /secrets and formats list", async () => {
245
+ mock.next(200, {
246
+ secrets: [
247
+ { key: "KEY_A", read_count: 2, max_reads: null, expires_at: null },
248
+ { key: "KEY_B", read_count: 0, max_reads: 1, expires_at: null },
249
+ ],
250
+ });
251
+ const text = await client.call("list_secrets");
252
+ (0, globals_1.expect)(mock.lastRequest?.method).toBe("GET");
253
+ (0, globals_1.expect)(mock.lastRequest?.path).toBe("/secrets");
254
+ (0, globals_1.expect)(text).toContain("KEY_A");
255
+ (0, globals_1.expect)(text).toContain("KEY_B");
256
+ (0, globals_1.expect)(text).toContain("0/1 reads");
257
+ });
258
+ (0, globals_1.it)("empty vault → 'No active secrets'", async () => {
259
+ mock.next(200, { secrets: [] });
260
+ const text = await client.call("list_secrets");
261
+ (0, globals_1.expect)(text).toBe("No active secrets.");
262
+ });
263
+ });
264
+ // ── delete_secret ─────────────────────────────────────────────────────────────
265
+ (0, globals_1.describe)("delete_secret", () => {
266
+ (0, globals_1.it)("DELETE /secrets/{key}", async () => {
267
+ mock.next(200, { deleted: true });
268
+ await client.call("delete_secret", { key: "TO_DEL" });
269
+ (0, globals_1.expect)(mock.lastRequest?.method).toBe("DELETE");
270
+ (0, globals_1.expect)(mock.lastRequest?.path).toBe("/secrets/TO_DEL");
271
+ });
272
+ (0, globals_1.it)("404 → not-found message, not an error", async () => {
273
+ mock.next(404, { error: "not found" });
274
+ const text = await client.call("delete_secret", { key: "MISSING" });
275
+ (0, globals_1.expect)(text).toContain("not found");
276
+ (0, globals_1.expect)(text).not.toContain("Error:");
277
+ });
278
+ });
279
+ // ── prune_secrets ─────────────────────────────────────────────────────────────
280
+ (0, globals_1.describe)("prune_secrets", () => {
281
+ (0, globals_1.it)("POST /prune and reports count", async () => {
282
+ mock.next(200, { pruned: 3 });
283
+ const text = await client.call("prune_secrets");
284
+ (0, globals_1.expect)(mock.lastRequest?.method).toBe("POST");
285
+ (0, globals_1.expect)(mock.lastRequest?.path).toBe("/prune");
286
+ (0, globals_1.expect)(text).toContain("3");
287
+ });
288
+ });
289
+ // ── sirr_audit ────────────────────────────────────────────────────────────────
290
+ (0, globals_1.describe)("sirr_audit", () => {
291
+ (0, globals_1.it)("GET /audit with query params", async () => {
292
+ mock.next(200, { events: [
293
+ { id: 1, timestamp: 1000, action: "secret.read", key: "K", source_ip: "1.2.3.4", success: true },
294
+ ] });
295
+ const text = await client.call("sirr_audit", { since: 500, action: "secret.read", limit: 10 });
296
+ (0, globals_1.expect)(mock.lastRequest?.method).toBe("GET");
297
+ (0, globals_1.expect)(mock.lastRequest?.path).toContain("/audit");
298
+ (0, globals_1.expect)(mock.lastRequest?.path).toContain("since=500");
299
+ (0, globals_1.expect)(mock.lastRequest?.path).toContain("action=secret.read");
300
+ (0, globals_1.expect)(mock.lastRequest?.path).toContain("limit=10");
301
+ (0, globals_1.expect)(text).toContain("secret.read");
302
+ });
303
+ (0, globals_1.it)("passes until param in query string", async () => {
304
+ mock.next(200, { events: [] });
305
+ await client.call("sirr_audit", { since: 100, until: 200 });
306
+ (0, globals_1.expect)(mock.lastRequest?.path).toContain("since=100");
307
+ (0, globals_1.expect)(mock.lastRequest?.path).toContain("until=200");
308
+ });
309
+ (0, globals_1.it)("empty events → 'No audit events found'", async () => {
310
+ mock.next(200, { events: [] });
311
+ const text = await client.call("sirr_audit");
312
+ (0, globals_1.expect)(text).toBe("No audit events found.");
313
+ });
314
+ });
315
+ // ── sirr_webhook_create / list / delete ───────────────────────────────────────
316
+ (0, globals_1.describe)("sirr_webhook_create", () => {
317
+ (0, globals_1.it)("POST /webhooks with url and events", async () => {
318
+ mock.next(201, { id: "wh_1", secret: "whsec_abc" });
319
+ const text = await client.call("sirr_webhook_create", { url: "https://example.com/hook", events: ["secret.created"] });
320
+ (0, globals_1.expect)(mock.lastRequest?.method).toBe("POST");
321
+ (0, globals_1.expect)(mock.lastRequest?.path).toBe("/webhooks");
322
+ const body = mock.lastRequest?.body;
323
+ (0, globals_1.expect)(body["url"]).toBe("https://example.com/hook");
324
+ (0, globals_1.expect)(body["events"]).toEqual(["secret.created"]);
325
+ (0, globals_1.expect)(text).toContain("wh_1");
326
+ (0, globals_1.expect)(text).toContain("whsec_abc");
327
+ });
328
+ });
329
+ (0, globals_1.describe)("sirr_webhook_list", () => {
330
+ (0, globals_1.it)("GET /webhooks and formats list", async () => {
331
+ mock.next(200, { webhooks: [{ id: "wh_1", url: "https://example.com", events: ["*"], created_at: 0 }] });
332
+ const text = await client.call("sirr_webhook_list");
333
+ (0, globals_1.expect)(mock.lastRequest?.path).toBe("/webhooks");
334
+ (0, globals_1.expect)(text).toContain("wh_1");
335
+ });
336
+ (0, globals_1.it)("empty → 'No webhooks registered'", async () => {
337
+ mock.next(200, { webhooks: [] });
338
+ (0, globals_1.expect)(await client.call("sirr_webhook_list")).toBe("No webhooks registered.");
339
+ });
340
+ });
341
+ (0, globals_1.describe)("sirr_webhook_delete", () => {
342
+ (0, globals_1.it)("DELETE /webhooks/{id}", async () => {
343
+ mock.next(200, { deleted: true });
344
+ await client.call("sirr_webhook_delete", { id: "wh_1" });
345
+ (0, globals_1.expect)(mock.lastRequest?.method).toBe("DELETE");
346
+ (0, globals_1.expect)(mock.lastRequest?.path).toBe("/webhooks/wh_1");
347
+ });
348
+ (0, globals_1.it)("404 → not-found message, not an error", async () => {
349
+ mock.next(404, { error: "not found" });
350
+ const text = await client.call("sirr_webhook_delete", { id: "wh_missing" });
351
+ (0, globals_1.expect)(text).toContain("not found");
352
+ (0, globals_1.expect)(text).not.toContain("Error:");
353
+ });
354
+ });
355
+ // ── sirr_key_list ─────────────────────────────────────────────────────────────
356
+ (0, globals_1.describe)("sirr_key_list", () => {
357
+ (0, globals_1.it)("GET /me and extracts keys array", async () => {
358
+ const future = Math.floor(Date.now() / 1000) + 86400;
359
+ mock.next(200, {
360
+ id: "p1", name: "alice", role: "admin", org_id: "org1", metadata: {}, created_at: 0,
361
+ keys: [{ id: "key_1", name: "my-key", valid_after: 0, valid_before: future, created_at: 0 }],
362
+ });
363
+ const text = await client.call("sirr_key_list");
364
+ (0, globals_1.expect)(mock.lastRequest?.path).toBe("/me");
365
+ (0, globals_1.expect)(text).toContain("key_1");
366
+ (0, globals_1.expect)(text).toContain("my-key");
367
+ });
368
+ (0, globals_1.it)("empty keys → 'No API keys'", async () => {
369
+ mock.next(200, { id: "p1", name: "alice", role: "admin", org_id: "org1", metadata: {}, created_at: 0, keys: [] });
370
+ (0, globals_1.expect)(await client.call("sirr_key_list")).toBe("No API keys.");
371
+ });
372
+ });
373
+ // ── sirr_me ───────────────────────────────────────────────────────────────────
374
+ (0, globals_1.describe)("sirr_me", () => {
375
+ (0, globals_1.it)("GET /me and returns JSON", async () => {
376
+ mock.next(200, { id: "p1", name: "alice", role: "admin", org_id: "org1" });
377
+ const text = await client.call("sirr_me");
378
+ (0, globals_1.expect)(mock.lastRequest?.method).toBe("GET");
379
+ (0, globals_1.expect)(mock.lastRequest?.path).toBe("/me");
380
+ (0, globals_1.expect)(text).toContain("alice");
381
+ });
382
+ });
383
+ // ── sirr_update_me ────────────────────────────────────────────────────────────
384
+ (0, globals_1.describe)("sirr_update_me", () => {
385
+ (0, globals_1.it)("PATCH /me with metadata body", async () => {
386
+ mock.next(200, { id: "p1", name: "alice", role: "admin", org_id: "org1", metadata: { env: "prod" } });
387
+ await client.call("sirr_update_me", { metadata: { env: "prod" } });
388
+ (0, globals_1.expect)(mock.lastRequest?.method).toBe("PATCH");
389
+ (0, globals_1.expect)(mock.lastRequest?.path).toBe("/me");
390
+ const body = mock.lastRequest?.body;
391
+ (0, globals_1.expect)(body["metadata"]).toEqual({ env: "prod" });
392
+ (0, globals_1.expect)(body["name"]).toBeUndefined();
393
+ (0, globals_1.expect)(body["email"]).toBeUndefined();
394
+ });
395
+ });
396
+ // ── sirr_create_key ───────────────────────────────────────────────────────────
397
+ (0, globals_1.describe)("sirr_create_key", () => {
398
+ (0, globals_1.it)("POST /me/keys with name and optional validity", async () => {
399
+ const future = Math.floor(Date.now() / 1000) + 3600;
400
+ mock.next(201, { id: "key_2", name: "ci-key", key: "sk_live_abc123", valid_after: 0, valid_before: future });
401
+ const text = await client.call("sirr_create_key", { name: "ci-key", valid_for_seconds: 3600 });
402
+ (0, globals_1.expect)(mock.lastRequest?.method).toBe("POST");
403
+ (0, globals_1.expect)(mock.lastRequest?.path).toBe("/me/keys");
404
+ const body = mock.lastRequest?.body;
405
+ (0, globals_1.expect)(body["name"]).toBe("ci-key");
406
+ (0, globals_1.expect)(body["valid_for_seconds"]).toBe(3600);
407
+ (0, globals_1.expect)(body["permissions"]).toBeUndefined();
408
+ (0, globals_1.expect)(body["prefix"]).toBeUndefined();
409
+ (0, globals_1.expect)(text).toContain("sk_live_abc123");
410
+ (0, globals_1.expect)(text).toContain("ci-key");
411
+ });
412
+ });
413
+ // ── sirr_delete_key ───────────────────────────────────────────────────────────
414
+ (0, globals_1.describe)("sirr_delete_key", () => {
415
+ (0, globals_1.it)("DELETE /me/keys/{keyId}", async () => {
416
+ mock.next(200, { deleted: true });
417
+ await client.call("sirr_delete_key", { keyId: "key_2" });
418
+ (0, globals_1.expect)(mock.lastRequest?.method).toBe("DELETE");
419
+ (0, globals_1.expect)(mock.lastRequest?.path).toBe("/me/keys/key_2");
420
+ });
421
+ (0, globals_1.it)("404 → not-found message, not an error", async () => {
422
+ mock.next(404, { error: "not found" });
423
+ const text = await client.call("sirr_delete_key", { keyId: "gone" });
424
+ (0, globals_1.expect)(text).toContain("not found");
425
+ (0, globals_1.expect)(text).not.toContain("Error:");
426
+ });
427
+ });
428
+ // ── org management ────────────────────────────────────────────────────────────
429
+ (0, globals_1.describe)("sirr_org_create", () => {
430
+ (0, globals_1.it)("POST /orgs with name", async () => {
431
+ mock.next(201, { id: "org_1", name: "acme" });
432
+ const text = await client.call("sirr_org_create", { name: "acme" });
433
+ (0, globals_1.expect)(mock.lastRequest?.method).toBe("POST");
434
+ (0, globals_1.expect)(mock.lastRequest?.path).toBe("/orgs");
435
+ (0, globals_1.expect)((mock.lastRequest?.body)["name"]).toBe("acme");
436
+ (0, globals_1.expect)(text).toContain("org_1");
437
+ (0, globals_1.expect)(text).toContain("acme");
438
+ });
439
+ });
440
+ (0, globals_1.describe)("sirr_org_list", () => {
441
+ (0, globals_1.it)("GET /orgs and formats list", async () => {
442
+ mock.next(200, { orgs: [{ id: "org_1", name: "acme", metadata: {}, created_at: 0 }] });
443
+ const text = await client.call("sirr_org_list");
444
+ (0, globals_1.expect)(mock.lastRequest?.method).toBe("GET");
445
+ (0, globals_1.expect)(mock.lastRequest?.path).toBe("/orgs");
446
+ (0, globals_1.expect)(text).toContain("org_1");
447
+ });
448
+ (0, globals_1.it)("empty → 'No organizations'", async () => {
449
+ mock.next(200, { orgs: [] });
450
+ (0, globals_1.expect)(await client.call("sirr_org_list")).toBe("No organizations.");
451
+ });
452
+ });
453
+ (0, globals_1.describe)("sirr_org_delete", () => {
454
+ (0, globals_1.it)("DELETE /orgs/{org_id}", async () => {
455
+ mock.next(200, { deleted: true });
456
+ await client.call("sirr_org_delete", { org_id: "org_1" });
457
+ (0, globals_1.expect)(mock.lastRequest?.method).toBe("DELETE");
458
+ (0, globals_1.expect)(mock.lastRequest?.path).toBe("/orgs/org_1");
459
+ });
460
+ (0, globals_1.it)("404 → not-found message, not an error", async () => {
461
+ mock.next(404, { error: "not found" });
462
+ const text = await client.call("sirr_org_delete", { org_id: "missing" });
463
+ (0, globals_1.expect)(text).toContain("not found");
464
+ (0, globals_1.expect)(text).not.toContain("Error:");
465
+ });
466
+ });
467
+ // ── principal management ──────────────────────────────────────────────────────
468
+ (0, globals_1.describe)("sirr_principal_create", () => {
469
+ (0, globals_1.it)("POST /orgs/{org_id}/principals with name and role", async () => {
470
+ mock.next(201, { id: "p_1", name: "bob", role: "reader", org_id: "org_1" });
471
+ const text = await client.call("sirr_principal_create", { org_id: "org_1", name: "bob", role: "reader" });
472
+ (0, globals_1.expect)(mock.lastRequest?.method).toBe("POST");
473
+ (0, globals_1.expect)(mock.lastRequest?.path).toBe("/orgs/org_1/principals");
474
+ const body = mock.lastRequest?.body;
475
+ (0, globals_1.expect)(body["name"]).toBe("bob");
476
+ (0, globals_1.expect)(body["role"]).toBe("reader");
477
+ (0, globals_1.expect)(text).toContain("p_1");
478
+ });
479
+ });
480
+ (0, globals_1.describe)("sirr_principal_list", () => {
481
+ (0, globals_1.it)("GET /orgs/{org_id}/principals", async () => {
482
+ mock.next(200, { principals: [{ id: "p_1", name: "bob", role: "reader", org_id: "org_1", created_at: 0 }] });
483
+ const text = await client.call("sirr_principal_list", { org_id: "org_1" });
484
+ (0, globals_1.expect)(mock.lastRequest?.path).toBe("/orgs/org_1/principals");
485
+ (0, globals_1.expect)(text).toContain("bob");
486
+ (0, globals_1.expect)(text).toContain("reader");
487
+ });
488
+ });
489
+ (0, globals_1.describe)("sirr_principal_delete", () => {
490
+ (0, globals_1.it)("DELETE /orgs/{org_id}/principals/{principal_id}", async () => {
491
+ mock.next(200, { deleted: true });
492
+ await client.call("sirr_principal_delete", { org_id: "org_1", principal_id: "p_1" });
493
+ (0, globals_1.expect)(mock.lastRequest?.method).toBe("DELETE");
494
+ (0, globals_1.expect)(mock.lastRequest?.path).toBe("/orgs/org_1/principals/p_1");
495
+ });
496
+ (0, globals_1.it)("404 → not-found message, not an error", async () => {
497
+ mock.next(404, { error: "not found" });
498
+ const text = await client.call("sirr_principal_delete", { org_id: "org_1", principal_id: "gone" });
499
+ (0, globals_1.expect)(text).toContain("not found");
500
+ (0, globals_1.expect)(text).not.toContain("Error:");
501
+ });
502
+ });
503
+ // ── role management ───────────────────────────────────────────────────────────
504
+ (0, globals_1.describe)("sirr_role_create", () => {
505
+ (0, globals_1.it)("POST /orgs/{org_id}/roles with name and permissions", async () => {
506
+ mock.next(201, { name: "reader", permissions: "RL", org_id: "org_1" });
507
+ const text = await client.call("sirr_role_create", { org_id: "org_1", name: "reader", permissions: "RL" });
508
+ (0, globals_1.expect)(mock.lastRequest?.method).toBe("POST");
509
+ (0, globals_1.expect)(mock.lastRequest?.path).toBe("/orgs/org_1/roles");
510
+ (0, globals_1.expect)((mock.lastRequest?.body)["permissions"]).toBe("RL");
511
+ (0, globals_1.expect)(text).toContain("reader");
512
+ (0, globals_1.expect)(text).toContain("RL");
513
+ });
514
+ });
515
+ (0, globals_1.describe)("sirr_role_list", () => {
516
+ (0, globals_1.it)("GET /orgs/{org_id}/roles", async () => {
517
+ mock.next(200, { roles: [
518
+ { name: "admin", permissions: "CRPDLMA", built_in: true, created_at: 0 },
519
+ { name: "reader", permissions: "RL", built_in: false, created_at: 0 },
520
+ ] });
521
+ const text = await client.call("sirr_role_list", { org_id: "org_1" });
522
+ (0, globals_1.expect)(mock.lastRequest?.path).toBe("/orgs/org_1/roles");
523
+ (0, globals_1.expect)(text).toContain("admin");
524
+ (0, globals_1.expect)(text).toContain("(built-in)");
525
+ (0, globals_1.expect)(text).toContain("reader");
526
+ });
527
+ });
528
+ (0, globals_1.describe)("sirr_role_delete", () => {
529
+ (0, globals_1.it)("DELETE /orgs/{org_id}/roles/{role_name}", async () => {
530
+ mock.next(200, { deleted: true });
531
+ await client.call("sirr_role_delete", { org_id: "org_1", role_name: "reader" });
532
+ (0, globals_1.expect)(mock.lastRequest?.method).toBe("DELETE");
533
+ (0, globals_1.expect)(mock.lastRequest?.path).toBe("/orgs/org_1/roles/reader");
534
+ });
535
+ (0, globals_1.it)("404 → not-found message, not an error", async () => {
536
+ mock.next(404, { error: "not found" });
537
+ const text = await client.call("sirr_role_delete", { org_id: "org_1", role_name: "gone" });
538
+ (0, globals_1.expect)(text).toContain("not found");
539
+ (0, globals_1.expect)(text).not.toContain("Error:");
540
+ });
541
+ });
542
+ // ── error handling ────────────────────────────────────────────────────────────
543
+ (0, globals_1.describe)("error handling", () => {
544
+ (0, globals_1.it)("non-JSON error body → Error: with text content", async () => {
545
+ mock.nextText(429, "Too Many Requests");
546
+ const text = await client.call("list_secrets");
547
+ (0, globals_1.expect)(text).toContain("Error:");
548
+ (0, globals_1.expect)(text).toContain("429");
549
+ });
550
+ (0, globals_1.it)("non-2xx JSON error → Error: with status and message", async () => {
551
+ mock.next(401, { error: "invalid token" });
552
+ const text = await client.call("list_secrets");
553
+ (0, globals_1.expect)(text).toContain("Error:");
554
+ (0, globals_1.expect)(text).toContain("401");
555
+ (0, globals_1.expect)(text).toContain("invalid token");
556
+ });
557
+ });
558
+ //# sourceMappingURL=index.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.test.js","sourceRoot":"","sources":["../src/index.test.ts"],"names":[],"mappings":"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"}