import type { CustomWorldGalleryDetailResponse, CustomWorldGalleryResponse, CustomWorldLibraryMutationResponse, CustomWorldLibraryResponse, } from '../../../packages/shared/src/contracts/runtime'; import type { CustomWorldProfile } from '../../types'; import { requestPublicRpgCreationRuntimeJson, requestRpgCreationRuntimeJson, type RpgCreationRuntimeRequestOptions, } from './rpgCreationRuntimeClient'; export async function listRpgWorldLibrary( options: RpgCreationRuntimeRequestOptions = {}, ) { const response = await requestRpgCreationRuntimeJson< CustomWorldLibraryResponse >( '/custom-world-library', { method: 'GET' }, '读取自定义世界库失败', options, ); return Array.isArray(response?.entries) ? response.entries : []; } export async function upsertRpgWorldProfile( profile: CustomWorldProfile, request: { sourceAgentSessionId?: string | null; } = {}, options: RpgCreationRuntimeRequestOptions = {}, ) { const response = await requestRpgCreationRuntimeJson< CustomWorldLibraryMutationResponse >( `/custom-world-library/${encodeURIComponent(profile.id)}`, { method: 'PUT', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ profile, sourceAgentSessionId: request.sourceAgentSessionId ?? null, }), }, '保存自定义世界失败', options, ); return { entry: response.entry, entries: Array.isArray(response?.entries) ? response.entries : [], }; } export async function deleteRpgWorldProfile( profileId: string, options: RpgCreationRuntimeRequestOptions = {}, ) { const response = await requestRpgCreationRuntimeJson< CustomWorldLibraryResponse >( `/custom-world-library/${encodeURIComponent(profileId)}`, { method: 'DELETE' }, '删除自定义世界失败', options, ); return Array.isArray(response?.entries) ? response.entries : []; } export async function publishRpgWorldProfile( profileId: string, options: RpgCreationRuntimeRequestOptions = {}, ) { const response = await requestRpgCreationRuntimeJson< CustomWorldLibraryMutationResponse >( `/custom-world-library/${encodeURIComponent(profileId)}/publish`, { method: 'POST' }, '发布自定义世界失败', options, ); return { entry: response.entry, entries: Array.isArray(response?.entries) ? response.entries : [], }; } export async function unpublishRpgWorldProfile( profileId: string, options: RpgCreationRuntimeRequestOptions = {}, ) { const response = await requestRpgCreationRuntimeJson< CustomWorldLibraryMutationResponse >( `/custom-world-library/${encodeURIComponent(profileId)}/unpublish`, { method: 'POST' }, '下架自定义世界失败', options, ); return { entry: response.entry, entries: Array.isArray(response?.entries) ? response.entries : [], }; } export async function listRpgWorldGallery( options: RpgCreationRuntimeRequestOptions = {}, ) { const response = await requestPublicRpgCreationRuntimeJson( '/custom-world-gallery', { method: 'GET' }, '读取作品广场失败', options, ); return Array.isArray(response?.entries) ? response.entries : []; } export async function getRpgWorldGalleryDetail( ownerUserId: string, profileId: string, options: RpgCreationRuntimeRequestOptions = {}, ) { const response = await requestPublicRpgCreationRuntimeJson< CustomWorldGalleryDetailResponse >( `/custom-world-gallery/${encodeURIComponent(ownerUserId)}/${encodeURIComponent(profileId)}`, { method: 'GET' }, '读取作品详情失败', options, ); return response.entry; } /** * 工作包 D 把作品库与作品广场请求迁入 RPG 创作域 client, * 后续前端调用优先从这里进入,不再反向依赖通用存储聚合层。 */ export const rpgCreationLibraryClient = { listLibrary: listRpgWorldLibrary, upsertProfile: upsertRpgWorldProfile, deleteProfile: deleteRpgWorldProfile, publishProfile: publishRpgWorldProfile, unpublishProfile: unpublishRpgWorldProfile, listGallery: listRpgWorldGallery, getGalleryDetail: getRpgWorldGalleryDetail, };