import apiService from './api.service' import { store } from '@/store' import { MigrateLogEntry, SetupStatusDto } from '@/proxy/setup/models' export const getSetupStatus = () => apiService.fetchData({ method: 'GET', url: '/api/setup/application-status', }) export const getMigrateUrl = (): string => { const base = import.meta.env.VITE_API_URL ?? '' return `${base}/api/setup/migrate` } export const streamSetupMigrate = async ( onLog: (entry: MigrateLogEntry) => void, onDone: () => void, onError: (err: unknown) => void, ): Promise => { const token = store.getState().auth.session.token const url = getMigrateUrl() try { const response = await fetch(url, { method: 'POST', headers: { ...(token ? { Authorization: `Bearer ${token}` } : {}), Accept: 'text/event-stream', }, }) if (!response.ok) { onError(new Error(`HTTP ${response.status}`)) return } const reader = response.body?.getReader() if (!reader) { onError(new Error('No response body')) return } const decoder = new TextDecoder() let buffer = '' while (true) { const { done, value } = await reader.read() if (done) break buffer += decoder.decode(value, { stream: true }) const lines = buffer.split('\n') buffer = lines.pop() ?? '' for (const line of lines) { if (line.startsWith('data: ')) { try { const data = JSON.parse(line.slice(6)) as MigrateLogEntry onLog(data) } catch { /* parse hatası, atla */ } } } } onDone() } catch (err) { onError(err) } }