Files
auto-trade/features/dashboard/store/use-kis-runtime-store.ts

141 lines
4.3 KiB
TypeScript
Raw Normal View History

2026-02-06 17:50:35 +09:00
"use client";
import { create } from "zustand";
import { createJSONStorage, persist } from "zustand/middleware";
import type { KisTradingEnv } from "@/features/dashboard/types/dashboard.types";
/**
* @file features/dashboard/store/use-kis-runtime-store.ts
* @description KIS / zustand로 .
*/
export interface KisRuntimeCredentials {
appKey: string;
appSecret: string;
tradingEnv: KisTradingEnv;
}
interface KisRuntimeStoreState {
// [State] 입력 폼 상태
kisTradingEnvInput: KisTradingEnv;
kisAppKeyInput: string;
kisAppSecretInput: string;
// [State] 검증/연동 상태
verifiedCredentials: KisRuntimeCredentials | null;
isKisVerified: boolean;
tradingEnv: KisTradingEnv;
}
interface KisRuntimeStoreActions {
/**
* .
* @param tradingEnv
* @see features/dashboard/components/dashboard-main.tsx onClick
*/
setKisTradingEnvInput: (tradingEnv: KisTradingEnv) => void;
/**
* .
* @param appKey
* @see features/dashboard/components/dashboard-main.tsx App Key onChange
*/
setKisAppKeyInput: (appKey: string) => void;
/**
* 릿 .
* @param appSecret 릿
* @see features/dashboard/components/dashboard-main.tsx App Secret onChange
*/
setKisAppSecretInput: (appSecret: string) => void;
/**
* .
* @param credentials
* @param tradingEnv
* @see features/dashboard/components/dashboard-main.tsx handleValidateKis
*/
setVerifiedKisSession: (credentials: KisRuntimeCredentials, tradingEnv: KisTradingEnv) => void;
/**
* .
* @see features/dashboard/components/dashboard-main.tsx handleValidateKis catch
*/
invalidateKisVerification: () => void;
/**
* / .
* @param tradingEnv
* @see features/dashboard/components/dashboard-main.tsx handleRevokeKis
*/
clearKisRuntimeSession: (tradingEnv: KisTradingEnv) => void;
}
const INITIAL_STATE: KisRuntimeStoreState = {
kisTradingEnvInput: "real",
kisAppKeyInput: "",
kisAppSecretInput: "",
verifiedCredentials: null,
isKisVerified: false,
tradingEnv: "real",
};
export const useKisRuntimeStore = create<KisRuntimeStoreState & KisRuntimeStoreActions>()(
persist(
(set) => ({
...INITIAL_STATE,
setKisTradingEnvInput: (tradingEnv) =>
set({
kisTradingEnvInput: tradingEnv,
verifiedCredentials: null,
isKisVerified: false,
}),
setKisAppKeyInput: (appKey) =>
set({
kisAppKeyInput: appKey,
verifiedCredentials: null,
isKisVerified: false,
}),
setKisAppSecretInput: (appSecret) =>
set({
kisAppSecretInput: appSecret,
verifiedCredentials: null,
isKisVerified: false,
}),
setVerifiedKisSession: (credentials, tradingEnv) =>
set({
verifiedCredentials: credentials,
isKisVerified: true,
tradingEnv,
}),
invalidateKisVerification: () =>
set({
verifiedCredentials: null,
isKisVerified: false,
}),
clearKisRuntimeSession: (tradingEnv) =>
set({
kisTradingEnvInput: tradingEnv,
kisAppKeyInput: "",
kisAppSecretInput: "",
verifiedCredentials: null,
isKisVerified: false,
tradingEnv,
}),
}),
{
name: "autotrade-kis-runtime-store",
storage: createJSONStorage(() => localStorage),
partialize: (state) => ({
kisTradingEnvInput: state.kisTradingEnvInput,
kisAppKeyInput: state.kisAppKeyInput,
kisAppSecretInput: state.kisAppSecretInput,
verifiedCredentials: state.verifiedCredentials,
isKisVerified: state.isKisVerified,
tradingEnv: state.tradingEnv,
}),
},
),
);