swagger-parser-mcp-server 2.3.3 → 3.0.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 (127) hide show
  1. package/README.md +81 -120
  2. package/dist/index.d.ts +0 -3
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +266 -102
  5. package/dist/index.js.map +1 -1
  6. package/dist/schemas.d.ts +2 -283
  7. package/dist/schemas.d.ts.map +1 -1
  8. package/dist/schemas.js +0 -108
  9. package/dist/schemas.js.map +1 -1
  10. package/dist/utils/swaggerCache.d.ts +0 -4
  11. package/dist/utils/swaggerCache.d.ts.map +1 -1
  12. package/dist/utils/swaggerCache.js +0 -8
  13. package/dist/utils/swaggerCache.js.map +1 -1
  14. package/package.json +3 -11
  15. package/dist/application/snapshot/createSnapshotRuntime.d.ts +0 -2
  16. package/dist/application/snapshot/createSnapshotRuntime.d.ts.map +0 -1
  17. package/dist/application/snapshot/createSnapshotRuntime.js +0 -2
  18. package/dist/application/snapshot/createSnapshotRuntime.js.map +0 -1
  19. package/dist/application/snapshot/snapshotCaptureService.d.ts +0 -90
  20. package/dist/application/snapshot/snapshotCaptureService.d.ts.map +0 -1
  21. package/dist/application/snapshot/snapshotCaptureService.js +0 -394
  22. package/dist/application/snapshot/snapshotCaptureService.js.map +0 -1
  23. package/dist/application/snapshot/snapshotRepository.d.ts +0 -77
  24. package/dist/application/snapshot/snapshotRepository.d.ts.map +0 -1
  25. package/dist/application/snapshot/snapshotRepository.js +0 -2
  26. package/dist/application/snapshot/snapshotRepository.js.map +0 -1
  27. package/dist/domain/canonical/canonicalSnapshot.d.ts +0 -61
  28. package/dist/domain/canonical/canonicalSnapshot.d.ts.map +0 -1
  29. package/dist/domain/canonical/canonicalSnapshot.js +0 -300
  30. package/dist/domain/canonical/canonicalSnapshot.js.map +0 -1
  31. package/dist/domain/contracts/runtimeEnvironmentContract.d.ts +0 -21
  32. package/dist/domain/contracts/runtimeEnvironmentContract.d.ts.map +0 -1
  33. package/dist/domain/contracts/runtimeEnvironmentContract.js +0 -50
  34. package/dist/domain/contracts/runtimeEnvironmentContract.js.map +0 -1
  35. package/dist/domain/contracts/snapshotDiffContract.d.ts +0 -270
  36. package/dist/domain/contracts/snapshotDiffContract.d.ts.map +0 -1
  37. package/dist/domain/contracts/snapshotDiffContract.js +0 -99
  38. package/dist/domain/contracts/snapshotDiffContract.js.map +0 -1
  39. package/dist/domain/diff/endpointDiffClassifier.d.ts +0 -78
  40. package/dist/domain/diff/endpointDiffClassifier.d.ts.map +0 -1
  41. package/dist/domain/diff/endpointDiffClassifier.js +0 -317
  42. package/dist/domain/diff/endpointDiffClassifier.js.map +0 -1
  43. package/dist/http.d.ts +0 -3
  44. package/dist/http.d.ts.map +0 -1
  45. package/dist/http.js +0 -52
  46. package/dist/http.js.map +0 -1
  47. package/dist/infrastructure/postgres/migrationRunner.d.ts +0 -14
  48. package/dist/infrastructure/postgres/migrationRunner.d.ts.map +0 -1
  49. package/dist/infrastructure/postgres/migrationRunner.js +0 -161
  50. package/dist/infrastructure/postgres/migrationRunner.js.map +0 -1
  51. package/dist/infrastructure/postgres/migrations/001_snapshot_schema.sql +0 -29
  52. package/dist/infrastructure/postgres/migrations/002_snapshot_change_history.sql +0 -32
  53. package/dist/infrastructure/postgres/postgresSnapshotRepository.d.ts +0 -25
  54. package/dist/infrastructure/postgres/postgresSnapshotRepository.d.ts.map +0 -1
  55. package/dist/infrastructure/postgres/postgresSnapshotRepository.js +0 -323
  56. package/dist/infrastructure/postgres/postgresSnapshotRepository.js.map +0 -1
  57. package/dist/infrastructure/postgres/runMigrations.d.ts +0 -3
  58. package/dist/infrastructure/postgres/runMigrations.d.ts.map +0 -1
  59. package/dist/infrastructure/postgres/runMigrations.js +0 -33
  60. package/dist/infrastructure/postgres/runMigrations.js.map +0 -1
  61. package/dist/infrastructure/runtime/createSnapshotRuntime.d.ts +0 -17
  62. package/dist/infrastructure/runtime/createSnapshotRuntime.d.ts.map +0 -1
  63. package/dist/infrastructure/runtime/createSnapshotRuntime.js +0 -38
  64. package/dist/infrastructure/runtime/createSnapshotRuntime.js.map +0 -1
  65. package/dist/tests/canonicalSnapshot.test.d.ts +0 -2
  66. package/dist/tests/canonicalSnapshot.test.d.ts.map +0 -1
  67. package/dist/tests/canonicalSnapshot.test.js +0 -425
  68. package/dist/tests/canonicalSnapshot.test.js.map +0 -1
  69. package/dist/tests/endpointDiffClassifier.test.d.ts +0 -2
  70. package/dist/tests/endpointDiffClassifier.test.d.ts.map +0 -1
  71. package/dist/tests/endpointDiffClassifier.test.js +0 -633
  72. package/dist/tests/endpointDiffClassifier.test.js.map +0 -1
  73. package/dist/tests/httpSnapshotTransport.test.d.ts +0 -2
  74. package/dist/tests/httpSnapshotTransport.test.d.ts.map +0 -1
  75. package/dist/tests/httpSnapshotTransport.test.js +0 -356
  76. package/dist/tests/httpSnapshotTransport.test.js.map +0 -1
  77. package/dist/tests/indexLifecycle.test.d.ts +0 -2
  78. package/dist/tests/indexLifecycle.test.d.ts.map +0 -1
  79. package/dist/tests/indexLifecycle.test.js +0 -44
  80. package/dist/tests/indexLifecycle.test.js.map +0 -1
  81. package/dist/tests/mcpSnapshotTools.test.d.ts +0 -2
  82. package/dist/tests/mcpSnapshotTools.test.d.ts.map +0 -1
  83. package/dist/tests/mcpSnapshotTools.test.js +0 -316
  84. package/dist/tests/mcpSnapshotTools.test.js.map +0 -1
  85. package/dist/tests/postgresMigrationSmoke.test.d.ts +0 -2
  86. package/dist/tests/postgresMigrationSmoke.test.d.ts.map +0 -1
  87. package/dist/tests/postgresMigrationSmoke.test.js +0 -187
  88. package/dist/tests/postgresMigrationSmoke.test.js.map +0 -1
  89. package/dist/tests/realPostgresTestSchema.d.ts +0 -10
  90. package/dist/tests/realPostgresTestSchema.d.ts.map +0 -1
  91. package/dist/tests/realPostgresTestSchema.js +0 -73
  92. package/dist/tests/realPostgresTestSchema.js.map +0 -1
  93. package/dist/tests/snapshotCapturePipeline.test.d.ts +0 -2
  94. package/dist/tests/snapshotCapturePipeline.test.d.ts.map +0 -1
  95. package/dist/tests/snapshotCapturePipeline.test.js +0 -475
  96. package/dist/tests/snapshotCapturePipeline.test.js.map +0 -1
  97. package/dist/tests/snapshotDiffContract.test.d.ts +0 -2
  98. package/dist/tests/snapshotDiffContract.test.d.ts.map +0 -1
  99. package/dist/tests/snapshotDiffContract.test.js +0 -156
  100. package/dist/tests/snapshotDiffContract.test.js.map +0 -1
  101. package/dist/tests/snapshotPersistence.real.test.d.ts +0 -2
  102. package/dist/tests/snapshotPersistence.real.test.d.ts.map +0 -1
  103. package/dist/tests/snapshotPersistence.real.test.js +0 -310
  104. package/dist/tests/snapshotPersistence.real.test.js.map +0 -1
  105. package/dist/tests/webServerRuntime.test.d.ts +0 -2
  106. package/dist/tests/webServerRuntime.test.d.ts.map +0 -1
  107. package/dist/tests/webServerRuntime.test.js +0 -123
  108. package/dist/tests/webServerRuntime.test.js.map +0 -1
  109. package/dist/transport/createSnapshotToolRuntime.d.ts +0 -7
  110. package/dist/transport/createSnapshotToolRuntime.d.ts.map +0 -1
  111. package/dist/transport/createSnapshotToolRuntime.js +0 -40
  112. package/dist/transport/createSnapshotToolRuntime.js.map +0 -1
  113. package/dist/transport/httpSnapshotServer.d.ts +0 -11
  114. package/dist/transport/httpSnapshotServer.d.ts.map +0 -1
  115. package/dist/transport/httpSnapshotServer.js +0 -216
  116. package/dist/transport/httpSnapshotServer.js.map +0 -1
  117. package/dist/transport/mcpToolRouter.d.ts +0 -81
  118. package/dist/transport/mcpToolRouter.d.ts.map +0 -1
  119. package/dist/transport/mcpToolRouter.js +0 -416
  120. package/dist/transport/mcpToolRouter.js.map +0 -1
  121. package/dist/transport/webServerRuntime.d.ts +0 -17
  122. package/dist/transport/webServerRuntime.d.ts.map +0 -1
  123. package/dist/transport/webServerRuntime.js +0 -73
  124. package/dist/transport/webServerRuntime.js.map +0 -1
  125. package/dist/web/dashboard.css +0 -411
  126. package/dist/web/dashboard.html +0 -141
  127. package/dist/web/dashboard.js +0 -540
@@ -1,356 +0,0 @@
1
- import { createMcpToolRouter, TOOL_NAMES } from '../transport/mcpToolRouter.js';
2
- import { createHttpSnapshotServer } from '../transport/httpSnapshotServer.js';
3
- import { snapshotDiffResultSchema } from '../domain/contracts/snapshotDiffContract.js';
4
- import { endpointDiffDetailOutputSchema, listEndpointChangeHistoryResultSchema, listSnapshotsResultSchema, } from '../schemas.js';
5
- import { SchemaResolver } from '../utils/schemaResolver.js';
6
- const fixedNow = '2026-03-09T09:00:00.000Z';
7
- const environment = {
8
- DATABASE_URL: 'postgresql://localhost:5432/test',
9
- PROJECT_KEY: 'frontend-diff',
10
- SWAGGER_URL: 'https://api.example.com/openapi.json',
11
- };
12
- const bootstrapResult = {
13
- environment,
14
- project: { id: 'project-1', projectKey: 'frontend-diff', createdAt: fixedNow },
15
- source: {
16
- id: 'source-1',
17
- projectId: 'project-1',
18
- swaggerUrl: 'https://api.example.com/openapi.json',
19
- createdAt: fixedNow,
20
- },
21
- };
22
- const diffResult = snapshotDiffResultSchema.parse({
23
- summary: {
24
- projectKey: 'frontend-diff',
25
- sourceUrl: 'https://api.example.com/openapi.json',
26
- baselineSnapshotId: 'snapshot-1',
27
- targetSnapshotId: 'snapshot-2',
28
- comparedAt: fixedNow,
29
- hasChanges: true,
30
- isNoopCapture: false,
31
- },
32
- counts: {
33
- total: 1,
34
- breaking: 1,
35
- nonBreaking: 0,
36
- info: 0,
37
- },
38
- changes: [
39
- {
40
- url: '/users',
41
- method: 'get',
42
- classification: 'breaking',
43
- changeReason: 'response_status_removed',
44
- },
45
- ],
46
- warnings: [],
47
- });
48
- const endpointDetailResult = {
49
- baselineSnapshotId: 'snapshot-1',
50
- targetSnapshotId: 'snapshot-2',
51
- path: '/users',
52
- method: 'get',
53
- hasChange: true,
54
- classification: 'breaking',
55
- changeReason: 'response_status_removed',
56
- details: [
57
- {
58
- reason: 'response_status_removed',
59
- classification: 'breaking',
60
- message: 'Response status code removed: 200',
61
- metadata: {
62
- removedStatusCodes: ['200'],
63
- },
64
- },
65
- ],
66
- before: { parameters: [], responses: [{ statusCode: '200', content: [] }] },
67
- after: { parameters: [], responses: [] },
68
- };
69
- const snapshotItems = [
70
- {
71
- id: 'snapshot-2',
72
- sourceId: 'source-1',
73
- specHash: 'spec-hash-2',
74
- documentFingerprint: 'doc-fingerprint-2',
75
- capturedAt: fixedNow,
76
- },
77
- ];
78
- const historyEvents = [
79
- {
80
- baselineSnapshotId: 'snapshot-1',
81
- targetSnapshotId: 'snapshot-2',
82
- path: '/users',
83
- method: 'get',
84
- classification: 'breaking',
85
- changeReason: 'response_status_removed',
86
- changedAt: fixedNow,
87
- },
88
- ];
89
- function parseMcpPayload(response) {
90
- return JSON.parse(response.content[0].text);
91
- }
92
- async function startServer(server) {
93
- await new Promise((resolve, reject) => {
94
- const onError = (error) => {
95
- server.off('error', onError);
96
- reject(error);
97
- };
98
- server.once('error', onError);
99
- server.listen(0, '127.0.0.1', () => {
100
- server.off('error', onError);
101
- resolve();
102
- });
103
- });
104
- const address = server.address();
105
- if (!address || typeof address === 'string') {
106
- throw new Error('Failed to resolve HTTP server address.');
107
- }
108
- return {
109
- baseUrl: `http://127.0.0.1:${address.port}`,
110
- close: async () => {
111
- await new Promise((resolve, reject) => {
112
- server.close(error => {
113
- if (error) {
114
- reject(error);
115
- return;
116
- }
117
- resolve();
118
- });
119
- });
120
- },
121
- };
122
- }
123
- function createMockService() {
124
- return {
125
- capture: jest.fn().mockResolvedValue({
126
- ...bootstrapResult,
127
- specHash: 'spec-hash-2',
128
- snapshot: {
129
- id: 'snapshot-2',
130
- sourceId: 'source-1',
131
- specHash: 'spec-hash-2',
132
- documentFingerprint: 'doc-fingerprint-2',
133
- canonicalSnapshot: {
134
- sourceUrl: 'https://api.example.com/openapi.json',
135
- documentFingerprint: 'doc-fingerprint-2',
136
- endpoints: [],
137
- versionSignal: {
138
- infoVersion: '1.0.0',
139
- normalizedInfoVersion: '1',
140
- urlVersionHints: ['1'],
141
- hasVersionMismatch: false,
142
- },
143
- },
144
- capturedAt: fixedNow,
145
- },
146
- previousSnapshot: null,
147
- isNoopCapture: false,
148
- diffResult,
149
- }),
150
- bootstrap: jest.fn().mockResolvedValue(bootstrapResult),
151
- listSnapshotsBySource: jest.fn().mockResolvedValue(snapshotItems),
152
- listEndpointChangeHistory: jest.fn().mockResolvedValue(historyEvents),
153
- replayDiff: jest.fn().mockResolvedValue(diffResult),
154
- getEndpointDiffDetail: jest.fn().mockResolvedValue(endpointDetailResult),
155
- };
156
- }
157
- describe('HTTP snapshot transport', () => {
158
- let service;
159
- let runtimeProvider;
160
- let swaggerCache;
161
- beforeEach(() => {
162
- service = createMockService();
163
- runtimeProvider = jest.fn().mockResolvedValue({
164
- environment,
165
- service,
166
- });
167
- swaggerCache = {
168
- load: jest.fn(),
169
- getOrLoad: jest.fn(),
170
- };
171
- });
172
- it('should serve dashboard route and static assets', async () => {
173
- const router = createMcpToolRouter({
174
- runtimeProvider,
175
- swaggerCache,
176
- schemaResolver: new SchemaResolver({ includeCircularRefs: false }),
177
- });
178
- const server = createHttpSnapshotServer({ toolRouter: router });
179
- const running = await startServer(server);
180
- try {
181
- const rootResponse = await fetch(`${running.baseUrl}/`, { redirect: 'manual' });
182
- expect(rootResponse.status).toBe(302);
183
- expect(rootResponse.headers.get('location')).toBe('/dashboard');
184
- const dashboardResponse = await fetch(`${running.baseUrl}/dashboard`);
185
- const dashboardHtml = await dashboardResponse.text();
186
- expect(dashboardResponse.status).toBe(200);
187
- expect(dashboardResponse.headers.get('content-type')).toContain('text/html');
188
- expect(dashboardHtml).toContain('<main class="dashboard-layout">');
189
- expect(dashboardHtml).toContain('src="/dashboard.js"');
190
- const cssResponse = await fetch(`${running.baseUrl}/dashboard.css`);
191
- const cssText = await cssResponse.text();
192
- expect(cssResponse.status).toBe(200);
193
- expect(cssResponse.headers.get('content-type')).toContain('text/css');
194
- expect(cssText).toContain('--color-primary');
195
- const jsResponse = await fetch(`${running.baseUrl}/dashboard.js`);
196
- const jsText = await jsResponse.text();
197
- expect(jsResponse.status).toBe(200);
198
- expect(jsResponse.headers.get('content-type')).toContain('javascript');
199
- expect(jsText).toContain('async function loadInitialData()');
200
- }
201
- finally {
202
- await running.close();
203
- }
204
- });
205
- it('should keep structured result parity across MCP and HTTP for capture/snapshots/history/diff/detail', async () => {
206
- const router = createMcpToolRouter({
207
- runtimeProvider,
208
- swaggerCache,
209
- schemaResolver: new SchemaResolver({ includeCircularRefs: false }),
210
- });
211
- const server = createHttpSnapshotServer({ toolRouter: router });
212
- const running = await startServer(server);
213
- try {
214
- const captureStructured = await router.executeStructured(TOOL_NAMES.CAPTURE_SNAPSHOT, {});
215
- expect(captureStructured.ok).toBe(true);
216
- if (!captureStructured.ok) {
217
- throw new Error('capture structured execution failed unexpectedly');
218
- }
219
- const captureMcpPayload = parseMcpPayload(await router.execute(TOOL_NAMES.CAPTURE_SNAPSHOT, {}));
220
- const captureHttpResponse = await fetch(`${running.baseUrl}/api/snapshots/capture`, { method: 'POST' });
221
- const captureHttpPayload = await captureHttpResponse.json();
222
- expect(captureMcpPayload).toEqual(captureStructured.data);
223
- expect(captureHttpPayload).toEqual(captureStructured.data);
224
- expect(() => snapshotDiffResultSchema.parse(captureHttpPayload)).not.toThrow();
225
- const listStructured = await router.executeStructured(TOOL_NAMES.LIST_SNAPSHOTS, { limit: 20 });
226
- expect(listStructured.ok).toBe(true);
227
- if (!listStructured.ok) {
228
- throw new Error('list structured execution failed unexpectedly');
229
- }
230
- const listMcpPayload = parseMcpPayload(await router.execute(TOOL_NAMES.LIST_SNAPSHOTS, { limit: 20 }));
231
- const listHttpResponse = await fetch(`${running.baseUrl}/api/snapshots?limit=20`);
232
- const listHttpPayload = await listHttpResponse.json();
233
- expect(listMcpPayload).toEqual(listStructured.data);
234
- expect(listHttpPayload).toEqual(listStructured.data);
235
- expect(() => listSnapshotsResultSchema.parse(listHttpPayload)).not.toThrow();
236
- const historyArgs = {
237
- limit: 20,
238
- path: '/users',
239
- method: 'get',
240
- };
241
- const historyStructured = await router.executeStructured(TOOL_NAMES.LIST_ENDPOINT_CHANGE_HISTORY, historyArgs);
242
- expect(historyStructured.ok).toBe(true);
243
- if (!historyStructured.ok) {
244
- throw new Error('history structured execution failed unexpectedly');
245
- }
246
- const historyMcpPayload = parseMcpPayload(await router.execute(TOOL_NAMES.LIST_ENDPOINT_CHANGE_HISTORY, historyArgs));
247
- const historyHttpResponse = await fetch(`${running.baseUrl}/api/snapshots/change-history?limit=20&path=%2Fusers&method=get`);
248
- const historyHttpPayload = await historyHttpResponse.json();
249
- expect(historyMcpPayload).toEqual(historyStructured.data);
250
- expect(historyHttpPayload).toEqual(historyStructured.data);
251
- expect(() => listEndpointChangeHistoryResultSchema.parse(historyHttpPayload)).not.toThrow();
252
- const diffArgs = {
253
- baselineSnapshotId: 'snapshot-1',
254
- targetSnapshotId: 'snapshot-2',
255
- };
256
- const diffStructured = await router.executeStructured(TOOL_NAMES.GET_SNAPSHOT_DIFF, diffArgs);
257
- expect(diffStructured.ok).toBe(true);
258
- if (!diffStructured.ok) {
259
- throw new Error('diff structured execution failed unexpectedly');
260
- }
261
- const diffMcpPayload = parseMcpPayload(await router.execute(TOOL_NAMES.GET_SNAPSHOT_DIFF, diffArgs));
262
- const diffHttpResponse = await fetch(`${running.baseUrl}/api/snapshots/diff?baselineSnapshotId=snapshot-1&targetSnapshotId=snapshot-2`);
263
- const diffHttpPayload = await diffHttpResponse.json();
264
- expect(diffMcpPayload).toEqual(diffStructured.data);
265
- expect(diffHttpPayload).toEqual(diffStructured.data);
266
- expect(() => snapshotDiffResultSchema.parse(diffHttpPayload)).not.toThrow();
267
- const detailArgs = {
268
- baselineSnapshotId: 'snapshot-1',
269
- targetSnapshotId: 'snapshot-2',
270
- path: '/users',
271
- method: 'get',
272
- };
273
- const detailStructured = await router.executeStructured(TOOL_NAMES.GET_ENDPOINT_DIFF_DETAIL, detailArgs);
274
- expect(detailStructured.ok).toBe(true);
275
- if (!detailStructured.ok) {
276
- throw new Error('endpoint detail structured execution failed unexpectedly');
277
- }
278
- const detailMcpPayload = parseMcpPayload(await router.execute(TOOL_NAMES.GET_ENDPOINT_DIFF_DETAIL, detailArgs));
279
- const detailHttpResponse = await fetch(`${running.baseUrl}/api/snapshots/endpoint-detail?baselineSnapshotId=snapshot-1&targetSnapshotId=snapshot-2&path=%2Fusers&method=get`);
280
- const detailHttpPayload = await detailHttpResponse.json();
281
- expect(detailMcpPayload).toEqual(detailStructured.data);
282
- expect(detailHttpPayload).toEqual(detailStructured.data);
283
- expect(() => endpointDiffDetailOutputSchema.parse(detailHttpPayload)).not.toThrow();
284
- }
285
- finally {
286
- await running.close();
287
- }
288
- });
289
- it('should return 404 for unknown route and 405 for wrong method', async () => {
290
- const router = createMcpToolRouter({
291
- runtimeProvider,
292
- swaggerCache,
293
- schemaResolver: new SchemaResolver({ includeCircularRefs: false }),
294
- });
295
- const server = createHttpSnapshotServer({ toolRouter: router });
296
- const running = await startServer(server);
297
- try {
298
- const notFoundResponse = await fetch(`${running.baseUrl}/api/unknown`);
299
- const notFoundPayload = (await notFoundResponse.json());
300
- expect(notFoundResponse.status).toBe(404);
301
- expect(notFoundPayload.code).toBe('NOT_FOUND');
302
- const methodNotAllowedResponse = await fetch(`${running.baseUrl}/api/snapshots/capture`, { method: 'GET' });
303
- const methodNotAllowedPayload = (await methodNotAllowedResponse.json());
304
- expect(methodNotAllowedResponse.status).toBe(405);
305
- expect(methodNotAllowedPayload.code).toBe('METHOD_NOT_ALLOWED');
306
- }
307
- finally {
308
- await running.close();
309
- }
310
- });
311
- it('should return 400 for query validation failures', async () => {
312
- const router = createMcpToolRouter({
313
- runtimeProvider,
314
- swaggerCache,
315
- schemaResolver: new SchemaResolver({ includeCircularRefs: false }),
316
- });
317
- const server = createHttpSnapshotServer({ toolRouter: router });
318
- const running = await startServer(server);
319
- try {
320
- const response = await fetch(`${running.baseUrl}/api/snapshots/diff?targetSnapshotId=snapshot-2`);
321
- const payload = (await response.json());
322
- expect(response.status).toBe(400);
323
- expect(payload.code).toBe('VALIDATION_ERROR');
324
- expect(payload.error).toContain('baselineSnapshotId');
325
- const historyResponse = await fetch(`${running.baseUrl}/api/snapshots/change-history?path=%2Fusers`);
326
- const historyPayload = (await historyResponse.json());
327
- expect(historyResponse.status).toBe(400);
328
- expect(historyPayload.code).toBe('VALIDATION_ERROR');
329
- expect(historyPayload.error).toContain('path and method must be provided together');
330
- }
331
- finally {
332
- await running.close();
333
- }
334
- });
335
- it('should return 5xx for runtime/internal failures', async () => {
336
- runtimeProvider.mockRejectedValueOnce(new Error('runtime init failed'));
337
- const router = createMcpToolRouter({
338
- runtimeProvider,
339
- swaggerCache,
340
- schemaResolver: new SchemaResolver({ includeCircularRefs: false }),
341
- });
342
- const server = createHttpSnapshotServer({ toolRouter: router });
343
- const running = await startServer(server);
344
- try {
345
- const response = await fetch(`${running.baseUrl}/api/snapshots/capture`, { method: 'POST' });
346
- const payload = (await response.json());
347
- expect(response.status).toBe(500);
348
- expect(payload.code).toBe('INTERNAL_ERROR');
349
- expect(payload.error).toContain('runtime init failed');
350
- }
351
- finally {
352
- await running.close();
353
- }
354
- });
355
- });
356
- //# sourceMappingURL=httpSnapshotTransport.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"httpSnapshotTransport.test.js","sourceRoot":"","sources":["../../src/tests/httpSnapshotTransport.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=indexLifecycle.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"indexLifecycle.test.d.ts","sourceRoot":"","sources":["../../src/tests/indexLifecycle.test.ts"],"names":[],"mappings":""}
@@ -1,44 +0,0 @@
1
- import { mkdtempSync, rmSync, symlinkSync } from 'node:fs';
2
- import os from 'node:os';
3
- import { join, resolve } from 'node:path';
4
- import { PassThrough } from 'node:stream';
5
- import { attachStdioShutdownHooks, isDirectExecution } from '../index.js';
6
- describe('index lifecycle', () => {
7
- it('should trigger shutdown once for repeated stdio close events', () => {
8
- const stdin = new PassThrough();
9
- const onClosed = jest.fn();
10
- const detach = attachStdioShutdownHooks(stdin, onClosed);
11
- stdin.emit('end');
12
- stdin.emit('close');
13
- expect(onClosed).toHaveBeenCalledTimes(1);
14
- detach();
15
- });
16
- it('should not trigger shutdown after hooks are detached', () => {
17
- const stdin = new PassThrough();
18
- const onClosed = jest.fn();
19
- const detach = attachStdioShutdownHooks(stdin, onClosed);
20
- detach();
21
- stdin.emit('end');
22
- stdin.emit('close');
23
- expect(onClosed).not.toHaveBeenCalled();
24
- });
25
- it('should treat symlink entrypoint to index module as direct execution', () => {
26
- const indexPath = resolve(process.cwd(), 'src', 'index.ts');
27
- const tempDirectory = mkdtempSync(join(os.tmpdir(), 'swagger-parser-mcp-'));
28
- const symlinkPath = join(tempDirectory, 'swagger-parser-mcp-server');
29
- symlinkSync(indexPath, symlinkPath);
30
- try {
31
- const result = isDirectExecution(['node', symlinkPath]);
32
- expect(result).toBe(true);
33
- }
34
- finally {
35
- rmSync(tempDirectory, { recursive: true, force: true });
36
- }
37
- });
38
- it('should return false for unrelated entrypoint path', () => {
39
- const unrelatedPath = resolve(process.cwd(), 'src', 'http.ts');
40
- const result = isDirectExecution(['node', unrelatedPath]);
41
- expect(result).toBe(false);
42
- });
43
- });
44
- //# sourceMappingURL=indexLifecycle.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"indexLifecycle.test.js","sourceRoot":"","sources":["../../src/tests/indexLifecycle.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAC3D,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,wBAAwB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAE1E,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,EAAE,CAAC,8DAA8D,EAAE,GAAG,EAAE;QACtE,MAAM,KAAK,GAAG,IAAI,WAAW,EAAE,CAAC;QAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,wBAAwB,CAAC,KAA2D,EAAE,QAAQ,CAAC,CAAC;QAE/G,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClB,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAEpB,MAAM,CAAC,QAAQ,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QAC1C,MAAM,EAAE,CAAC;IACX,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;QAC9D,MAAM,KAAK,GAAG,IAAI,WAAW,EAAE,CAAC;QAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,wBAAwB,CAAC,KAA2D,EAAE,QAAQ,CAAC,CAAC;QAE/G,MAAM,EAAE,CAAC;QACT,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClB,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAEpB,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qEAAqE,EAAE,GAAG,EAAE;QAC7E,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;QAC5D,MAAM,aAAa,GAAG,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,qBAAqB,CAAC,CAAC,CAAC;QAC5E,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,EAAE,2BAA2B,CAAC,CAAC;QAErE,WAAW,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;QACpC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,iBAAiB,CAAC,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC;YACxD,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC;gBAAS,CAAC;YACT,MAAM,CAAC,aAAa,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;QAC3D,MAAM,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;QAE/D,MAAM,MAAM,GAAG,iBAAiB,CAAC,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC;QAC1D,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=mcpSnapshotTools.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mcpSnapshotTools.test.d.ts","sourceRoot":"","sources":["../../src/tests/mcpSnapshotTools.test.ts"],"names":[],"mappings":""}