import type { CreateVisualNovelBackgroundMusicRequest, CreateVisualNovelSoundEffectRequest, PublishVisualNovelGeneratedAudioAssetRequest, VisualNovelAudioGenerationTaskResponse, VisualNovelGeneratedAudioAssetResponse, } from '../../../packages/shared/src/contracts/visualNovel'; import { type ApiRetryOptions, requestJson } from '../apiClient'; const VISUAL_NOVEL_AUDIO_API_BASE = '/api/creation/visual-novel/audio'; const VISUAL_NOVEL_AUDIO_RETRY: ApiRetryOptions = { maxRetries: 1, baseDelayMs: 500, maxDelayMs: 1200, retryUnsafeMethods: true, }; export function createVisualNovelBackgroundMusicTask( payload: CreateVisualNovelBackgroundMusicRequest, ) { return requestJson( `${VISUAL_NOVEL_AUDIO_API_BASE}/background-music`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(payload), }, '提交背景音乐生成失败', { retry: VISUAL_NOVEL_AUDIO_RETRY, timeoutMs: 20000 }, ); } export function publishVisualNovelBackgroundMusicAsset( taskId: string, payload: PublishVisualNovelGeneratedAudioAssetRequest, ) { return requestJson( `${VISUAL_NOVEL_AUDIO_API_BASE}/background-music/${encodeURIComponent(taskId)}/asset`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(payload), }, '生成背景音乐素材失败', { retry: VISUAL_NOVEL_AUDIO_RETRY, timeoutMs: 30000 }, ); } export function createVisualNovelSoundEffectTask( payload: CreateVisualNovelSoundEffectRequest, ) { return requestJson( `${VISUAL_NOVEL_AUDIO_API_BASE}/sound-effect`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(payload), }, '提交音效生成失败', { retry: VISUAL_NOVEL_AUDIO_RETRY, timeoutMs: 20000 }, ); } export function publishVisualNovelSoundEffectAsset( taskId: string, payload: PublishVisualNovelGeneratedAudioAssetRequest, ) { return requestJson( `${VISUAL_NOVEL_AUDIO_API_BASE}/sound-effect/${encodeURIComponent(taskId)}/asset`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(payload), }, '生成音效素材失败', { retry: VISUAL_NOVEL_AUDIO_RETRY, timeoutMs: 30000 }, ); }