import { request } from '@/utils/request' import { unwrapApiResponse, unwrapNullableApiResponse, isSuccessCode } from '@/utils/api-response' import type { ApiResponse } from '@/types/common' import type { DocumentFont } from '../../../../packages/document-fonts' export type { DocumentFont } from '../../../../packages/document-fonts' export interface FontRecord extends DocumentFont { enabled: boolean createdAt: string } export interface FontNodeCheck { fontId: string node: string available: boolean message: string checkedAt: string } export interface FontSettings { nodes: FontNodeCheck[] defaultFontId: string | null fonts: FontRecord[] legacyFileReadable: boolean } export interface FontFaceInfo { index: number name: string style: string } export interface FontCheck { available: boolean message: string node: string checkedAt: string } const base = '/v1/document-fonts' const longRequest = { timeout: 90000 } export const getDocumentFontSettings = () => request.get>(base).then(unwrapApiResponse) export const getDefaultDocumentFont = () => request.get>(`${base}/current`).then(unwrapNullableApiResponse) export const inspectDocumentFont = (file: File) => { const form = new FormData() form.append('file', file) return request .post>(`${base}/inspect`, form, longRequest) .then(unwrapApiResponse) } export const uploadDocumentFont = (form: FormData) => request.post>(base, form, longRequest).then(unwrapApiResponse) export const checkDocumentFont = (id: string) => request .post>(`${base}/${id}/check`, undefined, longRequest) .then(unwrapApiResponse) export const previewDocumentFont = (id: string) => request.get(`${base}/${id}/preview`, { ...longRequest, responseType: 'blob' }) function requireSuccess(response: ApiResponse) { if (!isSuccessCode(response.code)) throw new Error(response.message || '设置失败') } export const activateDocumentFont = (id: string) => request .put>(`${base}/${id}/default`, undefined, longRequest) .then(requireSuccess) export const setDocumentFontEnabled = (id: string, enabled: boolean) => request.put>(`${base}/${id}/status`, { enabled }).then(requireSuccess)