POST
/api/playground/run플레이그라운드 서버사이드 릴레이
API 라우트: POST /api/playground/run — 플레이그라운드 서버사이드 릴레이 목적: /playground(#200 표면 ③)의 "외부 계약" 케이스가 SXE_INGEST_SECRET(Bearer)을 브라우저에 노출하지 않고 external 계약 라우트를 실행하게 한다. 릴레이는 자기 자신을 루프백(env.SELF_BASE_URL)으로 **실제 HTTP 호출** — 가짜 응답 없이 external 라우트의 인증·검증·로직을 그대로 태운다(공개 도메인 경유 금지, #194 함정). 보안: 고정 케이스 화이트리스트(z.enum)만 허용 — 범용 프록시 아님. ingest-demo(쓰기)는 requireProjectAccess 로 대상 프로젝트 접근 권한을 강제하고, externalRef 를 `playground:demo:{projectId}` 로 고정해 재실행 시 같은 이슈에 멱등 upsert(오염 최소화), notify:false 로 알림/토스트를 억제한다. 정리(소프트삭제)는 페이지가 DELETE /api/issues/{issueId} 로 수행(흔적 복원). @author jijuta ([email protected]) @since 2026-07-06
Request body
caseenumrequiredingest-statusresolve-projectingest-demoanalysisIdstringResponses
200 성공400 입력 검증 실패(zod)401 미인증(JWT 쿠키 필요)403 권한 없음404 없음
cURL
curl -X POST https://sit.in-bridge.com/api/playground/run \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"case":"ingest-status","analysisId":"string"}'JavaScript
const res = await fetch("https://sit.in-bridge.com/api/playground/run", {
method: "POST",
headers: {
"Authorization": `Bearer ${token}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"case": "ingest-status",
"analysisId": "string"
})
});
const data = await res.json();