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.
- package/README.md +131 -100
- package/dist/application/snapshot/createSnapshotRuntime.d.ts +2 -0
- package/dist/application/snapshot/createSnapshotRuntime.d.ts.map +1 -0
- package/dist/application/snapshot/createSnapshotRuntime.js +2 -0
- package/dist/application/snapshot/createSnapshotRuntime.js.map +1 -0
- package/dist/application/snapshot/snapshotCaptureService.d.ts +90 -0
- package/dist/application/snapshot/snapshotCaptureService.d.ts.map +1 -0
- package/dist/application/snapshot/snapshotCaptureService.js +394 -0
- package/dist/application/snapshot/snapshotCaptureService.js.map +1 -0
- package/dist/application/snapshot/snapshotRepository.d.ts +77 -0
- package/dist/application/snapshot/snapshotRepository.d.ts.map +1 -0
- package/dist/application/snapshot/snapshotRepository.js +2 -0
- package/dist/application/snapshot/snapshotRepository.js.map +1 -0
- package/dist/domain/canonical/canonicalSnapshot.d.ts +61 -0
- package/dist/domain/canonical/canonicalSnapshot.d.ts.map +1 -0
- package/dist/domain/canonical/canonicalSnapshot.js +300 -0
- package/dist/domain/canonical/canonicalSnapshot.js.map +1 -0
- package/dist/domain/contracts/runtimeEnvironmentContract.d.ts +21 -0
- package/dist/domain/contracts/runtimeEnvironmentContract.d.ts.map +1 -0
- package/dist/domain/contracts/runtimeEnvironmentContract.js +50 -0
- package/dist/domain/contracts/runtimeEnvironmentContract.js.map +1 -0
- package/dist/domain/contracts/snapshotDiffContract.d.ts +270 -0
- package/dist/domain/contracts/snapshotDiffContract.d.ts.map +1 -0
- package/dist/domain/contracts/snapshotDiffContract.js +99 -0
- package/dist/domain/contracts/snapshotDiffContract.js.map +1 -0
- package/dist/domain/diff/endpointDiffClassifier.d.ts +78 -0
- package/dist/domain/diff/endpointDiffClassifier.d.ts.map +1 -0
- package/dist/domain/diff/endpointDiffClassifier.js +317 -0
- package/dist/domain/diff/endpointDiffClassifier.js.map +1 -0
- package/dist/http.d.ts +3 -0
- package/dist/http.d.ts.map +1 -0
- package/dist/http.js +52 -0
- package/dist/http.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +88 -266
- package/dist/index.js.map +1 -1
- package/dist/infrastructure/postgres/migrationRunner.d.ts +14 -0
- package/dist/infrastructure/postgres/migrationRunner.d.ts.map +1 -0
- package/dist/infrastructure/postgres/migrationRunner.js +161 -0
- package/dist/infrastructure/postgres/migrationRunner.js.map +1 -0
- package/dist/infrastructure/postgres/migrations/001_snapshot_schema.sql +29 -0
- package/dist/infrastructure/postgres/migrations/002_snapshot_change_history.sql +32 -0
- package/dist/infrastructure/postgres/postgresSnapshotRepository.d.ts +25 -0
- package/dist/infrastructure/postgres/postgresSnapshotRepository.d.ts.map +1 -0
- package/dist/infrastructure/postgres/postgresSnapshotRepository.js +323 -0
- package/dist/infrastructure/postgres/postgresSnapshotRepository.js.map +1 -0
- package/dist/infrastructure/postgres/runMigrations.d.ts +3 -0
- package/dist/infrastructure/postgres/runMigrations.d.ts.map +1 -0
- package/dist/infrastructure/postgres/runMigrations.js +33 -0
- package/dist/infrastructure/postgres/runMigrations.js.map +1 -0
- package/dist/infrastructure/runtime/createSnapshotRuntime.d.ts +17 -0
- package/dist/infrastructure/runtime/createSnapshotRuntime.d.ts.map +1 -0
- package/dist/infrastructure/runtime/createSnapshotRuntime.js +38 -0
- package/dist/infrastructure/runtime/createSnapshotRuntime.js.map +1 -0
- package/dist/schemas.d.ts +284 -3
- package/dist/schemas.d.ts.map +1 -1
- package/dist/schemas.js +110 -1
- package/dist/schemas.js.map +1 -1
- package/dist/tests/canonicalSnapshot.test.d.ts +2 -0
- package/dist/tests/canonicalSnapshot.test.d.ts.map +1 -0
- package/dist/tests/canonicalSnapshot.test.js +425 -0
- package/dist/tests/canonicalSnapshot.test.js.map +1 -0
- package/dist/tests/endpointDiffClassifier.test.d.ts +2 -0
- package/dist/tests/endpointDiffClassifier.test.d.ts.map +1 -0
- package/dist/tests/endpointDiffClassifier.test.js +633 -0
- package/dist/tests/endpointDiffClassifier.test.js.map +1 -0
- package/dist/tests/httpSnapshotTransport.test.d.ts +2 -0
- package/dist/tests/httpSnapshotTransport.test.d.ts.map +1 -0
- package/dist/tests/httpSnapshotTransport.test.js +356 -0
- package/dist/tests/httpSnapshotTransport.test.js.map +1 -0
- package/dist/tests/indexLifecycle.test.d.ts +2 -0
- package/dist/tests/indexLifecycle.test.d.ts.map +1 -0
- package/dist/tests/indexLifecycle.test.js +23 -0
- package/dist/tests/indexLifecycle.test.js.map +1 -0
- package/dist/tests/mcpSnapshotTools.test.d.ts +2 -0
- package/dist/tests/mcpSnapshotTools.test.d.ts.map +1 -0
- package/dist/tests/mcpSnapshotTools.test.js +316 -0
- package/dist/tests/mcpSnapshotTools.test.js.map +1 -0
- package/dist/tests/postgresMigrationSmoke.test.d.ts +2 -0
- package/dist/tests/postgresMigrationSmoke.test.d.ts.map +1 -0
- package/dist/tests/postgresMigrationSmoke.test.js +187 -0
- package/dist/tests/postgresMigrationSmoke.test.js.map +1 -0
- package/dist/tests/realPostgresTestSchema.d.ts +10 -0
- package/dist/tests/realPostgresTestSchema.d.ts.map +1 -0
- package/dist/tests/realPostgresTestSchema.js +73 -0
- package/dist/tests/realPostgresTestSchema.js.map +1 -0
- package/dist/tests/snapshotCapturePipeline.test.d.ts +2 -0
- package/dist/tests/snapshotCapturePipeline.test.d.ts.map +1 -0
- package/dist/tests/snapshotCapturePipeline.test.js +475 -0
- package/dist/tests/snapshotCapturePipeline.test.js.map +1 -0
- package/dist/tests/snapshotDiffContract.test.d.ts +2 -0
- package/dist/tests/snapshotDiffContract.test.d.ts.map +1 -0
- package/dist/tests/snapshotDiffContract.test.js +156 -0
- package/dist/tests/snapshotDiffContract.test.js.map +1 -0
- package/dist/tests/snapshotPersistence.real.test.d.ts +2 -0
- package/dist/tests/snapshotPersistence.real.test.d.ts.map +1 -0
- package/dist/tests/snapshotPersistence.real.test.js +310 -0
- package/dist/tests/snapshotPersistence.real.test.js.map +1 -0
- package/dist/tests/webServerRuntime.test.d.ts +2 -0
- package/dist/tests/webServerRuntime.test.d.ts.map +1 -0
- package/dist/tests/webServerRuntime.test.js +123 -0
- package/dist/tests/webServerRuntime.test.js.map +1 -0
- package/dist/transport/createSnapshotToolRuntime.d.ts +7 -0
- package/dist/transport/createSnapshotToolRuntime.d.ts.map +1 -0
- package/dist/transport/createSnapshotToolRuntime.js +40 -0
- package/dist/transport/createSnapshotToolRuntime.js.map +1 -0
- package/dist/transport/httpSnapshotServer.d.ts +11 -0
- package/dist/transport/httpSnapshotServer.d.ts.map +1 -0
- package/dist/transport/httpSnapshotServer.js +216 -0
- package/dist/transport/httpSnapshotServer.js.map +1 -0
- package/dist/transport/mcpToolRouter.d.ts +81 -0
- package/dist/transport/mcpToolRouter.d.ts.map +1 -0
- package/dist/transport/mcpToolRouter.js +416 -0
- package/dist/transport/mcpToolRouter.js.map +1 -0
- package/dist/transport/webServerRuntime.d.ts +17 -0
- package/dist/transport/webServerRuntime.d.ts.map +1 -0
- package/dist/transport/webServerRuntime.js +73 -0
- package/dist/transport/webServerRuntime.js.map +1 -0
- package/dist/utils/swaggerCache.d.ts +4 -0
- package/dist/utils/swaggerCache.d.ts.map +1 -1
- package/dist/utils/swaggerCache.js +8 -0
- package/dist/utils/swaggerCache.js.map +1 -1
- package/dist/utils/types.d.ts +2 -1
- package/dist/utils/types.d.ts.map +1 -1
- package/dist/utils/types.js +2 -0
- package/dist/utils/types.js.map +1 -1
- package/dist/web/dashboard.css +411 -0
- package/dist/web/dashboard.html +141 -0
- package/dist/web/dashboard.js +540 -0
- 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 파일을
|
|
3
|
+
Swagger/OpenAPI JSON 파일을 파싱하고, snapshot 캡처 및 diff 조회까지 지원하는 MCP 서버입니다.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
MCP 클라이언트에서 API 문서 분석과 변경 추적을 함께 사용할 수 있습니다.
|
|
6
6
|
|
|
7
7
|
## 주요 기능
|
|
8
8
|
|
|
9
|
-
-
|
|
10
|
-
-
|
|
11
|
-
-
|
|
12
|
-
-
|
|
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
|
-
|
|
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
|
-
|
|
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": "
|
|
71
|
-
"args": ["
|
|
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
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
61
|
+
주의:
|
|
62
|
+
|
|
63
|
+
- README나 저장소에는 실제 DB 주소, 계정, 비밀번호를 커밋하지 마세요.
|
|
64
|
+
- 실제 값은 각자 로컬 MCP 설정 파일이나 사내 비밀 관리 수단에만 넣어야 합니다.
|
|
65
|
+
- snapshot/diff는 현재 설정된 `PROJECT_KEY` + `SWAGGER_URL` source에 고정됩니다.
|
|
66
|
+
- 보통 API source 하나당 MCP 서버 엔트리 하나로 등록하는 것이 가장 단순합니다.
|
|
67
|
+
|
|
68
|
+
## 환경 변수
|
|
82
69
|
|
|
83
|
-
|
|
70
|
+
필수:
|
|
84
71
|
|
|
85
|
-
|
|
72
|
+
- `DATABASE_URL`: snapshot/diff 저장용 Postgres 연결 문자열
|
|
73
|
+
- `PROJECT_KEY`: source 식별자. 영문, 숫자, `.`, `_`, `-`만 허용
|
|
74
|
+
- `SWAGGER_URL`: 캡처 대상 OpenAPI JSON URL
|
|
86
75
|
|
|
87
|
-
|
|
76
|
+
선택:
|
|
88
77
|
|
|
89
|
-
|
|
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
|
-
|
|
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
|
-
|
|
102
|
-
pet 컨트롤러의 모든 API를 보여줘
|
|
102
|
+
⚠️ JSON 형태의 Swagger/OpenAPI 문서를 반환하는 URL이어야 합니다.
|
|
103
103
|
|
|
104
|
-
|
|
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
|
-
|
|
123
|
+
```bash
|
|
124
|
+
pnpm run dev
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
HTTP 서버만 실행:
|
|
114
128
|
|
|
115
129
|
```bash
|
|
116
|
-
|
|
130
|
+
pnpm run dev:http
|
|
117
131
|
```
|
|
118
132
|
|
|
119
|
-
|
|
133
|
+
Postgres migration 실행:
|
|
120
134
|
|
|
121
|
-
|
|
135
|
+
```bash
|
|
136
|
+
DATABASE_URL=postgresql://<user>:<pass>@<host>:5432/<db> pnpm run migrate
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
## 테스트
|
|
122
140
|
|
|
123
|
-
|
|
124
|
-
import { SwaggerParserClient } from './example-client.js';
|
|
141
|
+
메모리 DB 기반 회귀 테스트:
|
|
125
142
|
|
|
126
|
-
|
|
127
|
-
|
|
143
|
+
```bash
|
|
144
|
+
pnpm run test:db:mem
|
|
145
|
+
```
|
|
128
146
|
|
|
129
|
-
|
|
130
|
-
const controllers = await client.getControllers(url);
|
|
131
|
-
const paths = await client.getPathsByController(url, "users");
|
|
147
|
+
실 Postgres 영속성 테스트:
|
|
132
148
|
|
|
133
|
-
|
|
149
|
+
```bash
|
|
150
|
+
TEST_DATABASE_URL=postgresql://<user>:<pass>@<host>:5432/<db> pnpm run test:db:real
|
|
134
151
|
```
|
|
135
152
|
|
|
136
|
-
##
|
|
153
|
+
## 선택 사항: Read-only Dashboard
|
|
137
154
|
|
|
138
|
-
|
|
139
|
-
|
|
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
|
-
###
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
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 @@
|
|
|
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 @@
|
|
|
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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"}
|