swagger-parser-mcp-server 2.0.4 → 2.3.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 (131) hide show
  1. package/README.md +131 -100
  2. package/dist/application/snapshot/createSnapshotRuntime.d.ts +2 -0
  3. package/dist/application/snapshot/createSnapshotRuntime.d.ts.map +1 -0
  4. package/dist/application/snapshot/createSnapshotRuntime.js +2 -0
  5. package/dist/application/snapshot/createSnapshotRuntime.js.map +1 -0
  6. package/dist/application/snapshot/snapshotCaptureService.d.ts +90 -0
  7. package/dist/application/snapshot/snapshotCaptureService.d.ts.map +1 -0
  8. package/dist/application/snapshot/snapshotCaptureService.js +394 -0
  9. package/dist/application/snapshot/snapshotCaptureService.js.map +1 -0
  10. package/dist/application/snapshot/snapshotRepository.d.ts +77 -0
  11. package/dist/application/snapshot/snapshotRepository.d.ts.map +1 -0
  12. package/dist/application/snapshot/snapshotRepository.js +2 -0
  13. package/dist/application/snapshot/snapshotRepository.js.map +1 -0
  14. package/dist/domain/canonical/canonicalSnapshot.d.ts +61 -0
  15. package/dist/domain/canonical/canonicalSnapshot.d.ts.map +1 -0
  16. package/dist/domain/canonical/canonicalSnapshot.js +300 -0
  17. package/dist/domain/canonical/canonicalSnapshot.js.map +1 -0
  18. package/dist/domain/contracts/runtimeEnvironmentContract.d.ts +21 -0
  19. package/dist/domain/contracts/runtimeEnvironmentContract.d.ts.map +1 -0
  20. package/dist/domain/contracts/runtimeEnvironmentContract.js +50 -0
  21. package/dist/domain/contracts/runtimeEnvironmentContract.js.map +1 -0
  22. package/dist/domain/contracts/snapshotDiffContract.d.ts +270 -0
  23. package/dist/domain/contracts/snapshotDiffContract.d.ts.map +1 -0
  24. package/dist/domain/contracts/snapshotDiffContract.js +99 -0
  25. package/dist/domain/contracts/snapshotDiffContract.js.map +1 -0
  26. package/dist/domain/diff/endpointDiffClassifier.d.ts +78 -0
  27. package/dist/domain/diff/endpointDiffClassifier.d.ts.map +1 -0
  28. package/dist/domain/diff/endpointDiffClassifier.js +317 -0
  29. package/dist/domain/diff/endpointDiffClassifier.js.map +1 -0
  30. package/dist/http.d.ts +3 -0
  31. package/dist/http.d.ts.map +1 -0
  32. package/dist/http.js +52 -0
  33. package/dist/http.js.map +1 -0
  34. package/dist/index.d.ts +2 -0
  35. package/dist/index.d.ts.map +1 -1
  36. package/dist/index.js +88 -266
  37. package/dist/index.js.map +1 -1
  38. package/dist/infrastructure/postgres/migrationRunner.d.ts +14 -0
  39. package/dist/infrastructure/postgres/migrationRunner.d.ts.map +1 -0
  40. package/dist/infrastructure/postgres/migrationRunner.js +161 -0
  41. package/dist/infrastructure/postgres/migrationRunner.js.map +1 -0
  42. package/dist/infrastructure/postgres/migrations/001_snapshot_schema.sql +29 -0
  43. package/dist/infrastructure/postgres/migrations/002_snapshot_change_history.sql +32 -0
  44. package/dist/infrastructure/postgres/postgresSnapshotRepository.d.ts +25 -0
  45. package/dist/infrastructure/postgres/postgresSnapshotRepository.d.ts.map +1 -0
  46. package/dist/infrastructure/postgres/postgresSnapshotRepository.js +323 -0
  47. package/dist/infrastructure/postgres/postgresSnapshotRepository.js.map +1 -0
  48. package/dist/infrastructure/postgres/runMigrations.d.ts +3 -0
  49. package/dist/infrastructure/postgres/runMigrations.d.ts.map +1 -0
  50. package/dist/infrastructure/postgres/runMigrations.js +33 -0
  51. package/dist/infrastructure/postgres/runMigrations.js.map +1 -0
  52. package/dist/infrastructure/runtime/createSnapshotRuntime.d.ts +17 -0
  53. package/dist/infrastructure/runtime/createSnapshotRuntime.d.ts.map +1 -0
  54. package/dist/infrastructure/runtime/createSnapshotRuntime.js +38 -0
  55. package/dist/infrastructure/runtime/createSnapshotRuntime.js.map +1 -0
  56. package/dist/schemas.d.ts +284 -3
  57. package/dist/schemas.d.ts.map +1 -1
  58. package/dist/schemas.js +110 -1
  59. package/dist/schemas.js.map +1 -1
  60. package/dist/tests/canonicalSnapshot.test.d.ts +2 -0
  61. package/dist/tests/canonicalSnapshot.test.d.ts.map +1 -0
  62. package/dist/tests/canonicalSnapshot.test.js +425 -0
  63. package/dist/tests/canonicalSnapshot.test.js.map +1 -0
  64. package/dist/tests/endpointDiffClassifier.test.d.ts +2 -0
  65. package/dist/tests/endpointDiffClassifier.test.d.ts.map +1 -0
  66. package/dist/tests/endpointDiffClassifier.test.js +633 -0
  67. package/dist/tests/endpointDiffClassifier.test.js.map +1 -0
  68. package/dist/tests/httpSnapshotTransport.test.d.ts +2 -0
  69. package/dist/tests/httpSnapshotTransport.test.d.ts.map +1 -0
  70. package/dist/tests/httpSnapshotTransport.test.js +356 -0
  71. package/dist/tests/httpSnapshotTransport.test.js.map +1 -0
  72. package/dist/tests/indexLifecycle.test.d.ts +2 -0
  73. package/dist/tests/indexLifecycle.test.d.ts.map +1 -0
  74. package/dist/tests/indexLifecycle.test.js +23 -0
  75. package/dist/tests/indexLifecycle.test.js.map +1 -0
  76. package/dist/tests/mcpSnapshotTools.test.d.ts +2 -0
  77. package/dist/tests/mcpSnapshotTools.test.d.ts.map +1 -0
  78. package/dist/tests/mcpSnapshotTools.test.js +316 -0
  79. package/dist/tests/mcpSnapshotTools.test.js.map +1 -0
  80. package/dist/tests/postgresMigrationSmoke.test.d.ts +2 -0
  81. package/dist/tests/postgresMigrationSmoke.test.d.ts.map +1 -0
  82. package/dist/tests/postgresMigrationSmoke.test.js +187 -0
  83. package/dist/tests/postgresMigrationSmoke.test.js.map +1 -0
  84. package/dist/tests/realPostgresTestSchema.d.ts +10 -0
  85. package/dist/tests/realPostgresTestSchema.d.ts.map +1 -0
  86. package/dist/tests/realPostgresTestSchema.js +73 -0
  87. package/dist/tests/realPostgresTestSchema.js.map +1 -0
  88. package/dist/tests/snapshotCapturePipeline.test.d.ts +2 -0
  89. package/dist/tests/snapshotCapturePipeline.test.d.ts.map +1 -0
  90. package/dist/tests/snapshotCapturePipeline.test.js +475 -0
  91. package/dist/tests/snapshotCapturePipeline.test.js.map +1 -0
  92. package/dist/tests/snapshotDiffContract.test.d.ts +2 -0
  93. package/dist/tests/snapshotDiffContract.test.d.ts.map +1 -0
  94. package/dist/tests/snapshotDiffContract.test.js +156 -0
  95. package/dist/tests/snapshotDiffContract.test.js.map +1 -0
  96. package/dist/tests/snapshotPersistence.real.test.d.ts +2 -0
  97. package/dist/tests/snapshotPersistence.real.test.d.ts.map +1 -0
  98. package/dist/tests/snapshotPersistence.real.test.js +310 -0
  99. package/dist/tests/snapshotPersistence.real.test.js.map +1 -0
  100. package/dist/tests/webServerRuntime.test.d.ts +2 -0
  101. package/dist/tests/webServerRuntime.test.d.ts.map +1 -0
  102. package/dist/tests/webServerRuntime.test.js +123 -0
  103. package/dist/tests/webServerRuntime.test.js.map +1 -0
  104. package/dist/transport/createSnapshotToolRuntime.d.ts +7 -0
  105. package/dist/transport/createSnapshotToolRuntime.d.ts.map +1 -0
  106. package/dist/transport/createSnapshotToolRuntime.js +40 -0
  107. package/dist/transport/createSnapshotToolRuntime.js.map +1 -0
  108. package/dist/transport/httpSnapshotServer.d.ts +11 -0
  109. package/dist/transport/httpSnapshotServer.d.ts.map +1 -0
  110. package/dist/transport/httpSnapshotServer.js +216 -0
  111. package/dist/transport/httpSnapshotServer.js.map +1 -0
  112. package/dist/transport/mcpToolRouter.d.ts +81 -0
  113. package/dist/transport/mcpToolRouter.d.ts.map +1 -0
  114. package/dist/transport/mcpToolRouter.js +416 -0
  115. package/dist/transport/mcpToolRouter.js.map +1 -0
  116. package/dist/transport/webServerRuntime.d.ts +17 -0
  117. package/dist/transport/webServerRuntime.d.ts.map +1 -0
  118. package/dist/transport/webServerRuntime.js +73 -0
  119. package/dist/transport/webServerRuntime.js.map +1 -0
  120. package/dist/utils/swaggerCache.d.ts +4 -0
  121. package/dist/utils/swaggerCache.d.ts.map +1 -1
  122. package/dist/utils/swaggerCache.js +8 -0
  123. package/dist/utils/swaggerCache.js.map +1 -1
  124. package/dist/utils/types.d.ts +2 -1
  125. package/dist/utils/types.d.ts.map +1 -1
  126. package/dist/utils/types.js +2 -0
  127. package/dist/utils/types.js.map +1 -1
  128. package/dist/web/dashboard.css +411 -0
  129. package/dist/web/dashboard.html +141 -0
  130. package/dist/web/dashboard.js +540 -0
  131. package/package.json +27 -17
package/README.md CHANGED
@@ -1,168 +1,199 @@
1
1
  # Swagger Parser MCP Server
2
2
 
3
- Swagger/OpenAPI JSON 파일을 파싱하여 API 정보를 분석하는 MCP 서버입니다.
3
+ Swagger/OpenAPI JSON 파일을 파싱하고, snapshot 캡처 diff 조회까지 지원하는 MCP 서버입니다.
4
4
 
5
- Claude와 함께 사용하여 API 문서를 쉽게 분석하고 이해할 수 있습니다.
5
+ MCP 클라이언트에서 API 문서 분석과 변경 추적을 함께 사용할 수 있습니다.
6
6
 
7
7
  ## 주요 기능
8
8
 
9
- - 원하는 컨트롤러에 대한 path 리스트 조회
10
- - ✅ JSON에서 컨트롤러(태그) 리스트 추출
11
- - Path에 대한 parameters, requestBody, responseBody 정보 및 스키마 조회
12
- - $ref로 참조된 스키마의 실제 타입 정보 제공 (자동 해결)
9
+ - Swagger/OpenAPI JSON 로드
10
+ - 컨트롤러(태그) 목록 조회
11
+ - 컨트롤러별 path 목록 조회
12
+ - path별 parameters, request body, response schema 조회
13
+ - `$ref` 스키마 해석
14
+ - Postgres에 snapshot 영속화
15
+ - snapshot 이력 조회
16
+ - 두 snapshot 간 diff summary 조회
17
+ - 특정 endpoint의 before/after diff detail 조회
13
18
 
14
- ## 프로젝트 구조
19
+ ## 빠른 시작
15
20
 
16
- ```
17
- swagger-parser-mcp-server/
18
- ├── swagger-parser-server.ts # MCP 서버 메인 코드
19
- ├── example-client.ts # 클라이언트 예제 코드
20
- ├── package.json # 프로젝트 설정
21
- ├── tsconfig.json # TypeScript 설정
22
- ├── README.md # 이 파일
23
- └── dist/ # 빌드된 파일 (빌드 후 생성)
24
- ```
25
-
26
- ## 설치 및 사용법
27
-
28
- ### 방법 1: npx 등록 (권장)
21
+ 권장 방식은 `npx`로 MCP를 등록하는 것입니다. 로컬에 저장소를 clone해서 `node dist/index.js`를 직접 실행할 필요는 없습니다.
29
22
 
30
- #### 1. MCP 설정
31
- MCP 설정 파일(`mcp.json` 또는 Claude 설정)에 다음 내용을 추가합니다:
23
+ MCP 설정 파일(`mcp.json`, Claude Desktop 설정 등)에 아래와 같이 등록합니다.
32
24
 
33
25
  ```json
34
26
  {
35
27
  "mcpServers": {
36
28
  "swagger-parser": {
37
29
  "command": "npx",
38
- "args": ["-y","swagger-parser-mcp-server"]
30
+ "args": ["-y", "swagger-parser-mcp-server"],
31
+ "env": {
32
+ "DATABASE_URL": "postgresql://<db-user>:<db-password>@<db-host>:5432/<db-name>",
33
+ "PROJECT_KEY": "frontend-diff",
34
+ "SWAGGER_URL": "https://api.example.com/openapi.json",
35
+ "SNAPSHOT_WEB_ENABLED": "false"
36
+ }
39
37
  }
40
38
  }
41
39
  }
42
40
  ```
43
41
 
44
- **Claude Code CLI 사용시:**
45
- ```bash
46
- claude mcp add swagger-parser -- npx -y swagger-parser-mcp-server
47
- ```
42
+ 공유용 예시:
48
43
 
49
- ### 방법 2: 소스코드 직접 사용
50
-
51
- #### 1. 소스코드 다운로드 및 빌드
52
- ```bash
53
- # 저장소 클론 또는 파일 다운로드 후
54
- cd swagger-parser-mcp-server
55
-
56
- # 의존성 설치
57
- npm install
58
-
59
- # TypeScript 빌드
60
- npm run build
61
- ```
62
-
63
- #### 2. MCP 설정
64
-
65
- MCP 설정 파일을 열어 다음 내용을 추가합니다:
66
44
  ```json
67
45
  {
68
46
  "mcpServers": {
69
- "swagger-parser": {
70
- "command": "node",
71
- "args": ["<프로젝트 절대경로>/dist/index.js"]
47
+ "swagger-parser-team": {
48
+ "command": "npx",
49
+ "args": ["-y", "swagger-parser-mcp-server"],
50
+ "env": {
51
+ "DATABASE_URL": "postgresql://<db-user>:<db-password>@<db-host>:5432/<db-name>",
52
+ "PROJECT_KEY": "team.frontend-diff",
53
+ "SWAGGER_URL": "https://api.example.com/openapi.json",
54
+ "SNAPSHOT_WEB_ENABLED": "false"
55
+ }
72
56
  }
73
57
  }
74
58
  }
75
59
  ```
76
60
 
77
- **Claude Code CLI 사용시:**
78
- ```bash
79
- claude mcp add swagger-parser node <프로젝트 절대경로>/dist/index.js
80
- ```
81
- > IDE에서 ./dist/index.js 파일 우클릭 절대 경로 복사 가능합니다.
61
+ 주의:
62
+
63
+ - README나 저장소에는 실제 DB 주소, 계정, 비밀번호를 커밋하지 마세요.
64
+ - 실제 값은 각자 로컬 MCP 설정 파일이나 사내 비밀 관리 수단에만 넣어야 합니다.
65
+ - snapshot/diff는 현재 설정된 `PROJECT_KEY` + `SWAGGER_URL` source에 고정됩니다.
66
+ - 보통 API source 하나당 MCP 서버 엔트리 하나로 등록하는 것이 가장 단순합니다.
67
+
68
+ ## 환경 변수
82
69
 
83
- ### 3. Claude 재시작
70
+ 필수:
84
71
 
85
- 설정을 저장한 Claude Desktop/Cursor/Claude Code를 재시작합니다.
72
+ - `DATABASE_URL`: snapshot/diff 저장용 Postgres 연결 문자열
73
+ - `PROJECT_KEY`: source 식별자. 영문, 숫자, `.`, `_`, `-`만 허용
74
+ - `SWAGGER_URL`: 캡처 대상 OpenAPI JSON URL
86
75
 
87
- ## 사용 예시
76
+ 선택:
88
77
 
89
- ⚠️ JSON 형태 스웨거를 반환하는 URL을 줘야합니다. [참고](https://app.clickup.com/t/86etz9h2z)
78
+ - `SNAPSHOT_WEB_ENABLED`: `false`면 MCP stdio 실행 내장 HTTP 서버를 비활성화합니다. MCP 전용이면 `false` 권장
79
+ - `HTTP_HOST`: HTTP 서버 바인딩 주소. 기본값 `0.0.0.0`
80
+ - `HTTP_PORT`: HTTP 서버 포트. 기본값 `3100`
90
81
 
82
+ ## Snapshot / Diff 사용 순서
91
83
 
92
- Claude에서 다음과 같이 사용할 있습니다:
84
+ snapshot 관련 툴은 환경 변수에 고정된 source를 기준으로 동작합니다.
93
85
 
86
+ 1. `capture_snapshot`
87
+ 2. `list_snapshots`
88
+ 3. `get_snapshot_diff`
89
+ 4. 필요하면 `get_endpoint_diff_detail`
90
+
91
+ 예시:
92
+
93
+ ```text
94
+ 현재 설정된 Swagger source를 snapshot으로 캡처해줘
95
+ 최근 snapshot 20개를 보여줘
96
+ 가장 최근 두 snapshot의 diff를 보여줘
97
+ GET /users endpoint diff detail을 보여줘
94
98
  ```
95
- # Swagger JSON 로드
96
- 이 API 문서를 분석해줘: https://petstore.swagger.io/v2/swagger.json
97
99
 
98
- # 컨트롤러 목록 보기
99
- 어떤 컨트롤러들이 있는지 보여줘
100
+ ## 일반 Swagger 분석 예시
100
101
 
101
- # 특정 컨트롤러의 API 목록
102
- pet 컨트롤러의 모든 API를 보여줘
102
+ ⚠️ JSON 형태의 Swagger/OpenAPI 문서를 반환하는 URL이어야 합니다.
103
103
 
104
- # API 상세 정보
104
+ ```text
105
+ 이 API 문서를 분석해줘: https://petstore.swagger.io/v2/swagger.json
106
+ 어떤 컨트롤러들이 있는지 보여줘
107
+ pet 컨트롤러의 모든 API를 보여줘
105
108
  GET /pet/{petId} API의 파라미터와 응답 스키마를 자세히 보여줘
106
-
107
- # 스키마 정보
108
109
  Pet 모델의 전체 스키마 구조를 보여줘
109
110
  ```
110
111
 
111
- ## 개발 모드
112
+ ## 로컬 개발
113
+
114
+ 이 저장소는 `pnpm` 기준으로 개발합니다.
115
+
116
+ ```bash
117
+ pnpm install
118
+ pnpm run build
119
+ ```
120
+
121
+ 개발 모드:
112
122
 
113
- 개발 중에는 TypeScript를 직접 실행할 수 있습니다:
123
+ ```bash
124
+ pnpm run dev
125
+ ```
126
+
127
+ HTTP 서버만 실행:
114
128
 
115
129
  ```bash
116
- npm run dev
130
+ pnpm run dev:http
117
131
  ```
118
132
 
119
- ## 프로그래밍 방식으로 사용하기
133
+ Postgres migration 실행:
120
134
 
121
- MCP 클라이언트를 구현하여 프로그래밍 방식으로도 사용할 수 있습니다:
135
+ ```bash
136
+ DATABASE_URL=postgresql://<user>:<pass>@<host>:5432/<db> pnpm run migrate
137
+ ```
138
+
139
+ ## 테스트
122
140
 
123
- ```typescript
124
- import { SwaggerParserClient } from './example-client.js';
141
+ 메모리 DB 기반 회귀 테스트:
125
142
 
126
- const client = new SwaggerParserClient();
127
- await client.connect();
143
+ ```bash
144
+ pnpm run test:db:mem
145
+ ```
128
146
 
129
- const url = "https://your-api.com/swagger.json";
130
- const controllers = await client.getControllers(url);
131
- const paths = await client.getPathsByController(url, "users");
147
+ Postgres 영속성 테스트:
132
148
 
133
- await client.disconnect();
149
+ ```bash
150
+ TEST_DATABASE_URL=postgresql://<user>:<pass>@<host>:5432/<db> pnpm run test:db:real
134
151
  ```
135
152
 
136
- ## 지원하는 OpenAPI 버전
153
+ ## 선택 사항: Read-only Dashboard
137
154
 
138
- - Swagger 2.0
139
- - ✅ OpenAPI 3.0.x
155
+ snapshot 이력과 diff를 브라우저에서 확인하려면 HTTP 서버를 사용할 수 있습니다.
156
+
157
+ ```bash
158
+ HTTP_HOST=127.0.0.1 HTTP_PORT=3100 pnpm run start:http
159
+ ```
160
+
161
+ 접속 경로:
162
+
163
+ - `/dashboard`
164
+ - `/api/snapshots`
165
+ - `/api/snapshots/diff`
166
+ - `/api/snapshots/endpoint-detail`
167
+
168
+ MCP만 사용할 경우에는 `SNAPSHOT_WEB_ENABLED=false`를 권장합니다.
140
169
 
141
170
  ## 문제 해결
142
171
 
143
- ### "MCP 서버를 찾을 없습니다" 오류
144
- 1. 설정 파일의 경로가 올바른지 확인하세요
145
- 2. Node.js 설치되어 있는지 확인하세요 (`node --version`)
146
- 3. 프로젝트가 빌드되었는지 확인하세요 (`npm run build`)
172
+ ### MCP 서버가 뜨지 않는 경우
173
+
174
+ 1. Node.js 버전이 `>= 20`인지 확인하세요.
175
+ 2. `npx -y swagger-parser-mcp-server`가 로컬에서 실행되는지 확인하세요.
176
+ 3. MCP 설정 파일 JSON 문법이 올바른지 확인하세요.
177
+
178
+ ### DB 연결 실패
179
+
180
+ 1. `DATABASE_URL`이 Postgres 연결 문자열인지 확인하세요.
181
+ 2. MCP가 실행되는 환경에서 DB host/port로 접속 가능한지 확인하세요.
182
+ 3. 계정 권한과 방화벽 정책을 확인하세요.
183
+
184
+ ### Swagger 로드 실패
185
+
186
+ 1. `SWAGGER_URL`이 MCP가 실행되는 환경에서 접근 가능한지 확인하세요.
187
+ 2. 응답이 실제 JSON Swagger/OpenAPI 문서인지 확인하세요.
188
+ 3. 사내망 URL이라면 MCP 실행 위치에서 해당 네트워크에 접근 가능한지 확인하세요.
189
+
190
+ ### npx 실행 오류
147
191
 
148
- ### 패키지 실행 오류
149
192
  ```bash
150
- # npx 캐시 클리어
151
193
  npx clear-npx-cache
152
-
153
- # 패키지 재설치
154
- npm uninstall swagger-parser-mcp-server
155
- npm install swagger-parser-mcp-server
194
+ npm cache clean --force
156
195
  ```
157
196
 
158
- ### Swagger JSON 로드 실패
159
- 1. URL이 CORS를 허용하는지 확인하세요
160
- 2. JSON 형식이 올바른 Swagger/OpenAPI 형식인지 확인하세요
161
-
162
197
  ## 라이선스
163
198
 
164
199
  MIT
165
-
166
- ## 기여하기
167
-
168
- 이슈와 PR은 언제나 환영합니다!
@@ -0,0 +1,2 @@
1
+ export { createSnapshotRuntime, type SnapshotRuntime, type SnapshotRuntimeDependencies, type SnapshotRuntimeDependencyFactory, } from '../../infrastructure/runtime/createSnapshotRuntime.js';
2
+ //# sourceMappingURL=createSnapshotRuntime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createSnapshotRuntime.d.ts","sourceRoot":"","sources":["../../../src/application/snapshot/createSnapshotRuntime.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,KAAK,eAAe,EACpB,KAAK,2BAA2B,EAChC,KAAK,gCAAgC,GACtC,MAAM,uDAAuD,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { createSnapshotRuntime, } from '../../infrastructure/runtime/createSnapshotRuntime.js';
2
+ //# sourceMappingURL=createSnapshotRuntime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createSnapshotRuntime.js","sourceRoot":"","sources":["../../../src/application/snapshot/createSnapshotRuntime.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,GAItB,MAAM,uDAAuD,CAAC"}
@@ -0,0 +1,90 @@
1
+ import { OpenAPIDocument } from '../../utils/types.js';
2
+ import { CanonicalEndpointSnapshot, CanonicalOperationShape } from '../../domain/canonical/canonicalSnapshot.js';
3
+ import { EndpointChangeDetail } from '../../domain/diff/endpointDiffClassifier.js';
4
+ import { RuntimeEnvironment } from '../../domain/contracts/runtimeEnvironmentContract.js';
5
+ import { SnapshotDiffResult } from '../../domain/contracts/snapshotDiffContract.js';
6
+ import { SnapshotProjectRecord, SnapshotRecord, SnapshotRepository, SnapshotSourceRecord } from './snapshotRepository.js';
7
+ export interface SnapshotDocumentLoader {
8
+ loadFresh(url: string): Promise<OpenAPIDocument>;
9
+ }
10
+ export interface SnapshotCaptureBootstrapResult {
11
+ environment: RuntimeEnvironment;
12
+ project: SnapshotProjectRecord;
13
+ source: SnapshotSourceRecord;
14
+ }
15
+ export interface SnapshotCaptureResult extends SnapshotCaptureBootstrapResult {
16
+ specHash: string;
17
+ snapshot: SnapshotRecord;
18
+ previousSnapshot: SnapshotRecord | null;
19
+ isNoopCapture: boolean;
20
+ diffResult: SnapshotDiffResult;
21
+ }
22
+ export interface SnapshotReplayInput {
23
+ baselineSnapshotId: string;
24
+ targetSnapshotId: string;
25
+ }
26
+ export interface SnapshotListItem {
27
+ id: string;
28
+ sourceId: string;
29
+ specHash: string;
30
+ documentFingerprint: string;
31
+ capturedAt: string;
32
+ }
33
+ export interface EndpointDiffDetailInput extends SnapshotReplayInput {
34
+ path: string;
35
+ method: CanonicalEndpointSnapshot['method'];
36
+ }
37
+ export interface EndpointDiffDetailResult {
38
+ baselineSnapshotId: string;
39
+ targetSnapshotId: string;
40
+ path: string;
41
+ method: CanonicalEndpointSnapshot['method'];
42
+ hasChange: boolean;
43
+ classification: 'breaking' | 'non-breaking' | 'info' | null;
44
+ changeReason: string | null;
45
+ details: EndpointChangeDetail[];
46
+ before: CanonicalOperationShape | null;
47
+ after: CanonicalOperationShape | null;
48
+ }
49
+ export interface EndpointChangeHistoryFilterInput {
50
+ sourceId: string;
51
+ limit?: number;
52
+ path?: string;
53
+ method?: CanonicalEndpointSnapshot['method'];
54
+ }
55
+ export interface EndpointChangeHistoryEvent {
56
+ baselineSnapshotId: string;
57
+ targetSnapshotId: string;
58
+ path: string;
59
+ method: CanonicalEndpointSnapshot['method'];
60
+ classification: 'breaking' | 'non-breaking' | 'info';
61
+ changeReason: string;
62
+ changedAt: string;
63
+ }
64
+ export interface EndpointChangeHistoryTransportResult {
65
+ projectKey: string;
66
+ sourceUrl: string;
67
+ filter: {
68
+ path: string | null;
69
+ method: CanonicalEndpointSnapshot['method'] | null;
70
+ };
71
+ events: EndpointChangeHistoryEvent[];
72
+ }
73
+ export declare function createSpecHash(document: OpenAPIDocument): string;
74
+ export declare class SnapshotCaptureService {
75
+ private readonly repository;
76
+ private readonly loader;
77
+ private readonly now;
78
+ private initializePromise;
79
+ constructor(repository: SnapshotRepository, loader: SnapshotDocumentLoader, now?: () => Date);
80
+ initialize(): Promise<void>;
81
+ private resolveBootstrapContext;
82
+ bootstrap(env: RuntimeEnvironment | NodeJS.ProcessEnv): Promise<SnapshotCaptureBootstrapResult>;
83
+ capture(env: RuntimeEnvironment | NodeJS.ProcessEnv): Promise<SnapshotCaptureResult>;
84
+ listSnapshotsBySource(sourceId: string, limit?: number): Promise<SnapshotListItem[]>;
85
+ listEndpointChangeHistory(input: EndpointChangeHistoryFilterInput): Promise<EndpointChangeHistoryEvent[]>;
86
+ private resolveReplaySnapshots;
87
+ replayDiff(input: SnapshotReplayInput): Promise<SnapshotDiffResult>;
88
+ getEndpointDiffDetail(input: EndpointDiffDetailInput): Promise<EndpointDiffDetailResult>;
89
+ }
90
+ //# sourceMappingURL=snapshotCaptureService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snapshotCaptureService.d.ts","sourceRoot":"","sources":["../../../src/application/snapshot/snapshotCaptureService.ts"],"names":[],"mappings":"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"}