83 lines
2.3 KiB
TypeScript
83 lines
2.3 KiB
TypeScript
import type { KisRuntimeCredentials } from "@/features/settings/store/use-kis-runtime-store";
|
|
import {
|
|
DOMESTIC_KIS_SESSION_OVERRIDE_HEADER,
|
|
DOMESTIC_KIS_SESSION_OVERRIDE_STORAGE_KEY,
|
|
parseDomesticKisSession,
|
|
} from "@/lib/kis/domestic-market-session";
|
|
|
|
export interface KisApiErrorPayload {
|
|
ok?: boolean;
|
|
message?: string;
|
|
error?: string;
|
|
errorCode?: string;
|
|
}
|
|
|
|
interface BuildKisRequestHeadersOptions {
|
|
jsonContentType?: boolean;
|
|
includeAccountNo?: boolean;
|
|
includeSessionOverride?: boolean;
|
|
}
|
|
|
|
/**
|
|
* @description KIS API 응답에서 사용자 노출용 에러 메시지를 추출합니다.
|
|
* @see features/trade/apis/kis-stock.api.ts 종목/주문 API 실패 처리
|
|
* @see features/dashboard/apis/dashboard.api.ts 대시보드 API 실패 처리
|
|
*/
|
|
export function resolveKisApiErrorMessage(
|
|
payload: unknown,
|
|
fallbackMessage: string,
|
|
) {
|
|
if (!payload || typeof payload !== "object") {
|
|
return fallbackMessage;
|
|
}
|
|
|
|
const response = payload as KisApiErrorPayload;
|
|
return response.message || response.error || fallbackMessage;
|
|
}
|
|
|
|
/**
|
|
* @description KIS API 호출용 공통 헤더를 생성합니다.
|
|
* @see features/dashboard/apis/dashboard.api.ts 잔고/지수/활동 조회 공통 헤더
|
|
* @see features/trade/apis/kis-stock.api.ts 종목/호가/차트/주문 공통 헤더
|
|
*/
|
|
export function buildKisRequestHeaders(
|
|
credentials: KisRuntimeCredentials,
|
|
options?: BuildKisRequestHeadersOptions,
|
|
) {
|
|
const headers: Record<string, string> = {
|
|
"x-kis-app-key": credentials.appKey,
|
|
"x-kis-app-secret": credentials.appSecret,
|
|
"x-kis-trading-env": credentials.tradingEnv,
|
|
};
|
|
|
|
if (options?.jsonContentType) {
|
|
headers["content-type"] = "application/json";
|
|
}
|
|
|
|
if (options?.includeAccountNo && credentials.accountNo.trim()) {
|
|
headers["x-kis-account-no"] = credentials.accountNo.trim();
|
|
}
|
|
|
|
if (options?.includeSessionOverride) {
|
|
const sessionOverride = readSessionOverrideForDev();
|
|
if (sessionOverride) {
|
|
headers[DOMESTIC_KIS_SESSION_OVERRIDE_HEADER] = sessionOverride;
|
|
}
|
|
}
|
|
|
|
return headers;
|
|
}
|
|
|
|
function readSessionOverrideForDev() {
|
|
if (typeof window === "undefined") return null;
|
|
|
|
try {
|
|
const raw = window.localStorage.getItem(
|
|
DOMESTIC_KIS_SESSION_OVERRIDE_STORAGE_KEY,
|
|
);
|
|
return parseDomesticKisSession(raw);
|
|
} catch {
|
|
return null;
|
|
}
|
|
}
|