import axios from 'axios' import * as SecureStore from 'expo-secure-store' import { API_BASE } from '../constants/Config' const client = axios.create({ baseURL: API_BASE, timeout: 15000, // 자체서명 인증서 허용 (개발/테스트) }) client.interceptors.request.use(async (cfg) => { const token = await SecureStore.getItemAsync('grd_token') if (token) cfg.headers.Authorization = `Bearer ${token}` return cfg }) client.interceptors.response.use( (r) => r, async (err) => { if (err.response?.status === 401) { await SecureStore.deleteItemAsync('grd_token') await SecureStore.deleteItemAsync('grd_user') } return Promise.reject(err) } ) /* ── 인증 ── */ export const login = (username: string, password: string) => client.post('/api/auth/login', { username, password }) export const getMe = () => client.get('/api/auth/me') /* ── 대시보드 ── */ export const getDashboard = () => client.get('/api/dashboard') /* ── SR ── */ export const getSRList = (page = 0, size = 20) => client.get(`/api/tasks?page=${page}&size=${size}`) export const getSRDetail = (id: number) => client.get(`/api/tasks/${id}`) export const createSR = (data: { title: string; description: string; priority: string; sr_type: string }) => client.post('/api/tasks', data) export const updateSRStatus = (id: number, status: string) => client.patch(`/api/tasks/${id}/status`, { status }) /* ── AI 챗봇 ── */ export const sendAIMessage = (message: string) => client.post('/api/chatbot/message', { message }) /* ── 라이선스 ── */ export const getLicenseStatus = () => client.get('/api/license/status') /* ── 알림 ── */ export const getNotifications = () => client.get('/api/notifications?size=30') export const markNotificationRead = (id: number) => client.patch(`/api/notifications/${id}/read`) /* ── DR 자동화 ── */ export const getDRDashboard = () => client.get('/api/dr/dashboard') export const getDRRtoRpo = () => client.get('/api/dr/rto-rpo') export const getDRScenarios = () => client.get('/api/dr/scenarios') export const runDRTest = (scenarioId: number) => client.post('/api/dr/test', { scenario_id: scenarioId, test_type: 'RECOVERY' }) /* ── 네트워크 장비 ── */ export const getNetworkDevices = (instId?: number) => client.get('/api/network/devices', { params: instId ? { inst_id: instId } : {} }) export const getNetworkTopology = () => client.get('/api/network/topology') export const backupNetworkDevice = (id: number) => client.post(`/api/network/devices/${id}/backup`) export const getNetworkDiff = (id: number) => client.get(`/api/network/devices/${id}/diff`) /* ── CSAP 점검 ── */ export const getCSAPDashboard = () => client.get('/api/compliance/csap/dashboard') export const getCSAPItems = () => client.get('/api/compliance/csap/items') export const getCSAPResults = () => client.get('/api/compliance/csap/results') export default client