swagger-parser-mcp-server 2.3.4 → 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 -393
  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 -234
  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,234 +0,0 @@
1
- import { readFile } from 'node:fs/promises';
2
- import { createServer } from 'node:http';
3
- import path from 'node:path';
4
- import { fileURLToPath, URL } from 'node:url';
5
- import { TOOL_NAMES } from './mcpToolRouter.js';
6
- function normalizePath(pathname) {
7
- if (pathname === '/') {
8
- return pathname;
9
- }
10
- return pathname.replace(/\/+$/, '');
11
- }
12
- function normalizeBasePath(basePath) {
13
- if (!basePath.startsWith('/')) {
14
- return `/${basePath}`;
15
- }
16
- return normalizePath(basePath);
17
- }
18
- function sendJson(response, statusCode, payload) {
19
- response.statusCode = statusCode;
20
- response.setHeader('content-type', 'application/json; charset=utf-8');
21
- response.end(JSON.stringify(payload));
22
- }
23
- function sendText(response, statusCode, payload, contentType) {
24
- response.statusCode = statusCode;
25
- response.setHeader('content-type', contentType);
26
- response.end(payload);
27
- }
28
- function uniqueStringValues(values) {
29
- const deduped = [];
30
- for (const value of values) {
31
- if (!value) {
32
- continue;
33
- }
34
- if (!deduped.includes(value)) {
35
- deduped.push(value);
36
- }
37
- }
38
- return deduped;
39
- }
40
- function resolveModuleWebDirectory() {
41
- try {
42
- const moduleUrl = eval('import.meta.url');
43
- if (!moduleUrl) {
44
- return undefined;
45
- }
46
- const moduleDirectory = path.dirname(fileURLToPath(moduleUrl));
47
- return path.resolve(moduleDirectory, '..', 'web');
48
- }
49
- catch {
50
- if (typeof __dirname === 'string') {
51
- return path.resolve(__dirname, '..', 'web');
52
- }
53
- return undefined;
54
- }
55
- }
56
- const moduleWebDirectory = resolveModuleWebDirectory();
57
- function resolveDashboardAssetPathCandidates(customAssetsDir) {
58
- const cwdSourceDirectory = path.resolve(process.cwd(), 'src', 'web');
59
- const cwdDistDirectory = path.resolve(process.cwd(), 'dist', 'web');
60
- return uniqueStringValues([
61
- customAssetsDir,
62
- process.env.SNAPSHOT_DASHBOARD_ASSETS_DIR,
63
- moduleWebDirectory,
64
- cwdSourceDirectory,
65
- cwdDistDirectory,
66
- ]);
67
- }
68
- const DASHBOARD_ROUTE_TO_ASSET = {
69
- '/dashboard': 'dashboard.html',
70
- '/dashboard.css': 'dashboard.css',
71
- '/dashboard.js': 'dashboard.js',
72
- };
73
- const DASHBOARD_CONTENT_TYPE = {
74
- '/dashboard': 'text/html; charset=utf-8',
75
- '/dashboard.css': 'text/css; charset=utf-8',
76
- '/dashboard.js': 'application/javascript; charset=utf-8',
77
- };
78
- function isDashboardAssetRoute(pathname) {
79
- return pathname === '/dashboard' || pathname === '/dashboard.css' || pathname === '/dashboard.js';
80
- }
81
- function createDashboardAssetLoader(customAssetsDir) {
82
- const cache = new Map();
83
- const directories = resolveDashboardAssetPathCandidates(customAssetsDir);
84
- return {
85
- async load(route) {
86
- const cached = cache.get(route);
87
- if (cached) {
88
- return { contentType: DASHBOARD_CONTENT_TYPE[route], body: cached };
89
- }
90
- const fileName = DASHBOARD_ROUTE_TO_ASSET[route];
91
- const errors = [];
92
- for (const directory of directories) {
93
- const targetPath = path.join(directory, fileName);
94
- try {
95
- const file = await readFile(targetPath, 'utf8');
96
- cache.set(route, file);
97
- return { contentType: DASHBOARD_CONTENT_TYPE[route], body: file };
98
- }
99
- catch (error) {
100
- const message = error instanceof Error ? error.message : String(error);
101
- errors.push(`${targetPath}: ${message}`);
102
- }
103
- }
104
- throw new Error(`Failed to load dashboard asset "${fileName}". ${errors.join(' | ')}`);
105
- },
106
- };
107
- }
108
- async function executeTool(response, toolRouter, name, args) {
109
- const result = await toolRouter.executeStructured(name, args);
110
- if (result.ok) {
111
- sendJson(response, result.statusCode, result.data);
112
- return;
113
- }
114
- sendJson(response, result.statusCode, {
115
- error: result.error.message,
116
- code: result.error.code,
117
- });
118
- }
119
- function parseListSnapshotsArgs(url) {
120
- const limit = url.searchParams.get('limit');
121
- if (limit === null) {
122
- return {};
123
- }
124
- return {
125
- limit: Number(limit),
126
- };
127
- }
128
- function parseChangeHistoryArgs(url) {
129
- const limit = url.searchParams.get('limit');
130
- const path = url.searchParams.get('path');
131
- const method = url.searchParams.get('method');
132
- return {
133
- ...(limit === null ? {} : { limit: Number(limit) }),
134
- ...(path === null ? {} : { path }),
135
- ...(method === null ? {} : { method }),
136
- };
137
- }
138
- function parseSnapshotDiffArgs(url) {
139
- return {
140
- baselineSnapshotId: url.searchParams.get('baselineSnapshotId'),
141
- targetSnapshotId: url.searchParams.get('targetSnapshotId'),
142
- };
143
- }
144
- function parseEndpointDetailArgs(url) {
145
- return {
146
- baselineSnapshotId: url.searchParams.get('baselineSnapshotId'),
147
- targetSnapshotId: url.searchParams.get('targetSnapshotId'),
148
- path: url.searchParams.get('path'),
149
- method: url.searchParams.get('method'),
150
- };
151
- }
152
- async function handleRequest(request, response, toolRouter, basePath, assetLoader) {
153
- const method = request.method ?? 'GET';
154
- const parsedUrl = new URL(request.url ?? '/', 'http://localhost');
155
- const path = normalizePath(parsedUrl.pathname);
156
- const diffPath = `${basePath}/diff`;
157
- const changeHistoryPath = `${basePath}/change-history`;
158
- const endpointDetailPath = `${basePath}/endpoint-detail`;
159
- const capturePath = `${basePath}/capture`;
160
- if (method === 'GET' && path === '/health') {
161
- sendJson(response, 200, { ok: true });
162
- return;
163
- }
164
- if (method === 'GET' && path === '/') {
165
- response.statusCode = 302;
166
- response.setHeader('location', '/dashboard');
167
- response.end();
168
- return;
169
- }
170
- if (isDashboardAssetRoute(path)) {
171
- if (method !== 'GET') {
172
- sendJson(response, 405, { error: 'Method not allowed', code: 'METHOD_NOT_ALLOWED' });
173
- return;
174
- }
175
- const asset = await assetLoader.load(path);
176
- sendText(response, 200, asset.body, asset.contentType);
177
- return;
178
- }
179
- if (path === capturePath) {
180
- if (method !== 'POST') {
181
- sendJson(response, 405, { error: 'Method not allowed', code: 'METHOD_NOT_ALLOWED' });
182
- return;
183
- }
184
- await executeTool(response, toolRouter, TOOL_NAMES.CAPTURE_SNAPSHOT, {});
185
- return;
186
- }
187
- if (path === basePath) {
188
- if (method !== 'GET') {
189
- sendJson(response, 405, { error: 'Method not allowed', code: 'METHOD_NOT_ALLOWED' });
190
- return;
191
- }
192
- await executeTool(response, toolRouter, TOOL_NAMES.LIST_SNAPSHOTS, parseListSnapshotsArgs(parsedUrl));
193
- return;
194
- }
195
- if (path === diffPath) {
196
- if (method !== 'GET') {
197
- sendJson(response, 405, { error: 'Method not allowed', code: 'METHOD_NOT_ALLOWED' });
198
- return;
199
- }
200
- await executeTool(response, toolRouter, TOOL_NAMES.GET_SNAPSHOT_DIFF, parseSnapshotDiffArgs(parsedUrl));
201
- return;
202
- }
203
- if (path === changeHistoryPath) {
204
- if (method !== 'GET') {
205
- sendJson(response, 405, { error: 'Method not allowed', code: 'METHOD_NOT_ALLOWED' });
206
- return;
207
- }
208
- await executeTool(response, toolRouter, TOOL_NAMES.LIST_ENDPOINT_CHANGE_HISTORY, parseChangeHistoryArgs(parsedUrl));
209
- return;
210
- }
211
- if (path === endpointDetailPath) {
212
- if (method !== 'GET') {
213
- sendJson(response, 405, { error: 'Method not allowed', code: 'METHOD_NOT_ALLOWED' });
214
- return;
215
- }
216
- await executeTool(response, toolRouter, TOOL_NAMES.GET_ENDPOINT_DIFF_DETAIL, parseEndpointDetailArgs(parsedUrl));
217
- return;
218
- }
219
- sendJson(response, 404, { error: 'Not found', code: 'NOT_FOUND' });
220
- }
221
- export function createHttpSnapshotServer(deps) {
222
- const basePath = normalizeBasePath(deps.basePath ?? '/api/snapshots');
223
- const assetLoader = createDashboardAssetLoader(deps.dashboardAssetsDir);
224
- return createServer((request, response) => {
225
- handleRequest(request, response, deps.toolRouter, basePath, assetLoader).catch(error => {
226
- const message = error instanceof Error ? error.message : 'Unknown error occurred';
227
- sendJson(response, 500, {
228
- error: message,
229
- code: 'INTERNAL_ERROR',
230
- });
231
- });
232
- });
233
- }
234
- //# sourceMappingURL=httpSnapshotServer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"httpSnapshotServer.js","sourceRoot":"","sources":["../../src/transport/httpSnapshotServer.ts"],"names":[],"mappings":"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"}
@@ -1,81 +0,0 @@
1
- import { RuntimeEnvironment } from '../domain/contracts/runtimeEnvironmentContract.js';
2
- import { EndpointChangeHistoryEvent, EndpointDiffDetailInput, EndpointDiffDetailResult, SnapshotCaptureBootstrapResult, SnapshotCaptureResult, SnapshotListItem, SnapshotReplayInput } from '../application/snapshot/snapshotCaptureService.js';
3
- import { snapshotDiffResultSchema } from '../domain/contracts/snapshotDiffContract.js';
4
- import { OpenAPIDocument } from '../utils/types.js';
5
- export declare const TOOL_NAMES: {
6
- readonly LOAD_SWAGGER: "load_swagger";
7
- readonly GET_CONTROLLERS: "get_controllers";
8
- readonly GET_PATHS_BY_CONTROLLER: "get_paths_by_controller";
9
- readonly GET_PATH_DETAILS: "get_path_details";
10
- readonly RESOLVE_SCHEMA: "resolve_schema";
11
- readonly CAPTURE_SNAPSHOT: "capture_snapshot";
12
- readonly LIST_SNAPSHOTS: "list_snapshots";
13
- readonly LIST_ENDPOINT_CHANGE_HISTORY: "list_endpoint_change_history";
14
- readonly GET_SNAPSHOT_DIFF: "get_snapshot_diff";
15
- readonly GET_ENDPOINT_DIFF_DETAIL: "get_endpoint_diff_detail";
16
- };
17
- export type ToolName = (typeof TOOL_NAMES)[keyof typeof TOOL_NAMES];
18
- export type ToolResponse = {
19
- content: Array<{
20
- type: 'text';
21
- text: string;
22
- }>;
23
- };
24
- export type StructuredToolError = {
25
- code: string;
26
- message: string;
27
- };
28
- export type StructuredToolSuccess = {
29
- ok: true;
30
- statusCode: 200;
31
- data: unknown;
32
- };
33
- export type StructuredToolFailure = {
34
- ok: false;
35
- statusCode: number;
36
- error: StructuredToolError;
37
- };
38
- export type StructuredToolResult = StructuredToolSuccess | StructuredToolFailure;
39
- interface SnapshotServicePort {
40
- capture(env: RuntimeEnvironment | NodeJS.ProcessEnv): Promise<SnapshotCaptureResult>;
41
- bootstrap(env: RuntimeEnvironment | NodeJS.ProcessEnv): Promise<SnapshotCaptureBootstrapResult>;
42
- listSnapshotsBySource(sourceId: string, limit?: number): Promise<SnapshotListItem[]>;
43
- listEndpointChangeHistory(input: {
44
- sourceId: string;
45
- limit?: number;
46
- path?: string;
47
- method?: EndpointChangeHistoryEvent['method'];
48
- }): Promise<EndpointChangeHistoryEvent[]>;
49
- replayDiff(input: SnapshotReplayInput): Promise<ReturnType<typeof snapshotDiffResultSchema.parse>>;
50
- getEndpointDiffDetail(input: EndpointDiffDetailInput): Promise<EndpointDiffDetailResult>;
51
- }
52
- interface SnapshotRuntimePort {
53
- environment: RuntimeEnvironment;
54
- service: SnapshotServicePort;
55
- }
56
- type RuntimeProvider = () => Promise<SnapshotRuntimePort>;
57
- interface SwaggerCachePort {
58
- load(url: string): Promise<OpenAPIDocument>;
59
- getOrLoad(url: string): Promise<OpenAPIDocument>;
60
- }
61
- interface SchemaResolverPort {
62
- resolveRef(ref: string, swagger: OpenAPIDocument): unknown;
63
- resolveSchemaReference(schema: unknown, swagger: OpenAPIDocument): unknown;
64
- }
65
- export interface McpToolRouterDeps {
66
- swaggerCache: SwaggerCachePort;
67
- schemaResolver: SchemaResolverPort;
68
- runtimeProvider: RuntimeProvider;
69
- }
70
- export interface McpToolRouter {
71
- listTools(): Array<{
72
- name: ToolName;
73
- description: string;
74
- inputSchema: object;
75
- }>;
76
- execute(name: string, args: unknown): Promise<ToolResponse>;
77
- executeStructured(name: string, args: unknown): Promise<StructuredToolResult>;
78
- }
79
- export declare function createMcpToolRouter(deps: McpToolRouterDeps): McpToolRouter;
80
- export {};
81
- //# sourceMappingURL=mcpToolRouter.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mcpToolRouter.d.ts","sourceRoot":"","sources":["../../src/transport/mcpToolRouter.ts"],"names":[],"mappings":"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"}