idconvert/frontend/services/uploadService.js

48 lines
1.5 KiB
JavaScript

import { ScanFactory } from './factories/scanFactory.js'
import { userService } from './userService.js'
export const uploadService = {
async scan(file) {
const config = useRuntimeConfig()
const form = new FormData()
form.append('file', file)
const token = userService.getToken()
const res = await fetch(`${config.public.apiBase}/api/scan`, {
method: 'POST',
headers: token ? { Authorization: `Bearer ${token}` } : {},
body: form,
})
if (!res.ok) {
const err = await res.json().catch(() => ({ message: 'Scan failed. Please try again.' }))
throw new Error(err.message || 'Scan failed.')
}
const data = await res.json()
return ScanFactory.fromApiResponse(data)
},
async convert(sessionId, filename = 'idconvert_export.json') {
const config = useRuntimeConfig()
const token = userService.getToken()
const res = await fetch(`${config.public.apiBase}/api/convert`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
...(token ? { Authorization: `Bearer ${token}` } : {}),
},
body: JSON.stringify({ session_id: sessionId, filename }),
})
if (!res.ok) {
const err = await res.json().catch(() => ({ message: 'Conversion failed. Please try again.' }))
if (err.error === 'INSUFFICIENT_CREDITS') throw new Error('INSUFFICIENT_CREDITS')
throw new Error(err.message || 'Conversion failed.')
}
return res.json()
},
}