Files
Genarrative/src/services/visual-novel-creation/visualNovelAudioGenerationClient.ts
T
2026-05-08 20:48:29 +08:00

80 lines
2.4 KiB
TypeScript

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<VisualNovelAudioGenerationTaskResponse>(
`${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<VisualNovelGeneratedAudioAssetResponse>(
`${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<VisualNovelAudioGenerationTaskResponse>(
`${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<VisualNovelGeneratedAudioAssetResponse>(
`${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 },
);
}