Files
auto-trade/lib/kis/config.ts

84 lines
2.3 KiB
TypeScript
Raw Permalink Normal View History

2026-02-06 17:50:35 +09:00
/**
* @file lib/kis/config.ts
* @description KIS (real/mock) /
*/
export type KisTradingEnv = "real" | "mock";
export interface KisCredentialInput {
tradingEnv?: KisTradingEnv;
appKey?: string;
appSecret?: string;
baseUrl?: string;
}
export interface KisConfig {
tradingEnv: KisTradingEnv;
appKey: string;
appSecret: string;
baseUrl: string;
}
const DEFAULT_KIS_REAL_BASE_URL = "https://openapi.koreainvestment.com:9443";
const DEFAULT_KIS_MOCK_BASE_URL = "https://openapivts.koreainvestment.com:29443";
const DEFAULT_KIS_REAL_WS_URL = "ws://ops.koreainvestment.com:21000";
const DEFAULT_KIS_MOCK_WS_URL = "ws://ops.koreainvestment.com:31000";
/**
* .
* @param value
* @returns real | mock
*/
export function normalizeTradingEnv(value?: string): KisTradingEnv {
return (value ?? "mock").toLowerCase() === "real" ? "real" : "mock";
}
/**
* KIS URL을 .
* @param tradingEnvInput (real/mock)
* @returns websocket base url
*/
export function getKisWebSocketUrl(tradingEnvInput?: KisTradingEnv) {
const tradingEnv = normalizeTradingEnv(tradingEnvInput);
if (tradingEnv === "real") {
return DEFAULT_KIS_REAL_WS_URL;
2026-02-06 17:50:35 +09:00
}
return DEFAULT_KIS_MOCK_WS_URL;
2026-02-06 17:50:35 +09:00
}
/**
* .
* @param input ( )
* @returns
*/
export function hasKisConfig(input?: KisCredentialInput) {
return Boolean(input?.appKey?.trim() && input?.appSecret?.trim());
2026-02-06 17:50:35 +09:00
}
/**
* KIS .
* @param input ()
* @returns tradingEnv/appKey/appSecret/baseUrl
*/
export function getKisConfig(input?: KisCredentialInput): KisConfig {
if (input?.appKey?.trim() && input?.appSecret?.trim()) {
2026-02-06 17:50:35 +09:00
const tradingEnv = normalizeTradingEnv(input.tradingEnv);
const baseUrl =
input.baseUrl ??
(tradingEnv === "real" ? DEFAULT_KIS_REAL_BASE_URL : DEFAULT_KIS_MOCK_BASE_URL);
return {
tradingEnv,
appKey: input.appKey.trim(),
appSecret: input.appSecret.trim(),
2026-02-06 17:50:35 +09:00
baseUrl,
};
}
throw new Error(
"KIS API 키가 없습니다. 설정 화면에서 앱 키와 앱 시크릿을 먼저 입력해 주세요.",
);
2026-02-06 17:50:35 +09:00
}