Large update across server and web clients: regenerated/added many spacetime-client module bindings and input types (including new delete/work_delete input types and numerous procedure/reducer files), updates to server-rs API modules (bark_battle, jump_hop, wooden_fish, auth, module-runtime and shared contracts), and fixes in module-runtime behavior and domain logic. Frontend changes include new/updated components and tests (creative audio helpers, bark-battle/jump-hop/wooden-fish clients and views, unified generation pages, RPG entry views, and runtime shells), plus CSS and service updates. Documentation and operational notes updated (.hermes pitfalls and multiple PRD/docs) to cover daily-task refresh, banner asset fallback, recommend-key bug, and other platform behaviors. Tests and verification steps added/updated alongside these changes.
36 lines
962 B
TypeScript
36 lines
962 B
TypeScript
export type CreativeAudioAsset = {
|
|
assetId: string;
|
|
audioSrc: string;
|
|
audioObjectKey: string;
|
|
assetObjectId: string;
|
|
source: string;
|
|
prompt?: string | null;
|
|
durationMs?: number | null;
|
|
};
|
|
|
|
export function readCreativeAudioFileAsAsset<TAsset extends CreativeAudioAsset>(
|
|
file: File,
|
|
source: 'uploaded' | 'recorded',
|
|
) {
|
|
return new Promise<TAsset>((resolve, reject) => {
|
|
const reader = new FileReader();
|
|
reader.onerror = () => reject(new Error('音频读取失败,请重试。'));
|
|
reader.onload = () => {
|
|
if (typeof reader.result !== 'string') {
|
|
reject(new Error('音频读取失败,请重试。'));
|
|
return;
|
|
}
|
|
resolve({
|
|
assetId: `local-${source}-${Date.now()}`,
|
|
audioSrc: reader.result,
|
|
audioObjectKey: '',
|
|
assetObjectId: '',
|
|
source,
|
|
prompt: file.name,
|
|
durationMs: null,
|
|
} as TAsset);
|
|
};
|
|
reader.readAsDataURL(file);
|
|
});
|
|
}
|