76 lines
2.6 KiB
TypeScript
76 lines
2.6 KiB
TypeScript
import { fetchJson, parseApiErrorMessage, saveJsonObject } from './jsonClient';
|
|
|
|
export const EDITOR_API_BASE_PATH = '/api/editor';
|
|
export const ASSETS_API_BASE_PATH = '/api/assets';
|
|
|
|
export const EDITOR_JSON_RESOURCE_IDS = {
|
|
itemOverrides: 'item-overrides',
|
|
npcVisualOverrides: 'npc-visual-overrides',
|
|
npcLayoutConfig: 'npc-layout-config',
|
|
characterOverrides: 'character-overrides',
|
|
monsterOverrides: 'monster-overrides',
|
|
sceneOverrides: 'scene-overrides',
|
|
sceneNpcOverrides: 'scene-npc-overrides',
|
|
stateFunctionOverrides: 'state-function-overrides',
|
|
} as const;
|
|
|
|
export type EditorJsonResourceId =
|
|
(typeof EDITOR_JSON_RESOURCE_IDS)[keyof typeof EDITOR_JSON_RESOURCE_IDS];
|
|
|
|
export const ASSET_API_PATHS = {
|
|
characterWorkflowCache: `${ASSETS_API_BASE_PATH}/character-workflow-cache`,
|
|
characterVisualGenerate: `${ASSETS_API_BASE_PATH}/character-visual/generate`,
|
|
characterVisualPublish: `${ASSETS_API_BASE_PATH}/character-visual/publish`,
|
|
characterVisualJobs: `${ASSETS_API_BASE_PATH}/character-visual/jobs`,
|
|
characterAnimationGenerate: `${ASSETS_API_BASE_PATH}/character-animation/generate`,
|
|
characterAnimationPublish: `${ASSETS_API_BASE_PATH}/character-animation/publish`,
|
|
characterAnimationJobs: `${ASSETS_API_BASE_PATH}/character-animation/jobs`,
|
|
characterAnimationImportVideo: `${ASSETS_API_BASE_PATH}/character-animation/import-video`,
|
|
characterAnimationTemplates: `${ASSETS_API_BASE_PATH}/character-animation/templates`,
|
|
} as const;
|
|
|
|
export const EDITOR_ITEM_CATALOG_API_PATH =
|
|
`${EDITOR_API_BASE_PATH}/catalog/items`;
|
|
|
|
export function buildEditorJsonApiPath(resourceId: EditorJsonResourceId) {
|
|
return `${EDITOR_API_BASE_PATH}/json/${resourceId}`;
|
|
}
|
|
|
|
export function fetchEditorJsonResource<T>(
|
|
resourceId: EditorJsonResourceId,
|
|
fallbackMessage = '读取失败',
|
|
) {
|
|
return fetchJson<T>(buildEditorJsonApiPath(resourceId), fallbackMessage);
|
|
}
|
|
|
|
export function saveEditorJsonResource(
|
|
resourceId: EditorJsonResourceId,
|
|
payload: Record<string, unknown>,
|
|
fallbackMessage = '保存失败',
|
|
) {
|
|
return saveJsonObject(
|
|
buildEditorJsonApiPath(resourceId),
|
|
payload,
|
|
fallbackMessage,
|
|
);
|
|
}
|
|
|
|
export async function postApiJson<T>(
|
|
url: string,
|
|
payload: Record<string, unknown>,
|
|
fallbackMessage: string,
|
|
) {
|
|
const response = await fetch(url, {
|
|
method: 'POST',
|
|
headers: { 'Content-Type': 'application/json' },
|
|
body: JSON.stringify(payload),
|
|
});
|
|
const responseText = await response.text();
|
|
|
|
if (!response.ok) {
|
|
throw new Error(parseApiErrorMessage(responseText, fallbackMessage));
|
|
}
|
|
|
|
return responseText ? (JSON.parse(responseText) as T) : ({} as T);
|
|
}
|