import type { KisRuntimeCredentials } from "@/features/dashboard/store/use-kis-runtime-store"; import type { DashboardKisRevokeResponse, DashboardKisValidateResponse, DashboardKisWsApprovalResponse, } from "@/features/dashboard/types/dashboard.types"; /** * KIS API 키 검증 요청 * @param credentials 검증할 키 정보 */ export async function validateKisCredentials( credentials: KisRuntimeCredentials, ): Promise { const response = await fetch("/api/kis/validate", { method: "POST", headers: { "content-type": "application/json", }, body: JSON.stringify(credentials), cache: "no-store", }); const payload = (await response.json()) as DashboardKisValidateResponse; if (!response.ok || !payload.ok) { throw new Error(payload.message || "API 키 검증에 실패했습니다."); } return payload; } /** * KIS 접근토큰 폐기 요청 * @param credentials 폐기할 키 정보 */ export async function revokeKisCredentials( credentials: KisRuntimeCredentials, ): Promise { const response = await fetch("/api/kis/revoke", { method: "POST", headers: { "content-type": "application/json", }, body: JSON.stringify(credentials), cache: "no-store", }); const payload = (await response.json()) as DashboardKisRevokeResponse; if (!response.ok || !payload.ok) { throw new Error(payload.message || "API 키 접근 폐기에 실패했습니다."); } return payload; } /** * KIS 실시간 웹소켓 승인키 발급 요청 * @param credentials 인증 정보 */ export async function fetchKisWebSocketApproval( credentials: KisRuntimeCredentials, ): Promise { const response = await fetch("/api/kis/ws/approval", { method: "POST", headers: { "content-type": "application/json", }, body: JSON.stringify(credentials), cache: "no-store", }); const payload = (await response.json()) as DashboardKisWsApprovalResponse; if (!response.ok || !payload.ok || !payload.approvalKey || !payload.wsUrl) { throw new Error( payload.message || "KIS 실시간 웹소켓 승인키 발급에 실패했습니다.", ); } return payload; }